Library for receiving 2021NHK Bteam Controller

Dependents:   2021NHK_Bcon_RX 2021NHK_B_syudo 2021NHK_B_main 2022kouroboBv2 ... more

controller.h

Committer:
piroro4560
Date:
2021-10-16
Revision:
0:9ea2a0d8b9d9
Child:
1:a8f5f13b0840

File content as of revision 0:9ea2a0d8b9d9:

/**
 *  @file   controller.h
 *  @brief  2021Bcon受信用ライブラリ
 *  @author 安澤瑠
 *  @date   21/10/16
 */
#ifndef CONTROLLER_H
#define CONTROLLER_H

#define TIMEOUT_COUNT 5
#define DATANUM 5 // ボタン(BusIn)が1 スティックが4 BController_TX側のFEPライブラリと連携していないとダメ

#include "mbed.h"

/**
 *  @class con 
 *  @brief class for receiving 2021Bcon data
 *  @note  mbed-os 6 では使えません。  Not compatible with mbed-os 6
 */
class Bcon : public RawSerial {
public :
    /** constructor
     *  @param tx   FEPと接続するSerialTX pin
     *  @param rx   FEPと接続するSerialRX pin
     *  @param addr 通信相手のアドレス
     *  @param baud 通信速度(デフォルト115200)
     */
    Bcon(PinName tx, PinName rx, uint8_t addr_, int baud=115200);

    /** Start receiving
     */
    void StartReceive();
    
    /** Check timeout
     * @brief 0.1秒毎のループで受信のタイムアウトをチェック
     */
    void TimeoutLoop();

    /** Interrupt input
     */
    void ReceiveBytes();

    /** extract the message
     */
    void CheckData();

    /** Write the received message
     *  @param data 受信メッセージを格納する配列
     */
    void GetData(uint8_t *data);
    
    bool getButton(uint8_t n); //! BusInの計算をしてボタンの値を返す。
    int16_t getStick(uint8_t n); //! スティックの値を返す。中心を0,範囲は-128 ~ 128とする。
    
    bool status; //! (TIMEOUT_COUNT * 0.1)秒間通信が来ていないと0

private :
    
    Ticker timeoutTimer;

    uint8_t addr;         //! 通信相手のアドレス
    uint8_t buffer[256];  //! 全受信データを格納するリングバッファ配列
    uint8_t retdata[128]; //! メッセージのみを格納する配列
    uint8_t bufindex;     //! buffer の添え字変数
    uint8_t retindex;     //! retdata の添え字変数
    uint8_t timeout;      //! 0.1秒間通信が成功していないと1増える
    uint8_t sum;
    uint8_t stick[4];
};

#endif