Camera(LJ-DSC02)
Dependencies: CameraC328 SDFileSystem mbed
Fork of Camera_LS_Y201_TestProgram_2014 by
main.cpp@0:31be9011f67e, 2014-10-10 (annotated)
- Committer:
- shintamainjp
- Date:
- Fri Oct 10 21:48:33 2014 +0000
- Revision:
- 0:31be9011f67e
- Child:
- 1:7e547bf0f166
The initial version of the test program.
Who changed what in which revision?
User | Revision | Line number | New 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 | } |