UVC host library

Dependents:   LifeCam WebcamServer

Revision:
0:b0f04c137829
diff -r 000000000000 -r b0f04c137829 uvc/uvc.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uvc/uvc.h	Tue Jul 31 13:58:03 2012 +0000
@@ -0,0 +1,103 @@
+#ifndef UVC_H
+#define UVC_H
+#include "UsbBaseClass.h"
+#include "usb_mem.h"
+#include "usb_mjpeg.h"
+
+#define CLASS_VIDEO 0x0E
+
+#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
+
+#define PAYLOAD_UNDEF 0
+#define PAYLOAD_MJPEG 1
+#define PAYLOAD_YUY2  2
+
+class uvc : public UsbBaseClass {
+public:
+    uvc(int cam = 0);
+    ~uvc();
+    int setup();
+    int get_jpeg(const char* path);
+    int get_jpeg(uint8_t* buf, int size);
+    bool interrupt();
+    int isochronous();
+    void attach(usb_stream* stream);
+    void detach();
+    ///set format index
+    void SetFormatIndex(int index = 1);
+    ///set frame index
+    void SetFrameIndex(int index = 1);
+    ///set frame interval
+    void SetFrameInterval(int val = 2000000);
+    ///set packet size
+    void SetPacketSize(int size = 128);
+    ///set image size
+    void SetImageSize(int width = 160, int height = 120);
+    ///set payload MJPEG or YUY2
+    void SetPayload(int payload); // MJPEG,YUV422(YUY2)
+    UsbErr Control(int req, int cs, int index, uint8_t* buf, int size);
+    ///Setups the result callback
+    /**
+     @param pMethod : callback function
+     */
+    void setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) );
+  
+    ///Setups the result callback
+    /**
+    @param pItem : instance of class on which to execute the callback method
+    @param pMethod : callback method
+    */
+    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();
+
+    void poll();
+    void wait(float s);
+    void wait_ms(int ms);
+    uint16_t ReportConditionCode[16];
+protected:
+    int _init();
+    void _config(struct stcamcfg* cfg);
+    void probe_commit_control(struct stcamcfg* cfg);
+    void onResult(uint16_t frame, uint8_t* buf, int len);
+    bool m_connect;
+    bool m_init;
+    int m_cam;
+    UsbDevice* m_pDev;
+    UsbEndpoint* m_pEpIntIn;
+    UsbEndpoint* m_pEpIsoIn;
+    int m_width;
+    int m_height;
+    int m_payload;
+    int m_FormatIndex;
+    int m_FrameIndex;
+    int m_FrameInterval;
+    int m_PacketSize;
+    int m_FrameCount; // 1-8
+    int m_itdCount;
+    uint8_t m_int_buf[16];
+    int m_int_seq;
+    int m_iso_seq;
+    uint16_t m_iso_frame;
+    usb_stream* m_stream;
+    CDummy* m_pCbItem;
+    void (CDummy::*m_pCbMeth)(uint16_t, uint8_t*, int);
+    void (*m_pCb)(uint16_t, uint8_t*, int);
+};
+#endif //UVC_H
\ No newline at end of file