FBRLogger final version

Dependencies:   EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed

Files at this revision

API Documentation at this revision

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

Nanopb.lib Show annotated file Show diff for this revision Revisions of this file
fbr.pb.c Show annotated file Show diff for this revision Revisions of this file
fbr.pb.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /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()