-->
Page 1 of 1

VC0706 camera and a corrupted jpeg image

PostPosted: Wed Oct 10, 2018 3:26 am
by Flow_75
I've bought a jpeg camera (C429-L36) to be connected with my esp8266.

With some examples found on the internet, I've done this program first on my computer to test the protocol.

Code: Select all    int main()
    {

    int USB = open( "/dev/ttyUSB1",  O_RDWR | O_NOCTTY | O_SYNC );
    struct termios tty;
    /* Set Baud Rate */
    cfsetospeed (&tty, (speed_t)B115200);
    cfsetispeed (&tty, (speed_t)B115200);

    /* Setting other Port Stuff */
    tty.c_cflag     &=  ~PARENB;            // Make 8n1
    tty.c_cflag     &=  ~CSTOPB;
    tty.c_cflag     &=  ~CSIZE;
    tty.c_cflag     |=  CS8;
   
    tty.c_cflag     &=  ~CRTSCTS;           // no flow control
    tty.c_cc[VMIN]   =  1;                  // read doesn't block
    tty.c_cc[VTIME]  =  15;                  // 0.5 seconds read timeout
    tty.c_cflag     |=  CREAD | CLOCAL;     // turn on READ & ignore ctrl     lines

    /* Make raw */
    cfmakeraw(&tty);
   
    tcsetattr ( USB, TCSANOW, &tty ) ;
   
   
    char response[261];
    unsigned char cmd[20];
   
    cmd[0] = 0x56;
    cmd[1] = 0x00;
    cmd[2] = 0x11;
   
    cmd[3] = 0x00;
   
    write(USB, cmd, 4);
    sleep(1);
   
    read(USB, response, 16);
   
    for(int i = 0; i< 16;++i)
    {
       printf("%c", response[i]);
       fflush(stdout);
    }
   
    cmd[0] = 0x56;
    cmd[1] = 0x00;
    cmd[2] = 0x3;
    cmd[3] = 0x01;
    cmd[4] = 0x00;
   
    write(USB, cmd, 5);
    sleep(1);
    read(USB, response, 5);
   
    cmd[0] = 0x56;
    cmd[1] = 0x00;
    cmd[2] = 0x34;
    cmd[3] = 0x01;
    cmd[4] = 0x00;
   
    tcflush(USB,TCIOFLUSH);

    write(USB, cmd, 5);
   
   
    sleep(1);
   
   
    int n = 0;
   
    n = read( USB, response, 9 );
   
    int length = 0;
    unsigned int res;
    if(n == 9)
    {
       if(response[3] == 0x00 && response[4] == 0x04)
       {
       res = (response[8] & 0xFF);
       res += (response[7] & 0xFF) << 8;
       res += (response[6] & 0xFF) << 16;
       res += (response[5] & 0xFF) << 24;   
       }
    }
   
   
    int addr = 0;
   
    FILE* f =  fopen("photo.jpg", "wb");
   
    int bytes = 255;
    while(addr != res)
       {
   
       if(res - addr < bytes)
          bytes = res-addr;
       else
          bytes = bytes;
   
       printf("%d\n", addr);
       fflush(stdout);
   cmd[0] = 0x56;
   cmd[1] = 0x00;
   cmd[2] = 0x32;
   cmd[3] = 0x0C;
   cmd[4] = 0x00;
   cmd[5] = 0x0A;
   cmd[6] = (addr >> 24) & 0xFF;
   cmd[7] = (addr >> 16) & 0xFF;
   cmd[8] = (addr >>  8) & 0xFF;
   cmd[9] = (addr & 0xFF);
   cmd[10] = 0;
   cmd[11] = 0;
   cmd[12] = 0;
   cmd[13] = bytes;
   cmd[14] = 1;
   cmd[15] = 0;


   write(USB, cmd, 16);

   sleep(1);

   read(USB, response, 5);

   read(USB, response, bytes);

   fwrite(response, bytes, 1, f);

   read(USB, response, 5);

   addr += bytes;
   }

    fclose(f);
   
    return 0;
    }


it works good, good version of the controller, good FBuffer Length, When i read the buffer, the file begin by the correct magic word (0xFF 0xD8) but doesn't end with the correct one (0xFF 0xD9) which is strange because the file size it coherent with the annouced FBuffer size.

Does anybody could help me ?
Thanks.
Flo.