#ifndef __BARE_METAL_CONTROL_LAYER_
#define __BARE_METAL_CONTROL_LAYER_

#include "stdint.h"
#include "stdbool.h"

#define BMCL_SEMAP_STA_VAILD    true
#define BMCL_SEMAP_STA_INVALID  false

typedef struct 
{
    uint8_t sign;
    uint32_t data;
}BMCL_GENSEAMP_s;

typedef struct
{
    uint8_t commStatus;
}BMCL_COMM_SEQ_s;

typedef enum
{
    BMCL_COMM_SEQ_STATUS_0 ,    // not need to response
    BMCL_COMM_SEQ_STATUS_1 ,    // need to response
    BMCL_COMM_SEQ_STATUS_2 
}BMCL_COMM_SEQ_STATUS;


typedef enum
{
    BMCL_GENSEAMP_STA_TAKEN = 0,
    BMCL_GENSEAMP_STA_GIVEN ,
}BMCL_GENSEAMP_STA;

typedef enum
{
    BMCL_GENSEAMP_RESULT_ERR = -1,
    BMCL_GENSEAMP_RESULT_OK,
    BMCL_GENSEAMP_RESULT_NOT_GIVEN,
    BMCL_GENSEAMP_RESULT_GET_GIVEN,

}BMCL_GENSEAMP_RESULT;

//Data remote sensing structure
//which stores motor board remote sensing data and is used for the data queue of internal protocols.
typedef struct 
{
    float data[10];
}BMCL_PROTOCOL_REMOTESEN;

extern BMCL_GENSEAMP_s bmcl_ahrs_CurAngArr;
extern BMCL_GENSEAMP_s bmcl_ahrs_TarAngArr;
extern BMCL_GENSEAMP_s bmcl_Calibration;
extern BMCL_GENSEAMP_s bmcl_Music;

extern BMCL_COMM_SEQ_s bmcl_comm_seq_1;

extern BMCL_PROTOCOL_REMOTESEN bmcl_protocol_reData ;

void BMCL_Init();
void BMCL_Genseamp_give( BMCL_GENSEAMP_s * s , uint32_t data );
int32_t BMCL_GenSemap_take( BMCL_GENSEAMP_s * s , uint32_t* data );


#endif