エレキジャック Web版 マイコン・カーを製作してみよう<21> マイコンカー制御プログラムです。http://www.eleki-jack.com/arm/2012/10/21.html  このプログラムは次回の記事でアップされるパソコン用プログラムを使ってマイコンカーを制御するプログラムです。マイコンカーとパソコンの通信はXbeeを使っています。

Dependencies:   TextLCD mbed

Committer:
sunifu
Date:
Thu Oct 11 14:11:54 2012 +0000
Revision:
7:1a0580ace499
ver1.0

Who changed what in which revision?

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