310 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			310 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| #include "kwrap/nvt_type.h"
 | |
| #include "kwrap/type.h"
 | |
| #include "kwrap/sxcmd.h"
 | |
| #include "kwrap/cmdsys.h"
 | |
| #include <kwrap/stdio.h>
 | |
| #include "PrjInc.h"
 | |
| #include "hd_common.h"
 | |
| #ifdef __FREERTOS
 | |
| #include "FreeRTOS.h"
 | |
| #include <kflow_common/nvtmpp.h>
 | |
| #else
 | |
| #include <sys/wait.h>
 | |
| #endif
 | |
| #include "UIApp/AppDisp_PipView.h"
 | |
| #define THIS_DBGLVL         2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| #define __MODULE__          SysMainCmd
 | |
| #define __DBGLVL__          ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
 | |
| #define __DBGFLT__          "*" //*=All, [mark]=CustomClass
 | |
| #include <kwrap/debug.h>
 | |
| 
 | |
| #if HUNTING_CAMERA_MCU == ENABLE
 | |
| #include <sf_inc.h>
 | |
| #endif
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| 
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // temp memory for user cmd
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| #define MAX_BUF_NUM        1
 | |
| //#define TEMPBUF_GET_MAXSIZE 0xffffffff
 | |
| 
 | |
| static UINT32 temp_pa;
 | |
| 
 | |
| UINT32 SysMain_GetTempBuffer(UINT32 uiSize)
 | |
| {
 | |
|     CHAR                 name[]= "UsrTmp";
 | |
| 	void                 *va;
 | |
| 	HD_RESULT            ret;
 | |
|     HD_COMMON_MEM_DDR_ID ddr_id = DDR_ID0;
 | |
| 
 | |
|     if(temp_pa) {
 | |
|     	DBG_ERR("need release buf\r\n");
 | |
|         return 0;
 | |
|     }
 | |
| 	ret = hd_common_mem_alloc(name, &temp_pa, (void **)&va, uiSize, ddr_id);
 | |
| 	if (ret != HD_OK) {
 | |
| 		DBG_ERR("err:alloc size 0x%x, ddr %d\r\n", (unsigned int)(uiSize), (int)(ddr_id));
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
| 	DBG_IND("temp_pa = 0x%x, va = 0x%x\r\n", (unsigned int)(temp_pa), (unsigned int)(va));
 | |
| 
 | |
| 	return (UINT32)va;
 | |
| }
 | |
| 
 | |
| UINT32 SysMain_RelTempBuffer(UINT32 addr)
 | |
| {
 | |
| 	HD_RESULT            ret;
 | |
| 
 | |
| 	DBG_IND("temp_pa = 0x%x, va = 0x%x\r\n", (unsigned int)(temp_pa), (unsigned int)(addr));
 | |
| 
 | |
|     if(!temp_pa||!addr){
 | |
|         DBG_ERR("not allo\r\n");
 | |
|         return HD_ERR_UNINIT;
 | |
|     }
 | |
| 	ret = hd_common_mem_free(temp_pa, (void *)addr);
 | |
| 	if (ret != HD_OK) {
 | |
| 		DBG_ERR("err:free temp_pa = 0x%x, va = 0x%x\r\n", (unsigned int)(addr), (unsigned int)(addr));
 | |
| 		return HD_ERR_NG;
 | |
| 	}else {
 | |
|         temp_pa =0;
 | |
| 	}
 | |
|     return HD_OK;
 | |
| }
 | |
| 
 | |
| int SysMain_system(const char* pCommand)
 | |
| {
 | |
|     pid_t pid;
 | |
|     int status;
 | |
|     int i = 0;
 | |
| 
 | |
|     if(pCommand == NULL)
 | |
|     {
 | |
|         return (1);
 | |
|     }
 | |
| 
 | |
|     if((pid = fork())<0)
 | |
|     {
 | |
|         status = -1;
 | |
|     }
 | |
|     else if(pid == 0)
 | |
|     {
 | |
|         /* close all descriptors in child sysconf(_SC_OPEN_MAX) */
 | |
|         for (i = 3; i < sysconf(_SC_OPEN_MAX); i++)
 | |
|         {
 | |
|             close(i);
 | |
|         }
 | |
| 
 | |
|         execl("/bin/sh", "sh", "-c", pCommand, (char *)0);
 | |
|         _exit(127);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         while(waitpid(pid, &status, 0) < 0)
 | |
|         {
 | |
|             if(errno != EINTR)
 | |
|             {
 | |
|                 status = -1;
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return status;
 | |
| }
 | |
| 
 | |
| static BOOL cmd_sys_mem(unsigned char argc, char **argv)
 | |
| {
 | |
| 	nvt_cmdsys_runcmd("ker dumpmem");
 | |
| #ifdef __FREERTOS
 | |
| 	vPortDumpHeap();
 | |
| 	nvt_cmdsys_runcmd("libc heap");
 | |
| 	nvtmpp_dump_mem_range(vk_printk);
 | |
| #endif
 | |
| 	return TRUE;
 | |
| }
 | |
| 
 | |
| static BOOL Cmd_user_pip(unsigned char argc, char **argv)
 | |
| {
 | |
| 	UINT32 pip_style = 0;
 | |
| 
 | |
| 	sscanf_s(argv[0], "%d", &pip_style);
 | |
| 
 | |
| 	PipView_SetStyle(pip_style);
 | |
| 
 | |
| 	return TRUE;
 | |
| }
 | |
| 
 | |
| 
 | |
| #if defined(_UI_STYLE_LVGL_)
 | |
| 
 | |
| typedef struct _KeyTab {
 | |
|   CHAR *name;
 | |
|   NVTEVT evt;
 | |
| } KEYTAB;
 | |
| 
 | |
| static KEYTAB keyTest[] = {
 | |
| 	{"0.LV_USER_KEY_ZOOMIN",NVTEVT_KEY_ZOOMIN},
 | |
| 	{"1.LV_USER_KEY_ZOOMOUT",NVTEVT_KEY_ZOOMOUT},
 | |
| 	{"2.LV_USER_KEY_MENU",NVTEVT_KEY_MENU},
 | |
| 	{"3.LV_USER_KEY_SELECT",NVTEVT_KEY_SELECT},
 | |
| 	{"4.LV_USER_KEY_MODE",NVTEVT_KEY_MODE},
 | |
| 	{"5.LV_KEY_ENTER",NVTEVT_KEY_ENTER},
 | |
| 	{"6.NVTEVT_CB_MOVIE_FULL",NVTEVT_CB_MOVIE_FULL},
 | |
| 	{"7.NVTEVT_CB_MOVIE_REC_FINISH",NVTEVT_CB_MOVIE_REC_FINISH},
 | |
| 	{"8.NVTEVT_CB_MOVIE_WR_ERROR",NVTEVT_CB_MOVIE_WR_ERROR},
 | |
| 	{"9.NVTEVT_CB_MOVIE_SLOW",NVTEVT_CB_MOVIE_SLOW},
 | |
| 	{"10.NVTEVT_CB_EMR_COMPLETED",NVTEVT_CB_EMR_COMPLETED},
 | |
| 	{"11.NVTEVT_CB_OZOOMSTEPCHG",NVTEVT_CB_OZOOMSTEPCHG},
 | |
| 	{"12.NVTEVT_CB_DZOOMSTEPCHG",NVTEVT_CB_DZOOMSTEPCHG},
 | |
| 	{"13.NVTEVT_BATTERY",NVTEVT_BATTERY},
 | |
| 	{"14.NVTEVT_STORAGE_CHANGE",NVTEVT_STORAGE_CHANGE},
 | |
| 	{"15.NVTEVT_BACKGROUND_DONE",NVTEVT_BACKGROUND_DONE},
 | |
| };
 | |
| static BOOL Cmd_user_EventTest(unsigned char argc, char **argv)
 | |
| {
 | |
| 	UINT32 event = 0;
 | |
| 
 | |
| 	sscanf_s(argv[0], "%d", &event);
 | |
| 	if (event>=(sizeof(keyTest)/sizeof(KEYTAB)))
 | |
| 	{
 | |
| 		DBG_ERR("event_no bigger than keyTest table size\r\n");
 | |
| 		return FALSE;
 | |
| 	}
 | |
| 	DBG_ERR("post event %s\r\n",keyTest[event].name);
 | |
| 	Ux_PostEvent((NVTEVT)keyTest[event].evt, 1,NVTEVT_KEY_PRESS);
 | |
| 	Ux_PostEvent((NVTEVT)keyTest[event].evt, 1,NVTEVT_KEY_RELEASE);
 | |
| 
 | |
| 	return TRUE;
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| SXCMD_BEGIN(sys_cmd_tbl, "system command")
 | |
| SXCMD_ITEM("mem %", cmd_sys_mem, "system memory layout")
 | |
| SXCMD_ITEM("pip %", Cmd_user_pip, "pip view style")
 | |
| 
 | |
| #if defined(_UI_STYLE_LVGL_)
 | |
| SXCMD_ITEM("event %", Cmd_user_EventTest, "lvgl user event test")
 | |
| #endif
 | |
| 
 | |
| 
 | |
| #if HUNTING_CAMERA_MCU == ENABLE
 | |
| SXCMD_ITEM("camname %", sf_cmd_cam_name_switch, "camname 0/1  xxxx")
 | |
| SXCMD_ITEM("cammode %", cmd_cam_mode, "cammode 0/1/2")
 | |
| SXCMD_ITEM("imgsize %", sf_cmd_img_size, "imgsize 0/1/2")
 | |
| SXCMD_ITEM("videosize %", sf_cmd_video_size, "videosize 0/1/2")
 | |
| SXCMD_ITEM("videolen %", sf_cmd_video_lenth, "videolen 5/10/15/20/30/40/50/59")
 | |
| SXCMD_ITEM("flashled %", sf_cmd_flash_led, "flashled 0/1")
 | |
| SXCMD_ITEM("nightmode %", sf_cmd_night_mode, "nightmode 0/1/2	")
 | |
| SXCMD_ITEM("multiintevel %", sf_cmd_multishot_intevel, "multishotintevel 0/1/2")
 | |
| SXCMD_ITEM("multishot %", sf_cmd_multishot, "multishot 0/1/2/3/4	")
 | |
| SXCMD_ITEM("pirsw %", sf_cmd_pir_switch, "pirsw 0/1")
 | |
| SXCMD_ITEM("pirsen %", sf_cmd_pir_sensitivity, "pirsen 0-9")
 | |
| SXCMD_ITEM("pirdelay %", sf_cmd_pir_delay_switch, "pirdelay 0/1 hh mm ss")
 | |
| SXCMD_ITEM("timelapse %", sf_cmd_timelapse_switch, "timelapse 0/1 hh mm ss ")
 | |
| SXCMD_ITEM("worktime %", sf_cmd_work_time_switch, "worktime x 0/1 hh mm hh mm	")
 | |
| SXCMD_ITEM("dateauto %", sf_cmd_date_auto, "dateauto 0/1")
 | |
| SXCMD_ITEM("datestyle %", sf_cmd_date_style, "datestyle 0/1/2")
 | |
| SXCMD_ITEM("campwd %", sf_cmd_pwd_switch, "campwd 0/1 xxxxxx")
 | |
| SXCMD_ITEM("stampsw %", sf_cmd_stamp_switch, "stamp 0/1")
 | |
| SXCMD_ITEM("battype %", sf_cmd_battery_type, "battype 0/1/2/3")
 | |
| SXCMD_ITEM("sdloop %", sf_cmd_sd_loop_switch, "sdloop 0/1")
 | |
| SXCMD_ITEM("rtcset %", cmd_rtc_set, "rtcset y m d h m s")
 | |
| SXCMD_ITEM("gprsmode %", sf_cmd_gprs_mode, "gprsmode 0/1/2")
 | |
| SXCMD_ITEM("sendmaxnum %", sf_cmd_sen_max_num, "sendmaxnum 0-99")
 | |
| SXCMD_ITEM("sendpicsize %", sf_cmd_send_pic_size, "sendpicsize 0/1/2/3")
 | |
| SXCMD_ITEM("sendphoto %", sf_cmd_send_photo_switch, "sendphoto 0/1")
 | |
| SXCMD_ITEM("sendvideo %", sf_cmd_send_video_switch, "sendvideo 0/1")
 | |
| SXCMD_ITEM("piccount %", sf_cmd_send_multishot_index, "piccount 0/1 0/1 0/1 0/1 0/1")
 | |
| SXCMD_ITEM("dailyreport %", sf_cmd_daily_report_switch, "dailyreport x 0/1 hh mm ")
 | |
| SXCMD_ITEM("dailyreporttest %", sf_cmd_daily_report_test_switch, "dailyreporttest 0/1")
 | |
| SXCMD_ITEM("simautomatch %", sf_cmd_sim_auto_switch, "simautomatch 0/1")
 | |
| SXCMD_ITEM("simpinflag %", sf_cmd_sim_pin_flag, "simpinflag 0/1")
 | |
| //////////////////
 | |
| SXCMD_ITEM("simpinset %", sf_cmd_send_multishot_index, "simpinset xxxxxxxx")
 | |
| SXCMD_ITEM("sim4gapn %", sf_cmd_send_multishot_index, "sim4gapn xxxxx")
 | |
| SXCMD_ITEM("sim4gusername %", sf_cmd_send_multishot_index, "sim4gusername xxxxxx")
 | |
| SXCMD_ITEM("sim4gpsw %", sf_cmd_send_multishot_index, "sim4gpsw xxxxxx")
 | |
| SXCMD_ITEM("imei %", sf_cmd_send_multishot_index, "imei xxxxxxxxxxxxxxx")
 | |
| SXCMD_ITEM("modulever %", sf_cmd_send_multishot_index, "modulever xxxxxx")
 | |
| SXCMD_ITEM("modulesubver %", sf_cmd_send_multishot_index, "modulesubver xxxxxx")
 | |
| ///////////////
 | |
| SXCMD_ITEM("gpssw %", sf_cmd_gps_switch, "gpssw 0/1")
 | |
| SXCMD_ITEM("latitude %", sf_cmd_latitude, "latitude xxxxxx")
 | |
| SXCMD_ITEM("longitude %", sf_cmd_longitude, "longitude xxxxxx")
 | |
| SXCMD_ITEM("webip %", sf_cmd_web_ip, "webip xxxxxx")
 | |
| SXCMD_ITEM("acmip %", sf_cmd_acm_ip, "acmip xxxxxx")
 | |
| SXCMD_ITEM("debugmode %", sf_cmd_debug_mode, "debugmode 0/1")
 | |
| SXCMD_ITEM("autooffsw %", sf_cmd_auto_off_switch, "autooffsw 0/1")
 | |
| SXCMD_ITEM("autoofftime %", sf_cmd_auto_off_time, "autoofftime cnt")
 | |
| SXCMD_ITEM("qlogsw %", sf_cmd_qlog_switch, "qlogsw 0/1")
 | |
| SXCMD_ITEM("rawsw %", sf_cmd_raw_switch, "rawsw 0/1")
 | |
| SXCMD_ITEM("batterysw %", sf_cmd_battery_log_switch, "batterysw 0/1")
 | |
| SXCMD_ITEM("state %", sf_cmd_get_cam_state, "state")
 | |
| SXCMD_ITEM("reset", sf_cmd_reset, "reset")
 | |
| SXCMD_ITEM("mcupara", sf_cmd_mcu_power_on_para_get, "get mcu para")
 | |
| SXCMD_ITEM("setusbmuxs", sf_cmd_usb_mux_s, "set usbmuxs")
 | |
| SXCMD_ITEM("4gusbboot", sf_cmd_cardv_4g_usb_boot, "set 4gusbboot")
 | |
| SXCMD_ITEM("sfcheck", sf_cmd_fs_ro_check, "sf check")
 | |
| SXCMD_ITEM("dispparaset %", sf_cmd_disp_para_set, "dispparaset v1 v2 v3 v4 v5 v6")
 | |
| SXCMD_ITEM("ftpsw %", sf_cmd_ftp_switch, "ftpsw v1")
 | |
| SXCMD_ITEM("ftpset %", sf_cmd_ftp, "ftpset v1 v2 v3 v4")
 | |
| SXCMD_ITEM("ftpsset %", sf_cmd_ftps, "ftpsset v1 v2 v3 v4")
 | |
| SXCMD_ITEM("sfota %", sf_cmd_ftp_ota, "sf_ota v1 v2 v3 v4")
 | |
| SXCMD_ITEM("sf_sw_esim %", sf_cmd_switch_esim, "sf_switch_esim")
 | |
| SXCMD_ITEM("gprssw %", sf_cmd_gprs_switch, "gprssw 0/1")
 | |
| SXCMD_ITEM("uiprint %", sf_cmd_para_printf, "uiprint")
 | |
| SXCMD_ITEM("blusw %", cmd_blu_switch, "blusw 0/1")
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| SXCMD_END()
 | |
| 
 | |
| 
 | |
| static int sys_cmd_showhelp(int (*dump)(const char *fmt, ...))
 | |
| {
 | |
| 	UINT32 cmd_num = SXCMD_NUM(sys_cmd_tbl);
 | |
| 	UINT32 loop = 1;
 | |
| 
 | |
| 	dump("---------------------------------------------------------------------\r\n");
 | |
| 	dump("  %s\n", "mem");
 | |
| 	dump("---------------------------------------------------------------------\r\n");
 | |
| 
 | |
| 	for (loop = 1 ; loop <= cmd_num ; loop++) {
 | |
| 		dump("%15s : %s\r\n", sys_cmd_tbl[loop].p_name, sys_cmd_tbl[loop].p_desc);
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| MAINFUNC_ENTRY(sys, argc, argv)
 | |
| {
 | |
| 	UINT32 cmd_num = SXCMD_NUM(sys_cmd_tbl);
 | |
| 	UINT32 loop;
 | |
| 	int    ret;
 | |
| 
 | |
| 	if (argc < 2) {
 | |
| 		return -1;
 | |
| 	}
 | |
| 	if (strncmp(argv[1], "?", 2) == 0) {
 | |
| 		sys_cmd_showhelp(vk_printk);
 | |
| 		return 0;
 | |
| 	}
 | |
| 	for (loop = 1 ; loop <= cmd_num ; loop++) {
 | |
| 		if (strncmp(argv[1], sys_cmd_tbl[loop].p_name, strlen(argv[1])) == 0) {
 | |
| 			ret = sys_cmd_tbl[loop].p_func(argc-2, &argv[2]);
 | |
| 			return ret;
 | |
| 		}
 | |
| 	}
 | |
| 	sys_cmd_showhelp(vk_printk);
 | |
| 	return 0;
 | |
| }
 | |
| 
 | 
