#ifndef  __BSP_ML307R_H__
#define __BSP_ML307R_H__


#include "CH58x_common.h"

/*4G 模块控制引脚*/
#define ENABLE_3_8_V    GPIO_Pin_3 //PB3

#define USIM_DECT_PIN GPIO_Pin_5    //PB5
#define ML307_PWR_PIN GPIO_Pin_6    //PB6
#define ML307_RST_PIN GPIO_Pin_7    //PB7

#define ML307_UART_TX_PIN   GPIO_Pin_13 //PB13
#define ML307_UART_RX_PIN  GPIO_Pin_12  //PB12



typedef struct __attribute__((packed))
{
    uint8_t module_init_flag :  1;    //模块初始化
    uint8_t Date_Sending_flag :  1;   //数据发送中
    uint8_t Low_Voltage_flag :  1;    //低电压
    uint8_t Key_Finish_flag :  1;     //按键完成

    uint8_t PowerOn_success_flag : 1; //模块开机成功
    uint8_t PowerOn_error_flag : 1;   //模块开机失败
    uint8_t PowerOff_success_flag : 1;//模块关机成功
    uint8_t PowerOff_error_flag : 1;  //模块关机失败

    uint8_t restart_success_flag : 1; //重启模块成功
    uint8_t restart_error_flag : 1;   //重启模块失败
    uint8_t sim_success_flag : 1;     //sim成功
    uint8_t sim_error_flag : 1;       //sim失败

    uint8_t Get_ModInfo_flag : 1;     //获取模组信息
    uint8_t ModInfo_update_flag : 1;  //信息更新
    uint8_t ModInfo_success_flag : 1; //获取模组信息成功
    uint8_t ModInfo_error_flag : 1;   //获取模组信息失败
    
    uint8_t Connect_success_flag : 1; //连接平台成功
    uint8_t Connect_error_flag : 1;   //连接平台失败
    uint8_t Valve_Open_flag : 1;      //阀门打开
    uint8_t Valve_Close_flag : 1;     //阀门关闭

    uint8_t send_complete_flag : 1;   //发送数据完成标志
    uint8_t send_error_flag : 1;      //发送数据错误标志
    uint8_t update_time_flag : 1;     //更新网络时间标志位
    uint8_t login_status_flag : 1;    //登录到服务器标志位；

    uint8_t Loop_count_flag : 3;      //循环次数标志位
    uint8_t Iot_Retry_flag : 1;       //重试标志位；

}IotFlagStruct;


// Module parameters
typedef struct __attribute__((packed))
{
    char cmdtype[3];
    char servic_id[5];
    char payload_len[5];
    char imei_len[5];
    char imei[60];
    char imsi_len[5];
    char imsi[60];
    char iccid_len[5];
    char iccid[60];
    char heartbeat_time_len[5];
    char heartbeat_time[9];//心跳周期 0~100
    char manufacturer_name_len[5];
    char manufacturer_name[40];//厂家 名称
    char terminal_type_len[5];
    char terminal_type[25];//终端类型
    char hardware_version_len[5];
    char hardware_version[11];//硬件版本
    char software_version_len[5];
    char software_version[11];//软件版本
    char battery_value[9];//电池电压，浮点型0~5
    char battery_voltage[9];//电池电量 整形 1-100

} TsModule_Info_t;

// Network service information
typedef struct
{
    char cmdtype[3];
    char servic_id[5];
    char payload_length[5];
    char rat[16];//整型。无线接入模式
    char rsrp[16];//整型，参考信号接收功率，-1400~-440，无效值位-32768
    char rssi[16];//整形，接收的信号强度指示 -1330~-250，无效值-32768
    char tx_power[32];//整形，最近一次的发送功率，-400~230，无效值-32768
    char tx_time[16];//整型，上行累计的发送时长，单位ms，无效值为0
    char rx_time[16];//整型，下行累计的接收时长，单位ms，无效值0
    char last_cellid[16];//十六进制字符串，上一次SIB1小区信息，十六进制28BIT的cellid,有效值为0~0xFFFFFFE,无效值为0xFFFFFFFF
    char last_ecl[16];//整型。上一次的ECL值，普通覆盖还是增强覆盖，有效值取0，1，2，
    char last_sinr[16];//整形。上一次的SINR值，有效值为-180~-300，无效值为-32768
    char last_earfcn[16];//整形，上一次的EARFCN值，对应当前服务小区的下行频点号，有效值为0~68535，无效值为-1
    char last_pci[16];//整形，上一次的PIC值，对应当前小区的物理ID，有效值为0-503，无效值为65535
    char rsrq[16];//整型，参考信号接收质量，-195~-30，无效值-32768

}Ts_Network_Service_Info_t;

extern IotFlagStruct  IotFlag_t;
extern struct tm Network_Time_t;


static void BSP_Ml307_Power_Off(void);


void BSP_Ml307r_Init(void);
void Iot_Send_Data(void);
void Ml307r_Loop(void);
void BSP_Module_Emergency_Send(uint8_t* data, uint8_t len);
void BSP_ML307_StartTimeoutTimer(void);
void BSP_ML307_SetActive(void);
void BSP_ML307_SendMessage(void);
static void BSP_Read_Module(void);
static void BSP_simcom_init(void);
static void BSP_Get_Module_Info(void);
static void BSP_Module_Connect_CtWing(void);
#endif //!@__BSP_ML307R_H__




