slcd_show_tick.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /**************************************************************************//**
  2. *
  3. * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0
  6. *
  7. * Change Logs:
  8. * Date Author Notes
  9. * 2020-11-11 Wayne First version
  10. *
  11. ******************************************************************************/
  12. #include <rtconfig.h>
  13. #if defined(BSP_USING_SLCD)
  14. #include <rtthread.h>
  15. #include <rtdevice.h>
  16. #include <sys/time.h>
  17. #include "slcd_rhe6616tp01.h"
  18. #if defined(RT_USING_NETDEV)
  19. #if defined(RT_USING_SAL)
  20. #include <arpa/inet.h>
  21. #elif defined(RT_USING_LWIP)
  22. #include <lwip/inet.h>
  23. #endif /* RT_USING_SAL */
  24. #include <netdev.h>
  25. #endif
  26. const uint32_t au32SLCDSymbols [] =
  27. {
  28. SYMBOL_NVT,
  29. SYMBOL_WIFI,
  30. SYMBOL_SOUND,
  31. SYMBOL_NUMICRO,
  32. SYMBOL_BAT_FRAME,
  33. SYMBOL_BAT_1,
  34. SYMBOL_BAT_2,
  35. SYMBOL_BAT_3,
  36. SYMBOL_PLUS,
  37. SYMBOL_MINUS,
  38. SYMBOL_V,
  39. SYMBOL_A,
  40. SYMBOL_W,
  41. SYMBOL_ARROW_UP,
  42. SYMBOL_ARROW_LEFT,
  43. SYMBOL_ARROW_DOWN,
  44. SYMBOL_ARROW_RIGHT,
  45. SYMBOL_CIRCLE_UP,
  46. SYMBOL_CIRCLE_LEFT,
  47. SYMBOL_CIRCLE_RIGHT,
  48. SYMBOL_PERCENTAGE,
  49. SYMBOL_PPM,
  50. SYMBOL_TEMP_C,
  51. SYMBOL_TEMP_F,
  52. SYMBOL_VERSION,
  53. SYMBOL_MAIN_DIG_COL1,
  54. SYMBOL_MAIN_DIG_COL2,
  55. SYMBOL_MAIN_DIG_COL3,
  56. SYMBOL_MAIN_DIG_COL4,
  57. SYMBOL_MAIN_DIG_COL5,
  58. SYMBOL_MAIN_DIG_COL6,
  59. SYMBOL_MAIN_DIG_P1,
  60. SYMBOL_MAIN_DIG_P2,
  61. SYMBOL_MAIN_DIG_P3,
  62. SYMBOL_MAIN_DIG_P4,
  63. SYMBOL_MAIN_DIG_P5,
  64. SYMBOL_MAIN_DIG_P6,
  65. SYMBOL_VER_DIG_P1,
  66. SYMBOL_VER_DIG_P2,
  67. SYMBOL_TIME_DIG_COL1,
  68. SYMBOL_TIME_DIG_P1,
  69. SYMBOL_TIME_DIG_P2,
  70. SYMBOL_TIME_DIG_P3
  71. };
  72. const int i32SLCDSymbolsSize = sizeof(au32SLCDSymbols) / sizeof(au32SLCDSymbols[0]);
  73. void slcd_demo_hook(void)
  74. {
  75. static uint32_t u32NextShowTime = 0;
  76. static uint32_t u32ShownTime = 0;
  77. uint32_t u32CurTickCount = rt_tick_get();
  78. char au8Str[16];
  79. if (u32CurTickCount < u32NextShowTime)
  80. return;
  81. u32NextShowTime = u32CurTickCount + 500;
  82. u32ShownTime++;
  83. /* Show NuMicro Log. */
  84. {
  85. LCDLIB_SetSymbol(SYMBOL_NVT, 1);
  86. LCDLIB_SetSymbol(SYMBOL_NUMICRO, 1);
  87. LCDLIB_SetSymbol(SYMBOL_ARROW_UP, 1);
  88. LCDLIB_SetSymbol(SYMBOL_ARROW_LEFT, 1);
  89. LCDLIB_SetSymbol(SYMBOL_ARROW_DOWN, 1);
  90. LCDLIB_SetSymbol(SYMBOL_ARROW_RIGHT, 1);
  91. LCDLIB_SetSymbol(SYMBOL_CIRCLE_UP, 1);
  92. LCDLIB_SetSymbol(SYMBOL_CIRCLE_LEFT, 1);
  93. LCDLIB_SetSymbol(SYMBOL_CIRCLE_RIGHT, 1);
  94. }
  95. {
  96. struct tm *g_pstm;
  97. time_t now;
  98. /* output current time */
  99. now = time(RT_NULL);
  100. g_pstm = localtime(&now);
  101. rt_snprintf(au8Str, sizeof(au8Str), "%02d%02d", g_pstm->tm_hour, g_pstm->tm_min);
  102. LCDLIB_Printf(ZONE_TIME_DIGIT, &au8Str[0]);
  103. LCDLIB_SetSymbol(SYMBOL_TIME_DIG_COL1, u32ShownTime % 2);
  104. rt_snprintf(au8Str, sizeof(au8Str), "-%02d", g_pstm->tm_sec);
  105. LCDLIB_Printf(ZONE_NUMICRO_DIGIT, &au8Str[0]);
  106. }
  107. /* Show RTT version. */
  108. {
  109. LCDLIB_SetSymbol(SYMBOL_VERSION, 1);
  110. rt_snprintf(au8Str, sizeof(au8Str), "%d%02d%03d", RT_VERSION, RT_SUBVERSION, RT_REVISION);
  111. LCDLIB_Printf(ZONE_VER_DIGIT, &au8Str[0]);
  112. LCDLIB_SetSymbol(SYMBOL_VER_DIG_P1, 1);
  113. LCDLIB_SetSymbol(SYMBOL_VER_DIG_P2, 1);
  114. }
  115. #if defined(RT_USING_NETDEV)
  116. /* Show Wi-Fi connective if leased an ip address. */
  117. {
  118. struct netdev *netdev = netdev_get_by_name("esp0");
  119. LCDLIB_SetSymbol(SYMBOL_WIFI, netdev_is_dhcp_enabled(netdev));
  120. }
  121. #endif
  122. /* Travel all dots */
  123. LCDLIB_SetSymbol(SYMBOL_S(u32ShownTime % 40 + 1), (u32ShownTime / 40) % 2);
  124. }
  125. static int slcd_demo_init(void)
  126. {
  127. rt_err_t err = rt_thread_idle_sethook(slcd_demo_hook);
  128. if (err != RT_EOK)
  129. {
  130. rt_kprintf("set idle hook failed!\n");
  131. return -1;
  132. }
  133. return 0;
  134. }
  135. INIT_APP_EXPORT(slcd_demo_init);
  136. #endif /* #if defined(BSP_USING_SLCD) */