Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed
Revision 4:66928695da01, committed 2013-02-19
- Comitter:
- intrinseca
- Date:
- Tue Feb 19 20:38:58 2013 +0000
- Parent:
- 3:32206cf84eb4
- Child:
- 5:3c4f35ea3cd9
- Commit message:
- Add protobuf output
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Nanopb.lib Tue Feb 19 20:38:58 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/intrinseca/code/Nanopb/#c7beea49fc91
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fbr.pb.c Tue Feb 19 20:38:58 2013 +0000
@@ -0,0 +1,87 @@
+/* Automatically generated nanopb constant definitions */
+/* Generated by nanopb-0.1.9 at Tue Feb 19 20:21:06 2013. */
+
+#include "fbr.pb.h"
+
+
+
+const pb_field_t network_message_fields[2] = {
+ {1, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_SUBMESSAGE),
+ offsetof(network_message, telemetry),
+ pb_delta(network_message, has_telemetry, telemetry),
+ pb_membersize(network_message, telemetry), 0,
+ &telemetry_message_fields},
+
+ PB_LAST_FIELD
+};
+
+const pb_field_t telemetry_message_fields[14] = {
+ {1, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ offsetof(telemetry_message, rpm),
+ pb_delta(telemetry_message, has_rpm, rpm),
+ pb_membersize(telemetry_message, rpm), 0, 0},
+
+ {2, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_FIXED32),
+ pb_delta_end(telemetry_message, throttle_pos, rpm),
+ pb_delta(telemetry_message, has_throttle_pos, throttle_pos),
+ pb_membersize(telemetry_message, throttle_pos), 0, 0},
+
+ {3, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, manifold_pres, throttle_pos),
+ pb_delta(telemetry_message, has_manifold_pres, manifold_pres),
+ pb_membersize(telemetry_message, manifold_pres), 0, 0},
+
+ {4, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, air_temp, manifold_pres),
+ pb_delta(telemetry_message, has_air_temp, air_temp),
+ pb_membersize(telemetry_message, air_temp), 0, 0},
+
+ {5, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_FIXED32),
+ pb_delta_end(telemetry_message, coolant_temp, air_temp),
+ pb_delta(telemetry_message, has_coolant_temp, coolant_temp),
+ pb_membersize(telemetry_message, coolant_temp), 0, 0},
+
+ {6, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, lambda, coolant_temp),
+ pb_delta(telemetry_message, has_lambda, lambda),
+ pb_membersize(telemetry_message, lambda), 0, 0},
+
+ {7, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, speed, lambda),
+ pb_delta(telemetry_message, has_speed, speed),
+ pb_membersize(telemetry_message, speed), 0, 0},
+
+ {8, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, accel_x, speed),
+ pb_delta(telemetry_message, has_accel_x, accel_x),
+ pb_membersize(telemetry_message, accel_x), 0, 0},
+
+ {9, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, accel_y, accel_x),
+ pb_delta(telemetry_message, has_accel_y, accel_y),
+ pb_membersize(telemetry_message, accel_y), 0, 0},
+
+ {10, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, gear, accel_y),
+ pb_delta(telemetry_message, has_gear, gear),
+ pb_membersize(telemetry_message, gear), 0, 0},
+
+ {11, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, oil_temp, gear),
+ pb_delta(telemetry_message, has_oil_temp, oil_temp),
+ pb_membersize(telemetry_message, oil_temp), 0, 0},
+
+ {12, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_VARINT),
+ pb_delta_end(telemetry_message, warnings, oil_temp),
+ pb_delta(telemetry_message, has_warnings, warnings),
+ pb_membersize(telemetry_message, warnings), 0, 0},
+
+ {13, (pb_type_t) ((int) PB_HTYPE_OPTIONAL | (int) PB_LTYPE_FIXED32),
+ pb_delta_end(telemetry_message, voltage, warnings),
+ pb_delta(telemetry_message, has_voltage, voltage),
+ pb_membersize(telemetry_message, voltage), 0, 0},
+
+ PB_LAST_FIELD
+};
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fbr.pb.h Tue Feb 19 20:38:58 2013 +0000
@@ -0,0 +1,68 @@
+/* Automatically generated nanopb header */
+/* Generated by nanopb-0.1.9 at Tue Feb 19 20:21:06 2013. */
+
+#ifndef _PB_FBR_PB_H_
+#define _PB_FBR_PB_H_
+#include <pb.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Enum definitions */
+/* Struct definitions */
+typedef struct _telemetry_message {
+ bool has_rpm;
+ int32_t rpm;
+ bool has_throttle_pos;
+ float throttle_pos;
+ bool has_manifold_pres;
+ int32_t manifold_pres;
+ bool has_air_temp;
+ int32_t air_temp;
+ bool has_coolant_temp;
+ float coolant_temp;
+ bool has_lambda;
+ int32_t lambda;
+ bool has_speed;
+ int32_t speed;
+ bool has_accel_x;
+ float accel_x;
+ bool has_accel_y;
+ float accel_y;
+ bool has_gear;
+ int32_t gear;
+ bool has_oil_temp;
+ int32_t oil_temp;
+ bool has_warnings;
+ int32_t warnings;
+ bool has_voltage;
+ float voltage;
+} telemetry_message;
+
+typedef struct _network_message {
+ bool has_telemetry;
+ telemetry_message telemetry;
+} network_message;
+
+/* Default values for struct fields */
+
+/* Struct field encoding specification for nanopb */
+extern const pb_field_t network_message_fields[2];
+extern const pb_field_t telemetry_message_fields[14];
+
+/* Check that field information fits in pb_field_t */
+#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT)
+STATIC_ASSERT((pb_membersize(network_message, telemetry) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_network_message_telemetry_message)
+#endif
+
+#if !defined(PB_FIELD_32BIT)
+STATIC_ASSERT((pb_membersize(network_message, telemetry) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_network_message_telemetry_message)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
+
--- a/main.cpp Sun Feb 17 19:19:19 2013 +0000
+++ b/main.cpp Tue Feb 19 20:38:58 2013 +0000
@@ -4,6 +4,9 @@
#include <stdint.h>
#include <fstream>
#include <iomanip>
+#include "pb.h"
+#include "pb_encode.h"
+#include "fbr.pb.h"
#define LOGGING_INTERVAL 0.1
#define ANALOG_SCALE 3.3
@@ -31,25 +34,50 @@
return false;
}
+static bool write_callback(pb_ostream_t *stream, const uint8_t *buf, size_t count)
+{
+ ostream* out = (ostream*)stream->state;
+ out->write(reinterpret_cast<const char*>(buf), count);
+ return out->bad();
+}
+
void take_sample()
{
ofstream out;
-
- float value;
-
- out.open(logFileName);
-
- // Write the Analog Sensors
- for(int i = 0; i < 6; i++) {
- value = analogInputs[i].read() * ANALOG_SCALE;
- out << setw(10) << value << ",";
- }
-
- //Write the ECU data (in binary form)
- out.write(reinterpret_cast<char*>(&car), sizeof(State));
+ telemetry_message telemetry;
+
+ pb_ostream_t pb_out = {&write_callback, out, 1000, 0};
+ uint8_t zero = 0;
+
+ telemetry.rpm = car.rpm;
+ telemetry.throttle_pos = car.throttle_pos;
+ telemetry.manifold_pres = car.manifold_pres;
+ telemetry.air_temp = car.air_temp;
+ telemetry.coolant_temp = car.coolant_temp;
+ telemetry.lambda = car.lambda;
+ telemetry.speed = car.speed;
+ telemetry.gear = car.gear;
+ telemetry.oil_temp = car.oil_temp;
+ telemetry.warnings = car.warnings;
+ telemetry.voltage = car.voltage;
- out << endl;
- out.close();
+ telemetry.accel_x = analogInputs[4].read();
+ telemetry.accel_y = analogInputs[5].read();
+
+ pb_encode(&pb_out, telemetry_message_fields, &telemetry);
+ pb_write(&pb_out, &zero, 1);
+
+// float value;
+//
+// out.open(logFileName);
+//
+// // Write the Analog Sensors
+//
+// //Write the ECU data (in binary form)
+// out.write(reinterpret_cast<char*>(&car), sizeof(State));
+//
+// out << endl;
+// out.close();
}
int main()
