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