FEP interrupt, response, ring buffer

Dependents:   087_myFEP_TX 087_myFEP_RX

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?

UserRevisionLine numberNew 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