diff --git a/Firmware/communication/interface_can.cpp b/Firmware/communication/interface_can.cpp index b020f4c1..6709daa5 100644 --- a/Firmware/communication/interface_can.cpp +++ b/Firmware/communication/interface_can.cpp @@ -52,7 +52,7 @@ static void can_server_thread_wrapper(void* ctx){ void ODriveCAN::can_server_thread() { for (;;) { - // Do nothing + osDelay(1000); } } @@ -80,4 +80,22 @@ bool ODriveCAN::start_can_server() { thread_id_valid_ = true; return true; +} + +void ODriveCAN::set_baud_rate(uint32_t baudRate){ + switch(baudRate){ + case CAN_BAUD_125K: + case CAN_BAUD_250K: + case CAN_BAUD_500K: + case CAN_BAUD_1000K: + config_.baud = baudRate; // baudRate is a valid CAN baud + break; + default: + break; // baudRate is invalid, so do nothing + } +} + +void ODriveCAN::set_node_id(uint8_t nodeID){ + // Allow for future nodeID validation by making this a set function + config_.node_id = nodeID; } \ No newline at end of file diff --git a/Firmware/communication/interface_can.hpp b/Firmware/communication/interface_can.hpp index 548a444f..35b7c3b3 100644 --- a/Firmware/communication/interface_can.hpp +++ b/Firmware/communication/interface_can.hpp @@ -21,8 +21,8 @@ enum { CAN_BAUD_1M = 1000000 }; struct CANConfig_t { - uint8_t node_id; - uint32_t baud; + uint8_t node_id = 0; + uint32_t baud = CAN_BAUD_250K; }; class ODriveCAN { @@ -38,13 +38,20 @@ class ODriveCAN { auto make_protocol_definitions() { return make_protocol_member_list( make_protocol_object("config", - make_protocol_property("node_id", &config_.node_id), - make_protocol_property("baud_rate", &config_.baud))); + make_protocol_ro_property("node_id", &config_.node_id), + make_protocol_ro_property("baud_rate", &config_.baud) + ), + make_protocol_function("set_node_id", *this, &ODriveCAN::set_node_id, "nodeID"), + make_protocol_function("set_baud_rate", *this, &ODriveCAN::set_baud_rate, "baudRate") + ); } private: CAN_HandleTypeDef *handle_ = nullptr; CANConfig_t &config_; + + void set_node_id(uint8_t nodeID); + void set_baud_rate(uint32_t baudRate); }; #endif // __INTERFACE_CAN_HPP