IoT_SCV_CH584M/bsp/inc/bsp_ml307r.h

173 lines
5.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __BSP_ML307R_H__
#define __BSP_ML307R_H__
#include "CH58x_common.h"
#include "lwrb.h"
#include "bsp_valve.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_7 //PB6
#define ML307_RST_PIN GPIO_Pin_6 //PB7
#define ML307_UART_TX_PIN GPIO_Pin_13 //PB13
#define ML307_UART_RX_PIN GPIO_Pin_12 //PB12
// MQTT服务器配置
// #define MQTT_HOST "120.25.151.173" // MQTT服务器地址
#define MQTT_HOST "8.135.10.183" // MQTT服务器地址
// #define MQTT_HOST "8.130.110.62" // MQTT服务器地址
// #define MQTT_PORT 1883 // MQTT服务器端口
#define MQTT_PORT 26866 // MQTT服务器端口
// #define MQTT_PORT 7193 // MQTT服务器端口
#define MQTT_USER "zbf_mqtt" // MQTT用户名
#define MQTT_PASS "zbf123456" // MQTT密码
#define CLIENT_ID "ZBF" // 客户端ID前缀
// MQTT主题定义
// #define MQTT_TOPIC_REV "/mkl/zw001/order/" // 订阅主题前缀后面会拼接设备SN
#define MQTT_TOPIC_REV "testrecv"
// #define MQTT_TOPIC_UP "/mkl/zw001/push/data" // 发布主题
#define MQTT_TOPIC_UP "testup" // 发布主题
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值普通覆盖还是增强覆盖有效值取012
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;
// IoT模块状态机状态枚举
typedef enum {
IOT_STATE_POWER_ON = 0, // 开机
IOT_STATE_RESTART, // 重启
IOT_STATE_SIM_CHECK, // SIM状态
IOT_STATE_GET_MODULE_INFO, // 获取模块信息
IOT_STATE_CONNECT, // 连接
IOT_STATE_SEND_DATA, // 发送数据
IOT_STATE_PROCESS // 处理
} IoT_State_t;
// 定义JSON缓冲区大小
#define JSON_BUFFER_SIZE 512
// 定义4G上报数据结构体
typedef struct {
char json_buffer[JSON_BUFFER_SIZE]; // JSON字符串缓冲区
uint16_t length; // JSON字符串长度
} Ts4GJsonData;
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(TeFrameCmd cmd);
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);
static void BSP_SendMessage(void);
uint8_t BSP_4G_Generate_Response(Ts4GJsonData *p4GData, uint32_t timestamp, TeFrameCmd responseCmd);
// 状态上报请求结构体
typedef struct {
TeFrameCmd cmd; // 命令类型
} TsIotSendRequest;
// 声明状态上报队列
extern lwrb_t iot_send_queue;
extern uint8_t iot_send_queue_buffer[sizeof(TsIotSendRequest) * 5]; // 可以存储5个请求
#endif //!@__BSP_ML307R_H__