Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos Xbus
Diff: xbus/xbusparser.c
- Revision:
- 14:155f9a55ec51
- Parent:
- 10:18a6661b7e59
- Child:
- 17:680f28e00d17
--- a/xbus/xbusparser.c Tue May 19 13:11:23 2015 +0200
+++ b/xbus/xbusparser.c Tue May 19 13:29:34 2015 +0200
@@ -32,10 +32,8 @@
struct XbusParser
{
struct XbusParserCallback callbacks;
- uint8_t* messageBuffer;
- uint16_t currentMessageLength;
+ struct XbusMessage currentMessage;
uint16_t payloadReceived;
- uint8_t currentMessageId;
uint8_t checksum;
enum XbusParserState state;
};
@@ -71,7 +69,7 @@
static void prepareForPayload(struct XbusParser* parser)
{
- parser->messageBuffer = parser->callbacks.allocateBuffer(parser->currentMessageLength);
+ parser->currentMessage.data = parser->callbacks.allocateBuffer(parser->currentMessage.length);
parser->payloadReceived = 0;
}
@@ -94,7 +92,7 @@
case XBPS_MessageId:
parser->checksum += byte;
- parser->currentMessageId = byte;
+ parser->currentMessage.mid = (enum XsMessageId)byte;
parser->state = XBPS_Length;
break;
@@ -102,12 +100,12 @@
parser->checksum += byte;
if (byte == XBUS_NO_PAYLOAD)
{
- parser->currentMessageLength = byte;
+ parser->currentMessage.length = byte;
parser->state = XBPS_Checksum;
}
else if (byte < XBUS_EXTENDED_LENGTH)
{
- parser->currentMessageLength = byte;
+ parser->currentMessage.length = byte;
prepareForPayload(parser);
parser->state = XBPS_Payload;
}
@@ -119,24 +117,24 @@
case XBPS_ExtendedLengthMsb:
parser->checksum += byte;
- parser->currentMessageLength = ((uint16_t)byte) << 8;
+ parser->currentMessage.length = ((uint16_t)byte) << 8;
parser->state = XBPS_ExtendedLengthLsb;
break;
case XBPS_ExtendedLengthLsb:
parser->checksum += byte;
- parser->currentMessageLength |= byte;
+ parser->currentMessage.length |= byte;
prepareForPayload(parser);
parser->state = XBPS_Payload;
break;
case XBPS_Payload:
parser->checksum += byte;
- if (parser->messageBuffer)
+ if (parser->currentMessage.data)
{
- parser->messageBuffer[parser->payloadReceived] = byte;
+ parser->currentMessage.data[parser->payloadReceived] = byte;
}
- if (++parser->payloadReceived == parser->currentMessageLength)
+ if (++parser->payloadReceived == parser->currentMessage.length)
{
parser->state = XBPS_Checksum;
}
@@ -144,11 +142,9 @@
case XBPS_Checksum:
parser->checksum += byte;
- if ((parser->checksum == 0) && parser->messageBuffer)
+ if ((parser->checksum == 0) && parser->currentMessage.data)
{
- parser->callbacks.handleMessage(parser->currentMessageId,
- parser->currentMessageLength,
- parser->messageBuffer);
+ parser->callbacks.handleMessage(&parser->currentMessage);
}
parser->state = XBPS_Preamble;
break;