@@ -124,13 +124,18 @@ void tuh_mount_cb(uint8_t daddr) {
124124 }
125125
126126 printf ("Device %u: ID %04x:%04x SN " , daddr , desc .device .idVendor , desc .device .idProduct );
127- xfer_result = tuh_descriptor_get_serial_string_sync (daddr , LANGUAGE_ID , desc .serial , sizeof (desc .serial ));
127+
128+ xfer_result = XFER_RESULT_FAILED ;
129+ if (desc .device .iSerialNumber != 0 ) {
130+ xfer_result = tuh_descriptor_get_serial_string_sync (daddr , LANGUAGE_ID , desc .serial , sizeof (desc .serial ));
131+ }
128132 if (XFER_RESULT_SUCCESS != xfer_result ) {
129133 uint16_t * serial = (uint16_t * )(uintptr_t ) desc .serial ;
130- serial [0 ] = 'n' ;
131- serial [1 ] = '/' ;
132- serial [2 ] = 'a' ;
133- serial [3 ] = 0 ;
134+ serial [0 ] = (uint16_t ) ((TUSB_DESC_STRING << 8 ) | (2 * 3 + 2 ));
135+ serial [1 ] = 'n' ;
136+ serial [2 ] = '/' ;
137+ serial [3 ] = 'a' ;
138+ serial [4 ] = 0 ;
134139 }
135140 print_utf16 ((uint16_t * )(uintptr_t ) desc .serial , sizeof (desc .serial )/2 );
136141 printf ("\r\n" );
@@ -150,16 +155,20 @@ void tuh_mount_cb(uint8_t daddr) {
150155 // Get String descriptor using Sync API
151156
152157 printf (" iManufacturer %u " , desc .device .iManufacturer );
153- xfer_result = tuh_descriptor_get_manufacturer_string_sync (daddr , LANGUAGE_ID , desc .buf , sizeof (desc .buf ));
154- if (XFER_RESULT_SUCCESS == xfer_result ) {
155- print_utf16 ((uint16_t * )(uintptr_t ) desc .buf , sizeof (desc .buf )/2 );
158+ if (desc .device .iManufacturer != 0 ) {
159+ xfer_result = tuh_descriptor_get_manufacturer_string_sync (daddr , LANGUAGE_ID , desc .buf , sizeof (desc .buf ));
160+ if (XFER_RESULT_SUCCESS == xfer_result ) {
161+ print_utf16 ((uint16_t * )(uintptr_t ) desc .buf , sizeof (desc .buf )/2 );
162+ }
156163 }
157164 printf ("\r\n" );
158165
159166 printf (" iProduct %u " , desc .device .iProduct );
160- xfer_result = tuh_descriptor_get_product_string_sync (daddr , LANGUAGE_ID , desc .buf , sizeof (desc .buf ));
161- if (XFER_RESULT_SUCCESS == xfer_result ) {
162- print_utf16 ((uint16_t * )(uintptr_t ) desc .buf , sizeof (desc .buf )/2 );
167+ if (desc .device .iProduct != 0 ) {
168+ xfer_result = tuh_descriptor_get_product_string_sync (daddr , LANGUAGE_ID , desc .buf , sizeof (desc .buf ));
169+ if (XFER_RESULT_SUCCESS == xfer_result ) {
170+ print_utf16 ((uint16_t * )(uintptr_t ) desc .buf , sizeof (desc .buf )/2 );
171+ }
163172 }
164173 printf ("\r\n" );
165174
0 commit comments