/** * @file bsp_boardcheck.h * @brief * @author plyang * @version 1.0 * @date 20230427 * * @copyright Copyright (c) 2026 by OLE, All Rights Reserved. * * @par 修改日志: * *
Date Version Author Description *
20230427 2.0 test 内容 *
*/ #include #include #include #include #include "bsp_boardcheck.h" #include "gpio.h" #include "debug_print.h" #define BOARD_MAX BOAED_NUM #define BOARD_CHECK_TIME 100 //(单位ms) static t_bsp_boardcheck m_board[BOARD_MAX]; static char *board_name[BOARD_MAX] = {"DI ", "AC ", "DO "}; static int bsp_read_board(uint8_t n) { uint8_t ret = 0xff; switch (n) { case BOARD_DI: ret = gpioio_get_gpio_status(GPIO_INT_M1); /*M1-DI*/ break; case BOARD_AC: ret = gpioio_get_gpio_status(GPIO_INT_M3); /*M3-ADC*/ break; case BOARD_DO: ret = gpioio_get_gpio_status(GPIO_INT_M4); /*M4 DO*/ break; default: ret = 0xff; break; } if (ret < 0) { return 0; } return (int)ret; } static int board_hot_swap_handl(int n) { if (m_board[n].board_down && m_board[n].board_up) { m_board[n].time += BOARD_CHECK_TIME; m_board[n].setTime = 2000; if (m_board[n].time > m_board[n].setTime) { m_board[n].board_state = 1; switch (n) { case BOARD_DI: /* DI */ break; case BOARD_AC: /* key*/ break; case BOARD_DO: /*AC code */ break; default: break; } m_board[n].board_down = 0; m_board[n].time = 0; dp_info_n_c("%s 板卡%d 插入", board_name[n], (n + 1)); } } else { m_board[n].time = 0; } return 0; } int bsp_board_check(void) { uint8_t i = 0; static uint8_t oldstate[BOARD_MAX] = {0}; static uint8_t state[BOARD_MAX] = {0}; static uint8_t sflg = 1; if (sflg) { sflg = 0; for (i = 0; i < BOARD_MAX; i++) { oldstate[i] = bsp_read_board(i) == 0 ? 1 : 0; state[i] = oldstate[i]; m_board[i].board_state = oldstate[i]; if (oldstate[i]) { m_board[i].board_up = 1; m_board[i].board_down = 0; dp_info_n_c("%s 板卡%d 插入", board_name[i], i + 1); } else { m_board[i].board_down = 1; m_board[i].board_up = 0; dp_info_n_c("%s 板卡%d 拨出", board_name[i], i + 1); } } } else { for (i = 0; i < BOARD_MAX; i++) { state[i] = bsp_read_board(i) == 0 ? 1 : 0; if (state[i] == 1 && oldstate[i] == 0) { oldstate[i] = state[i]; m_board[i].board_up = 1; m_board[i].board_state = 1; } else if (state[i] == 0 && oldstate[i] == 1) { oldstate[i] = state[i]; m_board[i].board_down = 1; m_board[i].board_up = 0; m_board[i].board_state = 0; dp_info_n_c("%s 板卡%d 拨出", board_name[i], i + 1); } board_hot_swap_handl(i); } } return 0; } int bap_get_board_state(uint8_t n) { uint8_t var = 0; if (n > BOARD_MAX) { return -1; } var = bsp_read_board(n) == 0 ? 1 : 0; return (m_board[n].board_state & var); } int bapbcio_get_board_state(uint8_t n) { return (m_board[n].board_state); } int bsp_board_init(void) { bsp_board_check(); }