buttons.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef __BUTTONS_H
  2. #define __BUTTONS_H
  3. #include "at32f403a_407.h"
  4. #include <stdbool.h>
  5. // Кнопки
  6. typedef enum
  7. {
  8. BUT_RESET = 0,
  9. BUT_SET,
  10. } BUTTON_t;
  11. // Статус кнопки
  12. typedef enum
  13. {
  14. BUT_ON = 0,
  15. BUT_OFF,
  16. BUT_NO_DEFINE,
  17. } BUTTON_STATE_t;
  18. // Структура параметров объекта Button
  19. typedef struct
  20. {
  21. gpio_type *port; // Порт
  22. uint32_t pin; // Пин
  23. uint16_t timeDelay; // Время задержки антидребезга (время измеряется
  24. // во временных интервалах с которыми вызывается
  25. // обработчик кнопки
  26. uint16_t counterDelay; // Счетчик антидребезга
  27. BUTTON_STATE_t stateOld; // Прошлое состояние кнопки
  28. BUTTON_STATE_t stateNew; // Текущее состояние кнопки
  29. void (*pressHandler)(); // Обработчик нажатия кнопки
  30. void (*unpressHandler)(uint8_t btn); // Обработчик отпускания кнопки
  31. uint8_t ID; // уникальный идентификатор (можно не использовать)
  32. uint32_t counterActivation;
  33. uint16_t timeActivation_1;
  34. uint16_t timeActivation_2;
  35. bool fActivation;
  36. } BUTTON_NO_FIX_t;
  37. //
  38. void button_init(void);
  39. /**
  40. * @brief Возвращает сотояние ключа
  41. * @retval 1 - линия разомкнута
  42. * 0 - линия замкнута
  43. */
  44. BUTTON_STATE_t BUTTON_GetState(BUTTON_NO_FIX_t *button);
  45. bool BUTTON_GetStateInt(BUTTON_t button);
  46. /**
  47. * @brief Обработчик кнопки без фиксации. В обработчике реализована защита
  48. * от дребезга с помощью задержки. Защита срабатывает при нажатии
  49. * и при отпускании.
  50. * @param *button: указатель на структуру типа BUTTON_NO_FIX
  51. * @retval нет
  52. */
  53. void BUTTON_NoFixHandler(BUTTON_NO_FIX_t *button);
  54. // Опрос кнопок
  55. void button_task(void *params);
  56. // Заглушки
  57. void void_handler(void);
  58. void void_handler_btn(uint8_t btn);
  59. //
  60. void reset_handler(void);
  61. //
  62. void set_handler(uint8_t btn);
  63. #endif /* #ifndef __BUTTONS_H */