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