FBRLogger final version
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()