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