LinkSprite JPEG Color Camera Test Program.

Dependencies:   mbed Camera_LS_Y201 SDFileSystem

Committer:
shintamainjp
Date:
Wed Feb 09 23:04:04 2011 +0000
Revision:
1:71734a321e31
Parent:
0:07895dc2b7c3
Updated the sequences of the sample.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 1:71734a321e31 1 /**
shintamainjp 1:71734a321e31 2 * =============================================================================
shintamainjp 1:71734a321e31 3 * LS-Y201 - Test program. (Version 0.0.2)
shintamainjp 1:71734a321e31 4 * =============================================================================
shintamainjp 1:71734a321e31 5 * Copyright (c) 2010-2011 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 1:71734a321e31 6 *
shintamainjp 1:71734a321e31 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
shintamainjp 1:71734a321e31 8 * of this software and associated documentation files (the "Software"), to deal
shintamainjp 1:71734a321e31 9 * in the Software without restriction, including without limitation the rights
shintamainjp 1:71734a321e31 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
shintamainjp 1:71734a321e31 11 * copies of the Software, and to permit persons to whom the Software is
shintamainjp 1:71734a321e31 12 * furnished to do so, subject to the following conditions:
shintamainjp 1:71734a321e31 13 *
shintamainjp 1:71734a321e31 14 * The above copyright notice and this permission notice shall be included in
shintamainjp 1:71734a321e31 15 * all copies or substantial portions of the Software.
shintamainjp 1:71734a321e31 16 *
shintamainjp 1:71734a321e31 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
shintamainjp 1:71734a321e31 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
shintamainjp 1:71734a321e31 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
shintamainjp 1:71734a321e31 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
shintamainjp 1:71734a321e31 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
shintamainjp 1:71734a321e31 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
shintamainjp 1:71734a321e31 23 * THE SOFTWARE.
shintamainjp 1:71734a321e31 24 * =============================================================================
shintamainjp 1:71734a321e31 25 */
shintamainjp 0:07895dc2b7c3 26 #include "mbed.h"
shintamainjp 0:07895dc2b7c3 27 #include "Camera_LS_Y201.h"
shintamainjp 1:71734a321e31 28 #include "SDFileSystem.h"
shintamainjp 0:07895dc2b7c3 29
shintamainjp 1:71734a321e31 30 #define DEBMSG printf
shintamainjp 1:71734a321e31 31 #define NEWLINE() printf("\r\n")
shintamainjp 1:71734a321e31 32
shintamainjp 1:71734a321e31 33 #define USE_SDCARD 0
shintamainjp 1:71734a321e31 34
shintamainjp 1:71734a321e31 35 #if USE_SDCARD
shintamainjp 1:71734a321e31 36 #define FILENAME "/sd/IMG_%04d.jpg"
shintamainjp 1:71734a321e31 37 SDFileSystem fs(p5, p6, p7, p8, "sd");
shintamainjp 1:71734a321e31 38 #else
shintamainjp 1:71734a321e31 39 #define FILENAME "/local/IMG_%04d.jpg"
shintamainjp 0:07895dc2b7c3 40 LocalFileSystem fs("local");
shintamainjp 1:71734a321e31 41 #endif
shintamainjp 1:71734a321e31 42 Camera_LS_Y201 cam1(p13, p14);
shintamainjp 0:07895dc2b7c3 43
shintamainjp 1:71734a321e31 44 typedef struct work {
shintamainjp 1:71734a321e31 45 FILE *fp;
shintamainjp 1:71734a321e31 46 } work_t;
shintamainjp 1:71734a321e31 47
shintamainjp 1:71734a321e31 48 work_t work;
shintamainjp 0:07895dc2b7c3 49
shintamainjp 1:71734a321e31 50 /**
shintamainjp 1:71734a321e31 51 * Callback function for readJpegFileContent.
shintamainjp 1:71734a321e31 52 *
shintamainjp 1:71734a321e31 53 * @param buf A pointer to a buffer.
shintamainjp 1:71734a321e31 54 * @param siz A size of the buffer.
shintamainjp 1:71734a321e31 55 */
shintamainjp 1:71734a321e31 56 void callback_func(int done, int total, uint8_t *buf, size_t siz) {
shintamainjp 1:71734a321e31 57 fwrite(buf, siz, 1, work.fp);
shintamainjp 1:71734a321e31 58
shintamainjp 1:71734a321e31 59 static int n = 0;
shintamainjp 1:71734a321e31 60 int tmp = done * 100 / total;
shintamainjp 1:71734a321e31 61 if (n != tmp) {
shintamainjp 1:71734a321e31 62 n = tmp;
shintamainjp 1:71734a321e31 63 DEBMSG("Writing...: %3d%%", n);
shintamainjp 1:71734a321e31 64 NEWLINE();
shintamainjp 1:71734a321e31 65 }
shintamainjp 0:07895dc2b7c3 66 }
shintamainjp 0:07895dc2b7c3 67
shintamainjp 1:71734a321e31 68 /**
shintamainjp 1:71734a321e31 69 * Capture.
shintamainjp 1:71734a321e31 70 *
shintamainjp 1:71734a321e31 71 * @param cam A pointer to a camera object.
shintamainjp 1:71734a321e31 72 * @param filename The file name.
shintamainjp 1:71734a321e31 73 *
shintamainjp 1:71734a321e31 74 * @return Return 0 if it succeed.
shintamainjp 1:71734a321e31 75 */
shintamainjp 1:71734a321e31 76 int capture(Camera_LS_Y201 *cam, char *filename) {
shintamainjp 1:71734a321e31 77 /*
shintamainjp 1:71734a321e31 78 * Take a picture.
shintamainjp 1:71734a321e31 79 */
shintamainjp 1:71734a321e31 80 if (cam->takePicture() != 0) {
shintamainjp 1:71734a321e31 81 return -1;
shintamainjp 0:07895dc2b7c3 82 }
shintamainjp 1:71734a321e31 83 DEBMSG("Captured.");
shintamainjp 1:71734a321e31 84 NEWLINE();
shintamainjp 0:07895dc2b7c3 85
shintamainjp 1:71734a321e31 86 /*
shintamainjp 1:71734a321e31 87 * Open file.
shintamainjp 1:71734a321e31 88 */
shintamainjp 1:71734a321e31 89 work.fp = fopen(filename, "wb");
shintamainjp 1:71734a321e31 90 if (work.fp == NULL) {
shintamainjp 1:71734a321e31 91 return -2;
shintamainjp 1:71734a321e31 92 }
shintamainjp 0:07895dc2b7c3 93
shintamainjp 1:71734a321e31 94 /*
shintamainjp 1:71734a321e31 95 * Read the content.
shintamainjp 1:71734a321e31 96 */
shintamainjp 1:71734a321e31 97 DEBMSG("%s", filename);
shintamainjp 1:71734a321e31 98 NEWLINE();
shintamainjp 1:71734a321e31 99 if (cam->readJpegFileContent(callback_func) != 0) {
shintamainjp 1:71734a321e31 100 fclose(work.fp);
shintamainjp 1:71734a321e31 101 return -3;
shintamainjp 1:71734a321e31 102 }
shintamainjp 1:71734a321e31 103 fclose(work.fp);
shintamainjp 0:07895dc2b7c3 104
shintamainjp 1:71734a321e31 105 /*
shintamainjp 1:71734a321e31 106 * Stop taking pictures.
shintamainjp 1:71734a321e31 107 */
shintamainjp 1:71734a321e31 108 cam->stopTakingPictures();
shintamainjp 0:07895dc2b7c3 109
shintamainjp 0:07895dc2b7c3 110 return 0;
shintamainjp 0:07895dc2b7c3 111 }
shintamainjp 1:71734a321e31 112
shintamainjp 1:71734a321e31 113 /**
shintamainjp 1:71734a321e31 114 * Entry point.
shintamainjp 1:71734a321e31 115 */
shintamainjp 1:71734a321e31 116 int main(void) {
shintamainjp 1:71734a321e31 117 DEBMSG("Camera module");
shintamainjp 1:71734a321e31 118 NEWLINE();
shintamainjp 1:71734a321e31 119 DEBMSG("Resetting...");
shintamainjp 1:71734a321e31 120 NEWLINE();
shintamainjp 1:71734a321e31 121 wait(1);
shintamainjp 1:71734a321e31 122
shintamainjp 1:71734a321e31 123 if (cam1.reset() == 0) {
shintamainjp 1:71734a321e31 124 DEBMSG("Reset OK.");
shintamainjp 1:71734a321e31 125 NEWLINE();
shintamainjp 1:71734a321e31 126 } else {
shintamainjp 1:71734a321e31 127 DEBMSG("Reset fail.");
shintamainjp 1:71734a321e31 128 NEWLINE();
shintamainjp 1:71734a321e31 129 error("Reset fail.");
shintamainjp 1:71734a321e31 130 }
shintamainjp 1:71734a321e31 131 wait(1);
shintamainjp 1:71734a321e31 132
shintamainjp 1:71734a321e31 133 int cnt = 0;
shintamainjp 1:71734a321e31 134 while (1) {
shintamainjp 1:71734a321e31 135 char fname[64];
shintamainjp 1:71734a321e31 136 snprintf(fname, sizeof(fname) - 1, FILENAME, cnt);
shintamainjp 1:71734a321e31 137 int r = capture(&cam1, fname);
shintamainjp 1:71734a321e31 138 if (r == 0) {
shintamainjp 1:71734a321e31 139 DEBMSG("[%04d]:OK.", cnt);
shintamainjp 1:71734a321e31 140 NEWLINE();
shintamainjp 1:71734a321e31 141 } else {
shintamainjp 1:71734a321e31 142 DEBMSG("[%04d]:NG. (code=%d)", cnt, r);
shintamainjp 1:71734a321e31 143 NEWLINE();
shintamainjp 1:71734a321e31 144 error("Failure.");
shintamainjp 1:71734a321e31 145 }
shintamainjp 1:71734a321e31 146 cnt++;
shintamainjp 1:71734a321e31 147 }
shintamainjp 1:71734a321e31 148 }