Test for LinkSprite Y201 JPEG camera
Dependencies: mbed MODSERIAL Y201 mbed-rtos
main.cpp@5:98d57f3ef81f, 2012-07-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |