FEP interrupt, response, ring buffer

Dependents:   087_myFEP_TX 087_myFEP_RX

FEP.h

Committer:
piroro4560
Date:
2021-10-09
Revision:
0:b01dc5fd59bc
Child:
1:a4103af46277

File content as of revision 0:b01dc5fd59bc:

#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