Interplan IM920 library, 920MHz module
Dependents: IM920_sample IM920_SDlog IM920_sample IM920_sample3 ... more
IM920 ライブラリ
データモード、低速、長距離 の設定で通信するライブラリです。
920MHz無線モジュール
- mbedとモジュールとは、シリアル(TX,RX)、BUSY、RESET端子を接続します。
- モジュールはあらかじめ、コマンドでノード番号などを設定しておきます。
Diff: IM920.cpp
- Revision:
- 0:d3ab05ed8142
- Child:
- 1:81b2fd407327
diff -r 000000000000 -r d3ab05ed8142 IM920.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IM920.cpp Fri Dec 26 15:35:20 2014 +0000 @@ -0,0 +1,54 @@ +#include "IM920.h" + +IM920::IM920 (PinName tx, PinName rx, PinName busy, PinName reset, int baud) : _im(tx, rx) { + + memset(&_state, 0, sizeof(_state)); + _state.data = new CircBuffer<char>(CFG_DATA_SIZE); + + initUart(busy, reset, baud); + setReset(true); + wait_ms(100); + setReset(false); +} + +int IM920::init (int node, void(*func)()) { + + _state.node = node; + _state.func = func; + + cmdRDID(); + cmdSTNN(_state.node); + cmdSTPO(3); // 10dBm + cmdSTRT(2); // 1.25kbps + return 0; +} + +void IM920::poll () { + + if (_state.received && _state.buf != NULL) + if (_state.func != NULL && !_state.data->isEmpty()) { + _state.func(); + if (_state.data->isEmpty()) { + _state.received = false; + } + } +} + +int IM920::send (char *buf, int len) { + + if (len > 64) len = 64; + + return sendData(buf, len); +} + +int IM920::recv (char *buf, int len) { + int i; + + if (_state.data == NULL) return 0; + while (!_state.received && _state.mode != MODE_COMMAND); + _state.received = false; + for (i = 0; i < len; i ++) { + if (_state.data->dequeue(&buf[i]) == false) break; + } + return i; +}