diff --git a/src/Power/BATMANv2/Driver.hpp b/src/Power/BATMANv2/Driver.hpp index 1f16448fae..e56074b15e 100644 --- a/src/Power/BATMANv2/Driver.hpp +++ b/src/Power/BATMANv2/Driver.hpp @@ -70,11 +70,13 @@ namespace Power //! Cell Voltage float cell_volt[16]; //! State of new data received - bool state_new_data[9]; + bool state_new_data[10]; //! Time, in min to full empty battery float time_empty; //! Time, in min, to full charge of battery float time_full; + //! Error in calculation of capacity + int max_error; }; //! Serial port @@ -100,7 +102,8 @@ namespace Power void resetStateNewData(void) { - for(uint8_t t = 0; t < 8; t++) + m_batManData.max_error = 100; + for(uint8_t t = 0; t < 9; t++) m_batManData.state_new_data[t] = false; } @@ -280,9 +283,16 @@ namespace Power m_task->debug("Average Time to Full: %.0f min", m_batManData.time_full); m_batManData.state_new_data[8] = true; } + else if (std::strcmp(parameter, "$ERROR") == 0) + { + parameter = std::strtok(NULL, ","); + std::sscanf(parameter, "%d", &m_batManData.max_error); + m_task->debug("Error: %d %%", m_batManData.max_error); + m_batManData.state_new_data[9] = true; + } bool result = true; - for(uint8_t t = 0; t < 8; t++) + for(uint8_t t = 0; t < 9; t++) { if(m_batManData.state_new_data[t] == false) result = false; diff --git a/src/Power/BATMANv2/Task.cpp b/src/Power/BATMANv2/Task.cpp index a7d106dc16..2e220234b9 100644 --- a/src/Power/BATMANv2/Task.cpp +++ b/src/Power/BATMANv2/Task.cpp @@ -374,7 +374,7 @@ namespace Power { m_fuel.setTimeStamp(m_tstamp); m_fuel.value = (m_driver->m_batManData.r_cap * 100) / m_driver->m_batManData.f_cap; - m_fuel.confidence = 100; + m_fuel.confidence = 100 - m_driver->m_batManData.max_error; dispatch(m_fuel, DF_KEEP_TIME); } @@ -383,12 +383,12 @@ namespace Power std::memset(&m_bufer_entity, '\0', sizeof(m_bufer_entity)); if (m_driver->m_batManData.time_full > 0) { - std::sprintf(m_bufer_entity, "fuel reserve - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); + std::sprintf(m_bufer_entity, "Fuel reserve - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); setEntityState(IMC::EntityState::ESTA_ERROR, Utils::String::str(DTR(m_bufer_entity))); } else if((m_driver->m_batManData.time_empty > 0)) { - std::sprintf(m_bufer_entity, "fuel reserve - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); + std::sprintf(m_bufer_entity, "Fuel reserve - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); setEntityState(IMC::EntityState::ESTA_ERROR, Utils::String::str(DTR(m_bufer_entity))); } else @@ -401,12 +401,12 @@ namespace Power std::memset(&m_bufer_entity, '\0', sizeof(m_bufer_entity)); if (m_driver->m_batManData.time_full > 0) { - std::sprintf(m_bufer_entity, "fuel warning - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); + std::sprintf(m_bufer_entity, "Fuel warning - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); setEntityState(IMC::EntityState::ESTA_NORMAL, Utils::String::str(DTR(m_bufer_entity))); } else if((m_driver->m_batManData.time_empty > 0)) { - std::sprintf(m_bufer_entity, "fuel warning - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); + std::sprintf(m_bufer_entity, "Fuel warning - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); setEntityState(IMC::EntityState::ESTA_NORMAL, Utils::String::str(DTR(m_bufer_entity))); } else @@ -419,12 +419,12 @@ namespace Power std::memset(&m_bufer_entity, '\0', sizeof(m_bufer_entity)); if (m_driver->m_batManData.time_full > 0) { - std::sprintf(m_bufer_entity, "fuel running low - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); + std::sprintf(m_bufer_entity, "Fuel running low - ETF: %s", minutesToTime(m_driver->m_batManData.time_full).c_str()); setEntityState(IMC::EntityState::ESTA_NORMAL, Utils::String::str(DTR(m_bufer_entity))); } else if ((m_driver->m_batManData.time_empty > 0)) { - std::sprintf(m_bufer_entity, "fuel running low - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); + std::sprintf(m_bufer_entity, "Fuel running low - ETD: %s", minutesToTime(m_driver->m_batManData.time_empty).c_str()); setEntityState(IMC::EntityState::ESTA_NORMAL, Utils::String::str(DTR(m_bufer_entity))); } else @@ -438,21 +438,24 @@ namespace Power if (m_driver->m_batManData.time_full > 0) std::sprintf(m_bufer_entity, - "H: %d %%, Volt: %.3f V, RCap: %.3f Ah, ETF: %s", + "C: %d %%, H: %d %%, V: %.2f V, RC: %.2f Ah, ETF: %s", + (100 - m_driver->m_batManData.max_error), m_driver->m_batManData.health, m_driver->m_batManData.voltage, m_driver->m_batManData.r_cap, minutesToTime(m_driver->m_batManData.time_full).c_str()); else if (m_driver->m_batManData.time_empty > 0) std::sprintf(m_bufer_entity, - "H: %d %%, Volt: %.3f V, RCap: %.3f Ah, ETD: %s", + "C: %d %%, H: %d %%, V: %.2f V, RC: %.2f Ah, ETD: %s", + (100 - m_driver->m_batManData.max_error), m_driver->m_batManData.health, m_driver->m_batManData.voltage, m_driver->m_batManData.r_cap, minutesToTime(m_driver->m_batManData.time_empty).c_str()); else std::sprintf(m_bufer_entity, - "H: %d %%, Volt: %.3f V, RCap: %.3f Ah", + "C: %d %%, H: %d %%, V: %.2f V, RC: %.2f Ah", + (100 - m_driver->m_batManData.max_error), m_driver->m_batManData.health, m_driver->m_batManData.voltage, m_driver->m_batManData.r_cap);