blinky.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*.$file${.::blinky.c} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv*/
  2. /*
  3. * Model: blinky.qm
  4. * File: ${.::blinky.c}
  5. *
  6. * This code has been generated by QM 5.1.4 <www.state-machine.com/qm/>.
  7. * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
  8. *
  9. * This program is open source software: you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License as published
  11. * by the Free Software Foundation.
  12. *
  13. * This program is distributed in the hope that it will be useful, but
  14. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  15. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  16. * for more details.
  17. */
  18. /*.$endhead${.::blinky.c} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
  19. #include <rtthread.h>
  20. #ifdef QPC_USING_BLINKY_EXAMPLE
  21. #ifdef RT_USING_FINSH
  22. #include <finsh.h>
  23. #include "qpc.h"
  24. Q_DEFINE_THIS_FILE
  25. enum { BSP_TICKS_PER_SEC = 100 };
  26. void BSP_ledOff(void) {
  27. rt_kprintf("LED OFF\n");
  28. }
  29. void BSP_ledOn(void) {
  30. rt_kprintf("LED ON\n");
  31. }
  32. enum BlinkySignals {
  33. DUMMY_SIG = Q_USER_SIG,
  34. TIMEOUT_SIG,
  35. MAX_SIG
  36. };
  37. typedef struct Blinky {
  38. QActive super;
  39. QTimeEvt timeEvt;
  40. } Blinky;
  41. static Blinky l_blinky;
  42. QActive * const AO_Blinky = &l_blinky.super;
  43. static QState Blinky_initial(Blinky * const me, QEvt const * const e);
  44. static QState Blinky_off (Blinky * const me, QEvt const * const e);
  45. static QState Blinky_on (Blinky * const me, QEvt const * const e);
  46. static void Blinky_ctor(void) {
  47. Blinky *me = &l_blinky;
  48. QActive_ctor(&me->super, Q_STATE_CAST(&Blinky_initial));
  49. QTimeEvt_ctorX(&me->timeEvt, &me->super, TIMEOUT_SIG, 0U);
  50. }
  51. int qpc_blinky_start(void) {
  52. /* statically allocate event queue buffer for the Blinky AO */
  53. static QEvt const *blinky_queueSto[10];
  54. static uint8_t blinky_stack[1024];
  55. QF_init(); /* initialize the framework */
  56. Blinky_ctor(); /* explicitly call the "constructor" */
  57. QACTIVE_START(AO_Blinky,
  58. 1U, /* priority */
  59. blinky_queueSto, Q_DIM(blinky_queueSto),
  60. (void *)blinky_stack, sizeof(blinky_stack), /* no stack */
  61. (void *)0); /* no initialization parameter */
  62. return QF_run(); /* run the QF application */
  63. }
  64. MSH_CMD_EXPORT(qpc_blinky_start, start qpc blinky example);
  65. static QState Blinky_initial(Blinky * const me, QEvt const * const e) {
  66. (void)e; /* unused parameter */
  67. QTimeEvt_armX(&me->timeEvt, BSP_TICKS_PER_SEC/2, BSP_TICKS_PER_SEC/2);
  68. return Q_TRAN(&Blinky_off);
  69. }
  70. static QState Blinky_off(Blinky * const me, QEvt const * const e) {
  71. QState status;
  72. switch (e->sig) {
  73. case Q_ENTRY_SIG: {
  74. BSP_ledOff();
  75. status = Q_HANDLED();
  76. break;
  77. }
  78. case TIMEOUT_SIG: {
  79. status = Q_TRAN(&Blinky_on);
  80. break;
  81. }
  82. default: {
  83. status = Q_SUPER(&QHsm_top);
  84. break;
  85. }
  86. }
  87. return status;
  88. }
  89. static QState Blinky_on(Blinky * const me, QEvt const * const e) {
  90. QState status;
  91. switch (e->sig) {
  92. case Q_ENTRY_SIG: {
  93. BSP_ledOn();
  94. status = Q_HANDLED();
  95. break;
  96. }
  97. case TIMEOUT_SIG: {
  98. status = Q_TRAN(&Blinky_off);
  99. break;
  100. }
  101. default: {
  102. status = Q_SUPER(&QHsm_top);
  103. break;
  104. }
  105. }
  106. return status;
  107. }
  108. #endif /* RT_USING_FINSH */
  109. #endif /* QPC_USING_BLINKY_EXAMPLE */