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