Skip to content

Commit e4b1976

Browse files
authored
Merge pull request #15 from BrechtSerckx/bs/cyclic-messages
Support for all cyclic messages
2 parents 848bdb1 + f7db784 commit e4b1976

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

src/ODriveCAN.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,34 @@ void ODriveCAN::onReceive(uint32_t id, uint8_t length, const uint8_t* data) {
180180
Serial.println(F("missing callback"));
181181
break;
182182
}
183+
case Get_Temperature_msg_t::cmd_id: {
184+
Get_Temperature_msg_t temperature;
185+
temperature.decode_buf(data);
186+
if (temperature_callback_)
187+
temperature_callback_(temperature, temperature_user_data_);
188+
break;
189+
}
190+
case Get_Bus_Voltage_Current_msg_t::cmd_id: {
191+
Get_Bus_Voltage_Current_msg_t bus_vi;
192+
bus_vi.decode_buf(data);
193+
if (busVI_callback_)
194+
busVI_callback_(bus_vi, busVI_user_data_);
195+
break;
196+
}
197+
case Get_Iq_msg_t::cmd_id: {
198+
Get_Iq_msg_t iq;
199+
iq.decode_buf(data);
200+
if (currents_callback_)
201+
currents_callback_(iq, currents_user_data_);
202+
break;
203+
}
204+
case Get_Error_msg_t::cmd_id: {
205+
Get_Error_msg_t error;
206+
error.decode_buf(data);
207+
if (error_callback_)
208+
error_callback_(error, error_user_data_);
209+
break;
210+
}
183211
default: {
184212
if (requested_msg_id_ == REQUEST_PENDING)
185213
return;

src/ODriveCAN.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ class ODriveCAN {
171171
* @brief Requests ODrive DC bus voltage and current
172172
*
173173
* This function will block and wait for up to timeout_ms (default 10msec) for ODrive to reply
174+
* May trigger onBusVI callback if it's registered.
174175
*/
175176
bool getBusVI(Get_Bus_Voltage_Current_msg_t& msg, uint16_t timeout_ms = 10);
176177

@@ -222,6 +223,38 @@ class ODriveCAN {
222223
torques_user_data_ = user_data;
223224
}
224225

226+
/**
227+
* @brief Registers a callback for ODrive temperature feedback.
228+
*/
229+
void onTemperature(void (*callback)(Get_Temperature_msg_t& feedback, void* user_data), void* user_data = nullptr) {
230+
temperature_callback_ = callback;
231+
temperature_user_data_ = user_data;
232+
}
233+
234+
/**
235+
* @brief Registers a callback for ODrive bus voltage/current feedback.
236+
*/
237+
void onBusVI(void (*callback)(Get_Bus_Voltage_Current_msg_t& feedback, void* user_data), void* user_data = nullptr) {
238+
busVI_callback_ = callback;
239+
busVI_user_data_ = user_data;
240+
}
241+
242+
/**
243+
* @brief Registers a callback for ODrive currents feedback.
244+
*/
245+
void onCurrents(void (*callback)(Get_Iq_msg_t& feedback, void* user_data), void* user_data = nullptr) {
246+
currents_callback_ = callback;
247+
currents_user_data_ = user_data;
248+
}
249+
250+
/**
251+
* @brief Registers a callback for ODrive error messages.
252+
*/
253+
void onError(void (*callback)(Get_Error_msg_t& msg, void* user_data), void* user_data = nullptr) {
254+
error_callback_ = callback;
255+
error_user_data_ = user_data;
256+
}
257+
225258
/**
226259
* @brief Processes received CAN messages for the ODrive.
227260
*/
@@ -332,8 +365,16 @@ class ODriveCAN {
332365
void* axis_state_user_data_;
333366
void* feedback_user_data_;
334367
void* torques_user_data_;
368+
void* temperature_user_data_;
369+
void* busVI_user_data_;
370+
void* currents_user_data_;
371+
void* error_user_data_;
335372

336373
void (*axis_state_callback_)(Heartbeat_msg_t& feedback, void* user_data) = nullptr;
337374
void (*feedback_callback_)(Get_Encoder_Estimates_msg_t& feedback, void* user_data) = nullptr;
338375
void (*torques_callback_)(Get_Torques_msg_t& feedback, void* user_data) = nullptr;
376+
void (*temperature_callback_)(Get_Temperature_msg_t& feedback, void* user_data) = nullptr;
377+
void (*busVI_callback_)(Get_Bus_Voltage_Current_msg_t& feedback, void* user_data) = nullptr;
378+
void (*currents_callback_)(Get_Iq_msg_t& feedback, void* user_data) = nullptr;
379+
void (*error_callback_)(Get_Error_msg_t& msg, void* user_data) = nullptr;
339380
};

0 commit comments

Comments
 (0)