FTE-denshi / Mbed 2 deprecated FTE-06

Dependencies:   mbed FATFileSystem

Fork of FTE-06 by Tetsushi Amano

Committer:
mizuki_akaike
Date:
Mon Aug 14 04:56:52 2017 +0000
Revision:
23:9be034083282
?????????????;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mizuki_akaike 23:9be034083282 1 /* Copyright (C) 2014 Suga, MIT License
mizuki_akaike 23:9be034083282 2 *
mizuki_akaike 23:9be034083282 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
mizuki_akaike 23:9be034083282 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
mizuki_akaike 23:9be034083282 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
mizuki_akaike 23:9be034083282 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
mizuki_akaike 23:9be034083282 7 * furnished to do so, subject to the following conditions:
mizuki_akaike 23:9be034083282 8 *
mizuki_akaike 23:9be034083282 9 * The above copyright notice and this permission notice shall be included in all copies or
mizuki_akaike 23:9be034083282 10 * substantial portions of the Software.
mizuki_akaike 23:9be034083282 11 *
mizuki_akaike 23:9be034083282 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
mizuki_akaike 23:9be034083282 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
mizuki_akaike 23:9be034083282 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
mizuki_akaike 23:9be034083282 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mizuki_akaike 23:9be034083282 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
mizuki_akaike 23:9be034083282 17 */
mizuki_akaike 23:9be034083282 18 #include "IM920.h"
mizuki_akaike 23:9be034083282 19
mizuki_akaike 23:9be034083282 20 IM920::IM920 (PinName tx, PinName rx, PinName busy, PinName reset, int baud) : _im(tx, rx) {
mizuki_akaike 23:9be034083282 21
mizuki_akaike 23:9be034083282 22 memset(&_state, 0, sizeof(_state));
mizuki_akaike 23:9be034083282 23 _state.data = new CircBuffer<char>(CFG_DATA_SIZE);
mizuki_akaike 23:9be034083282 24
mizuki_akaike 23:9be034083282 25 initUart(busy, reset, baud);
mizuki_akaike 23:9be034083282 26 setReset(true);
mizuki_akaike 23:9be034083282 27 wait_ms(100);
mizuki_akaike 23:9be034083282 28 setReset(false);
mizuki_akaike 23:9be034083282 29 }
mizuki_akaike 23:9be034083282 30
mizuki_akaike 23:9be034083282 31 int IM920::init () {
mizuki_akaike 23:9be034083282 32
mizuki_akaike 23:9be034083282 33 cmdRDID();
mizuki_akaike 23:9be034083282 34 cmdRDNN();
mizuki_akaike 23:9be034083282 35 cmdSTPO(3); // 10dBm
mizuki_akaike 23:9be034083282 36 cmdSTRT(2); // 1.25kbps
mizuki_akaike 23:9be034083282 37 return 0;
mizuki_akaike 23:9be034083282 38 }
mizuki_akaike 23:9be034083282 39
mizuki_akaike 23:9be034083282 40 void IM920::poll () {
mizuki_akaike 23:9be034083282 41
mizuki_akaike 23:9be034083282 42 if (_state.received && _state.buf != NULL)
mizuki_akaike 23:9be034083282 43 if (!_state.data->isEmpty()) {
mizuki_akaike 23:9be034083282 44 _func.call();
mizuki_akaike 23:9be034083282 45 if (_state.data->isEmpty()) {
mizuki_akaike 23:9be034083282 46 _state.received = false;
mizuki_akaike 23:9be034083282 47 }
mizuki_akaike 23:9be034083282 48 }
mizuki_akaike 23:9be034083282 49 }
mizuki_akaike 23:9be034083282 50
mizuki_akaike 23:9be034083282 51 int IM920::send (char *buf, int len) {
mizuki_akaike 23:9be034083282 52
mizuki_akaike 23:9be034083282 53 if (len > 64) len = 64;
mizuki_akaike 23:9be034083282 54
mizuki_akaike 23:9be034083282 55 return sendData(buf, len);
mizuki_akaike 23:9be034083282 56 }
mizuki_akaike 23:9be034083282 57
mizuki_akaike 23:9be034083282 58 int IM920::recv (char *buf, int len) {
mizuki_akaike 23:9be034083282 59 int i;
mizuki_akaike 23:9be034083282 60
mizuki_akaike 23:9be034083282 61 if (_state.data == NULL) return 0;
mizuki_akaike 23:9be034083282 62 while (!_state.received && _state.mode != MODE_COMMAND);
mizuki_akaike 23:9be034083282 63 _state.received = false;
mizuki_akaike 23:9be034083282 64 for (i = 0; i < len; i ++) {
mizuki_akaike 23:9be034083282 65 if (_state.data->dequeue(&buf[i]) == false) break;
mizuki_akaike 23:9be034083282 66 }
mizuki_akaike 23:9be034083282 67 return i;
mizuki_akaike 23:9be034083282 68 }