Files
RCU_C1P_Module/MCU_Driver/blv_netcomm_function.c

2523 lines
99 KiB
C
Raw Normal View History

/*
* BLV_NETCOMM_Function.c
*
* Created on: Nov 3, 2025
* Author: cc
*/
#include "includes.h"
#include <string.h>
uint8_t Global_Large_Buff[1100] = {0}; //<2F><><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ⲿSRAMӳ<4D><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
uint32_t ProjectCode = 1001; //ģ<><C4A3><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
uint8_t Versions[4] = {0,0,0,0}; //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ð汾
/*******************************************************************************
* Function Name : UDP_Add_Header
* Description : <EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ͨѶЭ<EFBFBD><EFBFBD>ͷ
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* cmd - ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* length - ͨѶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* frame_no - ͨѶ֡<EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Header(uint8_t *data,uint8_t cmd,uint16_t length, uint16_t frame_no)
{
uint8_t len = 0x00;
data[len++] = 0xAA;
data[len++] = 0x55;
data[len++] = length%256;
data[len++] = length/256;
data[len++] = 'T';
data[len++] = '3';
data[len++] = 'S';
data[len++] = 'A';
data[len++] = cmd;
data[len++] = frame_no%256;
data[len++] = frame_no/256;
data[len++] = ProjectCode%256;
data[len++] = ProjectCode/256;
data[len++] = g_netinfo.device_ip[2]; //<2F><><EFBFBD><EFBFBD>ip
data[len++] = g_netinfo.device_ip[3];
return len;
}
/*******************************************************************************
* Function Name : UDP_ADD_SoftwareVer
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_ADD_SoftwareVer(uint8_t *data)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><C5B3><EFBFBD>Ϊ20Byte
uint8_t len = strlen(SoftwareVer);
if(len > RCU_SoftwareVer) len = RCU_SoftwareVer; //<2F><>ֹ<EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(data,SoftwareVer,len); //RCU_SoftwareVer
return RCU_SoftwareVer; //<2F>̶<EFBFBD>20Byte
}
/*******************************************************************************
* Function Name : UDP_ADD_ConfigVer
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_ADD_ConfigVer(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = Versions[0];
data[1] = Versions[1];
data[2] = Versions[2];
return 0x03;
}
/*******************************************************************************
* Function Name : UDP_Add_ServerIp
* Description : <EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_ServerIp(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = server_info.dis_ip[0];
data[1] = server_info.dis_ip[1];
data[2] = server_info.dis_ip[2];
data[3] = server_info.dis_ip[3];
return 0x04;
}
/*******************************************************************************
* Function Name : UDP_Add_ServerPort
* Description : <EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<EFBFBD>˿<EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_ServerPort(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = server_info.dis_port & 0xFF;
data[1] = (server_info.dis_port >> 8) & 0xFF;
//֮ǰC1F<31><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF><DAA3>ǹ̶<C7B9><CCB6><EFBFBD>3341<34><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
data[0] = 0x0D;
data[1] = 0x0D;
return 0x02;
}
/*******************************************************************************
* Function Name : UDP_Add_Subnet
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Subnet(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = g_netinfo.subnet[0];
data[1] = g_netinfo.subnet[1];
data[2] = g_netinfo.subnet[2];
data[3] = g_netinfo.subnet[3];
return 0x04;
}
/*******************************************************************************
* Function Name : UDP_Add_Gateway
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Gateway(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = g_netinfo.gateway[0];
data[1] = g_netinfo.gateway[1];
data[2] = g_netinfo.gateway[2];
data[3] = g_netinfo.gateway[3];
return 0x04;
}
/*******************************************************************************
* Function Name : UDP_Add_Mac
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC<EFBFBD><EFBFBD>ַ
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Add_Mac(uint8_t *data)
{
//<2F>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>и<EFBFBD>ֵ<EFBFBD><D6B5>Versions<6E><73><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
data[0] = g_netinfo.mac_addr[0];
data[1] = g_netinfo.mac_addr[1];
data[2] = g_netinfo.mac_addr[2];
data[3] = g_netinfo.mac_addr[3];
data[4] = g_netinfo.mac_addr[4];
data[5] = g_netinfo.mac_addr[5];
return 0x06;
}
/*******************************************************************************
* Function Name : UDP_Add_Port
* Description : <EFBFBD><EFBFBD><EFBFBD>Ӷ˿ں<EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__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 : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>е<EFBFBD>֡<EFBFBD><EFBFBD>
* Input :
* buff - <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
* Return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>е<EFBFBD>֡<EFBFBD><EFBFBD>
*******************************************************************************/
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 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Search_Ack(void)
{
uint32_t sendlen = BLV_UDP_HEAD_LEN;
uint8_t rev = 0;
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>֡
sendlen += UDP_Add_ServerIp(&Global_Large_Buff[BLV_UDP_HEAD_LEN]); //<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
sendlen += UDP_Add_Subnet(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sendlen += UDP_Add_Gateway(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sendlen += UDP_Add_ServerPort(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD>RCU<43>˿<EFBFBD>
sendlen += UDP_Add_Mac(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD>Mac
sendlen += UDP_ADD_SoftwareVer(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD>ӹ̼<D3B9><CCBC>
sendlen += UDP_ADD_ConfigVer(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
Global_Large_Buff[sendlen++] = g_netinfo.dns_server_ip[0];
Global_Large_Buff[sendlen++] = g_netinfo.dns_server_ip[1];
Global_Large_Buff[sendlen++] = g_netinfo.dns_server_ip[2];
Global_Large_Buff[sendlen++] = g_netinfo.dns_server_ip[3];
SRAM_DMA_Read_Buff(&Global_Large_Buff[sendlen],16,SRAM_Register_Start_ADDRESS + Register_RoomTypeNote_OFFSET);
sendlen += 16;
SRAM_DMA_Read_Buff(&Global_Large_Buff[sendlen],16,SRAM_Register_Start_ADDRESS + Register_RoomNumNote_OFFSET);
sendlen += 16;
SRAM_DMA_Read_Buff(&Global_Large_Buff[sendlen],4,SRAM_Register_Start_ADDRESS + Register_HouseType_OFFSET);
sendlen += 4;
SRAM_DMA_Read_Buff(&Global_Large_Buff[sendlen],4,SRAM_Register_Start_ADDRESS + Register_RoomNumber_OFFSET);
sendlen += 4;
sendlen += 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRC16 <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>2Byte
UDP_Add_Header(Global_Large_Buff,In_Search_Cmd,sendlen,0xffff); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
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);
rev = WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &sendlen, server_info.dis_ip, server_info.dis_port);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s rev:%d",__func__,rev);
LOG_NET_COMM_Send_Record(0x01,server_info.dis_ip,server_info.dis_port,&Global_Large_Buff[0],sendlen);
return rev;
}
/*******************************************************************************
* Function Name : UDP_Subgroup_Cmd_Processing
* Description : BLVͨѶЭ<EFBFBD><EFBFBD> - <EFBFBD><EFBFBD>Ⱥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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;
//У<><EFBFBD><E9B3A4>
//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); //<2F><><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9>ߵ<EFBFBD>ip<69><70>port<72><74><EFBFBD><EFBFBD>SRAM<41><4D><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʹ<CAB1><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TFTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
memset(&IAPVarTypeStruct_Ptr, 0, sizeof(IAPVarTypeStruct)); //<2F><><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IAPVarTypeStruct_Ptr.enable = 0x01; //TFTP IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
}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ͨѶЭ<EFBFBD><EFBFBD> - IAP APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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;
//У<><EFBFBD><E9B3A4>
//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); //<2F><><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9>ߵ<EFBFBD>ip<69><70>port<72><74><EFBFBD><EFBFBD>SRAM<41><4D><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʹ<CAB1><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڣ<CBBF><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TFTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>
memset(&IAPVarTypeStruct_Ptr, 0, sizeof(IAPVarTypeStruct)); //<2F><><EFBFBD><EFBFBD>IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
/*<2A><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD>ֶν<D6B6><CEBD><EFBFBD> -
* IP<EFBFBD><EFBFBD>4Byte
* Port: 2Byte
* MD5<EFBFBD><EFBFBD>16Byte
* 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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IAPVarTypeStruct_Ptr.enable = 0x01; //TFTP IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
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]); //<2F><><EFBFBD>ӹ̼<D3B9><CCBC>
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ͨѶЭ<EFBFBD><EFBFBD> - IAP APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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];
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
//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; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
//IAP <20><><EFBFBD><EFBFBD>APP<50><50>Ӧ<EFBFBD><D3A6>MD5 У<><D0A3>
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ͨѶЭ<EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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,"ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>");
server_info.udp_sta = 0x02;
server_info.active_cmd_flag |= UDP_ActSend_TimeSync_Flag; //ע<><D7A2><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<C8A1><CAB1>
server_info.active_cmd_flag |= UDP_ActSend_RoomState_Flag; //ע<><D7A2><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>̬
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) //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
{
LOG_SYS_Server_Comm_State_Record(0x02); //RCU<43>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>
server_info.online_state = 3;
}else{
LOG_SYS_Server_Comm_State_Record(0x01); //RCU<43><55><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
server_info.online_state = 2;
}
}else if(DataLen == 28)
{
//֡<>Ż򳤶Ȳ<F2B3A4B6><C8B2>Ծͷ<D4BE><CDB7><EFBFBD>
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,"<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
sendlen = BLV_UDP_HEAD_LEN;
sendlen += UDP_Add_ServerIp(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ֽڵ<D6BD><DAB5>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ijɷ<C4B3><C9B7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
sendlen += UDP_Add_Subnet(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sendlen += UDP_Add_Gateway(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sendlen += UDP_Add_Port(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD>RCU<43>˿<EFBFBD>
sendlen += UDP_Add_Mac(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD>Mac
sendlen += UDP_ADD_SoftwareVer(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD>ӹ̼<D3B9><CCBC>
sendlen += UDP_ADD_ConfigVer(&Global_Large_Buff[sendlen]); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ð汾
NetCRC16(&Global_Large_Buff[0],sendlen); //<2F><><EFBFBD><EFBFBD>CRC16
sendlen += 0x02;
UDP_Add_Header(Global_Large_Buff,In_Search_Cmd,sendlen,0xffff); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &sendlen, ip, port);
}
return 0x00;
}
/*******************************************************************************
* Function Name : UDP_Read_MCUSystem_Cmd_Processing
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>init_flag:%d",server_info.init_flag);
if(server_info.init_flag ==0x00)
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"ֱ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DHCP<EFBFBD><EFBFBD>DNS");
server_info.net_sta = NET_COMPLETE;
server_info.con_flag = 0x01;
}
server_info.con_tick = SysTick_1s;
}
//<2F><>ʱ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
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 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Heart_Send(void)
{
uint32_t sendlen = 0x00;
uint8_t rev = 0;
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}else{
server_info.frame_no = 0x8000;
}
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
sendlen = SocketIdnex_BLVSeriver;
//2025-9-25 <20>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[0];
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[1];
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[2];
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[3];
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[4];
Global_Large_Buff[sendlen++] = g_netinfo.mac_addr[5];
sendlen += 0x06;
sendlen += 0x02; //<2F><><EFBFBD><EFBFBD>CRCУ<43><EFBFBD><E9B3A4>
UDP_Add_Header(Global_Large_Buff,In_Heart_Cmd,sendlen,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
NetCRC16(&Global_Large_Buff[0],sendlen);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s..",__func__);
rev = 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);
return rev;
}
/*******************************************************************************
* Function Name : Udp_Internal_GetTime_Data
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_GetTime_CMD(void)
{
uint32_t sendlen = BLV_UDP_PACK_LEN;
uint8_t rev = 0;
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s",__func__);
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
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;
}
}
UDP_Add_Header(Global_Large_Buff,In_QueryTime_Cmd,sendlen,server_info.frame_no);
NetCRC16(&Global_Large_Buff[0],sendlen);
rev = 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);
return rev;
}
/*******************************************************************************
* Function Name : Udp_QueryTime_Cmd_Process
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡʱ<EFBFBD><EFBFBD> - <EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
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;
//<2F>ж<EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>
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]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼʱ<CABC><CAB1> 2024-08-02
DevActionGlobal.DayEnd = data[BLV_UDP_HEAD_LEN+9]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 2024-08-02
}
/*<2A><><EFBFBD><EFBFBD>ʽת<CABD><D7AA>ΪRTC<54><43><EFBFBD>ݸ<EFBFBD>ʽ*/
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,"ͬ<EFBFBD><EFBFBD>ʱ<EFBFBD>䣺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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d ~ %d ƫ<><C6AB>:%d",DevActionGlobal.DayStart,DevActionGlobal.DayEnd,g_time_info.timezone);
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> ʱ<>䣺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); //<2F><><EFBFBD><EFBFBD>RTCʱ<43><CAB1>
server_info.sync_tick = 0x01; //2023-10-08 <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>LCDʱ<44><CAB1>
DevActionGlobal.TimeSyncFlag = 0x03; //2024-08-02 <20><><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD>ҹʱ<D2B9><CAB1><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD>CSIO RTC
server_info.udp_send_flag = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
server_info.active_cmd_flag &= ~UDP_ActSend_TimeSync_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
server_info.udp_online_tick = SysTick_1ms;
return 0;
}
/*******************************************************************************
* Function Name : Udp_Internal_GetRoomRent_CMD
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>̬
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_GetRoomRent_CMD(void)
{
uint32_t sendlen = BLV_UDP_PACK_LEN;
uint8_t rev = 0;
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s",__func__);
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
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;
}
}
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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ<EFBFBD><C8A1>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>",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);
LOG_NET_COMM_Send_Record(0x01,server_info.dis_ip,server_info.dis_port,&Global_Large_Buff[0],sendlen);
return rev;
}
/*******************************************************************************
* Function Name : Udp_Internal_Reboot_Reason_Report_CMD
* Description : RCU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Reboot_Reason_Report_CMD(void)
{
uint8_t temp_data[24] = {0};
uint32_t sendlen = 0x00;
uint8_t rev = 0;
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
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;
}
}else {
//<2F><><EFBFBD>ݰ<EFBFBD><DDB0>ط<EFBFBD><D8B7>У<EFBFBD>֡<EFBFBD>Ų<EFBFBD><C5B2>ı<EFBFBD>
}
sendlen = BLV_UDP_HEAD_LEN;
/*Launcher<65>汾 ֻ<><D6BB>Launcher_C1F_V04 <20><><EFBFBD>ϰ汾<CFB0>ſ<EFBFBD><C5BF>Զ<EFBFBD>ȡ<EFBFBD><C8A1>Launcher<65><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD>°汾<C2B0>Ƕ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> 2022-08-04*/
//MCU_Flash_Read((uint8_t *)&temp_data,20,Launcher_SoftwareVer_Addr);
if(strncmp((char *)temp_data,"Launcher_",strlen("Launcher_")) == 0x00)
{
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN],temp_data,20);
}else {
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Launcher_ ǰ׺<C7B0><D7BA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>Ĭ<EFBFBD><C4AC>ΪLauncher_C1F_V02*/
memset(temp_data,0,sizeof(temp_data));
snprintf((char *)temp_data,sizeof(temp_data),"Launcher_C1F_V02 ");
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN],temp_data,20);
}
sendlen += 20;
Global_Large_Buff[sendlen++] = SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) & 0xFF; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
sendlen += 0x02; //<2F><><EFBFBD><EFBFBD>CRCУ<43><EFBFBD><E9B3A4>
UDP_Add_Header(Global_Large_Buff,In_Reboot_Reason_Cmd,sendlen,server_info.frame_no);
NetCRC16(&Global_Large_Buff[0],sendlen);
//Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"RCU<43><55><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>: ",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);
LOG_NET_COMM_Send_Record(0x01,server_info.dis_ip,server_info.dis_port,&Global_Large_Buff[0],sendlen);
return rev;
}
/*******************************************************************************
* Function Name : Udp_Internal_Power_Change_Report_CMD
* Description : ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Power_Change_Report_CMD(void)
{
uint32_t sendlen = 0x00;
uint8_t temp_flag = 0,rev = 0;
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
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;
}
}
temp_flag = SRAM_Read_Byte(SRAM_UDP_ELEReport_Action);
sendlen = BLV_UDP_HEAD_LEN;
if( (temp_flag & 0x01) != 0x00 )
{
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_EleState_Last); //ȡ<><EFBFBD><E7B6AF>
}else {
Global_Large_Buff[sendlen++] = 0x00;
}
if( (temp_flag & 0x02) != 0x00 )
{
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_CardState_Last); //<2F><EFBFBD><E5BFA8><EFBFBD><EFBFBD>
}else {
Global_Large_Buff[sendlen++] = 0x00;
}
if( (temp_flag & 0x04) != 0x00 )
{
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_CardType_Last); //<2F><><EFBFBD>ݱ仯
}else {
Global_Large_Buff[sendlen++] = 0x00;
}
if( (temp_flag & 0x08) != 0x00 )
{
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_VirtualCard_Last); //<2F>޿<EFBFBD><DEBF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
}else {
Global_Large_Buff[sendlen++] = 0x00;
}
sendlen += 0x02; //<2F><><EFBFBD><EFBFBD>CRCУ<43><EFBFBD><E9B3A4>
UDP_Add_Header(Global_Large_Buff,In_Power_Change_Cmd,sendlen,server_info.frame_no);
NetCRC16(&Global_Large_Buff[0],sendlen);
rev = 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);
return rev;
}
/*******************************************************************************
* Function Name : Find_TempDevice_List_Information
* Description : <EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
* buff - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
* dev_num_max - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint32_t Find_TempDevice_List_Information(uint8_t *buff,uint8_t dev_num_max)
{
uint32_t read_addr = SRAM_Device_List_Start_Addr;
uint32_t end_addr = SRAM_Read_DW(SRAM_NORMAL_Device_List_Addr);
Device_Public_Information_G BUS_Public;
RS485_TEMP_INFO Rs485Temp;
uint8_t dev_num = 0;
uint8_t data_offset = 0;
uint16_t temp_val = 0;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485Temp,0,sizeof(RS485_TEMP_INFO));
if((end_addr < SRAM_Device_List_Start_Addr) || (end_addr > SRAM_Device_List_End_Addr)) end_addr = SRAM_Device_List_End_Addr;
for(uint32_t i=SRAM_Device_List_Start_Addr;i<end_addr;)
{
if(SRAM_Read_Byte(read_addr + Dev_Type) == DEV_RS485_TEMP)
{
if(Device_Data_Check(read_addr) == 0)
{
BLV_Device_PublicInfo_Read_To_Struct(read_addr,&BUS_Public);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485Temp,sizeof(RS485_TEMP_INFO),read_addr+Dev_Privately);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Type:%d Addr:%d",__func__,BUS_Public.type,BUS_Public.addr);
buff[data_offset++] = BUS_Public.type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20>ܺļ<DCBA><C4BC><EFBFBD>
buff[data_offset++] = BUS_Public.addr; //<2F><EFBFBD><E8B1B8>ַ - <20>ܺļ<DCBA><C4BC><EFBFBD> <20>豸Ĭ<E8B1B8><C4AC>0x01
buff[data_offset++] = 0x00; //<2F><EFBFBD><E8B1B8>· - <20>յ<EFBFBD><D5B5>豸Ĭ<E8B1B8><C4AC>0x00
buff[data_offset++] = 0x00; //<2F><EFBFBD><E8B1B8>· - <20>յ<EFBFBD>Ĭ<EFBFBD><C4AC>0x00
buff[data_offset++] = 0x02; //<2F><EFBFBD><E8B1B8><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
//<2F>յ<EFBFBD>״̬
temp_val = Dev_Temp_State_Data(Rs485Temp.TemStateLast);
buff[data_offset++] = temp_val & 0xFF;
buff[data_offset++] = (temp_val >> 8) & 0xFF;
dev_num++;
if(dev_num >= dev_num_max) return dev_num; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޣ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
}
}
read_addr += SRAM_Device_List_Size;
i+= SRAM_Device_List_Size;
if(read_addr >= end_addr)
{
return dev_num;
}
}
return dev_num;
}
/*******************************************************************************
* Function Name : Udp_Scan_Roomstate
* Description : <EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void Udp_Addtion_Roomstate(uint8_t type,uint8_t addr,uint16_t loop,uint16_t start)
{
uint8_t len = 0x00;
uint8_t back_data[8];
uint32_t write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Writeaddr),read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr);
memset(back_data,0,8);
/*<2A>жϵ<D0B6>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>ڷ<EFBFBD>Χ<EFBFBD><CEA7>*/
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);
}
back_data[0] = type;
back_data[1] = addr;
back_data[2] = (loop & 0xFF);
back_data[3] = ((loop >> 8) & 0xFF);
back_data[4] = (start & 0xFF);
back_data[5] = ((start >> 8) & 0xFF);
if( (write_addr + 6) > SRAM_UDP_SendData_Endaddr)
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s overstep_1 %08X!!!",__func__,write_addr);
len = SRAM_UDP_SendData_Endaddr - write_addr;
SRAM_DMA_Write_Buff(back_data,len,write_addr);
write_addr = SRAM_UDP_SendData_Startaddr;
SRAM_DMA_Write_Buff(&back_data[len],(6-len),write_addr);
write_addr += (6-len);
}
else{
SRAM_DMA_Write_Buff(back_data,0x06,write_addr);
write_addr += 0x06; //<2F><>ַƫ<D6B7><C6AB>
}
if(write_addr > SRAM_UDP_SendData_Endaddr)
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s overstep %08X!!!",__func__,write_addr);
write_addr = SRAM_UDP_SendData_Startaddr;
}
SRAM_Write_DW(write_addr,SRAM_UDP_SendData_Writeaddr);
}
/*******************************************************************************
* Function Name : Udp_Internal_Read_MCU_System_SendAck
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD>ظ<EFBFBD>ACK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_Read_MCU_System_SendAck(uint8_t *ip,uint16_t port,uint16_t frame_id)
{
UINT32 back_len = BLV_UDP_HEAD_LEN + 449 + 2; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
uint8_t temp_data[34] = {0};
uint8_t temp_rev = 0,rev = 0;
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
/*<2A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>*/
UDP_Add_Header(Global_Large_Buff,In_Read_MCUSystem_Cmd,back_len,frame_id); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
Global_Large_Buff[BLV_UDP_HEAD_LEN] = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS + Register_NetInfo_EN_OFFSET); //IP<49><50><EFBFBD><EFBFBD> 2022-12-02
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 1],MCU_TYPE,sizeof(MCU_TYPE)); //<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 17],g_netinfo.device_ip,4); //IP<49><50>ַ
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 21],server_info.dis_ip,4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 25],g_netinfo.subnet,4); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 29],g_netinfo.gateway,4); //<2F><><EFBFBD><EFBFBD>
UDP_Add_ServerPort(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 33]); //MCU<43><55><EFBFBD><EFBFBD>Ĭ<EFBFBD>϶˿<CFB6>Ϊ3341
Global_Large_Buff[BLV_UDP_HEAD_LEN + 35] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>û<EFBFBD><C3BB>
Global_Large_Buff[BLV_UDP_HEAD_LEN + 36] = 0;
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 37],g_netinfo.dns_server_ip,4); //<2F><><EFBFBD><EFBFBD>
UDP_ADD_SoftwareVer(&Global_Large_Buff[BLV_UDP_HEAD_LEN+41]); //<2F><><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
/*RTCʱ<43><CAB1>*/
Global_Large_Buff[BLV_UDP_HEAD_LEN+61] = HEX_Conversion_To_DEC(RTC_Raw_Data.year);
Global_Large_Buff[BLV_UDP_HEAD_LEN+62] = HEX_Conversion_To_DEC(RTC_Raw_Data.month);
Global_Large_Buff[BLV_UDP_HEAD_LEN+63] = HEX_Conversion_To_DEC(RTC_Raw_Data.day);
Global_Large_Buff[BLV_UDP_HEAD_LEN+64] = HEX_Conversion_To_DEC(RTC_Raw_Data.hour);
Global_Large_Buff[BLV_UDP_HEAD_LEN+65] = HEX_Conversion_To_DEC(RTC_Raw_Data.minute);
Global_Large_Buff[BLV_UDP_HEAD_LEN+66] = HEX_Conversion_To_DEC(RTC_Raw_Data.second);
/*Launcher<65>汾 ֻ<><D6BB>Launcher_C1F_V04 <20><><EFBFBD>ϰ汾<CFB0>ſ<EFBFBD><C5BF>Զ<EFBFBD>ȡ<EFBFBD><C8A1>Launcher<65><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD>°汾<C2B0>Ƕ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> 2022-08-04*/
//MCU_Flash_Read((uint8_t *)&temp_data,20,Launcher_SoftwareVer_Addr);
if(strncmp((char *)temp_data,"Launcher_",strlen("Launcher_")) == 0x00)
{
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+67],temp_data,20);
}else {
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Launcher_ ǰ׺<C7B0><D7BA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>Ĭ<EFBFBD><C4AC>ΪLauncher_C1F_V02*/
memset(temp_data,0,sizeof(temp_data));
snprintf((char *)temp_data,sizeof(temp_data),"Launcher_C1F_V02 ");
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+67],temp_data,20);
}
UDP_Add_Mac(&Global_Large_Buff[BLV_UDP_HEAD_LEN+87]); //MAC<41><43>ַ
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+93],4,SRAM_Register_Start_ADDRESS + Register_ProjectCode_OFFSET); //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+97],4,SRAM_Register_Start_ADDRESS + Register_RoomNumber_OFFSET);
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+101],4,SRAM_Register_Start_ADDRESS + Register_HouseType_OFFSET);
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+105],4,SRAM_Register_Start_ADDRESS + Register_ConfigVersion_OFFSET); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+109],4,SRAM_Register_Start_ADDRESS + Register_RoomRent_OFFSET);
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN+113],4,SRAM_Register_Start_ADDRESS + Register_SeasonStatus_OFFSET);
Global_Large_Buff[BLV_UDP_HEAD_LEN+117] = Get_Authorize_Lock_Status(); //<2F><>ȡ<EFBFBD><C8A1>Ȩ״̬
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);
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
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);
//<2F><>ȡFlash<73>е<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
//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); //<2F><>ѯLOGIC<49>ļ<EFBFBD><C4BC>еľƵ<C4BE><C6B5><EFBFBD><EFBFBD><EFBFBD> - 32Byte
if(temp_rev == 0x00)
{
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+385],temp_data,32);
}else {
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); //<2F><>ѯLOGIC<49>ļ<EFBFBD><C4BC>еķ<D0B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 32Byte
if(temp_rev == 0x00)
{
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+417],temp_data,32);
}else {
memset(temp_data,0,32);
memcpy(&Global_Large_Buff[BLV_UDP_HEAD_LEN+417],temp_data,32);
}
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);
//<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
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);
return rev;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_PC_Testing_Reply
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ port<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_PC_Testing_Reply(uint8_t *reply_data,uint16_t reply_len,uint16_t pack_frame,uint8_t *ip,uint16_t port)
{
UINT32 back_len = BLV_UDP_HEAD_LEN + reply_len + 3;
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
UDP_Add_Header(Global_Large_Buff,In_BLVPCTestDevice_Cmd,back_len,pack_frame); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
for(uint16_t i=0;i<reply_len;i++)
{
Global_Large_Buff[BLV_UDP_HEAD_LEN+i] = reply_data[i];
}
NetCRC16(&Global_Large_Buff[0],back_len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &back_len, ip, port); //SOCK_UDPS,
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_PC_Testing_Reply
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ port<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>UDP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_PC_Testing_Reported(uint8_t *reply_data,uint16_t reply_len,uint8_t *ip,uint16_t port)
{
UINT32 back_len = BLV_UDP_HEAD_LEN + reply_len + 2;
Dbg_Println(DBG_OPT_DEVICE_STATUS,"%s",__func__);
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}
else
{
server_info.frame_no = 0x8000;
}
UDP_Add_Header(Global_Large_Buff,In_BLVPCTestDevice_Cmd,back_len,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
for(uint16_t i=0;i<reply_len;i++)
{
Global_Large_Buff[BLV_UDP_HEAD_LEN+i] = reply_data[i];
}
NetCRC16(&Global_Large_Buff[0],back_len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &back_len, ip, port); //SOCK_UDPS,
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_PC_Testing_DataDeal
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ port<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>UDP<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_PC_Testing_DataDeal(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port)
{
uint8_t control_dev = 0,control_addr = 0,control_cmd = 0,temp = 0,temp1 = 0,temp2 = 0;
uint32_t device_listaddr = 0;
uint16_t ack_frame = 0;
uint8_t back_data[15];
uint8_t control_num = 0;
memset(back_data,0,15);
ack_frame = data[FRAME_NO_OFFSET] + (data[FRAME_NO_OFFSET+1]<<8); //֡<><D6A1>
control_dev = data[BLV_UDP_HEAD_LEN+1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
control_addr = data[BLV_UDP_HEAD_LEN+2]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
g_pc_test.pc_ip[0] = ip[0];
g_pc_test.pc_ip[1] = ip[1];
g_pc_test.pc_ip[2] = ip[2];
g_pc_test.pc_ip[3] = ip[3];
g_pc_test.pc_port = port;
/*<2A><>¼һ<C2BC>µ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><E8B1B8>ַ*/
g_pc_test.test_dev = control_dev;
g_pc_test.test_addr = control_addr;
device_listaddr = Find_Device_List_Information(control_dev,control_addr);
if((device_listaddr < SRAM_Device_List_Start_Addr) || (device_listaddr > SRAM_Device_List_End_Addr)) return 0xF0;
switch(control_dev)
{
case DEV_C5IO_Type: //C5IO <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
control_cmd = data[BLV_UDP_HEAD_LEN+3];
if(control_cmd == BLV_C5IO_Set_Relay_CMD) //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
control_num = DataLen - BLV_UDP_HEAD_LEN - 2 - 4;
if(control_num >= 6) control_num = 6; //Ŀǰ<C4BF>6Byte<74>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Dbg_Println(DBG_OPT_DEVICE_STATUS,"NET PC Test C5IO_Control Len %d,Control_NUM:%d",DataLen,control_num);
for(uint8_t i = 0;i<control_num;i++)
{
temp = data[BLV_UDP_HEAD_LEN + 4 + i];
for(uint8_t j = 0;j<4;j++)
{
temp2 = i*4+j; //<2F><><EFBFBD>ƻ<EFBFBD>·
temp1 = (temp >> j*2) & 0x03; //<2F><><EFBFBD><EFBFBD>״̬
if(temp1 != 0x00)
{
//Dbg_Println(DBG_BIT_NET_STATUS_bit,"PC Test C5IO_Control_RelayCH%d status:%d",temp2,temp1);
uint8_t control[6];
control[0] = Dev_Host_HVout;
control[1] = 0x00;
control[2] = temp2; //<2F><>·
control[3] = 0x00;
control[4] = temp1; //<2F><><EFBFBD><EFBFBD>״̬
control[5] = 0x00;
DevActionCtrl(control, 6); //<2F>̵<EFBFBD><CCB5><EFBFBD>
}
}
}
}else if(control_cmd == BLV_C5IO_Set_Do_CMD) //DO<44><4F><EFBFBD><EFBFBD>
{
for(uint8_t i = 0;i<2;i++)
{
temp = data[BLV_UDP_HEAD_LEN + 4 + i];
for(uint8_t j = 0;j<4;j++)
{
temp2 = i*4+j; //<2F><><EFBFBD>ƻ<EFBFBD>·
temp1 = (temp >> j*2) & 0x03; //<2F><><EFBFBD><EFBFBD>״̬
if(temp1 != 0x00)
{
//Dbg_Println(DBG_BIT_Debug_STATUS_bit,"PC Test C5IO_Control_DoCH%d status:%d",temp2,temp1);
BUS_C5IO_Control_Do(device_listaddr,temp2,temp1);
}
}
}
}
return 0x00;
case DEV_C5MUSIC_Type:
control_cmd = data[BLV_UDP_HEAD_LEN + 3];
if(control_cmd == BLV_C5MUSIC_Specify_Play_CMD)
{
temp = data[BLV_UDP_HEAD_LEN + 4]; //<2F><><EFBFBD><EFBFBD>״̬
temp1 = data[BLV_UDP_HEAD_LEN + 5]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
temp2 = data[BLV_UDP_HEAD_LEN + 6]; //<2F><><EFBFBD><EFBFBD>ID
//Dbg_Println(DBG_BIT_NET_STATUS_bit,"PC Test C5Music_Control dir:%d id:%d status:%d",temp1,temp2,temp);
BUS_C5MUSIC_Playback(device_listaddr,temp1,temp,temp2);
}
{
/*<2A>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>*/
uint8_t ack_buff[4] = {0};
ack_buff[0] = g_pc_test.test_flag;
ack_buff[1] = g_pc_test.test_dev;
ack_buff[2] = g_pc_test.test_addr;
ack_buff[3] = 0x01; //ִ<>н<EFBFBD><D0BD><EFBFBD>
Udp_Internal_PC_Testing_Reply(ack_buff,0x04,ack_frame,g_pc_test.pc_ip,g_pc_test.pc_port);
}
break;
case DEV_RS485_PWM:
control_cmd = data[BLV_UDP_HEAD_LEN + 3];
if(control_cmd == C12_SET_LIGHT_CMD)
{
temp = data[BLV_UDP_HEAD_LEN + 4]; //<2F><><EFBFBD>û<EFBFBD>·
temp1 = data[BLV_UDP_HEAD_LEN + 5]; //<2F><><EFBFBD><EFBFBD>ֵ
temp2 = data[BLV_UDP_HEAD_LEN + 6]; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"PC Test C12Dimming:%d light:%d fade:%d",temp1,temp2,temp);
if(temp)
{
UINT8 control[6];
control[0] = DEV_RS485_PWM;
control[1] = 0x00;
control[2] = temp-1; //<2F><>·
control[3] = 0x00;
control[4] = 0x01; //<2F><><EFBFBD><EFBFBD>״̬
control[5] = temp1; //<2F><><EFBFBD><EFBFBD>ֵ
DevActionCtrl(control, 6); //<2F>̵<EFBFBD><CCB5><EFBFBD>
}
}
break;
default: break;
}
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_BLVPCTestDevice_Process
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ port<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>BLV-C1PC<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_BLVPCTestDevice_Process(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port)
{
/*CRCУ<43><D0A3>*/
uint16_t data_crc = data[DataLen-2] + (data[DataLen-1] << 8);
if(NetCRC16_2(data,DataLen-2) != data_crc) return 0xF0;
uint8_t temp1 = 0;
uint32_t dev_addr = 0;
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s",__func__);
dev_addr = Find_Device_List_Information(DEV_PCTEST_TYPE,DEV_PCTEST_Addr);
Device_Public_Information_G BUS_Public;
PC_TEST_DEVICE_INFO PC_Test_Info;
if(BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public) == 0x00)
{
SRAM_DMA_Read_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
temp1 = data[BLV_UDP_HEAD_LEN];
if(temp1 == 0x01) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
g_pc_test.test_flag = 0x11;
g_pc_test.test_dev = data[BLV_UDP_HEAD_LEN + 1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
g_pc_test.test_addr = data[BLV_UDP_HEAD_LEN + 2]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
PC_Test_Info.test_time = data[BLV_UDP_HEAD_LEN + 3]; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PC_Test_Info.test_flag = g_pc_test.test_flag;
PC_Test_Info.test_tick = SysTick_1ms;
PC_Test_Info.test_time *= 60000;
g_pc_test.pc_ip[0] = ip[0]; //2022-07-12
g_pc_test.pc_ip[1] = ip[1];
g_pc_test.pc_ip[2] = ip[2];
g_pc_test.pc_ip[3] = ip[3];
g_pc_test.pc_port = port;
}
else if(temp1 == 0x02) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_pc_test.test_flag = 0x12;
PC_Test_Info.test_flag = g_pc_test.test_flag;
PC_Test_Info.test_tick = SysTick_1ms;
PC_Test_Info.test_time = 120000;
Udp_Internal_PC_Testing_DataDeal(data,DataLen,ip,port);
}else if(temp1 == 0x03) //<2F><><EFBFBD><EFBFBD>Ѳ<EFBFBD>ز<EFBFBD><D8B2><EFBFBD> - <20><><EFBFBD><EFBFBD>485<38>˿<EFBFBD>
{
g_pc_test.test_flag = 0x13;
PC_Test_Info.test_flag = g_pc_test.test_flag;
g_pc_test.tour_num = 0;
g_pc_test.tour_succ = 0;
g_pc_test.pc_ip[0] = ip[0];
g_pc_test.pc_ip[1] = ip[1];
g_pc_test.pc_ip[2] = ip[2];
g_pc_test.pc_ip[3] = ip[3];
g_pc_test.pc_port = port;
}
BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO));
}
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP_Conversion_Baud
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint32_t UDP_Conversion_Baud(uint8_t data)
{
uint32_t baud = 0;
switch(data)
{
case 0x01:
baud = 9600;
break;
case 0x02:
baud = 14400;
break;
case 0x03:
baud = 19200;
break;
case 0x04:
baud = 38400;
break;
case 0x05:
baud = 56000;
break;
case 0x06:
baud = 57600;
break;
case 0x07:
baud = 115200;
break;
}
return baud;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UDP_Conversion_Baud
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t UDP_Baud_Conversion_Data(uint32_t data)
{
uint8_t re_data = 0;
switch(data)
{
case 9600:
re_data = 0x01;
break;
case 14400:
re_data = 0x02;
break;
case 19200:
re_data = 0x03;
break;
case 38400:
re_data = 0x04;
break;
case 56000:
re_data = 0x05;
break;
case 57600:
re_data = 0x06;
break;
case 115200:
re_data = 0x07;
break;
}
return re_data;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_SeriaNet_Process
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> len<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ip<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ port<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>BLV-C1͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_SeriaNet_Process(uint8_t* data, uint16_t DataLen, uint8_t *ip,uint16_t port)
{
/*CRCУ<43><D0A3>*/
uint16_t data_crc = data[DataLen-2] + (data[DataLen-1] << 8);
if(NetCRC16_2(data,DataLen-2) != data_crc) return 0xF0;
uint8_t back_data[SeriaNet_Cmd_Send_Len]={0};
UINT32 sendlen = SeriaNet_Cmd_Send_Len;
uint8_t temp = 0;
uint16_t pack_frame = 0,temp_len = 0;
pack_frame = data[FRAME_NO_OFFSET] + (data[FRAME_NO_OFFSET+1]<<8); //֡<><D6A1>
SRAM_DMA_Write_Buff(ip,4,SRAM_IAP_IP_ADDRESS); //<2F><><EFBFBD><EFBFBD>PC IP<49><50>ַ
SRAM_Write_Word(port,SRAM_IAP_PORT_ADDRESS); //<2F><><EFBFBD><EFBFBD>PC <20>˿ں<CBBF>
/*<2A><><EFBFBD>յ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s IP:%02X.%02X.%02X.%02X Port:%d\r\n",__func__,ip[0],ip[1],ip[2],ip[3],port);
/*͸<><CDB8><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>*/
temp = data[BLV_UDP_HEAD_LEN];
switch(temp)
{
case 0x01: //͸<><CDB8>״̬<D7B4><CCAC>ѯ - <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
UDP_Add_Header(back_data,In_SeriaNet_Cmd,SeriaNet_Cmd_Send_Len,pack_frame); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
back_data[BLV_UDP_HEAD_LEN] = 0x01;
if(data[BLV_UDP_HEAD_LEN+1] == 0x01) //<2F>˿<EFBFBD>1
{
back_data[BLV_UDP_HEAD_LEN+1] = Poll485_Info.port_mode;
Poll485_Info.mode_tick = SysTick_1s;
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x02) //<2F>˿<EFBFBD>2
{
back_data[BLV_UDP_HEAD_LEN+1] = Act485_Info.port_mode;
Act485_Info.mode_tick = SysTick_1s;
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x03) //<2F>˿<EFBFBD>3
{
back_data[BLV_UDP_HEAD_LEN+1] = BUS485_Info.port_mode;
BUS485_Info.mode_tick = SysTick_1s;
}
NetCRC16(&back_data[0],SeriaNet_Cmd_Send_Len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &back_data[0], &sendlen, ip, port);
break;
case 0x02: //͸<><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
UDP_Add_Header(back_data,In_SeriaNet_Cmd,SeriaNet_Cmd_Send_Len,pack_frame); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
back_data[BLV_UDP_HEAD_LEN] = 0x02;
back_data[BLV_UDP_HEAD_LEN+1] = 0x01;
if(data[BLV_UDP_HEAD_LEN+1] == 0x01) //<2F>˿<EFBFBD>1
{
Poll485_Info.baud = UDP_Conversion_Baud(data[BLV_UDP_HEAD_LEN+2]); //<2F><><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>
if(Poll485_Info.baud != Polling_Baud) //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
{
Poll485_Info.BaudRateCfg(Poll485_Info.baud);
}
Poll485_Info.mode_outtime = data[BLV_UDP_HEAD_LEN+3]*2; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱʱ<CAB1><CAB1>
Poll485_Info.port_mode = data[BLV_UDP_HEAD_LEN+4]; //<2F><><EFBFBD>ö˿<C3B6>ģʽ
Poll485_Info.mode_tick = SysTick_1s;
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x02) //<2F>˿<EFBFBD>2
{
Act485_Info.baud = UDP_Conversion_Baud(data[BLV_UDP_HEAD_LEN+2]); //<2F><><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>
if(Act485_Info.baud != Active_Baud) //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
{
Act485_Info.BaudRateCfg(Act485_Info.baud);
}
Act485_Info.mode_outtime = data[BLV_UDP_HEAD_LEN+3]*2; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱʱ<CAB1><CAB1>
Act485_Info.port_mode = data[BLV_UDP_HEAD_LEN+4]; //<2F><><EFBFBD>ö˿<C3B6>ģʽ
Act485_Info.mode_tick = SysTick_1s;
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Act485_Info.baud:%d",Act485_Info.baud );
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Act485_Info.pass_outtime:%d",Act485_Info.mode_outtime );
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Act485_Info.port_mode:%d",Act485_Info.port_mode );
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x03) //<2F>˿<EFBFBD>3
{
BUS485_Info.baud = UDP_Conversion_Baud(data[BLV_UDP_HEAD_LEN+2]); //<2F><><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>
if(BUS485_Info.baud != Bus_Baud) //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
{
}
BUS485_Info.mode_outtime = data[BLV_UDP_HEAD_LEN+3]*2; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ʱʱ<CAB1><CAB1>
BUS485_Info.port_mode = data[BLV_UDP_HEAD_LEN+4]; //<2F><><EFBFBD>ö˿<C3B6>ģʽ
BUS485_Info.mode_tick = SysTick_1s;
}else {
back_data[BLV_UDP_HEAD_LEN+1] = 0x02;
}
NetCRC16(&back_data[0],SeriaNet_Cmd_Send_Len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &back_data[0], &sendlen, ip, port);
break;
case 0x03: //͸<><CDB8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> - <20><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>豸û<E8B1B8>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
if(data[BLV_UDP_HEAD_LEN+1] == 0x01)
{
Poll485_Info.mode_tick = SysTick_1s;
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x02)
{
Act485_Info.mode_tick = SysTick_1s;
}else if(data[BLV_UDP_HEAD_LEN+1] == 0x03)
{
BUS485_Info.mode_tick = SysTick_1s;
}
/*<2A><>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>ݷŵ<DDB7><C5B5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>*/
temp_len = DataLen - 15 - 2 - 3;
//Dbg_Println(DBG_BIT_NET_STATUS_bit,"NET temp_len:%d ",temp_len );
Write_Uart_SendBuff(data[BLV_UDP_HEAD_LEN+1],data[BLV_UDP_HEAD_LEN+2],&data[BLV_UDP_HEAD_LEN+3],temp_len);
break;
}
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_SeriaNet_Uploading
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data_addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǰ2byte<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> - ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ480Byte
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>BLV-C1͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_SeriaNet_Uploading(uint8_t port,uint32_t baud,uint32_t data_addr)
{
uint8_t pc_ip[4];
uint16_t pc_port = 0;
uint32_t write_addr = data_addr;
UINT32 data_len = SRAM_Read_Word(data_addr);
if(data_len > Passthrough_DataLen_Max) data_len = Passthrough_DataLen_Max;
memset(pc_ip,0,sizeof(pc_ip));
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}
else
{
server_info.frame_no = 0x8000;
}
/*<2A><>ȡPC IP<49><50>ַ*/
SRAM_DMA_Read_Buff(pc_ip,4,SRAM_IAP_IP_ADDRESS);
pc_port = SRAM_Read_Word(SRAM_IAP_PORT_ADDRESS);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Udp_Internal_SeriaNet_Uploading IP:%02X.%02X.%02X.%02X Port:%d",pc_ip[0],pc_ip[1],pc_ip[2],pc_ip[3],pc_port);
write_addr = data_addr+2;
SRAM_DMA_Read_Buff(&Global_Large_Buff[BLV_UDP_HEAD_LEN + 2],data_len,write_addr);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Udp_Internal_SeriaNet_Uploading Len:%d",data_len);
data_len += 19; //<2F><><EFBFBD>ϰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>15Byte<74><65><EFBFBD><EFBFBD>βCRC2Byte
/**/
UDP_Add_Header(Global_Large_Buff,In_SeriaNetReported_Cmd,data_len,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
Global_Large_Buff[BLV_UDP_HEAD_LEN] = port; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ݶ˿ں<CBBF>
Global_Large_Buff[BLV_UDP_HEAD_LEN + 1] = UDP_Baud_Conversion_Data(baud); //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
NetCRC16(&Global_Large_Buff[0],data_len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &data_len, pc_ip, pc_port);
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_SeriaNet_Uploading
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data_addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǰ2byte<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> - ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ480Byte
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>BLV-C1͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_SeriaNet_Uploading2(uint8_t port,uint32_t baud,uint8_t* data, uint16_t DataLen)
{
uint8_t pc_ip[4];
uint16_t pc_port = 0;
UINT32 data_len = DataLen + 19;
if(data_len > Passthrough_DataLen_Max) data_len = Passthrough_DataLen_Max;
memset(pc_ip,0,sizeof(pc_ip));
memset(Global_Large_Buff,0,sizeof(Global_Large_Buff));
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}else{
server_info.frame_no = 0x8000;
}
/*<2A><>ȡPC IP<49><50>ַ*/
SRAM_DMA_Read_Buff(pc_ip,4,SRAM_IAP_IP_ADDRESS);
pc_port = SRAM_Read_Word(SRAM_IAP_PORT_ADDRESS);
UDP_Add_Header(Global_Large_Buff,In_SeriaNetReported_Cmd,data_len,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
Global_Large_Buff[BLV_UDP_HEAD_LEN] = port; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ݶ˿ں<CBBF>
Global_Large_Buff[BLV_UDP_HEAD_LEN + 1] = UDP_Baud_Conversion_Data(baud); //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
for(uint16_t i = 0;i<data_len - 19;i++)
{
Global_Large_Buff[BLV_UDP_HEAD_LEN + 2 + i] = data[i];
}
NetCRC16(&Global_Large_Buff[0],data_len);
WCHNET_SocketUdpSendTo(g_netinfo.SocketId[SocketIdnex_BLVSeriver], &Global_Large_Buff[0], &data_len, pc_ip, pc_port);
return 0x00;
}
/*************************
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Udp_Internal_SeriaNet_Uploading
**<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>data_addr<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǰ2byte<EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD> - ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ480Byte
**<EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD>BLV-C1͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
0x00<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0xF0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>CRCУ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
************************/
__attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_SeriaNet_Response_Timeout(void)
{
uint8_t pc_ip[4];
uint16_t pc_port = 0;
UINT32 data_len = SeriaNet_Cmd_Send_Len;
uint8_t back_data[SeriaNet_Cmd_Send_Len];
memset(pc_ip,0,sizeof(pc_ip));
memset(back_data,0,sizeof(back_data));
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}
else
{
server_info.frame_no = 0x8000;
}
/*<2A><>ȡPC IP<49><50>ַ*/
SRAM_DMA_Read_Buff(pc_ip,4,SRAM_IAP_IP_ADDRESS);
pc_port = SRAM_Read_Word(SRAM_IAP_PORT_ADDRESS);
UDP_Add_Header(back_data,In_SeriaNet_Cmd,data_len,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
back_data[BLV_UDP_HEAD_LEN] = 0x03; //͸<><CDB8><EFBFBD>ظ<EFBFBD>
back_data[BLV_UDP_HEAD_LEN + 1] = 0x03; //<2F><>ʱ״̬
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 : ɨ<EFBFBD>跿<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>Ƿ<EFBFBD><EFBFBD>
*******************************************************************************/
void Udp_Scan_Roomstate(void)
{
uint8_t temp1 = 0,temp2 = 0;
uint8_t back_data[20]; //һ<>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
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);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֱַ<D6B7>Ӹ<EFBFBD>λ
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);
}
/*<2A>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><E4BBAF>־λ - 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<<j)) != (temp2 & (0x01<<j)) )
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Device Relay :%d",i*8+j+1);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
back_data[0] = Dev_Host_HVout; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
back_data[1] = 0x00; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
back_data[2] = i*8+j+1; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>·
back_data[3] = 0x00; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>·
if((temp1 & (0x01<<j)) == 0x00)
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Device Relay :%d <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>",back_data[2]);
back_data[4] = 0x02; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>״̬
back_data[5] = 0x00;
}else
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"Device Relay :%d <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>",back_data[2]);
back_data[4] = 0x01; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>״̬
back_data[5] = 0x00;
}
SRAM_DMA_Write_Buff(back_data,0x06,write_addr);
write_addr += 0x06; //<2F><>ַƫ<D6B7><C6AB>
SRAM_DMA_Read_Buff(back_data,0x06,read_addr);
if(write_addr >= 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);
}
}
/*<2A>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD>ɺ󣬱<C9BA><F3A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬*/
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; //<2F><><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4>ϱ<EFBFBD> <20><>־λ
return ;
}
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> - */
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; //<2F><><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4>ϱ<EFBFBD> <20><>־λ
}
}
/*******************************************************************************
* Function Name : Udp_Internal_RoomState
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
*******************************************************************************/
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)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>ݰ<EFBFBD>
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 0x8000))
{
server_info.frame_no++;
}else {
server_info.frame_no = 0x8000;
}
//<2F><>ȡ<EFBFBD>豸״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ַ
write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Writeaddr);
read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֱַ<D6B7>Ӹ<EFBFBD>λ
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);
}
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ַ
write_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR);
read_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_READ_ADDR);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֱַ<D6B7>Ӹ<EFBFBD>λ
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 {
//<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>ݰ<EFBFBD> - <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ַ
write_addr = SRAM_Read_DW(SRAM_UDP_SendData_Tempaddr); //<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD><D2BB> <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĽ<DDB5><C4BD><EFBFBD><EFBFBD><EFBFBD>ַ
read_addr = SRAM_Read_DW(SRAM_UDP_SendData_Readaddr);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֱַ<D6B7>Ӹ<EFBFBD>λ
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);
}
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ַ
write_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR);
read_addr_2 = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_READ_ADDR);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD>κ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֱַ<D6B7>Ӹ<EFBFBD>λ
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));
//<2F>ж<EFBFBD><D0B6>豸״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񳬳<C7B7>
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;
}
//<2F>ж<EFBFBD><D0B6><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񳬳<C7B7>
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 ; //<2F><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>豸״̬<EFBFBD><EFBFBD>ϱ<EFBFBD> %d ֡<><D6A1>:%04x д:%8X <20><>:%8X",server_info.udp_retry_cnt,server_info.frame_no,write_addr,read_addr);
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> д:%8X <20><>:%8X",write_addr_2,read_addr_2);
len = BLV_UDP_HEAD_LEN;
Global_Large_Buff[len++] = Get_Authorize_Lock_Status(); //ϵͳ<CFB5><CDB3>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = 0x00; //<2F><><EFBFBD><EFBFBD>
Global_Large_Buff[len++] = (dev_state_len / 6); //RCU<43>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
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<43>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7>λ
SRAM_Write_DW(read_addr_2,SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Ž<EFBFBD><C5BD><EFBFBD>ȡ<EFBFBD><C8A1>ַ<EFBFBD><D6B7>λ
len += 2;
UDP_Add_Header(Global_Large_Buff,In_DevState_Cmd,len,server_info.frame_no); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
NetCRC16(&Global_Large_Buff[0],len);
Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>",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 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ <EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Udp_Internal_RoomState_Process(uint8_t *data, uint16_t DataLen, uint8_t *ip,uint16_t port)
{
/*CRCУ<43><D0A3>*/
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;
//<2F>ж<EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>
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); //<2F><><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>λ
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Dev <20><>:%8X",__func__,temp_val);
temp_val = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>϶<EFBFBD>ȡ<EFBFBD><C8A1>ַ
SRAM_Write_DW(temp_val, SRAM_DEVICE_ONLINE_STATE_READ_ADDR); //<2F><><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>¸<EFBFBD>ֵ
Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Dev Err <20><>:%8X",__func__,temp_val);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>±<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
server_info.udp_send_flag = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
server_info.active_cmd_flag &= ~UDP_ActSend_DevState_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
server_info.udp_online_tick = SysTick_1ms;
return 0x00;
}
/*******************************************************************************
* Function Name : Udp_Internal_Periodic_Report_PackSend
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> - <EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
*******************************************************************************/
void Udp_Internal_Periodic_Report_PackSend(void)
{
UINT32 sendlen = 0x00;
uint32_t temp_dev = 0;
if((server_info.frame_no < 0xfffe) && (server_info.frame_no >= 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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Global_Large_Buff[sendlen++] = DevActionGlobal.DevActionU64Cond.EleState; //ȡ<><C8A1>״̬
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_CardType); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_ELEReport_VirtualCard); //<2F>޿<EFBFBD><DEBF>߼<EFBFBD>״̬(<28><>Ӧ<EFBFBD>¼<EFBFBD>״̬)
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:<3A><>ס<EFBFBD><D7A1>0x02:<3A>˷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RCU<43><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>
//Global_Large_Buff[sendlen++] = 0x01; //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
Global_Large_Buff[sendlen++] = SRAM_Read_Byte(SRAM_UDP_Report_CarbonSatet); //̼<><CCBC><EFBFBD><EFBFBD>״̬ - 0x01:<3A><><EFBFBD><EFBFBD>0x00:<3A><>
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ܺļ<DCBA><C4BC><EFBFBD><EFBFBD>豸 - Ĭ<>ϣ<EFBFBD>1<EFBFBD><31>ַ - <20><>· 1*/
temp_dev = Find_AllDevice_List_Information(Dev_Energy_Monitor,0x01);
if(temp_dev != 0x00)
{
/*<2A><>ǰ<EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD> */
RS485_ENERGYMONITOR_INFO Rs485EnergyInfo;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485EnergyInfo,sizeof(RS485_ENERGYMONITOR_INFO),temp_dev+Dev_Privately);
Global_Large_Buff[sendlen++] = 0x01; //<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
Global_Large_Buff[sendlen++] = Dev_Energy_Monitor; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20>ܺļ<DCBA><C4BC><EFBFBD>
Global_Large_Buff[sendlen++] = 0x01; //<2F><EFBFBD><E8B1B8>ַ - <20>ܺļ<DCBA><C4BC><EFBFBD> <20>豸Ĭ<E8B1B8><C4AC>0x01
Global_Large_Buff[sendlen++] = 0x01; //<2F><EFBFBD><E8B1B8>· - <20>ܺļ<DCBA><C4BC><EFBFBD> <20>豸Ĭ<E8B1B8><C4AC>0x01
Global_Large_Buff[sendlen++] = 0x00; //<2F><EFBFBD><E8B1B8>· - <20>ܺļ<DCBA><C4BC><EFBFBD> <20>豸Ĭ<E8B1B8><C4AC>0x01
Global_Large_Buff[sendlen++] = 0x10; //<2F><EFBFBD><E8B1B8><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
//<2F>ܺļ<DCBA><C4BC><EFBFBD> - <20><>ѹ <20><>λ:10mV
Global_Large_Buff[sendlen++] = Rs485EnergyInfo.voltage & 0xFF;
Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.voltage >> 8) & 0xFF;
//<2F>ܺļ<DCBA><C4BC><EFBFBD> - <20><><EFBFBD><EFBFBD> <20><>λ:10mA
Global_Large_Buff[sendlen++] = Rs485EnergyInfo.current & 0xFF;
Global_Large_Buff[sendlen++] = (Rs485EnergyInfo.current >> 8) & 0xFF;
//<2F>ܺļ<DCBA><C4BC><EFBFBD> - <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD> <20><>λ: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;
//<2F>ܺļ<DCBA><C4BC><EFBFBD> - <20>ܺ<EFBFBD> <20><>λ: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;
//<2F>ܺļ<DCBA><C4BC><EFBFBD> - <20><><EFBFBD>ܺ<EFBFBD> <20><>λ: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{
/*û<>ҵ<EFBFBD><D2B5>ܺ<EFBFBD><DCBA>豸*/
Global_Large_Buff[sendlen++] = 0x00; //<2F>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
}
/*<2A><><EFBFBD>ӿյ<D3BF><D5B5>豸״̬ - <20><>Ҫ<EFBFBD>ҵ<EFBFBD><D2B5>м<EFBFBD><D0BC><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
temp_dev = Find_TempDevice_List_Information(&Global_Large_Buff[sendlen],0x05); //Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD>յ<EFBFBD>
sendlen = sendlen + (temp_dev * 0x07);
Global_Large_Buff[29] += temp_dev; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
sendlen += 0x02; //<2F><><EFBFBD><EFBFBD>CRCУ<43><EFBFBD><E9B3A4>
UDP_Add_Header(Global_Large_Buff,In_PeriodicReport_Cmd,sendlen,server_info.frame_no); //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>: ",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 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Udp_Internal_Periodic_Report_Process(uint8_t *data, uint16_t DataLen, uint8_t *ip,uint16_t port)
{
/*CRCУ<43><D0A3>*/
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;
//<2F>ж<EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>
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;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>±<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
server_info.udp_send_flag = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
server_info.active_cmd_flag &= ~UDP_ActSend_Periodic_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
server_info.udp_online_tick = SysTick_1ms;
return 0x00;
}
/*******************************************************************************
* Function Name : Udp_Internal_Analysis
* Description : BLVͨѶЭ<EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
* data - <EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* len - <EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* ip - <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>IP<EFBFBD><EFBFBD>ַ
* port - <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Port<EFBFBD>˿<EFBFBD>
*******************************************************************************/
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 ; //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2>㣬ֱ<E3A3AC><D6B1><EFBFBD>˳<EFBFBD>
/*BLVͨѶЭ<D1B6><D0AD> - У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ AA 55 */
if( (data[FRAME_HEAD_OFFSET] == 0xAA) && (data[FRAME_HEAD_OFFSET + 1] == 0x55) )
{
/*BLVͨѶЭ<D1B6><D0AD> - У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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ͨѶЭ<D1B6><D0AD> - У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>ճ<EFBFBD><D5B3><EFBFBD> */
temp_val = data[FRAME_LEN_OFFSET +1];
temp_val <<= 8;
temp_val |= data[FRAME_LEN_OFFSET];
if( temp_val == len )
{
/*BLVͨѶЭ<D1B6><D0AD> - У<><D0A3>CRCֵ */
temp_val = data[len-1];
temp_val <<= 0x08;
temp_val |= data[len-2];
if(NetCRC16_2(data,len-2) != temp_val) return ; //CRCУ<43><D0A3>ʧ<EFBFBD><CAA7><><D6B1><EFBFBD>˳<EFBFBD>
switch(data[CMD_OFFSET])
{
case In_Search_Cmd: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UDP_Search_Cmd_Processing(data, len, ip, port);
break;
// case In_IAP_Cmd: //IAP APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// UDP_IAP_Cmd_Processing(data, len, ip, port);
// break;
// case In_Subgroup_Cmd: //IAP <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- ȡ<><C8A1>û<EFBFBD><C3BB>ʹ<EFBFBD><CAB9>
// UDP_Subgroup_Cmd_Processing(data, len, ip, port);
// break;
case In_Read_MCUSystem_Cmd: //<2F><>ȡMCU<43><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UDP_Read_MCUSystem_Cmd_Processing(data, len, ip, port);
break;
case In_QueryTime_Cmd: //<2F><>ȡʱ<C8A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Udp_QueryTime_Cmd_Process(data, len, ip, port);
break;
case In_DevState_Cmd: //<2F>ϱ<EFBFBD><CFB1>豸״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Udp_Internal_RoomState_Process(data, len, ip, port);
break;
case In_PeriodicReport_Cmd: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
Udp_Internal_Periodic_Report_Process(data, len, ip, port);
break;
case In_BLVIAPLogic_Cmd:
Udp_Internal_BLVIAP_Logic(data, len, ip, port);
break;
case In_BLVPCTestDevice_Cmd:
Udp_Internal_BLVPCTestDevice_Process(data, len, ip, port);
break;
default:
Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDP CMD %X",data[CMD_OFFSET]);
break;
}
}
}
}
}
/*******************************************
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLV_UDP_Comm_Task
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD> <EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>
********************************************/
__attribute__((section(".non_0_wait"))) void BLV_UDP_Comm_Task(void)
{
static uint32_t udp_state_tick = 0;
uint32_t temp_val = 0;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if( SysTick_1ms - udp_state_tick >= 100 )
{
udp_state_tick = SysTick_1ms;
if( (WCHNET_Get_PHY_Linked_Status() == 0x01) || (server_info.init_flag == 0x00) ) return ; //DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
/*<2A><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>TFTP<54><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
// if(IAPVarTypeStruct_Ptr != NULL)
// {
// if(IAPSTART == IAPVarTypeStruct_Ptr->IapState)
// {
// Dbg_Println(DBG_BIT_NET_STATUS_bit,"RoomState_Cmd<6D><64>ͣ,IAP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..");
// return;
// }
// }
server_info.udp_scan_cnt++;
if(server_info.udp_scan_cnt >= 9)
{
server_info.udp_scan_cnt = 0x00;
server_info.udp_timesync_cnt++;
server_info.udp_periodic_cnt++;
//<2F>ж<EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC> - <20><>û<EFBFBD>е<EFBFBD>ʱ<EFBFBD><CAB1>
if(server_info.udp_timesync_cnt >= 7200){
server_info.udp_timesync_cnt = 0x00;
server_info.active_cmd_flag |= UDP_ActSend_TimeSync_Flag;
}
//<2F>ж϶<D0B6><CFB6><EFBFBD><EFBFBD>ϱ<EFBFBD> - <20><>û<EFBFBD>е<EFBFBD>ʱ<EFBFBD><CAB1>
if(server_info.udp_periodic_cnt >= server_info.udp_periodic_time){
server_info.udp_periodic_cnt = 0x00;
server_info.active_cmd_flag |= UDP_ActSend_Periodic_Flag;
}
//<2F>ж<EFBFBD>RCU<43><55><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>־λ<D6BE>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>
if(server_info.rcu_reboot_flag == 0x01){
server_info.rcu_reboot_flag = 0x00;
server_info.active_cmd_flag |= UDP_ActSend_Reboot_Flag; //<2F>ϱ<EFBFBD>RCU<43><55><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
}
//UDP_ActSend_PowerChange_Scan_State(); //ɨ<><C9A8>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>
//Udp_Scan_Roomstate(); //ɨ<>跿<EFBFBD><E8B7BF><EFBFBD>豸״̬
}
switch(server_info.udp_sta)
{
case 0x01: //ע<><D7A2>
if(server_info.register_flag == 0x01)
{
if(SysTick_1s - server_info.register_tick > USER_NET_Register_Timeout) //ÿ30S <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDPע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD>ͳ<EFBFBD>ʱ %d",server_info.register_num);
server_info.register_tick = SysTick_1s;
server_info.register_num++;
server_info.register_flag = 0x00;
if(server_info.register_num >= USER_NET_Register_Times) server_info.init_flag = 0x00;
}
return ;
}
Dbg_Println(DBG_BIT_NET_STATUS_bit,"UDPע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>");
UDP_Search_Ack(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һֱע<D6B1><D7A2>
server_info.udp_idle_tick = SysTick_1ms;
server_info.register_flag = 0x01;
server_info.register_tick = SysTick_1s;
break;
case 0x02: //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
/*UDP <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFB5BD><EFBFBD><EFBFBD>״̬*/
if(SysTick_1ms - server_info.udp_idle_tick >= 30000)
{
server_info.udp_idle_tick = SysTick_1ms;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
server_info.active_cmd_flag |= UDP_ActSend_Heart_Flag;
}
/*UDP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
if(SysTick_1ms - server_info.udp_online_tick >= server_info.udp_online_time)
{
server_info.udp_online_tick = SysTick_1ms;
server_info.init_flag = 0x00; //UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_SYS_Server_Comm_State_Record(RCU_NO_SERVER);
return ;
}
for(uint8_t i=0;i<7;i++)
{
if( ( server_info.active_cmd_flag & (0x01 << i) ) != 0x00 )
{
server_info.udp_send_flag = 0x01 << i;
server_info.udp_sta = 0x03;
server_info.udp_retry_cnt = 0x00;
server_info.udp_retry_time = 2000;
break;
}
}
break;
case 0x03: //<2F><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>
switch(server_info.udp_send_flag)
{
case 0x01: //ȡ<>ϵ<EFBFBD><CFB5>ϱ<EFBFBD> - <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
Udp_Internal_Power_Change_Report_CMD();
server_info.udp_retry_num = 0x02; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>
server_info.udp_retry_tick = SysTick_1ms;
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_sta = 0x04; //<2F><><EFBFBD><EFBFBD>͵ȴ<CDB5>
break;
case 0x02: //<2F>豸״̬<D7B4>ϱ<EFBFBD> -
Udp_Internal_RoomState();
server_info.udp_retry_num = 0x02; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>
server_info.udp_retry_tick = SysTick_1ms;
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_sta = 0x04; //<2F><><EFBFBD><EFBFBD>͵ȴ<CDB5>
break;
case 0x04: //<2F><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> - ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
Udp_Internal_Periodic_Report_PackSend();
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_send_flag = 0x00;
server_info.active_cmd_flag &= ~UDP_ActSend_Periodic_Flag;
server_info.udp_sta = 0x02;
break;
case 0x08: //<2F>ϱ<EFBFBD>RCU<43><55><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> -
//Udp_Internal_Reboot_Reason_Report_CMD();
server_info.udp_retry_num = 0x02; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>
server_info.udp_retry_tick = SysTick_1ms;
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_sta = 0x04; //<2F><><EFBFBD><EFBFBD>͵ȴ<CDB5>
break;
case 0x10: //<2F><>ȡ<EFBFBD><C8A1>̬ -
Udp_Internal_GetRoomRent_CMD();
server_info.udp_retry_num = 0x02; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>
server_info.udp_retry_tick = SysTick_1ms;
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_sta = 0x04; //<2F><><EFBFBD><EFBFBD>͵ȴ<CDB5>
break;
case 0x20: //ʱ<><CAB1>ͬ<EFBFBD><CDAC> -
Udp_Internal_GetTime_CMD();
server_info.udp_retry_num = 0x02; //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>
server_info.udp_retry_tick = SysTick_1ms;
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_sta = 0x04; //<2F><><EFBFBD><EFBFBD>͵ȴ<CDB5>
break;
case 0x40: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>30S <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
UDP_Heart_Send();
server_info.udp_idle_tick = SysTick_1ms;
server_info.udp_send_flag = 0x00;
server_info.active_cmd_flag &= ~UDP_ActSend_Heart_Flag;
server_info.udp_sta = 0x02;
break;
default:
server_info.udp_sta = 0x02;
break;
}
return ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
case 0x04: //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>ACK
if(server_info.udp_send_flag == 0x00) {
server_info.udp_sta = 0x02; //<2F><><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
if( server_info.udp_retry_cnt <= server_info.udp_retry_num )
{
if( SysTick_1ms - server_info.udp_retry_tick >= server_info.udp_retry_time)
{
server_info.udp_retry_tick = SysTick_1ms;
//<2F><><EFBFBD>ͳ<EFBFBD>ʱ
server_info.udp_retry_cnt++;
if(server_info.udp_retry_cnt > server_info.udp_retry_num)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
if(server_info.udp_send_flag == 0x02) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4><CCAC><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
temp_val = SRAM_Read_DW(SRAM_UDP_SendData_Tempaddr);
SRAM_Write_DW(temp_val, SRAM_UDP_SendData_Readaddr); //<2F><><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>λ
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>ϱ<EFBFBD><EFBFBD>豸״̬ʧ<EFBFBD><EFBFBD> <20><>:%X",temp_val);
temp_val = SRAM_Read_DW(SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9>϶<EFBFBD>ȡ<EFBFBD><C8A1>ַ
SRAM_Write_DW(temp_val, SRAM_DEVICE_ONLINE_STATE_READ_ADDR); //<2F><><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>¸<EFBFBD>ֵ
Dbg_Println(DBG_BIT_NET_STATUS_bit,"<EFBFBD>ϱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD> <20><>:%X",temp_val);
}
server_info.active_cmd_flag &= ~server_info.udp_send_flag;
server_info.udp_sta = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else {
server_info.udp_sta = 0x03; //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
server_info.udp_retry_time += 2000;
}
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 {
//<2F><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
server_info.active_cmd_flag &= ~server_info.udp_send_flag;
server_info.udp_sta = 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
default:
server_info.udp_sta = 0x02;
break;
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ظ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>һλ * 2ms */
if(server_info.search_ack_flag == 0x01)
{
uint32_t temp_tick = 0;
temp_tick = g_netinfo.mac_addr[5];
temp_tick = temp_tick * 2;
if( SysTick_1ms - server_info.search_ack_tick >= temp_tick )
{
server_info.search_ack_tick = SysTick_1ms;
server_info.search_ack_flag = 0x00;
Udp_Internal_Read_MCU_System_SendAck(server_info.goal_ip,server_info.goal_port,server_info.ack_frame);
}
}
}