#include "bsp.h" #include "includes.h" MqttIdPort mqttidport; ////////////////////////////////////////////////////////////////////////////////////// sequeue_t *uart0_rx_sq; sequeue_t *uart3_rx_sq; FirmwareMsg g_firmwareMsg; // 网关 采集器固件信息存储 /*! * \brief 创建串口接收队列 * \param 无 */ void creat_uart_queue(void) { uart0_rx_sq = Create_Empty_Sequeue(5,256); // if(uart0_rx_sq==NULL) // printf("error,usart0_rx_sq\r\n"); // else // printf("success,usart0_rx_sq\r\n"); uart3_rx_sq = Create_Empty_Sequeue(5,256); // if(uart3_rx_sq==NULL) // printf("error,usart3_rx_sq\r\n"); // else // printf("success,usart3_rx_sq\r\n"); } //读取UUID void get_mcu_uuid(void) { uint32_t mcuID[3]; mcuID[0] = *(volatile uint32_t*)(GD32F10X_ID_ADDR); mcuID[1] = *(volatile uint32_t*)(GD32F10X_ID_ADDR+4); mcuID[2] = *(volatile uint32_t*)(GD32F10X_ID_ADDR+8); memcpy(g_firmwareMsg.gatewayMsg.Uuid,(uint8_t *)mcuID,12); } //读mcu的类型 void get_mcu_TypeIdcode(void) { uint32_t mcutypeID=0; mcutypeID = *(volatile uint32_t*)(GD32F10X_TYPE_ADDR); g_firmwareMsg.gatewayMsg.devicTypeID = (uint16_t)(mcutypeID&0xFFFF); } /*------------------------------------------------ * 清空EEPROM的存储空间 * ------------------------------------------------*/ void fram_init(void) { uint8_t buff[64] = {0}; int i = 0; memset(buff,0,sizeof(buff)); for(i=0;i<256;i++){ AT24CXX_Write(i*64,buff,sizeof(buff)); fwdgt_counter_reload();//喂狗 } // fram_write_eeprom_powerUpFlag(); } /*---------------------------------------------- * 是否第一次上电 的写入 * ---------------------------------------------*/ void fram_write_eeprom_powerUpFlag(void) { uint16_t version = 0x5A5A; AT24CXX_Write(FRAM_FIRST_POWER_ON,(uint8_t*)&version,sizeof(uint16_t)); } /*---------------------------------------------- * 是否第一次上电 读取 * ---------------------------------------------*/ uint16_t fram_read_eeprom_powerUpFlag(void) { uint16_t version = 0; AT24CXX_Read(FRAM_FIRST_POWER_ON,(uint8_t*)&version,sizeof(uint16_t)); return version; } /*---------------------------------------------- * EEPROM 版本号的写入 * ---------------------------------------------*/ void fram_write_eeprom_version(void) { uint8_t version = 0x01; AT24CXX_Write(FRAM_VERSION,&version,1); } /*---------------------------------------------- * EEPROM 版本号的读取 * ---------------------------------------------*/ uint8_t fram_read_eeprom_version(void) { uint8_t version = 0; AT24CXX_Read(FRAM_VERSION,&version,1); return version; } /*------------------------------------------------- * mqqtt ip prot的初始化 * ----------------------------------------------------*/ void fram_init_mqtt_msg(void) { MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport); mqttMsg->flag = 0; memset(mqttMsg,0,sizeof(MqttIdPort)); AT24CXX_Write(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort)); } /*------------------------------------------------- * mqqtt ip prot的写 入 * ----------------------------------------------------*/ void fram_write_mqtt_msg(void) { MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport); AT24CXX_Write(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort)); } /*------------------------------------------------- * mqqtt ip prot的读取 * ----------------------------------------------------*/ void fram_read_mqtt_msg(void) { MqttIdPort *mqttMsg = &(g_firmwareMsg.mqttidport); memset(&(g_firmwareMsg.mqttidport),0,sizeof(MqttIdPort)); AT24CXX_Read(FRAM_MQTT_MSG,(uint8_t*)mqttMsg,sizeof(MqttIdPort)); mqttMsg->port[5] = 0; mqttMsg->ip[31] = 0; mqttMsg->admin[7] = 0; mqttMsg->password[15] = 0; } /*----------------------------------------------- * 网关的硬件信息读取 * -----------------------------------------------*/ void fram_read_hardware_msg(void) { GateHareWareMsg *msg = &(g_firmwareMsg.gatewayMsg.hardwareMsg); memset(&(g_firmwareMsg.gatewayMsg.hardwareMsg),0,sizeof(GateHareWareMsg)); AT24CXX_Read(DEVICE_PUBLIC_INFO_ADDR,(uint8_t*)msg,sizeof(GateHareWareMsg)); } /*----------------------------------------------- * 网关的硬件信息写入 * -----------------------------------------------*/ void fram_write_hardware_msg(void) { GateHareWareMsg *msg = &(g_firmwareMsg.gatewayMsg.hardwareMsg); AT24CXX_Write(DEVICE_PUBLIC_INFO_ADDR,(uint8_t*)msg,sizeof(GateHareWareMsg)); } /*------------------------------------------------------ * 产测软件版本的信息初始化 * 固件信息格式 :DDDDFNNN: * DDDD(设备类型):0x0101:网关A 0x0102:网关B 0x0201:采集器1 0x0202:采集器2 * F(固件类型):0x01:bootloader版本 0x02:pt版本 0x03:app版本 0xF:合成版本 * NNN:0x001 表示第1个版本 0x002:表示第2个版本 * -----------------------------------------------------*/ void fram_init_version(void) { fram_read_version(); if(SOFTWARE_VERSION_PT !=g_firmwareMsg.gatewayMsg.verMsg.pt_version){ g_firmwareMsg.gatewayMsg.verMsg.pt_version = SOFTWARE_VERSION_PT; fram_write_version(); } } /*---------------------------------------------------- * 网关 版本信息的读取 * ---------------------------------------------------*/ void fram_write_version(void) { GateVersionMsg *msg = NULL; msg = &(g_firmwareMsg.gatewayMsg.verMsg); AT24CXX_Write(DEVICE_VERSION_INFO_ADDR,(uint8_t*)msg,sizeof(GateVersionMsg)); } /*---------------------------------------------------- * 网关 版本信息的读取 * ---------------------------------------------------*/ void fram_read_version(void) { GateVersionMsg *msg = NULL; memset(&(g_firmwareMsg.gatewayMsg.verMsg),0,sizeof(GateVersionMsg)); msg = &(g_firmwareMsg.gatewayMsg.verMsg); AT24CXX_Read(DEVICE_VERSION_INFO_ADDR,(uint8_t*)msg,sizeof(GateVersionMsg)); // fram_init_version(); } //////////////////////////////////////////////////////////////////////////////////////