From 63ebdb7baa2394b154854937930ee544415a040f Mon Sep 17 00:00:00 2001 From: caocong Date: Thu, 25 Dec 2025 20:25:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:TFTP=E5=8D=87=E7=BA=A7=20-=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6OK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、TFTP升级 - 配置文件初步测试没问题 ​ 2、配置文件内容解析移植完毕,调试中 ​ 3、TFTP升级 - 是否一个套接字搞定,不需要使用两个套接字,待完成 --- .settings/language.settings.xml | 2 +- BLV_485_Driver/blv_re485_dev_energymonitor.c | 10 + BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h | 102 ++ .../inc/blv_rs485_dev_energymonitor.h | 65 + Ld/Link.ld | 6 +- MCU_Driver/blv_netcomm_function.c | 1067 ++++++++++++++++- MCU_Driver/inc/blv_netcomm_function.h | 12 +- MCU_Driver/inc/rtc.h | 1 + MCU_Driver/logic_file_function.c | 28 +- MCU_Driver/rw_logging.c | 2 +- MCU_Driver/uart.c | 6 + NetLib/net_config.h | 2 +- NetLib/net_function.c | 20 +- NetLib/net_function.h | 3 +- NetLib/tftp_function.c | 46 +- NetLib/tftp_function.h | 8 + Readme.md | 16 + User/includes.h | 2 + User/main.c | 4 +- 19 files changed, 1329 insertions(+), 73 deletions(-) create mode 100644 BLV_485_Driver/blv_re485_dev_energymonitor.c create mode 100644 BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h create mode 100644 BLV_485_Driver/inc/blv_rs485_dev_energymonitor.h diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 5446086..ac427ad 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/BLV_485_Driver/blv_re485_dev_energymonitor.c b/BLV_485_Driver/blv_re485_dev_energymonitor.c new file mode 100644 index 0000000..4164989 --- /dev/null +++ b/BLV_485_Driver/blv_re485_dev_energymonitor.c @@ -0,0 +1,10 @@ +/* + * blv_re485_dev_energymonitor.c + * + * Created on: Dec 20, 2025 + * Author: cc + */ + + + + diff --git a/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h b/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h new file mode 100644 index 0000000..e7072b6 --- /dev/null +++ b/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h @@ -0,0 +1,102 @@ +/* + * blv_nor_dev_serviceinfo.h + * + * Created on: Dec 20, 2025 + * Author: cc + */ + +#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_SERVICEINFO_H_ +#define BLV_485_DRIVER_INC_BLV_NOR_DEV_SERVICEINFO_H_ + +#include +#include "blv_rs485_protocol.h" +#include "logic_file_function.h" + +#define ServiceNumMAX 64 //Ϣ + +typedef enum //± +{ + Service_Ele = 0, //0 LOOPCH01 ȡ + Service_Dnd, //1 LOOPCH02 + Service_Clean, //2 LOOPCH03 + Service_Call, //3 LOOPCH04 + Service_Wash, //4 LOOPCH05 ϴ + Service_CheckOut, //5 LOOPCH06 ˷ + Service_Wait, //6 LOOPCH07 Ժ + Service_Sos, //7 LOOPCH08 SOS + Service_Meals, //8 LOOPCH09 ԤԼ + Service_Food_Plate, //9 LOOPCH10 + Service_Luggage, //10 LOOPCH11 + Service_Strong, //11 LOOPCH12 ޿ȡſںʹ + Service_Door, //12 LOOPCH13 Ŵ + Service_Warning, //13 LOOPCH14 ʾ ھ͹ر + Service_15, //14 LOOPCH15 15 ڱ⿪͹ر + Service_16, + + Service_17, + Service_18, + Service_19, + Service_20, + Service_21, + Service_22, + Service_23, + + Service_24, + + Service_PMS_Rented, //̬ - + Service_PMS_CheckOut, //̬ - ˷ + Service_PMS_Waiting, //̬ - + Service_PMS_Vacant, //̬ - շ + Service_29, + Service_30, + Service_31, + Service_32, + Service_33, + Service_34, + Service_35, + Service_36, + Service_37, + Service_38, + Service_39, + Service_40, + Service_41, + Service_42, + Service_43, + Service_44, + Service_45, + Service_46, + Service_47, + Service_48, + Service_49, + Service_50, + Service_51, + Service_52, + Service_53, + Service_54, + Service_55, + Service_56, + Service_57, + Service_58, + Service_59, + Service_60, + Service_61, + Service_62, + Service_63, + Service_64, + + Service_Num_MAX, //ԶϢ +}Enum_Dev_Service; //豸Ϣ + +typedef struct +{ + uint8_t DevChangeFlag[ServiceNumMAX]; //豸仯־ 1 2ر ־Ҫ + uint8_t DevServiceState[ServiceNumMAX]; //ǰϢ״̬ 豸״̬仯־жϵǰϢǴ򿪻ǹر + uint8_t DevServiceStateLast[ServiceNumMAX]; //ǰϢһ״̬ + uint8_t ServiceLoopValidNum; //ϢЧ· + uint8_t is_first_power_on; //״ȡ־λ +}NOR_SERVICE_INFO; //ϢĽṹ + + + + +#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_SERVICEINFO_H_ */ diff --git a/BLV_485_Driver/inc/blv_rs485_dev_energymonitor.h b/BLV_485_Driver/inc/blv_rs485_dev_energymonitor.h new file mode 100644 index 0000000..e043747 --- /dev/null +++ b/BLV_485_Driver/inc/blv_rs485_dev_energymonitor.h @@ -0,0 +1,65 @@ +/* + * blv_rs485_dev_energymonitor.h + * + * Created on: Dec 20, 2025 + * Author: cc + */ + +#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_ENERGYMONITOR_H_ +#define BLV_485_DRIVER_INC_BLV_RS485_DEV_ENERGYMONITOR_H_ + +#include +#include "blv_rs485_protocol.h" +#include "logic_file_function.h" + +#define BLV_Energy_Bus_Type 0xF4 + +#define BLV_Energy_RecvData_LenMax 30 +#define BLV_Energy_RecvData_LenMin 8 + +#define BLV_Energy_DataHeard 0x8A +#define BLV_Energy_DataEnd 0xA8 + +#define BLV_Energy_PeriodicReport_CMD 0x01 //ϱ +#define BLV_Energy_Inquire_CMD 0x02 //ѯ +#define BLV_Energy_SetInfo_CMD 0x03 //òϢ +#define BLV_Energy_ReadVer_CMD 0x04 //òϢ +#define BLV_Energy_ClearStat_CMD 0x13 //ܺͳ + +#define BLV_Energy_Send_Flag_Max 4 +#define BLV_Energy_SetInfo_Flag 0x0001 +#define BLV_Energy_ClearStat_Flag 0x0002 +#define BLV_Energy_ReadVer_Flag 0x0004 +#define BLV_Energy_Inquire_Flag 0x0008 + +typedef struct +{ + BLV_COMM_RECORD_G comm_record; //ͨѶ¼ + + uint8_t DevSendCnt; //豸ͼ ﵽطûлظΪ + uint8_t DevOffline; //豸߱־ 1豸 0豸 + uint8_t DevOfflineLast; //豸߱־ 1豸 0豸 + + uint8_t DevSendSN; //豸ͨѶ SN + uint8_t periodic_enable; //ϱʹ״̬ + + uint16_t voltage; //ѹ + uint16_t current; // + uint32_t active_power; //й + uint32_t phase_energy; //׶ܺ + uint32_t total_energy; //ܺ + + uint32_t send_flag; //־λ + uint32_t periodic_time; //ϱʱλmS + + uint32_t inquire_tick; //ѯʱ + +}RS485_ENERGYMONITOR_INFO; + + + + + + + +#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_ENERGYMONITOR_H_ */ diff --git a/Ld/Link.ld b/Ld/Link.ld index 23d2f97..9d3c110 100644 --- a/Ld/Link.ld +++ b/Ld/Link.ld @@ -75,8 +75,7 @@ SECTIONS ASSERT(_endof_Flashlib < ORIGIN(FLASH1), "The Flash lib must maintain in 0-wait zone"); *(.text) *(.text.*) - *(.rodata) - *(.rodata*) + *(.gnu.linkonce.t.*) . = ALIGN(4); } >FLASH AT>FLASH @@ -91,6 +90,9 @@ SECTIONS *(.non_0_wait); *(.non_0_wait.*); + *(.rodata) + *(.rodata*) + . = ALIGN(4); } >FLASH1 AT>FLASH1 diff --git a/MCU_Driver/blv_netcomm_function.c b/MCU_Driver/blv_netcomm_function.c index a44d4f7..36787e7 100644 --- a/MCU_Driver/blv_netcomm_function.c +++ b/MCU_Driver/blv_netcomm_function.c @@ -52,11 +52,12 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Header(uint8_t *data,uin *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t UDP_ADD_SoftwareVer(uint8_t *data) { + //汾ųΪ20Byte uint8_t len = strlen(SoftwareVer); if(len > RCU_SoftwareVer) len = RCU_SoftwareVer; //ֹ汾 memcpy(data,SoftwareVer,len); //RCU_SoftwareVer - return len; + return RCU_SoftwareVer; //̶20Byte } /******************************************************************************* @@ -104,6 +105,10 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Add_ServerPort(uint8_t *data data[0] = server_info.dis_port & 0xFF; data[1] = (server_info.dis_port >> 8) & 0xFF; + //֮ǰC1F˿ڣǹ̶3341ùʹõ˿ڣʹ + data[0] = 0x0D; + data[1] = 0x0D; + return 0x02; } @@ -160,6 +165,37 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Mac(uint8_t *data) return 0x06; } +/******************************************************************************* +* Function Name : UDP_Add_Port +* Description : Ӷ˿ں +* Input : +* data - Ҫӵ +*******************************************************************************/ +__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Port(uint8_t *data) +{ + data[0] = 0x0D; + data[1] = 0x0D; + return 0x02; +} + +/******************************************************************************* +* Function Name : UDP_Get_FrameNum +* Description : ȡݰе֡ +* Input : +* buff - ݰ +* Return ݰе֡ +*******************************************************************************/ +uint16_t UDP_Get_FrameNum(uint8_t *buff) +{ + uint16_t frame_id = 0; + + frame_id = buff[FRAME_NO_OFFSET + 1]; + frame_id <<= 0x08; + frame_id |= buff[FRAME_NO_OFFSET]; + + return frame_id; +} + /******************************************************************************* * Function Name : UDP_Search_Ack * Description : עắ @@ -194,7 +230,7 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Search_Ack(void) sendlen += 4; sendlen += 2; //CRC16 ݳ2Byte - UDP_Add_Header(Global_Large_Buff,Search_Cmd,sendlen,0xffff); //ͷ + UDP_Add_Header(Global_Large_Buff,In_Search_Cmd,sendlen,0xffff); //ͷ NetCRC16(&Global_Large_Buff[0],sendlen); Dbg_Println(DBG_BIT_NET_STATUS_bit,"SocketId:%d , IP:%d.%d.%d.%d , port:%d",g_netinfo.SocketId[SocketIdnex_BLVSeriver],server_info.dis_ip[0],server_info.dis_ip[1],server_info.dis_ip[2],server_info.dis_ip[3],server_info.dis_port); @@ -208,6 +244,372 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Search_Ack(void) return rev; } +/******************************************************************************* +* Function Name : UDP_Subgroup_Cmd_Processing +* Description : BLVͨѶЭ - Ⱥ +* - +*******************************************************************************/ +uint8_t UDP_Subgroup_Cmd_Processing(uint8_t* data, uint16_t DataLen, uint8_t*ip, uint16_t port) +{ + uint8_t state = 0x00; + uint8_t Ret = 0x02; + uint8_t buff[6]; + uint32_t sendlen = 0; + //У鳤 + //if(DataLen != CONFIG_Cmd_Rev_Len) return Ret; + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + server_info.goal_port = port; + memcpy(server_info.goal_ip, ip, 4); + memcpy(buff, ip, 4); + buff[4] = port; + buff[5] = port >> 8; + + SRAM_DMA_Write_Buff(buff, 6, SRAM_IAP_IP_ADDRESS); //ùߵipportSRAMظʱʹ˿ڣTFTPļ׽ + + memset(&IAPVarTypeStruct_Ptr, 0, sizeof(IAPVarTypeStruct)); //IAPṹ + + IAPVarTypeStruct_Ptr.Md5[0] = data[BLV_UDP_HEAD_LEN+3]; + IAPVarTypeStruct_Ptr.Md5[1] = data[BLV_UDP_HEAD_LEN+2]; + IAPVarTypeStruct_Ptr.Md5[2] = data[BLV_UDP_HEAD_LEN+1]; + IAPVarTypeStruct_Ptr.Md5[3] = data[BLV_UDP_HEAD_LEN+0]; + + IAPVarTypeStruct_Ptr.Md5[4] = data[BLV_UDP_HEAD_LEN+7]; + IAPVarTypeStruct_Ptr.Md5[5] = data[BLV_UDP_HEAD_LEN+6]; + IAPVarTypeStruct_Ptr.Md5[6] = data[BLV_UDP_HEAD_LEN+5]; + IAPVarTypeStruct_Ptr.Md5[7] = data[BLV_UDP_HEAD_LEN+4]; + + IAPVarTypeStruct_Ptr.Md5[8] = data[BLV_UDP_HEAD_LEN+11]; + IAPVarTypeStruct_Ptr.Md5[9] = data[BLV_UDP_HEAD_LEN+10]; + IAPVarTypeStruct_Ptr.Md5[10] = data[BLV_UDP_HEAD_LEN+9]; + IAPVarTypeStruct_Ptr.Md5[11] = data[BLV_UDP_HEAD_LEN+8]; + + IAPVarTypeStruct_Ptr.Md5[12] = data[BLV_UDP_HEAD_LEN+15]; + IAPVarTypeStruct_Ptr.Md5[13] = data[BLV_UDP_HEAD_LEN+14]; + IAPVarTypeStruct_Ptr.Md5[14] = data[BLV_UDP_HEAD_LEN+13]; + IAPVarTypeStruct_Ptr.Md5[15] = data[BLV_UDP_HEAD_LEN+12]; + + IAPVarTypeStruct_Ptr.BlockSize = data[BLV_UDP_HEAD_LEN+16] + (data[BLV_UDP_HEAD_LEN+17]<<8); + IAPVarTypeStruct_Ptr.IapFileType = TFTP_IAP_DataType_CONFIG; + + if( (0 < IAPVarTypeStruct_Ptr.BlockSize) && ( IAPVarTypeStruct_Ptr.BlockSize <= CONFIG_BLOCK_MAX )) + { + Ret = 0x01; + state = TFTP_IAP_Status_Ready; // + IAPVarTypeStruct_Ptr.enable = 0x01; //TFTP IAPʼ + }else{ + Ret = 0x02; + state = TFTP_IAP_Status_Error_Block; + } + + sendlen = BLV_UDP_HEAD_LEN; + Global_Large_Buff[sendlen++] = state; + sendlen += 0x02; + UDP_Add_Header(Global_Large_Buff, In_Subgroup_Cmd, sendlen, 0xffff); + NetCRC16(&Global_Large_Buff[0], sendlen); + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], Global_Large_Buff, &sendlen, ip, port); + + return Ret; +} + +/******************************************************************************* +* Function Name : UDP_IAP_CMD_Processing +* Description : BLVͨѶЭ - IAP APPմ +*******************************************************************************/ +uint8_t Udp_Internal_BLVIAP_Logic(uint8_t* data,uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + uint8_t offset = 0x00; + uint8_t Ret = 0x02; + uint8_t buff[6]; + uint16_t frame_num = 0; + uint32_t sendlen = 0; + //У鳤 + //if(DataLen != CONFIG_Cmd_Rev_Len) return Ret; + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s",__func__); + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + frame_num = UDP_Get_FrameNum(data); + + server_info.goal_port = port; + memcpy(server_info.goal_ip, ip, 4); + memcpy(buff, ip, 4); + buff[4] = port; + buff[5] = port >> 8; + + SRAM_DMA_Write_Buff(buff, 6, SRAM_IAP_IP_ADDRESS); //ùߵipportSRAMظʱʹ˿ڣTFTPļ׽ + + memset(&IAPVarTypeStruct_Ptr, 0, sizeof(IAPVarTypeStruct)); //IAPṹ + + /*ݰֶν - + * IP4Byte + * Port: 2Byte + * MD516Byte + * File Block:2Byte + * */ + offset = BLV_UDP_HEAD_LEN + 6; + IAPVarTypeStruct_Ptr.Md5[0] = data[offset+3]; + IAPVarTypeStruct_Ptr.Md5[1] = data[offset+2]; + IAPVarTypeStruct_Ptr.Md5[2] = data[offset+1]; + IAPVarTypeStruct_Ptr.Md5[3] = data[offset+0]; + + IAPVarTypeStruct_Ptr.Md5[4] = data[offset+7]; + IAPVarTypeStruct_Ptr.Md5[5] = data[offset+6]; + IAPVarTypeStruct_Ptr.Md5[6] = data[offset+5]; + IAPVarTypeStruct_Ptr.Md5[7] = data[offset+4]; + + IAPVarTypeStruct_Ptr.Md5[8] = data[offset+11]; + IAPVarTypeStruct_Ptr.Md5[9] = data[offset+10]; + IAPVarTypeStruct_Ptr.Md5[10] = data[offset+9]; + IAPVarTypeStruct_Ptr.Md5[11] = data[offset+8]; + + IAPVarTypeStruct_Ptr.Md5[12] = data[offset+15]; + IAPVarTypeStruct_Ptr.Md5[13] = data[offset+14]; + IAPVarTypeStruct_Ptr.Md5[14] = data[offset+13]; + IAPVarTypeStruct_Ptr.Md5[15] = data[offset+12]; + + offset += 16; + IAPVarTypeStruct_Ptr.BlockSize = data[offset + 1] << 8; + IAPVarTypeStruct_Ptr.BlockSize <<= 8; + IAPVarTypeStruct_Ptr.BlockSize |= data[offset]; + + IAPVarTypeStruct_Ptr.IapFileType = TFTP_IAP_DataType_CONFIG; + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"BlockSize:%d",IAPVarTypeStruct_Ptr.BlockSize); + + sendlen = BLV_UDP_HEAD_LEN; + if( (0 < IAPVarTypeStruct_Ptr.BlockSize) && ( IAPVarTypeStruct_Ptr.BlockSize <= CONFIG_BLOCK_MAX )) + { + Ret = 0x01; + Global_Large_Buff[sendlen++] = TFTP_IAP_Status_Ready; // + IAPVarTypeStruct_Ptr.enable = 0x01; //TFTP IAPʼ + + IAPVarTypeStruct_Ptr.FunType = TFTP_FUNTYPE_LocalIAP; + IAPVarTypeStruct_Ptr.Write_Block = 0x00; + + }else{ + Ret = 0x02; + Global_Large_Buff[sendlen++] = TFTP_IAP_Status_Error_Block; + } + + sendlen += UDP_ADD_SoftwareVer(&Global_Large_Buff[sendlen]); //ӹ̼汾 + + sendlen += 0x02; + UDP_Add_Header(Global_Large_Buff, In_IAP_Cmd, sendlen, frame_num); + NetCRC16(&Global_Large_Buff[0], sendlen); + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], Global_Large_Buff, &sendlen, ip, port); + + return Ret; +} + +/******************************************************************************* +* Function Name : UDP_IAP_CMD_Processing +* Description : BLVͨѶЭ - IAP APPմ +*******************************************************************************/ +uint8_t UDP_IAP_Cmd_Processing(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + uint16_t frameno = UDP_Get_FrameNum(data); + UINT32 sendlen = 0x00; + uint8_t buff[6]; + + //Уݳ + //if(DataLen != IAP_Cmd_Rev_Len) return Ret; + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + server_info.goal_port = port; + memcpy(server_info.goal_ip, ip, 4); + memcpy(buff, ip, 4); + buff[4] = port; + buff[5] = port >> 8; + SRAM_DMA_Write_Buff(buff, 6, SRAM_IAP_IP_ADDRESS); + + memset(&IAPVarTypeStruct_Ptr, 0, sizeof(IAPVarTypeStruct)); + + IAPVarTypeStruct_Ptr.IapFileType = TFTP_IAP_DataType_APP; //ļ + + //IAP APPӦMD5 У + IAPVarTypeStruct_Ptr.Md5[0] = data[24]; + IAPVarTypeStruct_Ptr.Md5[1] = data[23]; + IAPVarTypeStruct_Ptr.Md5[2] = data[22]; + IAPVarTypeStruct_Ptr.Md5[3] = data[21]; + + IAPVarTypeStruct_Ptr.Md5[4] = data[28]; + IAPVarTypeStruct_Ptr.Md5[5] = data[27]; + IAPVarTypeStruct_Ptr.Md5[6] = data[26]; + IAPVarTypeStruct_Ptr.Md5[7] = data[25]; + + IAPVarTypeStruct_Ptr.Md5[8] = data[32]; + IAPVarTypeStruct_Ptr.Md5[9] = data[31]; + IAPVarTypeStruct_Ptr.Md5[10] = data[30]; + IAPVarTypeStruct_Ptr.Md5[11] = data[29]; + + IAPVarTypeStruct_Ptr.Md5[12] = data[36]; + IAPVarTypeStruct_Ptr.Md5[13] = data[35]; + IAPVarTypeStruct_Ptr.Md5[14] = data[34]; + IAPVarTypeStruct_Ptr.Md5[15] = data[33]; + + IAPVarTypeStruct_Ptr.BlockSize = data[38]; + IAPVarTypeStruct_Ptr.BlockSize <<= 0x08; + IAPVarTypeStruct_Ptr.BlockSize |= data[37]; + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP Md5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ + IAPVarTypeStruct_Ptr.Md5[0],IAPVarTypeStruct_Ptr.Md5[1],\ + IAPVarTypeStruct_Ptr.Md5[2],IAPVarTypeStruct_Ptr.Md5[3],\ + IAPVarTypeStruct_Ptr.Md5[4],IAPVarTypeStruct_Ptr.Md5[5],\ + IAPVarTypeStruct_Ptr.Md5[6],IAPVarTypeStruct_Ptr.Md5[7],\ + IAPVarTypeStruct_Ptr.Md5[8],IAPVarTypeStruct_Ptr.Md5[9],\ + IAPVarTypeStruct_Ptr.Md5[10],IAPVarTypeStruct_Ptr.Md5[11],\ + IAPVarTypeStruct_Ptr.Md5[12],IAPVarTypeStruct_Ptr.Md5[13],\ + IAPVarTypeStruct_Ptr.Md5[14],IAPVarTypeStruct_Ptr.Md5[15]); + + sendlen = BLV_UDP_HEAD_LEN; + if( (0 < IAPVarTypeStruct_Ptr.BlockSize) || (IAPVarTypeStruct_Ptr.BlockSize <= APP_BLOCK_MAX) ) + { + Global_Large_Buff[sendlen++] = TFTP_IAP_Status_Ready; + IAPVarTypeStruct_Ptr.enable = 0x01; + }else { + Global_Large_Buff[sendlen++] = TFTP_IAP_Status_Error_Block; + } + sendlen += 2; + UDP_Add_Header(Global_Large_Buff, In_IAP_Cmd, sendlen, frameno); + NetCRC16(Global_Large_Buff,sendlen); + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], Global_Large_Buff, &sendlen, ip, port); + + return 0x00; +} + +/******************************************************************************* +* Function Name : UDP_Search_Cmd_Processing +* Description : BLVͨѶЭ - մ +*******************************************************************************/ +uint8_t UDP_Search_Cmd_Processing(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + uint8_t Ret = 0x03; + uint16_t search_rxno = 0; + uint16_t src_port = 0; + uint32_t sendlen = 0; + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + if( (DataLen != 17) && (DataLen != 28) ) return Ret; + + search_rxno = UDP_Get_FrameNum(data); + + if(DataLen == 17) + { + Dbg_Println(DBG_BIT_NET_STATUS_bit,"עظ"); + + server_info.udp_sta = 0x02; + + server_info.active_cmd_flag |= UDP_ActSend_TimeSync_Flag; //עɹȡʱ + server_info.active_cmd_flag |= UDP_ActSend_RoomState_Flag; //עɹȡ̬ + + server_info.register_flag = 0x00; + server_info.register_num = 0x00; + server_info.register_tick = SysTick_1s; + server_info.udp_timesync_cnt = 0x00; + server_info.udp_periodic_cnt = 0x00; + server_info.udp_online_tick = SysTick_1ms; + + if(0xffff == search_rxno) //ƶ˷֡ + { + LOG_SYS_Server_Comm_State_Record(0x02); //RCUƶ˷ + server_info.online_state = 3; + }else{ + LOG_SYS_Server_Comm_State_Record(0x01); //RCUط + server_info.online_state = 2; + } + }else if(DataLen == 28) + { + //֡Ż򳤶ȲԾͷ + if(search_rxno >= 0x8000) return 0x02; + + src_port = data[25]; + src_port <<= 0x08; + src_port |= data[24]; + + if( data[19] == 0x01) + { + if((data[20] != server_info.dis_ip[0]) + || (data[21] != server_info.dis_ip[1]) + || (data[22] != server_info.dis_ip[2]) + || (data[23] != server_info.dis_ip[3]) + || (src_port != server_info.dis_port)) + { + server_info.dis_port = src_port; + server_info.dis_ip[0] = data[20]; + server_info.dis_ip[1] = data[21]; + server_info.dis_ip[2] = data[22]; + server_info.dis_ip[3] = data[23]; + } + } + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"յ"); + + sendlen = BLV_UDP_HEAD_LEN; + sendlen += UDP_Add_ServerIp(&Global_Large_Buff[sendlen]); //ĸֽڵûijɷIPַ + sendlen += UDP_Add_Subnet(&Global_Large_Buff[sendlen]); // + sendlen += UDP_Add_Gateway(&Global_Large_Buff[sendlen]); // + sendlen += UDP_Add_Port(&Global_Large_Buff[sendlen]); //RCU˿ + sendlen += UDP_Add_Mac(&Global_Large_Buff[sendlen]); //Mac + sendlen += UDP_ADD_SoftwareVer(&Global_Large_Buff[sendlen]); //ӹ̼汾 + sendlen += UDP_ADD_ConfigVer(&Global_Large_Buff[sendlen]); //ð汾 + NetCRC16(&Global_Large_Buff[0],sendlen); //CRC16 + sendlen += 0x02; + UDP_Add_Header(Global_Large_Buff,In_Search_Cmd,sendlen,0xffff); //ͷ + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &sendlen, ip, port); + } + + return 0x00; +} + +/******************************************************************************* +* Function Name : UDP_Read_MCUSystem_Cmd_Processing +* Description : +*******************************************************************************/ +uint8_t UDP_Read_MCUSystem_Cmd_Processing(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + uint16_t pack_frame = UDP_Get_FrameNum(data); + + if( data[15] == 0x01 ) + { + WCHNET_DHCPStop(); + server_info.register_tick = SysTick_1s; + server_info.register_num = 0x00; + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"init_flag:%d",server_info.init_flag); + if(server_info.init_flag ==0x00) + { + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ֱģʽDHCPDNS"); + server_info.net_sta = NET_COMPLETE; + server_info.con_flag = 0x01; + } + + server_info.con_tick = SysTick_1s; + } + + //ʱظ + server_info.ack_frame = pack_frame; + server_info.search_ack_flag = 0x01; + server_info.search_ack_tick = SysTick_1ms; + + server_info.goal_ip[0] = ip[0]; + server_info.goal_ip[1] = ip[1]; + server_info.goal_ip[2] = ip[2]; + server_info.goal_ip[3] = ip[3]; + + server_info.goal_port = port; + + return 0x00; +} + /******************************************************************************* * Function Name : UDP_Heart_Send * Description : @@ -238,7 +640,7 @@ __attribute__((section(".non_0_wait"))) uint8_t UDP_Heart_Send(void) sendlen += 0x06; sendlen += 0x02; //CRCУ鳤 - UDP_Add_Header(Global_Large_Buff,Heart_Cmd,sendlen,server_info.frame_no); //ͷ + UDP_Add_Header(Global_Large_Buff,In_Heart_Cmd,sendlen,server_info.frame_no); //ͷ NetCRC16(&Global_Large_Buff[0],sendlen); Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s..",__func__); @@ -281,6 +683,83 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_GetTime_CMD(void) return rev; } +/******************************************************************************* +* Function Name : Udp_QueryTime_Cmd_Process +* Description : ȡʱ - ظݴ +*******************************************************************************/ +uint8_t Udp_QueryTime_Cmd_Process(uint8_t *data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + uint16_t temp = 0; + S_RTC pro_rtc; + uint32_t temp_systick = 0; + uint16_t data_crc = 0x00; + + data_crc = data[DataLen-1]; + data_crc <<= 0x08; + data_crc |= data[DataLen-2]; + + if(NetCRC16_2(data,DataLen-2) != data_crc) return 0xF0; + + //ж֡Ƿһ + data_crc = data[FRAME_NO_OFFSET + 1]; + data_crc <<= 0x08; + data_crc |= data[FRAME_NO_OFFSET]; + if(data_crc != server_info.frame_no) return 0x01; + + memset(&pro_rtc,0,sizeof(pro_rtc)); + + temp = data[BLV_UDP_HEAD_LEN+1]; + temp <<= 8; + temp |= data[BLV_UDP_HEAD_LEN]; + + pro_rtc.year = temp - 2000; + pro_rtc.month = data[BLV_UDP_HEAD_LEN+2]; + pro_rtc.day = data[BLV_UDP_HEAD_LEN+3]; + pro_rtc.week = data[BLV_UDP_HEAD_LEN+4]; + pro_rtc.hour = data[BLV_UDP_HEAD_LEN+5]; + pro_rtc.minute = data[BLV_UDP_HEAD_LEN+6]; + pro_rtc.second = data[BLV_UDP_HEAD_LEN+7]; + + if(DataLen >= 27) + { + DevActionGlobal.DayStart = data[BLV_UDP_HEAD_LEN+8]; //ʼʱ 2024-08-02 + DevActionGlobal.DayEnd = data[BLV_UDP_HEAD_LEN+9]; //ʱ 2024-08-02 + } + + /*ʽתΪRTCݸʽ*/ + pro_rtc.year = DEV_Conversion_To_HEX(pro_rtc.year); + pro_rtc.month = DEV_Conversion_To_HEX(pro_rtc.month); + pro_rtc.day = DEV_Conversion_To_HEX(pro_rtc.day); + pro_rtc.week = DEV_Conversion_To_HEX(pro_rtc.week); + pro_rtc.hour = DEV_Conversion_To_HEX(pro_rtc.hour); + pro_rtc.minute = DEV_Conversion_To_HEX(pro_rtc.minute); + pro_rtc.second = DEV_Conversion_To_HEX(pro_rtc.second); + + DevActionGlobal.TimeGetFlag++; + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ͬʱ䣺20%X-%X-%X %X %X:%X:%X",pro_rtc.year,pro_rtc.month,pro_rtc.day,pro_rtc.week,pro_rtc.hour,pro_rtc.minute,pro_rtc.second); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ʱ:%d ~ %d ƫ:%d",DevActionGlobal.DayStart,DevActionGlobal.DayEnd,g_time_info.timezone); + + //ʱƫ + if(g_time_info.timezone != 0x00){ + temp_systick = RTC_Conversion_To_Unix(&pro_rtc); + temp_systick += (int)(g_time_info.timezone * 3600); + Unix_Conversion_To_RTC(&pro_rtc,temp_systick); + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʱ ʱ䣺20%X-%X-%X %X %X:%X:%X",pro_rtc.year,pro_rtc.month,pro_rtc.day,pro_rtc.week,pro_rtc.hour,pro_rtc.minute,pro_rtc.second); + } + + NetRTC_WriteDate(pro_rtc); //RTCʱ + + server_info.sync_tick = 0x01; //2023-10-08 ͬLCDʱ + DevActionGlobal.TimeSyncFlag = 0x03; //2024-08-02 ڰҹʱжϺCSIO RTC + + server_info.udp_send_flag = 0x00; //ͱ־λ + server_info.active_cmd_flag &= ~UDP_ActSend_TimeSync_Flag; //־λ + server_info.udp_online_tick = SysTick_1ms; + + return 0; +} + /******************************************************************************* * Function Name : Udp_Internal_GetRoomRent_CMD * Description : ȡ̬ @@ -307,7 +786,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_GetRoomRent_CMD(voi UDP_Add_Header(Global_Large_Buff,In_Get_RoomRent_Cmd,sendlen,server_info.frame_no); NetCRC16(&Global_Large_Buff[0],sendlen); - //Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit," ȡ̬",back_data,sendlen); + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit," ȡ̬",Global_Large_Buff,sendlen); rev = WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &sendlen, server_info.dis_ip, server_info.dis_port); @@ -605,10 +1084,19 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Read_MCU_System_Sen SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+121],4,SRAM_Register_Start_ADDRESS + Register_MandateUTC_OFFSET); SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+125],4,SRAM_Register_Start_ADDRESS + Register_MandateExpiresTime_OFFSET); SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+129],128,SRAM_Register_Start_ADDRESS + Register_RoomNumNote_OFFSET); - Flash_Read(&Global_Large_Buff[BLV_UDP_HEAD_LEN+257],64,SPIFLASH_MCU_Model_Revision_ADDRESS); - Flash_Read(&Global_Large_Buff[BLV_UDP_HEAD_LEN+321],64,SPIFLASH_MCU_Control_Revision_ADDRESS); - //temp_rev = Read_LogicFile_Information(0x04,(uint8_t *)&temp_data); //ѯLOGICļеľƵ - 32Byte + //ʱʹ + memset(temp_data,0,sizeof(temp_data)); + snprintf((char *)temp_data,sizeof(temp_data),"BLV-C1"); + memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+257],temp_data,32); + memset(temp_data,0,sizeof(temp_data)); + snprintf((char *)temp_data,sizeof(temp_data),"BLV-V9"); + memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+321],temp_data,32); + //ȡFlashеģģ + //Flash_Read(&Global_Large_Buff[BLV_UDP_HEAD_LEN+257],64,SPIFLASH_MCU_Model_Revision_ADDRESS); + //Flash_Read(&Global_Large_Buff[BLV_UDP_HEAD_LEN+321],64,SPIFLASH_MCU_Control_Revision_ADDRESS); + + temp_rev = Read_LogicFile_Information(0x04,(uint8_t *)&temp_data); //ѯLOGICļеľƵ - 32Byte if(temp_rev == 0x00) { memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+385],temp_data,32); @@ -616,7 +1104,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Read_MCU_System_Sen memset(temp_data,0,32); memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+385],temp_data,32); } - //temp_rev = Read_LogicFile_Information(0x07,(uint8_t *)&temp_data); //ѯLOGICļеķ - 32Byte + temp_rev = Read_LogicFile_Information(0x07,(uint8_t *)&temp_data); //ѯLOGICļеķ - 32Byte if(temp_rev == 0x00) { memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+417],temp_data,32); @@ -626,9 +1114,12 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Read_MCU_System_Sen } Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s ip:%d:%d:%d:%d Port:%d",__func__,ip[0],ip[1],ip[2],ip[3],port); + memcpy(server_info.goal_ip, ip, 4); + server_info.goal_port = port; + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit, "Send Buff", Global_Large_Buff, back_len); //ݴ - NetCRC16(&Global_Large_Buff[0],back_len); + NetCRC16(Global_Large_Buff,back_len); rev = WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], Global_Large_Buff, &back_len, ip, port); //SOCK_UDPS, LOG_NET_COMM_Send_Record(0x01,ip,port,&Global_Large_Buff[0],back_len); @@ -1252,10 +1743,556 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_SeriaNet_Response_T NetCRC16(&back_data[0],data_len); WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &back_data[0], &data_len, pc_ip, pc_port); + return 0x00; +} + + + +/******************************************************************************* +* Function Name : Udp_Scan_Roomstate +* Description : ɨ跿豸״̬Ƿ仯 +*******************************************************************************/ +void Udp_Scan_Roomstate(void) +{ + uint8_t temp1 = 0,temp2 = 0; + uint8_t back_data[20]; //һη󳤶 + + uint32_t write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Writeaddr),read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr); + + memset(back_data,0,20); + + //ȡַκһдֱַӸλ + if( (write_addr < SRAM_UDP_SendData_Startaddr) || (write_addr > SRAM_UDP_SendData_Endaddr) \ + || (read_addr < SRAM_UDP_SendData_Startaddr) || (read_addr > SRAM_UDP_SendData_Endaddr) ) + { + write_addr = SRAM_UDP_SendData_Startaddr; + read_addr = SRAM_UDP_SendData_Startaddr; + SRAM_Write_DW(write_addr,SRAM_UDP_SendData_Writeaddr); + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Readaddr); + } + + /*̵仯־λ - 3Byte*/ + for(uint8_t i = 0;i<3;i++) + { + temp1 = SRAM_Read_Byte(SRAM_LOG_Device_C5IO_Relay_Status + i); + temp2 = SRAM_Read_Byte(SRAM_UDP_Device_C5IO_Relay_Status + i); + + if(temp1 == temp2) continue; + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"LOG_C5IO:%d,UDP_C5IO:%d",temp1,temp2); + for(uint8_t j=0;j<8;j++) + { + if( (temp1 & (0x01<= SRAM_UDP_SendData_Endaddr) + { + Dbg_Println(DBG_BIT_NET_STATUS_bit,"SRAM_UDP_SendData_Writeaddr overstep_2 %08X!!!\r\n",write_addr); + write_addr = SRAM_UDP_SendData_Startaddr; + } + SRAM_Write_DW(write_addr,SRAM_UDP_SendData_Writeaddr); + } + } + /*Ƚɺ󣬱״̬*/ + SRAM_Write_Byte(temp1,SRAM_UDP_Device_C5IO_Relay_Status + i); + } + + if( write_addr != read_addr) + { + server_info.active_cmd_flag |= UDP_ActSend_DevState_Flag; //豸״̬ϱ ־λ + return ; + } + + /*豸ϱ - */ + write_addr = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR); + read_addr = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + + if( (write_addr < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (write_addr > SRAM_DEVICE_ONLINE_STATE_END_ADDR) \ + || (read_addr < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (read_addr > SRAM_DEVICE_ONLINE_STATE_END_ADDR) ) + { + write_addr = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + read_addr = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + SRAM_Write_DW(write_addr,SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR); + SRAM_Write_DW(read_addr,SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + } + + if( write_addr != read_addr) + { + server_info.active_cmd_flag |= UDP_ActSend_DevState_Flag; //豸״̬ϱ ־λ + } + +} + +/******************************************************************************* +* Function Name : Udp_Internal_RoomState +* Description : 豸ϱ +*******************************************************************************/ +void Udp_Internal_RoomState(void) +{ + uint32_t write_addr = 0x00,write_addr_2 = 0x00; + uint32_t read_addr = 0x00,read_addr_2 = 0x00; + + uint16_t dev_state_len = 0,dev_online_len = 0,remaining_len = 0; + UINT32 len = 0; + + if(server_info.udp_retry_cnt == 0x00) + { + //طݰ + if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000)) + { + server_info.frame_no++; + }else { + server_info.frame_no = 0x8000; + } + + //ȡ豸״̬ дַ + write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Writeaddr); + read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr); + + //ȡַκһдֱַӸλ + if( (write_addr < SRAM_UDP_SendData_Startaddr) || (write_addr > SRAM_UDP_SendData_Endaddr) \ + || (read_addr < SRAM_UDP_SendData_Startaddr) || (read_addr > SRAM_UDP_SendData_Endaddr) ) + { + write_addr = SRAM_UDP_SendData_Startaddr; + read_addr = SRAM_UDP_SendData_Startaddr; + SRAM_Write_DW(write_addr,SRAM_UDP_SendData_Writeaddr); + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Readaddr); + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Tempaddr); + } + + //ȡ豸 дַ + write_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR); + read_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + + //ȡַκһдֱַӸλ + if( (write_addr_2 < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (write_addr_2 > SRAM_DEVICE_ONLINE_STATE_END_ADDR) \ + || (read_addr_2 < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (read_addr_2 > SRAM_DEVICE_ONLINE_STATE_END_ADDR) ) + { + write_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + read_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + SRAM_Write_DW(write_addr_2,SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR); + SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); + } + + }else { + //طݰ - ȡдַ + + write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Tempaddr); //ȡһ ȡݵĽַ + read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr); + + //ȡַκһдֱַӸλ + if( (write_addr < SRAM_UDP_SendData_Startaddr) || (write_addr > SRAM_UDP_SendData_Endaddr) \ + || (read_addr < SRAM_UDP_SendData_Startaddr) || (read_addr > SRAM_UDP_SendData_Endaddr) ) + { + write_addr = SRAM_UDP_SendData_Startaddr; + read_addr = SRAM_UDP_SendData_Startaddr; + SRAM_Write_DW(write_addr,SRAM_UDP_SendData_Writeaddr); + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Readaddr); + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Tempaddr); + } + + //ȡ豸 дַ + write_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); + read_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + + //ȡַκһдֱַӸλ + if( (write_addr_2 < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (write_addr_2 > SRAM_DEVICE_ONLINE_STATE_END_ADDR) \ + || (read_addr_2 < SRAM_DEVICE_ONLINE_STATE_START_ADDR) || (read_addr_2 > SRAM_DEVICE_ONLINE_STATE_END_ADDR) ) + { + write_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + read_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + SRAM_Write_DW(write_addr_2,SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR); + SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_READ_ADDR); + SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); + } + } + + if( (write_addr == read_addr) && (write_addr_2 == read_addr_2) ) return ; + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + //ж豸״̬Ƿ񳬳 + if(write_addr > read_addr) + { + dev_state_len = write_addr - read_addr; + if(dev_state_len > SRAM_UDP_SendData_Size) dev_state_len = SRAM_UDP_SendData_Size; + } + else if(write_addr < read_addr) + { + dev_state_len = SRAM_UDP_SendData_Endaddr - read_addr; + dev_state_len += write_addr - SRAM_UDP_SendData_Startaddr; + + if(dev_state_len > SRAM_UDP_SendData_Size) dev_state_len = SRAM_UDP_SendData_Size; + } + + //ж豸Ƿ񳬳 + if(write_addr_2 > read_addr_2) + { + dev_online_len = write_addr_2 - read_addr_2; + if(dev_online_len > SRAM_UDP_SendData_Size) dev_online_len = SRAM_UDP_SendData_Size; + } + else if(write_addr_2 < read_addr_2) + { + dev_online_len = SRAM_DEVICE_ONLINE_STATE_END_ADDR - read_addr_2; + dev_online_len += write_addr_2 - SRAM_DEVICE_ONLINE_STATE_START_ADDR; + + if(dev_online_len > SRAM_UDP_SendData_Size) dev_online_len = SRAM_UDP_SendData_Size; + } + + if( (dev_state_len == 0x00) && (dev_online_len == 0x00) ) return ; //ݷ + + Dbg_Println(DBG_BIT_NET_STATUS_bit,"豸״̬仯ϱ %d ֡:%04x д:%8X :%8X",server_info.udp_retry_cnt,server_info.frame_no,write_addr,read_addr); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"豸ϱ д:%8X :%8X",write_addr_2,read_addr_2); + + len = BLV_UDP_HEAD_LEN; + Global_Large_Buff[len++] = Get_Authorize_Lock_Status(); //ϵͳ + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = 0x00; // + Global_Large_Buff[len++] = (dev_state_len / 6); //RCUϱ豸 + + if(read_addr + dev_state_len > SRAM_UDP_SendData_Endaddr) + { + remaining_len = SRAM_UDP_SendData_Endaddr - read_addr; + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],remaining_len,read_addr); + len += remaining_len; + remaining_len = dev_state_len - remaining_len; + read_addr = SRAM_UDP_SendData_Startaddr; + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],remaining_len,read_addr); + read_addr += remaining_len; + len += remaining_len; + }else { + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],dev_state_len,read_addr); + read_addr += dev_state_len; + len += dev_state_len; + if(read_addr > SRAM_UDP_SendData_Endaddr) read_addr = SRAM_UDP_SendData_Startaddr; + } + + Global_Large_Buff[len++] = (dev_online_len / 6); //RCUϱ豸 + + if(read_addr_2 + dev_online_len > SRAM_DEVICE_ONLINE_STATE_END_ADDR) + { + remaining_len = SRAM_DEVICE_ONLINE_STATE_END_ADDR - read_addr_2; + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],remaining_len,read_addr_2); + len += remaining_len; + remaining_len = dev_online_len - remaining_len; + read_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],remaining_len,read_addr_2); + read_addr_2 += remaining_len; + len += remaining_len; + }else { + SRAM_DMA_Read_Buff(&Global_Large_Buff[len],dev_online_len,read_addr_2); + read_addr_2 += dev_online_len; + len += dev_online_len; + if(read_addr_2 > SRAM_DEVICE_ONLINE_STATE_END_ADDR) read_addr_2 = SRAM_DEVICE_ONLINE_STATE_START_ADDR; + } + + SRAM_Write_DW(read_addr,SRAM_UDP_SendData_Tempaddr); //ʱȡַյظʱŽȡַλ + SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //ʱȡַյظʱŽȡַλ + + len += 2; + UDP_Add_Header(Global_Large_Buff,In_DevState_Cmd,len,server_info.frame_no); //ͷ + + NetCRC16(&Global_Large_Buff[0],len); + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"豸ϱݣ",Global_Large_Buff,len); + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &len, server_info.dis_ip, server_info.dis_port); + + LOG_NET_COMM_Send_Record(0x01,server_info.dis_ip,server_info.dis_port,&Global_Large_Buff[0],len); + +} + +/******************************************************************************* +* Function Name : Udp_Internal_RoomState_Process +* Description : 豸״̬ ظ +*******************************************************************************/ +uint8_t Udp_Internal_RoomState_Process(uint8_t *data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + /*CRCУ*/ + uint16_t data_crc = 0x00; + uint32_t temp_val = 0x00; + + data_crc = data[DataLen-1]; + data_crc <<= 0x08; + data_crc |= data[DataLen-2]; + + if(NetCRC16_2(data,DataLen-2) != data_crc) return 0xF0; + + //ж֡Ƿһ + data_crc = data[FRAME_NO_OFFSET + 1]; + data_crc <<= 0x08; + data_crc |= data[FRAME_NO_OFFSET]; + + if(data_crc != server_info.frame_no) return 0x01; + + temp_val = SRAM_Read_DW(SRAM_UDP_SendData_Tempaddr); + SRAM_Write_DW(temp_val, SRAM_UDP_SendData_Readaddr); //ַλ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Dev :%8X",__func__,temp_val); + + temp_val = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //ʱĹ϶ȡַ + SRAM_Write_DW(temp_val, SRAM_DEVICE_ONLINE_STATE_READ_ADDR); //϶ַ¸ֵ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Dev Err :%8X",__func__,temp_val); + + + //ݴϱɹһ±־λ + server_info.udp_send_flag = 0x00; //ͱ־λ + server_info.active_cmd_flag &= ~UDP_ActSend_DevState_Flag; //־λ + server_info.udp_online_tick = SysTick_1ms; + return 0x00; +} + +/******************************************************************************* +* Function Name : ServiceInfo_Get_ALL_Loop_State +* Description : Ϣ - ȡȫ·Ŀ״̬ +*******************************************************************************/ +uint8_t ServiceInfo_Get_ALL_Loop_State(uint8_t *read_buff) +{ + uint32_t dev_addr = Find_AllDevice_List_Information(Dev_Host_Service,0x00); + Device_Public_Information_G BUS_Public; // + NOR_SERVICE_INFO DevServiceInfo; //Ϣֲ + uint8_t loop_offset = 0; + uint8_t loop_ide = 0; + + if(dev_addr == 0x00) return 0x01; //δҵ豸 + + SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //й + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),dev_addr+Dev_Privately); + + if( DevServiceInfo.ServiceLoopValidNum >= ServiceNumMAX ) DevServiceInfo.ServiceLoopValidNum = ServiceNumMAX; + + for(uint8_t i=0;i= 0x8000)) + { + server_info.frame_no++; + }else{ + server_info.frame_no = 0x8000; + } + + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + sendlen = BLV_UDP_HEAD_LEN; + + Global_Large_Buff[sendlen++] = 0x01; //汾 + Global_Large_Buff[sendlen++] = DevActionGlobal.DevActionU64Cond.EleState; //ȡ״̬ + Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_CardType); //Ϣ + Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_VirtualCard); //޿߼״̬(Ӧ¼״̬) + + ServiceInfo_Get_ALL_Loop_State(&Global_Large_Buff[sendlen]); + sendlen += 8; + + Global_Large_Buff[sendlen++] = SRAM_Read_Byte( SRAM_Register_Start_ADDRESS + Register_RoomRent_OFFSET ); //PMS״̬ - 0x01:ס0x02:˷ RCU͵ + //Global_Large_Buff[sendlen++] = 0x01; //ʹ + + Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_Report_CarbonSatet); //̼״̬ - 0x01:0x00: + + /*ܺļ豸 - Ĭϣ1ַ - · 1*/ + temp_dev = Find_AllDevice_List_Information(Dev_Energy_Monitor,0x01); + + if(temp_dev != 0x00) + { + /*ǰܺ豸Ѵ */ + RS485_ENERGYMONITOR_INFO Rs485EnergyInfo; + SRAM_DMA_Read_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),temp_dev+Dev_Privately); + + Global_Large_Buff[sendlen++] = 0x01; //ϱݸ + + Global_Large_Buff[sendlen++] = Dev_Energy_Monitor; //豸 - ܺļ + Global_Large_Buff[sendlen++] = 0x01; //豸ַ - ܺļ 豸Ĭ0x01 + Global_Large_Buff[sendlen++] = 0x01; //豸· - ܺļ 豸Ĭ0x01 + Global_Large_Buff[sendlen++] = 0x00; //豸· - ܺļ 豸Ĭ0x01 + Global_Large_Buff[sendlen++] = 0x10; //豸ݳ + //ܺļ - ѹ λ:10mV + Global_Large_Buff[sendlen++] = Rs485EnergyInfo.voltage & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.voltage >> 8) & 0xFF; + //ܺļ - λ:10mA + Global_Large_Buff[sendlen++] = Rs485EnergyInfo.current & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.current >> 8) & 0xFF; + //ܺļ - й λ:mW + Global_Large_Buff[sendlen++] = Rs485EnergyInfo.active_power & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.active_power >> 8) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.active_power >> 16) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.active_power >> 24) & 0xFF; + //ܺļ - ܺ λ:Wh + Global_Large_Buff[sendlen++] = Rs485EnergyInfo.phase_energy & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.phase_energy >> 8) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.phase_energy >> 16) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.phase_energy >> 24) & 0xFF; + //ܺļ - ܺ λ:Wh + Global_Large_Buff[sendlen++] = Rs485EnergyInfo.total_energy & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.total_energy >> 8) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.total_energy >> 16) & 0xFF; + Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.total_energy >> 24) & 0xFF; + }else{ + /*ûҵܺ豸*/ + Global_Large_Buff[sendlen++] = 0x00; //ϱݸ + } + + /*ӿյ豸״̬ - ҪҵмյȻ*/ + temp_dev = Find_TempDevice_List_Information(&Global_Large_Buff[sendlen],0x05); //Ŀǰ5յ + sendlen = sendlen + (temp_dev * 0x07); + + Global_Large_Buff[29] += temp_dev; //ϱ豸 + + sendlen += 0x02; //CRCУ鳤 + UDP_Add_Header(Global_Large_Buff,In_PeriodicReport_Cmd,sendlen,server_info.frame_no); //ͷ + + NetCRC16(&Global_Large_Buff[0],sendlen); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Len:%d",__func__,sendlen); + + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"ϱ: ",Global_Large_Buff,sendlen); + + WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &sendlen, server_info.dis_ip, server_info.dis_port); + LOG_NET_COMM_Send_Record(0x01,server_info.dis_ip,server_info.dis_port,&Global_Large_Buff[0],sendlen); +} + +/******************************************************************************* +* Function Name : Udp_Internal_Periodic_Report_Process +* Description : ϱ ظ +*******************************************************************************/ +uint8_t Udp_Internal_Periodic_Report_Process(uint8_t *data, uint16_t DataLen, uint8_t *ip,uint16_t port) +{ + /*CRCУ*/ + uint16_t data_crc = 0x00; + + data_crc = data[DataLen-1]; + data_crc <<= 0x08; + data_crc |= data[DataLen-2]; + + if(NetCRC16_2(data,DataLen-2) != data_crc) return 0xF0; + + //ж֡Ƿһ + data_crc = data[FRAME_NO_OFFSET + 1]; + data_crc <<= 0x08; + data_crc |= data[FRAME_NO_OFFSET]; + if(data_crc != server_info.frame_no) return 0x01; + + //ݴϱɹһ±־λ + server_info.udp_send_flag = 0x00; //ͱ־λ + server_info.active_cmd_flag &= ~UDP_ActSend_Periodic_Flag; //־λ + server_info.udp_online_tick = SysTick_1ms; + + return 0x00; +} + +/******************************************************************************* +* Function Name : Udp_Internal_Analysis +* Description : BLVͨѶЭ - ݴ +* Input : +* data - յ +* len - յݳ +* ip - ݵIPַ +* port - ݵPort˿ +*******************************************************************************/ +void Udp_Internal_Analysis(uint8_t *data, uint32_t len, uint8_t* ip, uint16_t port) +{ + //uint8_t rev = 0; + uint16_t temp_val = 0; + + if( len < BLV_UDP_PACK_LEN ) return ; //Ȳ㣬ֱ˳ + + /*BLVͨѶЭ - Уͷ AA 55 */ + if( (data[FRAME_HEAD_OFFSET] == 0xAA) && (data[FRAME_HEAD_OFFSET + 1] == 0x55) ) + { + /*BLVͨѶЭ - У T3SA */ + if( (data[SYSTEM_ID_OFFSET] == 'T') + && (data[SYSTEM_ID_OFFSET + 1] == '3') + && (data[SYSTEM_ID_OFFSET + 2] == 'S') + && (data[SYSTEM_ID_OFFSET + 3] == 'A') ) + { + /*BLVͨѶЭ - Уݽճ */ + temp_val = data[FRAME_LEN_OFFSET +1]; + temp_val <<= 8; + temp_val |= data[FRAME_LEN_OFFSET]; + if( temp_val == len ) + { + /*BLVͨѶЭ - УCRCֵ */ + temp_val = data[len-1]; + temp_val <<= 0x08; + temp_val |= data[len-2]; + if(NetCRC16_2(data,len-2) != temp_val) return ; //CRCУʧ,ֱ˳ + + switch(data[CMD_OFFSET]) + { + case In_Search_Cmd: // + UDP_Search_Cmd_Processing(data, len, ip, port); + break; +// case In_IAP_Cmd: //IAP APP +// UDP_IAP_Cmd_Processing(data, len, ip, port); +// break; +// case In_Subgroup_Cmd: //IAP ̼ -- ȡûʹ +// UDP_Subgroup_Cmd_Processing(data, len, ip, port); +// break; + case In_Read_MCUSystem_Cmd: //ȡMCU - Ҳ + UDP_Read_MCUSystem_Cmd_Processing(data, len, ip, port); + break; + case In_QueryTime_Cmd: //ȡʱ + Udp_QueryTime_Cmd_Process(data, len, ip, port); + break; + case In_DevState_Cmd: //ϱ豸״̬ + Udp_Internal_RoomState_Process(data, len, ip, port); + break; + case In_PeriodicReport_Cmd: //ϱ + Udp_Internal_Periodic_Report_Process(data, len, ip, port); + break; + case In_BLVIAPLogic_Cmd: + Udp_Internal_BLVIAP_Logic(data, len, ip, port); + break; + default: + Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP CMD %X",data[CMD_OFFSET]); + break; + } + } + } + } + +} + /******************************************* * BLV_UDP_Comm_Task @@ -1388,7 +2425,7 @@ __attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void) server_info.udp_sta = 0x04; //뷢͵ȴ break; case 0x02: //豸״̬ϱ - - //Udp_Internal_RoomState(); + Udp_Internal_RoomState(); server_info.udp_retry_num = 0x02; //һ3 server_info.udp_retry_tick = SysTick_1ms; @@ -1396,7 +2433,7 @@ __attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void) server_info.udp_sta = 0x04; //뷢͵ȴ break; case 0x04: //ϱ - ֻһ - //Udp_Internal_Periodic_Report_PackSend(); + Udp_Internal_Periodic_Report_PackSend(); server_info.udp_idle_tick = SysTick_1ms; server_info.udp_send_flag = 0x00; @@ -1464,11 +2501,11 @@ __attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void) { temp_val = SRAM_Read_DW(SRAM_UDP_SendData_Tempaddr); SRAM_Write_DW(temp_val, SRAM_UDP_SendData_Readaddr); //ַλ - Dbg_Println(DBG_BIT_NET_STATUS_bit,"ϱ豸״̬ʧ :%8X",temp_val); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ϱ豸״̬ʧ :%X",temp_val); temp_val = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //ʱĹ϶ȡַ SRAM_Write_DW(temp_val, SRAM_DEVICE_ONLINE_STATE_READ_ADDR); //϶ַ¸ֵ - Dbg_Println(DBG_BIT_NET_STATUS_bit,"ϱ豸ʧ :%8X",temp_val); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ϱ豸ʧ :%X",temp_val); } server_info.active_cmd_flag &= ~server_info.udp_send_flag; @@ -1478,7 +2515,7 @@ __attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void) server_info.udp_retry_time += 2000; } - Dbg_Println(DBG_BIT_NET_STATUS_bit,"udp_retry:%02x - %d - %d",server_info.udp_send_flag,server_info.udp_retry_cnt,server_info.udp_retry_time); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"udp_retry:%x - %d - %d",server_info.udp_send_flag,server_info.udp_retry_cnt,server_info.udp_retry_time); } }else { //طѴޣͱ־λ @@ -1507,7 +2544,7 @@ __attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void) server_info.search_ack_tick = SysTick_1ms; server_info.search_ack_flag = 0x00; - //Udp_Internal_Read_MCU_System_SendAck(server_info.udp_ip,server_info.local_port,server_info.ack_frame); + Udp_Internal_Read_MCU_System_SendAck(server_info.goal_ip,server_info.goal_port,server_info.ack_frame); } } diff --git a/MCU_Driver/inc/blv_netcomm_function.h b/MCU_Driver/inc/blv_netcomm_function.h index cffee1d..21cb03d 100644 --- a/MCU_Driver/inc/blv_netcomm_function.h +++ b/MCU_Driver/inc/blv_netcomm_function.h @@ -19,9 +19,12 @@ #define SeriaNet_Cmd_Send_Len 19 //ͷ15Byte+ݣ2Byte+CRC2Byte -#define Search_Cmd 0x01 // -#define Heart_Cmd 0x02 // + + +#define In_Search_Cmd 0x01 // +#define In_Heart_Cmd 0x02 // #define In_QueryTime_Cmd 0x08 //ʱ +#define In_IAP_Cmd 0x0A //IAP APP #define In_RoomState_Cmd 0x0E //״̬ϱ 2025-09-25 ȡ #define In_DevCtr_Cmd 0x0F //豸̵ƺ͵ #define In_SingleAirCtrl_Cmd 0x13 //¿ @@ -40,6 +43,9 @@ #define In_SeriaNet_Cmd 0x70 //͸· #define In_SeriaNetReported_Cmd 0x71 //͸ϱ +#define In_Subgroup_Cmd 0xA2 //Ⱥ - + + #define In_Read_MCUSystem_Cmd 0xB1 //ȡϵͳϢ #define In_BLVIAP_Cmd 0xB2 //BLV_CxAϵ̣ͨļִеBLV_Cxϵе #define In_BLVIAPCheck_Cmd 0xB3 //BLV_CxУ @@ -90,6 +96,8 @@ uint8_t Udp_Internal_SeriaNet_Uploading(uint8_t port,uint32_t baud,uint32_t data uint8_t Udp_Internal_SeriaNet_Uploading2(uint8_t port,uint32_t baud,uint8_t* data, uint16_t DataLen); uint8_t Udp_Internal_SeriaNet_Response_Timeout(void); +void Udp_Internal_Analysis(uint8_t *data, uint32_t len, uint8_t* ip, uint16_t port); + void BLV_UDP_Comm_Task(void); #endif /* MCU_DRIVER_INC_BLV_NETCOMM_FUNCTION_H_ */ diff --git a/MCU_Driver/inc/rtc.h b/MCU_Driver/inc/rtc.h index 14244a6..3650279 100644 --- a/MCU_Driver/inc/rtc.h +++ b/MCU_Driver/inc/rtc.h @@ -48,6 +48,7 @@ uint32_t RTC_Conversion_To_Unix(S_RTC *rtc_time); void Unix_Conversion_To_RTC(S_RTC *rtc_time,uint32_t utc_tick); uint8_t RTC_ReadDate(S_RTC *psRTC); uint8_t RTC_WriteDate(S_RTC SetRTC); +uint8_t NetRTC_WriteDate(S_RTC SetRTC); void RTC_TASK(void); uint8_t RTC_TimeDate_Correct_Figure(uint8_t data); diff --git a/MCU_Driver/logic_file_function.c b/MCU_Driver/logic_file_function.c index 54c2e2b..38ee9d5 100644 --- a/MCU_Driver/logic_file_function.c +++ b/MCU_Driver/logic_file_function.c @@ -1131,7 +1131,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Read_LogicFile_Information(uint8 if(temp != LOGIC_DataFlag) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"߼ļ־λ:%08X",temp); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"߼ļ־λ:%X",temp); return 0x01; } @@ -1145,7 +1145,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Read_LogicFile_Information(uint8 if((file_len != 0x00) &&(file_len > 0x70000)) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"߼ļȲ:%08X",file_len); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"߼ļȲ:%X",file_len); return 0x01; } @@ -1155,9 +1155,9 @@ __attribute__((section(".non_0_wait"))) uint8_t Read_LogicFile_Information(uint8 { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5Уɹ!"); }else { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5У󣬲 Len:%08X",file_len); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ʧܣMd5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"File Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X",\ + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5У󣬲 Len:%X",file_len); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ʧܣMd5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X%X,%X,%X,%X,%X,%X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"File Md5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ file_info[8],file_info[9],\ file_info[10],file_info[11],\ file_info[12],file_info[13],\ @@ -2968,20 +2968,20 @@ __attribute__((section(".non_0_wait"))) void LOGIC_FILE_Analysis(LOGICFILE_Conte switch(Temp_Flash_Buff[Logic_D_FrameType]) { case Logic_FrameType_LogicInfo: - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_LogicInfo - ߼Ϣ"); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_LogicInfo - ߼Ϣ"); Logic_FrameType_LogicInfo_TempProcessing(&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); break; case Logic_FrameType_Global: - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_Global - ȫϢ"); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_Global - ȫϢ"); Logic_FrameType_Global_TempProcessing(&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); break; case Logic_FrameType_DeviceExist: - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_DeviceExist - 豸"); - Logic_FrameType_DeviceExist_TempProcessing(read_addr,Lfile_info,&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_DeviceExist - 豸"); + //Logic_FrameType_DeviceExist_TempProcessing(read_addr,Lfile_info,&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); break; case Logic_FrameType_DeviceAction: - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_DeviceAction - 豸"); - Logic_FrameType_DeviceAction_TempProcessing(read_addr,Lfile_info,&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic_FrameType_DeviceAction - 豸"); + //Logic_FrameType_DeviceAction_TempProcessing(read_addr,Lfile_info,&Temp_Flash_Buff[Logic_D_Para],temp_len - Logic_D_Para); break; #if RS485_MUSIC_BLW_Flag case Logic_FrameType_VoiceMap: @@ -3561,9 +3561,9 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5Уɹ!"); }else { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5У󣬲 Len:%08X",file_len); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ʧܣMd5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"UDP Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X",\ + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5У󣬲 Len:%X",file_len); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"ʧܣMd5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"UDP Md5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ file_info[8],file_info[9],\ file_info[10],file_info[11],\ file_info[12],file_info[13],\ diff --git a/MCU_Driver/rw_logging.c b/MCU_Driver/rw_logging.c index e8a84e0..a41a4d3 100644 --- a/MCU_Driver/rw_logging.c +++ b/MCU_Driver/rw_logging.c @@ -151,7 +151,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Log_write_sram(uint8_t data_type /*ˢ־дַ*/ Last_add = Last_add + write_len; Set_Log_Current_Address(Last_add); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"SRAM LOG Addr : %08X",Last_add); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"SRAM LOG Addr : %X",Last_add); return 0; } diff --git a/MCU_Driver/uart.c b/MCU_Driver/uart.c index ebe59af..8c9b2d3 100644 --- a/MCU_Driver/uart.c +++ b/MCU_Driver/uart.c @@ -270,7 +270,13 @@ __attribute__((section(".non_0_wait"))) void UART1_RECEIVE(void) Dbg_Println(DBG_BIT_SYS_STATUS_bit,"UART_1 Len %d ",g_uart[UART_1].RecvLen); Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"UART_1 Buff:", g_uart[UART_1].RecvBuffer,g_uart[UART_1].RecvLen); + //ݴSRAMݴ - ݽͷдݳ + SRAM_Write_Byte((uint8_t)(g_uart[UART_1].RecvLen & 0xFF),g_uart[UART_1].RX_Buffer_WriteAddr); + SRAM_Write_Byte((uint8_t)((g_uart[UART_1].RecvLen >> 8) & 0xFF),g_uart[UART_1].RX_Buffer_WriteAddr+1); + SRAM_DMA_Write_Buff(g_uart[UART_1].RecvBuffer,g_uart[UART_1].RecvLen,g_uart[UART_1].RX_Buffer_WriteAddr+2); + g_uart[UART_1].RX_Buffer_WriteAddr += SRAM_Uart_Buffer_Size; + if(g_uart[UART_1].RX_Buffer_WriteAddr > SRAM_UART1_RecvBuffer_End_Addr) g_uart[UART_1].RX_Buffer_WriteAddr = SRAM_UART1_RecvBuffer_Start_Addr; g_uart[UART_1].RecvLen = 0; g_uart[UART_1].Receiving = 0; diff --git a/NetLib/net_config.h b/NetLib/net_config.h index a65fce2..da906a1 100644 --- a/NetLib/net_config.h +++ b/NetLib/net_config.h @@ -31,7 +31,7 @@ extern "C" { /* The number of sockets, the maximum is 31 */ #define WCHNET_MAX_SOCKET_NUM (WCHNET_NUM_IPRAW+WCHNET_NUM_UDP+WCHNET_NUM_TCP+WCHNET_NUM_TCP_LISTEN) -#define WCHNET_TCP_MSS 768 /* Size of TCP MSS Ĭ:1460*/ +#define WCHNET_TCP_MSS 1460 /* Size of TCP MSS Ĭ:1460*/ #define WCHNET_NUM_POOL_BUF (WCHNET_NUM_TCP*2+2) /* The number of POOL BUFs, the number of receive queues */ diff --git a/NetLib/net_function.c b/NetLib/net_function.c index 61eef31..d9fa58e 100644 --- a/NetLib/net_function.c +++ b/NetLib/net_function.c @@ -18,7 +18,7 @@ uint16_t srcport = 1000; //source port uint8_t SocketId; uint8_t socket[WCHNET_MAX_SOCKET_NUM]; //Save the currently connected socket -uint8_t SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][RECE_BUF_LEN]; //socket receive buffer +uint8_t SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][1472]; //socket receive buffer //豸Ϣ WCHNET_INFO_T g_netinfo = { @@ -94,7 +94,7 @@ void TIM2_IRQHandler(void) * cb - socketص * Return : None *******************************************************************************/ -__attribute__((section(".non_0_wait"))) void WCHNET_CreateUdpSocket(uint8_t* S, uint16_t SourPort, pSockRecv cb) +void WCHNET_CreateUdpSocket(uint8_t *S, uint16_t SourPort, pSockRecv cb) { uint8_t i; SOCK_INF TmpSocketInf; /* ʱsocket */ @@ -112,7 +112,7 @@ __attribute__((section(".non_0_wait"))) void WCHNET_CreateUdpSocket(uint8_t* S, i = WCHNET_SocketCreat(S, &TmpSocketInf); /* socketصsocketSocketId */ mStopIfError(i); - WCHNET_ModifyRecvBuf(SocketId, (uint32_t) SocketRecvBuf[SocketId], RECE_BUF_LEN); + WCHNET_ModifyRecvBuf(*S, (uint32_t) SocketRecvBuf[*S], RECE_BUF_LEN); Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s - %d",__func__, *S); } @@ -152,9 +152,9 @@ void UDPSocket1_AppCallBack( struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16 ip[3] = ipaddr>>24; Dbg_Println(DBG_BIT_NET_STATUS_bit,"ip:%d.%d.%d.%d, port:%d",ip[0], ip[1], ip[2], ip[3], port); - Dbg_Println(DBG_BIT_NET_STATUS_bit,"Socket1 len:%ld",len); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"Socket1 len:%d",len); + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"Recv data:",buff,len); - Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"data :",buff,len); //Udp_Internal_Analysis(buff, len, ip, port); if(buff[0] == 0xAA) @@ -162,7 +162,7 @@ void UDPSocket1_AppCallBack( struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16 switch(buff[1]) { case 0x55: //ɵķЭ - //Udp_Internal_Analysis(buff, len, ip, port); + Udp_Internal_Analysis(buff, len, ip, port); break; case 0x66: //UDPЭ - 2022-05-31 //UDP_NetServer_Data_Analysis(buff, len, ip, port); @@ -1055,13 +1055,6 @@ __attribute__((section(".non_0_wait"))) void NetWork_Task(void) //Udp_Internal_Task(); //ã - if(SysTick_1s - server_info.con_tick > 10) - { - //ʹ - server_info.con_tick = SysTick_1s; - Dbg_Println(DBG_BIT_NET_STATUS_bit,"紦...\n"); - } - /* -ֱʱ * -ֱ״̬£PC߻ڷͲѯ * */ @@ -1087,7 +1080,6 @@ __attribute__((section(".non_0_wait"))) void NetWork_Task(void) /*ͷ׽*/ Dbg_Println(DBG_BIT_NET_STATUS_bit,"ͷ׽"); WCHNET_SocketClose(g_netinfo.SocketId[SocketIdnex_BLVSeriver],0x00); - } break; diff --git a/NetLib/net_function.h b/NetLib/net_function.h index bc0a132..acf8971 100644 --- a/NetLib/net_function.h +++ b/NetLib/net_function.h @@ -118,7 +118,8 @@ typedef struct uint16_t goal_port; //Ŀport uint16_t dis_port; //ƶ˷˿ uint16_t frame_no; //͵֡ - uint16_t ack_frame; //ACK֡ + uint16_t ack_frame; //ACK֡ - ϱ֡ + uint16_t udp_frame; //UDPͨѶյ֡ uint16_t udp_timesync_cnt; //ʱͬ - 1sһ uint16_t udp_periodic_cnt; //ϱ - 1sһ diff --git a/NetLib/tftp_function.c b/NetLib/tftp_function.c index ef5d197..21ee476 100644 --- a/NetLib/tftp_function.c +++ b/NetLib/tftp_function.c @@ -53,9 +53,9 @@ __attribute__((section(".non_0_wait"))) uint16_t TFTP_Pack_Get_Block(uint8_t *bu { uint16_t temp = 0x00; - temp = buf[3]; + temp = buf[2]; temp <<= 8; - temp |= buf[4]; + temp |= buf[3]; return temp; } @@ -94,7 +94,7 @@ __attribute__((section(".non_0_wait"))) uint8_t TFTP_send_ack_packet(uint8_t s, { uint8_t err = 0; uint32_t sendlen = TFTP_ACK_PKT_LEN; - char packet[TFTP_ACK_PKT_LEN]; + uint8_t packet[24]; /* define the first two bytes of the packet */ if(1 == IAPVarTypeStruct_Ptr.IapErrFlag) TFTP_Pack_Set_Opcode(packet,TFTP_ERROR); @@ -102,8 +102,10 @@ __attribute__((section(".non_0_wait"))) uint8_t TFTP_send_ack_packet(uint8_t s, TFTP_Pack_Set_Block(packet, block); - Dbg_Println(DBG_BIT_NET_STATUS_bit,"TFTP ACK packet -- SocketId:%d , port:%d ,block:%ld len:%ld , IP:%d.%d.%d.%d",s,to_port,block,sendlen,to_ip[0],to_ip[1],to_ip[2],to_ip[3]); - err = WCHNET_SocketUdpSendTo(s, (uint8_t *)&packet[0], &sendlen, to_ip, to_port); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"TFTP ACK packet -- SocketId:%d , port:%d ,block:%d len:%d , IP:%d.%d.%d.%d",s,to_port,block,sendlen,to_ip[0],to_ip[1],to_ip[2],to_ip[3]); + Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit, "Send Data: ", packet, sendlen); + + err = WCHNET_SocketUdpSendTo(s, packet, &sendlen, to_ip, to_port); return err; } @@ -128,7 +130,7 @@ __attribute__((section(".non_0_wait"))) uint8_t IAP_tftp_process_write(uint8_t s IAPVarTypeStruct_Ptr.TotalCount =0; IAPVarTypeStruct_Ptr.IapErrFlag = 0; - + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ip:%d.%d.%d.%d, port:%d",to_ip[0], to_ip[1], to_ip[2], to_ip[3], to_port); /*BLV_C1 -- Flashݣ֤֮ٲͬʱSRAMедflash*/ if(IAPVarTypeStruct_Ptr.IapFileType == TFTP_IAP_DataType_APP) { @@ -145,7 +147,7 @@ __attribute__((section(".non_0_wait"))) uint8_t IAP_tftp_process_write(uint8_t s return 0x01; } - TFTP_send_ack_packet(s, to_ip, to_port, tftp_args.block); + TFTP_send_ack_packet(g_netinfo.SocketId[SocketIdnex_TFTPDATA], to_ip, to_port, tftp_args.block); //ʹ׽ return 0x00; } @@ -167,7 +169,9 @@ __attribute__((section(".non_0_wait"))) void TFTP_IAP_Data_Processing(uint8_t s, IAPVarTypeStruct_Ptr.IapPercent++; IAPVarTypeStruct_Ptr.processing_tick = SysTick_1ms; - if( (pkt_buf_len > TFTP_DATA_PKT_HDR_LEN) && (TFTP_Pack_Get_Block(pkt_buf) == (IAPVarTypeStruct_Ptr.Write_Block + 1) ) ) + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s block:%d - %d",__func__,IAPVarTypeStruct_Ptr.Write_Block,TFTP_Pack_Get_Block(pkt_buf)); + + if( (pkt_buf_len > TFTP_DATA_PKT_HDR_LEN) && ( TFTP_Pack_Get_Block(pkt_buf) == (IAPVarTypeStruct_Ptr.Write_Block + 1) ) ) { pkt_buf_len = pkt_buf_len - TFTP_DATA_PKT_HDR_LEN; memset(data_buffer,0,TFTP_DATA_LEN_MAX); @@ -368,9 +372,9 @@ __attribute__((section(".non_0_wait"))) void TFTP_IAP_Data_Processing(uint8_t s, // } IAPVarTypeStruct_Ptr.IapErrFlag = 1; - Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʧܣMd5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X", \ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʧܣMd5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X", \ md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); - Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X", \ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP Md5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X", \ IAPVarTypeStruct_Ptr.Md5[0],IAPVarTypeStruct_Ptr.Md5[1], \ IAPVarTypeStruct_Ptr.Md5[2],IAPVarTypeStruct_Ptr.Md5[3], \ IAPVarTypeStruct_Ptr.Md5[4],IAPVarTypeStruct_Ptr.Md5[5], \ @@ -422,8 +426,8 @@ __attribute__((section(".non_0_wait"))) void TFTP_IAP_Data_Processing(uint8_t s, memcpy(&data_buffer[8],IAPVarTypeStruct_Ptr.Md5,16); Flash_Write(data_buffer,24,SPIFLASH_LOGIC_DataFlag_ADDRESS); - Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,""); - LOG_LogicInfo_DebugRecord("λ"); + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ļ "); + LOG_LogicInfo_DebugRecord("ļ λ"); }else{ // switch(IAPVarTypeStruct_Ptr->IapType) // { @@ -436,9 +440,9 @@ __attribute__((section(".non_0_wait"))) void TFTP_IAP_Data_Processing(uint8_t s, // } IAPVarTypeStruct_Ptr.IapErrFlag = 1; - Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʧܣMd5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X",\ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"ʧܣMd5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); - Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X",\ + Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP Md5:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ IAPVarTypeStruct_Ptr.Md5[0],IAPVarTypeStruct_Ptr.Md5[1],\ IAPVarTypeStruct_Ptr.Md5[2],IAPVarTypeStruct_Ptr.Md5[3],\ IAPVarTypeStruct_Ptr.Md5[4],IAPVarTypeStruct_Ptr.Md5[5],\ @@ -461,7 +465,7 @@ __attribute__((section(".non_0_wait"))) void TFTP_IAP_Data_Processing(uint8_t s, * Function Name : UDPSocket_TFTP_CMD_AppCallBack * Description : TFTP׽ - ݴص *******************************************************************************/ -__attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_CMD_AppCallBack(struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16_t port,uint8_t *buff,uint32_t len) +void UDPSocket_TFTP_CMD_AppCallBack(struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16_t port,uint8_t *buff,uint32_t len) { uint8_t ip_addr[4]; ip_addr[0] = ipaddr & 0xFF; @@ -469,7 +473,7 @@ __attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_CMD_AppCallBack(stru ip_addr[2] = (ipaddr >> 16) & 0xFF ; ip_addr[3] = (ipaddr >> 24) & 0xFF ; - Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s len:%ld",__func__,len); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s len:%d",__func__,len); Dbg_Println(DBG_BIT_NET_STATUS_bit,"ip:%d.%d.%d.%d, port:%d",ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], port); /*TFTP */ @@ -483,7 +487,7 @@ __attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_CMD_AppCallBack(stru IAP_tftp_process_write(g_netinfo.SocketId[SocketIdnex_TFTPCMD], ip_addr, port); //ظ дļָ }else{ - + Dbg_Println(DBG_BIT_NET_STATUS_bit,"TFTP Type:%d",IAPVarTypeStruct_Ptr.FunType); } }else if( TFTP_Pack_Get_Opcode(buff) == TFTP_OPTION ) @@ -501,7 +505,7 @@ __attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_CMD_AppCallBack(stru * Function Name : UDPSocket_TFTP_DATA_AppCallBack * Description : TFTP׽ - ݴص *******************************************************************************/ -__attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_DATA_AppCallBack(struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16_t port,uint8_t *buff,uint32_t len) +void UDPSocket_TFTP_DATA_AppCallBack(struct _SOCK_INF * SocketInf,uint32_t ipaddr,uint16_t port,uint8_t *buff,uint32_t len) { uint8_t ip_addr[4]; ip_addr[0] = ipaddr & 0xFF; @@ -509,7 +513,7 @@ __attribute__((section(".non_0_wait"))) void UDPSocket_TFTP_DATA_AppCallBack(str ip_addr[2] = (ipaddr >> 16) & 0xFF ; ip_addr[3] = (ipaddr >> 24) & 0xFF ; - Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s len:%ld",__func__,len); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s len:%d",__func__,len); Dbg_Println(DBG_BIT_NET_STATUS_bit,"ip:%d.%d.%d.%d, port:%d",ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3], port); if( TFTP_Pack_Get_Opcode(buff) == TFTP_DATA ) //TFTP IAPļ @@ -564,7 +568,7 @@ __attribute__((section(".non_0_wait"))) void Internal_TFTP_Task(void) case STA_INIT_IDLE: //ƶ˷Ͷȡļ - if( SysTick_1ms - IAPVarTypeStruct_Ptr.processing_tick > TFTP_IAP_Timeout) //ʱͷ׽ + if( SysTick_1ms - IAPVarTypeStruct_Ptr.processing_tick > 30000) //ʱͷ׽ { //Cloud_IAP_Plan_SendPack(tftp_args,IAPVarTypeStruct_Ptr,IAPPlan_State_IAPTimeout); //IAP - ʱ @@ -587,7 +591,7 @@ __attribute__((section(".non_0_wait"))) void Internal_TFTP_Task(void) IAPVarTypeStruct_Ptr.enable = 0x00; break; default: - IAPVarTypeStruct_Ptr.status = STA_END; //ͷ׽ + IAPVarTypeStruct_Ptr.status = STA_INIT_WAIT; //ͷ׽ break; } diff --git a/NetLib/tftp_function.h b/NetLib/tftp_function.h index c7f170f..9cf53b3 100644 --- a/NetLib/tftp_function.h +++ b/NetLib/tftp_function.h @@ -38,6 +38,13 @@ #define TFTP_IAP_DataType_APP 0x01 //IAP - APP̼ #define TFTP_IAP_DataType_CONFIG 0x02 //IAP - ļ +#define TFTP_IAP_Status_Ready 0x00 // +#define TFTP_IAP_Status_Finish 0x01 // +#define TFTP_IAP_Status_Error 0x02 // +#define TFTP_IAP_Status_Error_Block 0x03 // +#define TFTP_IAP_Status_Error_File 0x04 //ļ +#define TFTP_IAP_Status_Error_Md5 0x05 //MD5ֵ + typedef enum { TFTP_RRQ = 1, @@ -97,6 +104,7 @@ typedef struct uint32_t last_time; }tftp_connection_args; +extern IAPVarTypeStruct IAPVarTypeStruct_Ptr; void Internal_TFTP_Task(void); diff --git a/Readme.md b/Readme.md index 58949f1..96e5761 100644 --- a/Readme.md +++ b/Readme.md @@ -1,3 +1,19 @@ +#### 2025-12-25 + +​ 1、TFTP升级 - 配置文件初步测试没问题 + +​ 2、配置文件内容解析移植完毕,调试中 + +​ 3、TFTP升级 - 是否一个套接字搞定,不需要使用两个套接字 + + + +#### 2025-12-10 + +​ 1、TFTP IAP升级功能移植完毕,待测试 + +​ 2、优化代码编译的空间问题,目前零等待区的空间已满,需将除了库函数以外的代码及相关变量全部放置非零等待区中,否则项目编译不成功 + #### 2025-12-06 1. 动作执行函数初步实现完毕 - 待测试 diff --git a/User/includes.h b/User/includes.h index 6066622..3530c12 100644 --- a/User/includes.h +++ b/User/includes.h @@ -49,6 +49,8 @@ #include "blv_nor_dec_virtualcard.h" #include "blv_nor_dev_hvoutfun.h" #include "blv_nor_dev_lvinput.h" +#include "blv_nor_dev_serviceinfo.h" +#include "blv_rs485_dev_energymonitor.h" #include "blv_rs485_dev_switchctrl.h" #include "blv_rs485_dev_tempctrl.h" diff --git a/User/main.c b/User/main.c index 698bee0..a6cd346 100644 --- a/User/main.c +++ b/User/main.c @@ -46,6 +46,8 @@ int main(void) Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU Start!! 2025-11-03-10:42\r\n"); Dbg_Println(DBG_BIT_SYS_STATUS_bit,"SystemClk:%d\r\n", SystemCoreClock); + BLV_DevAction_AllData_Init(); + while (1) { SYS_LED_Task(); @@ -58,7 +60,7 @@ int main(void) if(SysTick_1ms - test_tick >= 10000){ test_tick = SysTick_1ms; - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"RUN PYH:%x...\r\n",ETH_ReadPHYRegister(PHY_ADDRESS, PHY_BSR)); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"RUN PYH:%x...\r\n",ETH_ReadPHYRegister(PHY_ADDRESS, PHY_BSR)); }