testing n-Bed with a Logitech C270 camera
Fork of USBHostC270_example by
Diff: USBHostC270/BaseUvc.h
- Revision:
- 11:6a8eef89eb22
- Parent:
- 10:387c49b2fc7e
- Child:
- 12:ea4badc78215
--- a/USBHostC270/BaseUvc.h Sun Mar 17 13:22:13 2013 +0000 +++ b/USBHostC270/BaseUvc.h Mon Mar 18 12:34:47 2013 +0000 @@ -104,8 +104,45 @@ Control |= size<<16; } - inline void setSkip() { - Control |= 1<<14; + int Skip() { + return (Control>>14) & 1; + } + + void setSkip() { + Control |= (1<<14); + } + + void setFormat() { + Control |= (1<<15); + } + + template<typename T> + inline bool enqueue(T* td) { + if (td) { + T* tail = reinterpret_cast<T*>(TailTd); + if (tail) { + tail->Next = td; + TailTd = reinterpret_cast<HCTD*>(td); + return true; + } + } + return false; + } + + template<typename T> + inline T* dequeue() { + T* head = reinterpret_cast<T*>(reinterpret_cast<uint32_t>(HeadTd)&~3); // delete Halted and Toggle Carry bit + T* tail = reinterpret_cast<T*>(TailTd); + if (head == NULL || tail == NULL || head == tail) { + return NULL; + } + HeadTd = reinterpret_cast<HCTD*>(head->Next); + return head; + } + template<typename T> + void init_queue(T* td) { + TailTd = reinterpret_cast<HCTD*>(td); + HeadTd = reinterpret_cast<HCTD*>(td); } }; @@ -165,7 +202,7 @@ class BaseEp { // endpoint public: - BaseEp(int addr, uint8_t ep = 0, uint16_t size = 8, int lowSpeed = 0); + void init(int addr, uint8_t ep = 0, uint16_t size = 8, int lowSpeed = 0); int GetAddr(); int GetLowSpeed(); void update_FunctionAddress(int addr); @@ -189,7 +226,7 @@ class IsochronousEp : public BaseEp { public: - IsochronousEp(int addr, uint8_t ep, uint16_t size); + void init(int addr, uint8_t ep, uint16_t size); void reset(int delay_ms = 100); HCITD* isochronousReceive(int millisec=osWaitForever); int isochronousSend(uint8_t* buf, int len, int millisec=osWaitForever);