// ///////////////////////////////////////////////////////////// // // Hardware abstraction layer for all different supported boards // // ///////////////////////////////////////////////////////////// // #include "board_declarations.h" #include "boards/common.h" // ///// Board definition and detection ///// // #include "drivers/harness.h" #ifdef PANDA #include "boards/white.h" #include "boards/grey.h" #include "boards/black.h" #else #include "boards/pedal.h" #endif void detect_board_type(void) { #ifdef PANDA // SPI lines floating: white (TODO: is this reliable?) if((detect_with_pull(GPIOA, 4, PULL_DOWN)) || (detect_with_pull(GPIOA, 5, PULL_DOWN)) || (detect_with_pull(GPIOA, 6, PULL_DOWN)) || (detect_with_pull(GPIOA, 7, PULL_DOWN))){ hw_type = HW_TYPE_WHITE_PANDA; current_board = &board_white; } else if(detect_with_pull(GPIOA, 13, PULL_DOWN)) { // Rev AB deprecated, so no pullup means black. In REV C, A13 is pulled up to 5V with a 10K hw_type = HW_TYPE_GREY_PANDA; current_board = &board_grey; } else { hw_type = HW_TYPE_BLACK_PANDA; current_board = &board_black; } #else #ifdef PEDAL hw_type = HW_TYPE_PEDAL; current_board = &board_pedal; #else hw_type = HW_TYPE_UNKNOWN; puts("Hardware type is UNKNOWN!\n"); #endif #endif } // ///// Configuration detection ///// // bool has_external_debug_serial = 0; bool is_entering_bootmode = 0; void detect_configuration(void) { // detect if external serial debugging is present has_external_debug_serial = detect_with_pull(GPIOA, 3, PULL_DOWN); #ifdef PANDA // check if the ESP is trying to put me in boot mode is_entering_bootmode = !detect_with_pull(GPIOB, 0, PULL_UP); #else is_entering_bootmode = 0; #endif } // ///// Board functions ///// // bool board_has_gps(void) { return ((hw_type == HW_TYPE_GREY_PANDA) || (hw_type == HW_TYPE_BLACK_PANDA)); }