BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
Diff: example_captureJPEG.cpp
- Revision:
- 3:6ae9a03a6145
- Parent:
- 2:c10029b87439
- Child:
- 4:41ff237a64ec
--- a/example_captureJPEG.cpp Tue Dec 11 15:28:00 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -#if 0 -// example_captureJPEG.cpp -#include "mbed.h" -#include "rtos.h" -#include "BaseUsbHost.h" -#include "LogitechC270.h" -#include "UvcCam.h" -#include "UsbFlashDrive.h" -#include "decodeMJPEG.h" -#include "MyThread.h" - -#define IMAGE_BUF_SIZE (1024*8) -#define INTERVAL_S 10 -#define SHOT_N 5 -#define BASE_PATH "usb" - -Serial pc(USBTX, USBRX); -DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4); - -class captureJPEG : public MyThread, public decodeMJPEG { -public: - captureJPEG(BaseUvc* cam) { - m_cam = cam; - m_cam->setOnResult(this, &captureJPEG::callback_motion_jpeg); - interval_t.start(); - shot = 0; - for(buf_size = IMAGE_BUF_SIZE; ; buf_size -= 128) { - buf = new uint8_t[buf_size]; - if (buf) { - break; - } - } - printf("%p buf size: %d\n", buf, buf_size); - } - int shot; - Timer interval_t; -protected: - virtual void outputJPEG(uint8_t c, int status) { - if (status == JPEG_START) { - pos = 0; - led2 = !led2; - } - if (pos < buf_size) { - buf[pos++] = c; - } - if (status == JPEG_END) { - led3 = !led3; - if (interval_t.read_ms() > INTERVAL_S*1000) { - interval_t.reset(); - led4 = !led4; - if (shot < SHOT_N) { - char path[32]; - snprintf(path, sizeof(path), "/%s/image%02d.jpg", BASE_PATH, shot); - printf("%d %s %d bytes\n", shot, path, pos); - FILE* fp = fopen(path, "wb"); - if (fp) { - fwrite(buf, pos, 1, fp); - fclose(fp); - } - shot++; - } - } - } - } - - void callback_motion_jpeg(uint16_t frame, uint8_t* buf, int len) { - inputPacket(buf, len); - if (buf[1]&1) { // FID - led1 = !led1; - } - if (buf[1]&2) { // EOF - led2 = !led2; - } - } - - virtual void run() { - while(true) { - if (m_cam) { - m_cam->poll(); - } - } - } - uint8_t* buf; - int buf_size; - int pos; - BaseUvc* m_cam; -}; - -int main() { - pc.baud(921600); - printf("%s\n", __FILE__); - - BaseUvc* cam = NULL; - UsbFlashDrive* drive = NULL; - BaseUsbHost* usbHost = new BaseUsbHost(); - UsbHub* hub = new UsbHub(); - - for(int i = 1; i <= MAX_HUB_PORT; i++) { - ControlEp* ctlEp = hub->GetPortEp(i); - if (drive == NULL && UsbFlashDrive::check(ctlEp)) { - drive = new UsbFlashDrive("usb", ctlEp); - } - if (cam == NULL && LogitechC270::check(ctlEp)) { - cam = new LogitechC270(C270_160x120, _5FPS, ctlEp); - } - if (cam == NULL && UvcCam::check(ctlEp)) { - cam = new UvcCam(UVC_MJPEG, UVC_160x120, _5FPS, ctlEp); - } - } - if (cam == NULL) { - error("UVC cam not found\n"); - } - if (drive == NULL) { - error("USB flash drive not found\n"); - } - - captureJPEG* capture = new captureJPEG(cam); - printf("captureJPEG: %p %d\n", capture, sizeof(captureJPEG)); - capture->set_stack(DEFAULT_STACK_SIZE+256); - capture->start(); - - for(int n = 0; ; n++) { - printf("%d captureJPEG stack used: %d/%d bytes, interval %d/%d %d/%d sec\n", - n, capture->stack_used(), capture->stack_size(), - capture->shot, SHOT_N, capture->interval_t.read_ms()/1000, INTERVAL_S); - printf("CC:"); - for(int i = 0; i < 16; i++) { - printf(" %u", cam->report_cc_count[i]); - } - printf("\n"); - printf("PS:"); - for(int i = 0; i < 16; i++) { - printf(" %u", cam->report_ps_cc_count[i]); - } - printf("\n"); - Thread::wait(3000); - } -} - -#endif