mock_end_effector_driver.cpp
Go to the documentation of this file.
1 /*
2 mock_end_effector_driver.cpp
3 Copyright (C) 2020 Niryo
4 All rights reserved.
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program. If not, see <http:// www.gnu.org/licenses/>.
15 */
16 
18 
20 #include <cstddef>
21 #include <memory>
22 #include <string>
23 #include <utility>
24 #include <vector>
25 
26 namespace ttl_driver
27 {
28 // definition of methods
29 
33 MockEndEffectorDriver::MockEndEffectorDriver(std::shared_ptr<FakeTtlData> data) : _fake_data(std::move(data))
34 {
35 }
36 
37 //*****************************
38 // AbstractTtlDriver interface
39 //*****************************
40 
45 std::string MockEndEffectorDriver::str() const
46 {
47  return common::model::HardwareTypeEnum(EndEffectorReg::motor_type).toString() + " : " +
49 }
50 
57 {
58  if (std::find(_fake_data->full_id_list.begin(), _fake_data->full_id_list.end(), id) != _fake_data->full_id_list.end())
59  return COMM_SUCCESS;
60  return COMM_TX_FAIL;
61 }
62 
69 int MockEndEffectorDriver::getModelNumber(uint8_t id, uint16_t &model_number)
70 {
71  if (_fake_data->end_effector.id == id)
72  model_number = _fake_data->end_effector.model_number;
73  else
74  return COMM_RX_FAIL;
75  return COMM_SUCCESS;
76 }
77 
83 int MockEndEffectorDriver::checkModelNumber(uint8_t id, uint16_t &model_number)
84 {
85  int ping_result = getModelNumber(id, model_number);
86 
87  if (ping_result == COMM_SUCCESS)
88  {
89  if (model_number)
90  {
92  }
93  }
94 
95  return ping_result;
96 }
97 
103 int MockEndEffectorDriver::scan(std::vector<uint8_t> &id_list)
104 {
105  id_list = _fake_data->full_id_list;
106  return COMM_SUCCESS;
107 }
108 
115 {
116  return ping(id);
117 }
118 
125 int MockEndEffectorDriver::readFirmwareVersion(uint8_t id, std::string &version)
126 {
127  if (COMM_SUCCESS != ping(id))
128  return COMM_RX_FAIL;
129 
130  version = _fake_data->end_effector.firmware;
131  return COMM_SUCCESS;
132 }
133 
134 // ram read
135 
142 int MockEndEffectorDriver::readTemperature(uint8_t id, uint8_t &temperature)
143 {
144  if (COMM_SUCCESS != ping(id))
145  return COMM_RX_FAIL;
146 
147  temperature = _fake_data->end_effector.temperature;
148  return COMM_SUCCESS;
149 }
150 
157 int MockEndEffectorDriver::readVoltage(uint8_t id, double &voltage)
158 {
159  if (COMM_SUCCESS != ping(id))
160  return COMM_RX_FAIL;
161 
162  voltage = static_cast<double>(voltage) / EndEffectorReg::VOLTAGE_CONVERSION;
163  return COMM_SUCCESS;
164 }
165 
172 int MockEndEffectorDriver::readHwErrorStatus(uint8_t id, uint8_t &hardware_error_status)
173 {
174  if (COMM_SUCCESS != ping(id))
175  return COMM_RX_FAIL;
176 
177  hardware_error_status = 0;
178  return COMM_SUCCESS;
179 }
180 
187 int MockEndEffectorDriver::syncReadFirmwareVersion(const std::vector<uint8_t> &id_list,
188  std::vector<std::string> &firmware_list)
189 {
190  int res = 0;
191  firmware_list.clear();
192  for (size_t i = 0; i < id_list.size(); i++)
193  firmware_list.emplace_back(_fake_data->end_effector.firmware);
194  return res;
195 }
196 
203 int MockEndEffectorDriver::syncReadTemperature(const std::vector<uint8_t> &id_list,
204  std::vector<uint8_t> &temperature_list)
205 {
206  temperature_list.clear();
207  for (size_t i = 0; i < id_list.size(); i++)
208  temperature_list.emplace_back(_fake_data->end_effector.temperature);
209  return COMM_SUCCESS;
210 }
211 
218 int MockEndEffectorDriver::syncReadVoltage(const std::vector<uint8_t> &id_list, std::vector<double> &voltage_list)
219 {
220  voltage_list.clear();
221  for (size_t i = 0; i < id_list.size(); i++)
222  voltage_list.emplace_back(static_cast<double>(_fake_data->end_effector.voltage) /
224  return COMM_SUCCESS;
225 }
226 
233 int MockEndEffectorDriver::syncReadRawVoltage(const std::vector<uint8_t> &id_list, std::vector<double> &voltage_list)
234 {
235  voltage_list.clear();
236  for (size_t i = 0; i < id_list.size(); i++)
237  voltage_list.emplace_back(static_cast<double>(_fake_data->end_effector.voltage));
238  return COMM_SUCCESS;
239 }
240 
247 int MockEndEffectorDriver::syncReadHwStatus(const std::vector<uint8_t> &id_list,
248  std::vector<std::pair<double, uint8_t>> &data_list)
249 {
250  data_list.clear();
251 
252  for (size_t i = 0; i < id_list.size(); i++)
253  {
254  double voltage = _fake_data->end_effector.voltage;
255  uint8_t temperature = _fake_data->end_effector.temperature;
256  data_list.emplace_back(std::make_pair(voltage, temperature));
257  }
258  return COMM_SUCCESS;
259 }
260 
267 int MockEndEffectorDriver::syncReadHwErrorStatus(const std::vector<uint8_t> & /*id_list*/,
268  std::vector<uint8_t> &hw_error_list)
269 {
270  hw_error_list.clear();
271  hw_error_list.emplace_back(0);
272  return COMM_SUCCESS;
273 }
274 
275 // buttons status
276 
283 int MockEndEffectorDriver::readButton0Status(uint8_t id, common::model::EActionType &action)
284 {
285  if (COMM_SUCCESS != ping(id))
286  return COMM_RX_FAIL;
287 
288  action = interpretActionValue(_fake_data->end_effector.button0_action);
289  return COMM_SUCCESS;
290 }
291 
298 int MockEndEffectorDriver::readButton1Status(uint8_t id, common::model::EActionType &action)
299 {
300  if (COMM_SUCCESS != ping(id))
301  return COMM_RX_FAIL;
302 
303  action = interpretActionValue(_fake_data->end_effector.button1_action);
304  return COMM_SUCCESS;
305 }
306 
313 int MockEndEffectorDriver::readButton2Status(uint8_t id, common::model::EActionType &action)
314 {
315  if (COMM_SUCCESS != ping(id))
316  return COMM_RX_FAIL;
317 
318  action = interpretActionValue(_fake_data->end_effector.button2_action);
319  return COMM_SUCCESS;
320 }
321 
329  std::vector<common::model::EActionType> &action_list)
330 {
331  action_list.clear();
332 
333  if (COMM_SUCCESS != ping(id))
334  return COMM_RX_FAIL;
335 
336  action_list.emplace_back(interpretActionValue(_fake_data->end_effector.button0_action));
337  action_list.emplace_back(interpretActionValue(_fake_data->end_effector.button1_action));
338  action_list.emplace_back(interpretActionValue(_fake_data->end_effector.button2_action));
339 
340  return COMM_SUCCESS;
341 }
342 
343 // accelerometers and collision
344 
351 int MockEndEffectorDriver::readAccelerometerXValue(uint8_t id, uint32_t &x_value)
352 {
353  if (COMM_SUCCESS != ping(id))
354  return COMM_RX_FAIL;
355 
356  x_value = _fake_data->end_effector.x_value;
357  return COMM_SUCCESS;
358 }
359 
366 int MockEndEffectorDriver::readAccelerometerYValue(uint8_t id, uint32_t &y_value)
367 {
368  if (COMM_SUCCESS != ping(id))
369  return COMM_RX_FAIL;
370 
371  y_value = _fake_data->end_effector.y_value;
372  return COMM_SUCCESS;
373 }
374 
381 int MockEndEffectorDriver::readAccelerometerZValue(uint8_t id, uint32_t &z_value)
382 {
383  if (COMM_SUCCESS != ping(id))
384  return COMM_RX_FAIL;
385 
386  z_value = _fake_data->end_effector.z_value;
387  return COMM_SUCCESS;
388 }
389 
396 int MockEndEffectorDriver::readCollisionStatus(uint8_t id, bool &status)
397 {
398  if (COMM_SUCCESS != ping(id))
399  return COMM_RX_FAIL;
400 
401  status = false;
402  return COMM_SUCCESS;
403 }
404 
412 {
413  if (COMM_SUCCESS != ping(id))
414  return COMM_RX_FAIL;
415  return COMM_SUCCESS;
416 }
417 
425 {
426  if (COMM_SUCCESS != ping(id))
427  return COMM_RX_FAIL;
428  return COMM_SUCCESS;
429 }
430 
438 {
439  if (COMM_SUCCESS != ping(id))
440  return COMM_RX_FAIL;
441 
442  in = _fake_data->end_effector.digital_input;
443  return COMM_SUCCESS;
444 }
445 
453 {
454  if (COMM_SUCCESS != ping(id))
455  return COMM_RX_FAIL;
456 
457  _fake_data->end_effector.digital_input = in;
458  return COMM_SUCCESS;
459 }
460 
468 {
469  if (COMM_SUCCESS != ping(id))
470  return COMM_RX_FAIL;
471 
472  _fake_data->end_effector.digital_output = out;
473  return COMM_SUCCESS;
474 }
475 
476 } // namespace ttl_driver
ttl_driver::MockEndEffectorDriver::readAccelerometerXValue
int readAccelerometerXValue(uint8_t id, uint32_t &x_value) override
MockEndEffectorDriver::readAccelerometerXValue.
Definition: mock_end_effector_driver.cpp:351
ttl_driver::MockEndEffectorDriver::readCollisionStatus
int readCollisionStatus(uint8_t id, bool &status) override
MockEndEffectorDriver::readCollisionStatus.
Definition: mock_end_effector_driver.cpp:396
ttl_driver::MockEndEffectorDriver::str
std::string str() const override
MockEndEffectorDriver::str.
Definition: mock_end_effector_driver.cpp:45
ttl_driver::MockEndEffectorDriver::reboot
int reboot(uint8_t id) override
MockEndEffectorDriver::reboot.
Definition: mock_end_effector_driver.cpp:114
ttl_driver::MockEndEffectorDriver::syncReadHwStatus
int syncReadHwStatus(const std::vector< uint8_t > &id_list, std::vector< std::pair< double, uint8_t > > &data_list) override
MockEndEffectorDriver::syncReadHwStatus.
Definition: mock_end_effector_driver.cpp:247
ttl_driver::EndEffectorReg::motor_type
static constexpr common::model::EHardwareType motor_type
Definition: end_effector_reg.hpp:27
ttl_driver::MockEndEffectorDriver::scan
int scan(std::vector< uint8_t > &id_list) override
MockEndEffectorDriver::scan.
Definition: mock_end_effector_driver.cpp:103
mock_end_effector_driver.hpp
ttl_driver::MockEndEffectorDriver::getModelNumber
int getModelNumber(uint8_t id, uint16_t &model_number) override
MockEndEffectorDriver::getModelNumber.
Definition: mock_end_effector_driver.cpp:69
ttl_driver::AbstractEndEffectorDriver::interpretActionValue
common::model::EActionType interpretActionValue(uint32_t value) const
MockEndEffectorDriver::interpretActionValue.
Definition: abstract_end_effector_driver.cpp:107
end_effector_reg.hpp
ttl_driver::MockEndEffectorDriver::writeCollisionThreshAlgo2
int writeCollisionThreshAlgo2(uint8_t id, int thresh) override
MockEndEffectorDriver::writeCollisionThreshAlgo2.
Definition: mock_end_effector_driver.cpp:424
ttl_driver::MockEndEffectorDriver::readButton2Status
int readButton2Status(uint8_t id, common::model::EActionType &action) override
MockEndEffectorDriver::readButton2Status.
Definition: mock_end_effector_driver.cpp:313
ttl_driver::MockEndEffectorDriver::readDigitalInput
int readDigitalInput(uint8_t id, bool &in) override
MockEndEffectorDriver::readDigitalInput.
Definition: mock_end_effector_driver.cpp:437
ttl_driver::MockEndEffectorDriver::readButton1Status
int readButton1Status(uint8_t id, common::model::EActionType &action) override
MockEndEffectorDriver::readButton1Status.
Definition: mock_end_effector_driver.cpp:298
ttl_driver::MockEndEffectorDriver::syncReadFirmwareVersion
int syncReadFirmwareVersion(const std::vector< uint8_t > &id_list, std::vector< std::string > &firmware_list) override
MockEndEffectorDriver::syncReadFirmwareVersion.
Definition: mock_end_effector_driver.cpp:187
ttl_driver::AbstractEndEffectorDriver::str
std::string str() const override
AbstractEndEffectorDriver::str : build a string describing the object. For debug purpose only.
Definition: abstract_end_effector_driver.cpp:49
ttl_driver::MockEndEffectorDriver::MockEndEffectorDriver
MockEndEffectorDriver(std::shared_ptr< FakeTtlData > data)
MockEndEffectorDriver::EndEffectorDriver.
Definition: mock_end_effector_driver.cpp:33
ttl_driver::EndEffectorReg::VOLTAGE_CONVERSION
static constexpr int VOLTAGE_CONVERSION
Definition: end_effector_reg.hpp:31
ttl_driver::MockEndEffectorDriver::syncReadHwErrorStatus
int syncReadHwErrorStatus(const std::vector< uint8_t > &id_list, std::vector< uint8_t > &hw_error_list) override
MockEndEffectorDriver::syncReadHwErrorStatus.
Definition: mock_end_effector_driver.cpp:267
ttl_driver::MockEndEffectorDriver::syncReadButtonsStatus
int syncReadButtonsStatus(const uint8_t &id, std::vector< common::model::EActionType > &action_list) override
MockEndEffectorDriver::syncReadButtonsStatus.
Definition: mock_end_effector_driver.cpp:328
ttl_driver
Definition: abstract_dxl_driver.hpp:30
ttl_driver::MockEndEffectorDriver::writeDigitalOutput
int writeDigitalOutput(uint8_t id, bool out) override
MockEndEffectorDriver::writeDigitalOutput.
Definition: mock_end_effector_driver.cpp:467
ttl_driver::MockEndEffectorDriver::checkModelNumber
int checkModelNumber(uint8_t id, uint16_t &model_number) override
MockEndEffectorDriver::checkModelNumber.
Definition: mock_end_effector_driver.cpp:83
ttl_driver::MockEndEffectorDriver::writeCollisionThresh
int writeCollisionThresh(uint8_t id, int thresh) override
MockEndEffectorDriver::writeCollisionThresh.
Definition: mock_end_effector_driver.cpp:411
ttl_driver::AbstractTtlDriver::PING_WRONG_MODEL_NUMBER
static constexpr int PING_WRONG_MODEL_NUMBER
Definition: abstract_ttl_driver.hpp:100
ttl_driver::MockEndEffectorDriver::readAccelerometerZValue
int readAccelerometerZValue(uint8_t id, uint32_t &z_value) override
MockEndEffectorDriver::readAccelerometerZValue.
Definition: mock_end_effector_driver.cpp:381
ttl_driver::MockEndEffectorDriver::readTemperature
int readTemperature(uint8_t id, uint8_t &temperature) override
MockEndEffectorDriver::readTemperature.
Definition: mock_end_effector_driver.cpp:142
ttl_driver::MockEndEffectorDriver::readFirmwareVersion
int readFirmwareVersion(uint8_t id, std::string &version) override
MockEndEffectorDriver::readFirmwareVersion.
Definition: mock_end_effector_driver.cpp:125
ttl_driver::MockEndEffectorDriver::syncReadRawVoltage
int syncReadRawVoltage(const std::vector< uint8_t > &id_list, std::vector< double > &voltage_list) override
MockEndEffectorDriver::syncReadRawVoltage.
Definition: mock_end_effector_driver.cpp:233
ttl_driver::MockEndEffectorDriver::readHwErrorStatus
int readHwErrorStatus(uint8_t id, uint8_t &hardware_error_status) override
MockEndEffectorDriver::readHwErrorStatus.
Definition: mock_end_effector_driver.cpp:172
ttl_driver::MockEndEffectorDriver::readAccelerometerYValue
int readAccelerometerYValue(uint8_t id, uint32_t &y_value) override
MockEndEffectorDriver::readAccelerometerYValue.
Definition: mock_end_effector_driver.cpp:366
ttl_driver::MockEndEffectorDriver::ping
int ping(uint8_t id) override
MockEndEffectorDriver::ping.
Definition: mock_end_effector_driver.cpp:56
ttl_driver::MockEndEffectorDriver::readButton0Status
int readButton0Status(uint8_t id, common::model::EActionType &action) override
MockEndEffectorDriver::readButton0Status.
Definition: mock_end_effector_driver.cpp:283
ttl_driver::MockEndEffectorDriver::syncReadTemperature
int syncReadTemperature(const std::vector< uint8_t > &id_list, std::vector< uint8_t > &temperature_list) override
MockEndEffectorDriver::syncReadTemperature.
Definition: mock_end_effector_driver.cpp:203
ttl_driver::MockEndEffectorDriver::_fake_data
std::shared_ptr< FakeTtlData > _fake_data
Definition: mock_end_effector_driver.hpp:94
ttl_driver::MockEndEffectorDriver::writeDigitalInput
int writeDigitalInput(uint8_t id, bool in) override
MockEndEffectorDriver::writeDigitalInput stores the digital input value in the fake data.
Definition: mock_end_effector_driver.cpp:452
ttl_driver::MockEndEffectorDriver::readVoltage
int readVoltage(uint8_t id, double &_voltage) override
MockEndEffectorDriver::readVoltage.
Definition: mock_end_effector_driver.cpp:157
ttl_driver::MockEndEffectorDriver::syncReadVoltage
int syncReadVoltage(const std::vector< uint8_t > &id_list, std::vector< double > &voltage_list) override
MockEndEffectorDriver::syncReadVoltage.
Definition: mock_end_effector_driver.cpp:218


ttl_driver
Author(s): Clement Cocquempot
autogenerated on Fri Mar 6 2026 15:24:15