CameraC328
Dependents: CameraC328_TestProgram CameraC328_Thresholding Camera_TestProgram_2015 Camera_TestProgram_2015 ... more
CameraC328.h@8:dae8b5573eee, 2010-07-01 (annotated)
- Committer:
- shintamainjp
- Date:
- Thu Jul 01 10:36:38 2010 +0000
- Revision:
- 8:dae8b5573eee
- Parent:
- 7:d0d13822c37a
- Child:
- 9:217ce5bd94c5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 7:d0d13822c37a | 1 | /** |
shintamainjp | 7:d0d13822c37a | 2 | * C328-7640 device driver class (Version 0.0.2) |
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 | 7:d0d13822c37a | 26 | enum ColorType { |
shintamainjp | 7:d0d13822c37a | 27 | GrayScale2bit = 0x01, // 2bit for Y only |
shintamainjp | 7:d0d13822c37a | 28 | GrayScale4bit = 0x02, // 4bit for Y only |
shintamainjp | 7:d0d13822c37a | 29 | GrayScale8bit = 0x03, // 8bit for Y only |
shintamainjp | 7:d0d13822c37a | 30 | Color12bit = 0x05, // 444 (RGB) |
shintamainjp | 7:d0d13822c37a | 31 | Color16bit = 0x06, // 565 (RGB) |
shintamainjp | 7:d0d13822c37a | 32 | Jpeg = 0x07 |
shintamainjp | 7:d0d13822c37a | 33 | }; |
shintamainjp | 7:d0d13822c37a | 34 | |
shintamainjp | 7:d0d13822c37a | 35 | enum RawResolution { |
shintamainjp | 7:d0d13822c37a | 36 | RawResolution80x60 = 0x01, |
shintamainjp | 7:d0d13822c37a | 37 | RawResolution160x120 = 0x03 |
shintamainjp | 7:d0d13822c37a | 38 | }; |
shintamainjp | 7:d0d13822c37a | 39 | |
shintamainjp | 7:d0d13822c37a | 40 | enum JpegResolution { |
shintamainjp | 7:d0d13822c37a | 41 | JpegResolution80x64 = 0x01, |
shintamainjp | 7:d0d13822c37a | 42 | JpegResolution160x128 = 0x03, |
shintamainjp | 7:d0d13822c37a | 43 | JpegResolution320x240 = 0x05, |
shintamainjp | 7:d0d13822c37a | 44 | JpegResolution640x480 = 0x07 |
shintamainjp | 7:d0d13822c37a | 45 | }; |
shintamainjp | 7:d0d13822c37a | 46 | |
shintamainjp | 7:d0d13822c37a | 47 | enum ErrorNumber { |
shintamainjp | 7:d0d13822c37a | 48 | NoError = 0x00, |
shintamainjp | 7:d0d13822c37a | 49 | PictureTypeError = 0x01, |
shintamainjp | 7:d0d13822c37a | 50 | PictureUpScale = 0x02, |
shintamainjp | 7:d0d13822c37a | 51 | PictureScaleError = 0x03, |
shintamainjp | 7:d0d13822c37a | 52 | UnexpectedReply = 0x04, |
shintamainjp | 7:d0d13822c37a | 53 | SendPictureTimeout = 0x05, |
shintamainjp | 7:d0d13822c37a | 54 | UnexpectedCommand = 0x06, |
shintamainjp | 7:d0d13822c37a | 55 | SramJpegTypeError = 0x07, |
shintamainjp | 7:d0d13822c37a | 56 | SramJpegSizeError = 0x08, |
shintamainjp | 7:d0d13822c37a | 57 | PictureFormatError = 0x09, |
shintamainjp | 7:d0d13822c37a | 58 | PictureSizeError = 0x0a, |
shintamainjp | 7:d0d13822c37a | 59 | ParameterError = 0x0b, |
shintamainjp | 7:d0d13822c37a | 60 | SendRegisterTimeout = 0x0c, |
shintamainjp | 7:d0d13822c37a | 61 | CommandIdError = 0x0d, |
shintamainjp | 7:d0d13822c37a | 62 | PictureNotReady = 0x0f, |
shintamainjp | 7:d0d13822c37a | 63 | TransferPackageNumberError = 0x10, |
shintamainjp | 7:d0d13822c37a | 64 | SetTransferPackageSizeWrong = 0x11, |
shintamainjp | 7:d0d13822c37a | 65 | CommandHeaderError = 0xf0, |
shintamainjp | 7:d0d13822c37a | 66 | CommandLengthError = 0xf1, |
shintamainjp | 7:d0d13822c37a | 67 | SendPictureError = 0xf5, |
shintamainjp | 7:d0d13822c37a | 68 | SendCommandError = 0xff |
shintamainjp | 7:d0d13822c37a | 69 | }; |
shintamainjp | 7:d0d13822c37a | 70 | |
shintamainjp | 7:d0d13822c37a | 71 | enum PictureType { |
shintamainjp | 7:d0d13822c37a | 72 | SnapshotPicture = 0x01, |
shintamainjp | 7:d0d13822c37a | 73 | PreviewPicture = 0x02, |
shintamainjp | 7:d0d13822c37a | 74 | JpegPreviewPicture = 0x05 |
shintamainjp | 7:d0d13822c37a | 75 | }; |
shintamainjp | 7:d0d13822c37a | 76 | |
shintamainjp | 7:d0d13822c37a | 77 | enum SnapshotType { |
shintamainjp | 7:d0d13822c37a | 78 | CompressedPicture = 0x00, |
shintamainjp | 7:d0d13822c37a | 79 | UncompressedPicture = 0x01 |
shintamainjp | 7:d0d13822c37a | 80 | }; |
shintamainjp | 7:d0d13822c37a | 81 | |
shintamainjp | 7:d0d13822c37a | 82 | enum Baud { |
shintamainjp | 7:d0d13822c37a | 83 | Baud7200 = 7200, |
shintamainjp | 7:d0d13822c37a | 84 | Baud9600 = 9600, |
shintamainjp | 7:d0d13822c37a | 85 | Baud14400 = 14400, |
shintamainjp | 7:d0d13822c37a | 86 | Baud19200 = 19200, // Default. |
shintamainjp | 7:d0d13822c37a | 87 | Baud28800 = 28800, |
shintamainjp | 7:d0d13822c37a | 88 | Baud38400 = 38400, |
shintamainjp | 7:d0d13822c37a | 89 | Baud57600 = 57600, |
shintamainjp | 7:d0d13822c37a | 90 | Baud115200 = 115200 |
shintamainjp | 7:d0d13822c37a | 91 | }; |
shintamainjp | 7:d0d13822c37a | 92 | |
shintamainjp | 7:d0d13822c37a | 93 | enum ResetType { |
shintamainjp | 7:d0d13822c37a | 94 | ResetWholeSystem = 0x00, |
shintamainjp | 7:d0d13822c37a | 95 | ResetStateMachines = 0x01 |
shintamainjp | 7:d0d13822c37a | 96 | }; |
shintamainjp | 7:d0d13822c37a | 97 | |
shintamainjp | 7:d0d13822c37a | 98 | enum DataType { |
shintamainjp | 7:d0d13822c37a | 99 | DataTypeSnapshotPicture = 0x01, |
shintamainjp | 7:d0d13822c37a | 100 | DataTypePreviewPicture = 0x02, |
shintamainjp | 7:d0d13822c37a | 101 | DataTypeJpegPreviewPicture = 0x05 |
shintamainjp | 7:d0d13822c37a | 102 | }; |
shintamainjp | 7:d0d13822c37a | 103 | |
shintamainjp | 7:d0d13822c37a | 104 | /** |
shintamainjp | 7:d0d13822c37a | 105 | * @param tx TX of UART. |
shintamainjp | 7:d0d13822c37a | 106 | * @param rx RX of UART. |
shintamainjp | 7:d0d13822c37a | 107 | * @param baud Baudrate of UART. (Default is Baud19200) |
shintamainjp | 7:d0d13822c37a | 108 | */ |
shintamainjp | 7:d0d13822c37a | 109 | CameraC328(PinName tx, PinName rx, Baud baud = Baud19200); |
shintamainjp | 7:d0d13822c37a | 110 | |
shintamainjp | 7:d0d13822c37a | 111 | ~CameraC328(); |
shintamainjp | 7:d0d13822c37a | 112 | |
shintamainjp | 7:d0d13822c37a | 113 | ErrorNumber sync(); |
shintamainjp | 7:d0d13822c37a | 114 | ErrorNumber init(ColorType ct, RawResolution rr, JpegResolution jr); |
shintamainjp | 7:d0d13822c37a | 115 | ErrorNumber getUncompressedSnapshotPicture(void(*func)(size_t done, size_t total, char c)); |
shintamainjp | 7:d0d13822c37a | 116 | ErrorNumber getUncompressedPreviewPicture(void(*func)(size_t done, size_t total, char c)); |
shintamainjp | 7:d0d13822c37a | 117 | ErrorNumber getJpegSnapshotPicture(void(*func)(char *buf, size_t siz)); |
shintamainjp | 7:d0d13822c37a | 118 | ErrorNumber getJpegPreviewPicture(void(*func)(char *buf, size_t siz)); |
shintamainjp | 7:d0d13822c37a | 119 | |
shintamainjp | 7:d0d13822c37a | 120 | private: |
shintamainjp | 7:d0d13822c37a | 121 | Serial serial; |
shintamainjp | 7:d0d13822c37a | 122 | static const int COMMAND_LENGTH = 6; |
shintamainjp | 7:d0d13822c37a | 123 | static const int SYNCMAX = 60; |
shintamainjp | 7:d0d13822c37a | 124 | static const int packageSize = 512; |
shintamainjp | 7:d0d13822c37a | 125 | |
shintamainjp | 7:d0d13822c37a | 126 | ErrorNumber sendInitial(ColorType ct, RawResolution rr, JpegResolution jr); |
shintamainjp | 7:d0d13822c37a | 127 | ErrorNumber sendGetPicture(PictureType pt); |
shintamainjp | 7:d0d13822c37a | 128 | ErrorNumber sendSnapshot(SnapshotType st, uint16_t skipFrames); |
shintamainjp | 7:d0d13822c37a | 129 | ErrorNumber sendSetPackageSize(uint16_t packageSize); |
shintamainjp | 7:d0d13822c37a | 130 | ErrorNumber sendSetBaudrate(Baud baud); |
shintamainjp | 7:d0d13822c37a | 131 | ErrorNumber sendReset(ResetType rt, bool specialReset); |
shintamainjp | 7:d0d13822c37a | 132 | ErrorNumber sendPowerOff(); |
shintamainjp | 7:d0d13822c37a | 133 | ErrorNumber recvData(DataType *dt, uint32_t *length); |
shintamainjp | 7:d0d13822c37a | 134 | ErrorNumber sendSync(); |
shintamainjp | 7:d0d13822c37a | 135 | ErrorNumber recvSync(); |
shintamainjp | 7:d0d13822c37a | 136 | ErrorNumber sendAck(uint8_t commandId, uint16_t packageId); |
shintamainjp | 7:d0d13822c37a | 137 | ErrorNumber recvAckOrNck(); |
shintamainjp | 7:d0d13822c37a | 138 | |
shintamainjp | 7:d0d13822c37a | 139 | bool sendBytes(char *buf, size_t len, int timeout_us = 20000); |
shintamainjp | 7:d0d13822c37a | 140 | bool recvBytes(char *buf, size_t len, int timeout_us = 20000); |
shintamainjp | 7:d0d13822c37a | 141 | bool waitRecv(); |
shintamainjp | 7:d0d13822c37a | 142 | }; |
shintamainjp | 7:d0d13822c37a | 143 | |
shintamainjp | 7:d0d13822c37a | 144 | #endif |