A test program for CameraC328 library.

Dependencies:   mbed CameraC328 SDFileSystem

Committer:
shintamainjp
Date:
Mon Aug 30 13:47:00 2010 +0000
Revision:
0:cebbdb54d1cb
Child:
1:01d23ea0ab41

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }