IM920のライブラリ

Committer:
Gaku0606
Date:
Thu Feb 22 08:52:51 2018 +0000
Revision:
1:11ae0d702ecc
Parent:
0:ccdeb3bea793
???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gaku0606 0:ccdeb3bea793 1 #ifndef _IM920_H_
Gaku0606 0:ccdeb3bea793 2 #define _IM920_H_
Gaku0606 0:ccdeb3bea793 3 #include "mbed.h"
Gaku0606 0:ccdeb3bea793 4
Gaku0606 1:11ae0d702ecc 5 #define IM920_BUFF_SIZE 216
Gaku0606 0:ccdeb3bea793 6
Gaku0606 0:ccdeb3bea793 7 const int FUNC_NUMBER = 256;
Gaku0606 0:ccdeb3bea793 8
Gaku0606 0:ccdeb3bea793 9
Gaku0606 0:ccdeb3bea793 10 typedef enum im920_buff_classify{
Gaku0606 0:ccdeb3bea793 11 BUFF_A = 0,
Gaku0606 0:ccdeb3bea793 12 BUFF_B = 1
Gaku0606 0:ccdeb3bea793 13 }IM920_Buff_Classify;
Gaku0606 0:ccdeb3bea793 14
Gaku0606 0:ccdeb3bea793 15 //解析方法に関する変数
Gaku0606 0:ccdeb3bea793 16 const int WAIT_TIME_US = 1000;
Gaku0606 0:ccdeb3bea793 17 typedef enum{
Gaku0606 0:ccdeb3bea793 18 DATA_STRING = 0, //データの文字列
Gaku0606 0:ccdeb3bea793 19 RESPONSE_STRING = 1, //OKかNGのレスポンスの文字列
Gaku0606 0:ccdeb3bea793 20 NORMAL_STRING = 2,
Gaku0606 0:ccdeb3bea793 21 OTHER_STRING = 3,
Gaku0606 0:ccdeb3bea793 22 RECEIVE_ID = 4,
Gaku0606 0:ccdeb3bea793 23 INTERACTIVE_STRING = 5
Gaku0606 0:ccdeb3bea793 24 }IM920_Analyze_Selector;
Gaku0606 0:ccdeb3bea793 25
Gaku0606 0:ccdeb3bea793 26
Gaku0606 0:ccdeb3bea793 27
Gaku0606 0:ccdeb3bea793 28 static IM920_Buff_Classify AB = BUFF_A;
Gaku0606 0:ccdeb3bea793 29
Gaku0606 0:ccdeb3bea793 30 class IM920{
Gaku0606 0:ccdeb3bea793 31 public:
Gaku0606 0:ccdeb3bea793 32 IM920(Serial &serial, Serial &pc, int baudrate = 19200);
Gaku0606 0:ccdeb3bea793 33 private:
Gaku0606 0:ccdeb3bea793 34 Serial *ser;
Gaku0606 0:ccdeb3bea793 35 Serial *_pc;
Gaku0606 0:ccdeb3bea793 36
Gaku0606 0:ccdeb3bea793 37 //バッファ関連の変数
Gaku0606 0:ccdeb3bea793 38 char buff_A[IM920_BUFF_SIZE];
Gaku0606 0:ccdeb3bea793 39 char buff_B[IM920_BUFF_SIZE];
Gaku0606 0:ccdeb3bea793 40 char* readBuffAddr;
Gaku0606 0:ccdeb3bea793 41 char* writeBuffAddr;
Gaku0606 0:ccdeb3bea793 42
Gaku0606 0:ccdeb3bea793 43
Gaku0606 0:ccdeb3bea793 44 char im920_dataLength;
Gaku0606 0:ccdeb3bea793 45 char im920_sendBuff[129];
Gaku0606 0:ccdeb3bea793 46
Gaku0606 0:ccdeb3bea793 47 int nodeNumber;
Gaku0606 0:ccdeb3bea793 48 //インタラクティブモードから復帰できるかを示すフラグ
Gaku0606 0:ccdeb3bea793 49 //1ならインタラクティブモード、0なら通常モード
Gaku0606 0:ccdeb3bea793 50 int interactiveFlag;
Gaku0606 0:ccdeb3bea793 51
Gaku0606 0:ccdeb3bea793 52 IM920_Analyze_Selector AS;
Gaku0606 0:ccdeb3bea793 53
Gaku0606 0:ccdeb3bea793 54 public:
Gaku0606 0:ccdeb3bea793 55
Gaku0606 0:ccdeb3bea793 56 union IM920_CAST{
Gaku0606 0:ccdeb3bea793 57 double d;
Gaku0606 0:ccdeb3bea793 58 float f;
Gaku0606 0:ccdeb3bea793 59 long l;
Gaku0606 0:ccdeb3bea793 60 int i;
Gaku0606 0:ccdeb3bea793 61 short s;
Gaku0606 0:ccdeb3bea793 62 char c;
Gaku0606 0:ccdeb3bea793 63 char u[8];
Gaku0606 0:ccdeb3bea793 64 };
Gaku0606 0:ccdeb3bea793 65 union IM920_CAST im920_cast;
Gaku0606 0:ccdeb3bea793 66
Gaku0606 0:ccdeb3bea793 67 char data[64];
Gaku0606 0:ccdeb3bea793 68 int sendDataSize;
Gaku0606 0:ccdeb3bea793 69 void (*p_callFunc[256])(void);
Gaku0606 0:ccdeb3bea793 70 char node;
Gaku0606 0:ccdeb3bea793 71 char RSSI;//受信強度
Gaku0606 0:ccdeb3bea793 72 int rID;//受信した送信機ID
Gaku0606 0:ccdeb3bea793 73 int ID; //自分の固有ID
Gaku0606 0:ccdeb3bea793 74
Gaku0606 0:ccdeb3bea793 75 /**
Gaku0606 0:ccdeb3bea793 76 @note 無線機の設定を変更するわけではない
Gaku0606 0:ccdeb3bea793 77 @bref IM920XSとの通信ボーレート変更
Gaku0606 0:ccdeb3bea793 78 @param baudrate 1200,2400,4800,9600,19200,38400,57600 or 115200
Gaku0606 0:ccdeb3bea793 79 */
Gaku0606 0:ccdeb3bea793 80 void baud(int baudrate){
Gaku0606 0:ccdeb3bea793 81 ser->baud(baudrate);
Gaku0606 0:ccdeb3bea793 82 }
Gaku0606 0:ccdeb3bea793 83
Gaku0606 0:ccdeb3bea793 84 /**
Gaku0606 0:ccdeb3bea793 85 @bref インタラクティブモードへ移行する,@で復帰
Gaku0606 0:ccdeb3bea793 86 */
Gaku0606 0:ccdeb3bea793 87 void interactiveMode();
Gaku0606 0:ccdeb3bea793 88
Gaku0606 0:ccdeb3bea793 89 /**
Gaku0606 0:ccdeb3bea793 90 @bref 16進数文字列データから数値データを取得します
Gaku0606 0:ccdeb3bea793 91 */
Gaku0606 0:ccdeb3bea793 92 void data_analyze();
Gaku0606 0:ccdeb3bea793 93
Gaku0606 0:ccdeb3bea793 94 /**
Gaku0606 0:ccdeb3bea793 95 @bref データ処理関数を設定
Gaku0606 0:ccdeb3bea793 96 @param *funcAddr 関数ポインタ、void型引数無し関数のみ設定可
Gaku0606 0:ccdeb3bea793 97 @param header 関数を選択する0~255のヘッダー
Gaku0606 0:ccdeb3bea793 98 */
Gaku0606 0:ccdeb3bea793 99 void attach(void (*funcAddr)(void), unsigned header);
Gaku0606 0:ccdeb3bea793 100
Gaku0606 0:ccdeb3bea793 101 /**
Gaku0606 0:ccdeb3bea793 102 @bref パラメータ不揮発メモリ書き込み許可モードへ移行
Gaku0606 0:ccdeb3bea793 103 */
Gaku0606 0:ccdeb3bea793 104 bool enableWrite();
Gaku0606 0:ccdeb3bea793 105
Gaku0606 0:ccdeb3bea793 106 /**
Gaku0606 0:ccdeb3bea793 107 @bref パラメータ不揮発メモリ書き込み不許可モードへ移行
Gaku0606 0:ccdeb3bea793 108 */
Gaku0606 0:ccdeb3bea793 109 bool disableWrite();
Gaku0606 0:ccdeb3bea793 110
Gaku0606 0:ccdeb3bea793 111 /**
Gaku0606 0:ccdeb3bea793 112 @bref 固有IDを読み出す
Gaku0606 0:ccdeb3bea793 113 */
Gaku0606 0:ccdeb3bea793 114 int readID();
Gaku0606 0:ccdeb3bea793 115
Gaku0606 0:ccdeb3bea793 116 /**
Gaku0606 0:ccdeb3bea793 117 @bref ノード番号をセットする
Gaku0606 0:ccdeb3bea793 118 */
Gaku0606 0:ccdeb3bea793 119 bool setNodeNumber(char nodeNum);
Gaku0606 0:ccdeb3bea793 120
Gaku0606 0:ccdeb3bea793 121 /**
Gaku0606 0:ccdeb3bea793 122 @bref ノード番号を読み出す
Gaku0606 0:ccdeb3bea793 123 */
Gaku0606 0:ccdeb3bea793 124 int readNodeNumber();
Gaku0606 0:ccdeb3bea793 125
Gaku0606 0:ccdeb3bea793 126 /**
Gaku0606 0:ccdeb3bea793 127 @bref 受信する無線機IDを一つ登録する
Gaku0606 0:ccdeb3bea793 128 */
Gaku0606 0:ccdeb3bea793 129 bool setReceiveID(int ID);
Gaku0606 0:ccdeb3bea793 130
Gaku0606 0:ccdeb3bea793 131 /**
Gaku0606 0:ccdeb3bea793 132 @bref 登録されている受信IDを表示する
Gaku0606 0:ccdeb3bea793 133 */
Gaku0606 0:ccdeb3bea793 134 void readReceiveID();
Gaku0606 0:ccdeb3bea793 135
Gaku0606 0:ccdeb3bea793 136 /**
Gaku0606 0:ccdeb3bea793 137 @bref 登録されている受信IDを全消去する
Gaku0606 0:ccdeb3bea793 138 */
Gaku0606 0:ccdeb3bea793 139 bool eraseReceiveID();
Gaku0606 0:ccdeb3bea793 140
Gaku0606 0:ccdeb3bea793 141 /**
Gaku0606 0:ccdeb3bea793 142 @bref 使用する周波数chを設定する
Gaku0606 0:ccdeb3bea793 143 */
Gaku0606 0:ccdeb3bea793 144 bool setChannel(char ch);
Gaku0606 0:ccdeb3bea793 145
Gaku0606 0:ccdeb3bea793 146 /**
Gaku0606 0:ccdeb3bea793 147 @bref 使用する周波数chを読み出す
Gaku0606 0:ccdeb3bea793 148 */
Gaku0606 0:ccdeb3bea793 149 char readChannel();
Gaku0606 0:ccdeb3bea793 150
Gaku0606 0:ccdeb3bea793 151 /**
Gaku0606 0:ccdeb3bea793 152 @bref アスキーコードの文字列で送受信ができるようにする
Gaku0606 0:ccdeb3bea793 153 */
Gaku0606 0:ccdeb3bea793 154 bool enableCharacterIO();
Gaku0606 0:ccdeb3bea793 155
Gaku0606 0:ccdeb3bea793 156 /**
Gaku0606 0:ccdeb3bea793 157 @bref バイナリ送受信モードへ移行
Gaku0606 0:ccdeb3bea793 158 */
Gaku0606 0:ccdeb3bea793 159 bool disableCharacterIO();
Gaku0606 0:ccdeb3bea793 160
Gaku0606 0:ccdeb3bea793 161 /**
Gaku0606 0:ccdeb3bea793 162 @bref 送信バッファにdouble型を一つ入れる
Gaku0606 0:ccdeb3bea793 163 */
Gaku0606 0:ccdeb3bea793 164 void write(double val);
Gaku0606 0:ccdeb3bea793 165
Gaku0606 0:ccdeb3bea793 166 /**
Gaku0606 0:ccdeb3bea793 167 @bref 送信バッファにlong型を一つ入れる
Gaku0606 0:ccdeb3bea793 168 */
Gaku0606 0:ccdeb3bea793 169 void write(long val);
Gaku0606 0:ccdeb3bea793 170
Gaku0606 0:ccdeb3bea793 171 /**
Gaku0606 0:ccdeb3bea793 172 @bref 送信バッファにfloat型を一つ入れる
Gaku0606 0:ccdeb3bea793 173 */
Gaku0606 0:ccdeb3bea793 174 void write(float val);
Gaku0606 0:ccdeb3bea793 175 /**
Gaku0606 0:ccdeb3bea793 176 @bref 送信バッファにint型を一つ入れる
Gaku0606 0:ccdeb3bea793 177 */
Gaku0606 0:ccdeb3bea793 178 void write(int val);
Gaku0606 0:ccdeb3bea793 179
Gaku0606 0:ccdeb3bea793 180 /**
Gaku0606 0:ccdeb3bea793 181 @bref 送信バッファにshort型を一つ入れる
Gaku0606 0:ccdeb3bea793 182 */
Gaku0606 0:ccdeb3bea793 183 void write(short val);
Gaku0606 0:ccdeb3bea793 184
Gaku0606 0:ccdeb3bea793 185 /**
Gaku0606 0:ccdeb3bea793 186 @bref 送信バッファにchar型を一つ入れる
Gaku0606 0:ccdeb3bea793 187 */
Gaku0606 0:ccdeb3bea793 188 void write(char val);
Gaku0606 0:ccdeb3bea793 189
Gaku0606 0:ccdeb3bea793 190 /**
Gaku0606 0:ccdeb3bea793 191 @bref 送信バッファにfloat型を複数入れる
Gaku0606 0:ccdeb3bea793 192 */
Gaku0606 0:ccdeb3bea793 193 // void write(float *array, int count);
Gaku0606 0:ccdeb3bea793 194
Gaku0606 0:ccdeb3bea793 195 template <typename T> void write(T *array, int count){
Gaku0606 0:ccdeb3bea793 196 for(int i = 0;i < count; i++){
Gaku0606 0:ccdeb3bea793 197 write(array[i]);
Gaku0606 0:ccdeb3bea793 198 }
Gaku0606 0:ccdeb3bea793 199 }
Gaku0606 0:ccdeb3bea793 200 /**
Gaku0606 0:ccdeb3bea793 201 @bref 送信バッファを送信する
Gaku0606 0:ccdeb3bea793 202 */
Gaku0606 0:ccdeb3bea793 203 void send();
Gaku0606 0:ccdeb3bea793 204
Gaku0606 0:ccdeb3bea793 205 /**
Gaku0606 0:ccdeb3bea793 206 @bref 送信バッファにヘッダーを付ける、writeする前に使う
Gaku0606 0:ccdeb3bea793 207 */
Gaku0606 0:ccdeb3bea793 208 void header(char headerNumber){
Gaku0606 0:ccdeb3bea793 209 write(headerNumber);
Gaku0606 0:ccdeb3bea793 210 }
Gaku0606 0:ccdeb3bea793 211
Gaku0606 0:ccdeb3bea793 212 /**
Gaku0606 0:ccdeb3bea793 213 @bref デバッグ用、受信バッファを表示
Gaku0606 0:ccdeb3bea793 214 */
Gaku0606 0:ccdeb3bea793 215 void im920_debug();
Gaku0606 0:ccdeb3bea793 216
Gaku0606 0:ccdeb3bea793 217 /**
Gaku0606 0:ccdeb3bea793 218 @bref インタラクティブモードでコマンドを表示する
Gaku0606 0:ccdeb3bea793 219 */
Gaku0606 0:ccdeb3bea793 220 void printFormat();
Gaku0606 0:ccdeb3bea793 221
Gaku0606 0:ccdeb3bea793 222 /**
Gaku0606 0:ccdeb3bea793 223 @bref データ配列をshort型に変換する
Gaku0606 0:ccdeb3bea793 224 @param array データのchar型配列、データの始まるアドレスを入れる
Gaku0606 0:ccdeb3bea793 225 */
Gaku0606 0:ccdeb3bea793 226 short toShort(char *array);
Gaku0606 0:ccdeb3bea793 227 short toShort(int i){
Gaku0606 0:ccdeb3bea793 228 return toShort(&data[i]);
Gaku0606 0:ccdeb3bea793 229 }
Gaku0606 0:ccdeb3bea793 230
Gaku0606 0:ccdeb3bea793 231 /**
Gaku0606 0:ccdeb3bea793 232 @bref データ配列をint型に変換する
Gaku0606 0:ccdeb3bea793 233 @param array データのchar型配列、データの始まるアドレスを入れる
Gaku0606 0:ccdeb3bea793 234 */
Gaku0606 0:ccdeb3bea793 235 int toInt(char *array);
Gaku0606 0:ccdeb3bea793 236 int toInt(int i){
Gaku0606 0:ccdeb3bea793 237 return toInt(&data[i]);
Gaku0606 0:ccdeb3bea793 238 }
Gaku0606 0:ccdeb3bea793 239 /**
Gaku0606 0:ccdeb3bea793 240 @bref データ配列をfloat型に変換する
Gaku0606 0:ccdeb3bea793 241 @param array データのchar型配列、データの始まるアドレスを入れる
Gaku0606 0:ccdeb3bea793 242 */
Gaku0606 0:ccdeb3bea793 243 float toFloat(char *array);
Gaku0606 0:ccdeb3bea793 244 float toFloat(int i){
Gaku0606 0:ccdeb3bea793 245 return toFloat(&data[i]);
Gaku0606 0:ccdeb3bea793 246 }
Gaku0606 0:ccdeb3bea793 247 /**
Gaku0606 0:ccdeb3bea793 248 @bref データ配列をlong型に変換する
Gaku0606 0:ccdeb3bea793 249 @param array データのchar型配列、データの始まるアドレスを入れる
Gaku0606 0:ccdeb3bea793 250 */
Gaku0606 0:ccdeb3bea793 251 long toLong(char *array);
Gaku0606 0:ccdeb3bea793 252 long toLong(int i){
Gaku0606 0:ccdeb3bea793 253 return toLong(&data[i]);
Gaku0606 0:ccdeb3bea793 254 }
Gaku0606 0:ccdeb3bea793 255
Gaku0606 0:ccdeb3bea793 256 /**
Gaku0606 0:ccdeb3bea793 257 @bref データ配列をdouble型に変換する
Gaku0606 0:ccdeb3bea793 258 @param array データのchar型配列、データの始まるアドレスを入れる
Gaku0606 0:ccdeb3bea793 259 */
Gaku0606 0:ccdeb3bea793 260 double toDouble(char *array);
Gaku0606 0:ccdeb3bea793 261 double toDouble(int i){
Gaku0606 0:ccdeb3bea793 262 return toDouble(&data[i]);
Gaku0606 0:ccdeb3bea793 263 }
Gaku0606 0:ccdeb3bea793 264 /**
Gaku0606 0:ccdeb3bea793 265 @bref チェックサムを計算する
Gaku0606 0:ccdeb3bea793 266 @param count データの個数、何byteか
Gaku0606 0:ccdeb3bea793 267 */
Gaku0606 0:ccdeb3bea793 268 char im920CheckSum(int count);
Gaku0606 0:ccdeb3bea793 269
Gaku0606 0:ccdeb3bea793 270 /**
Gaku0606 0:ccdeb3bea793 271 @bref 受信データのチェックサムの計算結果を入れる
Gaku0606 0:ccdeb3bea793 272 */
Gaku0606 0:ccdeb3bea793 273 char receiveCheckSum;
Gaku0606 0:ccdeb3bea793 274
Gaku0606 0:ccdeb3bea793 275 private:
Gaku0606 0:ccdeb3bea793 276
Gaku0606 0:ccdeb3bea793 277 /**
Gaku0606 0:ccdeb3bea793 278 @bref 1文字受信するごとに呼ばれ、受信バッファに入れる
Gaku0606 0:ccdeb3bea793 279 */
Gaku0606 0:ccdeb3bea793 280 void im920Handler();
Gaku0606 0:ccdeb3bea793 281
Gaku0606 0:ccdeb3bea793 282 char checkSum;
Gaku0606 0:ccdeb3bea793 283
Gaku0606 0:ccdeb3bea793 284 /**
Gaku0606 0:ccdeb3bea793 285 @bref 何もしない関数
Gaku0606 0:ccdeb3bea793 286 */
Gaku0606 0:ccdeb3bea793 287 static void dummyFunc(void);
Gaku0606 0:ccdeb3bea793 288
Gaku0606 0:ccdeb3bea793 289 /**
Gaku0606 0:ccdeb3bea793 290 @bref 16進数文字を数値に変換する関数
Gaku0606 0:ccdeb3bea793 291 */
Gaku0606 0:ccdeb3bea793 292 int asciiToNumber(char c);
Gaku0606 0:ccdeb3bea793 293 };
Gaku0606 0:ccdeb3bea793 294
Gaku0606 0:ccdeb3bea793 295 inline void IM920::write(double val){
Gaku0606 0:ccdeb3bea793 296 if(sendDataSize <= 56){
Gaku0606 0:ccdeb3bea793 297 im920_cast.d = val;
Gaku0606 0:ccdeb3bea793 298 sprintf(im920_sendBuff, "%s%02X%02X%02X%02X%02X%02X%02X%02X", im920_sendBuff, im920_cast.u[0], im920_cast.u[1], im920_cast.u[2]
Gaku0606 0:ccdeb3bea793 299 , im920_cast.u[3], im920_cast.u[4], im920_cast.u[5], im920_cast.u[6], im920_cast.u[7]);
Gaku0606 0:ccdeb3bea793 300 sendDataSize += 8;
Gaku0606 0:ccdeb3bea793 301 checkSum = checkSum ^ im920_cast.u[7] ^ im920_cast.u[6] ^ im920_cast.u[5] ^ im920_cast.u[4] ^ im920_cast.u[3] ^ im920_cast.u[2] ^ im920_cast.u[1] ^ im920_cast.u[0];
Gaku0606 0:ccdeb3bea793 302 }
Gaku0606 0:ccdeb3bea793 303 }
Gaku0606 0:ccdeb3bea793 304
Gaku0606 0:ccdeb3bea793 305 inline void IM920::write(long val){
Gaku0606 0:ccdeb3bea793 306 if(sendDataSize <= 56){
Gaku0606 0:ccdeb3bea793 307 im920_cast.l = val;
Gaku0606 0:ccdeb3bea793 308 sprintf(im920_sendBuff, "%s%02X%02X%02X%02X%02X%02X%02X%02X", im920_sendBuff, im920_cast.u[0], im920_cast.u[1], im920_cast.u[2]
Gaku0606 0:ccdeb3bea793 309 , im920_cast.u[3], im920_cast.u[4], im920_cast.u[5], im920_cast.u[6], im920_cast.u[7]);
Gaku0606 0:ccdeb3bea793 310 sendDataSize += 8;
Gaku0606 0:ccdeb3bea793 311 checkSum = checkSum ^ im920_cast.u[7] ^ im920_cast.u[6] ^ im920_cast.u[5] ^ im920_cast.u[4] ^ im920_cast.u[3] ^ im920_cast.u[2] ^ im920_cast.u[1] ^ im920_cast.u[0];
Gaku0606 0:ccdeb3bea793 312 }
Gaku0606 0:ccdeb3bea793 313 }
Gaku0606 0:ccdeb3bea793 314
Gaku0606 0:ccdeb3bea793 315 inline void IM920::write(float val){
Gaku0606 0:ccdeb3bea793 316 if(sendDataSize <= 60){
Gaku0606 0:ccdeb3bea793 317 im920_cast.f = val;
Gaku0606 0:ccdeb3bea793 318 sprintf(im920_sendBuff, "%s%02X%02X%02X%02X", im920_sendBuff, im920_cast.u[0],im920_cast.u[1],im920_cast.u[2],im920_cast.u[3]);
Gaku0606 0:ccdeb3bea793 319 sendDataSize += 4;
Gaku0606 0:ccdeb3bea793 320 checkSum = checkSum ^ im920_cast.u[3] ^ im920_cast.u[2] ^ im920_cast.u[1] ^ im920_cast.u[0];
Gaku0606 0:ccdeb3bea793 321 }
Gaku0606 0:ccdeb3bea793 322 }
Gaku0606 0:ccdeb3bea793 323 inline void IM920::write(int val){
Gaku0606 0:ccdeb3bea793 324 if(sendDataSize <= 60){
Gaku0606 0:ccdeb3bea793 325 im920_cast.i = val;
Gaku0606 0:ccdeb3bea793 326 sprintf(im920_sendBuff, "%s%08X", im920_sendBuff, (uint32_t)val);
Gaku0606 0:ccdeb3bea793 327 sendDataSize += 4;
Gaku0606 0:ccdeb3bea793 328 checkSum = checkSum ^ im920_cast.u[3] ^ im920_cast.u[2] ^ im920_cast.u[1] ^ im920_cast.u[0];
Gaku0606 0:ccdeb3bea793 329 }
Gaku0606 0:ccdeb3bea793 330 }
Gaku0606 0:ccdeb3bea793 331 inline void IM920::write(short val){
Gaku0606 0:ccdeb3bea793 332 if(sendDataSize <= 62){
Gaku0606 0:ccdeb3bea793 333 im920_cast.s = val;
Gaku0606 0:ccdeb3bea793 334 sprintf(im920_sendBuff, "%s%04X", im920_sendBuff, (uint16_t)val);
Gaku0606 0:ccdeb3bea793 335 sendDataSize += 2;
Gaku0606 0:ccdeb3bea793 336 checkSum = checkSum ^ im920_cast.u[1] ^ im920_cast.u[0];
Gaku0606 0:ccdeb3bea793 337 }
Gaku0606 0:ccdeb3bea793 338 }
Gaku0606 0:ccdeb3bea793 339 inline void IM920::write(char val){
Gaku0606 0:ccdeb3bea793 340 if(sendDataSize < 64){
Gaku0606 0:ccdeb3bea793 341 im920_cast.c = val;
Gaku0606 0:ccdeb3bea793 342 sprintf(im920_sendBuff, "%s%02X", im920_sendBuff, (uint8_t)val);
Gaku0606 0:ccdeb3bea793 343 sendDataSize += 1;
Gaku0606 0:ccdeb3bea793 344 checkSum = im920_cast.u[0] ^ '0';
Gaku0606 0:ccdeb3bea793 345 }
Gaku0606 0:ccdeb3bea793 346 }
Gaku0606 0:ccdeb3bea793 347 /*
Gaku0606 0:ccdeb3bea793 348 inline void IM920::write(float *array, int count){
Gaku0606 0:ccdeb3bea793 349 if(sendDataSize < (64 - (4*count))){
Gaku0606 0:ccdeb3bea793 350 for(int i = 0; i < count; i++){
Gaku0606 0:ccdeb3bea793 351 write((float)array[i]);
Gaku0606 0:ccdeb3bea793 352 }
Gaku0606 0:ccdeb3bea793 353 }
Gaku0606 0:ccdeb3bea793 354 }*/
Gaku0606 0:ccdeb3bea793 355
Gaku0606 0:ccdeb3bea793 356 inline void IM920::send(){
Gaku0606 0:ccdeb3bea793 357 if(sendDataSize > 0){
Gaku0606 0:ccdeb3bea793 358 AS = RESPONSE_STRING;
Gaku0606 0:ccdeb3bea793 359 //write(checkSum);
Gaku0606 0:ccdeb3bea793 360 //sprintf(im920_sendBuff, "%s%02X", im920_sendBuff, checkSum);
Gaku0606 0:ccdeb3bea793 361 im920_sendBuff[128] = '\0';//もしバッファがあふれて文字列になっていなかったら
Gaku0606 0:ccdeb3bea793 362 ser->printf("TXDA %s\r\n", im920_sendBuff);
Gaku0606 0:ccdeb3bea793 363 printf("send -> TXDA %s\r\n", im920_sendBuff);
Gaku0606 0:ccdeb3bea793 364 sendDataSize = 0;//初期化
Gaku0606 0:ccdeb3bea793 365 memset(im920_sendBuff, '\0', 129);
Gaku0606 0:ccdeb3bea793 366 AS = DATA_STRING;
Gaku0606 0:ccdeb3bea793 367 }
Gaku0606 0:ccdeb3bea793 368 }
Gaku0606 0:ccdeb3bea793 369
Gaku0606 0:ccdeb3bea793 370 #endif