mirror of
https://github.com/odriverobotics/ODrive.git
synced 2026-08-20 22:14:34 +08:00
Unify the Config_t style for ODriveCAN
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
#include <communication/interface_can.hpp>
|
||||
|
||||
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();
|
||||
|
||||
@@ -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} {
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user