rt-thread/bsp/nuvoton/libraries/nu_packages/Demo/slcd_show_tick.c

154 lines
3.9 KiB
C

/**************************************************************************//**
*
* @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020-11-11 Wayne First version
*
******************************************************************************/
#include <rtconfig.h>
#if defined(BSP_USING_SLCD)
#include <rtthread.h>
#include <rtdevice.h>
#include <sys/time.h>
#include "slcd_rhe6616tp01.h"
#if defined(RT_USING_NETDEV)
#if defined(RT_USING_SAL)
#include <arpa/inet.h>
#elif defined(RT_USING_LWIP)
#include <lwip/inet.h>
#endif /* RT_USING_SAL */
#include <netdev.h>
#endif
const uint32_t au32SLCDSymbols [] =
{
SYMBOL_NVT,
SYMBOL_WIFI,
SYMBOL_SOUND,
SYMBOL_NUMICRO,
SYMBOL_BAT_FRAME,
SYMBOL_BAT_1,
SYMBOL_BAT_2,
SYMBOL_BAT_3,
SYMBOL_PLUS,
SYMBOL_MINUS,
SYMBOL_V,
SYMBOL_A,
SYMBOL_W,
SYMBOL_ARROW_UP,
SYMBOL_ARROW_LEFT,
SYMBOL_ARROW_DOWN,
SYMBOL_ARROW_RIGHT,
SYMBOL_CIRCLE_UP,
SYMBOL_CIRCLE_LEFT,
SYMBOL_CIRCLE_RIGHT,
SYMBOL_PERCENTAGE,
SYMBOL_PPM,
SYMBOL_TEMP_C,
SYMBOL_TEMP_F,
SYMBOL_VERSION,
SYMBOL_MAIN_DIG_COL1,
SYMBOL_MAIN_DIG_COL2,
SYMBOL_MAIN_DIG_COL3,
SYMBOL_MAIN_DIG_COL4,
SYMBOL_MAIN_DIG_COL5,
SYMBOL_MAIN_DIG_COL6,
SYMBOL_MAIN_DIG_P1,
SYMBOL_MAIN_DIG_P2,
SYMBOL_MAIN_DIG_P3,
SYMBOL_MAIN_DIG_P4,
SYMBOL_MAIN_DIG_P5,
SYMBOL_MAIN_DIG_P6,
SYMBOL_VER_DIG_P1,
SYMBOL_VER_DIG_P2,
SYMBOL_TIME_DIG_COL1,
SYMBOL_TIME_DIG_P1,
SYMBOL_TIME_DIG_P2,
SYMBOL_TIME_DIG_P3
};
const int i32SLCDSymbolsSize = sizeof(au32SLCDSymbols) / sizeof(au32SLCDSymbols[0]);
void slcd_demo_hook(void)
{
static uint32_t u32NextShowTime = 0;
static uint32_t u32ShownTime = 0;
uint32_t u32CurTickCount = rt_tick_get();
char au8Str[16];
if (u32CurTickCount < u32NextShowTime)
return;
u32NextShowTime = u32CurTickCount + 500;
u32ShownTime++;
/* Show NuMicro Log. */
{
LCDLIB_SetSymbol(SYMBOL_NVT, 1);
LCDLIB_SetSymbol(SYMBOL_NUMICRO, 1);
LCDLIB_SetSymbol(SYMBOL_ARROW_UP, 1);
LCDLIB_SetSymbol(SYMBOL_ARROW_LEFT, 1);
LCDLIB_SetSymbol(SYMBOL_ARROW_DOWN, 1);
LCDLIB_SetSymbol(SYMBOL_ARROW_RIGHT, 1);
LCDLIB_SetSymbol(SYMBOL_CIRCLE_UP, 1);
LCDLIB_SetSymbol(SYMBOL_CIRCLE_LEFT, 1);
LCDLIB_SetSymbol(SYMBOL_CIRCLE_RIGHT, 1);
}
{
struct tm *g_pstm;
time_t now;
/* output current time */
now = time(RT_NULL);
g_pstm = localtime(&now);
rt_snprintf(au8Str, sizeof(au8Str), "%02d%02d", g_pstm->tm_hour, g_pstm->tm_min);
LCDLIB_Printf(ZONE_TIME_DIGIT, &au8Str[0]);
LCDLIB_SetSymbol(SYMBOL_TIME_DIG_COL1, u32ShownTime % 2);
rt_snprintf(au8Str, sizeof(au8Str), "-%02d", g_pstm->tm_sec);
LCDLIB_Printf(ZONE_NUMICRO_DIGIT, &au8Str[0]);
}
/* Show RTT version. */
{
LCDLIB_SetSymbol(SYMBOL_VERSION, 1);
rt_snprintf(au8Str, sizeof(au8Str), "%d%02d%03d", RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH);
LCDLIB_Printf(ZONE_VER_DIGIT, &au8Str[0]);
LCDLIB_SetSymbol(SYMBOL_VER_DIG_P1, 1);
LCDLIB_SetSymbol(SYMBOL_VER_DIG_P2, 1);
}
#if defined(RT_USING_NETDEV)
/* Show Wi-Fi connective if leased an ip address. */
{
struct netdev *netdev = netdev_get_by_name("esp0");
LCDLIB_SetSymbol(SYMBOL_WIFI, netdev_is_dhcp_enabled(netdev));
}
#endif
/* Travel all dots */
LCDLIB_SetSymbol(SYMBOL_S(u32ShownTime % 40 + 1), (u32ShownTime / 40) % 2);
}
static int slcd_demo_init(void)
{
rt_err_t err = rt_thread_idle_sethook(slcd_demo_hook);
if (err != RT_EOK)
{
rt_kprintf("set idle hook failed!\n");
return -1;
}
return 0;
}
INIT_APP_EXPORT(slcd_demo_init);
#endif /* #if defined(BSP_USING_SLCD) */