Simple USBHost WebCam test program
Dependencies: F401RE-USBHost mbed
Fork of KL46Z-USBHostC270_example by
main.cpp
00001 #include "USBHostCam.h" 00002 RawSerial pc(USBTX, USBRX); 00003 00004 #if defined(TARGET_NUCLEO_F401RE)||defined(TARGET_NUCLEO_F411RE)||defined(TARGET_NUCLEO_F446RE) 00005 uint8_t image_buf[1024*32]; 00006 DigitalOut led1(LED1); 00007 #define LED_OFF 0 00008 #define LED_ON 1 00009 00010 #elif defined(TARGET_KL46Z)||defined(TARGET_K64F) 00011 uint8_t image_buf[1024*24]; 00012 DigitalOut led1(LED1); 00013 #define LED_OFF 1 00014 #define LED_ON 0 00015 00016 #elif defined(TARGET_KL25Z) 00017 uint8_t image_buf[1024*12]; 00018 DigitalOut led1(LED1); 00019 #define LED_OFF 1 00020 #define LED_ON 0 00021 00022 #elif defined(TARGET_LPC4088)||defined(TARGET_LPC1768) 00023 uint8_t image_buf[1024*24]; 00024 DigitalOut led1(LED1); 00025 #define LED_OFF 0 00026 #define LED_ON 1 00027 00028 #else 00029 #error "target error" 00030 #endif 00031 00032 int main() { 00033 pc.baud(9600); 00034 led1 = LED_OFF; 00035 00036 // Logitech C270 00037 USBHostCam* cam = new USBHostCam(_320x240); 00038 if (!cam->connect()) { 00039 error("WebCam not found.\n"); 00040 } 00041 00042 int pos = 0; 00043 int size = 0; 00044 Timer t; 00045 for(int seq = 0;;) { 00046 int c = -1; 00047 if (pc.readable()) { 00048 c = pc.getc(); 00049 } 00050 switch(seq) { 00051 case 0: 00052 pc.printf("\nReady, please download JPEG using XMODEM/Checksum.\n"); 00053 t.start(); 00054 seq++; 00055 break; 00056 case 1: 00057 if (c == 0x15) { // NAK 00058 size = cam->readJPEG(image_buf, sizeof(image_buf)); 00059 pos = 0; 00060 seq++; 00061 } 00062 break; 00063 case 2: 00064 if (pos >= size) { 00065 pc.putc(0x04); // EOT 00066 } else { 00067 pc.putc(0x01); // SOH 00068 uint8_t block = pos/128 + 1; 00069 pc.putc(block); 00070 pc.putc(block ^ 0xff); 00071 uint8_t checksum = 0x00; 00072 for(int i = 0; i < 128; i++) { 00073 uint8_t c = image_buf[pos + i]; 00074 checksum += c; 00075 pc.putc(c); 00076 } 00077 pc.putc(checksum); 00078 } 00079 seq++; 00080 t.reset(); 00081 led1 = !led1; 00082 break; 00083 case 3: 00084 if (c == 0x06) { // ACK 00085 if (pos >= size) { 00086 seq = 0; 00087 } else { 00088 pos += 128; 00089 seq--; 00090 } 00091 } 00092 break; 00093 } 00094 if (t.read_ms() > 15*1000) { // timeout 00095 t.reset(); 00096 seq = 0; 00097 } 00098 cam->poll(); 00099 } 00100 }
Generated on Thu Jul 21 2022 11:38:42 by 1.7.2