// ******************** Prototypes ********************
typedef void ( * board_init ) ( void ) ;
typedef void ( * board_board_tick ) ( void ) ;
typedef bool ( * board_get_button ) ( void ) ;
typedef void ( * board_set_panda_power ) ( bool enabled ) ;
typedef void ( * board_set_panda_individual_power ) ( uint8_t port_num , bool enabled ) ;
typedef void ( * board_set_ignition ) ( bool enabled ) ;
typedef void ( * board_set_individual_ignition ) ( uint8_t bitmask ) ;
typedef void ( * board_set_harness_orientation ) ( uint8_t orientation ) ;
typedef void ( * board_set_can_mode ) ( uint8_t mode ) ;
typedef void ( * board_enable_can_transceiver ) ( uint8_t transceiver , bool enabled ) ;
typedef void ( * board_enable_header_pin ) ( uint8_t pin_num , bool enabled ) ;
typedef float ( * board_get_channel_power ) ( uint8_t channel ) ;
typedef uint16_t ( * board_get_sbu_mV ) ( uint8_t channel , uint8_t sbu ) ;
struct board {
GPIO_TypeDef * const led_GPIO [ 3 ] ;
const uint8_t led_pin [ 3 ] ;
const bool has_canfd ;
const bool has_sbu_sense ;
const uint16_t avdd_mV ;
board_init init ;
board_board_tick board_tick ;
board_get_button get_button ;
board_set_panda_power set_panda_power ;
board_set_panda_individual_power set_panda_individual_power ;
board_set_ignition set_ignition ;
board_set_individual_ignition set_individual_ignition ;
board_set_harness_orientation set_harness_orientation ;
board_set_can_mode set_can_mode ;
board_enable_can_transceiver enable_can_transceiver ;
board_enable_header_pin enable_header_pin ;
board_get_channel_power get_channel_power ;
board_get_sbu_mV get_sbu_mV ;
// TODO: shouldn't need these
bool has_spi ;
} ;
// ******************* Definitions ********************
# define HW_TYPE_UNKNOWN 0U
# define HW_TYPE_V1 1U
# define HW_TYPE_V2 2U
// CAN modes
# define CAN_MODE_NORMAL 0U
# define CAN_MODE_OBD_CAN2 3U
// Harness states
# define HARNESS_ORIENTATION_NONE 0U
# define HARNESS_ORIENTATION_1 1U
# define HARNESS_ORIENTATION_2 2U
# define SBU1 0U
# define SBU2 1U
// ********************* Globals **********************
uint8_t harness_orientation = HARNESS_ORIENTATION_NONE ;
uint8_t can_mode = CAN_MODE_NORMAL ;
uint8_t ignition = 0U ;
void unused_set_individual_ignition ( uint8_t bitmask ) {
UNUSED ( bitmask ) ;
}
void unused_board_enable_header_pin ( uint8_t pin_num , bool enabled ) {
UNUSED ( pin_num ) ;
UNUSED ( enabled ) ;
}
void unused_set_panda_individual_power ( uint8_t port_num , bool enabled ) {
UNUSED ( port_num ) ;
UNUSED ( enabled ) ;
}