hi members!
I wanted to send a command frame by uart my initialization is correct but I want to know how can the program understand the frame is finish and star to process it?
my frame is:
typedef struct
{
char StartOfFrame; // 1 byte for SOF
char SequenceNumber; // 1 byte for sequence Number
char CommandType; // 1 byte for event type
char ChannelNum; // 1 byte channel Number
char Parameter[BYTE_PER_CMD_PARAMETER]; // 2 byte for parameters
} _Command_frame;
I wore the uart state in state machine’s form :
void Uart_StateHandler( char Byte)
{
_Command_frame myCommand;
signed char t_BuffLoad;
switch (ReceiveState)
{
////////////////////////////
case UART_HEADER:
if (Byte == COMMAND_HEADER)
ChangeUart_State(UART_SEQUENCE_NUM);
break;
////////////////////////////
case UART_SEQUENCE_NUM:
ReceivedCommands.SequenceNumber = Byte;
ChangeUart_State(UART_CHANNEL_NUM);
break;
////////////////////////////
case UART_CHANNEL_NUM:
ChangeUart_State(UART_COMMANDTYPE);
ReceivedCommands.ChannelNum = Byte;
break;
////////////////////////////
case UART_COMMANDTYPE:
ChangeUart_State(UART_PARAMAMETER_12);
ReceivedCommands.CommandType = Byte;
break;
////////////////////////////
case UART_PARAMAMETER_12:
ChangeUart_State(UART_PARAMAMETER_34);
ReceivedCommands.Parameter[12] = Byte;
break;
////////////////////////////
case UART_PARAMAMETER_34:
ReceivedCommands.Parameter[34] = Byte;
WriteCommandQueues(&CommandQueues, &ReceivedCommands); // add Command into queue
ChangeUart_State(UART_HEADER);
break;
/////////////////////////////////
case UART_LASTBYTE:
if (Byte == LAST_CMND_BYTE )
{
ChangeUart_State(UART_HEADER);
}
break;
}
}
IN lastbyte state I want to recognize that what command must execute at that time and I dont know how?