Gabriel Delgado / Mbed 2 deprecated MTi-1_uart

Dependencies:   mbed mbed-rtos Xbus

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;