FEP interrupt, response, ring buffer

Dependents:   087_myFEP_TX 087_myFEP_RX

Revision:
0:b01dc5fd59bc
Child:
1:a4103af46277
diff -r 000000000000 -r b01dc5fd59bc FEP.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FEP.h	Sat Oct 09 11:42:03 2021 +0000
@@ -0,0 +1,76 @@
+#ifndef FEP_H
+#define FEP_H
+
+class myFEP{
+public :
+    /** コンストラクタ
+     *  @param tx   FEPtxに繋いでるピン
+     *  @param rx   FEPrxに繋いでるピン
+     *  @param addr 通信相手のアドレス
+     *  @param baud 通信速度
+     */
+    myFEP(PinName tx, PinName rx, uint8_t addr_, int baud=115200);
+
+    /** 受信開始用関数
+     */
+    void StartReceive();
+
+    /** 受信割り込み用関数
+     */
+    void ReceiveBytes();
+
+    /** メッセージ読み取り用関数
+     */
+    void CheckData();
+
+    /** 受信メッセージ引き渡し用関数
+     *  @param data 格納先のデータアドレス
+     */
+    void GetData(uint8_t *data);
+
+    /** 通信相手FEPにデータ送信
+     *  @brief 引数の中のデータ全部送信
+     *  @param data 送信する配列
+     *  @return 0 送信成功
+     *  @return 1 データ量過多
+     *  @return 2 コマンドエラー
+     *  @return 3 相手からの応答なし
+     *  @return 4 相手が受信失敗
+     *  @return -1  可否不明
+     */
+    uint8_t SendData(uint8_t *data);
+
+    /** 長さ指定ver
+     *  @brief dataの配列をlength分送る
+     *  @param data   送信する配列
+     *  @param length 送信する長さ
+     *  @return 0 送信成功
+     *  @return 1 データ量過多
+     *  @return 2 コマンドエラー
+     *  @return 3 相手からの応答なし
+     *  @return 4 相手が受信失敗
+     *  @return -1  可否不明
+     */
+    uint8_t SendData(uint8_t *data, uint8_t length);
+
+    /** レスポンス取得用関数
+     *  @return 0 送信成功
+     *  @return 1 データ量過多
+     *  @return 2 コマンドエラー
+     *  @return 3 相手からの応答なし
+     *  @return 4 相手が受信失敗
+     *  @return -1  可否不明
+     */
+    uint8_t GetResponse();
+
+private :
+    uint8_t ctoi(char c);
+
+    uint8_t  addr; //! 通信相手のアドレス
+    uint8_t buffer[256]; //! 受信データ格納用配列
+    uint8_t retdata[256]; //! 引き渡し用データ格納用配列
+    uint16_t  bufindex; //! bufferの添え字用変数
+    uint16_t  retindex; //! retdataの添え字用変数
+}
+
+#endif
\ No newline at end of file