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(); }