31 #ifndef QBROBOTICS_DRIVER_QBROBOTICS_RESEARCH_API_H
32 #define QBROBOTICS_DRIVER_QBROBOTICS_RESEARCH_API_H
77 virtual int listConnectedDevices(
const std::string &serial_port_name, std::vector<ConnectedDeviceInfo> &device_ids);
84 virtual int listSerialPorts(std::vector<serial::PortInfo> &serial_ports_info);
109 virtual int createSerialPort(
const std::string &serial_port_name, uint32_t baud_rate);
142 virtual int openSerialPort(
const std::string &serial_port_name, uint32_t baud_rate);
167 virtual int parsePackage(
const std::string &serial_port_name, uint8_t device_id, uint8_t command);
168 virtual int parsePackage(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, std::vector<int8_t> &data_in);
169 virtual int sendCommand(
const std::string &serial_port_name, uint8_t device_id, uint8_t command);
170 virtual int sendCommand(
const std::string &serial_port_name, uint8_t device_id, uint8_t command,
const std::vector<int8_t> &data_out);
171 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command);
172 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, uint8_t max_repeats);
173 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, std::vector<int8_t> &data_in);
174 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, uint8_t max_repeats, std::vector<int8_t> &data_in);
175 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command,
const std::vector<int8_t> &data_out);
176 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, uint8_t max_repeats,
const std::vector<int8_t> &data_out);
177 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command,
const std::vector<int8_t> &data_out, std::vector<int8_t> &data_in);
178 virtual int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t command, uint8_t max_repeats,
const std::vector<int8_t> &data_out, std::vector<int8_t> &data_in);
180 virtual int sendCommandBroadcast(
const std::string &serial_port_name, uint8_t command,
const std::vector<int8_t> &data_out);
183 virtual int deserializePackage(
const std::vector<uint8_t> &package_in, uint8_t &device_id, uint8_t &command);
184 virtual int deserializePackage(
const std::vector<uint8_t> &package_in, uint8_t &device_id, uint8_t &command, std::vector<int8_t> &data);
185 virtual int readPackage(
const std::string &serial_port_name, std::vector<uint8_t> &package_in);
186 virtual int readPackage(
const std::string &serial_port_name, uint8_t &device_id, uint8_t &command);
187 virtual int readPackage(
const std::string &serial_port_name, uint8_t &device_id, uint8_t &command, std::vector<int8_t> &data);
188 virtual int serializePackage(uint8_t device_id, uint8_t command, std::vector<uint8_t> &package_out);
189 virtual int serializePackage(uint8_t device_id, uint8_t command,
const std::vector<int8_t> &data, std::vector<uint8_t> &package_out);
190 virtual int writePackage(
const std::string &serial_port_name,
const std::vector<uint8_t> &package_out);
191 virtual int writePackage(
const std::string &serial_port_name, uint8_t device_id, uint8_t command);
192 virtual int writePackage(
const std::string &serial_port_name, uint8_t device_id, uint8_t command,
const std::vector<int8_t> &data);
194 virtual uint8_t
checksum(
const std::vector<uint8_t> &data, uint32_t size);
198 auto a =
reinterpret_cast<uint8_t*
>(std::addressof(x));
199 for(
auto b = a+
sizeof(T)-1; a<b; ++a,--b) {
205 for (
auto &&item : vector) {
209 template<
class S,
class T>
211 auto data_in =
reinterpret_cast<S*
>(vector.data());
212 std::vector<S> data_out(data_in, data_in+vector.size()*
sizeof(T)/
sizeof(S));
215 template<
class S,
class T>
217 auto data_out = vectorCast<S>(vector);
221 template<
class S,
class T>
224 return vectorCast<S>(vector);
255 int parsePackage(
const std::string &serial_port_name, uint8_t device_id, uint8_t
command, std::vector<int8_t> &data_in)
override;
256 int sendCommandAndParse(
const std::string &serial_port_name, uint8_t device_id, uint8_t
command, uint8_t max_repeats,
const std::vector<int8_t> &data_out, std::vector<int8_t> &data_in)
override;
258 int deserializePackage(
const std::vector<uint8_t> &package_in, uint8_t &device_id, uint8_t &
command, std::vector<int8_t> &data)
override;
259 int readLongPackage(
const std::string &serial_port_name, std::vector<uint8_t> &package_in);
260 int readPackage(
const std::string &serial_port_name, uint8_t &device_id, uint8_t &
command, std::vector<int8_t> &data)
override;
261 int readPackage(
const std::string &serial_port_name, std::vector<uint8_t> &package_in)
override;
279 virtual void initParams(
const std::vector<int8_t> ¶m_buffer);
282 static void getParameter(uint8_t param_id,
const std::vector<int8_t> ¶m_buffer, std::vector<T> ¶m_vector) {
283 auto number_of_values =
static_cast<uint8_t
>(param_buffer.at((param_id-1)*
PARAM_BYTE_SLOT + 2));
284 auto param_iter = param_buffer.begin() + (param_id-1)*
PARAM_BYTE_SLOT + 3;
285 std::vector<int8_t> param_bytes(param_iter, param_iter + number_of_values*
sizeof(T));
286 param_vector = Communication::vectorCastAndSwap<T>(param_bytes);
289 static void getParameter(uint8_t param_id,
const std::vector<int8_t> ¶m_buffer, T ¶m) {
290 std::vector<T> param_vector;
292 param = param_vector.front();
315 explicit Device(std::shared_ptr<Communication> communication, std::string name, std::string serial_port, uint8_t
id);
316 explicit Device(std::shared_ptr<Communication> communication, std::string name, std::string serial_port, uint8_t
id,
bool init_params);
317 explicit Device(std::shared_ptr<Communication> communication, std::string name, std::string serial_port, uint8_t
id,
bool init_params, std::unique_ptr<Params> params);
336 virtual int getCurrents(std::vector<int16_t> ¤ts);
353 virtual int getPositions(std::vector<int16_t> &positions);
410 virtual int getInfo(std::string &info);
419 virtual int getInfo(uint16_t info_type, std::string &info);
427 virtual int getParameters(std::vector<int8_t> ¶m_buffer);
438 virtual int getParameters(uint8_t
id, std::vector<int8_t> ¶m_buffer);
668 virtual int setParameter(uint16_t param_type,
const std::vector<int8_t> ¶m_data);
858 #endif // QBROBOTICS_DRIVER_QBROBOTICS_RESEARCH_API_H