This is a test program for Camera_LS_Y201 class.

Dependencies:   Camera_LS_Y201 SDFileSystem mbed

Committer:
shintamainjp
Date:
Fri Oct 10 21:48:33 2014 +0000
Revision:
0:31be9011f67e
The initial version of the test program.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:31be9011f67e 1 #include "mbed.h"
shintamainjp 0:31be9011f67e 2 #include "Camera_LS_Y201.h"
shintamainjp 0:31be9011f67e 3 #include "SDFileSystem.h"
shintamainjp 0:31be9011f67e 4
shintamainjp 0:31be9011f67e 5 #define DEBMSG printf
shintamainjp 0:31be9011f67e 6 #define NEWLINE() printf("\r\n")
shintamainjp 0:31be9011f67e 7
shintamainjp 0:31be9011f67e 8 #define USE_SDCARD 0
shintamainjp 0:31be9011f67e 9
shintamainjp 0:31be9011f67e 10 #if USE_SDCARD
shintamainjp 0:31be9011f67e 11 #define FILENAME "/sd/IMG_%04d.jpg"
shintamainjp 0:31be9011f67e 12 SDFileSystem fs(p5, p6, p7, p8, "sd");
shintamainjp 0:31be9011f67e 13 #else
shintamainjp 0:31be9011f67e 14 #define FILENAME "/local/IMG_%04d.jpg"
shintamainjp 0:31be9011f67e 15 LocalFileSystem fs("local");
shintamainjp 0:31be9011f67e 16 #endif
shintamainjp 0:31be9011f67e 17 Camera_LS_Y201 cam1(p13, p14);
shintamainjp 0:31be9011f67e 18
shintamainjp 0:31be9011f67e 19 typedef struct work {
shintamainjp 0:31be9011f67e 20 FILE *fp;
shintamainjp 0:31be9011f67e 21 } work_t;
shintamainjp 0:31be9011f67e 22
shintamainjp 0:31be9011f67e 23 work_t work;
shintamainjp 0:31be9011f67e 24
shintamainjp 0:31be9011f67e 25 /**
shintamainjp 0:31be9011f67e 26 * Callback function for readJpegFileContent.
shintamainjp 0:31be9011f67e 27 *
shintamainjp 0:31be9011f67e 28 * @param buf A pointer to a buffer.
shintamainjp 0:31be9011f67e 29 * @param siz A size of the buffer.
shintamainjp 0:31be9011f67e 30 */
shintamainjp 0:31be9011f67e 31 void callback_func(int done, int total, uint8_t *buf, size_t siz) {
shintamainjp 0:31be9011f67e 32 fwrite(buf, siz, 1, work.fp);
shintamainjp 0:31be9011f67e 33
shintamainjp 0:31be9011f67e 34 static int n = 0;
shintamainjp 0:31be9011f67e 35 int tmp = done * 100 / total;
shintamainjp 0:31be9011f67e 36 if (n != tmp) {
shintamainjp 0:31be9011f67e 37 n = tmp;
shintamainjp 0:31be9011f67e 38 DEBMSG("Writing...: %3d%%", n);
shintamainjp 0:31be9011f67e 39 NEWLINE();
shintamainjp 0:31be9011f67e 40 }
shintamainjp 0:31be9011f67e 41 }
shintamainjp 0:31be9011f67e 42
shintamainjp 0:31be9011f67e 43 /**
shintamainjp 0:31be9011f67e 44 * Capture.
shintamainjp 0:31be9011f67e 45 *
shintamainjp 0:31be9011f67e 46 * @param cam A pointer to a camera object.
shintamainjp 0:31be9011f67e 47 * @param filename The file name.
shintamainjp 0:31be9011f67e 48 *
shintamainjp 0:31be9011f67e 49 * @return Return 0 if it succeed.
shintamainjp 0:31be9011f67e 50 */
shintamainjp 0:31be9011f67e 51 int capture(Camera_LS_Y201 *cam, char *filename) {
shintamainjp 0:31be9011f67e 52 /*
shintamainjp 0:31be9011f67e 53 * Take a picture.
shintamainjp 0:31be9011f67e 54 */
shintamainjp 0:31be9011f67e 55 if (cam->takePicture() != 0) {
shintamainjp 0:31be9011f67e 56 return -1;
shintamainjp 0:31be9011f67e 57 }
shintamainjp 0:31be9011f67e 58 DEBMSG("Captured.");
shintamainjp 0:31be9011f67e 59 NEWLINE();
shintamainjp 0:31be9011f67e 60
shintamainjp 0:31be9011f67e 61 /*
shintamainjp 0:31be9011f67e 62 * Open file.
shintamainjp 0:31be9011f67e 63 */
shintamainjp 0:31be9011f67e 64 work.fp = fopen(filename, "wb");
shintamainjp 0:31be9011f67e 65 if (work.fp == NULL) {
shintamainjp 0:31be9011f67e 66 return -2;
shintamainjp 0:31be9011f67e 67 }
shintamainjp 0:31be9011f67e 68
shintamainjp 0:31be9011f67e 69 /*
shintamainjp 0:31be9011f67e 70 * Read the content.
shintamainjp 0:31be9011f67e 71 */
shintamainjp 0:31be9011f67e 72 DEBMSG("%s", filename);
shintamainjp 0:31be9011f67e 73 NEWLINE();
shintamainjp 0:31be9011f67e 74 if (cam->readJpegFileContent(callback_func) != 0) {
shintamainjp 0:31be9011f67e 75 fclose(work.fp);
shintamainjp 0:31be9011f67e 76 return -3;
shintamainjp 0:31be9011f67e 77 }
shintamainjp 0:31be9011f67e 78 fclose(work.fp);
shintamainjp 0:31be9011f67e 79
shintamainjp 0:31be9011f67e 80 /*
shintamainjp 0:31be9011f67e 81 * Stop taking pictures.
shintamainjp 0:31be9011f67e 82 */
shintamainjp 0:31be9011f67e 83 cam->stopTakingPictures();
shintamainjp 0:31be9011f67e 84
shintamainjp 0:31be9011f67e 85 return 0;
shintamainjp 0:31be9011f67e 86 }
shintamainjp 0:31be9011f67e 87
shintamainjp 0:31be9011f67e 88 /**
shintamainjp 0:31be9011f67e 89 * Entry point.
shintamainjp 0:31be9011f67e 90 */
shintamainjp 0:31be9011f67e 91 int main(void) {
shintamainjp 0:31be9011f67e 92 DEBMSG("Camera module");
shintamainjp 0:31be9011f67e 93 NEWLINE();
shintamainjp 0:31be9011f67e 94 DEBMSG("Resetting...");
shintamainjp 0:31be9011f67e 95 NEWLINE();
shintamainjp 0:31be9011f67e 96 wait(1);
shintamainjp 0:31be9011f67e 97
shintamainjp 0:31be9011f67e 98 if (cam1.reset() == 0) {
shintamainjp 0:31be9011f67e 99 DEBMSG("Reset OK.");
shintamainjp 0:31be9011f67e 100 NEWLINE();
shintamainjp 0:31be9011f67e 101 } else {
shintamainjp 0:31be9011f67e 102 DEBMSG("Reset fail.");
shintamainjp 0:31be9011f67e 103 NEWLINE();
shintamainjp 0:31be9011f67e 104 error("Reset fail.");
shintamainjp 0:31be9011f67e 105 }
shintamainjp 0:31be9011f67e 106 wait(1);
shintamainjp 0:31be9011f67e 107
shintamainjp 0:31be9011f67e 108 int cnt = 0;
shintamainjp 0:31be9011f67e 109 while (1) {
shintamainjp 0:31be9011f67e 110 char fname[64];
shintamainjp 0:31be9011f67e 111 snprintf(fname, sizeof(fname) - 1, FILENAME, cnt);
shintamainjp 0:31be9011f67e 112 int r = capture(&cam1, fname);
shintamainjp 0:31be9011f67e 113 if (r == 0) {
shintamainjp 0:31be9011f67e 114 DEBMSG("[%04d]:OK.", cnt);
shintamainjp 0:31be9011f67e 115 NEWLINE();
shintamainjp 0:31be9011f67e 116 } else {
shintamainjp 0:31be9011f67e 117 DEBMSG("[%04d]:NG. (code=%d)", cnt, r);
shintamainjp 0:31be9011f67e 118 NEWLINE();
shintamainjp 0:31be9011f67e 119 error("Failure.");
shintamainjp 0:31be9011f67e 120 }
shintamainjp 0:31be9011f67e 121 cnt++;
shintamainjp 0:31be9011f67e 122 }
shintamainjp 0:31be9011f67e 123 }