21 constexpr
double default_period = 0.02;
22 constexpr
double default_charge = 50.0;
23 constexpr
double default_voltage = 30.0;
24 constexpr
double default_current = 3.0;
25 constexpr
double default_temperature = 20.0;
26 constexpr const
char* default_info = "Fake battery system v2.0";
37 double period = config.
check(
"thread_period",
Value(default_period),
"Thread period (smaller implies faster charge/discharge)").asFloat64();
40 double charge = config.
check(
"charge",
Value(default_charge),
"Initial charge (%)").asFloat64();
41 double voltage = config.
check(
"voltage",
Value(default_voltage),
"Initial voltage (V)").asFloat64();
42 double current = config.
check(
"current",
Value(default_current),
"Initial current (A)").asFloat64();
43 double temperature = config.
check(
"temperature",
Value(default_temperature),
"Initial temperature (°C)").asFloat64();
44 std::string info = config.
check(
"info",
Value(default_info),
"Initial battery information").asString();
46 std::lock_guard<std::mutex> lock(m_mutex);
47 battery_charge = charge;
48 battery_voltage = voltage;
49 battery_current = current;
50 battery_temperature = temperature;
51 battery_info = std::move(info);
56 this->
yarp().attachAsServer(ctrl_port);
57 if (!ctrl_port.open(name +
"/control/rpc:i")) {
58 yCError(FAKEBATTERY,
"Could not open rpc port");
81 std::lock_guard<std::mutex> lock(m_mutex);
82 if (battery_current > 0.1) {
83 battery_charge -= 0.001;
84 }
else if (battery_current < -0.1) {
85 battery_charge += 0.001;
92 std::lock_guard<std::mutex> lock(m_mutex);
93 voltage = battery_voltage;
99 std::lock_guard<std::mutex> lock(m_mutex);
100 current = battery_current;
106 std::lock_guard<std::mutex> lock(m_mutex);
107 charge = battery_charge;
113 std::lock_guard<std::mutex> lock(m_mutex);
114 status = battery_status;
120 std::lock_guard<std::mutex> lock(m_mutex);
121 temperature = battery_temperature;
127 std::lock_guard<std::mutex> lock(m_mutex);
134 std::lock_guard<std::mutex> lock(m_mutex);
135 battery_voltage = voltage;
141 std::lock_guard<std::mutex> lock(m_mutex);
142 battery_current = current;
148 std::lock_guard<std::mutex> lock(m_mutex);
149 battery_charge = charge;
155 std::lock_guard<std::mutex> lock(m_mutex);
161 std::lock_guard<std::mutex> lock(m_mutex);
162 battery_temperature = temperature;
167 std::lock_guard<std::mutex> lock(m_mutex);
168 return battery_voltage;
173 std::lock_guard<std::mutex> lock(m_mutex);
174 return battery_current;
179 std::lock_guard<std::mutex> lock(m_mutex);
180 return battery_charge;
185 std::lock_guard<std::mutex> lock(m_mutex);
186 switch (battery_status) {
187 case BATTERY_OK_STANBY:
188 return "0: BATTERY_OK_STANBY";
189 case BATTERY_OK_IN_CHARGE:
190 return "1: BATTERY_OK_IN_CHARGE";
191 case BATTERY_OK_IN_USE:
192 return "2: BATTERY_OK_IN_USE";
193 case BATTERY_GENERAL_ERROR:
194 return "3: BATTERY_GENERAL_ERROR";
196 return "4: BATTERY_TIMEOUT";
197 case BATTERY_LOW_WARNING:
198 return "5: BATTERY_LOW_WARNING";
199 case BATTERY_CRITICAL_WARNING:
200 return "6: BATTERY_CRITICAL_WARNING";
202 return "Invalid battery status";
208 std::lock_guard<std::mutex> lock(m_mutex);
214 std::lock_guard<std::mutex> lock(m_mutex);
215 return battery_temperature;
219 void FakeBattery::updateStatus()
222 if (battery_current > 0.1) {
223 if (battery_charge > 15.0) {
224 battery_status = yarp::dev::IBattery::Battery_status::BATTERY_OK_IN_USE;
225 }
else if (battery_charge > 5.0) {
226 battery_status = yarp::dev::IBattery::Battery_status::BATTERY_LOW_WARNING;
228 battery_status = yarp::dev::IBattery::Battery_status::BATTERY_CRITICAL_WARNING;
230 }
else if (battery_current > -0.1) {
231 battery_status = yarp::dev::IBattery::Battery_status::BATTERY_OK_STANBY;
233 battery_status = yarp::dev::IBattery::Battery_status::BATTERY_OK_IN_CHARGE;
const int BATTERY_TIMEOUT
fakeBattery: Documentation to be added
void setBatteryTemperature(const double temperature) override
std::string getBatteryStatus() override
double getBatteryCharge() override
std::string getBatteryInfo() override
void setBatteryInfo(const std::string &info) override
void setBatteryCurrent(const double current) override
void run() override
Loop function.
bool open(yarp::os::Searchable &config) override
Open the DeviceDriver.
void setBatteryVoltage(const double voltage) override
bool close() override
Close the DeviceDriver.
void setBatteryCharge(const double charge) override
double getBatteryVoltage() override
double getBatteryCurrent() override
double getBatteryTemperature() override
An abstraction for a periodic thread.
bool start()
Call this to start the thread.
void stop()
Call this to stop the thread, this call blocks until the thread is terminated (and releaseThread() ca...
A base class for nested structures that can be searched.
virtual Value & find(const std::string &key) const =0
Gets a value corresponding to a given keyword.
virtual bool check(const std::string &key) const =0
Check if there exists a property of the given name.
A single value (typically within a Bottle).
virtual std::string asString() const
Get string value.
#define yCError(component,...)
#define YARP_LOG_COMPONENT(name,...)
constexpr const T & clamp(const T &v, const T &lo, const T &hi)
An interface for the device drivers.
An interface to the operating system, including Port based communication.
The main, catch-all namespace for YARP.