Simple USBHost library for Nucleo F446RE/F411RE/F401RE FRDM-KL46Z/KL25Z/F64F LPC4088/LPC1768
Dependents: F401RE-BTstack_example F401RE-USBHostMSD_HelloWorld
Fork of KL46Z-USBHost by
簡易USBホストライブラリです。
official-USBHostの下位互換で対応プログラムを僅かな修正で動かすことが出来ます。
Platforms
- Nucleo F446RE
- Nucleo F411RE
- Nucleo F401RE
- FRDM-K64F
- FRDM-KL46Z
- FRDM-KL25Z
- LPC4088
- LPC1768
Nucleo F446RE/F411RE/F401REのUSB接続方法
ST morpho | USB |
---|---|
U5V (CN10-8) | VBUS (1 RED) |
PA11 (CN10-14) | DM (2 WHITE) |
PA12 (CN10-12) | DP (3 GREEN) |
GND (CN10-20) | GND (4 BLACK) |
Examples
Import programF446RE-USBHostMouse_HelloWorld
USBHostMouse Hello World for ST-Nucleo-F446RE
Import programF401RE-USBHostMSD_HelloWorld
Simple USBHost MSD(USB flash drive) for Nucleo F401RE/FRDM-KL46Z test program
Import programF401RE-USBHostC270_example
Simple USBHost WebCam test program
Import programK64F_USBHostC270_example
Simple USBHost C270 example
Import programF401RE-BTstack_example
BTstack for Nucleo F401RE/FRDM-KL46Z example program
Import programUSBHostRSSI_example
Bluetooth device discovery example program.
Import programKL46Z-USBHostGPS_HelloWorld
Simple USBHost GPS Dongle Receiver for FRDM-KL46Z test program
Diff: USBHost/USBDeviceConnected.cpp
- Revision:
- 9:7f9f64cf5ded
- Parent:
- 8:6463cd1964c0
- Child:
- 10:40c7f6788902
--- a/USBHost/USBDeviceConnected.cpp Fri Jan 31 13:45:07 2014 +0000 +++ b/USBHost/USBDeviceConnected.cpp Mon Feb 03 13:00:16 2014 +0000 @@ -15,8 +15,7 @@ */ #include "USBDeviceConnected.h" -//#include "dbg.h" -#define USB_DBG(...) while(0) +#include "dbg.h" USBDeviceConnected::USBDeviceConnected() { init(); @@ -35,54 +34,33 @@ device_subclass = 0; proto = 0; lowSpeed = false; - for (int i = 0; i < MAX_INTF; i++) { - memset((void *)&intf[i], 0, sizeof(INTERFACE)); - intf[i].in_use = false; - for (int j = 0; j < MAX_ENDPOINT_PER_INTERFACE; j++) { - intf[i].ep[j] = NULL; - //strcpy(intf[i].name, "Unknown"); - } - } + intf.clear(); //hub_parent = NULL; //hub = NULL; - nb_interf = 0; -} - -INTERFACE * USBDeviceConnected::getInterface(uint8_t index) { - if (index >= MAX_INTF) - return NULL; - - if (intf[index].in_use) - return &intf[index]; - - return NULL; } bool USBDeviceConnected::addInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol) { - if ((intf_nb >= MAX_INTF) || (intf[intf_nb].in_use)) { + USB_DBG("intf_nb=%d", intf_nb); + INTERFACE* inter = intf.get(intf_nb); + if (inter) { return false; - } - intf[intf_nb].in_use = true; - intf[intf_nb].intf_class = intf_class; - intf[intf_nb].intf_subclass = intf_subclass; - intf[intf_nb].intf_protocol = intf_protocol; - intf[intf_nb].nb_endpoint = 0; + } + inter = new INTERFACE; + inter->in_use = true; + inter->intf_class = intf_class; + inter->intf_subclass = intf_subclass; + inter->intf_protocol = intf_protocol; + intf.put(intf_nb, inter); return true; } bool USBDeviceConnected::addEndpoint(uint8_t intf_nb, USBEndpoint * ept) { - if ((intf_nb >= MAX_INTF) || (intf[intf_nb].in_use == false) || (intf[intf_nb].nb_endpoint >= MAX_ENDPOINT_PER_INTERFACE)) { + INTERFACE* inter = intf.get(intf_nb); + if (inter == NULL) { return false; } - intf[intf_nb].nb_endpoint++; - - for (int i = 0; i < MAX_ENDPOINT_PER_INTERFACE; i++) { - if (intf[intf_nb].ep[i] == NULL) { - intf[intf_nb].ep[i] = ept; - return true; - } - } - return false; + inter->ep.push(ept); + return true; } void USBDeviceConnected::init(uint8_t hub_, uint8_t port_, bool lowSpeed_) { @@ -102,15 +80,15 @@ USBEndpoint * USBDeviceConnected::getEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir, uint8_t index) { - if (intf_nb >= MAX_INTF) { - return NULL; - } - for (int i = 0; i < MAX_ENDPOINT_PER_INTERFACE; i++) { - if ((intf[intf_nb].ep[i]->getType() == type) && (intf[intf_nb].ep[i]->getDir() == dir)) { + USB_DBG("intf_nb=%d", intf_nb); + INTERFACE* inter = intf.get(intf_nb); + USB_TEST_ASSERT(inter); + for (int i = 0; i < inter->ep.size(); i++) { + if ((inter->ep.at(i)->getType() == type) && (inter->ep.at(i)->getDir() == dir)) { if(index) { index--; } else { - return intf[intf_nb].ep[i]; + return inter->ep.at(i); } } } @@ -118,8 +96,7 @@ } USBEndpoint * USBDeviceConnected::getEndpoint(uint8_t intf_nb, uint8_t index) { - if ((intf_nb >= MAX_INTF) || (index >= MAX_ENDPOINT_PER_INTERFACE)) { - return NULL; - } - return intf[intf_nb].ep[index]; + INTERFACE* inter = intf.get(intf_nb); + USB_TEST_ASSERT(inter); + return inter->ep.at(index); }