A test program for CameraC328 library.
Dependencies: mbed CameraC328 SDFileSystem
main.cpp@0:cebbdb54d1cb, 2010-08-30 (annotated)
- Committer:
- shintamainjp
- Date:
- Mon Aug 30 13:47:00 2010 +0000
- Revision:
- 0:cebbdb54d1cb
- Child:
- 1:01d23ea0ab41
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:cebbdb54d1cb | 1 | /** |
shintamainjp | 0:cebbdb54d1cb | 2 | * Test program. |
shintamainjp | 0:cebbdb54d1cb | 3 | * |
shintamainjp | 0:cebbdb54d1cb | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 0:cebbdb54d1cb | 5 | * http://shinta.main.jp/ |
shintamainjp | 0:cebbdb54d1cb | 6 | */ |
shintamainjp | 0:cebbdb54d1cb | 7 | |
shintamainjp | 0:cebbdb54d1cb | 8 | #include "mbed.h" |
shintamainjp | 0:cebbdb54d1cb | 9 | #include "CameraC328.h" |
shintamainjp | 0:cebbdb54d1cb | 10 | |
shintamainjp | 0:cebbdb54d1cb | 11 | LocalFileSystem fs ("fs"); |
shintamainjp | 0:cebbdb54d1cb | 12 | |
shintamainjp | 0:cebbdb54d1cb | 13 | CameraC328 camera(p9, p10, CameraC328::Baud19200); |
shintamainjp | 0:cebbdb54d1cb | 14 | const int IMG_X = 80; |
shintamainjp | 0:cebbdb54d1cb | 15 | const int IMG_Y = 60; |
shintamainjp | 0:cebbdb54d1cb | 16 | char buf[IMG_X * IMG_Y * 2]; |
shintamainjp | 0:cebbdb54d1cb | 17 | FILE *fp_jpeg; |
shintamainjp | 0:cebbdb54d1cb | 18 | |
shintamainjp | 0:cebbdb54d1cb | 19 | void uncompressed_callback(size_t done, size_t total, char c) { |
shintamainjp | 0:cebbdb54d1cb | 20 | buf[done - 1] = c; |
shintamainjp | 0:cebbdb54d1cb | 21 | } |
shintamainjp | 0:cebbdb54d1cb | 22 | |
shintamainjp | 0:cebbdb54d1cb | 23 | void jpeg_callback(char *buf, size_t siz) { |
shintamainjp | 0:cebbdb54d1cb | 24 | for (int i = 0; i < (int)siz; i++) { |
shintamainjp | 0:cebbdb54d1cb | 25 | fprintf(fp_jpeg, "%c", buf[i]); |
shintamainjp | 0:cebbdb54d1cb | 26 | } |
shintamainjp | 0:cebbdb54d1cb | 27 | } |
shintamainjp | 0:cebbdb54d1cb | 28 | |
shintamainjp | 0:cebbdb54d1cb | 29 | void sync(void) { |
shintamainjp | 0:cebbdb54d1cb | 30 | CameraC328::ErrorNumber err = CameraC328::NoError; |
shintamainjp | 0:cebbdb54d1cb | 31 | |
shintamainjp | 0:cebbdb54d1cb | 32 | err = camera.sync(); |
shintamainjp | 0:cebbdb54d1cb | 33 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 34 | printf("[ OK ] : CameraC328::sync\n"); |
shintamainjp | 0:cebbdb54d1cb | 35 | } else { |
shintamainjp | 0:cebbdb54d1cb | 36 | printf("[FAIL] : CameraC328::sync (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 37 | } |
shintamainjp | 0:cebbdb54d1cb | 38 | } |
shintamainjp | 0:cebbdb54d1cb | 39 | |
shintamainjp | 0:cebbdb54d1cb | 40 | void test_uncompressed_snapshot_picture(void) { |
shintamainjp | 0:cebbdb54d1cb | 41 | CameraC328::ErrorNumber err = CameraC328::NoError; |
shintamainjp | 0:cebbdb54d1cb | 42 | |
shintamainjp | 0:cebbdb54d1cb | 43 | err = camera.init(CameraC328::Color16bit, CameraC328::RawResolution80x60, CameraC328::JpegResolution80x64); |
shintamainjp | 0:cebbdb54d1cb | 44 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 45 | printf("[ OK ] : CameraC328::init\n"); |
shintamainjp | 0:cebbdb54d1cb | 46 | } else { |
shintamainjp | 0:cebbdb54d1cb | 47 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 48 | } |
shintamainjp | 0:cebbdb54d1cb | 49 | |
shintamainjp | 0:cebbdb54d1cb | 50 | for (int i = 0; i < 10; i++) { |
shintamainjp | 0:cebbdb54d1cb | 51 | err = camera.getUncompressedSnapshotPicture(uncompressed_callback); |
shintamainjp | 0:cebbdb54d1cb | 52 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 53 | printf("[ OK ] : CameraC328::getUncompressedSnapshotPicture\n"); |
shintamainjp | 0:cebbdb54d1cb | 54 | } else { |
shintamainjp | 0:cebbdb54d1cb | 55 | printf("[FAIL] : CameraC328::getUncompressedSnapshotPicture (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 56 | } |
shintamainjp | 0:cebbdb54d1cb | 57 | |
shintamainjp | 0:cebbdb54d1cb | 58 | char fname[64]; |
shintamainjp | 0:cebbdb54d1cb | 59 | snprintf(fname, sizeof(fname), "/fs/ucss%04d.ppm", i); |
shintamainjp | 0:cebbdb54d1cb | 60 | FILE *fp = fopen(fname, "w"); |
shintamainjp | 0:cebbdb54d1cb | 61 | fprintf(fp, "P3\n"); |
shintamainjp | 0:cebbdb54d1cb | 62 | fprintf(fp, "%d %d\n", IMG_X, IMG_Y); |
shintamainjp | 0:cebbdb54d1cb | 63 | fprintf(fp, "%d\n", 255); |
shintamainjp | 0:cebbdb54d1cb | 64 | for (int y = 0; y < IMG_Y; y++) { |
shintamainjp | 0:cebbdb54d1cb | 65 | for (int x = 0; x < IMG_X; x++) { |
shintamainjp | 0:cebbdb54d1cb | 66 | int adrofs = y * (IMG_X * 2) + (x * 2); |
shintamainjp | 0:cebbdb54d1cb | 67 | uint16_t dat = (buf[adrofs + 0] << 8) | (buf[adrofs + 1] << 0); |
shintamainjp | 0:cebbdb54d1cb | 68 | uint8_t r = ((dat >> 11) & 0x1f) << 3; |
shintamainjp | 0:cebbdb54d1cb | 69 | uint8_t g = ((dat >> 5) & 0x3f) << 2; |
shintamainjp | 0:cebbdb54d1cb | 70 | uint8_t b = ((dat >> 0) & 0x1f) << 3; |
shintamainjp | 0:cebbdb54d1cb | 71 | fprintf(fp,"%d %d %d\n", r, g, b); |
shintamainjp | 0:cebbdb54d1cb | 72 | } |
shintamainjp | 0:cebbdb54d1cb | 73 | } |
shintamainjp | 0:cebbdb54d1cb | 74 | fclose(fp); |
shintamainjp | 0:cebbdb54d1cb | 75 | } |
shintamainjp | 0:cebbdb54d1cb | 76 | } |
shintamainjp | 0:cebbdb54d1cb | 77 | |
shintamainjp | 0:cebbdb54d1cb | 78 | void test_uncompressed_preview_picture(void) { |
shintamainjp | 0:cebbdb54d1cb | 79 | CameraC328::ErrorNumber err = CameraC328::NoError; |
shintamainjp | 0:cebbdb54d1cb | 80 | |
shintamainjp | 0:cebbdb54d1cb | 81 | err = camera.init(CameraC328::Color16bit, CameraC328::RawResolution80x60, CameraC328::JpegResolution80x64); |
shintamainjp | 0:cebbdb54d1cb | 82 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 83 | printf("[ OK ] : CameraC328::init\n"); |
shintamainjp | 0:cebbdb54d1cb | 84 | } else { |
shintamainjp | 0:cebbdb54d1cb | 85 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 86 | } |
shintamainjp | 0:cebbdb54d1cb | 87 | |
shintamainjp | 0:cebbdb54d1cb | 88 | for (int i = 0; i < 10; i++) { |
shintamainjp | 0:cebbdb54d1cb | 89 | err = camera.getUncompressedPreviewPicture(uncompressed_callback); |
shintamainjp | 0:cebbdb54d1cb | 90 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 91 | printf("[ OK ] : CameraC328::getUncompressedPreviewPicture\n"); |
shintamainjp | 0:cebbdb54d1cb | 92 | } else { |
shintamainjp | 0:cebbdb54d1cb | 93 | printf("[FAIL] : CameraC328::getUncompressedPreviewPicture (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 94 | } |
shintamainjp | 0:cebbdb54d1cb | 95 | |
shintamainjp | 0:cebbdb54d1cb | 96 | char fname[64]; |
shintamainjp | 0:cebbdb54d1cb | 97 | snprintf(fname, sizeof(fname), "/fs/ucpv%04d.ppm", i); |
shintamainjp | 0:cebbdb54d1cb | 98 | FILE *fp = fopen(fname, "w"); |
shintamainjp | 0:cebbdb54d1cb | 99 | fprintf(fp, "P3\n"); |
shintamainjp | 0:cebbdb54d1cb | 100 | fprintf(fp, "%d %d\n", IMG_X, IMG_Y); |
shintamainjp | 0:cebbdb54d1cb | 101 | fprintf(fp, "%d\n", 255); |
shintamainjp | 0:cebbdb54d1cb | 102 | for (int y = 0; y < IMG_Y; y++) { |
shintamainjp | 0:cebbdb54d1cb | 103 | for (int x = 0; x < IMG_X; x++) { |
shintamainjp | 0:cebbdb54d1cb | 104 | int adrofs = y * (IMG_X * 2) + (x * 2); |
shintamainjp | 0:cebbdb54d1cb | 105 | uint16_t dat = (buf[adrofs + 0] << 8) | (buf[adrofs + 1] << 0); |
shintamainjp | 0:cebbdb54d1cb | 106 | uint8_t r = ((dat >> 11) & 0x1f) << 3; |
shintamainjp | 0:cebbdb54d1cb | 107 | uint8_t g = ((dat >> 5) & 0x3f) << 2; |
shintamainjp | 0:cebbdb54d1cb | 108 | uint8_t b = ((dat >> 0) & 0x1f) << 3; |
shintamainjp | 0:cebbdb54d1cb | 109 | fprintf(fp,"%d %d %d\n", r, g, b); |
shintamainjp | 0:cebbdb54d1cb | 110 | } |
shintamainjp | 0:cebbdb54d1cb | 111 | } |
shintamainjp | 0:cebbdb54d1cb | 112 | fclose(fp); |
shintamainjp | 0:cebbdb54d1cb | 113 | } |
shintamainjp | 0:cebbdb54d1cb | 114 | } |
shintamainjp | 0:cebbdb54d1cb | 115 | |
shintamainjp | 0:cebbdb54d1cb | 116 | void test_jpeg_snapshot_picture(void) { |
shintamainjp | 0:cebbdb54d1cb | 117 | CameraC328::ErrorNumber err = CameraC328::NoError; |
shintamainjp | 0:cebbdb54d1cb | 118 | |
shintamainjp | 0:cebbdb54d1cb | 119 | err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution640x480); |
shintamainjp | 0:cebbdb54d1cb | 120 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 121 | printf("[ OK ] : CameraC328::init\n"); |
shintamainjp | 0:cebbdb54d1cb | 122 | } else { |
shintamainjp | 0:cebbdb54d1cb | 123 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 124 | } |
shintamainjp | 0:cebbdb54d1cb | 125 | |
shintamainjp | 0:cebbdb54d1cb | 126 | for (int i = 0; i < 10; i++) { |
shintamainjp | 0:cebbdb54d1cb | 127 | char fname[64]; |
shintamainjp | 0:cebbdb54d1cb | 128 | snprintf(fname, sizeof(fname), "/fs/jpss%04d.jpg", i); |
shintamainjp | 0:cebbdb54d1cb | 129 | fp_jpeg = fopen(fname, "w"); |
shintamainjp | 0:cebbdb54d1cb | 130 | |
shintamainjp | 0:cebbdb54d1cb | 131 | err = camera.getJpegSnapshotPicture(jpeg_callback); |
shintamainjp | 0:cebbdb54d1cb | 132 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 133 | printf("[ OK ] : CameraC328::getJpegSnapshotPicture\n"); |
shintamainjp | 0:cebbdb54d1cb | 134 | } else { |
shintamainjp | 0:cebbdb54d1cb | 135 | printf("[FAIL] : CameraC328::getJpegSnapshotPicture (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 136 | } |
shintamainjp | 0:cebbdb54d1cb | 137 | |
shintamainjp | 0:cebbdb54d1cb | 138 | fclose(fp_jpeg); |
shintamainjp | 0:cebbdb54d1cb | 139 | } |
shintamainjp | 0:cebbdb54d1cb | 140 | } |
shintamainjp | 0:cebbdb54d1cb | 141 | |
shintamainjp | 0:cebbdb54d1cb | 142 | void test_jpeg_preview_picture(void) { |
shintamainjp | 0:cebbdb54d1cb | 143 | CameraC328::ErrorNumber err = CameraC328::NoError; |
shintamainjp | 0:cebbdb54d1cb | 144 | |
shintamainjp | 0:cebbdb54d1cb | 145 | err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution640x480); |
shintamainjp | 0:cebbdb54d1cb | 146 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 147 | printf("[ OK ] : CameraC328::init\n"); |
shintamainjp | 0:cebbdb54d1cb | 148 | } else { |
shintamainjp | 0:cebbdb54d1cb | 149 | printf("[FAIL] : CameraC328::init (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 150 | } |
shintamainjp | 0:cebbdb54d1cb | 151 | |
shintamainjp | 0:cebbdb54d1cb | 152 | for (int i = 0; i < 10; i++) { |
shintamainjp | 0:cebbdb54d1cb | 153 | char fname[64]; |
shintamainjp | 0:cebbdb54d1cb | 154 | snprintf(fname, sizeof(fname), "/fs/jppv%04d.jpg", i); |
shintamainjp | 0:cebbdb54d1cb | 155 | fp_jpeg = fopen(fname, "w"); |
shintamainjp | 0:cebbdb54d1cb | 156 | |
shintamainjp | 0:cebbdb54d1cb | 157 | err = camera.getJpegPreviewPicture(jpeg_callback); |
shintamainjp | 0:cebbdb54d1cb | 158 | if (CameraC328::NoError == err) { |
shintamainjp | 0:cebbdb54d1cb | 159 | printf("[ OK ] : CameraC328::getJpegPreviewPicture\n"); |
shintamainjp | 0:cebbdb54d1cb | 160 | } else { |
shintamainjp | 0:cebbdb54d1cb | 161 | printf("[FAIL] : CameraC328::getJpegPreviewPicture (Error=%02X)\n", (int)err); |
shintamainjp | 0:cebbdb54d1cb | 162 | } |
shintamainjp | 0:cebbdb54d1cb | 163 | |
shintamainjp | 0:cebbdb54d1cb | 164 | fclose(fp_jpeg); |
shintamainjp | 0:cebbdb54d1cb | 165 | } |
shintamainjp | 0:cebbdb54d1cb | 166 | } |
shintamainjp | 0:cebbdb54d1cb | 167 | |
shintamainjp | 0:cebbdb54d1cb | 168 | int main() { |
shintamainjp | 0:cebbdb54d1cb | 169 | printf("\n"); |
shintamainjp | 0:cebbdb54d1cb | 170 | printf("==========\n"); |
shintamainjp | 0:cebbdb54d1cb | 171 | printf("CameraC328\n"); |
shintamainjp | 0:cebbdb54d1cb | 172 | printf("==========\n"); |
shintamainjp | 0:cebbdb54d1cb | 173 | |
shintamainjp | 0:cebbdb54d1cb | 174 | sync(); |
shintamainjp | 0:cebbdb54d1cb | 175 | test_uncompressed_snapshot_picture(); |
shintamainjp | 0:cebbdb54d1cb | 176 | test_uncompressed_preview_picture(); |
shintamainjp | 0:cebbdb54d1cb | 177 | test_jpeg_preview_picture(); |
shintamainjp | 0:cebbdb54d1cb | 178 | test_jpeg_snapshot_picture(); |
shintamainjp | 0:cebbdb54d1cb | 179 | |
shintamainjp | 0:cebbdb54d1cb | 180 | return 0; |
shintamainjp | 0:cebbdb54d1cb | 181 | } |