Test for LinkSprite Y201 JPEG camera

Dependencies:   mbed MODSERIAL Y201 mbed-rtos

Committer:
ashleymills
Date:
Fri Jun 29 19:29:17 2012 +0000
Revision:
0:d927d630369a
Child:
1:60a7ddc83644
This camera test presently works.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:d927d630369a 1 #include "mbed.h"
ashleymills 0:d927d630369a 2 #include "rtos.h"
ashleymills 0:d927d630369a 3 #include "Y201.h"
ashleymills 0:d927d630369a 4
ashleymills 0:d927d630369a 5 const int Y201::resetSeq [4] = {0x56,0x00,0x26,0x00};
ashleymills 0:d927d630369a 6 const int Y201::resetSeqAck [4] = {0x76,0x00,0x26,0x00};
ashleymills 0:d927d630369a 7 const int Y201::takePicSeq [5] = {0x56,0x00,0x36,0x01,0x00};
ashleymills 0:d927d630369a 8 const int Y201::takePicSeqAck [5] = {0x76,0x00,0x36,0x00,0x00};
ashleymills 0:d927d630369a 9 const int Y201::set160x120 [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x22};
ashleymills 0:d927d630369a 10 const int Y201::set320x240 [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x11};
ashleymills 0:d927d630369a 11 const int Y201::set640x480 [9] = {0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x00};
ashleymills 0:d927d630369a 12 const int Y201::setSizeAck [5] = {0x76,0x00,0x31,0x00,0x00};
ashleymills 0:d927d630369a 13 const int Y201::readFileSize [5] = {0x56,0x00,0x34,0x01,0x00};
ashleymills 0:d927d630369a 14 const int Y201::readFileSizeAck[7] = {0x76,0x00,0x34,0x00,0x04,0x00,0x00};
ashleymills 0:d927d630369a 15 const int Y201::readFileHead [8] = {0x56,0x00,0x32,0x0C,0x00,0x0A,0x00,0x00};
ashleymills 0:d927d630369a 16 const int Y201::readFileAck [5] = {0x76,0x00,0x32,0x00,0x00};
ashleymills 0:d927d630369a 17
ashleymills 0:d927d630369a 18 DigitalOut led1(LED1);
ashleymills 0:d927d630369a 19
ashleymills 0:d927d630369a 20 extern "C" void HardFault_Handler() {
ashleymills 0:d927d630369a 21 error("Hard Fault!\n");
ashleymills 0:d927d630369a 22 }
ashleymills 0:d927d630369a 23
ashleymills 0:d927d630369a 24 LocalFileSystem fs("fs");
ashleymills 0:d927d630369a 25 FILE *fp = fopen("picture.jpg","w");
ashleymills 0:d927d630369a 26 Serial pc(USBTX, USBRX);
ashleymills 0:d927d630369a 27
ashleymills 0:d927d630369a 28
ashleymills 0:d927d630369a 29 void test(void const*) {
ashleymills 0:d927d630369a 30 pc.baud(115200);
ashleymills 0:d927d630369a 31 pc.printf("RESET V^V^V^V^V^V^V^V^V^V^V RESET\r\n");
ashleymills 0:d927d630369a 32
ashleymills 0:d927d630369a 33 // open camera
ashleymills 0:d927d630369a 34 Y201 camera(p13,p14);
ashleymills 0:d927d630369a 35
ashleymills 0:d927d630369a 36 // set image size
ashleymills 0:d927d630369a 37 if(camera.setImageSize(Y201::e640x480)) {
ashleymills 0:d927d630369a 38 printf("Set image size\r\n");
ashleymills 0:d927d630369a 39 } else {
ashleymills 0:d927d630369a 40 printf("Error setting image size!\r\n");
ashleymills 0:d927d630369a 41 }
ashleymills 0:d927d630369a 42
ashleymills 0:d927d630369a 43 // reset camera
ashleymills 0:d927d630369a 44 if(camera.reset()) {
ashleymills 0:d927d630369a 45 printf("Camera reset successfull\r\n");
ashleymills 0:d927d630369a 46 } else {
ashleymills 0:d927d630369a 47 printf("Error resetting camera\r\n");
ashleymills 0:d927d630369a 48 }
ashleymills 0:d927d630369a 49
ashleymills 0:d927d630369a 50 // take a picture
ashleymills 0:d927d630369a 51 if(camera.takePicture()) {
ashleymills 0:d927d630369a 52 printf("Took picture!\r\n");
ashleymills 0:d927d630369a 53 } else {
ashleymills 0:d927d630369a 54 printf("Take picture failed!\r\n");
ashleymills 0:d927d630369a 55 }
ashleymills 0:d927d630369a 56
ashleymills 0:d927d630369a 57 // read file size
ashleymills 0:d927d630369a 58 int fileSize = 0;
ashleymills 0:d927d630369a 59 if(camera.readImageSize(&fileSize)) {
ashleymills 0:d927d630369a 60 printf("Filesize: %d\r\n",fileSize);
ashleymills 0:d927d630369a 61 } else {
ashleymills 0:d927d630369a 62 printf("Error getting file size\r\n");
ashleymills 0:d927d630369a 63 }
ashleymills 0:d927d630369a 64
ashleymills 0:d927d630369a 65
ashleymills 0:d927d630369a 66 // IMAGE UPLOAD
ashleymills 0:d927d630369a 67
ashleymills 0:d927d630369a 68 int bytesRead = 0;
ashleymills 0:d927d630369a 69 int chunkSize = 256;
ashleymills 0:d927d630369a 70
ashleymills 0:d927d630369a 71 uint8_t *readBuffer = (uint8_t*)malloc(chunkSize*sizeof(uint8_t));
ashleymills 0:d927d630369a 72 while(bytesRead<fileSize) {
ashleymills 0:d927d630369a 73 // read the image
ashleymills 0:d927d630369a 74 size_t w;
ashleymills 0:d927d630369a 75 if(w=camera.readImage(bytesRead,chunkSize,readBuffer)) {
ashleymills 0:d927d630369a 76
ashleymills 0:d927d630369a 77 } else {
ashleymills 0:d927d630369a 78 printf("Error in file read\r\n");
ashleymills 0:d927d630369a 79 }
ashleymills 0:d927d630369a 80 bytesRead += chunkSize;
ashleymills 0:d927d630369a 81 printf("%d..",bytesRead,w);
ashleymills 0:d927d630369a 82 if(bytesRead<fileSize) {
ashleymills 0:d927d630369a 83 //size_t w = fwrite(readBuffer,chunkSize,1,fp);
ashleymills 0:d927d630369a 84 } else {
ashleymills 0:d927d630369a 85 //size_t w = fwrite(readBuffer,(chunkSize-(bytesRead-fileSize)),1,fp);
ashleymills 0:d927d630369a 86 }
ashleymills 0:d927d630369a 87
ashleymills 0:d927d630369a 88 camera.trash();
ashleymills 0:d927d630369a 89
ashleymills 0:d927d630369a 90 }
ashleymills 0:d927d630369a 91
ashleymills 0:d927d630369a 92 printf("\r\n");
ashleymills 0:d927d630369a 93 fclose(fp);
ashleymills 0:d927d630369a 94 printf("loop exit\r\n");
ashleymills 0:d927d630369a 95 printf("filesize: %d\r\n",fileSize);
ashleymills 0:d927d630369a 96 }
ashleymills 0:d927d630369a 97
ashleymills 0:d927d630369a 98 void tick() {
ashleymills 0:d927d630369a 99 led1 = !led1;
ashleymills 0:d927d630369a 100 }
ashleymills 0:d927d630369a 101
ashleymills 0:d927d630369a 102 int main() {
ashleymills 0:d927d630369a 103 Ticker t;
ashleymills 0:d927d630369a 104 t.attach(tick, 1);
ashleymills 0:d927d630369a 105
ashleymills 0:d927d630369a 106 Thread testTask(test, NULL, osPriorityNormal, 1024 * 4);
ashleymills 0:d927d630369a 107 //Thread testTask(test);
ashleymills 0:d927d630369a 108 while(1);
ashleymills 0:d927d630369a 109
ashleymills 0:d927d630369a 110 return 0;
ashleymills 0:d927d630369a 111 }