Lely core libraries 2.3.4
rpdo.hpp
Go to the documentation of this file.
1
23#ifndef LELY_CO_RPDO_HPP_
24#define LELY_CO_RPDO_HPP_
25
26#if !defined(__cplusplus) || LELY_NO_CXX
27#error "include <lely/co/rpdo.h> for the C interface"
28#endif
29
30#include <lely/can/net.hpp>
31#include <lely/co/rpdo.h>
32
33namespace lely {
34
36template <>
38 typedef __co_rpdo value_type;
39 typedef value_type& reference;
40 typedef const value_type& const_reference;
41 typedef value_type* pointer;
42 typedef const value_type* const_pointer;
43
44 static void*
45 alloc() noexcept {
46 return __co_rpdo_alloc();
47 }
48
49 static void
50 free(void* ptr) noexcept {
51 __co_rpdo_free(ptr);
52 }
53
54 static pointer
55 init(pointer p, CANNet* net, CODev* dev, co_unsigned16_t num) noexcept {
56 return __co_rpdo_init(p, net, dev, num);
57 }
58
59 static void
60 fini(pointer p) noexcept {
61 __co_rpdo_fini(p);
62 }
63};
64
66class CORPDO : public incomplete_c_type<__co_rpdo> {
68
69 public:
70 CORPDO(CANNet* net, CODev* dev, co_unsigned16_t num)
71 : c_base(net, dev, num) {}
72
73 int
74 start() noexcept {
75 return co_rpdo_start(this);
76 }
77
78 void
79 stop() noexcept {
80 co_rpdo_stop(this);
81 }
82
83 CANNet*
84 getNet() const noexcept {
85 return co_rpdo_get_net(this);
86 }
87
88 CODev*
89 getDev() const noexcept {
90 return co_rpdo_get_dev(this);
91 }
92
94 getNum() const noexcept {
95 return co_rpdo_get_num(this);
96 }
97
98 const co_pdo_comm_par&
99 getCommPar() const noexcept {
100 return *co_rpdo_get_comm_par(this);
101 }
102
103 const co_pdo_map_par&
104 getMapPar() const noexcept {
105 return *co_rpdo_get_map_par(this);
106 }
107
108 void
109 getInd(co_rpdo_ind_t** pind, void** pdata) const noexcept {
110 co_rpdo_get_ind(this, pind, pdata);
111 }
112
113 void
114 setInd(co_rpdo_ind_t* ind, void* data) noexcept {
115 co_rpdo_set_ind(this, ind, data);
116 }
117
118 template <class F>
119 void
120 setInd(F* f) noexcept {
121 setInd(&c_obj_call<co_rpdo_ind_t*, F>::function, static_cast<void*>(f));
122 }
123
125 void
126 setInd(C* obj) noexcept {
128 static_cast<void*>(obj));
129 }
130
131 void
132 getErr(co_rpdo_err_t** perr, void** pdata) const noexcept {
133 co_rpdo_get_err(this, perr, pdata);
134 }
135
136 void
137 setErr(co_rpdo_err_t* err, void* data) noexcept {
138 co_rpdo_set_err(this, err, data);
139 }
140
141 template <class F>
142 void
143 setErr(F* f) noexcept {
144 setErr(&c_obj_call<co_rpdo_err_t*, F>::function, static_cast<void*>(f));
145 }
146
148 void
149 setErr(C* obj) noexcept {
151 static_cast<void*>(obj));
152 }
153
154 int
155 sync(co_unsigned8_t cnt) noexcept {
156 return co_rpdo_sync(this, cnt);
157 }
158
159 int
160 rtr() noexcept {
161 return co_rpdo_rtr(this);
162 }
163
164 protected:
165 ~CORPDO() = default;
166};
167
168} // namespace lely
169
170#endif // !LELY_CO_RPDO_HPP_
An opaque CAN network interface type.
Definition net.hpp:85
An opaque CANopen device type.
Definition dev.hpp:77
An opaque CANopen Receive-PDO service type.
Definition rpdo.hpp:66
A CANopen value.
Definition val.hpp:42
The base class for a C++ interface to an incomplete C type.
Definition c_type.hpp:249
This header file is part of the CAN library; it contains the C++ interface of the CAN network interfa...
This header file is part of the CANopen library; it contains the Receive-PDO declarations.
void co_rpdo_get_err(const co_rpdo_t *pdo, co_rpdo_err_t **perr, void **pdata)
Retrieves the error handling function of a Receive-PDO service.
Definition rpdo.c:452
int co_rpdo_rtr(co_rpdo_t *pdo)
Requests the transmission of a PDO.
Definition rpdo.c:472
void co_rpdo_err_t(co_rpdo_t *pdo, co_unsigned16_t eec, co_unsigned8_t er, void *data)
The type of a CANopen Receive-PDO error handling function, invoked in case of a timeout or length mis...
Definition rpdo.h:56
void co_rpdo_stop(co_rpdo_t *pdo)
Stops a Receive-PDO service.
Definition rpdo.c:356
co_dev_t * co_rpdo_get_dev(const co_rpdo_t *pdo)
Returns a pointer to the CANopen device of a Receive-PDO.
Definition rpdo.c:400
int co_rpdo_sync(co_rpdo_t *pdo, co_unsigned8_t cnt)
Triggers the actuation of a received synchronous PDO.
Definition rpdo.c:493
void co_rpdo_set_err(co_rpdo_t *pdo, co_rpdo_err_t *err, void *data)
Sets the error handling function of a Receive-PDO service.
Definition rpdo.c:463
void co_rpdo_get_ind(const co_rpdo_t *pdo, co_rpdo_ind_t **pind, void **pdata)
Retrieves the indication function invoked when a Receive-PDO error occurs.
Definition rpdo.c:432
can_net_t * co_rpdo_get_net(const co_rpdo_t *pdo)
Returns a pointer to the CAN network of a Receive-PDO.
Definition rpdo.c:392
co_unsigned16_t co_rpdo_get_num(const co_rpdo_t *pdo)
Returns the PDO number of a Receive-PDO.
Definition rpdo.c:408
int co_rpdo_start(co_rpdo_t *pdo)
Starts a Receive-PDO service.
Definition rpdo.c:308
void co_rpdo_ind_t(co_rpdo_t *pdo, co_unsigned32_t ac, const void *ptr, size_t n, void *data)
The type of a CANopen Receive-PDO indication function, invoked when a PDO is received or an error occ...
Definition rpdo.h:44
void co_rpdo_set_ind(co_rpdo_t *pdo, co_rpdo_ind_t *ind, void *data)
Sets the indication function invoked when a Receive-PDO error occurs.
Definition rpdo.c:443
const struct co_pdo_map_par * co_rpdo_get_map_par(const co_rpdo_t *pdo)
Returns a pointer to the PDO mapping parameter record of a Receive-PDO.
Definition rpdo.c:424
const struct co_pdo_comm_par * co_rpdo_get_comm_par(const co_rpdo_t *pdo)
Returns a pointer to the PDO communication parameter record of a Receive-PDO.
Definition rpdo.c:416
A CANopen Receive-PDO.
Definition rpdo.c:44
A PDO communication parameter record.
Definition pdo.h:64
A PDO mapping parameter record.
Definition pdo.h:90
A class template supplying a uniform interface to certain attributes of C types.
Definition c_type.hpp:350