Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of F401RE-USBHost by
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);
}
