69,374
社区成员
发帖
与我相关
我的任务
分享
#ifndef __ORDER_H__
#define __ORDER_H__
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
//#define U32 (unsigned int)
#define Mes_SIZE 256//数组元素的个数
#define Com_SIZE 20//存储命令的数组长度
char MesBuff[Mes_SIZE];//全局数组接收应答消息
char MESBuff[Mes_SIZE];//汇总之后消息的存储数组
int len=0;//全局变量记录指针移动长度
int flag=0;//全局变量记录函数返回状态
/*****************************************************************************************/
/* 应答命令格式 */
/*****************************************************************************************/
#define Ord_Head "$"//命令头起始符
#define Ord_Tail ":"//命令头结束符
#define Ord_Dec ","//流水号和应答码之间的,
#define Ord_End "\r\n"//应答结束符
#define RES_C_WEAKUP "A_WEAKUP"//唤醒应答
/*****************************************************************************************/
/* 应答命令状态 */
/*****************************************************************************************/
/*通用应答返回值*/
#define SUCCESS 0//执行成功
/*固定参数*/
typedef struct Fixed_Param{
char RES_Ans_Serial[20];//流水号
char RES_Ans_Num;//应答码
}FIXED_PARAM;
#endif //
#include "Order.h"
int RES_Message_O_Handle(char* Order,char* Serial,char* Key_Serial,char* ptr)//消息解析函数
{
sscanf(ptr,"%*c%[A-Z_]s",Order);
sscanf(ptr,"%*[^:]:%[^,]", Serial);
sscanf(ptr,"%*[^,],%[^\]",Key_Serial);
return SUCCESS;
}
int RES_Message_I_Handle(char* Mes_Order,char* Mes_Serial,char* Mes_Key_Serial,char* Message)//消息整合函数
{
len=0;//初始化len
memset(MesBuff,0,sizeof(MesBuff));//初始化全局数组
Message=MesBuff;
memcpy(Message,Ord_Head,sizeof(Ord_Head));
len+=sizeof(Ord_Head)-1;
memcpy(Message+len,RES_C_WEAKUP,strlen(RES_C_WEAKUP));///////////////////这里怎么用指针把宏的值传过来?////////////////////
len+=sizeof(RES_C_WEAKUP)-1;
memcpy(Message+len,Ord_Tail,sizeof(Ord_Tail));
len+=sizeof(Ord_Tail)-1;
memcpy(Message+len,Mes_Serial,sizeof(Mes_Serial));
len+=sizeof(Mes_Serial);
memcpy(Message+len,Ord_Dec,sizeof(Ord_Dec));
len+=sizeof(Ord_Dec);
memcpy(Message+len,Mes_Key_Serial,sizeof(Mes_Key_Serial));/////////这个地方Mes_Key_Serial的值拼接不上
len+=sizeof(Mes_Key_Serial);
memcpy(Message+len,Ord_End,sizeof(Ord_End));
printf("%s\n",Message);//////////////////这里输出$A_WEAKUP:0002,后面就没有了。
return SUCCESS;
}
int RES_C_Weakup(char* RES_Serial,char* c)//设备唤醒应答函数
{
memset(MESBuff,0,sizeof(MESBuff));//初始化全局数组
//char* Order_Buff=RES_C_WEAKUP;
FIXED_PARAM fixed_param;
fixed_param.RES_Ans_Num='1';
RES_Message_I_Handle(RES_C_WEAKUP,RES_Serial,&fixed_param.RES_Ans_Num,MESBuff);
c=MESBuff;
printf("%s\n",MESBuff);
return SUCCESS;
}
int main()
{
char Order_Buff[Com_SIZE];
char Serial_Buff[Com_SIZE];
char Key_Serial_Buff[Com_SIZE];
char* ptr="$C_ENGINSTART:0002,0102030405060708\r\n";
RES_Message_O_Handle(Order_Buff,Serial_Buff,Key_Serial_Buff,ptr);
printf("The Order is:%s\n",Order_Buff);
printf("The Serial is:%s\n",Serial_Buff);
printf("The KeySerial is:%s\n",Key_Serial_Buff);
char BUFF[256];
memset(BUFF,0,sizeof(char)*256);
RES_C_Weakup(Serial_Buff,BUFF);
fflush(stdout);
printf("\nThis message is:%s\n",BUFF);
system("pause");
return SUCCESS;
}
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define Mes_SIZE 256 // 数组元素的个数
#define Com_SIZE 20 // 存储命令的数组长度
char MesBuff[Mes_SIZE]; // 全局数组接收应答消息
char MESBuff[Mes_SIZE]; // 汇总之后消息的存储数组
int len = 0; // 全局变量记录指针移动长度
int flag = 0; // 全局变量记录函数返回状态
/*****************************************************************************************/
/* 应答命令格式 */
/*****************************************************************************************/
#define Ord_Head "$" // 命令头起始符
#define Ord_Tail ":" // 命令头结束符
#define Ord_Dec "," // 流水号和应答码之间的,
#define Ord_End "\r\n" // 应答结束符
#define RES_C_WEAKUP "A_WEAKUP" // 唤醒应答
/*****************************************************************************************/
/* 应答命令状态 */
/*****************************************************************************************/
/*通用应答返回值*/
#define SUCCESS 0 // 执行成功
/*固定参数*/
typedef struct Fixed_Param{
char RES_Ans_Serial[20]; // 流水号
char RES_Ans_Num; // 应答码
}FIXED_PARAM;
int RES_Message_O_Handle (char* Order,
char* Serial,
char* Key_Serial,
char* ptr)//消息解析函数
{
sscanf(ptr,"%*c%[A-Z_]s",Order); // "C_ENGINSTART"
sscanf(ptr,"%*[^:]:%[^,]",Serial); // "0002"
sscanf(ptr,"%*[^,],%[^\]",Key_Serial); // "0102030405060708"
return SUCCESS;
}
int RES_Message_I_Handle (char* Mes_Order,
char* Mes_Serial,
char* Mes_Key_Serial,
char* Message)//消息整合函数
{
len=0;//初始化len
memcpy(Message,Ord_Head,sizeof(Ord_Head));
len+=sizeof(Ord_Head)-1;
memcpy(Message+len,RES_C_WEAKUP,strlen(RES_C_WEAKUP));///////////////////这里怎么用指针把宏的值传过来?////////////////////
len+=sizeof(RES_C_WEAKUP)-1;
memcpy(Message+len,Ord_Tail,sizeof(Ord_Tail));
len+=sizeof(Ord_Tail)-1;
memcpy(Message+len,Mes_Serial,strlen (Mes_Serial));
len+=strlen(Mes_Serial);
memcpy(Message+len,Ord_Dec,sizeof(Ord_Dec));
len+=sizeof(Ord_Dec)-1;
memcpy(Message+len,Mes_Key_Serial,sizeof(*Mes_Key_Serial));/////////这个地方Mes_Key_Serial的值拼接不上
len+=sizeof(*Mes_Key_Serial);
memcpy(Message+len,Ord_End,sizeof(Ord_End));
printf("RES_Message_I_Handle[%s]\n",Message);//////////////////这里输出$A_WEAKUP:0002,后面就没有了。
return SUCCESS;
}
int RES_C_Weakup(char* RES_Serial,char* c)//设备唤醒应答函数
{
//char* Order_Buff=RES_C_WEAKUP;
FIXED_PARAM fixed_param;
fixed_param.RES_Ans_Num='1';
memset(MESBuff,0,sizeof(MESBuff));//初始化全局数组
RES_Message_I_Handle(RES_C_WEAKUP,RES_Serial,&fixed_param.RES_Ans_Num,MESBuff);
strcpy (c, MESBuff);
printf("RES_C_Weakup[%s]\n",MESBuff);
return SUCCESS;
}
int main()
{
char Order_Buff[Com_SIZE] = {0};
char Serial_Buff[Com_SIZE] = {0};
char Key_Serial_Buff[Com_SIZE] = {0};
char BUFF[256];
char* ptr="$C_ENGINSTART:0002,0102030405060708\r\n";
RES_Message_O_Handle(Order_Buff,Serial_Buff,Key_Serial_Buff,ptr);
printf("The Order is:%s\n",Order_Buff);
printf("The Serial is:%s\n",Serial_Buff);
printf("The KeySerial is:%s\n",Key_Serial_Buff);
memset(BUFF,0,sizeof(char)*256);
RES_C_Weakup(Serial_Buff,BUFF);
fflush(stdout);
printf("This message is:[%s]\n",BUFF);
system("pause");
return SUCCESS;
}
int RES_Message_I_Handle(char* Mes_Order,char* Mes_Serial,char* Mes_Key_Serial,char* Message)//消息整合函数
{
len=0;//初始化len
memset(MesBuff,0,sizeof(MesBuff));//初始化全局数组
Message=MesBuff;
memcpy(Message,Ord_Head,strlen(Ord_Head));
len+=strlen(Ord_Head);
memcpy(Message+len,RES_C_FUNC2STR(RES_C_WEAKUP),strlen(RES_C_FUNC2STR(RES_C_WEAKUP)));
len+=strlen(RES_C_FUNC2STR(RES_C_WEAKUP));
memcpy(Message+len,Ord_Tail,strlen(Ord_Tail));
len+=strlen(Ord_Tail);
memcpy(Message+len,Mes_Serial,strlen(Mes_Serial));
len+=strlen(Mes_Serial);
memcpy(Message+len,Ord_Dec,strlen(Ord_Dec));
len+=strlen(Ord_Dec);
memcpy(Message+len,Mes_Key_Serial,1);
len+=1;
memcpy(Message+len,Ord_End,strlen(Ord_End));
printf("%s\n",Message);
return SUCCESS;
}
///Order.h
#ifndef __ORDER_H__
#define __ORDER_H__
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
//#define U32 (unsigned int)
#define Mes_SIZE 256//数组元素的个数
#define Com_SIZE 20//存储命令的数组长度
char MesBuff[Mes_SIZE];//全局数组接收应答消息
char MESBuff[Mes_SIZE];//汇总之后消息的存储数组
int len=0;//全局变量记录指针移动长度
int flag=0;//全局变量记录函数返回状态
/*****************************************************************************************/
/* 应答命令格式 */
/*****************************************************************************************/
#define Ord_Head "$"//命令头起始符
#define Ord_Tail ":"//命令头结束符
#define Ord_Dec ","//流水号和应答码之间的,
#define Ord_End "\r\n"//应答结束符
enum RES_C_FUNCS {
RES_C_WEAKUP,//0
RES_C_ENGINSTART,//1
RES_C_OPENLOCK,//2
RES_C_CLOSELOCK,//3
};
const char *RES_C_FUNC2STR[4]={
"A_WEAKUP",//唤醒应答
"A_ENGINSTART",//启动应答
"A_OPENLOCK",//遥控开锁应答
"A_CLOSELOCK",//锁门应答
};
/*....................*/
/*****************************************************************************************/
/* 应答命令状态 */
/*****************************************************************************************/
/*通用应答返回值*/
#define SUCCESS 0//执行成功
/*固定参数*/
typedef struct Fixed_Param{
char RES_Ans_Serial[20];//流水号
char RES_Ans_Num;//应答码
}FIXED_PARAM;
#endif //
///Order.cpp
#include "Order.h"
int RES_Message_O_Handle(char* Order,char* Serial,char* Key_Serial,char* ptr)//消息解析函数
{
sscanf(ptr,"%*c%[A-Z_]s",Order);
sscanf(ptr,"%*[^:]:%[^,]", Serial);
sscanf(ptr,"%*[^,],%[^\]",Key_Serial);
return SUCCESS;
}
int RES_Message_I_Handle(char* Mes_Order,char* Mes_Serial,char* Mes_Key_Serial,char* Message)//消息整合函数
{
len=0;//初始化len
memset(MesBuff,0,sizeof(MesBuff));//初始化全局数组
Message=MesBuff;
memcpy(Message,Ord_Head,strlen(Ord_Head));
len+=strlen(Ord_Head);
memcpy(Message+len,RES_C_FUNC2STR(RES_C_WEAKUP),strlen(RES_C_FUNC2STR(RES_C_WEAKUP)));
len+=strlen(RES_C_FUNC2STR(RES_C_WEAKUP));
memcpy(Message+len,Ord_Tail,strlen(Ord_Tail));
len+=strlen(Ord_Tail);
memcpy(Message+len,Mes_Serial,strlen(Mes_Serial));
len+=strlen(Mes_Serial);
memcpy(Message+len,Ord_Dec,strlen(Ord_Dec));
len+=strlen(Ord_Dec);
memcpy(Message+len,Mes_Key_Serial,strlen(Mes_Key_Serial));/////////这个地方Mes_Key_Serial的值拼接不上
len+=strlen(Mes_Key_Serial);
memcpy(Message+len,Ord_End,strlen(Ord_End));
printf("%s\n",Message);//////////////////这里输出$A_WEAKUP:0002,后面就没有了。
return SUCCESS;
}
int RES_C_Weakup(char* RES_Serial,char* c)//设备唤醒应答函数
{
memset(MESBuff,0,sizeof(MESBuff));//初始化全局数组
//char* Order_Buff=RES_C_WEAKUP;
FIXED_PARAM fixed_param;
fixed_param.RES_Ans_Num='1';
RES_Message_I_Handle(RES_C_FUNC2STR(RES_C_WEAKUP),RES_Serial,&fixed_param.RES_Ans_Num,MESBuff);
c=MESBuff;
printf("%s\n",MESBuff);
return SUCCESS;
}
int main()
{
char Order_Buff[Com_SIZE];
char Serial_Buff[Com_SIZE];
char Key_Serial_Buff[Com_SIZE];
char* ptr="$C_ENGINSTART:0002,0102030405060708\r\n";
RES_Message_O_Handle(Order_Buff,Serial_Buff,Key_Serial_Buff,ptr);
printf("The Order is:%s\n",Order_Buff);
printf("The Serial is:%s\n",Serial_Buff);
printf("The KeySerial is:%s\n",Key_Serial_Buff);
char BUFF[256];
memset(BUFF,0,sizeof(char)*256);
RES_C_Weakup(Serial_Buff,BUFF);
fflush(stdout);
printf("\nThis message is:%s\n",BUFF);
system("pause");
return SUCCESS;
}
#define RES_C_WEAKUP "A_WEAKUP"//唤醒应答
#define RES_C_ENGINSTART "A_ENGINSTART"//启动应答
#define RES_C_OPENLOCK "A_OPENLOCK"//遥控开锁应答
#define RES_C_CLOSELOCK "A_CLOSELOCK"//锁门应答
/*....................*/
因为有很多宏,每一个应答命令要写一个函数来实现消息的拼接。所以我想写一个共通函数,让每一个命令函数调用它