Example of using the UsbHostMAX3421E library.
Dependencies: mbed UsbHostMAX3421E millis
main.cpp@0:f12b0c43b7c8, 2020-07-12 (annotated)
- Committer:
- hudakz
- Date:
- Sun Jul 12 20:41:47 2020 +0000
- Revision:
- 0:f12b0c43b7c8
- Child:
- 1:587777f16756
Example of using the UsbHostMAX3421E library.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hudakz | 0:f12b0c43b7c8 | 1 | #include "mbed.h" |
hudakz | 0:f12b0c43b7c8 | 2 | |
hudakz | 0:f12b0c43b7c8 | 3 | #include "Usb.h" |
hudakz | 0:f12b0c43b7c8 | 4 | #include "usbhub.h" |
hudakz | 0:f12b0c43b7c8 | 5 | #include "pgm_strings.h" |
hudakz | 0:f12b0c43b7c8 | 6 | |
hudakz | 0:f12b0c43b7c8 | 7 | USB usb(D11, D12, D13, D10, D9); // mosi, miso, sck, ss, intr |
hudakz | 0:f12b0c43b7c8 | 8 | |
hudakz | 0:f12b0c43b7c8 | 9 | uint8_t getConfDescr(uint8_t addr, uint8_t conf); |
hudakz | 0:f12b0c43b7c8 | 10 | |
hudakz | 0:f12b0c43b7c8 | 11 | void printAllAddresses(UsbDevice* pdev) |
hudakz | 0:f12b0c43b7c8 | 12 | { |
hudakz | 0:f12b0c43b7c8 | 13 | UsbDeviceAddress adr; |
hudakz | 0:f12b0c43b7c8 | 14 | |
hudakz | 0:f12b0c43b7c8 | 15 | adr.devAddress = pdev->address.devAddress; |
hudakz | 0:f12b0c43b7c8 | 16 | printf("\r\nAddr: 0x%x (0x%x.0x%x.0x%x)\r\n", adr.devAddress, adr.bmHub, adr.bmParent, adr.bmAddress); |
hudakz | 0:f12b0c43b7c8 | 17 | } |
hudakz | 0:f12b0c43b7c8 | 18 | |
hudakz | 0:f12b0c43b7c8 | 19 | /** |
hudakz | 0:f12b0c43b7c8 | 20 | * @brief |
hudakz | 0:f12b0c43b7c8 | 21 | * @note |
hudakz | 0:f12b0c43b7c8 | 22 | * @param |
hudakz | 0:f12b0c43b7c8 | 23 | * @retval |
hudakz | 0:f12b0c43b7c8 | 24 | */ |
hudakz | 0:f12b0c43b7c8 | 25 | void printAddress(uint8_t addr) |
hudakz | 0:f12b0c43b7c8 | 26 | { |
hudakz | 0:f12b0c43b7c8 | 27 | UsbDeviceAddress adr; |
hudakz | 0:f12b0c43b7c8 | 28 | |
hudakz | 0:f12b0c43b7c8 | 29 | adr.devAddress = addr; |
hudakz | 0:f12b0c43b7c8 | 30 | printf("\r\nADDR:\t0x%x\r\n", adr.devAddress); |
hudakz | 0:f12b0c43b7c8 | 31 | printf("DEV:\t0x%x\r\n", adr.bmAddress); |
hudakz | 0:f12b0c43b7c8 | 32 | printf("PRNT:\t0x%x\r\n", adr.bmParent); |
hudakz | 0:f12b0c43b7c8 | 33 | printf("HUB:\t0x%x\r\n", adr.bmHub); |
hudakz | 0:f12b0c43b7c8 | 34 | } |
hudakz | 0:f12b0c43b7c8 | 35 | |
hudakz | 0:f12b0c43b7c8 | 36 | /** |
hudakz | 0:f12b0c43b7c8 | 37 | * @brief |
hudakz | 0:f12b0c43b7c8 | 38 | * @note |
hudakz | 0:f12b0c43b7c8 | 39 | * @param |
hudakz | 0:f12b0c43b7c8 | 40 | * @retval |
hudakz | 0:f12b0c43b7c8 | 41 | */ |
hudakz | 0:f12b0c43b7c8 | 42 | uint8_t getDevDescr(uint8_t addr, uint8_t& num_conf) |
hudakz | 0:f12b0c43b7c8 | 43 | { |
hudakz | 0:f12b0c43b7c8 | 44 | USB_DEVICE_DESCRIPTOR buf; |
hudakz | 0:f12b0c43b7c8 | 45 | uint8_t rcode; |
hudakz | 0:f12b0c43b7c8 | 46 | |
hudakz | 0:f12b0c43b7c8 | 47 | rcode = usb.getDevDescr(addr, 0, 0x12, (uint8_t*) &buf); |
hudakz | 0:f12b0c43b7c8 | 48 | if (rcode) { |
hudakz | 0:f12b0c43b7c8 | 49 | return(rcode); |
hudakz | 0:f12b0c43b7c8 | 50 | } |
hudakz | 0:f12b0c43b7c8 | 51 | |
hudakz | 0:f12b0c43b7c8 | 52 | printf("%s", Dev_Header_str); |
hudakz | 0:f12b0c43b7c8 | 53 | printf("%s0x%.8x", Dev_Length_str, buf.bLength); |
hudakz | 0:f12b0c43b7c8 | 54 | printf("%s0x%.8x", Dev_Type_str, buf.bDescriptorType); |
hudakz | 0:f12b0c43b7c8 | 55 | printf("%s0x%.16x", Dev_Version_str, buf.bcdUSB); |
hudakz | 0:f12b0c43b7c8 | 56 | printf("%s0x%.8x", Dev_Class_str, buf.bDeviceClass); |
hudakz | 0:f12b0c43b7c8 | 57 | printf("%s0x%.8x", Dev_Subclass_str, buf.bDeviceSubClass); |
hudakz | 0:f12b0c43b7c8 | 58 | printf("%s0x%.8x", Dev_Protocol_str, buf.bDeviceProtocol); |
hudakz | 0:f12b0c43b7c8 | 59 | printf("%s0x%.8x", Dev_Pktsize_str, buf.bMaxPacketSize0); |
hudakz | 0:f12b0c43b7c8 | 60 | printf("%s0x%.16x", Dev_Vendor_str, buf.idVendor); |
hudakz | 0:f12b0c43b7c8 | 61 | printf("%s0x%.16x", Dev_Product_str, buf.idProduct); |
hudakz | 0:f12b0c43b7c8 | 62 | printf("%s0x%.16x", Dev_Revision_str, buf.bcdDevice); |
hudakz | 0:f12b0c43b7c8 | 63 | printf("%s0x%.8x", Dev_Mfg_str, buf.iManufacturer); |
hudakz | 0:f12b0c43b7c8 | 64 | printf("%s0x%.8x", Dev_Prod_str, buf.iProduct); |
hudakz | 0:f12b0c43b7c8 | 65 | printf("%s0x%.8x", Dev_Serial_str, buf.iSerialNumber); |
hudakz | 0:f12b0c43b7c8 | 66 | printf("%s0x%.8x", Dev_Nconf_str, buf.bNumConfigurations); |
hudakz | 0:f12b0c43b7c8 | 67 | num_conf = buf.bNumConfigurations; |
hudakz | 0:f12b0c43b7c8 | 68 | return(0); |
hudakz | 0:f12b0c43b7c8 | 69 | } |
hudakz | 0:f12b0c43b7c8 | 70 | |
hudakz | 0:f12b0c43b7c8 | 71 | /* function to print configuration descriptor */ |
hudakz | 0:f12b0c43b7c8 | 72 | void printConfDescr(uint8_t* descr_ptr) |
hudakz | 0:f12b0c43b7c8 | 73 | { |
hudakz | 0:f12b0c43b7c8 | 74 | USB_CONFIGURATION_DESCRIPTOR* conf_ptr = (USB_CONFIGURATION_DESCRIPTOR*)descr_ptr; |
hudakz | 0:f12b0c43b7c8 | 75 | |
hudakz | 0:f12b0c43b7c8 | 76 | printf("%s", Conf_Header_str); |
hudakz | 0:f12b0c43b7c8 | 77 | printf("%s0x%.16x", Conf_Totlen_str, conf_ptr->wTotalLength); |
hudakz | 0:f12b0c43b7c8 | 78 | printf("%s0x%.8x", Conf_Nint_str, conf_ptr->bNumInterfaces); |
hudakz | 0:f12b0c43b7c8 | 79 | printf("%s0x%.8x", Conf_Value_str, conf_ptr->bConfigurationValue); |
hudakz | 0:f12b0c43b7c8 | 80 | printf("%s0x%.8x", Conf_String_str, conf_ptr->iConfiguration); |
hudakz | 0:f12b0c43b7c8 | 81 | printf("%s0x%.8x", Conf_Attr_str, conf_ptr->bmAttributes); |
hudakz | 0:f12b0c43b7c8 | 82 | printf("%s0x%.8x", Conf_Pwr_str, conf_ptr->bMaxPower); |
hudakz | 0:f12b0c43b7c8 | 83 | return; |
hudakz | 0:f12b0c43b7c8 | 84 | } |
hudakz | 0:f12b0c43b7c8 | 85 | |
hudakz | 0:f12b0c43b7c8 | 86 | /* function to print interface descriptor */ |
hudakz | 0:f12b0c43b7c8 | 87 | void printIntfDescr(uint8_t* descr_ptr) |
hudakz | 0:f12b0c43b7c8 | 88 | { |
hudakz | 0:f12b0c43b7c8 | 89 | USB_INTERFACE_DESCRIPTOR* intf_ptr = (USB_INTERFACE_DESCRIPTOR*)descr_ptr; |
hudakz | 0:f12b0c43b7c8 | 90 | |
hudakz | 0:f12b0c43b7c8 | 91 | printf("%s", Int_Header_str); |
hudakz | 0:f12b0c43b7c8 | 92 | printf("%s0x%.8x", Int_Number_str, intf_ptr->bInterfaceNumber); |
hudakz | 0:f12b0c43b7c8 | 93 | printf("%s0x%.8x", Int_Alt_str, intf_ptr->bAlternateSetting); |
hudakz | 0:f12b0c43b7c8 | 94 | printf("%s0x%.8x", Int_Endpoints_str, intf_ptr->bNumEndpoints); |
hudakz | 0:f12b0c43b7c8 | 95 | printf("%s0x%.8x", Int_Class_str, intf_ptr->bInterfaceClass); |
hudakz | 0:f12b0c43b7c8 | 96 | printf("%s0x%.8x", Int_Subclass_str, intf_ptr->bInterfaceSubClass); |
hudakz | 0:f12b0c43b7c8 | 97 | printf("%s0x%.8x", Int_Protocol_str, intf_ptr->bInterfaceProtocol); |
hudakz | 0:f12b0c43b7c8 | 98 | printf("%s0x%.8x", Int_String_str, intf_ptr->iInterface); |
hudakz | 0:f12b0c43b7c8 | 99 | return; |
hudakz | 0:f12b0c43b7c8 | 100 | } |
hudakz | 0:f12b0c43b7c8 | 101 | |
hudakz | 0:f12b0c43b7c8 | 102 | /* function to print endpoint descriptor */ |
hudakz | 0:f12b0c43b7c8 | 103 | void printEpDescr(uint8_t* descr_ptr) |
hudakz | 0:f12b0c43b7c8 | 104 | { |
hudakz | 0:f12b0c43b7c8 | 105 | USB_ENDPOINT_DESCRIPTOR* ep_ptr = (USB_ENDPOINT_DESCRIPTOR*)descr_ptr; |
hudakz | 0:f12b0c43b7c8 | 106 | |
hudakz | 0:f12b0c43b7c8 | 107 | printf("%s", End_Header_str); |
hudakz | 0:f12b0c43b7c8 | 108 | printf("%s0x%.8x", End_Address_str, ep_ptr->bEndpointAddress); |
hudakz | 0:f12b0c43b7c8 | 109 | printf("%s0x%.8x", End_Attr_str, ep_ptr->bmAttributes); |
hudakz | 0:f12b0c43b7c8 | 110 | printf("%s0x%.16x", End_Pktsize_str, ep_ptr->wMaxPacketSize); |
hudakz | 0:f12b0c43b7c8 | 111 | printf("%s0x%.8x", End_Interval_str, ep_ptr->bInterval); |
hudakz | 0:f12b0c43b7c8 | 112 | |
hudakz | 0:f12b0c43b7c8 | 113 | return; |
hudakz | 0:f12b0c43b7c8 | 114 | } |
hudakz | 0:f12b0c43b7c8 | 115 | |
hudakz | 0:f12b0c43b7c8 | 116 | /** |
hudakz | 0:f12b0c43b7c8 | 117 | * @brief |
hudakz | 0:f12b0c43b7c8 | 118 | * @note |
hudakz | 0:f12b0c43b7c8 | 119 | * @param |
hudakz | 0:f12b0c43b7c8 | 120 | * @retval |
hudakz | 0:f12b0c43b7c8 | 121 | */ |
hudakz | 0:f12b0c43b7c8 | 122 | void printHubDescr(uint8_t* descrptr, uint8_t addr) |
hudakz | 0:f12b0c43b7c8 | 123 | { |
hudakz | 0:f12b0c43b7c8 | 124 | HubDescriptor* pHub = (HubDescriptor*)descrptr; |
hudakz | 0:f12b0c43b7c8 | 125 | uint8_t len = *((uint8_t*)descrptr); |
hudakz | 0:f12b0c43b7c8 | 126 | |
hudakz | 0:f12b0c43b7c8 | 127 | printf("\r\n\r\nHub Descriptor:\r\n"); |
hudakz | 0:f12b0c43b7c8 | 128 | printf("bDescLength:\t\t0x%x\r\n", pHub->bDescLength); |
hudakz | 0:f12b0c43b7c8 | 129 | printf("bDescriptorType:\t0x%x\r\n", pHub->bDescriptorType); |
hudakz | 0:f12b0c43b7c8 | 130 | printf("bNbrPorts:\t\t0x%x\r\n", pHub->bNbrPorts); |
hudakz | 0:f12b0c43b7c8 | 131 | printf("LogPwrSwitchMode:\t0x%x\r\n", pHub->LogPwrSwitchMode); |
hudakz | 0:f12b0c43b7c8 | 132 | printf("CompoundDevice:\t\t0x%x\r\n", pHub->CompoundDevice); |
hudakz | 0:f12b0c43b7c8 | 133 | printf("OverCurrentProtectMode:\t0x%x", pHub->OverCurrentProtectMode); |
hudakz | 0:f12b0c43b7c8 | 134 | printf("TTThinkTime:\t\t0x%x", pHub->TTThinkTime); |
hudakz | 0:f12b0c43b7c8 | 135 | printf("PortIndicatorsSupported:0x%x", pHub->PortIndicatorsSupported); |
hudakz | 0:f12b0c43b7c8 | 136 | printf("Reserved:\t\t0x%x", pHub->Reserved); |
hudakz | 0:f12b0c43b7c8 | 137 | printf("bPwrOn2PwrGood:\t\t0x%x", pHub->bPwrOn2PwrGood); |
hudakz | 0:f12b0c43b7c8 | 138 | printf("bHubContrCurrent:\t0x%x", pHub->bHubContrCurrent); |
hudakz | 0:f12b0c43b7c8 | 139 | |
hudakz | 0:f12b0c43b7c8 | 140 | for (uint8_t i = 7; i < len; i++) |
hudakz | 0:f12b0c43b7c8 | 141 | printf("0x%.8x ", descrptr[i]); |
hudakz | 0:f12b0c43b7c8 | 142 | |
hudakz | 0:f12b0c43b7c8 | 143 | printf("\r\n"); |
hudakz | 0:f12b0c43b7c8 | 144 | |
hudakz | 0:f12b0c43b7c8 | 145 | //for (uint8_t i=1; i<=pHub->bNbrPorts; i++) |
hudakz | 0:f12b0c43b7c8 | 146 | // PrintHubPortStatus(&Usb, addr, i, 1); |
hudakz | 0:f12b0c43b7c8 | 147 | } |
hudakz | 0:f12b0c43b7c8 | 148 | |
hudakz | 0:f12b0c43b7c8 | 149 | /** |
hudakz | 0:f12b0c43b7c8 | 150 | * @brief |
hudakz | 0:f12b0c43b7c8 | 151 | * @note |
hudakz | 0:f12b0c43b7c8 | 152 | * @param |
hudakz | 0:f12b0c43b7c8 | 153 | * @retval |
hudakz | 0:f12b0c43b7c8 | 154 | */ |
hudakz | 0:f12b0c43b7c8 | 155 | void printDescriptors(uint8_t addr) |
hudakz | 0:f12b0c43b7c8 | 156 | { |
hudakz | 0:f12b0c43b7c8 | 157 | uint8_t rcode = 0; |
hudakz | 0:f12b0c43b7c8 | 158 | uint8_t num_conf = 0; |
hudakz | 0:f12b0c43b7c8 | 159 | |
hudakz | 0:f12b0c43b7c8 | 160 | rcode = getDevDescr((uint8_t) addr, num_conf); |
hudakz | 0:f12b0c43b7c8 | 161 | if (rcode) { |
hudakz | 0:f12b0c43b7c8 | 162 | printf("%s0x%.8%x", Gen_Error_str, rcode); |
hudakz | 0:f12b0c43b7c8 | 163 | } |
hudakz | 0:f12b0c43b7c8 | 164 | |
hudakz | 0:f12b0c43b7c8 | 165 | printf("\r\n"); |
hudakz | 0:f12b0c43b7c8 | 166 | |
hudakz | 0:f12b0c43b7c8 | 167 | for (int i = 0; i < num_conf; i++) { |
hudakz | 0:f12b0c43b7c8 | 168 | rcode = getConfDescr(addr, i); // get configuration descriptor |
hudakz | 0:f12b0c43b7c8 | 169 | if (rcode) { |
hudakz | 0:f12b0c43b7c8 | 170 | printf("%s0x%.8%x", Gen_Error_str, rcode); |
hudakz | 0:f12b0c43b7c8 | 171 | } |
hudakz | 0:f12b0c43b7c8 | 172 | |
hudakz | 0:f12b0c43b7c8 | 173 | printf("\r\n"); |
hudakz | 0:f12b0c43b7c8 | 174 | } |
hudakz | 0:f12b0c43b7c8 | 175 | } |
hudakz | 0:f12b0c43b7c8 | 176 | |
hudakz | 0:f12b0c43b7c8 | 177 | /** |
hudakz | 0:f12b0c43b7c8 | 178 | * @brief |
hudakz | 0:f12b0c43b7c8 | 179 | * @note |
hudakz | 0:f12b0c43b7c8 | 180 | * @param |
hudakz | 0:f12b0c43b7c8 | 181 | * @retval |
hudakz | 0:f12b0c43b7c8 | 182 | */ |
hudakz | 0:f12b0c43b7c8 | 183 | void printAllDescriptors(UsbDevice* pdev) |
hudakz | 0:f12b0c43b7c8 | 184 | { |
hudakz | 0:f12b0c43b7c8 | 185 | printf("\r\n"); |
hudakz | 0:f12b0c43b7c8 | 186 | printf("0x%.8x\r\n--", pdev->address.devAddress); |
hudakz | 0:f12b0c43b7c8 | 187 | printDescriptors(pdev->address.devAddress); |
hudakz | 0:f12b0c43b7c8 | 188 | } |
hudakz | 0:f12b0c43b7c8 | 189 | |
hudakz | 0:f12b0c43b7c8 | 190 | /*function to print unknown descriptor */ |
hudakz | 0:f12b0c43b7c8 | 191 | void printUnknownDescr(uint8_t* descr_ptr) |
hudakz | 0:f12b0c43b7c8 | 192 | { |
hudakz | 0:f12b0c43b7c8 | 193 | uint8_t length = *descr_ptr; |
hudakz | 0:f12b0c43b7c8 | 194 | uint8_t i; |
hudakz | 0:f12b0c43b7c8 | 195 | |
hudakz | 0:f12b0c43b7c8 | 196 | printf("%s", Unk_Header_str); |
hudakz | 0:f12b0c43b7c8 | 197 | printf("%s0x%.8", Unk_Length_str); |
hudakz | 0:f12b0c43b7c8 | 198 | printf("%s0x%.8", Unk_Type_str); |
hudakz | 0:f12b0c43b7c8 | 199 | printf("%s", Unk_Contents_str); |
hudakz | 0:f12b0c43b7c8 | 200 | descr_ptr += 2; |
hudakz | 0:f12b0c43b7c8 | 201 | for (i = 0; i < length; i++) { |
hudakz | 0:f12b0c43b7c8 | 202 | printf("0x%.8x", *descr_ptr); |
hudakz | 0:f12b0c43b7c8 | 203 | descr_ptr++; |
hudakz | 0:f12b0c43b7c8 | 204 | } |
hudakz | 0:f12b0c43b7c8 | 205 | } |
hudakz | 0:f12b0c43b7c8 | 206 | |
hudakz | 0:f12b0c43b7c8 | 207 | /** |
hudakz | 0:f12b0c43b7c8 | 208 | * @brief |
hudakz | 0:f12b0c43b7c8 | 209 | * @note |
hudakz | 0:f12b0c43b7c8 | 210 | * @param |
hudakz | 0:f12b0c43b7c8 | 211 | * @retval |
hudakz | 0:f12b0c43b7c8 | 212 | */ |
hudakz | 0:f12b0c43b7c8 | 213 | uint8_t getConfDescr(uint8_t addr, uint8_t conf) |
hudakz | 0:f12b0c43b7c8 | 214 | { |
hudakz | 0:f12b0c43b7c8 | 215 | uint8_t buf[BUFSIZE]; |
hudakz | 0:f12b0c43b7c8 | 216 | uint8_t* buf_ptr = buf; |
hudakz | 0:f12b0c43b7c8 | 217 | uint8_t rcode; |
hudakz | 0:f12b0c43b7c8 | 218 | uint8_t descr_length; |
hudakz | 0:f12b0c43b7c8 | 219 | uint8_t descr_type; |
hudakz | 0:f12b0c43b7c8 | 220 | uint16_t total_length; |
hudakz | 0:f12b0c43b7c8 | 221 | |
hudakz | 0:f12b0c43b7c8 | 222 | rcode = usb.getConfDescr(addr, 0, 4, conf, buf); //get total length |
hudakz | 0:f12b0c43b7c8 | 223 | LOBYTE(total_length) = buf[2]; |
hudakz | 0:f12b0c43b7c8 | 224 | HIBYTE(total_length) = buf[3]; |
hudakz | 0:f12b0c43b7c8 | 225 | if (total_length > 256) { |
hudakz | 0:f12b0c43b7c8 | 226 | |
hudakz | 0:f12b0c43b7c8 | 227 | //check if total length is larger than buffer |
hudakz | 0:f12b0c43b7c8 | 228 | printf("%s", Conf_Trunc_str); |
hudakz | 0:f12b0c43b7c8 | 229 | total_length = 256; |
hudakz | 0:f12b0c43b7c8 | 230 | } |
hudakz | 0:f12b0c43b7c8 | 231 | |
hudakz | 0:f12b0c43b7c8 | 232 | rcode = usb.getConfDescr(addr, 0, total_length, conf, buf); //get the whole descriptor |
hudakz | 0:f12b0c43b7c8 | 233 | while (buf_ptr < buf + total_length) { |
hudakz | 0:f12b0c43b7c8 | 234 | |
hudakz | 0:f12b0c43b7c8 | 235 | //parsing descriptors |
hudakz | 0:f12b0c43b7c8 | 236 | descr_length = *(buf_ptr); |
hudakz | 0:f12b0c43b7c8 | 237 | descr_type = *(buf_ptr + 1); |
hudakz | 0:f12b0c43b7c8 | 238 | switch (descr_type) { |
hudakz | 0:f12b0c43b7c8 | 239 | case (USB_DESCRIPTOR_CONFIGURATION): |
hudakz | 0:f12b0c43b7c8 | 240 | printConfDescr(buf_ptr); |
hudakz | 0:f12b0c43b7c8 | 241 | break; |
hudakz | 0:f12b0c43b7c8 | 242 | |
hudakz | 0:f12b0c43b7c8 | 243 | case (USB_DESCRIPTOR_INTERFACE): |
hudakz | 0:f12b0c43b7c8 | 244 | printIntfDescr(buf_ptr); |
hudakz | 0:f12b0c43b7c8 | 245 | break; |
hudakz | 0:f12b0c43b7c8 | 246 | |
hudakz | 0:f12b0c43b7c8 | 247 | case (USB_DESCRIPTOR_ENDPOINT): |
hudakz | 0:f12b0c43b7c8 | 248 | printEpDescr(buf_ptr); |
hudakz | 0:f12b0c43b7c8 | 249 | break; |
hudakz | 0:f12b0c43b7c8 | 250 | |
hudakz | 0:f12b0c43b7c8 | 251 | case 0x29: |
hudakz | 0:f12b0c43b7c8 | 252 | printHubDescr(buf_ptr, addr); |
hudakz | 0:f12b0c43b7c8 | 253 | break; |
hudakz | 0:f12b0c43b7c8 | 254 | |
hudakz | 0:f12b0c43b7c8 | 255 | default: |
hudakz | 0:f12b0c43b7c8 | 256 | printUnknownDescr(buf_ptr); |
hudakz | 0:f12b0c43b7c8 | 257 | break; |
hudakz | 0:f12b0c43b7c8 | 258 | } //switch( descr_type |
hudakz | 0:f12b0c43b7c8 | 259 | |
hudakz | 0:f12b0c43b7c8 | 260 | buf_ptr = (buf_ptr + descr_length); //advance buffer pointer |
hudakz | 0:f12b0c43b7c8 | 261 | } //while( buf_ptr <=... |
hudakz | 0:f12b0c43b7c8 | 262 | |
hudakz | 0:f12b0c43b7c8 | 263 | return(rcode); |
hudakz | 0:f12b0c43b7c8 | 264 | } |
hudakz | 0:f12b0c43b7c8 | 265 | |
hudakz | 0:f12b0c43b7c8 | 266 | |
hudakz | 0:f12b0c43b7c8 | 267 | /** |
hudakz | 0:f12b0c43b7c8 | 268 | * @brief |
hudakz | 0:f12b0c43b7c8 | 269 | * @note |
hudakz | 0:f12b0c43b7c8 | 270 | * @param |
hudakz | 0:f12b0c43b7c8 | 271 | * @retval |
hudakz | 0:f12b0c43b7c8 | 272 | */ |
hudakz | 0:f12b0c43b7c8 | 273 | int main() |
hudakz | 0:f12b0c43b7c8 | 274 | { |
hudakz | 0:f12b0c43b7c8 | 275 | printf("Starting..\r\n"); |
hudakz | 0:f12b0c43b7c8 | 276 | |
hudakz | 0:f12b0c43b7c8 | 277 | if (usb.init() == -1) |
hudakz | 0:f12b0c43b7c8 | 278 | printf("OSC did not start.\r\n"); |
hudakz | 0:f12b0c43b7c8 | 279 | |
hudakz | 0:f12b0c43b7c8 | 280 | wait_ms(200); |
hudakz | 0:f12b0c43b7c8 | 281 | |
hudakz | 0:f12b0c43b7c8 | 282 | while (true) { |
hudakz | 0:f12b0c43b7c8 | 283 | usb.task(); |
hudakz | 0:f12b0c43b7c8 | 284 | |
hudakz | 0:f12b0c43b7c8 | 285 | if (usb.getUsbTaskState() == USB_STATE_RUNNING) { |
hudakz | 0:f12b0c43b7c8 | 286 | usb.ForEachUsbDevice(&printAllDescriptors); |
hudakz | 0:f12b0c43b7c8 | 287 | usb.ForEachUsbDevice(&printAllAddresses); |
hudakz | 0:f12b0c43b7c8 | 288 | |
hudakz | 0:f12b0c43b7c8 | 289 | while (1) {} |
hudakz | 0:f12b0c43b7c8 | 290 | } |
hudakz | 0:f12b0c43b7c8 | 291 | } |
hudakz | 0:f12b0c43b7c8 | 292 | } |