bsp_boardcheck.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /**
  2. * @file bsp_boardcheck.h
  3. * @brief
  4. * @author plyang
  5. * @version 1.0
  6. * @date 20230427
  7. *
  8. * @copyright Copyright (c) 2026 by OLE, All Rights Reserved.
  9. *
  10. * @par 修改日志:
  11. * <table>
  12. * <tr><th>Date <th>Version <th>Author <th>Description
  13. * <tr><td>20230427 <td>2.0 <td>test <td>内容
  14. * </table>
  15. */
  16. #include <stdint.h>
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include "bsp_boardcheck.h"
  21. #include "gpio.h"
  22. #include "debug_print.h"
  23. #define BOARD_MAX BOAED_NUM
  24. #define BOARD_CHECK_TIME 100 //(单位ms)
  25. static t_bsp_boardcheck m_board[BOARD_MAX];
  26. static char *board_name[BOARD_MAX] = {"DI ", "AC ", "DO "};
  27. static int bsp_read_board(uint8_t n)
  28. {
  29. uint8_t ret = 0xff;
  30. switch (n)
  31. {
  32. case BOARD_DI:
  33. ret = gpioio_get_gpio_status(GPIO_INT_M1); /*M1-DI*/
  34. break;
  35. case BOARD_AC:
  36. ret = gpioio_get_gpio_status(GPIO_INT_M3); /*M3-ADC*/
  37. break;
  38. case BOARD_DO:
  39. ret = gpioio_get_gpio_status(GPIO_INT_M4); /*M4 DO*/
  40. break;
  41. default:
  42. ret = 0xff;
  43. break;
  44. }
  45. if (ret < 0)
  46. {
  47. return 0;
  48. }
  49. return (int)ret;
  50. }
  51. static int board_hot_swap_handl(int n)
  52. {
  53. if (m_board[n].board_down && m_board[n].board_up)
  54. {
  55. m_board[n].time += BOARD_CHECK_TIME;
  56. m_board[n].setTime = 2000;
  57. if (m_board[n].time > m_board[n].setTime)
  58. {
  59. m_board[n].board_state = 1;
  60. switch (n)
  61. {
  62. case BOARD_DI:
  63. /* DI */
  64. break;
  65. case BOARD_AC:
  66. /* key*/
  67. break;
  68. case BOARD_DO:
  69. /*AC code */
  70. break;
  71. default:
  72. break;
  73. }
  74. m_board[n].board_down = 0;
  75. m_board[n].time = 0;
  76. dp_info_n_c("%s 板卡%d 插入", board_name[n], (n + 1));
  77. }
  78. }
  79. else
  80. {
  81. m_board[n].time = 0;
  82. }
  83. return 0;
  84. }
  85. int bsp_board_check(void)
  86. {
  87. uint8_t i = 0;
  88. static uint8_t oldstate[BOARD_MAX] = {0};
  89. static uint8_t state[BOARD_MAX] = {0};
  90. static uint8_t sflg = 1;
  91. if (sflg)
  92. {
  93. sflg = 0;
  94. for (i = 0; i < BOARD_MAX; i++)
  95. {
  96. oldstate[i] = bsp_read_board(i) == 0 ? 1 : 0;
  97. state[i] = oldstate[i];
  98. m_board[i].board_state = oldstate[i];
  99. if (oldstate[i])
  100. {
  101. m_board[i].board_up = 1;
  102. m_board[i].board_down = 0;
  103. dp_info_n_c("%s 板卡%d 插入", board_name[i], i + 1);
  104. }
  105. else
  106. {
  107. m_board[i].board_down = 1;
  108. m_board[i].board_up = 0;
  109. dp_info_n_c("%s 板卡%d 拨出", board_name[i], i + 1);
  110. }
  111. }
  112. }
  113. else
  114. {
  115. for (i = 0; i < BOARD_MAX; i++)
  116. {
  117. state[i] = bsp_read_board(i) == 0 ? 1 : 0;
  118. if (state[i] == 1 && oldstate[i] == 0)
  119. {
  120. oldstate[i] = state[i];
  121. m_board[i].board_up = 1;
  122. m_board[i].board_state = 1;
  123. }
  124. else if (state[i] == 0 && oldstate[i] == 1)
  125. {
  126. oldstate[i] = state[i];
  127. m_board[i].board_down = 1;
  128. m_board[i].board_up = 0;
  129. m_board[i].board_state = 0;
  130. dp_info_n_c("%s 板卡%d 拨出", board_name[i], i + 1);
  131. }
  132. board_hot_swap_handl(i);
  133. }
  134. }
  135. return 0;
  136. }
  137. int bap_get_board_state(uint8_t n)
  138. {
  139. uint8_t var = 0;
  140. if (n > BOARD_MAX)
  141. {
  142. return -1;
  143. }
  144. var = bsp_read_board(n) == 0 ? 1 : 0;
  145. return (m_board[n].board_state & var);
  146. }
  147. int bapbcio_get_board_state(uint8_t n)
  148. {
  149. return (m_board[n].board_state);
  150. }
  151. int bsp_board_init(void)
  152. {
  153. bsp_board_check();
  154. }