Skip to content

Instantly share code, notes, and snippets.

@ksvbka
Last active August 31, 2015 08:11
Show Gist options
  • Select an option

  • Save ksvbka/397516ef7cc278f37036 to your computer and use it in GitHub Desktop.

Select an option

Save ksvbka/397516ef7cc278f37036 to your computer and use it in GitHub Desktop.
[Blog] - Giao tiep theo frame
/*--------------------------------------------------------------------------------
Function: InitRxDataPackage
Purpose: Init Rx Data Package
Parameters: RX_STATE state
Return: NULL
--------------------------------------------------------------------------------*/
VOID InitRxDataPackage()
{
RegisterUartCallback(UART_DATA_EVENT, CollectingDataPackage);
}
/*--------------------------------------------------------------------------------
Function: CollectingDataPackage
Purpose: Collecting Data package and store in a buffer
Parameters: PVOID buff
Return: NULL
--------------------------------------------------------------------------------*/
VOID CollectingDataPackage(PVOID rxBuff)
{
PBYTE pRxBuff = (PBYTE)rxBuff;
switch(state)
{
case WAIT_START_BYTE:
{
lastRxData = '';
nIndex = 0;
if(*pRxBuff == START_BYTE)
{
DataPackageRX.data[nIndex++] = START_BYTE;
lastRxData = *pRxBuff;
state = IN_MESG;
}
break;
}
case IN_MESG:
{
if(*pRxBuff == STOP_BYTE && lastRxData != ESC_BYTE)
{
state = STOP;
break;
}
if(*pRxBuff == START_BYTE && lastRxData != ESC_BYTE)
{
// Restart frame data.
nIndex = 0;
DataPackageRX.data[nIndex++] = *pRxBuff;
lastRxData = *pRxBuff;
break;
}
DataPackageRX.data[nIndex++] = *pRxBuff;
lastRxData = *pRxBuff;
break;
}
case STOP:
{
DataPackageRX.data[nIndex++] = STOP_BYTE;
DataPackageRX.data[nIndex] = '';
DataPackageRX.length = nIndex;
//WriteUart(DataPackageRX.data, nIndex);
// Set flag to process frame data
g_flagFrameReceived = 1;
state = WAIT_START_BYTE;
break;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment