Interplan IM920 library, 920MHz module
Dependents: IM920_sample IM920_SDlog IM920_sample IM920_sample3 ... more
IM920 ライブラリ
データモード、低速、長距離 の設定で通信するライブラリです。
920MHz無線モジュール
- mbedとモジュールとは、シリアル(TX,RX)、BUSY、RESET端子を接続します。
- モジュールはあらかじめ、コマンドでノード番号などを設定しておきます。
IM920.cpp@0:d3ab05ed8142, 2014-12-26 (annotated)
- Committer:
- okini3939
- Date:
- Fri Dec 26 15:35:20 2014 +0000
- Revision:
- 0:d3ab05ed8142
- Child:
- 1:81b2fd407327
1st tiny build.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:d3ab05ed8142 | 1 | #include "IM920.h" |
okini3939 | 0:d3ab05ed8142 | 2 | |
okini3939 | 0:d3ab05ed8142 | 3 | IM920::IM920 (PinName tx, PinName rx, PinName busy, PinName reset, int baud) : _im(tx, rx) { |
okini3939 | 0:d3ab05ed8142 | 4 | |
okini3939 | 0:d3ab05ed8142 | 5 | memset(&_state, 0, sizeof(_state)); |
okini3939 | 0:d3ab05ed8142 | 6 | _state.data = new CircBuffer<char>(CFG_DATA_SIZE); |
okini3939 | 0:d3ab05ed8142 | 7 | |
okini3939 | 0:d3ab05ed8142 | 8 | initUart(busy, reset, baud); |
okini3939 | 0:d3ab05ed8142 | 9 | setReset(true); |
okini3939 | 0:d3ab05ed8142 | 10 | wait_ms(100); |
okini3939 | 0:d3ab05ed8142 | 11 | setReset(false); |
okini3939 | 0:d3ab05ed8142 | 12 | } |
okini3939 | 0:d3ab05ed8142 | 13 | |
okini3939 | 0:d3ab05ed8142 | 14 | int IM920::init (int node, void(*func)()) { |
okini3939 | 0:d3ab05ed8142 | 15 | |
okini3939 | 0:d3ab05ed8142 | 16 | _state.node = node; |
okini3939 | 0:d3ab05ed8142 | 17 | _state.func = func; |
okini3939 | 0:d3ab05ed8142 | 18 | |
okini3939 | 0:d3ab05ed8142 | 19 | cmdRDID(); |
okini3939 | 0:d3ab05ed8142 | 20 | cmdSTNN(_state.node); |
okini3939 | 0:d3ab05ed8142 | 21 | cmdSTPO(3); // 10dBm |
okini3939 | 0:d3ab05ed8142 | 22 | cmdSTRT(2); // 1.25kbps |
okini3939 | 0:d3ab05ed8142 | 23 | return 0; |
okini3939 | 0:d3ab05ed8142 | 24 | } |
okini3939 | 0:d3ab05ed8142 | 25 | |
okini3939 | 0:d3ab05ed8142 | 26 | void IM920::poll () { |
okini3939 | 0:d3ab05ed8142 | 27 | |
okini3939 | 0:d3ab05ed8142 | 28 | if (_state.received && _state.buf != NULL) |
okini3939 | 0:d3ab05ed8142 | 29 | if (_state.func != NULL && !_state.data->isEmpty()) { |
okini3939 | 0:d3ab05ed8142 | 30 | _state.func(); |
okini3939 | 0:d3ab05ed8142 | 31 | if (_state.data->isEmpty()) { |
okini3939 | 0:d3ab05ed8142 | 32 | _state.received = false; |
okini3939 | 0:d3ab05ed8142 | 33 | } |
okini3939 | 0:d3ab05ed8142 | 34 | } |
okini3939 | 0:d3ab05ed8142 | 35 | } |
okini3939 | 0:d3ab05ed8142 | 36 | |
okini3939 | 0:d3ab05ed8142 | 37 | int IM920::send (char *buf, int len) { |
okini3939 | 0:d3ab05ed8142 | 38 | |
okini3939 | 0:d3ab05ed8142 | 39 | if (len > 64) len = 64; |
okini3939 | 0:d3ab05ed8142 | 40 | |
okini3939 | 0:d3ab05ed8142 | 41 | return sendData(buf, len); |
okini3939 | 0:d3ab05ed8142 | 42 | } |
okini3939 | 0:d3ab05ed8142 | 43 | |
okini3939 | 0:d3ab05ed8142 | 44 | int IM920::recv (char *buf, int len) { |
okini3939 | 0:d3ab05ed8142 | 45 | int i; |
okini3939 | 0:d3ab05ed8142 | 46 | |
okini3939 | 0:d3ab05ed8142 | 47 | if (_state.data == NULL) return 0; |
okini3939 | 0:d3ab05ed8142 | 48 | while (!_state.received && _state.mode != MODE_COMMAND); |
okini3939 | 0:d3ab05ed8142 | 49 | _state.received = false; |
okini3939 | 0:d3ab05ed8142 | 50 | for (i = 0; i < len; i ++) { |
okini3939 | 0:d3ab05ed8142 | 51 | if (_state.data->dequeue(&buf[i]) == false) break; |
okini3939 | 0:d3ab05ed8142 | 52 | } |
okini3939 | 0:d3ab05ed8142 | 53 | return i; |
okini3939 | 0:d3ab05ed8142 | 54 | } |