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 
33 namespace lely {
34 
36 template <>
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 
66 class 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 
93  co_unsigned16_t
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 
124  template <class C, typename c_mem_fn<co_rpdo_ind_t*, C>::type M>
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 
147  template <class C, typename c_mem_fn<co_rpdo_err_t*, C>::type M>
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_
co_rpdo_get_ind
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
lely::incomplete_c_type
The base class for a C++ interface to an incomplete C type.
Definition: c_type.hpp:249
net.hpp
lely::c_obj_call
Definition: c_call.hpp:62
co_rpdo_ind_t
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
co_rpdo_stop
void co_rpdo_stop(co_rpdo_t *pdo)
Stops a Receive-PDO service.
Definition: rpdo.c:356
co_rpdo_get_net
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
lely::CORPDO
An opaque CANopen Receive-PDO service type.
Definition: rpdo.hpp:66
co_pdo_comm_par
A PDO communication parameter record.
Definition: pdo.h:64
co_rpdo_sync
int co_rpdo_sync(co_rpdo_t *pdo, co_unsigned8_t cnt)
Triggers the actuation of a received synchronous PDO.
Definition: rpdo.c:493
__co_rpdo
A CANopen Receive-PDO.
Definition: rpdo.c:44
co_rpdo_err_t
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
lely::CANNet
An opaque CAN network interface type.
Definition: net.hpp:85
lely::c_type_traits
A class template supplying a uniform interface to certain attributes of C types.
Definition: c_type.hpp:120
co_rpdo_get_map_par
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
co_rpdo_start
int co_rpdo_start(co_rpdo_t *pdo)
Starts a Receive-PDO service.
Definition: rpdo.c:308
co_rpdo_get_num
co_unsigned16_t co_rpdo_get_num(const co_rpdo_t *pdo)
Returns the PDO number of a Receive-PDO.
Definition: rpdo.c:408
co_rpdo_get_err
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
lely::c_mem_call
Definition: c_call.hpp:67
co_rpdo_rtr
int co_rpdo_rtr(co_rpdo_t *pdo)
Requests the transmission of a PDO.
Definition: rpdo.c:472
co_rpdo_set_ind
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
co_rpdo_get_comm_par
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
co_rpdo_set_err
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
co_rpdo_get_dev
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
rpdo.h
co_pdo_map_par
A PDO mapping parameter record.
Definition: pdo.h:90
lely::CODev
An opaque CANopen device type.
Definition: dev.hpp:77