// ///////////////////////////////////////////////////////////// // // Hardware abstraction layer for all different supported boards // // ///////////////////////////////////////////////////////////// // #include "boards/board_declarations.h" #include "boards/unused_funcs.h" // ///// Board definition and detection ///// // #include "stm32h7/lladc.h" #include "drivers/harness.h" #include "drivers/fan.h" #include "stm32h7/llfan.h" #include "drivers/fake_siren.h" #include "stm32h7/sound.h" #include "drivers/clock_source.h" #include "boards/red.h" #include "boards/tres.h" #include "boards/cuatro.h" void detect_board_type(void) { // On STM32H7 pandas, we use two different sets of pins. const uint8_t id1 = detect_with_pull(GPIOF, 7, PULL_UP) | (detect_with_pull(GPIOF, 8, PULL_UP) << 1U) | (detect_with_pull(GPIOF, 9, PULL_UP) << 2U) | (detect_with_pull(GPIOF, 10, PULL_UP) << 3U); const uint8_t id2 = detect_with_pull(GPIOD, 4, PULL_UP) | (detect_with_pull(GPIOD, 5, PULL_UP) << 1U) | (detect_with_pull(GPIOD, 6, PULL_UP) << 2U) | (detect_with_pull(GPIOD, 7, PULL_UP) << 3U); if (id2 == 3U) { hw_type = HW_TYPE_CUATRO; current_board = &board_cuatro; } else if (id1 == 0U) { hw_type = HW_TYPE_RED_PANDA; current_board = &board_red; } else if (id1 == 1U) { // deprecated //hw_type = HW_TYPE_RED_PANDA_V2; hw_type = HW_TYPE_UNKNOWN; } else if (id1 == 2U) { hw_type = HW_TYPE_TRES; current_board = &board_tres; } else { hw_type = HW_TYPE_UNKNOWN; print("Hardware type is UNKNOWN!\n"); } }