BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
Diff: LogitechC270/LogitechC270.h
- Revision:
- 0:2a9734a95d55
- Child:
- 1:80205a2de336
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LogitechC270/LogitechC270.h Tue Dec 04 13:39:57 2012 +0000 @@ -0,0 +1,77 @@ +#ifndef LOGITECH_C270_H +#define LOGITECH_C270_H + +#define C270_160x120 2 +#define C270_176x144 3 +#define C270_320x176 4 +#define C270_320x240 5 +#define C270_352x288 6 +#define C270_432x240 7 +#define C270_640x480 1 +#define C270_544x288 8 +#define C270_640x360 9 +#define C270_752x416 10 +#define C270_800x448 11 +#define C270_800x600 12 + +#define _30FPS 333333 +#define _25FPS 400000 +#define _20FPS 500000 +#define _15FPS 666666 +#define _10FPS 1000000 +#define _5FPS 2000000 + +#define C270_MJPEG 2 +#define C270_YUV2 1 + +#define SET_CUR 0x01 +#define GET_CUR 0x81 +#define GET_MIN 0x82 +#define GET_MAX 0x83 +#define GET_RES 0x84 +#define GET_LEN 0x85 +#define GET_INFO 0x86 +#define GET_DEF 0x87 + +#define VS_PROBE_CONTROL 0x01 +#define VS_COMMIT_CONTROL 0x02 + +class LogitechC270 { +public: + LogitechC270(int frame = C270_160x120, uint32_t interval = _5FPS, ControlEp* ctlEp = NULL); + void poll(); + int Control(int req, int cs, int index, uint8_t* buf, int size); + uint16_t vid; + uint16_t pid; + ControlEp* m_ctlEp; + IsochronousEp* m_isoEp; + uint32_t report_cc_count[16]; // ConditionCode + uint32_t report_ps_cc_count[16]; // Packt Status ConditionCode + // callback + void onResult(uint16_t frame, uint8_t* buf, int len); + void setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) ) + { + m_pCb = pMethod; + m_pCbItem = NULL; + m_pCbMeth = NULL; + } + + class CDummy; + template<class T> + void setOnResult( T* pItem, void (T::*pMethod)(uint16_t, uint8_t*, int) ) + { + m_pCb = NULL; + m_pCbItem = (CDummy*) pItem; + m_pCbMeth = (void (CDummy::*)(uint16_t, uint8_t*, int)) pMethod; + } + void clearOnResult() + { + m_pCb = NULL; + m_pCbItem = NULL; + m_pCbMeth = NULL; + } + CDummy* m_pCbItem; + void (CDummy::*m_pCbMeth)(uint16_t, uint8_t*, int); + void (*m_pCb)(uint16_t, uint8_t*, int); +}; +#endif //LOGITECH_C270_H