Skip to content
Snippets Groups Projects
Commit eb9aa83d authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Extended the public API to simplify its use.

Generated the new data event when all the internal information has been updated.
parent 2258eafc
No related branches found
No related tags found
1 merge request!1Sergi
#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);
};
......
......@@ -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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment