#ifndef __ODRIVE_MAIN_H #define __ODRIVE_MAIN_H #ifdef __cplusplus extern "C" { #endif // STM specific includes #include // Sets up the correct chip specifc defines required by arm_math #define ARM_MATH_CM4 // TODO: might change in future board versions #include // OS includes #include // Hardware configuration #if HW_VERSION_MAJOR == 3 #include "board_config_v3.h" #else #error "unknown board version" #endif //default timeout waiting for phase measurement signals #define PH_CURRENT_MEAS_TIMEOUT 2 // [ms] static const float current_meas_period = CURRENT_MEAS_PERIOD; static const int current_meas_hz = CURRENT_MEAS_HZ; extern float vbus_voltage; extern bool brake_resistor_armed_; extern const float elec_rad_per_enc; extern uint32_t _reboot_cookie; extern bool user_config_loaded_; extern uint64_t serial_number; extern char serial_number_str[13]; typedef struct { bool fully_booted; uint32_t uptime; // [ms] uint32_t min_heap_space; // FreeRTOS heap [Bytes] uint32_t min_stack_space_axis0; // minimum remaining space since startup [Bytes] uint32_t min_stack_space_axis1; uint32_t min_stack_space_comms; uint32_t min_stack_space_usb; uint32_t min_stack_space_uart; uint32_t min_stack_space_usb_irq; uint32_t min_stack_space_startup; } SystemStats_t; extern SystemStats_t system_stats_; #ifdef __cplusplus } // @brief general user configurable board configuration struct BoardConfig_t { bool enable_uart = true; float brake_resistance = 0.47f; // [ohm] float dc_bus_undervoltage_trip_level = 8.0f; //(static_cast>(a) | static_cast>(b)); } \ inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return static_cast(static_cast>(a) & static_cast>(b)); } \ inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return static_cast(static_cast>(a) ^ static_cast>(b)); } \ inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return reinterpret_cast(reinterpret_cast&>(a) |= static_cast>(b)); } \ inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return reinterpret_cast(reinterpret_cast&>(a) &= static_cast>(b)); } \ inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return reinterpret_cast(reinterpret_cast&>(a) ^= static_cast>(b)); } \ inline ENUMTYPE operator ~ (ENUMTYPE a) { return static_cast(~static_cast>(a)); } // ODrive specific includes #include #include #include #include #include #include #include #include #include #endif // __cplusplus // general system functions defined in main.cpp void save_configuration(void); void erase_configuration(void); void enter_dfu_mode(void); #endif /* __ODRIVE_MAIN_H */