#include "modules/usb/usb_task.h"
Go to the source code of this file.
Defines | |
#define | HUB_CLASS 0x09 |
#define | C_HUB_LOCAL_POWER 0 |
#define | C_HUB_OVER_CURRENT 1 |
#define | PORT_CONNECTION 0 |
#define | PORT_ENABLE 1 |
#define | PORT_SUSPEND 2 |
#define | PORT_OVER_CURRENT 3 |
#define | PORT_RESET 4 |
#define | PORT_POWER 8 |
#define | PORT_LOW_SPEED 9 |
#define | C_PORT_CONNECTION 16 |
#define | C_PORT_ENABLE 17 |
#define | C_PORT_SUSPEND 18 |
#define | C_PORT_OVER_CURRENT 19 |
#define | C_PORT_RESET 20 |
#define | PORT_TEST 21 |
#define | PORT_INDICATOR 22 |
#define | NB_PORT_OFFSET 2 |
#define | HUB_DEVICE_POWERED 2 |
#define | HUB_DEVICE_CONNECT 3 |
#define | HUB_DEVICE_WAIT_RST_1 4 |
#define | HUB_DEVICE_WAIT_RST_2 5 |
#define | HUB_DEVICE_READY 6 |
#define | HUB_PORT_CONNECTION 0 |
#define | HUB_PORT_RESET 1 |
#define | HUB_PORT_DISCONNECT 2 |
#define | Clear_hub_feature(feature_selector) |
Clear_hub_feature. | |
#define | Clear_port_feature(feature_selector, port) |
Clear_port_feature. | |
#define | Get_hub_descriptor() |
Get_hub_descriptor. | |
#define | Get_hub_status() |
Get_hub_status. | |
#define | Get_port_status(port) |
Get_port_status. | |
#define | Set_hub_feature(feature) |
Set_hub_feature. | |
#define | Set_port_feature(feature, port) |
Set_port_feature. | |
#define | Set_port_indicator_green(i) Set_port_feature(PORT_INDICATOR,0x0200+i) |
#define | Set_port_indicator_amber(i) Set_port_feature(PORT_INDICATOR,0x0100+i) |
#define | Set_port_indicator_auto(i) Set_port_feature(PORT_INDICATOR,0x0300+i) |
#define | Set_port_indicator_off(i) Set_port_feature(PORT_INDICATOR,0x0000+i) |
#define | Set_port_reset(i) Set_port_feature(PORT_RESET,i) |
#define | Set_port_suspend(i) Set_port_feature(PORT_SUSPEND,i) |
#define | Clear_port_suspend(i) Clear_port_feature(PORT_SUSPEND,i) |
#define | Set_port_power(i) Set_port_feature(PORT_POWER,i); |
#define | Clear_port_power(i) Clear_port_feature(PORT_POWER,i); |
Functions | |
U32 | get_port_status (U8 port_number) |
void | hub_manage_port_change_status (U8 port_change_status, U8 hub_number) |
void | enumerate_hub_port_device (U8 hub_port, U8 port_ev, U8 hub_number) |
void | hub_init (U8 hub_number) |
Variables | |
U8 | f_hub_port_disconnect |
Flag to store device connection event. | |
U8 | hub_device_address [USB_MAX_HUB_NUMBER] |
Table to store the device address of the hub connected in the USB tree. | |
U8 | hub_port_state [USB_MAX_HUB_NUMBER][HUB_MAX_NB_PORT] |
Enumeration state machine for each port of each hub. | |
U8 | nb_hub_present |
The number of hub connected in the USB tree. | |
U8 | hub_device_address [USB_MAX_HUB_NUMBER] |
Table to store the device address of the hub connected in the USB tree. | |
U8 | nb_hub_present |
The number of hub connected in the USB tree. |
Definition in file usb_host_hub.h.
#define HUB_CLASS 0x09 |
Definition at line 59 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), remove_device_entry(), and usb_host_task().
#define C_HUB_LOCAL_POWER 0 |
Definition at line 63 of file usb_host_hub.h.
#define C_HUB_OVER_CURRENT 1 |
Definition at line 64 of file usb_host_hub.h.
#define PORT_CONNECTION 0 |
#define PORT_ENABLE 1 |
Definition at line 66 of file usb_host_hub.h.
#define PORT_SUSPEND 2 |
Definition at line 67 of file usb_host_hub.h.
#define PORT_OVER_CURRENT 3 |
Definition at line 68 of file usb_host_hub.h.
#define PORT_RESET 4 |
Definition at line 69 of file usb_host_hub.h.
#define PORT_POWER 8 |
Definition at line 70 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and usb_host_task().
#define PORT_LOW_SPEED 9 |
#define C_PORT_CONNECTION 16 |
#define C_PORT_ENABLE 17 |
Definition at line 73 of file usb_host_hub.h.
#define C_PORT_SUSPEND 18 |
#define C_PORT_OVER_CURRENT 19 |
Definition at line 75 of file usb_host_hub.h.
#define C_PORT_RESET 20 |
#define PORT_TEST 21 |
Definition at line 77 of file usb_host_hub.h.
#define PORT_INDICATOR 22 |
Definition at line 78 of file usb_host_hub.h.
#define NB_PORT_OFFSET 2 |
Definition at line 81 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and usb_host_task().
#define HUB_DEVICE_POWERED 2 |
Definition at line 84 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), hub_init(), hub_manage_port_change_status(), and remove_device_entry().
#define HUB_DEVICE_CONNECT 3 |
Definition at line 85 of file usb_host_hub.h.
#define HUB_DEVICE_WAIT_RST_1 4 |
#define HUB_DEVICE_WAIT_RST_2 5 |
#define HUB_DEVICE_READY 6 |
Definition at line 88 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and hub_manage_port_change_status().
#define HUB_PORT_CONNECTION 0 |
Definition at line 91 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and hub_manage_port_change_status().
#define HUB_PORT_RESET 1 |
Definition at line 92 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and hub_manage_port_change_status().
#define HUB_PORT_DISCONNECT 2 |
Definition at line 93 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and hub_manage_port_change_status().
#define Clear_hub_feature | ( | feature_selector | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_SET_CLASS_DEVICE,\ usb_request.bRequest = SETUP_CLEAR_FEATURE,\ usb_request.wValue = (U16)feature_selector,\ usb_request.wIndex = 0,\ usb_request.wLength = 0,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a Clear_hub_feature request
U8 | feature_selector |
Definition at line 117 of file usb_host_hub.h.
#define Clear_port_feature | ( | feature_selector, | |||
port | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_SET_CLASS_OTHER,\ usb_request.bRequest = SETUP_CLEAR_FEATURE,\ usb_request.wValue = (U16)feature_selector,\ usb_request.wIndex = port,\ usb_request.wLength = 0,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a Clear port feature request
U8 | feature_selector | |
U8 | port |
Definition at line 135 of file usb_host_hub.h.
Referenced by hub_manage_port_change_status().
#define Get_hub_descriptor | ( | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_GET_CLASS_DEVICE,\ usb_request.bRequest = SETUP_GET_DESCRIPTOR,\ usb_request.wValue = 0x2900,\ usb_request.wIndex = 0,\ usb_request.wLength = 0xFF,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a get hub dscriptor request
Definition at line 150 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and usb_host_task().
#define Get_hub_status | ( | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_GET_CLASS_DEVICE,\ usb_request.bRequest = SETUP_GET_STATUS,\ usb_request.wValue = 0,\ usb_request.wIndex = 0,\ usb_request.wLength = 4,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a get hub status request
Definition at line 165 of file usb_host_hub.h.
#define Get_port_status | ( | port | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_GET_CLASS_OTHER,\ usb_request.bRequest = SETUP_GET_STATUS,\ usb_request.wValue = 0,\ usb_request.wIndex = port,\ usb_request.wLength = 4,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a get port status request
U8 | port |
Definition at line 181 of file usb_host_hub.h.
Referenced by get_port_status().
#define Set_hub_feature | ( | feature | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_SET_CLASS_DEVICE,\ usb_request.bRequest = SETUP_SET_FEATURE,\ usb_request.wValue = (U16)feature,\ usb_request.wIndex = 0,\ usb_request.wLength = 0,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a set hub feature request
U8 | feature_selector |
Definition at line 199 of file usb_host_hub.h.
#define Set_port_feature | ( | feature, | |||
port | ) |
Value:
(usb_request.bmRequestType = USB_SETUP_SET_CLASS_OTHER,\ usb_request.bRequest = SETUP_SET_FEATURE,\ usb_request.wValue = (U16)feature,\ usb_request.wIndex = port,\ usb_request.wLength = 0,\ usb_request.uncomplete_read = FALSE,\ host_send_control(data_stage))
this function send a set port feature request
U8 | feature_selector | |
U8 | port |
Definition at line 218 of file usb_host_hub.h.
Referenced by enumerate_hub_port_device(), and usb_host_task().
#define Set_port_indicator_green | ( | i | ) | Set_port_feature(PORT_INDICATOR,0x0200+i) |
Definition at line 228 of file usb_host_hub.h.
#define Set_port_indicator_amber | ( | i | ) | Set_port_feature(PORT_INDICATOR,0x0100+i) |
Definition at line 229 of file usb_host_hub.h.
#define Set_port_indicator_auto | ( | i | ) | Set_port_feature(PORT_INDICATOR,0x0300+i) |
Definition at line 230 of file usb_host_hub.h.
#define Set_port_indicator_off | ( | i | ) | Set_port_feature(PORT_INDICATOR,0x0000+i) |
Definition at line 231 of file usb_host_hub.h.
Definition at line 234 of file usb_host_hub.h.
Definition at line 235 of file usb_host_hub.h.
Definition at line 237 of file usb_host_hub.h.
Definition at line 238 of file usb_host_hub.h.
This function returns the status of the specified usb hub port
U8 | port_number |
Definition at line 111 of file usb_host_hub.c.
References data_stage, Get_port_status, LSB0, LSB1, LSB2, and LSB3.
00112 { 00113 U32 to_return; 00114 00115 Get_port_status(port_number); 00116 LSB3(to_return)=data_stage[3]; 00117 LSB2(to_return)=data_stage[2]; 00118 LSB1(to_return)=data_stage[1]; 00119 LSB0(to_return)=data_stage[0]; 00120 return to_return; 00121 }
This function decodes the change status repport from the hub interrupt pipe.
The function decodes hub port event and call the "enumerate_hub_port_device" function to manage the enumeration of the device connected to the hub port.
U8 | port_change_status | |
U8 | hub_number the number of the hub taht detects the event |
Definition at line 137 of file usb_host_hub.c.
References c, C_PORT_CONNECTION, C_PORT_RESET, C_PORT_SUSPEND, Clear_port_feature, enumerate_hub_port_device(), get_port_status(), HUB_DEVICE_POWERED, HUB_DEVICE_READY, HUB_MAX_NB_PORT, HUB_PORT_CONNECTION, HUB_PORT_DISCONNECT, HUB_PORT_RESET, hub_port_state, i, PORT_CONNECTION, PORT_LOW_SPEED, and USB_MAX_HUB_NUMBER.
00138 { 00139 U8 i,c; 00140 U32 port_status; 00141 U8 port_addr_0_in_use=0; 00142 00143 // There should be one and only one device on the bus responding to device address 0 00144 // Look in the hub_port_state state machine if one device is currently using this address 00145 // If another hub is currently using address zero, the function returns imediately 00146 for(i=0;i<USB_MAX_HUB_NUMBER;i++) 00147 { 00148 for(c=1;c<=HUB_MAX_NB_PORT;c++) 00149 { 00150 if((hub_port_state[i][c-1] != HUB_DEVICE_POWERED) && (hub_port_state[i][c-1] != HUB_DEVICE_READY)) 00151 { 00152 //Found one port with one device using the address 0 00153 // memorize this port number 00154 if(i!=(hub_number-1)) 00155 { return; } //Other hub currently using address zero 00156 // ok the hub using the device address zero is the hub that currently generates the event (port_change_status) 00157 port_addr_0_in_use=c; 00158 break; 00159 } 00160 } 00161 } 00162 00163 // For all ports 00164 for(c=1;c<=HUB_MAX_NB_PORT;c++) 00165 { 00166 // One device connected to one port is using device address zero 00167 // Skip all other port activity management 00168 if((port_addr_0_in_use!=0) && (c!=port_addr_0_in_use) ) 00169 { 00170 continue; 00171 } 00172 00173 // Does this port generates port change status ? 00174 if(port_change_status & (1<<c)) 00175 { 00176 // Get port status bytes 00177 port_status=get_port_status(c); 00178 // For each port event, send this event to the function that manage the 00179 // state of the device connected to the hub port 00180 if( port_status & ((U32)1<<C_PORT_CONNECTION)) 00181 { 00182 Clear_port_feature(C_PORT_CONNECTION,c); 00183 if(port_status&((U32)1<<PORT_CONNECTION)) 00184 { 00185 // Port connection low speed -> Unsupported (no PRE token in current OTG interface implementation) 00186 if(port_status&((U32)1<<PORT_LOW_SPEED)) 00187 { 00188 00189 } 00190 else // Port Connection full speed : OK 00191 { 00192 enumerate_hub_port_device(c,HUB_PORT_CONNECTION,hub_number); 00193 } 00194 } 00195 else 00196 { 00197 // Port disconnection 00198 enumerate_hub_port_device(c,HUB_PORT_DISCONNECT,hub_number); 00199 } 00200 } 00201 else if( port_status & ((U32)1<<C_PORT_SUSPEND)) 00202 { 00203 // Port Suspend state 00204 Clear_port_feature(C_PORT_SUSPEND,c); 00205 } 00206 else if( port_status & ((U32)1<<C_PORT_RESET)) 00207 { 00208 // Port Reset sent 00209 Clear_port_feature(C_PORT_RESET,c); 00210 enumerate_hub_port_device(c,HUB_PORT_RESET,hub_number); 00211 } 00212 } 00213 00214 // Previous port using device address zero abort all port device management 00215 // (There should be one and only device with adddress zero on the USB tree) 00216 if((hub_port_state[hub_number-1][c-1] != HUB_DEVICE_POWERED) && (hub_port_state[hub_number-1][c-1] != HUB_DEVICE_READY)) 00217 { 00218 break; // Break port loop and exit from function 00219 } 00220 } 00221 }
Manage the enumeration process of the device connected to the hub port number specified
U8 | hub_port: the usb hub downstream port number | |
U8 | port_ev: the hub port event detected |
Definition at line 232 of file usb_host_hub.c.
References c, CONTROL_GOOD, data_stage, S_usb_tree::device, S_usb_device::device_address, DEVICE_BASE_ADDRESS, S_usb_device::ep_ctrl_size, EVT_HOST_SOF, f_hub_port_disconnect, Get_class, Get_hub_descriptor, host_auto_configure_endpoint(), host_check_class(), host_check_VID_PID(), Host_device_not_supported_action, Host_device_supported_action, HOST_FALSE, host_get_configuration_descriptor, host_get_device_descriptor, host_get_device_descriptor_uncomplete, Host_select_device, host_set_address, host_set_configuration, Host_set_device_supported, HOST_TRUE, HUB_CLASS, hub_device_address, HUB_DEVICE_POWERED, HUB_DEVICE_READY, HUB_DEVICE_WAIT_RST_1, HUB_DEVICE_WAIT_RST_2, hub_init(), HUB_PORT_CONNECTION, HUB_PORT_DISCONNECT, S_usb_device::hub_port_nb, HUB_PORT_RESET, hub_port_state, Is_host_emergency_exit, Is_usb_bconnection_error_interrupt, Is_usb_event, MAX_DEVICE_IN_USB_TREE, S_usb_tree::nb_device, nb_hub_present, NB_PORT_OFFSET, new_device_connected, OFFSET_FIELD_MAXPACKETSIZE, S_usb_device::parent_hub_number, PORT_POWER, remove_device_entry(), Set_port_feature, Set_port_reset, TRUE, Usb_ack_event, usb_tree, and User_configure_endpoint.
00233 { 00234 U8 device_index=0; 00235 U8 hub_device_index=0; 00236 U8 nb_port,c; 00237 00238 // Find the device index of the hub_number 00239 for(c=0;c<MAX_DEVICE_IN_USB_TREE;c++) 00240 { 00241 if(usb_tree.device[c].device_address==hub_device_address[hub_number-1]) 00242 { 00243 hub_device_index=c; 00244 } 00245 } 00246 00247 // Find the device index in linked to the specified hub port 00248 // -> look in the usb_tree structure 00249 for(c=0;c<MAX_DEVICE_IN_USB_TREE;c++) 00250 { 00251 if((usb_tree.device[c].hub_port_nb == hub_port) && (usb_tree.device[c].parent_hub_number==hub_number)) 00252 { 00253 device_index=c; 00254 break; 00255 } 00256 } 00257 00258 // Port disconnection detected -> delete device entry and RAZ state machine 00259 // and return ... 00260 if(port_ev==HUB_PORT_DISCONNECT) 00261 { 00262 remove_device_entry(device_index); // Remove device entry in usb tree 00263 usb_tree.nb_device--; 00264 hub_port_state[hub_number-1][hub_port-1]=HUB_DEVICE_POWERED; // RAZ state machine 00265 f_hub_port_disconnect = TRUE; // Flag for device disconnection signaling 00266 return; 00267 } 00268 00269 // Device enumeration state machine for hub port 00270 switch(hub_port_state[hub_number-1][hub_port-1]) 00271 { 00272 // New device connection 00273 // -> Generate first USB reset for the device 00274 case HUB_DEVICE_POWERED: 00275 if(port_ev==HUB_PORT_CONNECTION) 00276 { 00277 device_index=usb_tree.nb_device++; 00278 usb_tree.device[device_index].hub_port_nb=hub_port; 00279 usb_tree.device[device_index].parent_hub_number=hub_number; 00280 Host_select_device(hub_device_index); 00281 Set_port_reset(hub_port); 00282 hub_port_state[hub_number-1][hub_port-1]=HUB_DEVICE_WAIT_RST_1; 00283 } 00284 break; 00285 00286 // Wait First reset successfully generated then: 00287 // -> Get device descriptor to get endpoint zero lenght 00288 // -> Generate second USB reset for the device 00289 case HUB_DEVICE_WAIT_RST_1: 00290 if(port_ev==HUB_PORT_RESET) 00291 { 00292 c = 0; 00293 while (c<250) // wait 250ms after USB reset 00294 { 00295 if (Is_usb_event(EVT_HOST_SOF)) { Usb_ack_event(EVT_HOST_SOF); c++; }// Count Start Of frame 00296 if (Is_host_emergency_exit() || Is_usb_bconnection_error_interrupt()) 00297 {hub_port_state[hub_number-1][hub_port-1]=HUB_DEVICE_POWERED; return;} 00298 } 00299 Host_select_device(device_index); 00300 // By default assumes its ctrl endpoint is 8 bytes only 00301 usb_tree.device[device_index].ep_ctrl_size=8; 00302 // Get its device descriptor to get ctrl endpoint size 00303 if( CONTROL_GOOD == host_get_device_descriptor_uncomplete()) 00304 { 00305 Host_select_device(hub_device_index); 00306 usb_tree.device[device_index].ep_ctrl_size=data_stage[OFFSET_FIELD_MAXPACKETSIZE]; 00307 Set_port_reset(hub_port); // Second USB reset 00308 hub_port_state[hub_number-1][hub_port-1]=HUB_DEVICE_WAIT_RST_2; 00309 } 00310 } 00311 break; 00312 00313 // Wait Second USB reset successfully generated then: 00314 // -> Enumerate the new device 00315 case HUB_DEVICE_WAIT_RST_2: 00316 if(port_ev==HUB_PORT_RESET) 00317 { 00318 c = 0; 00319 while (c<250) // wait 250ms after USB reset 00320 { 00321 if (Is_usb_event(EVT_HOST_SOF)) { Usb_ack_event(EVT_HOST_SOF); c++; }// Count Start Of frame 00322 if (Is_host_emergency_exit() || Is_usb_bconnection_error_interrupt()) 00323 {hub_port_state[hub_number-1][hub_port-1]=HUB_DEVICE_POWERED; return;} 00324 } 00325 // Select this new device 00326 Host_select_device(device_index); 00327 00328 // Give an absolute device address 00329 host_set_address(DEVICE_BASE_ADDRESS+device_index); 00330 usb_tree.device[+device_index].device_address=DEVICE_BASE_ADDRESS+device_index; 00331 00332 // Select this new address 00333 Host_select_device(device_index); 00334 00335 // Get the device descriptor 00336 if (CONTROL_GOOD == host_get_device_descriptor()) 00337 { 00338 // Check if the device connected belongs to the supported devices table 00339 if (HOST_TRUE == host_check_VID_PID()) 00340 { 00341 Host_set_device_supported(); 00342 Host_device_supported_action(); 00343 } 00344 else 00345 { 00346 #if (HOST_STRICT_VID_PID_TABLE==ENABLE) 00347 Host_device_not_supported_action(); 00348 return 00349 #endif 00350 } 00351 // Get Confiuration descriptor 00352 if (CONTROL_GOOD == host_get_configuration_descriptor()) 00353 { 00354 if (HOST_FALSE != host_check_class()) // Class support OK? 00355 { 00356 #if (HOST_AUTO_CFG_ENDPOINT==ENABLE) 00357 if (host_auto_configure_endpoint()) 00358 #else 00359 if(User_configure_endpoint()) // User call here instead of autoconfig 00360 #endif 00361 { 00362 if (CONTROL_GOOD == host_set_configuration(1)) // Send Set_configuration 00363 { 00364 hub_port_state[hub_number-1][hub_port-1] = HUB_DEVICE_READY; 00365 // Check if the connected device is a HUB 00366 if(Get_class(0)==HUB_CLASS ) 00367 { 00368 // Get hub descriptor 00369 if( Get_hub_descriptor()==CONTROL_GOOD) 00370 { 00371 // Power each port of the hub 00372 nb_port=data_stage[NB_PORT_OFFSET]; 00373 for(c=1;c<=nb_port;c++) 00374 { 00375 Set_port_feature(PORT_POWER,c); 00376 } 00377 nb_hub_present++; 00378 hub_init(nb_hub_present-1); 00379 hub_device_address[nb_hub_present-1]=usb_tree.device[device_index].device_address; 00380 } 00381 } 00382 else // New device is not a hub -> Signals device connection 00383 { 00384 new_device_connected=TRUE; 00385 } 00386 } 00387 } 00388 } 00389 } 00390 } 00391 } 00392 break; 00393 00394 case HUB_DEVICE_READY: 00395 break; 00396 default: 00397 break; 00398 } 00399 }
void hub_init | ( | U8 | hub_number | ) |
This function initializes the enumeration state machines for each hub port
U8 | hub_number |
Definition at line 91 of file usb_host_hub.c.
References HUB_DEVICE_POWERED, HUB_MAX_NB_PORT, hub_port_state, and i.
00092 { 00093 U8 i; 00094 00095 for(i=0;i<HUB_MAX_NB_PORT;i++) 00096 { 00097 hub_port_state[hub_number][i]=HUB_DEVICE_POWERED; 00098 } 00099 }
U8 hub_device_address[USB_MAX_HUB_NUMBER] |
Table to store the device address of the hub connected in the USB tree.
Definition at line 74 of file usb_host_hub.c.
U8 hub_port_state[USB_MAX_HUB_NUMBER][HUB_MAX_NB_PORT] |
U8 hub_device_address[USB_MAX_HUB_NUMBER] |
Table to store the device address of the hub connected in the USB tree.
Definition at line 74 of file usb_host_hub.c.