rikbeuncode
Dependencies: mbed-rtos mbed Xbus
Fork of MTi-1_example by
Revision 22:3eab999c5076, committed 2015-05-19
- 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
--- 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;
