buttons.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /******************************* (C) LiteMesh **********************************
  2. * @module buttons
  3. * @file buttons.h
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief buttons
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 Telenkov D.A. First release.
  10. *******************************************************************************
  11. */
  12. /* Define to prevent recursive ----------------------------------------------*/
  13. #ifndef BUTTONS_H
  14. #define BUTTONS_H
  15. #include <stdbool.h>
  16. #include "gpio.h"
  17. /**
  18. * Статус кнопки
  19. */
  20. typedef enum
  21. {
  22. BUT_ON = 0,
  23. BUT_OFF,
  24. BUT_NO_DEFINE,
  25. } BUTTON_STATE_t;
  26. /**
  27. * @brief Структура параметров объекта Button
  28. */
  29. typedef struct
  30. {
  31. gpio_t id_pin;
  32. uint16_t timeDelay; // Время задержки антидребезга (время измеряется
  33. // во временных интервалах с которыми вызывается
  34. // обработчик кнопки
  35. uint16_t counterDelay; // Счетчик антидребезга
  36. BUTTON_STATE_t stateOld; // Прошлое состояние кнопки
  37. BUTTON_STATE_t stateNew; // Текущее состояние кнопки
  38. void (*pressHandler)(); // Обработчик нажатия кнопки
  39. void (*unpressHandler)(); // Обработчик отпускания кнопки
  40. uint8_t ID; // уникальный идентификатор (можно не использовать)
  41. uint32_t counterActivation;
  42. uint16_t timeActivation;
  43. bool fActivation;
  44. } BUTTON_NO_FIX_t;
  45. /**
  46. * @brief
  47. */
  48. void BUTTON_Init(void);
  49. /**
  50. * @brief Возвращает сотояние ключа
  51. * @retval 1 - линия разомкнута
  52. * 0 - линия замкнута
  53. */
  54. BUTTON_STATE_t BUTTON_GetState(BUTTON_NO_FIX_t *button);
  55. /**
  56. * @brief Обработчик кнопки без фиксации. В обработчике реализована защита
  57. * от дребезга с помощью задержки. Защита срабатывает при нажатии
  58. * и при отпускании.
  59. * @param *button: указатель на структуру типа BUTTON_NO_FIX
  60. * @retval нет
  61. */
  62. void BUTTON_NoFixHandler(BUTTON_NO_FIX_t *button);
  63. /**
  64. * @brief Опрос кнопок
  65. */
  66. void vTaskButtons(void *pvParameters);
  67. /**
  68. * @brief Заглушка
  69. */
  70. void BUTTON_VoidHandler(void);
  71. /**
  72. * @brief Хендлер кнопки DEFAULT
  73. */
  74. void BUTTON_DEF_DownHandler(void);
  75. /**
  76. * @brief Хендлер кнопки SET
  77. */
  78. void BUTTON_SET_DownHandler(void);
  79. #endif /* #ifndef BUTTONS_H */
  80. /****************************** (C) LiteMesh ***************** end of file ****/