FEP interrupt, response, ring buffer
Dependents: 087_myFEP_TX 087_myFEP_RX
FEP.h@4:8d754f144b96, 2021-10-15 (annotated)
- Committer:
- piroro4560
- Date:
- Fri Oct 15 13:23:15 2021 +0000
- Revision:
- 4:8d754f144b96
- Parent:
- 3:12dcc46fb9dc
Completed for the time being
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
piroro4560 | 4:8d754f144b96 | 1 | /** |
piroro4560 | 4:8d754f144b96 | 2 | * @file FEP.h |
piroro4560 | 4:8d754f144b96 | 3 | * @brief FEPライブラリ |
piroro4560 | 4:8d754f144b96 | 4 | * @author 安澤瑠 |
piroro4560 | 4:8d754f144b96 | 5 | * @date 21/10/15 |
piroro4560 | 2:aa9a344a42a8 | 6 | */ |
piroro4560 | 0:b01dc5fd59bc | 7 | #ifndef FEP_H |
piroro4560 | 0:b01dc5fd59bc | 8 | #define FEP_H |
piroro4560 | 0:b01dc5fd59bc | 9 | |
piroro4560 | 4:8d754f144b96 | 10 | #define TIMEOUT_COUNT 10 |
piroro4560 | 4:8d754f144b96 | 11 | |
piroro4560 | 1:a4103af46277 | 12 | #include "mbed.h" |
piroro4560 | 1:a4103af46277 | 13 | |
piroro4560 | 2:aa9a344a42a8 | 14 | /** |
piroro4560 | 2:aa9a344a42a8 | 15 | * @class myFEP Class for communicating using FEP-01, FEP-02 |
piroro4560 | 2:aa9a344a42a8 | 16 | * @brief Class for communicating using FEP-01, FEP-02 |
piroro4560 | 4:8d754f144b96 | 17 | * @note mbed-os 6 では使えません。 Not compatible with mbed-os 6 |
piroro4560 | 2:aa9a344a42a8 | 18 | */ |
piroro4560 | 3:12dcc46fb9dc | 19 | class myFEP : public RawSerial { |
piroro4560 | 0:b01dc5fd59bc | 20 | public : |
piroro4560 | 2:aa9a344a42a8 | 21 | /** constructor |
piroro4560 | 4:8d754f144b96 | 22 | * @param tx FEPと接続するSerialTX pin |
piroro4560 | 4:8d754f144b96 | 23 | * @param rx FEPと接続するSerialRX pin |
piroro4560 | 4:8d754f144b96 | 24 | * @param addr 通信相手のアドレス |
piroro4560 | 4:8d754f144b96 | 25 | * @param baud 通信速度(デフォルト115200) |
piroro4560 | 0:b01dc5fd59bc | 26 | */ |
piroro4560 | 0:b01dc5fd59bc | 27 | myFEP(PinName tx, PinName rx, uint8_t addr_, int baud=115200); |
piroro4560 | 0:b01dc5fd59bc | 28 | |
piroro4560 | 4:8d754f144b96 | 29 | /** Start receiving |
piroro4560 | 0:b01dc5fd59bc | 30 | */ |
piroro4560 | 0:b01dc5fd59bc | 31 | void StartReceive(); |
piroro4560 | 4:8d754f144b96 | 32 | |
piroro4560 | 4:8d754f144b96 | 33 | /** Check timeout |
piroro4560 | 4:8d754f144b96 | 34 | * @brief 0.1秒毎のループで受信のタイムアウトをチェック |
piroro4560 | 4:8d754f144b96 | 35 | */ |
piroro4560 | 4:8d754f144b96 | 36 | void TimeoutLoop(); |
piroro4560 | 0:b01dc5fd59bc | 37 | |
piroro4560 | 4:8d754f144b96 | 38 | /** Interrupt input |
piroro4560 | 0:b01dc5fd59bc | 39 | */ |
piroro4560 | 0:b01dc5fd59bc | 40 | void ReceiveBytes(); |
piroro4560 | 0:b01dc5fd59bc | 41 | |
piroro4560 | 4:8d754f144b96 | 42 | /** extract the message |
piroro4560 | 0:b01dc5fd59bc | 43 | */ |
piroro4560 | 0:b01dc5fd59bc | 44 | void CheckData(); |
piroro4560 | 0:b01dc5fd59bc | 45 | |
piroro4560 | 4:8d754f144b96 | 46 | /** Write the received message |
piroro4560 | 4:8d754f144b96 | 47 | * @param data 受信メッセージを格納する配列 |
piroro4560 | 0:b01dc5fd59bc | 48 | */ |
piroro4560 | 4:8d754f144b96 | 49 | uint8_t GetData(uint8_t *data); |
piroro4560 | 0:b01dc5fd59bc | 50 | |
piroro4560 | 4:8d754f144b96 | 51 | /** send message |
piroro4560 | 4:8d754f144b96 | 52 | * @brief data配列のデータをlength分送信する |
piroro4560 | 4:8d754f144b96 | 53 | * @param data 送るデータ配列のアドレス |
piroro4560 | 4:8d754f144b96 | 54 | * @param length 送るデータのバイト数 |
piroro4560 | 2:aa9a344a42a8 | 55 | * |
piroro4560 | 4:8d754f144b96 | 56 | * @return 0 通信成功 |
piroro4560 | 4:8d754f144b96 | 57 | * @return 1 データ量過多 |
piroro4560 | 4:8d754f144b96 | 58 | * @return 2 コマンドエラー |
piroro4560 | 4:8d754f144b96 | 59 | * @return 3 通信相手からのレスポンス無し |
piroro4560 | 4:8d754f144b96 | 60 | * @return 4 通信相手が受け取りに失敗 |
piroro4560 | 4:8d754f144b96 | 61 | * @return -1 可否不能 |
piroro4560 | 0:b01dc5fd59bc | 62 | */ |
piroro4560 | 3:12dcc46fb9dc | 63 | int8_t SendData(uint8_t *data, uint8_t length); |
piroro4560 | 0:b01dc5fd59bc | 64 | |
piroro4560 | 2:aa9a344a42a8 | 65 | /** Response acquisition function |
piroro4560 | 4:8d754f144b96 | 66 | * @return 0 通信成功 |
piroro4560 | 4:8d754f144b96 | 67 | * @return 2 コマンドエラー |
piroro4560 | 4:8d754f144b96 | 68 | * @return 3 通信相手からのレスポンス無し |
piroro4560 | 4:8d754f144b96 | 69 | * @return 4 通信相手が受け取りに失敗 |
piroro4560 | 4:8d754f144b96 | 70 | * @return -1 可否不能 |
piroro4560 | 0:b01dc5fd59bc | 71 | */ |
piroro4560 | 3:12dcc46fb9dc | 72 | int8_t GetResponse(); |
piroro4560 | 4:8d754f144b96 | 73 | |
piroro4560 | 4:8d754f144b96 | 74 | bool status; //! (TIMEOUT_COUNT * 0.1)秒間通信が来ていないと0 |
piroro4560 | 0:b01dc5fd59bc | 75 | |
piroro4560 | 0:b01dc5fd59bc | 76 | private : |
piroro4560 | 4:8d754f144b96 | 77 | |
piroro4560 | 4:8d754f144b96 | 78 | Ticker timeoutTimer; |
piroro4560 | 0:b01dc5fd59bc | 79 | |
piroro4560 | 4:8d754f144b96 | 80 | uint8_t addr; //! 通信相手のアドレス |
piroro4560 | 4:8d754f144b96 | 81 | uint8_t buffer[256]; //! 全受信データを格納するリングバッファ配列 |
piroro4560 | 4:8d754f144b96 | 82 | uint8_t retdata[128]; //! メッセージのみを格納する配列 |
piroro4560 | 4:8d754f144b96 | 83 | uint8_t bufindex; //! buffer の添え字変数 |
piroro4560 | 4:8d754f144b96 | 84 | uint8_t retindex; //! retdata の添え字変数 |
piroro4560 | 4:8d754f144b96 | 85 | uint8_t length; //! メッセージバイト数 |
piroro4560 | 4:8d754f144b96 | 86 | uint8_t timeout; //! 0.1秒間通信が成功していないと1増える |
piroro4560 | 3:12dcc46fb9dc | 87 | }; |
piroro4560 | 0:b01dc5fd59bc | 88 | |
piroro4560 | 0:b01dc5fd59bc | 89 | #endif |