Advertisement
anon2110

massage.h

Jun 27th, 2018
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #ifndef _MESSAGES_H_
  2. #define _MESSAGES_H_
  3.  
  4. #include <avr/io.h>
  5.  
  6. #define maxHandlers 64
  7. #define maxMessages 128
  8. #define maxTimers 32
  9.  
  10. //Сообщения
  11. enum {
  12. MSG_KEY_PRESS=1,
  13. MSG_KEY_REPEAT,
  14. MSG_KEY_SCAN,
  15. MSG_LCD_REFRESH,
  16. MSG_MENU_SELECT,
  17. MSG_DISP_REFRESH,
  18. MSG_TIMER_SEC
  19. };
  20.  
  21. typedef uint8_t msg_num; // тип события - мне пока хватает одного байта
  22. typedef uint16_t msg_par; // тип параметра события
  23. typedef uint8_t (*handler)(msg_par); // описание функции-обработчика
  24.  
  25. // структура записи из списка обработчиков
  26. typedef struct {
  27. msg_num msg; // обрабатываемое событие
  28. handler hnd; // собственно сам обработчик
  29. } iHandler;
  30.  
  31. // структура события из буфера событий
  32. typedef struct {
  33. msg_num msg; // номер события
  34. msg_par par; // параметр
  35. } iMessage;
  36.  
  37. // структура таймера
  38. typedef struct {
  39. msg_num msg; // номер генерируемого сообщения
  40. msg_par par; // его параметр
  41. uint16_t time; // таймер в условных тиках (сейчас 10 мсек)
  42. uint16_t timeOrigin; // таймер в условных тиках (сейчас 10 мсек)
  43. } iTimer;
  44.  
  45. extern volatile iTimer lTimer[maxTimers]; // список таймеров
  46. extern volatile iHandler lHandler[maxHandlers]; // список обработчиков
  47. extern volatile uint8_t numHandlers, numTimers;
  48.  
  49. extern volatile iMessage lMessage[maxMessages]; // буфер сообщений
  50. extern volatile uint16_t lMesPointer, hMesPointer; // указатели на начало и конец буфера
  51.  
  52. // установка обработчика события
  53. // вызывается: setHandler(MSG_KEY_PRESS, &checkKey);
  54. void setHandler(msg_num msg, handler hnd);
  55.  
  56. // снятие обработчика события
  57. // вызывается: killHandler(MSG_KEY_PRESS, &checkKey);
  58. void killHandler(msg_num msg, handler hnd);
  59.  
  60. // занести событие в очередь
  61. // пример вызова: sendMessage(MSG_KEY_PRESS, KEY_MENU)
  62. void sendMessage(msg_num msg, msg_par par);
  63.  
  64. // обработка событий
  65. void dispatchMessage() __attribute__((always_inline));
  66.  
  67. // установить таймер
  68. // пример вызова: setTimer(MSG_LCD_REFRESH, 0, 50);
  69. void setTimer(msg_num msg, msg_par par, uint16_t time);
  70.  
  71. // убить таймер
  72. // особенность - убивает все установленные таймеры на данное событие,
  73. // не зависимо от параметра события
  74. void killTimer(msg_num msg);
  75.  
  76. // начальная инициализация
  77. void initMessages();
  78.  
  79. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement