diff options
Diffstat (limited to 'src/flash.c')
-rw-r--r-- | src/flash.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/flash.c b/src/flash.c index c81d97c..8d39f43 100644 --- a/src/flash.c +++ b/src/flash.c @@ -20,6 +20,7 @@ #include "main.h" #include "hash.h" +#include "hexdump.h" #include <usb.h> #include <stdio.h> #include <string.h> @@ -32,6 +33,26 @@ void check_nolo_order_failed() exit(1); } +void query_error_message() +{ + /* query error message */ + int len = 0; + char nolomsg[2048]; + memset(nolomsg, '\0', 2048); + usb_control_msg(dev, 192, 5, 0, 0, nolomsg, 2048, 2000); + nolomsg[2047] = '\0'; + printf("\nNOLO says:\n"); + if (nolomsg[0] == '\0') { + printf(" (.. silence ..)\n"); + } else { + dump_bytes((unsigned char *)nolomsg, 128); + do { + printf(" - %s\n", nolomsg+len); + len+=strlen(nolomsg+len)+1; + } while(nolomsg[len]!='\0'); + } +} + void check_nolo_order() { int i, xlo = 0; @@ -100,6 +121,7 @@ void flash_image(char *filename, char *piece, char *version) //dump_bytes(fquery, 27+vlen); if (usb_control_msg(dev, CMD_WRITE, request, 0, 0, (char *)fquery, 27+vlen, 2000) <0) { + query_error_message(); perror("flash_image.header"); exit(1); } @@ -124,22 +146,7 @@ void flash_image(char *filename, char *piece, char *version) printf("WARNING: Oops wrong read %d vs %d \n", bread, bsize); bread = usb_bulk_write(dev, 2, buf, bsize, 5000); if (bread == 64) { - /* query error message */ - int len = 0; - char nolomsg[2048]; - memset(nolomsg, '\0', 2048); - usb_control_msg(dev, 192, 5, 0, 0, nolomsg, 2048, 2000); - nolomsg[2047] = '\0'; - printf("\nNOLO says:\n"); - if (nolomsg[0] == '\0') { - printf(" (.. silence ..)\n"); - } else { - dump_bytes(nolomsg, 128); - do { - printf(" - %s\n", nolomsg+len); - len+=strlen(nolomsg+len)+1; - } while(nolomsg[len]!='\0'); - } + query_error_message(); fclose(fd); return; } |