From 9c7b5aaeeb20ca7e1eafc953e67e851a15cc48f0 Mon Sep 17 00:00:00 2001 From: payton Date: Mon, 24 Apr 2023 15:34:56 +0800 Subject: [PATCH] =?UTF-8?q?1.0418=20IQ=E6=9B=B4=E6=96=B0;2.sf=5Fapp=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4,=E5=B0=86led=E3=80=81mcu=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=88=B0sf=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 + .../init.d/S10_SysInit2 | 2 + code/application/source/cardv/Makefile | 2 + .../Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c | 25 +- .../Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h | 30 + .../cardv/SrcCode/PrjCfg_HUNTING_S530.h | 4 +- .../source/cardv/SrcCode/System/SysMain.c | 13 + .../source/cardv/SrcCode/System/SysStrg_CB.c | 12 +- .../source/cardv/SrcCode/System/SysUsb_Exe.c | 33 +- .../source/cardv/SrcCode/System/main.c | 33 +- .../SrcCode/UIApp/MovieStamp/MovieStamp.c | 2 +- .../SrcCode/UIApp/Photo/UIAppPhoto_Exe.c | 9 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c | 108 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h | 6 +- .../LVGL_SPORTCAM/UIInfo/UIMovieMapping.c | 12 +- .../LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c | 24 + .../LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h | 3 + code/application/source/sf_app/Makefile | 13 +- .../source/sf_app/code/include/sf_commMng.h | 4 +- .../source/sf_app/code/include/sf_common.h | 20 + .../sf_app/code/include/sf_commu_mcu_reg.h | 12 +- .../source/sf_app/code/include/sf_dbg.h | 90 + .../source/sf_app/code/include/sf_device.h | 43 +- .../source/sf_app/code/include/sf_eg91_gps.h | 6 +- .../source/sf_app/code/include/sf_hal_gpio.h | 3 + .../sf_app/code/include/sf_http_server.h | 2 +- .../source/sf_app/code/include/sf_keymng.h | 2 +- .../source/sf_app/code/include/sf_ledmng.h | 147 ++ .../updataMng/inc => code/include}/sf_md5.h | 0 .../inc => code/include}/sf_otamng.h | 5 + .../sf_app/code/include/sf_param_common.h | 12 +- .../sf_app/code/include/sf_param_enum.h | 60 +- .../source/sf_app/code/include/sf_service.h | 59 + .../source/sf_app/code/include/sf_system.h | 59 + .../sf_app/code/source/4gMng/sf_http_server.c | 2 +- .../sf_app/code/source/4gMng/sf_module.c | 6 +- .../source/sf_app/code/source/app/sf_app.c | 138 +- .../source/sf_app/code/source/app/sf_common.c | 799 ++++++++ .../source/sf_app/code/source/app/sf_dbg.c | 1185 ++++++++++++ .../source/sf_app/code/source/app/sf_device.c | 105 +- .../sf_app/code/source/app/sf_service.c | 1702 +++++++++++++++++ .../source/sf_app/code/source/app/sf_system.c | 854 +++++++++ .../code/source/commMng/sf_message_queue.c | 11 +- .../sf_app/code/source/commMng/sf_share_mem.c | 65 +- .../sf_app/code/source/devMng/sf_dev_usb.c | 1 - .../sf_app/code/source/devMng/sf_ledmng.c | 564 +++++- .../sf_app/code/source/gpio/sf_hal_gpio.c | 14 + .../code/source/paramMng/sf_param_common.c | 594 +++++- .../code/source/systemMng/sf_commu_mcu.c | 18 +- .../code/source/systemMng/sf_commu_mcu_reg.c | 807 +++++--- .../src => code/source/updataMng}/sf_md5.c | 0 .../src => code/source/updataMng}/sf_otamng.c | 4 +- .../sf_app/component/updataMng/Makefile | 11 - code/hdal/vendor/output/libvendor_ai2_pub.a | Bin 141072 -> 141072 bytes code/hdal/vendor/output/libvendor_ai2_pub2.a | Bin 177630 -> 177630 bytes code/lib/include/io/gpio.h | 15 + code/lib/source/sifar/Makefile | 11 +- .../source/sifar/code/include/sf_battery.h | 2 + .../lib/source/sifar/code/include/sf_common.h | 1 + code/lib/source/sifar/code/include/sf_inc.h | 3 + code/lib/source/sifar/code/include/sf_led.h | 31 +- code/lib/source/sifar/code/include/sf_mcu.h | 6 +- .../sifar/code/source/common/sf_battery.c | 365 +++- .../sifar/code/source/common/sf_common.c | 201 ++ .../source/sifar/code/source/common/sf_led.c | 402 +++- .../sifar/code/source/common/sf_sd_common.c | 5 + .../sifar/code/source/mcu/sf_mcu_client.c | 79 +- .../nvt-top.dtsi | 2 +- .../565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c | 2 + .../cardv/SrcCode/FastFlow/flow_preview.c | 56 +- .../cardv/SrcCode/PrjCfg_HUNTING_S530.h | 3 +- .../source/cardv/SrcCode/System/rtos-main.c | 9 +- .../cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c | 58 +- .../UIApp/PhotoFast/PhotoFastCapDateImprint.c | 84 +- .../UIApp/PhotoFast/PhotoFastSliceEncode.h | 2 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h | 7 +- rtos/code/driver/na51089/include/sf_mcu.h | 2 +- .../driver/na51089/source/mcu/sf_commu_mcu.c | 2 +- .../vendor/isp/configs/dtsi/os05b10_ae_0.dtsi | 2 +- .../vendor/isp/configs/dtsi/os05b10_iq_0.dtsi | 6 +- .../isp/configs/dtsi/os05b10_iq_0_cap.dtsi | 6 +- 81 files changed, 8496 insertions(+), 606 deletions(-) create mode 100755 code/application/source/sf_app/code/include/sf_common.h create mode 100755 code/application/source/sf_app/code/include/sf_dbg.h rename code/application/source/sf_app/{component/updataMng/inc => code/include}/sf_md5.h (100%) rename code/application/source/sf_app/{component/updataMng/inc => code/include}/sf_otamng.h (86%) create mode 100755 code/application/source/sf_app/code/include/sf_service.h create mode 100755 code/application/source/sf_app/code/include/sf_system.h create mode 100755 code/application/source/sf_app/code/source/app/sf_common.c create mode 100755 code/application/source/sf_app/code/source/app/sf_dbg.c create mode 100755 code/application/source/sf_app/code/source/app/sf_service.c create mode 100755 code/application/source/sf_app/code/source/app/sf_system.c rename code/application/source/sf_app/{component/updataMng/src => code/source/updataMng}/sf_md5.c (100%) rename code/application/source/sf_app/{component/updataMng/src => code/source/updataMng}/sf_otamng.c (95%) delete mode 100755 code/application/source/sf_app/component/updataMng/Makefile diff --git a/.gitignore b/.gitignore index 21f260211..bdd824add 100755 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,12 @@ *.ko.cmd *.mod.c *.ko +*.sln +*.vcxproj +*.filters +*.user modules.order .tmp_versions Module.symvers /.vs +/.vscode diff --git a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/init.d/S10_SysInit2 b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/init.d/S10_SysInit2 index f7e96ed38..0221bbad3 100755 --- a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/init.d/S10_SysInit2 +++ b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/init.d/S10_SysInit2 @@ -19,6 +19,8 @@ HUNTING_BOOT_MODE=`dmesg | grep "Kernel command line" | sed 's/.* hunt_boot_mode echo HUNTING_BOOT_MODE=${HUNTING_BOOT_MODE} +sf_app & + if [ "${HUNTING_BOOT_MODE_4G_ONLY}" = "${HUNTING_BOOT_MODE}" ]; then echo "skip insert ko"; diff --git a/code/application/source/cardv/Makefile b/code/application/source/cardv/Makefile index ef376d641..fcf3f4654 100755 --- a/code/application/source/cardv/Makefile +++ b/code/application/source/cardv/Makefile @@ -29,6 +29,7 @@ else endif SIFAR_DIR = $(LIBRARY_DIR)/source/sifar/code +SIFAR_APP_DIR = $(APP_DIR)/source/sf_app/code/include # public includes EXTRA_INCLUDE += \ @@ -51,6 +52,7 @@ EXTRA_INCLUDE += \ -I$(NVT_HDAL_DIR)/vendor/media/include \ -I$(NVT_HDAL_DIR)/vendor/common/include \ -I$(SIFAR_DIR)/include \ + -I$(SIFAR_APP_DIR) \ # application local includes EXTRA_INCLUDE += \ diff --git a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c index 68cf7bb37..e785a7bcf 100755 --- a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c +++ b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c @@ -322,7 +322,8 @@ INT32 GPIO_SetBacklightStatus(BOOL en) void GOIO_Turn_Onoff_IRCUT(UINT8 onoff) { static UINT32 ir_flag = 1; - printf("[%s:%d]s onoff:%d\n",__FUNCTION__,__LINE__,onoff); + //printf("[%s:%d]s onoff:%d\n",__FUNCTION__,__LINE__,onoff); + DBG_IND(" s onoff:%d\n",onoff); if(ir_flag) { @@ -353,7 +354,8 @@ void GOIO_Turn_Onoff_IRCUT(UINT8 onoff) //Delay_DelayMs(20); //gpio_clearPin(GPIO_IRCUT_MEN1); //gpio_clearPin(GPIO_IRCUT_MEN2); - printf("[%s:%d]e\n",__FUNCTION__,__LINE__); + //printf("[%s:%d]e\n",__FUNCTION__,__LINE__); + DBG_IND(" e\n"); } @@ -445,7 +447,8 @@ extern int nvt_system(const char* pCommand); *************************************************/ void sf_ir_led_set(UINT8 mode, UINT8 flashLed, UINT8 stillExp, UINT8 isSnapVideo) { - printf("[%s:%d]s mode:%d,flashLed:%d,isSnapVideo:%d\n",__FUNCTION__,__LINE__,mode,flashLed, isSnapVideo); + //printf("[%s:%d]s mode:%d,flashLed:%d,isSnapVideo:%d\n",__FUNCTION__,__LINE__,mode,flashLed, isSnapVideo); + DBG_IND(" s mode:%d,flashLed:%d,isSnapVideo:%d\n",mode,flashLed, isSnapVideo); UINT32 ui_rise = 0; ///< Rising at which clock int ret = 0; char argv[70] = {0}; @@ -505,7 +508,8 @@ void sf_ir_led_set(UINT8 mode, UINT8 flashLed, UINT8 stillExp, UINT8 isSnapVideo sprintf(argv, "echo \"w openpwm 3 100 %d 100 0 0 0 0\" > /proc/pwm/cmd", ui_rise); ret = nvt_system(argv); - printf("%s:%d argv:%s\n", __FUNCTION__, __LINE__,argv); + //printf("%s:%d argv:%s\n", __FUNCTION__, __LINE__,argv); + DBG_IND(" argv:%s\n", argv); if(0 != ret) { printf("%s:%d sf pwm open failed, errno\n", __FUNCTION__, __LINE__); @@ -514,8 +518,9 @@ void sf_ir_led_set(UINT8 mode, UINT8 flashLed, UINT8 stillExp, UINT8 isSnapVideo } else { - printf("%s:%d sf pwm open success\n", __FUNCTION__, __LINE__); - DBG_DUMP("sf pwm open success\n"); + DBG_IND("sf pwm open success\n"); + //printf("%s:%d sf pwm open success\n", __FUNCTION__, __LINE__); + //DBG_DUMP("sf pwm open success\n"); } sf_set_night_led_flag(1); @@ -524,7 +529,8 @@ void sf_ir_led_set(UINT8 mode, UINT8 flashLed, UINT8 stillExp, UINT8 isSnapVideo { sprintf(argv, "echo \"w closepwm 3\" > /proc/pwm/cmd"); ret = nvt_system(argv); - printf("%s:%d argv:%s\n", __FUNCTION__, __LINE__,argv); + DBG_IND("argv:%s\n",argv); + //printf("%s:%d argv:%s\n", __FUNCTION__, __LINE__,argv); if(0 != ret) { DBG_ERR("sf pwm failed, errno(%d)\n", errno); @@ -533,8 +539,9 @@ void sf_ir_led_set(UINT8 mode, UINT8 flashLed, UINT8 stillExp, UINT8 isSnapVideo } else { - printf("%s:%d sf pwm close success\n", __FUNCTION__, __LINE__); - DBG_DUMP("sf pwm close success\n"); + DBG_IND("sf pwm close success\n"); + //printf("%s:%d sf pwm close success\n", __FUNCTION__, __LINE__); + //DBG_DUMP("sf pwm close success\n"); } sf_set_night_led_flag(0); } diff --git a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h index c347b7360..1dad21bf2 100755 --- a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h +++ b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h @@ -304,6 +304,36 @@ extern BOOL GPIOMap_DetPoweroff(void); #define GPIO_GREEN_LED P_GPIO_10 //FPGA #define PAD_GREEN_LED PAD_PIN_PGPIO10 +#define GPIO_LED_STATUS_R DSI_GPIO_8 // +#define PAD_LED_STATUS_R PAD_PIN_DSIGPIO8 +#define GPIO_LED_STATUS_G DSI_GPIO_9// +#define PAD_LED_STATUS_G PAD_PIN_DSIGPIO9 +#define GPIO_LED_SD_G DSI_GPIO_7// +#define PAD_LED_SD_G PAD_PIN_DSIGPIO7 +#define GPIO_LED_SD_R DSI_GPIO_4// +#define PAD_LED_SD_R PAD_PIN_DSIGPIO4 +#define GPIO_LED_WIFI_B DSI_GPIO_6// +#define PAD_LED_WIFI_B PAD_PIN_DSIGPIO6 +#define GPIO_LED_BAT_1 DSI_GPIO_5// +#define PAD_LED_BAT_1 PAD_PIN_DSIGPIO5 +#define GPIO_LED_BAT_2 DSI_GPIO_2// +#define PAD_LED_BAT_2 PAD_PIN_DSIGPIO2 +#define GPIO_LED_BAT_3 DSI_GPIO_3// +#define PAD_LED_BAT_3 PAD_PIN_DSIGPIO3 +#define GPIO_LED_BAT_4 DSI_GPIO_0// +#define PAD_LED_BAT_4 PAD_PIN_DSIGPIO0 +#define GPIO_LED_SIG_1_R DSI_GPIO_10// +#define PAD_LED_SIG_1_R PAD_PIN_DSIGPIO10 +#define GPIO_LED_SIG_1_G DSI_GPIO_1// +#define PAD_LED_SIG_1_G PAD_PIN_DSIGPIO1 +#define GPIO_LED_SIG_2 L_GPIO_1// +#define PAD_LED_SIG_2 PAD_PIN_LGPIO1 +#define GPIO_LED_SIG_3 L_GPIO_0// +#define PAD_LED_SIG_3 PAD_PIN_LGPIO0 +#define GPIO_LED_SIG_4 P_GPIO_8// +#define PAD_LED_SIG_4 PAD_PIN_PGPIO8 + + #define LED_FOCUS_DUMMY 0 #define LED_FOCUS_BY_GPIO 1 #define LED_FOCUS_BY_PWM 2 //use PWM to control LED brightness diff --git a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h index a9429b8b8..208945487 100755 --- a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h +++ b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h @@ -910,7 +910,8 @@ #define MOVIE_AI_DEMO DISABLE #define HUNTING_CAMERA_SYS_PARTITION_NAME sys -#define HUNTING_CAMERA_MCU ENABLE +#define HUNTING_CAMERA_MCU ENABLE +#define HUNTING_CAMERA_4G ENABLE//DISABLE #define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE #define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE #define DZOOM_FUNC ENABLE @@ -918,6 +919,7 @@ #define HUNTING_MCU_UART ENABLE #define HUNTING_IR_LED_940 DISABLE #define SF_BASE_VERSION "7MD4RCwD3T2" +#define HW_S530 1 /******************************************************************************************* diff --git a/code/application/source/cardv/SrcCode/System/SysMain.c b/code/application/source/cardv/SrcCode/System/SysMain.c index 28e259b46..9921696cf 100755 --- a/code/application/source/cardv/SrcCode/System/SysMain.c +++ b/code/application/source/cardv/SrcCode/System/SysMain.c @@ -22,6 +22,9 @@ #include #if HUNTING_CAMERA_MCU == ENABLE #include +#include +#include +#include #endif extern void System_BootStart(void); @@ -711,7 +714,17 @@ exit: ////////////////////////////////////////////////////////////// #if HUNTING_CAMERA_MCU == ENABLE //sf_check_card_full(); + + #if HUNTING_CAMERA_4G == ENABLE + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = paramArray[0]; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + #else sf_mcu_reg_set(SF_MCU_POWEROFF,paramArray[0]); + + #endif + #endif //System_PowerOffStart(); diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c index 2e765e2fe..3cf092748 100755 --- a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c @@ -10,7 +10,7 @@ //global debug level: PRJ_DBG_LVL #include "PrjInc.h" //local debug level: THIS_DBGLVL -#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER +#define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER /////////////////////////////////////////////////////////////////////////////// #define __MODULE__ SysStrgExe #define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL) @@ -37,12 +37,22 @@ #include "GxStrg.h" #include "FileSysTsk.h" +#include +#include void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2); void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2) { UINT32 status; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + stMessageBuf.arg1 = event; + stMessageBuf.arg2 = param1; + stMessageBuf.arg3 = param2; + stMessageBuf.cmdId = CMD_SD; + sf_com_message_send_to_app(&stMessageBuf); + switch (event) { // part-1 case SYSTEM_CB_CONFIG: diff --git a/code/application/source/cardv/SrcCode/System/SysUsb_Exe.c b/code/application/source/cardv/SrcCode/System/SysUsb_Exe.c index 160083eca..b9f50b7fc 100755 --- a/code/application/source/cardv/SrcCode/System/SysUsb_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysUsb_Exe.c @@ -15,6 +15,9 @@ #include "GxUSB.h" #include "UsbDevDef.h" #include "usb2dev.h" +#include +#include +#include #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER /////////////////////////////////////////////////////////////////////////////// #define __MODULE__ SysUsbExe @@ -76,6 +79,25 @@ static BOOL System_WaitUsbDev(void) return ret; } + + + +static BOOL System_check_usb_host(void) +{ + char command[26] = "lsmod | grep usbcore"; + FILE *fp = popen(command, "r"); + char result[256]; + fgets(result, sizeof(result), fp); + pclose(fp); + if (result[0] == '\0') { + printf("usbcore module is not loaded.\n"); + return FALSE; + } else { + printf("usbcore module is loaded.\n"); + return TRUE; + } +} + static BOOL System_InsmodUsb(BOOL isHost) { char** usb_drivers = NULL; @@ -87,7 +109,11 @@ static BOOL System_InsmodUsb(BOOL isHost) if(is_usb_host_driver_inserted == TRUE) return TRUE; - + if(System_check_usb_host() == TRUE) + { + is_usb_host_driver_inserted = TRUE; + return TRUE; + } usb_drivers = usb_host_drivers; } else{ @@ -233,6 +259,11 @@ void System_OnUsbInit(void) //force check USB connect type if (GxUSB_GetIsUSBPlug()) { + + #if HW_S530 == ENABLE + sf_sys_status_led_set(SF_LED_SYS_STATE_USB_IN); + #endif + System_InsmodUsb(FALSE); /* insmod usb dev ko */ GxUSB_UpdateConnectType(); GxUSB_SetChargerType(FALSE); diff --git a/code/application/source/cardv/SrcCode/System/main.c b/code/application/source/cardv/SrcCode/System/main.c index 29f08ffe6..a4b5546bc 100755 --- a/code/application/source/cardv/SrcCode/System/main.c +++ b/code/application/source/cardv/SrcCode/System/main.c @@ -12,9 +12,13 @@ #include "DrvExt.h" #include "comm/hwclock.h" #include "comm/timer.h" -#include #include #include +#if HUNTING_CAMERA_MCU == ENABLE +#include + +#endif + /////////////////////////////////////////////////////////////////////////////// @@ -353,14 +357,37 @@ int NvtMain(void) #if HUNTING_CAMERA_MCU == ENABLE if(!GxUSB_GetIsUSBPlug())//(!sf_gpio_get_status(GPIO_INT_USBPLUGIN)) { + #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}; + + stMessageBuf.arg1 = SF_MCU_CMD_POWERON; + stMessageBuf.cmdId = CMD_MCU; + 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); - //sf_mcu_reg_set(SF_MCU_CTRL_MODULE_PIR, 1); - sf_sd_exist_reg_cb(DrvCARD_DetStrgCard); /*led init*/ sf_led_init(); + #endif + sf_sd_exist_reg_cb(DrvCARD_DetStrgCard); sf_sys_status_led_set(SF_LED_SYS_STATE_PIR_NOT_DETECT); sf_battery_thread_init(); } diff --git a/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.c b/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.c index ba4b3a2ff..6997e0e0a 100755 --- a/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.c +++ b/code/application/source/cardv/SrcCode/UIApp/MovieStamp/MovieStamp.c @@ -279,7 +279,7 @@ static void MovieStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen) IQT_WDR_PARAM wdr = {0}; //sf_mcu_power_on_para_get(SF_MCU_POWERON); UINT16 AD_Value; - AD_Value = sf_mcu_get_irshtter(); + AD_Value = sf_get_irshtter(); id = 0; ae_status.id = id; diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c index 499bf12b4..ec34fd305 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -30,6 +30,7 @@ #include #include "vendor_videocapture.h" #include "sf_mcu.h" +#include "IOCfg.h" #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER @@ -420,7 +421,7 @@ static UINT32 PhotoExe_GetScreenNailSize(void) ScreenNailSize = CFG_SCREENNAIL_SIZE; uiImageSize = UI_GetData(FL_PHOTO_SIZE); if (uiImageSize < ScreenNailSize) { - BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2; + BitStreamSize = (sf_get_screen_nail_width(UI_GetData(SendPicSize))) * (sf_get_screen_nail_height(UI_GetData(SendPicSize))) / 2; } else { BitStreamSize = 0; } @@ -452,7 +453,7 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id) if (uiImageSize < ScreenNailSize) { //BufferSize.w = GetPhotoSizeWidth(ScreenNailSize); //BufferSize.h = GetPhotoSizeHeight(ScreenNailSize); - BufferSize.w = CFG_SCREENNAIL_W; + BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize BufferSize.h = BufferSize.w * 3 / 4; ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); @@ -1438,7 +1439,7 @@ AD_Value = sf_mcu_get_irshtter(); return; } -extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff); +//extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff); @@ -2374,6 +2375,8 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; FileSys_MakeDir(PHOTO_THUMB_PATH); GOIO_Turn_Onoff_IRCUT(1); + + //sf_ir_led_set(((2 == SysGetFlag(NightMode)) ? 2 : 1),SysGetFlag(FlashLed), SysGetFlag(NightMode), 0); if((0 == access("/mnt/sd/FW98565A.bin", F_OK))){ system("rm -rf /mnt/sd/LD96565A.bin"); system("rm -rf /mnt/sd/FW98565A.bin"); diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c index b0cd6e22d..083ebf663 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c @@ -453,21 +453,21 @@ void Load_MenuInfo(void) //#NT#porting KS's suggestion that PStore reset mechanism UINT32 uiPsFreeSpace = PStore_GetInfo(PS_INFO_FREE_SPACE); result = PStore_ReadSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); - if ((result != E_PS_OK || currentInfo.uhInfoSize != sizeof(currentInfo)|| uiFWUpdate) && + if ((result != E_PS_OK || currentInfo.uhInfoSize != sizeof(UIMenuStoreInfo)|| uiFWUpdate) && uiPsFreeSpace) { DBG_DUMP("PStore reset info.\r\n"); - memset(¤tInfo, 0, sizeof(currentInfo)); + memset(¤tInfo, 0, sizeof(UIMenuStoreInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); - } else if ((result != E_PS_OK|| uiFWUpdate) && (currentInfo.uhInfoSize == sizeof(currentInfo)) && + } else if ((result != E_PS_OK|| uiFWUpdate) && (currentInfo.uhInfoSize == sizeof(UIMenuStoreInfo)) && (uiPsFreeSpace == 0)) { //if current size is the same with previous, use PS_UPDATE instead //of PS_RDWR to prevent that PStore is no free space DBG_DUMP("PStore reset info for uiPsFreeSpace=0.\r\n"); PStore_CloseSection(pSection); - memset(¤tInfo, 0, sizeof(currentInfo)); + memset(¤tInfo, 0, sizeof(UIMenuStoreInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_UPDATE)) != E_PS_SECHDLER) { @@ -511,13 +511,13 @@ void Load_MenuInfo(void) void *pTempbuf = NULL; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_USR1); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { - if ((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) == 0) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { + if ((sizeof(UIMenuStoreInfo)/_EMBMEM_BLK_SIZE_) == 0) { sectorCnt = 1; - } else if (((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(currentInfo)%_EMBMEM_BLK_SIZE_) != 0)) { - sectorCnt = sizeof(currentInfo)/_EMBMEM_BLK_SIZE_ + 1; - } else if (((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(currentInfo)%_EMBMEM_BLK_SIZE_) == 0)) { - sectorCnt = sizeof(currentInfo)/_EMBMEM_BLK_SIZE_; + } else if (((sizeof(UIMenuStoreInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(UIMenuStoreInfo)%_EMBMEM_BLK_SIZE_) != 0)) { + sectorCnt = sizeof(UIMenuStoreInfo)/_EMBMEM_BLK_SIZE_ + 1; + } else if (((sizeof(UIMenuStoreInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(UIMenuStoreInfo)%_EMBMEM_BLK_SIZE_) == 0)) { + sectorCnt = sizeof(UIMenuStoreInfo)/_EMBMEM_BLK_SIZE_; } if ((fd_mmc = fopen("/dev/mmcblk2p14", "rb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr1 ; cat /proc/nvt_info/emmc @@ -531,12 +531,12 @@ void Load_MenuInfo(void) DBG_ERR("allocate pTempbuf fail !!\r\n"); SysResetFlag(); } else { - rw_len = (INT32)fread(pTempbuf, 1, sizeof(currentInfo), fd_mmc); - if (rw_len != sizeof(currentInfo)) { - DBG_ERR("read size %d < %ld\r\n", rw_len, sizeof(currentInfo)); + rw_len = (INT32)fread(pTempbuf, 1, sizeof(UIMenuStoreInfo), fd_mmc); + if (rw_len != sizeof(UIMenuStoreInfo)) { + DBG_ERR("read size %d < %ld\r\n", rw_len, sizeof(UIMenuStoreInfo)); SysResetFlag(); } else { - memcpy(¤tInfo, pTempbuf, sizeof(currentInfo)); + memcpy(¤tInfo, pTempbuf, sizeof(UIMenuStoreInfo)); } free(pTempbuf); pTempbuf = NULL; @@ -559,10 +559,10 @@ void Load_MenuInfo(void) char cmd[128] = {0}; char filename[128] = {0}; - sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { char sys_mtd_dev_path[128] = {'\0'}; ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); @@ -607,13 +607,13 @@ void Load_MenuInfo(void) goto EXIT; } - if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(currentInfo)){ - memcpy(¤tInfo, tmpInfo, sizeof(currentInfo)); + if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(UIMenuStoreInfo)){ + memcpy(¤tInfo, tmpInfo, sizeof(UIMenuStoreInfo)); } else{ DBG_WRN("menu info size loaded from flash seems incorrect, reset menu info\n"); SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); } } @@ -621,7 +621,7 @@ EXIT: if(ret){ SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); } SysCheckFlag(); origInfo = currentInfo; @@ -637,6 +637,8 @@ EXIT: } #elif defined(_EMBMEM_SPI_NOR_) + printf("%s:%d cardv app load ui info s\n", __FUNCTION__, __LINE__); + unsigned long long partition_ofs= 0, partition_size = 0; int ret = -1; FILE *sys_mtd_fp = NULL; @@ -645,10 +647,10 @@ EXIT: void *tmpInfo = NULL; size_t read_size; - sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { char sys_mtd_dev_path[128] = {'\0'}; ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); @@ -679,21 +681,22 @@ EXIT: goto EXIT; } - if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(currentInfo)){ - memcpy(¤tInfo, tmpInfo, sizeof(currentInfo)); + if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(UIMenuStoreInfo)){ + memcpy(¤tInfo, tmpInfo, sizeof(UIMenuStoreInfo)); } else{ DBG_WRN("menu info size loaded from flash seems incorrect(old:%lu new:%lu), reset menu info\n", ((UIMenuStoreInfo*)tmpInfo)->uhInfoSize, - sizeof(currentInfo) + sizeof(UIMenuStoreInfo) ); SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); + sf_share_mem_customer_down(0); } - UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(currentInfo)); + UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(UIMenuStoreInfo)); DBG_DUMP("**************size = %lx / mov size = %u / sum = %lx **************\n", - sizeof(currentInfo), + sizeof(UIMenuStoreInfo), //((UIMenuStoreInfo*)tmpInfo)->UIParameter[FL_MOVIE_SIZE], ((UIMenuStoreInfo*)tmpInfo)->UIParameter[CamMode], sum); @@ -703,7 +706,8 @@ EXIT: if(ret){ SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); + sf_share_mem_customer_down(0); } SysCheckFlag(); origInfo = currentInfo; @@ -716,8 +720,9 @@ EXIT: if(tmpInfo){ free(tmpInfo); tmpInfo = NULL; - } - + } + printf("%s:%d cardv app load ui info e\n", __FUNCTION__, __LINE__); + #else SysResetFlag(); #endif @@ -884,12 +889,12 @@ void Save_MenuInfo(void) INT32 rw_len = 0; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_USR1); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { if ((fd_mmc = fopen("/dev/mmcblk2p14", "wb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr1 ; cat /proc/nvt_info/emmc DBG_ERR("/dev/mmcblk2p14 fail !!\r\n"); } else { - rw_len = fwrite(¤tInfo, 1, sizeof(currentInfo), fd_mmc); - if(rw_len != sizeof(currentInfo)) { + rw_len = fwrite(¤tInfo, 1, sizeof(UIMenuStoreInfo), fd_mmc); + if(rw_len != sizeof(UIMenuStoreInfo)) { DBG_ERR("Error to write file for /dev/mmcblk2p14"); } fclose(fd_mmc);; @@ -898,8 +903,8 @@ void Save_MenuInfo(void) if ((fd_mmc = fopen("/dev/mmcblk2p15", "wb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr2 ; cat /proc/nvt_info/emmc DBG_ERR("/dev/mmcblk2p14 fail !!\r\n"); } else { - rw_len = fwrite(¤tInfo, 1, sizeof(currentInfo), fd_mmc); - if(rw_len != sizeof(currentInfo)) { + rw_len = fwrite(¤tInfo, 1, sizeof(UIMenuStoreInfo), fd_mmc); + if(rw_len != sizeof(UIMenuStoreInfo)) { DBG_ERR("Error to write file for /dev/mmcblk2p14"); } fclose(fd_mmc); @@ -921,15 +926,15 @@ void Save_MenuInfo(void) SysCheckFlag(); /* check if sys param changed */ - if(memcmp(¤tInfo, &origInfo, sizeof(currentInfo)) == 0){ + if(memcmp(¤tInfo, &origInfo, sizeof(UIMenuStoreInfo)) == 0){ DBG_DUMP("menu info is not changed\n"); goto EXIT; } - sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { char sys_mtd_dev_path[128] = {'\0'}; ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); if(ret){ @@ -952,8 +957,8 @@ void Save_MenuInfo(void) } memset(tmpInfo, 0xFF, write_size); /* keep remain data 0xFF to avoid write flash */ - currentInfo.uhInfoSize = sizeof(currentInfo); - memcpy(tmpInfo, ¤tInfo, sizeof(currentInfo)); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); + memcpy(tmpInfo, ¤tInfo, sizeof(UIMenuStoreInfo)); sprintf(filename, "nandwrite.in"); nandwrite_fp = fopen(filename, "wb"); if(!nandwrite_fp){ @@ -1012,15 +1017,15 @@ EXIT: SysCheckFlag(); /* check if sys param changed */ - if(memcmp(¤tInfo, &origInfo, sizeof(currentInfo)) == 0){ + if(memcmp(¤tInfo, &origInfo, sizeof(UIMenuStoreInfo)) == 0){ DBG_DUMP("menu info is not changed\n"); goto EXIT; } - sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { char sys_mtd_dev_path[128] = {'\0'}; ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); if(ret){ @@ -1051,8 +1056,8 @@ EXIT: } memset(tmpInfo, 0xFF, write_size); - currentInfo.uhInfoSize = sizeof(currentInfo); - memcpy(tmpInfo, ¤tInfo, sizeof(currentInfo)); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); + memcpy(tmpInfo, ¤tInfo, sizeof(UIMenuStoreInfo)); rw_len = fwrite(tmpInfo, 1, write_size, sys_mtd_fp); if(rw_len != (INT32)(write_size)) { DBG_ERR("fwrite size not matched(%ld / %ld)!\n", rw_len, write_size); @@ -1061,11 +1066,12 @@ EXIT: } fflush(sys_mtd_fp); - UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(currentInfo)); - DBG_DUMP("**************size = %lx / mov size = %u / sum = %lx **************\n", - sizeof(currentInfo), - ((UIMenuStoreInfo*)tmpInfo)->UIParameter[FL_MOVIE_SIZE], + UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(UIMenuStoreInfo)); + DBG_DUMP("**************size = %lx / CamMode = %u / sum = %lx **************\n", + sizeof(UIMenuStoreInfo), + ((UIMenuStoreInfo*)tmpInfo)->UIParameter[CamMode], sum); + sf_share_mem_customer_down(0); } else{ DBG_ERR("can't get partition info or menu info size exceed partition size!\n"); @@ -1690,7 +1696,7 @@ void SysResetFlag(void) SysSetFlag(TimeSend2Switch, DEFAULT_TIMESEND2_SWITCH); SysSetFlag(TimeSend3Switch, DEFAULT_TIMESEND3_SWITCH); SysSetFlag(TimeSend4Switch, DEFAULT_TIMESEND4_SWITCH); - //sf_set_pir_sensitivity(7); + sf_set_pir_sensitivity(7); #endif diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h index e74df2e72..bbf5f540c 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h @@ -17,9 +17,9 @@ typedef struct sf_PARA_TIME_S UINT16 Mon; UINT16 Day; - UINT8 Hour; - UINT8 Min; - UINT8 Sec; + UINT16 Hour; + UINT16 Min; + UINT16 Sec; } SF_PARA_TIME_S; typedef struct sf_WORKTIME_S diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c index 4e69c4f12..da8518ded 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c @@ -147,9 +147,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { }, [MOVIE_SIZE_1920x1080P30] = { - {1920, 1080, 30, 1200 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, + {1920, 1080, 30, 400 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1, 3, 36, 8, -8, 0}, - {1, 4, 30, 1200 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, + {1, 4, 30, 400 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, }, [MOVIE_SIZE_1280x720P240] = { @@ -171,15 +171,15 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { }, [MOVIE_SIZE_1280x720P30] = { - {1280, 720, 30, 450 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, + {1280, 720, 30, 240 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1, 3, 36, 8, -8, 0}, - {1, 4, 30, 450 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, + {1, 4, 30, 240 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, }, [MOVIE_SIZE_848x480P30] = { - {848, 480, 30, 200 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, + {848, 480, 30, 120 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1, 3, 36, 8, -8, 0}, - {1, 4, 30, 200 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, + {1, 4, 30, 120 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, }, [MOVIE_SIZE_848x480P30_WIFI] = { diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c index 587c63934..eabc5d83d 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c @@ -47,6 +47,15 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = { {1920, 1080, IMAGERATIO_16_9, "2MHD"}, // 2MHD }; + +static PHOTO_SIZE_PARAM g_ScreenNailSizeTable[PHOTO_SIZE_ID_MAX + 2] = { + #if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_) + {1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M + #elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_) + {640, 480, IMAGERATIO_4_3, "VGA"}, // VGA + #endif +}; + const CHAR *Get_SizeString(UINT32 uiIndex) { if (uiIndex < PHOTO_SIZE_ID_MAX) { @@ -71,6 +80,21 @@ UINT32 GetPhotoSizeRatio(UINT32 ubIndex) return g_PhotoCapSizeTable[ubIndex].uiImageRatio; } +UINT32 sf_get_screen_nail_width(UINT32 ubIndex) +{ + return g_ScreenNailSizeTable[ubIndex].uiWidth; +} + +UINT32 sf_get_screen_nail_height(UINT32 ubIndex) +{ + return g_ScreenNailSizeTable[ubIndex].uiHeight; +} + +UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex) +{ + return g_ScreenNailSizeTable[ubIndex].uiImageRatio; +} + /************************************************* Dzoom string handling **************************************************/ diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h index bafcd0908..04d0317d1 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.h @@ -4,6 +4,9 @@ extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex); extern UINT32 GetPhotoSizeHeight(UINT32 ubIndex); extern UINT32 GetPhotoSizeRatio(UINT32 ubIndex); +extern UINT32 sf_get_screen_nail_width(UINT32 ubIndex); +extern UINT32 sf_get_screen_nail_height(UINT32 ubIndex); +extern UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex); extern CHAR *Get_DZoomRatioString(void); extern UINT32 Get_AFWindowIndexFromValue(UINT32 value); extern UINT32 Get_AFWindowValue(UINT32 uhIndex); diff --git a/code/application/source/sf_app/Makefile b/code/application/source/sf_app/Makefile index 48beabcdc..cd2506f3a 100755 --- a/code/application/source/sf_app/Makefile +++ b/code/application/source/sf_app/Makefile @@ -30,7 +30,7 @@ else endif SIFAR_DIR = $(LIBRARY_DIR)/source/sifar/code -SIFAR_APP_DIR = ./code/include +SIFAR_APP_DIR = $(APP_DIR)/source/sf_app/code/include #LIB DIRs for C_LDFLAGS EXTRA_LIB_DIR += \ @@ -206,6 +206,10 @@ EXTRA_LIB += \ SRC = \ ./code/source/app/sf_device.c \ ./code/source/app/sf_app.c \ + ./code/source/app/sf_common.c \ + ./code/source/app/sf_system.c \ + ./code/source/app/sf_service.c \ + ./code/source/app/sf_dbg.c \ ./code/source/gpio/sf_hal_gpio.c \ ./code/source/logMng/sf_log.c \ ./code/source/commMng/sf_message_queue.c \ @@ -250,9 +254,10 @@ SRC = \ ./code/source/devMng/sf_ledmng.c \ ./code/source/utils/mbedtls.c \ ./code/source/utils/sf_aes.c \ - ./code/source/debugMng/sf_debug.c - - + ./code/source/debugMng/sf_debug.c \ + ./code/source/updataMng/sf_md5.c \ + ./code/source/updataMng/sf_otamng.c + #--------- END OF SOURCEs FOR APPLICATION --------------------------------------------- #--------- ENVIRONMENT SETTING -------------------- diff --git a/code/application/source/sf_app/code/include/sf_commMng.h b/code/application/source/sf_app/code/include/sf_commMng.h index 801112396..1e8ee2b43 100755 --- a/code/application/source/sf_app/code/include/sf_commMng.h +++ b/code/application/source/sf_app/code/include/sf_commMng.h @@ -7,6 +7,7 @@ extern "C" { #endif #include "sf_type.h" #include "sf_param_common.h" +//#include "UIInfo/UIInfo.h" @@ -22,7 +23,8 @@ SINT32 sf_share_mem_file_init(void); SINT32 sf_share_mem_file_deinit(void); -SINT32 sf_share_mem_customer_init(void); +SINT32 sf_share_mem_customer_update(void); +SINT32 sf_share_mem_customer_down(UINT32 to); SINT32 sf_share_mem_customer_deinit(void); diff --git a/code/application/source/sf_app/code/include/sf_common.h b/code/application/source/sf_app/code/include/sf_common.h new file mode 100755 index 000000000..7601927f0 --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_common.h @@ -0,0 +1,20 @@ + +#ifndef __SF_COMMON_H__ +#define __SF_COMMON_H__ +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + + +void app_message_recv_start(void); + +#ifdef __cplusplus +#if __cplusplus + } +#endif +#endif + +#endif + diff --git a/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h b/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h index 2475ee3ea..1a556d425 100755 --- a/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h +++ b/code/application/source/sf_app/code/include/sf_commu_mcu_reg.h @@ -31,7 +31,8 @@ #define REG_SIZE 91 -#define SF_MCU_NIGHT_MODE_LUMINANCE 380 +#define SF_MCU_NIGHT_MODE_LUMINANCE 600 +#define SF_BATT_RECOVERY 72 //S530 /*REG POWER_OFFON*/ #define MCU_MODE_AUTO 0x00 @@ -307,7 +308,7 @@ typedef struct sf_TIME_S { unsigned char sf_mcu_power_on_para_get (MCUParam_t attrId); unsigned char sf_mcu_wdg_set(unsigned char value); void sf_mcu_poweron_4g_module(void); -unsigned char sf_mcu_start_mode_get(void); +//unsigned char sf_mcu_start_mode_get(void); SF_BOOL sf_is_night_mode(unsigned int isRefresh); unsigned char sf_mcu_rtc_get (SF_TIME_S *time); @@ -333,8 +334,13 @@ int sf_get_last_light_val(void); SF_TIME_S sf_get_mcu_poweroff_date(void); void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date); +UINT8 sf_get_power_on_mode(void); +BOOL sf_get_mode_flag(void); +UINT8 sf_convert_power_on_mode(void); +int sf_mcu_init(void); +unsigned char sf_mcu_wdg_off(void); +void sf_set_module_sleep_flag(UINT8 flag); -extern unsigned char PowerOnMode; extern unsigned short TrigType; diff --git a/code/application/source/sf_app/code/include/sf_dbg.h b/code/application/source/sf_app/code/include/sf_dbg.h new file mode 100755 index 000000000..5876dc2fa --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_dbg.h @@ -0,0 +1,90 @@ + +#ifndef __SF_DBG_H__ +#define __SF_DBG_H__ +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif +#include "sf_type.h" +#include "sf_param_common.h" +#define DEBUG_CMD_FIFO_FATH "/tmp/sf_debug" + + +SINT32 app_debug_camname(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_cameraMode(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_imageSize(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_flashled(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_multishot(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_videosize(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_videolen(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_nightmode(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_pirsenDig(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_pirdelay(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_timelapse(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_worktime(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_maxNum(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_dailyreport(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_gps(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_batterytype(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_stamp(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_sdcycle(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_datestyle(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_mcuw(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_mcur(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_debugmode(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_help(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_save(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_cleartime(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_signal(SINT32 argc, SF_CHAR **argv[]); + +SINT32 app_debug_ver(SINT32 argc, SF_CHAR **argv[]); + + +SINT32 app_debug_process(SINT32 argc, SF_CHAR **argv[]); + + +SINT32 app_debug_init(void); + +SINT32 app_debug_create(void); + +SINT32 app_debug_start(void); + +SINT32 app_debug_stop(void); + +SINT32 app_debug_deinit(void); + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif + diff --git a/code/application/source/sf_app/code/include/sf_device.h b/code/application/source/sf_app/code/include/sf_device.h index ed35ec10b..602066c8a 100755 --- a/code/application/source/sf_app/code/include/sf_device.h +++ b/code/application/source/sf_app/code/include/sf_device.h @@ -5,29 +5,12 @@ extern "C" { #endif #endif +//#include #include #include "sf_param_common.h" -typedef enum sfHAL_LED_GPIO_IDX_E -{ - SF_HAL_LED_IDX_0 = 0, /** + + typedef enum sfHAL_LED_STATE_E { SF_HAL_LED_STATE_OFF = 0,/** max)\ + {\ + MLOGE("Parameter[%d] out of normal range [%#x,%#x)!!!\n",cmd,min,max);\ + return SF_FAILURE;\ + } \ + } while (0) + + +typedef enum SF_CMD_TYPE_E { + SF_CMD_LOGIN_IN, + SF_CMD_REPORT_STATE, + SF_CMD_PHOTO_RESULT, + SF_CMD_QUERYPENDING_CMD, + SF_CMD_QUERYPENDING_PARAM, + SF_CMD_REPORT_RESULT, + SF_CMD_TRIGGER, + SF_CMD_DISCON_SEND, + SF_CMD_QUERYPENDING_BIND_ACCOUNT, + SF_CMD_SYNC_CFG, + SF_CMD_BUTT +} SF_CMD_TYPE_E; + +SINT16 app_file_upload(SF_FILE_ATTR_S *pstFileAttr, SF_FN_PARAM_S *pfnParam); +SF_BOOL app_disconnect_4g_module(void); +SINT32 app_ttyusb_IsOpen(void); +SINT32 app_file_subscrible_check(SF_REPORT_FILE_ATTR_S *pDtsReportFileAttr,SF_REPORT_FILE_ATTR_S *pSrcReportFileAttr); + +SINT32 app_RegisterNet_start(void); +void app_FileSend_start(void); +SINT32 app_t110(void); + +#ifdef __cplusplus +#if __cplusplus + } +#endif +#endif + +#endif + diff --git a/code/application/source/sf_app/code/include/sf_system.h b/code/application/source/sf_app/code/include/sf_system.h new file mode 100755 index 000000000..2f76ca5ae --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_system.h @@ -0,0 +1,59 @@ + +#ifndef __SF_SYSTEM_H__ +#define __SF_SYSTEM_H__ +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif +#include "sf_type.h" +#include "sf_param_common.h" + +extern SINT32 bUpdateEnble; +extern SINT32 s32ThreeWaySwitch; + +void app_poweroff_time_clear(void); + +SINT8 app_flash_poweroff_task_IsRun(void); + +SINT32 app_funkey_switch_check_start(void); + +SINT32 app_funkey_switch_check_stop(void); + +SINT32 app_upgrade_restore_start(void); + +SINT32 app_upgrade_restore_stop(void); + +SINT8 app_upgrade_restore_IsRun(void); + +SINT32 app_system_poweroff(SF_POWEROFF_TYPE_E enType ); + +SINT32 app_usb_mode_start(void); + +SINT32 app_system_time_update(unsigned int rtosBootTime) ; + +SINT32 app_system_param_update(void); + +SINT32 app_http_time_by_timezone_set(void); + +SINT32 app_upgrade_sd_execute(void); + +SINT32 app_upgrade_ota_restore_start(void); + +SINT32 app_upgrade_ota_restore_stop(void); + +SINT8 app_upgrade_ota_restore_IsRun(void); + +SINT32 app_preinit(void); + + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif + + diff --git a/code/application/source/sf_app/code/source/4gMng/sf_http_server.c b/code/application/source/sf_app/code/source/4gMng/sf_http_server.c index 0683984f6..ce69a8bbc 100755 --- a/code/application/source/sf_app/code/source/4gMng/sf_http_server.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_http_server.c @@ -449,7 +449,7 @@ SINT32 sf_usbnet_server_acm_transfer(SF_DATA_ATTR_S *psenddate) return SF_SUCCESS; } -SINT32 sf_usbnet_server_acm_close() +SINT32 sf_usbnet_server_acm_close(void) { MLOGI("\n"); return http_server_close(socketfd); diff --git a/code/application/source/sf_app/code/source/4gMng/sf_module.c b/code/application/source/sf_app/code/source/4gMng/sf_module.c index 0cd9e09b7..a06aeda9b 100755 --- a/code/application/source/sf_app/code/source/4gMng/sf_module.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_module.c @@ -21,14 +21,16 @@ extern "C" { #include "sf_http_server.h" #endif #endif + extern pthread_mutex_t GPIO_mutexLock; static SF_4G_STATUS_E ModuleStatus = SF_4G_FREE; void sf_4G_usb_init(void) { - sf_hal_gpio_init(GPIOID_USB_MUX1,GPIO_DIR_OUT); - sf_hal_gpio_set(GPIOID_USB_MUX1,1); + sf_usb_mux_s(1); + //sf_hal_gpio_init(GPIOID_USB_MUX1,GPIO_DIR_OUT); + //sf_hal_gpio_set(GPIOID_USB_MUX1,1); } SF_4G_STATUS_E sf_4G_status_get(void) { diff --git a/code/application/source/sf_app/code/source/app/sf_app.c b/code/application/source/sf_app/code/source/app/sf_app.c index 35be902b5..2a023434b 100755 --- a/code/application/source/sf_app/code/source/app/sf_app.c +++ b/code/application/source/sf_app/code/source/app/sf_app.c @@ -24,32 +24,68 @@ #include #include #include +#include -#include -//#include "UIInfo/UIInfo.h" +#include "UIInfo/UIInfo.h" #include +#include +#include +#include +#include +#include +#include +#include -pthread_mutex_t Param_mutexLock; -pthread_mutex_t GPIO_mutexLock; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include - SINT32 app_ttyusb_IsOpen() +extern pthread_mutex_t Param_mutexLock; +extern pthread_mutex_t GPIO_mutexLock; +//---------------------UIInfo Global Variables ----------------------------- +UIMenuStoreInfo currentInfo = {0}; //#NT#Init the array to zero. +UIMenuStoreInfo origInfo = {0}; /* backup */ + +void sf_signalStop(SINT32 signo) { - int retryTime = 0; - SINT32 s32ret = 0; - //MLOGD("ttyUSB has not been init, will init ttyUSB!\n"); - while ((s32ret = sf_hal_ttyusb2_init()) < 0) - { - retryTime++; - if((retryTime >=200)&&(retryTime%200 == 0)) - { - //MLOGE("-------ttyUSB init fail!\n"); - s32ret = SF_TTY_ERROR_OPEN; - break; - } - } + printf("\nsignalStop(signal code: %d) !!!\n", signo); + + sf_share_mem_file_deinit(); + sf_share_mem_customer_deinit(); + + _exit(0); +} - return s32ret; + +int test_sd_free(void) +{ + #define SFMMC_SYS_PATH "/dev/mmcblk0p1" + struct statfs s; + int res = statfs(SFMMC_SYS_PATH, &s); + if (res == -1) + { + perror("statfs error: "); + } + else + { + unsigned long long total_size = (unsigned long long)s.f_blocks * (unsigned long long)s.f_bsize; + unsigned long long free_size = (unsigned long long)s.f_bfree * (unsigned long long)s.f_bsize; + + printf("SD card total size: %llu bytes\n", total_size); + printf("SD card available size: %llu bytes\nSFMMC_SYS_PATH:%s\n", free_size, SFMMC_SYS_PATH); + } + + return 0; } int main(int argc, char *argv[]) @@ -60,18 +96,78 @@ int main(int argc, char *argv[]) printf("* *\n"); printf("*********************************************\n"); //gpio_direction_input(C_GPIO(10)); + SINT16 startup = 0; + + //test_sd_free(); + //return 0; + SINT32 isUsb = sf_usb_IsInsert(); + printf("[%s:%d] isUsb = %d\n", isUsb); + + sf_mcu_init(); + sf_get_power_on_mode(); + sf_mcu_wdg_set(30); + sf_usb_mux_s(1); + sf_share_mem_file_init(); + //sf_share_mem_customer_update(); sf_com_message_app_init(); sf_com_message_cardv_init(); sf_customer_param_load(); + if(!isUsb) + { + sf_load_ko(); + sf_mcu_reg_set(SF_MCU_CTRL_MODULE_PIR, 1); + } + + printf("[%s:%d] CamMode:%d\n", __FUNCTION__, __LINE__,sf_sys_get_flag(CamMode)); SF_MUTEX_INIT_LOCK(Param_mutexLock); SF_MUTEX_INIT_LOCK(GPIO_mutexLock); + sf_led_init(); + sf_sys_status_led_set(SF_LED_SYS_STATE_PIR_NOT_DETECT); + sf_sys_status_led_set(SF_LED_SYS_STATE_NORMAL); - app_led_group_register(); - //app_message_recv_start(); + //app_led_group_register(); + app_message_recv_start(); + + struct sigaction sigAction; + sigAction.sa_handler = sf_signalStop; + sigemptyset(&sigAction.sa_mask); + sigAction.sa_flags = 0; + sigaction(SIGHUP, &sigAction, NULL); //-1 + sigaction(SIGINT, &sigAction, NULL); //-2 + sigaction(SIGQUIT, &sigAction, NULL); //-3 + sigaction(SIGKILL, &sigAction, NULL); //-9 + sigaction(SIGTERM, &sigAction, NULL); //-15 + //app_led_pin_init(); + //app_upgrade_sd_execute(); + app_preinit(); + + //app_RegisterNet_start(); + startup = sf_poweron_type_get(); + SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup)); + if(SF_MCU_STARTUP_ONKEY == startup) + { + //////////////////////////////// + app_debug_init(); + app_debug_create(); + + + app_debug_start(); + + app_debug_deinit(); + ///////////////////////////// + } + + + sf_share_mem_file_deinit(); + sf_share_mem_customer_deinit(); + SF_MUTEX_DESTROY(Param_mutexLock); + SF_MUTEX_DESTROY(GPIO_mutexLock); + exit(0); + printf("********************sf app end***********************\n"); return 0; diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c new file mode 100755 index 000000000..5baef7774 --- /dev/null +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -0,0 +1,799 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + + +#include "sf_type.h" +#include "sf_log.h" +#include "sf_qrcode.h" +#include "sf_module.h" + +#include "sf_keymng.h" +#include "sf_ledmng.h" +#include "sf_dev_usb.h" +#include "sf_otamng.h" + +#include "sf_dev_other.h" +#include "sf_systemMng.h" +#include "sf_storeMng.h" +#if defined(CFG_LIVE_ENBLE) +#include "sf_liveMng.h" +#endif +#include "sf_commu_mcu_reg.h" + +#include "sf_message_queue.h" +#include "sf_device.h" +#include "sf_system.h" +#include "sf_service.h" +#include + + +extern pthread_mutex_t Param_mutexLock; +SINT8 longClickhold = 0; +SINT8 bmoduleupdate = 0; + +static SF_THREAD_CFG_S sf_msgQueueThread = +{ + .IsRun = 0, + .TskId = -1, +}; + +const SF_CHAR* app_process_SD_getstatusstring(SF_MESSAGE_CMD_SD_E enType) +{ + switch(enType) + { + case CMD_SD_STRG_CB_UNKNOWN: + return "CMD_SD_STRG_CB_UNKNOWN"; + case CMD_SD_STRG_CB_INSERTED: + return "CMD_SD_STRG_CB_INSERTED"; + case CMD_SD_STRG_CB_REMOVED: + return "CMD_SD_STRG_CB_REMOVED"; + case CMD_SD_STRG_CB_MOUNT_FINISH: + return "CMD_SD_STRG_CB_MOUNT_FINISH"; + case CMD_SD_STRG_CB_UNMOUNT_FINISH: + return "CMD_SD_STRG_CB_UNMOUNT_FINISH"; + case CMD_SD_SYSTEM_CB_CONFIG: + return "CMD_SD_SYSTEM_CB_CONFIG"; + default: + return "Unknown"; + } +} +const SF_CHAR* app_process_message_getstatusstring(SF_MESSAGE_TYPE_E enType) +{ + switch(enType) + { + case CMD_KEY: + return "CMD_KEY"; + case CMD_SD: + return "CMD_SD"; + case CMD_LED: + return "CMD_LED"; + case CMD_FILE: + return "CMD_FILE"; + case CMD_POWEROFF: + return "CMD_POWEROFF"; + case CMD_VENC: + return "CMD_VENC"; + case CMD_MCU: + return "CMD_MCU"; + case CMD_PARA: + return "CMD_PARA"; + case CMD_GPRS: + return "CMD_GPRS"; + default: + return "Unknown"; + } +} + + + + + + +static SINT32 process_cmd_shortclick(SF_MESSAGE_BUF_S *pMessageBuf) +{ + static UINT8 cnt = 0; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + SF_PDT_PARAM_CFG_S* pCustomer = sf_customer_param_get(); + + switch(pMessageBuf->arg2) { + case SF_KEY_PIN_RESET: + if(!longClickhold) + break; + if(sf_sd_status_get() == SF_SD_OK || sf_sd_status_get() == SF_SD_FULL) + { + SF_CHAR version[12] = {0}; + SF_CHAR iccidStr[22] = {0}; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = sf_statistics_param_get(); + sf_sys_software_version_get(version); + if(pStaticParam->SimType == SF_SIM_OTHER) + { + sprintf(iccidStr, "%s", "0"); + } + else + { + sprintf(iccidStr, "%s", pStaticParam->SimID); + + } + sf_qrcode_create(pStaticParam->IMEI, iccidStr, version); + sf_sys_camera_about(); + } + break; + case SF_KEY_PIN_SYNC: + { + /*photo and video section*/ + SINT8 Isfull = 0; + SINT32 s32ret = SF_SUCCESS; + + s32ret = sf_sd_isfull(&Isfull); + if(s32ret == 1) { + sf_sd_status_set(SF_SD_OUT); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_RED); + break; + } + else if(s32ret == 2) { + sf_sd_status_set(SF_SD_ERROR); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_YELLOW); + break; + } + if(Isfull == 1) { + sf_sd_status_set(SF_SD_FULL); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_YELLOW); + break; + } + + if(!sf_cap_status_get()) + { + sf_cap_status_set(1); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_SLOWFLASH_ON,LED_GROUP_STATUS,LED_TYPE_GREEN); + + usleep(1000*1000); + + #if defined(CFG_COMM_MCU_UART) + UINT8 isNight = 0; + UINT8 lightVal = 0; + SINT8 para[3] = {0}; + /*1 update light value */ + isNight = sf_is_night_mode(1); + lightVal = sf_get_light_value(); + para[0] = isNight; + para[1] = (lightVal & 0xff00) >> 8; + para[2] = lightVal & 0x00ff; + sf_sys_rtoscmd_set(LINUX2RTK_CMD_SET_OTHER,para); + #else + /*1 update light value */ + system("echo cli sycmd -getlight > /proc/dualos/rtos"); + usleep(100*1000); + UINT8 isNight = 0; + SF_RTOSINFO_S stRtosData = {0}; + /*2,get lastest light value*/ + sf_sys_rtosdata_get(&stRtosData); + isNight = stRtosData.IsNight; + #endif + /*3,reload IQ file */ + stMessageBuf.cmdId = 0x0112; + stMessageBuf.arg1 = isNight; + sf_com_message_send_to_cardv(&stMessageBuf); + MLOGI("CamMode:%d\n",pCustomer->CamMode); + + if(pCustomer->CamMode == 0) { + if(pCustomer->Multishot <= 1 ) + system("echo rtkmode 0 > /tmp/cardv_fifo"); + else + system("echo rtkmode 2 > /tmp/cardv_fifo"); + + } + else if(pCustomer->CamMode == 1) { + system("echo rtkmode 3 > /tmp/cardv_fifo"); + } + else { + if(pCustomer->Multishot <= 1 ) + system("echo rtkmode 4 > /tmp/cardv_fifo"); + else + system("echo rtkmode 6 > /tmp/cardv_fifo"); + } + } + else + { + if((pCustomer->CamMode) && (sf_cap_status_get() == 2)) + { + stMessageBuf.cmdId = 0x0111; + sf_com_message_send_to_cardv(&stMessageBuf); + } + } + } + + break; + case SF_KEY_PIN_FORMAT: + if(!longClickhold) + break; + if(sf_sd_status_get() == SF_SD_OK || sf_sd_status_get() == SF_SD_FULL) + { + pCustomer->DebugMode = pCustomer->DebugMode?0:1; + sf_led_event_process((pCustomer->DebugMode?LED_STATUS_SLOWFLASH_ON:LED_STATUS_HOLD_ON),LED_GROUP_SD,LED_TYPE_GREEN); + + MLOGD("DebugMode =[%d]\n",pCustomer->DebugMode); + + } + break; + case SF_KEY_PIN_DATAREADY: + { + #if defined(CFG_COMM_MCU_UART) + UINT8 mode = 0; + mode = sf_mcu_power_on_para_get(SF_MCU_STARTMODE); + #else + UINT8 mode = 0; + system("echo cli sycmd -McuModeGet > /proc/dualos/rtos"); + usleep(100*1000); + + UINT8 keyValue = 0; + SF_RTOSINFO_S stRtosData = {0}; + sf_sys_rtosdata_get(&stRtosData); + mode = stRtosData.test1; + #endif + + MLOGD("mode:%d, \n", mode); + if(mode == 0) + { + app_system_poweroff(SF_POWEROFF_KEYOFF); + } + else if(mode == 3)//ON + { +// s32ThreeWaySwitch = 1; + app_funkey_switch_check_start(); + } + else if(mode == 1)//SETUP + { + + if(app_flash_poweroff_task_IsRun()) + { + app_funkey_switch_check_stop(); + } + else if(sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) + { + //check is capture runing, wait cap end or video end + if(sf_cap_status_get() == 0) // + { + app_system_poweroff(SF_POWEROFF_KEYOFF); + } + else + { + //if video/pic+video send stop msg + if(pCustomer->CamMode) + { + app_system_poweroff(SF_POWEROFF_KEYOFF); + } + + } + + } + } + else + { + cnt++; + if(cnt > 6) + { + cnt = 0; + MLOGE("abnormal power off\n"); + app_system_poweroff(SF_POWEROFF_KEYOFF); + + } + } + } + break; + case SF_KEY_PIN_FILESTATUS: + sf_cap_status_set(pMessageBuf->arg3); + break; + default: + MLOGE("illegal pin [%d]!!!\n",pMessageBuf->arg2); + break; + } + return SF_SUCCESS; +} +static SINT32 process_cmd_longclick(SF_MESSAGE_BUF_S *pMessageBuf) +{ + switch(pMessageBuf->arg2) { + case SF_KEY_PIN_RESET: + + if(!longClickhold) { + sf_all_param_reset(); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + app_led_all_status_set(LED_STATUS_HOLD_ON,LED_TYPE_GREEN); + app_system_poweroff(SF_POWEROFF_REBOOT); + break; + } + MLOGI("BatRemainCap = [%d]\n", sf_statistics_param_get()->BatRemainCap); + if((access("/mnt/mmc/EG95", F_OK) == 0) && (sf_statistics_param_get()->BatRemainCap > 40)) + { + MLOGI("eg95\n"); + bmoduleupdate = 1; + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_QUICKFLASH_ON,LED_GROUP_SD,LED_TYPE_GREEN); + system("/customer/QFirehose -f /mnt/mmc/EG95"); + app_system_poweroff(SF_POWEROFF_REBOOT); + + } + else + { + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_QUICKFLASH_ON,LED_GROUP_SD,LED_TYPE_RED); + bUpdateEnble = 1; + } + break; + case SF_KEY_PIN_SYNC: + +// if(upgrade_ota_file_IsExsit(SF_OTA_UPGRADE_FILE_PATH) == SF_FALSE) +// break; +// +// if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY&& (sf_statistics_param_get()->BatRemainCap > 40)) { +// SINT32 s32ret = SF_SUCCESS; +// s32ret = sf_upgrade_ota_param_bak(); +// SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); +// +// s32ret = sf_upgrade_ota_env_set(); +// SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); +// sleep(2); +// +// sf_mcu_wdg_off(); +// sleep(2); +// +// SF_MESSAGE_BUF_S stMessageBuf = {0}; +// stMessageBuf.arg1 = SF_POWEROFF_SYNC_PARAM; +// stMessageBuf.cmdId = CMD_POWEROFF; +// sf_com_message_send_to_app(&stMessageBuf); + +// } + break; + case SF_KEY_PIN_FORMAT: + if(sf_sd_status_get() == SF_SD_OUT) + break; + if(sf_cap_status_get() != 0) + break; + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(LED_STATUS_QUICKFLASH_ON,LED_GROUP_SD,LED_TYPE_OFF); + system("echo format > /tmp/cardv_fifo"); + break; + case SF_KEY_PIN_DATAREADY: + + break; + default: + MLOGE("illegal pin [%d]!!!\n",pMessageBuf->arg2); + break; + } + return SF_SUCCESS; +} +static SINT32 process_cmd_holddown(SF_MESSAGE_BUF_S *pMessageBuf) +{ + switch(pMessageBuf->arg2) { + case SF_KEY_PIN_RESET: + + break; + case SF_KEY_PIN_SYNC: + longClickhold = 1; + break; + case SF_KEY_PIN_FORMAT: + + break; + case SF_KEY_PIN_DATAREADY: + + break; + default: + MLOGE("illegal pin [%d]!!!\n",pMessageBuf->arg2); + break; + } + return SF_SUCCESS; +} +static SINT32 process_cmd_holdup(SF_MESSAGE_BUF_S *pMessageBuf) +{ + switch(pMessageBuf->arg2) { + case SF_KEY_PIN_RESET: + if(bmoduleupdate == 1) { + bmoduleupdate = 0; + app_led_sd_status_return(); + } + break; + case SF_KEY_PIN_SYNC: + longClickhold = 0; + break; + case SF_KEY_PIN_FORMAT: + + break; + case SF_KEY_PIN_DATAREADY: + + break; + default: + MLOGE("illegal pin [%d]!!!\n",pMessageBuf->arg2); + break; + } + return SF_SUCCESS; +} +static SINT32 app_process_cmd_keyctrl(SF_MESSAGE_BUF_S *pMessageBuf) +{ + SF_MESSAGE_CMD_KEY_E enEventkey = pMessageBuf->arg1; + MLOGI("[%d,%s],[%d,%s]\n", pMessageBuf->arg1,\ + sf_keyctrl_getstatusstring(pMessageBuf->arg1),\ + pMessageBuf->arg2,\ + sf_keypin_getstatusstring(pMessageBuf->arg2)); + switch(enEventkey) { + + case SF_EVENT_KEY_SHORT_CLICK: + if(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get()) { + sf_upgrade_status_set(SF_UPGRADE_BUTT); + return SF_SUCCESS; + } + if(app_upgrade_restore_IsRun()) { + app_upgrade_restore_stop(); + return SF_SUCCESS; + } + if(app_upgrade_ota_restore_IsRun()) { + app_upgrade_ota_restore_stop(); + return SF_SUCCESS; + } + return process_cmd_shortclick(pMessageBuf); + case SF_EVENT_KEY_LONG_CLICK: + if(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get()) { + sf_upgrade_status_set(SF_UPGRADE_BUTT); + return SF_SUCCESS; + } + if(app_upgrade_restore_IsRun()) { + app_upgrade_restore_stop(); + return SF_SUCCESS; + } + if(app_upgrade_ota_restore_IsRun()) { + app_upgrade_ota_restore_stop(); + return SF_SUCCESS; + } + return process_cmd_longclick(pMessageBuf); + case SF_EVENT_KEY_HOLD_DOWN: + return process_cmd_holddown(pMessageBuf); + case SF_EVENT_KEY_HOLD_UP: + return process_cmd_holdup(pMessageBuf); + case SF_EVENT_KEY_GROUP: + + break; + default: + MLOGE("illegal parameter [%d]!!!\n",enEventkey); + break; + } + + return SF_SUCCESS; +} +static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) +{ + static SINT8 bsdstatus = 0; + static SINT8 bsdoutstatus = 0; + UINT32 status; + MLOGI("[%d,%s]\n",pMessageBuf->arg1,app_process_SD_getstatusstring(pMessageBuf->arg1)); + switch(pMessageBuf->arg1) + { + case CMD_SD_STRG_CB_UNKNOWN: + sf_set_card_full(1); + break; + case CMD_SD_STRG_CB_INSERTED: + sf_set_card(1); + break; + case CMD_SD_STRG_CB_REMOVED: + sf_set_card(0); + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); + break; + case CMD_SD_STRG_CB_MOUNT_FINISH: + + status = pMessageBuf->arg3; + switch (status) + { + case FST_STA_OK: + sf_set_card(1); + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); + MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1); + break; + case FST_STA_DISK_UNFORMAT: + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR); + MLOGI("^Rcard-%d mount FAIL: Unformat\r\n", pMessageBuf->arg2 + 1); + break; + case FST_STA_DISK_UNKNOWN_FORMAT: + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); + MLOGI("^Rcard-%d mount FAIL: Unknown Format\r\n", pMessageBuf->arg2 + 1); + break; + case FST_STA_CARD_ERR: + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR); + MLOGI("^Rcard-%d mount FAIL: Card Error\r\n", pMessageBuf->arg2 + 1); + break; + default: + MLOGI("^Rcard-%d mount FAIL: ErrID=%d\r\n", pMessageBuf->arg2 + 1, status); + break; + } + + break; + case CMD_SD_STRG_CB_UNMOUNT_FINISH: + + break; + case CMD_SD_SYSTEM_CB_CONFIG: + + break; + case CMD_SD_FULL: + + sf_set_card_full(1); + /*sf_sd_status_set(SF_SD_FULL); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { + if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get())) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_YELLOW); + } + + if(!bsdstatus) { + bsdstatus = 1; + + sf_upgrade_ota_param_recover(); + sf_statistics_param_load(sf_statistics_param_get()); + app_system_param_update(); + if((sf_poweron_type_get() != SF_MCU_STARTUP_TIMELAPSE) && (sf_poweron_type_get() != SF_MCU_STARTUP_PIR)) { + app_t110(); + } + }*/ + break; + /*case CMD_SD_MOUNT_SUCCESS: + sf_sd_status_set(SF_SD_OK); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { + if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get())) + sf_led_event_process((sf_customer_param_get()->DebugMode?LED_STATUS_SLOWFLASH_ON:LED_STATUS_HOLD_ON),LED_GROUP_SD,LED_TYPE_GREEN); + } + if(!bsdstatus) { + bsdstatus = 1; + sf_upgrade_ota_param_recover(); + sf_statistics_param_load(sf_statistics_param_get()); + app_system_param_update(); + if((sf_poweron_type_get() != SF_MCU_STARTUP_TIMELAPSE) && (sf_poweron_type_get() != SF_MCU_STARTUP_PIR)) { + app_t110(); + } + } + break; + case CMD_SD_ERROR: + sf_sd_status_set(SF_SD_ERROR); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { + if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get())) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_YELLOW); + } + + if(!bsdstatus) { + sf_statistics_param_reset(sf_statistics_param_get()); + app_system_param_update(); + if((sf_poweron_type_get() != SF_MCU_STARTUP_TIMELAPSE) && (sf_poweron_type_get() != SF_MCU_STARTUP_PIR)) { + app_t110(); + } + } + break; + + case CMD_SD_MOUNT_FAILURE: + case CMD_SD_OUT: + sf_sd_status_set(SF_SD_OUT); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { + if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get())) + sf_led_event_process(LED_STATUS_HOLD_ON,LED_GROUP_SD,LED_TYPE_RED); + } + + if((sf_poweron_type_get() == SF_MCU_STARTUP_PIR) || (sf_poweron_type_get() == SF_MCU_STARTUP_TIMELAPSE)) + { + app_system_poweroff(SF_POWEROFF_NO_SD); + } + if((!bsdoutstatus) && (!bsdstatus)) { + sf_statistics_param_reset(sf_statistics_param_get()); + app_system_param_update(); + bsdoutstatus = 1; + if((sf_poweron_type_get() != SF_MCU_STARTUP_TIMELAPSE) && (sf_poweron_type_get() != SF_MCU_STARTUP_PIR)) { + app_t110(); + } + } + break; + */ + default: + break; + } + return SF_SUCCESS; +} +static SINT32 app_proccess_cmd_file(SF_MESSAGE_BUF_S *pMessageBuf) +{ + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + return SF_SUCCESS; + #endif + sf_mcu_wdg_set(5); + if(sf_poweron_type_get() != SF_MCU_STARTUP_RING && sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) + { + app_t110(); + } + else + { + app_FileSend_start(); + } + return SF_SUCCESS; +} +static SINT32 app_proccess_cmd_poweroff(SF_MESSAGE_BUF_S *pMessageBuf) +{ + return app_system_poweroff(pMessageBuf->arg1); +} + + +static void app_proccess_cmd_led(SF_MESSAGE_BUF_S *pMessageBuf) +{ + MLOGI("[%d,%s],[%d,%s],[%d,%s]\n", pMessageBuf->arg1,sf_led_status_getstatusstring(pMessageBuf->arg1), + pMessageBuf->arg2,sf_led_group_getstatusstring(pMessageBuf->arg2), + pMessageBuf->arg3,sf_led_type_getstatusstring(pMessageBuf->arg3)); + if(sf_poweron_type_get() == SF_MCU_STARTUP_NORMAL || sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + sf_led_event_process(pMessageBuf->arg1,pMessageBuf->arg2,pMessageBuf->arg3); +} + +static SINT32 app_proccess_cmd_mcu(SF_MESSAGE_BUF_S *pMessageBuf) +{ + MLOGI("ID = %#x\n",pMessageBuf->arg1); + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + + + switch(pMessageBuf->arg1) + { + case SF_MCU_CMD_POWERON: + sf_get_power_on_mode(); + stMessageBuf.arg1 = SF_MCU_CMD_POWERON; + stMessageBuf.arg2 = (SINT32)sf_convert_power_on_mode(); + stMessageBuf.arg3 = (SINT32)sf_mcu_get_irshtter(); + stMessageBuf.cmdId = CMD_MCU; + sf_com_message_send_to_cardv(&stMessageBuf); + break; + case SF_MCU_CMD_MODULE_SLEEP: + sf_set_module_sleep_flag(0); + break; + + default: + break; + } + return SF_SUCCESS; +} + +static SINT32 app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) +{ + MLOGI("ID = %#x\n",pMessageBuf->arg1); + + switch(pMessageBuf->arg1) + { + case SF_PARA_CMD_UPDATE: + sf_share_mem_customer_update(); + break; + + default: + break; + } + return SF_SUCCESS; +} + +#if defined(CFG_LIVE_ENBLE) +static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf) +{ + MLOGI("ID = %#x\n",pMessageBuf->arg1); + switch(pMessageBuf->arg1) + { + case CMD_VENC_START_SUCCESS: + sf_venc_stream_start(); + break; + case CMD_VENC_START_FAILURE: + break; + case CMD_VENC_STOP_SUCCESS: + sf_venc_stream_stop(); + break; + case CMD_VENC_STOP_FAILURE: + break; + case CMD_VENC_STREAM_START: + { + SINT8 value = 1; + sf_4G_status_set(SF_4G_SENDING); + sf_sys_rtoscmd_set(LINUX2RTK_CMD_SET_P2PCTRL,&value); + } + + break; + case CMD_VENC_STREAM_STOP: + { + SINT8 value = 0; + sf_venc_stream_stop(); + sf_sys_rtoscmd_set(LINUX2RTK_CMD_SET_P2PCTRL,&value); + sf_4G_status_set(SF_4G_FREE); + + } + break; + default: + break; + } + return SF_SUCCESS; +} +#endif +void* app_message_recv_thread(void *arg) +{ + SINT32 ret = 0; + SF_MESSAGE_BUF_S stMessagebuf = {0}; + while(1) + { + ret = sf_com_message_recv_from_app(&stMessagebuf); + if(ret != SF_SUCCESS) + { + continue; + } + MLOGI("cmdId:[%#x,%s]\n",stMessagebuf.cmdId,app_process_message_getstatusstring(stMessagebuf.cmdId)); + switch(stMessagebuf.cmdId) + { + case CMD_KEY: + app_process_cmd_keyctrl(&stMessagebuf); + break; + case CMD_SD: + app_process_cmd_SD(&stMessagebuf); + break; + case CMD_LED: + sf_sys_status_led_set(stMessagebuf.arg1); + //app_proccess_cmd_led(&stMessagebuf); + break; + case CMD_FILE: + app_proccess_cmd_file(&stMessagebuf); + break; + case CMD_POWEROFF: + app_proccess_cmd_poweroff(&stMessagebuf); + break; + #if defined(CFG_LIVE_ENBLE) + case CMD_VENC: + app_proccess_cmd_venc(&stMessagebuf); + break; + #endif + case CMD_MCU: + app_proccess_cmd_mcu(&stMessagebuf); + break; + case CMD_PARA: + app_proccess_cmd_para_update(&stMessagebuf); + break; + default: + break; + } + } +} +void app_message_recv_start(void) +{ + + MLOGD("sf_msgQueueThread.IsRun:%d\n", sf_msgQueueThread.IsRun); + + if(!sf_msgQueueThread.IsRun) + { + pthread_create(&sf_msgQueueThread.TskId, NULL, app_message_recv_thread, NULL); + sf_msgQueueThread.IsRun = 1; + } + +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + diff --git a/code/application/source/sf_app/code/source/app/sf_dbg.c b/code/application/source/sf_app/code/source/app/sf_dbg.c new file mode 100755 index 000000000..a5d9cf87a --- /dev/null +++ b/code/application/source/sf_app/code/source/app/sf_dbg.c @@ -0,0 +1,1185 @@ +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sf_log.h" +#include "sf_ledmng.h" +#include "sf_commu_mcu.h" +#include "sf_dev_other.h" +#include "sf_hal_ttyusb.h" +#include "sf_otamng.h" + +#include "sf_message_queue.h" +#include "sf_module.h" +#include "sf_debug.h" +#include "sf_dbg.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif +SINT32 fd = 0; + +SF_DEBUG_CMD_ATTR_S stDebugCmdTable[] = { + + {"cammode", app_debug_cameraMode}, + {"imageSize", app_debug_imageSize}, + {"flashled", app_debug_flashled}, + {"multishot", app_debug_multishot}, + {"videosize", app_debug_videosize}, + {"videolen", app_debug_videolen}, + {"nightmode", app_debug_nightmode}, + {"pirdig", app_debug_pirsenDig}, + {"pirdelay", app_debug_pirdelay}, + {"timelapse", app_debug_timelapse}, + {"worktime", app_debug_worktime}, + {"maxNum", app_debug_maxNum}, + {"dailyreport", app_debug_dailyreport}, + {"gps", app_debug_gps}, + {"batterytype", app_debug_batterytype}, + {"stamp", app_debug_stamp}, + {"sdcycle", app_debug_sdcycle}, + {"datestyle", app_debug_datestyle}, + {"mcuw", app_debug_mcuw}, + {"mcur", app_debug_mcur}, + {"debug", app_debug_debugmode}, + {"help", app_debug_help}, + {"save", app_debug_save}, + {"cleartime", app_debug_cleartime}, + {"sig", app_debug_signal}, + {"ver", app_debug_ver}, + {"cmd", app_debug_process}, +}; +extern SINT8 debugFlag; + +SINT32 debug_remotecontrol_analysis(SF_PDT_PARAM_CFG_S *pstparam) +{ + if(pstparam->DailyReportswitch == 0) + { + if(pstparam->DailyReportTime.Hour == 0 && + pstparam->DailyReportTime.Min == 0) + { + pstparam->GprsMode = 1;/*realtime*/ + } + else + { + pstparam->GprsMode = 0;/*off*/ + } + } + else + { + + if((pstparam->DailyReportTime.Hour == 0) && (pstparam->DailyReportTime.Min == 30)) + { + pstparam->GprsMode = 2; + } + else if((pstparam->DailyReportTime.Hour == 1) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 3; + } + else if((pstparam->DailyReportTime.Hour == 2) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 4; + } + else if((pstparam->DailyReportTime.Hour == 3) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 5; + } + else if((pstparam->DailyReportTime.Hour == 4) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 6; + } + else if((pstparam->DailyReportTime.Hour == 6) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 7; + } + else if((pstparam->DailyReportTime.Hour == 12) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 8; + } + else if((pstparam->DailyReportTime.Hour == 24) && (pstparam->DailyReportTime.Min == 0)) + { + pstparam->GprsMode = 9; + } + } + return SF_SUCCESS; +} +const SF_CHAR* app_debug_cammode_getstring(SF_CAMMODE_E enType) +{ + switch(enType) + { + case SF_CAMMODE_PIC: + return "SF_CAMMODE_PIC"; + case SF_CAMMODE_VIDEO: + return "SF_CAMMODE_VIDEO"; + case SF_CAMMODE_PV: + return "SF_CAMMODE_PV"; + default: + return "Unknown"; + } +} +const SF_CHAR* app_debug_imageSize_getstring(SF_IMG_SIZE_E enType) +{ + switch(enType) + { + case SF_IMG_SIZE_32M: + return "SF_IMG_SIZE_32M"; + case SF_IMG_SIZE_24M: + return "SF_IMG_SIZE_24M"; + case SF_IMG_SIZE_12M: + return "SF_IMG_SIZE_12M"; + case SF_IMG_SIZE_8M: + return "SF_IMG_SIZE_8M"; + case SF_IMG_SIZE_5M: + return "SF_IMG_SIZE_5M"; + case SF_IMG_SIZE_3M: + return "SF_IMG_SIZE_3M"; + default: + return "Unknown"; + } +} + + +const SF_CHAR* app_debug_videosize_getstring(SF_CAMMODE_E enType) +{ + switch(enType) + { + case SF_VIDEO_SIZE_1080: + return "SF_VIDEO_SIZE_1080"; + case SF_VIDEO_SIZE_720: + return "SF_VIDEO_SIZE_720"; + case SF_VIDEO_SIZE_WVGA: + return "SF_VIDEO_SIZE_WVGA"; + default: + return "Unknown"; + } +} +const SF_CHAR* app_debug_batterytype_getstring(BAT_TYPE_E enType) +{ + switch(enType) + { + case SF_BAT_AL: + return "SF_BAT_AL"; + case SF_BAT_NI: + return "SF_BAT_NI"; + case SF_BAT_LI: + return "SF_BAT_LI"; + case SF_BAT_CUS_LI: + return "SF_BAT_CUS_LI"; + default: + return "Unknown"; + } +} + +SINT32 app_debug_camname(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-help") ){ + MLOGI(""); + } + + SINT8 nValue = atoi((SF_CHAR*)argv[0]); + if(nValue >= SF_CAMMODE_BUTT || nValue < SF_CAMMODE_PIC) { + MLOGE("the second param is out of range [0,2]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->CamMode = nValue; + MLOGD("Cammode = [%d]\n",sf_customer_param_get()->CamMode); + + return SF_SUCCESS; + +} + +SINT32 app_debug_cameraMode(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("cammode [0,2] 0:photo,1:video,2:photo+video\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("Cammode = [%d,%s]\n",sf_customer_param_get()->CamMode,app_debug_cammode_getstring(sf_customer_param_get()->CamMode)); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= SF_CAMMODE_BUTT || nValue < SF_CAMMODE_PIC) { + MLOGE("the second param is out of range [0,2]!!!\n"); + return SF_FAILURE; + } + + sf_customer_param_get()->CamMode = nValue; + MLOGD("Cammode = [%d,%s]\n",sf_customer_param_get()->CamMode,app_debug_cammode_getstring(sf_customer_param_get()->CamMode)); + + return SF_SUCCESS; + +} +SINT32 app_debug_imageSize(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("imageSize [0,1] 0:5M,1:3M\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("ImgSize = [%d,%s]\n",sf_customer_param_get()->ImgSize,app_debug_imageSize_getstring(sf_customer_param_get()->ImgSize)); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->ImgSize = (nValue?SF_IMG_SIZE_3M:SF_IMG_SIZE_5M); + MLOGD("ImgSize = [%d,%s]\n",sf_customer_param_get()->ImgSize,app_debug_imageSize_getstring(sf_customer_param_get()->ImgSize)); + + return SF_SUCCESS; + +} +SINT32 app_debug_flashled(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("flashled [0,1] 0:OFF,1:ON\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("FlashLed = [%d]\n",sf_customer_param_get()->FlashLed); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->FlashLed = nValue; + MLOGD("FlashLed = [%d]\n",sf_customer_param_get()->FlashLed); + + return SF_SUCCESS; + +} + +SINT32 app_debug_multishot(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("multishot [1,3] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("Multishot = [%d]\n",sf_customer_param_get()->Multishot); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 5 || nValue < 0) { + MLOGE("the second param is out of range [0,4]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->Multishot = nValue; + MLOGD("Multishot = [%d]\n",sf_customer_param_get()->Multishot); + + return SF_SUCCESS; + +} +SINT32 app_debug_videosize(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("videosize [0,2] 0:1080P,1:720P,2:WVGA\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("VideoSize = [%d,%s]\n",sf_customer_param_get()->VideoSize,app_debug_videosize_getstring(sf_customer_param_get()->VideoSize)); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= SF_VIDEO_SIZE_BUTT || nValue < SF_VIDEO_SIZE_1080) { + MLOGE("the second param is out of range [0,2]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->VideoSize = nValue; + MLOGD("VideoSize = [%d,%s]\n",sf_customer_param_get()->VideoSize,app_debug_videosize_getstring(sf_customer_param_get()->VideoSize)); + + return SF_SUCCESS; + +} + +SINT32 app_debug_videolen(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("videolen [5,60] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("VideoLenth = [%d]\n",sf_customer_param_get()->VideoLenth); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 61 || nValue < 5) { + MLOGE("the second param is out of range [5,60]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->VideoLenth = nValue; + MLOGD("VideoLenth = [%d]\n",sf_customer_param_get()->VideoLenth); + + return SF_SUCCESS; + +} + +SINT32 app_debug_nightmode(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("nightmode [0,1] ,0:max, 1:middle, 2:min\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("NightMode = [%d]\n",sf_customer_param_get()->NightMode); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 3 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->NightMode = nValue; + MLOGD("NightMode = [%d]\n",sf_customer_param_get()->NightMode); + + return SF_SUCCESS; + +} + + +SINT32 app_debug_pirsenDig(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("pirdig [0,9] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("PirSwitch = [%d]\n",sf_customer_param_get()->PirSwitch); + MLOGD("PirSensitivity = [%d]\n",sf_customer_param_get()->PirSensitivity); + MLOGD("DigitPirSensitivity = [%d]\n",sf_customer_param_get()->DigitPirSensitivity); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 10 || nValue < 0) { + MLOGE("the second param is out of range [0,9]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->DigitPirSensitivity = nValue; + + sf_customer_param_get()->PirSwitch = (!sf_customer_param_get()->DigitPirSensitivity)? 0:1; + + sf_customer_param_get()->PirSensitivity = sf_pir_to_digit_analog(sf_customer_param_get()->DigitPirSensitivity); + MLOGD("PirSwitch = [%d]\n",sf_customer_param_get()->PirSwitch); + MLOGD("PirSensitivity = [%d]\n",sf_customer_param_get()->PirSensitivity); + MLOGD("DigitPirSensitivity = [%d]\n",sf_customer_param_get()->DigitPirSensitivity); + + return SF_SUCCESS; + +} + +SINT32 app_debug_pirdelay(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("pirdelay [0,1] h m s,0:OFF,1:ON,hh mm ss\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("delaypic = [%d,%02d:%02d:%02d]\n",sf_customer_param_get()->PirDelaySwitch, + sf_customer_param_get()->PirDelayTime.Hour, + sf_customer_param_get()->PirDelayTime.Min, + sf_customer_param_get()->PirDelayTime.Sec); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + + + sf_customer_param_get()->PirDelaySwitch = nValue; + + if(nValue) { + + SINT8 mValue = atoi((SF_CHAR*)argv[2]); + if(mValue >= 23 || mValue < 0) { + MLOGE("the third param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + + SINT8 lValue = atoi((SF_CHAR*)argv[3]); + if(lValue >= 60 || lValue < 0) { + MLOGE("the fouth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + + SINT8 oValue = atoi((SF_CHAR*)argv[4]); + if(oValue >= 60 || oValue < 0) { + MLOGE("the fiveth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->PirDelayTime.Hour = mValue; + sf_customer_param_get()->PirDelayTime.Min = lValue; + sf_customer_param_get()->PirDelayTime.Sec = oValue; + + + + } + else { + + sf_customer_param_get()->PirDelayTime.Hour = 0; + sf_customer_param_get()->PirDelayTime.Min = 0; + sf_customer_param_get()->PirDelayTime.Sec = 0; + } + MLOGD("delaypic = [%d,%02d:%02d:%02d]\n",sf_customer_param_get()->PirDelaySwitch, + sf_customer_param_get()->PirDelayTime.Hour, + sf_customer_param_get()->PirDelayTime.Min, + sf_customer_param_get()->PirDelayTime.Sec); + return SF_SUCCESS; + +} + + +SINT32 app_debug_timelapse(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("timelapse [0,1] h m s,0:OFF,1:ON,hh mm ss\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("timelapsepic = [%d,%02d:%02d:%02d]\n",sf_customer_param_get()->TimelapseSwitch, + sf_customer_param_get()->TimelapseTime.Hour, + sf_customer_param_get()->TimelapseTime.Min, + sf_customer_param_get()->TimelapseTime.Sec); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->TimelapseSwitch = nValue; + + if(nValue) { + SINT8 mValue = atoi((SF_CHAR*)argv[2]); + if(mValue >= 23 || mValue < 0) { + MLOGE("the third param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + + SINT8 lValue = atoi((SF_CHAR*)argv[3]); + if(lValue >= 60 || lValue < 0) { + MLOGE("the fouth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + + SINT8 oValue = atoi((SF_CHAR*)argv[4]); + if(oValue >= 60 || oValue < 0) { + MLOGE("the fiveth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->TimelapseTime.Hour = mValue; + sf_customer_param_get()->TimelapseTime.Min = lValue; + sf_customer_param_get()->TimelapseTime.Sec = oValue; + + } + else { + sf_customer_param_get()->TimelapseTime.Hour = 0; + sf_customer_param_get()->TimelapseTime.Min = 0; + sf_customer_param_get()->TimelapseTime.Sec = 0; + } + MLOGD("timelapsepic = [%d,%02d:%02d:%02d]\n",sf_customer_param_get()->TimelapseSwitch, + sf_customer_param_get()->TimelapseTime.Hour, + sf_customer_param_get()->TimelapseTime.Min, + sf_customer_param_get()->TimelapseTime.Sec); + + return SF_SUCCESS; + +} + + + +SINT32 app_debug_worktime(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("worktime [1,2] [0,1] HH MM hh mm ,[1,2]: workgroupID,[0,1]:[OFF,ON],[HH MM,hh mm]:[start time,stop time ] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("WorkTime[%d] = [%d,%02d:%02d-%02d:%02d]\n",1,sf_customer_param_get()->WorkTime1Switch, + sf_customer_param_get()->WorkTime[0].StartTime.Hour, + sf_customer_param_get()->WorkTime[0].StartTime.Min, + sf_customer_param_get()->WorkTime[0].StopTime.Hour, + sf_customer_param_get()->WorkTime[0].StopTime.Min); + MLOGD("WorkTime[%d] = [%d,%02d:%02d-%02d:%02d]\n",2,sf_customer_param_get()->WorkTime2Switch, + sf_customer_param_get()->WorkTime[1].StartTime.Hour, + sf_customer_param_get()->WorkTime[1].StartTime.Min, + sf_customer_param_get()->WorkTime[1].StopTime.Hour, + sf_customer_param_get()->WorkTime[1].StopTime.Min); + + return SF_SUCCESS; + } + SINT8 mValue = atoi((SF_CHAR*)argv[1]); + if(mValue >= 3 || mValue < 1) { + MLOGE("the second param is out of range [1,2]!!!\n"); + return SF_FAILURE; + } + SINT8 nValue = atoi((SF_CHAR*)argv[2]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the third param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + + if(mValue == 1) { + + if(nValue) { + SINT8 oValue = atoi((SF_CHAR*)argv[3]); + if(oValue >= 23 || oValue < 0) { + MLOGE("the fouth param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + SINT8 pValue = atoi((SF_CHAR*)argv[4]); + if(pValue >= 60 || pValue < 0) { + MLOGE("the fiveth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + SINT8 qValue = atoi((SF_CHAR*)argv[5]); + if(qValue >= 23 || qValue < 0) { + MLOGE("the sixth param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + SINT8 rValue = atoi((SF_CHAR*)argv[6]); + if(rValue >= 60 || rValue < 0) { + MLOGE("the seventh param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->WorkTime1Switch = nValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Hour = oValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Min = pValue; + sf_customer_param_get()->WorkTime[mValue].StopTime.Hour = qValue; + sf_customer_param_get()->WorkTime[mValue].StopTime.Min = rValue; + } + else { + sf_customer_param_get()->WorkTime1Switch = nValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Hour = 0; + sf_customer_param_get()->WorkTime[mValue].StartTime.Min = 0; + sf_customer_param_get()->WorkTime[mValue].StopTime.Hour = 0; + sf_customer_param_get()->WorkTime[mValue].StopTime.Min = 0; + } + + + } + else if(mValue == 2) { + + if(nValue) { + SINT8 oValue = atoi((SF_CHAR*)argv[3]); + if(oValue >= 23 || oValue < 0) { + MLOGE("the fouth param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + SINT8 pValue = atoi((SF_CHAR*)argv[4]); + if(pValue >= 60 || pValue < 0) { + MLOGE("the fiveth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + SINT8 qValue = atoi((SF_CHAR*)argv[5]); + if(qValue >= 23 || qValue < 0) { + MLOGE("the sixth param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + SINT8 rValue = atoi((SF_CHAR*)argv[6]); + if(rValue >= 60 || rValue < 0) { + MLOGE("the seventh param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->WorkTime2Switch = nValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Hour = oValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Min = pValue; + sf_customer_param_get()->WorkTime[mValue].StopTime.Hour = qValue; + sf_customer_param_get()->WorkTime[mValue].StopTime.Min = rValue; + } + else { + sf_customer_param_get()->WorkTime2Switch = nValue; + sf_customer_param_get()->WorkTime[mValue].StartTime.Hour = 0; + sf_customer_param_get()->WorkTime[mValue].StartTime.Min = 0; + sf_customer_param_get()->WorkTime[mValue].StopTime.Hour = 0; + sf_customer_param_get()->WorkTime[mValue].StopTime.Min = 0; + + } + + } + MLOGD("WorkTime[%d] = [%d,%02d:%02d-%02d:%02d]\n",mValue,((mValue == 1)?sf_customer_param_get()->WorkTime1Switch:sf_customer_param_get()->WorkTime2Switch), + sf_customer_param_get()->WorkTime[mValue].StartTime.Hour, + sf_customer_param_get()->WorkTime[mValue].StartTime.Min, + sf_customer_param_get()->WorkTime[mValue].StopTime.Hour, + sf_customer_param_get()->WorkTime[mValue].StopTime.Min); + + + + return SF_SUCCESS; + +} + +SINT32 app_debug_maxNum(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("maxNum [0,4] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("SendMaxNum = [%d]\n",sf_customer_param_get()->SendMaxNum); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 5 || nValue < 0) { + MLOGE("the second param is out of range [0,4]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->SendMaxNum = nValue; + MLOGD("SendMaxNum = [%d]\n",sf_customer_param_get()->SendMaxNum); + + return SF_SUCCESS; + +} + + +SINT32 app_debug_dailyreport(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("dailyreport [0,1] hh mm\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("dailypic = [%d,%02d:%02d:%02d]\n", sf_customer_param_get()->DailyReportswitch, + sf_customer_param_get()->DailyReportTime.Hour, + sf_customer_param_get()->DailyReportTime.Min, + sf_customer_param_get()->DailyReportTime.Sec); + debug_remotecontrol_analysis(sf_customer_param_get()); + MLOGD("GprsMode = [%d]\n", sf_customer_param_get()->GprsMode); + + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + + if(nValue) { + SINT8 oValue = atoi((SF_CHAR*)argv[2]); + if(oValue >= 23 || oValue < 0) { + MLOGE("the third param is out of range [0,23]!!!\n"); + return SF_FAILURE; + } + SINT8 pValue = atoi((SF_CHAR*)argv[3]); + if(pValue >= 60 || pValue < 0) { + MLOGE("the fouth param is out of range [0,59]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->DailyReportswitch = nValue; + sf_customer_param_get()->DailyReportTime.Hour = oValue; + sf_customer_param_get()->DailyReportTime.Min = pValue; + } + else { + sf_customer_param_get()->DailyReportswitch = nValue; + sf_customer_param_get()->DailyReportTime.Hour = 0; + sf_customer_param_get()->DailyReportTime.Min = 0; + + } + MLOGD("dailypic = [%d,%02d:%02d:%02d]\n", sf_customer_param_get()->DailyReportswitch, + sf_customer_param_get()->DailyReportTime.Hour, + sf_customer_param_get()->DailyReportTime.Min, + sf_customer_param_get()->DailyReportTime.Sec); + debug_remotecontrol_analysis(sf_customer_param_get()); + MLOGD("GprsMode = [%d]\n", sf_customer_param_get()->GprsMode); + + return SF_SUCCESS; + +} + +SINT32 app_debug_gps(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("gps [0,1] ,[0,1]:[OFF, ON]\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("GPSFlag = [%d]\n",sf_customer_param_get()->GPSFlag); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->GPSFlag = nValue; + MLOGD("GPSFlag = [%d]\n",sf_customer_param_get()->GPSFlag); + + return SF_SUCCESS; + +} + + +SINT32 app_debug_batterytype(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("batterytype [0,3] 0:BAT_AL,1:BAT_NI,2:BAT_LI,3:BAT_CUS_LI\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("BatteryType = [%d,%s]\n",sf_customer_param_get()->BatteryType,app_debug_batterytype_getstring(sf_customer_param_get()->BatteryType)); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= SF_BAT_BUTT || nValue < SF_BAT_AL) { + MLOGE("the second param is out of range [0,3]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->BatteryType = nValue; + MLOGD("BatteryType = [%d,%s]\n",sf_customer_param_get()->BatteryType,app_debug_batterytype_getstring(sf_customer_param_get()->BatteryType)); + + return SF_SUCCESS; + +} + +SINT32 app_debug_stamp(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("stamp [0,1] ,[0,1]:[OFF, ON]\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("StampSwitch = [%d]\n",sf_customer_param_get()->StampSwitch); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->StampSwitch = nValue; + MLOGD("StampSwitch = [%d]\n",sf_customer_param_get()->StampSwitch); + + return SF_SUCCESS; + +} + + +SINT32 app_debug_sdcycle(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("sdcycle [0,1] ,[0,1]:[OFF, ON] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("sdcycle = [%d]\n",sf_customer_param_get()->SdLoop); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,4]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->SdLoop = nValue; + MLOGD("sdcycle = [%d]\n",sf_customer_param_get()->SdLoop); + + return SF_SUCCESS; + +} + +SINT32 app_debug_datestyle(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("datestyle [1,2] ,1:MM-DD-YY; 2:DD-MM-YY \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("DateStyle = [%d]\n",sf_customer_param_get()->DateStyle); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 3 || nValue < 0) { + MLOGE("the second param is out of range [1,2]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->DateStyle = nValue; + MLOGD("DateStyle = [%d]\n",sf_customer_param_get()->DateStyle); + + return SF_SUCCESS; + +} + + +SINT32 app_debug_mcuw(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("mcuw addr val \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGE("unsupport param [-v] \n"); + return SF_FAILURE; + + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 91 || nValue < 0) { + MLOGE("the second param is out of range [0,90]!!!\n"); + return SF_FAILURE; + } + SINT8 mValue = atoi((SF_CHAR*)argv[2]); + sf_commu_set_mcu(nValue,mValue); + return SF_SUCCESS; + +} + + +SINT32 app_debug_mcur(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("mcur addr \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGE("unsupport param [-v] \n"); + return SF_FAILURE; + + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 91 || nValue < 0) { + MLOGE("the second param is out of range [0,90]!!!\n"); + return SF_FAILURE; + } + sf_commu_get_mcu(nValue); + return SF_SUCCESS; + +} + +SINT32 app_debug_debugmode(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("debug [0,1],[0,1]:[OFF, ON] \n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("DebugMode = [%d]\n",sf_customer_param_get()->DebugMode); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 2 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + sf_customer_param_get()->DebugMode = nValue; + MLOGD("DebugMode = [%d]\n",sf_customer_param_get()->DebugMode); + + return SF_SUCCESS; + +} + +SINT32 app_debug_help(SINT32 argc, SF_CHAR **argv[]) +{ + SINT8 i= 0; + for(i = 0;i<(sizeof(stDebugCmdTable)/sizeof(stDebugCmdTable[0]));i++ ) + { + printf("%s\n",stDebugCmdTable[i].cmdStr); + + } + printf("---------------\n"); + printf("debug cmd count = %d\n",(sizeof(stDebugCmdTable)/sizeof(stDebugCmdTable[0]))); + return SF_SUCCESS; + +} +SINT32 app_debug_save(SINT32 argc, SF_CHAR **argv[]) +{ + sf_customer_param_save(sf_customer_param_get()); + return SF_SUCCESS; + +} +SINT32 app_debug_cleartime(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("cleartime [0,1] ,[0,1]:[OFF, ON]\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("debugFlag = [%d]\n",debugFlag); + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 10 || nValue < 0) { + MLOGE("the second param is out of range [0,1]!!!\n"); + return SF_FAILURE; + } + debugFlag = nValue; + MLOGD("debugFlag = [%d]\n",debugFlag); + + return SF_SUCCESS; + +} +SINT32 app_debug_signal(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("sig [3g,4g] [0,max],--3g : max=31 ,4g: max=127\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("Net = [%dG],Signnal = [%d]\n",sf_statistics_param_get()->netGeneration,sf_statistics_param_get()->SimSignal); + return SF_SUCCESS; + } + + if(strstr((SF_CHAR*)argv[1], "3g") == SF_NULL && strstr((SF_CHAR*)argv[1], "4g") == SF_NULL) { + MLOGE("the second param is out of range [3g,4g]!!!\n"); + return SF_FAILURE; + } + + SINT8 nValue = 0; + SINT8 mValue = 0; + if(strstr((SF_CHAR*)argv[1], "3g")) { + nValue = 3; + mValue = atoi((SF_CHAR*)argv[2]); + if(mValue < 0 || mValue > 32) { + MLOGE("the third param is out of range [0,31]!!!\n"); + return SF_FAILURE; + } + } + else if(strstr((SF_CHAR*)argv[1], "4g")) { + nValue = 4; + mValue = atoi((SF_CHAR*)argv[2]); + if(mValue < 0 || mValue > 128) { + MLOGE("the third param is out of range [0,127]!!!\n"); + return SF_FAILURE; + } + } + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg2 = LED_GROUP_SIGNAL; + { + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + UINT8 signalLevel = 0; + sf_4G_signal_level_get(nValue,mValue,&signalLevel); + MLOGI("signalLevel = %d\n",signalLevel); + + switch(signalLevel) + { + case 2: + stMessageBuf.arg3 = LED_TYPE_RED; + break; + case 3: + stMessageBuf.arg3 = LED_TYPE_YELLOW; + break; + case 4: + stMessageBuf.arg3 = LED_TYPE_GREEN; + break; + default: + stMessageBuf.arg3 = LED_TYPE_RED; + break; + } + } + sf_com_message_send_to_app(&stMessageBuf); + + return SF_SUCCESS; + +} +SINT32 app_debug_ver(SINT32 argc, SF_CHAR **argv[]) +{ + + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("ver\n"); + return SF_SUCCESS; + } + + SF_CHAR ver[24] = { 0 }; + sf_sys_software_version_get(ver); + if(strstr((SF_CHAR*)argv[1], "-v")) { + MLOGD("ver = [%s]\n",ver); + return SF_SUCCESS; + } + MLOGD("ver = [%s]\n",ver); + return SF_SUCCESS; + +} + +SINT32 app_debug_process(SINT32 argc, SF_CHAR **argv[]) +{ + if(strstr((SF_CHAR*)argv[1], "-h")) { + MLOGI("cmd [1,10]\n"); + return SF_SUCCESS; + } + if(strstr((SF_CHAR*)argv[1], "-v")) { + return SF_SUCCESS; + } + SINT8 nValue = atoi((SF_CHAR*)argv[1]); + if(nValue >= 11 || nValue < 0) { + MLOGE("the second param is out of range [0,10]!!!\n"); + return SF_FAILURE; + } + MLOGD("cmd = [%d]\n",nValue); + switch(nValue) + { + case 1: + { + //SF_MESSAGE_BUF_S stMessageBuf = {0}; + //stMessageBuf.cmdId = CMD_SD; + //stMessageBuf.arg1 = CMD_SD_FULL; + //sf_com_message_send_to_app(&stMessageBuf); + } + break; + case 2: + app_led_net_reg_stop(SF_TTY_ERROR_OPEN); + break; + case 3: + { + SF_FN_PARAM_S stpfncallback = { 0 }; + stpfncallback.pstParam = NULL; + stpfncallback.pstaticParam = sf_statistics_param_get(); + stpfncallback.pfn_AT_instruction_exit = NULL; + sf_4G_other_sim_apn_cfg(&stpfncallback); + } + break; + case 4: + { char *url = "https://sifarimageserver.s3-us-west-1.amazonaws.com/camojojo/camVersion/R7R1CArCA02_02_1666685079435.zip"; + char host[128] = {0}; + char fath[128] = {0}; + char fname[128] = {0}; + sscanf(url, "%*[^//]//%[^/]",host); + sscanf(url, "%*[^//]//%*[^/]/%s",fath); + sscanf(fath, "%*[^/]/%*[^/]/%s",fname); + MLOGI("[%s],[%s],[%s]\n",host,fath,fname); + } + break; + case 5: + sf_sd_loopremove("/mnt/mmc/DCIM"); + MLOGI("/* Added by MaxLi 2022/12/14--15:20:19*/\n"); + break; + case 6: + { + SF_REPORT_FILE_ATTR_S stSrcReportFileAttr = {.filecnt = 4, + .stSendFileAttr[0] = {9,"20221214122811HRT16599.jpg","20221214122811HRT16500.jpg",0,0,0}, + .stSendFileAttr[1] = {9,"20221214122811HRT16600.jpg","20221214122811HRT16501.jpg",0,0,0}, + .stSendFileAttr[2] = {9,"20221214122811HRT16601.jpg","20221214122811HRT16502.jpg",0,0,0}, + .stSendFileAttr[3] = {9,"20221214122811HRT16602.jpg","20221214122811HRT16503.jpg",0,0,0} + }; + SF_REPORT_FILE_ATTR_S stDstReportFileAttr = {.filecnt = 8, + .stSendFileAttr[0] = {9,"20221214122811HRT16599.jpg","20221214122811HRT16500.jpg",0,0,0}, + .stSendFileAttr[1] = {9,"20221214122811HRT16600.jpg","20221214122811HRT16501.jpg",0,0,0}, + .stSendFileAttr[2] = {9,"20221214122811HRT16601.jpg","20221214122811HRT16502.jpg",0,0,0}, + .stSendFileAttr[3] = {9,"20221214122811HRT16602.jpg","20221214122811HRT16503.jpg",0,0,0}, + .stSendFileAttr[4] = {9,"20221214122811HRT16603.jpg","20221214122811HRT16500.jpg",0,0,0}, + .stSendFileAttr[5] = {9,"20221214122811HRT16606.jpg","20221214122811HRT16501.jpg",0,0,0}, + .stSendFileAttr[6] = {9,"20221214122811HRT16604.jpg","20221214122811HRT16502.jpg",0,0,0}, + .stSendFileAttr[7] = {9,"20221214122811HRT16605.jpg","20221214122811HRT16503.jpg",0,0,0} + }; + app_file_subscrible_check(&stDstReportFileAttr,&stSrcReportFileAttr); + } + break; + case 7: + { + SINT32 s32ret = SF_SUCCESS; + SF_CHAR *stringtmp = 0; + SF_CHAR tmp[64] = {0}; + SF_CHAR cmd[512] = {0}; + sprintf(tmp, "%s",(SF_CHAR*)argv[2]); + if ((stringtmp = strstr(tmp, "\n"))) + { + *stringtmp = '\0'; + } + + MLOGI("tmp = [%s]\n",tmp); + sprintf(cmd, "unzip %s/%s -d %s/",OTA_UPGRADE_FATH_PREFIX,tmp,OTA_UPGRADE_FATH_PREFIX); + MLOGI("cmd = [%s]\n",cmd); + + FILE *fp = 0; + if((fp = popen(cmd, "w")) == NULL) { + perror("Fail to popen\n"); + break; + } + pclose(fp); +// system(cmd); + MLOGI("cmd = [%s]\n",cmd); +// s32ret = sf_upgrade_ota_filecheck(); +// +// s32ret = sf_upgrade_ota_param_bak(); +// +// s32ret = sf_upgrade_ota_env_set(); +// +// sleep(2); +// + +// sf_mcu_wdg_off(); +// sleep(2); +// +// if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { +// SF_MESSAGE_BUF_S stMessageBuf = {0}; +// stMessageBuf.arg1 = SF_POWEROFF_SYNC_PARAM; +// stMessageBuf.cmdId = CMD_POWEROFF; +// sf_com_message_send_to_app(&stMessageBuf); +// } + } + + break; + default: + break; + + } + + return SF_SUCCESS; + +} + + + +SINT32 app_debug_init(void) +{ + return sf_debug_init(DEBUG_CMD_FIFO_FATH,&fd); +} + +SINT32 app_debug_create(void) +{ + return sf_debug_create((SF_DEBUG_CMD_ATTR_S *)&stDebugCmdTable,(sizeof(stDebugCmdTable)/sizeof(stDebugCmdTable[0]))); +} +SINT32 app_debug_start(void) +{ + return sf_debug_start(fd); +} +SINT32 app_debug_stop(void) +{ + return sf_debug_stop(); +} +SINT32 app_debug_deinit(void) +{ + return sf_debug_deinit(fd); +} + + + + + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + + + diff --git a/code/application/source/sf_app/code/source/app/sf_device.c b/code/application/source/sf_app/code/source/app/sf_device.c index ba10f47e5..a396a431b 100755 --- a/code/application/source/sf_app/code/source/app/sf_device.c +++ b/code/application/source/sf_app/code/source/app/sf_device.c @@ -38,6 +38,9 @@ extern "C" { #endif #endif extern pthread_mutex_t GPIO_mutexLock; +static SINT32 IsCardFull = 0; +static SINT32 isGoing2Pir = 0; +static SINT32 IsCard = 0; SF_THREAD_S PirMonitorTskCfg = { @@ -45,6 +48,24 @@ SF_THREAD_S PirMonitorTskCfg = .TskId = -1, }; +static char driver_path_prefix[] = "/lib/modules/4.19.91"; + +static char* usb_host_drivers[] = { + "kernel/drivers/usb/common/usb-common.ko", + "kernel/drivers/usb/core/usbcore.ko", + "kernel/drivers/usb/host/ehci-hcd.ko", + "kernel/drivers/net/mii.ko", + "kernel/drivers/net/usb/usbnet.ko", + "kernel/drivers/usb/serial/usbserial.ko", + "kernel/drivers/usb/serial/usb_wwan.ko", + "kernel/drivers/usb/serial/option.ko", + "kernel/drivers/net/usb/cdc_ether.ko", + "kernel/drivers/usb/class/cdc-wdm.ko", + "kernel/drivers/net/usb/qmi_wwan.ko", + "extra/net/GobiNet/drv_gobi_net.ko", + NULL +}; + void* pir_monitoring_thread(void) { SF_MESSAGE_BUF_S stMessageBuf = {0}; @@ -473,15 +494,15 @@ SINT32 app_led_pin_init(void) // sf_hal_gpio_init(GPIOID_SIM_INSRET, GPIO_DIR_IN); // sf_hal_gpio_init(GPIOID_USB_INSERT, GPIO_DIR_IN); - SINT8 halvalue = 0; + /*SINT8 halvalue = 0; SF_MUTEX_LOCK(GPIO_mutexLock); sf_hal_gpio_init(SF_KEY_PIN_SYNC,GPIO_DIR_IN); sf_hal_gpio_get(SF_KEY_PIN_SYNC,&halvalue); sf_hal_gpio_deinit(SF_KEY_PIN_SYNC); SF_MUTEX_UNLOCK(GPIO_mutexLock); MLOGI("halvalue: %d\n",halvalue); - if(halvalue == 0) - return SF_SUCCESS; + if(halvalue == 1) + return SF_SUCCESS;*/ SF_MESSAGE_BUF_S stMessageBuf = {0}; stMessageBuf.cmdId = CMD_LED; @@ -493,6 +514,84 @@ SINT32 app_led_pin_init(void) return SF_SUCCESS; } +SINT32 sf_in_card_exist(void) +{ + SINT8 regValue = 0; + SF_MUTEX_LOCK(GPIO_mutexLock); + sf_hal_gpio_init(SF_GPIO_CARD_DETECT, GPIO_DIR_IN); + sf_hal_gpio_get(SF_GPIO_CARD_DETECT, ®Value); + sf_hal_gpio_deinit(SF_GPIO_CARD_DETECT); + SF_MUTEX_UNLOCK(GPIO_mutexLock); + + return (regValue & 0xFF) ? 1:0; +} + + +SINT32 sf_is_card_full(void) +{ + return IsCardFull; +} + +void sf_set_card_full(SINT32 vol) +{ + IsCardFull = vol; +} + +SINT32 sf_is_card(void) +{ + return IsCard; +} + +void sf_set_card(SINT32 vol) +{ + IsCard = vol; +} + +SINT32 sf_get_pir_statu_flag(void) +{ + return isGoing2Pir; +} + +void sf_set_pir_statu_flag(SINT32 flag) +{ + isGoing2Pir = flag; +} + + +BOOL sf_load_ko(void) +{ + char** usb_drivers = NULL; + char* driver_path = NULL; + UINT8 cnt = 0; + char cmd[256] = {'\0'}; + int ret = 0; + BOOL ret2 = TRUE; + + usb_drivers = usb_host_drivers; + + while(usb_drivers[cnt++]) + { + } + + for(int i = 0 ; i < cnt ; i++) + { + driver_path = usb_drivers[i]; + + if(driver_path){ + snprintf(cmd, sizeof(cmd), "insmod %s/%s", driver_path_prefix, driver_path); + printf("[%s:%d] %s\n", __FUNCTION__, __LINE__, cmd); + ret = system(cmd); + if(0 != ret) + { + ret2 = FALSE; + } + } + } + + return ret2; +} + + #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/app/sf_service.c b/code/application/source/sf_app/code/source/app/sf_service.c new file mode 100755 index 000000000..4f93e1588 --- /dev/null +++ b/code/application/source/sf_app/code/source/app/sf_service.c @@ -0,0 +1,1702 @@ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sf_log.h" +#include "sf_qrcode.h" + +#include "sf_hal_ttyusb.h" +#include "sf_dev_usb.h" +#include "sf_fileMng.h" +#include "sf_ledmng.h" + +#include "sf_systemMng.h" +#include "sf_storeMng.h" +#if defined(CFG_LIVE_ENBLE) +#include "sf_liveMng.h" +#endif +#include "sf_dataMng.h" +#include "sf_module.h" +#include "sf_keymng.h" +#include "sf_otamng.h" +#include "sf_datahttp.h" + +#include "sf_message_queue.h" +#include "sf_device.h" +#include "sf_system.h" +#include "sf_service.h" + + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +extern SF_PARA_TIME_S rtcTime; +extern pthread_mutex_t Param_mutexLock; +extern pthread_mutex_t GPIO_mutexLock; + +static SF_THREAD_S RegisterNetTskParam = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S ThumbSend = +{ + .IsRun = 0, + .TskId = -1, +}; + + SINT32 app_ttyusb_IsOpen(void) +{ + int retryTime = 0; + SINT32 s32ret = 0; + MLOGD("ttyUSB has not been init, will init ttyUSB!\n"); + while ((s32ret = sf_hal_ttyusb2_init()) < 0) + { + retryTime++; + if((retryTime >=200)&&(retryTime%200 == 0)) + { + MLOGE("-------ttyUSB init fail!\n"); + s32ret = SF_TTY_ERROR_OPEN; + break; + } + } + + return s32ret; +} +SF_BOOL app_disconnect_4g_module(void) +{ + if((sf_usb_IsInsert()) || (sf_poweroff_type_get())) + { + return SF_TRUE; + } + else + { + return SF_FALSE; + } +} + +#if SF_QLOG_ENABLE +static SINT16 app_Qlog_procress(void) +{ + SINT16 s32ret = SF_SUCCESS; + + char qlogPath[128] = {0}; + char qlogDirCmd[128]={0}; + time_t timep; + struct tm *p; + time(&timep); + p = gmtime(&timep); + if(access("/mnt/mmc/qlog", F_OK) != 0) + { + s32ret = mkdir("/mnt/mmc/qlog", S_IRWXU); + if (s32ret != 0) + return s32ret; + } + sprintf(qlogPath, "%04d%02d%02d%02d%02d%02d", p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); + sprintf(qlogDirCmd, "/customer/QLog -s %s%s &", QLOG_PATH, qlogPath); + MLOGD("%s\n", qlogDirCmd); + s32ret = system(qlogDirCmd); + + return s32ret; +} +#endif +SINT32 sf_USB_net_init(void) +{ + static UINT8 flag = 0; + SF_CHAR cmdStr[128] = {0}; + int ret = SF_FAILURE; + SF_PDT_PARAM_STATISTICS_S *sfPara = sf_statistics_param_get(); + if(flag == 0) + { + flag = 1; + /*if(strstr(sfPara->ApnGPRS, V_MODULE_APN)) + { + sprintf(cmdStr, "/customer/quectel-CM -n %d&", V_PDP_INDEX); + } + else if(strstr(sfPara->ApnGPRS, A_MODULE_APN)) + { + sprintf(cmdStr, "/customer/quectel-CM -n %d&", A_PDP_INDEX); + } + else*/ + + { + sprintf(cmdStr, "/customer/quectel-CM -n %d&", E_PDP_INDEX); + } + } + + for(UINT8 i = 0; i < 40; i++) + { + if(access("/dev/qcqmi0", F_OK) == SF_SUCCESS) + { + ret = SF_SUCCESS; + printf("usb net ko exist!\r\n"); + break; + } + else + { + usleep(100*1000); + } + } + + if(ret == SF_SUCCESS) + { + system(cmdStr); + if(sf_poweron_type_get() == SF_MCU_STARTUP_RING) + { + sleep(2); + } + else + { + sleep(5); + } + return ret; + } + + printf("usb net ko no exist!\r\n"); + return ret; + +} + +SINT32 app_gps_map_update(SF_FN_PARAM_S *pfnParam) +{ + SINT16 ret = SF_SUCCESS; + UINT8 Isupdate; + SF_PDT_PARAM_CFG_S *pstParam = pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; +// SF_PARA_TIME_S stnowtime = {0}; +// SF_PARA_TIME_S stnowtime1 = {0}; + + MLOGD("GPSFlag:%d\n",pstParam->GPSFlag); + if(pstParam->GPSFlag == 0) + return SF_SUCCESS; +// ret = sf_4G_http_config(pfnParam, 1, 1); +// SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); + +// ret = sf_4G_gps_greendate_Get(pfnParam,&stnowtime); +// SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); + +// memcpy(&stnowtime1,&stnowtime,sizeof(SF_PARA_TIME_S)); + ret = sf_4G_gps_Isupdate(pfnParam,&Isupdate,&pStaticParam->httpTime,5); + SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); + + SLOGD("Isupdate = %d\n",Isupdate); + pstParam->GPSMapeUpdateFlag = Isupdate; + if(Isupdate == 1) + { + ret = sf_4G_gps_search(pfnParam,&pStaticParam->httpTime,0); + SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); + + } + ret = sf_4G_gps_preconfig(pfnParam); + SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); + + + + return ret; +} +SINT32 app_gps_info_get(SF_FN_PARAM_S *pfnParam) +{ + SINT16 ret = SF_SUCCESS; + SF_PDT_PARAM_CFG_S *pstParam = pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + MLOGD("GPSFlag:%d\n",pstParam->GPSFlag); + + pstParam->GPSMapeUpdateFlag = 0; + + if(pstParam->GPSFlag == 0) + return SF_SUCCESS; + + ret = sf_4G_gps_search_result(pfnParam); + if(ret == SF_SUCCESS) { +// pstParam->ParaSync = 1; + pStaticParam->GPSInfoGetFailed = 0; + + } + else + { + pStaticParam->GPSInfoGetFailed++;/* how to sure sequence or no sequence failed Added by MaxLi 2022/06/17--10:42:9*/ + if(pStaticParam->GPSInfoGetFailed < 5) + { +// pstParam->GPSWaitRestartFlag = 1; + } + + } + pstParam->ParaSync = 1; + return SF_SUCCESS; + +} +SINT32 app_gps_anti_theft(SF_FN_PARAM_S *pfnParam) +{ + SINT32 ret = SF_SUCCESS; +// UINT8 Isupdate; + SF_PDT_PARAM_CFG_S *pstParam = pfnParam->pstParam; +// SF_PARA_TIME_S stnowtime = {0}; + + + MLOGD("GPSFlag:%d\n",pstParam->GPSFlag); + MLOGD("GPSAntitheftFlag:%d\n",pstParam->GPSAntitheftFlag); + + if(pstParam->GPSFlag == 0) + return SF_SUCCESS; + if((sf_poweron_type_get() != SF_MCU_STARTUP_TIMELAPSE && sf_poweron_type_get() != SF_MCU_STARTUP_PIR) \ + || (pstParam->GPSAntitheftFlag == 1)) + { + ret = app_gps_map_update(pfnParam); + } + else + { +// { +// ret = sf_4G_http_config(pfnParam, 1, 1); +// SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); +// +// ret = sf_4G_gps_greendate_Get(pfnParam,&stnowtime); +// SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); +// +// ret = sf_4G_gps_Isupdate(pfnParam,&Isupdate,&stnowtime,1); +// SF_APPCOMM_CHECK_RETURN(ret,SF_APP_ERROR_QIACT); +// +// MLOGD("Isupdate = %d\n",Isupdate); +// if(Isupdate == 1) +// { +// pstParam->GPSWaitRestartFlag = 2; +// } +// +// } + + } + return ret; + +} + +SINT32 app_server_querystatus(SF_CMD_TYPE_E enCmdType,SF_FN_PARAM_S *pfnParam,SF_VOID *Param) +{ + SINT16 s16Ret = SF_SUCCESS; + SF_DATA_ATTR_S stDatapacket = {0}; + switch(enCmdType) + { + case SF_CMD_LOGIN_IN: + s16Ret = sf_data_grouping_login(&stDatapacket, pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_login(&stDatapacket,pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,SF_FAILURE); + if(SF_TRUE == sf_sys_rtc_time_check(&rtcTime)) + sf_sys_rtc_time_set(&rtcTime); + else + sf_sys_rtc_time_reset(); + sf_sys_rtoscmd_set(LINUX2RTK_CMD_SET_RTCTIME, NULL); + break; + #if !defined(CFG_TRANSDATA_AT) + case SF_CMD_SYNC_CFG: + s16Ret = sf_data_grouping_sync_cfg(&stDatapacket, pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_sync_cfg(&stDatapacket, pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + #endif + case SF_CMD_REPORT_STATE: + MLOGE("NO PARAM EXCUTE!!!\n"); + break; + case SF_CMD_PHOTO_RESULT: + s16Ret = sf_data_grouping_fileresult(&stDatapacket, pfnParam,Param); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_fileresult(&stDatapacket); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + #if defined(CFG_TRANSDATA_AT) + case SF_CMD_QUERYPENDING_CMD: + s16Ret = sf_data_grouping_query_cmd(&stDatapacket); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_query_cmd(&stDatapacket); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + case SF_CMD_QUERYPENDING_PARAM: + s16Ret = sf_data_grouping_query_cmd_param(&stDatapacket); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_query_cmd_param(&stDatapacket,pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + case SF_CMD_REPORT_RESULT: + s16Ret = sf_data_grouping_cmd_report(&stDatapacket, pfnParam,(SF_FILE_ATTR_S *)Param); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_cmd_report(&stDatapacket); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + + break; + case SF_CMD_TRIGGER: + memset(&stDatapacket.databuf, '\0', SF_TTYUSB_RECV_MAX); + memcpy(&stDatapacket.databuf, &pfnParam->arrttyData, SF_TTYUSB_RECV_MAX); + s16Ret = sf_data_analysis_trigger(&stDatapacket,pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + case SF_CMD_DISCON_SEND: + s16Ret = sf_data_grouping_disconnection(&stDatapacket,(UINT8*)Param); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 0); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + case SF_CMD_QUERYPENDING_BIND_ACCOUNT: + s16Ret = sf_data_grouping_get_bind_account(&stDatapacket, pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_server_transferdata(&stDatapacket, pfnParam, 1); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_data_analysis_bind_account(&stDatapacket,pfnParam); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + #endif + case SF_CMD_DISCON_SEND: + s16Ret = sf_data_grouping_disconnection(&stDatapacket,(UINT8*)Param); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + s16Ret = sf_4G_acm_tcp_server_transferdata(&stDatapacket, pfnParam, 0); + SF_APPCOMM_CHECK_RETURN(s16Ret,s16Ret); + break; + default: + MLOGE("Unsupport Common ParamType[%d]\n\n",enCmdType); + return SF_FAILURE; + + } + return s16Ret; +} + +static SINT16 app_server_Iskeepconnect(SF_FN_PARAM_S *pfnParam,UINT8 GprsMode) +{ + SINT16 s32ret = SF_SUCCESS; + if(GprsMode < 10) + { + + + UINT8 bIsKeepConnect = 1; + s32ret = app_server_querystatus(SF_CMD_DISCON_SEND,pfnParam,&bIsKeepConnect); + sf_4G_qsclk_set(pfnParam); + + } + else + { + UINT8 bIsKeepConnect = 0; + s32ret = app_server_querystatus(SF_CMD_DISCON_SEND,pfnParam,&bIsKeepConnect); + s32ret |= sf_4G_acm_tcp_server_close(pfnParam); + + } + return s32ret; +} +static SINT32 sf_file_sub_send(SF_FN_PARAM_S *pfnParam, SF_REPORT_FILE_ATTR_S *pReportFileAttr ) +{ + SINT16 ret = 0; + //UINT8 tryModuleReboot = 0; + SF_FILE_ATTR_S stfileAttr = { 0 }; + UINT8 sendFileTotal = 0; + UINT8 sendJpegCnt = 0; + //UINT16 sendSuccessFlag = 0; + SF_PDT_PARAM_STATISTICS_S *pStatisParam = pfnParam->pstaticParam; + + pStatisParam->SendDailyOriginalCnt++; + pStatisParam->SendDailyCnt++; + sendFileTotal = pReportFileAttr->filecnt; + + SLOGD("filecnt:%d\n", pReportFileAttr->filecnt); + SLOGD("[0]enFileTye:%d, SubFileName:%s\n", pReportFileAttr->stSendFileAttr[0].enFileTye, pReportFileAttr->stSendFileAttr[0].SubFileName); + for(sendJpegCnt = 0; sendJpegCnt < sendFileTotal; sendJpegCnt++) + { + ret = sf_file_subscribe_check(&stfileAttr, &pReportFileAttr->stSendFileAttr[sendJpegCnt]); + if(ret != SF_SUCCESS) { + pReportFileAttr->stSendFileAttr[sendJpegCnt].SendRet = ret; + memset(pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileName, '\0', sizeof(pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileName)); + pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileSize = 0; + ret = SF_SUCCESS; + continue; + } + sf_mcu_wdg_set(5); + ret = app_file_upload(&stfileAttr, pfnParam); + if(ret == SF_SUCCESS) { + pStatisParam->SendSuccessOriginalCnt++; + } + memset(pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileName, '\0', sizeof(pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileName)); + sprintf(pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileName, "%s", stfileAttr.thumbfileName); + pReportFileAttr->stSendFileAttr[sendJpegCnt].enFileTye = stfileAttr.enFileTye; + pReportFileAttr->stSendFileAttr[sendJpegCnt].SendFileSize = stfileAttr.thumbfileSize; + pReportFileAttr->stSendFileAttr[sendJpegCnt].SendRet = ret; + + } + + SLOGD("SendDailyCnt:%d\n", pStatisParam->SendDailyCnt); + SLOGD("SendSuccessThumbCnt:%d\n", pStatisParam->SendSuccessOriginalCnt); + return ret; +} +static SINT32 app_upgrade_ota_execute(void) +{ + SINT32 s32ret = SF_SUCCESS; + + + SF_RTOSINFO_S stRtosData = {0}; + sf_sys_rtosdata_get(&stRtosData); + MLOGI("bat:%d\n", stRtosData.BatPer); + if(stRtosData.BatPer < 40) { + SLOGE("Battery capacity is too low\n"); + goto _ERROR_; + } + if(!(sf_sd_status_get() == SF_SD_OK || sf_sd_status_get() == SF_SD_FULL)) { + SLOGE("SD is not exsited ,please check it !!!"); + goto _ERROR_; + } + s32ret = sf_upgrade_ota_init(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + + s32ret = sf_upgrade_ota_download(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + s32ret = sf_upgrade_ota_filecheck(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + s32ret = sf_upgrade_ota_reset(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + s32ret = sf_upgrade_ota_param_bak(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + s32ret = sf_upgrade_ota_env_set(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + sleep(2); + + s32ret = sf_upgrade_ota_deinit(); + if(s32ret != SF_SUCCESS) { + goto _ERROR_; + } + sf_mcu_wdg_off(); + sleep(2); + +// if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + { + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = SF_POWEROFF_SYNC_PARAM; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + + return s32ret; +_ERROR_: + sf_upgrade_status_set(SF_UPGRADE_FAIL); + if(!app_upgrade_ota_restore_IsRun()) + app_upgrade_ota_restore_start(); + return SF_SUCCESS; + +} + SINT32 app_file_subscrible_check(SF_REPORT_FILE_ATTR_S *pDtsReportFileAttr,SF_REPORT_FILE_ATTR_S *pSrcReportFileAttr) +{ + SINT8 srcdex = 0; + SINT8 dtsdex = 0; + SF_REPORT_FILE_ATTR_S stReportFileAttr = {0}; + + memset(&stReportFileAttr, 0, sizeof(SF_REPORT_FILE_ATTR_S)); + + for( dtsdex = 0; dtsdex < pDtsReportFileAttr->filecnt; dtsdex++) { + for(srcdex = 0;srcdex filecnt;srcdex++) { + if(!strncmp(pSrcReportFileAttr->stSendFileAttr[srcdex].SubFileName+14, \ + pDtsReportFileAttr->stSendFileAttr[dtsdex].SubFileName+14,12)) { + pDtsReportFileAttr->stSendFileAttr[dtsdex].SameFlag = 1; + } + } + if(pDtsReportFileAttr->stSendFileAttr[dtsdex].SameFlag == 1) + continue; + memcpy(&stReportFileAttr.stSendFileAttr[stReportFileAttr.filecnt], + &pDtsReportFileAttr->stSendFileAttr[dtsdex],sizeof(SF_SEND_FILE_ATTR_S)); + MLOGI("filecnt:%d,filetype:%d,main:[%s],sub:[%s]\n",\ + stReportFileAttr.filecnt,\ + stReportFileAttr.stSendFileAttr[stReportFileAttr.filecnt].enFileTye,\ + stReportFileAttr.stSendFileAttr[stReportFileAttr.filecnt].SubFileName,\ + stReportFileAttr.stSendFileAttr[stReportFileAttr.filecnt].SendFileName); + stReportFileAttr.filecnt += 1; + } + + memset(sf_get_sub_report_file_attr(), 0, sizeof(SF_REPORT_FILE_ATTR_S)); + memcpy(sf_get_sub_report_file_attr(),&stReportFileAttr, sizeof(SF_REPORT_FILE_ATTR_S)); + + return SF_SUCCESS; +} + +static SINT32 app_file_subscrible_execute(SF_FN_PARAM_S *pfnParam) +{ + SINT32 s32ret = SF_SUCCESS; + + MLOGD("Query HD pic or video\n"); + SF_REPORT_FILE_ATTR_S stReportFileAttr = {0}; + + do { + + MLOGD("filecnt:%d\n", sf_get_sub_report_file_attr()->filecnt); + memset(&stReportFileAttr, 0, sizeof(SF_REPORT_FILE_ATTR_S)); + + s32ret = sf_file_sub_send(pfnParam, sf_get_sub_report_file_attr()); + SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); + + memcpy(&stReportFileAttr,sf_get_sub_report_file_attr(), sizeof(SF_REPORT_FILE_ATTR_S)); + memset(sf_get_sub_report_file_attr(), 0, sizeof(SF_REPORT_FILE_ATTR_S)); + + s32ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_querystatus(SF_CMD_PHOTO_RESULT, pfnParam, &stReportFileAttr); + if(s32ret != SF_SUCCESS ) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam,SF_NULL); + SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_querystatus(SF_CMD_PHOTO_RESULT, pfnParam, &stReportFileAttr); +// s32ret = app_file_subscrible_check(sf_get_sub_report_file_attr(),&stReportFileAttr); + + } + s32ret = sf_4G_server_close(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); + + }while(sf_get_sub_report_file_attr()->filecnt > 0); + + return s32ret; +} +static SINT32 app_server_excute_cmd(SF_FN_PARAM_S *pfnParam) +{ + SINT32 ret = SF_SUCCESS; + SF_PDT_PARAM_CFG_S *pParam = (SF_PDT_PARAM_CFG_S*)pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pstaticParam = (SF_PDT_PARAM_STATISTICS_S*)pfnParam->pstaticParam; + + + if(sf_get_login_reponse()->synConfigCommand == 1) { + + pParam->ParaSync = 0; + + ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = app_server_querystatus(SF_CMD_SYNC_CFG, pfnParam, SF_NULL); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = sf_4G_server_close(pfnParam); + } + + if(pParam->ParaSync) { + ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = app_server_querystatus(SF_CMD_SYNC_CFG, pfnParam, SF_NULL); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = sf_4G_server_close(pfnParam); + } + + if(sf_get_sub_report_file_attr()->filecnt > 0 ) { + ret = app_file_subscrible_execute(pfnParam); + } + + if(sf_get_login_reponse()->otaCommand == 1) + { + ret = app_upgrade_ota_execute(); + sf_get_login_reponse()->otaCommand = 0; + } + + if(sf_get_login_reponse()->sdFormatCommand == 1) { + + if(sf_sd_status_get() != SF_SD_OUT) { + system("echo format > /tmp/cardv_fifo"); + sleep(2); + } + else { + sf_get_login_reponse()->sdFormatCommand = 0; + } + + ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + pParam->ParaSync = 1; + ret = app_server_querystatus(SF_CMD_SYNC_CFG, pfnParam, SF_NULL); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = sf_4G_server_close(pfnParam); + } + + if(sf_get_login_reponse()->devResetCommand == 1) { + + ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + pParam->ParaSync = 1; + ret = app_server_querystatus(SF_CMD_SYNC_CFG, pfnParam, SF_NULL); + SF_APPCOMM_CHECK_RETURN(ret, SF_APP_ERROR_NO_SUPPOET); + + ret = sf_4G_server_close(pfnParam); + + sf_all_param_reset(); + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = SF_POWEROFF_SYNC_PARAM; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + + return ret; +} + +static SINT32 app_realtime_resetlimited(SF_PDT_PARAM_STATISTICS_S *pstaticparam,UINT8 GprsMode) +{ + SINT16 s32ret = SF_SUCCESS; + if(sf_poweron_type_get() == SF_MCU_STARTUP_RESET) + pstaticparam->u8ResetLimited++; + + SLOGD("u8ResetLimited:%x\n", pstaticparam->u8ResetLimited); + return s32ret; +} + +static SINT16 app_http_IsAuthenrequst(SF_FN_PARAM_S *pfnParam) +{ + SINT16 s32ret = SF_SUCCESS; + SF_CHAR tempIccic[22] = { 0 }; + SF_PDT_PARAM_STATISTICS_S *pstaticparam = (SF_PDT_PARAM_STATISTICS_S *)pfnParam->pstaticParam; + sf_4G_iccid_get(tempIccic,pfnParam); + MLOGD("Sim changed. old:%s, new:%s\n", pstaticparam->SimID, tempIccic); + if(!(strstr(pstaticparam->SimID, tempIccic))||pstaticparam->u8ResetLimited > 3 || pstaticparam->AcmIP[0] == '\0') + { + pstaticparam->u8ResetLimited = 0; +// s32ret = sf_4G_http_config(pfnParam, 1, 1); + s32ret |= sf_4G_http_authenrequst(pfnParam); + } + return s32ret; +} + +SINT16 sf_send_pic_num_check(void) +{ + static UINT8 doFirst = 1; + SF_PARA_TIME_S date; + SF_PDT_PARAM_STATISTICS_S *sim_info_t2 = sf_statistics_param_get(); + SF_PDT_PARAM_CFG_S *sim_info_t = sf_customer_param_get(); + + sf_sys_rtc_time_get(&date); + MLOGD("rtc date: %04d/%02d/%02d %02d:%02d:%02d\n", date.Year, date.Mon, date.Day, date.Hour, date.Min, date.Sec); + MLOGD("reocrd date: %04d/%02d/%02d\n", sim_info_t2->Year, sim_info_t2->Mon, sim_info_t2->Day); + if(doFirst) // avoid called twice nearly 00:00 + { + doFirst = 0; + if((date.Year != sim_info_t2->Year) || (date.Mon != sim_info_t2->Mon) || (date.Day != sim_info_t2->Day)) + { + MLOGD("new day, refresh counter!\n"); + sim_info_t2->SendPicDayCnt = 0; + + sim_info_t2->Year = date.Year; + sim_info_t2->Mon = date.Mon; + sim_info_t2->Day = date.Day; + } + } + + MLOGD("SendMaxNum:%d, SendPicDayCnt:%d\n",sim_info_t->SendMaxNum, sim_info_t2->SendPicDayCnt); + if(sim_info_t->SendMaxNum == 0)/* unlimit*/ + { + sim_info_t2->Year = date.Year; + sim_info_t2->Mon = date.Mon; + sim_info_t2->Day = date.Day; + return SF_SUCCESS; + } + else + { + if(sim_info_t2->SendPicDayCnt SendMaxNum) + { + return SF_SUCCESS; + } + else if((sf_poweron_type_get() == SF_MCU_STARTUP_PIR) || (sf_poweron_type_get() == SF_MCU_STARTUP_TIMELAPSE)) + { + return SF_FAILURE; + } + } +} + +SINT32 app_file_send_check( SF_PDT_PARAM_STATISTICS_S *pstaticparam) +{ + SINT16 ret = 0; + + if(!sf_4G_sim_IsInsert()) + return SF_FAILURE; + MLOGI("Apn = [%s]\n,WebIP = [%s]\n,AcmIP = [%s]\n",pstaticparam->ApnGPRS,pstaticparam->WebIP,pstaticparam->AcmIP); + if((pstaticparam->ApnGPRS[0] != '\0')&& \ + (pstaticparam->WebIP[0] != '\0') && \ + (pstaticparam->AcmIP[0] != '\0')) + { + ret = sf_send_pic_num_check(); + return ret; + } + else + { + return SF_FAILURE; + } + +} + +static SINT16 sf_thumb_file_creat(void) +{ + + SF_CHAR sysCmd[256] = { 0 }; + SF_CHAR dirKeyStr[4] = { 0 }; + SF_CHAR fileKeyStr[10] = { 0 }; + SF_CHAR filePathStr[128] = { 0 }; + SINT16 fileIndex = 0; + SF_SRCFILE_ATTR_S* fileCfg = sf_file_thumb_cfg_get(); + + for(fileIndex = 0; fileIndex < fileCfg->filecnt; fileIndex++) + { + if(strstr(fileCfg->stfileattr[fileIndex].thumbfileName, SF_DCF_EXT_PHOTO)) + { + strncpy(dirKeyStr, fileCfg->stfileattr[fileIndex].thumbfileName + 1, 3); + strncpy(fileKeyStr, fileCfg->stfileattr[fileIndex].thumbfileName + 4, 8); + MLOGD("dirKeyStr:%s, fileKeyStr:%s\n", dirKeyStr, fileKeyStr); + sprintf(filePathStr, "%s%s/%s%s/%s%s", SF_SD_ROOT, SF_DCF_ROOT_DIR_NAME, dirKeyStr, SF_DCF_DIR_NAME_SUFFIX, SF_DCF_FILE_NAME_PREFIX, fileKeyStr); + MLOGD("fileKeyStr:%s\n", filePathStr); + //check if pic exist + if(sf_file_IsExsit(filePathStr) == SF_TRUE) + { + sprintf(sysCmd, "/customer/bin/ffmpeg -i %s -v quiet -y -s 640*360 %s", filePathStr, fileCfg->stfileattr[fileIndex].thumbfilePath); + MLOGD("[%s,%d]cmd: %s\n", __FUNCTION__, __LINE__, sysCmd); + system(sysCmd); + break; + } + } + } + + return SF_SUCCESS; +} + + +SINT16 app_file_upload(SF_FILE_ATTR_S *pstFileAttr, SF_FN_PARAM_S *pfnParam) +{ + SINT16 s32ret = SF_FAILURE; + SINT32 fileSize = 0; + SF_PDT_PARAM_STATISTICS_S *sfParam = pfnParam->pstaticParam; + +// if(sf_data_transfer_mode_get() != SF_UPLOAD_AMZ) { +// MLOGE("file transfer mode [%d] is SF_UPLOAD_AMZ\n",sf_data_transfer_mode_get()); +// SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_NO_SUPPOET); +// } + s32ret = app_http_time_by_timezone_set(); + + s32ret = sf_file_http_header_add(pstFileAttr, sfParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_WRITE); + + s32ret = sf_file_txt_fill(pstFileAttr); + if(s32ret != SF_SUCCESS) + sf_file_remove(pstFileAttr->txtfilePath); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_WRITE); + + s32ret = sf_4G_file_transfer(pstFileAttr->txtfilePath, &fileSize, pstFileAttr->enFileTye); + if(s32ret == SF_FAILURE) + { + SLOGE("upload file to 4G module fail!\n"); + sf_file_remove(pstFileAttr->txtfilePath); + return SF_APP_ERROR_FILE_SEND; + } + + s32ret = sf_4G_http_pushfile(pstFileAttr, pfnParam); + s32ret |= sf_file_remove(pstFileAttr->txtfilePath); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_FILE_SEND); + SLOGD("HTTP UPLOAD Complete.s32ret=%d\n", s32ret); + + return s32ret; +} + +static SINT16 app_file_thumbsend(SF_FN_PARAM_S *pfnParam) +{ + SINT16 fileIndex = 0; + SINT16 s32ret = SF_SUCCESS; + SINT16 startMode = 0; + + SF_SRCFILE_ATTR_S* pfileCfg = sf_file_thumb_cfg_get(); + + SF_PDT_PARAM_CFG_S *pCustomerParam = (SF_PDT_PARAM_CFG_S*)pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = (SF_PDT_PARAM_STATISTICS_S*)pfnParam->pstaticParam; + #if !defined(CFG_TRANSDATA_AT) + SF_REPORT_FILE_ATTR_S *pThmReportFileAttr = sf_get_thm_report_file_attr(); + pThmReportFileAttr->filecnt = 0; + #endif + startMode = sf_poweron_type_get(); + + SF_COMM_CHECK_POINTER(pfileCfg,SF_FAILURE); + + /*if no pic,return*/ + if(pfileCfg->filecnt == 0) + { + SLOGE("fileCnt:[%d]\n", pfileCfg->filecnt); + return SF_FAILURE; + } + + MLOGI("fileCnt:[%d]\n", pfileCfg->filecnt); + for(fileIndex = 0; fileIndex < pfileCfg->filecnt; fileIndex++) + { + SLOGD("SendMaxNum:[%d],fileIndex:[%d]\n", pCustomerParam->SendMaxNum,fileIndex); + SLOGI("fileCnt:[%d]\n", pfileCfg->filecnt); + if((startMode == SF_MCU_STARTUP_TIMELAPSE) || (startMode == SF_MCU_STARTUP_PIR)) + { + if((pCustomerParam->SendMaxNum > 0) && \ + (pStaticParam->SendPicDayCnt >= pCustomerParam->SendMaxNum)) + { + MLOGW("SendMaxNum:[%d] is equal to SendPicDayCnt[%d]\n", pCustomerParam->SendMaxNum, pStaticParam->SendPicDayCnt); + if(pThmReportFileAttr->filecnt <= 0) + return SF_SUCCESS; + break; + } + } + + switch(startMode) + { + case SF_MCU_STARTUP_OFF: + break; + case SF_MCU_STARTUP_ONKEY: + if(pCustomerParam->CamMode != SF_CAMMODE_PV) + fileIndex = pfileCfg->filecnt - 1;//if set up mode,only send the latest pic + break; + + case SF_MCU_STARTUP_RING: + case SF_MCU_STARTUP_TIMELAPSE: + case SF_MCU_STARTUP_PIR: + case SF_MCU_STARTUP_NORMAL: + case SF_MCU_STARTUP_WARNING: + case SF_MCU_STARTUP_SERVER: + case SF_MCU_STARTUP_DP: + case SF_MCU_STARTUP_USB: + case SF_MCU_STARTUP_RESET: + case SF_MCU_STARTUP_SYN_PARAM: + case SF_MCU_STARTUP_BATCH_SEND: + MLOGI("CamMode :%d\n",pCustomerParam->CamMode); + if(pCustomerParam->CamMode == SF_CAMMODE_PIC) + { + if(pCustomerParam->Multishot > 1) + pfileCfg->filecnt = 1; + } + if(pCustomerParam->CamMode == SF_CAMMODE_PV) + { + fileIndex = fileIndex < 1 ? fileIndex : pCustomerParam->Multishot; + pfileCfg->filecnt = 2; + } + break; + default: + break; + } + + s32ret |= app_file_upload(&pfileCfg->stfileattr[fileIndex],pfnParam); + if(s32ret != SF_SUCCESS) { + sf_file_remove(pfileCfg->stfileattr[fileIndex].thumbfilePath); + continue; + } + + { + pStaticParam->SendPicDayCnt++; + pStaticParam->SendSuccessThumbCnt++; + SLOGD("SendPicDayCnt:%d\n", pStaticParam->SendPicDayCnt); + + /*file send success, copy file info to report file cfg*/ + memset(pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].SendFileName, '\0', sizeof(pThmReportFileAttr->stSendFileAttr[0].SendFileName)); + memset(pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].SubFileName, '\0', sizeof(pThmReportFileAttr->stSendFileAttr[0].SubFileName)); + + sprintf(pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].SendFileName, "%s", pfileCfg->stfileattr[fileIndex].thumbfileName); + pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].enFileTye = pfileCfg->stfileattr[fileIndex].enFileTye; + pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].SendFileSize = pfileCfg->stfileattr[fileIndex].thumbfileSize; + pThmReportFileAttr->stSendFileAttr[pThmReportFileAttr->filecnt].SendRet = 0; + pThmReportFileAttr->filecnt += 1; + } + sf_file_remove(pfileCfg->stfileattr[fileIndex].thumbfilePath); + } + + if(pThmReportFileAttr->filecnt <= 0) { + sf_file_thumb_cfg_clear(); + return s32ret; + } + + s32ret = sf_4G_server_open(pfnParam); + if(s32ret != SF_SUCCESS) { + SLOGE("Error Code: [0x%08X]\n\n", s32ret); + goto exception_handling; + } + + s32ret = app_server_querystatus(SF_CMD_PHOTO_RESULT, pfnParam, pThmReportFileAttr); + if(s32ret != SF_SUCCESS) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN,pfnParam,SF_NULL); + if(s32ret != SF_SUCCESS) { + MLOGE("Error Code: [0x%08X]\n\n", s32ret); + goto exception_handling; + } + if(pStaticParam->PicPlan == 1) { + s32ret = app_server_querystatus(SF_CMD_PHOTO_RESULT, pfnParam, pThmReportFileAttr); + if(s32ret != SF_SUCCESS) { + MLOGE("Error Code: [0x%08X]\n\n", s32ret); + goto exception_handling; + } + } + } + + pThmReportFileAttr->filecnt = 0; + sf_file_thumb_cfg_clear(); + +exception_handling: + s32ret = sf_4G_server_close(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_NO_SUPPOET); + + return s32ret; + +} +static SINT16 app_file_transfer_Error_return_server(SF_FN_PARAM_S *pfnParam) +{ + SINT32 s32ret = 0; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_ACCOUNT; + stMessageBuf.arg3 = LED_TYPE_RED; + sf_com_message_send_to_app(&stMessageBuf); + + s32ret = sf_4G_server_close(pfnParam); + sf_4G_status_set(SF_4G_FREE); + + stMessageBuf.arg1 = (sf_poweron_type_get() == SF_MCU_STARTUP_RING)?SF_POWEROFF_SYNC_PARAM:SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + + return s32ret; +} + +static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam) +{ + SINT16 s32ret = 0; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + SF_PDT_PARAM_CFG_S *pCustomerParam =pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + if(sf_usb_IsInsert()) + return SF_SUCCESS; + + sf_4G_status_set(SF_4G_SENDING); + SLOGD("STARTUP:[%d]\n",sf_poweron_type_get()); + switch(sf_poweron_type_get()) + { + case SF_MCU_STARTUP_OFF: + break; + case SF_MCU_STARTUP_ONKEY: + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_ACCOUNT; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + +// stMessageBuf.cmdId = CMD_LED; +// stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; +// stMessageBuf.arg2 = LED_GROUP_SIGNAL; +// stMessageBuf.arg3 = LED_TYPE_GREEN; +// sf_com_message_send_to_app(&stMessageBuf); + + sf_thumb_file_creat(); + if(pStaticParam->PicPlan == 1) + s32ret = app_file_thumbsend(pfnParam); + + + s32ret |= app_server_excute_cmd(pfnParam); + + if(s32ret != SF_SUCCESS || pStaticParam->PicPlan != 1) { + stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; + stMessageBuf.arg3 = LED_TYPE_RED; + } + else { + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + stMessageBuf.arg3 = LED_TYPE_GREEN; + } + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg2 = LED_GROUP_ACCOUNT; + sf_com_message_send_to_app(&stMessageBuf); + +// UINT8 signalLevel = 0; +// sf_4G_signal_level_get(sf_statistics_param_get()->netGeneration,sf_statistics_param_get()->SimSignal,&signalLevel); +// MLOGI("signalLevel = %d\n",signalLevel); +// switch(signalLevel) +// { +// case 2: +// stMessageBuf.arg3 = LED_TYPE_RED; +// break; +// case 3: +// stMessageBuf.arg3 = LED_TYPE_YELLOW; +// break; +// case 4: +// stMessageBuf.arg3 = LED_TYPE_GREEN; +// break; +// default: +// stMessageBuf.arg3 = LED_TYPE_RED; +// break; +// } +// stMessageBuf.cmdId = CMD_LED; +// stMessageBuf.arg1 = LED_STATUS_HOLD_ON; +// stMessageBuf.arg2 = LED_GROUP_SIGNAL; +// sf_com_message_send_to_app(&stMessageBuf); + break; + + case SF_MCU_STARTUP_TIMELAPSE: + case SF_MCU_STARTUP_PIR: + if(pStaticParam->PicPlan == 0) { + s32ret = sf_4G_server_open(pfnParam); + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN,pfnParam,SF_NULL); + s32ret = sf_4G_server_close(pfnParam); + + } + if(pStaticParam->PicPlan == 1) { + s32ret = app_file_thumbsend(pfnParam); +// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + } + + s32ret |= app_server_excute_cmd(pfnParam); +// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + if(pStaticParam->AliveIp[0] !='\0') { + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + } + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + + break; + case SF_MCU_STARTUP_NORMAL: + case SF_MCU_STARTUP_RING: + sf_thumb_file_creat(); + if(pStaticParam->PicPlan == 1) + s32ret = app_file_thumbsend(pfnParam); + + s32ret |= app_server_excute_cmd(pfnParam); + + if(pStaticParam->AliveIp[0] !='\0') { + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + } + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + break; + case SF_MCU_STARTUP_WARNING: + case SF_MCU_STARTUP_SERVER: + case SF_MCU_STARTUP_DP: + case SF_MCU_STARTUP_USB: + case SF_MCU_STARTUP_RESET: + case SF_MCU_STARTUP_SYN_PARAM: + case SF_MCU_STARTUP_BATCH_SEND: + + break; + default: + break; + } + SLOGD("s32ret:%x\n", s32ret); + sf_4G_status_set(SF_4G_FREE); + return s32ret; + +} + +SINT32 app_FileSend_thread(void) +{ + SINT16 s32ret = 0; + SF_FN_PARAM_S stpfncallback = { 0 }; + stpfncallback.pstParam = sf_customer_param_get(); + stpfncallback.pstaticParam = sf_statistics_param_get(); + stpfncallback.pfn_AT_instruction_exit = app_disconnect_4g_module; + + pthread_detach(pthread_self()); + + s32ret = app_file_send_check(stpfncallback.pstaticParam); + if(s32ret != SF_SUCCESS) + { + MLOGE("ERROR:%#x\n", s32ret); + ThumbSend.IsRun = 0; + return s32ret; + } + + s32ret = app_file_transfer(&stpfncallback); + if(s32ret == SF_APP_ERROR_NO_SUPPOET) + app_file_transfer_Error_return_server(&stpfncallback); + ThumbSend.IsRun = 0; + return s32ret; + + +} +static SINT32 app_Register_Net_Error_return_setup(SF_FN_PARAM_S *pfnParam,SINT32 s32ret) +{ + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + + SLOGD("s32ret:%x\n", s32ret); + SLOGD("bind flag:%x\n", pStaticParam->bindFlag); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + { + if(SF_TRUE == sf_sys_rtc_time_check(&rtcTime)) + { + sf_sys_rtc_time_set(&rtcTime); + } + + app_led_net_reg_stop(s32ret); + } + pStaticParam->u8ResetLimited = 0; + sf_4G_status_set(SF_4G_FREE); + + return SF_SUCCESS; + +} +static SINT32 app_Register_Net_Error_return_init(SF_FN_PARAM_S *pfnParam) +{ + SF_PDT_PARAM_CFG_S *pCustomerParam =pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + if(sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) + { + if(pCustomerParam->GprsMode == 1) { + app_realtime_resetlimited(pStaticParam, pCustomerParam->GprsMode); + stMessageBuf.arg1 = (pStaticParam->u8ResetLimited < 3 )?SF_POWEROFF_SYNC_PARAM:SF_POWEROFF_NOT; + } + else { + stMessageBuf.arg1 = SF_POWEROFF_NOT; + } + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + + RegisterNetTskParam.IsRun = 0; + return SF_SUCCESS; + +} +static SINT32 app_Register_Net_Error_return_server(SF_FN_PARAM_S *pfnParam,SINT32 s32ret) +{ + SF_PDT_PARAM_CFG_S *pCustomerParam = pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + s32ret |= sf_4G_server_close(pfnParam); + SLOGE("s32ret:%#x\n", s32ret); + SLOGD("bind flag:%x\n", pStaticParam->bindFlag); + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + { + if(SF_TRUE == sf_sys_rtc_time_check(&rtcTime)) + { + sf_sys_rtc_time_set(&rtcTime); + sf_sys_rtoscmd_set(4, NULL); //SET RTC time to rtos + } + + app_led_net_reg_stop(s32ret); + } + else + { + + app_realtime_resetlimited(pStaticParam, pCustomerParam->GprsMode); + stMessageBuf.arg1 = (pStaticParam->u8ResetLimited < 3 )?SF_POWEROFF_SYNC_PARAM:SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + RegisterNetTskParam.IsRun = 0; + + sf_4G_status_set(SF_4G_FREE); + return SF_SUCCESS; + +} +static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) +{ + SINT32 s32ret = 0; + UINT8 timeCnt = 0; + //UINT8 bIsKeepConnect = 0; + //SF_CHAR version[12] = {0}; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + SF_PDT_PARAM_CFG_S *pCustomerParam = pfnParam->pstParam; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = pfnParam->pstaticParam; + + sf_log_Level_set(SF_LOG_LEVEL_DEBUG); + + if(sf_usb_IsInsert()) + return SF_SUCCESS; + + sf_4G_status_set(SF_4G_SEARCHING); + + switch(sf_poweron_type_get()) + { + case SF_MCU_STARTUP_OFF: + break; + + case SF_MCU_STARTUP_ONKEY: + + #ifdef SF_HARDWARE_TEST + break; + #endif + + #ifdef SF_GPS_TEST + sf_commu_set_mcu(19, 1); + sf_commu_set_mcu(20 ,1); + sf_commu_set_mcu(84 ,1); + #endif + app_led_net_reg_start(); + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,s32ret); + + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,s32ret); + +// sf_sys_software_version_get(version); +// s32ret = sf_qrcode_create(pStaticParam->IMEI,pStaticParam->SimID ,version); + + s32ret = sf_4G_register_net_manual(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,s32ret); + + #ifdef SF_GPS_TEST + s32ret = app_gps_map_update(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_gps_info_get(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + break; + #endif + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + + if(pStaticParam->AcmIP[0] == '\0') + { + s32ret = sf_4G_http_authenrequst(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + } + + s32ret = sf_4G_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam,SF_NULL); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = sf_4G_server_close(pfnParam); + + s32ret = app_server_excute_cmd(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + break; + + case SF_MCU_STARTUP_NORMAL: + break; + + case SF_MCU_STARTUP_RING:/**/ + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + break; + #endif + + s32ret = sf_4G_sim_IsInsert(); + if(!s32ret) + { + timeCnt = 0; + while((sf_sd_status_get() == SF_SD_BUTT) && (timeCnt < 5)) + { + usleep(1000*1000); + timeCnt++; + } + + SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_REQUEST); + } + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + #if SF_QLOG_ENABLE + if(pCustomerParam->DebugMode == 1) + app_Qlog_procress(); + #endif + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_register_net_auto(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + + s32ret = sf_4G_server_open(pfnParam); + if(s32ret == SF_SUCCESS) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam, SF_NULL); + s32ret = sf_4G_server_close(pfnParam); + } + + LOGIN_ACM_RESPONSE_S* PLoginReponse = sf_get_login_reponse(); + if(PLoginReponse->getPic == 1) + { + stMessageBuf.cmdId = CMD_KEY; + stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; + stMessageBuf.arg2 = SF_KEY_PIN_SYNC; + sf_com_message_send_to_app(&stMessageBuf); + } + else + { + s32ret = app_server_excute_cmd(pfnParam); + + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + + break; + + case SF_MCU_STARTUP_TIMELAPSE: + case SF_MCU_STARTUP_PIR: + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + break; + #endif + + + s32ret = sf_4G_sim_IsInsert(); + if(!s32ret) { + SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_REQUEST); + } + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + #if SF_QLOG_ENABLE + if(pCustomerParam->DebugMode == 1) + app_Qlog_procress(); + #endif + + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_register_net_auto(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + sf_thumb_file_creat(); + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + + s32ret = app_http_IsAuthenrequst(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = app_FileSend_thread(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + break; + case SF_MCU_STARTUP_WARNING: + + break; + case SF_MCU_STARTUP_SERVER: + + break; + case SF_MCU_STARTUP_DP: + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + break; + #endif + pCustomerParam->GPSEnterResetModeFlag = 1; + pCustomerParam->GPSWaitRestartFlag = 0; + s32ret = sf_4G_sim_IsInsert(); + if(!s32ret) + { + timeCnt = 0; + while((sf_sd_status_get() == SF_SD_BUTT) && (timeCnt < 5)) + { + usleep(1000*1000); + timeCnt++; + } + + SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_REQUEST); + } + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + #if SF_QLOG_ENABLE + if(pCustomerParam->DebugMode == 1) + app_Qlog_procress(); + #endif + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_register_net_auto(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + pStaticParam->DailyReportAgain = pStaticParam->DailyReportAgain?0:1; + MLOGD("DailyReportAgain:%d\n", pStaticParam->DailyReportAgain); + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + + s32ret = app_http_IsAuthenrequst(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_server_open(pfnParam); + if(s32ret == SF_SUCCESS) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam, SF_NULL); + s32ret = sf_4G_server_close(pfnParam); + } + +// s32ret = app_server_excute_cmd(pfnParam); +// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_gps_anti_theft(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + break; + case SF_MCU_STARTUP_USB: + + break; + case SF_MCU_STARTUP_RESET: + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + break; + #endif + pCustomerParam->GPSEnterResetModeFlag = 1; + s32ret = sf_4G_sim_IsInsert(); + if(!s32ret) + { + timeCnt = 0; + while((sf_sd_status_get() == SF_SD_BUTT) && (timeCnt < 5)) + { + usleep(1000*1000); + timeCnt++; + } + + SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_REQUEST); + } + #ifdef SF_GPS_TEST + sf_commu_set_mcu(19, 1); + sf_commu_set_mcu(20 ,1); + sf_commu_set_mcu(84 ,1); + #endif + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + #if SF_QLOG_ENABLE + if(pCustomerParam->DebugMode == 1) + app_Qlog_procress(); + #endif + + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_register_net_manual(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + + #ifdef SF_GPS_TEST + s32ret = app_gps_map_update(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_gps_info_get(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + break; + #endif + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + if(pStaticParam->AcmIP[0] == '\0') { + s32ret = sf_4G_http_authenrequst(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + } + + s32ret = sf_4G_server_open(pfnParam); + if(s32ret == SF_SUCCESS) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam, SF_NULL); + s32ret = sf_4G_server_close(pfnParam); + } + +// s32ret = app_server_excute_cmd(pfnParam); +// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_gps_anti_theft(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + break; + case SF_MCU_STARTUP_SYN_PARAM: + #ifdef SF_HARDWARE_TEST + app_system_poweroff(SF_POWEROFF_NOT); + break; + #endif + pCustomerParam->GPSEnterResetModeFlag = 0; + s32ret = sf_4G_sim_IsInsert(); + if(!s32ret) { + SF_APPCOMM_CHECK_RETURN(SF_FAILURE,SF_APP_ERROR_REQUEST); + } + + s32ret = app_ttyusb_IsOpen(); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_sim_init(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_register_net_auto(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + sf_4G_usb_net_apn_cfg(pfnParam); + sf_USB_net_init(); + + s32ret = app_http_IsAuthenrequst(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = app_gps_info_get(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); + + s32ret = sf_4G_server_open(pfnParam); + if(s32ret == SF_SUCCESS) { + s32ret = app_server_querystatus(SF_CMD_LOGIN_IN, pfnParam, SF_NULL); + s32ret = sf_4G_server_close(pfnParam); + } + + s32ret = app_server_excute_cmd(pfnParam); + + s32ret = sf_4G_acm_tcp_server_open(pfnParam); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode); + SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); + + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + break; + case SF_MCU_STARTUP_BATCH_SEND: + + break; + default: + break; + } + + return s32ret; +} +void app_Register_Net_thread(void) +{ + SINT32 s32ret = 0; + SF_FN_PARAM_S stpfncallback = { 0 }; + stpfncallback.pstParam = sf_customer_param_get(); + stpfncallback.pstaticParam = sf_statistics_param_get(); + stpfncallback.pfn_AT_instruction_exit = app_disconnect_4g_module; + + pthread_detach(pthread_self()); + s32ret = app_Register_Net_startup_mode(&stpfncallback); + switch(s32ret) + { + case SF_APP_ERROR_REQUEST: + app_Register_Net_Error_return_init(&stpfncallback); + break; + case SF_APP_ERROR_NO_SUPPOET: + app_Register_Net_Error_return_server(&stpfncallback,s32ret); + break; + default: + app_Register_Net_Error_return_setup(&stpfncallback,s32ret); + break; + } + return; +} + +void app_FileSend_start(void) +{ + + MLOGI("ThumbSend.IsRun:%d\n", ThumbSend.IsRun); + if(!ThumbSend.IsRun) + { + pthread_create(&ThumbSend.TskId, NULL, (void*)app_FileSend_thread, NULL); + ThumbSend.IsRun = 1; + SF_MUTEX_INIT_LOCK(ThumbSend.mutexLock); + } +} + +SINT32 app_RegisterNet_start(void) +{ + MLOGD("RegisterNetTskParams.IsRun:%d\n", RegisterNetTskParam.IsRun); + if(!RegisterNetTskParam.IsRun) + { + pthread_create(&RegisterNetTskParam.TskId, NULL, (void*)app_Register_Net_thread, NULL); + RegisterNetTskParam.IsRun = 1; + SF_MUTEX_INIT_LOCK(RegisterNetTskParam.mutexLock); + } + return SF_SUCCESS; + +} +SINT32 app_t110(void) +{ + + SINT8 halvalue = 0; + SF_MUTEX_LOCK(GPIO_mutexLock); + sf_hal_gpio_init(SF_KEY_PIN_SYNC,GPIO_DIR_IN); + sf_hal_gpio_get(SF_KEY_PIN_SYNC,&halvalue); + SF_MUTEX_UNLOCK(GPIO_mutexLock); +// sf_hal_gpio_deinit(SF_KEY_PIN_SYNC); + MLOGI("halvalue: %d\n",halvalue); + if(halvalue == 0) + return SF_SUCCESS; + + app_RegisterNet_start(); + return SF_SUCCESS; + +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + diff --git a/code/application/source/sf_app/code/source/app/sf_system.c b/code/application/source/sf_app/code/source/app/sf_system.c new file mode 100755 index 000000000..fa0ab93a2 --- /dev/null +++ b/code/application/source/sf_app/code/source/app/sf_system.c @@ -0,0 +1,854 @@ +#include +#include +#include +#include +#include +#include + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sf_log.h" +#include "sf_module.h" +#include "sf_ledmng.h" +#include "sf_storeMng.h" +#include "sf_systemMng.h" +#include "sf_keymng.h" +#include "sf_otamng.h" + +#include "sf_dev_usb.h" +#include "sf_dev_other.h" +#include "sf_message_queue.h" +#include "sf_commu_mcu_reg.h" + +#include "sf_system.h" +#include "sf_device.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +static SINT32 AutoPowerOffTime = 0; +static SINT32 sfusbstatus = 0; +extern SF_PARA_TIME_S rtcTime; + + +SINT32 bUpdateEnble = 0; +SINT32 s32ThreeWaySwitch = 0; + +pthread_mutex_t Param_mutexLock; +pthread_mutex_t GPIO_mutexLock; + +SF_THREAD_S AutoPoweroffTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S BatMonitorTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S FunKeySwitchTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S UsbmodeTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S UpgradeRestoreTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S OtaUpgradeRestoreTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; + +SINT8 debugFlag = 0; + +void app_poweroff_time_clear(void) +{ + AutoPowerOffTime = 0; +} +static void* auto_poweroff_thread(void) +{ + SF_MESSAGE_BUF_S stMessageBuf = {0}; + while(AutoPoweroffTskCfg.IsRun) + { + + if(bUpdateEnble >= 1 && bUpdateEnble < 6) + { + bUpdateEnble++; + } + else if(bUpdateEnble >= 6) { + app_led_sd_status_return(); + bUpdateEnble = 0; + } + +// if(s32ThreeWaySwitch == 1) { +// app_pir_monitoring_stop(); +// sf_led_event_process(LED_STATUS_SLOWFLASH_ON,LED_GROUP_STATUS,LED_TYPE_GREEN); +// s32ThreeWaySwitch = 2; +// } +// else if(s32ThreeWaySwitch >= 2 && s32ThreeWaySwitch < 7) { +// s32ThreeWaySwitch++; +// } +// else if( s32ThreeWaySwitch >= 7) { +// app_led_all_status_set(LED_STATUS_HOLD_ON,LED_TYPE_OFF); +// app_system_poweroff(SF_POWEROFF_KEYON); +// s32ThreeWaySwitch = 0; +// } + + + if(debugFlag == 1){ + sleep(1); + continue; + } + if(debugFlag == 2) { + AutoPowerOffTime = 175; + debugFlag = 0; + continue; + } + + + if(AutoPowerOffTime < 180) + { + + UINT8 temp = 0; + temp = sf_4G_status_get(); + + + if((temp == SF_4G_SENDING) || (temp == SF_4G_SEARCHING)) + AutoPowerOffTime = 0; + else + AutoPowerOffTime++; + + + } + else if(AutoPowerOffTime == 180) + { + AutoPowerOffTime = 0; + if(sf_usb_IsInsert()) + continue; + + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) + { + app_pir_monitoring_stop(); + app_led_all_status_set(LED_STATUS_HOLD_ON,LED_TYPE_OFF); + + stMessageBuf.cmdId = CMD_LED; + + stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_STATUS; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + + sleep(5); + stMessageBuf.arg1 = SF_POWEROFF_AUTO; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + continue; + } + if(sf_upgrade_status_get() == SF_UPGRADE_FAIL) + { + stMessageBuf.arg1 = SF_POWEROFF_NOT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + continue; + } + + + } + sleep(1); + } + AutoPowerOffTime = 0; + + return NULL; +} +SINT8 sf_sys_battery_level_get(SINT32 batValue) +{ + if(batValue >= 90) + { + return SF_BATT_LEVEL_4; + } + else if(batValue >= 30) + { + return SF_BATT_LEVEL_3; + } + else if(batValue > 0) + { + return SF_BATT_LEVEL_2; + } + else + { + return SF_BATT_LEVEL_0; + } +} + +SINT32 app_auto_poweroff_start(void) +{ + SINT32 ret = SF_SUCCESS; + + if(AutoPoweroffTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&AutoPoweroffTskCfg.TskId, NULL, auto_poweroff_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + + AutoPoweroffTskCfg.IsRun = 1; + + return SF_SUCCESS; +} + +static void* battery_monitoring_thread(void) +{ + SINT32 batPercentVal = 1; + SINT32 lastbatPercentVal = 1; + UINT8 batLevel = 0; + static UINT16 lastBatLevel = 0; + + SF_RTOSINFO_S pstRtosData; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + SF_PDT_PARAM_STATISTICS_S *pStaticParam = sf_statistics_param_get(); + SF_PDT_PARAM_CFG_S* puiPara = sf_customer_param_get(); + + sleep(3); + + while(1) + { + + sf_sys_rtosdata_get(&pstRtosData); + batPercentVal = pstRtosData.BatPer; + pStaticParam->BatRemainCap = batPercentVal; + //SLOGI("batPercentVal = %d\n",batPercentVal); + if(batPercentVal == 0) + { + + if(sf_usb_IsInsert()) + return NULL; + //SLOGI("batPercentVal = %d,lastbatPercentVal = %d\n",batPercentVal,lastbatPercentVal); + // twice in a row below poweroff value, go to poweroff + if(lastbatPercentVal == 0) + { + if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY \ + && (pstRtosData.IsNight == 1) \ + && (puiPara->CamMode) \ + && (sf_cap_status_get() == 2)) + { + //batPercentVal = lastbatPer; + //sf_batteryRemain_percent_set((UINT8)batPercentVal); + //send stop record msg + stMessageBuf.cmdId = 0x0111; + sf_com_message_send_to_cardv(&stMessageBuf); + } + else + { + sleep(1); + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_QUICKFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_BAT; + stMessageBuf.arg3 = LED_TYPE_RED; + sf_com_message_send_to_app(&stMessageBuf); + + stMessageBuf.arg1 = SF_POWEROFF_LOW_BAT; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + while(1) + sleep(5); + + } + + } + else + { + lastbatPercentVal = batPercentVal; + } + } + else + { + batLevel = sf_sys_battery_level_get(batPercentVal); + if(batLevel != lastBatLevel) + { + lastBatLevel = batLevel; + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + stMessageBuf.arg2 = LED_GROUP_BAT; + switch(lastBatLevel) { + case SF_BATT_LEVEL_4: + stMessageBuf.arg3 = LED_TYPE_GREEN; + break; + + case SF_BATT_LEVEL_3: + stMessageBuf.arg3 = LED_TYPE_YELLOW; + break; + + case SF_BATT_LEVEL_2: + stMessageBuf.arg3 = LED_TYPE_RED; + break; + + case SF_BATT_LEVEL_0: + stMessageBuf.arg1 = LED_STATUS_QUICKFLASH_ON; + stMessageBuf.arg3 = LED_TYPE_RED; + break; + default: + break; + } + sf_com_message_send_to_app(&stMessageBuf); + } + } + + sleep(3); + } +} + +SINT32 app_batmonitoring_start(void) +{ + SINT32 ret = SF_SUCCESS; + + if(sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) + { + SLOGE("unsupport startup mode !!!\n"); + return SF_FAILURE; + } + if(BatMonitorTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&BatMonitorTskCfg.TskId, NULL, battery_monitoring_thread, NULL); + if(ret != SF_SUCCESS) + { MLOGD("thread creat fail!\n"); + return ret; + } + BatMonitorTskCfg.IsRun = 1; + return SF_SUCCESS; +} + +void* flash_poweroff_thread(void) +{ + UINT16 i = 0; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_SLOWFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_STATUS; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + while((i < 10) && (FunKeySwitchTskCfg.IsRun)) + { + usleep(500*1000); + i++; + } + + if(i == 10) { + stMessageBuf.arg1 = SF_POWEROFF_KEYON; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + + return NULL; +} +SINT32 app_flash_poweroff_start(void) +{ + SINT32 ret = SF_FAILURE; + if(FunKeySwitchTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&FunKeySwitchTskCfg.TskId, NULL, flash_poweroff_thread, NULL); + if(ret != SF_SUCCESS) + { MLOGD("thread creat fail!\n"); + return ret; + } + MLOGI("\n"); + FunKeySwitchTskCfg.IsRun = 1; + return SF_SUCCESS; + +} +SINT32 app_flash_poweroff_stop(void) +{ + SINT32 ret = 0; + + FunKeySwitchTskCfg.IsRun = 0; + MLOGD("sf_flash_poweroff_stop\n"); + ret = pthread_join(FunKeySwitchTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} + +SINT8 app_flash_poweroff_task_IsRun(void) +{ + return FunKeySwitchTskCfg.IsRun; +} +void* upgrade_restore_thread(void) +{ + UINT16 i = 0; + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_QUICKFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_SD; + stMessageBuf.arg3 = LED_TYPE_RED; + sf_com_message_send_to_app(&stMessageBuf); + + while(i < 5 && UpgradeRestoreTskCfg.IsRun) + { + sleep(1); + i++; + } + UpgradeRestoreTskCfg.IsRun = 0; + app_led_sd_status_return(); + + app_batmonitoring_start(); + app_RegisterNet_start(); + + return NULL; +} +SINT32 app_upgrade_restore_start(void) +{ + SINT32 ret = SF_FAILURE; + if(UpgradeRestoreTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&UpgradeRestoreTskCfg.TskId, NULL, upgrade_restore_thread, NULL); + if(ret != SF_SUCCESS) + { MLOGD("thread creat fail!\n"); + return ret; + } + UpgradeRestoreTskCfg.IsRun = 1; + return SF_SUCCESS; + +} +SINT32 app_upgrade_restore_stop(void) +{ + SINT32 ret = 0; + + UpgradeRestoreTskCfg.IsRun = 0; + MLOGD("sf_flash_poweroff_stop\n"); + ret = pthread_join(UpgradeRestoreTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} + +SINT8 app_upgrade_restore_IsRun(void) +{ + return UpgradeRestoreTskCfg.IsRun; +} + +void* upgrade_ota_restore_thread(void) +{ + UINT16 i = 0; + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_QUICKFLASH_ON; + stMessageBuf.arg2 = LED_GROUP_SD; + stMessageBuf.arg3 = LED_TYPE_RED; + sf_com_message_send_to_app(&stMessageBuf); + + while(i < 5 && OtaUpgradeRestoreTskCfg.IsRun) + { + sleep(1); + i++; + } + OtaUpgradeRestoreTskCfg.IsRun = 0; + app_led_sd_status_return(); + return NULL; +} +SINT32 app_upgrade_ota_restore_start(void) +{ + SINT32 ret = SF_FAILURE; + if(OtaUpgradeRestoreTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&OtaUpgradeRestoreTskCfg.TskId, NULL, upgrade_ota_restore_thread, NULL); + if(ret != SF_SUCCESS) + { MLOGD("thread creat fail!\n"); + return ret; + } + OtaUpgradeRestoreTskCfg.IsRun = 1; + return SF_SUCCESS; + +} +SINT32 app_upgrade_ota_restore_stop(void) +{ + SINT32 ret = 0; + + OtaUpgradeRestoreTskCfg.IsRun = 0; + MLOGD("sf_flash_poweroff_stop\n"); + ret = pthread_join(OtaUpgradeRestoreTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} + +SINT8 app_upgrade_ota_restore_IsRun(void) +{ + return OtaUpgradeRestoreTskCfg.IsRun; +} + +SINT32 app_funkey_switch_check_start(void) +{ + SINT32 ret = SF_FAILURE; + app_led_all_status_set(LED_STATUS_HOLD_ON,LED_TYPE_OFF); + app_pir_monitoring_stop(); + ret = app_flash_poweroff_start(); + return ret; +} + +SINT32 app_funkey_switch_check_stop(void) +{ + app_flash_poweroff_stop(); + sf_poweroff_type_set(SF_POWEROFF_NOT); + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + stMessageBuf.arg2 = LED_GROUP_SIGNAL; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + + app_pir_monitoring_start(); + +// sf_4G_signal_level_get(sf_statistics_param_get(),&signalLevel); + + return SF_SUCCESS; +} + +static void * usb_mode_Task(void * argv) +{ + while(1) + { + if(sf_cap_status_get() > 0) + continue; + if(sf_usb_IsInsert() == 0) + sf_usb_app_mode_set(SF_USB_APP_CHARGE); + + if(sf_usb_IsInsert() == 1 && sfusbstatus == 0) + { + if(sf_usb_app_mode_get() == SF_USB_APP_CHARGE) + { + if(sf_sd_status_get() == SF_SD_OK || sf_sd_status_get() == SF_SD_FULL) + { + sf_usb_app_mode_set(SF_USB_APP_MSDC); + system("/customer/gadget/udc-msdc.sh"); + sfusbstatus = 1; + } + else if(sf_sd_status_get() == SF_SD_UNPLUGED || sf_sd_status_get() == SF_SD_OUT) + { + sf_usb_app_mode_set(SF_USB_APP_UVC); + system("echo uvc 1 > /tmp/cardv_fifo"); + sfusbstatus = 2; + } + } + } + else if(sf_usb_IsInsert() != 1 && sfusbstatus != 0) + { + sf_usb_app_mode_set(SF_USB_APP_CHARGE); + sfusbstatus = 0; + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = SF_POWEROFF_KEYOFF; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + } + sleep(1); + } +} +SINT32 app_usb_mode_start(void) +{ + SINT32 ret = SF_FAILURE; + if(UsbmodeTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&UsbmodeTskCfg.TskId, NULL, usb_mode_Task, NULL); + if(ret != SF_SUCCESS) + { MLOGD("thread creat fail!\n"); + return ret; + } + UsbmodeTskCfg.IsRun = 1; + return SF_SUCCESS; + +} + + +SINT32 app_usb_mode_stop() +{ + UINT16 ret = 0; + + UsbmodeTskCfg.IsRun = 0; + MLOGD("sf_flash_poweroff_stop\n"); + ret = pthread_join(UsbmodeTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} +SINT32 app_system_time_update(unsigned int rtosBootTime) +{ + + time_t timep; + struct tm* tm_t; + struct timeval tv; + SF_PARA_TIME_S rtcTime; + + tm_t = localtime((time_t*)&rtosBootTime); + + rtcTime.Year = tm_t->tm_year + 1900; + rtcTime.Mon = tm_t->tm_mon + 1; + rtcTime.Day = tm_t->tm_mday; + rtcTime.Hour = tm_t->tm_hour; + rtcTime.Min = tm_t->tm_min; + rtcTime.Sec = tm_t->tm_sec; + +// SLOGI("%d-%d-%d %d:%d:%d\n",rtcTime.Year,rtcTime.Mon,rtcTime.Day,rtcTime.Hour,rtcTime.Min,rtcTime.Sec); + + if(SF_TRUE == sf_sys_rtc_time_check(&rtcTime)) + { + sf_sys_rtc_time_set(&rtcTime); + timep = mktime(tm_t); + tv.tv_sec = timep; + tv.tv_usec = 0; + if(settimeofday (&tv, NULL) < 0) + SLOGE("Set system datatime error[%s]!\n",strerror(errno)); + } + + return SF_SUCCESS; +} +SINT32 app_system_param_update() +{ + SF_RTOSINFO_S stRtosData = {0}; + sf_sys_rtosdata_get(&stRtosData); + sf_poweron_type_set((SF_STARTUP_TYPE_E)stRtosData.test2); + sf_statistics_param_get()->startup = (SF_STARTUP_TYPE_E)stRtosData.test2; + + sf_set_mcu_sub_ver(stRtosData.McuSubVer); + sf_set_mcu_ver(stRtosData.McuVer); + SLOGD("MCUsubver:%d,MCUver:%d\n",stRtosData.McuSubVer,stRtosData.McuVer); + + sf_statistics_param_get()->BatRemainCap = (UINT8)stRtosData.BatPer; + sf_statistics_param_get()->FcTemper = (UINT8)stRtosData.Fctemp; + MLOGD("BatRemainCap:%d,FcTemper:%d\n",sf_statistics_param_get()->BatRemainCap,sf_statistics_param_get()->FcTemper); + + return SF_SUCCESS; +} + + +SINT32 app_system_poweroff(SF_POWEROFF_TYPE_E enType ) +{ + sf_poweroff_type_set(enType); + sf_mcu_reg_set(SF_MCU_POWEROFF,sf_poweroff_type_get()); + /* + SF_STORE_ATTR_S storeattrs = {0}; + SF_STARTUP_TYPE_E startup = SF_MCU_STARTUP_ONKEY; + SF_PDT_PARAM_CFG_S* pCustomer = sf_customer_param_get(); + + #if SF_QLOG_ENABLE + if(pCustomer->DebugMode) + { + system("killall qlog"); + } + #endif + +// sf_sd_remove_file(SF_4G_PIC_THUMB_PATH,50); +// sf_sd_remove_file(SF_4G_SMALL_VIDEO_STREAM_PATH,50); + startup = sf_poweron_type_get(); + pCustomer->Lastsetuptype = startup; + MLOGI("poweron type ending:[%d,%s]\n", startup, sf_poweron_type_string(startup)); + if((startup != SF_MCU_STARTUP_ONKEY) && (startup != SF_MCU_STARTUP_NORMAL) && (startup != SF_MCU_STARTUP_OFF)) + { + if(pCustomer->SdLoop == 1) { + sf_sd_info_get(&storeattrs); + if((storeattrs.SDStatus == 0) & (storeattrs.SDFree < SDLOOP_REMAIN_SPACE)) { + sf_sd_loopremove("/mnt/mmc/DCIM"); + MLOGI("loop remove finished!!!\n"); + } + } + } + + if(pCustomer->DebugMode) + sync(); + + if(pCustomer->ResetFlag == 1) + { sf_poweroff_type_set(SF_POWEROFF_SYNC_PARAM); + pCustomer->ResetFlag = 0; + } + else if(pCustomer->SdLoop != 1 && sf_sd_status_get() == SF_SD_FULL) { + sf_poweroff_type_set(SF_POWEROFF_SD_FULL); + } + else + sf_poweroff_type_set(enType); + + if(sf_sd_status_get() != SF_SD_OUT) + sf_statistics_param_save(sf_statistics_param_get()); + MLOGI("BatRemainCap = %d\n",sf_statistics_param_get()->BatRemainCap); + if(sf_statistics_param_get()->BatRemainCap > 0) + sf_customer_param_save(sf_customer_param_get()); + + sf_sys_poweroff(sf_poweroff_type_get()); + */ + return SF_SUCCESS; +} +SINT32 app_http_time_by_timezone_set(void) +{ + UINT32 second = 0; + SF_PDT_PARAM_CFG_S* pSfParam = sf_customer_param_get(); + sf_sys_rtc_time_get(&rtcTime); + second = sf_get_seconds(rtcTime); + second -= pSfParam->TimeZone * 3600; + sf_get_date(second, &(sf_statistics_param_get()->httpTime)); + return SF_SUCCESS; +} +SINT32 app_upgrade_sd_execute(void) +{ + SINT8 halvalue = 0; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + SF_MUTEX_LOCK(GPIO_mutexLock); + sf_hal_gpio_init(SF_KEY_PIN_SYNC,GPIO_DIR_IN); + sf_hal_gpio_get(SF_KEY_PIN_SYNC,&halvalue); + sf_hal_gpio_deinit(SF_KEY_PIN_SYNC); + SF_MUTEX_UNLOCK(GPIO_mutexLock); + MLOGI("halvalue: %d\n",halvalue); + if(!(halvalue == 1 && SF_MCU_STARTUP_ONKEY == sf_poweron_type_get())) + goto _normal_deal; + + sf_upgrade_status_set(SF_UPGRADE_ING); + + if(upgrade_ota_file_IsExsit(SF_OTA_UPGRADE_FILE_PATH) == SF_FALSE) { + MLOGW("[%s] not existed in store!!!\n",SF_OTA_UPGRADE_FILE_PATH); + goto _error_deal_; + } + SF_RTOSINFO_S stRtosData = {0}; + sf_sys_rtosdata_get(&stRtosData); + if(stRtosData.BatPer < 40) { + MLOGW("BatRemainCap [%d] is less than 40%\n",stRtosData.BatPer); + goto _error_deal_; + } + + SINT32 s32ret = SF_SUCCESS; +// s32ret = sf_upgrade_ota_param_bak(); +// if(s32ret != SF_SUCCESS) +// goto _error_deal_; + + s32ret = sf_upgrade_ota_env_set(); + if(s32ret != SF_SUCCESS) + goto _error_deal_; + + sleep(2); + + sf_mcu_wdg_off(); + sleep(2); + + stMessageBuf.arg1 = SF_POWEROFF_SYNC_PARAM; + stMessageBuf.cmdId = CMD_POWEROFF; + sf_com_message_send_to_app(&stMessageBuf); + + return SF_SUCCESS; + +_normal_deal: + + if(!(SF_MCU_STARTUP_ONKEY == sf_poweron_type_get())) + return SF_FAILURE; + + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + stMessageBuf.arg2 = LED_GROUP_STATUS; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + + return SF_SUCCESS; + +_error_deal_: + if(!(SF_MCU_STARTUP_ONKEY == sf_poweron_type_get())) + return SF_FAILURE; + sf_upgrade_status_set(SF_UPGRADE_FAIL); + stMessageBuf.cmdId = CMD_LED; + stMessageBuf.arg1 = LED_STATUS_HOLD_ON; + stMessageBuf.arg2 = LED_GROUP_STATUS; + stMessageBuf.arg3 = LED_TYPE_GREEN; + sf_com_message_send_to_app(&stMessageBuf); + if(!app_upgrade_restore_IsRun()) + app_upgrade_restore_start(); + + return SF_SUCCESS; +} + +SINT32 app_preinit(void) +{ + SINT8 bUsbIsInsert = 0; + SINT8 bSimIsInsert = 0; + SF_STARTUP_TYPE_E startup = SF_MCU_STARTUP_ONKEY; + startup = sf_poweron_type_get(); + + + bUsbIsInsert = sf_usb_IsInsert(); + bSimIsInsert = sf_4G_sim_IsInsert(); + + if((startup == SF_MCU_STARTUP_NORMAL) && (!bUsbIsInsert)) + { + app_led_poweroff(); + } + if((bSimIsInsert) || (startup == SF_MCU_STARTUP_ONKEY)) + { + sf_4G_usb_init(); + MLOGD("sim card insert\n"); + } + /*if(startup == SF_MCU_STARTUP_ONKEY) + { + app_pir_monitoring_start(); + #ifndef SF_HARDWARE_TEST + app_auto_poweroff_start(); + #endif + if(!app_upgrade_restore_IsRun()) + app_batmonitoring_start(); + }*/ + return SF_SUCCESS; +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + diff --git a/code/application/source/sf_app/code/source/commMng/sf_message_queue.c b/code/application/source/sf_app/code/source/commMng/sf_message_queue.c index 58ca4b15d..c889ae3ef 100755 --- a/code/application/source/sf_app/code/source/commMng/sf_message_queue.c +++ b/code/application/source/sf_app/code/source/commMng/sf_message_queue.c @@ -61,16 +61,19 @@ static SINT32 message_queue_create(SF_CHAR *pathname,SINT32 *pMsgQueueId) } if((key = ftok(pathname,'z')) < 0) { - MLOGI("ftok error"); + //MLOGI("ftok error"); + printf("[%s:%d] ftok error\n", __FUNCTION__, __LINE__); return SF_FAILURE; } if ((*pMsgQueueId = msgget(key, IPC_CREAT | 0660)) == -1) { - MLOGI("MsgQueueId = %#x\n",*pMsgQueueId); - MLOGI("msgget failed errno.%02d is: %s\n", errno, strerror(errno)); + printf("[%s:%d] MsgQueueId = %#x msgget failed errno.%02d is: %s\n", __FUNCTION__, __LINE__,*pMsgQueueId, errno, strerror(errno)); + //MLOGI("MsgQueueId = %#x\n"); + //MLOGI("msgget failed errno.%02d is: %s\n"); return SF_FAILURE; } - MLOGI("MsgQueueId = %#x\n",*pMsgQueueId); + printf("[%s:%d] MsgQueueId = %#x\n", __FUNCTION__, __LINE__,*pMsgQueueId); + //MLOGI("\n"); return SF_SUCCESS; } diff --git a/code/application/source/sf_app/code/source/commMng/sf_share_mem.c b/code/application/source/sf_app/code/source/commMng/sf_share_mem.c index eeda3b46f..7bcd79b5d 100755 --- a/code/application/source/sf_app/code/source/commMng/sf_share_mem.c +++ b/code/application/source/sf_app/code/source/commMng/sf_share_mem.c @@ -22,6 +22,7 @@ extern "C" { #include "sf_type.h" #include "sf_param_common.h" #include "sf_fileMng.h" +#include "sf_message_queue.h" int sf_semId = -1; int sf_sharMemId = -1; @@ -145,6 +146,12 @@ void* share_mem_get(int shmID) { return shmat(shmID, NULL, 0); } + +int share_mem_dt(UIMenuStoreInfo *pSfCustomerPara) +{ + return shmdt(pSfCustomerPara); +} + SINT32 sf_share_mem_init(SF_CHAR *pathname,int size,SINT32 *pshmID) { return share_mem_create(pathname,size,pshmID); @@ -166,33 +173,34 @@ SINT32 sf_share_mem_file_init(void) pThumbFileCfg = (SF_SRCFILE_ATTR_S *)sf_share_mem_get(sf_sharMemfileId); if(pThumbFileCfg <= 0) { - MLOGI("creat share mem failed!!!\n"); + printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); return SF_FAILURE; } else { - sf_file_thumb_cfg_set(pThumbFileCfg); - MLOGI("creat share mem succeed!!!\n"); + //sf_file_thumb_cfg_set(pThumbFileCfg); + printf("[%s:%d] creat share mem succeed!!!\n", __FUNCTION__, __LINE__); return SF_SUCCESS; } } return SF_FAILURE; } -SINT32 sf_share_mem_customer_init(void) +SINT32 sf_share_mem_customer_update(void) { - SF_PDT_PARAM_CFG_S *pSfCustomerPara = 0; - if(SF_SUCCESS == sf_share_mem_init((char*)"/tmp/sf_share",sizeof(SF_PDT_PARAM_CFG_S),&sf_sharMemId)) + UIMenuStoreInfo *pSfCustomerPara = 0; + if(SF_SUCCESS == sf_share_mem_init((char*)"/tmp/sf_share",sizeof(UIMenuStoreInfo),&sf_sharMemId)) { - pSfCustomerPara = (SF_PDT_PARAM_CFG_S *)sf_share_mem_get(sf_sharMemId); + pSfCustomerPara = (UIMenuStoreInfo *)sf_share_mem_get(sf_sharMemId); if(pSfCustomerPara <= 0) { - MLOGI("creat share mem failed!!!\n"); + printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); return SF_FAILURE; } else { sf_customer_param_set(pSfCustomerPara); - MLOGI("creat share mem succeed!!!\n"); + share_mem_dt(pSfCustomerPara); + printf("[%s:%d] creat share mem succeed ID:%d!!!\n", __FUNCTION__, __LINE__, sf_sharMemId); return SF_SUCCESS; } @@ -200,6 +208,45 @@ SINT32 sf_share_mem_customer_init(void) return SF_FAILURE; } + +SINT32 sf_share_mem_customer_down(UINT32 to) +{ + UIMenuStoreInfo *pSfCustomerPara = 0; + + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if(SF_SUCCESS == sf_share_mem_init((char*)"/tmp/sf_share",sizeof(UIMenuStoreInfo),&sf_sharMemId)) + { + pSfCustomerPara = (UIMenuStoreInfo *)sf_share_mem_get(sf_sharMemId); + if(pSfCustomerPara <= 0) + { + printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); + return SF_FAILURE; + } + else + { + sf_customer_param_set_down(pSfCustomerPara); + share_mem_dt(pSfCustomerPara); + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = SF_PARA_CMD_UPDATE; + stMessageBuf.cmdId = CMD_PARA; + if(to)//to cardv + { + sf_com_message_send_to_cardv(&stMessageBuf); + } + else //to sf app + { + sf_com_message_send_to_app(&stMessageBuf); + } + + printf("[%s:%d] creat share mem succeed ID:%d!!!\n", __FUNCTION__, __LINE__, sf_sharMemId); + return SF_SUCCESS; + } + + } + return SF_FAILURE; + +} + SINT32 sf_share_mem_file_deinit(void) { return sf_share_mem_deinit(sf_sharMemfileId); diff --git a/code/application/source/sf_app/code/source/devMng/sf_dev_usb.c b/code/application/source/sf_app/code/source/devMng/sf_dev_usb.c index 71114e6e7..dae154a19 100755 --- a/code/application/source/sf_app/code/source/devMng/sf_dev_usb.c +++ b/code/application/source/sf_app/code/source/devMng/sf_dev_usb.c @@ -29,7 +29,6 @@ SINT32 sf_usb_IsInsert(void) } - #ifdef __cplusplus #if __cplusplus extern "C" { diff --git a/code/application/source/sf_app/code/source/devMng/sf_ledmng.c b/code/application/source/sf_app/code/source/devMng/sf_ledmng.c index 18e918e85..278cdc95c 100755 --- a/code/application/source/sf_app/code/source/devMng/sf_ledmng.c +++ b/code/application/source/sf_app/code/source/devMng/sf_ledmng.c @@ -191,7 +191,8 @@ SINT32 sf_led_flash_stop(SF_LED_GROUD_E enLedGroupType) return SF_SUCCESS; } SINT32 sf_led_event_process(SINT32 arg1,SINT32 arg2,SINT32 arg3) -{ +{ + return SF_SUCCESS; SINT32 eventID = 0; // MLOGI("ARG1:%d,ARG2:%d,ARG3:%d\n",arg1,arg2,arg3); sf_led_flash_stop(arg2); @@ -230,8 +231,569 @@ SINT32 sf_led_event_process(SINT32 arg1,SINT32 arg2,SINT32 arg3) return SF_SUCCESS; } +#if 1 + +pthread_t ledTskId; + +//static BOOL isIrLedOn = FALSE; +static BOOL isGoToPir = FALSE; + +static BOOL isUsbIn = FALSE; +#if HW_S530 +pthread_t ledRunningTskId; + +static BOOL isRunningLedOn = FALSE; +static UINT8 FormatSdFlag = 0; +#endif + +LedInfo_t LedInfo[SF_LED_ALL] = { + /* ledId, ledstate, times, gpioNum */ + #if HW_S530 + {SF_LED_STATUS_R, SF_LED_STATE_OFF, 0, SF_HAL_LED_STATUS_R}, + {SF_LED_STATUS_G, SF_LED_STATE_OFF, 0, SF_HAL_LED_STATUS_G}, + {SF_LED_SD_G, SF_LED_STATE_OFF, 0, SF_HAL_LED_SD_G}, + {SF_LED_SD_R, SF_LED_STATE_OFF, 0, SF_HAL_LED_SD_R}, + {SF_LED_WIFI, SF_LED_STATE_OFF, 0, SF_HAL_LED_WIFI}, + {SF_LED_BAT1, SF_LED_STATE_OFF, 0, SF_HAL_LED_BAT1}, + {SF_LED_BAT2, SF_LED_STATE_OFF, 0, SF_HAL_LED_BAT2}, + {SF_LED_BAT3, SF_LED_STATE_OFF, 0, SF_HAL_LED_BAT3}, + {SF_LED_BAT4, SF_LED_STATE_OFF, 0, SF_HAL_LED_BAT4}, + {SF_LED_SIG1_R, SF_LED_STATE_OFF, 0, SF_HAL_LED_SIG1_R}, + {SF_LED_SIG1_G, SF_LED_STATE_OFF, 0, SF_HAL_LED_SIG1_G}, + {SF_LED_SIG2, SF_LED_STATE_OFF, 0, SF_HAL_LED_SIG_2}, + {SF_LED_SIG3, SF_LED_STATE_OFF, 0, SF_HAL_LED_SIG_3}, + {SF_LED_SIG4, SF_LED_STATE_OFF, 0, SF_HAL_LED_SIG_4}, + #endif + {SF_LED_BUSY, SF_LED_STATE_OFF, 0, SF_HAL_LED_BUSY}, +}; + +//ID FLG_ID_SF_LED = 0; + +// Flag +//#define FLG_SF_LED_IDLE FLGPTN_BIT(0) +//#define FLG_SF_LED FLGPTN_BIT(1) +//#define FLG_SF_LED_ALL 0xFFFFFFFF + +static void sf_led_on(LedId_t ledId) +{ + //gpio_setPin(LedInfo[ledId].gpioNum); + //printf("[%s:%d] gpioNum:%d ledId:%d\n", __FUNCTION__, __LINE__,LedInfo[ledId].gpioNum,ledId); + sf_hal_gpio_set(LedInfo[ledId].gpioNum, SF_LED_STATE_ON); +} +static void sf_led_off(LedId_t ledId) +{ + //gpio_clearPin(LedInfo[ledId].gpioNum); + //printf("[%s:%d] gpioNum:%d ledId:%d\n", __FUNCTION__, __LINE__,LedInfo[ledId].gpioNum,ledId); + sf_hal_gpio_set(LedInfo[ledId].gpioNum, SF_LED_STATE_OFF); +} +#if HW_S530 +void sf_set_runningLed(BOOL status) +{ + isRunningLedOn = status; +} + +void* sf_runningLed_thread(void *arg) +{ + UINT8 run = 0; + UINT8 time = 0; + + while(1) + { + if(isRunningLedOn) + { + time++; + + if(time == 50) + { + time = 0; + + switch(run) + { + case 0: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 1: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 2: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 3: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 4: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_ON); + run = 0; + break; + } + } + } + else + { + run = 0; + time = 0; + } + sf_sleep_ms(10); + } + + printf("[%s:%d] e \n", __FUNCTION__, __LINE__); + +} +#endif + + +void* sf_led_thread(void *arg) +{ + + UINT8 i = 0; + //FLGPTN FlgPtn; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + while(1) + { + + for(i = 0; i < SF_LED_ALL; i++) + { + if(isUsbIn) + { + if((i == SF_LED_BUSY)/* || (i == SF_LED_STATUS_G)*/) + { + sf_led_on(LedInfo[i].ledId); + } + else + { + sf_led_off(LedInfo[i].ledId); + } + } + else if(isGoToPir) + { + if(i < SF_LED_BUSY) + { + sf_led_off(LedInfo[i].ledId); + } + else + { + if(LedInfo[i].times == 0) + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 25) //50*10ms + { + sf_led_on(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 50) //100*10ms + { + sf_led_off(LedInfo[i].ledId); + LedInfo[i].times = 0; + } + LedInfo[i].times++; + } + } + else if(LedInfo[i].ledstate == SF_LED_STATE_OFF) + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].ledstate == SF_LED_STATE_ON) + { + sf_led_on(LedInfo[i].ledId); + } + #if HW_S530 + else if(LedInfo[i].ledstate == SF_LED_STATE_SLOW_FLASHING) + { + if(LedInfo[i].times == 0) + { + sf_led_on(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 50) //50*10ms + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 100) //100*10ms + { + sf_led_on(LedInfo[i].ledId); + LedInfo[i].times = 0; + } + LedInfo[i].times++; + } + else if(LedInfo[i].ledstate == SF_LED_STATE_FLASHING) + { + if(LedInfo[i].times == 0) + { + sf_led_on(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 25) //25*10ms + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 50) //50*10ms + { + sf_led_on(LedInfo[i].ledId); + LedInfo[i].times = 0; + } + LedInfo[i].times++; + } + #endif + } + sf_sleep_ms(10); + } + + printf("[%s:%d] e \n", __FUNCTION__, __LINE__); +} + + +UINT8 sf_led_set(LedId_t ledId, Ledstate_t ledstate) +{ + UINT8 i = 0; + + if(ledId == SF_LED_ALL) + { + /*printf("led id:ALL, state:%d\n", ledstate);*/ + for(i = 0; i < SF_LED_ALL; i++) + { + LedInfo[i].ledstate = ledstate; + LedInfo[i].times = 0; + } + return SUCCESS; + } + else if(ledId < SF_LED_ALL) + { + /*printf("led id:%d, state:%d\n", ledId,ledstate);*/ + LedInfo[ledId].ledstate = ledstate; + LedInfo[ledId].times = 0; + return SUCCESS; + } + else + { + return FAIL; + } +} + + +Ledstate_t sf_led_get(LedId_t ledId) +{ + return LedInfo[ledId].ledstate; +} + + +void sf_led_init(void) +{ + UINT8 i = 0; + static UINT8 dofirst = 1; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if((!dofirst) || (SF_MCU_STARTUP_ONKEY != sf_poweron_type_get())) + return; + dofirst = 0; + /*gpio init*/ + for(i = 0; i < SF_LED_ALL; i++) + { + + //gpio_setDir(LedInfo[i].gpioNum, GPIO_DIR_OUTPUT); + + //gpio_setPin(LedInfo[i].gpioNum); + sf_hal_gpio_init(LedInfo[i].gpioNum,GPIO_DIR_OUT); + //gpio_direction_output(LedInfo[i].gpioNum, GPIO_DIR_OUTPUT); + sf_hal_gpio_set(LedInfo[i].gpioNum, LedInfo[i].ledstate); + } + + + //vos_flag_create(&FLG_ID_SF_LED, NULL, "FLG_ID_SF_LED"); + /*thread creat*/ + + pthread_create(&ledTskId, NULL, sf_led_thread, NULL); + #if HW_S530 + /*thread creat*/ + pthread_create(&ledRunningTskId, NULL, sf_runningLed_thread, NULL); + #endif + printf("[%s:%d] e SF_LED_ALL:%d\n", __FUNCTION__, __LINE__,SF_LED_ALL); +} + + + + +void sf_sys_status_led_set(LedSysState_t ledSysStateId) +{ + if((SF_MCU_STARTUP_ONKEY != sf_poweron_type_get())) + return; + //if((ledSysStateId != SF_LED_SYS_STATE_PIR_DETECT) && (ledSysStateId != SF_LED_SYS_STATE_PIR_NOT_DETECT)) + printf("SYS LED SET %d\n", ledSysStateId); + switch(ledSysStateId) + { + #if HW_S530 + case SF_LED_SYS_STATE_ERROR: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_FLASHING); + break; + + case SF_LED_SYS_STATE_NORMAL: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_UPDATE: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SENDING: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_SLOW_FLASHING); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + case SF_LED_SYS_STATE_SEND_FAIL: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SEND_SUCCESS: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SD_NORMAL: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SD_ERROR: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SD_FULL: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SD_FORMAT_START: + FormatSdFlag = 1; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_OFF); + sf_set_runningLed(0); + break; + + case SF_LED_SYS_STATE_SD_FORMAT_SUCCESS: + FormatSdFlag = 2; + break; + + case SF_LED_SYS_STATE_SD_FORMAT_FAIL: + FormatSdFlag = 3; + break; + + case SF_LED_SYS_STATE_SD_FORMAT_EXIT: + FormatSdFlag = 0; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + //sf_set_runningLed(0); + break; + + case SF_LED_SYS_STATE_WIFI_DISCONNECT: + sf_led_set(SF_LED_WIFI, SF_LED_STATE_SLOW_FLASHING); + break; + + case SF_LED_SYS_STATE_WIFI_CONNECTED: + sf_led_set(SF_LED_WIFI, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_BAT_0: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_1: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_2: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_3: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_4: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_GPRS_NO_SIGNAL: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_0: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_1: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_2: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_3: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_4: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_GPRS_SEARCH: + sf_set_runningLed(1); + break; + + case SF_LED_SYS_STATE_SIM_ERROR: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SERVER_FAIL: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_SLOW_FLASHING); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_DEBUG_ON: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_DEBUG_OFF: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_RESET: + sf_set_runningLed(0); + sf_led_set(SF_LED_ALL, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_USB_IN: + sf_set_runningLed(0); + sf_led_set(SF_LED_ALL, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + isUsbIn = TRUE; + break; + #endif + //#if HW_S510 + // case SF_LED_SYS_STATE_UPDATE: + // sf_led_set(SF_LED_BUSY, SF_LED_STATE_SLOW_FLASHING); + // break; + //#endif + + case SF_LED_SYS_STATE_GOING_TO_PIR: + isGoToPir = TRUE; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_EXIT_GO_TO_PIR: + isGoToPir = FALSE; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_POWER_OFF: + #if HW_S530 + sf_set_runningLed(0); + #endif + sf_led_set(SF_LED_ALL, SF_LED_STATE_OFF); + isGoToPir = FALSE; + break; + + case SF_LED_SYS_STATE_PIR_DETECT: + sf_led_set(SF_LED_BUSY, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_PIR_NOT_DETECT: + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + break; + + default: + break; + } + +} + + +#endif #ifdef __cplusplus #if __cplusplus diff --git a/code/application/source/sf_app/code/source/gpio/sf_hal_gpio.c b/code/application/source/sf_app/code/source/gpio/sf_hal_gpio.c index edd179a87..624622d61 100755 --- a/code/application/source/sf_app/code/source/gpio/sf_hal_gpio.c +++ b/code/application/source/sf_app/code/source/gpio/sf_hal_gpio.c @@ -28,6 +28,7 @@ extern "C" { #endif #endif +#define GPIO_USB_MUX_S P_GPIO_2 //USB_MUX_S SINT32 sf_hal_gpio_init(U32 gpio_num, int dir) { @@ -147,6 +148,19 @@ SINT32 sf_hal_gpio_deinit(U32 gpioNum) return SF_SUCCESS; } +void sf_usb_mux_s(UINT32 cnt) +{ + static UINT8 cntflag = 1; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if(1 == cntflag) + { + cntflag = 0; + gpio_direction_output(GPIO_USB_MUX_S, 1); + } + gpio_set_value(GPIO_USB_MUX_S, cnt); + printf("[%s:%d] e cnt:%d\n", __FUNCTION__, __LINE__,cnt); +} + #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/paramMng/sf_param_common.c b/code/application/source/sf_app/code/source/paramMng/sf_param_common.c index 1367af8d7..5ce762e67 100755 --- a/code/application/source/sf_app/code/source/paramMng/sf_param_common.c +++ b/code/application/source/sf_app/code/source/paramMng/sf_param_common.c @@ -29,17 +29,22 @@ extern "C" { #endif #endif -#include "sf_log.h" -#include "sf_message_queue.h" -#include "sf_param_common.h" -#include "sf_storeMng.h" + #if 1 +#include #include #include #include #include #include "UIInfo/UIInfo.h" +//#include "UIInfo/UICfgDefault.h" +//#include "DCF.h" + +#include "sf_log.h" +#include "sf_message_queue.h" +#include "sf_param_common.h" +#include "sf_storeMng.h" #define MAKE_FDT_PARTITION_PATH(x) "/nor/partition_"#x @@ -48,11 +53,11 @@ extern "C" { #define XSTR(X) #X #define STR(X) XSTR(X) -UIMenuStoreInfo currentInfo = {0}; //#NT#Init the array to zero. -UIMenuStoreInfo origInfo = {0}; /* backup */ +extern UIMenuStoreInfo currentInfo; //#NT#Init the array to zero. +extern UIMenuStoreInfo origInfo; /* backup */ -BOOL bSysReady = 0; -BOOL bAutoSystemReset = FALSE; +//BOOL bSysReady = 0; +//BOOL bAutoSystemReset = FALSE; UINT8 isCapRunning = 0; static SF_STARTUP_TYPE_E StartMode = SF_MCU_STARTUP_ONKEY; @@ -189,6 +194,7 @@ static int find_sys_mtd_device(char* result_buf, const UINT32 result_buf_size) return ret; } + int sf_customer_param_load(void) { unsigned long long partition_ofs= 0, partition_size = 0; @@ -199,10 +205,10 @@ int sf_customer_param_load(void) void *tmpInfo = NULL; size_t read_size; - sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + (sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0; ret = sf_UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); - if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { char sys_mtd_dev_path[128] = {'\0'}; ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); @@ -233,21 +239,21 @@ int sf_customer_param_load(void) goto EXIT; } - if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(currentInfo)){ - memcpy(¤tInfo, tmpInfo, sizeof(currentInfo)); + if(((UIMenuStoreInfo*)tmpInfo)->uhInfoSize == sizeof(UIMenuStoreInfo)){ + memcpy(¤tInfo, tmpInfo, sizeof(UIMenuStoreInfo)); } else{ printf("menu info size loaded from flash seems incorrect(old:%lu new:%lu), reset menu info\n", ((UIMenuStoreInfo*)tmpInfo)->uhInfoSize, - sizeof(currentInfo) + sizeof(UIMenuStoreInfo) ); //SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); } - UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(currentInfo)); - printf("**************size = %lx / mov size = %u / sum = %lx **************\n", - sizeof(currentInfo), + UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(UIMenuStoreInfo)); + printf("**************size = %lx / CamMode = %u / sum = %lx **************\n", + sizeof(UIMenuStoreInfo), //((UIMenuStoreInfo*)tmpInfo)->UIParameter[FL_MOVIE_SIZE], ((UIMenuStoreInfo*)tmpInfo)->UIParameter[CamMode], sum); @@ -257,7 +263,7 @@ EXIT: if(ret){ //SysResetFlag(); - currentInfo.uhInfoSize = sizeof(currentInfo); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); } //SysCheckFlag(); origInfo = currentInfo; @@ -274,21 +280,509 @@ EXIT: return ret; } -void SysSetFlag(UINT32 uiFlag, UINT32 uiValue) +void sf_sys_set_flag(UINT32 uiFlag, UINT32 uiValue) { currentInfo.UIParameter[uiFlag] = uiValue; } -UINT32 SysGetFlag(UINT32 uiFlag) +UINT32 sf_sys_get_flag(UINT32 uiFlag) { return (currentInfo.UIParameter[uiFlag]); } -UIMenuStoreInfo* sf_ui_para_get(void) +UIMenuStoreInfo* sf_app_ui_para_get(void) { return (UIMenuStoreInfo*)¤tInfo; } +#if 0 +static void SysLimitFlag(UINT32 uiFlag, UINT32 uiMinId, UINT32 uiMaxId, UINT32 uiDefaultId) +{ + UINT32 uiValue = sf_sys_get_flag(uiFlag); + + if ((uiValue < uiMinId) || (uiValue > uiMaxId - 1)) { + uiValue = uiDefaultId; + } + + sf_sys_set_flag(uiFlag, uiValue); +} + +void sf_SysCheckFlag(void) +{ + // Check and limit system flag value + // Photo + SysLimitFlag(FL_PHOTO_SIZE, 0, PHOTO_SIZE_ID_MAX, DEFAULT_PHOTO_SIZE); + SysLimitFlag(FL_SCENE, 0, SCENE_ID_MAX, DEFAULT_SCENE); + SysLimitFlag(FL_QUALITY, 0, QUALITY_ID_MAX, DEFAULT_PHOTO_QUALITY); + SysLimitFlag(FL_SELFTIMER, 0, SELFTIMER_ID_MAX, DEFAULT_SELFTIMER); + SysLimitFlag(FL_ANTISHAKE, 0, ANTISHAKE_ID_MAX, DEFAULT_ANTISHAKING); + SysLimitFlag(FL_FD, 0, FD_ID_MAX, DEFAULT_FD); + SysLimitFlag(FL_WB, 0, WB_ID_MAX, DEFAULT_WB); + SysLimitFlag(FL_COLOR_EFFECT, 0, COLOR_EFFECT_ID_MAX, DEFAULT_PHOTO_COLOR); + SysLimitFlag(FL_CONTINUE_SHOT, 0, CONTINUE_SHOT_SETTING_MAX, DEFAULT_CONTINUE_SHOT); + SysLimitFlag(FL_SHARPNESS, 0, SHARPNESS_ID_MAX, DEFAULT_SHARPNESS); + SysLimitFlag(FL_EV, 0, EV_SETTING_MAX, DEFAULT_EV); + SysLimitFlag(FL_ISO, 0, ISO_ID_MAX, DEFAULT_ISO); + SysLimitFlag(FL_METERING, 0, METERING_ID_MAX, DEFAULT_METERING); + + // Movie + SysLimitFlag(FL_MOVIE_SIZE, 0, MOVIE_SIZE_ID_MAX, DEFAULT_MOVIE_SIZE); + SysLimitFlag(FL_MOVIE_CYCLIC_REC, 0, MOVIE_CYCLICREC_ID_MAX, DEFAULT_MOVIE_CYCLICREC); + SysLimitFlag(FL_MOVIE_MOTION_DET, 0, MOVIE_MOTIONDET_ID_MAX, DEFAULT_MOVIE_MOTION_DET); + SysLimitFlag(FL_MOVIE_AUDIO, 0, MOVIE_AUDIO_ID_MAX, DEFAULT_MOVIE_AUDIO); + SysLimitFlag(FL_MOVIE_DATEIMPRINT, 0, MOVIE_DATEIMPRINT_ID_MAX, DEFAULT_MOVIE_DATEIMPRINT); + SysLimitFlag(FL_MOVIE_HDR, 0, MOVIE_HDR_ID_MAX, DEFAULT_MOVIE_HDR); + SysLimitFlag(FL_MOVIE_WDR, 0, MOVIE_WDR_ID_MAX, DEFAULT_MOVIE_WDR); + SysLimitFlag(FL_MOVIE_DEFOG, 0, MOVIE_DEFOG_ID_MAX, DEFAULT_MOVIE_DEFOG); + SysLimitFlag(FL_MOVIE_SENSOR_ROTATE, 0, SEN_ROTATE_MAX, DEFAULT_SENSOR_ROTATE); + SysLimitFlag(FL_MovieAudioRecIndex, 0, MOVIE_VOL_MAX, DEFAULT_MOVIE_REC_VOLUME); + SysLimitFlag(FL_MovieAudioRec, 0, MOVIE_AUD_REC_ID_MAX, DEFAULT_MOVIE_REC_AUD); + //#NT#2016/06/14#Charlie Chang -begin + //#NT#support contrast, audio in, audio in sample rate, flip, movie quality set + SysLimitFlag(FL_MOVIE_CONTRAST, 0, MOVIE_CONTRAST_ID_MAX, DEFAULT_MOVIE_CONTRAST); + SysLimitFlag(FL_MOVIE_AUDIOIN, 0, MOVIE_AUDIOIN_ID_MAX, DEFAULT_MOVIE_AUDIOIN); + SysLimitFlag(FL_MOVIE_AUDIOIN_SR, 0, MOVIE_AUDIOIN_SR_ID_MAX, DEFAULT_MOVIE_AUDIOIN_SR); + SysLimitFlag(FL_MOVIE_FLIP_MIRROR, 0, MOVIE_FLIP_MIRROR_ID_MAX, DEFAULT_MOVIE_FLIP_MIRROR); + SysLimitFlag(FL_MOVIE_QUALITY_SET, 0, MOVIE_QUALITY_SET_ID_MAX, DEFAULT_MOVIE_QUALITY_SET); + //#NT#2016/06/14#Charlie Chang -end + //#NT#2017/03/03#Jeah Yen -begin + //#NT# support sbs mode + SysLimitFlag(FL_MOVIE_SBS_MODE, 0, MOVIE_SBS_ID_MAX, DEFAULT_MOVIE_SBS_MODE); + //#NT#2017/03/03#Jeah Yen -end + SysLimitFlag(FL_MOVIE_CODEC, 0, MOVIE_CODEC_ID_MAX, DEFAULT_MOVIE_CODEC); + + // Playback + SysLimitFlag(FL_PROTECT, 0, FILE_PROTECT_ID_MAX, DEFAULT_PROTECT); + SysLimitFlag(FL_MovieAudioPlayIndex, 0, MOVIE_AUDIO_VOL_SETTING_MAX, DEFAULT_MOVIE_PLAY_VOLUME); + + // System + SysLimitFlag(FL_AudioPlayIndex, 0, AUDIO_VOL_MAX, DEFAULT_AUDIO_PLAY_VOLUME); + SysLimitFlag(FL_LANGUAGE, 0, LANG_ID_MAX, DEFAULT_LANGUAGE); + SysLimitFlag(FL_BEEP, 0, BEEP_ID_MAX, DEFAULT_BEEP); + SysLimitFlag(FL_AUTO_POWER_OFF, 0, POWEROFF_SETTING_MAX, DEFAULT_AUTO_POWER_OFF); + SysLimitFlag(FL_FREQUENCY, 0, FREQUENCY_ID_MAX, DEFAULT_FREQUENCY); + SysLimitFlag(FL_TV_MODE, 0, TV_MODE_ID_MAX, DEFAULT_TV_MODE); + SysLimitFlag(FL_DualDisp, 0, DUALDISP_SETTING_MAX, DEFAULT_DUALDISP); + + SysLimitFlag(FL_DATE_FORMAT, 0, DATE_FORMAT_ID_MAX, DEFAULT_DATE_FORMAT); + SysLimitFlag(FL_OPENING_LOGO, 0, OPENING_LOGO_ID_MAX, DEFAULT_OPENING_LOGO); + SysLimitFlag(FL_LCD_DISPLAY, 0, DISPOUT_ID_MAX, DEFAULT_LCD_DISPLAY); + SysLimitFlag(FL_LCD_BRIGHTNESS, 0, LCDBRT_LVL_ID_MAX, DEFAULT_LCD_BRIGHTNESS); + SysLimitFlag(FL_MACRO, 0, MACRO_ID_MAX, DEFAULT_MACRO); + SysLimitFlag(FL_USB_MODE, 0, USB_MODE_ID_MAX, DEFAULT_USB_MODE); + + // Sepcial flags + SysLimitFlag(FL_DCF_DIR_ID, MIN_DCF_DIR_NUM, MAX_DCF_DIR_NUM, MIN_DCF_DIR_NUM); + SysLimitFlag(FL_DCF_FILE_ID, MIN_DCF_FILE_NUM, MAX_DCF_FILE_NUM, MIN_DCF_FILE_NUM); + + //Wi-Fi + SysLimitFlag(FL_WIFI_AUTO_RECORDING, 0, WIFI_AUTO_RECORDING_ID_MAX, DEFAULT_MOVIE_WIFI_AUTO_RECORDING_OPTION); + SysLimitFlag(FL_NetWorkMode, 0, NET_MODE_SETTING_MAX, DEFAULT_WIFI_MODE); + + + //#2023/02/10#Payton - begin + //=====================Sifar============= + SysLimitFlag(CamNameSwitch, 0, SF_CAMID_MAX, DEFAULT_SF_CAMID); + SysLimitFlag(CamMode, 0, SF_CAM_MODE_MAX, DEFAULT_BOOT_WORK_MODE); + SysLimitFlag(FlashLed, 0, SF_FLASH_LED_MAX, DEFAULT_FLASH_LED); + //ImgSize + SysLimitFlag(NightMode, 0, SF_NIGHT_MODE_MAX, DEFAULT_NIGHT_MODE); + //Multishot + //VideoSize + //VideoTimeMenu + SysLimitFlag(VideoLenth, VIDEO_LENTH_5, VIDEO_LENTH_MAX, DEFAULT_VIDEO_LENTH); + SysLimitFlag(PirSwitch, 0, SF_ON_OFF_MAX, DEFAULT_PIR_SWITCH); + SysLimitFlag(PirSensitivity, 0, SF_PIR_SENSITIVITY_MAX, DEFAULT_PIR_SENSITIVITY); + SysLimitFlag(PirDelaySwitch, 0, SF_ON_OFF_MAX, DEFAULT_PIR_DELAY_SWITCH); + SysLimitFlag(TimelapseSwitch, 0, SF_ON_OFF_MAX, DEFAULT_TIMELAPSE_SWITCH); + SysLimitFlag(WorkTime1Switch, 0, SF_ON_OFF_MAX, DEFAULT_WORKTIME_SWITCH); + SysLimitFlag(WorkTime2Switch, 0, SF_ON_OFF_MAX, DEFAULT_WORKTIME_SWITCH); + SysLimitFlag(SimAutoSwitch, 0, SF_SIM_SWITCH_MAX, DEFAULT_SIM_AUTO_SWITCH); + SysLimitFlag(SendMaxNum, 0, SF_SEND_MAX_NUM_MAX, DEFAULT_SEND_MAX_NUM); + SysLimitFlag(GprsMode, 0, SF_GPRS_MODE_MAX, DEFAULT_GPRS_MODE); + SysLimitFlag(DailyReportSwitch, 0, SF_ON_OFF_MAX, DEFAULT_DAILY_REPORT_SWITCH); + SysLimitFlag(ReDailyReport, 0, SF_ON_OFF_MAX, DEFAULT_REDAILY_REPORT_SWITCH); + SysLimitFlag(SimPinFlag, 0, SF_ON_OFF_MAX, DEFAULT_SIN_PIN_FLAG); + + SysLimitFlag(GpsSwitch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_SWITCH); + SysLimitFlag(Language, 0, LANG_ID_MAX, DEFAULT_LANGUAGE); + ////////////////// + SysLimitFlag(DateStyle, 0, SF_DATE_TIME_MAX, DEFAULT_DATE_TIME); + SysLimitFlag(FL_DateFormatIndex, 0, SF_DATE_TIME_MAX, DEFAULT_DATE_TIME); + /////////////// + SysLimitFlag(StampSwitch, 0, SF_ON_OFF_MAX, DEFAULT_STAMP_SWITCH); + SysLimitFlag(BatteryType, 0, SF_BATT_MAX, DEFAULT_BATTERY_TYPE); + SysLimitFlag(SdLoopSwitch, 0, SF_ON_OFF_MAX, DEFAULT_SD_LOOP_SWITCH); + SysLimitFlag(PwdSwitch, 0, SF_ON_OFF_MAX, DEFAULT_PWD_SWITCH); + SysLimitFlag(SendPhotoSwitch, 0, SF_ON_OFF_MAX, DEFAULT_SEND_PHOTO_SWITCH); + SysLimitFlag(SendVideoSwitch, 0, SF_ON_OFF_MAX, DEFAULT_SEND_VIDEO_SWITCH); + SysLimitFlag(SendPicSize, 0, SF_SEND_MAX, DEFAULT_SEND_PIC_SIZE); + SysLimitFlag(SendMultishotIndex1, 0, SF_ON_OFF_MAX, DEFAULT_SEND_MULTISHOT_INDEX1); + SysLimitFlag(SendMultishotIndex2, 0, SF_ON_OFF_MAX, DEFAULT_SEND_MULTISHOT_INDEX2); + SysLimitFlag(SendMultishotIndex3, 0, SF_ON_OFF_MAX, DEFAULT_SEND_MULTISHOT_INDEX3); + SysLimitFlag(SendMultishotIndex4, 0, SF_ON_OFF_MAX, DEFAULT_SEND_MULTISHOT_INDEX4); + SysLimitFlag(DateAuto, 0, SF_DATE_MAX, DEFAULT_DATE_AUTO); + //NTPZoneS, + //NTPZoneH, + //NTPZoneM, + SysLimitFlag(CamArmDiable, 0, SF_ON_OFF_MAX, DEFAULT_CAM_ARM_DIABLE); + SysLimitFlag(DebugMode, 0, SF_ON_OFF_MAX, DEFAULT_DEBUG_MODE); + SysLimitFlag(AutoOffSwitch, 0, SF_ON_OFF_MAX, DEFAULT_AUTO_OFF_SWITCH); + SysLimitFlag(AutoLogSwitch, 0, SF_ON_OFF_MAX, DEFAULT_AUTO_LOG_SWITCH); + SysLimitFlag(RawSwitch, 0, SF_ON_OFF_MAX, DEFAULT_RAW_SWITCH); + SysLimitFlag(GprsSwitch, 0, SF_ON_OFF_MAX, DEFAULT_GPRS_SWITCH); + SysLimitFlag(GpsSendFlag, 0, SF_ON_OFF_MAX, DEFAULT_GPS_SEND_FLAG); + SysLimitFlag(FristSendDailyAndGps, 0, SF_ON_OFF_MAX, DEFAULT_FRIST_SEND_DAILY_AND_GPS); + SysLimitFlag(NetGeneration, 0, SF_NET_MAX, DEFAULT_NET_GENERATION); + SysLimitFlag(NeedTimeSyncStartUp, 0, SF_NEED_TIME_SYNC_MAX, DEFAULT_NEED_TIME_SYNC); + SysLimitFlag(NetWorkNeedSearch, 0, SF_ON_OFF_MAX, DEFAULT_NET_WORK_NEED_SEARCH); + SysLimitFlag(QLogSwitch, 0, SF_ON_OFF_MAX, DEFAULT_QLOG_SWITCH); + SysLimitFlag(GpsAntiTheftSwitch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_ANTI_THEFT_SWITCH); + SysLimitFlag(BatteryLogSwitch, 0, SF_ON_OFF_MAX, DEFAULT_BATTRERY_LOG_SWITCH); + + SysLimitFlag(GpsNumber, 0, SF_ON_OFF_MAX, DEFAULT_GPS_NUMBER); + SysLimitFlag(TimeSend1Switch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_NUMBER); + SysLimitFlag(TimeSend2Switch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_NUMBER); + SysLimitFlag(TimeSend3Switch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_NUMBER); + SysLimitFlag(TimeSend4Switch, 0, SF_ON_OFF_MAX, DEFAULT_GPS_NUMBER); + + + printf("%s:%d sifar para e\n", __FUNCTION__, __LINE__); + + + //#2023/02/10#Payton - end + +} + + +void sf_SysSetFixedFlag(void) +{ + // Fixed some system flags as system reset + + // Photo + sf_sys_set_flag(FL_CONTINUE_SHOT, DEFAULT_CONTINUE_SHOT); + sf_sys_set_flag(FL_SELFTIMER, DEFAULT_SELFTIMER); + + // Movie + + // Playback + sf_sys_set_flag(FL_PROTECT, DEFAULT_PROTECT); + + // System + sf_sys_set_flag(FL_LCD_DISPLAY, DEFAULT_LCD_DISPLAY); + sf_sys_set_flag(FL_LCD_BRIGHTNESS, DEFAULT_LCD_BRIGHTNESS); + sf_sys_set_flag(FL_MovieDisIndex, MOVIE_DIS_OFF); + + sf_sys_set_flag(FL_COMMON_LOCAL, WIFI_OFF); + sf_sys_set_flag(FL_IsCloneRec, CLONE_REC_OFF); + +} + +void sf_SysResetFlag(void) +{ + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + // Set system flag default value here + // Photo + sf_sys_set_flag(FL_PHOTO_SIZE, DEFAULT_PHOTO_SIZE); + sf_sys_set_flag(FL_QUALITY, DEFAULT_PHOTO_QUALITY); + sf_sys_set_flag(FL_COLOR_EFFECT, DEFAULT_PHOTO_COLOR); + sf_sys_set_flag(FL_SCENE, DEFAULT_SCENE); + sf_sys_set_flag(FL_EV, DEFAULT_EV); + sf_sys_set_flag(FL_ISO, DEFAULT_ISO); + sf_sys_set_flag(FL_WB, DEFAULT_WB); + sf_sys_set_flag(FL_METERING, DEFAULT_METERING); + sf_sys_set_flag(FL_SHARPNESS, DEFAULT_SHARPNESS); + sf_sys_set_flag(FL_SATURATION, DEFAULT_SATURATION); + sf_sys_set_flag(FL_FD, DEFAULT_FD); + sf_sys_set_flag(FL_ANTISHAKE, DEFAULT_ANTISHAKING); + sf_sys_set_flag(FL_RSC, DEFAULT_RSC); + sf_sys_set_flag(FL_WDR, DEFAULT_WDR); + sf_sys_set_flag(FL_DUAL_CAM_MENU, DEFAULT_DUAL_CAM); + sf_sys_set_flag(FL_QUICK_REVIEW, DEFAULT_QUICK_REVIEW); + sf_sys_set_flag(FL_DATE_STAMP, DEFAULT_DATE_STAMP); + sf_sys_set_flag(FL_SELFTIMER, DEFAULT_SELFTIMER); + sf_sys_set_flag(FL_FLASH_MODE, DEFAULT_FLASH_MODE); + sf_sys_set_flag(FL_CONTINUE_SHOT, DEFAULT_CONTINUE_SHOT); + sf_sys_set_flag(FL_SHDR, DEFAULT_SHDR); + //#NT#2016/08/19#Lincy Lin#[0106935] -begin + //#NT# Support change WDR, SHDR, RSC setting will change mode after exit menu + sf_sys_set_flag(FL_RSC_MENU, DEFAULT_RSC); + sf_sys_set_flag(FL_WDR_MENU, DEFAULT_WDR); + sf_sys_set_flag(FL_SHDR_MENU, DEFAULT_SHDR); + //#NT#2016/08/19#Lincy Lin -end + + sf_sys_set_flag(FL_DEFOG, DEFAULT_DEFOG); + + // Movie + sf_sys_set_flag(FL_MOVIE_SIZE_MENU, DEFAULT_MOVIE_SIZE_DUAL); + + sf_sys_set_flag(FL_MOVIE_QUALITY, DEFAULT_MOVIE_QUALITY); + sf_sys_set_flag(FL_MOVIE_COLOR, DEFAULT_MOVIE_COLOR); + sf_sys_set_flag(FL_MOVIE_CYCLIC_REC, DEFAULT_MOVIE_CYCLICREC); + sf_sys_set_flag(FL_MOVIE_MOTION_DET, DEFAULT_MOVIE_MOTION_DET); + sf_sys_set_flag(FL_MOVIE_AUDIO, DEFAULT_MOVIE_AUDIO); + sf_sys_set_flag(FL_MOVIE_DATEIMPRINT, DEFAULT_MOVIE_DATEIMPRINT); + sf_sys_set_flag(FL_MOVIE_HDR_MENU, DEFAULT_MOVIE_HDR); + sf_sys_set_flag(FL_MOVIE_WDR_MENU, DEFAULT_MOVIE_WDR); + sf_sys_set_flag(FL_MOVIE_DEFOG_MENU, DEFAULT_MOVIE_DEFOG); + sf_sys_set_flag(FL_MovieRSCIndex_MENU, DEFAULT_MOVIE_RSC); + sf_sys_set_flag(FL_MOVIE_SENSOR_ROTATE, DEFAULT_SENSOR_ROTATE); + sf_sys_set_flag(FL_MovieMCTFIndex, DEFAULT_MCTFINDEX); + sf_sys_set_flag(FL_MOVIE_PTZ, DEFAULT_MOVIE_PTZ); + sf_sys_set_flag(FL_MOVIE_URGENT_PROTECT_AUTO, DEFAULT_MOVIE_URGENT_PROTECT_AUTO); + sf_sys_set_flag(FL_MOVIE_URGENT_PROTECT_MANUAL, DEFAULT_MOVIE_URGENT_PROTECT_MANUAL); + sf_sys_set_flag(FL_MOVIE_IR_CUT, DEFAULT_IR_CUT); + //#NT#2016/07/26#KCHong#[0105955] -begin + //#NT#If ADAS is ON and timelapse changes to OFF, reopen movie mode + sf_sys_set_flag(FL_MOVIE_TIMELAPSE_REC_MENU, DEFAULT_MOVIE_TIMELAPSE_REC); + //#NT#2016/07/26#KCHong#[0105955] -end + sf_sys_set_flag(FL_MOVIE_PIM, DEFAULT_MOVIE_PIM); + //#NT#2016/07/12#KCHong#[0104994] -begin + //#NT#Use FL_MOVIE_LDWS_MENU & FL_MOVIE_FCW_MENU instead of FL_MOVIE_LDWS & FL_MOVIE_FCW + sf_sys_set_flag(FL_MOVIE_LDWS_MENU, DEFAULT_MOVIE_LDWS); + sf_sys_set_flag(FL_MOVIE_FCW_MENU, DEFAULT_MOVIE_FCWS); + //#NT#2016/07/12#KCHong#[0104994] -end + sf_sys_set_flag(FL_MovieAudioRecIndex, DEFAULT_MOVIE_REC_VOLUME); + sf_sys_set_flag(FL_MovieAudioRec, DEFAULT_MOVIE_REC_AUD); + sf_sys_set_flag(FL_MOVIE_DDD, DEFAULT_MOVIE_DDD); + sf_sys_set_flag(FL_MOVIE_ADAS_CAL, DEFAULT_MOVIE_ADAS_CAL); + sf_sys_set_flag(FL_MOVIE_CODEC, DEFAULT_MOVIE_CODEC); + sf_sys_set_flag(FL_MOVIE_CODEC_MENU, DEFAULT_MOVIE_CODEC); + + // Playback + sf_sys_set_flag(FL_PROTECT, DEFAULT_PROTECT); + sf_sys_set_flag(FL_MovieAudioPlayIndex, DEFAULT_MOVIE_PLAY_VOLUME); + + // System + sf_sys_set_flag(FL_AudioPlayIndex, DEFAULT_AUDIO_PLAY_VOLUME); + sf_sys_set_flag(FL_AUTO_POWER_OFF, DEFAULT_AUTO_POWER_OFF); + sf_sys_set_flag(FL_LCD_OFF, DEFAULT_LCD_OFF); + sf_sys_set_flag(FL_BEEP, DEFAULT_BEEP); + sf_sys_set_flag(FL_LANGUAGE, DEFAULT_LANGUAGE); + sf_sys_set_flag(FL_FREQUENCY, DEFAULT_FREQUENCY); + sf_sys_set_flag(FL_TV_MODE, DEFAULT_TV_MODE); + sf_sys_set_flag(FL_HDMI_MODE, DEFAULT_HDMI_MODE); + sf_sys_set_flag(FL_DATE_FORMAT, DEFAULT_DATE_FORMAT); + sf_sys_set_flag(FL_OPENING_LOGO, DEFAULT_OPENING_LOGO); + sf_sys_set_flag(FL_CPU2_DEFAULT, 1); + + sf_sys_set_flag(FL_LCD_DISPLAY, DEFAULT_LCD_DISPLAY); + sf_sys_set_flag(FL_LCD_BRIGHTNESS, DEFAULT_LCD_BRIGHTNESS); + sf_sys_set_flag(FL_DualDisp, DEFAULT_DUALDISP); + sf_sys_set_flag(FL_MACRO, DEFAULT_MACRO); + sf_sys_set_flag(FL_USB_MODE, DEFAULT_USB_MODE); + sf_sys_set_flag(FL_GSENSOR, DEFAULT_GSENSOR); + sf_sys_set_flag(FL_EDGE, DEFAULT_EDGE); + sf_sys_set_flag(FL_NR, DEFAULT_NR); + + //#NT#2016/06/14#Charlie Chang -begin + //#NT#support contrast, two way audio in and sample rate, flip, movie qualiity set + sf_sys_set_flag(FL_MOVIE_CONTRAST, DEFAULT_MOVIE_CONTRAST); + sf_sys_set_flag(FL_MOVIE_AUDIOIN, DEFAULT_MOVIE_AUDIOIN); + sf_sys_set_flag(FL_MOVIE_AUDIOIN_SR, DEFAULT_MOVIE_AUDIOIN_SR); + sf_sys_set_flag(FL_MOVIE_FLIP_MIRROR, DEFAULT_MOVIE_FLIP_MIRROR); + sf_sys_set_flag(FL_MOVIE_QUALITY_SET, DEFAULT_MOVIE_QUALITY_SET); + //#NT#2016/06/14#Charlie Chang -end + //#NT#2017/03/03#Jeah Yen -begin + //#NT# support sbs mode + sf_sys_set_flag(FL_MOVIE_SBS_MODE, DEFAULT_MOVIE_SBS_MODE); + //#NT#2017/03/03#Jeah Yen -end + // Wi-Fi + sf_sys_set_flag(FL_WIFI_AUTO_RECORDING, DEFAULT_MOVIE_WIFI_AUTO_RECORDING_OPTION); + sf_sys_set_flag(FL_NetWorkMode, DEFAULT_WIFI_MODE); // Reset To Wi-Fi mode to AP mode. + + //#NT#2023/01/11#Eric - begin //#NT#Support + //=====================Sifar=============///Eric + //Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_BOOTWORKMODE, 1, sf_sys_get_flag(CamMode)); + //#NT#2023/01/11#Eric - end + //#2023/02/10#Payton - begin + //=====================Sifar============= + sf_sys_set_flag(CamNameSwitch, DEFAULT_SF_CAMID); + sf_sys_set_flag(CamMode, DEFAULT_BOOT_WORK_MODE); + sf_sys_set_flag(FlashLed, DEFAULT_FLASH_LED); + //ImgSize + sf_sys_set_flag(NightMode, DEFAULT_NIGHT_MODE); + //Multishot + //VideoSize + //VideoTimeMenu + sf_sys_set_flag(VideoLenth, DEFAULT_VIDEO_LENTH); + sf_sys_set_flag(PirSwitch, DEFAULT_PIR_SWITCH); + sf_sys_set_flag(PirSensitivity, DEFAULT_PIR_SENSITIVITY); + sf_sys_set_flag(PirDelaySwitch, DEFAULT_PIR_DELAY_SWITCH); + + sf_sys_set_flag(TimelapseSwitch, DEFAULT_TIMELAPSE_SWITCH); + if(sf_sys_get_flag(TimelapseSwitch)) + { + puiPara->TimelapseTime.Hour = 0; + puiPara->TimelapseTime.Min = 0; + puiPara->TimelapseTime.Sec = 5; + } + + sf_sys_set_flag(WorkTime1Switch, DEFAULT_WORKTIME_SWITCH); + if(sf_sys_get_flag(WorkTime1Switch)) + { + puiPara->WorkTime[0].StartTime.Hour = 16; + puiPara->WorkTime[0].StartTime.Min = 0; + puiPara->WorkTime[0].StopTime.Hour = 20; + puiPara->WorkTime[0].StopTime.Min = 0; + } + + sf_sys_set_flag(WorkTime2Switch, DEFAULT_WORKTIME_SWITCH); + if(sf_sys_get_flag(WorkTime2Switch)) + { + puiPara->WorkTime[1].StartTime.Hour = 5; + puiPara->WorkTime[1].StartTime.Min = 0; + puiPara->WorkTime[1].StopTime.Hour = 8; + puiPara->WorkTime[1].StopTime.Min = 0; + } + + sf_sys_set_flag(SimAutoSwitch, DEFAULT_SIM_AUTO_SWITCH); + sf_sys_set_flag(SendMaxNum, DEFAULT_SEND_MAX_NUM); + sf_sys_set_flag(GprsMode, DEFAULT_GPRS_MODE); + sf_sys_set_flag(DailyReportSwitch, DEFAULT_DAILY_REPORT_SWITCH); + sf_sys_set_flag(ReDailyReport, DEFAULT_REDAILY_REPORT_SWITCH); + sf_sys_set_flag(SimPinFlag, DEFAULT_SIN_PIN_FLAG); + sf_sys_set_flag(GpsSwitch, DEFAULT_GPS_SWITCH); + sf_sys_set_flag(Language, DEFAULT_LANGUAGE); + /////////////// + sf_sys_set_flag(DateStyle, DEFAULT_DATE_TIME); + sf_sys_set_flag(FL_DateFormatIndex, DEFAULT_DATE_TIME); + ///////////// + sf_sys_set_flag(StampSwitch, DEFAULT_STAMP_SWITCH); + sf_sys_set_flag(BatteryType, DEFAULT_BATTERY_TYPE); + sf_sys_set_flag(SdLoopSwitch, DEFAULT_SD_LOOP_SWITCH); + sf_sys_set_flag(PwdSwitch, DEFAULT_PWD_SWITCH); + sf_sys_set_flag(SendPhotoSwitch, DEFAULT_SEND_PHOTO_SWITCH); + sf_sys_set_flag(SendVideoSwitch, DEFAULT_SEND_VIDEO_SWITCH); + sf_sys_set_flag(SendPicSize, DEFAULT_SEND_PIC_SIZE); + sf_sys_set_flag(SendMultishotIndex1, DEFAULT_SEND_MULTISHOT_INDEX1); + sf_sys_set_flag(SendMultishotIndex2, DEFAULT_SEND_MULTISHOT_INDEX2); + sf_sys_set_flag(SendMultishotIndex3, DEFAULT_SEND_MULTISHOT_INDEX3); + sf_sys_set_flag(SendMultishotIndex4, DEFAULT_SEND_MULTISHOT_INDEX4); + sf_sys_set_flag(DateAuto, DEFAULT_DATE_AUTO); + //NTPZoneS, + //NTPZoneH, + //NTPZoneM, + sf_sys_set_flag(CamArmDiable, DEFAULT_CAM_ARM_DIABLE); + sf_sys_set_flag(DebugMode, DEFAULT_DEBUG_MODE); + sf_sys_set_flag(AutoOffSwitch, DEFAULT_AUTO_OFF_SWITCH); + sf_sys_set_flag(AutoLogSwitch, DEFAULT_AUTO_LOG_SWITCH); + sf_sys_set_flag(RawSwitch, DEFAULT_RAW_SWITCH); + sf_sys_set_flag(GprsSwitch, DEFAULT_GPRS_SWITCH); + sf_sys_set_flag(GpsSendFlag, DEFAULT_GPS_SEND_FLAG); + sf_sys_set_flag(FristSendDailyAndGps, DEFAULT_FRIST_SEND_DAILY_AND_GPS); + sf_sys_set_flag(NetGeneration, DEFAULT_NET_GENERATION); + sf_sys_set_flag(NeedTimeSyncStartUp, DEFAULT_NEED_TIME_SYNC); + sf_sys_set_flag(NetWorkNeedSearch, DEFAULT_NET_WORK_NEED_SEARCH); + sf_sys_set_flag(QLogSwitch, DEFAULT_QLOG_SWITCH); + sf_sys_set_flag(GpsAntiTheftSwitch, DEFAULT_GPS_ANTI_THEFT_SWITCH); + sf_sys_set_flag(BatteryLogSwitch, DEFAULT_BATTRERY_LOG_SWITCH); + + sf_sys_set_flag(GpsNumber, DEFAULT_GPS_NUMBER); + sf_sys_set_flag(TimeSend1Switch, DEFAULT_TIMESEND1_SWITCH); + sf_sys_set_flag(TimeSend2Switch, DEFAULT_TIMESEND2_SWITCH); + sf_sys_set_flag(TimeSend3Switch, DEFAULT_TIMESEND3_SWITCH); + sf_sys_set_flag(TimeSend4Switch, DEFAULT_TIMESEND4_SWITCH); + //sf_set_pir_sensitivity(7); + + + printf("%s:%d sifar para e\n", __FUNCTION__, __LINE__); + + + //#2023/02/10#Payton - end + sf_SysSetFixedFlag(); + +} + +void sf_Save_MenuInfo(void) +{ + unsigned long long partition_ofs= 0, partition_size = 0; + int ret = 0; + FILE *sys_mtd_fp = NULL; + INT32 rw_len = 0; + UINT32 sectorCnt; + void* tmpInfo = NULL; + size_t write_size; + char cmd[128] = {'\0'}; + printf("%s:%d s\n", __FUNCTION__, __LINE__); + + SysCheckFlag(); + + /* check if sys param changed */ + if(memcmp(¤tInfo, &origInfo, sizeof(UIMenuStoreInfo)) == 0){ + printf("menu info is not changed\n"); + goto EXIT; + } + + sectorCnt = (sizeof(UIMenuStoreInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(UIMenuStoreInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); + + ret = sf_UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); + if ((ret == 0) && (sizeof(UIMenuStoreInfo) < partition_size)) { + char sys_mtd_dev_path[128] = {'\0'}; + ret = find_sys_mtd_device(sys_mtd_dev_path, sizeof(sys_mtd_dev_path)); + if(ret){ + goto EXIT; + } + + sys_mtd_fp = fopen(sys_mtd_dev_path, "wb"); + if(!sys_mtd_fp){ + printf("open %s failed!\n", sys_mtd_dev_path); + ret = -1; + goto EXIT; + } + + write_size = sectorCnt * _EMBMEM_BLK_SIZE_; + tmpInfo = malloc(write_size); + if(!tmpInfo){ + printf("allocate tmpInfo failed!\n"); + ret = -1; + goto EXIT; + } + + sprintf(cmd, "flash_eraseall -N %s", sys_mtd_dev_path); + printf("%s\n", cmd); + ret = system(cmd); + if(ret){ + printf("flash_eraseall failed!\n"); + goto EXIT; + } + + memset(tmpInfo, 0xFF, write_size); + currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); + memcpy(tmpInfo, ¤tInfo, sizeof(UIMenuStoreInfo)); + rw_len = fwrite(tmpInfo, 1, write_size, sys_mtd_fp); + if(rw_len != (INT32)(write_size)) { + printf("fwrite size not matched(%ld / %ld)!\n", rw_len, write_size); + ret = -1; + goto EXIT; + } + fflush(sys_mtd_fp); + + UINT32 sum = MemCheck_CalcCheckSum16Bit((UINT32)tmpInfo, sizeof(UIMenuStoreInfo)); + printf("**************size = %lx / mov size = %u / sum = %lx **************\n", + sizeof(UIMenuStoreInfo), + ((UIMenuStoreInfo*)tmpInfo)->UIParameter[FL_MOVIE_SIZE], + sum); + } + else{ + printf("can't get partition info or menu info size exceed partition size!\n"); + } + +EXIT: + if(sys_mtd_fp){ + fclose(sys_mtd_fp); + sys_mtd_fp = NULL; + } + + if(tmpInfo){ + free(tmpInfo); + tmpInfo = NULL; + } + printf("%s:%d e\n", __FUNCTION__, __LINE__); + +} +#endif + #endif @@ -367,11 +861,19 @@ SF_PDT_PARAM_CFG_S* sf_customer_param_get(void) { return &StCustomerParam; } -void sf_customer_param_set(SF_PDT_PARAM_CFG_S *pSfCustomerPara) +void sf_customer_param_set(UIMenuStoreInfo *pSfCustomerPara) { - memcpy(&StCustomerParam,pSfCustomerPara,sizeof(SF_PDT_PARAM_CFG_S)); + //currentInfo = *pSfCustomerPara; + memcpy(¤tInfo,pSfCustomerPara,sizeof(UIMenuStoreInfo)); } +void sf_customer_param_set_down(UIMenuStoreInfo *pSfCustomerPara) +{ + //currentInfo = *pSfCustomerPara; + memcpy(pSfCustomerPara,¤tInfo,sizeof(UIMenuStoreInfo)); +} + + void sf_customer_param_reset(SF_PDT_PARAM_CFG_S *psfpdtparam,UINT8 sysRet) { @@ -385,7 +887,7 @@ SINT32 sf_customer_param_save(SF_PDT_PARAM_CFG_S *pSfCustomerPara) SINT32 ret = 0; SINT32 fd = 0; UINT32 CheckSum = 0; - UINT32 lenth = 0; + SINT32 lenth = 0; lenth = sizeof(SF_PDT_PARAM_CFG_S); @@ -492,7 +994,7 @@ SINT32 sf_statistics_param_save(SF_PDT_PARAM_STATISTICS_S* pStatisticsParam) SINT32 fd = 0; SINT32 ret = 0; UINT32 CheckSum = 0; - UINT32 lenth = 0; + SINT32 lenth = 0; lenth = sizeof(SF_PDT_PARAM_STATISTICS_S); @@ -532,7 +1034,7 @@ SINT32 sf_statistics_param_load(SF_PDT_PARAM_STATISTICS_S* pStatisticsParam) SINT32 i = 0; SINT32 fd = 0; UINT32 CheckSum = 0; - UINT32 lenth = 0; + SINT32 lenth = 0; SINT32 ret = SF_SUCCESS; static SINT32 loadFalg = 0; SF_PDT_PARAM_CFG_S *pSfCustomerPara = sf_customer_param_get(); @@ -646,6 +1148,46 @@ UINT8 sf_cap_status_get(void) } +/************************************************* + Function: sf_signal_level_get + Description: get signal level + Input: netFlagG: 4/3/2 G cqSignal:signal val + Output: N/A + Return: signal level + Others: N/A +*************************************************/ +UINT8 sf_signal_level_get(UINT8 netFlagG, UINT8 cqSignal) +{ + UINT8 signalLevel = 0; + + if(netFlagG == 4) + { + if(cqSignal <= 105) + { + signalLevel = 4; + } + else if(cqSignal <= 115) + { + signalLevel = 3; + } + else + { + signalLevel = 2; + } + } + else + { + if (cqSignal < 8) + signalLevel = 2; + else if (cqSignal < 14) + signalLevel = 3; + else + signalLevel = 4; + } + + return signalLevel; +} + #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu.c b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu.c index 52af270d8..9531568c1 100755 --- a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu.c +++ b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu.c @@ -845,8 +845,18 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len) stMessageBuf.cmdId = CMD_KEY; stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY; - sf_com_message_send_to_app(&stMessageBuf); + stMessageBuf.arg3 = (val[0] & 0x1F); + sf_com_message_send_to_cardv(&stMessageBuf); ret = 0x05; + if(stMessageBuf.arg3 == 3) //ON + { + sf_set_pir_statu_flag(1); + printf("%s:%d-------PIR Key Pressed.------\n", __FUNCTION__, __LINE__); + } + else if((stMessageBuf.arg3 == 0) || (stMessageBuf.arg3 == 1)) //ON + {//PIR MODE: ON->OFF/ ON->SETUP + sf_set_module_sleep_flag(0); + } } else { @@ -889,8 +899,6 @@ static void * sf_commu_mcu_task(void * argv) unsigned char temp_end1 = 0; unsigned char temp_end2 = 0; unsigned char copy_size = 0; - sf_commu_mcu_interface_init(115200, 'N', 8, 1, 'N'); - sf_commu_mcu_open(); mcubuf_reset(); while(sf_commu_mcu_exit == 0) { @@ -1002,8 +1010,10 @@ void sf_commu_mcu_task_start(void) { if(sf_commu_mcu_exit == 1) { - pthread_create(&sfCommuMcuThread, NULL, sf_commu_mcu_task, NULL); sf_commu_mcu_exit = 0; + sf_commu_mcu_interface_init(115200, 'N', 8, 1, 'N'); + sf_commu_mcu_open(); + pthread_create(&sfCommuMcuThread, NULL, sf_commu_mcu_task, NULL); } } diff --git a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c index 14bb07255..a8c768748 100755 --- a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c +++ b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c @@ -27,6 +27,7 @@ #include #include "sf_commu_mcu.h" #include "sf_commu_mcu_reg.h" +#include #ifdef __cplusplus @@ -40,7 +41,7 @@ static unsigned char McuSubVersion = 0; static unsigned short McuVersion = 0; static unsigned char McuProductInfo = 0; -unsigned char McuPowerOnMode = 0;//=>PWR_ON_SETUP +//unsigned char McuPowerOnMode = 0;//=>PWR_ON_SETUP unsigned char CameraMode = 0; //bit0~3:1 Picture,2 Video,3 TimeLapse,4 PIC+video; bit7:0 fast capture. bit7:1 Normal capture unsigned char IrLedPercent = 0; unsigned char McuBatMode = 0; @@ -50,6 +51,13 @@ unsigned int powerSave_t1 = 0; unsigned char DailyReportStartMode = 0; unsigned char POWEROFF = 0; SF_TIME_S sfMcuTime = { 0 }; +static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */ +static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP +static UINT32 simCardInsert=0; +static UINT8 gModuleSleep = 1; +static UINT8 isSignalReady = 0; +static UINT32 GPRS_ERRNO = 0; +static UINT32 SmsCheck = 0; UINT8 sf_mcu_read(UINT32 reg, UINT8 *data) { @@ -115,6 +123,7 @@ unsigned char sf_mcu_power_on_para_get (MCUParam_t attrId) unsigned char mcuReg[REG_SIZE] = { 0 }; unsigned char mcuData[REG_SIZE] = { 0 }; unsigned char i = 0; + SF_TIME_S time; if(attrId == SF_MCU_STARTMODE) { @@ -144,8 +153,12 @@ unsigned char sf_mcu_power_on_para_get (MCUParam_t attrId) dataTemp2 = mcuData[i++]; IRSHTTER = (dataTemp2 << 8) | dataTemp1; } + printf(" start mode = %d IRSHTTER = %d\n", startMode, IRSHTTER); + sf_mcu_rtc_get(&time); + sf_sys_rtc_time_set(&time); + sf_poweron_type_set(startMode); - McuPowerOnMode = startMode; + //McuPowerOnMode = startMode; return startMode; } @@ -176,7 +189,7 @@ unsigned char sf_mcu_rtc_get (SF_TIME_S *time) unsigned char sf_mcu_wdg_off(void) { unsigned char i = 0; - unsigned char regsize =0; + //unsigned char regsize =0; unsigned char mcuReg[2] = {0}; unsigned char mcuPara[2] = {0}; @@ -186,12 +199,13 @@ unsigned char sf_mcu_wdg_off(void) mcuReg[i] = DSP_WRITE_FLG; mcuPara[i++] = 1; - regsize = i; + //regsize = i; - for(i=0; i 6) + pirlevel = 0; + else if(pirs > 3) + pirlevel = 1; + else + pirlevel = 2; + + return pirlevel; +} unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) { unsigned char mcuReg[70] = {0}; unsigned char mcuData[70] = {0}; - unsigned char regsize =0; + //unsigned char regsize =0; unsigned char i = 0; unsigned char temp = 0; //unsigned char dailyReportFlag = 1; unsigned char paraSyncFlag = 0; - //unsigned char gpsAlwaysFlag = 0; - unsigned char DigPirPulseCount = 0; - unsigned char DigPirWindowTime = 0; - SF_PDT_PARAM_CFG_S *puiPara = sf_customer_param_get(); + unsigned char gpsAlwaysFlag = 0; + //unsigned char DigPirPulseCount = 0; + //unsigned char DigPirWindowTime = 0; + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); SF_PARA_TIME_S date = { 0 }; + + SINT32 isUsb = sf_usb_IsInsert(); + SINT32 isCard = sf_in_card_exist(); + SINT32 isCardFull = sf_is_card_full(); //CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle(); - if (attrId > SF_MCU_PARAM_MAX) + MLOGI("isUsb = %d isCard = %d isCardFull = %d\n", isUsb, isCard, isCardFull); + if(!isCard) + { + isCard = sf_is_card(); + MLOGI("isUsb = %d isCard = %d isCardFull = %d\n", isUsb, isCard, isCardFull); + } + if (attrId > SF_MCU_PARAM_MAX) { MLOGE("attrId ERROR!\n"); return -1; @@ -318,8 +364,8 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) if(attrId == SF_MCU_POWEROFF) { //printf("SynMcuSet = %x\n", statisPara->SynMcuSet); - MLOGI("GPSEnterResetModeFlag = %d\n", puiPara->GPSEnterResetModeFlag); - if(puiPara->GPSEnterResetModeFlag == 1) + MLOGI("NeedTimeSyncStartUp = %d\n", sf_sys_get_flag(NeedTimeSyncStartUp)); + if(sf_sys_get_flag(NeedTimeSyncStartUp) == 1) { paraSyncFlag = 1; } @@ -341,23 +387,58 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) mcuReg[i] = SF_RTC_SEC; mcuData[i++] = date.Sec; + if((sf_sys_get_flag(GpsSwitch) == 1) && (sf_sys_get_flag(GpsNumber))) + { + gpsAlwaysFlag=1; + } + else + { + gpsAlwaysFlag=0; + } - if(puiPara->PirSwitch) + if(sf_sys_get_flag(PirSensitivity)) temp = 0x01; else temp = 0x00; - - if(puiPara->GprsMode == 0) - temp |= 0x20; - if(puiPara->TimelapseSwitch) - temp |= 0x02; + if(1 == sf_sys_get_flag(TimelapseSwitch)) + { + temp |= 0x02; + } + + if(1 == sf_sys_get_flag(PirDelaySwitch)) + { + temp |= 0x04; + } - if(puiPara->PirDelaySwitch) - temp |= 0x04; - if(paraSyncFlag ) - temp |= 0x08; + printf("[%s:%d]paraSyncFlag=%d\n", __FUNCTION__, __LINE__, paraSyncFlag); + + if(paraSyncFlag) + { + temp |= 0x08; + } + + + //if(puiPara->dailyReport) + if(/*(puiPara->GpsSwitch) && */(paraSyncFlag == 1)) + { + temp &= ~0x10; + } + else if(simCardInsert) //dailyreport alway open + { + temp |= 0x10; + } + + + if(sf_sys_get_flag(TimeSend1Switch) == 1) + temp |= 0x20; + + if(sf_sys_get_flag(TimeSend2Switch) == 1) + temp |= 0x40; + + if(gpsAlwaysFlag && simCardInsert) + temp |= 0x80; temp |= 0x10; @@ -366,103 +447,15 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) temp = 0; - - if(paraSyncFlag) - { - mcuReg[i] = GPS_POWER_TIMER_CLEAR; - mcuData[i++] = 1; - mcuReg[i] = GPS_POWER_CTRL; - mcuData[i++] = 1; - } - else - { - mcuReg[i] = GPS_POWER_CTRL; - mcuData[i++] = 0; - } - - MLOGI("PirSensitivity=%d\n", puiPara->PirSensitivity); - mcuReg[i] = ANALOG_PIR_SENSITIVITY; - temp = puiPara->PirSensitivity; - - -// if(paraSyncFlag) { -// temp |= 0x10; -// } - - MLOGI("GprsMode:%d\n",puiPara->GprsMode); -// #ifdef SF_HARDWARE_TEST -// temp |= 0x40; //bit 6-bit5: 2 instant, 1 hybird, 0: daily -// #else - - if((puiPara->GprsMode < 10)) - { - if((puiPara->GprsMode == 1)) - temp |= 0x40; //bit 6-bit5: 2 instant, 1 hybird, 0: daily - else - temp |= 0x20; //bit 6-bit5: 2 instant, 1 hybird, 0: daily - } -// #endif - if((puiPara->GprsSwitch)) - temp |= 0x80; - if((val == SF_POWEROFF_SYNC_PARAM)) - temp &= 0x9F; - - mcuData[i++] = temp; - -#if 1 //DIGITAL_PIR - MLOGI("DigitPirSensitivity=%d\n", puiPara->DigitPirSensitivity); - DigPirPulseCount = sf_set_digit_pir_pulse_cnt(puiPara->DigitPirSensitivity); - DigPirWindowTime = 0; - - mcuReg[i] = DIGITAL_PIR_SENSITIVITY; - - mcuData[i++] = sf_set_digit_pir_level(puiPara->DigitPirSensitivity); - mcuReg[i] = DIGITAL_PIR_CFG; - mcuData[i++] = DigPirWindowTime<<4 | DigPirPulseCount; - -#endif - - - //DSP busy/idle - - mcuReg[i] = DSP_BUSY_STATUS; - mcuData[i++] = 0; - - temp = 1; - if(val == SF_POWEROFF_SD_FULL || SF_SD_FULL == sf_sd_status_get()) - temp |= 0x02; - if(val == SF_POWEROFF_NO_SD) - temp &= ~0x01; - - mcuReg[i] = SYS_STATUS; - mcuData[i++] = temp; - - - temp = 0; - if((val == SF_POWEROFF_KEYON) || (val == SF_POWEROFF_SYNC_PARAM)) - temp |= 0x01; //bit0-3:1, reboot in A - else if(val == SF_POWEROFF_AUTO) - temp |= 0x81; // bit7:1 auto power when 3min no operation - else if(val == SF_POWEROFF_LOW_BAT) - temp |= 0x40; - - mcuReg[i] = POWEROFF_TYPE; - mcuData[i++] = temp; - - //battery recovery - mcuReg[i] = VBAT_RECOVER_VAL; - mcuData[i++] = 72; //SF_BATT_RECOVERY; - - - if(puiPara->TimelapseSwitch) + if(sf_sys_get_flag(TimelapseSwitch)) { mcuReg[i] = TIMELAPSE_HOUR; mcuData[i++] = puiPara->TimelapseTime.Hour; mcuReg[i] = TIMELAPSE_MINUTE; mcuData[i++] = puiPara->TimelapseTime.Min; mcuReg[i] = TIMELAPSE_SEC; - - if((puiPara->TimelapseSwitch)&&(puiPara->TimelapseTime.Hour==0)&&(puiPara->TimelapseTime.Min==0)&&(puiPara->TimelapseTime.Sec==0)) + + if((sf_sys_get_flag(TimelapseSwitch)) && (puiPara->TimelapseTime.Hour == 0) && (puiPara->TimelapseTime.Min == 0) && (puiPara->TimelapseTime.Sec == 0)) mcuData[i++] = 5; else mcuData[i++] = puiPara->TimelapseTime.Sec; @@ -476,217 +469,353 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) mcuReg[i] = TIMELAPSE_SEC; mcuData[i++] = 0; } - - if(puiPara->PirDelaySwitch) - { - mcuReg[i] = PIR_DELAY_HOUR; - mcuData[i++] = puiPara->PirDelayTime.Hour; - mcuReg[i] = PIR_DELAY_MINUTE; - mcuData[i++] = puiPara->PirDelayTime.Min; - mcuReg[i] = PIR_DELAY_SEC; - mcuData[i++] = puiPara->PirDelayTime.Sec; - } - else - { - mcuReg[i] = PIR_DELAY_HOUR; - mcuData[i++] = 0; - mcuReg[i] = PIR_DELAY_MINUTE; - mcuData[i++] = 0; - mcuReg[i] = PIR_DELAY_SEC; - mcuData[i++] = 0; - } + + if(sf_sys_get_flag(PirDelaySwitch)) + { + mcuReg[i] = PIR_DELAY_HOUR; + mcuData[i++] = puiPara->PirDelayTime.Hour; + mcuReg[i] = PIR_DELAY_MINUTE; + mcuData[i++] = puiPara->PirDelayTime.Min; + mcuReg[i] = PIR_DELAY_SEC; + mcuData[i++] = puiPara->PirDelayTime.Sec; + } + else + { + mcuReg[i] = PIR_DELAY_HOUR; + mcuData[i++] = 0; + mcuReg[i] = PIR_DELAY_MINUTE; + mcuData[i++] = 0; + mcuReg[i] = PIR_DELAY_SEC; + mcuData[i++] = 0; + } if(paraSyncFlag) { mcuReg[i] = TIME_SYNC_HOUR; mcuData[i++] = 0; mcuReg[i] = TIME_SYNC_MINUTE; - mcuData[i++] = 1; + mcuData[i++] = 0; mcuReg[i] = TIME_SYNC_SEC; - mcuData[i++] = 30; - + mcuData[i++] = 1; } - MLOGI("GPSWaitRestartFlag = %d\n", puiPara->GPSWaitRestartFlag); - - if(puiPara->GprsMode == 1) + + if(sf_sys_get_flag(DailyReportSwitch)) { mcuReg[i] = DAILY_REPORT_HOUR; - mcuData[i++] = (date.Hour + 2) % 24; + mcuData[i++] = puiPara->DailyReportTime2.Hour; mcuReg[i] = DAILY_REPORT_MINUTE; - mcuData[i++] = date.Min; + mcuData[i++] = puiPara->DailyReportTime2.Min; } else { -// if(puiPara->DailyReportTime.Min == 30) -// { -// puiPara->DailyReportTime.Min = 2; -// } - if(puiPara->GPSWaitRestartFlag == 2) - { puiPara->DailyReportTime.Hour = 0; - puiPara->DailyReportTime.Min = 1; - } - - if(puiPara->GprsMode != 2 && puiPara->GPSWaitRestartFlag == 1) - { - - mcuReg[i] = DAILY_REPORT_HOUR; - mcuData[i++] = (date.Hour + 1) % 24; - mcuReg[i] = DAILY_REPORT_MINUTE; - mcuData[i++] = (date.Min) % 60; - puiPara->GPSWaitRestartFlag = 0; - - } - else - { - puiPara->GPSWaitRestartFlag = 0; - if((date.Min + puiPara->DailyReportTime.Min) > 59) - { - mcuReg[i] = DAILY_REPORT_HOUR; - mcuData[i++] = (date.Hour + puiPara->DailyReportTime.Hour +1) % 24; - } - else - { - mcuReg[i] = DAILY_REPORT_HOUR; - mcuData[i++] = (date.Hour + puiPara->DailyReportTime.Hour) % 24; - } - - mcuReg[i] = DAILY_REPORT_MINUTE; - MLOGI("now time =[%02d:%02d:%02d],DailyReportTimer = [%02d:%02d:00]\n",date.Hour,date.Min,date.Sec, puiPara->DailyReportTime.Hour,puiPara->DailyReportTime.Min); - - - if(puiPara->DailyReportTime.Hour == 24) - mcuData[i++] = (date.Min + puiPara->DailyReportTime.Min - 1) % 60; - else - mcuData[i++] = (date.Min + puiPara->DailyReportTime.Min) % 60; - } + mcuReg[i] = DAILY_REPORT_HOUR; + mcuData[i++] =0; + mcuReg[i] = DAILY_REPORT_MINUTE; + mcuData[i++] =0; } - + mcuReg[i] = DAILY_SEND1_HOUR; + mcuData[i++] = puiPara->TimeSend1.Hour; + mcuReg[i] = DAILY_SEND1_MINUTE; + mcuData[i++] = puiPara->TimeSend1.Min; - - - #if 1 //no use - if(puiPara->WorkMode == 1) - { - - mcuReg[i] = DAILY_SEND1_HOUR; - mcuData[i++] = puiPara->TimeSend1.Hour; - mcuReg[i] = DAILY_SEND1_MINUTE; - mcuData[i++] = puiPara->TimeSend1.Min; - - } - -/* - mcuReg[i] = DAILY_SEND2_HOUR; - mcuData[i++] = puiPara->TimeSend2; + mcuReg[i] = DAILY_SEND2_HOUR; + mcuData[i++] = puiPara->TimeSend2.Hour; mcuReg[i] = DAILY_SEND2_MINUTE; - mcuData[i++] = puiPara->TimeSend2; - - mcuReg[i] = DAILY_SEND3_HOUR; - mcuData[i++] = puiPara->TimeSend3; + mcuData[i++] = puiPara->TimeSend2.Min; + + mcuReg[i] = ANALOG_PIR_SENSITIVITY; + temp = sf_mcu_analog_pir_sen_convert(sf_sys_get_flag(PirSensitivity)); + //hybrid mode 4G module keep sleep + if((sf_sys_get_flag(NetWorkNeedSearch) != 3) && simCardInsert && gModuleSleep) + { + //bit 5-bit 6, daily mode 0, hybrid mode 1, instant mode 2 + if((sf_sys_get_flag(GprsMode) == 1) || (paraSyncFlag)) + { + temp |= 0x40; + } + else + { + if ((sf_sys_get_flag(GprsMode) == 2) && isSignalReady && (GPRS_ERRNO == 0)) + temp |= 0x20; + + //sf_pdp_flg_set(0); + } + } + if(((sf_sys_get_flag(GprsSwitch)) && (simCardInsert) && (sf_sys_get_flag(SendType) == 0)) || (paraSyncFlag)) + { + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } + + mcuData[i++] = temp; + + mcuReg[i] = DIGITAL_PIR_SENSITIVITY; + mcuData[i++] = sf_sys_get_flag(DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; + mcuReg[i] = DIGITAL_PIR_CFG; + mcuData[i++] = (sf_sys_get_flag(DigitPirWindowTime) << 4) | sf_sys_get_flag(DigitPirCnt); + //mcuData[i++] = (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0); + + //DSP busy/idle + mcuReg[i] = DSP_BUSY_STATUS; + mcuData[i++] = 0; + + mcuReg[i] = SYS_STATUS; + mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0; + + mcuReg[i] = POWEROFF_TYPE; + temp = 0; + + if(simCardInsert && (sf_sys_get_flag(NetWorkNeedSearch)) + && ((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_DAILY_REPORT)))/* SET->ON, OFF->ON*/ + temp = 1; + else if(SmsCheck) + temp = 2; + + if (!(sf_get_pir_statu_flag() || (PowerOnMode == PWR_ON_AUTO))) + temp |= (val == APP_POWER_OFF_BATT_EMPTY) << 6; + + mcuData[i++] = (val==APP_POWER_OFF_APO)<<7 | temp; + + //battery recovery + mcuReg[i] = VBAT_RECOVER_VAL; + mcuData[i++] = SF_BATT_RECOVERY; + + if(sf_sys_get_flag(WorkTime1Switch)) + { + mcuReg[i] = WORKTIME1_SWITCH; + mcuData[i++] = 0xFF; + + mcuReg[i] = WORKTIME1_START_HOUR; + mcuData[i++] = puiPara->WorkTime[0].StartTime.Hour; + mcuReg[i] = WORKTIME1_START_MINUTE; + mcuData[i++] = puiPara->WorkTime[0].StartTime.Min; + + mcuReg[i] = WORKTIME1_STOP_HOUR; + mcuData[i++] = puiPara->WorkTime[0].StopTime.Hour; + mcuReg[i] = WORKTIME1_STOP_MINUTE; + mcuData[i++] = puiPara->WorkTime[0].StopTime.Min; + } + else + { + mcuReg[i] = WORKTIME1_SWITCH; + mcuData[i++] = 0; + + mcuReg[i] = WORKTIME1_START_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME1_START_MINUTE; + mcuData[i++] = 0; + + mcuReg[i] = WORKTIME1_STOP_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME1_STOP_MINUTE; + mcuData[i++] = 0; + } + + if(sf_sys_get_flag(WorkTime2Switch)) + { + mcuReg[i] = WORKTIME2_SWITCH; + mcuData[i++] = 0xFF; + + mcuReg[i] = WORKTIME2_START_HOUR; + mcuData[i++] = puiPara->WorkTime[1].StartTime.Hour; + mcuReg[i] = WORKTIME2_START_MINUTE; + mcuData[i++] = puiPara->WorkTime[1].StartTime.Min; + + mcuReg[i] = WORKTIME2_STOP_HOUR; + mcuData[i++] = puiPara->WorkTime[1].StopTime.Hour; + mcuReg[i] = WORKTIME2_STOP_MINUTE; + mcuData[i++] = puiPara->WorkTime[1].StopTime.Min; + } + else + { + mcuReg[i] = WORKTIME2_SWITCH; + mcuData[i++] = 0; + + mcuReg[i] = WORKTIME2_START_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME2_START_MINUTE; + mcuData[i++] = 0; + + mcuReg[i] = WORKTIME2_STOP_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME2_STOP_MINUTE; + mcuData[i++] = 0; + } + + if((sf_sys_get_flag(GpsSwitch) || sf_sys_get_flag(FristSendDailyAndGps)) && (((SF_MCU_STARTUP_ONKEY == sf_poweron_type_get())) || paraSyncFlag)) + { + mcuReg[i] = GPS_POWER_TIMER_CLEAR; + mcuData[i++] = 1; + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 1; + } + else + { + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 0; + } + + temp = 0; + + if(sf_sys_get_flag(TimeSend3Switch) == 1) + temp |= 0x01; + + if(sf_sys_get_flag(TimeSend4Switch) == 1) + temp |= 0x02; + + mcuReg[i] = FUNCTION_SWTICH1; + mcuData[i++] = temp; + + mcuReg[i] = DAILY_SEND3_HOUR; + mcuData[i++] = puiPara->TimeSend3.Hour; mcuReg[i] = DAILY_SEND3_MINUTE; - mcuData[i++] = puiPara->TimeSend3; + mcuData[i++] = puiPara->TimeSend3.Min; - mcuReg[i] = DAILY_SEND4_HOUR; - mcuData[i++] = puiPara->TimeSend4; + mcuReg[i] = DAILY_SEND4_HOUR; + mcuData[i++] = puiPara->TimeSend4.Hour; mcuReg[i] = DAILY_SEND4_MINUTE; - mcuData[i++] = puiPara->TimeSend4; -*/ - #endif - + mcuData[i++] = puiPara->TimeSend4.Min; + } + else if(attrId == SF_MCU_CTRL_MODULE_PIR) + { + mcuReg[i] = ANALOG_PIR_SENSITIVITY; - if(puiPara->WorkTime1Switch) - { - mcuReg[i] = WORKTIME1_SWITCH; - - if(puiPara->WorkTime[0].StartTime.Day > 0) - { - mcuData[i++] = puiPara->WorkTime[0].StartTime.Day; - } - else - { - mcuData[i++] = 0xFF; - } + temp = sf_sys_get_flag(PirSensitivity);//sf_mcu_analog_pir_sen_convert(SysGetFlag(DigPirSensitivity)); + + if(sf_sys_get_flag(GprsMode))//hybrid mode 4G module keep sleep + { + temp |= 0x40; + } + + if((sf_sys_get_flag(GprsMode)) && (val == 1)) + { + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } - mcuReg[i] = WORKTIME1_START_HOUR; - mcuData[i++] = puiPara->WorkTime[0].StartTime.Hour; - mcuReg[i] = WORKTIME1_START_MINUTE; - mcuData[i++] = puiPara->WorkTime[0].StartTime.Min; + mcuData[i++] = temp; - mcuReg[i] = WORKTIME1_STOP_HOUR; - mcuData[i++] = puiPara->WorkTime[0].StopTime.Hour; - - mcuReg[i] = WORKTIME1_STOP_MINUTE; - mcuData[i++] = puiPara->WorkTime[0].StopTime.Min; - } - else - { - mcuReg[i] = WORKTIME1_SWITCH; - mcuData[i++] = 0; + if(ConfigureModeFlag) + { + mcuReg[i] = DIGITAL_PIR_SENSITIVITY; + mcuData[i++] = sf_sys_get_flag(DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; + mcuReg[i] = DIGITAL_PIR_CFG; + mcuData[i++] = (sf_sys_get_flag(DigitPirWindowTime) << 4) | sf_sys_get_flag(DigitPirCnt); + } - mcuReg[i] = WORKTIME1_START_HOUR; - mcuData[i++] = 0; - mcuReg[i] = WORKTIME1_START_MINUTE; - mcuData[i++] = 0; + if((sf_sys_get_flag(GpsSwitch) || sf_sys_get_flag(FristSendDailyAndGps)) && (ConfigureModeFlag || paraSyncFlag)) + { + mcuReg[i] = GPS_POWER_TIMER_CLEAR; + mcuData[i++] = 1; + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 1; + } + else + { + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 0; + } + } + else if(attrId == SF_MCU_PARA) + { + mcuReg[i] = ANALOG_PIR_SENSITIVITY; + + temp = sf_sys_get_flag(PirSensitivity);//sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity); + + if((sf_sys_get_flag(GprsMode)) && (gModuleSleep == 1))//hybrid mode 4G module keep sleep + { + temp |= 0x40; + } - mcuReg[i] = WORKTIME1_STOP_HOUR; - mcuData[i++] = 0; - mcuReg[i] = WORKTIME1_STOP_MINUTE; - mcuData[i++] = 0; - } + if((sf_sys_get_flag(GprsMode)) && (simCardInsert)) + { + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } - if(puiPara->WorkTime2Switch) - { - mcuReg[i] = WORKTIME2_SWITCH; - if(puiPara->WorkTime[1].StartTime.Day > 0) - { - mcuData[i++] = puiPara->WorkTime[1].StartTime.Day; - } - else - { - mcuData[i++] = 0xFF; - } - + mcuData[i++] = temp; + + printf("[%s:%d] temp:0x%02x GprsSwitch:%lu simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, sf_sys_get_flag(GprsSwitch), simCardInsert); + mcuReg[i] = DIGITAL_PIR_SENSITIVITY; + mcuData[i++] = sf_sys_get_flag(DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; + mcuReg[i] = DIGITAL_PIR_CFG; + mcuData[i++] = (sf_sys_get_flag(DigitPirWindowTime) << 4) | sf_sys_get_flag(DigitPirCnt); - mcuReg[i] = WORKTIME2_START_HOUR; - mcuData[i++] = puiPara->WorkTime[1].StartTime.Hour; - mcuReg[i] = WORKTIME2_START_MINUTE; - mcuData[i++] = puiPara->WorkTime[1].StartTime.Min; + mcuReg[i] = SYS_STATUS; + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0; - mcuReg[i] = WORKTIME2_STOP_HOUR; - mcuData[i++] = puiPara->WorkTime[1].StopTime.Hour; - mcuReg[i] = WORKTIME2_STOP_MINUTE; - mcuData[i++] = puiPara->WorkTime[1].StopTime.Min; - } - else - { - mcuReg[i] = WORKTIME2_SWITCH; - mcuData[i++] = 0; - - mcuReg[i] = WORKTIME2_START_HOUR; - mcuData[i++] = 0; - mcuReg[i] = WORKTIME2_START_MINUTE; - mcuData[i++] = 0; - - mcuReg[i] = WORKTIME2_STOP_HOUR; - mcuData[i++] = 0; - mcuReg[i] = WORKTIME2_STOP_MINUTE; - mcuData[i++] = 0; - } - } - - mcuReg[i] = DSP_WRITE_FLG; //MCU set end - mcuData[i++] = 1; - - regsize = i; - - for(i = 0; i < regsize; i++) - { - sf_commu_set_mcu(mcuReg[i], mcuData[i]); - } - return 0; + if((sf_sys_get_flag(GpsSwitch) || sf_sys_get_flag(FristSendDailyAndGps)) && (ConfigureModeFlag || paraSyncFlag)) + { + mcuReg[i] = GPS_POWER_TIMER_CLEAR; + mcuData[i++] = 1; + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 1; + } + else + { + mcuReg[i] = GPS_POWER_CTRL; + mcuData[i++] = 0; + } + } + else if(attrId == SF_MCU_RESET_MODULE) + { + mcuReg[i] = SYS_STATUS; + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x10; + //sf_pdp_flg_set(0); + } + else if(attrId == SF_MCU_SOFT_UPDATE) + { + mcuReg[i] = SYS_STATUS; + + if(val == 1) + { + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x08; + } + else + { + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0; + } + } + else if(attrId == SF_MCU_POWER_RESTART) + { + mcuReg[i] = SYS_STATUS; + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x20; + } + else if(attrId == SF_MCU_PIR_RESTART) + { + mcuReg[i] = SYS_STATUS; + mcuData[i++] = sf_sys_get_flag(CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x80; + } + + mcuReg[i] = DSP_WRITE_FLG; //MCU set end + mcuData[i++] = 1; + //printf("[%s:%d] mcuData[%d]0x%02x\n", __FUNCTION__, __LINE__, (i - 1), mcuData[(i - 1)]); + #if 0 + if((attrId == SF_MCU_POWEROFF) && puiPara->DebugMode && IS_CARD_EXIST) + { + for(j = 0; j < i; j++) + { + printf("W_addr[%2d]=0x%02x\n",mcuReg[j],mcuData[j]); + } + + sf_debug_save_log(); + } + #endif + sf_mcu_write_multi(mcuReg, mcuData, i); + return SUCCESS; } + SF_TIME_S sf_get_mcu_poweroff_date(void) { return sfMcuTime; @@ -818,10 +947,10 @@ void sf_mcu_version_get(unsigned char *mcuVer) } #endif -unsigned char sf_mcu_start_mode_get(void) -{ - return McuPowerOnMode; -} +//unsigned char sf_mcu_start_mode_get(void) +//{ +// return McuPowerOnMode; +//} @@ -891,6 +1020,82 @@ unsigned short sf_get_mcu_ver(void) return McuVersion; } + + +/************************************************* + Function: sf_get_power_on_mode + Description: get power start mode + Input: N/A + Output: N/A + Return: 0:ON mode 1:OFF mode + Others: N/A +*************************************************/ +UINT8 sf_get_power_on_mode(void) +{ + static int ModeFlag = 1; + if(ModeFlag) + { + ModeFlag = 0; + PowerOnMode = sf_mcu_power_on_para_get(SF_MCU_POWERON); + PowerOnMode &= 0x0f; + if(1 == PowerOnMode) + { + ConfigureModeFlag = 1; + } + } + return PowerOnMode; +} +UINT8 sf_convert_power_on_mode(void) +{ + PowerOnMode &= 0x0f; + //printf("[%s:%d]PowerOnMode=0x%x\n",__FUNCTION__,__LINE__,PowerOnMode); + return PowerOnMode; +} + +BOOL sf_get_mode_flag(void) +{ + //printf("[%s:%d] ConfigureModeFlag:%d\n",__FUNCTION__,__LINE__,ConfigureModeFlag); + return ConfigureModeFlag; +} + + +/************************************************* + Function: sf_mcu_get_irshtter + Description: get IRSHTTER. + Input: N/A + Output: N/A + Return: IRSHTTER + Others: N/A +*************************************************/ +UINT16 sf_mcu_get_irshtter(void) +{ + UINT8 dataTemp1 = 0, dataTemp2 = 0; + + UINT8 mcuReg[REG_SIZE] = { 0 }; + UINT8 mcuData[REG_SIZE] = { 0 }; + UINT8 i = 0; + + mcuReg[i++] = LUMINANCE_L; + mcuReg[i++] = LUMINANCE_H; + sf_mcu_read_multi(mcuReg, mcuData, i); + i = 0; + + dataTemp1= mcuData[i++]; + dataTemp2 = mcuData[i++]; + + IRSHTTER = (dataTemp2 << 8) | dataTemp1; + + printf("IRSHTTER = %d\n", IRSHTTER); + + return IRSHTTER; +} + +void sf_set_module_sleep_flag(UINT8 flag) +{ + gModuleSleep = flag; +} + + #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/component/updataMng/src/sf_md5.c b/code/application/source/sf_app/code/source/updataMng/sf_md5.c similarity index 100% rename from code/application/source/sf_app/component/updataMng/src/sf_md5.c rename to code/application/source/sf_app/code/source/updataMng/sf_md5.c diff --git a/code/application/source/sf_app/component/updataMng/src/sf_otamng.c b/code/application/source/sf_app/code/source/updataMng/sf_otamng.c similarity index 95% rename from code/application/source/sf_app/component/updataMng/src/sf_otamng.c rename to code/application/source/sf_app/code/source/updataMng/sf_otamng.c index c025cb9a5..156677b7e 100755 --- a/code/application/source/sf_app/component/updataMng/src/sf_otamng.c +++ b/code/application/source/sf_app/code/source/updataMng/sf_otamng.c @@ -30,7 +30,7 @@ extern "C" { #endif static SF_OTA_ATTRS stOtaAttrs = {0}; -static SINT32 packet_log_printf(UINT8 *pbuf,UINT16 lenth) +SINT32 packet_log_printf(UINT8 *pbuf,UINT16 lenth) { UINT16 i= 0; for(i = 0;i < lenth;i++) @@ -241,7 +241,7 @@ static SINT32 upgrade_ota_addfileheader(void) static SINT32 upgrade_md5_check_code_get(SF_CHAR *filename, UINT8 digest[], UINT32 offset, UINT32 size) { MD5_CTX context; - UINT32 len = 0, i = 0; + UINT32 len = 0; UINT32 flieSize = 0; UINT8 buffer[1024] = {0}; int fd = 0; diff --git a/code/application/source/sf_app/component/updataMng/Makefile b/code/application/source/sf_app/component/updataMng/Makefile deleted file mode 100755 index f1da2dd32..000000000 --- a/code/application/source/sf_app/component/updataMng/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -CUR_ROOT := $(shell pwd) -DUAL_OS_EN ?= 1 -SF_CS_DIR :=$(CUR_ROOT)/../.. -ALKAID_DIR ?=$(SF_CS_DIR)/../../../.. -PROJECT_DIR ?=$(ALKAID_DIR)/project -include $(SF_CS_DIR)/build/config.mk - -MODULE_NAME :=$(CUR_DIR_NAME) -SRC_DIR := $(CUR_ROOT)/src - -include $(SF_CS_DIR)/build/modbuild.mk \ No newline at end of file diff --git a/code/hdal/vendor/output/libvendor_ai2_pub.a b/code/hdal/vendor/output/libvendor_ai2_pub.a index 68ef5a4c2965f7753ed7d356c4bd40fed7c6921e..bd2342f1cceda860e29779b4c6fd93b34ad508ab 100755 GIT binary patch delta 336 zcmbPmj$;B4NwXUn85^6MnQT;A%fW7BU}9ovX*&6znE2+m99(=bfzAKKSovWbu&kn5 z7hD!7Ah!90$$w6mip}TjHnPJwVA(lt-%$lN_$dp*Rh+XEpS*WP{N{iJbrzW5=DL(# z5f}$-hDPOeW)y)9EgX!SRqC!Yp@>Q}R--Gsk1DXHLs|f)W%IciJK5lzzWG~OVH~iX f2}|t}dV$W|ymv(#%!%e870n52wwRi delta 336 zcmbPmj$;B4NwXW88yXpy7;aQr%K>2jqETESay!vcT|B5e#(My73b{4C+}Smzd0a5odqVixh|zw1jYfI zp;39A8AV`23kTz7mAdOpD54UL)#%FZqYA9)kQRVx*?exsPBu8FZ~j(R7zb=;!cu#L cUZ68K?_JRbb)tzONJVqP+U*Hz88=h{0OFi#EdT%j diff --git a/code/hdal/vendor/output/libvendor_ai2_pub2.a b/code/hdal/vendor/output/libvendor_ai2_pub2.a index 86fc95da4e29d6b14ba3b86d158e182c75cf1621..5e3b1a1b1afaace23a153e58a812f75182614132 100755 GIT binary patch delta 418 zcmccjn(N+ct_jlYMn=ZQ=4K`vmHGwQjSNgoEG;c2KadySd|r@?4<@krf&5v17zZqS zTE7b}JJ}#Wd~>ngKTf!cfKB3?`#ol{!vr=P1n_deIFlVFiEoaMP(oN2u&HeGuS|6o zxQYkzVw>&q%0=J;8`{J-Uv9d_3=`PAq3tW219Xts=0jc8Z~>sK9OLGs{_9L|^$wE^ z1z?=XVCOAb#D*f^zj7WcTmWPu*Lr(|i2^jR!6Qbo6$8Tc&Gja1mg*ZdXoWisD5Q5!*hikZHL%TqIzV#P)kTx|D`6Rsj)llbO-k6G+6fz1X1yc{sjWQR%Oo1-I?5Y`23D%<=kQ=J8_;(@%_ zX1ly{5xBsHHu24uo31g#1U7GI`wHg(9VE8-P**iv04OWRxH+l+Iul&I!z4oi7-urr zd5adYp$Pb|oW}|m0GY_O-X39Mz^1t{=NV7l&?eE$vwb_ycE*F1NLs|Vzcye}aBy<>GK%0h=VYCv-B^=>PyPntwn5 diff --git a/code/lib/include/io/gpio.h b/code/lib/include/io/gpio.h index f466336fa..b1e914c3b 100755 --- a/code/lib/include/io/gpio.h +++ b/code/lib/include/io/gpio.h @@ -214,6 +214,21 @@ typedef enum { #define A_GPIO_0 (0 + A_GPI_SHIFT_BASE) ///< A_GPIO[0] #define A_GPIO_1 (1 + A_GPI_SHIFT_BASE) ///< A_GPIO[1] #define A_GPIO_2 (2 + A_GPI_SHIFT_BASE) ///< A_GPIO[2] + +/*GPIO DSI Data register*/ +#define DSI_GPIO_SHIFT_BASE 224 +#define DSI_GPIO_0 (0 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[0] +#define DSI_GPIO_1 (1 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[1] +#define DSI_GPIO_2 (2 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[2] +#define DSI_GPIO_3 (3 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[3] +#define DSI_GPIO_4 (4 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[4] +#define DSI_GPIO_5 (5 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[5] +#define DSI_GPIO_6 (6 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[6] +#define DSI_GPIO_7 (7 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[7] +#define DSI_GPIO_8 (8 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[8] +#define DSI_GPIO_9 (9 + DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[9] +#define DSI_GPIO_10 (10+ DSI_GPIO_SHIFT_BASE) ///< DSI_GPIO[10] + //@} diff --git a/code/lib/source/sifar/Makefile b/code/lib/source/sifar/Makefile index 3518d63c5..5cbf0d320 100755 --- a/code/lib/source/sifar/Makefile +++ b/code/lib/source/sifar/Makefile @@ -11,6 +11,7 @@ CARDV_DIR = $(APP_DIR)/source/cardv CARDV_SOURCE_DIR = $(CARDV_DIR)/SrcCode CARDV_SOURCE_UIINFO_DIR = $(CARDV_SOURCE_DIR)/UIWnd/LVGL_SPORTCAM/UIInfo SIFAR_DIR = $(LIBRARY_DIR)/source/sifar/code +SIFAR_APP_DIR = $(APP_DIR)/source/sf_app/code/include SIFAR_OUTPUT_DIR = $(LIBRARY_DIR)/source/sifar/output/ MEDIA_DIR = $(NVT_HDAL_DIR)/vendor/media CARDV_SOURCE_LVGL_SPORTCAM_DIR = $(CARDV_SOURCE_DIR)/UIWnd/LVGL_SPORTCAM @@ -32,8 +33,11 @@ EXTRA_INCLUDE += \ -I$(CARDV_SOURCE_UIINFO_DIR) \ -I$(CARDV_SOURCE_DIR) \ -I$(SIFAR_DIR)/include \ + -I$(SIFAR_APP_DIR) \ -I$(INCLUDE_DIR) \ -I$(KDRV_DIR)/include \ + -I$(KDRV_DIR)/include/plat \ + -I$(KDRV_DIR)/include/comm \ -I$(KFLOW_DIR)/include \ -I$(MEDIA_DIR)/include \ -I$(CARDV_SOURCE_LVGL_SPORTCAM_DIR) \ @@ -69,7 +73,12 @@ SRC = \ code/source/common/sf_common.c \ code/source/common/sf_led.c \ code/source/common/sf_battery.c \ - code/source/module/sf_tcp.c + code/source/module/sf_tcp.c \ + $(APP_DIR)/source/sf_app/code/source/logMng/sf_log.c \ + $(APP_DIR)/source/sf_app/code/source/qrcodeMng/sf_base64.c \ + $(APP_DIR)/source/sf_app/code/source/paramMng/sf_param_common.c \ + $(APP_DIR)/source/sf_app/code/source/commMng/sf_message_queue.c \ + $(APP_DIR)/source/sf_app/code/source/commMng/sf_share_mem.c # code/source/common/sf_message_queue.c \ # code/source/common/sf_share_mem.c \ diff --git a/code/lib/source/sifar/code/include/sf_battery.h b/code/lib/source/sifar/code/include/sf_battery.h index 89beca0fe..2d33a1904 100755 --- a/code/lib/source/sifar/code/include/sf_battery.h +++ b/code/lib/source/sifar/code/include/sf_battery.h @@ -20,5 +20,7 @@ void sf_battery_thread_init(void); UINT8 sf_get_night_led_flag(void); void sf_set_night_led_flag(UINT8 flag); UINT32 sf_battery_level_get(void); +void sf_view_osd_battery_draw(UINT8 bShow); +UINT8 sf_battery_value_get(UINT8 nightMode); #endif diff --git a/code/lib/source/sifar/code/include/sf_common.h b/code/lib/source/sifar/code/include/sf_common.h index 0be2b051f..35cd45518 100755 --- a/code/lib/source/sifar/code/include/sf_common.h +++ b/code/lib/source/sifar/code/include/sf_common.h @@ -65,6 +65,7 @@ BOOL sf_cmd_mcu_power_on_para_get(unsigned char argc, char **argv); UINT32 sf_set_pir_sensitivity(UINT8 pirs); void sf_usb_mux_s(UINT32 cnt); BOOL sf_cmd_usb_mux_s(unsigned char argc, char **argv); +void sf_cardv_message_thread_init(void); #define SF_SD_DISK "A:" #define SF_SD_ROOT "/mnt/sd/" diff --git a/code/lib/source/sifar/code/include/sf_inc.h b/code/lib/source/sifar/code/include/sf_inc.h index d32124c81..acfbb0f26 100755 --- a/code/lib/source/sifar/code/include/sf_inc.h +++ b/code/lib/source/sifar/code/include/sf_inc.h @@ -17,6 +17,9 @@ //#include //#include //#include +#include +#include +#include #endif diff --git a/code/lib/source/sifar/code/include/sf_led.h b/code/lib/source/sifar/code/include/sf_led.h index 390873b02..0290ca37b 100755 --- a/code/lib/source/sifar/code/include/sf_led.h +++ b/code/lib/source/sifar/code/include/sf_led.h @@ -21,9 +21,26 @@ #ifndef __SF_LED_H__ #define __SF_LED_H__ +#include "UIInfo/UIInfo.h" typedef enum LedId_e { + #if HW_S530 + SF_LED_STATUS_R, + SF_LED_STATUS_G, + SF_LED_SD_G, + SF_LED_SD_R, + SF_LED_WIFI, + SF_LED_BAT1, + SF_LED_BAT2, + SF_LED_BAT3, + SF_LED_BAT4, + SF_LED_SIG1_R, + SF_LED_SIG1_G, + SF_LED_SIG2, + SF_LED_SIG3, + SF_LED_SIG4, + #endif SF_LED_BUSY, SF_LED_ALL, }LedId_t; @@ -47,21 +64,25 @@ typedef enum LedSysState_e SF_LED_SYS_STATE_SD_NORMAL,/*6*/ SF_LED_SYS_STATE_SD_ERROR, SF_LED_SYS_STATE_SD_FULL, - SF_LED_SYS_STATE_WIFI_DISCONNECT,/*9*/ + SF_LED_SYS_STATE_SD_FORMAT_START, + SF_LED_SYS_STATE_SD_FORMAT_SUCCESS, + SF_LED_SYS_STATE_SD_FORMAT_FAIL, + SF_LED_SYS_STATE_SD_FORMAT_EXIT, + SF_LED_SYS_STATE_WIFI_DISCONNECT,/*13*/ SF_LED_SYS_STATE_WIFI_CONNECTED, - SF_LED_SYS_STATE_BAT_0,/*11*/ + SF_LED_SYS_STATE_BAT_0,/*15*/ SF_LED_SYS_STATE_BAT_1, SF_LED_SYS_STATE_BAT_2, SF_LED_SYS_STATE_BAT_3, SF_LED_SYS_STATE_BAT_4, /*SF_LED_SYS_STATE_BAT_LOW,*/ - SF_LED_SYS_STATE_GPRS_NO_SIGNAL,/*16*/ + SF_LED_SYS_STATE_GPRS_NO_SIGNAL,/*20*/ SF_LED_SYS_STATE_GPRS_SIGNAL_0, SF_LED_SYS_STATE_GPRS_SIGNAL_1, SF_LED_SYS_STATE_GPRS_SIGNAL_2, SF_LED_SYS_STATE_GPRS_SIGNAL_3, SF_LED_SYS_STATE_GPRS_SIGNAL_4, - SF_LED_SYS_STATE_GPRS_SEARCH,/*22*/ + SF_LED_SYS_STATE_GPRS_SEARCH,/*26*/ SF_LED_SYS_STATE_SIM_ERROR, SF_LED_SYS_STATE_SERVER_FAIL, SF_LED_SYS_STATE_DEBUG_ON, @@ -71,7 +92,7 @@ typedef enum LedSysState_e SF_LED_SYS_STATE_GOING_TO_PIR, SF_LED_SYS_STATE_EXIT_GO_TO_PIR, SF_LED_SYS_STATE_POWER_OFF, - SF_LED_SYS_STATE_PIR_DETECT, + SF_LED_SYS_STATE_PIR_DETECT,/*36*/ SF_LED_SYS_STATE_PIR_NOT_DETECT, }LedSysState_t; diff --git a/code/lib/source/sifar/code/include/sf_mcu.h b/code/lib/source/sifar/code/include/sf_mcu.h index ce93f9dd8..15c3d6dd5 100755 --- a/code/lib/source/sifar/code/include/sf_mcu.h +++ b/code/lib/source/sifar/code/include/sf_mcu.h @@ -26,7 +26,7 @@ #define SUCCESS 0 #define FAIL 1 -#define SF_MCU_NIGHT_MODE_LUMINANCE 380 +#define SF_MCU_NIGHT_MODE_LUMINANCE 600 #define DIGITAL_PIR 1 @@ -420,6 +420,10 @@ void sf_set_sim_insert(UINT8 sim); UINT8 sf_get_mcu_rtc_set_sys(void); unsigned short sf_get_mcu_ver(void); UINT16 sf_mcu_get_irshtter(void); +void sf_mcu_set_irshtter(UINT16 data); +UINT16 sf_get_irshtter(void); +void sf_set_power_on_mode(UINT8 data); +void sf_set_module_sleep_flag(UINT8 flag); #endif diff --git a/code/lib/source/sifar/code/source/common/sf_battery.c b/code/lib/source/sifar/code/source/common/sf_battery.c index 88c0754bf..e2ef5aafe 100755 --- a/code/lib/source/sifar/code/source/common/sf_battery.c +++ b/code/lib/source/sifar/code/source/common/sf_battery.c @@ -237,6 +237,48 @@ UINT32 sf_battery_adc_value_get_once(void) } } +#if HW_S530 + +/************************************************* + Function: sf_battery_level_update + Description: Get battery Voltage with Level. + Input: N/A + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +void sf_battery_level_update(void) +{ + UINT8 batteryVal = 0; + UINT8 batteryLevel = SF_BATT_LEVEL_0; + + batteryVal = sf_battery_value_get(sf_get_night_led_flag()); + + if(batteryVal >= 70) + { + batteryLevel = SF_BATT_LEVEL_4; + } + else if(batteryVal >= 40) + { + batteryLevel = SF_BATT_LEVEL_3; + } + else if(batteryVal >= 20) + { + batteryLevel = SF_BATT_LEVEL_2; + } + else if(batteryVal >= 1) + { + batteryLevel = SF_BATT_LEVEL_1; + } + else + { + batteryLevel = SF_BATT_LEVEL_0; + } + sf_LatestBattLevel = batteryLevel; +} + + +#else /************************************************* Function: sf_battery_level_update Description: Get battery Voltage with Level. @@ -250,7 +292,7 @@ void sf_battery_level_update(void) UINT8 batteryVal = 0; UINT8 batteryLevel = SF_BATT_LEVEL_0; - if(IsNightLedOn) + if(sf_get_night_led_flag()) { return; } @@ -353,7 +395,7 @@ void sf_battery_level_update(void) printf("battery levle=%d\n", sf_LatestBattLevel); } } - +#endif /************************************************* Function: sf_check_low_battery Description: check is low battery in auto mode. @@ -373,7 +415,7 @@ BOOL sf_check_low_battery(void) sf_battery_level_update(); - if(IsNightLedOn) + if(sf_get_night_led_flag()) { if(SysGetFlag(BatteryType) == SF_BATT_ALKALINE) { @@ -658,6 +700,8 @@ void sf_battery_level_polling(void) } } } + + sf_battery_level_update(); ret = sf_check_low_battery(); @@ -668,16 +712,22 @@ void sf_battery_level_polling(void) if(batTempLevel != sf_LatestBattLevel) { - //sp5kHostMsgSend(APP_UI_MSG_TRANSFER_REFLUSH, 0, 0, 0); batTempLevel = sf_LatestBattLevel; + #if HW_S530 + sf_view_osd_battery_draw(TRUE); + #endif } if(ret == TRUE) { - if(IsNightLedOn) + if(sf_get_night_led_flag()) { - //sf_ir_led_set(0, 0, 0); + sf_ir_led_set(0, 0, 0, 0); } + + //the Module not need sleep. + //gModuleSleep = 0; + sf_set_module_sleep_flag(0); if(battEmpty == 0) { @@ -686,6 +736,22 @@ void sf_battery_level_polling(void) //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start } } + else if(sf_LatestBattLevel == SF_BATT_LEVEL_1) + { + if((sf_battery_value_get(sf_get_night_led_flag()) < 10) && (sf_led_get(SF_LED_BAT1) != SF_LED_STATE_SLOW_FLASHING)) + { + printf("[%s:%d] SF_LED_BAT1 SF_LED_STATE_SLOW_FLASHING\n", __FUNCTION__, __LINE__); + sf_led_set(SF_LED_BAT1, SF_LED_STATE_SLOW_FLASHING); + } + else if((sf_battery_value_get(sf_get_night_led_flag()) == 10) && (sf_led_get(SF_LED_BAT1) != SF_LED_STATE_ON)) + { + printf("[%s:%d] SF_LED_BAT1 SF_LED_STATE_SLOW_FLASHING\n", __FUNCTION__, __LINE__); + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + } + } + else + { + } } THREAD_RETTYPE sf_battery_check_thread(void *arg) { @@ -740,4 +806,291 @@ UINT32 sf_battery_level_get(void) return (UINT32)sf_LatestBattLevel; } + +void sf_view_osd_battery_draw(UINT8 bShow) +{ + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + #if HW_S530 + if(!sf_get_mode_flag()) + { + return; + } + + if(bShow) + { + switch(sf_battery_level_get()) + { + case SF_BATT_LEVEL_0: + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_0); + break; + case SF_BATT_LEVEL_1: + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_1); + break; + case SF_BATT_LEVEL_2: + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_2); + break; + case SF_BATT_LEVEL_3: + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_3); + break; + case SF_BATT_LEVEL_4: + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_4); + break; + default: + break; + } + } + #endif + printf("[%s:%d] e\n", __FUNCTION__, __LINE__); +} + + +/************************************************* + Function: sf_battery_value_get + Description: get battery value x% + Input: nightMode or no + Output: N/A + Return: battery value x% + Others: N/A +*************************************************/ +UINT8 sf_battery_value_get(UINT8 nightMode) +{ + UINT8 value = 0; + UINT8 batteryVal = 0; + + if(IsPowerDcIn == 0) + { + //printf("BatMedian:%d\n", BatMedian); + if(LiPolymerVoltageVal) + { + batteryVal = LiPolymerVoltageVal; + + if(batteryVal < 65) + { + if(nightMode && (batteryVal >= 43)) + value = 1; + else + value = 0; + } + else if(batteryVal < 71) + { + value = 1; + } + else if(batteryVal < 72) + { + value = 10; + } + else if(batteryVal < 73) + { + value = 20; + } + else if(batteryVal < 74) + { + value = 30; + } + else if(batteryVal < 75) + { + value = 40; + } + else if(batteryVal < 76) + { + value = 50; + } + else if(batteryVal < 77) + { + value = 60; + } + else if(batteryVal < 78) + { + value = 70; + } + else if(batteryVal < 79) + { + value = 80; + } + else if(batteryVal < 81) + { + value = 90; + } + else + { + value = 100; + } + } + else + { + batteryVal = BatVoltageVal; + + if(SysGetFlag(BatteryType) == SF_BATT_ALKALINE) //ALK + { + if(batteryVal < 62) + { + if(nightMode && (batteryVal >= 43)) + value = 1; + else + value = 0; + } + else if(batteryVal < 65) + { + value = 1; + } + else if(batteryVal < 69) + { + value = 10; + } + else if(batteryVal < 71) + { + value = 20; + } + else if(batteryVal < 72) + { + value = 30; + } + else if(batteryVal < 73) + { + value = 40; + } + else if(batteryVal < 75) + { + value = 50; + } + else if(batteryVal < 76) + { + value = 60; + } + else if(batteryVal < 78) + { + value = 70; + } + else if(batteryVal < 80) + { + value = 80; + } + else if(batteryVal < 83) + { + value = 90; + } + else + { + value = 100; + } + } + else if(SysGetFlag(BatteryType) == SF_BATT_NI_MH) //NIH + { + if(batteryVal < 60) + { + if(nightMode && (batteryVal >= 43)) + value = 1; + else + value = 0; + } + else if(batteryVal < 61) + { + value = 1; + } + else if(batteryVal < 62) + { + value = 10; + } + else if(batteryVal < 64) + { + value = 20; + } + else if(batteryVal < 65) + { + value = 30; + } + else if(batteryVal < 67) + { + value = 40; + } + else if(batteryVal < 68) + { + value = 50; + } + else if(batteryVal < 70) + { + value = 60; + } + else if(batteryVal < 71) + { + value = 70; + } + else if(batteryVal < 73) + { + value = 80; + } + else if(batteryVal < 75) + { + value = 90; + } + else + { + value = 100; + } + } + else + { + if(batteryVal < 62) + { + if(nightMode && (batteryVal >= 43)) + value = 1; + else + value = 0; + } + else if(batteryVal < 75) + { + value = 1; + } + else if(batteryVal < 80) + { + value = 10; + } + else if(batteryVal < 82) + { + value = 20; + } + else if(batteryVal < 83) + { + value = 30; + } + else if(batteryVal < 84) + { + value = 40; + } + else if(batteryVal < 86) + { + value = 50; + } + else if(batteryVal < 91) + { + value = 60; + } + else if(batteryVal < 92) + { + value = 70; + } + else if(batteryVal < 93) + { + value = 80; + } + else if(batteryVal < 94) + { + value = 90; + } + else + { + value = 100; + } + } + } + } + else + { + value = 100; + } + + return value; + +} + #endif diff --git a/code/lib/source/sifar/code/source/common/sf_common.c b/code/lib/source/sifar/code/source/common/sf_common.c index 5fd5fedc2..30817cbae 100755 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -53,6 +54,10 @@ #include "UIFlowPhoto/UIFlowPhotoFuncs.h" #include "UIFlowMovie/UIFlowMovieFuncs.h" +#include +#include +#include +#include BOOL isGoing2PowerOff = FALSE; UINT16 AutoOfftime = 0; @@ -1096,4 +1101,200 @@ BOOL sf_cmd_usb_mux_s(unsigned char argc, char **argv) return TRUE; } +/************************************************* + Function: sf_signal_led_show + Description: signal led show + Input: signal level + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +void sf_signal_led_show(UINT8 signalLevel) +{ + if(signalLevel == 0) + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_0); + else if (signalLevel == 1) + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_1); + else if (signalLevel == 2) + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_2); + else if (signalLevel == 3) + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_3); + else + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_4); +} + +static SINT32 sf_cardv_proccess_cmd_mcu(SF_MESSAGE_BUF_S *pMessageBuf) +{ + printf("[%s:%d] ID = %#x\n", __FUNCTION__, __LINE__,pMessageBuf->arg1); + //SF_MESSAGE_BUF_S stMessageBuf = {0}; + + switch(pMessageBuf->arg1) + { + case SF_MCU_CMD_POWERON: + sf_set_power_on_mode(pMessageBuf->arg2); + sf_mcu_set_irshtter(pMessageBuf->arg3); + break; + + default: + break; + } + return SF_SUCCESS; +} + +static SINT32 sf_cardv_proccess_cmd_key(SF_MESSAGE_BUF_S *pMessageBuf) +{ + printf("[%s:%d] ID = %#x\n", __FUNCTION__, __LINE__,pMessageBuf->arg1); + //SF_MESSAGE_BUF_S stMessageBuf = {0}; + + switch(pMessageBuf->arg1) + { + case SF_EVENT_KEY_SHORT_CLICK: + if(SF_KEY_PIN_DATAREADY == pMessageBuf->arg2) + { + sf_mcu_dataready_ck(pMessageBuf->arg3); + } + break; + + default: + break; + } + return SF_SUCCESS; +} + +static SINT32 app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) +{ + printf("[%s:%d] ID = %#x\n", __FUNCTION__, __LINE__,pMessageBuf->arg1); + + switch(pMessageBuf->arg1) + { + case SF_PARA_CMD_UPDATE: + sf_share_mem_customer_update(); + break; + + default: + break; + } + return SF_SUCCESS; +} + + +void sf_cardv_proccess_cmd_gprs(SF_MESSAGE_BUF_S *pMessageBuf) +{ + UINT8 netSearchStep = pMessageBuf->arg1; + UINT8 cq_Signal = pMessageBuf->arg2; + UINT32 simCardInsert = ((pMessageBuf->arg3) >> 0) & 1; + UINT8 gGPRSNoRespone = ((pMessageBuf->arg3) >> 1) & 1; + UINT32 FtpOpenOk = ((pMessageBuf->arg3) >> 2) & 1; + + if (sf_get_fw_update()) + return; + + if(SysGetFlag(GprsSwitch) == SF_ON) + { + + printf("simCardInsert=%d gprs_search_process=%d cq_Signal=%d gGPRSNoRespone=%d ", simCardInsert, netSearchStep, cq_Signal, gGPRSNoRespone); + + if(!simCardInsert) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); + } + else + { + if(netSearchStep == GPRS_SEARCH_STEP_IDLE) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SEARCH); + } + /*else if(gprs_search_process == GPRS_SEARCH_STEP_INIT) + { + appOsdLib_TextIDDraw(0, 32, SP5K_GFX_ALIGN_TOP_LEFT, ID_STR_MODULE_INIT); + }*/ + else if(netSearchStep == GPRS_SEARCH_STEP_SEARCH) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SEARCH); + } + else if(netSearchStep == GPRS_SEARCH_STEP_SYNC_TIME) + { + //sf_signal_led_show(sf_signal_level_get(puiPara->NetFlagG, cq_Signal)); + } + else if(netSearchStep == GPRS_SEARCH_STEP_GPS_LOCATE) + { + //sf_signal_led_show(sf_signal_level_get(puiPara->NetFlagG, cq_Signal)); + } + /*else if(gprs_search_process == GPRS_SEARCH_STEP_INIT_FAILED) + { + appOsdLib_TextIDDraw(0, 32, SP5K_GFX_ALIGN_TOP_LEFT, ID_STR_MODULE_ERROR); + }*/ + else + { + if((cq_Signal == 0) && (gGPRSNoRespone == 0)) + { + if(!sf_get_fw_update()) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + } + else if(cq_Signal == 0) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_NO_SIGNAL); + } + else if(FtpOpenOk == FAIL) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SERVER_FAIL); + } + else //if(cq_Signal < 32) + { + sf_signal_led_show(sf_signal_level_get(SysGetFlag(NetGeneration), cq_Signal)); + } + } + } + } + +} + +void* sf_cardv_message_thread(void *argv) +{ + SINT32 ret = 0; + SF_MESSAGE_BUF_S stMessagebuf = {0}; + while(1) + { + ret = sf_com_message_recv_from_cardv(&stMessagebuf); + if(ret !=SF_SUCCESS) + { + continue; + } + printf("cmdId:%#x,paramBuf[%d]\n",stMessagebuf.cmdId,stMessagebuf.arg1); + switch(stMessagebuf.cmdId) + { + case CMD_MCU: + sf_cardv_proccess_cmd_mcu(&stMessagebuf); + break; + case CMD_KEY: + sf_cardv_proccess_cmd_key(&stMessagebuf); + break; + case CMD_PARA: + app_proccess_cmd_para_update(&stMessagebuf); + break; + case CMD_GPRS: + sf_cardv_proccess_cmd_gprs(&stMessagebuf); + break; + default: + break; + } + } +} + +void sf_cardv_message_thread_init(void) +{ + signed int s32Ret = 0; + pthread_t cardv_tStartUpThread = 0; + s32Ret = pthread_create(&cardv_tStartUpThread, NULL, sf_cardv_message_thread, NULL); + if (0 != s32Ret) + { + printf("%s:%d thread create failed\n", __FUNCTION__, __LINE__); + } + + return; +} + diff --git a/code/lib/source/sifar/code/source/common/sf_led.c b/code/lib/source/sifar/code/source/common/sf_led.c index 3ca15c921..8ad3b536a 100755 --- a/code/lib/source/sifar/code/source/common/sf_led.c +++ b/code/lib/source/sifar/code/source/common/sf_led.c @@ -48,18 +48,39 @@ static BOOL isGoToPir = FALSE; static BOOL isUsbIn = FALSE; +#if HW_S530 + +static BOOL isRunningLedOn = FALSE; +static UINT8 FormatSdFlag = 0; +#endif LedInfo_t LedInfo[SF_LED_ALL] = { /* ledId, ledstate, times, gpioNum */ - {SF_LED_BUSY, SF_LED_STATE_ON, 0, GPIO_GREEN_LED}, + #if HW_S530 + {SF_LED_STATUS_R, SF_LED_STATE_OFF, 0, GPIO_LED_STATUS_R}, + {SF_LED_STATUS_G, SF_LED_STATE_OFF, 0, GPIO_LED_STATUS_G}, + {SF_LED_SD_G, SF_LED_STATE_OFF, 0, GPIO_LED_SD_G}, + {SF_LED_SD_R, SF_LED_STATE_OFF, 0, GPIO_LED_SD_R}, + {SF_LED_WIFI, SF_LED_STATE_OFF, 0, GPIO_LED_WIFI_B}, + {SF_LED_BAT1, SF_LED_STATE_OFF, 0, GPIO_LED_BAT_1}, + {SF_LED_BAT2, SF_LED_STATE_OFF, 0, GPIO_LED_BAT_2}, + {SF_LED_BAT3, SF_LED_STATE_OFF, 0, GPIO_LED_BAT_3}, + {SF_LED_BAT4, SF_LED_STATE_OFF, 0, GPIO_LED_BAT_4}, + {SF_LED_SIG1_R, SF_LED_STATE_OFF, 0, GPIO_LED_SIG_1_R}, + {SF_LED_SIG1_G, SF_LED_STATE_OFF, 0, GPIO_LED_SIG_1_G}, + {SF_LED_SIG2, SF_LED_STATE_OFF, 0, GPIO_LED_SIG_2}, + {SF_LED_SIG3, SF_LED_STATE_OFF, 0, GPIO_LED_SIG_3}, + {SF_LED_SIG4, SF_LED_STATE_OFF, 0, GPIO_LED_SIG_4}, + #endif + {SF_LED_BUSY, SF_LED_STATE_OFF, 0, GPIO_GREEN_LED}, }; -ID FLG_ID_SF_LED = 0; +//ID FLG_ID_SF_LED = 0; // Flag -#define FLG_SF_LED_IDLE FLGPTN_BIT(0) -#define FLG_SF_LED FLGPTN_BIT(1) -#define FLG_SF_LED_ALL 0xFFFFFFFF +//#define FLG_SF_LED_IDLE FLGPTN_BIT(0) +//#define FLG_SF_LED FLGPTN_BIT(1) +//#define FLG_SF_LED_ALL 0xFFFFFFFF static void sf_led_on(LedId_t ledId) { @@ -75,6 +96,90 @@ static void sf_led_off(LedId_t ledId) //printf("[%s:%d] gpioNum:%d ledId:%d\n", __FUNCTION__, __LINE__,LedInfo[ledId].gpioNum,ledId); gpio_set_value(LedInfo[ledId].gpioNum, SF_LED_STATE_OFF); } +#if HW_S530 +void sf_set_runningLed(BOOL status) +{ + isRunningLedOn = status; +} + +THREAD_RETTYPE sf_runningLed_thread(void *arg) +{ + THREAD_ENTRY(); + UINT8 run = 0; + UINT8 time = 0; + + while(1) + { + if(isRunningLedOn) + { + time++; + + if(time == 50) + { + time = 0; + + switch(run) + { + case 0: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 1: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 2: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 3: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + run++; + break; + + case 4: + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_ON); + run = 0; + break; + } + } + } + else + { + run = 0; + time = 0; + } + vos_util_delay_ms(10); + } + + printf("[%s:%d] e \n", __FUNCTION__, __LINE__); + THREAD_RETURN(0); + +} +#endif THREAD_RETTYPE sf_led_thread(void *arg) @@ -82,18 +187,18 @@ THREAD_RETTYPE sf_led_thread(void *arg) THREAD_ENTRY(); UINT8 i = 0; - FLGPTN FlgPtn; + //FLGPTN FlgPtn; printf("[%s:%d] s\n", __FUNCTION__, __LINE__); while((!sf_is_usb_flag()) && (sf_get_power_off_flag() != 1)) { - if((!isGoToPir) && (!isUsbIn)) + /*if((!isGoToPir) && (!isUsbIn)) { vos_flag_set(FLG_ID_SF_LED, FLG_SF_LED_IDLE); //PROFILE_TASK_IDLE(); vos_flag_wait(&FlgPtn, FLG_ID_SF_LED, FLG_SF_LED, TWF_ORW | TWF_CLR); //PROFILE_TASK_BUSY(); vos_flag_clr(FLG_ID_SF_LED, FLG_SF_LED_IDLE); - } + }*/ for(i = 0; i < SF_LED_ALL; i++) { @@ -139,13 +244,49 @@ THREAD_RETTYPE sf_led_thread(void *arg) else if(LedInfo[i].ledstate == SF_LED_STATE_ON) { sf_led_on(LedInfo[i].ledId); - } + } + #if HW_S530 + else if(LedInfo[i].ledstate == SF_LED_STATE_SLOW_FLASHING) + { + if(LedInfo[i].times == 0) + { + sf_led_on(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 50) //50*10ms + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 100) //100*10ms + { + sf_led_on(LedInfo[i].ledId); + LedInfo[i].times = 0; + } + LedInfo[i].times++; + } + else if(LedInfo[i].ledstate == SF_LED_STATE_FLASHING) + { + if(LedInfo[i].times == 0) + { + sf_led_on(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 25) //25*10ms + { + sf_led_off(LedInfo[i].ledId); + } + else if(LedInfo[i].times == 50) //50*10ms + { + sf_led_on(LedInfo[i].ledId); + LedInfo[i].times = 0; + } + LedInfo[i].times++; + } + #endif } vos_util_delay_ms(10); } - vos_flag_destroy(FLG_ID_SF_LED); - FLG_ID_SF_LED = 0; + /*vos_flag_destroy(FLG_ID_SF_LED); + FLG_ID_SF_LED = 0;*/ printf("[%s:%d] e \n", __FUNCTION__, __LINE__); THREAD_RETURN(0); } @@ -187,6 +328,7 @@ Ledstate_t sf_led_get(LedId_t ledId) void sf_led_init(void) { + return; UINT8 i = 0; static UINT8 dofirst = 1; printf("[%s:%d] s\n", __FUNCTION__, __LINE__); @@ -206,11 +348,16 @@ void sf_led_init(void) } - vos_flag_create(&FLG_ID_SF_LED, NULL, "FLG_ID_SF_LED"); + //vos_flag_create(&FLG_ID_SF_LED, NULL, "FLG_ID_SF_LED"); /*thread creat*/ s_handle_led = vos_task_create(sf_led_thread, NULL, "sf_led_thread", 25, 2048); vos_task_resume(s_handle_led); - printf("[%s:%d] e\n", __FUNCTION__, __LINE__); + #if HW_S530 + /*thread creat*/ + s_handle_led = vos_task_create(sf_runningLed_thread, NULL, "sf_runningLed_thread", 25, 2048); + vos_task_resume(s_handle_led); + #endif + printf("[%s:%d] e SF_LED_ALL:%d\n", __FUNCTION__, __LINE__,SF_LED_ALL); } @@ -218,10 +365,230 @@ void sf_led_init(void) void sf_sys_status_led_set(LedSysState_t ledSysStateId) { - if((ledSysStateId != SF_LED_SYS_STATE_PIR_DETECT) && (ledSysStateId != SF_LED_SYS_STATE_PIR_NOT_DETECT)) + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + stMessageBuf.arg1 = ledSysStateId; + stMessageBuf.cmdId = CMD_LED; + sf_com_message_send_to_app(&stMessageBuf); + + return; + //if((ledSysStateId != SF_LED_SYS_STATE_PIR_DETECT) && (ledSysStateId != SF_LED_SYS_STATE_PIR_NOT_DETECT)) printf("SYS LED SET %d\n", ledSysStateId); switch(ledSysStateId) { + #if HW_S530 + case SF_LED_SYS_STATE_ERROR: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_FLASHING); + break; + + case SF_LED_SYS_STATE_NORMAL: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_UPDATE: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SENDING: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_SLOW_FLASHING); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + case SF_LED_SYS_STATE_SEND_FAIL: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SEND_SUCCESS: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SD_NORMAL: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SD_ERROR: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SD_FULL: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_SD_FORMAT_START: + FormatSdFlag = 1; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_OFF); + sf_set_runningLed(0); + break; + + case SF_LED_SYS_STATE_SD_FORMAT_SUCCESS: + FormatSdFlag = 2; + break; + + case SF_LED_SYS_STATE_SD_FORMAT_FAIL: + FormatSdFlag = 3; + break; + + case SF_LED_SYS_STATE_SD_FORMAT_EXIT: + FormatSdFlag = 0; + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + //sf_set_runningLed(0); + break; + + case SF_LED_SYS_STATE_WIFI_DISCONNECT: + sf_led_set(SF_LED_WIFI, SF_LED_STATE_SLOW_FLASHING); + break; + + case SF_LED_SYS_STATE_WIFI_CONNECTED: + sf_led_set(SF_LED_WIFI, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_BAT_0: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_1: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_2: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_3: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_BAT_4: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT2, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT3, SF_LED_STATE_ON); + sf_led_set(SF_LED_BAT4, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_GPRS_NO_SIGNAL: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_0: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_1: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_2: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_3: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_GPRS_SIGNAL_4: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_ON); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_GPRS_SEARCH: + sf_set_runningLed(1); + break; + + case SF_LED_SYS_STATE_SIM_ERROR: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_SERVER_FAIL: + sf_set_runningLed(0); + sf_led_set(SF_LED_SIG1_R, SF_LED_STATE_SLOW_FLASHING); + sf_led_set(SF_LED_SIG1_G, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG2, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG3, SF_LED_STATE_OFF); + sf_led_set(SF_LED_SIG4, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_DEBUG_ON: + sf_led_set(SF_LED_SD_G, SF_LED_STATE_FLASHING); + sf_led_set(SF_LED_SD_R, SF_LED_STATE_OFF); + break; + + case SF_LED_SYS_STATE_DEBUG_OFF: + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_R, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_RESET: + sf_set_runningLed(0); + sf_led_set(SF_LED_ALL, SF_LED_STATE_ON); + break; + + case SF_LED_SYS_STATE_USB_IN: + sf_set_runningLed(0); + sf_led_set(SF_LED_ALL, SF_LED_STATE_OFF); + sf_led_set(SF_LED_BUSY, SF_LED_STATE_ON); + sf_led_set(SF_LED_STATUS_G, SF_LED_STATE_ON); + isUsbIn = TRUE; + break; + #endif + //#if HW_S510 + // case SF_LED_SYS_STATE_UPDATE: + // sf_led_set(SF_LED_BUSY, SF_LED_STATE_SLOW_FLASHING); + // break; + //#endif + case SF_LED_SYS_STATE_GOING_TO_PIR: isGoToPir = TRUE; sf_led_set(SF_LED_BUSY, SF_LED_STATE_OFF); @@ -233,6 +600,9 @@ void sf_sys_status_led_set(LedSysState_t ledSysStateId) break; case SF_LED_SYS_STATE_POWER_OFF: + #if HW_S530 + sf_set_runningLed(0); + #endif sf_led_set(SF_LED_ALL, SF_LED_STATE_OFF); isGoToPir = FALSE; break; @@ -248,8 +618,8 @@ void sf_sys_status_led_set(LedSysState_t ledSysStateId) default: break; } - if(FLG_ID_SF_LED) - vos_flag_set(FLG_ID_SF_LED, FLG_SF_LED); + //if(FLG_ID_SF_LED) + // vos_flag_set(FLG_ID_SF_LED, FLG_SF_LED); } void sf_trigger_time_led_cb(UINT32 cnt) diff --git a/code/lib/source/sifar/code/source/common/sf_sd_common.c b/code/lib/source/sifar/code/source/common/sf_sd_common.c index dda371fc3..ba56b5fb3 100755 --- a/code/lib/source/sifar/code/source/common/sf_sd_common.c +++ b/code/lib/source/sifar/code/source/common/sf_sd_common.c @@ -74,6 +74,11 @@ UINT32 sf_check_card_full(void) if(0 == SysGetFlag(SdLoopSwitch)) { IsCardFull = TRUE; + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + stMessageBuf.arg1 = CMD_SD_FULL; + stMessageBuf.cmdId = CMD_SD; + sf_com_message_send_to_app(&stMessageBuf); } printf("%s:%d sd card is full diskFree=%d\r\n",__FUNCTION__,__LINE__,diskFree); } diff --git a/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c b/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c index 1226d9450..32c1d203c 100755 --- a/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c +++ b/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c @@ -803,7 +803,8 @@ void sf_mcu_dataready_get(void) if(startMode == 0) //OFF { sf_set_power_off_flag(1); - gModuleSleep = 0; + //gModuleSleep = 0; + sf_set_module_sleep_flag(0); //LCD_BACKLIGHT_OFF; //profLogPrintf(0,"[sf_mcu_dataready_get],APP_POWER_OFF_NORMAL"); printf("[power off] %s(%d)\n", __FUNCTION__, __LINE__); @@ -825,6 +826,7 @@ void sf_mcu_dataready_get(void) { if((startMode == 0) || (startMode == 1)) //PIR MODE: ON->OFF/ ON->SETUP { + sf_set_module_sleep_flag(0); gModuleSleep = 0; //power off 4G module sf_set_power_off_flag(1); printf("[power off] %s(%d)\n", __FUNCTION__, __LINE__); @@ -2017,8 +2019,16 @@ unsigned short sf_get_mcu_ver(void) *************************************************/ UINT16 sf_mcu_get_irshtter(void) { - UINT8 dataTemp1 = 0, dataTemp2 = 0; - + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = SF_MCU_CMD_POWERON; + stMessageBuf.cmdId = CMD_MCU; + sf_com_message_send_to_app(&stMessageBuf); + printf("IRSHTTER = %d\n", IRSHTTER); + + return IRSHTTER; +/* + UINT8 dataTemp1 = 0, dataTemp2 = 0; + #if HUNTING_MCU_I2C == ENABLE sf_mcu_read(LUMINANCE_L, &dataTemp1); sf_mcu_read(LUMINANCE_H, &dataTemp2); @@ -2040,7 +2050,70 @@ UINT16 sf_mcu_get_irshtter(void) printf("IRSHTTER = %d\n", IRSHTTER); + return IRSHTTER;*/ +} + +/************************************************* + Function: sf_get_irshtter + Description: get IRSHTTER. + Input: N/A + Output: N/A + Return: IRSHTTER + Others: N/A +*************************************************/ +UINT16 sf_get_irshtter(void) +{ return IRSHTTER; } +/************************************************* + Function: sf_mcu_set_irshtter + Description: get IRSHTTER. + Input: N/A + Output: N/A + Return: IRSHTTER + Others: N/A +*************************************************/ +void sf_mcu_set_irshtter(UINT16 data) +{ + IRSHTTER = data; + printf("IRSHTTER = %d\n", IRSHTTER); +} + +/************************************************* + Function: sf_set_power_on_mode + Description: set power start mode + Input: N/A + Output: N/A + Return: 0:ON mode 1:OFF mode + Others: N/A +*************************************************/ +void sf_set_power_on_mode(UINT8 data) +{ + static int ModeFlag = 1; + if(ModeFlag) + { + ModeFlag = 0; + PowerOnMode = data; + PowerOnMode &= 0x0f; + if(1 == PowerOnMode) + { + ConfigureModeFlag = 1; + } + } + printf("start mode = %d\n", PowerOnMode); +} + +void sf_set_module_sleep_flag(UINT8 flag) +{ + gModuleSleep = flag; + #if HUNTING_CAMERA_4G == ENABLE + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg2 = (SINT32)gModuleSleep; + stMessageBuf.arg1 = SF_MCU_CMD_MODULE_SLEEP; + stMessageBuf.cmdId = CMD_MCU; + sf_com_message_send_to_app(&stMessageBuf); + #endif +} + diff --git a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-top.dtsi b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-top.dtsi index 567e1418e..a8caae42e 100755 --- a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-top.dtsi +++ b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-top.dtsi @@ -16,7 +16,7 @@ pwm2{pinmux = <0x000000>;}; ccnt{pinmux = <0x0>;}; audio{pinmux = <0x0>;}; - lcd{pinmux = <0x10000000>;}; + lcd{pinmux = <0x0>;}; tv{pinmux = <0x0>;}; eth{pinmux = <0x0>;}; misc{pinmux = <0x0>;}; diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c index 4de966707..519246e35 100755 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c +++ b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c @@ -156,6 +156,8 @@ UINT32 DrvGPIO_GetPhotoMovieModeFromMonitor(void) switch(value) { case 0: + sf_mcu_reg_set(SF_MCU_POWEROFF,0); + break; case 1: g_uiBootMode = DX_HUNTING_MODE_OTHER; break; diff --git a/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c b/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c index 32b2d1eb3..a2e12635f 100755 --- a/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c +++ b/rtos/code/application/source/cardv/SrcCode/FastFlow/flow_preview.c @@ -1042,8 +1042,6 @@ void flow_preview_uninit_module(void) } #if 1 //for pre set ae - - static UINT32 ae_adc_tbl[57][3] = { #if 1 //for S530 200K RSS photodie {980, 44, 1000}, @@ -1068,11 +1066,11 @@ static UINT32 ae_adc_tbl[57][3] = { {813, 8333, 1280}, {809, 8333, 2380}, {799, 16666, 4300}, - {787, 16666, 6390}, - {735, 16666, 7990}, - {686, 16666, 8460}, - {652, 16666, 9530}, - {613, 16666, 10690}, + {787, 16666, 4300},//6390}, + {735, 16666, 4300},// 7990}, + {686, 16666, 6390},//8460}, + {652, 16666, 6390},//9530}, + {613, 16666, 7990},//10690}, {576, 16666, 2310},//night {541, 16666, 2310}, {509, 16666, 2310}, @@ -1082,19 +1080,19 @@ static UINT32 ae_adc_tbl[57][3] = { {399, 16666, 2310}, {363, 16666, 2310}, {322, 16666, 2310},// 12190}, - {288, 16666, 2310},// 26600}, - {246, 16666, 2310}, //45770}, - {216, 16666, 2310}, - {188, 16666, 1000}, - {162, 16666, 1000}, - {151, 16666, 1000}, - {138, 16666, 1000}, - {118, 16666, 1000}, - {96, 16666, 1280}, - {80, 16666, 2000}, - {62, 16666, 2000}, - {48, 20000, 2000}, - {35, 20000, 2000}, + {288, 33333, 4300},// 26600}, + {246, 33333, 4300}, //45770}, + {216, 33333, 4300}, + {188, 33333, 4300}, + {162, 33333, 4300}, + {151, 33333, 5300}, + {138, 33333, 5300}, + {118, 33333, 5300}, + {96, 33333, 5300}, + {80, 33333, 5300}, + {62, 33333, 5300}, + {48, 33333, 5300}, + {35, 33333, 2000}, {26, 33333, 1100}, {19, 33333, 1100}, {13, 33333, 1100}, @@ -1165,12 +1163,12 @@ static UINT32 ae_adc_tbl[57][3] = { #endif }; - void ae_adc_get_exp_photo(UINT16 adc_value, UINT32 *exptime, UINT32 *isogain) { UINT32 idx0=0, idx1=0; - UINT32 exptime0, exptime1, isogain0, isogain1; - UINT32 adc_ev, ev0, ev1; + UINT32 exptime0, isogain0; + //UINT32 exptime1, isogain1; + //UINT32 adc_ev, ev0, ev1; for(idx1=1; idx1<57; idx1++) { //if(adc_value > ae_adc_tbl[idx1][0]) @@ -1188,15 +1186,15 @@ void ae_adc_get_exp_photo(UINT16 adc_value, UINT32 *exptime, UINT32 *isogain) exptime0 = ae_adc_tbl[idx0][1]; isogain0 = (ae_adc_tbl[idx0][2]); - exptime1 = ae_adc_tbl[idx1][1]; - isogain1 = (ae_adc_tbl[idx1][2]); - ev0 = (exptime0 * isogain0); - ev1 = (exptime1 * isogain1); + //exptime1 = ae_adc_tbl[idx1][1]; + //isogain1 = (ae_adc_tbl[idx1][2]); + ///ev0 = (exptime0 * isogain0); + //ev1 = (exptime1 * isogain1); - adc_ev = ((ev1 - ev0) * (adc_value - ae_adc_tbl[idx1][0]))/(ae_adc_tbl[idx0][0] - ae_adc_tbl[idx1][0]) + ev0; + //adc_ev = ((ev1 - ev0) * (adc_value - ae_adc_tbl[idx1][0]))/(ae_adc_tbl[idx0][0] - ae_adc_tbl[idx1][0]) + ev0; *exptime = exptime0; - *isogain = (adc_ev / exptime0); + *isogain = isogain0;//(adc_ev / exptime0); } DBG_WRN("idx = %d, %d, adc = %d, fast open preset exp = %d, %d\r\n", idx0, idx1, adc_value, *exptime, *isogain); } diff --git a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h index 694d85fcb..1c7ec7612 100755 --- a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h +++ b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h @@ -98,7 +98,7 @@ #define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot" #define POWERON_BOOT_REPORT ENABLE #define POWERON_FAST_BOOT DISABLE -#define POWERON_FAST_BOOT_MSG ENABLE//DISABLE // disable boot msg for fast boot, but hard to debug +#define POWERON_FAST_BOOT_MSG DISABLE // disable boot msg for fast boot, but hard to debug #define POWERON_FAST_CPU2_BOOT DISABLE #define POWERON_FAST_RECORD DISABLE #define POWERON_FAST_WIFI DISABLE //NOTE: need to enable POWERON_FAST_CPU2_BOOT too @@ -936,6 +936,7 @@ #define HUNTING_CAMERA_SYS_PARTITION_NAME sys #define HUNTING_CAMERA_BOOT_LINUX ENABLE #define HUNTING_CAMERA_MCU ENABLE +#define HUNTING_CAMERA_4G ENABLE//DISABLE #define PHOTO_STAMP_ISP_STATUS ENABLE #define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE #define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE diff --git a/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c b/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c index 50b0122f8..096e0afbd 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c +++ b/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c @@ -390,9 +390,16 @@ static void insmod_sensor(void) static void sie_vd_cb(const UINT32 vd_cnt) { - if(vd_cnt == (PHOTOFAST_CAP_FRAME_CNT-1)){ + /*if(vd_cnt == 0){ vos_perf_list_mark("sie_vd", __LINE__, vd_cnt); } + else if(vd_cnt == 1){ + vos_perf_list_mark("sie_vd", __LINE__, vd_cnt); + } + else if(vd_cnt == (PHOTOFAST_CAP_FRAME_CNT-1)){ + vos_perf_list_mark("sie_vd", __LINE__, vd_cnt); + }*/ + vos_perf_list_mark("sie_vd", __LINE__, vd_cnt); //if(vd_cnt == 3) // sf_trigger_time_led_cb(vd_cnt); } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c index 914ba8b8b..3057184b2 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -1309,8 +1309,8 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg) HD_PATH_ID vprc_path = 0, vout_path = 0, vcap_path = 0; UINT32 max_cnt = 0; BOOL start_cap = FALSE; - //IQT_SHARPNESS_LV sharpness_lv = {0}; - //IQT_NR_LV nr_lv = {0}; + IQT_SHARPNESS_LV sharpness_lv = {0}; + IQT_NR_LV nr_lv = {0}; AET_STATUS_INFO ae_status = {0}; flow_preview_get_path(&vcap_path, FLOW_PREIVEW_VCAP_PATH, 0); @@ -1363,14 +1363,14 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg) nvt_cmdsys_runcmd("ae set_speed 0 128 600 600 100 "); //nvt_cmdsys_runcmd("iq dbg 0 0 "); //nvt_cmdsys_runcmd("iq dbg 0 8 "); -/* + nr_lv.id = 0; - nr_lv.lv = 200; + nr_lv.lv = 175; vendor_isp_set_iq(IQT_ITEM_NR_LV, &nr_lv); //50~200 sharpness_lv.id = 0; - sharpness_lv.lv = 50; + sharpness_lv.lv = 70; vendor_isp_set_iq(IQT_ITEM_SHARPNESS_LV, &sharpness_lv); -*/ + } #endif @@ -1439,7 +1439,19 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg) //if(g_bFrmCnt < PHOTOFAST_CAP_FRAME_CNT){ // vos_perf_list_mark("yuv", __LINE__, 0); //} - /* if(0){//++g_bFrmCnt >= 5){//PHOTOFAST_CAP_FRAME_CNT){ + if(capturcnt==1){//++g_bFrmCnt >= 5){//PHOTOFAST_CAP_FRAME_CNT){ + + nr_lv.id = 0; + nr_lv.lv = 125; + vendor_isp_set_iq(IQT_ITEM_NR_LV, &nr_lv); //50~200 + sharpness_lv.id = 0; + sharpness_lv.lv = 90; + vendor_isp_set_iq(IQT_ITEM_SHARPNESS_LV, &sharpness_lv); + + } + + + if(capturcnt==2){//++g_bFrmCnt >= 5){//PHOTOFAST_CAP_FRAME_CNT){ nr_lv.id = 0; nr_lv.lv = 100; @@ -1448,9 +1460,9 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg) sharpness_lv.lv = 100; vendor_isp_set_iq(IQT_ITEM_SHARPNESS_LV, &sharpness_lv); - }*/ + } if (captureflag) capturcnt++; - if (capturcnt>6) { + if (capturcnt>4) { // DBG_ERR(">>>>>>>>>>>>capture adj:%d capcnt:%d frmcnt:%d\r\n",ae_status.status_info.state_adj,capturcnt,g_bFrmCnt); //if(++g_bFrmCnt >= 10){//PHOTOFAST_CAP_FRAME_CNT){ #if HUNTING_PHOTO_FAST_AE_60_FPS == ENABLE @@ -1627,8 +1639,15 @@ static void PhotoFast_ShutDown(void) vos_perf_list_dump(); PhotoFast_TriggerFrm_Dump(); #endif - #if HUNTING_CAMERA_MCU - sf_mcu_reg_set(SF_MCU_POWEROFF,0); + #if HUNTING_CAMERA_MCU == ENABLE + + #if HUNTING_CAMERA_4G == ENABLE + fastboot_set_done(BOOT_FLOW_BOOT); + flow_wait_linux(); + #else + sf_mcu_reg_set(SF_MCU_POWEROFF,0); + #endif + #else fastboot_set_done(BOOT_FLOW_BOOT); flow_wait_linux(); @@ -1640,7 +1659,7 @@ static void PhotoFast_ShutDown(void) PhotoFast_TriggerFrm_Dump(); #endif - #if HUNTING_CAMERA_MCU + #if HUNTING_CAMERA_MCU == ENABLE sf_mcu_reg_set(SF_MCU_POWEROFF,0); #endif hwpower_set_power_key(POWER_ID_PSW1, 0xFF); @@ -1658,6 +1677,8 @@ void Set_NIGHTMODE(UINT32 id, UINT8 isSnapVideo) AWBT_MANUAL awb_manual = {0}; HD_RESULT hd_ret; + //IQT_EDGE_PARAM edge = {0}; + if(sf_is_night_mode(0) ==TRUE) { if ((hd_ret = vendor_isp_init()) != HD_OK) { @@ -1674,11 +1695,22 @@ void Set_NIGHTMODE(UINT32 id, UINT8 isSnapVideo) awb_manual.manual.g_gain= 256; awb_manual.manual.b_gain= 256; vendor_isp_set_awb(AWBT_ITEM_MANUAL, &awb_manual); - night_mode.id = 0; night_mode.mode = 1; vendor_isp_set_iq(IQT_ITEM_NIGHT_MODE, &night_mode); +/* + edge.id =0; + vendor_isp_get_iq(IQT_ITEM_EDGE_PARAM, &edge); + edge.edge.es_map_lut[8] = 64; + edge.edge.es_map_lut[9] = 72; + edge.edge.es_map_lut[10] = 80; + edge.edge.es_map_lut[12] = 84; + edge.edge.es_map_lut[13] = 84; + edge.edge.es_map_lut[14] = 84; + edge.edge.es_map_lut[15] = 84; + vendor_isp_set_iq(IQT_ITEM_EDGE_PARAM, &edge); +*/ if ((hd_ret = vendor_isp_uninit()) != HD_OK) { DBG_ERR("vendor_isp_uninit() fail(%d)\r\n", hd_ret); } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c index d9e58e0fe..94b336020 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c @@ -51,6 +51,86 @@ extern UINT32 Cap_cnt; extern UINT32 ae_preset_exp; extern UINT32 ae_preset_iso; +void PhotoStamp_get_isp_status_jpg(UINT32 id, char* Buf, UINT32 BufLen) +{ + AET_STATUS_INFO ae_status = {0}; + AWBT_STATUS awb_status = {0}; + IQT_WDR_PARAM wdr = {0}; + //IQT_3DNR_PARAM nr_3d = {0}; + //IQT_DEFOG_PARAM defog = {0}; + id = 0; + ae_status.id = id; + if(vendor_isp_init()== HD_ERR_NG) + DBG_ERR("init error\r\n"); + vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status); + awb_status.id = id; + vendor_isp_get_awb(AWBT_ITEM_STATUS, &awb_status); + wdr.id = id; + vendor_isp_get_iq(IQT_ITEM_WDR_PARAM, &wdr); + //nr_3d.id= id; + //vendor_isp_get_iq(IQT_ITEM_3DNR_PARAM, &nr_3d); + //defog.id = id; + //vendor_isp_get_iq(IQT_ITEM_DEFOG_PARAM, &defog); + struct tm Curr_gsDateTime ={0}; + Curr_gsDateTime = hwclock_get_time(TIME_ID_CURRENT); + //sprintf(strStampDateTime, "%04d/%02d/%02d %02d:%02d:%02d", Curr_gsDateTime.tm_year, Curr_gsDateTime.tm_mon, Curr_gsDateTime.tm_mday, Curr_gsDateTime.tm_hour, Curr_gsDateTime.tm_min, Curr_gsDateTime.tm_sec); + + #if 1 + //snprintf(Buf, BufLen, "%d %d %3d %4d %4d %4d %4d %d %4d %4d %4d %4d %04d/%02d/%02d %02d:%02d:%02d %d%c", + //snprintf(Buf, BufLen, "6 %d %d %3d %4d %4d %d %d %d %4d %4d %4d %4d %4d%c",// %d%c", + /*snprintf(Buf, BufLen, "%d %d %3d %4d %4d %d %d %d %4d %4d %4d %4d %4d%c %04d/%02d/%02d %02d:%02d:%02d", + + (INT)(ae_status.status_info.iso_gain[0]), + (INT)(ae_status.status_info.expotime[0]), + (INT)(ae_status.status_info.lv/100000), + (INT)(ae_status.status_info.lum), + (INT)(ae_status.status_info.expect_lum), + (INT)(ae_status.status_info.overexp_adj), + (INT)(ae_status.status_info.overexp_cnt), + (INT)(wdr.wdr.enable), + (INT)(awb_status.status.cur_r_gain), + (INT)(awb_status.status.cur_g_gain), + (INT)(awb_status.status.cur_b_gain), + (INT)(awb_status.status.cur_ct), + (INT)(IRSHTTER), + Curr_gsDateTime.tm_year, + Curr_gsDateTime.tm_mon, + Curr_gsDateTime.tm_mday, + Curr_gsDateTime.tm_hour, + Curr_gsDateTime.tm_min, + Curr_gsDateTime.tm_sec, + //(INT)(Init_Adc), + //(INT)(nr_3d._3dnr.enable), + '\0' + );*/ + //DBG_DUMP("isp Buf=%s\r\n",Buf); + snprintf(Buf, BufLen, "%d %d %3d %d %d %3d %3d %3d %4d %d %d %d %d %02d/%02d %02d:%02d:%02d", + (INT)(ae_status.status_info.state_adj), + (INT)(ae_status.status_info.lum), + (INT)(ae_status.status_info.expect_lum), + (INT)(ae_status.status_info.iso_gain[0]), + (INT)(ae_status.status_info.expotime[0]), + (INT)(ae_status.status_info.lv/100000), + (INT)(awb_status.status.cur_r_gain), + (INT)(awb_status.status.cur_b_gain), + (INT)(awb_status.status.cur_ct), + IRSHTTER, + Cap_cnt, + ae_preset_exp, + ae_preset_iso, + //Curr_gsDateTime.tm_year, + Curr_gsDateTime.tm_mon, + Curr_gsDateTime.tm_mday, + Curr_gsDateTime.tm_hour, + Curr_gsDateTime.tm_min, + Curr_gsDateTime.tm_sec); + + printf("%s:%d Buf=%s\r\n",__FUNCTION__,__LINE__,Buf); + #endif + vendor_isp_uninit(); + return; +} + void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen) { AET_STATUS_INFO ae_status = {0}; @@ -104,7 +184,7 @@ void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen) '\0' );*/ //DBG_DUMP("isp Buf=%s\r\n",Buf); - snprintf(Buf, BufLen, "%d %d %3d %d %d %3d %3d %3d %4d %d %d %d %d %04d/%02d/%02d %02d:%02d:%02d", + snprintf(Buf, BufLen, "ae_adj:%d cur_lum:%d target_lum:%3d iso:%d exp:%d lv:%3d awbrg:%3d awbbg:%3d ct:%4d adc:%d aecnt:%d preae_exp:%d preae_iso:%d %04d/%02d/%02d %02d:%02d:%02d", (INT)(ae_status.status_info.state_adj), (INT)(ae_status.status_info.lum), (INT)(ae_status.status_info.expect_lum), @@ -177,7 +257,7 @@ void PhotoFastCapDateImprint_InitBuff(void) #if PHOTO_STAMP_ISP_STATUS == ENABLE memset(photo_aesteam, '\0', sizeof(photo_aesteam)); - PhotoStamp_get_isp_status(0,&photo_aesteam[0],64); + PhotoStamp_get_isp_status_jpg(0,&photo_aesteam[0],64); #endif lv_user_font_conv_draw_cfg_init(&stamp_text.draw_cfg); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h index e8e657b13..af4c87620 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.h @@ -8,7 +8,7 @@ #define CFG_PHOTOFAST_SLICE_ENC_PRIMARY_BUF_HEIGHT 1080 #define CFG_PHOTOFAST_SLICE_ENC_PRIMARY_BUF_SIZE VDO_YUV_BUFSIZE(CFG_PHOTOFAST_SLICE_ENC_PRIMARY_BUF_WIDTH, CFG_PHOTOFAST_SLICE_ENC_PRIMARY_BUF_HEIGHT, HD_VIDEO_PXLFMT_YUV420) #define CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO 8 /* (yuv size / ratio) + header = bs buf size */ -#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 85 +#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 75 #define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70 #define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70 #define CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP 3 diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h index e7b828103..7ba9c49e7 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h @@ -6,6 +6,7 @@ #include #endif +//============Sifar==============///Payton #ifndef SF_DATA_UI_TYPE #define SF_DATA_UI_TYPE @@ -16,9 +17,9 @@ typedef struct sf_PARA_TIME_S UINT16 Mon; UINT16 Day; - UINT8 Hour; - UINT8 Min; - UINT8 Sec; + UINT16 Hour; + UINT16 Min; + UINT16 Sec; } SF_PARA_TIME_S; typedef struct sf_WORKTIME_S diff --git a/rtos/code/driver/na51089/include/sf_mcu.h b/rtos/code/driver/na51089/include/sf_mcu.h index 1d2f31fce..7c1b0e85c 100755 --- a/rtos/code/driver/na51089/include/sf_mcu.h +++ b/rtos/code/driver/na51089/include/sf_mcu.h @@ -39,7 +39,7 @@ #endif //#endif -#define SF_MCU_NIGHT_MODE_LUMINANCE 80 +#define SF_MCU_NIGHT_MODE_LUMINANCE 600 #define DIGITAL_PIR 1 diff --git a/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c b/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c index cae737943..3d42c2fdc 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c +++ b/rtos/code/driver/na51089/source/mcu/sf_commu_mcu.c @@ -681,7 +681,7 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len) //stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; //stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY; //sf_com_message_send_to_app(&stMessageBuf); - ret = 0x05; + ret = 0x05; Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO); } else diff --git a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi index ddbf2d15e..f7e5bb64c 100755 --- a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi +++ b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_ae_0.dtsi @@ -23,7 +23,7 @@ }; ae_curve_gen_movie { size = [10 01 00 00]; - data = [f4 01 00 00 00 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 01 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00]; + data = [f4 01 00 00 01 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 01 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00]; }; ae_meter_window { size = [00 01 00 00]; diff --git a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi index 7e8741b89..41804c8e1 100755 --- a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi +++ b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0.dtsi @@ -11,7 +11,7 @@ }; iq_nr { size = [f4 12 00 00]; - data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 01 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 00 00 00 00 0c 00 00 00 80 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 0c 00 00 00 0e 00 00 00 0f 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 00 00 00 00 0f 00 00 00 16 00 00 00 1b 00 00 00 1f 00 00 00 2c 00 00 00 00 00 00 00 0a 00 00 00 0c 00 00 00 0e 00 00 00 10 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 17 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 21 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 1a 00 00 00 20 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 34 00 00 00 37 00 00 00 39 00 00 00 3b 00 00 00 3d 00 00 00 3f 00 00 00 41 00 00 00 43 00 00 00 45 00 00 00 00 00 00 00 1e 00 00 00 2a 00 00 00 34 00 00 00 3c 00 00 00 55 00 00 00 00 00 00 00 12 00 00 00 19 00 00 00 1f 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 36 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 40 00 00 00 43 00 00 00 45 00 00 00 48 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; + data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 00 00 00 00 0c 00 00 00 80 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 0b 00 00 00 0c 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 0c 00 00 00 0e 00 00 00 0f 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 00 00 00 00 0f 00 00 00 16 00 00 00 1b 00 00 00 1f 00 00 00 2c 00 00 00 00 00 00 00 0a 00 00 00 0c 00 00 00 0e 00 00 00 10 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 17 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 21 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 1a 00 00 00 20 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 34 00 00 00 37 00 00 00 39 00 00 00 3b 00 00 00 3d 00 00 00 3f 00 00 00 41 00 00 00 43 00 00 00 45 00 00 00 00 00 00 00 1e 00 00 00 2a 00 00 00 34 00 00 00 3c 00 00 00 55 00 00 00 00 00 00 00 12 00 00 00 19 00 00 00 1f 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 36 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 40 00 00 00 43 00 00 00 45 00 00 00 48 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; }; iq_cfa { size = [54 05 00 00]; @@ -35,7 +35,7 @@ }; iq_contrast { size = [b0 00 00 00]; - data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 8d 28 28 28 28 28 28 28 28 28 87 13 1e 2a 33 35 35 31 25 21 87 1e 2c 3a 46 4d 4d 46 43 3f 8d 1e 2c 3a 46 53 5d 58 4d 41 97 1e 2c 3a 46 53 5d 58 4d 41 97 32 32 32 32 32 32 32 32 32 af 32 32 32 32 32 32 32 32 32 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 8d 28 28 28 28 28 28 28 28 28 87 13 1e 2a 33 35 35 31 25 21 87 13 21 2f 3b 42 42 3b 38 34 8d 25 2b 35 3c 49 53 4e 43 37 8d 25 2b 35 3c 49 53 4e 43 37 97 32 32 32 32 32 32 32 32 32 af 32 32 32 32 32 32 32 32 32 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; }; iq_edge { size = [e0 05 00 00]; @@ -43,7 +43,7 @@ }; iq_3dnr { size = [64 1f 00 00]; - data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 10 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 35 00 00 00 35 00 00 00 30 00 00 00 30 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 14 0a 0a 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 2c 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 14 00 00 00 20 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 2d 00 00 00 2d 00 00 00 28 00 00 00 28 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 0a 0a 14 1e 0c 05 14 08 02 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 10 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 1e 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 03 03 00 01 00 00 00 14 50 78 32 50 50 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 37 00 00 00 4b 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1a 00 00 00 19 00 00 00 19 00 00 00 1a 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 5f 00 00 00 5f 00 00 00 5a 00 00 00 5a 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 32 64 96 46 64 64 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 3c 00 00 00 3c 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 a0 c8 64 78 78 20 08 02 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0a 00 00 00 15 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 4a 01 00 00 40 01 00 00 40 01 00 00 40 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 66 00 00 00 66 00 00 00 61 00 00 00 61 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 20 08 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 19 00 00 00 21 00 00 00 29 00 00 00 2f 00 00 00 38 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 8a 00 00 00 8a 00 00 00 85 00 00 00 85 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 40 0c 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 19 00 00 00 28 00 00 00 3b 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; + data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 10 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 35 00 00 00 35 00 00 00 30 00 00 00 30 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 14 0a 0a 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 2c 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 14 00 00 00 20 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 2d 00 00 00 2d 00 00 00 28 00 00 00 28 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 0a 0a 14 1e 0c 05 14 08 02 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 10 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 1e 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 03 03 00 01 00 00 00 14 50 78 32 50 50 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 37 00 00 00 4b 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1a 00 00 00 19 00 00 00 19 00 00 00 1a 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 5f 00 00 00 5f 00 00 00 5a 00 00 00 5a 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 32 64 96 46 64 64 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 3c 00 00 00 3c 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 a0 c8 64 78 78 20 08 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 4a 01 00 00 40 01 00 00 40 01 00 00 40 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 66 00 00 00 66 00 00 00 61 00 00 00 61 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 20 08 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 19 00 00 00 21 00 00 00 29 00 00 00 2f 00 00 00 38 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 8a 00 00 00 8a 00 00 00 85 00 00 00 85 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 40 0c 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 19 00 00 00 28 00 00 00 3b 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; }; iq_wdr { size = [e4 02 00 00]; diff --git a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0_cap.dtsi b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0_cap.dtsi index 587650660..29c047278 100755 --- a/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0_cap.dtsi +++ b/rtos/code/hdal/vendor/isp/configs/dtsi/os05b10_iq_0_cap.dtsi @@ -11,7 +11,7 @@ }; iq_nr { size = [f4 12 00 00]; - data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 01 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 00 00 00 00 0c 00 00 00 80 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 0c 00 00 00 0e 00 00 00 0f 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 00 00 00 00 0f 00 00 00 16 00 00 00 1b 00 00 00 1f 00 00 00 2c 00 00 00 00 00 00 00 0a 00 00 00 0c 00 00 00 0e 00 00 00 10 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 17 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 21 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 1a 00 00 00 20 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 34 00 00 00 37 00 00 00 39 00 00 00 3b 00 00 00 3d 00 00 00 3f 00 00 00 41 00 00 00 43 00 00 00 45 00 00 00 00 00 00 00 1e 00 00 00 2a 00 00 00 34 00 00 00 3c 00 00 00 55 00 00 00 00 00 00 00 12 00 00 00 19 00 00 00 1f 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 36 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 40 00 00 00 43 00 00 00 45 00 00 00 48 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; + data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 ff 0f 00 00 00 01 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00 09 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 00 00 00 00 0c 00 00 00 80 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 08 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 03 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 0b 00 00 00 0c 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 04 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 0a 00 00 00 00 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0b 00 00 00 0c 00 00 00 0d 00 00 00 0e 00 00 00 0f 00 00 00 10 00 00 00 11 00 00 00 12 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00 00 09 00 00 00 0c 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 05 00 00 00 07 00 00 00 09 00 00 00 0a 00 00 00 0e 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 10 00 00 00 12 00 00 00 12 00 00 00 0c 00 00 00 0e 00 00 00 0f 00 00 00 11 00 00 00 12 00 00 00 13 00 00 00 15 00 00 00 16 00 00 00 17 00 00 00 18 00 00 00 19 00 00 00 00 00 00 00 0f 00 00 00 16 00 00 00 1b 00 00 00 1f 00 00 00 2c 00 00 00 00 00 00 00 0a 00 00 00 0c 00 00 00 0e 00 00 00 10 00 00 00 12 00 00 00 14 00 00 00 16 00 00 00 17 00 00 00 19 00 00 00 1a 00 00 00 1b 00 00 00 1d 00 00 00 1e 00 00 00 1f 00 00 00 20 00 00 00 21 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 18 00 00 00 10 00 00 00 18 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 02 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 1a 00 00 00 20 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 34 00 00 00 37 00 00 00 39 00 00 00 3b 00 00 00 3d 00 00 00 3f 00 00 00 41 00 00 00 43 00 00 00 45 00 00 00 00 00 00 00 1e 00 00 00 2a 00 00 00 34 00 00 00 3c 00 00 00 55 00 00 00 00 00 00 00 12 00 00 00 19 00 00 00 1f 00 00 00 24 00 00 00 28 00 00 00 2c 00 00 00 2f 00 00 00 32 00 00 00 36 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 40 00 00 00 43 00 00 00 45 00 00 00 48 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 1d 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 f7 00 00 00 84 01 00 00 73 03 00 00 e3 0b 00 00 c6 02 00 00 b9 03 00 00 1a 05 00 00 69 08 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 08 00 00 00 0c 00 00 00 0e 00 00 00 11 00 00 00 18 00 00 00 00 00 00 00 0e 00 00 00 14 00 00 00 18 00 00 00 1c 00 00 00 20 00 00 00 23 00 00 00 26 00 00 00 28 00 00 00 2b 00 00 00 2d 00 00 00 2f 00 00 00 31 00 00 00 33 00 00 00 35 00 00 00 37 00 00 00 39 00 00 00 00 00 00 00 26 00 00 00 36 00 00 00 42 00 00 00 4d 00 00 00 6c 00 00 00 01 00 00 00 47 00 00 00 35 00 00 00 3e 00 00 00 31 00 00 00 37 00 00 00 3c 00 00 00 41 00 00 00 46 00 00 00 4a 00 00 00 4e 00 00 00 51 00 00 00 55 00 00 00 58 00 00 00 5c 00 00 00 5f 00 00 00 62 00 00 00 0f 00 00 00 00 00 00 00 20 00 00 00 0a 00 00 00 30 00 00 00 10 00 00 00 30 00 00 00 00 00 00 00 0f 00 00 00 02 00 00 00 01 00 00 00 00 01 ff 00 00 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 55 00 00 00 79 00 00 00 94 00 00 00 ab 00 00 00 f2 00 00 00 00 00 00 00 21 00 00 00 2f 00 00 00 3a 00 00 00 43 00 00 00 4b 00 00 00 52 00 00 00 58 00 00 00 5f 00 00 00 64 00 00 00 6a 00 00 00 6f 00 00 00 74 00 00 00 79 00 00 00 7d 00 00 00 82 00 00 00 86 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 12 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 79 00 00 00 ab 00 00 00 d2 00 00 00 f2 00 00 00 57 01 00 00 00 00 00 00 3a 00 00 00 52 00 00 00 65 00 00 00 74 00 00 00 82 00 00 00 8f 00 00 00 9a 00 00 00 a5 00 00 00 af 00 00 00 b8 00 00 00 c1 00 00 00 ca 00 00 00 d2 00 00 00 da 00 00 00 e2 00 00 00 e9 00 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 02 00 00 00 00 01 ff 00 01 00 00 00 00 00 00 00 20 00 00 00 96 03 00 00 35 06 00 00 3d 09 00 00 41 0f 00 00 20 00 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 00 00 80 00 00 00 00 00 0d 00 00 00 12 00 00 00 16 00 00 00 1a 00 00 00 25 00 00 00 00 00 00 00 17 00 00 00 20 00 00 00 28 00 00 00 2e 00 00 00 33 00 00 00 38 00 00 00 3d 00 00 00 41 00 00 00 45 00 00 00 49 00 00 00 4c 00 00 00 50 00 00 00 53 00 00 00 56 00 00 00 59 00 00 00 5c 00 00 00 00 00 00 00 70 00 00 00 9f 00 00 00 c3 00 00 00 e1 00 00 00 3f 01 00 00 00 00 00 00 54 00 00 00 76 00 00 00 91 00 00 00 a8 00 00 00 bb 00 00 00 cd 00 00 00 de 00 00 00 ed 00 00 00 fb 00 00 00 09 01 00 00 16 01 00 00 22 01 00 00 2e 01 00 00 3a 01 00 00 45 01 00 00 50 01 00 00 0f 00 00 00 00 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 16 00 00 00 03 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 c6 02 00 00 0c 04 00 00 af 06 00 00 3d 09 00 00 41 0f 00 00 09 00 80 00 00 00 00 00 10 00 00 00 16 00 00 00 1c 00 00 00 20 00 00 00 2d 00 00 00 00 00 00 00 12 00 00 00 18 00 00 00 20 00 00 00 25 00 00 00 2a 00 00 00 2e 00 00 00 31 00 00 00 35 00 00 00 38 00 00 00 3b 00 00 00 3e 00 00 00 41 00 00 00 43 00 00 00 46 00 00 00 48 00 00 00 4b 00 00 00 00 00 00 00 1a 01 00 00 8f 01 00 00 e9 01 00 00 34 02 00 00 1e 03 00 00 00 00 00 00 40 00 00 00 5a 00 00 00 6e 00 00 00 80 00 00 00 8f 00 00 00 9c 00 00 00 a9 00 00 00 b5 00 00 00 c0 00 00 00 ca 00 00 00 d4 00 00 00 dd 00 00 00 e6 00 00 00 ef 00 00 00 f7 00 00 00 00 01 00 00 00 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 18 00 00 00 02 00 00 00 03 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 14 02 00 00 03 03 00 00 f8 04 00 00 34 07 00 00 e3 0b 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 9a 01 00 00 53 02 00 00 d6 03 00 00 90 05 00 00 2e 09 00 00 09 00 80 00 00 00 00 00 11 00 00 00 18 00 00 00 1e 00 00 00 23 00 00 00 31 00 00 00 00 00 00 00 30 00 00 00 43 00 00 00 53 00 00 00 60 00 00 00 6b 00 00 00 75 00 00 00 7e 00 00 00 87 00 00 00 90 00 00 00 97 00 00 00 9f 00 00 00 a6 00 00 00 ad 00 00 00 b3 00 00 00 b9 00 00 00 c0 00 00 00 00 00 00 00 8a 00 00 00 c6 00 00 00 f3 00 00 00 17 01 00 00 8c 01 00 00 00 00 00 00 32 00 00 00 47 00 00 00 57 00 00 00 65 00 00 00 71 00 00 00 7c 00 00 00 86 00 00 00 8f 00 00 00 98 00 00 00 a0 00 00 00 a8 00 00 00 af 00 00 00 b7 00 00 00 be 00 00 00 c4 00 00 00 cb 00 00 00 00 00 00 00 20 00 00 00 20 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 00 00 00 00 12 00 00 00 02 00 00 00 02 00 00 00]; }; iq_cfa { size = [54 05 00 00]; @@ -35,7 +35,7 @@ }; iq_contrast { size = [b0 00 00 00]; - data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 8d 28 28 28 28 28 28 28 28 28 87 13 1e 2a 33 35 35 31 25 21 87 1e 2c 3a 46 4d 4d 46 43 3f 8d 1e 2c 3a 46 53 5d 58 4d 41 97 1e 2c 3a 46 53 5d 58 4d 41 97 32 32 32 32 32 32 32 32 32 af 32 32 32 32 32 32 32 32 32 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; + data = [00 00 00 00 80 00 00 00 00 00 00 00 00 00 8d 28 28 28 28 28 28 28 28 28 87 13 1e 2a 33 35 35 31 25 21 87 13 21 2f 3b 42 42 3b 38 34 8d 25 2b 35 3c 49 53 4e 43 37 8d 25 2b 35 3c 49 53 4e 43 37 97 32 32 32 32 32 32 32 32 32 af 32 32 32 32 32 32 32 32 32 be 00 00 00 00 00 00 00 00 00 80 05 05 05 05 05 05 05 05 05 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 0a 0a 0a 0a 0a 0a 0a 0a 0a 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00]; }; iq_edge { size = [e0 05 00 00]; @@ -43,7 +43,7 @@ }; iq_3dnr { size = [64 1f 00 00]; - data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 10 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 35 00 00 00 35 00 00 00 30 00 00 00 30 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 14 0a 0a 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 2c 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 14 00 00 00 20 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 2d 00 00 00 2d 00 00 00 28 00 00 00 28 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 0a 0a 14 1e 0c 05 14 08 02 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 10 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 1e 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 03 03 00 01 00 00 00 14 50 78 32 50 50 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 37 00 00 00 4b 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1a 00 00 00 19 00 00 00 19 00 00 00 1a 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 5f 00 00 00 5f 00 00 00 5a 00 00 00 5a 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 32 64 96 46 64 64 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 3c 00 00 00 3c 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 a0 c8 64 78 78 20 08 02 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0a 00 00 00 15 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 4a 01 00 00 40 01 00 00 40 01 00 00 40 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 66 00 00 00 66 00 00 00 61 00 00 00 61 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 20 08 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 19 00 00 00 21 00 00 00 29 00 00 00 2f 00 00 00 38 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 8a 00 00 00 8a 00 00 00 85 00 00 00 85 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 40 0c 02 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 19 00 00 00 28 00 00 00 3b 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; + data = [01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 40 00 00 00 40 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 c8 00 00 00 c8 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 05 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 08 00 00 00 80 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 b4 00 00 00 e6 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 80 00 00 00 40 00 00 00 00 01 00 00 00 01 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00 40 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 00 00 00 00 06 00 00 00 0c 00 00 00 18 00 00 00 28 00 00 00 4c 00 00 00 60 00 00 00 70 00 00 00 80 00 00 00 40 00 00 00 04 01 00 00 00 00 00 00 08 00 00 00 50 00 00 00 50 00 00 00 00 00 00 00 b4 00 00 00 b4 00 00 00 b4 00 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 10 00 00 00 0f 00 00 00 0f 00 00 00 10 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 0e 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 35 00 00 00 35 00 00 00 30 00 00 00 30 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 2b 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 14 0a 0a 02 00 00 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 08 00 00 00 2c 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 14 00 00 00 20 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 29 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 00 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 00 00 00 00 2c 01 00 00 2c 01 00 00 2c 01 00 00 f4 01 00 00 f4 01 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 9d 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 8c 00 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 82 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 78 00 00 00 2d 00 00 00 2d 00 00 00 28 00 00 00 28 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 23 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 0a 0a 14 1e 0c 05 14 08 02 00 00 00 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 10 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 0f 00 00 00 1e 00 00 00 20 00 00 00 06 00 00 00 02 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 b4 00 00 00 08 00 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 17 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 15 00 00 00 d2 00 00 00 c8 00 00 00 c8 00 00 00 c8 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 be 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 3a 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 03 03 00 01 00 00 00 14 50 78 32 50 50 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 ff 00 00 00 ff 00 00 00 30 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 16 00 00 00 25 00 00 00 37 00 00 00 4b 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 02 00 00 01 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 cb 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1a 00 00 00 19 00 00 00 19 00 00 00 1a 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 5f 00 00 00 5f 00 00 00 5a 00 00 00 5a 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 55 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 32 64 96 46 64 64 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 28 00 00 00 3c 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 a0 00 00 00 a0 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 84 03 00 00 84 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 98 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1e 00 00 00 1d 00 00 00 1d 00 00 00 1e 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 1c 00 00 00 18 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 04 01 00 00 3c 00 00 00 3c 00 00 00 37 00 00 00 37 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 a0 c8 64 78 78 20 08 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 50 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 0c 00 00 00 19 00 00 00 25 00 00 00 34 00 00 00 4a 00 00 00 60 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 20 00 00 00 30 00 00 00 3e 00 00 00 48 00 00 00 57 00 00 00 70 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 02 00 00 00 08 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 d8 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 1c 00 00 00 1b 00 00 00 1b 00 00 00 1c 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 1a 00 00 00 4a 01 00 00 40 01 00 00 40 01 00 00 40 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 36 01 00 00 66 00 00 00 66 00 00 00 61 00 00 00 61 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 5c 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 20 08 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 f4 01 00 00 c8 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 64 00 00 00 64 00 00 00 40 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 0c 00 00 00 06 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 19 00 00 00 21 00 00 00 29 00 00 00 2f 00 00 00 38 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0d 00 00 00 15 00 00 00 1e 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 5e 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 22 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 8a 00 00 00 8a 00 00 00 85 00 00 00 85 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 80 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 b4 c8 80 80 80 40 0c 02 00 00 00 08 00 00 00 10 00 00 00 18 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 20 03 00 00 2c 01 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 05 00 00 00 ff 00 00 00 ff 00 00 00 40 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 06 00 00 00 0f 00 00 00 19 00 00 00 28 00 00 00 3b 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 2c 01 00 00 2c 01 00 00 00 00 00 00 f4 01 00 00 f4 01 00 00 f4 01 00 00 e8 03 00 00 e8 03 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 c3 00 00 00 08 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 28 00 00 00 27 00 00 00 27 00 00 00 28 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 26 00 00 00 90 01 00 00 86 01 00 00 86 01 00 00 86 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 7c 01 00 00 62 00 00 00 62 00 00 00 5d 00 00 00 5d 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 58 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 3c 64 82 40 0c 04 40 0c 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 0c 00 00 00 50 00 00 00 78 00 00 00 80 00 00 00 10 00 00 00 08 00 00 00 00 00 00 00 0d 00 00 00 1b 00 00 00 2c 00 00 00 38 00 00 00 3f 00 00 00 45 00 00 00 4b 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 20 03 00 00 20 03 00 00 03 00 00 00 03 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 21 00 00 00 20 00 00 00 20 00 00 00 21 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 ea 01 00 00 e0 01 00 00 e0 01 00 00 e0 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 d6 01 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 46 69 8c 1e 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 09 00 00 00 11 00 00 00 17 00 00 00 1f 00 00 00 27 00 00 00 2d 00 00 00 36 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2c 00 00 00 2b 00 00 00 2b 00 00 00 2c 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 2a 00 00 00 80 02 00 00 76 02 00 00 76 02 00 00 76 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 6c 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 64 6e 8c 32 08 04 14 08 02 00 00 00 04 00 00 00 08 00 00 00 10 00 00 00 20 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 64 00 00 00 30 00 00 00 00 00 00 00 08 00 00 00 11 00 00 00 1a 00 00 00 21 00 00 00 27 00 00 00 2f 00 00 00 3a 00 00 00 64 00 00 00 30 00 00 00 02 01 00 00 03 00 00 00 08 00 00 00 96 00 00 00 96 00 00 00 00 00 00 00 dc 00 00 00 dc 00 00 00 dc 00 00 00 84 03 00 00 84 03 00 00 02 00 00 00 02 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 07 00 00 00 07 00 00 00 08 00 00 00 80 00 00 00 07 00 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 4a 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 0e 01 00 00 2f 00 00 00 2e 00 00 00 2e 00 00 00 2f 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 2d 00 00 00 81 02 00 00 77 02 00 00 77 02 00 00 77 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 6d 02 00 00 49 00 00 00 49 00 00 00 44 00 00 00 44 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 3f 00 00 00 08 00 00 00 10 00 00 00 04 00 00 00 10 00 00 00 14 00 00 00 06 00 00 00 01 01 01 00 01 00 00 00 b4 78 a0 50 08 04 14 08 02 00 00 00 10 00 00 00 20 00 00 00 30 00 00 00 40 00 00 00 40 00 00 00 20 00 00 00 e8 03 00 00 e8 03 00 00 08 00 00 00 08 00 00 00 08 00 00 00 08 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 3c 00 00 00 6e 00 00 00 64 00 00 00 20 00 00 00 10 00 00 00 00 00 00 00 07 00 00 00 0c 00 00 00 15 00 00 00 1e 00 00 00 26 00 00 00 2c 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 0b 00 00 00 13 00 00 00 1c 00 00 00 23 00 00 00 29 00 00 00 31 00 00 00 3c 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 c8 00 00 00 c8 00 00 00 00 00 00 00 90 01 00 00 90 01 00 00 90 01 00 00 58 02 00 00 58 02 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 07 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 0f 00 00 00 af 00 00 00 03 00 00 00 00 04 00 00 4c 04 00 00 b0 04 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 14 05 00 00 19 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 23 00 00 00 23 00 00 00 14 00 00 00 14 00 00 00 50 00 00 00 6e 00 00 00 6e 00 00 00 6e 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 a0 00 00 00 3c 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 44 00 00 00 50 00 00 00 50 00 00 00 5a 00 00 00 10 00 00 00 14 00 00 00 03 00 00 00 b4 00 00 00 c8 00 00 00 04 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8c 00 00 00 96 00 00 00 a0 00 00 00 aa 00 00 00 80 00 00 00 40 00 00 00 b8 0b 00 00 70 17 00 00 10 00 00 00 10 00 00 00 20 00 00 00 20 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 40 00 00 00 80 00 00 00 ff 00 00 00 10 00 00 00 06 00 00 00 00 00 00 00 06 00 00 00 0d 00 00 00 15 00 00 00 1c 00 00 00 26 00 00 00 2f 00 00 00 3a 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00 00 00 00 00 0f 00 00 00 80 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 04 00 00 00 04 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 08 00 00 00 09 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0b 00 00 00 0b 00 00 00 96 00 00 00 03 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 18 00 00 00 18 00 00 00 17 00 00 00 15 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 16 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 08 00 00 00 10 00 00 00 14 00 00 00 b4 00 00 00 e6 00 00 00 02 00 00 00 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 6e 00 00 00 78 00 00 00 82 00 00 00 80 00 00 00 40 00 00 00 b0 04 00 00 d0 07 00 00 14 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 14 00 00 00 18 00 00 00 18 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 00 00 00 00 20 00 00 00 80 00 00 00 ff 00 00 00 20 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 40 00 00 00 20 00 00 00 00 00 00 00 06 00 00 00 0b 00 00 00 0b 00 00 00 13 00 00 00 18 00 00 00 21 00 00 00 34 00 00 00 40 00 00 00 20 00 00 00 04 01 00 00]; }; iq_wdr { size = [e4 02 00 00];