bsp.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /*****************************************************************************
  2. * Product: Console-based BSP
  3. * Last Updated for Version: 6.3.6
  4. * Date of the Last Update: 2018-10-14
  5. *
  6. * Q u a n t u m L e a P s
  7. * ------------------------
  8. * Modern Embedded Software
  9. *
  10. * Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
  11. *
  12. * This program is open source software: you can redistribute it and/or
  13. * modify it under the terms of the GNU General Public License as published
  14. * by the Free Software Foundation, either version 3 of the License, or
  15. * (at your option) any later version.
  16. *
  17. * Alternatively, this program may be distributed and modified under the
  18. * terms of Quantum Leaps commercial licenses, which expressly supersede
  19. * the GNU General Public License and are specifically designed for
  20. * licensees interested in retaining the proprietary status of their code.
  21. *
  22. * This program is distributed in the hope that it will be useful,
  23. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  24. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  25. * GNU General Public License for more details.
  26. *
  27. * You should have received a copy of the GNU General Public License
  28. * along with this program. If not, see <www.gnu.org/licenses/>.
  29. *
  30. * Contact information:
  31. * <www.state-machine.com/licensing>
  32. * <info@state-machine.com>
  33. *****************************************************************************/
  34. #include "qpc.h"
  35. #include "clock.h"
  36. #include "bsp.h"
  37. #include "safe_std.h" /* portable "safe" <stdio.h>/<string.h> facilities */
  38. #include <stdlib.h> /* for exit() */
  39. //Q_DEFINE_THIS_FILE
  40. /*..........................................................................*/
  41. void BSP_init(int argc, char *argv[]) {
  42. (void)argc; /* unused parameter */
  43. (void)argv; /* unused parameter */
  44. }
  45. /*..........................................................................*/
  46. void BSP_showMsg(char const *str) {
  47. PRINTF_S("%s\n", str);
  48. fflush(stdout);
  49. }
  50. /*..........................................................................*/
  51. void BSP_showTime24H(char const *str, uint32_t time, uint32_t base) {
  52. PRINTF_S("%s, %02d:%02d\n", str, (int)(time / base), (int)(time % base));
  53. fflush(stdout);
  54. }
  55. /*..........................................................................*/
  56. void BSP_showTime12H(char const *str, uint32_t time, uint32_t base) {
  57. uint32_t h = time / base;
  58. PRINTF_S("%s %02d:%02d %s\n", str, (h % 12) ? (h % 12) : 12,
  59. time % base, (h / 12) ? "PM" : "AM");
  60. fflush(stdout);
  61. }
  62. /*..........................................................................*/
  63. void QF_onStartup(void) {
  64. QF_setTickRate(BSP_TICKS_PER_SEC, 30); /* set the desired tick rate */
  65. QF_consoleSetup();
  66. }
  67. /*..........................................................................*/
  68. void QF_onCleanup(void) {
  69. PRINTF_S("\n%s\n", "Bye! Bye!");
  70. QF_consoleCleanup();
  71. }
  72. /*..........................................................................*/
  73. void QF_onClockTick(void) {
  74. QTIMEEVT_TICK_X(0U, &l_clock_tick); /* perform the QF clock tick processing */
  75. int key = QF_consoleGetKey();
  76. if (key != 0) { /* any key pressed? */
  77. BSP_onKeyboardInput((uint8_t)key);
  78. }
  79. }
  80. /*..........................................................................*/
  81. void BSP_onKeyboardInput(uint8_t key) {
  82. switch (key) {
  83. case 'o': { /* 'o': Alarm on event? */
  84. QACTIVE_POST(APP_alarmClock,
  85. Q_NEW(QEvt, ALARM_ON_SIG), (void *)0);
  86. break;
  87. }
  88. case 'f': { /* 'f': Alarm off event? */
  89. QACTIVE_POST(APP_alarmClock,
  90. Q_NEW(QEvt, ALARM_OFF_SIG), (void *)0);
  91. break;
  92. }
  93. case '1': /* '1' */
  94. case '2': /* '2' */
  95. case '3': /* '3' */
  96. case '4': /* '4' */
  97. case '5': /* '5' */
  98. case '6': /* '6' */
  99. case '7': /* '7' */
  100. case '8': /* '8' */
  101. case '9': { /* '9' */
  102. SetEvt *e = Q_NEW(SetEvt, ALARM_SET_SIG);
  103. e->digit = (uint8_t)(key - '0');
  104. QACTIVE_POST(APP_alarmClock, (QEvt *)e, (void *)0);
  105. break;
  106. }
  107. case '0': { /* '0' */
  108. SetEvt *e = Q_NEW(SetEvt, ALARM_SET_SIG);
  109. e->digit = 0;
  110. QACTIVE_POST(APP_alarmClock, (QEvt *)e, (void *)0);
  111. break;
  112. }
  113. case 'a': { /* 'a': Clock 12H event? */
  114. QACTIVE_POST(APP_alarmClock,
  115. Q_NEW(QEvt, CLOCK_12H_SIG), (void *)0);
  116. break;
  117. }
  118. case 'b': { /* 'b': Clock 24H event? */
  119. QACTIVE_POST(APP_alarmClock,
  120. Q_NEW(QEvt, CLOCK_24H_SIG), (void *)0);
  121. break;
  122. }
  123. case '\33': { /* ESC pressed? */
  124. QACTIVE_POST(APP_alarmClock,
  125. Q_NEW(QEvt, TERMINATE_SIG), (void *)0);
  126. break;
  127. }
  128. }
  129. }
  130. /*..........................................................................*/
  131. Q_NORETURN Q_onAssert(char const * const file, int_t const line) {
  132. FPRINTF_S(stderr, "Assertion failed in %s, line %d", file, line);
  133. exit(-1);
  134. }