Test for LinkSprite Y201 JPEG camera

Dependencies:   mbed MODSERIAL Y201 mbed-rtos

main.cpp

Committer:
donatien
Date:
2012-07-18
Revision:
4:156e6339e263
Parent:
3:f87ddad1906f
Child:
5:98d57f3ef81f

File content as of revision 4:156e6339e263:

#include "mbed.h"
#include "rtos.h"
#include "Y201.h"

const int Y201::resetSeq       [4] = {0x56,0x00,0x26,0x00};
const int Y201::resetSeqAck    [4] = {0x76,0x00,0x26,0x00};
const int Y201::takePicSeq     [5] = {0x56,0x00,0x36,0x01,0x00};
const int Y201::takePicSeqAck  [5] = {0x76,0x00,0x36,0x00,0x00};
const int Y201::set160x120     [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x22};
const int Y201::set320x240     [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x11};
const int Y201::set640x480     [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x00};
const int Y201::setSizeAck     [5] = {0x76,0x00,0x31,0x00,0x00};
const int Y201::readFileSize   [5] = {0x56,0x00,0x34,0x01,0x00};
const int Y201::readFileSizeAck[7] = {0x76,0x00,0x34,0x00,0x04,0x00,0x00};
const int Y201::readFileHead   [8] = {0x56,0x00,0x32,0x0C,0x00,0x0A,0x00,0x00};
const int Y201::readFileAck    [5] = {0x76,0x00,0x32,0x00,0x00};

DigitalOut led1(LED1);

extern "C" void HardFault_Handler() {
  error("Hard Fault!\n");
}


Serial pc(USBTX, USBRX);


void test(void const*) {
  //LocalFileSystem fs("fs");
  //FILE *fp = fopen("/fs/picture.jpg","w");
  pc.baud(115200);
  pc.printf("RESET V^V^V^V^V^V^V^V^V^V^V RESET\r\n");
  
  // open camera
  Y201 camera(p28,p27);
  
  // set image size
  if(camera.setImageSize(Y201::e640x480)) {
    printf("Set image size\r\n");
  } else {
    printf("Error setting image size!\r\n");
  }
  
  // reset camera
  if(camera.reset()) {
    printf("Camera reset successfull\r\n");
  } else {
    printf("Error resetting camera\r\n");
  }
  
  // take a picture  
  if(camera.takePicture()) {
    printf("Took picture!\r\n");
  } else {
    printf("Take picture failed!\r\n");
  }
  
  // read file size
  int fileSize = 0;
  if(camera.readImageSize(&fileSize)) {
    printf("Filesize: %d\r\n",fileSize);
  } else {
    printf("Error getting file size\r\n");
  }
  

  // IMAGE UPLOAD
   
  int bytesRead = 0;
  int chunkSize = 512;

  uint8_t *readBuffer = (uint8_t*)malloc(chunkSize*sizeof(uint8_t));
  while(bytesRead<fileSize) {  
    // read the image
    size_t w;
    if(w=camera.readImage(bytesRead,chunkSize,readBuffer)) {
        
    } else {
        printf("Error in file read\r\n");
    }
    bytesRead += chunkSize;
    printf("%d..\n",bytesRead,w);
    if(bytesRead<fileSize) {
       // size_t w = fwrite(readBuffer,chunkSize,1,fp);
    } else {
        // size_t w = fwrite(readBuffer,(chunkSize-(bytesRead-fileSize)),1,fp);
    }
    
    camera.trash();
    
  }
  
  printf("\r\n");
  //fclose(fp);
  printf("loop exit\r\n");
  printf("filesize: %d\r\n",fileSize);  
}

void tick() {
  led1 = !led1;
}

int main() {
  Ticker t;
  t.attach(tick, 1);

  Thread testTask(test, NULL, osPriorityNormal, 1024 * 4);
  //Thread testTask(test);
  while(1);

  return 0;
}