@@ -37,6 +37,7 @@ class USBCommunicationClassDriver : public USBClassDriver {
37
37
switch (state_) {
38
38
case kDriverAttached : {
39
39
config_desc_idx_ = 0 ;
40
+ kprintf (" Requesting config descriptor...\n " );
40
41
xhc.RequestConfigDescriptor (slot_, config_desc_idx_);
41
42
state_ = kCheckingConfigDescriptor ;
42
43
} break ;
@@ -45,6 +46,7 @@ class USBCommunicationClassDriver : public USBClassDriver {
45
46
if (!e.has_value ()) {
46
47
return ;
47
48
}
49
+ kprintf (" Got config descriptor\n " );
48
50
ConfigDescriptor* config_desc =
49
51
xhc.ReadDescriptorBuffer <ConfigDescriptor>(slot_, 0 );
50
52
assert (config_desc);
@@ -127,6 +129,7 @@ class USBCommunicationClassDriver : public USBClassDriver {
127
129
}
128
130
kprintf (" \n " );
129
131
xhc.SetConfig (slot_, config_value_);
132
+ kprintf (" Using config value = %d\n " , config_value_);
130
133
state_ = kWaitingForConfigCompletion ;
131
134
} break ;
132
135
case kWaitingForConfigCompletion : {
@@ -166,6 +169,8 @@ class USBCommunicationClassDriver : public USBClassDriver {
166
169
167
170
xhc.SetInterface (slot_, data_interface_alt_setting_,
168
171
data_interface_number_);
172
+ kprintf (" Using interface num = %d, alt setting = %d\n " ,
173
+ data_interface_number_, data_interface_alt_setting_);
169
174
state_ = kWaitingForSetInterfaceCompletion ;
170
175
} break ;
171
176
case kWaitingForSetInterfaceCompletion : {
@@ -339,14 +344,18 @@ class USBCommonDriver : public USBClassDriver {
339
344
} break ;
340
345
case kDone : {
341
346
kprintf (" Got %d config descriptors in total\n " , config_desc_idx_);
347
+ bool found_cdc_net = false ;
342
348
for (int i = 0 ; i < config_desc_idx_; i++) {
343
349
auto & config = slot_state[slot_].config_descriptors [i];
344
350
kprintf (" config[%d]:\n " , i);
351
+ kprintf (" config value = %d:\n " , config->config_value );
345
352
for (const auto & e : *config) {
346
353
if (e->type == kDescriptorTypeInterface ) {
347
354
InterfaceDescriptor& interface_desc =
348
355
*reinterpret_cast <InterfaceDescriptor*>(e);
349
356
kprintf (" interface:\n " );
357
+ kprintf (" num: %d\n " , interface_desc.interface_number );
358
+ kprintf (" alt: %d\n " , interface_desc.alt_setting );
350
359
kprintf (" class: 0x%02X\n " , interface_desc.interface_class );
351
360
kprintf (" subclass: 0x%02X\n " ,
352
361
interface_desc.interface_subclass );
@@ -356,14 +365,24 @@ class USBCommonDriver : public USBClassDriver {
356
365
interface_desc.interface_subclass == 0x06 &&
357
366
interface_desc.interface_protocol == 0x00 ) {
358
367
kprintf (" USB CDC Network device found!\n " );
359
- auto cdc_net_driver = new USBCommunicationClassDriver (slot_);
360
- delete slot_state[slot_].driver ;
361
- slot_state[slot_].driver = cdc_net_driver;
362
- return ;
368
+ found_cdc_net = true ;
363
369
}
364
370
}
371
+ if (e->type == kDescriptorTypeEndpoint ) {
372
+ EndpointDescriptor& ep_desc =
373
+ *reinterpret_cast <EndpointDescriptor*>(e);
374
+ kprintf (" endpoint:\n " );
375
+ kprintf (" addr: 0x%02X\n " , ep_desc.endpoint_address );
376
+ kprintf (" attributes: 0x%02X\n " , ep_desc.attributes );
377
+ }
365
378
}
366
379
}
380
+ if (found_cdc_net) {
381
+ auto cdc_net_driver = new USBCommunicationClassDriver (slot_);
382
+ delete slot_state[slot_].driver ;
383
+ slot_state[slot_].driver = cdc_net_driver;
384
+ return ;
385
+ }
367
386
state_ = kFailed ;
368
387
} break ;
369
388
case kFailed : {
0 commit comments