teamALI / Mbed 2 deprecated HB2018

Dependencies:   mbed FreeRTOS

globalFlags.h

Committer:
MasashiNomura
Date:
2019-01-24
Revision:
43:156199c2f9b6
Parent:
42:cc8501b824ba
Child:
44:14fe4bd10fdb

File content as of revision 43:156199c2f9b6:

#ifndef __GLOBALFLAGS_H__
#define __GLOBALFLAGS_H__

#include "mbed.h"
#include "typedef.h"

#define G_CMD_BUF_SIZ 32
#define STATE_QUE_SIZ 8

#define STATE_BUF_SIZ 8

#define LIM_MOT_INP_MIN -2000
#define LIM_MOT_INP_MAX 2000

#define MAX_VAL_12BIT   4095
#define BRK_RPM 4000

typedef struct {
    union{
        UINT16 flg;
        struct{
            bool    e1   : 1;//前エンジン回転数
            bool    e2   : 1;//後ろエンジン回転数
            bool    m1   : 1;//サブモーター回転数
            bool    m2   : 1;//サブモーター回転数
            bool    m3   : 1;//サブモーター回転数
            bool    m4   : 1;//サブモーター回転数
            bool    gy   : 1;//ジャイロ
            bool    yaw  : 1;//ヨー角
            bool    fb   : 1;//PID制御feedback結果
            bool    pp   : 1;//P制御ゲイン(アウターループ)
            bool    p    : 1;//P制御ゲイン
            bool    i    : 1;//I制御ゲイン
            bool    d    : 1;//D制御ゲイン
            bool    v    : 1;//PID2(torgue)角速度feedback制御用ゲイン
            bool    stat : 1;//ステート表示
        }bf;
    }d1;
    union{
        UINT32 flg;
        struct{
            bool    ain   : 1;//アナログ入力値
            bool    sw    : 1;//User Ope Switch
            bool    mo1   : 1;//Motor1 Offset val
            bool    mo2   : 1;//Motor2 Offset val
            bool    mo3   : 1;//Motor3 Offset val
            bool    mo4   : 1;//Motor4 Offset val
            bool    ep1   : 1;//前エンジンにセットされたパラメータ値
            bool    ep2   : 1;//後エンジンにセットされたパラメータ値
            bool    rsv_01   : 1;
            bool    rsv_02   : 1;
            bool    rsv_03   : 1;
            bool    rsv_04   : 1;
            bool    rsv_05   : 1;
            bool    rsv_06   : 1;
            bool    rsv_07   : 1;
            bool    rsv_08   : 1;
        }bf;
    }d2;
}typPrintFlg;

// typedef union{
//     UINT16  flg;
//     struct{    
//         bool    e1   : 1;//前エンジン回転数
//         bool    e2   : 1;//後ろエンジン回転数
//         bool    m1   : 1;//サブモーター回転数
//         bool    m2   : 1;//サブモーター回転数
//         bool    m3   : 1;//サブモーター回転数
//         bool    m4   : 1;//サブモーター回転数
//         bool    gy   : 1;//ジャイロ
//         bool    yaw  : 1;//ヨー角
//         bool    fb   : 1;//PID制御feedback結果
//         bool    pp   : 1;//P制御ゲイン(アウターループ)
//         bool    p    : 1;//P制御ゲイン
//         bool    i    : 1;//I制御ゲイン
//         bool    d    : 1;//D制御ゲイン
//         bool    v    : 1;//PID2(torgue)角速度feedback制御用ゲイン
//         bool    stat    : 1;//ステート表示
//         bool    ain  : 1;//アナログ入力値
//     }bf;
// }typPrintFlag;

typedef union{
    UINT16  flg;
    struct{    
        bool    e1   : 1;//
        bool    e2   : 1;//
        bool    m1   : 1;//
        bool    m2   : 1;//
        bool    m3   : 1;//
        bool    m4   : 1;//
        bool    gy   : 1;//
        bool    yaw  : 1;//
        bool    fb   : 1;//PID制御feedback結果
        bool    pp   : 1;//P制御ゲイン(アウターループ)
        bool    p    : 1;//P制御ゲイン
        bool    i    : 1;//I制御ゲイン
        bool    d    : 1;//D制御ゲイン
    }bf;
}typCalFlag;

typedef union{
    UINT16  dt;
    struct{    
        UINT16  val   : 15;//立てたいbit番号(現状0~10)
        bool    req   : 1;//コマンド要求
    }bf;
}typSWCmd;

//
typedef union{
    UINT16  dt;
    struct{    
        UINT16  val   : 12;//アクセル設定値
        bool    req   : 1;//アクセル更新要求
    }bf;
}typAccel;

typedef struct{
    INT16  val;//アクセル設定値
    bool   req;//アクセル更新要求
}typAxlRpm;


// typedef union{
//     UINT16  flg;
//     struct{    
//         bool    mo1   : 1;//Motor1 Offset val
//         bool    mo2   : 1;//Motor2 Offset val
//         bool    mo3   : 1;//Motor3 Offset val
//         bool    mo4   : 1;//Motor4 Offset val
//         bool    ana1  : 1;//AnalogRead for Motor Accel
//         bool    ana2  : 1;
//     }bf;
// }typDbgPrintFlg;

typedef union {
    UINT16 dt;
    struct{
        UINT16 num      :6;
        UINT16 counter  :6;
        //UINT16  pos     :3;
        bool    add_end :1;
        bool    req     :1;
    }bf;
}typOnePushFlg;

//ステート定義
enum enmHbState
    {NONE = 0      //何もなし
    ,SLEEP      //スリープモード(最初ここ)
    ,WAKEUP     //起動処理
    ,STANDBY    //スタンバイ(エンジンかかるの待ち)
    ,IDLE       //アイドル(エンジンがかかったけどなにもしない)
    ,TAKE_OFF   //離陸(エンジン回転数上昇 規定値まで)
    ,HOVER      //ホバリング
    ,DRIVE      //運転
    ,GROUND     //着陸(エンジン同時下げ)
    ,EMGGND     //緊急着陸(後ろエンジンを先に下げる)
    ,CHK_EG_ENT //SLEEPからエンジン調整モードへ(フラグリセット、アナログ入力が下がっていること、ボタンが押されいないことの確認State)
    ,CHK_EG_F   //フロントエンジン調整
    ,CHK_EG_MID //アナログ入力が下がっていること、ボタンが押されていないことを確認するState
    ,CHK_EG_R   //リアエンジン調整
    ,CHK_EG_EXIT//アナログ入力が下がっていること、他のボタンが押されていないことを確認してSLEEPへ
    ,CHK_ENT    //チェックエンター
    ,CHK_MOT    //モーターチェック
    ,CHK_AXL    //アクセルサーボチェック
    ,CHK_ATT    //姿勢制御チェック
    ,CHK_EXIT   //チェックステート脱出
    ,MOT_STOP   //モーター停止用
};

// 状態表示用LEDカラー 
enum eLedCol{
    OFF = 0,
    WHITE,
    RED,
    GREEN,
    BLUE,
    YELLOW,
    PURPLE,
    LIGHT_BLUE,
    BLK_WHITE,//BLINK
    BLK_RED,
    BLK_GREEN,
    BLK_BLUE,
    BLK_YELLOW,
    BLK_PURPLE,
    BLK_LIGHT_BLUE,
};

enum eMotPos{
    F_L = 0,    // 前 左
    F_R,        // 前 右
    R_L,        // 後 左
    R_R,        // 後 右
};
enum eMotType{
    IN = 0,
    OUT,
};
enum eMotInType{
    OFS = 0,
    ATT,
    USER,
};
enum eEgPos{
    FRONT = 0,
    REAR,
};
/////////////////////////////////////////////////

//void init1PushStruct(typ1Push& item);

void initFlags();

void setDOCol(eLedCol col);
void setDO4LED(enmHbState stat);
//void blinkLED(enmHbState stat);

void setState(enmHbState stat);
void setStateF(enmHbState stat);

bool isActiveState();

/*
class GlobalFlags{
private:
    enmHbState    stateQueue[STATE_QUE_SIZ];//ステート予約用のキューバッファ
    int           wp;       //ライトポインタ
    int           rp;       //リードポインタ
    bool          full;     //フルフラグ
    bool          empty;    //エンプティフラグ
public:
    //プロパティ
    enmHbState    state;//現在のステート
    //メソッド
    GlobalFlags();//コンストラクタ
    bool        push(enmHbState iState);
    bool        pull();
};

*/


//モニタ用LED
extern DigitalOut led1;
extern DigitalOut led2;
extern DigitalOut led3;
extern DigitalOut led4;

//状態表示用
extern DigitalOut DO_01;
extern DigitalOut DO_02;
extern DigitalOut DO_03;

//モーターアクセル用アナログ入力
extern AnalogIn AinAxl;

// //エンジンスロットル用アナログ入力
// extern AnalogIn AinThrottle;

//////////////////////////////////////////////////
// フラグ
//extern GlobalFlags  gf;

extern char         g_CmdBuf[G_CMD_BUF_SIZ] ;// コマンド受け渡しバッファ
extern bool         gf_CmdPrs;      //コマンドパーサー実行要求フラグ

extern bool         gf_Armed;       //アーミングフラグ
extern bool         gf_Dbg;         //デバッグフラグ
extern bool         gf_StopMot;     //モーターの強制停止 サーボ全閉
extern bool         gf_FromActiveStat   ;//モーターの強制停止 サーボ全閉が動作時に発生したかどうか

extern bool         gf_BlinkLED;


//extern typPrintFlag gf_Print;       //デバッグプリントフラグ(1回表示)
//extern typPrintFlag gf_Mon;         //デバッグモニタフラグ(繰り返し表示)
extern typPrintFlg  gf_Print;       //デバッグプリントフラグ(1回表示)
extern typPrintFlg  gf_Mon;         //デバッグモニタフラグ(繰り返し表示)
extern typCalFlag   gf_Cal;         //キャリブレーションフラグ

//extern typDbgPrintFlg  gf_DbgPrint         ;//デバッグ用

extern typAccel     gf_AxReq[2];    //アクセル更新
extern typAccel     gf_AxReqH[2]            ;//浮上時アクセル値更新フラグ
extern typAccel     gf_AxStepReq[2]            ;//アクセル用サーボ動作ステップ値更新フラグ

extern typAxlRpm     gf_MtReq[4];       //モーター姿勢制御更新
extern typAxlRpm     gf_MtReqOfs[4];    //モーターオフセット更新
extern typAxlRpm     gf_MtReqU[4];      //モーターユーザー更新
extern typAxlRpm     gf_MtReqDct[8]           ;//ダイレクト(FPGA関数直接呼び出し)モーター更新フラグ

extern typSWCmd     gf_SwCmd;               //スイッチが押されたことを模擬するフラグ

extern enmHbState      gf_State;    //現在のステート
extern bool            gf_StateEnt ;//状態遷移後、最初であることを示す

extern bool         gf_PidParaUpdate       ;//PID Pp,P,I,Dの係数アップデートフラグ
extern typPidPara   g_PidPara;      //PID Pp,P,I,Dの係数の外部設定用

// extern bool            gf_MotParaUpdate[4]        ;//モーターのパラメータ値更新フラグ
// extern typMotPara      g_MotPara[4];            //モーターのパラメータ値

#endif