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