Initial commit: my SECS2 project
This commit is contained in:
169
usr/protocol/proto_HSMS.c
Normal file
169
usr/protocol/proto_HSMS.c
Normal file
@@ -0,0 +1,169 @@
|
||||
#include "proto_HSMS.h"
|
||||
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#include "bsp_print.h"
|
||||
#include "bsp_W5500.h"
|
||||
#include "proto_SECS2.h"
|
||||
|
||||
|
||||
static void proto_HSMS_Init(void);
|
||||
static void proto_W5500_DataAnalysis(bsp_W5500_Class_t *pW5500_Class,u8 *pData,u16 Len);
|
||||
static void proto_HSMS_Rx_DataAnalysis(u8 *pData,u16 Len);
|
||||
static void proto_HSMS_Tx_Rsq(proto_HSMS_Header_Data_t *pHeader_Data,u8 *Tx_Data,u16 Tx_Data_Len,void *OtherData);
|
||||
|
||||
u8 proto_HSMS_Tx_Buffer[1024];
|
||||
|
||||
proto_HSMS_t HSMS =
|
||||
{
|
||||
.Init = proto_HSMS_Init,
|
||||
.Tx_RsqData = proto_HSMS_Tx_Rsq,
|
||||
};
|
||||
|
||||
proto_HSMS_t *pHSMS = &HSMS;
|
||||
|
||||
static void proto_HSMS_Init(void)
|
||||
{
|
||||
W5500.W5500_Class[0].Rx_DataAnalysis = proto_W5500_DataAnalysis;
|
||||
}
|
||||
|
||||
static void proto_HSMS_Send(u8 *pData,u16 Len)
|
||||
{
|
||||
Debug_UartSend(pData, Len);
|
||||
W5500.Socket_Send(&W5500.W5500_Class[0],pData,Len);
|
||||
}
|
||||
|
||||
static void proto_W5500_DataAnalysis(bsp_W5500_Class_t *pW5500_Class,u8 *pData,u16 Len)
|
||||
{
|
||||
proto_HSMS_Rx_DataAnalysis(pData,Len);
|
||||
}
|
||||
|
||||
/*<2A><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>*/
|
||||
static void proto_HSMS_Tx_Rsq(proto_HSMS_Header_Data_t *pHeader_Data,u8 *Tx_Data,u16 Tx_Data_Len,void *OtherData)
|
||||
{
|
||||
u8 *Tx = proto_HSMS_Tx_Buffer;
|
||||
u16 Len;
|
||||
|
||||
pHeader_Data->Data_Len = 10 + Tx_Data_Len;
|
||||
u32TOu8(pHeader_Data->Data_Len,Tx,PROTO_HSMS_ENDIAN);
|
||||
u16TOu8(pHeader_Data->Device_Id,&Tx[4],PROTO_HSMS_ENDIAN);
|
||||
|
||||
Tx[6] = pHeader_Data->Header_Byte2.ALL_Data;
|
||||
Tx[7] = pHeader_Data->Header_Byte3;
|
||||
Tx[8] = pHeader_Data->PType;
|
||||
Tx[9] = pHeader_Data->SType;
|
||||
u32TOu8(pHeader_Data->Sys_Byte,&Tx[10],PROTO_HSMS_ENDIAN);
|
||||
Len = 14;
|
||||
|
||||
if(NULL != Tx_Data && 0 != Tx_Data_Len)
|
||||
{
|
||||
memcpy(&Tx[Len],Tx_Data,Tx_Data_Len);
|
||||
Len += Tx_Data_Len;
|
||||
}
|
||||
|
||||
|
||||
proto_HSMS_Send(Tx,Len);
|
||||
Debug_UartSend(Tx,Len);
|
||||
}
|
||||
|
||||
void proto_HSMS_Header_DataAnalysis(proto_HSMS_Header_Data_t *pHeader_Data,u8 *pData)
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>н<EFBFBD><D0BD><EFBFBD>*/
|
||||
pHeader_Data->Data_Len = u8TOu32(&pData[0],PROTO_HSMS_ENDIAN);
|
||||
pHeader_Data->Device_Id = u8TOu16(&pData[4],PROTO_HSMS_ENDIAN);
|
||||
pHeader_Data->Header_Byte2.ALL_Data = pData[6];
|
||||
pHeader_Data->Header_Byte3 = pData[7];
|
||||
pHeader_Data->PType = pData[8];
|
||||
pHeader_Data->SType = pData[9];
|
||||
pHeader_Data->Sys_Byte = u8TOu32(&pData[10],PROTO_HSMS_ENDIAN);
|
||||
}
|
||||
|
||||
void proto_HSMS_Rx_DataAnalysis(u8 *pData,u16 Len)
|
||||
{
|
||||
if(Len < 14)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>*/
|
||||
return ;
|
||||
|
||||
proto_HSMS_Header_DataAnalysis(&pHSMS->Rx_Header_Data,pData);
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>*/
|
||||
if((pHSMS->Rx_Header_Data.Data_Len + 4) != Len)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD>SECS2<53><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ*/
|
||||
if(proto_HSMS_PTYPE_SECS2 != pHSMS->Rx_Header_Data.PType)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
switch(pHSMS->Rx_Header_Data.SType)
|
||||
{
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
|
||||
case PROTO_HSMS_STYPE_Data_Message :
|
||||
{
|
||||
/*ƥ<><C6A5><EFBFBD>豸ID*/
|
||||
|
||||
if(pHSMS->Flash_ConfigData.Device_Id != pHSMS->Rx_Header_Data.Device_Id)
|
||||
{
|
||||
return;
|
||||
}
|
||||
memcpy(&pHSMS->Tx_Header_Data,&pHSMS->Rx_Header_Data,sizeof(proto_HSMS_Header_Data_t));
|
||||
/*ȥ<><C8A5>HSMSͷ<53><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
SECS2.Rx_DataAnalysis(&pHSMS->Tx_Header_Data,&pData[14],Len-14);
|
||||
|
||||
}break;
|
||||
/*ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
case PROTO_HSMS_STYPE_Select_Req :
|
||||
{
|
||||
memcpy(&pHSMS->Tx_Header_Data,&pHSMS->Rx_Header_Data,sizeof(proto_HSMS_Header_Data_t));
|
||||
pHSMS->Tx_Header_Data.SType = PROTO_HSMS_STYPE_Select_Rsq;
|
||||
proto_HSMS_Tx_Rsq(&pHSMS->Tx_Header_Data,NULL,0,NULL);
|
||||
}break;
|
||||
/*ѡ<><D1A1><EFBFBD><EFBFBD>Ӧ*/
|
||||
case PROTO_HSMS_STYPE_Select_Rsq :
|
||||
{
|
||||
|
||||
}break;
|
||||
/*ȡ<><C8A1>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
case PROTO_HSMS_STYPE_Deselect_Req :
|
||||
{
|
||||
memcpy(&pHSMS->Tx_Header_Data,&pHSMS->Rx_Header_Data,sizeof(proto_HSMS_Header_Data_t));
|
||||
pHSMS->Tx_Header_Data.SType = PROTO_HSMS_STYPE_Deselect_Rsq;
|
||||
proto_HSMS_Tx_Rsq(&pHSMS->Tx_Header_Data,NULL,0,NULL);
|
||||
}break;
|
||||
/*ȡ<><C8A1>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ӧ*/
|
||||
case PROTO_HSMS_STYPE_Deselect_Rsq :
|
||||
{
|
||||
|
||||
}break;
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
case PROTO_HSMS_STYPE_Linktest_Req :
|
||||
{
|
||||
memcpy(&pHSMS->Tx_Header_Data,&pHSMS->Rx_Header_Data,sizeof(proto_HSMS_Header_Data_t));
|
||||
pHSMS->Tx_Header_Data.SType = PROTO_HSMS_STYPE_Linktest_Rsp;
|
||||
proto_HSMS_Tx_Rsq(&pHSMS->Tx_Header_Data,NULL,0,NULL);
|
||||
}break;
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>Ӧ*/
|
||||
case PROTO_HSMS_STYPE_Linktest_Rsp :
|
||||
{
|
||||
|
||||
}break;
|
||||
/*<2A>ܾ<EFBFBD><DCBE><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
case PROTO_HSMS_STYPE_Reject_Req :
|
||||
{
|
||||
|
||||
}break;
|
||||
/*<2A>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
case PROTO_HSMS_STYPE_Separate_Req :
|
||||
{
|
||||
|
||||
}break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user