diff options
author | Thomas Albers Raviola <thomas@thomaslabs.org> | 2025-02-12 01:56:34 +0100 |
---|---|---|
committer | Thomas Albers Raviola <thomas@thomaslabs.org> | 2025-02-12 01:56:34 +0100 |
commit | 13c0217bf19a2ddfb24b673455f6d362a46ebf7b (patch) | |
tree | 6ffa6f9fd1da195d8887f2d718729a071812dfcc | |
parent | 779b9834e30de1ba0b4f0755388bebd0c45aa1dc (diff) |
Tabify source code
-rw-r--r-- | boot/devmode/bootloader.c | 389 | ||||
-rw-r--r-- | boot/devmode/crc16.c | 74 | ||||
-rw-r--r-- | boot/devmode/devmode.h | 28 | ||||
-rw-r--r-- | include/fifo.h | 26 | ||||
-rw-r--r-- | include/tft.h | 182 | ||||
-rw-r--r-- | src/font.c | 192 | ||||
-rw-r--r-- | src/main.c | 24 | ||||
-rw-r--r-- | src/menu.c | 50 | ||||
-rw-r--r-- | src/tft.c | 52 |
9 files changed, 509 insertions, 508 deletions
diff --git a/boot/devmode/bootloader.c b/boot/devmode/bootloader.c index dfa9786..dd28c34 100644 --- a/boot/devmode/bootloader.c +++ b/boot/devmode/bootloader.c @@ -14,14 +14,14 @@ crc16(const void *buf, size_t len); volatile struct fifo rx_fifo = {0, 0, {0}}; enum ack { - ACK = 0x00, - NACK = 0xFF + ACK = 0x00, + NACK = 0xFF }; void rx_isr(void) __critical __interrupt(0) { - fifo_push(&rx_fifo, sio_a_data); + fifo_push(&rx_fifo, sio_a_data); } static volatile uint32_t millis = 0; @@ -29,30 +29,30 @@ static volatile uint32_t millis = 0; void ctc1_isr(void) __critical __interrupt(1) { - millis += 5; + millis += 5; } uint32_t clock(void) { - volatile uint32_t ret; - DI; - ret = millis; - EI; - return ret; + volatile uint32_t ret; + DI; + ret = millis; + EI; + return ret; } void putbyte(unsigned char b) { - unsigned char ctrl = 0; + unsigned char ctrl = 0; - sio_a_data = b; + sio_a_data = b; - while (!(ctrl & 0x04)) { - sio_a_ctrl = 0; - ctrl = sio_a_ctrl; - } + while (!(ctrl & 0x04)) { + sio_a_ctrl = 0; + ctrl = sio_a_ctrl; + } } static volatile int32_t errno = 0; @@ -60,27 +60,27 @@ static volatile int32_t errno = 0; u8 getbyte(void) { - u8 b; - uint32_t ms = clock(); - errno = 0; - while (fifo_empty(&rx_fifo)) { - if (clock() - ms > TIMEOUT_MS) { - errno = ERR_TIMEOUT; - return 0; + u8 b; + uint32_t ms = clock(); + errno = 0; + while (fifo_empty(&rx_fifo)) { + if (clock() - ms > TIMEOUT_MS) { + errno = ERR_TIMEOUT; + return 0; + } } - } - DI; - b = fifo_pop(&rx_fifo); - EI; - return b; + DI; + b = fifo_pop(&rx_fifo); + EI; + return b; } void flush(void) { - DI; - fifo_clear(&rx_fifo); - EI; + DI; + fifo_clear(&rx_fifo); + EI; } @@ -88,252 +88,253 @@ flush(void) u8 encode(u8 x) { - u8 y = 0; - const u8 c[4] = {0x61, 0x52, 0x34, 0x78}; + u8 y = 0; + const u8 c[4] = {0x61, 0x52, 0x34, 0x78}; - for (u8 i = 0; i < 4; ++i) - y ^= ((x >> i) & 1) ? c[i] : 0; + for (u8 i = 0; i < 4; ++i) + y ^= ((x >> i) & 1) ? c[i] : 0; - return y; + return y; } // Hamming(7,4) decoding u8 decode(u8 x) { - u8 p = 0; - const u8 r[7] = {6, 5, 3, 7, 1, 2, 4}; + u8 p = 0; + const u8 r[7] = {6, 5, 3, 7, 1, 2, 4}; - for (int i = 0; i < 7; ++i) - p ^= ((x >> i) & 1) ? r[i] : 0; + for (int i = 0; i < 7; ++i) + p ^= ((x >> i) & 1) ? r[i] : 0; - // Assume simple error, attempt correction - if (p) { - size_t i = 0; + // Assume simple error, attempt correction + if (p) { + size_t i = 0; - for (i = 0; i < LENGTH(r); ++i) { - if (r[i] == x) - break; - } + for (i = 0; i < LENGTH(r); ++i) { + if (r[i] == x) + break; + } - x ^= (1 << i); - } + x ^= (1 << i); + } - return x & 0x0F; + return x & 0x0F; } int read(void *buf, size_t count) { - u8 b; - u8 *p = buf; + u8 b; + u8 *p = buf; - for (int n = 0; n < count; ++n) { - b = decode(getbyte()); - if (errno) - return errno; + for (int n = 0; n < count; ++n) { + b = decode(getbyte()); + if (errno) + return errno; - b |= (decode(getbyte()) << 4); - if (errno) - return errno; + b |= (decode(getbyte()) << 4); + if (errno) + return errno; - p[n] = b; - } + p[n] = b; + } - return 0; + return 0; } int write(const void *buf, size_t count) { - const u8 *p = buf; + const u8 *p = buf; - for (size_t i = 0; i < count; ++i) { - putbyte(encode(p[i] & 0x0F)); - putbyte(encode((p[i] >> 4) & 0x0F)); - } + for (size_t i = 0; i < count; ++i) { + putbyte(encode(p[i] & 0x0F)); + putbyte(encode((p[i] >> 4) & 0x0F)); + } - return 0; + return 0; } int read_header(struct header *header) { - int err; - u8 ack; - u16 checksum; - - while (1) { - if ((err = read(header, sizeof(*header)))) - return err; - - checksum = header->checksum; - header->checksum = 0; - - if (checksum == crc16(header, sizeof(*header))) { - header->checksum = checksum; - ack = ACK; - write(&ack, sizeof(ack)); - return 0; - } else { - ack = NACK; - write(&ack, sizeof(ack)); + int err; + u8 ack; + u16 checksum; + + while (1) { + if ((err = read(header, sizeof(*header)))) + return err; + + checksum = header->checksum; + header->checksum = 0; + + if (checksum == crc16(header, sizeof(*header))) { + header->checksum = checksum; + ack = ACK; + write(&ack, sizeof(ack)); + return 0; + } else { + ack = NACK; + write(&ack, sizeof(ack)); + } } - } } int read_buf(size_t len, void *buf) { - int err; - u8 ack; - u16 checksum; - - for (int i = 0; i < MAX_TRANS_ATTEMPTS; ++i) { - // TODO: reduce code? - if ((err = read(&checksum, sizeof(checksum))) - || (err = read(buf, len))) - break; - - if (checksum == crc16(buf, len)) { - ack = ACK; - write(&ack, sizeof(ack)); - return 0; - } else { - ack = NACK; - write(&ack, sizeof(ack)); + int err; + u8 ack; + u16 checksum; + + for (int i = 0; i < MAX_TRANS_ATTEMPTS; ++i) { + // TODO: reduce code? + if ((err = read(&checksum, sizeof(checksum))) + || (err = read(buf, len))) + break; + + if (checksum == crc16(buf, len)) { + ack = ACK; + write(&ack, sizeof(ack)); + return 0; + } else { + ack = NACK; + write(&ack, sizeof(ack)); + } } - } - return -1; + return -1; } int write_buf(size_t len, const void *buf) { - int err; - u8 ack = NACK; - u16 checksum = crc16(buf, len); + int err; + u8 ack = NACK; + u16 checksum = crc16(buf, len); - for (int i = 0; i < MAX_TRANS_ATTEMPTS; ++i){ - write(&checksum, sizeof(checksum)); - write(buf, len); + for (int i = 0; i < MAX_TRANS_ATTEMPTS; ++i){ + write(&checksum, sizeof(checksum)); + write(buf, len); - // If TIMEOUT sending just give up - if ((err = read(&ack, sizeof(ack)))) - return err; + // If TIMEOUT sending just give up + if ((err = read(&ack, sizeof(ack)))) + return err; - if (ack == ACK) - return 0; - } + if (ack == ACK) + return 0; + } - return -1; + return -1; } // TODO: Restart after timeouts void loop(void) { - struct header header; - u8 buf[MAX_PACKET_SIZE]; - - while (1) { - if (read_header(&header)) { - flush(); - continue; + struct header header; + u8 buf[MAX_PACKET_SIZE]; + + while (1) { + if (read_header(&header)) { + flush(); + continue; + } + + switch (header.type) { + case CMD_BOOT: + ((void (*)(void))header.address)(); + break; + + case CMD_READ: + write_buf(header.length, (const void *)header.address); + break; + + case CMD_WRITE: + if (!read_buf(header.length, buf)) + memcpy((void *)header.address, buf, header.length); + break; + + case CMD_ECHO: + if (!read_buf(header.length, buf)) + write_buf(header.length, buf); + break; + + default: + break; + } + + flush(); } - - switch (header.type) { - case CMD_BOOT: - ((void (*)(void))header.address)(); - break; - - case CMD_READ: - write_buf(header.length, (const void *)header.address); - break; - - case CMD_WRITE: - if (!read_buf(header.length, buf)) - memcpy((void *)header.address, buf, header.length); - break; - - case CMD_ECHO: - if (!read_buf(header.length, buf)) - write_buf(header.length, buf); - break; - - default: - break; - } - - flush(); - } } static inline void init_ctc(void) { - ctc_channel_0 = CTC_CTRL(0); + ctc_channel_0 = CTC_CTRL(0); - /* 200Hz clock */ - ctc_channel_1 = CTC_CTRL(CTC_INT_BIT | CTC_PRESCALER_BIT - | CTC_TIME_CONST_BIT | CTC_RST_BIT); - ctc_channel_1 = 0; + /* 200Hz clock */ + ctc_channel_1 = CTC_CTRL(CTC_INT_BIT | CTC_PRESCALER_BIT + | CTC_TIME_CONST_BIT | CTC_RST_BIT); + ctc_channel_1 = 0; - ctc_channel_2 = CTC_CTRL(0); - ctc_channel_3 = CTC_CTRL(0); + ctc_channel_2 = CTC_CTRL(0); + ctc_channel_3 = CTC_CTRL(0); - // Interrupt table for CTC - // Final address is (Ireg << 8) | ctc_isr_ptr | {00/01/10/11} | 0 - ctc_channel_0 = CTC_INT_VEC(0x10); + // Interrupt table for CTC + // Final address is (Ireg << 8) | ctc_isr_ptr | {00/01/10/11} | 0 + ctc_channel_0 = CTC_INT_VEC(0x10); } static inline void init_pio(void) { - // Disable PIO interrupts - port_a_ctrl = PIO_INT_CTRL(0); - port_b_ctrl = PIO_INT_CTRL(0); + // Disable PIO interrupts + port_a_ctrl = PIO_INT_CTRL(0); + port_b_ctrl = PIO_INT_CTRL(0); } static inline void init_sio(void) { - static const u8 sio_a_cfg[] = { - 0b00011000, // Reset channel - 4 , // wr4 - 0b01000100, // X16 clock (115200), one stop bit, no parity - 1 , // wr1 - SIO_RX_INT_MD0 | SIO_RX_INT_MD1, // interrupt on every Rx, no wait function - 3 , // wr3 - 0b11000001, // enable Rx - 8 bit char - 5 , // wr5 - 0b01101000 // enable Tx - 8 bit char - }; - - static const u8 sio_b_cfg[] = { - 0b00011000, // Reset channel - 2 , // load interrupt vector - 0x1C // int_table_rx - }; - - for (u8 i = 0; i < LENGTH(sio_a_cfg); ++i) - sio_a_ctrl = sio_a_cfg[i]; - - for (u8 i = 0; i < LENGTH(sio_b_cfg); ++i) - sio_b_ctrl = sio_b_cfg[i]; + static const u8 sio_a_cfg[] = { + // Reset channel + 0b00011000, + // wr4: X16 clock (115200), one stop bit, no parity + 4, 0b01000100, + // wr1: interrupt on every Rx, no wait function + 1, SIO_RX_INT_MD0 | SIO_RX_INT_MD1, + // wr3: enable Rx - 8 bit char + 3, 0b11000001 + // wr5: enable Tx - 8 bit char + 5, 0b01101000 + }; + + static const u8 sio_b_cfg[] = { + // Reset channel + 0b00011000, + 2, 0x1C // load interrupt vector, int_table_rx + }; + + for (u8 i = 0; i < LENGTH(sio_a_cfg); ++i) + sio_a_ctrl = sio_a_cfg[i]; + + for (u8 i = 0; i < LENGTH(sio_b_cfg); ++i) + sio_b_ctrl = sio_b_cfg[i]; } void main(void) { - init_ctc(); - init_pio(); - init_sio(); + init_ctc(); + init_pio(); + init_sio(); - IM(2); - EI; + IM(2); + EI; - loop(); + loop(); } diff --git a/boot/devmode/crc16.c b/boot/devmode/crc16.c index ac17529..3810ab6 100644 --- a/boot/devmode/crc16.c +++ b/boot/devmode/crc16.c @@ -2,48 +2,48 @@ #include <stddef.h> static const u16 crc_table[256] = { - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 }; u16 crc16(const void *buf, size_t len) { - const u8 *p = buf; + const u8 *p = buf; - u16 crc = 0; - while (len--) - crc = crc_table[(crc >> 8) ^ (*p++)] ^ (crc << 8); + u16 crc = 0; + while (len--) + crc = crc_table[(crc >> 8) ^ (*p++)] ^ (crc << 8); - return crc; + return crc; } diff --git a/boot/devmode/devmode.h b/boot/devmode/devmode.h index f3322d0..e860893 100644 --- a/boot/devmode/devmode.h +++ b/boot/devmode/devmode.h @@ -10,28 +10,28 @@ #endif enum header_type { - CMD_PING, - CMD_INFO, - CMD_BOOT, - CMD_READ, - CMD_WRITE, - CMD_IO_READ, - CMD_IO_WRITE, - CMD_ECHO + CMD_PING, + CMD_INFO, + CMD_BOOT, + CMD_READ, + CMD_WRITE, + CMD_IO_READ, + CMD_IO_WRITE, + CMD_ECHO }; struct header { - u8 type; - u8 bank; - u16 address; - u16 length; - u16 checksum; + u8 type; + u8 bank; + u16 address; + u16 length; + u16 checksum; } PACKED; // static_assert(sizeof(struct header) == 8, "struct header is not PACKED"); enum error { - ERR_TIMEOUT = -1 + ERR_TIMEOUT = -1 }; #define MAX_PACKET_SIZE 256 diff --git a/include/fifo.h b/include/fifo.h index 5fec62f..1af51ec 100644 --- a/include/fifo.h +++ b/include/fifo.h @@ -6,40 +6,40 @@ #define FIFO_LEN 32 struct fifo { - u8 head; - u8 tail; - u8 data[FIFO_LEN]; + u8 head; + u8 tail; + u8 data[FIFO_LEN]; }; static inline u8 fifo_pop(struct fifo *fifo) { - u8 ret = fifo->data[fifo->head]; - if (++fifo->head >= LENGTH(fifo->data)) - fifo->head = 0; - return ret; + u8 ret = fifo->data[fifo->head]; + if (++fifo->head >= LENGTH(fifo->data)) + fifo->head = 0; + return ret; } static inline void fifo_push(struct fifo *fifo, u8 v) { - fifo->data[fifo->tail] = v; + fifo->data[fifo->tail] = v; - if (++fifo->tail >= LENGTH(fifo->data)) - fifo->tail = 0; + if (++fifo->tail >= LENGTH(fifo->data)) + fifo->tail = 0; } static inline bool fifo_empty(const struct fifo *fifo) { - return (fifo->head == fifo->tail); + return (fifo->head == fifo->tail); } static inline void fifo_clear(struct fifo *fifo) { - fifo->head = 0; - fifo->tail = 0; + fifo->head = 0; + fifo->tail = 0; } #endif // FIFO_H diff --git a/include/tft.h b/include/tft.h index 9232d6d..4784f55 100644 --- a/include/tft.h +++ b/include/tft.h @@ -8,101 +8,101 @@ #define TFT_HEIGHT 320 enum tft_command { - NOP = 0x00, - SWRESET = 0x01, - RDDID = 0x04, - RDNUMPE = 0x05, - RDRED = 0x06, - RDGREEN = 0x07, - RDBLUE = 0x08, - RDDPM = 0x0A, - RDDMADCTL = 0x0B, - RDDCOLMOD = 0x0C, - RDDIM = 0x0D, - RDDSM = 0x0E, - RDDSDR = 0x0F, - SPLIN = 0x10, - SLPOUT = 0x11, - PTLON = 0x12, - NORON = 0x13, - INVOFF = 0x20, - INVON = 0x21, - ALLPOFF = 0x22, - ALLPON = 0x23, - GAMSET = 0x26, - DISPOFF = 0x28, - DISPON = 0x29, - CASET = 0x2A, - PASET = 0x2B, - RAMWR = 0x2C, - RAMRD = 0x2E, - PLTAR = 0x30, - VSCRDEF = 0x33, - TEOFF = 0x34, - TEON = 0x35, - MADCTL = 0x36, - VSCRSADD = 0x37, - IDMOFF = 0x38, - IDMON = 0x39, - COLMOD = 0x3A, - CONRAMWR = 0x3C, - CONRAMRD = 0x3E, - TESL = 0x44, - GETSL = 0x45, - WRDISBV = 0x51, - RDDISBV = 0x52, - WRCTRLD = 0x53, - RDCTRLD = 0x54, - WRCABC = 0x55, - RDCABC = 0x56, - WRCABCMB = 0x5E, - RDCABCMB = 0x5F, - RDABVCSDR = 0x68, - RDBWLK = 0x70, - RDBKX = 0x71, - RDBKY = 0x72, - RDWX = 0x73, - RDWY = 0x74, - RDRGLB = 0x75, - RDRX = 0x76, - RDRY = 0x77, - RDGX = 0x78, - RDGY = 0x79, - RDBALB = 0x7A, - RDBX = 0x7B, - RDBY = 0x7C, - RDAX = 0x7D, - RDAY = 0x7E, + NOP = 0x00, + SWRESET = 0x01, + RDDID = 0x04, + RDNUMPE = 0x05, + RDRED = 0x06, + RDGREEN = 0x07, + RDBLUE = 0x08, + RDDPM = 0x0A, + RDDMADCTL = 0x0B, + RDDCOLMOD = 0x0C, + RDDIM = 0x0D, + RDDSM = 0x0E, + RDDSDR = 0x0F, + SPLIN = 0x10, + SLPOUT = 0x11, + PTLON = 0x12, + NORON = 0x13, + INVOFF = 0x20, + INVON = 0x21, + ALLPOFF = 0x22, + ALLPON = 0x23, + GAMSET = 0x26, + DISPOFF = 0x28, + DISPON = 0x29, + CASET = 0x2A, + PASET = 0x2B, + RAMWR = 0x2C, + RAMRD = 0x2E, + PLTAR = 0x30, + VSCRDEF = 0x33, + TEOFF = 0x34, + TEON = 0x35, + MADCTL = 0x36, + VSCRSADD = 0x37, + IDMOFF = 0x38, + IDMON = 0x39, + COLMOD = 0x3A, + CONRAMWR = 0x3C, + CONRAMRD = 0x3E, + TESL = 0x44, + GETSL = 0x45, + WRDISBV = 0x51, + RDDISBV = 0x52, + WRCTRLD = 0x53, + RDCTRLD = 0x54, + WRCABC = 0x55, + RDCABC = 0x56, + WRCABCMB = 0x5E, + RDCABCMB = 0x5F, + RDABVCSDR = 0x68, + RDBWLK = 0x70, + RDBKX = 0x71, + RDBKY = 0x72, + RDWX = 0x73, + RDWY = 0x74, + RDRGLB = 0x75, + RDRX = 0x76, + RDRY = 0x77, + RDGX = 0x78, + RDGY = 0x79, + RDBALB = 0x7A, + RDBX = 0x7B, + RDBY = 0x7C, + RDAX = 0x7D, + RDAY = 0x7E, - RDID1 = 0xDA, - RDID2 = 0xDB, - RDID3 = 0xDC, - SETOSC = 0xB0, - SETPOWER = 0xB1, - SETDISCTRL = 0xB2, - SETRGB = 0xB3, - SETCYC = 0xB4, - SETBGP = 0xB5, - SETCOM = 0xB6, - SETOTP = 0xB7, - SETEXTC = 0xB9, - SETSTBA = 0xC0, - SETDGC = 0xC1, - SETID = 0xC3, - SETDDB = 0xC4, - SETCABC = 0xC9, - SETPANEL = 0xCC, - SETGAMMA = 0xE0, - SETIMAGE = 0xE9, - SETMESSI = 0xEA, - SETCOLOR = 0xEB + RDID1 = 0xDA, + RDID2 = 0xDB, + RDID3 = 0xDC, + SETOSC = 0xB0, + SETPOWER = 0xB1, + SETDISCTRL = 0xB2, + SETRGB = 0xB3, + SETCYC = 0xB4, + SETBGP = 0xB5, + SETCOM = 0xB6, + SETOTP = 0xB7, + SETEXTC = 0xB9, + SETSTBA = 0xC0, + SETDGC = 0xC1, + SETID = 0xC3, + SETDDB = 0xC4, + SETCABC = 0xC9, + SETPANEL = 0xCC, + SETGAMMA = 0xE0, + SETIMAGE = 0xE9, + SETMESSI = 0xEA, + SETCOLOR = 0xEB }; enum pixel_format { - BIT12 = 0x03, - BIT16 = 0x05, - BIT18 = 0x06, - BIT24 = 0x07 + BIT12 = 0x03, + BIT16 = 0x05, + BIT18 = 0x06, + BIT24 = 0x07 }; static inline void @@ -1,101 +1,101 @@ #include <zeta.h> const u8 font[97][8] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SPACE */ - {0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00}, /* ! */ - {0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " */ - {0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, 0x00}, /* # */ - {0x18, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x18, 0x00}, /* $ */ - {0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, 0x00}, /* % */ - {0x3C, 0x66, 0x3C, 0x1C, 0xE6, 0x66, 0xFC, 0x00}, /* & */ - {0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ' */ - {0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00}, /* ( */ - {0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00}, /* ) */ - {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, /* * */ - {0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00}, /* + */ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C}, /* , */ - {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, /* - */ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, /* . */ - {0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00}, /* / */ - {0x3C, 0x66, 0x76, 0x6E, 0x66, 0x66, 0x3C, 0x00}, /* 0 */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* SPACE */ + {0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00}, /* ! */ + {0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, /* " */ + {0x66, 0x66, 0xFF, 0x66, 0xFF, 0x66, 0x66, 0x00}, /* # */ + {0x18, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x18, 0x00}, /* $ */ + {0x46, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x62, 0x00}, /* % */ + {0x3C, 0x66, 0x3C, 0x1C, 0xE6, 0x66, 0xFC, 0x00}, /* & */ + {0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ' */ + {0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00}, /* ( */ + {0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00}, /* ) */ + {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, /* * */ + {0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00}, /* + */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C}, /* , */ + {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, /* - */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, /* . */ + {0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00}, /* / */ + {0x3C, 0x66, 0x76, 0x6E, 0x66, 0x66, 0x3C, 0x00}, /* 0 */ {0x18, 0x18, 0x1C, 0x18, 0x18, 0x18, 0x7E, 0x00}, /* 1 */ - {0x3C, 0x66, 0x60, 0x30, 0x0C, 0x06, 0x7E, 0x00}, /* 2 */ - {0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00}, /* 3 */ - {0x60, 0x70, 0x78, 0x66, 0xFE, 0x60, 0x60, 0x00}, /* 4 */ - {0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00}, /* 5 */ - {0x3C, 0x66, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00}, /* 6 */ - {0x7E, 0x66, 0x30, 0x18, 0x18, 0x18, 0x18, 0x00}, /* 7 */ - {0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00}, /* 8 */ - {0x3C, 0x66, 0x66, 0x7C, 0x60, 0x66, 0x3C, 0x00}, /* 9 */ - {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00}, /* : */ - {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0C}, /* / */ - {0x70, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00}, /* < */ - {0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00}, /* = */ - {0x0E, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x00}, /* > */ - {0x3C, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x00}, /* ? */ - {0x3C, 0x66, 0x76, 0x76, 0x06, 0x46, 0x3C, 0x00}, /* @ */ - {0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, /* A */ - {0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00}, /* B */ - {0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00}, /* C */ - {0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00}, /* D */ - {0x7E, 0x06, 0x06, 0x1E, 0x06, 0x06, 0x7E, 0x00}, /* E */ - {0x7E, 0x06, 0x06, 0x1E, 0x06, 0x06, 0x06, 0x00}, /* F */ - {0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00}, /* G */ - {0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, /* H */ - {0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, /* I */ - {0x78, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00}, /* J */ - {0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00}, /* K */ - {0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00}, /* L */ - {0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00}, /* M */ - {0x66, 0x6E, 0x7E, 0x7E, 0x76, 0x66, 0x66, 0x00}, /* N */ - {0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* O */ - {0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00}, /* P */ - {0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x70, 0x00}, /* Q */ - {0x3E, 0x66, 0x66, 0x3E, 0x1E, 0x36, 0x66, 0x00}, /* R */ - {0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00}, /* S */ - {0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, /* T */ - {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* U */ - {0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, /* V */ - {0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00}, /* W */ - {0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00}, /* X */ - {0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00}, /* Y */ - {0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00}, /* Z */ - {0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00}, /* [ */ - {0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00}, /* \ */ - {0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00}, /* ] */ - {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, /* ^ */ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, /* _ */ - {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ` */ - {0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00}, /* a */ - {0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00}, /* b */ - {0x00, 0x00, 0x3C, 0x06, 0x06, 0x06, 0x3C, 0x00}, /* c */ - {0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00}, /* d */ - {0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00}, /* e */ - {0x00, 0x70, 0x18, 0x7C, 0x18, 0x18, 0x18, 0x00}, /* f */ - {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3E}, /* g */ - {0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x00}, /* h */ - {0x00, 0x18, 0x00, 0x1C, 0x18, 0x18, 0x3C, 0x00}, /* i */ - {0x00, 0x60, 0x00, 0x60, 0x60, 0x60, 0x60, 0x3C}, /* j */ - {0x00, 0x06, 0x06, 0x36, 0x1E, 0x36, 0x66, 0x00}, /* k */ - {0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, /* l */ - {0x00, 0x00, 0x66, 0xFE, 0xFE, 0xD6, 0xC6, 0x00}, /* m */ - {0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00}, /* n */ - {0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* o */ - {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06}, /* p */ - {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60}, /* q */ - {0x00, 0x00, 0x3E, 0x66, 0x06, 0x06, 0x06, 0x00}, /* r */ - {0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00}, /* s */ - {0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x70, 0x00}, /* t */ - {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00}, /* u */ - {0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, /* v */ - {0x00, 0x00, 0xC6, 0xD6, 0xFE, 0x7C, 0x6C, 0x00}, /* w */ - {0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00}, /* x */ - {0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x30, 0x1E}, /* y */ - {0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00}, /* z */ - {0x1C, 0x30, 0x30, 0xE0, 0x30, 0x30, 0x1C, 0x00}, /* { */ - {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, /* | */ - {0xE0, 0x30, 0x30, 0x1C, 0x30, 0x30, 0xE0, 0x00}, /* } */ - {0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ~ */ - {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, /* DEL */ - {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} /* CURSOR */ + {0x3C, 0x66, 0x60, 0x30, 0x0C, 0x06, 0x7E, 0x00}, /* 2 */ + {0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00}, /* 3 */ + {0x60, 0x70, 0x78, 0x66, 0xFE, 0x60, 0x60, 0x00}, /* 4 */ + {0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00}, /* 5 */ + {0x3C, 0x66, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00}, /* 6 */ + {0x7E, 0x66, 0x30, 0x18, 0x18, 0x18, 0x18, 0x00}, /* 7 */ + {0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00}, /* 8 */ + {0x3C, 0x66, 0x66, 0x7C, 0x60, 0x66, 0x3C, 0x00}, /* 9 */ + {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00}, /* : */ + {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0C}, /* / */ + {0x70, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x70, 0x00}, /* < */ + {0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00}, /* = */ + {0x0E, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0E, 0x00}, /* > */ + {0x3C, 0x66, 0x60, 0x30, 0x18, 0x00, 0x18, 0x00}, /* ? */ + {0x3C, 0x66, 0x76, 0x76, 0x06, 0x46, 0x3C, 0x00}, /* @ */ + {0x18, 0x3C, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, /* A */ + {0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00}, /* B */ + {0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00}, /* C */ + {0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00}, /* D */ + {0x7E, 0x06, 0x06, 0x1E, 0x06, 0x06, 0x7E, 0x00}, /* E */ + {0x7E, 0x06, 0x06, 0x1E, 0x06, 0x06, 0x06, 0x00}, /* F */ + {0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00}, /* G */ + {0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, /* H */ + {0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, /* I */ + {0x78, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00}, /* J */ + {0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00}, /* K */ + {0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00}, /* L */ + {0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0x00}, /* M */ + {0x66, 0x6E, 0x7E, 0x7E, 0x76, 0x66, 0x66, 0x00}, /* N */ + {0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* O */ + {0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00}, /* P */ + {0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x70, 0x00}, /* Q */ + {0x3E, 0x66, 0x66, 0x3E, 0x1E, 0x36, 0x66, 0x00}, /* R */ + {0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00}, /* S */ + {0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, /* T */ + {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* U */ + {0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, /* V */ + {0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00}, /* W */ + {0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00}, /* X */ + {0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00}, /* Y */ + {0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00}, /* Z */ + {0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00}, /* [ */ + {0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00}, /* \ */ + {0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00}, /* ] */ + {0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00}, /* ^ */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, /* _ */ + {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ` */ + {0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00}, /* a */ + {0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00}, /* b */ + {0x00, 0x00, 0x3C, 0x06, 0x06, 0x06, 0x3C, 0x00}, /* c */ + {0x00, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x00}, /* d */ + {0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00}, /* e */ + {0x00, 0x70, 0x18, 0x7C, 0x18, 0x18, 0x18, 0x00}, /* f */ + {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3E}, /* g */ + {0x00, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x00}, /* h */ + {0x00, 0x18, 0x00, 0x1C, 0x18, 0x18, 0x3C, 0x00}, /* i */ + {0x00, 0x60, 0x00, 0x60, 0x60, 0x60, 0x60, 0x3C}, /* j */ + {0x00, 0x06, 0x06, 0x36, 0x1E, 0x36, 0x66, 0x00}, /* k */ + {0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, /* l */ + {0x00, 0x00, 0x66, 0xFE, 0xFE, 0xD6, 0xC6, 0x00}, /* m */ + {0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00}, /* n */ + {0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00}, /* o */ + {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06}, /* p */ + {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60}, /* q */ + {0x00, 0x00, 0x3E, 0x66, 0x06, 0x06, 0x06, 0x00}, /* r */ + {0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00}, /* s */ + {0x00, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x70, 0x00}, /* t */ + {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00}, /* u */ + {0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, /* v */ + {0x00, 0x00, 0xC6, 0xD6, 0xFE, 0x7C, 0x6C, 0x00}, /* w */ + {0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00}, /* x */ + {0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x30, 0x1E}, /* y */ + {0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00}, /* z */ + {0x1C, 0x30, 0x30, 0xE0, 0x30, 0x30, 0x1C, 0x00}, /* { */ + {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, /* | */ + {0xE0, 0x30, 0x30, 0x1C, 0x30, 0x30, 0xE0, 0x00}, /* } */ + {0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* ~ */ + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, /* DEL */ + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} /* CURSOR */ }; @@ -27,7 +27,7 @@ init_pio(void) // Load interrupt vector port_b_ctrl = ISR_ADDRESS(port_b_isr_ptr); // Interrupt word - interrupt if any pin goes low, mask follows - port_b_ctrl = PIO_INT_CTRL(PIO_INT_EN | PIO_OR | PIO_LOW | PIO_MASK); + port_b_ctrl = PIO_INT_CTRL(PIO_INT_EN | PIO_OR | PIO_LOW | PIO_MASK); // Mask - 0 means to check line port_b_ctrl = 0x80; @@ -47,13 +47,13 @@ init_ctc(void) /* 200Hz clock */ ctc_channel_2 = CTC_CTRL(CTC_INT_BIT | CTC_PRESCALER_BIT - | CTC_TIME_CONST_BIT | CTC_RST_BIT); + | CTC_TIME_CONST_BIT | CTC_RST_BIT); ctc_channel_2 = 0; - /* ctc_channel_3 = (CPU_FREQ / 256 / 144); */ + /* ctc_channel_3 = (CPU_FREQ / 256 / 144); */ ctc_channel_3 = CTC_CTRL(CTC_INT_BIT | CTC_PRESCALER_BIT - | CTC_TIME_CONST_BIT | CTC_RST_BIT); + | CTC_TIME_CONST_BIT | CTC_RST_BIT); ctc_channel_3 = 0; // 256 // Interrupt table for CTC @@ -82,11 +82,11 @@ init_sio(void) ISR_ADDRESS(rx_isr_ptr) // int_table_rx }; - for (u8 i = 0; i < LENGTH(sio_a_cfg); ++i) - sio_a_ctrl = sio_a_cfg[i]; + for (u8 i = 0; i < LENGTH(sio_a_cfg); ++i) + sio_a_ctrl = sio_a_cfg[i]; - for (u8 i = 0; i < LENGTH(sio_b_cfg); ++i) - sio_b_ctrl = sio_b_cfg[i]; + for (u8 i = 0; i < LENGTH(sio_b_cfg); ++i) + sio_b_ctrl = sio_b_cfg[i]; } // copy code to ram, so function pointer is modifyable @@ -122,10 +122,10 @@ main(void) init_pio(); init_sio(); - // Interrupt mode 2 - IM(2); - // Enable interrupts - EI; + // Interrupt mode 2 + IM(2); + // Enable interrupts + EI; addstr("Starting system ...\r\n"); _menu(); @@ -37,7 +37,7 @@ value_inc(struct value *v, int d) } enum item_type { - VOID, + VOID, BUTTON, VALUE, LABEL @@ -51,12 +51,12 @@ draw_time(void) memset(&time, 0, sizeof(time)); // rtc_get_bcd_time(&time); sprintf(buf, "20%hhd%hhd-%hhd%hhd-%hhd%hhd %hhd%hhd:%hhd%hhd:%hhd%hhd", - time.year >> 4, time.year & 0xF, - time.month >> 4, time.month & 0xF, - time.date >> 4, time.date & 0xF, - time.hour >> 4, time.hour & 0xF, - time.minute >> 4, time.minute & 0xF, - time.second >> 4, time.second & 0xF); + time.year >> 4, time.year & 0xF, + time.month >> 4, time.month & 0xF, + time.date >> 4, time.date & 0xF, + time.hour >> 4, time.hour & 0xF, + time.minute >> 4, time.minute & 0xF, + time.second >> 4, time.second & 0xF); mvaddstr(5, 1, buf); } @@ -91,26 +91,26 @@ struct menu_entry menu[] = { .text = "TIME ", .items = { {.type = LABEL, .v = {.action = draw_time}}, - {.type = LABEL, .v = {.action = draw_battery}}, + {.type = LABEL, .v = {.action = draw_battery}}, {.type = VOID}, - {.type = VOID}, - {.type = VOID}, - {.type = VOID}, - {.type = VOID}, - {.type = VOID} + {.type = VOID}, + {.type = VOID}, + {.type = VOID}, + {.type = VOID}, + {.type = VOID} } }, { .text = "CONF ", .items = { {.type = VALUE, .text = "SEC", .v = {.value = {1, 0, 0, 59}}}, - {.type = VALUE, .text = "MIN", .v = {.value = {1, 0, 0, 59}}}, - {.type = VALUE, .text = "HOUR", .v = {.value = {1, 0, 0, 23}}}, + {.type = VALUE, .text = "MIN", .v = {.value = {1, 0, 0, 59}}}, + {.type = VALUE, .text = "HOUR", .v = {.value = {1, 0, 0, 23}}}, {.type = VALUE, .text = "WKDAY", .v = {.value = {1, 0, 1, 7}}}, - {.type = VALUE, .text = "DATE", .v = {.value = {1, 1, 1, 31}}}, - {.type = VALUE, .text = "MONTH", .v = {.value = {1, 1, 1, 12}}}, - {.type = VALUE, .text = "YEAR", .v = {.value = {1, 0, 0, 3000}}}, - {.type = BUTTON, .text = "LOAD", .v = {.action = set_time}} + {.type = VALUE, .text = "DATE", .v = {.value = {1, 1, 1, 31}}}, + {.type = VALUE, .text = "MONTH", .v = {.value = {1, 1, 1, 12}}}, + {.type = VALUE, .text = "YEAR", .v = {.value = {1, 0, 0, 3000}}}, + {.type = BUTTON, .text = "LOAD", .v = {.action = set_time}} } } }; @@ -179,11 +179,11 @@ draw_menu(void) mvaddstr(5 + 2 * i, 1, entry->items[i].text); } - if (entry->items[i].type == VALUE) { - char buf[16]; - sprintf(buf, "%8d", entry->items[i].v.value.val); - mvaddstr(5 + 2 * i, 6, buf); - } + if (entry->items[i].type == VALUE) { + char buf[16]; + sprintf(buf, "%8d", entry->items[i].v.value.val); + mvaddstr(5 + 2 * i, 6, buf); + } if (entry->items[i].type == LABEL) { entry->items[i].v.action(); @@ -224,7 +224,7 @@ volatile callback callbacks[5] = {NULL, NULL, NULL, NULL, NULL}; void _menu(void) { - callbacks[0] = dir_callback; + callbacks[0] = dir_callback; clear_screen(); setcur(0, 0); draw_menu(); @@ -12,51 +12,51 @@ _delay_ms(u8 ms); static inline void tft_soft_reset(void) { - tft_ctrl = SWRESET; + tft_ctrl = SWRESET; } static inline void tft_enable_ext_cmd(void) { - tft_ctrl = SETEXTC; - tft_data = 0xFF; - tft_data = 0x83; - tft_data = 0x57; + tft_ctrl = SETEXTC; + tft_data = 0xFF; + tft_data = 0x83; + tft_data = 0x57; } static inline void tft_memory_access_ctrl(u8 bits) { - tft_ctrl = MADCTL; - tft_data = bits; + tft_ctrl = MADCTL; + tft_data = bits; } static inline void tft_sleep_out(void) { - tft_ctrl = SLPOUT; + tft_ctrl = SLPOUT; } static inline void tft_display_on(void) { - tft_ctrl = DISPON; + tft_ctrl = DISPON; } static inline void tft_pixel_format(u8 dbi, u8 dpi) { - tft_ctrl = COLMOD; - tft_data = (dpi << 4) | dbi; + tft_ctrl = COLMOD; + tft_data = (dpi << 4) | dbi; } static inline void tft_set_rgb_interface(void) { - tft_ctrl = SETRGB; - tft_data = 0x00; - tft_data = 0x00; - tft_data = 0x06; - tft_data = 0x06; + tft_ctrl = SETRGB; + tft_data = 0x00; + tft_data = 0x00; + tft_data = 0x06; + tft_data = 0x06; } static inline void @@ -123,24 +123,24 @@ clear_screen(void) void tft_init(void) { - _delay_ms(200); + _delay_ms(200); - tft_soft_reset(); - tft_enable_ext_cmd(); + tft_soft_reset(); + tft_enable_ext_cmd(); - _delay_ms(250); + _delay_ms(250); - tft_set_rgb_interface(); + tft_set_rgb_interface(); - tft_pixel_format(BIT16, BIT16); + tft_pixel_format(BIT16, BIT16); tft_memory_access_ctrl(MV | 0x0C); - tft_sleep_out(); + tft_sleep_out(); - _delay_ms(150); + _delay_ms(150); - tft_display_on(); + tft_display_on(); - _delay_ms(50); + _delay_ms(50); clear_screen(); } |