Mitesh Patel
/
CameraC328_TestProgram1
main.cpp@1:78aaadfd1ece, 2010-12-14 (annotated)
- Committer:
- mitesh2patel
- Date:
- Tue Dec 14 13:27:41 2010 +0000
- Revision:
- 1:78aaadfd1ece
- Parent:
- 0:162e214baa3d
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mitesh2patel | 0:162e214baa3d | 1 | /** |
mitesh2patel | 0:162e214baa3d | 2 | * Test program. |
mitesh2patel | 0:162e214baa3d | 3 | * |
mitesh2patel | 0:162e214baa3d | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
mitesh2patel | 0:162e214baa3d | 5 | * http://shinta.main.jp/ |
mitesh2patel | 0:162e214baa3d | 6 | */ |
mitesh2patel | 0:162e214baa3d | 7 | |
mitesh2patel | 0:162e214baa3d | 8 | #include "mbed.h" |
mitesh2patel | 0:162e214baa3d | 9 | #include "CameraC328.h" |
mitesh2patel | 0:162e214baa3d | 10 | |
mitesh2patel | 0:162e214baa3d | 11 | DigitalIn pir(p6); |
mitesh2patel | 0:162e214baa3d | 12 | DigitalOut led(LED1); |
mitesh2patel | 0:162e214baa3d | 13 | |
mitesh2patel | 0:162e214baa3d | 14 | //InterruptIn PIR(p6); |
mitesh2patel | 0:162e214baa3d | 15 | |
mitesh2patel | 0:162e214baa3d | 16 | LocalFileSystem fs ("fs"); |
mitesh2patel | 0:162e214baa3d | 17 | |
mitesh2patel | 0:162e214baa3d | 18 | CameraC328 camera(p9, p10, CameraC328::Baud115200); |
mitesh2patel | 0:162e214baa3d | 19 | const int IMG_X = 80; |
mitesh2patel | 0:162e214baa3d | 20 | const int IMG_Y = 60; |
mitesh2patel | 0:162e214baa3d | 21 | char buf[IMG_X * IMG_Y * 2]; |
mitesh2patel | 0:162e214baa3d | 22 | FILE *fp_jpeg; |
mitesh2patel | 0:162e214baa3d | 23 | |
mitesh2patel | 0:162e214baa3d | 24 | void uncompressed_callback(size_t done, size_t total, char c) { |
mitesh2patel | 0:162e214baa3d | 25 | buf[done - 1] = c; |
mitesh2patel | 0:162e214baa3d | 26 | } |
mitesh2patel | 0:162e214baa3d | 27 | |
mitesh2patel | 0:162e214baa3d | 28 | void jpeg_callback(char *buf, size_t siz) { |
mitesh2patel | 0:162e214baa3d | 29 | for (int i = 0; i < (int)siz; i++) { |
mitesh2patel | 0:162e214baa3d | 30 | fprintf(fp_jpeg, "%c", buf[i]); |
mitesh2patel | 0:162e214baa3d | 31 | } |
mitesh2patel | 0:162e214baa3d | 32 | } |
mitesh2patel | 0:162e214baa3d | 33 | void sync(void) { |
mitesh2patel | 0:162e214baa3d | 34 | CameraC328::ErrorNumber err = CameraC328::NoError; |
mitesh2patel | 0:162e214baa3d | 35 | |
mitesh2patel | 0:162e214baa3d | 36 | err = camera.sync(); |
mitesh2patel | 0:162e214baa3d | 37 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 38 | printf("[ OK ] : CameraC328::sync\n"); |
mitesh2patel | 0:162e214baa3d | 39 | } else { |
mitesh2patel | 0:162e214baa3d | 40 | printf("[FAIL] : CameraC328::sync (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 41 | |
mitesh2patel | 0:162e214baa3d | 42 | } |
mitesh2patel | 0:162e214baa3d | 43 | } |
mitesh2patel | 0:162e214baa3d | 44 | |
mitesh2patel | 0:162e214baa3d | 45 | void test_uncompressed_snapshot_picture(void) { |
mitesh2patel | 0:162e214baa3d | 46 | CameraC328::ErrorNumber err = CameraC328::NoError; |
mitesh2patel | 0:162e214baa3d | 47 | |
mitesh2patel | 0:162e214baa3d | 48 | err = camera.init(CameraC328::Color16bit, CameraC328::RawResolution80x60, CameraC328::JpegResolution160x128); |
mitesh2patel | 0:162e214baa3d | 49 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 50 | printf("[ OK ] : CameraC328::init\n"); |
mitesh2patel | 0:162e214baa3d | 51 | } else { |
mitesh2patel | 0:162e214baa3d | 52 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 53 | } |
mitesh2patel | 0:162e214baa3d | 54 | |
mitesh2patel | 0:162e214baa3d | 55 | for (int i = 0; i < 1; i++) { |
mitesh2patel | 0:162e214baa3d | 56 | err = camera.getUncompressedSnapshotPicture(uncompressed_callback); |
mitesh2patel | 0:162e214baa3d | 57 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 58 | printf("[ OK ] : CameraC328::getUncompressedSnapshotPicture\n"); |
mitesh2patel | 0:162e214baa3d | 59 | } else { |
mitesh2patel | 0:162e214baa3d | 60 | printf("[FAIL] : CameraC328::getUncompressedSnapshotPicture (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 61 | } |
mitesh2patel | 0:162e214baa3d | 62 | |
mitesh2patel | 0:162e214baa3d | 63 | char fname[64]; |
mitesh2patel | 0:162e214baa3d | 64 | snprintf(fname, sizeof(fname), "/fs/ucss%04d.ppm", i); |
mitesh2patel | 0:162e214baa3d | 65 | FILE *fp = fopen(fname, "w"); |
mitesh2patel | 0:162e214baa3d | 66 | fprintf(fp, "P3\n"); |
mitesh2patel | 0:162e214baa3d | 67 | fprintf(fp, "%d %d\n", IMG_X, IMG_Y); |
mitesh2patel | 0:162e214baa3d | 68 | fprintf(fp, "%d\n", 255); |
mitesh2patel | 0:162e214baa3d | 69 | for (int y = 0; y < IMG_Y; y++) { |
mitesh2patel | 0:162e214baa3d | 70 | for (int x = 0; x < IMG_X; x++) { |
mitesh2patel | 0:162e214baa3d | 71 | int adrofs = y * (IMG_X * 2) + (x * 2); |
mitesh2patel | 0:162e214baa3d | 72 | uint16_t dat = (buf[adrofs + 0] << 8) | (buf[adrofs + 1] << 0); |
mitesh2patel | 0:162e214baa3d | 73 | uint8_t r = ((dat >> 11) & 0x1f) << 3; |
mitesh2patel | 0:162e214baa3d | 74 | uint8_t g = ((dat >> 5) & 0x3f) << 2; |
mitesh2patel | 0:162e214baa3d | 75 | uint8_t b = ((dat >> 0) & 0x1f) << 3; |
mitesh2patel | 0:162e214baa3d | 76 | fprintf(fp,"%d %d %d\n", r, g, b); |
mitesh2patel | 0:162e214baa3d | 77 | } |
mitesh2patel | 0:162e214baa3d | 78 | } |
mitesh2patel | 0:162e214baa3d | 79 | fclose(fp); |
mitesh2patel | 0:162e214baa3d | 80 | } |
mitesh2patel | 0:162e214baa3d | 81 | } |
mitesh2patel | 0:162e214baa3d | 82 | |
mitesh2patel | 0:162e214baa3d | 83 | void test_uncompressed_preview_picture(void) { |
mitesh2patel | 0:162e214baa3d | 84 | CameraC328::ErrorNumber err = CameraC328::NoError; |
mitesh2patel | 0:162e214baa3d | 85 | |
mitesh2patel | 0:162e214baa3d | 86 | err = camera.init(CameraC328::Color16bit, CameraC328::RawResolution80x60, CameraC328::JpegResolution160x128); |
mitesh2patel | 0:162e214baa3d | 87 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 88 | printf("[ OK ] : CameraC328::init\n"); |
mitesh2patel | 0:162e214baa3d | 89 | } else { |
mitesh2patel | 0:162e214baa3d | 90 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 91 | } |
mitesh2patel | 0:162e214baa3d | 92 | |
mitesh2patel | 0:162e214baa3d | 93 | for (int i = 0; i < 1; i++) { |
mitesh2patel | 0:162e214baa3d | 94 | err = camera.getUncompressedPreviewPicture(uncompressed_callback); |
mitesh2patel | 0:162e214baa3d | 95 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 96 | printf("[ OK ] : CameraC328::getUncompressedPreviewPicture\n"); |
mitesh2patel | 0:162e214baa3d | 97 | } else { |
mitesh2patel | 0:162e214baa3d | 98 | printf("[FAIL] : CameraC328::getUncompressedPreviewPicture (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 99 | } |
mitesh2patel | 0:162e214baa3d | 100 | |
mitesh2patel | 0:162e214baa3d | 101 | char fname[64]; |
mitesh2patel | 0:162e214baa3d | 102 | snprintf(fname, sizeof(fname), "/fs/ucpv%04d.ppm", i); |
mitesh2patel | 0:162e214baa3d | 103 | FILE *fp = fopen(fname, "w"); |
mitesh2patel | 0:162e214baa3d | 104 | fprintf(fp, "P3\n"); |
mitesh2patel | 0:162e214baa3d | 105 | fprintf(fp, "%d %d\n", IMG_X, IMG_Y); |
mitesh2patel | 0:162e214baa3d | 106 | fprintf(fp, "%d\n", 255); |
mitesh2patel | 0:162e214baa3d | 107 | for (int y = 0; y < IMG_Y; y++) { |
mitesh2patel | 0:162e214baa3d | 108 | for (int x = 0; x < IMG_X; x++) { |
mitesh2patel | 0:162e214baa3d | 109 | int adrofs = y * (IMG_X * 2) + (x * 2); |
mitesh2patel | 0:162e214baa3d | 110 | uint16_t dat = (buf[adrofs + 0] << 8) | (buf[adrofs + 1] << 0); |
mitesh2patel | 0:162e214baa3d | 111 | uint8_t r = ((dat >> 11) & 0x1f) << 3; |
mitesh2patel | 0:162e214baa3d | 112 | uint8_t g = ((dat >> 5) & 0x3f) << 2; |
mitesh2patel | 0:162e214baa3d | 113 | uint8_t b = ((dat >> 0) & 0x1f) << 3; |
mitesh2patel | 0:162e214baa3d | 114 | fprintf(fp,"%d %d %d\n", r, g, b); |
mitesh2patel | 0:162e214baa3d | 115 | } |
mitesh2patel | 0:162e214baa3d | 116 | } |
mitesh2patel | 0:162e214baa3d | 117 | fclose(fp); |
mitesh2patel | 0:162e214baa3d | 118 | } |
mitesh2patel | 0:162e214baa3d | 119 | } |
mitesh2patel | 0:162e214baa3d | 120 | |
mitesh2patel | 0:162e214baa3d | 121 | void test_jpeg_snapshot_picture(void) { |
mitesh2patel | 0:162e214baa3d | 122 | CameraC328::ErrorNumber err = CameraC328::NoError; |
mitesh2patel | 0:162e214baa3d | 123 | |
mitesh2patel | 0:162e214baa3d | 124 | err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution160x120, CameraC328::JpegResolution640x480); |
mitesh2patel | 0:162e214baa3d | 125 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 126 | printf("[ OK ] : CameraC328::init\n"); |
mitesh2patel | 0:162e214baa3d | 127 | } else { |
mitesh2patel | 0:162e214baa3d | 128 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 129 | } |
mitesh2patel | 0:162e214baa3d | 130 | |
mitesh2patel | 0:162e214baa3d | 131 | for (int i = 0; i < 1; i++) { |
mitesh2patel | 0:162e214baa3d | 132 | char fname[64]; |
mitesh2patel | 0:162e214baa3d | 133 | snprintf(fname, sizeof(fname), "/fs/jpss%04d.jpg", i); |
mitesh2patel | 0:162e214baa3d | 134 | fp_jpeg = fopen(fname, "w"); |
mitesh2patel | 0:162e214baa3d | 135 | |
mitesh2patel | 0:162e214baa3d | 136 | err = camera.getJpegSnapshotPicture(jpeg_callback); |
mitesh2patel | 0:162e214baa3d | 137 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 138 | printf("[ OK ] : CameraC328::getJpegSnapshotPicture\n"); |
mitesh2patel | 0:162e214baa3d | 139 | } else { |
mitesh2patel | 0:162e214baa3d | 140 | printf("[FAIL] : CameraC328::getJpegSnapshotPicture (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 141 | } |
mitesh2patel | 0:162e214baa3d | 142 | |
mitesh2patel | 0:162e214baa3d | 143 | fclose(fp_jpeg); |
mitesh2patel | 0:162e214baa3d | 144 | } |
mitesh2patel | 0:162e214baa3d | 145 | } |
mitesh2patel | 0:162e214baa3d | 146 | |
mitesh2patel | 0:162e214baa3d | 147 | void test_jpeg_preview_picture(void) { |
mitesh2patel | 0:162e214baa3d | 148 | // sync(); |
mitesh2patel | 0:162e214baa3d | 149 | CameraC328::ErrorNumber err = CameraC328::NoError; |
mitesh2patel | 0:162e214baa3d | 150 | |
mitesh2patel | 0:162e214baa3d | 151 | err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution160x120, CameraC328::JpegResolution640x480); |
mitesh2patel | 0:162e214baa3d | 152 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 153 | printf("[ OK ] : CameraC328::init\n"); |
mitesh2patel | 0:162e214baa3d | 154 | } else { |
mitesh2patel | 0:162e214baa3d | 155 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 156 | } |
mitesh2patel | 0:162e214baa3d | 157 | |
mitesh2patel | 0:162e214baa3d | 158 | for (int i = 0; i < 1; i++) { |
mitesh2patel | 0:162e214baa3d | 159 | char fname[64]; |
mitesh2patel | 0:162e214baa3d | 160 | snprintf(fname, sizeof(fname), "/fs/jppv%04d.jpg", i); |
mitesh2patel | 0:162e214baa3d | 161 | fp_jpeg = fopen(fname, "w"); |
mitesh2patel | 0:162e214baa3d | 162 | |
mitesh2patel | 0:162e214baa3d | 163 | |
mitesh2patel | 0:162e214baa3d | 164 | err = camera.getJpegPreviewPicture(jpeg_callback); |
mitesh2patel | 0:162e214baa3d | 165 | if (CameraC328::NoError == err) { |
mitesh2patel | 0:162e214baa3d | 166 | printf("[ OK ] : CameraC328::getJpegPreviewPicture\n"); |
mitesh2patel | 0:162e214baa3d | 167 | } else { |
mitesh2patel | 0:162e214baa3d | 168 | printf("[FAIL] : CameraC328::getJpegPreviewPicture (Error=%02X)\n", (int)err); |
mitesh2patel | 0:162e214baa3d | 169 | } |
mitesh2patel | 0:162e214baa3d | 170 | |
mitesh2patel | 0:162e214baa3d | 171 | |
mitesh2patel | 0:162e214baa3d | 172 | |
mitesh2patel | 0:162e214baa3d | 173 | |
mitesh2patel | 0:162e214baa3d | 174 | fclose(fp_jpeg); |
mitesh2patel | 0:162e214baa3d | 175 | |
mitesh2patel | 0:162e214baa3d | 176 | FILE *fp = fopen("/fs/pic.htm", "w"); // Open local filename |
mitesh2patel | 0:162e214baa3d | 177 | fprintf(fp, "<title> cam test page </title>\n"); |
mitesh2patel | 0:162e214baa3d | 178 | fprintf(fp, "<body> cam test page "); |
mitesh2patel | 0:162e214baa3d | 179 | fprintf(fp,"<div id='my_area' align='center'>"); |
mitesh2patel | 1:78aaadfd1ece | 180 | fprintf(fp, "<IMG SRC='JPPV0000.jpg'>"); |
mitesh2patel | 0:162e214baa3d | 181 | fprintf(fp, " </body>\n"); |
mitesh2patel | 0:162e214baa3d | 182 | fprintf(fp, "</a>"); |
mitesh2patel | 0:162e214baa3d | 183 | fclose(fp); |
mitesh2patel | 0:162e214baa3d | 184 | |
mitesh2patel | 0:162e214baa3d | 185 | } |
mitesh2patel | 0:162e214baa3d | 186 | } |
mitesh2patel | 0:162e214baa3d | 187 | |
mitesh2patel | 0:162e214baa3d | 188 | /*void INTR_handler() { |
mitesh2patel | 0:162e214baa3d | 189 | sync(); |
mitesh2patel | 0:162e214baa3d | 190 | |
mitesh2patel | 0:162e214baa3d | 191 | test_jpeg_preview_picture(); |
mitesh2patel | 0:162e214baa3d | 192 | }*/ |
mitesh2patel | 0:162e214baa3d | 193 | |
mitesh2patel | 0:162e214baa3d | 194 | int main() { |
mitesh2patel | 0:162e214baa3d | 195 | |
mitesh2patel | 0:162e214baa3d | 196 | printf("CameraC328\n"); |
mitesh2patel | 0:162e214baa3d | 197 | |
mitesh2patel | 0:162e214baa3d | 198 | |
mitesh2patel | 0:162e214baa3d | 199 | //PIR.rise(&INTR_handler); |
mitesh2patel | 0:162e214baa3d | 200 | |
mitesh2patel | 0:162e214baa3d | 201 | sync(); |
mitesh2patel | 0:162e214baa3d | 202 | |
mitesh2patel | 0:162e214baa3d | 203 | while(1){ |
mitesh2patel | 0:162e214baa3d | 204 | //printf("CameraC328\n\r"); |
mitesh2patel | 0:162e214baa3d | 205 | // sync(); |
mitesh2patel | 0:162e214baa3d | 206 | |
mitesh2patel | 0:162e214baa3d | 207 | // test_jpeg_preview_picture(); |
mitesh2patel | 0:162e214baa3d | 208 | // test_uncompressed_preview_picture(); |
mitesh2patel | 0:162e214baa3d | 209 | // test_uncompressed_snapshot_picture(); |
mitesh2patel | 0:162e214baa3d | 210 | //test_jpeg_snapshot_picture(); |
mitesh2patel | 0:162e214baa3d | 211 | if(pir==1){ |
mitesh2patel | 0:162e214baa3d | 212 | printf("somebody detected\n"); |
mitesh2patel | 0:162e214baa3d | 213 | |
mitesh2patel | 0:162e214baa3d | 214 | sync(); |
mitesh2patel | 0:162e214baa3d | 215 | test_jpeg_preview_picture(); |
mitesh2patel | 0:162e214baa3d | 216 | |
mitesh2patel | 0:162e214baa3d | 217 | |
mitesh2patel | 0:162e214baa3d | 218 | |
mitesh2patel | 0:162e214baa3d | 219 | |
mitesh2patel | 0:162e214baa3d | 220 | } |
mitesh2patel | 0:162e214baa3d | 221 | led=!led; |
mitesh2patel | 0:162e214baa3d | 222 | wait(0.5); |
mitesh2patel | 0:162e214baa3d | 223 | |
mitesh2patel | 0:162e214baa3d | 224 | } |
mitesh2patel | 0:162e214baa3d | 225 | |
mitesh2patel | 0:162e214baa3d | 226 | |
mitesh2patel | 0:162e214baa3d | 227 | return 0; |
mitesh2patel | 0:162e214baa3d | 228 | } |