Webcam Server.

Dependencies:   uvchost FatFileSystem mbed HTTPServer NetServicesMin

Committer:
va009039
Date:
Wed Jun 06 11:47:06 2012 +0000
Revision:
0:2b4ea8a138e5
Child:
1:7a4f2c038803

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:2b4ea8a138e5 1 #include "WebcamInput.h"
va009039 0:2b4ea8a138e5 2 #include "WebcamHandler.h"
va009039 0:2b4ea8a138e5 3 //#define __DEBUG
va009039 0:2b4ea8a138e5 4 #include "mydbg.h"
va009039 0:2b4ea8a138e5 5
va009039 0:2b4ea8a138e5 6 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
va009039 0:2b4ea8a138e5 7
va009039 0:2b4ea8a138e5 8
va009039 0:2b4ea8a138e5 9 WebcamInput::WebcamInput(int cam)
va009039 0:2b4ea8a138e5 10 :m_seq(0),m_cam(cam)
va009039 0:2b4ea8a138e5 11 {
va009039 0:2b4ea8a138e5 12 DBG("%p cam=%d\n", this, cam);
va009039 0:2b4ea8a138e5 13 m_t.reset();
va009039 0:2b4ea8a138e5 14 m_t.start();
va009039 0:2b4ea8a138e5 15 m_image_buf = new char[IMAGE_SIZE];
va009039 0:2b4ea8a138e5 16 DBG_ASSERT(m_image_buf);
va009039 0:2b4ea8a138e5 17 }
va009039 0:2b4ea8a138e5 18
va009039 0:2b4ea8a138e5 19 void WebcamInput::input(uint16_t frame, uint8_t* buf, int len)
va009039 0:2b4ea8a138e5 20 {
va009039 0:2b4ea8a138e5 21 if (len <= 12) {
va009039 0:2b4ea8a138e5 22 return;
va009039 0:2b4ea8a138e5 23 }
va009039 0:2b4ea8a138e5 24 uint8_t* data = buf+12;
va009039 0:2b4ea8a138e5 25 int data_len = len - 12;
va009039 0:2b4ea8a138e5 26
va009039 0:2b4ea8a138e5 27 switch(m_seq) {
va009039 0:2b4ea8a138e5 28 case 0:
va009039 0:2b4ea8a138e5 29 if (m_t.read_ms() > INTERVAL_MS) {
va009039 0:2b4ea8a138e5 30 m_seq++;
va009039 0:2b4ea8a138e5 31 }
va009039 0:2b4ea8a138e5 32 break;
va009039 0:2b4ea8a138e5 33 case 1:
va009039 0:2b4ea8a138e5 34 if (!WebcamHandler::busy()) {
va009039 0:2b4ea8a138e5 35 m_seq++;
va009039 0:2b4ea8a138e5 36 }
va009039 0:2b4ea8a138e5 37 break;
va009039 0:2b4ea8a138e5 38 case 2:
va009039 0:2b4ea8a138e5 39 if ((buf[1]^m_bfh)&0x01) { // FID change
va009039 0:2b4ea8a138e5 40 m_pos = 0;
va009039 0:2b4ea8a138e5 41 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 42 led3 = 1;
va009039 0:2b4ea8a138e5 43 } else {
va009039 0:2b4ea8a138e5 44 led4 = 1;
va009039 0:2b4ea8a138e5 45 }
va009039 0:2b4ea8a138e5 46 m_seq++;
va009039 0:2b4ea8a138e5 47 } else {
va009039 0:2b4ea8a138e5 48 break;
va009039 0:2b4ea8a138e5 49 }
va009039 0:2b4ea8a138e5 50 case 3:
va009039 0:2b4ea8a138e5 51 for(int i = 0; m_pos < IMAGE_SIZE && i < data_len; i++) {
va009039 0:2b4ea8a138e5 52 m_image_buf[m_pos++] = data[i];
va009039 0:2b4ea8a138e5 53 }
va009039 0:2b4ea8a138e5 54 if (buf[1]&0x02) { // EOF
va009039 0:2b4ea8a138e5 55 WebcamHandler::setImage(m_image_buf, m_pos, m_cam);
va009039 0:2b4ea8a138e5 56 m_t.reset();
va009039 0:2b4ea8a138e5 57 m_seq = 0;
va009039 0:2b4ea8a138e5 58 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 59 led3 = 0;
va009039 0:2b4ea8a138e5 60 } else {
va009039 0:2b4ea8a138e5 61 led4 = 0;
va009039 0:2b4ea8a138e5 62 }
va009039 0:2b4ea8a138e5 63 }
va009039 0:2b4ea8a138e5 64 break;
va009039 0:2b4ea8a138e5 65 }
va009039 0:2b4ea8a138e5 66 m_bfh = buf[1];
va009039 0:2b4ea8a138e5 67 if (m_cam == 0) {
va009039 0:2b4ea8a138e5 68 led1 = buf[1]&1; // FID
va009039 0:2b4ea8a138e5 69 } else {
va009039 0:2b4ea8a138e5 70 led2 = buf[1]&1; // FID
va009039 0:2b4ea8a138e5 71 }
va009039 0:2b4ea8a138e5 72 //led4 = WebcamHandler::busy();
va009039 0:2b4ea8a138e5 73 }