Commit a76bbdb695daa43308602474873f7b662e5f394a

Authored by Gordon Hollingworth
1 parent d7b97b34

Add extra verbose logging and check return from libusb_control_transfer

Showing 1 changed file with 26 additions and 7 deletions
@@ -155,8 +155,10 @@ int ep_read(void *buf, int len, libusb_device_handle * usb_device) @@ -155,8 +155,10 @@ int ep_read(void *buf, int len, libusb_device_handle * usb_device)
155 LIBUSB_REQUEST_TYPE_VENDOR | 155 LIBUSB_REQUEST_TYPE_VENDOR |
156 LIBUSB_ENDPOINT_IN, 0, len & 0xffff, 156 LIBUSB_ENDPOINT_IN, 0, len & 0xffff,
157 len >> 16, buf, len, 1000); 157 len >> 16, buf, len, 1000);
158 -  
159 - return len; 158 + if(ret >= 0)
  159 + return len;
  160 + else
  161 + return ret;
160 } 162 }
161 163
162 void get_options(int argc, char *argv[]) 164 void get_options(int argc, char *argv[])
@@ -254,7 +256,7 @@ int second_stage_boot(libusb_device_handle *usb_device) @@ -254,7 +256,7 @@ int second_stage_boot(libusb_device_handle *usb_device)
254 sleep(1); 256 sleep(1);
255 size = ep_read((unsigned char *)&retcode, sizeof(retcode), usb_device); 257 size = ep_read((unsigned char *)&retcode, sizeof(retcode), usb_device);
256 258
257 - if (retcode == 0) 259 + if (size > 0 && retcode == 0)
258 { 260 {
259 printf("Successful read %d bytes \n", size); 261 printf("Successful read %d bytes \n", size);
260 } 262 }
@@ -303,23 +305,38 @@ int file_server(libusb_device_handle * usb_device) @@ -303,23 +305,38 @@ int file_server(libusb_device_handle * usb_device)
303 305
304 while(going) 306 while(going)
305 { 307 {
306 - ep_read(&message, sizeof(message), usb_device);  
307 - if(verbose) printf("Received message %d: %s\n", message.command, message.fname); 308 + char message_name[][20] = {"GetFileSize", "ReadFile", "Done"};
  309 + int i = ep_read(&message, sizeof(message), usb_device);
  310 + if(i < 0)
  311 + {
  312 + sleep(1);
  313 + continue;
  314 + }
  315 + if(verbose) printf("Received message %s: %s\n", message_name[message.command], message.fname);
  316 +
  317 + // Done can also just be null filename
  318 + if(strlen(message.fname) == 0)
  319 + {
  320 + ep_write(NULL, 0, usb_device);
  321 + break;
  322 + }
  323 +
308 switch(message.command) 324 switch(message.command)
309 { 325 {
310 case 0: // Get file size 326 case 0: // Get file size
311 if(fp) 327 if(fp)
312 fclose(fp); 328 fclose(fp);
313 fp = check_file(directory, message.fname); 329 fp = check_file(directory, message.fname);
314 - if(fp != NULL) 330 + if(strlen(message.fname) && fp != NULL)
315 { 331 {
316 int file_size; 332 int file_size;
317 - void *buf;  
318 333
319 fseek(fp, 0, SEEK_END); 334 fseek(fp, 0, SEEK_END);
320 file_size = ftell(fp); 335 file_size = ftell(fp);
321 fseek(fp, 0, SEEK_SET); 336 fseek(fp, 0, SEEK_SET);
322 337
  338 + if(verbose) printf("File size = %d bytes\n", file_size);
  339 +
323 int sz = libusb_control_transfer(usb_device, LIBUSB_REQUEST_TYPE_VENDOR, 0, 340 int sz = libusb_control_transfer(usb_device, LIBUSB_REQUEST_TYPE_VENDOR, 0,
324 file_size & 0xffff, file_size >> 16, NULL, 0, 1000); 341 file_size & 0xffff, file_size >> 16, NULL, 0, 1000);
325 342
@@ -362,6 +379,7 @@ int file_server(libusb_device_handle * usb_device) @@ -362,6 +379,7 @@ int file_server(libusb_device_handle * usb_device)
362 int sz = ep_write(buf, file_size, usb_device); 379 int sz = ep_write(buf, file_size, usb_device);
363 380
364 fclose(fp); 381 fclose(fp);
  382 + fp = NULL;
365 383
366 if(sz != file_size) 384 if(sz != file_size)
367 { 385 {
@@ -471,6 +489,7 @@ int main(int argc, char *argv[]) @@ -471,6 +489,7 @@ int main(int argc, char *argv[])
471 } 489 }
472 490
473 libusb_close(usb_device); 491 libusb_close(usb_device);
  492 + sleep(5);
474 } 493 }
475 while(loop); 494 while(loop);
476 495