920MHz wireless module 'FEP' Library
Dependents: CompactController_2017 quadOmni_yanagi NHK2017_octopus NHK2017_octopus2 ... more
FEP.h@7:2d308c99c668, 2017-09-15 (annotated)
- Committer:
- UCHITAKE
- Date:
- Fri Sep 15 09:35:22 2017 +0900
- Revision:
- 7:2d308c99c668
- Parent:
- 6:74e21751ac10
fix baud (115200)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eil4nyqn | 0:bf959a15b079 | 1 | #ifndef _FEP_H |
eil4nyqn | 0:bf959a15b079 | 2 | #define _FEP_H |
eil4nyqn | 0:bf959a15b079 | 3 | |
eil4nyqn | 0:bf959a15b079 | 4 | #define FEP_NO_RESPONSE (0x10) /* レスポンスが得られなかった */ |
eil4nyqn | 5:9f7d2ba5e188 | 5 | #define FEP_P0 (0x11) /* 正常終了 */ |
eil4nyqn | 5:9f7d2ba5e188 | 6 | #define FEP_P1 (0x12) /* コマンド受理、データ送信中 */ |
eil4nyqn | 5:9f7d2ba5e188 | 7 | #define FEP_N0 (0x13) /* コマンドエラー */ |
eil4nyqn | 5:9f7d2ba5e188 | 8 | #define FEP_N1 (0x14) /* データ送信失敗(宛先の無線モデムの応答なし、キャリアセンスで送信出来なかった) */ |
eil4nyqn | 5:9f7d2ba5e188 | 9 | #define FEP_N2 (0x15) /* 割り当てなし */ |
eil4nyqn | 5:9f7d2ba5e188 | 10 | #define FEP_N3 (0x16) /* データ送信失敗(宛先の無線モデムのバッファがフルで受信できない) */ |
eil4nyqn | 0:bf959a15b079 | 11 | |
eil4nyqn | 5:9f7d2ba5e188 | 12 | #define FEP_DT_ERR (0x30) |
eil4nyqn | 5:9f7d2ba5e188 | 13 | #define FEP_DT_STR (0x31) |
eil4nyqn | 5:9f7d2ba5e188 | 14 | #define FEP_DT_BIN (0x32) |
eil4nyqn | 0:bf959a15b079 | 15 | |
eil4nyqn | 5:9f7d2ba5e188 | 16 | #define FEP_RETRY 10 /* 再送回数 */ |
eil4nyqn | 5:9f7d2ba5e188 | 17 | |
eil4nyqn | 5:9f7d2ba5e188 | 18 | #define FEP_TIMEOUT_COUNT 40000 |
eil4nyqn | 5:9f7d2ba5e188 | 19 | #define FEP_LINE_LEN 273 /* 256(=maximam data length)+14(=header length)+2(=CRLF)+1(=null character) */ |
eil4nyqn | 0:bf959a15b079 | 20 | |
eil4nyqn | 0:bf959a15b079 | 21 | #include "mbed.h" |
eil4nyqn | 0:bf959a15b079 | 22 | |
eil4nyqn | 6:74e21751ac10 | 23 | /** FEP-0x class. |
eil4nyqn | 6:74e21751ac10 | 24 | * Used for communicating between MCU and MCU. |
eil4nyqn | 6:74e21751ac10 | 25 | * |
eil4nyqn | 6:74e21751ac10 | 26 | * Example(Receiver NculeoF446RE): |
eil4nyqn | 6:74e21751ac10 | 27 | * @code |
eil4nyqn | 6:74e21751ac10 | 28 | * #include "mbed.h" |
eil4nyqn | 6:74e21751ac10 | 29 | * #include "FEP.h" |
eil4nyqn | 6:74e21751ac10 | 30 | * |
eil4nyqn | 6:74e21751ac10 | 31 | * FEP fep(PB_10,PB_11,199); |
eil4nyqn | 6:74e21751ac10 | 32 | * Serial pc(USBTX,USBRX,115200); |
eil4nyqn | 6:74e21751ac10 | 33 | * |
eil4nyqn | 6:74e21751ac10 | 34 | * int main() |
eil4nyqn | 6:74e21751ac10 | 35 | * { |
eil4nyqn | 6:74e21751ac10 | 36 | * char data[256]; |
eil4nyqn | 6:74e21751ac10 | 37 | * uint8_t temp; |
eil4nyqn | 6:74e21751ac10 | 38 | * while(1) { |
eil4nyqn | 6:74e21751ac10 | 39 | * temp = fep.read(data, 6); |
eil4nyqn | 6:74e21751ac10 | 40 | * if(temp == 0) { |
eil4nyqn | 6:74e21751ac10 | 41 | * pc.printf("recieved\r\n"); |
eil4nyqn | 6:74e21751ac10 | 42 | * } else if(temp == 1) { |
eil4nyqn | 6:74e21751ac10 | 43 | * pc.printf("recieved data error\r\n"); |
eil4nyqn | 6:74e21751ac10 | 44 | * } else if(temp == FEP_DT_ERR) { |
eil4nyqn | 6:74e21751ac10 | 45 | * pc.printf("program or recieve error\r\n"); |
eil4nyqn | 6:74e21751ac10 | 46 | * } else if(temp == FEP_DT_BIN) { |
eil4nyqn | 6:74e21751ac10 | 47 | * pc.printf("transmitter is binary mode\r\n"); |
eil4nyqn | 6:74e21751ac10 | 48 | * } else { |
eil4nyqn | 6:74e21751ac10 | 49 | * pc.printf("No response\r\n"); |
eil4nyqn | 6:74e21751ac10 | 50 | * } |
eil4nyqn | 6:74e21751ac10 | 51 | * } |
eil4nyqn | 6:74e21751ac10 | 52 | * } |
eil4nyqn | 6:74e21751ac10 | 53 | * @endcode |
eil4nyqn | 6:74e21751ac10 | 54 | * |
eil4nyqn | 6:74e21751ac10 | 55 | * Example(Transmitter NucleoF103RB): |
eil4nyqn | 6:74e21751ac10 | 56 | * @code |
eil4nyqn | 6:74e21751ac10 | 57 | * #include "mbed.h" |
eil4nyqn | 6:74e21751ac10 | 58 | * #include "FEP.h" |
eil4nyqn | 6:74e21751ac10 | 59 | * |
eil4nyqn | 6:74e21751ac10 | 60 | * FEP fep(PB_10,PB_11,198); |
eil4nyqn | 6:74e21751ac10 | 61 | * Serial pc(PB_6,PB_7,115200); |
eil4nyqn | 6:74e21751ac10 | 62 | * |
eil4nyqn | 6:74e21751ac10 | 63 | * int main() |
eil4nyqn | 6:74e21751ac10 | 64 | * { |
eil4nyqn | 6:74e21751ac10 | 65 | * char data[256]; |
eil4nyqn | 6:74e21751ac10 | 66 | * uint8_t temp,intensity; |
eil4nyqn | 6:74e21751ac10 | 67 | * while(1) { |
eil4nyqn | 6:74e21751ac10 | 68 | * data[0] = 'A'; |
eil4nyqn | 6:74e21751ac10 | 69 | * data[1] = 'B'; |
eil4nyqn | 6:74e21751ac10 | 70 | * data[2] = 'D'; |
eil4nyqn | 6:74e21751ac10 | 71 | * data[3] = 'E'; |
eil4nyqn | 6:74e21751ac10 | 72 | * temp=fep.puts(data,4); |
eil4nyqn | 6:74e21751ac10 | 73 | * if(temp==FEP_P0) pc.printf("reciever has recieved\r\n"); |
eil4nyqn | 6:74e21751ac10 | 74 | * else pc.printf("Anything error\r\n"); |
eil4nyqn | 6:74e21751ac10 | 75 | * intensity = fep.getIntensity(); |
eil4nyqn | 6:74e21751ac10 | 76 | * } |
eil4nyqn | 6:74e21751ac10 | 77 | * } |
eil4nyqn | 6:74e21751ac10 | 78 | * @endcode |
eil4nyqn | 6:74e21751ac10 | 79 | */ |
eil4nyqn | 6:74e21751ac10 | 80 | |
eil4nyqn | 5:9f7d2ba5e188 | 81 | class FEP |
eil4nyqn | 5:9f7d2ba5e188 | 82 | { |
eil4nyqn | 0:bf959a15b079 | 83 | public: |
eil4nyqn | 6:74e21751ac10 | 84 | /** Create FEP instance |
eil4nyqn | 6:74e21751ac10 | 85 | * @param tx Serial_TX |
eil4nyqn | 6:74e21751ac10 | 86 | * @param rx Serial_RX |
eil4nyqn | 6:74e21751ac10 | 87 | * @param addr 送信相手モジュールのアドレス(0~255) |
eil4nyqn | 6:74e21751ac10 | 88 | * @param baud 通信速度(default=38400) |
eil4nyqn | 6:74e21751ac10 | 89 | */ |
UCHITAKE |
7:2d308c99c668 | 90 | FEP(PinName tx, PinName rx, uint8_t addr, int baud=115200); |
eil4nyqn | 6:74e21751ac10 | 91 | /** FEP destructor */ |
eil4nyqn | 5:9f7d2ba5e188 | 92 | ~FEP(); |
eil4nyqn | 6:74e21751ac10 | 93 | /** setn any data using txt mode |
eil4nyqn | 6:74e21751ac10 | 94 | * @param *data 送信するデータの配列 |
eil4nyqn | 6:74e21751ac10 | 95 | * @param len 送信するデータの長さ |
eil4nyqn | 6:74e21751ac10 | 96 | * @returns |
eil4nyqn | 6:74e21751ac10 | 97 | * FEP_NO_RESPONSE レスポンスなし\n |
eil4nyqn | 6:74e21751ac10 | 98 | * FEP_P0 正常終了\n |
eil4nyqn | 6:74e21751ac10 | 99 | * FEP_N0 コマンドエラー\n |
eil4nyqn | 6:74e21751ac10 | 100 | * FEP_N1 データ送信失敗(宛先の無線モデムの応答なし、キャリアセンスで送信出来なかった)\n |
eil4nyqn | 6:74e21751ac10 | 101 | * FEP_N2 割り当てなし\n |
eil4nyqn | 6:74e21751ac10 | 102 | * FEP_N3 データ送信失敗(宛先の無線モデムのバッファがフルで受信できない) |
eil4nyqn | 6:74e21751ac10 | 103 | */ |
eil4nyqn | 5:9f7d2ba5e188 | 104 | uint8_t puts(char *data, uint8_t len); |
eil4nyqn | 6:74e21751ac10 | 105 | /** setn any data using binary mode |
eil4nyqn | 6:74e21751ac10 | 106 | * @param *data 送信するデータの配列 |
eil4nyqn | 6:74e21751ac10 | 107 | * @param len 送信するデータの長さ |
eil4nyqn | 6:74e21751ac10 | 108 | * @returns |
eil4nyqn | 6:74e21751ac10 | 109 | * FEP_NO_RESPONSE レスポンスなし\n |
eil4nyqn | 6:74e21751ac10 | 110 | * FEP_P0 正常終了\n |
eil4nyqn | 6:74e21751ac10 | 111 | * FEP_N0 コマンドエラー\n |
eil4nyqn | 6:74e21751ac10 | 112 | * FEP_N1 データ送信失敗(宛先の無線モデムの応答なし、キャリアセンスで送信出来なかった)\n |
eil4nyqn | 6:74e21751ac10 | 113 | * FEP_N2 割り当てなし\n |
eil4nyqn | 6:74e21751ac10 | 114 | * FEP_N3 データ送信失敗(宛先の無線モデムのバッファがフルで受信できない) |
eil4nyqn | 6:74e21751ac10 | 115 | */ |
eil4nyqn | 6:74e21751ac10 | 116 | uint8_t putbin(char *ary, size_t len); |
eil4nyqn | 6:74e21751ac10 | 117 | /** recieve any data(txt or binary mode) |
eil4nyqn | 6:74e21751ac10 | 118 | * @param *data 受信データを格納する配列 |
eil4nyqn | 6:74e21751ac10 | 119 | * @param len 受信データの長さ |
eil4nyqn | 6:74e21751ac10 | 120 | * @returns |
eil4nyqn | 6:74e21751ac10 | 121 | * FEP_NO_RESPONSE レスポンスなし\n |
eil4nyqn | 6:74e21751ac10 | 122 | * FEP_DT_ERR 受信エラー\n |
eil4nyqn | 6:74e21751ac10 | 123 | * FEP_DT_STR TXT形式のデータを受信\n |
eil4nyqn | 6:74e21751ac10 | 124 | * FEP_DT_BIN Binary形式のデータを受信\n |
eil4nyqn | 6:74e21751ac10 | 125 | */ |
eil4nyqn | 5:9f7d2ba5e188 | 126 | uint8_t gets(char *data, uint8_t len); |
eil4nyqn | 6:74e21751ac10 | 127 | /** recieve any data(txt mode) |
eil4nyqn | 6:74e21751ac10 | 128 | * @param *data 受信データを格納する配列 |
eil4nyqn | 6:74e21751ac10 | 129 | * @param len 受信データの長さ |
eil4nyqn | 6:74e21751ac10 | 130 | * @returns |
eil4nyqn | 6:74e21751ac10 | 131 | * FEP_NO_RESPONSE レスポンスなし\n |
eil4nyqn | 6:74e21751ac10 | 132 | * FEP_DT_ERR 受信エラー\n |
eil4nyqn | 6:74e21751ac10 | 133 | * FEP_DT_STR TXT形式のデータを受信\n |
eil4nyqn | 6:74e21751ac10 | 134 | * FEP_DT_BIN Binary形式のデータを受信\n |
eil4nyqn | 6:74e21751ac10 | 135 | * 0 正常終了\n |
eil4nyqn | 6:74e21751ac10 | 136 | * 1 受信データエラー |
eil4nyqn | 6:74e21751ac10 | 137 | */ |
eil4nyqn | 5:9f7d2ba5e188 | 138 | uint8_t read(char *data, uint8_t len); |
eil4nyqn | 6:74e21751ac10 | 139 | /** get transmitter address |
eil4nyqn | 6:74e21751ac10 | 140 | * @returns |
eil4nyqn | 6:74e21751ac10 | 141 | * transmitter address(0~255) |
eil4nyqn | 6:74e21751ac10 | 142 | */ |
eil4nyqn | 6:74e21751ac10 | 143 | uint8_t getTransmitterAddr(); |
eil4nyqn | 6:74e21751ac10 | 144 | /** get intensity |
eil4nyqn | 6:74e21751ac10 | 145 | * @returns |
eil4nyqn | 6:74e21751ac10 | 146 | * intensity(absolute) |
eil4nyqn | 6:74e21751ac10 | 147 | */ |
eil4nyqn | 6:74e21751ac10 | 148 | uint8_t getIntensity(); |
eil4nyqn | 6:74e21751ac10 | 149 | /** reset the module |
eil4nyqn | 6:74e21751ac10 | 150 | * @returns |
eil4nyqn | 6:74e21751ac10 | 151 | * FEP_P1 正常終了 |
eil4nyqn | 6:74e21751ac10 | 152 | */ |
eil4nyqn | 5:9f7d2ba5e188 | 153 | uint8_t reset(); |
eil4nyqn | 0:bf959a15b079 | 154 | private: |
eil4nyqn | 0:bf959a15b079 | 155 | Serial serial; |
eil4nyqn | 5:9f7d2ba5e188 | 156 | void hex2dec(char *data,char *str,uint8_t data_len); |
eil4nyqn | 5:9f7d2ba5e188 | 157 | int rxHandler(char *data); |
eil4nyqn | 5:9f7d2ba5e188 | 158 | int ctoi(char c); |
eil4nyqn | 5:9f7d2ba5e188 | 159 | uint8_t _address; |
eil4nyqn | 5:9f7d2ba5e188 | 160 | uint8_t _transmitterAddr; |
eil4nyqn | 0:bf959a15b079 | 161 | uint8_t _intensity; |
eil4nyqn | 6:74e21751ac10 | 162 | uint8_t getResponse(); |
eil4nyqn | 0:bf959a15b079 | 163 | }; |
eil4nyqn | 0:bf959a15b079 | 164 | |
eil4nyqn | 0:bf959a15b079 | 165 | #endif /*_FEP_H*/ |