diff --git a/include/model_car_batteries.h b/include/model_car_batteries.h index 936a860e71053752a87fc74976529cb6da7f7b94..4b2ae9957e23a84bad26862d5558542cb2cd6c7e 100644 --- a/include/model_car_batteries.h +++ b/include/model_car_batteries.h @@ -1,20 +1,11 @@ #ifndef _MODEL_CAR_BATTERIES_H #define _MODEL_CAR_BATTERIES_H -#include "rs232.h" -#include "commexceptions.h" -#include "threadserver.h" #include "model_car_driver_base.h" -#include "model_car_exceptions.h" -#include "model_car_protocol.h" -#include <iostream> -#include <iomanip> -#include <vector> -#include <dirent.h> -#include <chrono> -#include <thread> #include <map> +typedef std::map<const SENSOR_ID, double> voltages_map_t; + /** * @class CModelCarBatteries * @brief CModelCarBatteries class brief description text @@ -24,14 +15,21 @@ class CModelCarBatteries: public CModelCarDriverBase { private: - void process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union); - std::map<SENSOR_ID, TVoltageData> m_bat_values; - - protected: + void process_data_frame(uint8_t id, TDataUnion data_union); + voltages_map_t battery_values; public: CModelCarBatteries(std::string name); - bool get_bat(SENSOR_ID id, float & value); + double get_motors_battery_voltage(void); + double get_payload_battery_voltage(void); + double get_motors_cell1_voltage(void); + double get_motors_cell2_voltage(void); + double get_payload_cell1_voltage(void); + double get_payload_cell2_voltage(void); + double get_payload_cell3_voltage(void); + double get_payload_cell4_voltage(void); + double get_payload_cell5_voltage(void); + double get_payload_cell6_voltage(void); ~CModelCarBatteries(void); }; diff --git a/src/model_car_batteries.cpp b/src/model_car_batteries.cpp index 8e90f574b8e57fee0d87ef0ab456f2c845a5a23f..8ad7f8e552f40f6ce0b98a216be108c515462bb5 100644 --- a/src/model_car_batteries.cpp +++ b/src/model_car_batteries.cpp @@ -2,60 +2,142 @@ CModelCarBatteries::CModelCarBatteries(std::string name) : CModelCarDriverBase(name, ARDUINO_CENTER_MEASUREMENT) { - TVoltageData v; - v.voltage=0; - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL1, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL2, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL1, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL2, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL3, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL4, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL5, v)); - m_bat_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL6, v)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL1, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_ACTUATOR_CELL2, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL1, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL2, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL3, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL4, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL5, 0.0)); + battery_values.insert(std::make_pair(ID_ARD_SENS_VOLT_SENSORS_CELL6, 0.0)); } -void CModelCarBatteries::process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union) +void CModelCarBatteries::process_data_frame(uint8_t id, TDataUnion data_union) { - //std::cout << "CModelCarBatteries::process_data_frame: id=" << unsigned(id) << std::endl; - - const SENSOR_ID currentSensor = static_cast<SENSOR_ID>(id); + voltages_map_t::iterator it = this->battery_values.find((SENSOR_ID)id); + static int num_messages=10; - //m_bat_values[currentSensor]=data_union.voltage; - - - auto it = m_bat_values.find(currentSensor); - if(it==m_bat_values.end()) - { - std::cout << "CModelCarBatteries::process_data_frame: error, incorrect id: " << (unsigned int)id << std::endl; - } - else + if(it!=this->battery_values.end()) + it->second = data_union.voltage.voltage/1000.0; + num_messages--; + if(num_messages==0) { - it->second = data_union.voltage; - //m_bat_values[currentSensor] = data_union.us; + num_messages=10; + if(!this->event_server->event_is_set(this->new_data_event_id)) + this->event_server->set_event(this->new_data_event_id); } +} + +double CModelCarBatteries::get_motors_battery_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR]; + this->data_mutex.exit(); + return voltage; } -bool CModelCarBatteries::get_bat(SENSOR_ID id, float & value) +double CModelCarBatteries::get_payload_battery_voltage(void) { - bool ok=false; + double voltage; + this->data_mutex.enter(); - auto it = m_bat_values.find(id); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS]; + this->data_mutex.exit(); - if ( it == m_bat_values.end() ) - { - // not found - } - else - { - value = it->second.voltage/1000.0; //mV to V - ok=true; - } + return voltage; +} + +double CModelCarBatteries::get_motors_cell1_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR_CELL1]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_motors_cell2_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_ACTUATOR_CELL2]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell1_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL1]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell2_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL2]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell3_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL3]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell4_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL4]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell5_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL5]; + this->data_mutex.exit(); + + return voltage; +} + +double CModelCarBatteries::get_payload_cell6_voltage(void) +{ + double voltage; + + this->data_mutex.enter(); + voltage=this->battery_values[ID_ARD_SENS_VOLT_SENSORS_CELL6]; this->data_mutex.exit(); - return ok; + return voltage; } CModelCarBatteries::~CModelCarBatteries()