📄 serialcomm.c
字号:
// SerialComm.cpp : Defines the entry point for the DLL application.
//
//History
//*Data *Name *comments.
//2008-Feb-03 Rock Li Initialization
//#include "stdafx.h"
#include "SerialComm.h"
#include "SerialBase.h"
// New Key word. It should be well-arranged in the future.
#define CMD_DOWNLOAD_UID 0xEF //DownloadUID
#define CMD_RUN_NET_BUILD 0xEE //RunNetBuild
#define CMD_SEND_UNACK_DATA_TO_TN 0xD0 // SendUnackDataToTN
#define CMD_SEND_ACK_DATA_TO_TN 0xD1 // SendAckDataToTN
#define MAX_UID 8 //DownloadUID
#define UART_TIME_OUT 100
#define UART_ACKED_TIME_OUT 100
#define __LITTLE_ENDIAN_BITFIELD 1
#pragma pack(1)
typedef struct
{
unsigned char command; //CMD_DOWN_0 EF
// unsigned short dataLen;
unsigned char dataLen[2];
}UartHead; //head of Uart
typedef struct
{
UartHead head;
unsigned char UID[MAX_UID][6];
}UartDownloadUID; //UID download
typedef struct
{
UartHead head;
unsigned char result;
unsigned char data[1];
}UartResponsePackage; //UID download
#pragma pack()
//Added by Rock 2008-Feb-01
#define MAX_NUM_TN 100;
typedef struct
{
unsigned char uniqueNodeId[6];
}UID;
static unsigned char m_AckCmd[] = {
CMD_DOWNLOAD_UID,
CMD_RUN_NET_BUILD,
CMD_SEND_UNACK_DATA_TO_TN,
CMD_SEND_ACK_DATA_TO_TN
}; //the name should be adjusted
int DownloadUID(unsigned char *p_TermUID, int NumOfNodes)
{
//CMD_DOWN_DOWNLOAD_UID
//To make the check sum
if(NumOfNodes>MAX_UID)
{
return -1;
}
UartDownloadUID package;
memset((void*)&package,0,sizeof(package));
package.head.command = CMD_DOWNLOAD_UID;
package.head.dataLen[0] = NumOfNodes * 6 ;
memcpy(package.UID,p_TermUID,NumOfNodes*6 );//+ 1 + 2 +2 );
// 1-> functionID, 2-> Data Length,
if(WriteComm((unsigned char*)&package, package.head.dataLen[0] +1 +2 ) != 0 ) //WE should check it again.
{
return -1;
}
pMsgQue ackMsg = NULL;
int bRet = GetAckMessage(&ackMsg, UART_TIME_OUT);
if(bRet == 0 && ackMsg != NULL)
{
UartResponsePackage* responseMsg = (UartResponsePackage*)ackMsg;
if(responseMsg->head.command == CMD_DOWNLOAD_UID
&& responseMsg->result == 0x01)
{
return 0;
}
else
{
//it is impossible; program error
return -1;
}
}
else
{
return -1;
}
return 0;
}
int DllInit(char szComName[])
{
//bool Init(HANDLE hProExit, unsigned char uploadCmd[],char szComName[])
return Init(m_AckCmd,szComName);
// return 0;
}
int DllCleanUp()
{
return CleanUp();
}
int RunNetBuild(void)
{
UartDownloadUID package;
memset((void*)&package,0,sizeof(package));
package.head.command = CMD_RUN_NET_BUILD;
package.head.dataLen[0] = 0x00;
// 1-> functionID, 2-> Data Length,
if(WriteComm((unsigned char*)&package, package.head.dataLen[0] +1 +2 ) != 0) //WE should check it again.
{
return -1;
}
pMsgQue ackMsg = NULL;
int bRet = GetAckMessage(&ackMsg,UART_TIME_OUT);
if(bRet == 0 && ackMsg != NULL)
{
UartResponsePackage* responseMsg = (UartResponsePackage*)ackMsg;
if(responseMsg->head.command == CMD_RUN_NET_BUILD
&& responseMsg->result == 0x01) //this command should be adjusted.
{
return 0;
}
else
{
//it is impossible; program error
return -1;
}
}
else
{
return -1;
}
return 0;
}
//Purpose: To sends unacknowledged data to a TN.
//Arguments description:
//p_TermUID --> An pointer to UID of one terminal Node
//p_InDataBuf -->An pointer to the Data to be sent
//inDataLen -->the length of the data
//return value: true for success and false for failure
//comments: inDataLen should be less than 200. Or it will return false.
int SendUnAckDataToTN ( unsigned char *p_TermUID,
unsigned char *p_InDataBuf,
unsigned char inDataLen)
{
#pragma pack(1)
struct tag_UserData
{
UartHead head;
unsigned char data[256];
} ;
#pragma pack()
struct tag_UserData DataPackage;
if(inDataLen >200)
{
return -1;
}
////////////////
memset((void*)&DataPackage,0,sizeof(DataPackage));
DataPackage.head.command = CMD_SEND_UNACK_DATA_TO_TN;
DataPackage.head.dataLen[0] = inDataLen +6 ; //a UID is 6 Bytes.
memcpy((unsigned char*)DataPackage.data, p_TermUID, 6);//a UID is 6 Bytes.
memcpy( (unsigned char*)DataPackage.data +6 ,p_InDataBuf,inDataLen); //skip a UID
// 1-> functionID, 2-> Data Length,
if(WriteComm((unsigned char*)&DataPackage, DataPackage.head.dataLen[0] +1 +2 ) != 0)
{
return -1;
}
pMsgQue ackMsg = NULL;
int bRet = GetAckMessage(&ackMsg, UART_ACKED_TIME_OUT);
if(bRet == 0 && ackMsg != NULL)
{
UartResponsePackage* responseMsg = (UartResponsePackage*)ackMsg;
if(responseMsg->head.command == CMD_SEND_UNACK_DATA_TO_TN
&& responseMsg->result == 0x01)
{
return 0;
}
else
{
//it is impossible; program error
return -1;
}
}
else
{
return -1;
}
return 0;
}
//Purpose: To sends unacknowledged data to a TN.
//Arguments description:
//p_TermUID --> An pointer to UID of one terminal Node
//p_InDataBuf -->An pointer to the Data to be sent
//inDataLen -->the length of the data
//return value: true for success and false for failure
//comments: inDataLen should be less than 200. Or it will return false.
int SendAckDataToTN ( unsigned char *p_TermUID,
unsigned char *p_InDataBuf,
unsigned char inDataLen,
unsigned char *p_RespData,
unsigned char *p_RespDataLen)
{
#pragma pack(1)
struct tag_UserData
{
UartHead head;
unsigned char data[256];
} ;
#pragma pack()
struct tag_UserData DataPackage;
if(inDataLen >200)
{
return -1;
}
////////////////
p_RespData = NULL;
*p_RespDataLen = 0;
memset((void*)&DataPackage,0,sizeof(DataPackage));
DataPackage.head.command = CMD_SEND_ACK_DATA_TO_TN;
DataPackage.head.dataLen[0] = inDataLen +6 ; //a UID is 6 Bytes.
memcpy(&DataPackage.data, p_TermUID, 6);//a UID is 6 Bytes.
memcpy( (unsigned char*)DataPackage.data +6 ,p_InDataBuf ,inDataLen); //skip a UID
// 1-> functionID, 2-> Data Length,
if(WriteComm((unsigned char*)&DataPackage, DataPackage.head.dataLen[0] +1 +2 ) != 0) //WE should check it again.
{
return -1;
}
pMsgQue ackMsg = NULL;
int bRet = GetAckMessage(&ackMsg, UART_TIME_OUT);
if(bRet == 0 && ackMsg != NULL)
{
UartResponsePackage* responseMsg = (UartResponsePackage*)ackMsg;
if(responseMsg->head.command == CMD_SEND_ACK_DATA_TO_TN
&& responseMsg->result == 0x01)
{
return 0;
}
else
{
//it is impossible; program error
return -1;
}
}
else
{
return -1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -