diff --git a/Firmware/MotorControl/main.cpp b/Firmware/MotorControl/main.cpp index 8c7351ac..290172c7 100644 --- a/Firmware/MotorControl/main.cpp +++ b/Firmware/MotorControl/main.cpp @@ -10,7 +10,7 @@ #include BoardConfig_t board_config; -CANConfig_t can_config; +ODriveCAN::Config_t can_config; Encoder::Config_t encoder_configs[AXIS_COUNT]; SensorlessEstimator::Config_t sensorless_configs[AXIS_COUNT]; Controller::Config_t controller_configs[AXIS_COUNT]; @@ -26,7 +26,7 @@ ODriveCAN *odCAN; typedef Config< BoardConfig_t, - CANConfig_t, + ODriveCAN::Config_t, Encoder::Config_t[AXIS_COUNT], SensorlessEstimator::Config_t[AXIS_COUNT], Controller::Config_t[AXIS_COUNT], @@ -64,7 +64,7 @@ void load_configuration(void) { &axis_configs)) { //If loading failed, restore defaults board_config = BoardConfig_t(); - can_config = CANConfig_t(); + can_config = ODriveCAN::Config_t(); for (size_t i = 0; i < AXIS_COUNT; ++i) { encoder_configs[i] = Encoder::Config_t(); sensorless_configs[i] = SensorlessEstimator::Config_t(); diff --git a/Firmware/communication/interface_can.cpp b/Firmware/communication/interface_can.cpp index 4902ca2f..f9a9ff6f 100644 --- a/Firmware/communication/interface_can.cpp +++ b/Firmware/communication/interface_can.cpp @@ -41,7 +41,7 @@ static uint32_t counter = 0; // Constructor is called by communication.cpp and the handle is assigned appropriately -ODriveCAN::ODriveCAN(CAN_HandleTypeDef *handle, CANConfig_t &config) +ODriveCAN::ODriveCAN(CAN_HandleTypeDef *handle, ODriveCAN::Config_t &config) : handle_{handle}, config_{config} { } diff --git a/Firmware/communication/interface_can.hpp b/Firmware/communication/interface_can.hpp index 0959d7c1..dceb8120 100644 --- a/Firmware/communication/interface_can.hpp +++ b/Firmware/communication/interface_can.hpp @@ -16,27 +16,29 @@ typedef struct { } CAN_message_t; // Anonymous enum for defining the most common CAN baud rates -enum { - CAN_BAUD_125K = 125000, - CAN_BAUD_250K = 250000, - CAN_BAUD_500K = 500000, - CAN_BAUD_1000K = 1000000, - CAN_BAUD_1M = 1000000 -}; -struct CANConfig_t { - uint8_t node_id = 0; - uint32_t baud = CAN_BAUD_250K; -}; + + enum { + CAN_BAUD_125K = 125000, + CAN_BAUD_250K = 250000, + CAN_BAUD_500K = 500000, + CAN_BAUD_1000K = 1000000, + CAN_BAUD_1M = 1000000 + }; class ODriveCAN { public: - ODriveCAN(CAN_HandleTypeDef *handle, CANConfig_t &config); + struct Config_t { + uint8_t node_id = 0; + uint32_t baud = CAN_BAUD_250K; + }; + + ODriveCAN(CAN_HandleTypeDef *handle, ODriveCAN::Config_t &config); bool start_can_server(); void can_server_thread(); - uint32_t write(CAN_message_t& txmsg); - int read(CAN_message_t& rxmsg); + uint32_t write(CAN_message_t &txmsg); + int read(CAN_message_t &rxmsg); osThreadId thread_id_; volatile bool thread_id_valid_ = false; @@ -45,16 +47,14 @@ class ODriveCAN { return make_protocol_member_list( make_protocol_object("config", make_protocol_ro_property("node_id", &config_.node_id), - make_protocol_ro_property("baud_rate", &config_.baud) - ), + 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") - ); + make_protocol_function("set_baud_rate", *this, &ODriveCAN::set_baud_rate, "baudRate")); } private: CAN_HandleTypeDef *handle_ = nullptr; - CANConfig_t &config_; + ODriveCAN::Config_t &config_; void set_node_id(uint8_t nodeID); void set_baud_rate(uint32_t baudRate);