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.
Dependents: F401RE-USBHostMIDI_RecieveExample
Fork of F401RE-USBHost by
Diff: USBHost/USBEndpoint.h
- Revision:
- 10:40c7f6788902
- Parent:
- 9:7f9f64cf5ded
--- a/USBHost/USBEndpoint.h Mon Feb 03 13:00:16 2014 +0000
+++ b/USBHost/USBEndpoint.h Wed Feb 05 13:34:37 2014 +0000
@@ -29,8 +29,25 @@
/**
* Constructor
*/
- USBEndpoint() : data01_toggle(DATA0),address(0),MaxPacketSize(8) {
- dev = NULL;
+ USBEndpoint(USBDeviceConnected* _dev) {
+ init(CONTROL_ENDPOINT, IN, 8, 0);
+ dev = _dev;
+ }
+
+ /**
+ * Initialize an endpoint
+ *
+ * @param type endpoint type
+ * @param dir endpoint direction
+ * @param size endpoint size
+ * @param ep_number endpoint number
+ */
+ void init(ENDPOINT_TYPE _type, ENDPOINT_DIRECTION _dir, uint32_t size, uint8_t ep_number) {
+ type = _type;
+ dir = _dir;
+ MaxPacketSize = size;
+ address = ep_number;
+ data01_toggle = DATA0;
}
/**
@@ -69,9 +86,8 @@
void setBuffer(uint8_t* buf, int size) { buf_start = buf, buf_size = size; }
void setLengthTransferred(int len) { transferred = len; };
void setSize(int size) { MaxPacketSize = size; }
- void setType(ENDPOINT_TYPE _type) { type = _type; };
- void setAddress(uint8_t addr) { address = addr; }
void setData01(uint8_t data01) { data01_toggle = data01; }
+ void setNextEndpoint(USBEndpoint* ep) { nextEp = ep; };
USBDeviceConnected* getDevice() { return dev; }
ENDPOINT_TYPE getType() { return type; };
@@ -80,11 +96,12 @@
int getBufSize() { return buf_size; }
uint8_t getAddress(){ return address; };
int getSize() { return MaxPacketSize; }
- ENDPOINT_DIRECTION getDir() { return (address & 0x80) ? IN : OUT; }
+ ENDPOINT_DIRECTION getDir() { return dir; }
uint8_t getData01() { return data01_toggle; }
void toggleData01() {
data01_toggle = (data01_toggle == DATA0) ? DATA1 : DATA0;
}
+ USBEndpoint* nextEndpoint() { return nextEp; };
private:
ENDPOINT_TYPE type;
@@ -92,12 +109,36 @@
USBDeviceConnected* dev;
uint8_t data01_toggle; // DATA0,DATA1
uint8_t address;
-
int transferred;
uint8_t * buf_start;
int buf_size;
-
FunctionPointer rx;
+ int MaxPacketSize;
+ USBEndpoint* nextEp;
+};
- int MaxPacketSize;
+class EndpointQueue {
+public:
+ EndpointQueue():head(NULL),tail(NULL) {}
+ void push(USBEndpoint* ep) {
+ if (head) {
+ tail->setNextEndpoint(ep);
+ } else {
+ head = ep;
+ }
+ tail = ep;
+ ep->setNextEndpoint(NULL);
+ }
+ USBEndpoint* pop() {
+ USBEndpoint* ep = head;
+ if (ep) {
+ head = ep->nextEndpoint();
+ }
+ return ep;
+ }
+ bool empty() { return head == NULL; }
+
+private:
+ USBEndpoint* head;
+ USBEndpoint* tail;
};
