エレキジャック Web版 マイコン・カーを製作してみよう<21> マイコンカー制御プログラムです。http://www.eleki-jack.com/arm/2012/10/21.html このプログラムは次回の記事でアップされるパソコン用プログラムを使ってマイコンカーを制御するプログラムです。マイコンカーとパソコンの通信はXbeeを使っています。
CameraC1098/CameraC1098.h@7:1a0580ace499, 2012-10-11 (annotated)
- Committer:
- sunifu
- Date:
- Thu Oct 11 14:11:54 2012 +0000
- Revision:
- 7:1a0580ace499
ver1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sunifu | 7:1a0580ace499 | 1 | /** |
sunifu | 7:1a0580ace499 | 2 | * C1098-SS device driver class (Version 1.0) |
sunifu | 7:1a0580ace499 | 3 | * Reference documents: C1098-SS User Manual v1.0 2012.5.6 |
sunifu | 7:1a0580ace499 | 4 | * |
sunifu | 7:1a0580ace499 | 5 | * CameraC328Library |
sunifu | 7:1a0580ace499 | 6 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
sunifu | 7:1a0580ace499 | 7 | * http://shinta.main.jp/ |
sunifu | 7:1a0580ace499 | 8 | * |
sunifu | 7:1a0580ace499 | 9 | * CameraC1098-SS Library |
sunifu | 7:1a0580ace499 | 10 | * Copyright (C) 2012 Tadao Iida |
sunifu | 7:1a0580ace499 | 11 | */ |
sunifu | 7:1a0580ace499 | 12 | |
sunifu | 7:1a0580ace499 | 13 | #include "mbed.h" |
sunifu | 7:1a0580ace499 | 14 | #include "SerialBuffered.h" |
sunifu | 7:1a0580ace499 | 15 | |
sunifu | 7:1a0580ace499 | 16 | #ifndef _CAMERA_C1098_H_ |
sunifu | 7:1a0580ace499 | 17 | #define _CAMERA_C1098_H_ |
sunifu | 7:1a0580ace499 | 18 | |
sunifu | 7:1a0580ace499 | 19 | /* |
sunifu | 7:1a0580ace499 | 20 | * Class: CameraC1098 |
sunifu | 7:1a0580ace499 | 21 | */ |
sunifu | 7:1a0580ace499 | 22 | |
sunifu | 7:1a0580ace499 | 23 | class CameraC1098 { |
sunifu | 7:1a0580ace499 | 24 | public: |
sunifu | 7:1a0580ace499 | 25 | |
sunifu | 7:1a0580ace499 | 26 | /** |
sunifu | 7:1a0580ace499 | 27 | * @enum JPEG resolution. |
sunifu | 7:1a0580ace499 | 28 | */ |
sunifu | 7:1a0580ace499 | 29 | enum JpegResolution { |
sunifu | 7:1a0580ace499 | 30 | JpegResolution80x64 = 0x01, // unofficial |
sunifu | 7:1a0580ace499 | 31 | JpegResolution160x128 = 0x03, // unofficial |
sunifu | 7:1a0580ace499 | 32 | JpegResolution320x240 = 0x05, // QVGA |
sunifu | 7:1a0580ace499 | 33 | JpegResolution640x480 = 0x07 // VGA |
sunifu | 7:1a0580ace499 | 34 | }; |
sunifu | 7:1a0580ace499 | 35 | |
sunifu | 7:1a0580ace499 | 36 | /** |
sunifu | 7:1a0580ace499 | 37 | * @enum Error number. |
sunifu | 7:1a0580ace499 | 38 | */ |
sunifu | 7:1a0580ace499 | 39 | enum ErrorNumber { |
sunifu | 7:1a0580ace499 | 40 | NoError = 0x00, |
sunifu | 7:1a0580ace499 | 41 | UnexpectedReply = 0x04, |
sunifu | 7:1a0580ace499 | 42 | ParameterError = 0x0b, |
sunifu | 7:1a0580ace499 | 43 | SendRegisterTimeout = 0x0c, |
sunifu | 7:1a0580ace499 | 44 | CommandIdError = 0x0d, |
sunifu | 7:1a0580ace499 | 45 | CommandHeaderError = 0xf0, |
sunifu | 7:1a0580ace499 | 46 | SetTransferPackageSizeWrong = 0x11 |
sunifu | 7:1a0580ace499 | 47 | }; |
sunifu | 7:1a0580ace499 | 48 | |
sunifu | 7:1a0580ace499 | 49 | /** |
sunifu | 7:1a0580ace499 | 50 | * @enum Baud rate. |
sunifu | 7:1a0580ace499 | 51 | */ |
sunifu | 7:1a0580ace499 | 52 | enum Baud { |
sunifu | 7:1a0580ace499 | 53 | Baud460800 = 0x02, |
sunifu | 7:1a0580ace499 | 54 | Baud230400 = 0x03, |
sunifu | 7:1a0580ace499 | 55 | Baud115200 = 0x04, |
sunifu | 7:1a0580ace499 | 56 | Baud57600 = 0x05, |
sunifu | 7:1a0580ace499 | 57 | Baud28800 = 0x06, |
sunifu | 7:1a0580ace499 | 58 | Baud14400 = 0x07 // Default. |
sunifu | 7:1a0580ace499 | 59 | }; |
sunifu | 7:1a0580ace499 | 60 | |
sunifu | 7:1a0580ace499 | 61 | /** |
sunifu | 7:1a0580ace499 | 62 | * @enum Reset type. |
sunifu | 7:1a0580ace499 | 63 | */ |
sunifu | 7:1a0580ace499 | 64 | enum ResetType { |
sunifu | 7:1a0580ace499 | 65 | Nomal = 0x00, |
sunifu | 7:1a0580ace499 | 66 | High = 0xff |
sunifu | 7:1a0580ace499 | 67 | }; |
sunifu | 7:1a0580ace499 | 68 | |
sunifu | 7:1a0580ace499 | 69 | /** Constructor. |
sunifu | 7:1a0580ace499 | 70 | * |
sunifu | 7:1a0580ace499 | 71 | * @param tx A pin for transmit. |
sunifu | 7:1a0580ace499 | 72 | * @param rx A pin for receive. |
sunifu | 7:1a0580ace499 | 73 | * @param baud Baud rate. (Default is 14400.) |
sunifu | 7:1a0580ace499 | 74 | */ |
sunifu | 7:1a0580ace499 | 75 | CameraC1098(PinName tx, PinName rx, int baud = 14400); |
sunifu | 7:1a0580ace499 | 76 | |
sunifu | 7:1a0580ace499 | 77 | /** Destructor. |
sunifu | 7:1a0580ace499 | 78 | * |
sunifu | 7:1a0580ace499 | 79 | */ |
sunifu | 7:1a0580ace499 | 80 | ~CameraC1098(); |
sunifu | 7:1a0580ace499 | 81 | |
sunifu | 7:1a0580ace499 | 82 | /** sync |
sunifu | 7:1a0580ace499 | 83 | * Make a sync. for baud rate. |
sunifu | 7:1a0580ace499 | 84 | */ |
sunifu | 7:1a0580ace499 | 85 | ErrorNumber sync(); |
sunifu | 7:1a0580ace499 | 86 | |
sunifu | 7:1a0580ace499 | 87 | /** Initialize. |
sunifu | 7:1a0580ace499 | 88 | * |
sunifu | 7:1a0580ace499 | 89 | * |
sunifu | 7:1a0580ace499 | 90 | * @param baud Camera Interface Speed. |
sunifu | 7:1a0580ace499 | 91 | * @param jr JPEG resolution. |
sunifu | 7:1a0580ace499 | 92 | */ |
sunifu | 7:1a0580ace499 | 93 | ErrorNumber init(Baud baud, JpegResolution jr); |
sunifu | 7:1a0580ace499 | 94 | |
sunifu | 7:1a0580ace499 | 95 | /** getJpegSnapshotPicture |
sunifu | 7:1a0580ace499 | 96 | * Get JPEG snapshot picture. |
sunifu | 7:1a0580ace499 | 97 | * |
sunifu | 7:1a0580ace499 | 98 | * @param func A pointer to a callback function. |
sunifu | 7:1a0580ace499 | 99 | * You can block this function until saving the image datas. |
sunifu | 7:1a0580ace499 | 100 | * @return Status of the error. |
sunifu | 7:1a0580ace499 | 101 | */ |
sunifu | 7:1a0580ace499 | 102 | ErrorNumber getJpegSnapshotPicture(void(*func)(char *buf, size_t siz)); |
sunifu | 7:1a0580ace499 | 103 | |
sunifu | 7:1a0580ace499 | 104 | /** setmbedBaud |
sunifu | 7:1a0580ace499 | 105 | * mbed Interface Speed. |
sunifu | 7:1a0580ace499 | 106 | * |
sunifu | 7:1a0580ace499 | 107 | * @param baud mbed Interface Speed. |
sunifu | 7:1a0580ace499 | 108 | */ |
sunifu | 7:1a0580ace499 | 109 | void setmbedBaud(Baud baud); |
sunifu | 7:1a0580ace499 | 110 | |
sunifu | 7:1a0580ace499 | 111 | private: |
sunifu | 7:1a0580ace499 | 112 | SerialBuffered serial; |
sunifu | 7:1a0580ace499 | 113 | static const int COMMAND_LENGTH = 6; |
sunifu | 7:1a0580ace499 | 114 | static const int SYNCMAX = 60; |
sunifu | 7:1a0580ace499 | 115 | static const int packageSize = 256; |
sunifu | 7:1a0580ace499 | 116 | |
sunifu | 7:1a0580ace499 | 117 | ErrorNumber sendInitial(Baud band, JpegResolution jr); |
sunifu | 7:1a0580ace499 | 118 | ErrorNumber sendGetPicture(void); |
sunifu | 7:1a0580ace499 | 119 | ErrorNumber sendSnapshot(void); |
sunifu | 7:1a0580ace499 | 120 | ErrorNumber sendSetPackageSize(uint16_t packageSize); |
sunifu | 7:1a0580ace499 | 121 | ErrorNumber sendReset(ResetType specialReset); |
sunifu | 7:1a0580ace499 | 122 | ErrorNumber recvData(uint32_t *length); |
sunifu | 7:1a0580ace499 | 123 | ErrorNumber sendSync(); |
sunifu | 7:1a0580ace499 | 124 | ErrorNumber recvSync(); |
sunifu | 7:1a0580ace499 | 125 | ErrorNumber sendAck(uint8_t commandId, uint16_t packageId); |
sunifu | 7:1a0580ace499 | 126 | ErrorNumber recvAckOrNck(); |
sunifu | 7:1a0580ace499 | 127 | |
sunifu | 7:1a0580ace499 | 128 | bool sendBytes(char *buf, size_t len, int timeout_us = 20000); |
sunifu | 7:1a0580ace499 | 129 | bool recvBytes(char *buf, size_t len, int timeout_us = 20000); |
sunifu | 7:1a0580ace499 | 130 | bool waitRecv(); |
sunifu | 7:1a0580ace499 | 131 | bool waitIdle(); |
sunifu | 7:1a0580ace499 | 132 | }; |
sunifu | 7:1a0580ace499 | 133 | |
sunifu | 7:1a0580ace499 | 134 | #endif |