前言
做下位机的人员都清楚一点,整个系统不是一个下位机就能完成的,往往需要很多程序交互完成整个系统运行。接下来用具体代码实现上位机发指令下位机接受并执行。
一、下位机注册命令
1,首先下位机使用枚举对应的命令号。网络数据与命令交互是网络协议支持,socket收发。
enum SPECIAL_COMMAND_LIST
{
APP_NET_CMD_BEGIN =0x700,
START_RX_IO_NET_CMD,
STOP_RX_IO_NET_CMD,
GET_CONFIGFILE_CMD,
UP_CONFIG_INFO_CMD,
APP_NET_CMD_END,
APP_NET_CMD_ACK_BEGIN =0X800,
START_RX_IO_NET_CMD_ACK,
STOP_RX_IO_NET_CMD_ACK,
GET_CONFIGFILE_ACK,
UP_CONFIG_INFO_ACK,
APP_NET_CMD_ACK_END,
}
二、下位机注册函数
1,注册函数
{GET_CONFIGFILE_CMD - APP_NET_CMD_BEGIN}={GET_CONFIGFILE_ACK,sizeof(T_SpecSetInfo),(T_AppNetRqstProc)getConfigInfo},
{UP_CONFIG_INFO_CMD- APP_NET_CMD_BEGIN}={UP_CONFIG_INFO_ACK,sizeof(T_SpecSetInfo),(T_AppNetRqstProc)upConfigInfo},
三丶下位机执行指令
上位机发参数下位机获取
#define cmdok 1;
struct delayUsInfo
{
int delayUs;
}
int getConfigFileInfo(void*pRqst ,T_NetCmdRsp*ptNetCmdRsp)
{
int testReplayUs;
struct delayUsInfo*pReplayCtrlInfo =NULL;
pReplayCtrlInfo =(struct delayUsInfo*)pRqst;
testReplayUs =pReplayCtrlInfo->delayUs;
return (cmdok);
}
下位机回传参数给上位机
#define cmdok 1;
int readConfigFile(char*buff)
{
FILE*file=fopen("delayUs.config","a+");
fread(buff,sizeof(int),1,file);
fclose(file);
return 0;
}
int upCofigInfo(void *pRqst ,T_NetCmdRsq *ptNetCmdRsp)
{
int*configMessageBuff= NULL;
if(NULL == configMessageBuff)
configMessageBuff =(int*)CRP_GetMem("configBuf",sizeof(int));
readConfigFile((char*)configMessageBuff);
ptNetCmdRsp->pRspBuf = (char*)configMessageBuff;
return (cmdok);
}
下位机写参数
struct delayUsInfo
{
int delayUs;
}
int writeConfigFile(void*pRqst ,T_NetCmdRsp)
{
struct delayUsInfo *pReplayCtrlInfo =NULL;
pReplayCtrl = (struct delayUsInfo *)pRqst;
FILE*file = fopen("delayUs,config","a+");
fwrite((void*)(pReplayCtrlInfo->delayUs),sizeof(int),1,file);
fclose(file);
return 0;
}
总结
请各位大佬指正,不啬赐教。