476 lines
12 KiB
C
Executable File
476 lines
12 KiB
C
Executable File
// libc
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <kwrap/type.h>
|
|
#include <kwrap/platform.h>
|
|
#include <kwrap/flag.h>
|
|
#include "UIWnd/UIFlow.h"
|
|
#include "System/SysMain.h"
|
|
#include "hdal.h"
|
|
#include "SxTimer/SxTimer.h"
|
|
#include "DrvExt.h"
|
|
#include "comm/hwclock.h"
|
|
#include "comm/timer.h"
|
|
#include <io/gpio.h>
|
|
#include <IOCfg.h>
|
|
#if HUNTING_CAMERA_MCU == ENABLE
|
|
#include <sf_inc.h>
|
|
#include "sf_log.h"
|
|
#endif
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#define __MODULE__ main
|
|
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
|
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
|
|
#include <kwrap/debug.h>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define DEFAULT_YEAR 2000
|
|
#define DEFAULT_MON 1
|
|
#define DEFAULT_DAY 1
|
|
#define DEFAULT_HOUR 0
|
|
#define DEFAULT_MIN 0
|
|
#define DEFAULT_SEC 0
|
|
|
|
#define VENDOR_AI_CFG 0x000f0000
|
|
|
|
extern void *vdoout_get_buf(void);
|
|
extern BOOL DrvCARD_DetStrgCard(void);
|
|
|
|
#if defined(_UI_STYLE_LVGL_)
|
|
|
|
/******************************************************
|
|
* include headers
|
|
*******************************************************/
|
|
#include "lvgl/lvgl.h"
|
|
#include "lv_drivers/display/fbdev.h"
|
|
|
|
/******************************************************
|
|
* extern function declaration
|
|
*******************************************************/
|
|
extern bool keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
|
|
extern bool pointer_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data);
|
|
extern void lvglTimer(void);
|
|
|
|
/******************************************************
|
|
* static variables
|
|
*******************************************************/
|
|
static lv_disp_buf_t disp_buf_2;
|
|
|
|
|
|
/******************************************************
|
|
* global variables
|
|
*******************************************************/
|
|
lv_indev_t* indev_keypad = NULL;
|
|
lv_indev_t* indev_pointer = NULL;
|
|
|
|
|
|
int nvt_lvgl_init(void)
|
|
{
|
|
/*-------------------------
|
|
* Initialize your display
|
|
* -----------------------*/
|
|
|
|
/*LittlevGL init*/
|
|
lv_init();
|
|
|
|
/*Linux frame buffer device init*/
|
|
fbdev_init();
|
|
|
|
/*-----------------------------
|
|
* Create a buffer for drawing
|
|
*----------------------------*/
|
|
/*Set a display buffer*/
|
|
|
|
#if LV_USE_GPU_NVT_DMA2D
|
|
|
|
|
|
|
|
#if LV_USER_CFG_USE_TWO_BUFFER
|
|
void *buf2_1 = (void *)((UINT32)fbp+(screensize*2));
|
|
#else
|
|
void *buf2_1 = (void *)((UINT32)fbp+screensize);
|
|
#endif
|
|
|
|
#else
|
|
lv_color_t* buf2_1 = (lv_color_t*) malloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * sizeof(lv_color_t)); /*A screen sized buffer*/
|
|
LV_ASSERT_NULL(buf2_1);
|
|
memset(buf2_1, 0, LV_HOR_RES_MAX * LV_VER_RES_MAX * sizeof(lv_color_t));
|
|
|
|
#if LV_USER_CFG_USE_TWO_BUFFER
|
|
lv_color_t* buf2_2 = (lv_color_t*) malloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * sizeof(lv_color_t)); /*A screen sized buffer*/
|
|
LV_ASSERT_NULL(buf2_2);
|
|
memset(buf2_2, 0, LV_HOR_RES_MAX * LV_VER_RES_MAX * sizeof(lv_color_t));
|
|
#endif
|
|
#endif
|
|
|
|
lv_disp_buf_init(&disp_buf_2, buf2_1, 0, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/
|
|
|
|
/*-----------------------------------
|
|
* Register the display in LVGL
|
|
*----------------------------------*/
|
|
/*Add a display the LittlevGL sing the frame buffer driver*/
|
|
lv_disp_drv_t disp_drv;
|
|
lv_disp_drv_init(&disp_drv);
|
|
|
|
//disp_drv.hor_res = LV_VER_RES_MAX;
|
|
//disp_drv.ver_res = LV_HOR_RES_MAX;
|
|
disp_drv.rotated = 0;
|
|
|
|
/*Set a display buffer*/
|
|
disp_drv.buffer = &disp_buf_2;
|
|
|
|
/*Used to copy the buffer's content to the display*/
|
|
disp_drv.flush_cb = disp_flush;
|
|
|
|
disp_drv.rounder_cb = lv_user_rounder_callback;
|
|
|
|
#if LV_COLOR_DEPTH == 24
|
|
disp_drv.set_px_cb = set_px_cb_8565;
|
|
#else
|
|
disp_drv.set_px_cb = NULL;
|
|
#endif
|
|
|
|
/*Finally register the driver*/
|
|
lv_disp_t * disp;
|
|
disp = lv_disp_drv_register(&disp_drv); /*It flushes the internal graphical buffer to the frame buffer*/
|
|
|
|
lv_disp_drv_update(disp, &disp_drv);
|
|
|
|
|
|
/*Register a keypad input device*/
|
|
lv_indev_drv_t indev_drv;
|
|
lv_indev_drv_init(&indev_drv);
|
|
indev_drv.type = LV_INDEV_TYPE_KEYPAD;
|
|
indev_drv.read_cb = keypad_read;
|
|
indev_keypad = lv_indev_drv_register(&indev_drv);
|
|
|
|
|
|
|
|
/*Register a keypad input device*/
|
|
lv_indev_drv_init(&indev_drv);
|
|
indev_drv.type = LV_INDEV_TYPE_POINTER;
|
|
indev_drv.read_cb = pointer_read;
|
|
indev_pointer = lv_indev_drv_register(&indev_drv);
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
int nvt_user_init(void)
|
|
{
|
|
UXUSER_OBJ uxuser_param={0};
|
|
ER ret=0;
|
|
|
|
//project init
|
|
UIControl_InstallID();
|
|
|
|
uxuser_param.pfMainProc = UserMainProc;
|
|
uxuser_param.pfNvtUserCB = UserErrCb;
|
|
ret = Ux_Open(&uxuser_param);
|
|
if(ret!=0){
|
|
DBG_ERR("Ux_Open fail%d\r\n",ret);
|
|
return -1;
|
|
}
|
|
|
|
BKG_OBJ uiBackObj = {0};
|
|
//Init UI background
|
|
uiBackObj.pDefaultFuncTbl = 0; //gBackgroundExtFuncTable
|
|
uiBackObj.done_event = NVTEVT_BACKGROUND_DONE;
|
|
ret = BKG_Open(&uiBackObj);
|
|
if(ret!=0){
|
|
DBG_ERR("BKG_Open fail%d\r\n",ret);
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* move lvgl timer here due to post event must after timer initialized */
|
|
#if defined(_UI_STYLE_LVGL_)
|
|
|
|
TIMER_ID id;
|
|
if (timer_open((TIMER_ID *)&id, (DRV_CB)lvglTimer) != E_OK) {
|
|
DBG_ERR("timer trig open failed!\r\n");
|
|
return -1;
|
|
}
|
|
|
|
timer_cfg(id, LV_DISP_DEF_REFR_PERIOD * 1000, TIMER_MODE_FREE_RUN | TIMER_MODE_ENABLE_INT, TIMER_STATE_PLAY);
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
int nvt_user_uninit(void)
|
|
{
|
|
Ux_Close();
|
|
BKG_Close();
|
|
GxGfx_Exit();
|
|
UIControl_UninstallID();
|
|
return 0;
|
|
}
|
|
|
|
UINT32 nvt_hdal_init(void)
|
|
{
|
|
HD_RESULT ret;
|
|
HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0};
|
|
|
|
ret = hd_common_init(0);
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("common init fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
|
|
#if MOVIE_AI_DEMO
|
|
hd_common_sysconfig(HD_VIDEOPROC_CFG, (1<<16), HD_VIDEOPROC_CFG_GDC_BEST , VENDOR_AI_CFG);
|
|
#else
|
|
hd_common_sysconfig(HD_VIDEOPROC_CFG, 0, HD_VIDEOPROC_CFG_GDC_BEST , 0);
|
|
#endif
|
|
|
|
#if defined(_UI_STYLE_LVGL_)
|
|
#if LV_USER_CFG_USE_ROTATE_BUFFER
|
|
mem_cfg.pool_info[0].type = HD_COMMON_MEM_COMMON_POOL;
|
|
mem_cfg.pool_info[0].blk_size = LOGO_BS_BLK_SIZE;
|
|
mem_cfg.pool_info[0].blk_cnt = 1;
|
|
mem_cfg.pool_info[0].ddr_id = DDR_ID0;
|
|
#endif
|
|
#else
|
|
#if (VDO_USE_ROTATE_BUFFER==ENABLE)
|
|
mem_cfg.pool_info[0].type = HD_COMMON_MEM_COMMON_POOL;
|
|
mem_cfg.pool_info[0].blk_size = LOGO_BS_BLK_SIZE;
|
|
mem_cfg.pool_info[0].blk_cnt = 1;
|
|
mem_cfg.pool_info[0].ddr_id = DDR_ID0;
|
|
#endif
|
|
#endif
|
|
|
|
ret = hd_common_mem_init(&mem_cfg);
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("mem init fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
ret = hd_gfx_init();
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("gfx init fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
UINT32 nvt_hdal_uninit(void)
|
|
{
|
|
HD_RESULT ret;
|
|
|
|
ret = hd_gfx_uninit();
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("gfx uninit fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
ret = hd_common_mem_uninit();
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("mem uninit fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
ret = hd_common_uninit();
|
|
if(ret != HD_OK) {
|
|
DBG_ERR("common uninit fail=%d\n", ret);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
|
|
}
|
|
|
|
ID FLG_ID_MAIN = 0;
|
|
|
|
#define FLG_MAIN_ON 0x00000001 //
|
|
#define FLG_MAIN_OFF 0x00000002 //
|
|
#define FLG_MAIN_COMMAND (FLG_MAIN_ON|FLG_MAIN_OFF) //
|
|
|
|
extern ID _SECTION(".kercfg_data") FLG_ID_MAIN;
|
|
|
|
void System_InstallID(void)
|
|
{
|
|
OS_CONFIG_FLAG(FLG_ID_MAIN);
|
|
}
|
|
|
|
void System_PowerOnFinish(void)
|
|
{
|
|
//clr_flg(FLG_ID_MAIN, FLG_MAIN_COMMAND);
|
|
//sta_tsk(IDLETSK_ID,0);
|
|
vos_flag_set(FLG_ID_MAIN, FLG_MAIN_ON);
|
|
}
|
|
|
|
void System_PowerOffStart(void)
|
|
{
|
|
vos_flag_set(FLG_ID_MAIN, FLG_MAIN_OFF);
|
|
}
|
|
|
|
void System_WaitForPowerOnFinish(void)
|
|
{
|
|
FLGPTN uiFlag;
|
|
vos_flag_wait(&uiFlag, FLG_ID_MAIN, FLG_MAIN_ON, TWF_ORW);
|
|
}
|
|
|
|
void System_WaitForPowerOffStart(void)
|
|
{
|
|
FLGPTN uiFlag;
|
|
vos_flag_wait(&uiFlag, FLG_ID_MAIN, FLG_MAIN_OFF, TWF_ORW);
|
|
}
|
|
#if HUNTING_CAMERA_MCU == ENABLE
|
|
UINT8 sf_cardv_check_power_on_mode(void)
|
|
{
|
|
FILE *fp = NULL;
|
|
UINT32 u32ize = 0;
|
|
char *pStrSrc = NULL;
|
|
char *pStrOtsOk = "Mode=";
|
|
char *pStrUpFw = "UpFw=";
|
|
|
|
char *temp = NULL;
|
|
UINT8 startup = 0;
|
|
UINT8 UpFw = 0;
|
|
|
|
system("cat /proc/cmdline > /tmp/Mode.txt");
|
|
fp = fopen("/tmp/Mode.txt","r");
|
|
if(fp == NULL){
|
|
return FALSE;
|
|
}
|
|
|
|
fseek(fp, 0, SEEK_END);
|
|
u32ize = ftell(fp); // take file size
|
|
fseek(fp, 0, SEEK_SET); // move to position zero
|
|
pStrSrc = (char *)malloc(u32ize*sizeof(char));
|
|
if (pStrSrc) {
|
|
fread(pStrSrc, 1, u32ize, fp);
|
|
temp = strstr(pStrSrc, pStrOtsOk);
|
|
if ( temp != NULL) {
|
|
temp += strlen("Mode=");
|
|
sscanf(temp, "%hhd", &startup);
|
|
sf_set_power_on_mode(startup);
|
|
//printf("%s: PowerOnModeStr=%d\r\n", __func__,startup);
|
|
//printf("%s: temp=%s\r\n", __func__,temp);
|
|
}
|
|
temp = strstr(pStrSrc, pStrUpFw);
|
|
if ( temp != NULL) {
|
|
temp += strlen("UpFw=");
|
|
sscanf(temp, "%hhd", &UpFw);
|
|
//printf("%s: UpFw=%d\r\n", __func__,UpFw);
|
|
sf_set_fw_update(UpFw);
|
|
}
|
|
printf("%s: PowerOnModeStr=%d UpFw=%d\r\n", __func__,startup,UpFw);
|
|
|
|
free(pStrSrc);
|
|
}
|
|
|
|
fclose(fp);
|
|
fp = NULL;
|
|
pStrSrc = NULL;
|
|
u32ize = 0;
|
|
|
|
return startup;
|
|
}
|
|
#endif
|
|
|
|
int NvtMain(void)
|
|
{
|
|
System_InstallID();
|
|
#if (USB_MODE==ENABLE)
|
|
System_OnUsbPreInit();
|
|
#endif
|
|
System_OnPowerPreInit();
|
|
|
|
#if HUNTING_CAMERA_MCU != ENABLE// The time is controlled by the MCU. sf_get_mcu_rtc_set_sys
|
|
//System_OnPowerPreInit() should be prior to rtc checking
|
|
struct tm ctv = {0};
|
|
ctv = hwclock_get_time(TIME_ID_CURRENT);
|
|
if(ctv.tm_year < DEFAULT_YEAR) {
|
|
ctv.tm_year = DEFAULT_YEAR;
|
|
ctv.tm_mon = DEFAULT_MON;
|
|
ctv.tm_mday = DEFAULT_DAY;
|
|
ctv.tm_hour = DEFAULT_HOUR;
|
|
ctv.tm_min = DEFAULT_MIN;
|
|
ctv.tm_sec = DEFAULT_SEC;
|
|
hwclock_set_time(TIME_ID_CURRENT, ctv, 0);
|
|
}
|
|
#endif
|
|
|
|
#if (POWERON_TRACE == ENABLE)
|
|
System_WaitForPowerOnFinish(); // Wait for boot cmd
|
|
#endif
|
|
Dx_InitIO();
|
|
SxTimer_Open(); //start sxtimer task
|
|
System_OnTimerInit();
|
|
#if (USB_MODE==ENABLE)
|
|
System_OnUsbInit();
|
|
#endif
|
|
nvt_hdal_init();
|
|
nvt_user_init();
|
|
#if HUNTING_CAMERA_MCU == ENABLE
|
|
sf_log_Level_set(SF_LOG_LEVEL_DEBUG);
|
|
sf_cardv_check_power_on_mode();
|
|
BOOL inUsb = GxUSB_GetIsUSBPlug();
|
|
if(TRUE == inUsb)//(!sf_gpio_get_status(GPIO_INT_USBPLUGIN))
|
|
{
|
|
sf_usb_mux_s(0);
|
|
sf_sys_status_led_set(SF_LED_SYS_STATE_USB_IN);
|
|
}
|
|
#if HUNTING_CAMERA_4G == ENABLE
|
|
|
|
sf_share_mem_file_init();
|
|
/*if (cardv_message_queue_init())
|
|
{
|
|
printf("cardv initial message queue error!\n");
|
|
exit(1);
|
|
}*/
|
|
if(SF_SUCCESS == sf_com_message_cardv_init())
|
|
{
|
|
printf("create message successs!!!!\n");
|
|
}
|
|
if(SF_SUCCESS == sf_com_message_app_init())
|
|
{
|
|
printf("create cardv message successs!!!!\n");
|
|
}
|
|
sf_cardv_message_thread_init();
|
|
|
|
SF_MESSAGE_BUF_S stMessageBuf = {0};
|
|
|
|
/*if(!sf_gpio_get_status(GPIO_KEY_TEST)){
|
|
sf_set_fw_update(1);//update
|
|
}*/
|
|
if(TRUE != inUsb)
|
|
{
|
|
stMessageBuf.arg1 = SF_MCU_CMD_POWERON;
|
|
stMessageBuf.cmdId = CMD_MCU;
|
|
sf_com_message_send_to_app(&stMessageBuf);
|
|
|
|
stMessageBuf.arg1 = SF_DEV_CMD_BAT;
|
|
stMessageBuf.cmdId = CMD_DEV;
|
|
sf_com_message_send_to_app(&stMessageBuf);
|
|
|
|
stMessageBuf.arg1 = SF_DEV_CMD_TEMPER;
|
|
stMessageBuf.cmdId = CMD_DEV;
|
|
sf_com_message_send_to_app(&stMessageBuf);
|
|
}
|
|
#else
|
|
sf_mcu_init();
|
|
sf_get_power_on_mode();
|
|
sf_mcu_wdg_set(30);
|
|
sf_usb_mux_s(1);
|
|
/*led init*/
|
|
sf_led_init();
|
|
#endif
|
|
sf_sd_exist_reg_cb(DrvCARD_DetStrgCard);
|
|
|
|
|
|
#endif
|
|
|
|
System_WaitForPowerOffStart(); // Wait for shutdown cmd
|
|
nvt_user_uninit();
|
|
nvt_hdal_uninit();
|
|
|
|
System_OnPowerPostExit(); //never return
|
|
return 0;
|
|
}
|
|
|