Simple USBHost C270 example
Dependencies: F401RE-USBHost mbed
main.cpp
00001 #include "USBHostCam.h" 00002 RawSerial pc(USBTX, USBRX); 00003 00004 uint8_t image_buf[1024*64]; 00005 DigitalOut led1(LED1); 00006 DigitalOut led2(LED2); 00007 #define LED_OFF 1 00008 #define LED_ON 0 00009 00010 int main() { 00011 pc.baud(9600); 00012 led1 = led2 = LED_OFF; 00013 00014 // Logitech C270 00015 USBHostCam* cam = new USBHostCam(_800x448); 00016 if (!cam->connect()) { 00017 error("WebCam not found.\n"); 00018 } 00019 00020 int pos = 0; 00021 int size = 0; 00022 Timer t; 00023 for(int seq = 0;;) { 00024 int c = -1; 00025 if (pc.readable()) { 00026 c = pc.getc(); 00027 } 00028 switch(seq) { 00029 case 0: 00030 pc.printf("\nReady, please download JPEG using XMODEM/Checksum.\n"); 00031 t.start(); 00032 seq++; 00033 break; 00034 case 1: 00035 if (c == 0x15) { // NAK 00036 size = cam->readJPEG(image_buf, sizeof(image_buf)); 00037 pos = 0; 00038 seq++; 00039 } 00040 break; 00041 case 2: 00042 if (pos >= size) { 00043 pc.putc(0x04); // EOT 00044 } else { 00045 pc.putc(0x01); // SOH 00046 uint8_t block = pos/128 + 1; 00047 pc.putc(block); 00048 pc.putc(block ^ 0xff); 00049 uint8_t checksum = 0x00; 00050 for(int i = 0; i < 128; i++) { 00051 uint8_t c = image_buf[pos + i]; 00052 checksum += c; 00053 pc.putc(c); 00054 } 00055 pc.putc(checksum); 00056 } 00057 seq++; 00058 t.reset(); 00059 led2 = !led2; 00060 break; 00061 case 3: 00062 if (c == 0x06) { // ACK 00063 if (pos >= size) { 00064 seq = 0; 00065 } else { 00066 pos += 128; 00067 seq--; 00068 } 00069 } 00070 break; 00071 } 00072 if (t.read_ms() > 15*1000) { // timeout 00073 t.reset(); 00074 seq = 0; 00075 } 00076 cam->poll(); 00077 } 00078 } 00079
Generated on Thu Jul 14 2022 15:40:58 by 1.7.2