@@ -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