CameraC328

Dependents:   CameraC328_TestProgram CameraC328_Thresholding Camera_TestProgram_2015 Camera_TestProgram_2015 ... more

Committer:
shintamainjp
Date:
Fri Sep 17 11:15:37 2010 +0000
Revision:
13:17cf1e2015f7
Parent:
12:4daa8c068bc5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 13:17cf1e2015f7 1 /**
shintamainjp 13:17cf1e2015f7 2 * C328-7640 device driver class (Version 0.0.6)
shintamainjp 13:17cf1e2015f7 3 * Reference documents: C328-7640 User Manual v3.0 2004.8.19
shintamainjp 13:17cf1e2015f7 4 *
shintamainjp 13:17cf1e2015f7 5 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 13:17cf1e2015f7 6 * http://shinta.main.jp/
shintamainjp 13:17cf1e2015f7 7 */
shintamainjp 13:17cf1e2015f7 8
shintamainjp 13:17cf1e2015f7 9 #include "mbed.h"
shintamainjp 13:17cf1e2015f7 10 #include "SerialBuffered.h"
shintamainjp 13:17cf1e2015f7 11
shintamainjp 13:17cf1e2015f7 12 #ifndef _CAMERA_C328_H_
shintamainjp 13:17cf1e2015f7 13 #define _CAMERA_C328_H_
shintamainjp 13:17cf1e2015f7 14
shintamainjp 13:17cf1e2015f7 15 /*
shintamainjp 13:17cf1e2015f7 16 * Class: CameraC328
shintamainjp 13:17cf1e2015f7 17 */
shintamainjp 13:17cf1e2015f7 18 class CameraC328 {
shintamainjp 13:17cf1e2015f7 19 public:
shintamainjp 13:17cf1e2015f7 20
shintamainjp 13:17cf1e2015f7 21 /**
shintamainjp 13:17cf1e2015f7 22 * Color type.
shintamainjp 13:17cf1e2015f7 23 */
shintamainjp 13:17cf1e2015f7 24 enum ColorType {
shintamainjp 13:17cf1e2015f7 25 GrayScale2bit = 0x01, // 2bit for Y only
shintamainjp 13:17cf1e2015f7 26 GrayScale4bit = 0x02, // 4bit for Y only
shintamainjp 13:17cf1e2015f7 27 GrayScale8bit = 0x03, // 8bit for Y only
shintamainjp 13:17cf1e2015f7 28 Color12bit = 0x05, // 444 (RGB)
shintamainjp 13:17cf1e2015f7 29 Color16bit = 0x06, // 565 (RGB)
shintamainjp 13:17cf1e2015f7 30 Jpeg = 0x07
shintamainjp 13:17cf1e2015f7 31 };
shintamainjp 13:17cf1e2015f7 32
shintamainjp 13:17cf1e2015f7 33 /**
shintamainjp 13:17cf1e2015f7 34 * Raw resolution.
shintamainjp 13:17cf1e2015f7 35 */
shintamainjp 13:17cf1e2015f7 36 enum RawResolution {
shintamainjp 13:17cf1e2015f7 37 RawResolution80x60 = 0x01,
shintamainjp 13:17cf1e2015f7 38 RawResolution160x120 = 0x03
shintamainjp 13:17cf1e2015f7 39 };
shintamainjp 13:17cf1e2015f7 40
shintamainjp 13:17cf1e2015f7 41 /**
shintamainjp 13:17cf1e2015f7 42 * JPEG resolution.
shintamainjp 13:17cf1e2015f7 43 */
shintamainjp 13:17cf1e2015f7 44 enum JpegResolution {
shintamainjp 13:17cf1e2015f7 45 JpegResolution80x64 = 0x01,
shintamainjp 13:17cf1e2015f7 46 JpegResolution160x128 = 0x03,
shintamainjp 13:17cf1e2015f7 47 JpegResolution320x240 = 0x05,
shintamainjp 13:17cf1e2015f7 48 JpegResolution640x480 = 0x07
shintamainjp 13:17cf1e2015f7 49 };
shintamainjp 13:17cf1e2015f7 50
shintamainjp 13:17cf1e2015f7 51 /**
shintamainjp 13:17cf1e2015f7 52 * Error number.
shintamainjp 13:17cf1e2015f7 53 */
shintamainjp 13:17cf1e2015f7 54 enum ErrorNumber {
shintamainjp 13:17cf1e2015f7 55 NoError = 0x00,
shintamainjp 13:17cf1e2015f7 56 PictureTypeError = 0x01,
shintamainjp 13:17cf1e2015f7 57 PictureUpScale = 0x02,
shintamainjp 13:17cf1e2015f7 58 PictureScaleError = 0x03,
shintamainjp 13:17cf1e2015f7 59 UnexpectedReply = 0x04,
shintamainjp 13:17cf1e2015f7 60 SendPictureTimeout = 0x05,
shintamainjp 13:17cf1e2015f7 61 UnexpectedCommand = 0x06,
shintamainjp 13:17cf1e2015f7 62 SramJpegTypeError = 0x07,
shintamainjp 13:17cf1e2015f7 63 SramJpegSizeError = 0x08,
shintamainjp 13:17cf1e2015f7 64 PictureFormatError = 0x09,
shintamainjp 13:17cf1e2015f7 65 PictureSizeError = 0x0a,
shintamainjp 13:17cf1e2015f7 66 ParameterError = 0x0b,
shintamainjp 13:17cf1e2015f7 67 SendRegisterTimeout = 0x0c,
shintamainjp 13:17cf1e2015f7 68 CommandIdError = 0x0d,
shintamainjp 13:17cf1e2015f7 69 PictureNotReady = 0x0f,
shintamainjp 13:17cf1e2015f7 70 TransferPackageNumberError = 0x10,
shintamainjp 13:17cf1e2015f7 71 SetTransferPackageSizeWrong = 0x11,
shintamainjp 13:17cf1e2015f7 72 CommandHeaderError = 0xf0,
shintamainjp 13:17cf1e2015f7 73 CommandLengthError = 0xf1,
shintamainjp 13:17cf1e2015f7 74 SendPictureError = 0xf5,
shintamainjp 13:17cf1e2015f7 75 SendCommandError = 0xff
shintamainjp 13:17cf1e2015f7 76 };
shintamainjp 13:17cf1e2015f7 77
shintamainjp 13:17cf1e2015f7 78 /**
shintamainjp 13:17cf1e2015f7 79 * Picture type.
shintamainjp 13:17cf1e2015f7 80 */
shintamainjp 13:17cf1e2015f7 81 enum PictureType {
shintamainjp 13:17cf1e2015f7 82 SnapshotPicture = 0x01,
shintamainjp 13:17cf1e2015f7 83 PreviewPicture = 0x02,
shintamainjp 13:17cf1e2015f7 84 JpegPreviewPicture = 0x05
shintamainjp 13:17cf1e2015f7 85 };
shintamainjp 13:17cf1e2015f7 86
shintamainjp 13:17cf1e2015f7 87 /**
shintamainjp 13:17cf1e2015f7 88 * Snapshot type.
shintamainjp 13:17cf1e2015f7 89 */
shintamainjp 13:17cf1e2015f7 90 enum SnapshotType {
shintamainjp 13:17cf1e2015f7 91 CompressedPicture = 0x00,
shintamainjp 13:17cf1e2015f7 92 UncompressedPicture = 0x01
shintamainjp 13:17cf1e2015f7 93 };
shintamainjp 13:17cf1e2015f7 94
shintamainjp 13:17cf1e2015f7 95 /**
shintamainjp 13:17cf1e2015f7 96 * Baud rate.
shintamainjp 13:17cf1e2015f7 97 */
shintamainjp 13:17cf1e2015f7 98 enum Baud {
shintamainjp 13:17cf1e2015f7 99 Baud7200 = 7200,
shintamainjp 13:17cf1e2015f7 100 Baud9600 = 9600,
shintamainjp 13:17cf1e2015f7 101 Baud14400 = 14400,
shintamainjp 13:17cf1e2015f7 102 Baud19200 = 19200, // Default.
shintamainjp 13:17cf1e2015f7 103 Baud28800 = 28800,
shintamainjp 13:17cf1e2015f7 104 Baud38400 = 38400,
shintamainjp 13:17cf1e2015f7 105 Baud57600 = 57600,
shintamainjp 13:17cf1e2015f7 106 Baud115200 = 115200
shintamainjp 13:17cf1e2015f7 107 };
shintamainjp 13:17cf1e2015f7 108
shintamainjp 13:17cf1e2015f7 109 /**
shintamainjp 13:17cf1e2015f7 110 * Reset type.
shintamainjp 13:17cf1e2015f7 111 */
shintamainjp 13:17cf1e2015f7 112 enum ResetType {
shintamainjp 13:17cf1e2015f7 113 ResetWholeSystem = 0x00,
shintamainjp 13:17cf1e2015f7 114 ResetStateMachines = 0x01
shintamainjp 13:17cf1e2015f7 115 };
shintamainjp 13:17cf1e2015f7 116
shintamainjp 13:17cf1e2015f7 117 /**
shintamainjp 13:17cf1e2015f7 118 * Data type.
shintamainjp 13:17cf1e2015f7 119 */
shintamainjp 13:17cf1e2015f7 120 enum DataType {
shintamainjp 13:17cf1e2015f7 121 DataTypeSnapshotPicture = 0x01,
shintamainjp 13:17cf1e2015f7 122 DataTypePreviewPicture = 0x02,
shintamainjp 13:17cf1e2015f7 123 DataTypeJpegPreviewPicture = 0x05
shintamainjp 13:17cf1e2015f7 124 };
shintamainjp 13:17cf1e2015f7 125
shintamainjp 13:17cf1e2015f7 126 /**
shintamainjp 13:17cf1e2015f7 127 * Constructor.
shintamainjp 13:17cf1e2015f7 128 *
shintamainjp 13:17cf1e2015f7 129 * @param tx A pin for transmit.
shintamainjp 13:17cf1e2015f7 130 * @param rx A pin for receive.
shintamainjp 13:17cf1e2015f7 131 * @param baud Baud rate. (Default is Baud19200.)
shintamainjp 13:17cf1e2015f7 132 */
shintamainjp 13:17cf1e2015f7 133 CameraC328(PinName tx, PinName rx, Baud baud = Baud19200);
shintamainjp 13:17cf1e2015f7 134
shintamainjp 13:17cf1e2015f7 135 /**
shintamainjp 13:17cf1e2015f7 136 * Destructor.
shintamainjp 13:17cf1e2015f7 137 */
shintamainjp 13:17cf1e2015f7 138 ~CameraC328();
shintamainjp 13:17cf1e2015f7 139
shintamainjp 13:17cf1e2015f7 140 /**
shintamainjp 13:17cf1e2015f7 141 * Make a sync. for baud rate.
shintamainjp 13:17cf1e2015f7 142 */
shintamainjp 13:17cf1e2015f7 143 ErrorNumber sync();
shintamainjp 13:17cf1e2015f7 144
shintamainjp 13:17cf1e2015f7 145 /**
shintamainjp 13:17cf1e2015f7 146 * Initialize.
shintamainjp 13:17cf1e2015f7 147 *
shintamainjp 13:17cf1e2015f7 148 * @param ct Color type.
shintamainjp 13:17cf1e2015f7 149 * @param rr Raw resolution.
shintamainjp 13:17cf1e2015f7 150 * @param jr JPEG resolution.
shintamainjp 13:17cf1e2015f7 151 */
shintamainjp 13:17cf1e2015f7 152 ErrorNumber init(ColorType ct, RawResolution rr, JpegResolution jr);
shintamainjp 13:17cf1e2015f7 153
shintamainjp 13:17cf1e2015f7 154 /**
shintamainjp 13:17cf1e2015f7 155 * Get uncompressed snapshot picture.
shintamainjp 13:17cf1e2015f7 156 *
shintamainjp 13:17cf1e2015f7 157 * @param func A pointer to a callback function.
shintamainjp 13:17cf1e2015f7 158 * Please do NOT block this callback function.
shintamainjp 13:17cf1e2015f7 159 * Because the camera module transmit image datas continuously.
shintamainjp 13:17cf1e2015f7 160 * @return Status of the error.
shintamainjp 13:17cf1e2015f7 161 */
shintamainjp 13:17cf1e2015f7 162 ErrorNumber getUncompressedSnapshotPicture(void(*func)(size_t done, size_t total, char c));
shintamainjp 13:17cf1e2015f7 163
shintamainjp 13:17cf1e2015f7 164 /**
shintamainjp 13:17cf1e2015f7 165 * Get uncompressed preview picture.
shintamainjp 13:17cf1e2015f7 166 *
shintamainjp 13:17cf1e2015f7 167 * @param func A pointer to a callback function.
shintamainjp 13:17cf1e2015f7 168 * Please do NOT block this callback function.
shintamainjp 13:17cf1e2015f7 169 * Because the camera module transmit image datas continuously.
shintamainjp 13:17cf1e2015f7 170 * @return Status of the error.
shintamainjp 13:17cf1e2015f7 171 */
shintamainjp 13:17cf1e2015f7 172 ErrorNumber getUncompressedPreviewPicture(void(*func)(size_t done, size_t total, char c));
shintamainjp 13:17cf1e2015f7 173
shintamainjp 13:17cf1e2015f7 174 /**
shintamainjp 13:17cf1e2015f7 175 * Get JPEG snapshot picture.
shintamainjp 13:17cf1e2015f7 176 *
shintamainjp 13:17cf1e2015f7 177 * @param func A pointer to a callback function.
shintamainjp 13:17cf1e2015f7 178 * You can block this function until saving the image datas.
shintamainjp 13:17cf1e2015f7 179 * @return Status of the error.
shintamainjp 13:17cf1e2015f7 180 */
shintamainjp 13:17cf1e2015f7 181 ErrorNumber getJpegSnapshotPicture(void(*func)(char *buf, size_t siz));
shintamainjp 13:17cf1e2015f7 182
shintamainjp 13:17cf1e2015f7 183 /**
shintamainjp 13:17cf1e2015f7 184 * Get JPEG preview picture.
shintamainjp 13:17cf1e2015f7 185 *
shintamainjp 13:17cf1e2015f7 186 * @param func A pointer to a callback function.
shintamainjp 13:17cf1e2015f7 187 * You can block this function until saving the image datas.
shintamainjp 13:17cf1e2015f7 188 * @return Status of the error.
shintamainjp 13:17cf1e2015f7 189 */
shintamainjp 13:17cf1e2015f7 190 ErrorNumber getJpegPreviewPicture(void(*func)(char *buf, size_t siz));
shintamainjp 13:17cf1e2015f7 191
shintamainjp 13:17cf1e2015f7 192 private:
shintamainjp 13:17cf1e2015f7 193 SerialBuffered serial;
shintamainjp 13:17cf1e2015f7 194 static const int COMMAND_LENGTH = 6;
shintamainjp 13:17cf1e2015f7 195 static const int SYNCMAX = 60;
shintamainjp 13:17cf1e2015f7 196 static const int packageSize = 512;
shintamainjp 13:17cf1e2015f7 197
shintamainjp 13:17cf1e2015f7 198 ErrorNumber sendInitial(ColorType ct, RawResolution rr, JpegResolution jr);
shintamainjp 13:17cf1e2015f7 199 ErrorNumber sendGetPicture(PictureType pt);
shintamainjp 13:17cf1e2015f7 200 ErrorNumber sendSnapshot(SnapshotType st, uint16_t skipFrames);
shintamainjp 13:17cf1e2015f7 201 ErrorNumber sendSetPackageSize(uint16_t packageSize);
shintamainjp 13:17cf1e2015f7 202 ErrorNumber sendSetBaudrate(Baud baud);
shintamainjp 13:17cf1e2015f7 203 ErrorNumber sendReset(ResetType rt, bool specialReset);
shintamainjp 13:17cf1e2015f7 204 ErrorNumber sendPowerOff();
shintamainjp 13:17cf1e2015f7 205 ErrorNumber recvData(DataType *dt, uint32_t *length);
shintamainjp 13:17cf1e2015f7 206 ErrorNumber sendSync();
shintamainjp 13:17cf1e2015f7 207 ErrorNumber recvSync();
shintamainjp 13:17cf1e2015f7 208 ErrorNumber sendAck(uint8_t commandId, uint16_t packageId);
shintamainjp 13:17cf1e2015f7 209 ErrorNumber recvAckOrNck();
shintamainjp 13:17cf1e2015f7 210
shintamainjp 13:17cf1e2015f7 211 bool sendBytes(char *buf, size_t len, int timeout_us = 20000);
shintamainjp 13:17cf1e2015f7 212 bool recvBytes(char *buf, size_t len, int timeout_us = 20000);
shintamainjp 13:17cf1e2015f7 213 bool waitRecv();
shintamainjp 13:17cf1e2015f7 214 bool waitIdle();
shintamainjp 13:17cf1e2015f7 215 };
shintamainjp 13:17cf1e2015f7 216
shintamainjp 13:17cf1e2015f7 217 #endif