Program Listing for File perseus-arm-teleop.hpp¶
↰ Return to documentation for file (software/arm-teleop-direct/include/perseus-arm-teleop.hpp)
#pragma once
// Forward declare WINDOW type to avoid ncurses/boost conflicts
struct _win_st;
typedef struct _win_st WINDOW;
#include <fcntl.h>
#include <termios.h>
#include <boost/asio.hpp>
#include <chrono>
#include <cstdint>
#include <string>
#include <vector>
class ST3215ServoReader
{
public:
ST3215ServoReader(const std::string& port, unsigned int baud_rate, uint8_t acceleration = 30);
~ST3215ServoReader();
uint16_t read_position(uint8_t servo_id);
void write_position(uint8_t servo_id, uint16_t position);
void write_control_register(uint8_t servo_id, uint8_t address, uint8_t value);
int16_t read_load(uint8_t servo_id);
boost::asio::serial_port& get_serial_port() { return _serial_port; }
private:
std::vector<uint8_t> _create_write_command(uint8_t id, uint8_t address, const std::vector<uint8_t>& data);
uint16_t _read_position_once(uint8_t servo_id, const std::chrono::milliseconds& timeout);
std::vector<uint8_t> _create_read_command(uint8_t id, uint8_t address, uint8_t size);
boost::asio::io_service _io_service;
boost::asio::serial_port _serial_port;
};