From 609b8e836e4be50dece99ff60824825978f650b2 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 4 Feb 2011 22:33:32 +0100 Subject: [PATCH 1/4] suddenly there were drago^W^W was debug code --- cmdline/read-temp.c | 24 ++++++++++++++++++- firmware/slavechip/Makefile | 2 +- firmware/slavechip/Project.ede | 8 +++++++ firmware/slavechip/debug.c | 37 +++++++++++++++++++++++++++++ firmware/slavechip/debug.h | 18 ++++++++++++++ firmware/slavechip/i2c_simple.c | 7 +++++- firmware/slavechip/main.h | 1 + firmware/slavechip/spi_pointers.c | 39 +++++++++++-------------------- 8 files changed, 108 insertions(+), 28 deletions(-) create mode 100644 firmware/slavechip/Project.ede create mode 100644 firmware/slavechip/debug.c create mode 100644 firmware/slavechip/debug.h diff --git a/cmdline/read-temp.c b/cmdline/read-temp.c index 8d9a183..a1704b5 100644 --- a/cmdline/read-temp.c +++ b/cmdline/read-temp.c @@ -28,7 +28,7 @@ respectively. #include "../firmware/masterchip/usbdrv/usbconfig.h" /* device's VID/PID and names */ void usage() { - printf("Usage: read-temp [spi|temp] [opcode] [addr] [value]\n"); + printf("Usage: read-temp [spi|temp|dbg] [[opcode] [addr] [value]]\n"); } int main(int argc, char **argv) @@ -117,6 +117,28 @@ int cnt, vid, pid; fprintf(stderr, "answer: value=0x%04x (%i)\n", rxIndex,rxIndex); // fprintf(stderr, "rxValue = 0x%04x value = 0x%04x\n", rxValue, addr); // fprintf(stderr, "rxIndex = 0x%04x index = 0x%04x\n", rxIndex, value); + } else if(strcasecmp(argv[1], "spi") == 0) { + if(argc != 5) { + usage(); + return 0; + } + int opcode, addr, value; + int i=0; + opcode = atoi(argv[2]); + addr = atoi(argv[3]); + value = atoi(argv[4]); + + // x86 is little-endian, avr is big-endian + value = htons(value); + + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, opcode, addr, value, buffer, sizeof(buffer), 5000); + if(cnt < 0){ + fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror()); + } + rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); + + fprintf(stderr, "request = 0x%04x\n", opcode); + fprintf(stderr, "answer: value=0x%04x (%i)\n", rxIndex,rxIndex); } else { usage(); } diff --git a/firmware/slavechip/Makefile b/firmware/slavechip/Makefile index 29f0cb2..0e0fe40 100644 --- a/firmware/slavechip/Makefile +++ b/firmware/slavechip/Makefile @@ -2,7 +2,7 @@ include ../Makefile.inc COMPILE = avr-gcc $(CFLAGS) $(DEFINES) -OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o +OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o debug.o # symbolic targets: all: firmware.hex diff --git a/firmware/slavechip/Project.ede b/firmware/slavechip/Project.ede new file mode 100644 index 0000000..a0eb630 --- /dev/null +++ b/firmware/slavechip/Project.ede @@ -0,0 +1,8 @@ +;; Object thermocouple +;; EDE project file. +(ede-proj-project "thermocouple" + :name "thermocouple" + :file "Project.ede" + :targets (list + ) + ) diff --git a/firmware/slavechip/debug.c b/firmware/slavechip/debug.c new file mode 100644 index 0000000..7c22bf9 --- /dev/null +++ b/firmware/slavechip/debug.c @@ -0,0 +1,37 @@ +#include "debug.h" +#include + +char debugStr[DEBUGCHARS]; +volatile char dbgCurChar; +volatile uint8_t dbgStrFill; // amount of available chars in debugStr +volatile uint8_t dbgHasNewSPI; + +void dbgLog(const char* fmt, ...) { + uint8_t maxwrite = DEBUGCHARS - dbgStrFill; + va_list va; + va_start(va,fmt); + char* pos = debugStr + dbgStrFill; + dbgStrFill += vsnprintf(pos, maxwrite, fmt, va); + va_end(va); +} + +uint8_t dbgHasNew() { + dbgHasNewSPI = (dbgStrFill > 0); + return (dbgStrFill > 0); +} + +char dbgReadChar() { + if(dbgHasNew()) { + char ret = debugStr[0]; + for(int i=0; i +#include + +#define DEBUGCHARS 100 +extern char debugStr[]; +extern volatile uint8_t dbgStrFill; // amount of available chars in debugStr +extern volatile uint8_t dbgHasNewSPI; +extern volatile char dbgCurChar; + + +void dbgLog(const char* fmt, ...); +uint8_t dbgHasNew(); +char dbgReadChar(); +void dbgAdvanceChar(); +#endif diff --git a/firmware/slavechip/i2c_simple.c b/firmware/slavechip/i2c_simple.c index 8e56ae9..9b1dd7d 100644 --- a/firmware/slavechip/i2c_simple.c +++ b/firmware/slavechip/i2c_simple.c @@ -99,8 +99,13 @@ inline uint8_t i2c_write(uint8_t addr, uint8_t len, uint8_t *data) return i2c_write_i(addr, len, data, 1); } + + uint8_t i2c_write_read(uint8_t addr, uint8_t writelen, uint8_t *writedata, uint8_t readlen, uint8_t *readdata) { - if(writelen == i2c_write_i(addr, writelen, writedata, 0)) {return i2c_read(addr, readlen, readdata);} + if(writelen == i2c_write_i(addr, writelen, writedata, 0)) { + return i2c_read(addr, readlen, readdata); + } + return 0; } diff --git a/firmware/slavechip/main.h b/firmware/slavechip/main.h index 881d47e..4544e03 100644 --- a/firmware/slavechip/main.h +++ b/firmware/slavechip/main.h @@ -12,6 +12,7 @@ #define SOFTTIMERNUMS 4 #include "softtimer.h" +#include "debug.h" extern uint8_t foo; extern uint16_t bar; diff --git a/firmware/slavechip/spi_pointers.c b/firmware/slavechip/spi_pointers.c index f592ff6..cb09299 100644 --- a/firmware/slavechip/spi_pointers.c +++ b/firmware/slavechip/spi_pointers.c @@ -1,34 +1,23 @@ - #include "spi_pointers.h" #include "main.h" uint8_t *spi_proto_globals8[] = { - &foo, - &foo, - &foo, - &foo, - &foo, - &foo, - &foo - }; + &dbgHasNewSPI, + &dbgCurChar +}; + uint16_t *spi_proto_globals16[] = { - &timertmp, - &temperatures[0], - &temperatures[1], - &temperatures[2], - &temperatures[3], - &bar, - &bar, - &bar, - &bar, - &bar, - &bar, - &bar, - &bar - }; + &timertmp, + &temperatures[0], + &temperatures[1], + &temperatures[2], + &temperatures[3], +}; + funptr_t spi_proto_funcs[] = { - &baz - }; + &dbgHasNew, + &dbgAdvanceChar +}; From b8026224526cb92594809ec0b7e26d51a1ad7303 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 4 Feb 2011 22:45:13 +0100 Subject: [PATCH 2/4] small changes --- firmware/slavechip/debug.h | 1 - 1 file changed, 1 deletion(-) diff --git a/firmware/slavechip/debug.h b/firmware/slavechip/debug.h index 35577e0..24d0d38 100644 --- a/firmware/slavechip/debug.h +++ b/firmware/slavechip/debug.h @@ -2,7 +2,6 @@ #define __DEBUG_H #include -#include #define DEBUGCHARS 100 extern char debugStr[]; From d3fcd7304d290cc5cee3991caec43d3d8a71d6ff Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 4 Feb 2011 23:01:10 +0100 Subject: [PATCH 3/4] maybe cmdline works for debug now? --- cmdline/read-temp.c | 61 ++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/cmdline/read-temp.c b/cmdline/read-temp.c index a1704b5..e635486 100644 --- a/cmdline/read-temp.c +++ b/cmdline/read-temp.c @@ -24,6 +24,7 @@ respectively. #include /* this is libusb */ #include "opendevice.h" /* common code moved to separate module */ #include //for htons() +#include #include "../firmware/masterchip/usbdrv/usbconfig.h" /* device's VID/PID and names */ @@ -117,28 +118,54 @@ int cnt, vid, pid; fprintf(stderr, "answer: value=0x%04x (%i)\n", rxIndex,rxIndex); // fprintf(stderr, "rxValue = 0x%04x value = 0x%04x\n", rxValue, addr); // fprintf(stderr, "rxIndex = 0x%04x index = 0x%04x\n", rxIndex, value); - } else if(strcasecmp(argv[1], "spi") == 0) { - if(argc != 5) { + } else if(strcasecmp(argv[1], "dbg") == 0) { + if(argc != 2) { usage(); return 0; } - int opcode, addr, value; - int i=0; - opcode = atoi(argv[2]); - addr = atoi(argv[3]); - value = atoi(argv[4]); - // x86 is little-endian, avr is big-endian - value = htons(value); - - cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, opcode, addr, value, buffer, sizeof(buffer), 5000); - if(cnt < 0){ - fprintf(stderr, "\nUSB error in iteration %d: %s\n", i, usb_strerror()); + int rqRefreshHasNew[] = {6, 0, 0}; + int rqHasNew[] = {2, 0, 0}; + int rqGetNew[] = {2, 1, 0}; + int rqAdvance[] = {6, 1, 0}; + int *rq; + + while(1) { + // refresh "hasNew" variable + rq = rqRefreshHasNew; + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); + if(cnt < 0){ + fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); + } + + // check whether we have new + rq = rqHasNew; + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); + if(cnt < 0){ + fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); + } + rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); + + if(rxIndex) { // if we have new data? + // get the new char and print it + rq = rqGetNew; + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); + if(cnt < 0){ + fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); + } + rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); + fprintf(stderr, "%c", rxIndex); + + // advance the new char pointer... + rq = rqAdvance; + cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); + if(cnt < 0){ + fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); + } + rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); + } + usleep(10000); } - rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); - - fprintf(stderr, "request = 0x%04x\n", opcode); - fprintf(stderr, "answer: value=0x%04x (%i)\n", rxIndex,rxIndex); } else { usage(); } From 203cf52b1c1773ea51871e79dad216b2ae32aa57 Mon Sep 17 00:00:00 2001 From: Paul Goeser Date: Fri, 4 Feb 2011 23:22:28 +0100 Subject: [PATCH 4/4] small bugfixes in debug, test-code --- cmdline/read-temp.c | 14 ++++++++------ firmware/slavechip/debug.c | 1 + firmware/slavechip/main.c | 3 +++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cmdline/read-temp.c b/cmdline/read-temp.c index e635486..fffcd8b 100644 --- a/cmdline/read-temp.c +++ b/cmdline/read-temp.c @@ -147,24 +147,26 @@ int cnt, vid, pid; rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); if(rxIndex) { // if we have new data? - // get the new char and print it - rq = rqGetNew; + // advance the new char pointer... + rq = rqAdvance; cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); if(cnt < 0){ fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); } rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); - fprintf(stderr, "%c", rxIndex); - // advance the new char pointer... - rq = rqAdvance; + // get the new char and print it + rq = rqGetNew; cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, rq[0], rq[1], rq[2], buffer, sizeof(buffer), 5000); if(cnt < 0){ fprintf(stderr, "\nUSB error in iteration ?!?: %s\n", usb_strerror()); } rxIndex = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); + if(rxIndex != 0 && (rxIndex & 0xff) != 0xff){ + fprintf(stderr, "%c", rxIndex); + } } - usleep(10000); + usleep(1000); } } else { usage(); diff --git a/firmware/slavechip/debug.c b/firmware/slavechip/debug.c index 7c22bf9..5dcc9a8 100644 --- a/firmware/slavechip/debug.c +++ b/firmware/slavechip/debug.c @@ -26,6 +26,7 @@ char dbgReadChar() { for(int i=0; i