Add a frontend because I can
This commit is contained in:
parent
9c997c178c
commit
2cd91b7176
3 changed files with 377 additions and 0 deletions
2
Makefile
2
Makefile
|
@ -1,6 +1,7 @@
|
||||||
all:
|
all:
|
||||||
$(MAKE) -C avr all
|
$(MAKE) -C avr all
|
||||||
$(MAKE) -C src all
|
$(MAKE) -C src all
|
||||||
|
$(MAKE) -C bin all
|
||||||
|
|
||||||
flash:
|
flash:
|
||||||
$(MAKE) -C avr flash
|
$(MAKE) -C avr flash
|
||||||
|
@ -8,3 +9,4 @@ flash:
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C avr clean
|
$(MAKE) -C avr clean
|
||||||
$(MAKE) -C src clean
|
$(MAKE) -C src clean
|
||||||
|
$(MAKE) -C bin clean
|
||||||
|
|
29
bin/Makefile
Normal file
29
bin/Makefile
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
include ../mk/build.mk
|
||||||
|
|
||||||
|
CC = $(CROSS)cc
|
||||||
|
|
||||||
|
INCLUDE_PATH = ../include
|
||||||
|
|
||||||
|
CFLAGS += -I$(INCLUDE_PATH)
|
||||||
|
LDFLAGS =
|
||||||
|
|
||||||
|
TABBY = tabby
|
||||||
|
TABBY_OBJS = main.o
|
||||||
|
TABBY_STATIC = ../src/lib$(LIBNAME).a
|
||||||
|
TABBY_HEADERS =
|
||||||
|
TABBY_LDFLAGS = -lz
|
||||||
|
|
||||||
|
LIBNAME = tabby
|
||||||
|
|
||||||
|
PROGRAMS = $(TABBY)
|
||||||
|
|
||||||
|
RM = /bin/rm
|
||||||
|
INSTALL = /usr/bin/install
|
||||||
|
|
||||||
|
all: $(PROGRAMS)
|
||||||
|
|
||||||
|
$(TABBY): $(TABBY_OBJS) $(TABBY_HEADERS) $(TABBY_STATIC)
|
||||||
|
$(CC) $(TABBY_OBJS) $(TABBY_LDFLAGS) $(TABBY_STATIC) -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) -f $(PROGRAMS) $(TABBY_OBJS)
|
346
bin/main.c
Normal file
346
bin/main.c
Normal file
|
@ -0,0 +1,346 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <tabby/link.h>
|
||||||
|
|
||||||
|
static void usage(int argc, char **argv, char *message, ...) {
|
||||||
|
if (message) {
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, message);
|
||||||
|
vfprintf(stderr, message, args);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "usage: %s device\n", argv[0]);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
int fd;
|
||||||
|
ssize_t len;
|
||||||
|
int state = 0;
|
||||||
|
|
||||||
|
uint8_t value = 0,
|
||||||
|
compression = 0,
|
||||||
|
dataLengthLSB = 0,
|
||||||
|
dataLengthMSB = 0,
|
||||||
|
acknowledgeCode = 129,
|
||||||
|
statusCode = 0;
|
||||||
|
|
||||||
|
uint16_t dataPosition = 0;
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
usage(argc, argv, "No device specified");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fd = tabby_link_open(argv[1])) < 0) {
|
||||||
|
fprintf(stderr, "%s: %s: %s: %s\n", argv[0], "tabby_link_open()",
|
||||||
|
argv[1], strerror(errno));
|
||||||
|
|
||||||
|
goto error_link_open;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((len = tabby_link_recv(fd, &value, 1)) >= 0) {
|
||||||
|
uint8_t response = 0;
|
||||||
|
|
||||||
|
fprintf(stderr, "state %d recv 0x%02x\n", state, value);
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case 0: {
|
||||||
|
if (value == 136) {
|
||||||
|
state = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
response = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 1: {
|
||||||
|
if (value == 51) {
|
||||||
|
state = 2;
|
||||||
|
response = 0;
|
||||||
|
} else {
|
||||||
|
state = 0;
|
||||||
|
response = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 2: {
|
||||||
|
if (value == 1) {
|
||||||
|
state = 3;
|
||||||
|
response = 0;
|
||||||
|
compression = 0;
|
||||||
|
dataLengthLSB = 0;
|
||||||
|
dataLengthMSB = 0;
|
||||||
|
} else if (value == 2) {
|
||||||
|
state = 50;
|
||||||
|
response = 0;
|
||||||
|
} else if (value == 4) {
|
||||||
|
state = 20;
|
||||||
|
response = 0;
|
||||||
|
} else if (value == 15) {
|
||||||
|
state = 90;
|
||||||
|
response = 0;
|
||||||
|
} else {
|
||||||
|
state = 0;
|
||||||
|
response = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 3: {
|
||||||
|
compression = value;
|
||||||
|
response = 0;
|
||||||
|
state = 4;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 4: {
|
||||||
|
dataLengthLSB = value;
|
||||||
|
response = 0;
|
||||||
|
state = 5;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5: {
|
||||||
|
dataLengthMSB = value;
|
||||||
|
response = 0;
|
||||||
|
state = 6;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 6: {
|
||||||
|
response = 0;
|
||||||
|
state = 7;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 7: {
|
||||||
|
response = 129;
|
||||||
|
state = 8;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
response = 129;
|
||||||
|
state = 20;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 20: {
|
||||||
|
compression = value;
|
||||||
|
response = 0;
|
||||||
|
state = 21;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 21: {
|
||||||
|
dataLengthLSB = value;
|
||||||
|
response = 0;
|
||||||
|
state = 22;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 22: {
|
||||||
|
dataLengthMSB = value;
|
||||||
|
response = 0;
|
||||||
|
state = 23;
|
||||||
|
dataPosition = 256 * dataLengthMSB + dataLengthLSB;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 23: {
|
||||||
|
dataPosition--;
|
||||||
|
|
||||||
|
if (dataPosition == 0 || dataPosition == 65535) {
|
||||||
|
state = 24;
|
||||||
|
} else {
|
||||||
|
state = 23;
|
||||||
|
}
|
||||||
|
|
||||||
|
response = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 24: {
|
||||||
|
response = 0;
|
||||||
|
state = 25;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 26: {
|
||||||
|
response = acknowledgeCode;
|
||||||
|
state = 27;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 27: {
|
||||||
|
response = statusCode;
|
||||||
|
state = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 50: {
|
||||||
|
response = 0;
|
||||||
|
state = 51;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 51: {
|
||||||
|
response = 0;
|
||||||
|
state = 52;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 52: {
|
||||||
|
response = 0;
|
||||||
|
state = 53;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 53: {
|
||||||
|
response = 0;
|
||||||
|
state = 54;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 54: {
|
||||||
|
response = 0;
|
||||||
|
state = 55;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 55: {
|
||||||
|
response = 0;
|
||||||
|
state = 56;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 56: {
|
||||||
|
response = 0;
|
||||||
|
state = 57;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 57: {
|
||||||
|
response = 0;
|
||||||
|
state = 58;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 58: {
|
||||||
|
response = acknowledgeCode;
|
||||||
|
state = 59;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 59: {
|
||||||
|
response = statusCode;
|
||||||
|
state = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 90: {
|
||||||
|
response = 0;
|
||||||
|
state = 91;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 91: {
|
||||||
|
response = 0;
|
||||||
|
state = 92;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 92: {
|
||||||
|
response = 0;
|
||||||
|
state = 93;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 93: {
|
||||||
|
response = 0;
|
||||||
|
state = 94;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 94: {
|
||||||
|
response = 129;
|
||||||
|
state = 95;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 95: {
|
||||||
|
response = statusCode;
|
||||||
|
state = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: {
|
||||||
|
response = 0;
|
||||||
|
state = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "send 0x%02x\n", response);
|
||||||
|
|
||||||
|
if (tabby_link_send(fd, &response, 1) < 0) {
|
||||||
|
fprintf(stderr, "%s: %s: %s: %s\n", argv[0], "tabby_link_send()",
|
||||||
|
argv[1], strerror(errno));
|
||||||
|
|
||||||
|
goto error_link_send;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tabby_link_close(fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error_link_send:
|
||||||
|
tabby_link_close(fd);
|
||||||
|
|
||||||
|
error_link_open:
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue