19#define FS_C_HUB_LOCAL_POWER 0
20#define FS_C_HUB_OVER_CURRENT 1
22#define FS_PORT_CONNECTION 0
23#define FS_PORT_ENABLE 1
24#define FS_PORT_SUSPEND 2
25#define FS_PORT_OVER_CURRENT 3
26#define FS_PORT_RESET 4
27#define FS_PORT_POWER 8
28#define FS_C_PORT_CONNECTION 16
29#define FS_C_PORT_ENABLE 17
30#define FS_C_PORT_SUSPEND 18
31#define FS_C_PORT_OVER_CURRENT 19
32#define FS_C_PORT_RESET 20
37#define HUB_S_LOCAL_POWER (1UL << 0)
38#define HUB_S_OVERCURRENT (1UL << 1)
40#define HUB_C_LOCAL_POWER (1UL << 0)
41#define HUB_C_OVERCURRENT (1UL << 1)
43#define PORT_S_CONNECTION (1UL << 0)
44#define PORT_S_ENABLE (1UL << 1)
45#define PORT_S_SUSPEND (1UL << 2)
46#define PORT_S_OVERCURRENT (1UL << 3)
47#define PORT_S_RESET (1UL << 4)
48#define PORT_S_PORT_POWER (1UL << 8)
49#define PORT_S_LOW_SPEED (1UL << 9)
50#define PORT_S_HIGH_SPEED (1UL << 10)
51#define PORT_S_TEST (1UL << 11)
52#define PORT_S_INDICATOR (1UL << 12)
54#define PORT_C_CONNECTION (1UL << 0)
55#define PORT_C_ENABLE (1UL << 1)
56#define PORT_C_SUSPEND (1UL << 2)
57#define PORT_C_OVERCURRENT (1UL << 3)
58#define PORT_C_RESET (1UL << 4)
66 __packed uint8_t bDescLength;
67 __packed uint8_t bDescriptorType;
68 __packed uint8_t bNbrPorts;
69 __packed uint16_t wHubCharacteristics;
70 __packed uint8_t bPwrOn2PwrGood;
71 __packed uint8_t bHubContrCurrent;
72 __packed uint8_t bDeviceRemovble;
73 __packed uint8_t PortPwrCtrlMask[16];
78 uint8_t bDescriptorType;
80 uint16_t wHubCharacteristics;
81 uint8_t bPwrOn2PwrGood;
82 uint8_t bHubContrCurrent;
83 uint8_t bDeviceRemovble;
84 uint8_t PortPwrCtrlMask[16];
91#define HUB_CHAR_LPSM 0x0003
92#define HUB_CHAR_COMPOUND 0x0004
93#define HUB_CHAR_OCPM 0x0018
94#define HUB_CHAR_TTTT 0x0060
95#define HUB_CHAR_PORTIND 0x0080
99#define HUB_LED_AMBER 1
100#define HUB_LED_GREEN 2
107#define PORT_RESET_RETRY 3
108#define PORT_RESET_TIME_MS 50
109#define PORT_RESET_RETRY_INC_MS 250
112#define HUB_STATUS_MAX_BYTE 2
117typedef struct hub_dev_t {
120 uint8_t buff[HUB_STATUS_MAX_BYTE];
123 uint8_t bPwrOn2PwrGood;
124 char pos_id[MAX_HUB_DEVICE+1];
125 int (*port_reset)(
struct hub_dev_t *hub,
int port);
void *__dso_handle __attribute__((weak))