// ******************** Prototypes ******************** typedef void (*board_init)(void); typedef void (*board_enable_can_transciever)(uint8_t transciever, bool enabled); typedef void (*board_enable_can_transcievers)(bool enabled); typedef void (*board_set_led)(uint8_t color, bool enabled); typedef void (*board_set_usb_power_mode)(uint8_t mode); typedef void (*board_set_esp_gps_mode)(uint8_t mode); typedef void (*board_set_can_mode)(uint8_t mode); typedef void (*board_usb_power_mode_tick)(uint64_t tcnt); typedef bool (*board_check_ignition)(void); struct board { const char *board_type; const harness_configuration *harness_config; board_init init; board_enable_can_transciever enable_can_transciever; board_enable_can_transcievers enable_can_transcievers; board_set_led set_led; board_set_usb_power_mode set_usb_power_mode; board_set_esp_gps_mode set_esp_gps_mode; board_set_can_mode set_can_mode; board_usb_power_mode_tick usb_power_mode_tick; board_check_ignition check_ignition; }; // ******************* Definitions ******************** // These should match the enums in cereal/log.capnp and __init__.py #define HW_TYPE_UNKNOWN 0U #define HW_TYPE_WHITE_PANDA 1U #define HW_TYPE_GREY_PANDA 2U #define HW_TYPE_BLACK_PANDA 3U #define HW_TYPE_PEDAL 4U // LED colors #define LED_RED 0U #define LED_GREEN 1U #define LED_BLUE 2U // USB power modes (from cereal.log.health) #define USB_POWER_NONE 0U #define USB_POWER_CLIENT 1U #define USB_POWER_CDP 2U #define USB_POWER_DCP 3U // ESP modes #define ESP_GPS_DISABLED 0U #define ESP_GPS_ENABLED 1U #define ESP_GPS_BOOTMODE 2U // CAN modes #define CAN_MODE_NORMAL 0U #define CAN_MODE_GMLAN_CAN2 1U #define CAN_MODE_GMLAN_CAN3 2U #define CAN_MODE_OBD_CAN2 3U // ********************* Globals ********************** uint8_t usb_power_mode = USB_POWER_NONE;