FBRLogger final version
Dependencies: EthernetInterface MSCAN Nanopb SDFileSystem mbed-rtos mbed
main.cpp
- Committer:
- intrinseca
- Date:
- 2013-02-19
- Revision:
- 4:66928695da01
- Parent:
- 3:32206cf84eb4
- Child:
- 5:3c4f35ea3cd9
File content as of revision 4:66928695da01:
#include "SDHCFileSystem.h" #include "CANComms.h" #include "State.h" #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 State car; CANComms* can; SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board AnalogIn analogInputs[] = {p15, p16, p17, p18, p19, p20}; Ticker sample; char logFileName[50]; void writeLog_string(const char *data); void writeLog_data(const char *data, unsigned char length); bool file_exists(const char * filename) { if (FILE * file = fopen(filename, "r")) { fclose(file); return true; } 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; 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; 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() { char logIndex = 0; printf("FBR CAN Data Logger\n"); mkdir("/sd/fbr", 0777); do { sprintf(&logFileName[0], "/sd/fbr/log.%d", logIndex); logIndex++; } while(file_exists(&logFileName[0])); printf("Log File: %s\n", &logFileName[0]); printf("Listening Started\n"); can = new CANComms(&car, true, LOGGING_INTERVAL); sample.attach(&take_sample, LOGGING_INTERVAL); while(true) { __wfi(); } }