diff options
| -rw-r--r-- | boot/devmode/bootloader.c | 361 | ||||
| -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, 495 insertions, 494 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; +	int err; +	u8 ack; +	u16 checksum; -    while (1) { -	if ((err = read(header, sizeof(*header)))) -	    return err; +	while (1) { +		if ((err = read(header, sizeof(*header)))) +			return err; -	checksum = header->checksum; -	header->checksum = 0; +		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)); +		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; +	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; +	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)); +		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]; +	struct header header; +	u8 buf[MAX_PACKET_SIZE]; -    while (1) { -	if (read_header(&header)) { -	    flush(); -	    continue; -	} +	while (1) { +		if (read_header(&header)) { +			flush(); +			continue; +		} -	switch (header.type) { -	case CMD_BOOT: -	    ((void (*)(void))header.address)(); -	    break; +		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_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_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; +		case CMD_ECHO: +			if (!read_buf(header.length, buf)) +				write_buf(header.length, buf); +			break; -	default: -	    break; -	} +		default: +			break; +		} -	flush(); -    } +		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_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[] = { -	0b00011000,			// Reset channel -	2	  ,			// load interrupt vector -	0x1C				// int_table_rx -    }; +	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_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];  }  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();  } | 
