From d4dfd3e34e4aa2c025414baa93e021fb509fe54d Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Fri, 27 May 2016 01:27:17 -0500 Subject: [PATCH] You know I never actually compiled any of this yet --- avr/main.c | 79 ++++++++++++++++++++++++++++---------- include/tabby.h | 1 - include/tabby/avr/buffer.h | 11 ++---- include/tabby/packet.h | 16 -------- src/link.c | 15 +++----- 5 files changed, 67 insertions(+), 55 deletions(-) delete mode 100644 include/tabby/packet.h diff --git a/avr/main.c b/avr/main.c index f94cf27..efc9e6f 100644 --- a/avr/main.c +++ b/avr/main.c @@ -22,6 +22,9 @@ static volatile tabby_avr_buffer buffer = { .cur = 0 }; +static tabby_clock_source source = TABBY_CLOCK_SOURCE_INTERNAL; +static tabby_clock_speed speed = TABBY_CLOCK_SPEED_8192HZ; + /* * Internal clock source interrupt vector */ @@ -44,10 +47,11 @@ ISR(TIM0_COMPB_vect) { uart_putchar(value_in, NULL); if (buffer.cur < buffer.len) { - value_out = buffer.data[++buffer.cur]; + value_out = buffer.data[buffer.cur++]; } else { buffer.len = 0; buffer.cur = 0; + buffer.read = 0; } bits = 8; @@ -67,10 +71,11 @@ ISR(SPI_STC_vect) { uart_putchar(SPDR); if (buffer.cur < buffer.len) { - SPDR = buffer.data[++buffer.cur]; + SPDR = buffer.data[buffer.cur++]; } else { - buffer.len = 0; - buffer.cur = 0; + buffer.len = 0; + buffer.cur = 0; + buffer.read = 0; } } @@ -185,46 +190,78 @@ int main() { received++; switch (state) { - case TABBY_COMMAND_NONE: { - if (last == 0 && c == TABBY_PACKET_START) { - continue; - } else if (last == TABBY_PACKET_START) { - state = c; - } + case TABBY_COMMAND_NONE: + state = c; break; - } - case TABBY_COMMAND_SEND: { - if (received == 3 || received == 4) { + case TABBY_COMMAND_SEND: + if (received == 2 || received == 3) { buffer.len = (buffer.len >> 8) | (c << 8); } else { - buffer.data[buffer.cur++] = c; + buffer.data[buffer.read++] = c; + + if (buffer.read == buffer.len) { + goto reset; + } } break; - } case TABBY_COMMAND_CLOCK_SOURCE: + switch (c) { + case TABBY_CLOCK_SOURCE_INTERNAL: + source = c; + + setup_clock_internal(speed); + + goto reset; + + case TABBY_CLOCK_SOURCE_EXTERNAL: + source = c; + + setup_clock_external(); + + goto reset; + + default: + goto reset; + } + case TABBY_COMMAND_CLOCK_SPEED: + switch (c) { + case TABBY_CLOCK_SPEED_8192HZ: + case TABBY_CLOCK_SPEED_16384HZ: + case TABBY_CLOCK_SPEED_262144HZ: + case TABBY_CLOCK_SPEED_524288HZ: + speed = c; + + if (source == TABBY_CLOCK_SOURCE_INTERNAL) { + setup_clock_internal(speed); + } + + goto reset; + + default: + goto reset; + } default: - goto error_invalid_packet; + goto reset; } last = c; - received++; - continue; -error_invalid_packet: +reset: state = TABBY_COMMAND_NONE; last = 0; received = 0; - buffer.cur = 0; - buffer.len = 0; + buffer.len = 0; + buffer.cur = 0; + buffer.read = 0; } return 0; diff --git a/include/tabby.h b/include/tabby.h index d035ad1..16f0ed0 100644 --- a/include/tabby.h +++ b/include/tabby.h @@ -3,6 +3,5 @@ #include #include -#include #endif /* _TABBY_H */ diff --git a/include/tabby/avr/buffer.h b/include/tabby/avr/buffer.h index ef3dbc5..0247a43 100644 --- a/include/tabby/avr/buffer.h +++ b/include/tabby/avr/buffer.h @@ -3,19 +3,14 @@ #include -#include - #define TABBY_AVR_BUFFER_SIZE 1024 typedef struct _tabby_avr_buffer { uint16_t len, - cur; + cur, + read; - union { - tabby_packet header; - - uint8_t data[TABBY_AVR_BUFFER_SIZE]; - }; + uint8_t data[TABBY_AVR_BUFFER_SIZE]; } tabby_avr_buffer; #endif /* _TABBY_AVR_BUFFER_H */ diff --git a/include/tabby/packet.h b/include/tabby/packet.h deleted file mode 100644 index cc9be2e..0000000 --- a/include/tabby/packet.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _TABBY_PACKET_H -#define _TABBY_PACKET_H - -#define TABBY_PACKET_START 0xff -#define TABBY_PACKET_MAX_LEN 1024 - -#include - -typedef struct _tabby_packet { - uint8_t start, - command; - - uint16_t len; -} tabby_packet; - -#endif /* _TABBY_PACKET_H */ diff --git a/src/link.c b/src/link.c index 3df40b9..cc35070 100644 --- a/src/link.c +++ b/src/link.c @@ -40,9 +40,8 @@ int tabby_link_close(int fd) { } ssize_t tabby_link_send(int fd, char *buf, uint16_t len) { - tabby_packet header = { - .type = htobe16(TABBY_COMMAND_SEND), - .value = htobe16(len) + uint8_t header[3] = { + TABBY_COMMAND_SEND, len & 0xff00 >> 8, len & 0xff }; if (write(fd, &header, sizeof(header)) < 0) { @@ -60,18 +59,16 @@ ssize_t tabby_link_recv(int fd, char *buf, uint16_t len) { } int tabby_link_set_clock_source(int fd, tabby_clock_source source) { - tabby_packet packet = { - .command = htobe16(TABBY_COMMAND_CLOCK_SOURCE), - .value = htobe16(source) + uint8_t packet[2] = { + TABBY_COMMAND_CLOCK_SOURCE, source }; return write(fd, &packet, sizeof(packet)); } int tabby_link_set_clock_speed(int fd, tabby_clock_speed speed) { - tabby_packet packet = { - .command = htobe16(TABBY_COMMAND_CLOCK_SPEED), - .value = htobe16(speed) + uint8_t packet[2] = { + TABBY_COMMAND_CLOCK_SPEED, speed }; return write(fd, &packet, sizeof(packet));