Add LPC1768

Dependencies:   mbed-rtos mbed Xbus

Fork of MTi-1_example by Xsens

Files at this revision

API Documentation at this revision

Comitter:
Alex Young
Date:
Tue May 19 13:29:34 2015 +0200
Parent:
13:dc2aa4678ec7
Child:
15:558d279addd9
Commit message:
Use XbusMessage struct in parser.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
xbus/xbusmessage.h Show annotated file Show diff for this revision Revisions of this file
xbus/xbusparser.c Show annotated file Show diff for this revision Revisions of this file
xbus/xbusparser.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue May 19 13:11:23 2015 +0200
+++ b/main.cpp	Tue May 19 13:29:34 2015 +0200
@@ -54,24 +54,24 @@
 	}
 }
 
-static void mtDataHandler(uint8_t mid, uint16_t dataLength, uint8_t const* data)
+static void mtDataHandler(struct XbusMessage const* message)
 {
-	if (mid == MTDATA2_MESSAGE_ID)
+	if (message->mid == MTDATA2_MESSAGE_ID)
 	{
 		pc.printf("MTData2:");
 		uint16_t counter;
-		if (MtData2_getItem(&counter, XDI_PacketCounter, data, dataLength))
+		if (MtData2_getItem(&counter, XDI_PacketCounter, message->data, message->length))
 		{
 			pc.printf(" Packet counter: %5d", counter);
 		}
 		float ori[4];
-		if (MtData2_getItem(ori, XDI_Quaternion, data, dataLength))
+		if (MtData2_getItem(ori, XDI_Quaternion, message->data, message->length))
 		{
 			pc.printf(" Orientation: (% .3f, % .3f, % .3f, % .3f)", ori[0], ori[1],
 					ori[2], ori[3]);
 		}
 		uint32_t status;
-		if (MtData2_getItem(&status, XDI_StatusWord, data, dataLength))
+		if (MtData2_getItem(&status, XDI_StatusWord, message->data, message->length))
 		{
 			pc.printf(" Status:%X", status);
 		}
@@ -79,7 +79,7 @@
 	}
 	else
 	{
-		pc.printf("Received Xbus message. MID=%X, length=%d\n", mid, dataLength);
+		pc.printf("Received Xbus message. MID=%X, length=%d\n", message->mid, message->length);
 	}
 }
 
--- a/xbus/xbusmessage.h	Tue May 19 13:11:23 2015 +0200
+++ b/xbus/xbusmessage.h	Tue May 19 13:29:34 2015 +0200
@@ -35,7 +35,7 @@
 {
 	enum XsMessageId mid;
 	uint16_t length;
-	void* data;
+	uint8_t* data;
 };
 
 size_t XbusMessage_format(uint8_t* raw, struct XbusMessage const* message);
--- 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;
--- a/xbus/xbusparser.h	Tue May 19 13:11:23 2015 +0200
+++ b/xbus/xbusparser.h	Tue May 19 13:29:34 2015 +0200
@@ -18,6 +18,7 @@
 
 #include <stddef.h>
 #include <stdint.h>
+#include "xbusmessage.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -40,11 +41,8 @@
 
 	/*!
 	 * \brief Handle a received message.
-	 * \param mid The message ID of the message.
-	 * \param dataLength The number of bytes of data in the message.
-	 * \param data Pointer to the message data.
 	 */
-	void (*handleMessage)(uint8_t mid, uint16_t dataLength, uint8_t const* data);
+	void (*handleMessage)(struct XbusMessage const* message);
 };
 
 size_t XbusParser_mem(void);