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