From 4be94d11c5d8b317d5aa8626bd5025a4368342c0 Mon Sep 17 00:00:00 2001 From: stumpja Date: Mon, 29 Feb 2016 08:50:20 -0500 Subject: [PATCH] Update hub_demo.ino Updated code per @Lauszus request. The first item updated was a comment on LINE #308 saying that the string is UTF-16LE encoded. This is why we have to skip every second character when printing the string. The second item was figuring out the proper buffer size for LINE #280. After some research I found that the maximum string length is limited to 255 bytes since the bLength field is 1 byte long. I changed the buffer size to 256 to accommodate for this. Finally, I cleaned up some of the code to make it more consistent. This is purely aesthetic, and subjective at that. --- examples/hub_demo/hub_demo.ino | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/examples/hub_demo/hub_demo.ino b/examples/hub_demo/hub_demo.ino index 256e7cd6..d9773e5d 100644 --- a/examples/hub_demo/hub_demo.ino +++ b/examples/hub_demo/hub_demo.ino @@ -68,18 +68,15 @@ void PrintDescriptors(uint8_t addr) uint8_t num_conf = 0; rcode = getdevdescr( (uint8_t)addr, num_conf ); - if ( rcode ) - { + if ( rcode ) { printProgStr(Gen_Error_str); print_hex( rcode, 8 ); } Serial.print("\r\n"); - for (int i = 0; i < num_conf; i++) - { + for (int i = 0; i < num_conf; i++) { rcode = getconfdescr( addr, i ); // get configuration descriptor - if ( rcode ) - { + if ( rcode ) { printProgStr(Gen_Error_str); print_hex(rcode, 8); } @@ -100,10 +97,8 @@ void loop() { Usb.Task(); - if ( Usb.getUsbTaskState() == USB_STATE_RUNNING ) - { - if ((millis() - next_time) >= 0L) - { + if ( Usb.getUsbTaskState() == USB_STATE_RUNNING ) { + if ((millis() - next_time) >= 0L) { Usb.ForEachUsbDevice(&PrintAllDescriptors); Usb.ForEachUsbDevice(&PrintAllAddresses); @@ -282,7 +277,7 @@ uint8_t getallstrdescr(uint8_t addr) // function to get single string description unsigned int getstrdescr( unsigned int addr, uint8_t idx ) { - uint8_t buf[ 66 ]; + uint8_t buf[ 256 ]; unsigned int rcode; uint8_t length; uint8_t i; @@ -310,7 +305,7 @@ unsigned int getstrdescr( unsigned int addr, uint8_t idx ) Serial.print("Error retrieving string "); return ( rcode ); } - for ( i = 2; i < length; i += 2 ) { + for ( i = 2; i < length; i += 2 ) { //string is UTF-16LE encoded Serial.print((char) buf[i]); } return ( rcode ); @@ -338,6 +333,7 @@ void print_hex(int v, int num_places) } while (--num_nibbles); } + /* function to print configuration descriptor */ void printconfdescr( uint8_t* descr_ptr ) { @@ -357,6 +353,7 @@ void printconfdescr( uint8_t* descr_ptr ) print_hex( conf_ptr->bMaxPower, 8 ); return; } + /* function to print interface descriptor */ void printintfdescr( uint8_t* descr_ptr ) { @@ -378,6 +375,7 @@ void printintfdescr( uint8_t* descr_ptr ) print_hex( intf_ptr->iInterface, 8 ); return; } + /* function to print endpoint descriptor */ void printepdescr( uint8_t* descr_ptr ) { @@ -394,6 +392,7 @@ void printepdescr( uint8_t* descr_ptr ) return; } + /*function to print unknown descriptor */ void printunkdescr( uint8_t* descr_ptr ) {