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/USBEndpoint.h
- Revision:
- 10:40c7f6788902
- Parent:
- 9:7f9f64cf5ded
diff -r 7f9f64cf5ded -r 40c7f6788902 USBHost/USBEndpoint.h
--- 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;
};
