Test for LinkSprite Y201 JPEG camera

Dependencies:   mbed MODSERIAL Y201 mbed-rtos

Committer:
donatien
Date:
Wed Jul 18 14:38:58 2012 +0000
Revision:
5:98d57f3ef81f
Parent:
4:156e6339e263
Prevent main thread from eating up all CPU time...

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 1:60a7ddc83644 24
ashleymills 0:d927d630369a 25 Serial pc(USBTX, USBRX);
ashleymills 0:d927d630369a 26
ashleymills 0:d927d630369a 27
ashleymills 0:d927d630369a 28 void test(void const*) {
donatien 5:98d57f3ef81f 29 LocalFileSystem fs("fs");
donatien 5:98d57f3ef81f 30 FILE *fp = fopen("/fs/picture.jpg","w");
ashleymills 0:d927d630369a 31 pc.baud(115200);
ashleymills 0:d927d630369a 32 pc.printf("RESET V^V^V^V^V^V^V^V^V^V^V RESET\r\n");
ashleymills 0:d927d630369a 33
ashleymills 0:d927d630369a 34 // open camera
ashleymills 3:f87ddad1906f 35 Y201 camera(p28,p27);
ashleymills 0:d927d630369a 36
ashleymills 0:d927d630369a 37 // set image size
ashleymills 0:d927d630369a 38 if(camera.setImageSize(Y201::e640x480)) {
ashleymills 0:d927d630369a 39 printf("Set image size\r\n");
ashleymills 0:d927d630369a 40 } else {
ashleymills 0:d927d630369a 41 printf("Error setting image size!\r\n");
ashleymills 0:d927d630369a 42 }
ashleymills 0:d927d630369a 43
ashleymills 0:d927d630369a 44 // reset camera
ashleymills 0:d927d630369a 45 if(camera.reset()) {
ashleymills 0:d927d630369a 46 printf("Camera reset successfull\r\n");
ashleymills 0:d927d630369a 47 } else {
ashleymills 0:d927d630369a 48 printf("Error resetting camera\r\n");
ashleymills 0:d927d630369a 49 }
ashleymills 0:d927d630369a 50
ashleymills 0:d927d630369a 51 // take a picture
ashleymills 0:d927d630369a 52 if(camera.takePicture()) {
ashleymills 0:d927d630369a 53 printf("Took picture!\r\n");
ashleymills 0:d927d630369a 54 } else {
ashleymills 0:d927d630369a 55 printf("Take picture failed!\r\n");
ashleymills 0:d927d630369a 56 }
ashleymills 0:d927d630369a 57
ashleymills 0:d927d630369a 58 // read file size
ashleymills 0:d927d630369a 59 int fileSize = 0;
ashleymills 0:d927d630369a 60 if(camera.readImageSize(&fileSize)) {
ashleymills 0:d927d630369a 61 printf("Filesize: %d\r\n",fileSize);
ashleymills 0:d927d630369a 62 } else {
ashleymills 0:d927d630369a 63 printf("Error getting file size\r\n");
ashleymills 0:d927d630369a 64 }
ashleymills 0:d927d630369a 65
donatien 5:98d57f3ef81f 66 NVIC_SetPriority(UART2_IRQn, 0);
ashleymills 0:d927d630369a 67
ashleymills 0:d927d630369a 68 // IMAGE UPLOAD
ashleymills 0:d927d630369a 69
ashleymills 0:d927d630369a 70 int bytesRead = 0;
ashleymills 2:cf38a12918af 71 int chunkSize = 512;
ashleymills 0:d927d630369a 72
ashleymills 0:d927d630369a 73 uint8_t *readBuffer = (uint8_t*)malloc(chunkSize*sizeof(uint8_t));
ashleymills 0:d927d630369a 74 while(bytesRead<fileSize) {
ashleymills 0:d927d630369a 75 // read the image
ashleymills 0:d927d630369a 76 size_t w;
ashleymills 0:d927d630369a 77 if(w=camera.readImage(bytesRead,chunkSize,readBuffer)) {
ashleymills 0:d927d630369a 78
ashleymills 0:d927d630369a 79 } else {
ashleymills 0:d927d630369a 80 printf("Error in file read\r\n");
donatien 5:98d57f3ef81f 81 //Dump packet
donatien 5:98d57f3ef81f 82 for(int i = 0; i < chunkSize; i++)
donatien 5:98d57f3ef81f 83 {
donatien 5:98d57f3ef81f 84 if(!(i % 16))
donatien 5:98d57f3ef81f 85 {
donatien 5:98d57f3ef81f 86 printf("\n");
donatien 5:98d57f3ef81f 87 }
donatien 5:98d57f3ef81f 88 printf("%02x ", readBuffer[i]);
donatien 5:98d57f3ef81f 89 }
ashleymills 0:d927d630369a 90 }
ashleymills 0:d927d630369a 91 bytesRead += chunkSize;
donatien 5:98d57f3ef81f 92 //Thread::wait(1000);
donatien 5:98d57f3ef81f 93 printf("%d..\n",bytesRead);
ashleymills 0:d927d630369a 94 if(bytesRead<fileSize) {
donatien 5:98d57f3ef81f 95 size_t w = fwrite(readBuffer,chunkSize,1,fp);
ashleymills 0:d927d630369a 96 } else {
donatien 5:98d57f3ef81f 97 size_t w = fwrite(readBuffer,(chunkSize-(bytesRead-fileSize)),1,fp);
ashleymills 0:d927d630369a 98 }
ashleymills 0:d927d630369a 99
ashleymills 0:d927d630369a 100 camera.trash();
ashleymills 0:d927d630369a 101
ashleymills 0:d927d630369a 102 }
ashleymills 0:d927d630369a 103
ashleymills 0:d927d630369a 104 printf("\r\n");
donatien 5:98d57f3ef81f 105 fclose(fp);
ashleymills 0:d927d630369a 106 printf("loop exit\r\n");
ashleymills 0:d927d630369a 107 printf("filesize: %d\r\n",fileSize);
ashleymills 0:d927d630369a 108 }
ashleymills 0:d927d630369a 109
ashleymills 0:d927d630369a 110 void tick() {
ashleymills 0:d927d630369a 111 led1 = !led1;
ashleymills 0:d927d630369a 112 }
ashleymills 0:d927d630369a 113
ashleymills 0:d927d630369a 114 int main() {
donatien 5:98d57f3ef81f 115 // Ticker t;
donatien 5:98d57f3ef81f 116 // t.attach(tick, 1);
ashleymills 0:d927d630369a 117
ashleymills 0:d927d630369a 118 Thread testTask(test, NULL, osPriorityNormal, 1024 * 4);
ashleymills 0:d927d630369a 119 //Thread testTask(test);
donatien 5:98d57f3ef81f 120 while(1){ Thread::wait(1000); }
ashleymills 0:d927d630369a 121
ashleymills 0:d927d630369a 122 return 0;
ashleymills 0:d927d630369a 123 }