天天看點

cmd解析

#define CMD_BUF_SIZE 10

#define CMD_MAX_LENTGH 10

typedef struct

{

uint8_t buf[CMD_BUF_SIZE];

uint8_t point;

uint8_t status;

}_cmd;

_cmd cmd;

void HostCommand(void)

{

uint16_t bytes;

uint8_t byte;

bytes = USART3available();

while(bytes)

{

byte=USART3Read();

bytes--;

if(cmd.status==0)

{

if(byte=='@')

{

cmd.status=1;

cmd.buf[0]=byte;

cmd.point=1;

}

else

{

cmd.point=0;

}

}

else if(cmd.status==1)

{

if(cmd.point>CMD_MAX_LENTGH)

{

cmd.status=0;

cmd.point=0;

}

else if(cmd.point==3)//PLOADLENTH+OTHERLENTH)

{

cmd.buf[cmd.point++]=byte;

if((cmd.buf[1]=='F')&&(cmd.buf[2]=='S')&&(cmd.buf[3]=='#'))

{

CompassCaliStartCmd();

printf("Compass cali start!\r\n");

cmd.status=0;

cmd.point=0;  

}

else if((cmd.buf[1]=='F')&&(cmd.buf[2]=='E')&&(cmd.buf[3]=='#'))

{

CompassCaliStopCmd();

 printf("Compass cali end!\r\n");

cmd.status=0;

cmd.point=0;  

}

else if((cmd.buf[1]=='D')&&(cmd.buf[2]=='S')&&(cmd.buf[3]=='#'))

{

DataStartCmd();

 printf("Data out!\r\n");

cmd.status=0;

cmd.point=0;  

}

else if((cmd.buf[1]=='D')&&(cmd.buf[2]=='E')&&(cmd.buf[3]=='#'))

{

DataStopCmd();

 printf("Data stop!\r\n");

cmd.status=0;

cmd.point=0;  

}  

else

{

char string[10];

uint8_t i;

for(i=0;i<=cmd.point;i++)

{

string[i]=cmd.buf[i];

}

string[i]='\r';

string[i+1]='\n';

printf("%s",string);

cmd.status=0;

cmd.point=0;

}

}

else

{

cmd.buf[cmd.point++]=byte;

}

}

}

}