Make interface_can a class, so it can be instantiated multiple times

This commit is contained in:
Unknown
2018-09-24 21:08:07 -04:00
committed by unknown
parent 47052c8a5e
commit 484da55150
5 changed files with 78 additions and 286 deletions
+11
View File
@@ -7,8 +7,10 @@
#include <communication/interface_usb.h>
#include <communication/interface_uart.h>
#include <communication/interface_i2c.h>
#include <communication/interface_can.hpp>
BoardConfig_t board_config;
CANConfig_t can_config;
Encoder::Config_t encoder_configs[AXIS_COUNT];
SensorlessEstimator::Config_t sensorless_configs[AXIS_COUNT];
ControllerConfig_t controller_configs[AXIS_COUNT];
@@ -19,9 +21,13 @@ bool user_config_loaded_;
SystemStats_t system_stats_ = { 0 };
Axis *axes[AXIS_COUNT];
ODriveCAN *odCAN;
typedef Config<
BoardConfig_t,
CANConfig_t,
Encoder::Config_t[AXIS_COUNT],
SensorlessEstimator::Config_t[AXIS_COUNT],
ControllerConfig_t[AXIS_COUNT],
@@ -31,6 +37,7 @@ typedef Config<
void save_configuration(void) {
if (ConfigFormat::safe_store_config(
&board_config,
&can_config,
&encoder_configs,
&sensorless_configs,
&controller_configs,
@@ -47,6 +54,7 @@ void load_configuration(void) {
if (NVM_init() ||
ConfigFormat::safe_load_config(
&board_config,
&can_config,
&encoder_configs,
&sensorless_configs,
&controller_configs,
@@ -54,6 +62,7 @@ void load_configuration(void) {
&axis_configs)) {
//If loading failed, restore defaults
board_config = BoardConfig_t();
can_config = CANConfig_t();
for (size_t i = 0; i < AXIS_COUNT; ++i) {
encoder_configs[i] = Encoder::Config_t();
sensorless_configs[i] = SensorlessEstimator::Config_t();
@@ -104,6 +113,7 @@ void vApplicationIdleHook(void) {
system_stats_.min_stack_space_uart = uxTaskGetStackHighWaterMark(uart_thread) * sizeof(StackType_t);
system_stats_.min_stack_space_usb_irq = uxTaskGetStackHighWaterMark(usb_irq_thread) * sizeof(StackType_t);
system_stats_.min_stack_space_startup = uxTaskGetStackHighWaterMark(defaultTaskHandle) * sizeof(StackType_t);
system_stats_.min_stack_space_can = uxTaskGetStackHighWaterMark(odCAN->thread_id_) * sizeof(StackType_t);
}
}
}
@@ -154,6 +164,7 @@ int odrive_main(void) {
#endif
// Construct all objects.
odCAN = new ODriveCAN(&hcan1, can_config);
for (size_t i = 0; i < AXIS_COUNT; ++i) {
Encoder *encoder = new Encoder(hw_configs[i].encoder_config,
encoder_configs[i]);