3#ifndef __CUI_ABSOLUTE_HPP__
4#define __CUI_ABSOLUTE_HPP__
11#include <yarp/conf/numeric.h>
12#include <yarp/conf/version.h>
14#include <yarp/dev/DeviceDriver.h>
15#include <yarp/dev/IEncodersTimed.h>
17#include "ICanBusSharer.hpp"
18#include "StateObserver.hpp"
19#include "CuiAbsolute_ParamsParser.h"
21#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
22#define CHECK_JOINT(j) do { std::size_t ax; if (getAxes(ax), (j) != static_cast<int>(ax) - 1) return yarp::dev::ReturnValue_error_input_out_of_bounds; } while (0)
24#define CHECK_JOINT(j) do { int ax; if (getAxes(&ax), (j) != ax - 1) return false; } while (0)
39 public yarp::dev::IEncodersTimedRaw,
47 bool open(yarp::os::Searchable & config)
override;
48 bool close()
override;
52 unsigned int getId()
override;
61#if YARP_VERSION_COMPARE(>=, 4, 0, 0)
62 yarp::dev::ReturnValue getAxes(std::size_t & ax)
override;
63 yarp::dev::ReturnValue resetEncoderRaw(
int j)
override;
64 yarp::dev::ReturnValue resetEncodersRaw()
override;
65 yarp::dev::ReturnValue setEncoderRaw(
int j,
double val)
override;
66 yarp::dev::ReturnValue setEncodersRaw(
const double * vals)
override;
67 yarp::dev::ReturnValue getEncoderRaw(
int j,
double * v)
override;
68 yarp::dev::ReturnValue getEncodersRaw(
double * encs)
override;
69 yarp::dev::ReturnValue getEncoderSpeedRaw(
int j,
double * sp)
override;
70 yarp::dev::ReturnValue getEncoderSpeedsRaw(
double * spds)
override;
71 yarp::dev::ReturnValue getEncoderAccelerationRaw(
int j,
double * spds)
override;
72 yarp::dev::ReturnValue getEncoderAccelerationsRaw(
double * accs)
override;
73 yarp::dev::ReturnValue getEncodersTimedRaw(
double * encs,
double * time)
override;
74 yarp::dev::ReturnValue getEncoderTimedRaw(
int j,
double * encs,
double * time)
override;
76 bool getAxes(
int * ax)
override;
77 bool resetEncoderRaw(
int j)
override;
78 bool resetEncodersRaw()
override;
79 bool setEncoderRaw(
int j,
double val)
override;
80 bool setEncodersRaw(
const double * vals)
override;
81 bool getEncoderRaw(
int j,
double * v)
override;
82 bool getEncodersRaw(
double * encs)
override;
83 bool getEncoderSpeedRaw(
int j,
double * sp)
override;
84 bool getEncoderSpeedsRaw(
double * spds)
override;
85 bool getEncoderAccelerationRaw(
int j,
double * spds)
override;
86 bool getEncoderAccelerationsRaw(
double * accs)
override;
87 bool getEncodersTimedRaw(
double * encs,
double * time)
override;
88 bool getEncoderTimedRaw(
int j,
double * encs,
double * time)
override;
93 using encoder_t = yarp::conf::float32_t;
95 enum class CuiMode { PUSH, PULL, OFF };
96 enum class CuiCommand : std::uint8_t { PUSH_START = 1, PUSH_STOP = 2, POLL = 3 };
98 bool performRequest(
const std::string & name,
unsigned int len,
const std::uint8_t * msgData, encoder_t * resp =
nullptr);
101 bool pollEncoderRead(encoder_t * enc);
102 void normalize(encoder_t * v);
104 CuiMode cuiMode {CuiMode::OFF};
106 encoder_t encoder {};
107 double encoderTimestamp {0.0};
113 mutable std::mutex mutex;
Definition CuiAbsolute_ParamsParser.h:47
Implementation for the Cui Absolute Encoder custom UC3M circuit as a single CAN bus joint (control bo...
Definition CuiAbsolute.hpp:42
bool finalize() override
Finalize CAN node communications.
Definition ICanBusSharerImpl.cpp:36
bool notifyMessage(const roboticslab::can_message &message) override
Notify observers that a new CAN message has arrived.
Definition ICanBusSharerImpl.cpp:49
bool initialize() override
Perform CAN node initialization.
Definition ICanBusSharerImpl.cpp:24
bool synchronize(double timestamp) override
Perform synchronized action on CAN master's request.
Definition ICanBusSharerImpl.cpp:92
unsigned int getId() override
Retrieve CAN node ID.
Definition ICanBusSharerImpl.cpp:17
bool registerSender(roboticslab::ICanSenderDelegate *sender) override
Pass a handle to a CAN sender delegate instance.
Definition ICanBusSharerImpl.cpp:84
Abstract base for a CAN bus sharer.
Definition ICanBusSharer.hpp:25
Implementation-agnostic consumer for TX CAN transfers.
Definition ICanSenderDelegate.hpp:22
Data-free state observer.
Definition StateObserver.hpp:75
Type state observer for non-arithmetic types.
Definition StateObserver.hpp:95
Proxy CAN message structure.
Definition CanMessage.hpp:20