Simple USBHost WebCam test program
Dependencies: F401RE-USBHost mbed
Fork of KL46Z-USBHostC270_example by
WebカメラからJPEG画像を読み取るテストプログラムです。
使い方はKL46Z-USBHostC270_exampleと同じです。
動作確認カメラ: Logitech C270, Logitech C210, Logitech Q200R(Qcam Orbit AF), LifeCam VX-500
KL46Z-USBHostC270/BaseUvc.cpp@0:a72d9b047d8d, 2014-01-27 (annotated)
- Committer:
- va009039
- Date:
- Mon Jan 27 11:07:34 2014 +0000
- Revision:
- 0:a72d9b047d8d
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 0:a72d9b047d8d | 1 | // BaseUvc.cpp |
va009039 | 0:a72d9b047d8d | 2 | #include "USBHostConf.h" |
va009039 | 0:a72d9b047d8d | 3 | #include "USBHost.h" |
va009039 | 0:a72d9b047d8d | 4 | //#include "USBIsochronous.h" |
va009039 | 0:a72d9b047d8d | 5 | #include "BaseUvc.h" |
va009039 | 0:a72d9b047d8d | 6 | |
va009039 | 0:a72d9b047d8d | 7 | void BaseUvc::poll() |
va009039 | 0:a72d9b047d8d | 8 | { |
va009039 | 0:a72d9b047d8d | 9 | uint8_t buf[ep_iso_in.getSize()]; |
va009039 | 0:a72d9b047d8d | 10 | int result = host->IsochronousRead(&ep_iso_in, buf, sizeof(buf)); |
va009039 | 0:a72d9b047d8d | 11 | if (result >= 0) { |
va009039 | 0:a72d9b047d8d | 12 | uint16_t frame = 0; |
va009039 | 0:a72d9b047d8d | 13 | onResult(frame, buf, result); |
va009039 | 0:a72d9b047d8d | 14 | } |
va009039 | 0:a72d9b047d8d | 15 | } |
va009039 | 0:a72d9b047d8d | 16 | |
va009039 | 0:a72d9b047d8d | 17 | USB_TYPE BaseUvc::Control(int req, int cs, int index, uint8_t* buf, int size) |
va009039 | 0:a72d9b047d8d | 18 | { |
va009039 | 0:a72d9b047d8d | 19 | if (req == SET_CUR) { |
va009039 | 0:a72d9b047d8d | 20 | return host->controlWrite(dev, |
va009039 | 0:a72d9b047d8d | 21 | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, |
va009039 | 0:a72d9b047d8d | 22 | req, cs<<8, index, buf, size); |
va009039 | 0:a72d9b047d8d | 23 | } |
va009039 | 0:a72d9b047d8d | 24 | return host->controlRead(dev, |
va009039 | 0:a72d9b047d8d | 25 | USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE, |
va009039 | 0:a72d9b047d8d | 26 | req, cs<<8, index, buf, size); |
va009039 | 0:a72d9b047d8d | 27 | } |
va009039 | 0:a72d9b047d8d | 28 | |
va009039 | 0:a72d9b047d8d | 29 | USB_TYPE BaseUvc::setInterfaceAlternate(uint8_t intf, uint8_t alt) |
va009039 | 0:a72d9b047d8d | 30 | { |
va009039 | 0:a72d9b047d8d | 31 | return host->controlWrite(dev, USB_HOST_TO_DEVICE | USB_RECIPIENT_INTERFACE, |
va009039 | 0:a72d9b047d8d | 32 | SET_INTERFACE, alt, intf, NULL, 0); |
va009039 | 0:a72d9b047d8d | 33 | } |
va009039 | 0:a72d9b047d8d | 34 | |
va009039 | 0:a72d9b047d8d | 35 | void BaseUvc::onResult(uint16_t frame, uint8_t* buf, int len) |
va009039 | 0:a72d9b047d8d | 36 | { |
va009039 | 0:a72d9b047d8d | 37 | if(m_pCbItem && m_pCbMeth) |
va009039 | 0:a72d9b047d8d | 38 | (m_pCbItem->*m_pCbMeth)(frame, buf, len); |
va009039 | 0:a72d9b047d8d | 39 | else if(m_pCb) |
va009039 | 0:a72d9b047d8d | 40 | m_pCb(frame, buf, len); |
va009039 | 0:a72d9b047d8d | 41 | } |
va009039 | 0:a72d9b047d8d | 42 | |
va009039 | 0:a72d9b047d8d | 43 | void BaseUvc::setOnResult( void (*pMethod)(uint16_t, uint8_t*, int) ) |
va009039 | 0:a72d9b047d8d | 44 | { |
va009039 | 0:a72d9b047d8d | 45 | m_pCb = pMethod; |
va009039 | 0:a72d9b047d8d | 46 | m_pCbItem = NULL; |
va009039 | 0:a72d9b047d8d | 47 | m_pCbMeth = NULL; |
va009039 | 0:a72d9b047d8d | 48 | } |
va009039 | 0:a72d9b047d8d | 49 | |
va009039 | 0:a72d9b047d8d | 50 | void BaseUvc::clearOnResult() |
va009039 | 0:a72d9b047d8d | 51 | { |
va009039 | 0:a72d9b047d8d | 52 | m_pCb = NULL; |
va009039 | 0:a72d9b047d8d | 53 | m_pCbItem = NULL; |
va009039 | 0:a72d9b047d8d | 54 | m_pCbMeth = NULL; |
va009039 | 0:a72d9b047d8d | 55 | } |
va009039 | 0:a72d9b047d8d | 56 |