Add LPC1768
Dependencies: mbed-rtos mbed Xbus
Fork of MTi-1_example by
Revision 14:155f9a55ec51, committed 2015-05-19
- 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
--- 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);
David Khosravi
