rikbeuncode

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 16:59:53 2015 +0200
Parent:
21:6015b8be3a00
Child:
23:8171449f0dc3
Commit message:
Add support for reading back output configuration.

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
--- a/main.cpp	Tue May 19 16:59:11 2015 +0200
+++ b/main.cpp	Tue May 19 16:59:53 2015 +0200
@@ -46,6 +46,10 @@
 		case 'd':
 			sendCommand(XMID_ReqDid);
 			break;
+
+		case 'o':
+			sendCommand(XMID_ReqOutputConfig);
+			break;
 	}
 }
 
@@ -84,6 +88,16 @@
 	{
 		pc.printf("Device ID: %8X\n", *(uint32_t*)message->data);
 	}
+	else if (message->mid == XMID_OutputConfig)
+	{
+		pc.printf("Output configuration:\n");
+		struct OutputConfiguration* conf = (struct OutputConfiguration*)message->data;
+		for (int i = 0; i < message->length; ++i)
+		{
+			pc.printf("\t%s: %d Hz\n", XbusMessage_dataDescription(conf->dtype), conf->freq);
+			++conf;
+		}
+	}
 	else
 	{
 		pc.printf("Received Xbus message. MID=%X, length=%d\n", message->mid, message->length);
--- a/xbus/xbusmessage.h	Tue May 19 16:59:11 2015 +0200
+++ b/xbus/xbusmessage.h	Tue May 19 16:59:53 2015 +0200
@@ -32,7 +32,10 @@
 	XMID_GotoConfigAck      = 0x31,
 	XMID_GotoMeasurement    = 0x10,
 	XMID_GotoMeasurementAck = 0x11,
-	XMID_MtData2            = 0x36
+	XMID_MtData2            = 0x36,
+	XMID_ReqOutputConfig    = 0xC0,
+	XMID_SetOutputConfig    = 0xC0,
+	XMID_OutputConfig       = 0xC1,
 };
 
 enum XsDataIdentifier
@@ -55,6 +58,12 @@
 	void* data;
 };
 
+struct OutputConfiguration
+{
+	enum XsDataIdentifier dtype;
+	uint16_t freq;
+};
+
 size_t XbusMessage_format(uint8_t* raw, struct XbusMessage const* message);
 bool XbusMessage_getDataItem(void* item, enum XsDataIdentifier id, struct XbusMessage const* message);
 char const* XbusMessage_dataDescription(enum XsDataIdentifier id);
--- a/xbus/xbusparser.c	Tue May 19 16:59:11 2015 +0200
+++ b/xbus/xbusparser.c	Tue May 19 16:59:53 2015 +0200
@@ -83,6 +83,7 @@
 	switch (mid)
 	{
 		case XMID_DeviceId:
+		case XMID_OutputConfig:
 			return true;
 
 		default:
@@ -109,6 +110,30 @@
 			}
 			break;
 
+		case XMID_OutputConfig:
+			{
+				uint8_t fields = parser->currentMessage.length / 4;
+				struct OutputConfiguration* conf = parser->callbacks.allocateBuffer(fields * sizeof(struct OutputConfiguration));
+				uint8_t const* dptr = parser->rxBuffer;
+				if (conf)
+				{
+					parser->currentMessage.data = conf;
+					parser->currentMessage.length = fields;
+
+					for (int i = 0; i < fields; ++i)
+					{
+						dptr = XbusUtility_readU16((uint16_t*)&conf->dtype, dptr);
+						dptr = XbusUtility_readU16(&conf->freq, dptr);
+						++conf;
+					}
+				}
+				else
+				{
+					parser->currentMessage.data = NULL;
+				}
+			}
+			break;
+
 		default:
 			assert(!canParseMessagePayload(parser->currentMessage.mid));
 			break;