From ef5710db19479d40b5fdab021985f1c2ae00a8a0 Mon Sep 17 00:00:00 2001 From: payton Date: Thu, 29 Jun 2023 10:10:11 +0800 Subject: [PATCH] =?UTF-8?q?1.4G=E4=B8=9A=E5=8A=A1;2.rtos=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=94=B5=E6=B1=A0=E6=A3=80=E6=9F=A5;3.=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=A3=80=E6=B5=8B;4.=E8=B0=83=E6=95=B43?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B;5.?= =?UTF-8?q?=E8=B0=83=E6=95=B4mcu=E8=AF=BB=E5=86=99=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E6=AC=A1=E9=87=8D=E8=AF=95;6.=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dwifi=E8=AE=BE=E7=BD=AE=E5=9B=BE=E7=89=87=E5=B0=BA?= =?UTF-8?q?=E5=AF=B8;7.=E4=BF=AE=E5=A4=8DLinux=E4=B8=8Bir=20cut=E5=88=87?= =?UTF-8?q?=E6=8D=A2;8.=E8=B0=83=E6=95=B4off=E5=88=B0on=E7=9A=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE;9=E5=90=8C=E6=AD=A5p+V=E4=BC=98=E5=8C=96;10.=E4=BF=AE?= =?UTF-8?q?=E6=94=B9led=E5=85=B3=E6=9C=BA=E6=97=B6=E9=A9=AC=E4=B8=8A?= =?UTF-8?q?=E5=85=B3=E9=97=AD;11.=E4=BF=AE=E6=94=B9loader=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../novatek/nvt-na51000-a64/na51000evb.c | 2 +- .../board/novatek/nvt-na51000/na51000evb.c | 2 +- .../board/novatek/nvt-na51055/na51055evb.c | 2 +- .../board/novatek/nvt-na51068/na51068evb.c | 2 +- .../board/novatek/nvt-na51089/na51089evb.c | 19 +- .../novatek/nvt-na51090-a64/na51090evb.c | 2 +- .../board/novatek/nvt-na51090/na51090evb.c | 2 +- .../novatek/nvt-na51102-a64/na51102evb.c | 2 +- .../board/novatek/nvt-na51102/na51102evb.c | 2 +- .../novatek/nvt-na51103-a64/na51103evb.c | 2 +- .../board/novatek/nvt-na51103/na51103evb.c | 2 +- BSP/u-boot/include/configs/nvt-na51089-evb.h | 2 +- .../DxInput_Key.c | 34 +- .../Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c | 50 +- .../cardv/SrcCode/PrjCfg_HUNTING_S530.h | 16 +- .../cardv/SrcCode/System/SysInput_Exe.c | 7 +- .../source/cardv/SrcCode/System/SysMain_Exe.c | 5 +- .../source/cardv/SrcCode/System/main.c | 10 +- .../UIApp/Background/UIBackgroundObj.c | 26 +- .../SrcCode/UIApp/Movie/UIAppMovie_Exe.c | 3 +- .../cardv/SrcCode/UIApp/Photo/UIAppPhoto.h | 2 +- .../SrcCode/UIApp/Photo/UIAppPhoto_Exe.c | 92 +- .../SrcCode/UIApp/Transcode/UIAppTranscode.h | 2 +- .../UIApp/Transcode/UIAppTranscode_Exe.c | 6 +- .../UIApp/Transcode/UIAppTranscode_cmd.c | 1 + .../UIFlowMovie/UIFlowMovieEventCallback.c | 4 +- .../UIFlowPhoto/UIFlowPhotoEventCallback.c | 2 +- .../UIFlowUSB/UIFlowUSBEventCallback.c | 25 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h | 21 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c | 27 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h | 3 +- .../LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c | 15 +- code/application/source/sf_app/Makefile | 4 +- .../source/sf_app}/code/include/sf_battery.h | 12 +- .../source/sf_app/code/include/sf_commMng.h | 3 +- .../source/sf_app/code/include/sf_common.h | 8 +- .../source/sf_app/code/include/sf_commu_mcu.h | 23 +- .../sf_app/code/include/sf_commu_mcu_reg.h | 4 - .../source/sf_app/code/include/sf_eg91_sim.h | 27 + .../source/sf_app/code/include/sf_file.h | 6 +- .../source/sf_app/code/include/sf_fileMng.h | 7 +- .../source/sf_app/code/include/sf_ftp.h | 9 +- .../source/sf_app}/code/include/sf_gps.h | 0 .../source/sf_app/code/include/sf_hal_gpio.h | 3 + .../source/sf_app}/code/include/sf_http.h | 0 .../source/sf_app/code/include/sf_log.h | 2 +- .../source/sf_app/code/include/sf_module.h | 2 +- .../sf_app/code/include/sf_opera_adapt.h | 2 +- .../sf_app/code/include/sf_param_common.h | 1 + .../sf_app/code/include/sf_param_enum.h | 8 +- .../sf_app/code/include/sf_param_struct.h | 10 + .../source/sf_app}/code/include/sf_pc_tool.h | 0 .../source/sf_app/code/include/sf_service.h | 1 + .../source/sf_app}/code/include/sf_sim.h | 2 +- .../source/sf_app/code/include/sf_sms.h | 4 + .../source/sf_app/code/include/sf_system.h | 5 + .../source/sf_app}/code/include/sf_tcp.h | 0 .../code/source/4gMng/sf_4G_auto_operation.c | 2794 ++++++++--------- .../sf_app/code/source/4gMng/sf_eg91_gps.c | 2 +- .../sf_app/code/source/4gMng/sf_eg91_server.c | 2 +- .../sf_app/code/source/4gMng/sf_eg91_sim.c | 733 ++++- .../source/sf_app/code/source/4gMng/sf_ftp.c | 999 +++--- .../sf_app/code/source/4gMng/sf_module.c | 22 +- .../sf_app/code/source/4gMng/sf_opera_adapt.c | 5 +- .../source/sf_app/code/source/4gMng/sf_sms.c | 151 +- .../source/sf_app/code/source/app/sf_app.c | 57 +- .../source/sf_app/code/source/app/sf_common.c | 60 +- .../source/sf_app/code/source/app/sf_device.c | 88 +- .../sf_app/code/source/app/sf_service.c | 170 +- .../source/sf_app/code/source/app/sf_system.c | 338 +- .../sf_app/code/source/battery}/sf_battery.c | 283 +- .../sf_app/code/source/commMng/sf_share_mem.c | 69 +- .../sf_app/code/source/devMng/sf_ledmng.c | 35 +- .../sf_app/code/source/fileMng/sf_file.c | 185 +- .../sf_app/code/source/fileMng/sf_fileMng.c | 161 +- .../sf_app/code/source/gpio/sf_hal_gpio.c | 21 + .../source/sf_app/code/source/logMng/sf_log.c | 2 +- .../code/source/paramMng/sf_param_common.c | 144 +- .../sf_app/code/source/pc_tool}/sf_pc_tool.c | 0 .../sf_app/code/source/storeMng/sf_storeMng.c | 13 +- .../code/source/systemMng/sf_commu_mcu.c | 408 ++- .../code/source/systemMng/sf_commu_mcu_reg.c | 30 +- .../sf_app/code/source/wifi/sf_wifi_svr.c | 164 +- 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/source/sifar/Makefile | 8 +- .../lib/source/sifar/code/include/sf_common.h | 24 +- code/lib/source/sifar/code/include/sf_inc.h | 14 +- code/lib/source/sifar/code/include/sf_mcu.h | 3 - .../common/{sf_battery.c => Bak_battery} | 67 +- .../sifar/code/source/common/sf_battrery.o | Bin 13196 -> 0 bytes .../sifar/code/source/common/sf_common.c | 477 ++- .../sifar/code/source/mcu/sf_commu_mcu.c | 2 +- .../source/sifar/code/source/module/sf_sim.c | 46 +- .../source/sifar/code/source/module/sf_tcp.o | Bin 0 -> 1068 bytes .../nvt-evb.dtb | Bin 0 -> 17558 bytes .../nvt-evb.tmp.dts | 1181 +++++++ loader/ARC/Lib/Release/Ctrl_Flow.a | Bin 0 -> 30102 bytes .../Release/ObjectCode/bl_func.o | Bin 0 -> 23876 bytes .../Ctrl_Flow_Data/Release/ObjectCode/bl_u2.o | Bin 0 -> 780 bytes .../Ctrl_Flow_Data/Release/ObjectCode/main.o | Bin 0 -> 2200 bytes .../Release/ObjectCode/nand_ids.o | Bin 0 -> 1100 bytes .../Release/ObjectCode/spi_nor_ids.o | Bin 0 -> 1096 bytes .../Model/Loader565_Data/Release/LD98565A.bin | Bin 0 -> 32768 bytes .../Loader565_Data/Release/Loader565.axf | Bin 0 -> 197640 bytes .../Loader565_Data/Release/Loader565.sym | 377 +++ .../Loader565_Data/Release/Loader565.txt | 511 +++ .../Release/ObjectCode/prj_main.o | Bin 0 -> 2972 bytes .../Release/ObjectCode/uart_upgrade.o | Bin 0 -> 3024 bytes .../Release/ObjectCode/usb_update.o | Bin 0 -> 8404 bytes .../ObjectLds/Common_exFAT/Common_exFAT.a | Bin 0 -> 24746 bytes .../Release/ObjectLds/Common_exFAT/global.o | Bin 0 -> 3476 bytes .../Release/ObjectLds/Ctrl_Flow/Ctrl_Flow.a | Bin 0 -> 27834 bytes .../Release/ObjectLds/Ctrl_Flow/main.o | Bin 0 -> 2200 bytes .../Release/ObjectLds/Debug/Debug.a | 1 + .../Release/ObjectLds/Debug/debug.o | Bin 0 -> 2676 bytes .../Release/ObjectLds/Driver/Driver.a | Bin 0 -> 14070 bytes .../Release/ObjectLds/Driver/fuart.o | Bin 0 -> 3996 bytes .../Release/ObjectLds/Driver/rtc.o | Bin 0 -> 1844 bytes .../Release/ObjectLds/LDS_LZ_R.lds | 172 + .../ObjectLds/Remap_LZ565/Remap_LZ565.a | 1 + .../ObjectLds/Remap_LZ565/configramLZ.o | Bin 0 -> 896 bytes .../ObjectLds/Remap_LZ565/doremapLZ565.o | Bin 0 -> 3556 bytes .../Release/ObjectLds/Reset_560/Reset_560.a | Bin 0 -> 1492 bytes .../Release/ObjectLds/Reset_560/configDDR.o | Bin 0 -> 7756 bytes .../ObjectLds/Reset_560/config_dram1_2_tbl.o | Bin 0 -> 1020 bytes .../ObjectLds/Reset_560/config_dram1_tbl.o | Bin 0 -> 1016 bytes .../ObjectLds/Reset_560/configramFreqParam.o | Bin 0 -> 880 bytes .../Release/ObjectLds/Reset_560/core2_entry.o | Bin 0 -> 884 bytes .../Release/ObjectLds/Reset_560/exp.o | Bin 0 -> 636 bytes .../Release/ObjectLds/Reset_560/reset.o | Bin 0 -> 1232 bytes .../Loader565_Data/Release/ObjectLds/ld_ext.d | 98 + .../Release/ObjectLds/ld_lib.txt | 1 + .../Release/ObjectLds/ld_lib_ban.txt | 1 + .../Loader565_Data/Release/ObjectLds/libs.txt | 1 + .../Loader565_Data/Release/ObjectLds/objs.txt | 1 + .../Release/ObjectLds/replace.lds | 172 + loader/Project/Model/Src/prj_main.c | 20 +- .../u-boot/include/configs/nvt-na51089-evb.h | 2 +- rtos/code/application/source/cardv/Makefile | 1 - .../565_HUNTING_EVB_LINUX_4G_S530/DxHunting.c | 6 +- .../Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c | 13 +- .../565_HUNTING_EVB_LINUX_4G_S530/Source.mk | 1 - .../Dx/565_HUNTING_EVB_LINUX_4G_S530/sf_led.c | 45 - .../source/cardv/SrcCode/Dx/include/sf_led.h | 26 - .../cardv/SrcCode/PrjCfg_HUNTING_S530.h | 7 +- .../source/cardv/SrcCode/System/rtos-main.c | 8 + .../cardv/SrcCode/System/sys_linuxboot.c | 10 +- .../cardv/SrcCode/UIApp/MovieFast/MovieFast.c | 158 +- .../cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c | 21 +- .../UIApp/PhotoFast/PhotoFastCapDateImprint.c | 126 +- .../UIApp/PhotoFast/PhotoFastSliceEncode.c | 69 +- .../UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h | 1 + .../LVGL_SPORTCAM/UIInfo/UIMovieMapping.c | 2 +- .../LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c | 1 + .../na51089}/include/sf_battery.h | 12 + rtos/code/driver/na51089/include/sf_led.h | 118 + rtos/code/driver/na51089/source/mcu/Makefile | 19 + .../driver/na51089/source/mcu/sf_battery.c | 1274 ++++++++ rtos/code/driver/na51089/source/mcu/sf_led.c | 637 ++++ rtos/code/driver/na51089/source/mcu/sf_mcu.c | 564 ++-- 161 files changed, 10606 insertions(+), 3164 deletions(-) mode change 100755 => 100644 code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_battery.h (84%) rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_gps.h (100%) rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_http.h (100%) rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_pc_tool.h (100%) rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_sim.h (99%) rename code/{lib/source/sifar => application/source/sf_app}/code/include/sf_tcp.h (100%) rename {rtos/code/application/source/cardv/SrcCode/Gx/GxPower => code/application/source/sf_app/code/source/battery}/sf_battery.c (76%) rename code/{lib/source/sifar/code/source/common => application/source/sf_app/code/source/pc_tool}/sf_pc_tool.c (100%) rename code/lib/source/sifar/code/source/common/{sf_battery.c => Bak_battery} (94%) delete mode 100644 code/lib/source/sifar/code/source/common/sf_battrery.o create mode 100644 code/lib/source/sifar/code/source/module/sf_tcp.o create mode 100644 configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb create mode 100644 configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts create mode 100644 loader/ARC/Lib/Release/Ctrl_Flow.a create mode 100644 loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/bl_func.o create mode 100644 loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/bl_u2.o create mode 100644 loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/main.o create mode 100644 loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/nand_ids.o create mode 100644 loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/spi_nor_ids.o create mode 100755 loader/Project/Model/Loader565_Data/Release/LD98565A.bin create mode 100755 loader/Project/Model/Loader565_Data/Release/Loader565.axf create mode 100644 loader/Project/Model/Loader565_Data/Release/Loader565.sym create mode 100644 loader/Project/Model/Loader565_Data/Release/Loader565.txt create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectCode/prj_main.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectCode/uart_upgrade.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectCode/usb_update.o create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/Common_exFAT.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/global.o create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Ctrl_Flow/Ctrl_Flow.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Debug/Debug.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Debug/debug.o create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/Driver.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/fuart.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/rtc.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/LDS_LZ_R.lds create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/Remap_LZ565.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o create mode 100755 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/Reset_560.a create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/exp.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/reset.o create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_ext.d create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib.txt create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib_ban.txt create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/libs.txt create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/objs.txt create mode 100644 loader/Project/Model/Loader565_Data/Release/ObjectLds/replace.lds delete mode 100755 rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/sf_led.c delete mode 100755 rtos/code/application/source/cardv/SrcCode/Dx/include/sf_led.h rename rtos/code/{application/source/cardv/SrcCode/Gx => driver/na51089}/include/sf_battery.h (69%) mode change 100755 => 100644 create mode 100755 rtos/code/driver/na51089/include/sf_led.h create mode 100644 rtos/code/driver/na51089/source/mcu/sf_battery.c create mode 100755 rtos/code/driver/na51089/source/mcu/sf_led.c diff --git a/BSP/u-boot/board/novatek/nvt-na51000-a64/na51000evb.c b/BSP/u-boot/board/novatek/nvt-na51000-a64/na51000evb.c index 6a31ac59b..18bc19f0e 100755 --- a/BSP/u-boot/board/novatek/nvt-na51000-a64/na51000evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51000-a64/na51000evb.c @@ -195,7 +195,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51000/na51000evb.c b/BSP/u-boot/board/novatek/nvt-na51000/na51000evb.c index 70ac91d79..da4467f99 100755 --- a/BSP/u-boot/board/novatek/nvt-na51000/na51000evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51000/na51000evb.c @@ -177,7 +177,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51055/na51055evb.c b/BSP/u-boot/board/novatek/nvt-na51055/na51055evb.c index 02af014a6..048a08b7c 100755 --- a/BSP/u-boot/board/novatek/nvt-na51055/na51055evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51055/na51055evb.c @@ -157,7 +157,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51068/na51068evb.c b/BSP/u-boot/board/novatek/nvt-na51068/na51068evb.c index 65be4ec83..25fc84218 100755 --- a/BSP/u-boot/board/novatek/nvt-na51068/na51068evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51068/na51068evb.c @@ -182,7 +182,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else { - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c b/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c index 28fe94287..5f0b575b4 100755 --- a/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c @@ -160,7 +160,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); ota_upgrade_sts = 1; } /* @@ -401,6 +401,21 @@ static int nvt_norflash_init(void) return ret; } #endif /* CONFIG_NVT_LINUX_EMMC_BOOT */ +#if 0 +static int sf_fw_update_reset(void) +{ + int ret = 0; + char command[128] = {0}; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + sprintf(command, "reset"); + ret = run_command(command, 0); + if (ret < 0) { + nvt_dbg(ERR, "sf reset failed\n"); + } + printf("[%s:%d] %s\n", __FUNCTION__, __LINE__,command); + return ret; +} +#endif /** * @brief misc_init_r - To do nvt update and board init. * @@ -465,7 +480,7 @@ int misc_init_r(void) } nvt_dbg(FUNC, "boot time: %lu(us) \n", get_nvt_timer0_cnt()); - + //sf_fw_update_reset(); return 0; } diff --git a/BSP/u-boot/board/novatek/nvt-na51090-a64/na51090evb.c b/BSP/u-boot/board/novatek/nvt-na51090-a64/na51090evb.c index ec0a6f5f2..5e852dcdd 100755 --- a/BSP/u-boot/board/novatek/nvt-na51090-a64/na51090evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51090-a64/na51090evb.c @@ -225,7 +225,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51090/na51090evb.c b/BSP/u-boot/board/novatek/nvt-na51090/na51090evb.c index d416caec0..6972122ab 100755 --- a/BSP/u-boot/board/novatek/nvt-na51090/na51090evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51090/na51090evb.c @@ -177,7 +177,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51102-a64/na51102evb.c b/BSP/u-boot/board/novatek/nvt-na51102-a64/na51102evb.c index 8a3ae279a..deee7f1e1 100755 --- a/BSP/u-boot/board/novatek/nvt-na51102-a64/na51102evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51102-a64/na51102evb.c @@ -225,7 +225,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51102/na51102evb.c b/BSP/u-boot/board/novatek/nvt-na51102/na51102evb.c index 10ffe0646..1e10c977f 100755 --- a/BSP/u-boot/board/novatek/nvt-na51102/na51102evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51102/na51102evb.c @@ -177,7 +177,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51103-a64/na51103evb.c b/BSP/u-boot/board/novatek/nvt-na51103-a64/na51103evb.c index f56f961f5..e6b34e140 100755 --- a/BSP/u-boot/board/novatek/nvt-na51103-a64/na51103evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51103-a64/na51103evb.c @@ -225,7 +225,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/board/novatek/nvt-na51103/na51103evb.c b/BSP/u-boot/board/novatek/nvt-na51103/na51103evb.c index affc73dbe..4afc076a8 100755 --- a/BSP/u-boot/board/novatek/nvt-na51103/na51103evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51103/na51103evb.c @@ -177,7 +177,7 @@ static int nvt_handle_fw_abin(void) printf("modelext init fail\n"); } } else{ - printf("%sUpdate successfully %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); } /* * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting diff --git a/BSP/u-boot/include/configs/nvt-na51089-evb.h b/BSP/u-boot/include/configs/nvt-na51089-evb.h index 5e064da43..8b7654332 100755 --- a/BSP/u-boot/include/configs/nvt-na51089-evb.h +++ b/BSP/u-boot/include/configs/nvt-na51089-evb.h @@ -81,7 +81,7 @@ #define PWM_LED_ERASE 50 #define PWM_LED_PROGRAM 5 #else -#define NVT_LED_PIN P_GPIO(10) +#define NVT_LED_PIN DSI_GPIO(9) #define NVT_LED_ERASE_DURATION 30 #define NVT_LED_PROGRAM_DURATION 10 #endif diff --git a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c old mode 100755 new mode 100644 index 617d09fea..cb328e16f --- a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c +++ b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c @@ -144,6 +144,12 @@ void DrvKey_Init(void) @param void @return UINT32 */ +static UINT32 KeyTestPressCnt = 0; +static BOOL KeyPress_Long = FALSE; +static UINT32 SendKeyCnt = 0; +#define LongKey_Cnt (40)// times +#define SendKey_LessCnt (6 + 1)///(6 + 1)//6 :vaild times + UINT32 DrvKey_DetNormalKey(void) { UINT32 uiKeyCode = 0; @@ -200,7 +206,33 @@ UINT32 DrvKey_DetNormalKey(void) // } if (!gpio_getPin(GPIO_KEY_TEST)) { - uiKeyCode |= FLGKEY_SHUTTER2; + //uiKeyCode |= FLGKEY_SHUTTER2; + KeyTestPressCnt++; + if(KeyTestPressCnt > LongKey_Cnt) //long press + { + KeyPress_Long = TRUE; + uiKeyCode |= FLGKEY_CUSTOM1; + } + }else{ + if(KeyTestPressCnt){ + if(KeyPress_Long){ + if(++SendKeyCnt < SendKey_LessCnt){ //long key + uiKeyCode |= FLGKEY_CUSTOM1; + }else{ + SendKeyCnt = 0; + KeyTestPressCnt = 0; + KeyPress_Long = FALSE; + } + }else{ + if(++SendKeyCnt < SendKey_LessCnt){ //shot key + uiKeyCode |= FLGKEY_SHUTTER2; + }else{ + SendKeyCnt = 0; + KeyTestPressCnt = 0; + KeyPress_Long = FALSE; + } + } + } } #endif /* 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 2648c0152..c345c91a7 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 @@ -319,44 +319,44 @@ INT32 GPIO_SetBacklightStatus(BOOL en) return gpio_getPin(GPIO_LCD_BLG_PCTL); } -void GOIO_Turn_Onoff_IRCUT(UINT8 onoff) -{ + 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) { - gpio_setDir(GPIO_IRCUT_MEN1, GPIO_DIR_OUTPUT); - gpio_setDir(GPIO_IRCUT_MEN2, GPIO_DIR_OUTPUT); + gpio_setDir(GPIO_IRCUT_MEN1, GPIO_DIR_OUTPUT); + gpio_setDir(GPIO_IRCUT_MEN2, GPIO_DIR_OUTPUT); ir_flag = 0; } - + if(onoff ==1) - { - gpio_setPin(GPIO_IRCUT_MEN1); - gpio_clearPin(GPIO_IRCUT_MEN2); + { + gpio_setPin(GPIO_IRCUT_MEN1); + gpio_clearPin(GPIO_IRCUT_MEN2); sf_ir_cut_ctrl_PowerOff(); - } - else if(onoff == 0) - { - gpio_setPin(GPIO_IRCUT_MEN2); - gpio_clearPin(GPIO_IRCUT_MEN1); - sf_ir_cut_ctrl_PowerOff(); - } - else + } + else if(onoff == 0) { - gpio_clearPin(GPIO_IRCUT_MEN1); - gpio_clearPin(GPIO_IRCUT_MEN2); + gpio_setPin(GPIO_IRCUT_MEN2); + gpio_clearPin(GPIO_IRCUT_MEN1); + sf_ir_cut_ctrl_PowerOff(); + } + else + { + gpio_clearPin(GPIO_IRCUT_MEN1); + gpio_clearPin(GPIO_IRCUT_MEN2); } - //DBG_DUMP("\r\n DrvGPIO_SetIRCut value:%d \r\n",onoff); - //Delay_DelayMs(20); - //gpio_clearPin(GPIO_IRCUT_MEN1); - //gpio_clearPin(GPIO_IRCUT_MEN2); - //printf("[%s:%d]e\n",__FUNCTION__,__LINE__); + //DBG_DUMP("\r\n DrvGPIO_SetIRCut value:%d \r\n",onoff); + //Delay_DelayMs(20); + //gpio_clearPin(GPIO_IRCUT_MEN1); + //gpio_clearPin(GPIO_IRCUT_MEN2); + //printf("[%s:%d]e\n",__FUNCTION__,__LINE__); DBG_IND(" e\n"); -} + } void GPIO_IRLed_Turn_Onoff(BOOL onoff) diff --git a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h index a5604e53f..46133f4a6 100644 --- a/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h +++ b/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S530.h @@ -461,11 +461,11 @@ // EXIF Config #define USE_EXIF DISABLE // End string must be '\0', total char must be 31 -#define EXIF_MAKER_NAME "DvCam" +#define EXIF_MAKER_NAME "SY" // End string must be '\0', total char must be 31 -#define EXIF_MODEL_NAME "96675" +#define EXIF_MODEL_NAME "S530-R" // End string must be '\0', total char must be 31 -#define EXIF_IMAGE_DESCROPTOIN "NOVATEK CAMERA" +#define EXIF_IMAGE_DESCROPTOIN "S530 CAMERA" #define EXIF_SOFTWARE_VERSION FW_VERSION_NUM // <= 20 char (TagSoftVerLen) @@ -918,7 +918,7 @@ #define HUNTING_MCU_I2C DISABLE #define HUNTING_MCU_UART ENABLE #define HUNTING_IR_LED_940 ENABLE -#define SF_BASE_VERSION "7MD4RCwD6T2" +#define SF_BASE_VERSION "7MD4RCwD6T4" #define HW_S530 1 #define DCF_DIR_NAME "MEDIA" /* 100MEDIA */ #define DCF_FILE_NAME "SYFW" /* SYFW0001.JPG */ @@ -928,6 +928,14 @@ #define SF_SEND_LIST_DIR "/mnt/sd/THUMB/" #define SF_THUMB_SEND_LIST SF_SEND_LIST_DIR"send.list" #define SF_THUMB_SEND_AUTO SF_SEND_LIST_DIR"auto.list" +#define SF_HD_DIR_LIST SF_SEND_LIST_DIR"HD/send.list" +#define SF_HD_DIR SF_SEND_LIST_DIR"HD" +#define SF_HD_DIR_CARDV "A:\\THUMB\\HD\\" + +#define SF_FW_CFG_FILE_NAME "SPHOST_REVEAL.CFG" +#define SF_FW_FILE_NAME "SPHOST_REVEAL.BRN" +#define SF_FW_CFG_FILE_PATH "A:\\SPHOST_REVEAL.CFG" +#define SF_FW_FILE_PATH "A:\\SPHOST_REVEAL.BRN" #define SF_IQ_TEST DISABLE diff --git a/code/application/source/cardv/SrcCode/System/SysInput_Exe.c b/code/application/source/cardv/SrcCode/System/SysInput_Exe.c index 59b1d7fe6..22b7a5f5b 100755 --- a/code/application/source/cardv/SrcCode/System/SysInput_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysInput_Exe.c @@ -136,7 +136,8 @@ static KEY_OBJ g_KeyTable[] = { //{FLGKEY_LEFT, KEY_CONTINUE, NVTEVT_KEY_PREV, NVTEVT_KEY_CONTINUE, 0}, //{FLGKEY_LEFT, KEY_RELEASE, NVTEVT_KEY_PREV, NVTEVT_KEY_RELEASE, 0}, {FLGKEY_SHUTTER2, KEY_PRESS, NVTEVT_KEY_SHUTTER2, NVTEVT_KEY_PRESS, DEMOSOUND_SOUND_KEY_TONE}, - {FLGKEY_SHUTTER2, KEY_RELEASE, NVTEVT_KEY_SHUTTER2, NVTEVT_KEY_RELEASE, 0}, + {FLGKEY_SHUTTER2, KEY_CONTINUE, NVTEVT_KEY_SHUTTER2, NVTEVT_KEY_CONTINUE, 0}, + {FLGKEY_SHUTTER2, KEY_RELEASE, NVTEVT_KEY_SHUTTER2, NVTEVT_KEY_RELEASE, 0}, {FLGKEY_RIGHT, KEY_PRESS, NVTEVT_KEY_SELECT, NVTEVT_KEY_PRESS, DEMOSOUND_SOUND_KEY_TONE}, {FLGKEY_RIGHT, KEY_CONTINUE, NVTEVT_KEY_SELECT, NVTEVT_KEY_CONTINUE, 0}, {FLGKEY_RIGHT, KEY_RELEASE, NVTEVT_KEY_SELECT, NVTEVT_KEY_RELEASE, 0}, @@ -407,8 +408,8 @@ void System_OnInputInit(void) GxKey_SetRepeatInterval(BURSTKEY_INTERVAL / SxTimer_GetData(SXTIMER_TIMER_BASE)); SysMan_RegKeySoundCB(KeySoundCB); SysMan_RegKeyTable(g_KeyTable, sizeof(g_KeyTable) / sizeof(KEY_OBJ)); - //3.£gu¢DUSxJobaA¢XE ---------> System Job - //4.£gu¢DUSxTimeraA¢XE ---------> Detect Job + //3.�gu�DUSxJobaA�XE ---------> System Job + //4.�gu�DUSxTimeraA�XE ---------> Detect Job #if (POWERKEY_FUNCTION == ENABLE) SX_TIMER_DET_PWR_ID = SxTimer_AddItem(&Timer_Input_DetPKey); diff --git a/code/application/source/cardv/SrcCode/System/SysMain_Exe.c b/code/application/source/cardv/SrcCode/System/SysMain_Exe.c index 217320011..d8add5a08 100755 --- a/code/application/source/cardv/SrcCode/System/SysMain_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysMain_Exe.c @@ -25,6 +25,7 @@ /////////////////////////////////////////////////////////////////////////////// #if HUNTING_CAMERA_MCU == ENABLE #include "sf_mcu.h" +#include "sf_common.h" #endif extern VControl SystemObjCtrl; extern VControl UISetupObjCtrl; @@ -448,7 +449,9 @@ INT32 System_OnShutdown(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) SwTimer_DelayMs(500); #endif } - + #if HUNTING_CAMERA_MCU == ENABLE + sf_cardv_para_check_stop(); + #endif Save_MenuInfo(); #if (BT_FUNC == ENABLE) System_OnBTExit(); diff --git a/code/application/source/cardv/SrcCode/System/main.c b/code/application/source/cardv/SrcCode/System/main.c index 69b091730..6adbe1fb9 100755 --- a/code/application/source/cardv/SrcCode/System/main.c +++ b/code/application/source/cardv/SrcCode/System/main.c @@ -374,6 +374,7 @@ int NvtMain(void) printf("create cardv message successs!!!!\n"); } sf_cardv_message_thread_init(); + sf_cardv_para_check_start(); SF_MESSAGE_BUF_S stMessageBuf = {0}; stMessageBuf.arg1 = SF_MCU_CMD_POWERON; @@ -382,12 +383,11 @@ int NvtMain(void) sf_sys_status_led_set(SF_LED_SYS_STATE_PIR_NOT_DETECT); - sf_battery_check_init(); - sf_battery_thread_init(); - - /*wifi init*/ if(sf_get_mode_flag()) { + GOIO_Turn_Onoff_IRCUT(1); + + /*wifi init*/ stMessageBuf.arg1 = SF_WIFI_CMD_START; stMessageBuf.cmdId = CMD_WIFI; sf_com_message_send_to_cardv(&stMessageBuf); @@ -407,7 +407,7 @@ int NvtMain(void) { sf_usb_mux_s(0); } - GOIO_Turn_Onoff_IRCUT(1); + #endif System_WaitForPowerOffStart(); // Wait for shutdown cmd diff --git a/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c b/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c index b7a866723..48bbea5f8 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c +++ b/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c @@ -849,7 +849,7 @@ UINT32 BackgroundFormatCard(void) ret = FileSys_FormatDisk(pStrgDXH, FALSE); DBG_FUNC("Call FileSys_FormatDisk() ret=%d\r\n", ret); - if (ret == FST_STA_OK) { + if (ret == FST_STA_OK) { #if HUNTING_CAMERA_MCU == ENABLE sf_set_card_statu(CMD_FORMAT_SD_OK); #endif @@ -867,19 +867,19 @@ UINT32 BackgroundFormatCard(void) UI_SetData(FL_IsDCIMReadOnly, FALSE); #endif #if (PLAY_MODE==ENABLE) - if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_PLAYBACK) { - UIPlay_PlaySingle(PB_SINGLE_CURR); - } -#endif - //#NT#2016/05/30#Lincy Lin -begin - //#NT#Support logfile function -#if (LOGFILE_FUNC==ENABLE) - LogFile_ReOpen(); -#endif - //#NT#2016/05/30#Lincy Lin -end - vos_util_delay_ms(1000); + if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_PLAYBACK) { + UIPlay_PlaySingle(PB_SINGLE_CURR); + } + #endif + //#NT#2016/05/30#Lincy Lin -begin + //#NT#Support logfile function + #if (LOGFILE_FUNC==ENABLE) + LogFile_ReOpen(); + #endif + //#NT#2016/05/30#Lincy Lin -end + vos_util_delay_ms(1000); SysMain_system("sync"); - } + } else { #if HUNTING_CAMERA_MCU == ENABLE diff --git a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c index 9f74507cd..1b0f31b16 100644 --- a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c @@ -1787,13 +1787,14 @@ INT32 MovieExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) Movie_CommPoolInit(); gMovie_InitCommonMemFinish=1; + #if SF_IQ_TEST == ENABLE if((0 == access("/mnt/sd/FW98565A.bin", F_OK))){ system("rm -rf /mnt/sd/LD96565A.bin"); system("rm -rf /mnt/sd/FW98565A.bin"); system("sync"); usleep(100*1000); } - + #endif MovieExe_SetRecInfoByUISetting(); gMovie_Disp_Info.vout_ctrl = GxVideo_GetDeviceCtrl(DOUT1,DISPLAY_DEVCTRL_CTRLPATH); diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h index 28f9568bc..17ddf78e8 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h @@ -385,7 +385,7 @@ extern UINT32 PhotoExe_GetFdFaceNum(void); extern void PhotoExe_DZoomReset(void); extern void PhotoExe_DZoomInBK(void); extern void PhotoExe_DZoomOutBK(void); - +extern void sf_set_DZoom(INT32 idx); //Photo Init extern INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray); extern INT32 PhotoExe_OnClose(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray); 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 258138a5a..ec3d70637 100644 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -91,10 +91,10 @@ HD_DIM DZoom_5M_Table[DZOOM_MAX_STEP] = { HD_DIM DZoom_2M_Table[DZOOM_MAX_STEP] = { {2560,1440}, - {1920,1080}, - {1856,1044}, - {1792,1008}, - {1732,976}, + {1280,720}, + {640,480}, + {320,240}, + {160,120}, {1672,940}, // {1616,908}, }; @@ -1197,6 +1197,86 @@ static void PhotoExe_DZoomStop(void) } #endif +#if HUNTING_CAMERA_MCU == ENABLE + +void sf_set_DZoom(INT32 idx) +{ + HD_PATH_ID vcap_id = 0; + HD_PATH_ID vprc_id = 0; + HD_VIDEOCAP_CROP vcap_crop_param= {0}; + HD_RESULT ret = HD_OK; + HD_VIDEOPROC_IN hd_vproc_in = {0}; + HD_VIDEOPROC_OUT vprc_out_param = {0}; + //INT32 idx = g_i32PhotoDzoomStep; + HD_DIM *pDzoomTbl=DZoom_2M_Table; + + if (idx >= (DZOOM_MAX_STEP-1)) { + return; + } + if(System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_MOVIE){ + vcap_id = ImageApp_MovieMulti_GetVcapPort(_CFG_REC_ID_1); + vprc_id = ImageApp_MovieMulti_GetVprc3DNRPort(_CFG_REC_ID_1); + }else{ + ImageApp_Photo_Get_Hdal_Path(PHOTO_VID_IN_1, PHOTO_HDAL_VCAP_CAP_PATH, (UINT32 *)&vcap_id); + ImageApp_Photo_Get_Hdal_Path(PHOTO_VID_IN_1, PHOTO_HDAL_VPRC_3DNR_REF_PATH, (UINT32 *)&vprc_id); + } + if ((vcap_id == 0) || (vprc_id == 0)) { + DBG_ERR("vcap_id=%d, vprc_id=%d\r\n", vcap_id, vprc_id); + return; + } + + vcap_crop_param.mode = HD_CROP_ON; + + hd_vproc_in.pxlfmt = HD_VIDEO_PXLFMT_YUV420; + hd_vproc_in.frc = HD_VIDEO_FRC_RATIO(1, 1); + + vprc_out_param.pxlfmt = HD_VIDEO_PXLFMT_YUV420; + vprc_out_param.frc = HD_VIDEO_FRC_RATIO(1, 1); + + vcap_crop_param.win.rect.x = (pDzoomTbl[0].w - pDzoomTbl[idx].w)/2; + vcap_crop_param.win.rect.y = (pDzoomTbl[0].h - pDzoomTbl[idx].h)/2; + vcap_crop_param.win.rect.w = pDzoomTbl[idx].w; + vcap_crop_param.win.rect.h = pDzoomTbl[idx].h; + + hd_vproc_in.dim.w = pDzoomTbl[idx].w; + hd_vproc_in.dim.h = pDzoomTbl[idx].h; + + vprc_out_param.dim.w = pDzoomTbl[idx].w; + vprc_out_param.dim.h = pDzoomTbl[idx].h; + vprc_out_param.rect.x = 0; + vprc_out_param.rect.y = 0; + vprc_out_param.rect.w = pDzoomTbl[idx].w; + vprc_out_param.rect.h = pDzoomTbl[idx].w; + + DBG_DUMP("zoomin idx=%d, w=%d, h=%d step=%lu\r\n", + idx, + pDzoomTbl[idx].w, + pDzoomTbl[idx].h, + g_i32PhotoDzoomStep + ); + + if ((ret = hd_videocap_set(vcap_id, HD_VIDEOCAP_PARAM_OUT_CROP, &vcap_crop_param)) != HD_OK) { + DBG_ERR("set HD_VIDEOCAP_PARAM_IN_CROP fail(%d)\r\n", ret); + } + + if ((ret = hd_videocap_start(vcap_id)) != HD_OK) { + DBG_ERR("set hd_videocap_start fail(%d)\r\n", ret); + } + + if ((ret = hd_videoproc_set(vprc_id, HD_VIDEOPROC_PARAM_IN, &hd_vproc_in)) != HD_OK) { + DBG_ERR("set hd_videoproc_set fail(%d)\r\n", ret); + } + + if ((ret = hd_videoproc_set(vprc_id, HD_VIDEOPROC_PARAM_OUT, &vprc_out_param)) != HD_OK) { + DBG_ERR("set hd_videoproc_set fail(%d)\r\n", ret); + } + + if ((ret = hd_videoproc_start(vprc_id)) != HD_OK) { + DBG_ERR("set hd_videoproc_start fail(%d)\r\n", ret); + } +} +#endif + void PhotoExe_DZoomInBK(void) { HD_PATH_ID vcap_id = 0; @@ -2469,13 +2549,15 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) GOIO_Turn_Onoff_IRCUT(1); //sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0); + #if SF_IQ_TEST == ENABLE if((0 == access("/mnt/sd/FW98565A.bin", F_OK))){ system("rm -rf /mnt/sd/LD96565A.bin"); system("rm -rf /mnt/sd/FW98565A.bin"); system("sync"); usleep(100*1000); } - + #endif + PhotoExe_CommPoolInit(); dualCam =PhotoExe_InitSensorCount(); PhotoExe_InitFileNaming(); diff --git a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode.h b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode.h index 39d2227a6..4bb9d280a 100644 --- a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode.h +++ b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode.h @@ -17,7 +17,7 @@ typedef void (*TRANSCODE_BS_READY_CB)(void* bitstream_va, UINT32 size); #define TRANSCODE_DBG_DUMP_YUV 0 #define TRANSCODE_DBG_DUMP_BS 0 -#define TRANSCODE_TARGET_PHOTO_SIZE UIAPP_PHOTO_SIZE_2M +#define TRANSCODE_TARGET_PHOTO_SIZE SCREEN_PHOTO_SIZE_2_76M #define TRANSCODE_TARGET_INIT_QUALITY 50 typedef struct { diff --git a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_Exe.c index ee2e143cf..f3ff01a5e 100644 --- a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_Exe.c @@ -79,8 +79,8 @@ static UINT32 _TranscodeExe_Get_Max_Cap_Buf_Size(void) static UINT32 _TranscodeExe_Get_Target_Buf_Size(void) { - UINT32 target_size_w = ALIGN_CEIL_64(GetPhotoSizeWidth(TRANSCODE_TARGET_PHOTO_SIZE)); - UINT32 target_size_h = ALIGN_CEIL_64(GetPhotoSizeHeight(TRANSCODE_TARGET_PHOTO_SIZE)); + UINT32 target_size_w = ALIGN_CEIL_64(sf_get_screen_nail_width(TRANSCODE_TARGET_PHOTO_SIZE)); + UINT32 target_size_h = ALIGN_CEIL_64(sf_get_screen_nail_height(TRANSCODE_TARGET_PHOTO_SIZE)); HD_VIDEO_PXLFMT pxl_fmt = HD_VIDEO_PXLFMT_YUV420; return VDO_YUV_BUFSIZE(target_size_w, target_size_h, pxl_fmt); @@ -88,7 +88,7 @@ static UINT32 _TranscodeExe_Get_Target_Buf_Size(void) static HD_DIM _TranscodeExe_Get_Target_Size(void) { - return (HD_DIM){GetPhotoSizeWidth(TRANSCODE_TARGET_PHOTO_SIZE), GetPhotoSizeHeight(TRANSCODE_TARGET_PHOTO_SIZE)}; + return (HD_DIM){sf_get_screen_nail_width(TRANSCODE_TARGET_PHOTO_SIZE), sf_get_screen_nail_height(TRANSCODE_TARGET_PHOTO_SIZE)}; } static UINT32 _TranscodeExe_Get_Target_Bitrate(void) diff --git a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_cmd.c b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_cmd.c index 918c9cf51..6584868b5 100644 --- a/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_cmd.c +++ b/code/application/source/cardv/SrcCode/UIApp/Transcode/UIAppTranscode_cmd.c @@ -23,6 +23,7 @@ void transcode_bs_ready_cb(void* bitstream_va, UINT32 size) { DBG_DUMP("bitstream_va = %lx , size = %lx\n", bitstream_va, size); + //SF_HD_DIR } static BOOL cmd_transcode_start(unsigned char argc, char **argv) diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c index 6bcefed2c..5e85bf19e 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c @@ -274,7 +274,7 @@ static void update_battery(void) /* user should call a function to get battery level here */ #if HUNTING_CAMERA_MCU == ENABLE - lv_plugin_img_set_src(image_battery_scr_uiflowmovie, res[sf_battery_level_get()]); + lv_plugin_img_set_src(image_battery_scr_uiflowmovie, res[sf_cardv_battery_level_get()]); #else lv_plugin_img_set_src(image_battery_scr_uiflowmovie, res[0]); #endif @@ -1261,7 +1261,7 @@ void UIFlowMovieEventCallback(lv_obj_t* obj, lv_event_t event) UIFlowMovie_ScrOpen(obj); #if HUNTING_CAMERA_MCU == ENABLE UIMenuStoreInfo *puiPara = sf_ui_para_get(); - if((puiPara->CamMode == SF_CAM_MODE_VIDEO)) + if((SF_CAM_MODE_VIDEO == puiPara->CamMode)) { sf_rtsp_restart(); } diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c index dc133903d..a4f984d7b 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c @@ -266,7 +266,7 @@ static void update_battery(void) /* user should call a function to get battery level here */ #if HUNTING_CAMERA_MCU == ENABLE - lv_plugin_img_set_src(image_battery_scr_uiflowphoto, res[sf_battery_level_get()]); + lv_plugin_img_set_src(image_battery_scr_uiflowphoto, res[sf_cardv_battery_level_get()]); #else lv_plugin_img_set_src(image_battery_scr_uiflowphoto, res[GetBatteryLevel()]); #endif diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowUSB/UIFlowUSBEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowUSB/UIFlowUSBEventCallback.c index fd2aedb60..ed6b0aa65 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowUSB/UIFlowUSBEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowUSB/UIFlowUSBEventCallback.c @@ -1,6 +1,8 @@ +#include "PrjInc.h" #include "UIFlowLVGL/UIFlowLVGL.h" #include "UIFlowWndUSBAPI.h" #include + static lv_group_t* gp = NULL; static void set_indev_keypad_group(lv_obj_t* obj) @@ -14,6 +16,27 @@ static void set_indev_keypad_group(lv_obj_t* obj) lv_indev_set_group(indev, gp); } +static void UIFlowUsb_Key(lv_obj_t* obj, uint32_t key) +{ + printf("\n[%s] %d key:%d\n", __FUNCTION__, __LINE__,key); + + switch(key) + { + case LV_USER_KEY_SHUTTER2: + if((System_GetState(SYS_STATE_CURRMODE) != PRIMARY_MODE_USBMSDC)){ + Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_USBMSDC); + } + else{ + Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_USBPCC); + } + break; + + default: + break; + } +} + + void UIFlowUSBEventCallback(lv_obj_t* obj, lv_event_t event) { uint32_t* usbmode; @@ -52,7 +75,7 @@ void UIFlowUSBEventCallback(lv_obj_t* obj, lv_event_t event) { uint32_t* key = (uint32_t*)lv_event_get_data(); - + UIFlowUsb_Key(obj, *key); /*********************************************************************************** * IMPORTANT!! * diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h index 4bf30cca5..8d555d1ee 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UICfgDefault.h @@ -63,7 +63,11 @@ #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #else #if (MOVIE_AI_DEMO == DISABLE) - #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_1920x1080P25 + #if SF_IQ_TEST == DISABLE + #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1280x720P30 + #else + #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_1920x1080P25 + #endif #else #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #endif @@ -166,7 +170,15 @@ #endif #define DEFAULT_ETHCAM_TX_IP_ADDR 0 //0xc00a8c0 + +#if SF_IQ_TEST == ENABLE +#define DEFAULT_NET_WORK_NEED_SEARCH SF_OFF #define DEFAULT_BOOT_WORK_MODE SF_CAM_MODE_PHOTO_VIDEO// +#else +#define DEFAULT_BOOT_WORK_MODE SF_CAM_MODE_PHOTO// +#define DEFAULT_NET_WORK_NEED_SEARCH SF_ON +#endif + #define DEFAULT_SF_CAMID SF_CAMID_OFF #define DEFAULT_FLASH_LED SF_FLASH_LED_HIGH #define DEFAULT_NIGHT_MODE SF_NIGHT_MODE_MIN_BLUR//SF_NIGHT_MODE_BALANCED @@ -183,11 +195,6 @@ #elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_) #define DEFAULT_PIR_SENSITIVITY SF_PIR_SENSITIVITY_7 #endif -#if SF_IQ_TEST == ENABLE -#define DEFAULT_NET_WORK_NEED_SEARCH SF_OFF -#else -#define DEFAULT_NET_WORK_NEED_SEARCH SF_ON -#endif #define DEFAULT_GPRS_SWITCH SF_ON #define DEFAULT_BATTERY_TYPE SF_BATT_ALKALINE @@ -196,7 +203,7 @@ #define DEFAULT_SEND_MAX_NUM SF_SEND_MAX_NUM_UNLIMITED #define DEFAULT_REDAILY_REPORT_SWITCH SF_OFF #define DEFAULT_SIN_PIN_FLAG SF_ON -#define DEFAULT_AUTO_OFF_SWITCH SF_OFF +#define DEFAULT_AUTO_OFF_SWITCH SF_ON #define DEFAULT_DATE_TIME SF_DATE_TIME_DDMMYY #define DEFAULT_SEND_PHOTO_SWITCH SF_ON #define DEFAULT_SEND_VIDEO_SWITCH SF_OFF 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 2568acedf..7e3ab7d96 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c @@ -43,6 +43,7 @@ //---------------------UIInfo Global Variables ----------------------------- UIMenuStoreInfo currentInfo = {0}; //#NT#Init the array to zero. UIMenuStoreInfo origInfo = {0}; /* backup */ +UIMenuStoreInfo origInfo_check = {0}; /* backup */ BOOL bSysReady = 0; BOOL bAutoSystemReset = FALSE; @@ -509,7 +510,7 @@ void Load_MenuInfo(void) } #endif #if HUNTING_CAMERA_MCU == ENABLE - sf_share_mem_customer_down(0); + //sf_share_mem_customer_down(0); #endif return; } @@ -702,7 +703,7 @@ EXIT: SysResetFlag(); currentInfo.uhInfoSize = sizeof(currentInfo); #if HUNTING_CAMERA_MCU == ENABLE - sf_share_mem_customer_down(0); + //sf_share_mem_customer_down(0); #endif } @@ -721,11 +722,12 @@ EXIT: currentInfo.uhInfoSize = sizeof(currentInfo); #if HUNTING_CAMERA_MCU == ENABLE - sf_share_mem_customer_down(0); + //sf_share_mem_customer_down(0); #endif } SysCheckFlag(); origInfo = currentInfo; + origInfo_check = currentInfo; if(sys_mtd_fp){ fclose(sys_mtd_fp); @@ -1088,7 +1090,7 @@ EXIT: sum); #if HUNTING_CAMERA_MCU == ENABLE - sf_share_mem_customer_down(0); + //sf_share_mem_customer_down(0); #endif } else{ @@ -2245,3 +2247,20 @@ UIMenuStoreInfo* sf_ui_para_get(void) return (UIMenuStoreInfo*)¤tInfo; } +/************************************************* + Function: sf_get_para_check_flag + Description: + Input: N/A + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +BOOL sf_get_cardv_para_check_flag(void) +{ + if(memcmp(¤tInfo, &origInfo_check, sizeof(currentInfo)) == 0){ + return FALSE; + } + origInfo_check = currentInfo; + + return TRUE; +} \ No newline at end of file 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 6859be94e..b15dd1068 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h @@ -778,6 +778,7 @@ enum _PHOTO_SIZE { #if PHOTO_PREVIEW_SLICE_ENC_FUNC PHOTO_SIZE_40M, #endif + PHOTO_SIZE_32M, PHOTO_SIZE_24M, PHOTO_SIZE_16M, PHOTO_SIZE_12M, @@ -2037,5 +2038,5 @@ extern void UI_SetInitVolume(UINT32 volumeIndex); extern void UI_SaveRTCDate(void); extern void UI_SetFileDBFileID(void); extern UIMenuStoreInfo* sf_ui_para_get(void); - +extern BOOL sf_get_cardv_para_check_flag(void); #endif //_UIINFO_H_ 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 a9ee5dadc..d4bd3636a 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c @@ -32,6 +32,7 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = { #if PHOTO_PREVIEW_SLICE_ENC_FUNC || POWERON_FAST_SLICE_ENC {7552, 4248, IMAGERATIO_4_3, "40M"}, /* 40M */ #endif + {6528, 4896, IMAGERATIO_4_3, "32M"}, /* 32M */ {5632, 4224, IMAGERATIO_4_3, "24M"}, //16M {4608, 3456, IMAGERATIO_4_3, "16M"}, //16M {4032, 3024, IMAGERATIO_4_3, "12M"}, //12M @@ -90,12 +91,22 @@ UINT32 GetPhotoSizeRatio(UINT32 ubIndex) UINT32 sf_get_screen_nail_width(UINT32 ubIndex) { - return g_ScreenNailSizeTable[sf_get_send_pic_sieze()].uiWidth; + if(ubIndex == SCREEN_PHOTO_SIZE_2_76M){ + return g_ScreenNailSizeTable[ubIndex].uiWidth; + } + else{ + return g_ScreenNailSizeTable[sf_get_send_pic_sieze()].uiWidth; + } } UINT32 sf_get_screen_nail_height(UINT32 ubIndex) { - return g_ScreenNailSizeTable[sf_get_send_pic_sieze()].uiHeight; + if(ubIndex == SCREEN_PHOTO_SIZE_2_76M){ + return g_ScreenNailSizeTable[ubIndex].uiHeight; + } + else{ + return g_ScreenNailSizeTable[sf_get_send_pic_sieze()].uiHeight; + } } UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex) diff --git a/code/application/source/sf_app/Makefile b/code/application/source/sf_app/Makefile index f41efb567..20ed5377e 100644 --- a/code/application/source/sf_app/Makefile +++ b/code/application/source/sf_app/Makefile @@ -245,6 +245,7 @@ SRC = \ ./code/source/4gMng/sf_opera_adapt.c \ ./code/source/4gMng/sf_ftp.c \ ./code/source/4gMng/sf_sms.c \ + ./code/source/4gMng/sf_4G_auto_operation.c \ ./code/source/dataMng/sf_dataMng.c \ ./code/source/dataMng/sf_transdata1.c \ ./code/source/dataMng/sf_datahttp.c \ @@ -259,7 +260,8 @@ SRC = \ ./code/source/utils/sf_aes.c \ ./code/source/debugMng/sf_debug.c \ ./code/source/updataMng/sf_md5.c \ - ./code/source/updataMng/sf_otamng.c + ./code/source/updataMng/sf_otamng.c \ + ./code/source/battery/sf_battery.c # ./code/source/wifi/sf_data_transfer.c \ # ./code/source/wifi/sf_svr_send.c \ diff --git a/code/lib/source/sifar/code/include/sf_battery.h b/code/application/source/sf_app/code/include/sf_battery.h similarity index 84% rename from code/lib/source/sifar/code/include/sf_battery.h rename to code/application/source/sf_app/code/include/sf_battery.h index 6ae17aa64..0fc439b03 100644 --- a/code/lib/source/sifar/code/include/sf_battery.h +++ b/code/application/source/sf_app/code/include/sf_battery.h @@ -1,8 +1,8 @@ #ifndef _SF_BATTERY_H #define _SF_BATTERY_H -#include -//#include + +#include //typedef signed int SINT32; @@ -21,15 +21,15 @@ void sf_battery_level_update(void); BOOL sf_check_low_battery(void); signed int sf_battery_adc_value_get(void); void sf_battery_level_polling(void); -THREAD_RETTYPE sf_battery_check_thread(void *arg); +void* sf_battery_check_thread(void *arg); 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); UINT8 sf_battery_type_get(void); BOOL sf_battery_check_init(void); - +void sf_set_need_check_first(void); +BOOL sf_is_enough_power_to_update(void); +void sf_adc_init(void); #endif 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 edcf4f611..2a3a9f0ce 100644 --- a/code/application/source/sf_app/code/include/sf_commMng.h +++ b/code/application/source/sf_app/code/include/sf_commMng.h @@ -28,7 +28,8 @@ SINT32 sf_share_mem_customer_down(UINT32 to); SINT32 sf_share_mem_customer_deinit(void); - +SINT32 sf_share_mem_hd_update(void); +SINT32 sf_share_mem_hd_down(UINT32 to); #ifdef __cplusplus diff --git a/code/application/source/sf_app/code/include/sf_common.h b/code/application/source/sf_app/code/include/sf_common.h index f8afb7548..dba807694 100644 --- a/code/application/source/sf_app/code/include/sf_common.h +++ b/code/application/source/sf_app/code/include/sf_common.h @@ -6,7 +6,7 @@ extern "C" { #endif #endif - +#include #define IS_RELEASE 1 #if IS_RELEASE @@ -76,7 +76,11 @@ extern "C" { #define SF_STRTOLL(a, b, c) strtoll((char *)a, (char **)b, c) void app_message_recv_start(void); - +UINT8 sf_get_module_update(void); +void sf_set_module_update(UINT8 flag); +UINT8 sf_get_fw_update(void); +void sf_set_fw_update(UINT8 flag); +UINT8 sf_app_get_night_led_flag(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_commu_mcu.h b/code/application/source/sf_app/code/include/sf_commu_mcu.h index 3b1467c75..a2e868de7 100644 --- a/code/application/source/sf_app/code/include/sf_commu_mcu.h +++ b/code/application/source/sf_app/code/include/sf_commu_mcu.h @@ -27,13 +27,27 @@ extern "C"{ #include #define SERIAL_DEVICE_PATH "/dev/ttyS2" -#define BUF_REG_SIZE (REG_SIZE*2+8) +#define BUF_REG_SIZE 256//(REG_SIZE*2+8) typedef struct { unsigned char buf[BUF_REG_SIZE]; unsigned int index; }SMAPBUF_t; - +typedef enum MCU_FLAG_INIT { + MCU_FLAG_INITT_SYSTEM = 0x00, + MCU_FLAG_INIT_SENSOR = 0x01, + MCU_FLAG_INIT_CAPTURE = 0x02, + MCU_FLAG_INIT_DISPLAY = 0x03, + MCU_FLAG_INIT_STORAGE = 0x04, + MCU_FLAG_INIT_FILESYSOK = 0x05, + MCU_FLAG_INIT_FILENAMINGOK, + MCU_FLAG_INIT_MEIDA_ENCODER, + MCU_FLAG_INIT_MEIDA_DECODER, + MCU_FLAG_INIT_BOOTLOGO, + MCU_FLAG_INIT_OTHERS, + MCU_FLAG_GET, + MCU_FLAG_INIT_MAX_CNT = 32, //flag max bit cnt is 32 +} MCU_FLAG_INIT; void mcubuf_reset(void); int sf_commu_mcu_interface_init(int speed, char flow_ctrl, int databits, int stopbits, char parity); @@ -60,6 +74,11 @@ int sf_set_mcu_reg_many(unsigned char reg[], unsigned char val[], unsigned int n int sf_get_mcu_reg_many(unsigned char reg[], unsigned int num); int sf_commu_set_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num); int sf_commu_get_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num); +void sf_mcu_flag_init(void); +void sf_mcu_flag_set_done(MCU_FLAG_INIT boot_init); +void sf_mcu_flag_wait_done(MCU_FLAG_INIT boot_init); +int sf_mcu_flag_wait_done_timeout(MCU_FLAG_INIT boot_init, int timeout_ms); +void sf_mcu_flag_clear_done(MCU_FLAG_INIT boot_init); #ifdef __cplusplus } 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 ead00c67f..816d06ccc 100644 --- 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 @@ -371,10 +371,6 @@ UINT8 sf_get_power_off_flag(void); void sf_set_power_off_flag(UINT8 flag); void sf_set_mcu_rtc_flag(UINT8 value); void sf_set_sms_number(UINT32 num); -UINT8 sf_get_module_update(void); -void sf_set_module_update(UINT8 flag); -UINT8 sf_get_fw_update(void); -void sf_set_fw_update(UINT8 flag); void sf_set_gprs_errno(SINT32 value); SINT32 sf_get_gprs_errno(void); BOOL sf_get_signal_ready_flag(void); diff --git a/code/application/source/sf_app/code/include/sf_eg91_sim.h b/code/application/source/sf_app/code/include/sf_eg91_sim.h index b3f3a0f18..255ce8fb3 100644 --- a/code/application/source/sf_app/code/include/sf_eg91_sim.h +++ b/code/application/source/sf_app/code/include/sf_eg91_sim.h @@ -232,6 +232,25 @@ typedef enum SF_SIM }SF_SIM_E; +typedef enum SIM_ERR_CODE_s{ + SIM_NO_SIGNAL, + SIM_NO_SIMCARD, + SIM_SUCCEED, + SIM_COM_ERROR, + SIM_BAUD_ERROR, + SIM_INIT_ERROR, + SIM_NETWORK_ERROR, + SIM_NO_MCC, + SIM_CONNECET_SERVER_ERROR, + SIM_MEGA_ERROR, + SIM_TO_BUSINESS_SIM_ERROR, + SIM_AT_ERROR, + SIM_INFO_ERROR, + SIM_UNKNOW_ERROR, + SIM_TYPE_ERROR, + SIM_FAILED, +}SIM_ERR_CODE; + SINT32 eg91_iccid_get(SF_CHAR *iccid,SF_FN_PARAM_S *pfnParam); SINT32 eg91_qsclk_set(SF_FN_PARAM_S *pfnParam); @@ -268,6 +287,14 @@ void sf_4g_module_sleep(void); SINT32 sf_4g_set_module_minimun_fun(void); +void sf_gprs_wait_network_scan_finish(UINT8 refresh); + +SINT32 sf_add_cimi_id(char *cimi); + +SINT32 sf_module_complete_init(void); +SINT32 sf_net_regist_manual(void); + +SINT32 sf_auto_net_reg(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_file.h b/code/application/source/sf_app/code/include/sf_file.h index 8dc15dcad..2cef2ad25 100644 --- a/code/application/source/sf_app/code/include/sf_file.h +++ b/code/application/source/sf_app/code/include/sf_file.h @@ -29,13 +29,17 @@ UINT8 sf_app_get_battery(void); void sf_custom_send_str_get(UINT8 *sendName, UINT8 *pStr); -BOOL sf_is_enough_power_to_update(void); +//BOOL sf_is_enough_power_to_update(void); BOOL sf_is_4g_module_usb_update_file_exist(UINT8 *updateFname); void sf_set_del_flag(BOOL flag); BOOL sf_get_del_flag(void); +UINT32 sf_get_file_size(UINT8 * fname); +UINT8 sf_get_send_file_list(char *sendfileList, UINT8 *fileTotal); +BOOL sf_check_auto_thumb_file(VOID); +UINT8 sf_get_send_file_total(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_fileMng.h b/code/application/source/sf_app/code/include/sf_fileMng.h index e1964aa58..bef5db8ca 100644 --- a/code/application/source/sf_app/code/include/sf_fileMng.h +++ b/code/application/source/sf_app/code/include/sf_fileMng.h @@ -76,9 +76,10 @@ void sf_file_thumb_cfg_clear(void); SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void); SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize); -BOOL sf_check_auto_thumb_file(VOID); -UINT8 sf_get_send_file_list(char *sendfileList, UINT8 *fileTotal); -UINT8 sf_get_send_file_total(void); +SF_HDFILE_ATTR_S* sf_file_hd_cfg_get(void); +void sf_file_hd_cfg_set_down(SF_HDFILE_ATTR_S *pSfHdPara); +void sf_hd_param_set(SF_HDFILE_ATTR_S *pSfHdPara); +SF_HDFILE_ATTR_S* sf_file_video_cfg_get(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_ftp.h b/code/application/source/sf_app/code/include/sf_ftp.h index a046de45c..c656180ee 100644 --- a/code/application/source/sf_app/code/include/sf_ftp.h +++ b/code/application/source/sf_app/code/include/sf_ftp.h @@ -208,12 +208,15 @@ SINT32 sf_ftp_stop(UINT8 ssl, UINT8 GprsMode); SINT32 sf_pic_send_ftp(void); SINT32 sf_txt_send_ftp(void); SINT32 sf_video_send_ftp(void); -SINT32 sf_simcom_ftp_dailyreport_send(void); +SINT32 sf_ftp_dailyreport_send(void); SINT32 sf_check_ftp_send(UINT8 mode); -SINT32 sf_simcom_ftp_send(UINT8 mode); +SINT32 sf_send_file_to_ftp(UINT8 mode); SINT32 sf_4g_module_ota_ftp(void); -UINT32 sf_connect_ftps_server(void); +SINT32 sf_connect_ftps_server(void); UINT32 sf_camera_ota_ftp(void); SINT32 sf_concentrated_ftp_send(void); +SINT32 sf_hd_ftp_send(void); +SINT32 sf_video_ftp_send(void); +SINT32 sf_get_ftp_open_flag(void); #endif /*_SF_FTP_H_*/ diff --git a/code/lib/source/sifar/code/include/sf_gps.h b/code/application/source/sf_app/code/include/sf_gps.h similarity index 100% rename from code/lib/source/sifar/code/include/sf_gps.h rename to code/application/source/sf_app/code/include/sf_gps.h diff --git a/code/application/source/sf_app/code/include/sf_hal_gpio.h b/code/application/source/sf_app/code/include/sf_hal_gpio.h index a8d9f5d05..6e2c45585 100644 --- a/code/application/source/sf_app/code/include/sf_hal_gpio.h +++ b/code/application/source/sf_app/code/include/sf_hal_gpio.h @@ -24,6 +24,9 @@ SINT32 sf_hal_gpio_deinit(U32 gpioNum); void sf_usb_mux_s(UINT32 cnt); +int sf_app_pir_statu_read(void); + +UINT32 sf_app_data_ready_read(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/lib/source/sifar/code/include/sf_http.h b/code/application/source/sf_app/code/include/sf_http.h similarity index 100% rename from code/lib/source/sifar/code/include/sf_http.h rename to code/application/source/sf_app/code/include/sf_http.h diff --git a/code/application/source/sf_app/code/include/sf_log.h b/code/application/source/sf_app/code/include/sf_log.h index 81b3e5892..2f0a21ac9 100644 --- a/code/application/source/sf_app/code/include/sf_log.h +++ b/code/application/source/sf_app/code/include/sf_log.h @@ -41,7 +41,7 @@ extern "C" { #define WARNING_FILE_PATH SF_SD_ROOT"warning.txt" #define INFO_FILE_PATH SF_SD_ROOT"info.txt" -#define SF_ENCRYPTION_ENBLE 1 +#define SF_ENCRYPTION_ENBLE 0 typedef enum SF_LOG_LEVEL_E { diff --git a/code/application/source/sf_app/code/include/sf_module.h b/code/application/source/sf_app/code/include/sf_module.h index 558e51e18..b74de8b2f 100644 --- a/code/application/source/sf_app/code/include/sf_module.h +++ b/code/application/source/sf_app/code/include/sf_module.h @@ -117,7 +117,7 @@ SINT32 sf_4G_acm_tcp_server_close(SF_FN_PARAM_S *pfnParam); SINT32 sf_4G_other_sim_apn_cfg(SF_FN_PARAM_S *pfnParam); - +UINT32 sf_auto_operation_adjust(void); #ifdef __cplusplus #if __cplusplus diff --git a/code/application/source/sf_app/code/include/sf_opera_adapt.h b/code/application/source/sf_app/code/include/sf_opera_adapt.h index 393267306..ebe3797c8 100644 --- a/code/application/source/sf_app/code/include/sf_opera_adapt.h +++ b/code/application/source/sf_app/code/include/sf_opera_adapt.h @@ -28,7 +28,7 @@ extern "C" { #include "sf_param_common.h" #include "sf_module.h" -UINT16 sf_auto_operation_adaptation(SF_CHAR *operatorName, UIMenuStoreInfo *sim_info_t); +SINT32 sf_auto_operation_adaptation(SF_CHAR *operatorName, UIMenuStoreInfo *sim_info_t); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_param_common.h b/code/application/source/sf_app/code/include/sf_param_common.h index db31da2ab..00ad6885c 100644 --- a/code/application/source/sf_app/code/include/sf_param_common.h +++ b/code/application/source/sf_app/code/include/sf_param_common.h @@ -61,6 +61,7 @@ void sf_customer_param_set_down(UIMenuStoreInfo *pSfCustomerPara); UINT8 sf_signal_level_get(UINT8 netFlagG, UINT8 cqSignal); +BOOL sf_get_para_check_flag(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_param_enum.h b/code/application/source/sf_app/code/include/sf_param_enum.h index 4bbc53452..3c67f7692 100644 --- a/code/application/source/sf_app/code/include/sf_param_enum.h +++ b/code/application/source/sf_app/code/include/sf_param_enum.h @@ -474,8 +474,11 @@ typedef enum sf_PARA_MESSAGE_TYPE_E SF_PARA_CMD_UPDATE = 0x1A00, SF_PARA_CMD_DOMN = 0x1B00, SF_PARA_CMD_RESET = 0x1C00, - - + SF_PARA_CMD_FWUP = 0x1D00, + SF_PARA_CMD_MOUP = 0x1E00, + SF_PARA_CMD_NET_STATUS = 0x1F00, + SF_PARA_CMD_IR_LED_STATUS = 0x1F01, + SF_PARA_CMD_BATTERY_LEVEL = 0x1F02, }SF_PARA_MESSAGE_TYPE_E; typedef enum sf_WIFI_MESSAGE_TYPE_E @@ -484,6 +487,7 @@ typedef enum sf_WIFI_MESSAGE_TYPE_E SF_WIFI_CMD_STOP = 0x1B00, SF_WIFI_CMD_RESTART = 0x1C00, SF_WIFI_CMD_CAPTURE = 0x1D00, + SF_WIFI_CMD_HD_TURE = 0x1E00, }SF_WIFI_MESSAGE_TYPE_E; diff --git a/code/application/source/sf_app/code/include/sf_param_struct.h b/code/application/source/sf_app/code/include/sf_param_struct.h index ade933a9c..8f4b3c971 100644 --- a/code/application/source/sf_app/code/include/sf_param_struct.h +++ b/code/application/source/sf_app/code/include/sf_param_struct.h @@ -296,6 +296,16 @@ typedef struct sf_SRCFILE_ATTR_S { UINT8 filecnt; SF_FILE_ATTR_S stfileattr[SF_SRCFILE_MAX]; }SF_SRCFILE_ATTR_S; + +typedef struct HDImgList +{ + UINT16 dirKey; + UINT16 fileKey; +} HDImgList_t; +typedef struct sf_HDFILE_ATTR_S { + UINT8 filecnt; + HDImgList_t stfileattr[51]; +}SF_HDFILE_ATTR_S; typedef struct sf_REPORT_FILE_ATTR_S { UINT8 filecnt; SF_SEND_FILE_ATTR_S stSendFileAttr[100]; diff --git a/code/lib/source/sifar/code/include/sf_pc_tool.h b/code/application/source/sf_app/code/include/sf_pc_tool.h similarity index 100% rename from code/lib/source/sifar/code/include/sf_pc_tool.h rename to code/application/source/sf_app/code/include/sf_pc_tool.h diff --git a/code/application/source/sf_app/code/include/sf_service.h b/code/application/source/sf_app/code/include/sf_service.h index 39f801b7a..174eb1838 100644 --- a/code/application/source/sf_app/code/include/sf_service.h +++ b/code/application/source/sf_app/code/include/sf_service.h @@ -51,6 +51,7 @@ void app_FileSend_start(void); SINT32 app_t110(void); SINT32 sf_app_to_cardv_capture(void); SINT32 sf_module_reboot_reg_net(void); +SINT32 sf_app_to_cardv_hd_ture(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/lib/source/sifar/code/include/sf_sim.h b/code/application/source/sf_app/code/include/sf_sim.h similarity index 99% rename from code/lib/source/sifar/code/include/sf_sim.h rename to code/application/source/sf_app/code/include/sf_sim.h index a3fc116e9..de6780de4 100644 --- a/code/lib/source/sifar/code/include/sf_sim.h +++ b/code/application/source/sf_app/code/include/sf_sim.h @@ -10,7 +10,7 @@ extern "C" { #if 0 #include -#define sf_4g_send_data sf_hal_ttyusb2_write +#define sf_hal_ttyusb2_write sf_hal_ttyusb2_write #define sf_4g_get_data sf_hal_ttyusb2_read #define SF_NTP_SITE1 "time.windows.com" diff --git a/code/application/source/sf_app/code/include/sf_sms.h b/code/application/source/sf_app/code/include/sf_sms.h index 171360d75..62ce721e1 100644 --- a/code/application/source/sf_app/code/include/sf_sms.h +++ b/code/application/source/sf_app/code/include/sf_sms.h @@ -260,5 +260,9 @@ SINT32 sf_power_off_check_module_sleep(void); SINT32 sf_power_off_check_camera_restart(void); SINT32 sf_power_off_check_ui_para_sava(void); UINT8 sf_sms_check_send(void); +UINT8 sf_get_send_hd(void); +UINT8 sf_get_send_video(void); +UINT8 sf_set_send_hd(UINT8 value); +UINT8 sf_set_send_video(UINT8 value); #endif /*_SF_SMS_H_*/ diff --git a/code/application/source/sf_app/code/include/sf_system.h b/code/application/source/sf_app/code/include/sf_system.h index 49b7d0a16..e2d8b0694 100644 --- a/code/application/source/sf_app/code/include/sf_system.h +++ b/code/application/source/sf_app/code/include/sf_system.h @@ -50,6 +50,11 @@ UINT8 *sf_versionGet(UINT8 ver[],UINT8 fea[]); void sf_power_off(void); +SINT32 sf_app_para_check_start(void); +SINT32 sf_app_para_check_stop(void); +SINT32 sf_app_battery_start(void); +SINT32 sf_app_battery_stop(void); +SINT32 sf_app_data_ready_start(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/lib/source/sifar/code/include/sf_tcp.h b/code/application/source/sf_app/code/include/sf_tcp.h similarity index 100% rename from code/lib/source/sifar/code/include/sf_tcp.h rename to code/application/source/sf_app/code/include/sf_tcp.h diff --git a/code/application/source/sf_app/code/source/4gMng/sf_4G_auto_operation.c b/code/application/source/sf_app/code/source/4gMng/sf_4G_auto_operation.c index 4e8f0ec8c..21773354f 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_4G_auto_operation.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_4G_auto_operation.c @@ -21,1449 +21,1386 @@ #include #include -#include - +#include +#include "sf_common.h" #include "UIInfo/UIInfo.h" +#include "sf_type.h" UINT8 simAutoMatchFlag = SUCCESS; /*0:match success; 1:match fail;*/ UINT32 sf_auto_operation_adjust(void) { UINT32 result = SUCCESS; - UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + + //sifarParameter_t* puiPara = appuiParaGet(); printf("Auto_Operation_Adjust NEW, Name:%s\n", puiPara->OperatorCode); - - //puiPara->SimAutoSwitch = MENU_ON; - if((strncmp((const char *)puiPara->OperatorCode, "46001", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "46010", 5) == 0)) //china union + //puiPara->SimAutoMatch = MENU_ON; + if(SF_STRNCMP(puiPara->OperatorCode, "46001", 5) == 0) //china union { //SMTP SET - strcpy((char *)puiPara->Sim4gApn, "3gnet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); + SF_STRCPY(puiPara->Sim4gApn, "3gnet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); //MMS SET - strcpy((char *)puiPara->MmsApn, "3gwap"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.myuni.com.cn"); - strcpy((char *)puiPara->MmsProxy, "10.0.0.172"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "46003", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "46005", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "46011", 5) == 0)) //China Telecom - { - strcpy((char *)puiPara->Sim4gApn, "CTNET"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "CTWAP"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.vnet.mobi"); - strcpy((char *)puiPara->MmsProxy, "10.0.0.200"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21601", 5) == 0) //Hungary Pannon - { - strcpy((char *)puiPara->Sim4gApn, "net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.pgsm.hu"); - strcpy((char *)puiPara->MmsProxy, "193.225.154.22"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21630", 5) == 0) //Hungary T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "wap"); - strcpy((char *)puiPara->Sim4gPwd, "wap"); - - strcpy((char *)puiPara->MmsApn, "mms-westel"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.westel900.net/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "212.51.126.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21670", 5) == 0) //Hungary Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.vodafone.net"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.vodafone.hu/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "80.244.97.2"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "31000", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31001", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31059", 5) == 0) - || (strncmp((const char *)puiPara->OperatorCode, "31089", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31091", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31111", 5) == 0) - || (strncmp((const char *)puiPara->OperatorCode, "31127", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31128", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31139", 5) == 0) - || (strncmp((const char *)puiPara->OperatorCode, "31148", 5) == 0)) //Vierzon - { - strcpy((char *)puiPara->Sim4gApn, "VZWINTERNET"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "31158", 5) == 0) //US celluar - { - strcpy((char *)puiPara->Sim4gApn, "uscc00000.enterprise0.usc-cdp"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "46000", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "46002", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "46007", 5) == 0))//china union - { - strcpy((char *)puiPara->Sim4gApn, "CMNET"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "CMWAP"); - strcpy((char *)puiPara->MmsMmsc, "mmsc.monternet.com"); - strcpy((char *)puiPara->MmsProxy, "10.0.0.172"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "50501", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "50511", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "50571", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "50572", 5) == 0))//australia telstra - { - strcpy((char *)puiPara->Sim4gApn, "telstra.internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "telstra.mms"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.telstra.com:8002"); - strcpy((char *)puiPara->MmsProxy, "10.1.1.180"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21910", 5) == 0) //Croatia VIPnet - { - strcpy((char *)puiPara->Sim4gApn, "data.vip.hr"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.vipnet.hr"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.vipnet.hr/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "212.91.99.91"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21901", 5) == 0) //Croatia T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "internet.ht.hr"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.htgprs"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.t-mobile.hr/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "10.12.0.4"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21902", 5) == 0) // Croatia Tele2 - { - strcpy((char *)puiPara->Sim4gApn, "internet.tele2.hr"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "internet.tele2.hr"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tele2.hr"); - strcpy((char *)puiPara->MmsProxy, "193.12.40.66"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "23820", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "23830", 5) == 0))//Danmark Telia - { - strcpy((char *)puiPara->Sim4gApn, "www.internet.mtelia.dk"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "www.mms.mtelia.dk"); - strcpy((char *)puiPara->MmsApn, "www.mms.mtelia.dk"); - strcpy((char *)puiPara->MmsProxy, "139.209.134.131"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23801", 5) == 0) //TDC - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://192.168.241.114:8002"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "194.182.251.15"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23802", 5) == 0) //Telenor - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.telenor.dk"); - strcpy((char *)puiPara->MmsApn, "internet"); - strcpy((char *)puiPara->MmsProxy, "212.88.64.8"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23806", 5) == 0) //Oister - { - strcpy((char *)puiPara->Sim4gApn, "Data.dk"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.oister.dk"); - strcpy((char *)puiPara->MmsApn, "mmssp"); - strcpy((char *)puiPara->MmsProxy, "172.16.53.12"); - strcpy((char *)puiPara->MmsPort, "8799"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - - else if(strncmp((const char *)puiPara->OperatorCode, "24603", 5) == 0)//Lithuania Tele 2 - { - strcpy((char *)puiPara->Sim4gApn, "internet.tele2.lt"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.tele2.lt"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tele2.lt"); - strcpy((char *)puiPara->MmsProxy, "193.12.40.29"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24602", 5) == 0)//Lithuania BITE - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.150.2"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms@mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24601", 5) == 0)//Lithuania Omnitel - { - strcpy((char *)puiPara->Sim4gApn, "omnitel"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "gprs.mms.lt"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.omnitel.net:8002/"); - strcpy((char *)puiPara->MmsProxy, "194.176.32.149"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "53001", 5) == 0)//New Zealand Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "vodafone"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "live.vodafone.com"); - strcpy((char *)puiPara->MmsMmsc, "http://pxt.vodafone.net.nz/pxtsend"); - strcpy((char *)puiPara->MmsProxy, "172.30.38.3"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "53024", 5) == 0)//New Zealand Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.2degreesmobile.net.nz:48090"); - strcpy((char *)puiPara->MmsProxy, "118.148.1.118"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22610", 5) == 0)// Romania Orange - { - strcpy((char *)puiPara->Sim4gApn, "net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "http://wap.mms.orange.ro:8002"); - strcpy((char *)puiPara->MmsProxy, "62.217.247.252"); - strcpy((char *)puiPara->MmsPort, "8799"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22601", 5) == 0)// Romania Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "live.vodafone.com"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22603", 5) == 0)// Romania Romtelecom - { - strcpy((char *)puiPara->Sim4gApn, "broadband"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22605", 5) == 0)// Romania DIGI.mobil - { - strcpy((char *)puiPara->Sim4gApn, "prepaid"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "25028", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "25099", 5) == 0))// Russian Federation Beeline - { - strcpy((char *)puiPara->Sim4gApn, "internet.beeline.ru"); - strcpy((char *)puiPara->Sim4gUsr, "beeline"); - strcpy((char *)puiPara->Sim4gPwd, "beeline"); - - strcpy((char *)puiPara->MmsApn, "mms.beeline.ru"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc/"); - strcpy((char *)puiPara->MmsProxy, "192.168.94.23"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "beeline"); - strcpy((char *)puiPara->MmsPwd, "beeline"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25001", 5) == 0)// Russian Federation MTS - { - strcpy((char *)puiPara->Sim4gApn, "internet.mts.ru"); - strcpy((char *)puiPara->Sim4gUsr, "mts"); - strcpy((char *)puiPara->Sim4gPwd, "mts"); - - strcpy((char *)puiPara->MmsApn, "mms.mts.ru"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc"); - strcpy((char *)puiPara->MmsProxy, "192.168.192.192"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mts"); - strcpy((char *)puiPara->MmsPwd, "mts"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25002", 5) == 0)// Russian Federation MegaFon - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "gdata"); - strcpy((char *)puiPara->Sim4gPwd, "gdata"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc:8002"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "gdata"); - strcpy((char *)puiPara->MmsPwd, "gdata"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25020", 5) == 0)// Russian Federation Tele2 - { - strcpy((char *)puiPara->Sim4gApn, "internet.tele2.ru"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.tele2.ru"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tele2.ru"); - strcpy((char *)puiPara->MmsProxy, "193.12.40.65"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25011", 5) == 0)// Russian Federation Yota - { - strcpy((char *)puiPara->Sim4gApn, "internet.yota"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.yota"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc:8002"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25035", 5) == 0)// Russian Federation Motiv - { - strcpy((char *)puiPara->Sim4gApn, "inet.ycc.ru"); - strcpy((char *)puiPara->Sim4gUsr, "motiv"); - strcpy((char *)puiPara->Sim4gPwd, "motiv"); - - strcpy((char *)puiPara->MmsApn, "mms.ycc.ru"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.ycc.ru"); - strcpy((char *)puiPara->MmsProxy, "172.16.2.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "motiv"); - strcpy((char *)puiPara->MmsPwd, "motiv"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24007", 5) == 0)//Sweden Tele2 COMVIQ - { - strcpy((char *)puiPara->Sim4gApn, "4G.tele2.se"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tele2.se"); - strcpy((char *)puiPara->MmsApn, "4G.tele2.se"); - strcpy((char *)puiPara->MmsProxy, "130.244.202.30"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24001", 5) == 0)//Sweden TeliaSonera Mobile - { - strcpy((char *)puiPara->Sim4gApn, "online.telia.se"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmss"); - strcpy((char *)puiPara->MmsApn, "mms.telia.se"); - strcpy((char *)puiPara->MmsProxy, "193.209.134.132"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "telia"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "24006", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "24008", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "24024", 5) == 0))//Sweden Telenor Mobile Sverige - { - strcpy((char *)puiPara->Sim4gApn, "services.telenor.se"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms"); - strcpy((char *)puiPara->MmsApn, "services.telenor.se"); - strcpy((char *)puiPara->MmsProxy, "172.30.253.241"); - strcpy((char *)puiPara->MmsPort, "8799"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "23433", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "23434", 5) == 0))// United Kingdom Orange - { - strcpy((char *)puiPara->Sim4gApn, "orangeinternet"); - strcpy((char *)puiPara->Sim4gUsr, "user"); - strcpy((char *)puiPara->Sim4gPwd, "pass"); - - strcpy((char *)puiPara->MmsApn, "orangemms"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.orange.co.uk/"); - strcpy((char *)puiPara->MmsProxy, "192.168.224.10"); - strcpy((char *)puiPara->MmsPort, "9201"); - strcpy((char *)puiPara->MmsUsr, "Orange"); - strcpy((char *)puiPara->MmsPwd, "Multimedia"); - } - - else if((strncmp((const char *)puiPara->OperatorCode, "23402", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "23410", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "23411", 5) == 0))// United Kingdom O2 - { - strcpy((char *)puiPara->Sim4gApn, "mobile.o2.co.uk"); - strcpy((char *)puiPara->Sim4gUsr, "web"); - strcpy((char *)puiPara->Sim4gPwd, "password"); - - strcpy((char *)puiPara->MmsApn, "payandgo.o2.co.uk"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.mms.o2.co.uk:8002"); - strcpy((char *)puiPara->MmsProxy, "193.113.200.195"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "payandgo"); - strcpy((char *)puiPara->MmsPwd, "password"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23415", 5) == 0)//United Kingdom Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "pp.vodafone.co.uk"); - strcpy((char *)puiPara->Sim4gUsr, "web"); - strcpy((char *)puiPara->Sim4gPwd, "web"); - - strcpy((char *)puiPara->MmsApn, "wap.vodafone.co.uk"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.vodafone.co.uk/servlets/mms/"); - strcpy((char *)puiPara->MmsProxy, "212.183.137.12"); - strcpy((char *)puiPara->MmsPort, "9201"); - strcpy((char *)puiPara->MmsUsr, "wap"); - strcpy((char *)puiPara->MmsPwd, "wap"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23430", 5) == 0)//United Kingdom T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "general.t-mobile.uk"); - strcpy((char *)puiPara->Sim4gUsr, "user"); - strcpy((char *)puiPara->Sim4gPwd, "wap"); - - strcpy((char *)puiPara->MmsApn, "general.t-mobile.uk"); - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.t-mobile.co.uk:8002/"); - strcpy((char *)puiPara->MmsProxy, "149.254.211.10"); - strcpy((char *)puiPara->MmsPort, "9201"); - strcpy((char *)puiPara->MmsUsr, "user"); - strcpy((char *)puiPara->MmsPwd, "one2one"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23420", 5) == 0)//United Kingdom 3 - { - strcpy((char *)puiPara->Sim4gApn, "three.co.uk"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.three.co.uk"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.um.three.co.uk:10021/mmsc"); - strcpy((char *)puiPara->MmsProxy, "217.171.129.2"); - strcpy((char *)puiPara->MmsPort, "8799"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "24403", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "24412", 5) == 0))// Finland DNA - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.dnafinland.fi"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "10.1.1.2"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24421", 5) == 0)// Finland Saunalahti - { - strcpy((char *)puiPara->Sim4gApn, "internet.saunalahti"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.saunalahti.fi:8002/"); - strcpy((char *)puiPara->MmsApn, "mms.saunalahti.fi"); - strcpy((char *)puiPara->MmsProxy, "62.142.4.197"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24405", 5) == 0)// Finland Elisa - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.elisa.fi"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "213.161.41.57"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24491", 5) == 0)// Finland Sonera - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.sonera.net:8002/"); - strcpy((char *)puiPara->MmsApn, "wap.sonera.net"); - strcpy((char *)puiPara->MmsProxy, "195.156.25.33"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24410", 5) == 0)// Finland TDC - { - strcpy((char *)puiPara->Sim4gApn, "inet.tdc.fi"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tdc.fi"); - strcpy((char *)puiPara->MmsApn, "mms.tdc.fi"); - strcpy((char *)puiPara->MmsProxy, "10.1.12.2"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "65507", 5) == 0)// South Africa Cell C - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.cmobile.co.za/"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "196.31.116.250"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "65510", 5) == 0)// South Africa MTN - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "guest"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.mtn.co.za/mms/wapenc"); - strcpy((char *)puiPara->MmsApn, "mymtn"); - strcpy((char *)puiPara->MmsProxy, "196.11.240.241"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "65501", 5) == 0)// South Africa Vodacom - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "guest"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.vodacom4me.co.za/"); - strcpy((char *)puiPara->MmsApn, "mms.vodacom.net"); - strcpy((char *)puiPara->MmsProxy, "196.6.128.13"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "65502", 5) == 0)// South Africa 8ta - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "guest"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - strcpy((char *)puiPara->MmsMmsc, "http://mms.8ta.com:38090/was"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "41.151.254.162"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "guest"); - strcpy((char *)puiPara->MmsPwd, "guest"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22201", 5) == 0)// Italy TIM - { - strcpy((char *)puiPara->Sim4gApn, "ibox.tim.it"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.tim.it/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms.tim.it"); - strcpy((char *)puiPara->MmsProxy, "213.230.130.89"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22210", 5) == 0)// Italy Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "mobile.vodafone.it"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.vodafone.it/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms.vodafone.it"); - strcpy((char *)puiPara->MmsProxy, "10.128.224.10"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22288", 5) == 0)// Italy wind - { - strcpy((char *)puiPara->Sim4gApn, "internet.wind"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.wind.it"); - strcpy((char *)puiPara->MmsApn, "mms.wind"); - strcpy((char *)puiPara->MmsProxy, "212.245.244.11"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22208", 5) == 0) //Italy Fastweb Mobile - { - strcpy((char *)puiPara->Sim4gApn, "apn.fastweb.it"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22207", 5) == 0) //Italy Kena Mobile - { - strcpy((char *)puiPara->Sim4gApn, "web.kenamobile.it"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22215", 5) == 0) //Italy Iliad - { - strcpy((char *)puiPara->Sim4gApn, "iliad"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "22233", 5) == 0) //Italy PosteMobile - { - strcpy((char *)puiPara->Sim4gApn, "wap.postemobile.it"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20815", 5) == 0)// France Free Mobile - { - strcpy((char *)puiPara->Sim4gApn, "free"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.free.fr"); - strcpy((char *)puiPara->MmsApn, "mmsfree"); - strcpy((char *)puiPara->MmsProxy, "212.27.40.225"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20801", 5) == 0) // France Orange - { - strcpy((char *)puiPara->Sim4gApn, "orange"); - strcpy((char *)puiPara->Sim4gUsr, "orange"); - strcpy((char *)puiPara->Sim4gPwd, "orange"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.orange.fr"); - strcpy((char *)puiPara->MmsApn, "orange.acte"); - strcpy((char *)puiPara->MmsProxy, "192.168.10.200"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20820", 5) == 0)// France Bouygues Telecom - { - strcpy((char *)puiPara->Sim4gApn, "mmsbouygtel.com"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.bouyguestelecom.fr/mms/wap"); - strcpy((char *)puiPara->MmsApn, "mmsbouygtel.com"); - strcpy((char *)puiPara->MmsProxy, "62.201.137.17"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20810", 5) == 0)// France SFR - { - strcpy((char *)puiPara->Sim4gApn, "sl2sfr"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms1"); - strcpy((char *)puiPara->MmsApn, "sl2sfr"); - strcpy((char *)puiPara->MmsProxy, "10.151.0.1"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "31028", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31003", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31009", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31015", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31017", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31041", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31056", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31068", 5) == 0))// United States AT&T - { - strcpy((char *)puiPara->Sim4gApn, "nxtgenphone"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.mobile.att.net"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "proxy.mobile.att.net"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "31002", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31016", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31020", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31021", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31022", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31023", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31024", 5) == 0) - - || (strncmp((const char *)puiPara->OperatorCode, "31025", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31026", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31027", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31029", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31031", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31033", 5) == 0) - || (strncmp((const char *)puiPara->OperatorCode, "31058", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31066", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "31080", 5) == 0))// United States AT&T - { - strcpy((char *)puiPara->Sim4gApn, "fast.t-mobile.com"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.msg.eng.t-mobile.com/mms/wapenc"); - strcpy((char *)puiPara->MmsApn, "wap.voicestream.com"); - strcpy((char *)puiPara->MmsProxy, "216.155.165.50"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "26206", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26212", 5) == 0)) // Germany Telekom - { - strcpy((char *)puiPara->Sim4gApn, "internet.telekom"); - strcpy((char *)puiPara->Sim4gUsr, "t-mobile"); - strcpy((char *)puiPara->Sim4gPwd, "tm"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.t-mobile.de/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms.t-d1.de"); - strcpy((char *)puiPara->MmsProxy, "172.28.23.131"); - strcpy((char *)puiPara->MmsPort, "8008"); - strcpy((char *)puiPara->MmsUsr, "t-mobile"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26201", 5) == 0) // Germany T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "internet.t-mobile"); - strcpy((char *)puiPara->Sim4gUsr, "t-mobile"); - strcpy((char *)puiPara->Sim4gPwd, "tm"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.t-mobile.de/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "internet.t-mobile"); - strcpy((char *)puiPara->MmsProxy, "172.28.23.131"); - strcpy((char *)puiPara->MmsPort, "8008"); - strcpy((char *)puiPara->MmsUsr, "t-mobile"); - strcpy((char *)puiPara->MmsPwd, "tm"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "26202", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26204", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26209", 5) == 0)) // Germany Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "web.vodafone.de"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://139.7.24.1/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "event.vodafone.de"); - strcpy((char *)puiPara->MmsProxy, "139.7.29.17"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "26203", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26205", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26277", 5) == 0)) // Germany E-Plus - { - strcpy((char *)puiPara->Sim4gApn, "internet.eplus.de"); - strcpy((char *)puiPara->Sim4gUsr, "eplus"); - strcpy((char *)puiPara->Sim4gPwd, "internet"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms/eplus"); - strcpy((char *)puiPara->MmsApn, "mms.eplus.de"); - strcpy((char *)puiPara->MmsProxy, "212.23.97.153"); - strcpy((char *)puiPara->MmsPort, "5080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "eplus"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "26207", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26208", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "26211", 5) == 0)) // Germany O2 - { - strcpy((char *)puiPara->Sim4gApn, "pinternet.interkom.de"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://10.81.0.7:8002/"); - strcpy((char *)puiPara->MmsApn, "pinternet.interkom.de"); - strcpy((char *)puiPara->MmsProxy, "82.113.100.6"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "29331", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "29341", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "29351", 5) == 0)) // Slovenia Telekom - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "mobitel"); - strcpy((char *)puiPara->Sim4gPwd, "internet"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.telekom.si"); - strcpy((char *)puiPara->MmsApn, "internet"); - strcpy((char *)puiPara->MmsProxy, "213.229.249.40"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mobitel"); - strcpy((char *)puiPara->MmsPwd, "internet"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "29340", 5) == 0) // Slovenia Simobil - { - strcpy((char *)puiPara->Sim4gApn, "internet.simobil.si"); - strcpy((char *)puiPara->Sim4gUsr, "simobil"); - strcpy((char *)puiPara->Sim4gPwd, "internet"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmc"); - strcpy((char *)puiPara->MmsApn, "mms.simobil.si"); - strcpy((char *)puiPara->MmsProxy, "80.95.224.46"); - strcpy((char *)puiPara->MmsPort, "9201"); - strcpy((char *)puiPara->MmsUsr, "simobil"); - strcpy((char *)puiPara->MmsPwd, "internet"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "29364", 5) == 0) // Slovenia T2 - { - strcpy((char *)puiPara->Sim4gApn, "mms.t-2.net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://www.mms.t-2.net:8002"); - strcpy((char *)puiPara->MmsApn, "mms.t-2.net"); - strcpy((char *)puiPara->MmsProxy, "172.20.18.137"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23106", 5) == 0) //Slovakia O2 - { - strcpy((char *)puiPara->Sim4gApn, "o2internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.o2world.sk:8002"); - strcpy((char *)puiPara->MmsApn, "o2mms"); - strcpy((char *)puiPara->MmsProxy, "10.97.1.11"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "23102", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "23104", 5) == 0)) //Slovakia T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.1.1"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23101", 5) == 0) //Slovakia Orange - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://imms.orange.sk"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "213.151.208.145"); - strcpy((char *)puiPara->MmsPort, "8799"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23103", 5) == 0) //Slovakia 4Ka - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.1.1"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "42501", 5) == 0) //Israel����ɫ�У�orange - { - strcpy((char *)puiPara->Sim4gApn, "uinternet"); - strcpy((char *)puiPara->Sim4gUsr, "orange"); - strcpy((char *)puiPara->Sim4gPwd, "orange"); - - strcpy((char *)puiPara->MmsMmsc, "http://192.168.220.15/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "uwap.orange.co.il"); - strcpy((char *)puiPara->MmsProxy, "192.118.11.55"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24801", 5) == 0) //Estonia����ɳ���ǣ� (Telia) - { - strcpy((char *)puiPara->Sim4gApn, "internet.emt.ee"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.emt.ee"); - strcpy((char *)puiPara->MmsMmsc, "mms.emt.ee/servlets/mms"); - strcpy((char *)puiPara->MmsProxy, "217.71.32.82"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24802", 5) == 0) //Estonia����ɳ���ǣ�(Elisa) - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsMmsc, "194.204.2.10"); - strcpy((char *)puiPara->MmsProxy, "194.204.2.6"); - strcpy((char *)puiPara->MmsPort, "8000"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24803", 5) == 0) //Estonia����ɳ���ǣ�(Tele2) - { - strcpy((char *)puiPara->Sim4gApn, "internet.tele2.ee"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsApn, "mms.tele2.ee"); - strcpy((char *)puiPara->MmsMmsc, "mmsc.tele2.ee"); - strcpy((char *)puiPara->MmsProxy, "193.12.40.6"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20408", 5) == 0) //Freeway - { - strcpy((char *)puiPara->Sim4gApn, "freeeway"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "\0"); - strcpy((char *)puiPara->MmsApn, "\0"); - strcpy((char *)puiPara->MmsProxy, "\0"); - strcpy((char *)puiPara->MmsPort, "\0"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20416", 5) == 0) //Netherlands T-Mobile - { - strcpy((char *)puiPara->Sim4gApn, "smartsites.t-mobile"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://t-mobilemms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.11"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "tmobilemms"); - strcpy((char *)puiPara->MmsPwd, "tmobilemms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24201", 5) == 0) //norway Telenor - { - strcpy((char *)puiPara->Sim4gApn, "telenor.smart"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc"); - strcpy((char *)puiPara->MmsApn, "telenor"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.11"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24202", 5) == 0) //norway Telia/Chilli Mobil - { - strcpy((char *)puiPara->Sim4gApn, "telia"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mm"); - strcpy((char *)puiPara->MmsApn, "telia"); - strcpy((char *)puiPara->MmsProxy, "212.169.66.4"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24205", 5) == 0) //norway Ice Net - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.nwn.no"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "188.149.250.10"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "24206", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "24214", 5) == 0)) //norway ice net - { - strcpy((char *)puiPara->Sim4gApn, "ice.net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms"); - strcpy((char *)puiPara->MmsApn, "mms.ice.net"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.10"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "24208", 5) == 0) //norway Get - { - strcpy((char *)puiPara->Sim4gApn, "internet.no"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.tdc.dk:8002"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "inetproxy.tdc.dk"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26801", 5) == 0) //Portugal vodafone - { - strcpy((char *)puiPara->Sim4gApn, "net2.vodafone.pt"); - strcpy((char *)puiPara->Sim4gUsr, "vodafone"); - strcpy((char *)puiPara->Sim4gPwd, "vodafone"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.vodafone.pt/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "net2.vodafone.pt"); - strcpy((char *)puiPara->MmsProxy, "Iproxy.vodafone.pt"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "vodafone"); - strcpy((char *)puiPara->MmsPwd, "vodafone"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26002", 5) == 0) //Polish Tmobile - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "mms/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "213.158.194.226"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26003", 5) == 0) //Polish Orange - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "internet"); - strcpy((char *)puiPara->Sim4gPwd, "internet"); - - strcpy((char *)puiPara->MmsMmsc, "mms.orange.pl"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.6.104"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26001", 5) == 0) //Polish Plus - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "mms.plusgsm.pl:8002"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "212.2.96.16"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "26006", 5) == 0) //Polish Play - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "mmsc.play.pl/mms/wapenc"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "10.10.25.5"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "30261", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "30269", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "30263", 5) == 0)) //Canada Bell - { - strcpy((char *)puiPara->Sim4gApn, "pda.bell.ca"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.bell.ca/mms/wapenc"); - strcpy((char *)puiPara->MmsApn, "pda.bell.ca"); - strcpy((char *)puiPara->MmsProxy, "web.wireless.bell.ca"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "30232", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "30272", 5) == 0))//Canada Rogers - { - strcpy((char *)puiPara->Sim4gApn, "rogers-core-appl1.apn"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.gprs.rogers.com"); - strcpy((char *)puiPara->MmsApn, "rogers-core-appl1.apn"); - strcpy((char *)puiPara->MmsProxy, "10.128.1.69"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "wap@wap"); - strcpy((char *)puiPara->MmsPwd, "wap125"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "30222", 5) == 0) //Canada Telus - { - strcpy((char *)puiPara->Sim4gApn, "sp.telus.com"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://aliasredirect.net/proxy/mmsc"); - strcpy((char *)puiPara->MmsApn, "sp.telus.com"); - strcpy((char *)puiPara->MmsProxy, "74.49.0.18"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "30268", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "30278", 5) == 0)) //Canada SaskTel - { - strcpy((char *)puiPara->Sim4gApn, "pda.stm.sk.ca"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.sasktel.com"); - strcpy((char *)puiPara->MmsApn, "pda.stm.sk.ca"); - strcpy((char *)puiPara->MmsProxy, "mig.sasktel.com"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - - else if(strncmp((const char *)puiPara->OperatorCode, "23002", 5) == 0) //Czech O2 - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.o2active.cz:8002"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "160.218.160.218"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23003", 5) == 0) //Czech Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms/"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "10.11.10.111"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "23001", 5) == 0) //Czech T-mobile - { - strcpy((char *)puiPara->Sim4gApn, "internet.t-mobile.cz"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms"); - strcpy((char *)puiPara->MmsApn, "mms.t-mobile.cz"); - strcpy((char *)puiPara->MmsProxy, "10.0.0.10"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "28601", 5) == 0) //Turkey Turkcell - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "mms.turkcell.com.tr/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "212.252.169.217"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "28602", 5) == 0) //Turkey Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "vodafone"); - strcpy((char *)puiPara->Sim4gPwd, "vodafone"); - - strcpy((char *)puiPara->MmsMmsc, "mms:6001/MM1Servlet"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "217.31.233.18"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "vodafone"); - strcpy((char *)puiPara->MmsPwd, "vodafone"); - } - else if((strncmp((const char *)puiPara->OperatorCode, "28603", 5) == 0) || (strncmp((const char *)puiPara->OperatorCode, "28604", 5) == 0))//Turkey Avea - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "mms.avea.com.tr/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "213.161.151.201"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "28401", 5) == 0) //Bulgaria A1 - { - strcpy((char *)puiPara->Sim4gApn, "internet.a1.bg"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc/"); - strcpy((char *)puiPara->MmsApn, "mms.a1.bg"); - strcpy((char *)puiPara->MmsProxy, "10.150.0.33"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "28405", 5) == 0) //Bulgaria Telenor - { - strcpy((char *)puiPara->Sim4gApn, "telenorbg"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc/"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.87.11"); - strcpy((char *)puiPara->MmsPort, "8004"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "28403", 5) == 0) //Bulgaria VIVACOM - { - strcpy((char *)puiPara->Sim4gApn, "internet.vivacom.bg"); - strcpy((char *)puiPara->Sim4gUsr, "VIVACOM"); - strcpy((char *)puiPara->Sim4gPwd, "VIVACOM"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.vivacom.bg"); - strcpy((char *)puiPara->MmsApn, "mms.vivacom.bg"); - strcpy((char *)puiPara->MmsProxy, "192.168.123.123"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25503", 5) == 0) //Ukraine KYIVSTAR - { - strcpy((char *)puiPara->Sim4gApn, "www.kyivstar.net"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.kyivstar.net"); - strcpy((char *)puiPara->MmsApn, "mms.kyivstar.net"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25501", 5) == 0) //Ukraine Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc:8002/"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "192.168.10.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "25506", 5) == 0) //Ukraine LifeCell - { - strcpy((char *)puiPara->Sim4gApn, "internet"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.life"); - strcpy((char *)puiPara->MmsApn, "mms"); - strcpy((char *)puiPara->MmsProxy, "10.10.10.10"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21407", 5) == 0) //Spain Movistar - { - strcpy((char *)puiPara->Sim4gApn, "telefonica.es"); - strcpy((char *)puiPara->Sim4gUsr, "telefonica"); - strcpy((char *)puiPara->Sim4gPwd, "telefonica"); - - strcpy((char *)puiPara->MmsMmsc, "http://mms.movistar.es"); - strcpy((char *)puiPara->MmsApn, "telefonica.es"); - strcpy((char *)puiPara->MmsProxy, "10.138.255.5"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21401", 5) == 0) //Spain Vodafone - { - strcpy((char *)puiPara->Sim4gApn, "airtelwap.es"); - strcpy((char *)puiPara->Sim4gUsr, "wap@wap"); - strcpy((char *)puiPara->Sim4gPwd, "wap125"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.vodafone.es/servlets/mms"); - strcpy((char *)puiPara->MmsApn, "mms.vodafone.net"); - strcpy((char *)puiPara->MmsProxy, "212.73.32.10"); - strcpy((char *)puiPara->MmsPort, "80"); - strcpy((char *)puiPara->MmsUsr, "wap@wap"); - strcpy((char *)puiPara->MmsPwd, "wap125"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "21403", 5) == 0) //Spain Simyo - { - strcpy((char *)puiPara->Sim4gApn, "orangeworld"); - strcpy((char *)puiPara->Sim4gUsr, "orange"); - strcpy((char *)puiPara->Sim4gPwd, "orange"); - - strcpy((char *)puiPara->MmsMmsc, "https://mms.orange.es"); - strcpy((char *)puiPara->MmsApn, "orangemms"); - strcpy((char *)puiPara->MmsProxy, "172.22.188.25"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "\0"); - strcpy((char *)puiPara->MmsPwd, "\0"); - } - else if(strncmp((const char *)puiPara->OperatorCode, "20601", 5) == 0) //Belgium Proximus - { - strcpy((char *)puiPara->Sim4gApn, "internet.proximus.be"); - strcpy((char *)puiPara->Sim4gUsr, "\0"); - strcpy((char *)puiPara->Sim4gPwd, "\0"); - - strcpy((char *)puiPara->MmsMmsc, "http://mmsc.proximus.be/mms"); - strcpy((char *)puiPara->MmsApn, "event.proximus.be"); - strcpy((char *)puiPara->MmsProxy, "10.55.14.75"); - strcpy((char *)puiPara->MmsPort, "8080"); - strcpy((char *)puiPara->MmsUsr, "mms"); - strcpy((char *)puiPara->MmsPwd, "mms"); + SF_STRCPY(puiPara->MmsApn, "3gwap"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.myuni.com.cn"); + SF_STRCPY(puiPara->MmsProxy, "10.0.0.172"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "46000", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "46002", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "46007", 5) == 0))//china union + { + SF_STRCPY(puiPara->Sim4gApn, "CMNET"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "CMWAP"); + SF_STRCPY(puiPara->MmsMmsc, "mmsc.monternet.com"); + SF_STRCPY(puiPara->MmsProxy, "10.0.0.172"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "46003", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "46005", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "46011", 5) == 0))//china Telecom + { + SF_STRCPY(puiPara->Sim4gApn, "CTNET"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "CTWAP"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.vnet.mobi"); + SF_STRCPY(puiPara->MmsProxy, "10.0.0.200"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "50501", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "50511", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "50571", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "50572", 5) == 0))//australia telstra + { + SF_STRCPY(puiPara->Sim4gApn, "telstra.internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "telstra.mms"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.telstra.com:8002"); + SF_STRCPY(puiPara->MmsProxy, "10.1.1.180"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21910", 5) == 0) //Croatia VMmsProxynet + { + SF_STRCPY(puiPara->Sim4gApn, "data.vip.hr"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.vipnet.hr"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.vipnet.hr/servlets/mms"); + SF_STRCPY(puiPara->MmsProxy, "212.91.99.91"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21901", 5) == 0) //Croatia T-Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "internet.ht.hr"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.htgprs"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.t-mobile.hr/servlets/mms"); + SF_STRCPY(puiPara->MmsProxy, "10.12.0.4"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21902", 5) == 0) // Croatia Tele2 + { + SF_STRCPY(puiPara->Sim4gApn, "internet.tele2.hr"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "internet.tele2.hr"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tele2.hr"); + SF_STRCPY(puiPara->MmsProxy, "193.12.40.66"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "23820", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "23830", 5) == 0))//Danmark Telia + { + SF_STRCPY(puiPara->Sim4gApn, "www.internet.mtelia.dk"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "www.mms.mtelia.dk"); + SF_STRCPY(puiPara->MmsMmsc, "www.mms.mtelia.dk"); + SF_STRCPY(puiPara->MmsProxy, "139.209.134.131"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24603", 5) == 0)//Lithuania Tele 2 + { + SF_STRCPY(puiPara->Sim4gApn, "internet.tele2.lt"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.tele2.lt"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tele2.lt"); + SF_STRCPY(puiPara->MmsProxy, "193.12.40.29"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24602", 5) == 0)//Lithuania BITE + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc/servlets/mms"); + SF_STRCPY(puiPara->MmsProxy, "192.168.150.2"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mms@mms"); + SF_STRCPY(puiPara->MmsPwd, "mms"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24601", 5) == 0)//Lithuania Omnitel + { + SF_STRCPY(puiPara->Sim4gApn, "omnitel"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "gprs.mms.lt"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.omnitel.net:8002/"); + SF_STRCPY(puiPara->MmsProxy, "194.176.32.149"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "mms"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "53001", 5) == 0)//New Zealand Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "vodafone"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "live.vodafone.com"); + SF_STRCPY(puiPara->MmsMmsc, "http://pxt.vodafone.net.nz/pxtsend"); + SF_STRCPY(puiPara->MmsProxy, "172.30.38.3"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "53024", 5) == 0)//New Zealand Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.2degreesmobile.net.nz:48090"); + SF_STRCPY(puiPara->MmsProxy, "118.148.1.118"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22610", 5) == 0)// Romania Orange + { + SF_STRCPY(puiPara->Sim4gApn, "net"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsMmsc, "http://wap.mms.orange.ro:8002"); + SF_STRCPY(puiPara->MmsProxy, "62.217.247.252"); + SF_STRCPY(puiPara->MmsPort, "8799"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "mms"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22601", 5) == 0)// Romania Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "live.vodafone.com"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22603", 5) == 0)// Romania Romtelecom + { + SF_STRCPY(puiPara->Sim4gApn, "broadband"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22605", 5) == 0)// Romania DIGI.mobil + { + SF_STRCPY(puiPara->Sim4gApn, "prepaid"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "25028", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "25099", 5) == 0))// Russian Federation Beeline + { + SF_STRCPY(puiPara->Sim4gApn, "internet.beeline.ru"); + SF_STRCPY(puiPara->Sim4gUsr, "beeline"); + SF_STRCPY(puiPara->Sim4gPwd, "beeline"); + + SF_STRCPY(puiPara->MmsApn, "mms.beeline.ru"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc/"); + SF_STRCPY(puiPara->MmsProxy, "192.168.94.23"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "beeline"); + SF_STRCPY(puiPara->MmsPwd, "beeline"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25001", 5) == 0)// Russian Federation MTS + { + SF_STRCPY(puiPara->Sim4gApn, "internet.mts.ru"); + SF_STRCPY(puiPara->Sim4gUsr, "mts"); + SF_STRCPY(puiPara->Sim4gPwd, "mts"); + + SF_STRCPY(puiPara->MmsApn, "mms.mts.ru"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc"); + SF_STRCPY(puiPara->MmsProxy, "192.168.192.192"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mts"); + SF_STRCPY(puiPara->MmsPwd, "mts"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25002", 5) == 0)// Russian Federation MegaFon + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "gdata"); + SF_STRCPY(puiPara->Sim4gPwd, "gdata"); + + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc:8002"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "gdata"); + SF_STRCPY(puiPara->MmsPwd, "gdata"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25020", 5) == 0)// Russian Federation Tele2 + { + SF_STRCPY(puiPara->Sim4gApn, "internet.tele2.ru"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.tele2.ru"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tele2.ru"); + SF_STRCPY(puiPara->MmsProxy, "193.12.40.65"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25011", 5) == 0)// Russian Federation Yota + { + SF_STRCPY(puiPara->Sim4gApn, "internet.yota"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.yota"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc:8002"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25035", 5) == 0)// Russian Federation Motiv + { + SF_STRCPY(puiPara->Sim4gApn, "inet.ycc.ru"); + SF_STRCPY(puiPara->Sim4gUsr, "motiv"); + SF_STRCPY(puiPara->Sim4gPwd, "motiv"); + + SF_STRCPY(puiPara->MmsApn, "mms.ycc.ru"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.ycc.ru"); + SF_STRCPY(puiPara->MmsProxy, "172.16.2.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "motiv"); + SF_STRCPY(puiPara->MmsPwd, "motiv"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24007", 5) == 0)//Sweden Tele2 COMVIQ + { + SF_STRCPY(puiPara->Sim4gApn, "4G.tele2.se"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tele2.se"); + SF_STRCPY(puiPara->MmsApn, "4G.tele2.se"); + SF_STRCPY(puiPara->MmsProxy, "130.244.202.30"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24001", 5) == 0)//Sweden TeliaSonera Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "online.telia.se"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmss"); + SF_STRCPY(puiPara->MmsApn, "mms.telia.se"); + SF_STRCPY(puiPara->MmsProxy, "193.209.134.132"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "telia"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "24006", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "24008", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "24024", 5) == 0))//Sweden Telenor Mobile Sverige + { + SF_STRCPY(puiPara->Sim4gApn, "services.telenor.se"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms"); + SF_STRCPY(puiPara->MmsApn, "services.telenor.se"); + SF_STRCPY(puiPara->MmsProxy, "172.30.253.241"); + SF_STRCPY(puiPara->MmsPort, "8799"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "23433", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "23434", 5) == 0))// United Kingdom Orange + { + SF_STRCPY(puiPara->Sim4gApn, "orangeinternet"); + SF_STRCPY(puiPara->Sim4gUsr, "user"); + SF_STRCPY(puiPara->Sim4gPwd, "pass"); + + SF_STRCPY(puiPara->MmsApn, "orangemms"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.orange.co.uk/"); + SF_STRCPY(puiPara->MmsProxy, "192.168.224.10"); + SF_STRCPY(puiPara->MmsPort, "9201"); + SF_STRCPY(puiPara->MmsUsr, "Orange"); + SF_STRCPY(puiPara->MmsPwd, "Multimedia"); + } + + else if((SF_STRNCMP(puiPara->OperatorCode, "23402", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "23410", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "23411", 5) == 0))// United Kingdom O2 + { + SF_STRCPY(puiPara->Sim4gApn, "mobile.o2.co.uk"); + SF_STRCPY(puiPara->Sim4gUsr, "web"); + SF_STRCPY(puiPara->Sim4gPwd, "password"); + + SF_STRCPY(puiPara->MmsApn, "payandgo.o2.co.uk"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.mms.o2.co.uk:8002"); + SF_STRCPY(puiPara->MmsProxy, "193.113.200.195"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "payandgo"); + SF_STRCPY(puiPara->MmsPwd, "password"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "23415", 5) == 0)//United Kingdom Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "pp.vodafone.co.uk"); + SF_STRCPY(puiPara->Sim4gUsr, "web"); + SF_STRCPY(puiPara->Sim4gPwd, "web"); + + SF_STRCPY(puiPara->MmsApn, "wap.vodafone.co.uk"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.vodafone.co.uk/servlets/mms/"); + SF_STRCPY(puiPara->MmsProxy, "212.183.137.12"); + SF_STRCPY(puiPara->MmsPort, "9201"); + SF_STRCPY(puiPara->MmsUsr, "wap"); + SF_STRCPY(puiPara->MmsPwd, "wap"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "23430", 5) == 0)//United Kingdom T-Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "general.t-mobile.uk"); + SF_STRCPY(puiPara->Sim4gUsr, "user"); + SF_STRCPY(puiPara->Sim4gPwd, "wap"); + + SF_STRCPY(puiPara->MmsApn, "general.t-mobile.uk"); + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.t-mobile.co.uk:8002/"); + SF_STRCPY(puiPara->MmsProxy, "149.254.211.10"); + SF_STRCPY(puiPara->MmsPort, "9201"); + SF_STRCPY(puiPara->MmsUsr, "user"); + SF_STRCPY(puiPara->MmsPwd, "one2one"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "23420", 5) == 0)//United Kingdom 3 + { + SF_STRCPY(puiPara->Sim4gApn, "three.co.uk"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.three.co.uk"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.um.three.co.uk:10021/mmsc"); + SF_STRCPY(puiPara->MmsProxy, "217.171.129.2"); + SF_STRCPY(puiPara->MmsPort, "8799"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "24403", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "24412", 5) == 0))// Finland DNA + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.dnafinland.fi"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "10.1.1.2"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24421", 5) == 0)// Finland Saunalahti + { + SF_STRCPY(puiPara->Sim4gApn, "internet.saunalahti"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.saunalahti.fi:8002/"); + SF_STRCPY(puiPara->MmsApn, "mms.saunalahti.fi"); + SF_STRCPY(puiPara->MmsProxy, "62.142.4.197"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24405", 5) == 0)// Finland Elisa + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.elisa.fi"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "213.161.41.57"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24491", 5) == 0)// Finland Sonera + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.sonera.net:8002/"); + SF_STRCPY(puiPara->MmsApn, "wap.sonera.net"); + SF_STRCPY(puiPara->MmsProxy, "195.156.25.33"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "24410", 5) == 0)// Finland TDC + { + SF_STRCPY(puiPara->Sim4gApn, "inet.tdc.fi"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tdc.fi"); + SF_STRCPY(puiPara->MmsApn, "mms.tdc.fi"); + SF_STRCPY(puiPara->MmsProxy, "10.1.12.2"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "65507", 5) == 0)// South Africa Cell C + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.cmobile.co.za/"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "196.31.116.250"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "65510", 5) == 0)// South Africa MTN + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "guest"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.mtn.co.za/mms/wapenc"); + SF_STRCPY(puiPara->MmsApn, "mymtn"); + SF_STRCPY(puiPara->MmsProxy, "196.11.240.241"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "65501", 5) == 0)// South Africa Vodacom + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "guest"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.vodacom4me.co.za/"); + SF_STRCPY(puiPara->MmsApn, "mms.vodacom.net"); + SF_STRCPY(puiPara->MmsProxy, "196.6.128.13"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "65502", 5) == 0)// South Africa 8ta + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "guest"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + SF_STRCPY(puiPara->MmsMmsc, "http://mms.8ta.com:38090/was"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "41.151.254.162"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "guest"); + SF_STRCPY(puiPara->MmsPwd, "guest"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22201", 5) == 0)// Italy TIM + { + SF_STRCPY(puiPara->Sim4gApn, "ibox.tim.it"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.tim.it/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms.tim.it"); + SF_STRCPY(puiPara->MmsProxy, "213.230.130.89"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22210", 5) == 0)// Italy Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "mobile.vodafone.it"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.vodafone.it/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms.vodafone.it"); + SF_STRCPY(puiPara->MmsProxy, "10.128.224.10"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22288", 5) == 0)// Italy wind + { + SF_STRCPY(puiPara->Sim4gApn, "internet.wind"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.wind.it"); + SF_STRCPY(puiPara->MmsApn, "mms.wind"); + SF_STRCPY(puiPara->MmsProxy, "212.245.244.11"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22208", 5) == 0) //Italy Fastweb Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "apn.fastweb.it"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22207", 5) == 0) //Italy Kena Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "web.kenamobile.it"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22215", 5) == 0) //Italy Iliad + { + SF_STRCPY(puiPara->Sim4gApn, "iliad"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "22233", 5) == 0) //Italy PosteMobile + { + SF_STRCPY(puiPara->Sim4gApn, "wap.postemobile.it"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } +// else if(SF_STRNCMP(puiPara->OperatorCode, "22210", 5) == 0) //Italy Ho Mobile +// { +// SF_STRCPY(puiPara->Sim4gApn, "internet.ho-mobile.it"); +// SF_STRCPY(puiPara->Sim4gUsr, "\0"); +// SF_STRCPY(puiPara->Sim4gPwd, "\0"); +// +// SF_STRCPY(puiPara->MmsMmsc, "\0"); +// SF_STRCPY(puiPara->MmsApn, "\0"); +// SF_STRCPY(puiPara->MmsProxy, "\0"); +// SF_STRCPY(puiPara->MmsPort, "\0"); +// SF_STRCPY(puiPara->MmsUsr, "\0"); +// SF_STRCPY(puiPara->MmsPwd, "\0"); +// } + else if(SF_STRNCMP(puiPara->OperatorCode, "20815", 5) == 0)// France Free Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "free"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.free.fr"); + SF_STRCPY(puiPara->MmsApn, "mmsfree"); + SF_STRCPY(puiPara->MmsProxy, "212.27.40.225"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "20801", 5) == 0) // France Orange + { + SF_STRCPY(puiPara->Sim4gApn, "orange"); + SF_STRCPY(puiPara->Sim4gUsr, "orange"); + SF_STRCPY(puiPara->Sim4gPwd, "orange"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.orange.fr"); + SF_STRCPY(puiPara->MmsApn, "orange.acte"); + SF_STRCPY(puiPara->MmsProxy, "192.168.10.200"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "20820", 5) == 0)// France Bouygues Telecom + { + SF_STRCPY(puiPara->Sim4gApn, "mmsbouygtel.com"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.bouyguestelecom.fr/mms/wap"); + SF_STRCPY(puiPara->MmsApn, "mmsbouygtel.com"); + SF_STRCPY(puiPara->MmsProxy, "62.201.137.17"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "20810", 5) == 0)// France SFR + { + SF_STRCPY(puiPara->Sim4gApn, "sl2sfr"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms1"); + SF_STRCPY(puiPara->MmsApn, "sl2sfr"); + SF_STRCPY(puiPara->MmsProxy, "10.151.0.1"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "31000", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31001", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31059", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31089", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31091", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31111", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31127", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31128", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31139", 5) == 0) + || (SF_STRNCMP(puiPara->OperatorCode, "31148", 5) == 0))// us verizon + { + SF_STRCPY(puiPara->Sim4gApn, APN_4G_VERIZON); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "31017", 5) == 0)// United States AT&T + { + SF_STRCPY(puiPara->Sim4gApn, APN_4G_ATT); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "31158", 5) == 0)// United States cellular + { + SF_STRCPY(puiPara->Sim4gApn, "uscc00000.enterprise0.usc-cdp"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "20404", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "90128", 5) == 0))//Vodafone Global + { + SF_STRCPY(puiPara->Sim4gApn, "TACTACAM"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "\0"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "\0"); + SF_STRCPY(puiPara->MmsPort, "\0"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + + /*else if((SF_STRNCMP(puiPara->OperatorCode, "31003", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31009", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31015", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31017", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31041", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31056", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31068", 5) == 0))// United States AT&T + { + SF_STRCPY(puiPara->Sim4gApn, "nxtgenphone"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.mobile.att.net"); + SF_STRCPY(puiPara->MmsApn, "\0"); + SF_STRCPY(puiPara->MmsProxy, "proxy.mobile.att.net"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "31002", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31016", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31020", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31021", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31022", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31023", 5) == 0)|| (SF_STRNCMP(puiPara->OperatorCode, "31024", 5) == 0) + + || (SF_STRNCMP(puiPara->OperatorCode, "31025", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31026", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31027", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31028", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31029", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31031", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31033", 5) == 0) + || (SF_STRNCMP(puiPara->OperatorCode, "31058", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31066", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "31080", 5) == 0))// United States AT&T + { + SF_STRCPY(puiPara->Sim4gApn, "fast.t-mobile.com"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.msg.eng.t-mobile.com/mms/wapenc"); + SF_STRCPY(puiPara->MmsApn, "wap.voicestream.com"); + SF_STRCPY(puiPara->MmsProxy, "216.155.165.50"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + }*/ + else if ((SF_STRNCMP(puiPara->OperatorCode, "26206", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26212", 5) == 0)) // Germany Telekom + { + SF_STRCPY(puiPara->Sim4gApn, "internet.telekom"); + SF_STRCPY(puiPara->Sim4gUsr, "t-mobile"); + SF_STRCPY(puiPara->Sim4gPwd, "tm"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.t-mobile.de/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms.t-d1.de"); + SF_STRCPY(puiPara->MmsProxy, "172.28.23.131"); + SF_STRCPY(puiPara->MmsPort, "8008"); + SF_STRCPY(puiPara->MmsUsr, "t-mobile"); + SF_STRCPY(puiPara->MmsPwd, "mms"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "26201", 5) == 0) // Germany T-Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "internet.t-mobile"); + SF_STRCPY(puiPara->Sim4gUsr, "t-mobile"); + SF_STRCPY(puiPara->Sim4gPwd, "tm"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.t-mobile.de/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "internet.t-mobile"); + SF_STRCPY(puiPara->MmsProxy, "172.28.23.131"); + SF_STRCPY(puiPara->MmsPort, "8008"); + SF_STRCPY(puiPara->MmsUsr, "t-mobile"); + SF_STRCPY(puiPara->MmsPwd, "tm"); + } + else if ((SF_STRNCMP(puiPara->OperatorCode, "26202", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26204", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26209", 5) == 0)) // Germany Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "web.vodafone.de"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://139.7.24.1/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "event.vodafone.de"); + SF_STRCPY(puiPara->MmsProxy, "139.7.29.17"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "26203", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26205", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26277", 5) == 0)) // Germany E-Plus + { + SF_STRCPY(puiPara->Sim4gApn, "internet.eplus.de"); + SF_STRCPY(puiPara->Sim4gUsr, "eplus"); + SF_STRCPY(puiPara->Sim4gPwd, "internet"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms/eplus"); + SF_STRCPY(puiPara->MmsApn, "mms.eplus.de"); + SF_STRCPY(puiPara->MmsProxy, "212.23.97.153"); + SF_STRCPY(puiPara->MmsPort, "5080"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "eplus"); + } + else if ((SF_STRNCMP(puiPara->OperatorCode, "26207", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26208", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "26211", 5) == 0)) // Germany O2 + { + SF_STRCPY(puiPara->Sim4gApn, "pinternet.interkom.de"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://10.81.0.7:8002/"); + SF_STRCPY(puiPara->MmsApn, "pinternet.interkom.de"); + SF_STRCPY(puiPara->MmsProxy, "82.113.100.6"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "29331", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "29341", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "29351", 5) == 0)) // Slovenia Telekom + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "mobitel"); + SF_STRCPY(puiPara->Sim4gPwd, "internet"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.telekom.si"); + SF_STRCPY(puiPara->MmsApn, "internet"); + SF_STRCPY(puiPara->MmsProxy, "213.229.249.40"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mobitel"); + SF_STRCPY(puiPara->MmsPwd, "internet"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "29340", 5) == 0) // Slovenia Simobil + { + SF_STRCPY(puiPara->Sim4gApn, "internet.simobil.si"); + SF_STRCPY(puiPara->Sim4gUsr, "simobil"); + SF_STRCPY(puiPara->Sim4gPwd, "internet"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmc"); + SF_STRCPY(puiPara->MmsApn, "mms.simobil.si"); + SF_STRCPY(puiPara->MmsProxy, "80.95.224.46"); + SF_STRCPY(puiPara->MmsPort, "9201"); + SF_STRCPY(puiPara->MmsUsr, "simobil"); + SF_STRCPY(puiPara->MmsPwd, "internet"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "29364", 5) == 0) // Slovenia T2 + { + SF_STRCPY(puiPara->Sim4gApn, "mms.t-2.net"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://www.mms.t-2.net:8002"); + SF_STRCPY(puiPara->MmsApn, "mms.t-2.net"); + SF_STRCPY(puiPara->MmsProxy, "172.20.18.137"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + + } + else if (SF_STRNCMP(puiPara->OperatorCode, "23106", 5) == 0) //Slovakia O2 + { + SF_STRCPY(puiPara->Sim4gApn, "o2internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.o2world.sk:8002"); + SF_STRCPY(puiPara->MmsApn, "o2mms"); + SF_STRCPY(puiPara->MmsProxy, "10.97.1.11"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if ((SF_STRNCMP(puiPara->OperatorCode, "23102", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "23104", 5) == 0)) //Slovakia T-Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "192.168.1.1"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "23101", 5) == 0) //Slovakia Orange + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://imms.orange.sk"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "213.151.208.145"); + SF_STRCPY(puiPara->MmsPort, "8799"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "23103", 5) == 0) //Slovakia 4Ka + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "192.168.1.1"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "42501", 5) == 0) //Israel(以色列)orange + { + SF_STRCPY(puiPara->Sim4gApn, "uinternet"); + SF_STRCPY(puiPara->Sim4gUsr, "orange"); + SF_STRCPY(puiPara->Sim4gPwd, "orange"); + + SF_STRCPY(puiPara->MmsMmsc, "http://192.168.220.15/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "uwap.orange.co.il"); + SF_STRCPY(puiPara->MmsProxy, "192.118.11.55"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24801", 5) == 0) //Estonia(爱沙尼亚) (Telia) + { + SF_STRCPY(puiPara->Sim4gApn, "internet.emt.ee"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.emt.ee"); + SF_STRCPY(puiPara->MmsMmsc, "mms.emt.ee/servlets/mms"); + SF_STRCPY(puiPara->MmsProxy, "217.71.32.82"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24802", 5) == 0) //Estonia(爱沙尼亚)(Elisa) + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsMmsc, "194.204.2.10"); + SF_STRCPY(puiPara->MmsProxy, "194.204.2.6"); + SF_STRCPY(puiPara->MmsPort, "8000"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24803", 5) == 0) //Estonia(爱沙尼亚)(Tele2) + { + SF_STRCPY(puiPara->Sim4gApn, "internet.tele2.ee"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsApn, "mms.tele2.ee"); + SF_STRCPY(puiPara->MmsMmsc, "mmsc.tele2.ee"); + SF_STRCPY(puiPara->MmsProxy, "193.12.40.6"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "20408", 5) == 0) //Netherlands è·å…° KPN + { + SF_STRCPY(puiPara->Sim4gApn, "portalmmm.nl"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mp.mobiel.kpn/mmsc"); + SF_STRCPY(puiPara->MmsApn, "portalmmm.nl"); + SF_STRCPY(puiPara->MmsProxy, "10.10.100.20"); + SF_STRCPY(puiPara->MmsPort, "5080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "20416", 5) == 0) //Netherlands T-Mobile + { + SF_STRCPY(puiPara->Sim4gApn, "smartsites.t-mobile"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://t-mobilemms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.11"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "tmobilemms"); + SF_STRCPY(puiPara->MmsPwd, "tmobilemms"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24201", 5) == 0) //norway Telenor + { + SF_STRCPY(puiPara->Sim4gApn, "telenor.smart"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc"); + SF_STRCPY(puiPara->MmsApn, "telenor"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.11"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24202", 5) == 0) //norway Telia/Chilli Mobil + { + SF_STRCPY(puiPara->Sim4gApn, "telia"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mm"); + SF_STRCPY(puiPara->MmsApn, "telia"); + SF_STRCPY(puiPara->MmsProxy, "212.169.66.4"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24205", 5) == 0) //norway Ice Net + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.nwn.no"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "188.149.250.10"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if ((SF_STRNCMP(puiPara->OperatorCode, "24206", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "24214", 5) == 0)) //norway ice net + { + SF_STRCPY(puiPara->Sim4gApn, "ice.net"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms"); + SF_STRCPY(puiPara->MmsApn, "mms.ice.net"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.10"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "24208", 5) == 0) //norway Get + { + SF_STRCPY(puiPara->Sim4gApn, "internet.no"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.tdc.dk:8002"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "inetproxy.tdc.dk"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if (SF_STRNCMP(puiPara->OperatorCode, "26801", 5) == 0) //Portugal vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "net2.vodafone.pt"); + SF_STRCPY(puiPara->Sim4gUsr, "vodafone"); + SF_STRCPY(puiPara->Sim4gPwd, "vodafone"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.vodafone.pt/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "net2.vodafone.pt"); + SF_STRCPY(puiPara->MmsProxy, "Iproxy.vodafone.pt"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "vodafone"); + SF_STRCPY(puiPara->MmsPwd, "vodafone"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "26002", 5) == 0) //Polish Tmobile + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "mms/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "213.158.194.226"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "26003", 5) == 0) //Polish Orange + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "internet"); + SF_STRCPY(puiPara->Sim4gPwd, "internet"); + + SF_STRCPY(puiPara->MmsMmsc, "mms.orange.pl"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "192.168.6.104"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "mms"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "26001", 5) == 0) //Polish Plus + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "mms.plusgsm.pl:8002"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "212.2.96.16"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "26006", 5) == 0) //Polish Play + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "mmsc.play.pl/mms/wapenc"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "10.10.25.5"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "30261", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "30269", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "30263", 5) == 0)) //Canada Bell + { + SF_STRCPY(puiPara->Sim4gApn, "pda.bell.ca"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.bell.ca/mms/wapenc"); + SF_STRCPY(puiPara->MmsApn, "pda.bell.ca"); + SF_STRCPY(puiPara->MmsProxy, "web.wireless.bell.ca"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "30232", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "30272", 5) == 0))//Canada Rogers + { + SF_STRCPY(puiPara->Sim4gApn, "rogers-core-appl1.apn"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.gprs.rogers.com"); + SF_STRCPY(puiPara->MmsApn, "rogers-core-appl1.apn"); + SF_STRCPY(puiPara->MmsProxy, "10.128.1.69"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "wap@wap"); + SF_STRCPY(puiPara->MmsPwd, "wap125"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "30222", 5) == 0) //Canada Telus + { + SF_STRCPY(puiPara->Sim4gApn, "sp.telus.com"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://aliasredirect.net/proxy/mmsc"); + SF_STRCPY(puiPara->MmsApn, "sp.telus.com"); + SF_STRCPY(puiPara->MmsProxy, "74.49.0.18"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "30268", 5) == 0) || (SF_STRNCMP(puiPara->OperatorCode, "30278", 5) == 0)) //Canada SaskTel + { + SF_STRCPY(puiPara->Sim4gApn, "pda.stm.sk.ca"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.sasktel.com"); + SF_STRCPY(puiPara->MmsApn, "pda.stm.sk.ca"); + SF_STRCPY(puiPara->MmsProxy, "mig.sasktel.com"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + + else if(SF_STRNCMP(puiPara->OperatorCode, "23002", 5) == 0) //Czech O2 + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.o2active.cz:8002"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "160.218.160.218"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "23003", 5) == 0) //Czech Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms/"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "10.11.10.111"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "23001", 5) == 0) //Czech T-mobile + { + SF_STRCPY(puiPara->Sim4gApn, "internet.t-mobile.cz"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms"); + SF_STRCPY(puiPara->MmsApn, "mms.t-mobile.cz"); + SF_STRCPY(puiPara->MmsProxy, "10.0.0.10"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "28601", 5) == 0) //Turkey Turkcell + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "mms.turkcell.com.tr/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "212.252.169.217"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "28602", 5) == 0) //Turkey Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "vodafone"); + SF_STRCPY(puiPara->Sim4gPwd, "vodafone"); + + SF_STRCPY(puiPara->MmsMmsc, "mms:6001/MM1Servlet"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "217.31.233.18"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "vodafone"); + SF_STRCPY(puiPara->MmsPwd, "vodafone"); + } + else if((SF_STRNCMP(puiPara->OperatorCode, "28603", 5) == 0) ||(SF_STRNCMP(puiPara->OperatorCode, "28604", 5) == 0))//Turkey Avea + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "mms.avea.com.tr/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "213.161.151.201"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "28401", 5) == 0) //Bulgaria A1 + { + SF_STRCPY(puiPara->Sim4gApn, "internet.a1.bg"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc/"); + SF_STRCPY(puiPara->MmsApn, "mms.a1.bg"); + SF_STRCPY(puiPara->MmsProxy, "10.150.0.33"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25503", 5) == 0) //Ukraine KYIVSTAR + { + SF_STRCPY(puiPara->Sim4gApn, "www.kyivstar.net"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.kyivstar.net"); + SF_STRCPY(puiPara->MmsApn, "mms.kyivstar.net"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25501", 5) == 0) //Ukraine Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc:8002/"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "192.168.10.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "25506", 5) == 0) //Ukraine LifeCell + { + SF_STRCPY(puiPara->Sim4gApn, "internet"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.life"); + SF_STRCPY(puiPara->MmsApn, "mms"); + SF_STRCPY(puiPara->MmsProxy, "10.10.10.10"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21407", 5) == 0) //Spain Movistar + { + SF_STRCPY(puiPara->Sim4gApn, "telefonica.es"); + SF_STRCPY(puiPara->Sim4gUsr, "telefonica"); + SF_STRCPY(puiPara->Sim4gPwd, "telefonica"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mms.movistar.es"); + SF_STRCPY(puiPara->MmsApn, "telefonica.es"); + SF_STRCPY(puiPara->MmsProxy, "10.138.255.5"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21401", 5) == 0) //Spain Vodafone + { + SF_STRCPY(puiPara->Sim4gApn, "airtelwap.es"); + SF_STRCPY(puiPara->Sim4gUsr, "wap@wap"); + SF_STRCPY(puiPara->Sim4gPwd, "wap125"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.vodafone.es/servlets/mms"); + SF_STRCPY(puiPara->MmsApn, "mms.vodafone.net"); + SF_STRCPY(puiPara->MmsProxy, "212.73.32.10"); + SF_STRCPY(puiPara->MmsPort, "80"); + SF_STRCPY(puiPara->MmsUsr, "wap@wap"); + SF_STRCPY(puiPara->MmsPwd, "wap125"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "21403", 5) == 0) //Spain Simyo + { + SF_STRCPY(puiPara->Sim4gApn, "orangeworld"); + SF_STRCPY(puiPara->Sim4gUsr, "orange"); + SF_STRCPY(puiPara->Sim4gPwd, "orange"); + + SF_STRCPY(puiPara->MmsMmsc, "https://mms.orange.es"); + SF_STRCPY(puiPara->MmsApn, "orangemms"); + SF_STRCPY(puiPara->MmsProxy, "172.22.188.25"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "\0"); + SF_STRCPY(puiPara->MmsPwd, "\0"); + } + else if(SF_STRNCMP(puiPara->OperatorCode, "20601", 5) == 0) //Belgium Proximus + { + SF_STRCPY(puiPara->Sim4gApn, "internet.proximus.be"); + SF_STRCPY(puiPara->Sim4gUsr, "\0"); + SF_STRCPY(puiPara->Sim4gPwd, "\0"); + + SF_STRCPY(puiPara->MmsMmsc, "http://mmsc.proximus.be/mms"); + SF_STRCPY(puiPara->MmsApn, "event.proximus.be"); + SF_STRCPY(puiPara->MmsProxy, "10.55.14.75"); + SF_STRCPY(puiPara->MmsPort, "8080"); + SF_STRCPY(puiPara->MmsUsr, "mms"); + SF_STRCPY(puiPara->MmsPwd, "mms"); } else { - simAutoMatchFlag = FAIL; + //puiPara->autoOperatorFlag = 1; + //autoSimOperatorMatchFlag = 1; result = FAIL; } @@ -1471,3 +1408,4 @@ UINT32 sf_auto_operation_adjust(void) } + diff --git a/code/application/source/sf_app/code/source/4gMng/sf_eg91_gps.c b/code/application/source/sf_app/code/source/4gMng/sf_eg91_gps.c index bbd722384..37e46d85c 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_eg91_gps.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_eg91_gps.c @@ -59,7 +59,7 @@ static void gps_infor_convert(SF_CHAR *str) memcpy((char*)strTemp, str, 4); temp = atoi(strTemp); temp = temp * 60 / 100; - sprintf(strTemp, "%04d", temp); + sprintf(strTemp, "%04ld", temp); memcpy(str, strTemp, 4); } diff --git a/code/application/source/sf_app/code/source/4gMng/sf_eg91_server.c b/code/application/source/sf_app/code/source/4gMng/sf_eg91_server.c index afae2dce5..3b98d5156 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_eg91_server.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_eg91_server.c @@ -1259,7 +1259,7 @@ SINT32 eg91_server_acm_open(SF_FN_PARAM_S *pfnParam) { case MODULE_SERVER_ACM_WRITE_AT_QISEND: enATcmdType = MODULE_SERVER_ACM_WRITE_AT_SENDING; - sprintf(ttyData,"AT+QISEND=%d,%d\r", TCP_PDP, psenddate->dataSize-3); + sprintf(ttyData,"AT+QISEND=%d,%ld\r", TCP_PDP, psenddate->dataSize-3); ttyRet = sf_hal_ttyusb2_write(ttyData, strlen(ttyData)); SF_APPCOMM_CHECK_RETURN(ttyRet, ttyRet); break; diff --git a/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c b/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c index 4d105a206..8c4f4b460 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_eg91_sim.c @@ -23,18 +23,69 @@ extern "C" { #include "sf_datahttp.h" #include "sf_service.h" #include "sf_ftp.h" +#include "sf_module.h" + +#define APNGPRS_WUYUAN1 "America.bics" +#define APNGPRS_WUYUAN2 "bicsapn" +#define MEGA_TEST 0 unsigned long int LocateTime = 0; char gsmPara[GPRS_INFO_LINE_MAX] = { 0 }; char logStr[128] = {0}; UINT8 SimImei[8] = { 0 }; +UINT8 AddCimiTimes = 0; +UINT8 simErrorCode = SIM_AT_ERROR; +BOOL NetworkScan = FALSE; +BOOL GprsNetWorkReady = FALSE; UINT8 gprs_search_process = GPRS_SEARCH_STEP_IDLE; extern SF_PARA_TIME_S rtcTime; SF_PARA_TIME_S nowDate = { 0, 0, 0, 0, 0, 0}; +typedef struct sf_cimi_id +{ + int id; + char cimi[6]; + struct sf_cimi_id *next; +}sf_cimi_id_t; + +sf_cimi_id_t cimi_head = { .id = 1, .cimi = "0", .next = NULL }; + +UINT8 sf_qcsq_decode(char *instr, UINT8 *csqVal) +{ + char *pStr = NULL; + UINT8 csq = 0; + + if((instr == NULL) || (csqVal == NULL)) + { + return FAIL; + } + + pStr = strstr((const char *)instr, "+QCSQ: "); + + if(pStr != NULL) + { + strtok((char *)instr, ","); + pStr = strtok(NULL, ","); + + if(pStr != NULL) + { + pStr = strtok(NULL, "\""); + + if(pStr != NULL) + { + csq = 0 - atoi((const char *)pStr); + *csqVal = csq; + printf("[%s:%d]qcsqVal=%d\n", __FUNCTION__, __LINE__, csq); + return SUCCESS; + } + } + } + + return FAIL; +} void eg91_mark_time_set(unsigned long int MarkTime) { @@ -2220,14 +2271,14 @@ void sf_quectel_module_subver_change(char *pTemp) } /************************************************************ - Function: sf_quectel_module_complete_init + Function: sf module complete init Description: module complete init,for setup/A/8 start mode. Input: N/A Output: N/A Return: 0 SUCCESS, 1 error Others: N/A ************************************************************/ -SINT32 sf_quectel_module_complete_init(void) +SINT32 sf_module_complete_init(void) { SINT32 ret = SF_SUCCESS; SF_QUECTEL_NETREG_E eNetRegLocation = QUECTEL_NETREG_FRIST; @@ -2817,7 +2868,7 @@ SINT32 sf_quectel_module_complete_init(void) if(gsmPara[0] != '\0') { - printf("eNetRegLocation=%d,gsmPara:\n%s", eNetRegLocation, gsmPara); + MLOGD("eNetRegLocation:%d\ngsmPara:%s\n", eNetRegLocation, gsmPara); } time++; @@ -2840,18 +2891,18 @@ SINT32 sf_quectel_module_complete_init(void) /************************************************* - Function: sf_quectel_net_regist + Function: sf net regist manual Description: net reg Input: N/A Output: N/A Return: 0 SUCCESS, 1 error Others: N/A *************************************************/ -SINT32 sf_quectel_net_regist(void) +SINT32 sf_net_regist_manual(void) { SINT32 ret = SF_SUCCESS; - #if 0 + //UINT8 gsmPara[GPRS_INFO_LINE_MAX] = {0}; SF_QUECTEL_NETREG_E eNetRegLocation = QUECTEL_NETREG_FRIST; UINT16 callTime = 0; @@ -2931,11 +2982,11 @@ SINT32 sf_quectel_net_regist(void) if(sf_auto_operation_adjust() == FAIL) { SLOGE(gsmPara); - sprintf((char *)logStr, "Auto Operation Fail,MCCMNC:%s", puiPara->OperatorCode); + sprintf((char *)logStr, "Auto Operation Fail,MCCMNC:%s\n", puiPara->OperatorCode); SLOGE(logStr); ret = SF_SIM_ERROR_APN; - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(logStr); //sf_guide_operator_match_status_set(); @@ -2943,7 +2994,7 @@ SINT32 sf_quectel_net_regist(void) } else { - sprintf((char *)logStr, "Auto Operation Success,MCCMNC:%s", puiPara->OperatorCode); + sprintf((char *)logStr, "Auto Operation Success,MCCMNC:%s\n", puiPara->OperatorCode); SLOGI(logStr); } @@ -2982,7 +3033,7 @@ SINT32 sf_quectel_net_regist(void) { ret = SF_SIM_ERROR_APN; SLOGE(gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(logStr); goto SF_NET_REG_END; } @@ -2995,7 +3046,7 @@ SINT32 sf_quectel_net_regist(void) { ret = SF_SIM_ERROR_APN; SLOGE(gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(logStr); goto SF_NET_REG_END; } @@ -3089,7 +3140,7 @@ SINT32 sf_quectel_net_regist(void) if(strstr((const char *)gsmPara, "OK") != NULL) { - if(sf_4g_uart_restart(1) == SUCCESS) + if(sf_ttyusb_restart() == SUCCESS) { callTime = 0; time = 0; @@ -3100,7 +3151,7 @@ SINT32 sf_quectel_net_regist(void) ret = SF_SIM_ERROR_REG_NET; printf("[%s:%d] tty usb restart err.\n", __FUNCTION__, __LINE__); SLOGE(gsmPara); - sprintf((char *)logStr, "[%s:%d] tty usb restart err,Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)logStr, "[%s:%d] tty usb restart err,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(logStr); goto SF_NET_REG_END; } @@ -3109,7 +3160,7 @@ SINT32 sf_quectel_net_regist(void) break; case QUECTEL_NETREG_MODULE_RESTART: - ret = sf_quectel_module_complete_init(); + ret = sf_module_complete_init(); if(ret == SF_SUCCESS) { @@ -3201,9 +3252,9 @@ SINT32 sf_quectel_net_regist(void) { ret = SF_SIM_ERROR_REG_NET; printf("[%s:%d]AT+CGREG? Timeout.\n", __FUNCTION__, __LINE__); - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]AT+CGREG? Timeout,Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]AT+CGREG? Timeout,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } } @@ -3262,8 +3313,8 @@ SINT32 sf_quectel_net_regist(void) AddCimiTimes++; time = 0; - sf_set_netsearch_step(GPRS_SEARCH_STEP_RETRYING); - sp5kHostMsgSend(APP_UI_MSG_TRANSFER_REFLUSH, 0, 0, 0); + //sf_set_netsearch_step(GPRS_SEARCH_STEP_RETRYING); + //sp5kHostMsgSend(APP_UI_MSG_TRANSFER_REFLUSH, 0, 0, 0); } else //cimi already exist { @@ -3370,9 +3421,9 @@ SINT32 sf_quectel_net_regist(void) if(callTime > 10) { ret = SF_SIM_ERROR_AT_TIMEOUT; - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } } @@ -3412,9 +3463,9 @@ SINT32 sf_quectel_net_regist(void) else { ret = SF_SIM_ERROR_NO_SIGNAL; - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } } @@ -3425,9 +3476,9 @@ SINT32 sf_quectel_net_regist(void) if(callTime > 10) { ret = SF_SIM_ERROR_AT_TIMEOUT; - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } } @@ -3435,7 +3486,7 @@ SINT32 sf_quectel_net_regist(void) break; case QUECTEL_NETREG_CSQ: - sf_normal_log((SINT8 *)gsmPara); + SLOGI(gsmPara); if(strstr((const char *)gsmPara, "OK")) { @@ -3464,9 +3515,9 @@ SINT32 sf_quectel_net_regist(void) callTime = 0; ret = SF_SIM_ERROR_NO_SIGNAL; - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } else @@ -3483,7 +3534,7 @@ SINT32 sf_quectel_net_regist(void) ret = SF_SIM_ERROR_NO_SIGNAL; SLOGE(gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(logStr); goto SF_NET_REG_END; } @@ -3502,9 +3553,9 @@ SINT32 sf_quectel_net_regist(void) if(callTime > 10) { ret = SF_SIM_ERROR_AT_TIMEOUT; - SLOGE((SINT8 *)gsmPara); - sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); - SLOGE((SINT8 *)logStr); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); goto SF_NET_REG_END; } } @@ -3522,9 +3573,8 @@ SINT32 sf_quectel_net_regist(void) if(pTemp != NULL) { - memset(OperatorNameL, '\0', sizeof(OperatorNameL)); - strcpy((char *)OperatorNameL, pTemp); - SF_LOG("OperatorNameL=%s", OperatorNameL); + snprintf(puiPara->ServiceProvider, sizeof(puiPara->ServiceProvider), "%s", pTemp); + SF_LOG("OperatorNameL=%s", puiPara->ServiceProvider); } } @@ -3553,12 +3603,12 @@ SINT32 sf_quectel_net_regist(void) default: break; } - - sf_4g_get_data(gsmPara, 200, 1); + sf_gsm_para_buff_clear(); + sf_hal_ttyusb2_read(gsmPara, 200); if(gsmPara[0] != '\0') { - printf("eNetRegLocation:%d\ngsmPara:%s\n", eNetRegLocation, gsmPara); + MLOGD("eNetRegLocation:%d\ngsmPara:%s\n", eNetRegLocation, gsmPara); } time++; @@ -3567,7 +3617,7 @@ SINT32 sf_quectel_net_regist(void) { time = 0; SLOGE(gsmPara); - sprintf((char *)logStr, "[%s:%d]Wait Init Timeout.", __FUNCTION__, __LINE__); + sprintf((char *)logStr, "[%s:%d]Wait Init Timeout.\n", __FUNCTION__, __LINE__); printf("%s,GprsMode=%d\n", logStr, puiPara->GprsMode); SLOGE(logStr); @@ -3579,10 +3629,561 @@ SINT32 sf_quectel_net_regist(void) SF_NET_REG_END: printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); -#endif + return ret; } + +/***************************************************** + Function: sf_auto_net_reg + Description: net reg, for auto start mdoe. + Input: N/A + Output: N/A + Return: 0 SUCCESS, 1 error + Others: N/A +*****************************************************/ +SINT32 sf_auto_net_reg(void) +{ + SINT32 ret = SF_SUCCESS; + //UINT8 gsmPara[GPRS_INFO_LINE_MAX] = {0}; + SF_QUECTEL_NETREG_E eNetRegLocation = QUECTEL_NETREG_FRIST; + UINT16 callTime = 0; + UINT16 time = 0; + UINT32 mm = 0; + SINT32 ttyRet = 0; + //UINT8 strSave[21] = {0}; + //UINT8 strNow[21] = {0}; + UINT8 strtmp[12][70] = { { 0 } }; + UINT8 netStr[16] = { 0 }; + UINT8 cqSignal = 0; + char *pTemp = NULL; + char *delim = NULL; + + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + + SF_LOG(" s"); + + //needRecordLogFlag = 1; + puiPara->NetGeneration = 0; + + sf_gsm_para_buff_clear(); + + while(sf_app_while_flag()) + { + switch(eNetRegLocation) + { + case QUECTEL_NETREG_FRIST: + + if(strstr((const char *)gsmPara, "OK")) + { + strcpy((char *)gsmPara, "AT+QSIMSTAT?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + eNetRegLocation = QUECTEL_NETREG_QSIMSTAT; + } + else if(strstr((const char *)gsmPara, "ERROR")) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + else + { + strcpy((char *)gsmPara, "ATE1\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_NETREG_QSIMSTAT: + + if((strstr((const char *)gsmPara, "+QSIMSTAT: 0,0")) || (strstr((const char *)gsmPara, "+CPIN: NOT INSERTED"))) + { + callTime++; + + if(callTime >= 75) + { + ret = SF_SIM_ERROR_NO_SIMCARD; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]ErrorCode=0x%08x,Simcard Not Inserted.", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + SF_ERROR("ErrorCode=0x%08x,Simcard Not Inserted.", ret); + sf_set_sim_insert(0); + sf_set_cq_signal(0); + SF_LOG("AT+QSIMSTAT? Timeout"); + goto SF_MODULE_END; + } + + strcpy((char *)gsmPara, "AT+QSIMSTAT?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + break; + } + else if(strstr((const char *)gsmPara, "+QSIMSTAT: 0,1")) + { + if(PWR_ON_SMS == sf_convert_power_on_mode()) + { + eNetRegLocation = QUECTEL_NETREG_CGREG; + strcpy((char *)gsmPara, "AT+CGREG?\r"); + } + else + { + eNetRegLocation = QUECTEL_NETREG_QLWCFG_URC; + strcpy((char *)gsmPara, "AT+QLWCFG=\"startup\",0\r"); + } + + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + else if((strstr((const char *)gsmPara, "+QSIMSTAT: 0,2"))) + { + callTime++; + + if(callTime >= 75) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]ErrorCode=0x%08x,Unknown, before (U)SIM initialization.\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + SF_ERROR("ErrorCode=0x%08x,Unknown, before (U)SIM initialization.", ret); + sf_set_sim_insert(0); + sf_set_cq_signal(0); + SF_LOG("AT+QSIMSTAT? Timeout"); + goto SF_MODULE_END; + } + + strcpy((char *)gsmPara, "AT+QSIMSTAT?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + break; + } + else + { + callTime++; + + if(callTime > 10) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + + strcpy((char *)gsmPara, "AT+QSIMSTAT?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_NETREG_QLWCFG_URC: + + if(strstr((const char *)gsmPara, "OK")) + { + eNetRegLocation = QUECTEL_NETREG_QLWCFG_STARTUP; + strcpy((char *)gsmPara, "AT+QCFG=\"tcp/windowsize\",1,100\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + //DelayTime = 50; + } + + break; + + case QUECTEL_NETREG_QLWCFG_STARTUP: + + if(strstr((const char *)gsmPara, "OK")) + { + eNetRegLocation = QUECTEL_NETREG_CGDCONT; + //DelayTime = 200; + + if(strstr((const char *)puiPara->Sim4gApn, APN_4G_VERIZON)) + { + callTime = SF_QUECTEL_NET_REG_CALLTIME_MAX; /*4 min*/ + eNetRegLocation = QUECTEL_NETREG_CGREG; + strcpy((char *)gsmPara, "AT+CGREG?\r"); + } + else if(strstr((const char *)puiPara->Sim4gApn, APN_4G_ATT)) + { + sprintf((char *)gsmPara, "AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r", puiPara->Sim4gApn); + } + else + { + sprintf((char *)gsmPara, "%s", "AT+CGDCONT=1,\"IPV4V6\",\"\"\r"); + } + + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + + break; + + case QUECTEL_NETREG_CGDCONT: + + if(strstr((const char *)gsmPara, "OK")) + { + eNetRegLocation = QUECTEL_NETREG_CGREG; + strcpy((char *)gsmPara, "AT+CGREG?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + + callTime = SF_QUECTEL_NET_REG_CALLTIME_MAX; /*4 min*/ + } + + break; + + case QUECTEL_NETREG_CGREG: +#if MEGA_TEST + + if(puiPara->MegaTestSwitch == 1) + { + strcpy((char *)gsmPara, "sftest\n"); + } + +#endif + + if((strstr((const char *)gsmPara, "+CGREG: 0,1") != NULL) || (strstr((const char *)gsmPara, "+CGREG: 0,5") != NULL)) + { + SLOGI(gsmPara); + eNetRegLocation = QUECTEL_NETREG_QNWINFO; + strcpy((char *)gsmPara, "AT+QNWINFO\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + callTime = 0; + } + else + { + callTime--; + sprintf((char *)gsmPara, "AT+CGREG?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + + sf_sleep_ms(300); + + if(callTime == 0) + { + if((strstr((const char *)puiPara->Sim4gApn, APNGPRS_WUYUAN1)) || (strstr((const char *)puiPara->Sim4gApn, APNGPRS_WUYUAN2))) + { + if(AddCimiTimes == 5) + { + simErrorCode = SIM_NO_SIGNAL; + printf("[%s:%d]:aleady match five cimi,end to AT+CGREG?simErrorCode:%d\n", __FUNCTION__, __LINE__, simErrorCode); + ret = SF_SIM_ERROR_MEGA; + goto SF_MODULE_END; + } + else + { + eNetRegLocation = QUECTEL_NETREG_CIMI_2; + sprintf((char *)gsmPara, "AT+CIMI\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + } + } + else + { + ret = SF_SIM_ERROR_REG_NET; + printf("[%s:%d]AT+CGREG? Timeout.\n", __FUNCTION__, __LINE__); + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]AT+CGREG? Timeout,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + } + + break; + + case QUECTEL_NETREG_CIMI_2: + + if(strstr((const char *)gsmPara, "OK")) + { + SLOGI(gsmPara); + + delim = " \r\n"; + pTemp = strtok((char *)strstr((const char *)gsmPara, "AT+CIMI"), delim); + mm = 0; + memset(strtmp, '\0', sizeof(strtmp)); + while((pTemp != NULL) && (mm < 12)) + { + strcpy((char *)strtmp[mm], (const char *)pTemp); + printf("---pTemp[%d]:%s\n", mm, pTemp); + mm++; + pTemp = strtok((char *)0, delim); + } + + if(((strtmp[1][0] - '0') >= 0) && ((strtmp[1][0] - '0') <= 9) && ((strtmp[1][5] - '0') >= 0) && ((strtmp[1][5] - '0') <= 9)) + { + memset(puiPara->OperatorCode, '\0', sizeof(puiPara->OperatorCode)); + strncpy((char *)puiPara->OperatorCode, (const char *)strtmp[1], 5); + strncpy((char *)SimImei, (const char *)strtmp[1], 5); + } + } + + callTime = SF_QUECTEL_NET_REG_CALLTIME_MAX; /*4 min*/ +#if MEGA_TEST + + if(puiPara->MegaTestSwitch == 1) + { + if((sf_test_mode_cimi() == FAIL) && (time < 200)) //wait 200s to scanf cimi,then copy to strok; + { + break; //no scanf,then break,enter next while; + } + + callTime = puiPara->NetRegCalltime; + } + +#endif + + if(sf_add_cimi_id((char *)SimImei) == SUCCESS) //new cimi,total cimi:5 + { + printf("[%s:%d]:puiPara->OperatorCode:%s,new cimi:%s\n", __FUNCTION__, __LINE__, puiPara->OperatorCode, SimImei); + eNetRegLocation = QUECTEL_NETREG_CGREG; //return net reg. + sprintf((char *)gsmPara, "AT+CGREG?\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + AddCimiTimes++; + time = 0; + + //sf_set_netsearch_step(GPRS_SEARCH_STEP_RETRYING); + //sp5kHostMsgSend(APP_UI_MSG_TRANSFER_REFLUSH, 0, 0, 0); + } + else //cimi already exist + { + simErrorCode = SIM_MEGA_ERROR; + printf("[%s:%d]:exist cimi,end to AT+CGREG?simErrorCode:%d\n", __FUNCTION__, __LINE__, simErrorCode); + ret = SF_SIM_ERROR_MEGA; + goto SF_MODULE_END; + } + + break; + + case QUECTEL_NETREG_QNWINFO: + + if(strstr((const char *)gsmPara, "+QNWINFO:") != NULL) + { + SLOGI(gsmPara); + + if(strstr((const char *)gsmPara, "No Service")) + { + puiPara->NetGeneration = 2; + } + else if(NULL != strtok((char *)(char *)gsmPara, "\"")) + { + strcpy((char *)netStr, strtok((char *)NULL, "\"")); + SF_LOG("netStr=%s", netStr); + + if((strstr((const char *)netStr, "DD") != NULL)) + { + puiPara->NetGeneration = 4; + } + else if(strstr((const char *)netStr, "CDMA") != NULL || strstr((const char *)netStr, "HDR") != NULL || strstr((const char *)netStr, "HSUPA") != NULL + || strstr((const char *)netStr, "HSDPA") != NULL || (strstr((const char *)netStr, "HSPA+") != NULL)) + { + puiPara->NetGeneration = 3; + } + else if(strstr((const char *)netStr, "CMDA") != NULL || strstr((const char *)netStr, "G") != NULL) + { + puiPara->NetGeneration = 2; + } + else + { + puiPara->NetGeneration = 2; + } + } + + if(puiPara->NetGeneration == 4) + { + eNetRegLocation = QUECTEL_NETREG_QCSQ; + strcpy((char *)gsmPara, "AT+QCSQ\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + callTime = 0; + } + else + { + eNetRegLocation = QUECTEL_NETREG_CSQ; + strcpy((char *)gsmPara, "AT+CSQ\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + callTime = 0; + } + } + else + { + callTime++; + + if(callTime > 10) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + + break; + + case QUECTEL_NETREG_QCSQ: + + if(strstr((const char *)gsmPara, "+QCSQ:")) + { + if(sf_qcsq_decode(gsmPara, &cqSignal) == SUCCESS) + { + if(cqSignal == 0) + { + callTime++; + + if(callTime <= 10) + { + strcpy((char *)gsmPara, "AT+QCSQ\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + break; + } + + /*else + { + cqSignal = 105; //QCSQ=0 is module bug + }*/ + } + + sf_set_cq_signal(cqSignal); + + goto SF_MODULE_END; + } + else + { + ret = SF_SIM_ERROR_NO_SIGNAL; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + else + { + callTime++; + + if(callTime > 10) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + + break; + + case QUECTEL_NETREG_CSQ: + SLOGI(gsmPara); + + if(strstr((const char *)gsmPara, "OK")) + { + delim = " ,\r\n"; + pTemp = strtok((char *)strstr((const char *)gsmPara, "+CSQ:"), delim); + mm = 0; + memset(strtmp, '\0', sizeof(strtmp)); + + while((pTemp != NULL) && (mm < 20)) + { + strcpy((char *)strtmp[mm], (const char *)pTemp); + printf("[%s:%d]pTemp[%d]:%s\n", __FUNCTION__, __LINE__, mm, pTemp); + mm++; + pTemp = strtok((char *)0, delim); + } + + cqSignal = (atoi((const char *)strtmp[1])); + sf_set_cq_signal(cqSignal); + + if(cqSignal > 31) + { + callTime++; + + if(callTime > 10) + { + callTime = 0; + + ret = SF_SIM_ERROR_NO_SIGNAL; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + else + { + strcpy((char *)gsmPara, "AT+CSQ\r"); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); + SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); + sf_sleep_ms(300); + } + } + else if(cqSignal <= 1) + { + callTime = 0; + + ret = SF_SIM_ERROR_NO_SIGNAL; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + else + { + goto SF_MODULE_END; + } + } + else + { + callTime++; + + if(callTime > 10) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); + SLOGE(logStr); + goto SF_MODULE_END; + } + } + + break; + + default: + break; + } + + sf_gsm_para_buff_clear(); + sf_hal_ttyusb2_read(gsmPara, 200); + + if(gsmPara[0] != '\0') + { + MLOGD("eNetRegLocation:%d\ngsmPara:%s\n", eNetRegLocation, gsmPara); + } + + time++; + + if(time > 800) + { + ret = SF_SIM_ERROR_AT_TIMEOUT; + SLOGE(gsmPara); + sprintf((char *)logStr, "[%s:%d]Wait Init Timeout.\n", __FUNCTION__, __LINE__); + SLOGE(logStr); + time = 0; + goto SF_MODULE_END; + } + } + + SF_MODULE_END: + printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); + return ret; +} + void sf_set_netsearch_step(UINT8 stepValue) { gprs_search_process = stepValue; @@ -4279,6 +4880,50 @@ SINT32 sf_4g_set_module_minimun_fun(void) return ret; } +void sf_gprs_wait_network_scan_finish(UINT8 refresh) +{ + + if(NetworkScan == TRUE) + { + //sf_gprs_network_ready(refresh); + + while(NetworkScan == TRUE) + { + sleep(1000); + } + + GprsNetWorkReady = FALSE; + //sf_wait_at_ready(); + } +} + +SINT32 sf_add_cimi_id(char *cimi) +{ + int ret = SUCCESS; + sf_cimi_id_t *n; + sf_cimi_id_t *nck; + + for(nck = cimi_head.next; nck != NULL; nck = nck->next) + { + printf("[%s:%d]old:nck->id:%d,nck->cimi:%s\n\n", __FUNCTION__, __LINE__, nck->id, nck->cimi); + + if(strstr((const char *)nck->cimi, cimi) || ((nck->id) >= 5)) + { + return nck->id; + } + } + + n = malloc(sizeof(sf_cimi_id_t)); + memset(n->cimi, '\0', sizeof(n->cimi)); + strncpy((char *)n->cimi, cimi, 5); + n->id = cimi_head.id++; + + printf("[%s:%d]new:n->id:%d,n->cimi:%s\n", __FUNCTION__, __LINE__, n->id, n->cimi); + n->next = cimi_head.next; + cimi_head.next = n; + + return ret; +} #ifdef __cplusplus #if __cplusplus diff --git a/code/application/source/sf_app/code/source/4gMng/sf_ftp.c b/code/application/source/sf_app/code/source/4gMng/sf_ftp.c index 9d00df41c..1db293b7b 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_ftp.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_ftp.c @@ -45,6 +45,8 @@ extern "C" { #include "sf_file.h" #include "sf_storeMng.h" #include "sf_service.h" +#include "sf_sms.h" +#include "sf_ledmng.h" /************************************************************************** * C O N S T A N T S * **************************************************************************/ @@ -98,6 +100,7 @@ UINT8 smtpUploadVideoFlag = 0; /*0:smtp upload video fail; 1:success.*/ UINT8 sendPicSuccessFlag = 0; UINT8 sendVideoSuccessFlag = 0; UINT8 DailyReportFtpSendSucess = 0; +SINT32 FtpOpenOk = FAIL; extern char logStr[128]; extern char gsmPara[GPRS_INFO_LINE_MAX]; @@ -156,7 +159,7 @@ SINT32 sf_check_max_num(void) if(ret != SF_SUCCESS) { sprintf((char *)errMsg, "[%s:%d]Reach Max Num/Day Limit,Error Code:0x%08x", __FUNCTION__, __LINE__, ret); - sf_error_log((SINT8 *)errMsg); + SLOGE((SINT8 *)errMsg); }*/ ret = SF_SUCCESS; @@ -174,7 +177,6 @@ SINT32 sf_check_max_num(void) *************************************************/ SINT32 sf_ftp_config(UINT8 ssl, UINT8 GprsMode, UINT8 timeout) { -#if 1 SINT32 ret = SF_SUCCESS; FTP_SIM_E eFtpLocation = FTP_SIM_CGDCONT; SINT32 ttyRet = 0; @@ -490,10 +492,12 @@ SINT32 sf_ftp_config(UINT8 ssl, UINT8 GprsMode, UINT8 timeout) SF_FTP_END_CONFIG: printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); - return ret; + if(SF_SUCCESS != ret){ + sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL); + } + FtpOpenOk = ret; -#endif - return 0; + return ret; } /************************************************* @@ -506,8 +510,6 @@ SINT32 sf_ftp_config(UINT8 ssl, UINT8 GprsMode, UINT8 timeout) *************************************************/ SINT32 sf_ftp_send(UINT8 *ftpFileName, UINT8 *filePath, UINT8 timeout) { -#if 1 - SINT32 ret = SF_SUCCESS; FTP_SIM_E eFtpLocation = FTP_SIM_CFTPSCFG; SINT32 ttyRet = 0; @@ -626,9 +628,6 @@ SINT32 sf_ftp_send(UINT8 *ftpFileName, UINT8 *filePath, UINT8 timeout) SF_FTP_SEND_END: printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); return ret; - -#endif - return 0; } /************************************************* @@ -641,8 +640,6 @@ SINT32 sf_ftp_send(UINT8 *ftpFileName, UINT8 *filePath, UINT8 timeout) *************************************************/ SINT32 sf_ftp_stop(UINT8 ssl, UINT8 GprsMode) { -#if 1 - SINT32 ret = SF_SUCCESS; FTP_SIM_E eFtpLocation = FTP_SIM_CFTPSLOGOUT; SINT32 ttyRet = 0; @@ -802,9 +799,6 @@ SINT32 sf_ftp_stop(UINT8 ssl, UINT8 GprsMode) SF_FTP_STOP_END: printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); return ret; - -#endif - return 0; } SINT32 sf_pic_send_ftp(void) @@ -1019,7 +1013,7 @@ SINT32 sf_video_send_ftp(void) return ret; } -SINT32 sf_simcom_ftp_dailyreport_send(void) +SINT32 sf_ftp_dailyreport_send(void) { SINT32 ret = SF_SUCCESS; //UINT8 CamNameStr[20] = { 0 }; @@ -1125,14 +1119,14 @@ SINT32 sf_check_ftp_send(UINT8 mode) } /************************************************* - Function: sf_simcom_ftp_send + Function: sf send file to ftp Description: ftp send. Input: 1:send pic/video. 2:send dr. Output: N/A Return: 0:success; else:fail; Others: N/A *************************************************/ -SINT32 sf_simcom_ftp_send(UINT8 mode) +SINT32 sf_send_file_to_ftp(UINT8 mode) { SINT32 ret1 = SF_SUCCESS; //0:success; else:fail; SINT32 ret2 = SF_SUCCESS; //0:success; else:fail; @@ -1217,7 +1211,7 @@ SINT32 sf_simcom_ftp_send(UINT8 mode) } else { - ret1 = sf_simcom_ftp_dailyreport_send(); + ret1 = sf_ftp_dailyreport_send(); } } @@ -1352,7 +1346,7 @@ SINT32 sf_4g_module_ota_ftp(void) time = 250; calltime = 0; SF_SPRINTF(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -1371,7 +1365,7 @@ SINT32 sf_4g_module_ota_ftp(void) { case OTA_FTP_FRIST: SF_SPRINTF(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_CURVER; @@ -1381,14 +1375,14 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara,"OK")) { SF_SPRINTF(gsmPara, "AT+QGMR\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QICSGP; } else { SF_SPRINTF(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1425,7 +1419,7 @@ SINT32 sf_4g_module_ota_ftp(void) location=OTA_FTP_QIACT; } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -1438,7 +1432,7 @@ SINT32 sf_4g_module_ota_ftp(void) else { SF_SPRINTF(gsmPara, "AT+QGMR\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1456,7 +1450,7 @@ SINT32 sf_4g_module_ota_ftp(void) SF_SPRINTF(gsmPara, "AT\r"); } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QIACT; } @@ -1476,7 +1470,7 @@ SINT32 sf_4g_module_ota_ftp(void) location = OTA_FTP_QFTPCFG1; } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); calltime=0; } @@ -1488,7 +1482,7 @@ SINT32 sf_4g_module_ota_ftp(void) { sf_pdp_flg_set(1); SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"contextid\",%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPCFG2; calltime=0; @@ -1499,7 +1493,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(calltime < 6) { SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); appTimeDelayMs(1800); } @@ -1508,9 +1502,9 @@ SINT32 sf_4g_module_ota_ftp(void) location = OTA_FTP_QIDEACT; calltime=0; errorCode = SF_OTA_ERROR_QIACT; - sf_error_log((SINT8 *)"[ERROR]OTA_FTP QIACT over try 6 times"); + SLOGE((SINT8 *)"[ERROR]OTA_FTP QIACT over try 6 times"); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -1521,7 +1515,7 @@ SINT32 sf_4g_module_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"account\",\"%s\",\"%s\"\r", ftpUsername, ftpPassword); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPCFG3; } @@ -1531,7 +1525,7 @@ SINT32 sf_4g_module_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"filetype\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPCFG4; } @@ -1542,7 +1536,7 @@ SINT32 sf_4g_module_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"transmode\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location=OTA_FTP_QFTPCFG5; } @@ -1553,7 +1547,7 @@ SINT32 sf_4g_module_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"restenable\",0\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location=OTA_FTP_QFTPOPEN; } @@ -1564,7 +1558,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPOPEN=\"%s\",%s\r", ftpIp, ftpPort); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPNLST; } @@ -1577,7 +1571,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara, "+QFTPOPEN: 0")) { SF_SPRINTF(gsmPara, "AT+QFTPNLST=\"%s\",\"COM:\"\r", DFOTA_OTA_DIR); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPGETCFG; } @@ -1585,9 +1579,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location = OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_OPEN; - sf_error_log((SINT8 *)"OTA_FTP Open Failed."); + SLOGE((SINT8 *)"OTA_FTP Open Failed."); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -1595,9 +1589,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location = OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_OPEN; - sf_error_log((SINT8 *)"OTA_FTP QFTPOPEN CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFTPOPEN CME ERROR."); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1609,7 +1603,7 @@ SINT32 sf_4g_module_ota_ftp(void) if((SF_STRSTR(gsmPara, cfgfilename)!= NULL) && (SF_STRSTR(gsmPara, updatafilename)!= NULL)) { SF_SPRINTF(gsmPara, "AT+QFTPGET=\"%s/%s\",\"RAM:%s\"\r", DFOTA_OTA_DIR, cfgfilename, cfgfilename); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFTPCLOSE; } @@ -1617,9 +1611,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location = OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_NLST; - sf_error_log((SINT8 *)"OTA_FTP NO NEED UPDATA FILE."); + SLOGE((SINT8 *)"OTA_FTP NO NEED UPDATA FILE."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -1627,9 +1621,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location = OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_NLST; - sf_error_log((SINT8 *)"OTA_FTP QFTPNLST CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFTPNLST CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1641,7 +1635,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara, "+QFTPGET: 0")) { SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QIDEACT; } @@ -1649,9 +1643,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location = OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; - sf_error_log((SINT8 *)"OTA_FTP GET CFG FILE FAIL."); + SLOGE((SINT8 *)"OTA_FTP GET CFG FILE FAIL."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -1659,9 +1653,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location= OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; - sf_error_log((SINT8 *)"OTA_FTP QFTPGET CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFTPGET CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1673,7 +1667,7 @@ SINT32 sf_4g_module_ota_ftp(void) calltime = 0; SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); sf_pdp_flg_set(0); @@ -1689,7 +1683,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFOPEN=\"RAM:%s\",2\r", cfgfilename); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_SEEKCFG; } @@ -1699,7 +1693,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(calltime < 6) { SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); appTimeDelayMs(1800); sf_pdp_flg_set(0); @@ -1709,9 +1703,9 @@ SINT32 sf_4g_module_ota_ftp(void) location = OTA_FTP_END; calltime=0; errorCode = SF_OTA_ERROR_FTP_QIDEACT; - sf_error_log((SINT8 *)"[ERROR]OTA_FTP QIDEACT over try 6 times"); + SLOGE((SINT8 *)"[ERROR]OTA_FTP QIDEACT over try 6 times"); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -1726,13 +1720,13 @@ SINT32 sf_4g_module_ota_ftp(void) printf("cfgfilehandle=%s\n",cfgfilehandle); SF_SPRINTF(gsmPara, "AT+QFSEEK=%s,10,0\r", cfgfilehandle); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_READCFG; } else if(SF_STRSTR(gsmPara, "+CME ERROR")) { - sf_error_log((SINT8 *)"OTA_FTP QFOPEN CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFOPEN CME ERROR."); location= OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_OPEN; } @@ -1743,7 +1737,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFREAD=%s,117\r", cfgfilehandle); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); appTimeDelayMs(500); location = OTA_FTP_CLOSECFG; @@ -1752,9 +1746,9 @@ SINT32 sf_4g_module_ota_ftp(void) { location= OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_QFSEEK; - sf_error_log((SINT8 *)"OTA_FTP QFSEEK CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFSEEK CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1776,7 +1770,7 @@ SINT32 sf_4g_module_ota_ftp(void) printf("dstVersion=%s\n",desVersion); SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QFOTADL; } @@ -1784,20 +1778,20 @@ SINT32 sf_4g_module_ota_ftp(void) { printf("DFOTA.CFG READ error\n"); printf("gsmPara=%s\n",gsmPara); - sf_error_log((SINT8 *)"OTA_FTP CFG FILE FORMAT ERROR."); + SLOGE((SINT8 *)"OTA_FTP CFG FILE FORMAT ERROR."); SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle); location= OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_CFGFORMAT; - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else if(SF_STRSTR(gsmPara, "+CME ERROR")) { - sf_error_log((SINT8 *)"OTA_FTP QFREAD CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFREAD CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle); location= OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_QFREAD; - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -1818,7 +1812,7 @@ SINT32 sf_4g_module_ota_ftp(void) //SF_SPRINTF(gsmPara, "AT+QFOTADL=\"FTP://%s:%s@%s:%s/DFOTA/%s\"\r", convertUsername, convertPassword, ftpIp, ftpPort,updatafilename); SF_SPRINTF(gsmPara, "AT+QFOTADL=\"FTP://%s:%s@%s:%s/%s/%s\"\r", ftpUsername, ftpPassword, ftpIp, ftpPort, DFOTA_OTA_DIR, updatafilename); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_DOWNLOAD; } @@ -1867,8 +1861,8 @@ SINT32 sf_4g_module_ota_ftp(void) printf("gsmPara:%s\n", gsmPara); time = 0; printf("DOWMLOAD ERROR\n"); - sf_error_log((SINT8 *)"OTA Download error"); - sf_error_log((SINT8 *)gsmPara); + SLOGE((SINT8 *)"OTA Download error"); + SLOGE((SINT8 *)gsmPara); errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; sts = OTA_DOWNLOAD_ERROR; } @@ -1880,7 +1874,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(calltime >= 600) { - sf_error_log((SINT8 *)"OTA Download timeout"); + SLOGE((SINT8 *)"OTA Download timeout"); errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; sts = OTA_TIME_OUT; } @@ -1949,8 +1943,8 @@ SINT32 sf_4g_module_ota_ftp(void) printf("gsmPara:%s\n", gsmPara); time = 0; printf("UPDATED ERROR\n"); - sf_error_log((SINT8 *)"OTA update error"); - sf_error_log((SINT8 *)gsmPara); + SLOGE((SINT8 *)"OTA update error"); + SLOGE((SINT8 *)gsmPara); errorCode = SF_OTA_ERROR_FTP_UPDATE; sts = OTA_UPDATED_ERROR; @@ -1995,7 +1989,7 @@ SINT32 sf_4g_module_ota_ftp(void) if(calltime >= 200) { - sf_error_log((SINT8 *)"OTA update timeout"); + SLOGE((SINT8 *)"OTA update timeout"); errorCode = SF_OTA_ERROR_FTP_UPDATE; sts = OTA_UPDATED_ERROR; @@ -2023,7 +2017,7 @@ SINT32 sf_4g_module_ota_ftp(void) appTimeDelayMs(300); printf("UPDATE END\n"); SF_SPRINTF(gsmPara, "AT+QGMR\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_CHECK; } @@ -2064,14 +2058,14 @@ SINT32 sf_4g_module_ota_ftp(void) else { SF_SPRINTF(gsmPara, "AT+QGMR\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } break; case OTA_FTP_END: SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); sts = OTA_FAIL; break; @@ -2157,311 +2151,36 @@ SINT32 sf_4g_module_ota_ftp(void) Return: SUCCESS/FAIL Others: N/A *************************************************/ -UINT32 sf_connect_ftps_server(void) +SINT32 sf_connect_ftps_server(void) { - UINT32 ftpOpenOk = FAIL; - #if 0 - UINT32 location = FTP_ATQICSGP; - UINT32 sts = 0; - UINT16 time = 0; - UINT16 calltime=0; - UINT8 pdpIndex = 0; - SINT32 ttyRet = 0; + SINT32 ret = SF_SUCCESS;//0:success; else:fail; + UINT8 ssl = 0; + UINT8 gprsMode = 0; + UINT8 timeout = 30; + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - uiPara_t *pPara = appUiParaGet(); + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); - printf("sf_Connect_ftps_server s\n"); + ssl = ((2 == puiPara->FtpSwitch) ? 1 : 0); + gprsMode = 0;//puiPara->GprsMode; + printf("[%s:%d] ssl:%d,GprsMode:%d\n", __FUNCTION__, __LINE__, ssl, gprsMode); - while((sts == 0) && (!IS_USB_IN) && (POWEROFF != 1) && (ModuleUpdating != 1) && (FwUpdate == 0)) + if(((puiPara->CamMode == SF_CAM_MODE_VIDEO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) && (puiPara->SendVideoSwitch == 1) && (puiPara->NetGeneration == 4)) //video { - if(!ConfigureModeFlag) - sf_mcu_dataready_get(); //Read MCU must be after reading uart data - - time++; - if(time >= 300) - { - printf("connect ftps timeout!\n"); - location = FTP_JPG0; - time = 250; - } - - sf_4g_get_data(gsmPara, 200, 1); - printf("time=%d mmc=%d\n", time, location); - sf_tty_data_printf(gsmPara); - - switch(location) - { - case FTP_ATQICSGP: - if(SF_STRSTR(pPara->Sim4gApn, APN_4G_VERIZON)) - { - pdpIndex = V_PDP_INDEX; - SF_SPRINTF(gsmPara,"AT+QICSGP=%d\r", V_PDP_INDEX); - location = FTP_ATQICSGP1; - } - else if(SF_STRSTR(pPara->Sim4gApn, APN_4G_ATT)) - { - pdpIndex = A_PDP_INDEX; - SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",A_PDP_INDEX, pPara->Sim4gApn,pPara->Sim4gUserName,pPara->Sim4gPassword); - location = FTP_ATQFTPCFG0; - } - else - { - pdpIndex = E_PDP_INDEX; - SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",E_PDP_INDEX, pPara->Sim4gApn,pPara->Sim4gUserName,pPara->Sim4gPassword); - location = FTP_ATQFTPCFG0; - } - - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - - break; - - case FTP_ATQICSGP1: - if(SF_STRSTR(gsmPara, "OK")) - { - if(SF_STRSTR(gsmPara, "+QICSGP: 0") || SF_STRSTR(gsmPara, "+QICSGP: 1,\"\"")) - { - SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",V_PDP_INDEX, pPara->Sim4gApn,pPara->Sim4gUserName,pPara->Sim4gPassword); - } - else - { - SF_SPRINTF(gsmPara, "AT\r"); - } - - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location = FTP_ATQFTPCFG0; - } - break; - - case FTP_ATQFTPCFG0: - if(SF_STRSTR(gsmPara, "OK")) - { - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"contextid\",%d\r", pdpIndex); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - } - break; - - case FTP_ATQFTPCFG1: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"account\",\"%s\",\"%s\"\r",pPara->FtpUserName,pPara->FtpPassWord); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - #if SF_NEW_AT_FLOW - location = FTP_QSSLCFG0; - #else - location = FTP_ATQFTPCFG2; - #endif - break; - - case FTP_ATQFTPCFG2: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"filetype\",0\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - break; - - case FTP_ATQFTPCFG3: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"transmode\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location=FTP_QSSLCFG0; - break; - - case FTP_QSSLCFG0: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"restenable\",0\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - break; - - case FTP_QSSLCFG1: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"ssltype\",2\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - break; - - case FTP_QSSLCFG2: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"sslctxid\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - #if SF_NEW_AT_FLOW - if(sf_pdp_flg_get()) - { - location = FTP_ATQFTPCFG5; - } - else - { - location = FTP_ATQQIACT; - } - #else - location = FTP_QSSLCFG3; - #endif - break; - - case FTP_QSSLCFG3: - SF_SPRINTF(gsmPara, "AT+QSSLCFG=\"ciphersuite\",1,0xffff\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - break; - - case FTP_QSSLCFG4: - SF_SPRINTF(gsmPara, "AT+QSSLCFG=\"seclevel\",1,0\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location++; - break; - - case FTP_QSSLCFG5: - SF_SPRINTF(gsmPara, "AT+QSSLCFG=\"sslversion\",1,4\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - if(sf_pdp_flg_get()) - { - location = FTP_ATQFTPOPEN; - } - else - { - location = FTP_ATQQIACT; - } - break; - - case FTP_ATQQIACT: - if(SF_STRSTR(gsmPara, "OK")) - { - SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpIndex); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location = FTP_ATQFTPCFG4; - calltime = 0; - printf("calltime=%d\n",calltime); - appTimeDelayMs(1000); - } - break; - - case FTP_ATQFTPCFG4: - if(SF_STRSTR(gsmPara, "OK")) - { - sf_pdp_flg_set(1); - calltime=0; - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"rsptimeout\",30\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location=FTP_ATQFTPOPEN; - } - else if(SF_STRSTR(gsmPara,"ERROR")) - { - calltime++; - printf("calltime++=%d\n",calltime); - - if(calltime<6) - { - SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpIndex); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - appTimeDelayMs(1800); - } - else - { - sf_error_log((SINT8 *)"[ERROR]FTP AT+QIACT over try 6 times"); - location=FTP_JPG0; - calltime=0; - } - } - break; - - case FTP_ATQFTPCFG5: - SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"rsptimeout\",30\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location=FTP_ATQFTPOPEN; - break; - - case FTP_ATQFTPOPEN: - if(SF_STRSTR(gsmPara, "OK")) - { - sf_pdp_flg_set(1); - location = FTP_ATQFTPCFG; - calltime=0; - SF_SPRINTF(gsmPara, "AT+QFTPOPEN=\"%s\",%s\r",pPara->FtpIp,pPara->FtpPort); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - } - - break; - - case FTP_ATQFTPCFG: - if(SF_STRSTR(gsmPara, "+QFTPOPEN:")) - { - if(SF_STRSTR(gsmPara, "+QFTPOPEN: 0")) - { - ftpOpenOk = SUCCESS; - location = FTP_CLOSE; - } - else - { - sf_error_log((SINT8 *)gsmPara); - sf_error_log((SINT8 *)"FTP Open Failed."); - location = FTP_JPG0; - } - } - else if(SF_STRSTR(gsmPara, "+CME ERROR")) - { - sf_error_log((SINT8 *)gsmPara); - sf_error_log((SINT8 *)"FTP Open error."); - location = FTP_JPG0; - } - break; - - case FTP_CLOSE: - SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - location = FTP_JPG0; - break; - - case FTP_JPG0: - - calltime=0; - SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpIndex); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - sf_pdp_flg_set(0); - location = FTP_JPG1; - break; - - case FTP_JPG1: - if(SF_STRSTR(gsmPara, "OK")) - { - sts = SF_FTP_SUCCESS; - } - else - { - calltime++; - if(calltime % 10) - { - SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpIndex); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); - SF_CHECK_RETURN_STATUS(ttyRet, sts, SF_FTP_ERROR_AT_TIMEOUT); - sf_pdp_flg_set(0); - } - } - break; - } - + timeout = 100; + } + else if((2 == puiPara->SendPicSize) && (((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) && (puiPara->SendPhotoSwitch == 1))) //pic(+video) + { + timeout = 100; } - if(ftpOpenOk == FAIL) - { - sf_error_log((SINT8 *)"connect ftps fail\n"); - } + ret = sf_ftp_config(ssl, gprsMode, timeout); - FtpOpenOk = ftpOpenOk; - #endif - return ftpOpenOk; + ret = sf_ftp_stop(ssl, gprsMode); + + //SF_FTP_CONNECT_END: + printf("[%s:%d]ret:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret); + return ret; } @@ -2547,7 +2266,7 @@ UINT32 sf_camera_ota_ftp(void) time = 250; calltime = 0; SF_SPRINTF(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -2569,7 +2288,7 @@ UINT32 sf_camera_ota_ftp(void) { case CAMERA_OTA_FTP_FRIST: SF_SPRINTF(gsmPara, "AT+QFDEL=\"*\"\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = OTA_FTP_QICSGP; @@ -2597,7 +2316,7 @@ UINT32 sf_camera_ota_ftp(void) location=CAMERA_OTA_FTP_QIACT; } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -2615,7 +2334,7 @@ UINT32 sf_camera_ota_ftp(void) SF_SPRINTF(gsmPara, "AT\r"); } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QIACT; } @@ -2635,7 +2354,7 @@ UINT32 sf_camera_ota_ftp(void) location = CAMERA_OTA_FTP_QFTPCFG1; } - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); calltime=0; } @@ -2647,7 +2366,7 @@ UINT32 sf_camera_ota_ftp(void) { sf_pdp_flg_set(1); SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"contextid\",%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPCFG2; calltime=0; @@ -2658,7 +2377,7 @@ UINT32 sf_camera_ota_ftp(void) if(calltime < 6) { SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); appTimeDelayMs(1800); } @@ -2667,9 +2386,9 @@ UINT32 sf_camera_ota_ftp(void) location = CAMERA_OTA_FTP_QIDEACT; calltime=0; errorCode = SF_OTA_ERROR_QIACT; - sf_error_log((SINT8 *)"[ERROR]CAMERA_OTA_FTP QIACT over try 6 times"); + SLOGE((SINT8 *)"[ERROR]CAMERA_OTA_FTP QIACT over try 6 times"); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -2680,7 +2399,7 @@ UINT32 sf_camera_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"account\",\"%s\",\"%s\"\r", ftpUsername, ftpPassword); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPCFG3; } @@ -2690,7 +2409,7 @@ UINT32 sf_camera_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"filetype\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPCFG4; } @@ -2701,7 +2420,7 @@ UINT32 sf_camera_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"transmode\",1\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location=CAMERA_OTA_FTP_QFTPCFG5; } @@ -2712,7 +2431,7 @@ UINT32 sf_camera_ota_ftp(void) //if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"restenable\",0\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location=CAMERA_OTA_FTP_QFTPOPEN; } @@ -2723,7 +2442,7 @@ UINT32 sf_camera_ota_ftp(void) if(SF_STRSTR(gsmPara, "OK")) { SF_SPRINTF(gsmPara, "AT+QFTPOPEN=\"%s\",%s\r", ftpIp, ftpPort); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPNLST; } @@ -2736,7 +2455,7 @@ UINT32 sf_camera_ota_ftp(void) if(SF_STRSTR(gsmPara, "+QFTPOPEN: 0")) { SF_SPRINTF(gsmPara, "AT+QFTPNLST=\"%s\",\"COM:\"\r", CAM_OTA_DIR); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPGETCFG; } @@ -2744,9 +2463,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_OPEN; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP Open Failed."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP Open Failed."); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -2754,9 +2473,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_OPEN; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFTPOPEN CME ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFTPOPEN CME ERROR."); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -2769,12 +2488,12 @@ UINT32 sf_camera_ota_ftp(void) { #if SF_4G_USB_NET_DOWNLOAD SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QIDEACT; #else SF_SPRINTF(gsmPara, "AT+QFTPGET=\"%s/%s\",\"%s\"\r", CAM_OTA_DIR, SF_FW_CFG_FILE_NAME, SF_FW_CFG_FILE_NAME); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPGETBRN; calltime = 0; @@ -2784,9 +2503,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_NLST; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP NO NEED UPDATA FILE."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP NO NEED UPDATA FILE."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -2794,9 +2513,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_NLST; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFTPNLST CME ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFTPNLST CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -2808,7 +2527,7 @@ UINT32 sf_camera_ota_ftp(void) if(SF_STRSTR(gsmPara, "+QFTPGET: 0")) { SF_SPRINTF(gsmPara, "AT+QFTPGET=\"%s/%s\",\"%s\"\r", CAM_OTA_DIR, SF_FW_FILE_NAME, SF_FW_FILE_NAME); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QFTPCLOSE; } @@ -2816,9 +2535,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP GET CFG FILE FAIL."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP GET CFG FILE FAIL."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -2829,9 +2548,9 @@ UINT32 sf_camera_ota_ftp(void) location= CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; calltime = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFTPGET CME ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFTPGET CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -2844,9 +2563,9 @@ UINT32 sf_camera_ota_ftp(void) location= CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; calltime = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP GET CFG FILE TIMEOUT."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP GET CFG FILE TIMEOUT."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -2859,7 +2578,7 @@ UINT32 sf_camera_ota_ftp(void) if(SF_STRSTR(gsmPara, "+QFTPGET: 0")) { SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_QIDEACT; } @@ -2867,9 +2586,9 @@ UINT32 sf_camera_ota_ftp(void) { location = CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP GET BRN FILE FAIL."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP GET BRN FILE FAIL."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } @@ -2880,9 +2599,9 @@ UINT32 sf_camera_ota_ftp(void) location= CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; calltime = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFTPGET CME ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFTPGET CME ERROR."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -2896,9 +2615,9 @@ UINT32 sf_camera_ota_ftp(void) location= CAMERA_OTA_FTP_QIDEACT; errorCode = SF_OTA_ERROR_FTP_GET; calltime = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP GET BRN FILE TIMEOUT."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP GET BRN FILE TIMEOUT."); SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -2910,7 +2629,7 @@ UINT32 sf_camera_ota_ftp(void) { calltime = 0; SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); sf_pdp_flg_set(0); @@ -2939,7 +2658,7 @@ UINT32 sf_camera_ota_ftp(void) if (sf_4g_usb_net_ftp_download(transfer) != 1) { printf("download cfg file err\n"); - sf_error_log((SINT8 *)"download cfg file err\n"); + SLOGE((SINT8 *)"download cfg file err\n"); errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; location = CAMERA_OTA_FTP_END; break; @@ -2951,7 +2670,7 @@ UINT32 sf_camera_ota_ftp(void) if (sf_4g_usb_net_ftp_download(transfer) != 1) { printf("download brn file err\n"); - sf_error_log((SINT8 *)"download brn file err\n"); + SLOGE((SINT8 *)"download brn file err\n"); errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; location = CAMERA_OTA_FTP_END; } @@ -2961,7 +2680,7 @@ UINT32 sf_camera_ota_ftp(void) } #else SF_SPRINTF(gsmPara, "AT+QFLST=\"*\"\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_DOWNLOAD_CFG; calltime = 0; @@ -2973,7 +2692,7 @@ UINT32 sf_camera_ota_ftp(void) if(calltime < 6) { SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); appTimeDelayMs(1800); sf_pdp_flg_set(0); @@ -2983,9 +2702,9 @@ UINT32 sf_camera_ota_ftp(void) location = CAMERA_OTA_FTP_END; calltime=0; errorCode = SF_OTA_ERROR_QIDEACT; - sf_error_log((SINT8 *)"[ERROR]OTA_FTP QIDEACT over try 6 times"); + SLOGE((SINT8 *)"[ERROR]OTA_FTP QIDEACT over try 6 times"); SF_STRCPY(gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -3022,7 +2741,7 @@ UINT32 sf_camera_ota_ftp(void) if((brnFileSize < cfgFileSize) || (brnFileSize == 0)) { - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFLST FILE SIZE ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFLST FILE SIZE ERROR."); location = CAMERA_OTA_FTP_END; errorCode = OTA_ERROR_FTP_DOWNLOAD; break; @@ -3037,28 +2756,28 @@ UINT32 sf_camera_ota_ftp(void) printf("download %s to DSP size=%d\n", SF_FW_CFG_FILE_NAME, DownloadFileSize); DownloadFrom4gFlag = TRUE; SF_SPRINTF(gsmPara, "AT+QFDWL=\"%s\"\r", SF_FW_CFG_FILE_NAME); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_DOWNLOAD_BRN; } else { printf("memory malloc fial\n"); - sf_error_log((SINT8 *)"CAMERA_OTA_FTP DOWNLOAD CFG NO MEMORY ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP DOWNLOAD CFG NO MEMORY ERROR."); location = CAMERA_OTA_FTP_END; errorCode = OTA_ERROR_FTP_DOWNLOAD; } } else { - sf_error_log((SINT8 *)"CAMERA_OTA_FTP QFLST NULL ERROR."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP QFLST NULL ERROR."); location = CAMERA_OTA_FTP_END; errorCode = OTA_ERROR_FTP_DOWNLOAD; } } else if(SF_STRSTR(gsmPara, "+CME ERROR")) { - sf_error_log((SINT8 *)"OTA_FTP QFOPEN CME ERROR."); + SLOGE((SINT8 *)"OTA_FTP QFOPEN CME ERROR."); location = CAMERA_OTA_FTP_END; errorCode = OTA_ERROR_FTP_DOWNLOAD; } @@ -3080,7 +2799,7 @@ UINT32 sf_camera_ota_ftp(void) if(pTemp == NULL) { printf("download cfg file err\n"); - sf_error_log((SINT8 *)"download cfg file err\n"); + SLOGE((SINT8 *)"download cfg file err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3098,7 +2817,7 @@ UINT32 sf_camera_ota_ftp(void) if(pTemp3 == NULL) { printf("download cfg file err\n"); - sf_error_log((SINT8 *)"download cfg file err\n"); + SLOGE((SINT8 *)"download cfg file err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3111,7 +2830,7 @@ UINT32 sf_camera_ota_ftp(void) if(DownloadFileSize != fileSize) { printf("download cfg file size err\n"); - sf_error_log((SINT8 *)"download cfg file size err\n"); + SLOGE((SINT8 *)"download cfg file size err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3127,14 +2846,14 @@ UINT32 sf_camera_ota_ftp(void) rxFileSize = 0; DownloadFrom4gFlag = TRUE; SF_SPRINTF(gsmPara, "AT+QFDWL=\"%s\"\r", SF_FW_FILE_NAME); - ttyRet = sf_4g_send_data(gsmPara, SF_STRLEN(gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, SF_STRLEN(gsmPara)); SF_CHECK_RETURN_OTA(ttyRet, sts, OTA_FAIL, errorCode, SF_GPRS_MODULE_ERROR_WRITE); location = CAMERA_OTA_FTP_SAVE_BRN; } else { printf("save cfg file err\n"); - sf_error_log((SINT8 *)"save cfg file err\n"); + SLOGE((SINT8 *)"save cfg file err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; } @@ -3150,7 +2869,7 @@ UINT32 sf_camera_ota_ftp(void) { DownloadFrom4gFlag = FALSE; DownloadIndex = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP DOWNLOAD CFG TO DSP TIMEOUT."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP DOWNLOAD CFG TO DSP TIMEOUT."); location= CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; calltime = 0; @@ -3172,7 +2891,7 @@ UINT32 sf_camera_ota_ftp(void) if(pTemp == NULL) { printf("download brn file err\n"); - sf_error_log((SINT8 *)"download brn file err\n"); + SLOGE((SINT8 *)"download brn file err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3186,7 +2905,7 @@ UINT32 sf_camera_ota_ftp(void) if(pTemp3 == NULL) { printf("download brn file err\n"); - sf_error_log((SINT8 *)"download brn file err\n"); + SLOGE((SINT8 *)"download brn file err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3199,7 +2918,7 @@ UINT32 sf_camera_ota_ftp(void) if(DownloadFileSize != fileSize) { printf("download brn file size err\n"); - sf_error_log((SINT8 *)"download brn file size err\n"); + SLOGE((SINT8 *)"download brn file size err\n"); location = CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; break; @@ -3214,7 +2933,7 @@ UINT32 sf_camera_ota_ftp(void) else { printf("save brn file err\n"); - sf_error_log((SINT8 *)"save brn file err\n"); + SLOGE((SINT8 *)"save brn file err\n"); errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; location = CAMERA_OTA_FTP_END; } @@ -3231,7 +2950,7 @@ UINT32 sf_camera_ota_ftp(void) { DownloadFrom4gFlag = FALSE; DownloadIndex = 0; - sf_error_log((SINT8 *)"CAMERA_OTA_FTP S BRN TO DSP TIMEOUT."); + SLOGE((SINT8 *)"CAMERA_OTA_FTP S BRN TO DSP TIMEOUT."); location= CAMERA_OTA_FTP_END; errorCode = SF_OTA_ERROR_FTP_DOWNLOAD; calltime = 0; @@ -3342,7 +3061,8 @@ SINT32 sf_concentrated_ftp_send(void) sf_4G_signal_level_get(pPara->NetGeneration,sf_get_cq_signal(),&csqlevel); sendStartTime = sf_sys_os_utime_get()/1000; - + + SF_CONCENTRATED_MODULE_REBOOT://Restart the module once. ret1 = sf_ftp_config(ssl, gprsMode, timeout); if(SF_SUCCESS == ret1) @@ -3352,8 +3072,6 @@ SINT32 sf_concentrated_ftp_send(void) snprintf((char *)ftpFileName, sizeof(ftpFileName), "%s", pThumbFileCfg->stfileattr[piccount].thumbfileName); snprintf((char *)filePath, sizeof(filePath), "%s", pThumbFileCfg->stfileattr[piccount].thumbfilePath); - SF_CONCENTRATED_MODULE_REBOOT://Restart the module once. - sf_set_del_flag(FALSE); ret1 = sf_quectel_upload_file_to_module(filePath, ftpFileName); @@ -3395,6 +3113,7 @@ SINT32 sf_concentrated_ftp_send(void) goto SF_CONCENTRATED_RE; } else if(1 == sendFailFlag){ + sendFailFlag++; sendEndTime = sf_sys_os_utime_get()/1000; pSifarPara->picSendTimeCount +=sendEndTime - sendStartTime; pSifarPara->sendThumbnailTimeCount += sendEndTime - sendStartTime; @@ -3473,6 +3192,410 @@ SF_CONCENTRATED_END: } } +/************************************************* + Function: sf_concentrated_ftp_send + Description: ftp send. + Input: 1:send pic/video. 2:send dr. + Output: N/A + Return: 0:success; else:fail; + Others: N/A +*************************************************/ +SINT32 sf_hd_ftp_send(void) +{ + SINT32 ret1 = SF_SUCCESS; //0:success; else:fail; + SINT32 ret2 = SF_SUCCESS; //0:success; else:fail; + UINT8 ssl = 0; + UINT8 gprsMode = 0; + UINT8 timeout = 100; + UINT8 piccount = 1; + UINT8 SendFileTotal = 0; + UINT8 battery = 0; + UIMenuStoreInfo *pPara = sf_app_ui_para_get(); + SF_PDT_PARAM_STATISTICS_S *pSifarPara = sf_statistics_param_get(); + SF_HDFILE_ATTR_S* fileCfg = sf_file_hd_cfg_get(); + + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + SendFileTotal = fileCfg->filecnt; + ssl = ((2 == pPara->FtpSwitch) ? 1 : 0); + gprsMode = 0;//puiPara->GprsMode; + printf("[%s:%d] ssl:%d,GprsMode:%d SendFileTotal:%d\n", __FUNCTION__, __LINE__, ssl, gprsMode, SendFileTotal); + + UINT8 ftpFileName[64] = { 0 }; + UINT8 filePath[64] = { 0 }; + UINT8 CamNameStr[64] = {0}; + char cameraID[64] = { 0 }; + + SINT32 ret = SF_SUCCESS; + + UINT8 csqlevel = 0; + UINT8 sendFailFlag = 0; + UINT8 sendAlreadyFlag = 0; + UINT8 timeoutCnt = 0; + SINT64 sendStartTime = 0; + SINT64 sendEndTime = 0; + + sf_set_send_hd(0); + sf_custom_str_get(CamNameStr); + sf_4G_signal_level_get(pPara->NetGeneration,sf_get_cq_signal(),&csqlevel); + + sendStartTime = sf_sys_os_utime_get()/1000; + + SF_HD_MODULE_REBOOT://Restart the module once. + ret1 = sf_ftp_config(ssl, gprsMode, timeout); + + if(SF_SUCCESS == ret1) + { + while((sf_app_while_flag()) && (((piccount+1) <= SendFileTotal)) && ((pPara->GprsMode == 1) || ((pSifarPara->subscribeSendCnt < SUBSCRIBE_SEND_MAX_NUM) && (pPara->GprsMode != 1)))) + { + snprintf((char *)ftpFileName, sizeof(ftpFileName), "W%03d%04d.JPG", fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + snprintf((char *)filePath, sizeof(filePath), "%s/%s", SF_HD_DIR, ftpFileName); + + sf_set_del_flag(FALSE); + ret1 = sf_quectel_upload_file_to_module(filePath, ftpFileName); + + if(SF_UPLOAD_ERROR_RETRY == ret1) + { + printf("[%s:%d] PIC SF_UPLOAD_ERROR_RETRY\n", __FUNCTION__, __LINE__); + ret1 = sf_ftp_config(ssl, gprsMode, timeout); + + if(ret1 == SF_SUCCESS) + { + ret1 = sf_quectel_upload_file_to_module(filePath, ftpFileName); + } + } + battery = sf_app_get_battery(); + memset(cameraID, '\0', sizeof(cameraID)); + memset(ftpFileName, '\0', sizeof(ftpFileName)); + memset(filePath, '\0', sizeof(filePath)); + + snprintf(cameraID, sizeof(cameraID), "%s-%d-%d-%s-", pPara->ModuleImei, battery, csqlevel, CamNameStr); + snprintf((char *)ftpFileName, sizeof(ftpFileName), "%sHD-W%03d%04d.JPG", cameraID, fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + + snprintf((char *)filePath, sizeof(filePath), "UFS:/W%03d%04d.JPG", fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + + printf("%s:%d ftpFileName:%s filePath:%s\n", __FUNCTION__, __LINE__, ftpFileName, filePath); + + if(ret1 == SF_SUCCESS) + { + SF_HD_RE://Try again once + ret1 = sf_ftp_send(ftpFileName, filePath, timeout); + + if(SF_SUCCESS != ret1) + { + printf("%s:%d err ret: [0x%08X] ftpFileName:%s filePath:%s\n", __FUNCTION__, __LINE__, ret, ftpFileName, filePath); + if(!sendFailFlag){ + sendFailFlag++; + goto SF_HD_RE; + } + else if(1 == sendFailFlag){ + sendFailFlag++; + sendEndTime = sf_sys_os_utime_get()/1000; + pSifarPara->picSendTimeCount +=sendEndTime - sendStartTime; + pSifarPara->sendThumbnailTimeCount += sendEndTime - sendStartTime; + if(sf_ttyusb_restart() != SUCCESS) + { + printf("%s:%d restart tty usb err\n", __FUNCTION__, __LINE__); + SLOGI("Concentrated Send MODULE REBOOT error\n"); + goto SF_HD_END; + } + + if(sf_module_reboot_reg_net() != SUCCESS) + { + printf("%s:%d restart net err\n", __FUNCTION__, __LINE__); + SLOGI("Concentrated Send MODULE REBOOT Net error\n"); + goto SF_HD_END; + } + + goto SF_HD_MODULE_REBOOT; + } + timeoutCnt++; + goto SF_HD_END; + } + else { + sendFailFlag = 0; + piccount++; + pSifarPara->subscribeSendCnt++; + sendAlreadyFlag++; + } + } + else{ + piccount++; + } + if(battery <= 0) + { + goto SF_HD_END; + } + } + } + +SF_HD_END: + + sendEndTime = sf_sys_os_utime_get()/1000; + pSifarPara->picSendTimeCount +=sendEndTime - sendStartTime; + //pSifarPara->sendThumbnailTimeCount += sendEndTime - sendStartTime; + printf("[%s:%d] : sendStartTime:%d sendEndTime:%d\n\n", __FUNCTION__, __LINE__, sendStartTime, sendEndTime); + + if(!(((piccount+1) <= SendFileTotal) && ((pSifarPara->picSendMax < pPara->SendMaxNum) || (pPara->SendMaxNum == 0)))) + { + sf_delete_send_flie_list(); + } + + if(ret1 != SF_FTP_ERROR_TERM) + { + ret2 = sf_ftp_stop(ssl, gprsMode); + } + + #if SF_TEST_ERROR_CODE + sf_set_code_err_flag(0); + #endif + if(SendFileTotal) + { + SLOGI("Concentrated Send end.\n"); + pSifarPara->picSendCount += (piccount+1); + pSifarPara->sendThumbnailCount += (piccount+1); + pSifarPara->picSendSucessCount += sendAlreadyFlag; + pSifarPara->picSendFailCount += ((SendFileTotal + 1) - sendAlreadyFlag); + //pSifarPara->sendThumbnailFailCount += ((piccount + 1) - sendAlreadyFlag); + pSifarPara->picSendTimeoutCount += timeoutCnt; + } + printf("[%s:%d]ret1:[0x%08X],ret2:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret1, ret2); + + if(ret1 != SF_SUCCESS) + { + return ret1; + } + else + { + return ret2; + } +} + +/************************************************* + Function: sf_video_find_file + Description: find video + Input: dir key, file key + Output: file name + Return: file size + Others: N/A +*************************************************/ +UINT32 sf_video_find_file(UINT16 dirKey, UINT16 fileKey, UINT8 *destFname) +{ + UINT32 fileIndex = 0; + UINT32 fileSize = 0; + UINT8 i = 0; + UINT8 fname[50] = {0}; + //UINT8 srcFname[50] = {0}; + + fileIndex = dirKey * 10000 + fileKey + 1; + + for(i = 0; i < 3; i++) + { + dirKey = fileIndex / 10000; + fileKey = fileIndex % 10000; + SF_SPRINTF(fname, "%s/%03dMEDIA/%s%04d.MP4", SF_DCIM_DIR, dirKey, DCF_FILE_NAME, fileKey); + + fileSize = sf_get_file_size(fname); + printf("find video:%s size=%d\n", fname, fileSize); + + if(fileSize != 0) + { + SF_STRCPY(destFname, fname); + break; + } + fileIndex++; + } + return fileSize; +} +/************************************************* + Function: sf_video_ftp_send + Description: ftp send. + Input: 1:send pic/video. 2:send dr. + Output: N/A + Return: 0:success; else:fail; + Others: N/A +*************************************************/ +SINT32 sf_video_ftp_send(void) +{ + SINT32 ret1 = SF_SUCCESS; //0:success; else:fail; + SINT32 ret2 = SF_SUCCESS; //0:success; else:fail; + UINT8 ssl = 0; + UINT8 gprsMode = 0; + UINT8 timeout = 100; + UINT8 piccount = 0; + UINT8 SendFileTotal = 0; + UINT8 battery = 0; + UIMenuStoreInfo *pPara = sf_app_ui_para_get(); + SF_PDT_PARAM_STATISTICS_S *pSifarPara = sf_statistics_param_get(); + SF_HDFILE_ATTR_S* fileCfg = sf_file_video_cfg_get(); + + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + SendFileTotal = fileCfg->filecnt; + ssl = ((2 == pPara->FtpSwitch) ? 1 : 0); + gprsMode = 0;//puiPara->GprsMode; + printf("[%s:%d] ssl:%d,GprsMode:%d SendFileTotal:%d\n", __FUNCTION__, __LINE__, ssl, gprsMode, SendFileTotal); + + UINT8 ftpFileName[64] = { 0 }; + UINT8 filePath[64] = { 0 }; + UINT8 CamNameStr[64] = {0}; + char cameraID[64] = { 0 }; + + SINT32 ret = SF_SUCCESS; + + UINT8 csqlevel = 0; + UINT8 sendFailFlag = 0; + UINT8 sendAlreadyFlag = 0; + UINT8 timeoutCnt = 0; + SINT64 sendStartTime = 0; + SINT64 sendEndTime = 0; + UINT32 size = 0; + + sf_set_send_video(0); + sf_custom_str_get(CamNameStr); + sf_4G_signal_level_get(pPara->NetGeneration,sf_get_cq_signal(),&csqlevel); + + sendStartTime = sf_sys_os_utime_get()/1000; + + SF_VIDEO_MODULE_REBOOT://Restart the module once. + ret1 = sf_ftp_config(ssl, gprsMode, timeout); + + if(SF_SUCCESS == ret1) + { + while((sf_app_while_flag()) && (((piccount+1) <= SendFileTotal)) && ((pPara->GprsMode == 1) || ((pSifarPara->subscribeVideoSendCnt < SUBSCRIBE_VIDEO_SEND_MAX_NUM) && (pPara->GprsMode != 1)))) + { + snprintf((char *)ftpFileName, sizeof(ftpFileName), "W%03d%04d.MP4", fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + //snprintf((char *)filePath, sizeof(filePath), "%s/%s", SF_HD_DIR, ftpFileName); + size = sf_video_find_file(fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey,filePath); + if(size == 0) + { + pSifarPara->videoSendCount--; + break; + } + + sf_set_del_flag(FALSE); + ret1 = sf_quectel_upload_file_to_module(filePath, ftpFileName); + + if(SF_UPLOAD_ERROR_RETRY == ret1) + { + printf("[%s:%d] PIC SF_UPLOAD_ERROR_RETRY\n", __FUNCTION__, __LINE__); + ret1 = sf_ftp_config(ssl, gprsMode, timeout); + + if(ret1 == SF_SUCCESS) + { + ret1 = sf_quectel_upload_file_to_module(filePath, ftpFileName); + } + } + battery = sf_app_get_battery(); + memset(cameraID, '\0', sizeof(cameraID)); + memset(ftpFileName, '\0', sizeof(ftpFileName)); + memset(filePath, '\0', sizeof(filePath)); + + snprintf(cameraID, sizeof(cameraID), "%s-%d-%d-%s-", pPara->ModuleImei, battery, csqlevel, CamNameStr); + snprintf((char *)ftpFileName, sizeof(ftpFileName), "%s-W%03d%04d.MP4", cameraID, fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + + snprintf((char *)filePath, sizeof(filePath), "UFS:/W%03d%04d.MP4", fileCfg->stfileattr[piccount].dirKey, fileCfg->stfileattr[piccount].fileKey); + + printf("%s:%d ftpFileName:%s filePath:%s\n", __FUNCTION__, __LINE__, ftpFileName, filePath); + + if(ret1 == SF_SUCCESS) + { + SF_VIDEO_RE://Try again once + ret1 = sf_ftp_send(ftpFileName, filePath, timeout); + + if(SF_SUCCESS != ret1) + { + printf("%s:%d err ret: [0x%08X] ftpFileName:%s filePath:%s\n", __FUNCTION__, __LINE__, ret, ftpFileName, filePath); + if(!sendFailFlag){ + sendFailFlag++; + goto SF_VIDEO_RE; + } + else if(1 == sendFailFlag){ + sendFailFlag++; + sendEndTime = sf_sys_os_utime_get()/1000; + pSifarPara->picSendTimeCount +=sendEndTime - sendStartTime; + pSifarPara->sendThumbnailTimeCount += sendEndTime - sendStartTime; + if(sf_ttyusb_restart() != SUCCESS) + { + printf("%s:%d restart tty usb err\n", __FUNCTION__, __LINE__); + SLOGI("Concentrated Send MODULE REBOOT error\n"); + goto SF_VIDEO_END; + } + + if(sf_module_reboot_reg_net() != SUCCESS) + { + printf("%s:%d restart net err\n", __FUNCTION__, __LINE__); + SLOGI("Concentrated Send MODULE REBOOT Net error\n"); + goto SF_VIDEO_END; + } + + goto SF_VIDEO_MODULE_REBOOT; + } + timeoutCnt++; + goto SF_VIDEO_END; + } + else { + sendFailFlag = 0; + piccount++; + pSifarPara->subscribeVideoSendCnt++; + sendAlreadyFlag++; + } + } + else{ + piccount++; + } + if(battery <= 0) + { + goto SF_VIDEO_END; + } + } + } + +SF_VIDEO_END: + + sendEndTime = sf_sys_os_utime_get()/1000; + pSifarPara->videoSendTimeCount +=sendEndTime - sendStartTime; + //pSifarPara->sendThumbnailTimeCount += sendEndTime - sendStartTime; + printf("[%s:%d] : sendStartTime:%d sendEndTime:%d\n\n", __FUNCTION__, __LINE__, sendStartTime, sendEndTime); + + if(ret1 != SF_FTP_ERROR_TERM) + { + ret2 = sf_ftp_stop(ssl, gprsMode); + } + + #if SF_TEST_ERROR_CODE + sf_set_code_err_flag(0); + #endif + if(SendFileTotal) + { + SLOGI("Send end.\n"); + pSifarPara->videoSendSucessCount += sendAlreadyFlag; + pSifarPara->videoSendFailCount += ((SendFileTotal + 1) - sendAlreadyFlag); + pSifarPara->picSendTimeoutCount += timeoutCnt; + + } + printf("[%s:%d]ret1:[0x%08X],ret2:[0x%08X]\n\n", __FUNCTION__, __LINE__, ret1, ret2); + + if(ret1 != SF_SUCCESS) + { + return ret1; + } + else + { + return ret2; + } +} + +/************************************************* + Function: sf get ftp open + Description: get ftp open flag + Input: N/A + Output: N/A + Return: 0:SUCCESS, errcode:FAIL + Others: N/A +*************************************************/ +SINT32 sf_get_ftp_open_flag(void) +{ + return FtpOpenOk; +} #ifdef __cplusplus #if __cplusplus } 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 360e4b832..663f0ae5d 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_module.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_module.c @@ -19,6 +19,7 @@ extern "C" { #include "sf_eg91_server.h" //#ifndef CFG_TRANSDATA_AT #include "sf_http_server.h" +#include "sf_message_queue.h" //#endif #endif @@ -39,9 +40,18 @@ SF_4G_STATUS_E sf_4G_status_get(void) void sf_4G_status_set(SF_4G_STATUS_E enStatus) { + SF_MESSAGE_BUF_S stMessageBuf = {0}; + if(enStatus < SF_4G_BUTT){ - if(enStatus < SF_4G_BUTT) + if(ModuleStatus != enStatus) + { + stMessageBuf.arg1 = enStatus; + stMessageBuf.arg1 = SF_PARA_CMD_NET_STATUS; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_cardv(&stMessageBuf); + } ModuleStatus = enStatus; + } else MLOGE("Type format error\n"); @@ -248,20 +258,22 @@ SINT32 sf_4G_gps_search_result(SF_FN_PARAM_S *pfnParam) SINT32 sf_4G_sim_init(SF_FN_PARAM_S *pfnParam) { #if defined(CFG_MODULE_EG91) - //return sf_quectel_module_complete_init(); - return eg91_sim_init(pfnParam); + //return eg91_sim_init(pfnParam); + return sf_module_complete_init(); #endif } SINT32 sf_4G_register_net_manual(SF_FN_PARAM_S *pfnParam) { #if defined(CFG_MODULE_EG91) - return eg91_register_net_manual(pfnParam); + //return eg91_register_net_manual(pfnParam); + return sf_net_regist_manual(); #endif } SINT32 sf_4G_register_net_auto(SF_FN_PARAM_S *pfnParam) { #if defined(CFG_MODULE_EG91) - return eg91_register_net_auto(pfnParam); + //return eg91_register_net_auto(pfnParam); + return sf_auto_net_reg(); #endif } diff --git a/code/application/source/sf_app/code/source/4gMng/sf_opera_adapt.c b/code/application/source/sf_app/code/source/4gMng/sf_opera_adapt.c index f6cd73c0b..fbc72bfc9 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_opera_adapt.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_opera_adapt.c @@ -37,7 +37,7 @@ extern "C" { #define MMS_SET (0) -UINT16 sf_auto_operation_adaptation(SF_CHAR *operatorName, UIMenuStoreInfo *sim_info_t) +SINT32 sf_auto_operation_adaptation(SF_CHAR *operatorName, UIMenuStoreInfo *sim_info_t) { MLOGD("Auto_Operation_Adjust NEW, Name:%s\n", operatorName); if((strncmp(operatorName, "46001", 5) == 0) || (strncmp(operatorName, "46010", 5) == 0)) //china union @@ -1254,7 +1254,8 @@ UINT16 sf_auto_operation_adaptation(SF_CHAR *operatorName, UIMenuStoreInfo *sim_ strcpy(puiPara->IP, "inetproxy.tdc.dk"); strcpy(puiPara->PORT, "8080"); strcpy(puiPara->USERNAME, "\0"); - strcpy(puiPara->PASSWORD, "\0"); + strcpy(puiPara->PASSWORD, "\0"); + #endif } else if (strncmp(operatorName, "26801", 5) == 0) //Portugal vodafone diff --git a/code/application/source/sf_app/code/source/4gMng/sf_sms.c b/code/application/source/sf_app/code/source/4gMng/sf_sms.c index 93083533e..3afc88e45 100644 --- a/code/application/source/sf_app/code/source/4gMng/sf_sms.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_sms.c @@ -37,6 +37,11 @@ #include "sf_device.h" #include "sf_storeMng.h" #include "sf_commMng.h" +#include +#include +#include "sf_fileMng.h" +#include "sf_battery.h" + /************************************************************************** * C O N S T A N T S * **************************************************************************/ @@ -137,13 +142,13 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s { i = 0; - if(strValue[0][2] == '*') + if(strValue[0][3] == '*') { - totalItem = strValue[i][3] - '0'; + totalItem = strValue[i][4] - '0'; - if((strValue[i][4] >= '0') && (strValue[i][4] <= '9')) + if((strValue[i][5] >= '0') && (strValue[i][5] <= '9')) { - totalItem = totalItem * 10 + (strValue[i][4] - '0'); + totalItem = totalItem * 10 + (strValue[i][5] - '0'); printf("value ok\n"); } else @@ -162,7 +167,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '1') && (strValue[0][3] == '*')) { - if((mm >= 29) && (mm == totalItem)) + if((mm >= 29)/* && (mm == totalItem)*/) { Readmmsok = SMS_STATUS_RECIEV; @@ -910,7 +915,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '3') && (strValue[0][3] == '*')) { - if((mm >= 1 ) && (mm == totalItem)) + if((mm >= 1 )/* && (mm == totalItem)*/) { //send the pic if(strlen((const char *)strValue[i]) == 5) @@ -942,7 +947,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '4') && (strValue[0][3] == '*')) { - if((mm == 1 ) && (mm == totalItem)) //module update + if((1 == mm) /* && (mm == totalItem)*/) //module update { if(SF_STRLEN(strValue[i]) == 5) { @@ -973,7 +978,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '5') && (strValue[0][3] == '*')) { mm--; - if((mm == atoi((const char *)&strValue[0][4]) ) && (mm == totalItem)) //send HD pic + if((atoi((const char *)&strValue[0][4]) == mm )/* && (mm == totalItem)*/) //send HD pic { Readmmsok = SMS_STATUS_RECIEV; printf("subscribeSendCnt:%d\n", pSifarPara->subscribeSendCnt); @@ -990,12 +995,12 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s Readmmsok = SMS_STATUS_PARA_ERR; } } - sf_hd_pic_list_print();//debug if(((pSubImgListHead != NULL) && (pSubImgListHead->pNext != NULL) && (pSifarPara->subscribeSendCnt < SUBSCRIBE_SEND_MAX_NUM) && (pPara_sms_saved->GprsMode != 1)) ||((pSubImgListHead != NULL) && (pSubImgListHead->pNext != NULL) && (pPara_sms_saved->GprsMode == 1))) { CameraCmd.sendHD = 1; + sf_hd_pic_list_print();//debug } } else @@ -1007,7 +1012,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '6') && (strValue[0][3] == '*')) { - if((mm == 1) && (mm == totalItem)) //FW update + if((1 == mm)/* && (mm == totalItem)*/) //FW update { if(SF_STRLEN(strValue[i]) == 5) { @@ -1037,7 +1042,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '7') && (strValue[0][3] == '*')) { - if((mm == 1) && (mm == totalItem)) //get log + if((1 == mm)/* && (mm == totalItem)*/) //get log { if(SF_STRLEN(strValue[i]) == 5) { @@ -1067,7 +1072,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == '8') && (strValue[0][3] == '*')) { - if((mm == 1) && (mm == totalItem)) //sd format + if((1 == mm)/* && (mm == totalItem)*/) //sd format { if(SF_STRLEN(strValue[i]) == 5) { @@ -1114,12 +1119,11 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s } } - sf_video_list_print();//debug - if(((pSubVideoListHead != NULL) && (pSubVideoListHead->pNext != NULL) && (pSifarPara->subscribeVideoSendCnt < SUBSCRIBE_VIDEO_SEND_MAX_NUM) && (pPara_sms_saved->GprsMode != 1)) || ((pSubVideoListHead != NULL) && (pSubVideoListHead->pNext != NULL) && (pPara_sms_saved->GprsMode == 1))) { CameraCmd.sendVideo = 1; + sf_video_list_print();//debug } } else @@ -1130,7 +1134,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '1') && (strValue[0][2] == '0') && (strValue[0][3] == '*')) { - if((mm == 1) && (mm == totalItem)) //reset + if((1 == mm)/* && (mm == totalItem)*/) //reset { if((strValue[i][4] - '0') == 1) { @@ -1152,7 +1156,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '1') && (strValue[0][2] == '1') && (strValue[0][3] == '*')) { - if((mm == 1) && (mm == totalItem)) //restart + if((1 == mm)/* && (mm == totalItem)*/) //restart { if(SF_STRLEN(strValue[i]) == 5) { @@ -1181,7 +1185,7 @@ UINT8 sf_message_data_processing(UINT8 strValue[30][32], UINT16 mm, UINT8 *sms_s *sms_send_mode = 0; }else if((strValue[0][0] =='R') && (strValue[0][1] == '0') && (strValue[0][2] == 'd') && (strValue[0][3] == '*')) { - if(mm == 1) //debug mode + if((1 == mm)/* && (mm == totalItem)*/) //debug mode { if(SF_STRLEN(strValue[i]) == 5) { @@ -1464,7 +1468,7 @@ SINT32 sf_sms_read_message(void) while(temp != 0) { strcpy((char *)strValue[mm], (const char *)temp); - printf("strValue[%d]:%s", mm, strValue[mm]); + printf("strValue[%d]:%s\n", mm, strValue[mm]); mm++; temp = (UINT8 *)strsep(&pStr, "#"); } @@ -1613,7 +1617,7 @@ SINT32 sf_sms_read_message(void) sprintf((char *)gsmPara, "SMS unknown error!\x1a\r"); } - sf_error_log((SINT8 *)gsmPara); + SLOGE((SINT8 *)gsmPara); ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); @@ -1648,9 +1652,9 @@ SINT32 sf_sms_read_message(void) sts = SF_SMS_ERROR_SEND_MSG; add = 0; - sf_error_log((SINT8 *)gsmPara); + SLOGE((SINT8 *)gsmPara); sprintf((char *)errMsg, "[%s:%d]Send SMS Three Times,Error Code:0x%08X", __FUNCTION__, __LINE__, sts); - sf_error_log((SINT8 *)errMsg); + SLOGE((SINT8 *)errMsg); } } else if(strstr((const char *)gsmPara, "ERROR")) @@ -1658,9 +1662,9 @@ SINT32 sf_sms_read_message(void) eSmsLocation = SMS_SIM_CMDFLAG; Readmmsok = 0; sts = SF_SMS_ERROR_SEND_MSG; - sf_error_log((SINT8 *)gsmPara); + SLOGE((SINT8 *)gsmPara); sprintf((char *)errMsg, "[%s:%d]Send SMS Fail,Error Code:0x%08X", __FUNCTION__, __LINE__, sts); - sf_error_log((SINT8 *)errMsg); + SLOGE((SINT8 *)errMsg); } break; @@ -2109,12 +2113,44 @@ void sf_hd_pic_add_to_list(UINT8 *fileName) void sf_hd_pic_list_print(void) { UINT8 i = 0; + int fd = 0; + struct stat st_buffer; + char sendListName[64] = {0}; + char buff[SF_SEND_LIST_ITEM_LENGTH+1] = {0}; SubImgList_t *pList = pSubImgListHead; printf("[%s:%d] print list:\n", __FUNCTION__, __LINE__); - while(pList != NULL) - { - printf("ID:%d f:%d,%d\n", i++, pList->dirKey, pList->fileKey); - pList = pList->pNext; + SF_HDFILE_ATTR_S* fileCfg = sf_file_hd_cfg_get(); + + if (stat(SF_HD_DIR, &st_buffer) == 0 && S_ISDIR(st_buffer.st_mode)) { + printf("%s exists\n", SF_HD_DIR); + } + else{ + if (mkdir(SF_HD_DIR, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) != 0) { + printf("Failed to create directory"); + } + } + snprintf(sendListName, sizeof(sendListName), "%s", SF_HD_DIR_LIST); + fd = open(sendListName, O_APPEND | O_WRONLY | O_CREAT); + if(fd){ + lseek(fd, 0, SEEK_SET); + while(pList != NULL) + { + snprintf(buff, sizeof(buff), "%d%d\r\n", pList->dirKey, pList->fileKey); + write(fd, buff, strlen(buff)); + printf("ID:%d f:%d,%d\n", i++, pList->dirKey, pList->fileKey); + fileCfg->stfileattr[fileCfg->filecnt].dirKey = pList->dirKey; + fileCfg->stfileattr[fileCfg->filecnt].fileKey = pList->fileKey; + fileCfg->filecnt += 1; + pList = pList->pNext; + } + close(fd); + } + else{ + while(pList != NULL) + { + printf("ID:%d f:%d,%d\n", i++, pList->dirKey, pList->fileKey); + pList = pList->pNext; + } } } @@ -2189,10 +2225,15 @@ void sf_video_add_to_list(UINT8 *fileName) void sf_video_list_print(void) { UINT8 i = 0; + SF_HDFILE_ATTR_S* fileCfg = sf_file_video_cfg_get(); SubImgList_t *pList = pSubVideoListHead; printf("[%s:%d] print list:\n", __FUNCTION__, __LINE__); while(pList != NULL) { + fileCfg->stfileattr[fileCfg->filecnt].dirKey = pList->dirKey; + fileCfg->stfileattr[fileCfg->filecnt].fileKey = pList->fileKey; + fileCfg->filecnt += 1; + pList = pList->pNext; printf("ID:%d f:%d,%d\n", i++, pList->dirKey, pList->fileKey); pList = pList->pNext; } @@ -2492,7 +2533,7 @@ SINT32 sf_power_off_check_sd(void) if(sf_in_card_exist()) { - if(sf_get_mode_flag() /*|| (PowerOnMode == PWR_ON_GPRS_INIT)*/) + if(sf_get_mode_flag() || ((0 == puiPara->SendType))) sf_delete_send_flie_list(); } @@ -2539,6 +2580,7 @@ SINT32 sf_power_off_check_gprs(void) } } } + return 0; } /************************************************* @@ -2691,3 +2733,56 @@ UINT8 sf_sms_check_send(void) } return 0; } + +/************************************************* + Function: sf get send hd + Description: get hd flag + Input: N/A + Output: N/A + Return: 0:SUCCESS, errcode:FAIL + Others: N/A +*************************************************/ +UINT8 sf_get_send_hd(void) +{ + return CameraCmd.sendHD; +} + +/************************************************* + Function: sf get send hd + Description: get hd flag + Input: N/A + Output: N/A + Return: 0:SUCCESS, errcode:FAIL + Others: N/A +*************************************************/ +UINT8 sf_set_send_hd(UINT8 value) +{ + CameraCmd.sendHD =value; + return CameraCmd.sendHD; +} +/************************************************* + Function: sf get send video + Description: get video flag + Input: N/A + Output: N/A + Return: 0:SUCCESS, errcode:FAIL + Others: N/A +*************************************************/ +UINT8 sf_get_send_video(void) +{ + return CameraCmd.sendVideo; +} + +/************************************************* + Function: sf get send video + Description: get video flag + Input: N/A + Output: N/A + Return: 0:SUCCESS, errcode:FAIL + Others: N/A +*************************************************/ +UINT8 sf_set_send_video(UINT8 value) +{ + CameraCmd.sendVideo = value; + return CameraCmd.sendVideo; +} \ No newline at end of file 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 9ed92892b..658a91203 100644 --- a/code/application/source/sf_app/code/source/app/sf_app.c +++ b/code/application/source/sf_app/code/source/app/sf_app.c @@ -50,7 +50,7 @@ #include #include "sf_keymng.h" #include "sf_wifi_svr.h" - +#include "sf_battery.h" //#include //#include //#include @@ -62,7 +62,7 @@ extern pthread_mutex_t GPIO_mutexLock; //---------------------UIInfo Global Variables ----------------------------- UIMenuStoreInfo currentInfo = {0}; //#NT#Init the array to zero. UIMenuStoreInfo origInfo = {0}; /* backup */ - +UIMenuStoreInfo origInfo_check = {0}; /* backup */ void sf_signalStop(SINT32 signo) { printf("\nsignalStop(signal code: %d) !!!\n", signo); @@ -95,7 +95,44 @@ int test_sd_free(void) return 0; } +UINT8 sf_check_power_on_mode(void) +{ + FILE *fp = NULL; + UINT32 u32ize = 0; + char *pStrSrc = NULL; + char *pStrOtsOk = "Mode="; + char *temp = NULL; + UINT8 startup = 0; + system("cat /proc/cmdline > /tmp/Mode.txt"); + fp = fopen("/tmp/Mode.txt","r"); + if(fp == NULL){ + return FALSE; + } + + fseek(fp, 0, SEEK_END); + u32ize = ftell(fp); // take file size + fseek(fp, 0, SEEK_SET); // move to position zero + pStrSrc = (char *)malloc(u32ize*sizeof(char)); + if (pStrSrc) { + fread(pStrSrc, 1, u32ize, fp); + temp = strstr(pStrSrc, pStrOtsOk); + if ( temp != NULL) { + temp += strlen("Mode="); + sscanf(temp, "%hhd", &startup); + printf("%s: PowerOnModeStr=%d\r\n", __func__,startup); + //printf("%s: temp=%s\r\n", __func__,temp); + } + free(pStrSrc); + } + + fclose(fp); + fp = NULL; + pStrSrc = NULL; + u32ize = 0; + + return startup; +} int main(int argc, char *argv[]) { printf("*********************************************\n"); @@ -126,13 +163,18 @@ int main(int argc, char *argv[]) //app_led_group_register(); app_message_recv_start(); + sf_poweron_type_set(sf_check_power_on_mode()); + + sf_mcu_flag_init(); sf_mcu_init(); sf_get_power_on_mode(); sf_mcu_wdg_set(30); + sf_led_init(); sf_customer_param_load(); - + sf_app_para_check_start(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); printf("[%s:%d] CamMode:%d\n", __FUNCTION__, __LINE__,puiPara->CamMode); @@ -143,8 +185,10 @@ int main(int argc, char *argv[]) sf_mcu_reg_set(SF_MCU_CTRL_MODULE_PIR, 1); } + sf_battery_check_init(); + sf_app_battery_start(); + //sf_app_data_ready_start(); - 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); @@ -168,7 +212,10 @@ int main(int argc, char *argv[]) //sf_wifi_app_start(); } #if SF_IQ_TEST != ENABLE - app_RegisterNet_start(); + if(SF_MCU_STARTUP_NORMAL != startup) + { + app_RegisterNet_start(); + } #endif SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup)); /*if(SF_MCU_STARTUP_ONKEY != startup) 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 index 4a3d0107e..6be03c971 100644 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -58,6 +58,9 @@ extern "C" { extern pthread_mutex_t Param_mutexLock; SINT8 longClickhold = 0; SINT8 bmoduleupdate = 0; +static UINT8 ModuleUpdating = 0; +static UINT8 FwUpdate = 0; +static UINT8 IsNightLedOn = 0; static SF_THREAD_CFG_S sf_msgQueueThread = { @@ -65,6 +68,44 @@ static SF_THREAD_CFG_S sf_msgQueueThread = .TskId = -1, }; + +UINT8 sf_get_module_update(void) +{ + return ModuleUpdating; +} + +void sf_set_module_update(UINT8 flag) +{ + SF_MESSAGE_BUF_S stMessageBuf = {0}; + if(ModuleUpdating != flag) + { + stMessageBuf.arg1 = flag; + stMessageBuf.arg1 = SF_PARA_CMD_MOUP; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_cardv(&stMessageBuf); + } + ModuleUpdating = flag; +} + +UINT8 sf_get_fw_update(void) +{ + return FwUpdate; +} + +void sf_set_fw_update(UINT8 flag) +{ + SF_MESSAGE_BUF_S stMessageBuf = {0}; + + if(FwUpdate != flag) + { + stMessageBuf.arg1 = flag; + stMessageBuf.arg1 = SF_PARA_CMD_FWUP; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_cardv(&stMessageBuf); + } + FwUpdate = flag; +} + const SF_CHAR* app_process_SD_getstatusstring(SF_MESSAGE_CMD_SD_E enType) { switch(enType) @@ -655,6 +696,7 @@ static SINT32 sf_app_proccess_cmd_file(SF_MESSAGE_BUF_S *pMessageBuf) } static SINT32 sf_app_proccess_cmd_poweroff(SF_MESSAGE_BUF_S *pMessageBuf) { + sf_app_para_check_stop(); return app_system_poweroff(pMessageBuf->arg1); } @@ -663,8 +705,6 @@ static SINT32 sf_app_proccess_cmd_mcu(SF_MESSAGE_BUF_S *pMessageBuf) { MLOGI("ID = %#x\n",pMessageBuf->arg1); SF_MESSAGE_BUF_S stMessageBuf = {0}; - - switch(pMessageBuf->arg1) { @@ -703,7 +743,15 @@ static SINT32 sf_app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) case SF_PARA_CMD_UPDATE: sf_share_mem_customer_update(); break; - + case SF_PARA_CMD_FWUP: + ModuleUpdating = pMessageBuf->arg2; + break; + case SF_PARA_CMD_MOUP: + FwUpdate = pMessageBuf->arg2; + break; + case SF_PARA_CMD_IR_LED_STATUS: + IsNightLedOn = pMessageBuf->arg2; + break; default: break; } @@ -720,7 +768,9 @@ static SINT32 sf_app_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf) //sf_wifi_app_start(); sf_sys_status_led_set(SF_LED_SYS_STATE_WIFI_DISCONNECT); break; + case SF_WIFI_CMD_HD_TURE: + break; default: break; } @@ -849,6 +899,10 @@ void app_message_recv_start(void) } +UINT8 sf_app_get_night_led_flag(void) +{ + return IsNightLedOn; +} #ifdef __cplusplus #if __cplusplus } 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 21eaf942a..97874e713 100644 --- a/code/application/source/sf_app/code/source/app/sf_device.c +++ b/code/application/source/sf_app/code/source/app/sf_device.c @@ -32,7 +32,7 @@ #include "sf_device.h" #include "sf_eg91_sim.h" #include "sf_commu_mcu_reg.h" - +#include "sf_ftp.h" #ifdef __cplusplus #if __cplusplus @@ -360,59 +360,65 @@ SINT32 app_led_net_reg_stop(SINT32 s32ret) UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); UINT8 netSearchStep = sf_get_netsearch_step(); - if(s32ret == SF_SUCCESS) { - UINT8 signalLevel = 0; - sf_4G_signal_level_get(puiPara->NetGeneration,sf_get_cq_signal(),&signalLevel); - MLOGI("signalLevel = %d\n",signalLevel); - sf_app_cq_signal_to_cardv(); + if(s32ret == SF_SUCCESS) { + UINT8 signalLevel = 0; + sf_4G_signal_level_get(puiPara->NetGeneration,sf_get_cq_signal(),&signalLevel); + MLOGI("signalLevel = %d\n",signalLevel); + sf_app_cq_signal_to_cardv(); if(netSearchStep == GPRS_SEARCH_STEP_LOGIN_FAILED) - { + { sf_sys_status_led_set(SF_LED_SYS_STATE_SERVER_FAIL); - } + } else { - switch(signalLevel) - { + switch(signalLevel) + { case 1: sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_1); break; - case 2: - sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_2); - break; - case 3: - sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_3); - break; - case 4: - sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_4); - break; - default: + case 2: + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_2); + break; + case 3: + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_3); + break; + case 4: + sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_4); + break; + default: sf_sys_status_led_set(SF_LED_SYS_STATE_GPRS_SIGNAL_0); - break; - } + break; + } } - } - else if(s32ret == SF_4G_ERROR_NO_SIMCARD \ - || s32ret == SF_4G_ERROR_NO_SUPPOET \ - || s32ret == SF_APP_ERROR_NO_SUPPOET) - { + } + else if(s32ret == SF_4G_ERROR_NO_SIMCARD \ + || s32ret == SF_4G_ERROR_NO_SUPPOET \ + || s32ret == SF_APP_ERROR_NO_SUPPOET \ + || s32ret == SF_SIM_ERROR_NO_SIMCARD \ + || s32ret == SF_SIM_ERROR_APN) + { sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); - } - else if(s32ret == SF_HTTP_ERROR_REQUEST) { - sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); - } - else if(s32ret == SF_TTY_ERROR_OPEN) - { - sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); - sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); - } - else if(s32ret == SF_4G_ERROR_REG_NET) { + } + else if(s32ret == SF_HTTP_ERROR_REQUEST) { + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + else if(s32ret == SF_TTY_ERROR_OPEN) + { sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); } - else { - sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); - } - + else if(s32ret == SF_4G_ERROR_REG_NET || s32ret == SF_SIM_ERROR_REG_NET) { + sf_sys_status_led_set(SF_LED_SYS_STATE_SIM_ERROR); + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + else { + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + + if(SUCCESS != sf_get_ftp_open_flag()) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL); + } return SF_SUCCESS; } SINT32 app_led_poweroff(void) 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 index 7b4246564..aaaf204fb 100644 --- a/code/application/source/sf_app/code/source/app/sf_service.c +++ b/code/application/source/sf_app/code/source/app/sf_service.c @@ -74,8 +74,6 @@ SF_THREAD_S ThumbSend = { .TskId = -1, }; -UINT32 FtpOpenOk = FAIL; - SINT32 app_ttyusb_IsOpen(void) { int retryTime = 0; int retryFlag = 0; @@ -736,6 +734,7 @@ SINT16 sf_send_pic_num_check(void) { return SF_FAILURE; } } + return 0; } SINT32 app_file_send_check(SF_PDT_PARAM_STATISTICS_S *pstaticparam) { @@ -1017,7 +1016,7 @@ static SINT32 app_file_transfer(SF_FN_PARAM_S *pfnParam) { // sf_thumb_file_creat(); - s32ret = sf_simcom_ftp_send(1); + s32ret = sf_send_file_to_ftp(1); if (s32ret == SF_SUCCESS) { sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_SUCCESS); @@ -1035,7 +1034,7 @@ static SINT32 app_file_transfer(SF_FN_PARAM_S *pfnParam) { case SF_MCU_STARTUP_PIR: // sf_share_mem_file_init(); if (TRUE == sf_check_auto_thumb_file()) { - s32ret = sf_simcom_ftp_send(1); + s32ret = sf_send_file_to_ftp(1); } break; @@ -1074,16 +1073,45 @@ static SINT32 app_file_transfer(SF_FN_PARAM_S *pfnParam) { #endif case SF_MCU_STARTUP_RING: if (sf_get_pic()) { - s32ret = sf_simcom_ftp_send(1); + s32ret = sf_send_file_to_ftp(1); + sf_sms_set_pic(0); + if(sf_get_send_hd()){ + if(1 != sf_app_to_cardv_hd_ture()){ + break; + } + } + } + + if(sf_get_send_hd()){ + s32ret = sf_hd_ftp_send(); + } + + if(sf_get_send_video()){ + s32ret = sf_video_ftp_send(); } break; case SF_MCU_STARTUP_SYN_PARAM: if (pCustomerParam->GpsSendFlag) { - s32ret = sf_simcom_ftp_send(2); + s32ret = sf_send_file_to_ftp(2); pCustomerParam->GpsSendFlag = 0; } + if (sf_get_pic()) { - s32ret = sf_simcom_ftp_send(1); + s32ret = sf_send_file_to_ftp(1); + sf_sms_set_pic(0); + if(sf_get_send_hd()){ + if(1 != sf_app_to_cardv_hd_ture()){ + break; + } + } + } + + if(sf_get_send_hd()){ + s32ret = sf_hd_ftp_send(); + } + + if(sf_get_send_video()){ + s32ret = sf_video_ftp_send(); } SLOGD("GpsSendFlag:%d\n", pCustomerParam->GpsSendFlag); break; @@ -1095,7 +1123,7 @@ static SINT32 app_file_transfer(SF_FN_PARAM_S *pfnParam) { return s32ret; } -SINT32 app_FileSend_thread(void) { +SINT32 sf_cardv_file_to_app_send_thread(void) { SINT32 s32ret = 0; SF_FN_PARAM_S stpfncallback = {0}; stpfncallback.pstParam = sf_customer_param_get(); @@ -1125,11 +1153,43 @@ SINT32 app_FileSend_thread(void) { sf_file_thumb_cfg_clear(); sf_share_mem_file_down(1, s32ret); - if ((sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) && (sf_sms_check_send())) { + if ((sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) && (!sf_sms_check_send())) { sf_power_off(); } return s32ret; } + +SINT32 sf_file_send_auto(void) { + SINT32 s32ret = 0; + SF_FN_PARAM_S stpfncallback = {0}; + stpfncallback.pstParam = sf_customer_param_get(); + stpfncallback.pstaticParam = sf_app_ui_para_get(); + // stpfncallback.pstaticParam = sf_statistics_param_get(); + stpfncallback.pfn_AT_instruction_exit = (void *)app_disconnect_4g_module; + + sf_share_mem_file_init(); + // s32ret = app_file_send_check(stpfncallback.pstaticParam); + s32ret = sf_check_ftp_send(1); + if (s32ret != SF_SUCCESS) { + MLOGE("ERROR:%#x\n", s32ret); + ThumbSend.IsRun = 0; + sf_file_thumb_cfg_clear(); + sf_share_mem_file_down(1, s32ret); + return s32ret; + } + + s32ret = app_file_transfer(&stpfncallback); + if (s32ret != SF_SUCCESS) { + sf_set_gprs_errno(s32ret); + } + // app_file_transfer_Error_return_server(&stpfncallback); + ThumbSend.IsRun = 0; + sf_file_thumb_cfg_clear(); + sf_share_mem_file_down(1, s32ret); + + 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; @@ -1232,7 +1292,7 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { //,version); s32ret = sf_4G_register_net_manual(pfnParam); - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); SF_APPCOMM_CHECK_RETURN(s32ret, s32ret); #ifdef SF_GPS_TEST @@ -1249,6 +1309,16 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { if ((s32ret == SF_SIM_ERROR_UTC) || (SF_ON == pCustomerParam->GpsSwitch)) { s32ret = sf_get_ntp(s32ret); } + + if(sf_get_signal_ready()){ + if(SUCCESS != sf_connect_ftps_server()){ + printf("[%s:%d]open ftps fail, reconnect\n", __FUNCTION__, __LINE__); + if(SUCCESS != sf_connect_ftps_server()){ + printf("[%s:%d]re open ftps fail, reconnect\n", __FUNCTION__, __LINE__); + } + } + } + SF_APPCOMM_CHECK_RETURN(s32ret, s32ret); break; @@ -1275,13 +1345,19 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); s32ret = sf_4G_register_net_auto(pfnParam); - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); s32ret = sf_read_message(); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); if (sf_get_pic()) { - sf_app_to_cardv_capture(); + s32ret = sf_app_to_cardv_capture(); + } + else if(sf_get_send_hd()){ + s32ret = sf_app_to_cardv_hd_ture(); + } + else if(sf_get_send_video()){ + s32ret = sf_video_ftp_send(); } break; @@ -1317,10 +1393,10 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { if (s32ret != SF_SUCCESS) { sf_set_signal_ready_flag(TRUE); } - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); - s32ret = app_FileSend_thread(); + s32ret = sf_file_send_auto(); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); break; @@ -1362,11 +1438,10 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { pCustomerParam->NeedTimeSyncStartUp = 1; } if (pCustomerParam->DailyReportSwitch) { - pCustomerParam->GpsSendFlag = - 1; // indicate need send dp file in b power on. + pCustomerParam->GpsSendFlag = 1; // indicate need send dp file in b power on. } sf_dailyReport_set(); - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); break; case SF_MCU_STARTUP_USB: @@ -1395,15 +1470,22 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { s32ret = sf_get_ntp(s32ret); } if (0 != sf_get_cq_signal()) { - pCustomerParam->GpsSendFlag = 0; - pCustomerParam->NeedTimeSyncStartUp = 1; - // avoid always A mode power on - pCustomerParam->NetWorkNeedSearch = 0; - // printf("[%s:%d]NeedTimeSyncStartUp=%d\n", __FUNCTION__, __LINE__, - // pCustomerParam->NeedTimeSyncStartUp); + pCustomerParam->GpsSendFlag = 1; + pCustomerParam->NeedTimeSyncStartUp = 1; + // avoid always A mode power on + pCustomerParam->NetWorkNeedSearch = 0; + // printf("[%s:%d]NeedTimeSyncStartUp=%d\n", __FUNCTION__, __LINE__, + // pCustomerParam->NeedTimeSyncStartUp); + + if(SUCCESS != sf_connect_ftps_server()){ + printf("[%s:%d]open ftps fail, reconnect\n", __FUNCTION__, __LINE__); + if(SUCCESS != sf_connect_ftps_server()){ + printf("[%s:%d]re open ftps fail, reconnect\n", __FUNCTION__, __LINE__); + } + } } sf_dailyReport_set(); - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); break; case SF_MCU_STARTUP_SYN_PARAM: @@ -1420,7 +1502,7 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { s32ret = sf_4G_register_net_auto(pfnParam); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); - s32ret = app_FileSend_thread(); + s32ret = sf_file_send_auto(); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); pCustomerParam->NetWorkNeedSearch = 0; @@ -1429,10 +1511,15 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam) { s32ret = sf_read_message(); SF_APPCOMM_CHECK_RETURN(s32ret, SF_APP_ERROR_REQUEST); if (sf_get_pic()) { - sf_app_to_cardv_capture(); + s32ret = sf_app_to_cardv_capture(); } - - sf_share_mem_customer_down(1); + else if(sf_get_send_hd()){ + s32ret = sf_app_to_cardv_hd_ture(); + } + else if(sf_get_send_video()){ + s32ret = sf_video_ftp_send(); + } + //sf_share_mem_customer_down(1); break; default: @@ -1469,7 +1556,7 @@ 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); + pthread_create(&ThumbSend.TskId, NULL, (void *)sf_cardv_file_to_app_send_thread, NULL); ThumbSend.IsRun = 1; SF_MUTEX_INIT_LOCK(ThumbSend.mutexLock); } @@ -1533,10 +1620,33 @@ SINT32 sf_module_reboot_reg_net(void) SF_APPCOMM_CHECK_RETURN(s32ret, s32ret); s32ret = sf_4G_register_net_manual(&stpfncallback); - sf_share_mem_customer_down(1); + //sf_share_mem_customer_down(1); SF_APPCOMM_CHECK_RETURN(s32ret, s32ret); return s32ret; } + +SINT32 sf_app_to_cardv_hd_ture(void) { + static UINT8 falg = 0; + SINT32 s32ret = SF_FAILURE; + + char sendHDName[64] = {0}; + if(falg) + { + return falg; + } + falg = 1; + snprintf(sendHDName, sizeof(sendHDName), "%s", SF_HD_DIR); + + if(sf_file_IsExsit((CHAR *)sendHDName) != SF_TRUE) + { + MLOGI(" not HD Dir [%s]\n",sendHDName); + + } + MLOGI(" [%s]\n",sendHDName); + + s32ret = sf_share_mem_hd_down(1); + return s32ret; +} #ifdef __cplusplus #if __cplusplus } 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 index 4c80cddf0..8cd8845af 100644 --- a/code/application/source/sf_app/code/source/app/sf_system.c +++ b/code/application/source/sf_app/code/source/app/sf_system.c @@ -19,6 +19,8 @@ #include "sf_log.h" #include "sf_module.h" #include "sf_ledmng.h" +#include "sf_param_common.h" +#include "sf_param_enum.h" #include "sf_service.h" #include "sf_storeMng.h" #include "sf_systemMng.h" @@ -33,6 +35,10 @@ #include "sf_system.h" #include "sf_device.h" #include "sf_sms.h" +#include "sf_commMng.h" +#include "sf_battery.h" +#include "sf_common.h" + #ifdef __cplusplus #if __cplusplus extern "C" { @@ -80,6 +86,23 @@ SF_THREAD_S OtaUpgradeRestoreTskCfg = .IsRun = 0, .TskId = -1, }; +SF_THREAD_S ParaTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; + +SF_THREAD_S BatteryTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; + +SF_THREAD_S DateReadyTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; SINT8 debugFlag = 0; @@ -89,95 +112,40 @@ void app_poweroff_time_clear(void) } static void* auto_poweroff_thread(void * arg) { + UINT8 pwroffcnt = 0; SF_MESSAGE_BUF_S stMessageBuf = {0}; - while(AutoPoweroffTskCfg.IsRun) - { + SINT32 isUsb = sf_usb_IsInsert(); + if(isUsb) + { + sf_set_pir_statu_flag(FALSE); + return NULL; + } + if(sf_get_fw_update()) + return NULL; - 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; - } - + while(AutoPoweroffTskCfg.IsRun) + { + //if(sf_get_pir_statu_flag()) + { + pwroffcnt++; - 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); - } + if(pwroffcnt == 1) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_GOING_TO_PIR); + } + else if(pwroffcnt == 6) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_POWER_OFF); + printf("[power off] %s(%d) AutoPowerOffTime:%d\n", __FUNCTION__, __LINE__, AutoPowerOffTime); + sf_set_power_off_flag(1); + stMessageBuf.cmdId = CMD_POWEROFF; + stMessageBuf.arg1 = APP_POWER_OFF_APO; + sf_com_message_send_to_cardv(&stMessageBuf); + return NULL; + } + } + sleep(1); + } AutoPowerOffTime = 0; return NULL; @@ -323,6 +291,7 @@ static void* battery_monitoring_thread(void *arg) sleep(3); } + return NULL; } SINT32 app_batmonitoring_start(void) @@ -841,14 +810,16 @@ SINT32 app_preinit(void) if((startup == SF_MCU_STARTUP_NORMAL) && (!bUsbIsInsert)) { - app_led_poweroff(); + //app_led_poweroff(); + app_auto_poweroff_start(); + return SF_SUCCESS; } if((!bUsbIsInsert)/* || (startup == SF_MCU_STARTUP_ONKEY)*/) { sf_4G_usb_init(); MLOGD("sim card insert\n"); } - /*if(startup == SF_MCU_STARTUP_ONKEY) + /*if(startup == SF_MCU_STARTUP_NORMAL) { app_pir_monitoring_start(); #ifndef SF_HARDWARE_TEST @@ -937,6 +908,197 @@ void sf_power_off(void) printf("[%s:%d] e\n", __FUNCTION__, __LINE__); } +void* sf_app_para_check_thread(void *arg) +{ + while(ParaTskCfg.IsRun) + { + if(TRUE == sf_get_para_check_flag()){ + MLOGI("menu info is changed\n"); + sf_share_mem_customer_down(1); + } + //sleep(1); + sf_sleep_ms(10); + } + ParaTskCfg.IsRun = 0; + + return NULL; +} +SINT32 sf_app_para_check_start(void) +{ + SINT32 ret = SF_FAILURE; + if(ParaTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&ParaTskCfg.TskId, NULL, sf_app_para_check_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + ParaTskCfg.IsRun = 1; + return SF_SUCCESS; + +} +SINT32 sf_app_para_check_stop(void) +{ + UINT16 ret = 0; + + ParaTskCfg.IsRun = 0; + MLOGD("s\n"); + ret = pthread_join(ParaTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} + + +SINT32 sf_app_battery_start(void) +{ + SINT32 ret = SF_SUCCESS; + + if(BatteryTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&BatteryTskCfg.TskId, NULL, sf_battery_check_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + + BatteryTskCfg.IsRun = 1; + + return SF_SUCCESS; +} + +SINT32 sf_app_battery_stop(void) +{ + UINT16 ret = 0; + + BatteryTskCfg.IsRun = 0; + MLOGD("s\n"); + ret = pthread_join(BatteryTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} + +#if 0 +static void* sf_mcu_data_ready_thread(void * arg) +{ + SF_MESSAGE_BUF_S stMessageBuf = {0}; + SINT32 isUsb = sf_usb_IsInsert(); + SLOGI("s\n"); + + if(isUsb) + { + sf_set_pir_statu_flag(FALSE); + return NULL; + } + if(sf_get_fw_update()) + return NULL; + + while(DateReadyTskCfg.IsRun) + { + if(sf_app_data_ready_read()) + { + UINT8 startMode = 0; + + startMode = sf_mcu_power_on_para_get(SF_MCU_STARTMODE); + printf("startMode=%d\n", startMode); + + if(sf_usb_IsInsert())//sf_gpio_get_status(GPIO_INT_USBPLUGIN)) + { + return NULL; + } + + if(sf_get_mode_flag()) + { + + stMessageBuf.cmdId = CMD_KEY; + stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; + stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY; + stMessageBuf.arg3 = startMode; + + if(startMode == 0) //OFF + { + sf_set_power_off_flag(1); + //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__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); //shutdown start + stMessageBuf.cmdId = CMD_POWEROFF; + stMessageBuf.arg1 = APP_POWER_OFF_NORMAL; + sf_com_message_send_to_cardv(&stMessageBuf); + sf_sys_status_led_set(SF_LED_SYS_STATE_POWER_OFF); + + } + else if(startMode == 1) //SETUP + { + sf_set_module_sleep_flag(0); + sf_com_message_send_to_cardv(&stMessageBuf); + sf_sys_status_led_set(SF_LED_SYS_STATE_POWER_OFF); + } + else if(startMode == 3) //ON + { + sf_set_pir_statu_flag(1); + printf("%s:%d-------PIR Key Pressed.------\n", __FUNCTION__, __LINE__); + sf_com_message_send_to_cardv(&stMessageBuf); + } + } + else + { + 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__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); //shutdown start + stMessageBuf.cmdId = CMD_POWEROFF; + stMessageBuf.arg1 = APP_POWER_OFF_NORMAL; + sf_com_message_send_to_cardv(&stMessageBuf); + } + } + } + sf_sleep_ms(50); + } + return NULL; +} + +SINT32 sf_app_data_ready_start(void) +{ + SINT32 ret = SF_SUCCESS; + + if(DateReadyTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&DateReadyTskCfg.TskId, NULL, sf_mcu_data_ready_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + + DateReadyTskCfg.IsRun = 1; + + return SF_SUCCESS; +} +#endif #ifdef __cplusplus #if __cplusplus } diff --git a/rtos/code/application/source/cardv/SrcCode/Gx/GxPower/sf_battery.c b/code/application/source/sf_app/code/source/battery/sf_battery.c similarity index 76% rename from rtos/code/application/source/cardv/SrcCode/Gx/GxPower/sf_battery.c rename to code/application/source/sf_app/code/source/battery/sf_battery.c index d84744e9e..1bbadc592 100644 --- a/rtos/code/application/source/cardv/SrcCode/Gx/GxPower/sf_battery.c +++ b/code/application/source/sf_app/code/source/battery/sf_battery.c @@ -19,40 +19,43 @@ * **************************************************************************/ -#include #include #include #include #include +//#include #include #include +#include #include -#include #include #include #include #include -#include "PrjInc.h" -#include "IOCfg.h" -#include "DxHunting.h" -/* -#include "NvtUser/NvtUser.h" -#include "AppControl/AppControl.h" -#include "comm/hwclock.h" +//#include "NvtUser/NvtUser.h" +//#include "AppControl/AppControl.h" +//#include "comm/hwclock.h" #include #include #include #include "UIInfo/UIInfo.h" #include "IOCfg.h" -*/ +#include "sf_battery.h" +#include "sf_log.h" +#include "sf_message_queue.h" +#include "sf_param_common.h" +#include "sf_common.h" +#include "sf_ledmng.h" +#include "sf_dev_usb.h" +#include "sf_commu_mcu_reg.h" #if HUNTING_CAMERA_MCU == ENABLE +typedef signed int SINT32; UINT32 _DcVoltageVal = 0; UINT32 _LiPolymerVoltageVal = 0; /*4.0P no use*/ UINT32 _BatVoltageVal = 45; -UINT8 IsNightLedOn = 0; UINT32 IsPowerDcIn = 1; UINT32 BatVoltageVal = 45; SF_BatteryLevel_e sf_LatestBattLevel = SF_BATT_LEVEL_0; @@ -62,7 +65,8 @@ UINT32 LiPolymerVoltageVal = 0; /*4.0P no use*/ UINT32 batTempLevel = 0xff; #define SF_READ_BAT_MAX 10 -ID FLG_ID_SF_BSTTERY = 0; +#define SF_DC_IN_VOLATAGE 70 +#define SF_LI_IN_VOLATAGE 99 /************************************************* Function: sf_battery_voltage_convert @@ -107,9 +111,29 @@ UINT32 sf_get_max_value(UINT32 *_ValueList) return MaxValue; } +void sf_adc_init(void) +{ + + if (adc_open(ADC_CH_VOLDET_BATTERY) != 0) { + SLOGE("Can't open ADC channel for battery voltage detection\r\n"); + return; + } + + //650 Range is 250K Hz ~ 2M Hz + adc_setConfig(ADC_CONFIG_ID_OCLK_FREQ, 250000); //250K Hz + + //battery voltage detection + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_SAMPLE_FREQ, 10000); //10K Hz, sample once about 100 us for CONTINUOUS mode + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_SAMPLE_MODE, (VOLDET_ADC_MODE) ? ADC_CH_SAMPLEMODE_CONTINUOUS : ADC_CH_SAMPLEMODE_ONESHOT); + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_INTEN, FALSE); + + // Enable adc control logic + adc_setEnable(TRUE); + +} /************************************************* - Function: sf_battery_adc_value_get_once + Function: sf_adc_value_get Description: get battery adc only once Input: N/A Output: N/A @@ -161,7 +185,7 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) gpio_set_value(P_GPIO_1, 1);//adc_muxb } - vos_util_delay_us(500); + vos_util_delay_ms(1); *pval = adc_readData(0); //printf("[%s:%d] *pval:%d\n", __FUNCTION__, __LINE__,*pval); @@ -169,7 +193,6 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) return SUCCESS; } - /************************************************* Function: sf_battery_adc_value_get_once Description: get battery adc only once @@ -183,8 +206,6 @@ UINT32 sf_battery_adc_value_get_once(void) UINT32 batAdc = 0; static UINT8 getBatAdcFlg = 0; - //uiPara_t* puiPara = appUiParaGet(); - if(getBatAdcFlg) { return SUCCESS; @@ -207,7 +228,7 @@ UINT32 sf_battery_adc_value_get_once(void) } else { - if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) + if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) { _BatVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); //_BatVoltageVal += 1; @@ -252,10 +273,11 @@ UINT32 sf_battery_adc_value_get_once(void) *************************************************/ void sf_battery_level_update(void) { + static UINT8 batteryVal_tmp = 0; UINT8 batteryVal = 0; UINT8 batteryLevel = SF_BATT_LEVEL_0; - batteryVal = sf_battery_value_get(sf_get_night_led_flag()); + batteryVal = sf_battery_value_get(sf_app_get_night_led_flag()); if(batteryVal >= 70) { @@ -277,6 +299,19 @@ void sf_battery_level_update(void) { batteryLevel = SF_BATT_LEVEL_0; } + + if(batteryVal_tmp != batteryVal){ + #if HUNTING_CAMERA_4G == ENABLE + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_DEV; + stMessageBuf.arg1 = SF_DEV_CMD_BAT; + stMessageBuf.arg2 = batteryVal; + stMessageBuf.arg3 = (SINT32)sf_battery_type_get(); + sf_com_message_send_to_cardv(&stMessageBuf); + #endif + batteryVal_tmp = batteryVal; + + } sf_LatestBattLevel = batteryLevel; } @@ -295,7 +330,7 @@ void sf_battery_level_update(void) UINT8 batteryVal = 0; UINT8 batteryLevel = SF_BATT_LEVEL_0; - if(sf_get_night_led_flag()) + if(sf_app_get_night_led_flag()) { return; } @@ -410,16 +445,16 @@ BOOL sf_check_low_battery(void) { UINT8 lowCompareVal = 0; BOOL ret = FALSE; - UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - if(sf_is_usb_flag()) + if(sf_usb_IsInsert()) { return FALSE; } sf_battery_level_update(); - if(sf_get_night_led_flag()) + if(sf_app_get_night_led_flag()) { if(puiPara->BatteryType == SF_BATT_ALKALINE) { @@ -475,13 +510,13 @@ signed int sf_battery_adc_value_get(void) UINT32 batTemp = 0; UINT32 dcValueList[12] = { 0 }; UINT32 batValueList[12] = { 0 }; - UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); SINT32 ret = FAIL; if((sf_get_mode_flag() == 0) || (needCheckFirst == TRUE)) { - //printf("[%s:%d]ConfigureModeFlag=%d,needCheckFirst=%d\n",__FUNCTION__,__LINE__,ConfigureModeFlag,needCheckFirst); + //printf("[%s:%d]ConfigureModeFlag=%d,needCheckFirst=%d\n",__FUNCTION__,__LINE__,sf_get_mode_flag(),needCheckFirst); needCheckFirst = FALSE; for(readBatCnt = 0; readBatCnt < 5;) //get max value of 5 times. @@ -581,7 +616,7 @@ signed int sf_battery_adc_value_get(void) batTemp += batValueList[readBatCnt]; readBatCnt++; - vos_util_delay_ms(100); + sf_sleep_ms(100); if(readBatCnt >= SF_READ_BAT_MAX) { @@ -620,9 +655,10 @@ void sf_battery_level_polling(void) UINT32 batTemp = 0; UINT32 dcValueList[12] = { 0 }; UINT32 batValueList[12] = { 0 }; - UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + static UINT32 prePowerDcStatus = 0; - signed int ret = FALSE; + //signed int ret = FALSE; static UINT32 battEmpty = 0; @@ -709,57 +745,84 @@ void sf_battery_level_polling(void) sf_battery_level_update(); - ret = sf_check_low_battery(); + //ret = sf_check_low_battery(); if(puiPara->BatteryLogSwitch) { printf("[%s:%d]batTempLevel=%d,sf_LatestBattLevel=%d\n", __FUNCTION__, __LINE__, batTempLevel, sf_LatestBattLevel); } - if(batTempLevel != sf_LatestBattLevel) + if((batTempLevel != sf_LatestBattLevel) || IsPowerDcIn != prePowerDcStatus) { + prePowerDcStatus = IsPowerDcIn; batTempLevel = sf_LatestBattLevel; + #if HW_S530 + sf_view_osd_battery_draw(TRUE); + #endif } - if(ret == TRUE) - { - if(sf_get_night_led_flag()) - { - sf_ir_led_set(0, 0, 0, 0); - } + if(sf_LatestBattLevel == SF_BATT_LEVEL_0) + { + if(sf_app_get_night_led_flag()) + { + //sf_ir_led_set(0, 0, 0, 0); + char cmd[64] = {'\0'}; + snprintf(cmd, sizeof(cmd), "echo \"w closepwm 3\" > /proc/pwm/cmd"); + system(cmd); + printf("%s:%d cmd:%s\n", __FUNCTION__, __LINE__,cmd); + } //the Module not need sleep. //gModuleSleep = 0; sf_set_module_sleep_flag(0); - if(battEmpty == 0) - { - battEmpty = 1; - printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + if(battEmpty == 0) + { + battEmpty = 1; + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.cmdId = CMD_POWEROFF; + stMessageBuf.arg1 = APP_POWER_OFF_BATT_EMPTY; + sf_com_message_send_to_cardv(&stMessageBuf); //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_app_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); + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_0_SLOW); + } + else if((sf_battery_value_get(sf_app_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); + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_1); + } } else { } } -THREAD_RETTYPE sf_battery_check_thread(void *arg) +void* sf_battery_check_thread(void *arg) { - THREAD_ENTRY(); + //THREAD_ENTRY(); printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + sf_battery_check_init(); - while(sf_while_flag()) + while(sf_app_while_flag()) { sf_battery_level_polling(); } printf("[%s:%d] e \n", __FUNCTION__, __LINE__); - THREAD_RETURN(0); + //THREAD_RETURN(0); + return NULL; } - +#if 0 +ID FLG_ID_SF_BSTTERY = 0; void sf_battery_thread_init(void) { static UINT8 dofirst = 1; @@ -775,16 +838,7 @@ void sf_battery_thread_init(void) vos_task_resume(s_handle_batt); printf("[%s:%d] e\n", __FUNCTION__, __LINE__); } - -UINT8 sf_get_night_led_flag(void) -{ - return IsNightLedOn; -} - -void sf_set_night_led_flag(UINT8 flag) -{ - IsNightLedOn = flag; -} +#endif /************************************************* Function: sf_battery_level_get @@ -800,6 +854,43 @@ UINT32 sf_battery_level_get(void) } +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% @@ -813,7 +904,7 @@ UINT8 sf_battery_value_get(UINT8 nightMode) UINT8 value = 0; UINT8 batteryVal = 0; - UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); if(IsPowerDcIn == 0) { //printf("BatMedian:%d\n", BatMedian); @@ -1049,5 +1140,81 @@ UINT8 sf_battery_value_get(UINT8 nightMode) return value; } +/************************************************* + Function: sf_battery_type_get + Description: Get battery type. + Input: N/A + Output: N/A + Return: value: battery type, 0:normal 1:LiPolymer + Others: N/A +*************************************************/ +UINT8 sf_battery_type_get(void) +{ + if(IsPowerDcIn) + return SF_POWER_TYPE_DC; + else if(LiPolymerVoltageVal) + return SF_POWER_TYPE_LI_POLYER; + else + return SF_POWER_TYPE_AA; +} + +/************************************************* + Function: sf_battery_check_init + Description: Perform a battery test in manual mode. + Input: N/A + Output: N/A + Return: value: TRUE ,FALSE + Others: N/A +*************************************************/ +BOOL sf_battery_check_init(void) +{ + sf_adc_init(); + + if(sf_battery_adc_value_get() == SUCCESS) + { + if(sf_check_low_battery() == TRUE) + { + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start + return FALSE; + } + } + else + { + return FALSE; + } + #if HW_S530 + sf_view_osd_battery_draw(TRUE); + #endif + return TRUE; +} +void sf_set_need_check_first(void) +{ + needCheckFirst = TRUE; +} +/************************************************* + Function: sf_is_enough_power_to_update + Description: whether or not enough power to update + Input: N/A + Output: N/A + Return: TRUE/FALSE + Others: N/A +*************************************************/ +BOOL sf_is_enough_power_to_update(void) +{ + sf_set_need_check_first(); + sf_battery_adc_value_get(); + printf("update DC=%d Li=%d Bat=%d\n", DcVoltageVal, LiPolymerVoltageVal, BatVoltageVal); + + if(sf_battery_value_get(0) < 40) + { + printf("low battery, no update\n"); + + return FALSE; + } + + return TRUE; +} + #endif 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 3b61525e0..c64086c26 100644 --- 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 @@ -27,7 +27,7 @@ extern "C" { int sf_semId = -1; int sf_sharMemId = -1; int sf_sharMemfileId = -1; - +int sf_hdMemId = -1; union semun { int val; struct semid_ds *buf; @@ -297,6 +297,73 @@ SINT32 sf_share_mem_customer_deinit(void) return sf_share_mem_deinit(sf_sharMemId); } +SINT32 sf_share_mem_hd_update(void) +{ + SF_HDFILE_ATTR_S *pSfHDPara = 0; + if(SF_SUCCESS == sf_share_mem_init((char*)"/tmp/sf_hd",sizeof(SF_HDFILE_ATTR_S),&sf_hdMemId)) + { + pSfHDPara = (SF_HDFILE_ATTR_S *)sf_share_mem_get(sf_hdMemId); + if(pSfHDPara <= 0) + { + printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); + return SF_FAILURE; + } + else + { + sf_hd_param_set(pSfHDPara); + shmdt(pSfHDPara); + printf("[%s:%d] creat share mem succeed ID:%d!!!\n", __FUNCTION__, __LINE__, sf_hdMemId); + return SF_SUCCESS; + } + + } + return SF_FAILURE; + +} + +SINT32 sf_share_mem_hd_down(UINT32 to) +{ + SF_HDFILE_ATTR_S *pSfHDPara = 0; + + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if(SF_SUCCESS == sf_share_mem_init((char*)"/tmp/sf_hd",sizeof(SF_HDFILE_ATTR_S),&sf_hdMemId)) + { + pSfHDPara = (SF_HDFILE_ATTR_S *)sf_share_mem_get(sf_hdMemId); + if(pSfHDPara <= 0) + { + printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); + return SF_FAILURE; + } + else + { + sf_file_hd_cfg_set_down(pSfHDPara); + shmdt(pSfHDPara); + SF_MESSAGE_BUF_S stMessageBuf = {0}; + if(to)//to cardv + { + stMessageBuf.arg1 = SF_WIFI_CMD_HD_TURE; + stMessageBuf.cmdId = CMD_WIFI; + MLOGI("PARA UPDATE to cardv ID:%d\n",sf_hdMemId); + sf_com_message_send_to_cardv(&stMessageBuf); + } + else //to sf app + { + stMessageBuf.arg1 = SF_PARA_CMD_UPDATE; + stMessageBuf.cmdId = CMD_FILE; + MLOGI("PARA UPDATE to app ID:%d\n",sf_hdMemId); + sf_com_message_send_to_app(&stMessageBuf); + } + + //printf("[%s:%d] to:%d creat share mem succeed ID:%d!!!\n", __FUNCTION__, __LINE__, to, sf_hdMemId); + return SF_SUCCESS; + } + + } + return SF_FAILURE; + +} + + #ifdef __cplusplus #if __cplusplus } 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 ba36bb381..4cca2b627 100644 --- a/code/application/source/sf_app/code/source/devMng/sf_ledmng.c +++ b/code/application/source/sf_app/code/source/devMng/sf_ledmng.c @@ -377,6 +377,19 @@ void* sf_led_thread(void *arg) { UINT8 i = 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); + } + //FLGPTN FlgPtn; printf("[%s:%d] s\n", __FUNCTION__, __LINE__); while(isLedExit) @@ -508,24 +521,12 @@ Ledstate_t sf_led_get(LedId_t ledId) 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())) + UINT8 startup = sf_poweron_type_get(); + //printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if((!dofirst) || ((SF_MCU_STARTUP_ONKEY != startup) && (SF_MCU_STARTUP_NORMAL != startup) && (SF_MCU_STARTUP_USB != startup))) 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*/ @@ -582,7 +583,9 @@ void sf_led_stop(void) void sf_sys_status_led_set(LedSysState_t ledSysStateId) { - if((SF_MCU_STARTUP_ONKEY != sf_poweron_type_get())) + UINT8 startup = sf_poweron_type_get(); + //printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if(((SF_MCU_STARTUP_ONKEY != startup) && (SF_MCU_STARTUP_NORMAL != startup) && (SF_MCU_STARTUP_USB != startup))) return; //if((ledSysStateId != SF_LED_SYS_STATE_PIR_DETECT) && (ledSysStateId != SF_LED_SYS_STATE_PIR_NOT_DETECT)) printf("SYS LED SET %d\n", ledSysStateId); diff --git a/code/application/source/sf_app/code/source/fileMng/sf_file.c b/code/application/source/sf_app/code/source/fileMng/sf_file.c index 7e16b9932..54fd4cbb4 100644 --- a/code/application/source/sf_app/code/source/fileMng/sf_file.c +++ b/code/application/source/sf_app/code/source/fileMng/sf_file.c @@ -24,6 +24,7 @@ #include #include #include +#include "sf_battery.h" #ifdef __cplusplus #if __cplusplus @@ -42,6 +43,8 @@ int sftestus = 60; UINT32 sf_uart_time_flag = 0; UINT8 PicName[5][2][35] = { { { 0 } } }; UINT8 mmsUploadFlg = 0; /*0:mms upload file fail; 1:success.*/ +char SendFileList[201][SF_SEND_LIST_ITEM_LENGTH] = {{0}}; //for 200 files +UINT8 SendFileTotal = 0; extern char logStr[128]; extern char gsmPara[GPRS_INFO_LINE_MAX]; static SINT16 Temper = 0; @@ -325,10 +328,10 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn if(count > 500) { ret = SF_UPLOAD_ERROR_AT_TIMEOUT; - printf("[%s:%d]MMS AT Timeout,enUploadLocation=%d,Error Code:0x%08X", + printf("[%s:%d]MMS AT Timeout,enUploadLocation=%d,Error Code:0x%08X\n", __FUNCTION__, __LINE__, enUploadLocation, ret); SLOGE(gsmPara); - sprintf((char *)gsmPara, "[%s:%d]MMS AT Timeout,enUploadLocation=%d,Error Code:0x%08X", + sprintf((char *)gsmPara, "[%s:%d]MMS AT Timeout,enUploadLocation=%d,Error Code:0x%08X\n", __FUNCTION__, __LINE__, enUploadLocation, ret); SLOGE(gsmPara); count = 0; @@ -349,7 +352,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn if(strstr((const char *)gsmPara, "ERROR")) { ret = SF_UPLOAD_ERROR_GET_FSIZE_FAIL; - sprintf((char *)gsmPara, "[%s:%d] AT+QFDEL,Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)gsmPara, "[%s:%d] AT+QFDEL,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(gsmPara); goto SF_QUECTEL_UPLOAD_END; } @@ -381,7 +384,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn else { ret = SF_UPLOAD_ERROR_GET_FSIZE_FAIL; - sprintf((char *)gsmPara, "[%s:%d]Get File Szie Fail,Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)gsmPara, "[%s:%d]Get File Szie Fail,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(gsmPara); goto SF_QUECTEL_UPLOAD_END; } @@ -390,7 +393,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn { printf("[%s:%d]open upload file fail,fileAbsolutePath:%s\n", __FUNCTION__, __LINE__, fileAbsolutePath); ret = SF_UPLOAD_ERROR_OPEN_FAIL; - sprintf((char *)gsmPara, "[%s:%d]Open Upload File Fail,Error Code:0x%08X", __FUNCTION__, __LINE__, ret); + sprintf((char *)gsmPara, "[%s:%d]Open Upload File Fail,Error Code:0x%08X\n", __FUNCTION__, __LINE__, ret); SLOGE(gsmPara); goto SF_QUECTEL_UPLOAD_END; } @@ -421,7 +424,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn ret = SF_UPLOAD_ERROR_DATA; SLOGE(gsmPara); printf("[%s:%d]Upload data error,fileAbsolutePath:%s\n", __FUNCTION__, __LINE__, fileAbsolutePath); - sprintf((char *)gsmPara, "[%s:%d]Upload data error,Error Code:0x%08X,%s", __FUNCTION__, __LINE__, ret, uploadFname); + sprintf((char *)gsmPara, "[%s:%d]Upload data error,Error Code:0x%08X,%s\n", __FUNCTION__, __LINE__, ret, uploadFname); SLOGE(gsmPara); //enUploadLocation = QUECTEL_UPLOAD_END; @@ -449,7 +452,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn ret = SF_UPLOAD_ERROR_DATA; SLOGE(gsmPara); printf("[%s:%d]Upload data error,fileAbsolutePath:%s\n", __FUNCTION__, __LINE__, fileAbsolutePath); - sprintf((char *)gsmPara, "[%s:%d]Upload data error,Error Code:0x%08X,%s", __FUNCTION__, __LINE__, ret, uploadFname); + sprintf((char *)gsmPara, "[%s:%d]Upload data error,Error Code:0x%08X,%s\n", __FUNCTION__, __LINE__, ret, uploadFname); SLOGE(gsmPara); //enUploadLocation = QUECTEL_UPLOAD_END; sf_test_upload_tm_log = 1; @@ -494,10 +497,10 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn //sf_cmd_camera_restart(1); //reboot modu //enUploadLocation = QUECTEL_UPLOAD_END; ret = SF_UPLOAD_ERROR_AT_TIMEOUT; - printf("[%s:%d]Upload To Module Timeout,enUploadLocation=%d,Error Code:0x%08X", + printf("[%s:%d]Upload To Module Timeout,enUploadLocation=%d,Error Code:0x%08X\n", __FUNCTION__, __LINE__, enUploadLocation, ret); SLOGE(gsmPara); - sprintf((char *)gsmPara, "[%s:%d]Upload To Module Timeout,enUploadLocation=%d,Error Code:0x%08X,%s", + sprintf((char *)gsmPara, "[%s:%d]Upload To Module Timeout,enUploadLocation=%d,Error Code:0x%08X,%s\n", __FUNCTION__, __LINE__, enUploadLocation, ret, uploadFname); SLOGE(gsmPara); sf_test_upload_tm_log = 1; @@ -524,7 +527,7 @@ SINT32 sf_quectel_upload_file_to_module(UINT8 *fileAbsolutePath, UINT8 *uploadFn } } SF_QUECTEL_UPLOAD_END: - SLOGD("End,ret=0x%08x", ret); + SLOGD("End,ret=0x%08x\n", ret); return ret; } @@ -827,7 +830,7 @@ SINT16 sf_app_get_temper(UINT8 type) /*0:°F 1:°C */ stMessageBuf.arg1 = SF_DEV_CMD_TEMPER; stMessageBuf.arg2 = type; sf_com_message_send_to_cardv(&stMessageBuf); - while((TemperFalg == 0) && (tmp < 20)) + while((TemperFalg == 0) && (tmp < 100)) { usleep(1000); tmp++; @@ -844,6 +847,8 @@ void sf_app_set_temper(SINT16 val) /*0:°F 1:°C */ UINT8 sf_app_get_battery(void) { + return sf_battery_value_get(0); + #if 0 int tmp = 0; SF_MESSAGE_BUF_S stMessageBuf = {0}; @@ -852,12 +857,13 @@ UINT8 sf_app_get_battery(void) stMessageBuf.cmdId = CMD_DEV; stMessageBuf.arg1 = SF_DEV_CMD_BAT; sf_com_message_send_to_cardv(&stMessageBuf); - while((batteryFalg == 0) && (tmp < 30)) + while((batteryFalg == 0) && (tmp < 100)) { usleep(1000); tmp++; } return battery; + #endif } void sf_app_set_battery(UINT8 val, UINT8 type) @@ -1253,7 +1259,7 @@ UINT32 sf_create_dailyreport_file(void) return ret; } - +#if 0 /************************************************* Function: sf_is_enough_power_to_update Description: whether or not enough power to update @@ -1273,7 +1279,7 @@ BOOL sf_is_enough_power_to_update(void) return TRUE; } - +#endif BOOL sf_is_4g_module_usb_update_file_exist(UINT8 *updateFname) { @@ -1310,6 +1316,157 @@ BOOL sf_is_4g_module_usb_update_file_exist(UINT8 *updateFname) return FALSE; } +/************************************************* + Function: sf_get_send_file_list + Description: get send file list + Input: sendfname + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +UINT8 sf_get_send_file_list(char *sendfileList, UINT8 *fileTotal) +{ + UIMenuStoreInfo *pPara = sf_app_ui_para_get(); + SF_PDT_PARAM_STATISTICS_S *pSifarPara = sf_statistics_param_get(); + char sendListName[64] = {0}; + FILE *fd = NULL; + UINT32 fsize = 0; + UINT8 i = 0; + UINT8 MaxFileNum = 200; + UINT32 oldFileKey = 0; + char oldFileName[SF_SEND_LIST_ITEM_LENGTH+1] = {0}; + char *pFileHasSend = NULL; + UINT32 fileOffset = 0; + + if(0 == pPara->SendType){ + snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_AUTO); + }else { + snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_LIST); + } + sf_file_size_get(sendListName, &fsize); + + fd = fopen(sendListName,"r"); + if(fd == 0) + { + printf("%s:%d [ERROR] %s open filed\n", __FUNCTION__, __LINE__, sendListName); + return FAIL; + } + else + { + if(pPara->SendMaxNum == 0) //unlimited + { + MaxFileNum = (sf_battery_value_get(0) >= 50 ? 200 : 100);// the last 100/200 files + } + else + { + MaxFileNum = pPara->SendMaxNum - pSifarPara->picSendMax; + } + printf("%s:%d Get %s MaxFileNum:%d\n", __FUNCTION__, __LINE__, sendListName, MaxFileNum); + + //fsize = sp5kFsFileSizeGet(fd); + if(fsize == 0) + { + fclose(fd); + sf_file_remove(sendListName); + return FAIL; + } + else if(fsize%SF_SEND_LIST_ITEM_LENGTH) //format error delete file list + { + //SLOGE((SINT8 *)"FTP ERROR: 303\n"); + printf("%s:%d FTP ERROR: 303\n", __FUNCTION__, __LINE__); + fclose(fd); + sf_file_remove(sendListName); + return FAIL; + } + else if(fsize > MaxFileNum*SF_SEND_LIST_ITEM_LENGTH) // the last 100/200 files + { + fseek(fd, fsize-MaxFileNum*SF_SEND_LIST_ITEM_LENGTH, SEEK_SET); + fsize = MaxFileNum*SF_SEND_LIST_ITEM_LENGTH; + } + *fileTotal = fsize/SF_SEND_LIST_ITEM_LENGTH; + printf("fileTotal=%d, fsize=%d\n", *fileTotal, fsize); + fread(sendfileList, fsize, 1, fd); + fclose(fd); + + oldFileKey = pPara->FileKey; + printf("last send key:%d\n", oldFileKey); + //oldFileKey = 1000003; //for debug + if((oldFileKey >= 1000001) && (oldFileKey <= 9999999)) //W1000001.JPG W9999999.JPG + { + snprintf(oldFileName, sizeof(oldFileName), "W%ld.JPG", oldFileKey); + printf("last send file:%s\n", oldFileName); + pFileHasSend = strstr(sendfileList, oldFileName); //MAX spend time <= 310ms + if(pFileHasSend != NULL) + { + pFileHasSend -= 1; + fileOffset = abs(pFileHasSend - sendfileList) + SF_SEND_LIST_ITEM_LENGTH; + fsize -= fileOffset; + printf("fileOffset=%d\n", fileOffset); + memmove(sendfileList, pFileHasSend + SF_SEND_LIST_ITEM_LENGTH, fsize); + *(sendfileList+fsize) = '\0'; + *fileTotal = fsize/SF_SEND_LIST_ITEM_LENGTH; + printf("fileTotal=%d, fsize=%d\n", *fileTotal, fsize); + } + } + + for(i=1; i <= *fileTotal; i++) // remove \r + { + *(sendfileList+i*SF_SEND_LIST_ITEM_LENGTH-2) = '\0'; + } + + //memdump(sendfileList, fsize); + //printf("get Success\n"); + return SUCCESS; + } +} + +BOOL sf_check_auto_thumb_file(VOID) +{ + + BOOL ret = FALSE; + UINT8 fileIndex = 0; + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + printf("%s:%d s\n", __FUNCTION__, __LINE__); + + char tmp[64] = {'\0'}; + + SF_SRCFILE_ATTR_S* fileCfg = sf_file_thumb_cfg_get(); + if(0 == puiPara->SendType){ + snprintf(tmp, sizeof(tmp), "%s", SF_THUMB_SEND_AUTO); + }else { + snprintf(tmp, sizeof(tmp), "%s", SF_THUMB_SEND_LIST); + } + + if(SUCCESS == sf_get_send_file_list(&SendFileList[0][0], &SendFileTotal)){ + if (fileCfg) { + ret = TRUE; + for(fileIndex = 0; fileIndex < SendFileTotal; fileIndex++) + { + if(SF_CAM_MODE_PHOTO_VIDEO == (SendFileList[fileIndex][0] - '0')){ + fileCfg->stfileattr[fileIndex].enFileTye = SF_FILE_TYPE_PIC_VIDEO; + }else if(SF_CAM_MODE_PHOTO == (SendFileList[fileIndex][0] - '0')){ + fileCfg->stfileattr[fileIndex].enFileTye = SF_FILE_TYPE_PIC_SMALL; + } + snprintf(fileCfg->stfileattr[fileIndex].thumbfileName, sizeof(fileCfg->stfileattr[fileIndex].thumbfileName), "%s", &SendFileList[fileIndex][1]); + snprintf(fileCfg->stfileattr[fileIndex].thumbfilePath, sizeof(fileCfg->stfileattr[fileIndex].thumbfilePath), "%s%s", SF_SEND_LIST_DIR, &SendFileList[fileIndex][1]); + printf("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,fileCfg->stfileattr[fileIndex].thumbfileSize,fileCfg->stfileattr[fileIndex].thumbfileName,fileCfg->stfileattr[fileIndex].thumbfilePath); + } + } + } + + if(0 == puiPara->SendType){ + sf_file_remove(tmp); + } + + printf("%s:%d e \n", __FUNCTION__, __LINE__); + + return ret; +} + +UINT8 sf_get_send_file_total(void) +{ + return SendFileTotal; +} #endif #ifdef __cplusplus diff --git a/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c b/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c index d04169081..10e109757 100644 --- a/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c +++ b/code/application/source/sf_app/code/source/fileMng/sf_fileMng.c @@ -13,6 +13,7 @@ #include "sf_log.h" #include "sf_fileMng.h" #include "sf_common.h" +#include "sf_battery.h" #ifdef __cplusplus #if __cplusplus @@ -22,8 +23,9 @@ extern "C" { SF_SRCFILE_ATTR_S *pThumbFileCfg = 0; -char SendFileList[201][SF_SEND_LIST_ITEM_LENGTH] = {{0}}; //for 200 files -UINT8 SendFileTotal = 0; +static SF_HDFILE_ATTR_S HDFileCfg = {0}; +static SF_HDFILE_ATTR_S VideoFileCfg = {0}; + //"^HRT[0-9]{5}.txt$" //"^W[0-9]{7}.txt$" @@ -670,157 +672,26 @@ void sf_file_thumb_cfg_clear(void) pThumbFileCfg->filecnt = 0; } -UINT8 sf_get_send_file_total(void) +SF_HDFILE_ATTR_S* sf_file_hd_cfg_get(void) { - return SendFileTotal; + return &HDFileCfg; } -BOOL sf_check_auto_thumb_file(VOID) +void sf_file_hd_cfg_set_down(SF_HDFILE_ATTR_S *pSfHdPara) { - - BOOL ret = FALSE; - UINT8 fileIndex = 0; - UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - printf("%s:%d s\n", __FUNCTION__, __LINE__); - - char tmp[64] = {'\0'}; - - SF_SRCFILE_ATTR_S* fileCfg = sf_file_thumb_cfg_get(); - if(0 == puiPara->SendType){ - snprintf(tmp, sizeof(tmp), "%s", SF_THUMB_SEND_AUTO); - }else { - snprintf(tmp, sizeof(tmp), "%s", SF_THUMB_SEND_LIST); - } - - if(SUCCESS == sf_get_send_file_list(&SendFileList[0][0], &SendFileTotal)){ - if (fileCfg) { - ret = TRUE; - for(fileIndex = 0; fileIndex < SendFileTotal; fileIndex++) - { - if(SF_CAM_MODE_PHOTO_VIDEO == (SendFileList[fileIndex][0] - '0')){ - fileCfg->stfileattr[fileIndex].enFileTye = SF_FILE_TYPE_PIC_VIDEO; - }else if(SF_CAM_MODE_PHOTO == (SendFileList[fileIndex][0] - '0')){ - fileCfg->stfileattr[fileIndex].enFileTye = SF_FILE_TYPE_PIC_SMALL; - } - snprintf(fileCfg->stfileattr[fileIndex].thumbfileName, sizeof(fileCfg->stfileattr[fileIndex].thumbfileName), "%s", &SendFileList[fileIndex][1]); - snprintf(fileCfg->stfileattr[fileIndex].thumbfilePath, sizeof(fileCfg->stfileattr[fileIndex].thumbfilePath), "%s%s", SF_SEND_LIST_DIR, &SendFileList[fileIndex][1]); - printf("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,fileCfg->stfileattr[fileIndex].thumbfileSize,fileCfg->stfileattr[fileIndex].thumbfileName,fileCfg->stfileattr[fileIndex].thumbfilePath); - } - } - } - - if(0 == puiPara->SendType){ - sf_file_remove(tmp); - } - - printf("%s:%d e \n", __FUNCTION__, __LINE__); - - return ret; + //currentInfo = *pSfCustomerPara; + memcpy(pSfHdPara,&HDFileCfg,sizeof(SF_HDFILE_ATTR_S)); +} +void sf_hd_param_set(SF_HDFILE_ATTR_S *pSfHdPara) +{ + //currentInfo = *pSfCustomerPara; + memcpy(&HDFileCfg,pSfHdPara,sizeof(SF_HDFILE_ATTR_S)); } -/************************************************* - Function: sf_get_send_file_list - Description: get send file list - Input: sendfname - Output: N/A - Return: N/A - Others: N/A -*************************************************/ -UINT8 sf_get_send_file_list(char *sendfileList, UINT8 *fileTotal) +SF_HDFILE_ATTR_S* sf_file_video_cfg_get(void) { - UIMenuStoreInfo *pPara = sf_app_ui_para_get(); - char sendListName[64] = {0}; - FILE *fd = NULL; - UINT32 fsize = 0; - UINT8 i = 0; - UINT8 MaxFileNum = 200; - UINT32 oldFileKey = 0; - char oldFileName[SF_SEND_LIST_ITEM_LENGTH+1] = {0}; - char *pFileHasSend = NULL; - UINT32 fileOffset = 0; - - if(0 == pPara->SendType){ - snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_AUTO); - }else { - snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_LIST); - } - sf_file_size_get(sendListName, &fsize); - - fd = fopen(sendListName,"r"); - if(fd == 0) - { - printf("%s:%d [ERROR] %s open filed\n", __FUNCTION__, __LINE__, sendListName); - return FAIL; - } - else - { - if(pPara->SendMaxNum == 0) //unlimited - { - MaxFileNum = 100;//(sf_battery_value_get(0) >= 50 ? 200 : 100);// the last 100/200 files - } - else - { - MaxFileNum = 100;//pPara->SendMaxNum - pSifarPara->picSendMax; - } - printf("%s:%d Get %s MaxFileNum:%d\n", __FUNCTION__, __LINE__, sendListName, MaxFileNum); - - //fsize = sp5kFsFileSizeGet(fd); - if(fsize == 0) - { - fclose(fd); - sf_file_remove(sendListName); - return FAIL; - } - else if(fsize%SF_SEND_LIST_ITEM_LENGTH) //format error delete file list - { - //sf_error_log((SINT8 *)"FTP ERROR: 303\n"); - printf("%s:%d FTP ERROR: 303\n", __FUNCTION__, __LINE__); - fclose(fd); - sf_file_remove(sendListName); - return FAIL; - } - else if(fsize > MaxFileNum*SF_SEND_LIST_ITEM_LENGTH) // the last 100/200 files - { - fseek(fd, fsize-MaxFileNum*SF_SEND_LIST_ITEM_LENGTH, SEEK_SET); - fsize = MaxFileNum*SF_SEND_LIST_ITEM_LENGTH; - } - *fileTotal = fsize/SF_SEND_LIST_ITEM_LENGTH; - printf("fileTotal=%d, fsize=%d\n", *fileTotal, fsize); - fread(sendfileList, fsize, 1, fd); - fclose(fd); - - oldFileKey = pPara->FileKey; - printf("last send key:%d\n", oldFileKey); - //oldFileKey = 1000003; //for debug - if((oldFileKey >= 1000001) && (oldFileKey <= 9999999)) //W1000001.JPG W9999999.JPG - { - snprintf(oldFileName, sizeof(oldFileName), "W%ld.JPG", oldFileKey); - printf("last send file:%s\n", oldFileName); - pFileHasSend = strstr(sendfileList, oldFileName); //MAX spend time <= 310ms - if(pFileHasSend != NULL) - { - pFileHasSend -= 1; - fileOffset = abs(pFileHasSend - sendfileList) + SF_SEND_LIST_ITEM_LENGTH; - fsize -= fileOffset; - printf("fileOffset=%d\n", fileOffset); - memmove(sendfileList, pFileHasSend + SF_SEND_LIST_ITEM_LENGTH, fsize); - *(sendfileList+fsize) = '\0'; - *fileTotal = fsize/SF_SEND_LIST_ITEM_LENGTH; - printf("fileTotal=%d, fsize=%d\n", *fileTotal, fsize); - } - } - - for(i=1; i <= *fileTotal; i++) // remove \r - { - *(sendfileList+i*SF_SEND_LIST_ITEM_LENGTH-2) = '\0'; - } - - //memdump(sendfileList, fsize); - //printf("get Success\n"); - return SUCCESS; - } + return &VideoFileCfg; } - #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 624622d61..f219ee990 100644 --- 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 @@ -23,6 +23,7 @@ #include "sf_hal_gpio.h" #include +#include "IOCfg.h" #ifdef __cplusplus #if __cplusplus extern "C" { @@ -161,6 +162,26 @@ void sf_usb_mux_s(UINT32 cnt) printf("[%s:%d] e cnt:%d\n", __FUNCTION__, __LINE__,cnt); } +int sf_app_pir_statu_read(void) +{ + static UINT8 state = 0; + if(0 == state) + { + state = 1; + gpio_direction_input(GPIO_PIR_STATE); + } + return gpio_get_value(GPIO_PIR_STATE); +} +UINT32 sf_app_data_ready_read(void) +{ + /*static UINT8 state = 0; + if(0 == state) + { + state = 1; + gpio_direction_input(GPIO_KEY_DATAREADY); + }*/ + return gpio_getPin(GPIO_KEY_DATAREADY); +} #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/logMng/sf_log.c b/code/application/source/sf_app/code/source/logMng/sf_log.c index 542ecdc01..aaa24dff6 100644 --- a/code/application/source/sf_app/code/source/logMng/sf_log.c +++ b/code/application/source/sf_app/code/source/logMng/sf_log.c @@ -176,7 +176,7 @@ void sf_log_file(SF_LOG_LEVEL_e enLevel,const char *pszFunc, U32 u32Line,char *p pszFmt = (NULL == pszFmt) ? "" : pszFmt; - if(enLevel <= SF_LOG_LEVEL_DEBUG) + if((enLevel <= SF_LOG_LEVEL_WARNING) ||(1 == puiPara->DebugMode)) { CHAR tmpBuf[2048] = { 0 }; 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 4ff400907..8b47c6334 100644 --- 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 @@ -55,7 +55,7 @@ extern "C" { extern UIMenuStoreInfo currentInfo; //#NT#Init the array to zero. extern UIMenuStoreInfo origInfo; /* backup */ - +extern UIMenuStoreInfo origInfo_check; /* backup */ //BOOL bSysReady = 0; //BOOL bAutoSystemReset = FALSE; @@ -67,6 +67,41 @@ SF_URL_S sfStOtaUrl = {0}; SF_PDT_PARAM_CFG_S StCustomerParam = {0}; SF_PDT_PARAM_STATISTICS_S Ststatistics= {0}; +BOOL sf_Check_OTA(void) +{ + FILE *fp = NULL; + UINT32 u32ize = 0; + char *pStrSrc = NULL; + char *pStrOtsOk = "ota_flag=0x1"; + BOOL ret = FALSE; + + system("cat /proc/cmdline > /tmp/ota.txt"); + fp = fopen("/tmp/ota.txt","r"); + if(fp == NULL){ + return FALSE; + } + + fseek(fp, 0, SEEK_END); + u32ize = ftell(fp); // take file size + fseek(fp, 0, SEEK_SET); // move to position zero + pStrSrc = (char *)malloc(u32ize*sizeof(char)); + if (pStrSrc) { + fread(pStrSrc, 1, u32ize, fp); + if (strstr(pStrSrc, pStrOtsOk) != 0) { + printf("%s: ota upgrade success\r\n", __func__); + ret = TRUE; + } + free(pStrSrc); + } + + fclose(fp); + fp = NULL; + pStrSrc = NULL; + u32ize = 0; + + return ret; +} + int sf_UIInfo_GetStrgPartitionInfo(unsigned long long *pPartOfs, unsigned long long *pPartSize, const char* fdt_path) { unsigned char *p_fdt = (unsigned char *)fdt_get_base(); @@ -293,6 +328,24 @@ UIMenuStoreInfo* sf_app_ui_para_get(void) { return (UIMenuStoreInfo*)¤tInfo; } +/************************************************* + Function: sf_get_para_check_flag + Description: + Input: N/A + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +BOOL sf_get_para_check_flag(void) +{ + if(memcmp(¤tInfo, &origInfo_check, sizeof(currentInfo)) == 0){ + //MLOGI("menu info is changed\n"); + return FALSE; + } + origInfo_check = currentInfo; + + return TRUE; +} #if 0 static void SysLimitFlag(UINT32 uiFlag, UINT32 uiMinId, UINT32 uiMaxId, UINT32 uiDefaultId) @@ -864,6 +917,7 @@ void sf_customer_param_set(UIMenuStoreInfo *pSfCustomerPara) { //currentInfo = *pSfCustomerPara; memcpy(¤tInfo,pSfCustomerPara,sizeof(UIMenuStoreInfo)); + origInfo_check = currentInfo; } void sf_customer_param_set_down(UIMenuStoreInfo *pSfCustomerPara) @@ -881,6 +935,7 @@ void sf_customer_param_reset(SF_PDT_PARAM_CFG_S *psfpdtparam,UINT8 sysRet) SINT32 sf_customer_param_save(SF_PDT_PARAM_CFG_S *pSfCustomerPara) { + #if 0 SF_COMM_CHECK_POINTER(pSfCustomerPara,SF_FAILURE); SINT32 i = 0; SINT32 ret = 0; @@ -901,7 +956,92 @@ SINT32 sf_customer_param_save(SF_PDT_PARAM_CFG_S *pSfCustomerPara) MLOGE("save param failed!!!\n"); fsync(fd); close(fd); - + #endif + + 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__); + + //sf_SysCheckFlag(); + + /* check if sys param changed */ + if(memcmp(¤tInfo, &origInfo, sizeof(currentInfo)) == 0){ + SLOGI("menu info is not changed\n"); + goto EXIT; + } + + sectorCnt = (sizeof(currentInfo) / _EMBMEM_BLK_SIZE_) + ((sizeof(currentInfo) % _EMBMEM_BLK_SIZE_)? 1 : 0); + + ret = sf_UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_SYS); + if ((ret == 0) && (sizeof(currentInfo) < 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){ + SLOGI("open %s failed!\n", sys_mtd_dev_path); + ret = -1; + goto EXIT; + } + + write_size = sectorCnt * _EMBMEM_BLK_SIZE_; + tmpInfo = malloc(write_size); + if(!tmpInfo){ + SLOGE("allocate tmpInfo failed!\n"); + ret = -1; + goto EXIT; + } + + sprintf(cmd, "flash_eraseall -N %s", sys_mtd_dev_path); + SLOGI("%s\n", cmd); + ret = system(cmd); + if(ret){ + SLOGE("flash_eraseall failed!\n"); + goto EXIT; + } + + memset(tmpInfo, 0xFF, write_size); + currentInfo.uhInfoSize = sizeof(currentInfo); + memcpy(tmpInfo, ¤tInfo, sizeof(currentInfo)); + rw_len = fwrite(tmpInfo, 1, write_size, sys_mtd_fp); + if(rw_len != (INT32)(write_size)) { + SLOGE("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(currentInfo)); + SLOGI("**************size = %lx / mov size = %u / sum = %lx **************\n", + sizeof(currentInfo), + ((UIMenuStoreInfo*)tmpInfo)->UIParameter[FL_MOVIE_SIZE], + sum); + } + else{ + SLOGE("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__); + return SF_SUCCESS; } diff --git a/code/lib/source/sifar/code/source/common/sf_pc_tool.c b/code/application/source/sf_app/code/source/pc_tool/sf_pc_tool.c similarity index 100% rename from code/lib/source/sifar/code/source/common/sf_pc_tool.c rename to code/application/source/sf_app/code/source/pc_tool/sf_pc_tool.c diff --git a/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c b/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c index 1be6b3646..28b36dfd8 100644 --- a/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c +++ b/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c @@ -393,8 +393,17 @@ SINT32 sf_sd_status_set(SF_SD_STATUS_E enStatus) *************************************************/ UINT32 sf_delete_send_flie_list(void) { - printf("delete %s\n", SF_SEND_LIST_DIR); - sf_file_remove(SF_THUMB_SEND_LIST); + UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); + if(0 == puiPara->SendType){ + if(sf_file_IsExsit(SF_THUMB_SEND_AUTO) == SF_TRUE) + sf_file_remove(SF_THUMB_SEND_AUTO); + } + else{ + printf("delete %s\n", SF_SEND_LIST_DIR); + if(sf_file_IsExsit(SF_THUMB_SEND_LIST) == SF_TRUE) + sf_file_remove(SF_THUMB_SEND_LIST); + } + return 0; } 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 ead0026bd..fd459fe77 100644 --- 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 @@ -36,7 +36,10 @@ #include "sf_message_queue.h" #include "sf_commu_mcu.h" #include - +#include "kwrap/flag.h" +#include "kwrap/debug.h" +#include "kwrap/util.h" +#include #define SERIAL_DEVICE_PATH "/dev/ttyS2" #ifdef __cplusplus @@ -125,10 +128,48 @@ unsigned char cmpValBuf[BUF_REG_SIZE] = {0}; static unsigned char sf_commu_mcu_exit = 1; static pthread_t sfCommuMcuThread = 0; -static void * sf_commu_mcu_task(void * argv); +//static void * sf_commu_mcu_task(void * argv); int gsfd = -1; +static ID sf_mcu_flag_id = 0; + +void sf_mcu_flag_init(void) +{ + vos_flag_create(&sf_mcu_flag_id, NULL, "sf_mcu_flag_id"); + vos_flag_clr(sf_mcu_flag_id, (FLGPTN)-1); +} + +void sf_mcu_flag_set_done(MCU_FLAG_INIT boot_init) +{ + vos_flag_set(sf_mcu_flag_id, (FLGPTN)(1 << boot_init)); +} + +void sf_mcu_flag_wait_done(MCU_FLAG_INIT boot_init) +{ + FLGPTN flgptn; + vos_flag_wait(&flgptn, sf_mcu_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW); +} + +int sf_mcu_flag_wait_done_timeout(MCU_FLAG_INIT boot_init, int timeout_ms) +{ + ER ret = E_OK; + FLGPTN flgptn; + + ret = vos_flag_wait_timeout(&flgptn, sf_mcu_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW, vos_util_msec_to_tick(timeout_ms)); + if(unlikely(ret != E_OK)){ + printf("wait(%lu) init timeout(%ld ms)!\n", boot_init, timeout_ms); + } + + return ret; +} + +void sf_mcu_flag_clear_done(MCU_FLAG_INIT boot_init) +{ + //vos_flag_clr(sf_mcu_flag_id, (FLGPTN)(1 << boot_init)); + vos_flag_clr(sf_mcu_flag_id, (FLGPTN)-1); +} + void mcubuf_reset(void) { mcu_buf_len = 0; @@ -157,6 +198,7 @@ int sf_commu_mcu_close(void) { if(gsfd > 0) close(gsfd); + gsfd = -1; return 0; } @@ -351,11 +393,59 @@ int sf_commu_write(unsigned char * buf, int len) int sf_commu_read(unsigned char * buf, int len) { int ret = SF_SUCCESS; + #if 0 + int timeout_ms = 1000; + // 傿•°æ£€æŸ¥ + if (buf == NULL || len <= 0) + { + printf("%s:%d Invalid parameters.\n", __FUNCTION__, __LINE__); + return -EINVAL; + } + struct timeval timeout; + fd_set read_fds; + + // 设置超时时间 + timeout.tv_sec = timeout_ms / 1000; + timeout.tv_usec = (timeout_ms % 1000) * 1000; + + // åˆå§‹åŒ–文件æè¿°ç¬¦é›† + FD_ZERO(&read_fds); + FD_SET(gsfd, &read_fds); + + // 使用 select 检查文件æè¿°ç¬¦æ˜¯å¦å¯è¯» + ret = select(gsfd + 1, &read_fds, NULL, NULL, &timeout); + if (ret < 0) + { + printf("%s:%d read error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); + return -errno; + } + else if (ret == 0) + { + // 超时,没有数æ®å¯è¯» + return 0; + } + + if (FD_ISSET(gsfd, &read_fds)) + { + ret = read(gsfd, buf, len); + if (ret < 0) + { + printf("%s:%d read error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); + return -errno; + } + else + { + // 返回实际读å–的字节数 + return ret; + } + } + return -1; // ä¸å¯è¾¾çš„代ç ï¼Œä½†ä¸ºäº†ä¿æŒä¸€è‡´æ€§ï¼Œè¿™é‡Œä¹Ÿè¿”回-1 + #else ret = read(gsfd, buf, len); if(ret < 0) return SF_FAILURE; return ret; - + #endif } int sf_set_mcu_reg(unsigned char reg, unsigned char val) @@ -612,6 +702,13 @@ unsigned int sf_get_mcu_reg_ack_depack_many(unsigned char reg[], unsigned char v int sf_commu_wait(unsigned char cmd) { + if(sf_mcu_flag_wait_done_timeout(cmd, 60)) + { + sf_commu_reset(); + return - 1; + } + return 0; + #if 0 volatile char trytimes = 0; while ((smap_buf.buf[2] != cmd || SMAP_waitAck == 0) && trytimes <= 100) { @@ -624,6 +721,7 @@ int sf_commu_wait(unsigned char cmd) return - 1; } return 0; + #endif } void sf_commu_reset(void) @@ -633,6 +731,7 @@ void sf_commu_reset(void) memset(smap_buf.buf, 0x00, sizeof(smap_buf.buf)); memset(cmpRegBuf, 0x00, sizeof(cmpRegBuf)); memset(cmpValBuf, 0x00, sizeof(cmpValBuf)); + sf_mcu_flag_clear_done(0); } int sf_commu_set_mcu(unsigned char reg, unsigned char val) @@ -693,7 +792,7 @@ int sf_commu_get_mcu(unsigned char reg) return ret; } -int sf_commu_set_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num) +int sf_commu_set_mcu_many2(unsigned char reg[], unsigned char val[], unsigned int *num) { int ret = -1; //unsigned int address = 0; @@ -727,15 +826,13 @@ int sf_commu_set_mcu_many(unsigned char reg[], unsigned char val[], unsigned int } } } - return ret; } -int sf_commu_get_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num) +int sf_commu_get_mcu_many2(unsigned char reg[], unsigned char val[], unsigned int *num) { int ret = 0; unsigned int i = 0; - sf_commu_reset(); sf_get_mcu_reg_many(reg,*num); ret = sf_commu_wait(0x02); @@ -763,7 +860,6 @@ int sf_commu_get_mcu_many(unsigned char reg[], unsigned char val[], unsigned int } } } - return ret; } @@ -849,7 +945,7 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len) stMessageBuf.arg3 = (val[0] & 0x1F); ret = 0x05; - if(stMessageBuf.arg3 == 3) //ON + if(3 == stMessageBuf.arg3) //ON { sf_set_pir_statu_flag(1); if(sf_get_mode_flag()){ @@ -857,12 +953,20 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len) } printf("%s:%d-------PIR Key Pressed.------\n", __FUNCTION__, __LINE__); } - else if((stMessageBuf.arg3 == 0) || (stMessageBuf.arg3 == 1)) //ON + else if(1 == stMessageBuf.arg3) //ON->OFF + {//PIR MODE: ON->OFF/ ON->SETUP + sf_set_module_sleep_flag(0); + sf_com_message_send_to_cardv(&stMessageBuf); + sf_sys_status_led_set(SF_LED_SYS_STATE_POWER_OFF); + } + else if(0 == stMessageBuf.arg3) //ON->SETUP {//PIR MODE: ON->OFF/ ON->SETUP sf_set_module_sleep_flag(0); sf_com_message_send_to_cardv(&stMessageBuf); } - sf_set_power_off_flag(1); + if(sf_get_mode_flag()){ + sf_set_power_off_flag(1); + } } else { @@ -890,12 +994,63 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len) } return ret; } +int sf_mcu_dev_read(unsigned char *buf, int len, int timeout_ms) +{ + int ret = 0; + // 傿•°æ£€æŸ¥ + if (buf == NULL || len <= 0 || timeout_ms < 0) + { + printf("Invalid parameters for sf_mcu_dev_read.\n"); + return -EINVAL; + } + struct timeval timeout; + fd_set read_fds; + + // 设置超时时间 + timeout.tv_sec = timeout_ms / 1000; + timeout.tv_usec = (timeout_ms % 1000) * 1000; + + // åˆå§‹åŒ–文件æè¿°ç¬¦é›† + FD_ZERO(&read_fds); + FD_SET(gsfd, &read_fds); + + // 使用 select 检查文件æè¿°ç¬¦æ˜¯å¦å¯è¯» + ret = select(gsfd + 1, &read_fds, NULL, NULL, &timeout); + if (ret < 0) + { + printf("%s:%d read error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); + return -errno; + } + else if (ret == 0) + { + // 超时,没有数æ®å¯è¯» + return 0; + } + + if (FD_ISSET(gsfd, &read_fds)) + { + ret = read(gsfd, buf, len); + if (ret < 0) + { + printf("%s:%d read error: %s\n", __FUNCTION__, __LINE__, strerror(errno)); + return -errno; + } + else + { + // 返回实际读å–的字节数 + return ret; + } + } + + return -1; // ä¸å¯è¾¾çš„代ç ï¼Œä½†ä¸ºäº†ä¿æŒä¸€è‡´æ€§ï¼Œè¿™é‡Œä¹Ÿè¿”回-1 +} static void * sf_commu_mcu_task(void * argv) { static unsigned char buffer[BUF_REG_SIZE] = {0}; int i = 0; + //int j = 0; int readLen = 0; int len = 0; short start = -1; @@ -906,12 +1061,59 @@ static void * sf_commu_mcu_task(void * argv) unsigned char temp_end2 = 0; unsigned char copy_size = 0; printf("[%s:%d] s\n", __FUNCTION__, __LINE__); - + //sf_mcu_flag_set_done(MCU_FLAG_GET); mcubuf_reset(); while(sf_commu_mcu_exit == 0) { - readLen = sf_commu_read(buffer + len, BUF_REG_SIZE); + #if 0 + sf_mcu_flag_wait_done(MCU_FLAG_GET); + //len = sf_commu_read(buffer, BUF_REG_SIZE); + len = sf_mcu_dev_read(buffer, 256, 10); + + if (len > 0) + { + for (i = 0; i < len - 1; i++) + { + // 查找起始标识符:0x55, 0xAA + if (buffer[i] == 0x55 && buffer[i + 1] == 0xAA) + { + start = i; + // æŸ¥æ‰¾ç»“æŸæ ‡è¯†ç¬¦ï¼š0xFF, 0xEE + for ( j = i; j < len - 1; j++) + { + if (buffer[j] == 0xFF && buffer[j + 1] == 0xEE) + { + end = j + 1; + // 查找是å¦ç¬¦åˆè¦æ±‚的命令 + copy_size = end - start + 1; + if (buffer[start + 2] != 0xFF) + { + if (buffer[start + 2] == 0x05 || buffer[start + 2] == 0x06) + { + memcpy(mcu_buf, buffer + start, copy_size); + mcu_buf_len = copy_size; + sf_commu_parse_mcu_data(mcu_buf, mcu_buf_len); + mcubuf_reset(); + } + } + i = end; // 设置起始值 + //break; + } + } + } + } + } + else if (len < 0) + { + printf("Error occurred in reading: %s\n", strerror(-len)); + //break; + } + sf_mcu_flag_set_done(MCU_FLAG_GET); + + #else + + readLen = sf_commu_read(buffer + len, BUF_REG_SIZE); if(readLen > 0) { len += readLen; @@ -995,7 +1197,6 @@ static void * sf_commu_mcu_task(void * argv) end = -1; len = 0; i = 0; - } else { @@ -1004,11 +1205,14 @@ static void * sf_commu_mcu_task(void * argv) len = 0; i = 0; } + sf_mcu_flag_set_done(MCU_FLAG_GET); } } usleep(10000);//10ms + #endif } + //sf_mcu_flag_set_done(MCU_FLAG_GET); sf_commu_mcu_close(); pthread_exit(0); } @@ -1040,6 +1244,182 @@ unsigned char sf_commu_mcu_task_running(void) return sf_commu_mcu_exit; } + +int sf_mcu_dev_wait(unsigned char cmd) +{ + unsigned char buffer[256]; + unsigned int len = 0; + int start = -1; + int end = -1; + unsigned int copy_size = 0; + //int trytimes = 0; + const int total_timeout_ms = 3000; // 最大超时时间,与原始的 trytimes * 1000 相等 + const int read_timeout_ms = 1000; // 啿¬¡ read è¶…æ—¶æ—¶é—´ + int time_elapsed_ms = 0; + int break_flag = 0; + + while ((smap_buf.buf[2] != cmd || SMAP_waitAck == 0) && time_elapsed_ms < total_timeout_ms && !break_flag) + { + len = sf_mcu_dev_read(buffer, 256, read_timeout_ms); + if (len > 0) + { + for (unsigned int i = 0; i < len - 1; i++) + { + // 查找起始标识符:0x55, 0xAA + if (buffer[i] == 0x55 && buffer[i + 1] == 0xAA) + { + start = i; + // æŸ¥æ‰¾ç»“æŸæ ‡è¯†ç¬¦ï¼š0xFF, 0xEE + for (unsigned int j = i; j < len - 1; j++) + { + if (buffer[j] == 0xFF && buffer[j + 1] == 0xEE) + { + end = j + 1; + // 查找是å¦ç¬¦åˆè¦æ±‚的命令 + copy_size = end - start + 1; + if (buffer[start + 2] == cmd && buffer[start + 2] != 0xFF) + { + if (buffer[start + 2] != 0x05 && buffer[start + 2] != 0x06) + { + // 如果是符åˆè¦æ±‚的命令,写入 smap_buf 中 + memcpy(smap_buf.buf + smap_buf.index, buffer + start, copy_size); + smap_buf.index += copy_size; + SMAP_waitAck = 1; // è®¾ç½®åº”ç­”æ ‡å¿—ä½ + } + else + { + // 如果是MCU状æ€ç›¸å…³å‘½ä»¤ï¼Œå†™å…¥ mcu_buf 中 + //memcpy(mcu_buf, buffer + start, copy_size); + //mcu_buf_len = copy_size; + } + // 设置外层循环退出标志 + break_flag = 1; + } + i = end; // 设置起始值 + break; + } + } + } + } + } + else if (len < 0) + { + printf("Error occurred in reading: %s\n", strerror(-len)); + break; + } + time_elapsed_ms += read_timeout_ms; + } + return time_elapsed_ms >= total_timeout_ms ? -1 : 0; +} + +int sf_commu_set_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num) +{ + int ret = -1; + int retries = 0; // é‡è¯•次数 + unsigned int i = 0; + + if (gsfd == -1) + sf_commu_mcu_open(); + + while (retries < 2) + { + sf_commu_reset(); + sf_set_mcu_reg_many(reg, val, *num); + //ret = sf_mcu_dev_wait(0x04); + ret = sf_commu_wait(MCU_FLAG_GET); + + if (ret < 0) + { + printf("%s:%d time out\r\n", __FUNCTION__, __LINE__); + sf_commu_reset(); + retries++; // 超时时增加é‡è¯•次数 + } + else + { + ret = sf_get_mcu_reg_ack_depack_many(cmpRegBuf, cmpValBuf, num); + if (ret < 0) + { + printf("%s:%d error\r\n", __FUNCTION__, __LINE__); + ret = -1; + retries++; // 错误时增加é‡è¯•次数 + + } + else + { + for(i = 0; i < *num; i++) + { + if((reg[i] != cmpRegBuf[i]) || (val[i] != cmpValBuf[i])) + { + printf("%s:%d error address %d, value %d get address %d, value %d\r\n", __FUNCTION__, __LINE__, reg[i], val[i], cmpRegBuf[i], cmpValBuf[i]); + ret = -1; + retries++; // 错误时增加é‡è¯•次数 + } + else{ + return ret; + } + } + } + } + } + + return -1; // 超过最大é‡è¯•次数ä»ç„¶å¤±è´¥æ—¶ï¼Œè¿”回 -1 +} + +int sf_commu_get_mcu_many(unsigned char reg[], unsigned char val[], unsigned int *num) +{ + int ret = -1; + int retries = 0; // é‡è¯•次数 + unsigned int i = 0; + + if (gsfd == -1) + sf_commu_mcu_open(); + + while (retries < 2) + { + sf_commu_reset(); + sf_get_mcu_reg_many(reg,*num); + //printf("sf_mcu_dev_get_mcu %d", reg); + //ret = sf_mcu_dev_wait(0x02); + ret = sf_commu_wait(MCU_FLAG_GET); + + if (ret < 0) + { + printf("%s:%d time out\r\n", __FUNCTION__, __LINE__); + sf_commu_reset(); + retries++; // 超时时增加é‡è¯•次数 + } + else + { + ret = sf_get_mcu_reg_ack_depack_many(cmpRegBuf, val, num); + if (ret < 0) + { + printf("%s:%d error\r\n", __FUNCTION__, __LINE__); + ret = -1; + retries++; // 错误时增加é‡è¯•次数 + } + else + { + for(i = 0; i < *num; i++) + { + if(reg[i] != cmpRegBuf[i]) + { + printf("%s:%d error\r\n", __FUNCTION__, __LINE__); + ret = -1; + retries++; // 错误时增加é‡è¯•次数 + + } + else{ + return ret; // æˆåŠŸæ—¶ç›´æŽ¥è¿”å›ž + } + } + } + } + } + + return -1; // 超过最大é‡è¯•次数ä»ç„¶å¤±è´¥æ—¶ï¼Œè¿”回 -1 +} + + #ifdef __cplusplus #if __cplusplus } 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 64585f469..e2f7c6381 100644 --- 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 @@ -29,7 +29,7 @@ #include "sf_commu_mcu_reg.h" #include #include - +#include "sf_common.h" #ifdef __cplusplus #if __cplusplus @@ -65,8 +65,6 @@ static UINT8 SIMPINPUK = 1; static UINT8 cq_Signal = 0; static UINT8 drNoResetTimeSync = SF_FALSE; //0:reset; 1:no reset; static UINT8 SetMcuRtcFlag = 0; -static UINT8 ModuleUpdating = 0; -static UINT8 FwUpdate = 0; static BOOL SignalReadyFlag = FALSE; @@ -345,8 +343,8 @@ unsigned char sf_mcu_analog_pir_sen_convert(unsigned char pirs) unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) { - unsigned char mcuReg[70] = {0}; - unsigned char mcuData[70] = {0}; + unsigned char mcuReg[REG_SIZE] = {0}; + unsigned char mcuData[REG_SIZE] = {0}; //unsigned char regsize =0; unsigned char i = 0; unsigned char temp = 0; @@ -363,6 +361,7 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) SINT32 isCardFull = sf_is_card_full(); //CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle(); sf_set_sim_insert(1);//Remove hardware detection SIM card + MLOGI("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION); MLOGI("DailyReportSwitch=%d %02d:%02d\n", puiPara->DailyReportSwitch, puiPara->DailyReportTime2.Hour, puiPara->DailyReportTime2.Min); MLOGI("isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %d start mode = %d\n", isUsb, isCard, isCardFull, val, simCardInsert, sf_poweron_type_get()); if(!isCard) @@ -1180,6 +1179,7 @@ int sf_get_signal_ready(void) int sf_set_signal_ready(int value) { isSignalReady = value; + return isSignalReady; } UINT8 sf_get_cq_signal(void) { @@ -1343,26 +1343,6 @@ void sf_set_sms_number(UINT32 num) } } -UINT8 sf_get_module_update(void) -{ - return ModuleUpdating; -} - -void sf_set_module_update(UINT8 flag) -{ - ModuleUpdating = flag; -} - -UINT8 sf_get_fw_update(void) -{ - return FwUpdate; -} - -void sf_set_fw_update(UINT8 flag) -{ - FwUpdate = flag; -} - void sf_set_gprs_errno(SINT32 value) { GPRS_ERRNO = value; diff --git a/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c b/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c index 0d0c10440..f621301b1 100644 --- a/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c +++ b/code/application/source/sf_app/code/source/wifi/sf_wifi_svr.c @@ -130,6 +130,7 @@ UINT16 CurrentWifiCmd = 0; UINT8 gFileName[SF_FILENAME_MAXLEN]; UINT8 SendingFile = 0; +INT32 DigitalZoom = 0; sysMsg_t sendMsg; static SF_WIFI_STATUS_E WifiStatus = SF_WIFI_BUTT; @@ -226,7 +227,7 @@ static S32 sf_get_sd_info(UINT32 *pSDStatus, UINT32 *pSDFree, UINT32 *pSDTotalSi return *pSDStatus; } - +#if 0 static void sf_set_zoom(U32 nZoom) { int s32Ret = 0; @@ -268,7 +269,7 @@ static void sf_set_zoom(U32 nZoom) } } - +#endif SF_WIFI_STATUS_E sf_get_wifi_status(void) { return WifiStatus; @@ -800,23 +801,25 @@ void sf_app_Get_Camera_Info(MSG_DEV_INFO_Get_Rsp_T *camInfo) //MLOGI("[sf_app_Get_Camera_Info],sf_get_sifar_param\n"); camInfo->cmdRet = 0; - //strcpy((char *)camInfo->protocolVersion, "1.0"); + strcpy((char *)camInfo->protocolVersion, "1.0"); //printf("[sf_app_Get_Camera_Info],protocolVersion\n"); camInfo->devType = 0; - //strcpy((char *)camInfo->devId, "1.0.0.1"); + strcpy((char *)camInfo->devId, "1.0.0.1"); // printf("[sf_app_Get_Camera_Info],devId\n"); - camInfo->batLevel = sf_battery_level_get(); + //camInfo->batLevel = sf_battery_level_get(); + camInfo->batLevel = sf_cardv_battery_level_get(); if(camInfo->batLevel < 1) camInfo->batLevel = 1; //printf("[sf_app_Get_Camera_Info],sf_get_Battery_Level\n"); //camInfo->batteryPercent = camInfo->batLevel * 20; - camInfo->batteryPercent = sf_battery_value_get(sf_get_night_led_flag()); - camInfo->batteryType = 0; - + //camInfo->batteryPercent = sf_battery_value_get(sf_get_night_led_flag()); + camInfo->batteryPercent = sf_cardv_battery_value_get(); + //camInfo->batteryType = sf_battery_type_get(); + camInfo->batteryType = sf_cardv_battery_type_get(); UINT32 SDFree; /* SDå¡å‰©ä½™å®¹é‡ MB */ UINT32 SDTotalSize; /* SD塿€»å®¹é‡MB */ @@ -883,46 +886,38 @@ void sf_app_Get_Camera_Para(MSG_DEV_Param_Get_Rsp_T *CamPara) //printf("[sf_app_Get_Camera_Para],snapnum:%d\n",puiPara->snapnum); CamPara->cmdRet = 0; - CamPara->zoom = puiPara->Zoom; + CamPara->zoom = DigitalZoom + 1;//puiPara->Zoom+1; - if(puiPara->CamMode == 0) - { - CamPara->cameraMode = 0; - } - else if (puiPara->CamMode == 2) - { - CamPara->cameraMode = 1; - } - else if (puiPara->CamMode == 1) - { - CamPara->cameraMode = 2; - } - else - { - CamPara->cameraMode = 0; - } + CamPara->cameraMode = (puiPara->CamMode==2)?1:0; MLOGI("Camera Mode:%d\n", CamPara->cameraMode); //CamPara->cameraMode = puiPara->CamMode; - if(puiPara->ImgSize == 2) - { - CamPara->imageSize = 0; - } - else if(puiPara->ImgSize == 3) - { - CamPara->imageSize = 1; - } - else if(puiPara->ImgSize == 4) - { - CamPara->imageSize = 2; - } - else - { - CamPara->imageSize = 2; - } - + if(PHOTO_SIZE_16M == puiPara->ImgSize) + { + CamPara->imageSize = 0; + } + else if(PHOTO_SIZE_12M == puiPara->ImgSize) + { + CamPara->imageSize = 1; + } + else if(PHOTO_SIZE_8M == puiPara->ImgSize) + { + CamPara->imageSize = 2; + } + /*else if(PHOTO_SIZE_16M == puiPara->ImgSize) + { + CamPara->imageSize = 3; + } + else if(PHOTO_SIZE_32M == puiPara->ImgSize) + { + CamPara->imageSize = 2; + }*/ + else + { + CamPara->imageSize = 2; + } MLOGI("Image Size:%d\n", CamPara->imageSize); //CamPara->imageSize = puiPara->ImgSize; @@ -960,8 +955,27 @@ void sf_app_Get_Camera_Para(MSG_DEV_Param_Get_Rsp_T *CamPara) CamPara->sendSecondTimeM = puiPara->TimeSend2.Min;// CamPara->SMSCtrl = puiPara->GprsMode; - CamPara->videoSize = puiPara->VideoSize; - CamPara->videoTime = puiPara->VideoLenth-5; + if(MOVIE_SIZE_FRONT_1920x1080P30 == puiPara->VideoSize){ + CamPara->videoSize = 0; + } + else if(MOVIE_SIZE_FRONT_1280x720P30 == puiPara->VideoSize){ + CamPara->videoSize = 1; + } + else if(MOVIE_SIZE_FRONT_848x480P30 == puiPara->VideoSize){ + CamPara->videoSize = 2; + } + else{ + CamPara->videoSize = 1; + } + if(15 == puiPara->VideoLenth) + { + CamPara->videoTime = 10; + } + else if (10 == puiPara->VideoLenth) + { + CamPara->videoTime = 5; + } + CamPara->batType = puiPara->BatteryType; CamPara->cameraID = puiPara->CamNameSwitch == 0 ? 1:0; @@ -1155,9 +1169,9 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) if(msgParse.cmd == WIFI_GET_CAMERA_CONNECT) { // jiamin add:streaming reset count time - if(!isStopStreaming) + //if(!isStopStreaming) { - //sf_clear_poweroff_time();/*reset power off count time*/ + sf_set_auto_off_time(0);/*reset power off count time*/ } } else @@ -1298,16 +1312,17 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) break; #endif case WIFI_SET_CAMERA_Zoom: // - MLOGI("[WIFI_SET_CAMERA_Zoom],Zoom:%d\n",puiPara->Zoom); - puiPara->Zoom = pMsgStruct->msgBuf.deviceZoomSet.zoom; - puiPara->Zoom = (puiPara->Zoom > 4 ? 1 : puiPara->Zoom); + MLOGI("[WIFI_SET_CAMERA_Zoom],Zoom:%d\n",DigitalZoom); + DigitalZoom = pMsgStruct->msgBuf.deviceZoomSet.zoom; + DigitalZoom = (DigitalZoom > 4 ? 1 : DigitalZoom) - 1; //forbuild sp5kModeGet(&curMode); curMode = 0;//forbuild - MLOGI("mode = 0x%x, zoom = %d,\n", curMode, puiPara->Zoom); - MLOGI(" factor = %d\n", zmFactor[puiPara->Zoom]); + MLOGI("mode = 0x%x, zoom = %d,\n", curMode, DigitalZoom); + MLOGI(" factor = %d\n", zmFactor[DigitalZoom]); //forbuild sp5kZoomFactorSet(curMode, zmFactor[puiPara.zoom]); - sf_set_zoom(puiPara->Zoom); + //sf_set_zoom(puiPara->Zoom); + sf_set_DZoom(DigitalZoom); respFlag = 2; paramSaveFlag = 0; break; @@ -1395,28 +1410,30 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) if(tmpValue == 0) { - puiPara->ImgSize = SF_IMG_SIZE_24M; + puiPara->ImgSize = PHOTO_SIZE_16M; } else if(tmpValue == 1) { - puiPara->ImgSize = SF_IMG_SIZE_12M; + puiPara->ImgSize = PHOTO_SIZE_12M; } else if(tmpValue == 2) { - puiPara->ImgSize = SF_IMG_SIZE_8M; + puiPara->ImgSize = PHOTO_SIZE_8M; } + /* else if(tmpValue == 3) { - puiPara->ImgSize = SF_IMG_SIZE_16M; + puiPara->ImgSize = PHOTO_SIZE_16M; } else if(tmpValue == 2) { - puiPara->ImgSize = SF_IMG_SIZE_32M; - } + puiPara->ImgSize = PHOTO_SIZE_32M; + }*/ else { - puiPara->ImgSize = SF_IMG_SIZE_8M; + puiPara->ImgSize = PHOTO_SIZE_8M; } + SysSetFlag(FL_PHOTO_SIZE, puiPara->ImgSize); //sf_set_img_size(puiPara->ImgSize); respFlag = 2; @@ -1593,6 +1610,19 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) case WIFI_SET_CAMERA_VideoSize://err MLOGI("[WIFI_SET_CAMERA_VideoSize],videoSize:%d\n",pMsgStruct->msgBuf.setVideoSize.videoSize); puiPara->VideoSize = pMsgStruct->msgBuf.setVideoSize.videoSize % 3; + if(0 == pMsgStruct->msgBuf.setVideoSize.videoSize % 3){ + puiPara->VideoSize = MOVIE_SIZE_FRONT_1920x1080P30; + }else if(1 == pMsgStruct->msgBuf.setVideoSize.videoSize % 3){ + puiPara->VideoSize = MOVIE_SIZE_FRONT_1280x720P30; + }else if(2 == pMsgStruct->msgBuf.setVideoSize.videoSize % 3){ + puiPara->VideoSize = MOVIE_SIZE_FRONT_848x480P30; + }else{ + puiPara->VideoSize = MOVIE_SIZE_FRONT_1280x720P30; + } + if(puiPara->VideoSize != SysGetFlag(FL_MOVIE_SIZE)) + { + SysSetFlag(FL_MOVIE_SIZE, puiPara->VideoSize); + } //forbuild appMediaAttrUpdate(puiPara.VideoSize); //sf_set_video_size(puiPara->VideoSize); respFlag = 2; @@ -1601,7 +1631,14 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) case WIFI_SET_CAMERA_VideoTime: //O MLOGI("[WIFI_SET_CAMERA_VideoTime],videoTime:%d\n",pMsgStruct->msgBuf.setVideoTime.videoTime); - puiPara->VideoLenth = pMsgStruct->msgBuf.setVideoTime.videoTime+5; + if(10 == pMsgStruct->msgBuf.setVideoTime.videoTime) + { + puiPara->VideoLenth = 15; + } + else if (5 == pMsgStruct->msgBuf.setVideoTime.videoTime) + { + puiPara->VideoLenth = 10; + } //puiPara->VideoLenth = (puiPara->VideoLenth > 55 ? 0 : puiPara->VideoLenth); respFlag = 2; paramSaveFlag = 1; @@ -1771,7 +1808,7 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) } else { - sprintf((char *)fileName, "./%s",pMsgStruct->msgBuf.ctrlFileTransfer.fileName); + sprintf((char *)fileName, "%s%s",SF_SD_ROOT,pMsgStruct->msgBuf.ctrlFileTransfer.fileName); } // printf("rec file cmd:%s\n", fileName); } @@ -1967,6 +2004,10 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) uTemp = htonl(pMsgStruct->msgBuf.ctrlUpdate.updateType); MLOGI("[WIFI_CTRL_UPGRADE],fSize:%d\n",fSize); #if 1//forbuild + if(uTemp == 0) + { + sf_do_upgrade_thread(); + } //sf_app_msg_data_snd(SY_MSG_UPGRADE_FW,(unsigned char*)NULL); #endif respFlag = 2;//forbuild @@ -2066,6 +2107,7 @@ SINT32 sf_svr_packet_proc(SINT32 fd, UINT8 *pAppData, UINT16 dataLen) if(paraNeedReboot) { //sf_sys_reboot(); + Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_NORMAL); //shutdown start } } } diff --git a/code/hdal/vendor/output/libvendor_ai2_pub.a b/code/hdal/vendor/output/libvendor_ai2_pub.a index a0d0c2b2e6b74db3bd84ca35ad70d5dff6abcab7..cf9183ea392e6c79f99be4b10d15e52629ca6b78 100644 GIT binary patch delta 315 zcmbPmj$;B4$*@_PSQr=>ZB$yv!DeY}ZfI^X`Jb5h=C>T&d{F-8e`0L>5Vj>)PEoBJ zCI{q;Ek0qw1yg#?ZWBAg7_rTB+cCo?Oee<`mBAb)2 f)B$b|&~cmhu4soi%)$_4PIJQA?FnlcH&g-uB(r8- delta 314 zcmbPmj$;B4$*>ukn3ZGKW8UCdGCt&%>fA-EHM3bDSaX^d7#moH7ai~ zBl9=3a4>FGsk_01EGW@fgQn;KGb_kjrjs|Ch;LrgAtL}Y|J;mSY%q4;{B5kr#w09t dfExpJ+vdG1+9B>TGXQzBIbrSggtd$tDgkp6WrP3# diff --git a/code/hdal/vendor/output/libvendor_ai2_pub2.a b/code/hdal/vendor/output/libvendor_ai2_pub2.a index 9c7b0cbc420f3d5d27a627d85099ff403e2d57c0..1c5c00993fc2ee3a9bc63744c5664ef230c63bb0 100644 GIT binary patch delta 392 zcmccjn(N+ct_d=%mL?Vk1{)P83bI)mn;TjfPJSRSzWKZ$Hy@P0`GNd7eq_1R`rRWU_n6HN(`yjG#{rXbm?XYAIzkz4Pr#bVEoM++T<8FC-vW8f+=>GWF!DH2<)gu zi`kI*{wwFR!uTM=xYj$s4GY*b59%o6$s5`vnt8Tw=h@D9s1l)GeEVwyCUqW&fDurU n_;!6;rt50RDwI>0qInSlV%ujGGOZAYX$jaQu|1)asZIv~9J+g& delta 390 zcmccjn(N+ct_d=%h9+iaW*ZeJ3bKJ&29qDii*G(J$jt}kZ+;+ujvra>w0<{CZn8mu z_~v4}|C})SfKB3?`#ol}!}J;i@NvN8943ixj*d`<+Y_*CK(C93<5i9(PB1a zzW>VktS~;vFs}6uaKi#N&4W71X!3?OiDsVd+j+J#9;!sB7vKKcfJvPP5_Xf #include -#include -#include -#include -#include -#include +//#include +//#include +//#include +//#include +//#include #include #include -#include +//#include #include //#include //#include @@ -21,6 +21,6 @@ #include #include #include - +#include #endif diff --git a/code/lib/source/sifar/code/include/sf_mcu.h b/code/lib/source/sifar/code/include/sf_mcu.h index 271e3c776..872c4b3f7 100644 --- a/code/lib/source/sifar/code/include/sf_mcu.h +++ b/code/lib/source/sifar/code/include/sf_mcu.h @@ -24,9 +24,6 @@ #endif #include "sf_param_struct.h" -#define SF_DC_IN_VOLATAGE 70 -#define SF_LI_IN_VOLATAGE 99 - #define SUCCESS 0 #define FAIL 1 #define SF_MCU_NIGHT_MODE_LUMINANCE 600 diff --git a/code/lib/source/sifar/code/source/common/sf_battery.c b/code/lib/source/sifar/code/source/common/Bak_battery similarity index 94% rename from code/lib/source/sifar/code/source/common/sf_battery.c rename to code/lib/source/sifar/code/source/common/Bak_battery index 8d4ab825f..840877f85 100644 --- a/code/lib/source/sifar/code/source/common/sf_battery.c +++ b/code/lib/source/sifar/code/source/common/Bak_battery @@ -159,7 +159,7 @@ UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) gpio_set_value(P_GPIO_1, 1);//adc_muxb } - vos_util_delay_ms(3); + vos_util_delay_ms(1); *pval = adc_readData(0); //printf("[%s:%d] *pval:%d\n", __FUNCTION__, __LINE__,*pval); @@ -205,7 +205,7 @@ UINT32 sf_battery_adc_value_get_once(void) } else { - if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) + if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) { _BatVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); //_BatVoltageVal += 1; @@ -619,8 +619,9 @@ void sf_battery_level_polling(void) UINT32 dcValueList[12] = { 0 }; UINT32 batValueList[12] = { 0 }; UIMenuStoreInfo *puiPara = sf_ui_para_get(); + static UINT32 prePowerDcStatus = 0; - signed int ret = FALSE; + //signed int ret = FALSE; static UINT32 battEmpty = 0; @@ -707,39 +708,40 @@ void sf_battery_level_polling(void) sf_battery_level_update(); - ret = sf_check_low_battery(); + //ret = sf_check_low_battery(); if(puiPara->BatteryLogSwitch) { printf("[%s:%d]batTempLevel=%d,sf_LatestBattLevel=%d\n", __FUNCTION__, __LINE__, batTempLevel, sf_LatestBattLevel); } - if(batTempLevel != sf_LatestBattLevel) + if((batTempLevel != sf_LatestBattLevel) || IsPowerDcIn != prePowerDcStatus) { + prePowerDcStatus = IsPowerDcIn; batTempLevel = sf_LatestBattLevel; #if HW_S530 sf_view_osd_battery_draw(TRUE); #endif } - if(ret == TRUE) - { - if(sf_get_night_led_flag()) - { - //sf_ir_led_set(0, 0, 0, 0); - } + if(sf_LatestBattLevel == SF_BATT_LEVEL_0) + { + if(sf_get_night_led_flag()) + { + sf_ir_led_set(0, 0, 0, 0); + } //the Module not need sleep. //gModuleSleep = 0; sf_set_module_sleep_flag(0); - if(battEmpty == 0) - { - battEmpty = 1; - printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); - //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start - } - } + if(battEmpty == 0) + { + battEmpty = 1; + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + 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)*/) @@ -1146,4 +1148,33 @@ BOOL sf_battery_check_init(void) #endif return TRUE; } +void sf_set_need_check_first(void) +{ + needCheckFirst = TRUE; +} +/************************************************* + Function: sf_is_enough_power_to_update + Description: whether or not enough power to update + Input: N/A + Output: N/A + Return: TRUE/FALSE + Others: N/A +*************************************************/ +BOOL sf_is_enough_power_to_update(void) +{ + sf_set_need_check_first(); + sf_battery_adc_value_get(); + printf("update DC=%d Li=%d Bat=%d\n", DcVoltageVal, LiPolymerVoltageVal, BatVoltageVal); + + if(sf_battery_value_get(0) < 40) + { + printf("low battery, no update\n"); + + return FALSE; + } + + return TRUE; +} + + #endif diff --git a/code/lib/source/sifar/code/source/common/sf_battrery.o b/code/lib/source/sifar/code/source/common/sf_battrery.o deleted file mode 100644 index 3e0647e89339f4e8b1b0994cf1b78c7b2c86c95a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13196 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 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 06ae7bf34..5d3572ff2 100644 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -53,7 +53,7 @@ #include "GxTime.h" #include "UIFlowPhoto/UIFlowPhotoFuncs.h" #include "UIFlowMovie/UIFlowMovieFuncs.h" - +#include "UIApp/Transcode/UIAppTranscode.h" #include #include #include @@ -66,7 +66,6 @@ BOOL isGoing2PowerOff = FALSE; UINT16 AutoOfftime = 0; BOOL isGoing2Pir = FALSE; -UINT8 FwUpdate = 0; UINT8 NetWorkFlag = 0; UINT8 RespFlag = 0; static BOOL IsMenu = FALSE; @@ -74,7 +73,33 @@ static BOOL IsCap = FALSE; static BOOL IsSend = FALSE; static UINT8 cq_Signal = 0; static UINT32 TemperAdc = 0; +static ID sf_hd_flag_id = 0; +static UINT8 hdFlagInit = 0; +static char HdflieName[32] = {0}; +static UINT8 ModuleUpdating = 0; +static UINT8 FwUpdate = 0; +static UINT8 IsNightLedOn = 0; +static SF_BatteryLevel_e sf_LatestBattLevel = SF_BATT_LEVEL_0; +static UINT8 batteryVal = 0; +static UINT8 batteryType = 0; +static SF_THREAD_S UpgradeTskParam = +{ + .IsRun = 0, + .TskId = -1, +}; + +/*static SF_THREAD_S ModeuleUpgradeTskParam = +{ + .IsRun = 0, + .TskId = -1, +}; +*/ +static SF_THREAD_S ParaTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; const UINT16 Adc2TempTable[]= { 0,1648,1721,1794,1867,1940,2013,2086,2159, 2232,2305, 2378,2451,2524,2597,2670,2743, 2816, 2889, 2968, @@ -223,7 +248,7 @@ void sf_mode_detect(void) pwroffcnt = 0; } - if(puiPara->AutoOffSwitch == 0 || (NetWorkFlag != 0) /*|| (appActiveStateGet() == APP_STATE_CUSTOMER_TRANSFER)*/) + if(puiPara->AutoOffSwitch == 0 || (0x04 == NetWorkFlag/*SF_4G_SENDING*/) || (0x05 == NetWorkFlag/*SF_4G_SEARCHING*/) || (sf_get_fw_update()) || (sf_get_module_update())/*|| (appActiveStateGet() == APP_STATE_CUSTOMER_TRANSFER)*/) { AutoOfftime=0; } @@ -258,6 +283,23 @@ void sf_mode_detect(void) //printf("[%s:%d] e\n", __FUNCTION__, __LINE__); } +UINT8 sf_get_module_update(void) +{ + return ModuleUpdating; +} + +void sf_set_module_update(UINT8 flag) +{ + SF_MESSAGE_BUF_S stMessageBuf = {0}; + if(ModuleUpdating != flag) + { + stMessageBuf.arg1 = flag; + stMessageBuf.arg1 = SF_PARA_CMD_MOUP; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_app(&stMessageBuf); + } + ModuleUpdating = flag; +} UINT8 sf_get_fw_update(void) { @@ -266,6 +308,14 @@ UINT8 sf_get_fw_update(void) void sf_set_fw_update(UINT8 flag) { + SF_MESSAGE_BUF_S stMessageBuf = {0}; + if(FwUpdate != flag) + { + stMessageBuf.arg1 = flag; + stMessageBuf.arg1 = SF_PARA_CMD_FWUP; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_app(&stMessageBuf); + } FwUpdate = flag; } @@ -1305,7 +1355,67 @@ INT16 sf_celsius_change_to_fahrenheit(INT16 cTemper) printf("fTemper=%d%s\n",fTemper,"`F"); return fTemper; } +/************************************************* + Function: sf_cardv_adc_value_get + Description: get battery adc only once + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A +*************************************************/ +UINT32 sf_cardv_adc_value_get(UINT32 mux, UINT32 *pval) +{ + static UINT8 getAdcFlg = 0; + static UINT8 outputflag = 1; + *pval = 0; + if(getAdcFlg) + { + return FAIL; + } + getAdcFlg = 1; + + if(outputflag) + { + outputflag = 0; + gpio_direction_output(P_GPIO_0,0); + gpio_direction_output(P_GPIO_1,0); + } + + if(SF_ADC_BATT == mux)//bat_det + { + //B:0 A:0 + gpio_set_value(P_GPIO_0, 0);//adc_muxa + gpio_set_value(P_GPIO_1, 0);//adc_muxb + } + else if(SF_ADC_LI == mux)//v-li_det + { + //B:0 A:1 + gpio_set_value(P_GPIO_0, 1);//adc_muxa + gpio_set_value(P_GPIO_1, 0);//adc_muxb + + } + else if(SF_ADC_DC == mux)//dc12_det + { + //B:1 A:0 + gpio_set_value(P_GPIO_0, 0);//adc_muxa + gpio_set_value(P_GPIO_1, 1);//adc_muxb + } + else if(SF_ADC_TEMP == mux)//temp_det + { + //B:1 A:1 + gpio_set_value(P_GPIO_0, 1);//adc_muxa + gpio_set_value(P_GPIO_1, 1);//adc_muxb + } + + vos_util_delay_ms(1); + + *pval = adc_readData(0); + //printf("[%s:%d] *pval:%d\n", __FUNCTION__, __LINE__,*pval); + getAdcFlg = 0; + return SUCCESS; + +} void sf_stamp_temperature_get(INT16 *fTemper,INT16 *cTemper) /*0:F 1:C*/ { UINT8 readBatCnt = 0; @@ -1315,7 +1425,7 @@ void sf_stamp_temperature_get(INT16 *fTemper,INT16 *cTemper) /*0:F 1:C*/ for(readBatCnt=0; readBatCnt<5; readBatCnt++) //get max value of 5 times. { - if(sf_adc_value_get(SF_ADC_TEMP, &TemperAdc) == SUCCESS) + if(sf_cardv_adc_value_get(SF_ADC_TEMP, &TemperAdc) == SUCCESS) { temperValueList[readBatCnt] = pValue; } @@ -1333,6 +1443,35 @@ void sf_stamp_temperature_get(INT16 *fTemper,INT16 *cTemper) /*0:F 1:C*/ *fTemper = sf_celsius_change_to_fahrenheit(*cTemper); } +void sf_transcode_bs_ready_cb(void* bitstream_va, UINT32 size) +{ + SLOGI("bitstream_va = %lx , size = %lx\n", bitstream_va, size); + //SF_HD_DIR + char tmp[64] = {'\0'}; + snprintf(tmp, sizeof(tmp), "%s%s", SF_HD_DIR_CARDV, HdflieName); + FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE); + FileSys_WriteFile(fp, (UINT8*)bitstream_va, &size, 0, NULL); + FileSys_CloseFile(fp); + + sf_hd_flag_set_done(HD_FLAG_INITT_OK); +} + +static BOOL sf_cmd_transcode_start(char **argv) +{ + UIAppTranscode_User_Config user_config = {0}; + + + user_config.filepath = (char*)argv[0]; + SLOGI("transcode start filepath:%s\r\n",user_config.filepath); + + user_config.bs_ready_cb = sf_transcode_bs_ready_cb; + + Ux_SendEvent(&CustomTranscodeObjCtrl, NVTEVT_EXE_TRANSCODE_START, 1, &user_config); + + return TRUE; +} + + INT16 sf_adc2Temperature(UINT16 adcValue, UINT8 type)/*type: 0:°F 1:°C */ { UINT16 lowIndex = 0, highIndex = 175, keyIndex = 77, midIndex = 0; @@ -1504,6 +1643,15 @@ static SINT32 sf_cardv_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) case SF_PARA_CMD_RESET: Reset_MenuInfo(); break; + case SF_PARA_CMD_FWUP: + ModuleUpdating = pMessageBuf->arg2; + break; + case SF_PARA_CMD_MOUP: + FwUpdate = pMessageBuf->arg2; + break; + case SF_PARA_CMD_NET_STATUS: + NetWorkFlag = pMessageBuf->arg2; + break; default: break; } @@ -1570,7 +1718,45 @@ static SINT32 sf_cardv_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf) FlowPhoto_DoCapture(); break; + case SF_WIFI_CMD_HD_TURE: + if(!hdFlagInit) + { + hdFlagInit = 1; + FileSys_MakeDir(PHOTO_THUMB_PATH); + FileSys_MakeDir(SF_HD_DIR_CARDV); + sf_hd_flag_init(); + } + char *arg[2] = { 0 }; + char *str = malloc(64); + if(NULL != str) + { + if(SF_SUCCESS == sf_share_mem_hd_update()) + { + SF_HDFILE_ATTR_S* fileCfg = sf_file_hd_cfg_get(); + UINT8 fileIndex = 1; + + for(fileIndex = 1; fileIndex < fileCfg->filecnt; fileIndex++) + { + //HdflieName + memset(HdflieName, '\0', sizeof(HdflieName)); + sf_hd_flag_clear_done(0); + snprintf(HdflieName, sizeof(HdflieName), "W%03d%04d.JPG", fileCfg->stfileattr[fileIndex].dirKey, fileCfg->stfileattr[fileIndex].fileKey); + snprintf(str, 64, "A:\\DCIM\\%03d%s\\%s%04d.JPG", fileCfg->stfileattr[fileIndex].dirKey, DCF_DIR_NAME, DCF_FILE_NAME, fileCfg->stfileattr[fileIndex].fileKey); + printf("%s\n", str); + arg[0] = str; + sf_cmd_transcode_start(arg); + if(sf_hd_flag_wait_done_timeout(HD_FLAG_INITT_OK, 5000)) + { + MLOGE("HD timeout\n"); + //return - 1; + } + } + } + free(str); + } + sf_share_mem_hd_down(0); + break; default: break; } @@ -1607,7 +1793,7 @@ static SINT32 sf_cardv_proccess_cmd_dev(SF_MESSAGE_BUF_S *pMessageBuf) switch(pMessageBuf->arg1) { case SF_DEV_CMD_TEMPER: - if(sf_adc_value_get(SF_ADC_TEMP, &TemperAdc) == SUCCESS) + if(sf_cardv_adc_value_get(SF_ADC_TEMP, &TemperAdc) == SUCCESS) { sf_adc2Temperature((UINT16)TemperAdc, 1); } @@ -1618,11 +1804,9 @@ static SINT32 sf_cardv_proccess_cmd_dev(SF_MESSAGE_BUF_S *pMessageBuf) sf_com_message_send_to_app(&stMessageBuf); break; case SF_DEV_CMD_BAT: - stMessageBuf.cmdId = CMD_DEV; - stMessageBuf.arg1 = SF_DEV_CMD_BAT; - stMessageBuf.arg2 = (SINT32)sf_battery_value_get(0); - stMessageBuf.arg3 = (SINT32)sf_battery_type_get(); - sf_com_message_send_to_app(&stMessageBuf); + batteryVal = stMessageBuf.arg2; + batteryType = stMessageBuf.arg3; + sf_cardv_battery_level_update(batteryVal); break; default: @@ -1653,7 +1837,23 @@ static SINT32 sf_cardv_proccess_cmd_sd(SF_MESSAGE_BUF_S *pMessageBuf) } return SF_SUCCESS; } +static SINT32 sf_cardv_proccess_cmd_poweroff(SF_MESSAGE_BUF_S *pMessageBuf) +{ + //UINT32 ret = 0; + //MLOGI("ID = %#x\n",pMessageBuf->arg1); + + Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, pMessageBuf->arg1); //shutdown start + /*switch(pMessageBuf->arg1) + { + case APP_POWER_OFF_BATT_EMPTY: + + break; + default: + break; + }*/ + return SF_SUCCESS; +} void* sf_cardv_message_thread(void *argv) { SINT32 ret = 0; @@ -1692,8 +1892,12 @@ void* sf_cardv_message_thread(void *argv) break; case CMD_SD: sf_cardv_proccess_cmd_sd(&stMessagebuf); - break; default: - break; + break; + case CMD_POWEROFF: + sf_cardv_proccess_cmd_poweroff(&stMessagebuf); + break; + default: + break; } } } @@ -1808,4 +2012,253 @@ void sf_cardv_set_mcu_rtc_flag(void) stMessageBuf.arg1 = SF_MCU_CMD_MCU_RTC; stMessageBuf.cmdId = CMD_MCU; sf_com_message_send_to_app(&stMessageBuf); +} + +void sf_hd_flag_init(void) +{ + vos_flag_create(&sf_hd_flag_id, NULL, "sf_hd_flag_id"); + vos_flag_clr(sf_hd_flag_id, (FLGPTN)-1); +} + +void sf_hd_flag_set_done(HD_FLAG_INIT flag) +{ + vos_flag_set(sf_hd_flag_id, (FLGPTN)(1 << flag)); +} + +void sf_hd_flag_wait_done(HD_FLAG_INIT flag) +{ + FLGPTN flgptn; + vos_flag_wait(&flgptn, sf_hd_flag_id, (FLGPTN)(1 << flag), TWF_ANDW); +} + +int sf_hd_flag_wait_done_timeout(HD_FLAG_INIT flag, int timeout_ms) +{ + ER ret = E_OK; + FLGPTN flgptn; + + ret = vos_flag_wait_timeout(&flgptn, sf_hd_flag_id, (FLGPTN)(1 << flag), TWF_ANDW, vos_util_msec_to_tick(timeout_ms)); + if(unlikely(ret != E_OK)){ + DBG_ERR("wait(%lu) init timeout(%ld ms)!\n", flag, timeout_ms); + } + + return ret; +} + +void sf_hd_flag_clear_done(HD_FLAG_INIT flag) +{ + vos_flag_clr(sf_hd_flag_id, (FLGPTN)-1); +} + +static UINT32 sf_fwupdate(void) +{ + DBG_FUNC_BEGIN("\r\n"); + + UINT32 result = 0; + + INT curMode = System_GetState(SYS_STATE_CURRMODE) ; + + System_ChangeSubMode(SYS_SUBMODE_UPDFW); + Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_UPDFW); + + result = System_OnStrg_UploadFW(0); + if (result != 0) + DBG_ERR("System_OnStrg_UploadFW() fail(%d)\r\n",result); + + if (result != 0) { + Ux_SendEvent(0, NVTEVT_SYSTEM_MODE, 1, curMode); + System_ChangeSubMode(SYS_SUBMODE_NORMAL); + + } + + DBG_FUNC_END("\r\n"); + return result; +} + +void* sf_sys_do_upgrade(void *arg) +{ + //int s32Ret = 0; + + SLOGW("Begin to do Upgrade!\n"); + + //if(sf_is_enough_power_to_update() == FALSE) + if(sf_cardv_battery_value_get() < 40){ + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + else{ + sf_set_fw_update(1); + sf_set_send_statu(TRUE); + sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE); + sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1); + //BKG_PostEvent(NVTEVT_BKW_FW_UPDATE); + if(0 != sf_fwupdate()){ + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0); + sf_set_send_statu(FALSE); + sf_set_fw_update(0); + } + + UpgradeTskParam.IsRun = 2; + + return NULL; +} + +void sf_do_upgrade_thread(void) +{ + printf("UpgradeTskParam.IsRun:%d\n", UpgradeTskParam.IsRun); + if(UpgradeTskParam.IsRun == 2) + { + UpgradeTskParam.IsRun = 0; + pthread_join(UpgradeTskParam.TskId, NULL); + } + + if(!UpgradeTskParam.IsRun) + { + pthread_create(&UpgradeTskParam.TskId, NULL, sf_sys_do_upgrade, NULL); + UpgradeTskParam.IsRun = 1; + } +} + +void* sf_cardv_para_check_thread(void *arg) +{ + while(ParaTskCfg.IsRun) + { + if(TRUE == sf_get_cardv_para_check_flag()){ + MLOGI("menu info is changed\n"); + sf_share_mem_customer_down(0); + } + //sleep(1); + vos_util_delay_ms(10); + + } + ParaTskCfg.IsRun = 0; + + return NULL; +} +UINT32 sf_cardv_para_check_start(void) +{ + SINT32 ret = 1; + if(ParaTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return 1; + } + ret = pthread_create(&ParaTskCfg.TskId, NULL, sf_cardv_para_check_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + ParaTskCfg.IsRun = 1; + return SF_SUCCESS; + +} +UINT32 sf_cardv_para_check_stop(void) +{ + SINT32 ret = 1; + MLOGD("stop\n"); + ParaTskCfg.IsRun = 0; + MLOGD("sf_flash_poweroff_stop\n"); + ret = pthread_join(ParaTskCfg.TskId, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread stop fail!\n"); + return ret; + } + return SF_SUCCESS; +} +UINT8 sf_get_night_led_flag(void) +{ + return IsNightLedOn; +} + +void sf_set_night_led_flag(UINT8 flag) +{ + if(flag != IsNightLedOn){ + #if HUNTING_CAMERA_4G == ENABLE + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg2 = flag; + stMessageBuf.arg1 = SF_PARA_CMD_IR_LED_STATUS; + stMessageBuf.cmdId = CMD_PARA; + sf_com_message_send_to_app(&stMessageBuf); + #endif + } + IsNightLedOn = flag; +} + +/************************************************* + 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_cardv_battery_level_update(UINT8 batteryVal) +{ + + UINT8 batteryLevel = SF_BATT_LEVEL_0; + + 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; +} + +/************************************************* + Function: sf_battery_level_get + Description: get battery level + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A +*************************************************/ +UINT32 sf_cardv_battery_level_get(void) +{ + return (UINT32)sf_LatestBattLevel; +} + + +/************************************************* + 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_cardv_battery_value_get(void) +{ + return batteryVal; +} + +/************************************************* + Function: sf_battery_type_get + Description: Get battery type. + Input: N/A + Output: N/A + Return: value: battery type, 0:normal 1:LiPolymer + Others: N/A +*************************************************/ +UINT8 sf_cardv_battery_type_get(void) +{ + return batteryType; } \ No newline at end of file diff --git a/code/lib/source/sifar/code/source/mcu/sf_commu_mcu.c b/code/lib/source/sifar/code/source/mcu/sf_commu_mcu.c index a7426e9d2..a9d0e7ffe 100644 --- a/code/lib/source/sifar/code/source/mcu/sf_commu_mcu.c +++ b/code/lib/source/sifar/code/source/mcu/sf_commu_mcu.c @@ -162,7 +162,7 @@ int sf_commu_mcu_open(void) printf("Open %s error!\n", SERIAL_DEVICE_PATH); ret = -1; return ret; - } + } else { printf("Open %s success!\n", SERIAL_DEVICE_PATH); diff --git a/code/lib/source/sifar/code/source/module/sf_sim.c b/code/lib/source/sifar/code/source/module/sf_sim.c index 449b44992..7b234cd7a 100644 --- a/code/lib/source/sifar/code/source/module/sf_sim.c +++ b/code/lib/source/sifar/code/source/module/sf_sim.c @@ -153,7 +153,7 @@ SINT32 sf_module_init(VOID) { eSmsLocation = SMS_SIM_INIT_ATI; strcpy((char *)gsmPara, "ATI\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else if(strstr((const char *)gsmPara, "CME ERROR: SIM not inserted")) @@ -168,7 +168,7 @@ SINT32 sf_module_init(VOID) { //sleep(800); strcpy((char *)gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); //printf("ttyRet:%d\n", ttyRet); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -197,14 +197,14 @@ SINT32 sf_module_init(VOID) printf("[%s:%d]ModuleImei:%s,ModuleVer:%s\n", __FUNCTION__, __LINE__, pPara->ModuleImei, pPara->ModuleVer); strcpy((char *)gsmPara, "AT+CSUB\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); eSmsLocation = SMS_SIM_INIT_ATCSUB; } else { strcpy((char *)gsmPara, "ATI\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -230,14 +230,14 @@ SINT32 sf_module_init(VOID) strcpy((char *)pPara->ModuleSubver, (const char *)strtmp[1]); printf("[%s:%d]ModuleQGver:%s\n", __FUNCTION__, __LINE__, pPara->ModuleSubver); strcpy((char *)gsmPara, "AT+CPIN?\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); eSmsLocation = SMS_SIM_INIT_ATCPIN; } else { strcpy((char *)gsmPara, "AT+CSUB\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -251,7 +251,7 @@ SINT32 sf_module_init(VOID) eSmsLocation = SMS_SIM_INIT_CNVW; strcpy((char *)gsmPara, "AT+CNVW=3006,0,\"FF\"\r"); calltime = 0; - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else if(strstr((const char *)gsmPara, "CME ERROR: SIM not inserted")) @@ -268,7 +268,7 @@ SINT32 sf_module_init(VOID) { //sleep(1000); sprintf((char *)gsmPara, "%s", "AT+CPIN?\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -286,7 +286,7 @@ SINT32 sf_module_init(VOID) { //sleep(1000); sprintf((char *)gsmPara, "%s", "AT+CPIN?\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -304,7 +304,7 @@ SINT32 sf_module_init(VOID) SysSetFlag(SimPinFlag, 0); //printf("[%s:%d]pPara->SimPinStr:%s\n",__FUNCTION__,__LINE__,pPara->SimPinStr); sprintf((char *)gsmPara, "AT+CPIN=%s\r", pPara->SimPinStr); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else /*first time*/ @@ -345,7 +345,7 @@ SINT32 sf_module_init(VOID) { printf("--------tempi:%d.--------\n", time); sprintf((char *)gsmPara, "AT+CPIN?\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } } @@ -383,7 +383,7 @@ SINT32 sf_module_init(VOID) sf_set_sim_pin_flag(1, 1, 1); eSmsLocation = SMS_SIM_INIT_ATCPIN2; sprintf((char *)gsmPara, "AT+CLCK=\"SC\",0,\"%s\"\r", pPara->SimPinStr); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); calltime = 0; } @@ -401,7 +401,7 @@ SINT32 sf_module_init(VOID) eSmsLocation = SMS_SIM_INIT_CNVW; strcpy((char *)gsmPara, "AT+CNVW=3006,0,\"FF\"\r"); calltime = 0; - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -426,7 +426,7 @@ SINT32 sf_module_init(VOID) if(strstr((const char *)gsmPara, "OK")) { strcpy((char *)gsmPara, "AT&W\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); eSmsLocation = SMS_SIM_INIT_ATW; } @@ -434,7 +434,7 @@ SINT32 sf_module_init(VOID) { //appTimeDelayMs(800); strcpy((char *)gsmPara, "AT+CNVW=3006,0,\"FF\"\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -445,7 +445,7 @@ SINT32 sf_module_init(VOID) if(strstr((const char *)gsmPara, "OK")) { strcpy((char *)gsmPara, "AT+CICCID\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); eSmsLocation = SMS_SIM_INIT_CICCID; } @@ -453,7 +453,7 @@ SINT32 sf_module_init(VOID) { //appTimeDelayMs(800); strcpy((char *)gsmPara, "AT&W\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -482,13 +482,13 @@ SINT32 sf_module_init(VOID) eSmsLocation = SMS_SIM_INIT_ATCIMI; strcpy((char *)gsmPara, "AT+CIMI\r"); calltime = 0; - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else { strcpy((char *)gsmPara, "AT+CICCID\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -582,7 +582,7 @@ SINT32 sf_module_init(VOID) } eSmsLocation = SMS_SIM_INIT_EXIT; - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -608,7 +608,7 @@ SINT32 sf_module_init(VOID) } strcpy((char *)gsmPara, "AT+CIMI\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } @@ -622,7 +622,7 @@ SINT32 sf_module_init(VOID) { eSmsLocation = SMS_SIM_INIT_QICSGP1; sprintf((char *)gsmPara, "AT+QPRTPARA=3\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } else @@ -663,7 +663,7 @@ SINT32 sf_module_init(VOID) else { strcpy((char *)gsmPara, "AT\r"); - ttyRet = sf_4g_send_data(gsmPara, strlen((const char *)gsmPara)); + ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen((const char *)gsmPara)); SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE); } diff --git a/code/lib/source/sifar/code/source/module/sf_tcp.o b/code/lib/source/sifar/code/source/module/sf_tcp.o new file mode 100644 index 0000000000000000000000000000000000000000..ff8d3e7e09c1d3126df3fb0a356477c4d429a780 GIT binary patch literal 1068 zcmah{%}OId5U$Q78nanYQT$oatO!Oi?HD3a@eg(#?>!16-7-L|JK@r{=z#PxUyQ)xj%Px1ze6zIXmYUT{<+!}&E)_O-g}YFrRzeD|1#B6^ zOtn;lf!ts%%Z5@pC(lOHV{DvFIFoFOO{ZqqY---#QM8f79@Fsh8fW9tNmKzGh!0^j z4rXj~APqS?f!sC+GJW-oUB+&MeSDygXW^^PWD!TP|6GD&zwo%O{2upVK~UV3s@_2l zq=z?ZGOE>F_DrN3V1^(0o)5i;FRDWdnfWAR^WcO z-Ig8f)afe8_YRLrp%VTn@Y?SKE|dyd-no)t;>7^(CYHlh1TkmtsYk$`|^IHGX zEuxO@^)uay?q{z{^Ng8S|A7g6f7{6art`GU)eUGK*D(S0AV1ZJ5LsXXjie#FLdP@o zB7y_y)(t^4IzszL-y?rSr$3xWr*jOW522eo!4Ph6VwD1Irr!v1Tlav4TO&d=x;Juo BYEl3I literal 0 HcmV?d00001 diff --git a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.dtb new file mode 100644 index 0000000000000000000000000000000000000000..52205426acd99eac0584c29ab03fa0f84a1e0c06 GIT binary patch literal 17558 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 literal 0 HcmV?d00001 diff --git a/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts new file mode 100644 index 000000000..3c2dee5f4 --- /dev/null +++ b/configs/Linux/cfg_565_HUNTING_EVB_LINUX_4G_S530/nvt-evb.tmp.dts @@ -0,0 +1,1181 @@ +# 1 "nvt-evb.dts" +# 1 "" +# 1 "" +# 1 "nvt-evb.dts" + + + + + + + +/dts-v1/; +# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" 1 +# 13 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" +# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/gpio.h" 1 +# 14 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/gpio/nvt-gpio.h" 2 +# 10 "nvt-evb.dts" 2 +# 1 "nvt-peri.dtsi" 1 +# 10 "nvt-peri.dtsi" +# 1 "nvt-basic.dtsi" 1 +# 9 "nvt-basic.dtsi" +# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" 1 +# 9 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" +# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/irq.h" 1 +# 10 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/interrupt-controller/arm-gic.h" 2 +# 10 "nvt-basic.dtsi" 2 + +/ { + model = "Novatek NA51089"; + compatible = "novatek,na51089", "nvt,ca9"; + interrupt-parent = <&gic>; + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <0x0>; + next-level-cache = <&L2>; + clock-frequency = <960000000>; + }; + }; + + cg@f0020000 { + compatible = "nvt,core_clk"; + reg = <0xf0020000 0x1000>; + }; + + + periph_clk: periph_clk { + compatible = "nvt,periph_clk"; + #clock-cells = <0>; + clock-output-names = "periph_clk"; + }; + + global_timer@ffd00200 { + compatible = "arm,cortex-a9-global-timer"; + reg = <0xffd00200 0x20>; + interrupts = <1 11 0xf01>; + clocks = <&periph_clk>; + }; + + private_timer@ffd00600 { + compatible = "arm,cortex-a9-twd-timer"; + reg = <0xffd00600 0x20>; + interrupts = <1 13 0xf01>; + clocks = <&periph_clk>; + }; + + pmu { + compatible = "arm,cortex-a9-pmu"; + interrupts = <0 112 4>; + interrupt-affinity = <&cpu0>; + }; + + L2: cache-controller@ffe00000 { + compatible = "arm,pl310-cache"; + reg = <0xffe00000 0x1000>; + interrupts = <0 96 4>; + cache-unified; + arm,shared-override; + cache-level = <2>; + arm,data-latency = <2 2 2>; + arm,tag-latency = <2 2 2>; + }; + + gic: interrupt-controller@0xffd00000 { + compatible = "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + interrupt-controller; + reg = <0xffd01000 0x1000>, + <0xffd00100 0x1000>; + }; + + scu: snoop-control-unit@0xffd00000 { + compatible = "arm,cortex-a9-scu"; + reg = <0xffd00000 0x100>; + }; +}; +# 11 "nvt-peri.dtsi" 2 + +/ { + chosen { + bootargs = " "; + }; + + aliases { + mmc0 = &mmc0; + mmc1 = &mmc1; + }; + + uart@f0290000 { + compatible = "ns16550a"; + reg = <0xf0290000 0x1000>; + interrupts = <0 43 4>; + baud = <115200>; + reg-shift = <2>; + reg-io-width = <4>; + no-loopback-test = <1>; + clock-frequency = <24000000>; + fifo-size = <64>; + uart_id = <0>; + }; + + uart@f0300000 { + compatible = "ns16550a"; + reg = <0xf0300000 0x1000>; + interrupts = <0 44 4>; + baud = <115200>; + reg-shift = <2>; + reg-io-width = <4>; + no-loopback-test = <1>; + clock-frequency = <48000000>; + fifo-size = <64>; + hw_flowctrl = <0>; + rx_trig_level = <3>; + uart_id = <1>; + }; + + uart@f0310000 { + compatible = "ns16550a"; + reg = <0xf0310000 0x1000>; + interrupts = <0 45 4>; + baud = <115200>; + reg-shift = <2>; + reg-io-width = <4>; + no-loopback-test = <1>; + clock-frequency = <48000000>; + fifo-size = <64>; + hw_flowctrl = <0>; + rx_trig_level = <3>; + uart_id = <2>; + }; + + kdrv_rpc: cc@f0090000 { + compatible = "kdrv_rpc"; + reg = <0xf0090000 0x300>; + interrupts = <0 59 4>; + }; + + mmc0: mmc@f0420000 { + compatible = "nvt,nvt_mmc"; + reg = <0xf0420000 0x1000>; + interrupts = <0 30 4>; + max-frequency = <48000000>; + voltage-switch = <0>; + max-voltage = <3300>; + bus-width = <4>; + neg-sample-edge = <0>; + driving = <15 15 15 20 15 15 25 25 25 25 25 25>; + cd_gpio = <(9) 0x0 0x0>; + card_power_gpio = <(7 + 0x20) 0x0>; + + + }; + + mmc1: mmc@f0500000 { + compatible = "nvt,nvt_mmc2"; + reg = <0xf0500000 0x1000>; + interrupts = <0 31 4>; + max-frequency = <48000000>; + voltage-switch = <0>; + max-voltage = <3300>; + bus-width = <4>; + neg-sample-edge = <0>; + driving = <15 8 8 20 8 8 20 8 8 20 8 8>; + cd_gpio = <0 0x0 0x1>; + + + + }; + + nand: nand@f0400000 { + #address-cells = <2>; + #size-cells = <2>; + compatible = "nvt,nvt_spinand"; + reg = <0xf0400000 0x1000>; + interrupts = <0 29 4>; + clock-frequency = <96000000>; + nvt-devname = "spi_nand.0"; + }; + + nor: nor@f0400000 { + #address-cells = <2>; + #size-cells = <2>; + compatible = "nvt,nvt_spinor"; + reg = <0xf0400000 0x1000>; + interrupts = <0 29 4>; + clock-frequency = <120000000>; + nvt-devname = "spi_nor.0"; + trace-stdtable = <0>; + }; + + gpio: gpio@f0070000 { + compatible = "nvt,nvt_gpio"; + reg = <0xf0070000 0x10000>; + interrupts = <0 24 4>; + #gpio-cells = <2>; + }; + + eth@f02b0000 { + compatible = "nvt,synopsys_eth"; + reg = <0xf02b0000 0x3800>; + interrupts = <0 34 4>; + sp-clk = <0>; + ref-clk-out = <0>; + }; + + phy@f02b3800 { + compatible = "nvt,eth_phy"; + reg = <0xf02b3800 0x400>; + }; + + wdt@f0050000 { + compatible = "nvt,nvt_wdt"; + reg = <0xf0050000 0x10000>; + interrupts = <0 57 4>; + }; + + pwm: pwm@f0210000 { + compatible = "nvt,nvt_kdrv_pwm"; + reg = <0xf0210000 0x2000>; + interrupts = <0 26 4>; + }; + + adc@f0260000 { + compatible = "nvt,nvt_adc"; + reg = <0xf0260000 0x1000>; + interrupts = <0 47 4>; + #io-channel-cells = <1>; + }; + + rtc@f0060000 { + compatible = "nvt,nvt_rtc"; + reg = <0xf0060000 0x100>; + interrupts = <0 56 4>; + }; + + drtc@f00b0000 { + compatible = "nvt,nvt_drtc"; + reg = <0xf00b0000 0x100>; + }; + + crypto: crypto@f0620000 { + compatible = "nvt,nvt_crypto"; + reg = <0xf0620000 0x100>; + interrupts = <0 38 4>; + mclk = <1>; + }; + + hash: hash@f0670000 { + compatible = "nvt,nvt_hash"; + reg = <0xf0670000 0x100>; + interrupts = <0 28 4>; + mclk = <1>; + }; + + rsa: rsa@f06a0000 { + compatible = "nvt,nvt_rsa"; + reg = <0xf06a0000 0x100>; + interrupts = <0 20 4>; + mclk = <1>; + }; + + top: top@f0010000 { + compatible = "nvt,nvt_top"; + reg = <0xf0010000 0x2000 + 0xf0030000 0x2000 + 0xf0070000 0x10000>; + }; + + sie@f0c00000 { + compatible = "nvt,drv_sie"; + reg = <0xf0c00000 0x900 + 0xf0d20000 0x900 + 0xF0D30000 0x900>; + interrupts = <0 1 4 + 0 2 4 + 0 3 4>; + + }; + + tge@f0cc0000 { + compatible = "nvt,kdrv_tge"; + reg = <0xf0cc0000 0x150>; + interrupts = <0 22 4>; + }; + + rhe@f0ce0000 { + compatible = "nvt,kdrv_rhe"; + reg = <0xf0ce0000 0x900>; + interrupts = <0 13 4>; + }; + + ime@f0c40000 { + compatible = "nvt,kdrv_ime"; + reg = <0xf0c40000 0x1000>; + interrupts = <0 6 4>; + }; + + ife2@f0d00000 { + compatible = "nvt,kdrv_ife2"; + reg = <0xf0d00000 0x100>; + interrupts = <0 9 4>; + }; + + ise@f0c90000 { + compatible = "nvt,kdrv_ise"; + reg = <0xf0c90000 0x100>; + interrupts = <0 21 4 + 0 85 4>; + }; + + ipe@f0c30000 { + compatible = "nvt,kdrv_ipe"; + reg = <0xf0c30000 0x900>; + interrupts = <0 5 4>; + }; + + ife@f0c70000 { + compatible = "nvt,kdrv_ife"; + reg = <0xf0c70000 0x800>; + interrupts = <0 8 4>; + }; + + vpe@f0cd0000 { + compatible = "nvt,kdrv_vpe"; + reg = <0xf0cd0000 0x1040>; + interrupts = <0 62 4>; + }; + + ai@f0c60000 { + compatible = "nvt,kdrv_ai"; + reg = <0xf0c60000 0x23c + 0xf0d50000 0x114 + 0xf0cb0000 0x22c>; + interrupts = <0 14 4 + 0 13 4 + 0 11 4>; + clock-frequency = <600000000 480000000 600000000>; + }; + + md@f0c10000 { + compatible = "nvt,kdrv_md"; + reg = <0xf0c10000 0x150>; + interrupts = <0 46 4>; + clock-frequency = <240000000>; + }; + dis@f0c50000 { + compatible = "nvt,kdrv_dis"; + reg = <0xf0c50000 0x114>; + interrupts = <0 10 4>; + }; + + coe@f0a11000 { + compatible = "nvt,nvt_coe"; + reg = <0xf0a11000 0x2c0>; + }; + + dce@f0c20000 { + compatible = "nvt,kdrv_dce"; + reg = <0xf0c20000 0x650>; + interrupts = <0 7 4>; + }; + + ive@f0d70000 { + compatible = "nvt,kdrv_ive"; + reg = <0xf0d70000 0x6c>; + interrupts = <0 53 4>; + }; + + sde@f0d90000 { + compatible = "nvt,kdrv_sde"; + reg = <0xf0d90000 0x90>; + interrupts = <0 74 4>; + }; + + ide@f0800000 { + compatible = "nvt,nvt_ide"; + reg = <0xf0800000 0x1000>; + interrupts = <0 48 4>; + }; + + dsi@f0840000 { + compatible = "nvt,nvt_dsi"; + reg = <0xf0840000 0x1000>; + interrupts = <0 50 4>; + }; + + csi@f0280000 { + compatible = "nvt,nvt_csi"; + reg = <0xf0280000 0x100 + 0xf0330000 0x100>; + interrupts = <0 54 4 + 0 55 4>; + }; + + lvds@f0270000 { + compatible = "nvt,nvt_lvds"; + reg = <0xF0270000 0x200 + 0xF0370000 0x200>; + interrupts = <0 54 4 + 0 55 4>; + }; + + senphy@f06b0000 { + compatible = "nvt,nvt_senphy"; + reg = <0xF06B0000 0x100>; + }; + + ssenif@f0xx0000 { + compatible = "nvt,nvt_ssenif"; + reg = <0xF02C0000 0x2000>; + interrupts = <0 61 4>; + }; + + sif@f0240000 { + compatible = "nvt,nvt_sif"; + reg = <0xf0240000 0x200>; + interrupts = <0 40 4>; + clock-frequency = <1000000>; + }; + + graphic@f0c80000 { + compatible = "nvt,nvt_graphic"; + reg = <0xF0C80000 0x300 + 0xF0D10000 0x100>; + interrupts = <0 18 4 + 0 19 4>; + }; + + affine@f0ca0000 { + compatible = "nvt,nvt_affine"; + reg = <0xF0CA0000 0x100>; + interrupts = <0 52 4>; + }; + + h26x@f0a10000 { + compatible = "nvt,nvt_h26x"; + reg = <0xf0a10000 0xa00>; + interrupts = <0 16 4>; + power_saving = <0>; + }; + + timer@f0040000 { + compatible = "nvt,nvt_timer"; + reg = <0xf0040000 0x300>; + interrupts = <0 0 4>; + }; + + eac@f0640000 { + compatible = "nvt,nvt_eac"; + reg = <0xF0640000 0x200>; + }; + + jpg@f0a00000 { + compatible = "nvt,nvt_jpg"; + reg = <0xf0a00000 0x100>; + interrupts = <0 17 4>; + }; + + nvt_usb2host@f0600000 { + compatible = "nvt,ehci-nvtivot"; + reg = <0xf0600000 0x10000>; + interrupts = <0 27 4>; + }; + + nvt_usb2dev@f0600000 { + compatible = "nvt,fotg200_udc"; + reg = <0xf0600000 0x10000>; + interrupts = <0 27 4>; + }; + + nvt_usb_chrg@f0600000 { + compatible = "nvt,nvt_usb_chrgdet"; + reg = <0xf0600000 0x10000>; + }; + + dai@f0630000 { + compatible = "nvt,nvt_dai"; + reg = <0xF0630000 0xbc>; + interrupts = <0 15 4>; + }; + + rotate@f0cf0000 { + compatible = "nvt,nvt_rotation"; + reg = <0xF0CF0000 0x100>; + interrupts = <0 81 4>; + }; + + drvdump@0 { + compatible = "nvt,nvt_drvdump"; + }; + + dsp@f1430000 { + compatible = "nvt,nvt_dsp"; + reg = <0xF1430000 0x200 + 0xF2000000 0x1000000 + 0xF1440000 0x200 + 0xF3000000 0x1000000>; + interrupts = <0 76 4 + 0 77 4>; + }; + + spi0: spi@f0230000 { + compatible = "nvt,nvt_spi"; + reg = <0xf0230000 0x10000>; + interrupts = <0 35 4>; + dma-support = <0>; + nvt-devname = <0>; + }; + + spi1: spi@f0320000 { + compatible = "nvt,nvt_spi"; + reg = <0xf0320000 0x10000>; + interrupts = <0 36 4>; + dma-support = <0>; + nvt-devname = <1>; + }; + + spi2: spi@f0340000 { + compatible = "nvt,nvt_spi"; + reg = <0xf0340000 0x10000>; + interrupts = <0 37 4>; + dma-support = <0>; + nvt-devname = <2>; + }; + + sdp@f0390000 { + compatible = "nvt,nvt_sdp"; + reg = <0xf0390000 0x28>; + interrupts = <0 12 4>; + }; + + tse@f0650000 { + compatible = "nvt,nvt_tse"; + reg = <0xF0650000 0x90>; + interrupts = <0 23 4>; + }; + + remote@f0250000 { + compatible = "nvt,nvt_remote"; + reg = <0xf0250000 0x28>; + interrupts = <0 25 4>; + }; + + rng: rng@f0680000 { + compatible = "nvt,nvt_rng"; + reg = <0xf0680000 0x100>; + }; + + nvt_arb@f0000000 { + compatible = "nvt,nvt_arb"; + reg = <0xF0000000 0xA000 + 0xF0FE0000 0x300>; + interrupts = <0 33 4>; + }; + + nvt_otp@f0660000 { + compatible = "nvt,nvt_otp"; + reg = <0xF0660000 0x70>; + }; + + kdrv_ipp { + clock-frequency = <240000000>; + }; + + uvcp: uvcp@f0690000 { + compatible = "nvt,nvt_uvcp"; + reg = <0xf0690000 0x200>; + interrupts = <0 59 4>; + }; + pll_preset@0 { + pll3{pll_config = <3 0 0>;}; + pll4{pll_config = <4 0 0>;}; + pll5{pll_config = <5 297000000 1>;}; + pll6{pll_config = <6 0 0>;}; + pll7{pll_config = <7 0 0>;}; + pll8{pll_config = <8 0 0>;}; + pll9{pll_config = <9 0 0>;}; + pll11{pll_config = <11 0 0>;}; + pll12{pll_config = <12 0 1>;}; + }; +}; +# 11 "nvt-evb.dts" 2 +# 1 "nvt-top.dtsi" 1 +&top { + sdio{pinmux = <0x5>;}; + sdio2{pinmux = <0x5>;}; + sdio3{pinmux = <0x0>;}; + nand{pinmux = <0x5>;}; + sensor{pinmux = <0x0>;}; + sensor2{pinmux = <0x0>;}; + mipi_lvds{pinmux = <0x0>;}; + i2c{pinmux = <0x40>;}; + sif{pinmux = <0x0>;}; + uart{pinmux = <0x1021>;}; + spi{pinmux = <0x0>;}; + sdp{pinmux = <0x0>;}; + remote{pinmux = <0x0>;}; + pwm{pinmux = <0x8000>;}; + pwm2{pinmux = <0x000000>;}; + ccnt{pinmux = <0x0>;}; + audio{pinmux = <0x0>;}; + lcd{pinmux = <0x0>;}; + tv{pinmux = <0x0>;}; + eth{pinmux = <0x0>;}; + misc{pinmux = <0x0>;}; +}; +# 12 "nvt-evb.dts" 2 +# 1 "nvt-i2c.dtsi" 1 + + + + + + + +/ { + i2c0: i2c@f0220000 { compatible = "nvt,nvt_i2c"; reg = <0xf0220000 0x100>; interrupts = <0 41 4>; clock-frequency = <1000000>; id = <0>; }; + i2c1: i2c2@f0350000 { compatible = "nvt,nvt_i2c"; reg = <0xf0350000 0x100>; interrupts = <0 42 4>; clock-frequency = <1000000>; id = <1>; }; + i2c2: i2c3@f03a0000 { compatible = "nvt,nvt_i2c"; reg = <0xf03a0000 0x100>; interrupts = <0 60 4>; clock-frequency = <50000>; id = <2>; }; +}; +# 13 "nvt-evb.dts" 2 +# 1 "nvt-gpio.dtsi" 1 +&top { +# 201 "nvt-gpio.dtsi" + pgpio11{gpio_config = <(11 + 0x20) 1>;}; + + pgpio2{gpio_config = <(2 + 0x20) 1>;}; +}; +# 14 "nvt-evb.dts" 2 +# 1 "nvt-peri-dev.dtsi" 1 +# 11 "nvt-peri-dev.dtsi" +&i2c0 { + #address-cells = <1>; + #size-cells = <0>; + + + + + + +}; + +&i2c1 { + #address-cells = <1>; + #size-cells = <0>; +}; + +&i2c2 { + #address-cells = <1>; + #size-cells = <0>; +}; + +&spi0 { + status = "okay"; + #address-cells = <1>; + #size-cells = <0>; +# 44 "nvt-peri-dev.dtsi" +}; + +&spi1 { + status = "okay"; +}; + +&spi2 { + status = "okay"; +}; +# 15 "nvt-evb.dts" 2 +# 1 "nvt-audio.dtsi" 1 + + + + + + + +/ { + audio@1 { type = "none"; i2s_ctrl = <0>; sif_channel = <0>; gpio_cold_reset = <0>; gpio_data = <0>; gpio_clk = <0>; gpio_cs = <0>; adc_zero = <0>; }; + audio@2 { type = "embedded"; i2s_ctrl = <4>; sif_channel = <0>; gpio_cold_reset = <0>; gpio_data = <0>; gpio_clk = <0>; gpio_cs = <0>; adc_zero = <0>; }; +}; +# 16 "nvt-evb.dts" 2 +# 1 "nvt-display.dtsi" 1 + + + + + + + +# 1 "/home/payton/S530/BSP/linux-kernel/include/dt-bindings/pinctrl/nvt_lcd.h" 1 +# 9 "nvt-display.dtsi" 2 +# 25 "nvt-display.dtsi" +/ { + display { type = "lcd"; lcd_ctrl = <1>; sif_channel = <4>; gpio_cs = <(7 + 0x20)>; gpio_clk = <(8 + 0x20)>; gpio_data = <(9 + 0x20)>; }; + logo { enable = <1>; lcd_type = <5>; lcd_rotate = <270>; lcd_reset = <(1 + 0x60)>; lcd_bl_gpio = <(11 + 0x20) 1>; lcd_power = <(8 + 0x20) 1>;}; +}; +# 17 "nvt-evb.dts" 2 +# 1 "nvt-media.dtsi" 1 +# 10 "nvt-media.dtsi" +# 1 "nvt-basic.dtsi" 1 +# 11 "nvt-basic.dtsi" +/ { + model = "Novatek NA51089"; + compatible = "novatek,na51089", "nvt,ca9"; + interrupt-parent = <&gic>; + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a9"; + reg = <0x0>; + next-level-cache = <&L2>; + clock-frequency = <960000000>; + }; + }; + + cg@f0020000 { + compatible = "nvt,core_clk"; + reg = <0xf0020000 0x1000>; + }; + + + periph_clk: periph_clk { + compatible = "nvt,periph_clk"; + #clock-cells = <0>; + clock-output-names = "periph_clk"; + }; + + global_timer@ffd00200 { + compatible = "arm,cortex-a9-global-timer"; + reg = <0xffd00200 0x20>; + interrupts = <1 11 0xf01>; + clocks = <&periph_clk>; + }; + + private_timer@ffd00600 { + compatible = "arm,cortex-a9-twd-timer"; + reg = <0xffd00600 0x20>; + interrupts = <1 13 0xf01>; + clocks = <&periph_clk>; + }; + + pmu { + compatible = "arm,cortex-a9-pmu"; + interrupts = <0 112 4>; + interrupt-affinity = <&cpu0>; + }; + + L2: cache-controller@ffe00000 { + compatible = "arm,pl310-cache"; + reg = <0xffe00000 0x1000>; + interrupts = <0 96 4>; + cache-unified; + arm,shared-override; + cache-level = <2>; + arm,data-latency = <2 2 2>; + arm,tag-latency = <2 2 2>; + }; + + gic: interrupt-controller@0xffd00000 { + compatible = "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + interrupt-controller; + reg = <0xffd01000 0x1000>, + <0xffd00100 0x1000>; + }; + + scu: snoop-control-unit@0xffd00000 { + compatible = "arm,cortex-a9-scu"; + reg = <0xffd00000 0x100>; + }; +}; +# 11 "nvt-media.dtsi" 2 + +/ { + nvtmpp { + compatible = "nvt,nvtmpp"; + }; + + isf_stream { + compatible = "nvt,isf_stream"; + }; + + isf_flow { + compatible = "nvt,isf_flow"; + }; + + isf_vdocap { + compatible = "nvt,isf_vdocap"; + }; + + isf_vdoprc { + compatible = "nvt,isf_vdoprc"; + }; + + isf_dummy { + compatible = "nvt,isf_dummy"; + }; + + isf_vdoenc { + compatible = "nvt,isf_vdoenc"; + }; + + isf_vdodec { + compatible = "nvt,isf_vdodec"; + }; + + isf_vdoout { + compatible = "nvt,isf_vdoout"; + }; + + dispobj { + compatible = "nvt,nvt_dispobj"; + }; + + dispdev { + compatible = "nvt,nvt_dispdev"; + }; + + audio { + compatible = "nvt,nvt_audio"; + }; + + msdcnvt { + compatible = "nvt,msdcnvt"; + }; + + msdcnvt_adj { + compatible = "nvt,msdcnvt_adj"; + }; + + msdcnvt_custom_si { + compatible = "nvt,msdcnvt_custom_si"; + }; + + wavstudio { + compatible = "nvt,wavstudio"; + }; + + isf_audenc { + compatible = "nvt,isf_audenc"; + }; + + isf_auddec { + compatible = "nvt,isf_auddec"; + }; + + isf_audcap { + compatible = "nvt,isf_audcap"; + }; + + isf_audout { + compatible = "nvt,isf_audout"; + }; + + nvt_ipc { + compatible = "nvt,nvt_ipc"; + }; +}; +# 18 "nvt-evb.dts" 2 +# 1 "nvt-mem-tbl.dtsi" 1 + + + + + + +/ { + + nvt_memory_cfg { + #address-cells = <1>; + #size-cells = <1>; + dram { reg = <0x00000000 0x08000000>; }; + shmem{ reg = <0x00007E00 0x00000200>; }; + loader { reg = <0x01000000 0x00080000>; }; + fdt { reg = <0x01800000 0x00040000>; }; + rtos { reg = <0x01840000 0x00FC0000>; }; + linuxtmp{ reg = <0x02800000 0x04000000>; }; + uboot{ reg = <0x06800000 0x01640000>; }; + logo-fb{ reg = <0x07E40000 0x001C0000>; }; + }; + + + memory { device_type = "memory"; reg = <0x00000000 0x01800000 0x02000000 0x01600000>; }; + + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + }; + + + + + + + libc-heap { size = <0x00200000>; }; + + hdal-memory { + #address-cells = <1>; + #size-cells = <1>; + media { reg = <0x03600000 0x04A00000>; }; + }; + + hdal-maxpath-cfg { + + vdocap_active_list = <1 0 0 0 0 0 0 0>; + vdoprc_maxdevice = <2>; + vdoenc_maxpath = <4>; + vdodec_maxpath = <3>; + vdoout_maxdevice = <1>; + adocap_maxdevice = <1>; + adoout_maxdevice = <2>; + adoenc_maxpath = <1>; + adodec_maxpath = <1>; + + gfx_maxjob = <2>; + + stamp_maximg = <9>; + + vdoprc_maxstamp = <4 4>; + + vdoprc_maxmask = <4 4>; + vdoenc_maxstamp = <9 9>; + vdoenc_maxmask = <0 64>; + vdoout_maxstamp = <0 16>; + vdoout_maxmask = <0 64>; + }; +}; +# 19 "nvt-evb.dts" 2 +# 1 "nvt-storage-partition.dtsi" 1 + + + + + + + +&nor { + partition_loader { label = "loader"; reg = <0x0 0x0000000 0x0 0x10000>; }; + partition_fdt { label = "fdt"; reg = <0x0 0x10000 0x0 0x10000>; }; + partition_fdt.restore { label = "fdt.restore"; reg = <0x0 0x20000 0x0 0x10000>; }; + partition_fdt.app { label = "fdt.app"; reg = <0x0 0x30000 0x0 0x20000>; }; + partition_uboot { label = "uboot"; reg = <0x0 0x50000 0x0 0xA0000>; }; + partition_uenv { label = "uenv"; reg = <0x0 0xF0000 0x0 0x10000>; }; + partition_kernel { label = "kernel"; reg = <0x0 0x100000 0x0 0x290000>; }; + partition_rootfs { label = "rootfs"; reg = <0x0 0x390000 0x0 0x3E0000>; }; + partition_rootfs1 { label = "rootfs1"; reg = <0x0 0x770000 0x0 0xB00000>; }; + partition_rtos { label = "rtos"; reg = <0x0 0x1270000 0x0 0x900000>; }; + partition_app { label = "app"; reg = <0x0 0x1B70000 0x0 0x50000>; }; + partition_sys { label = "sys"; reg = <0x0 0x1CC0000 0x0 0x10000>; }; + partition_all { label = "all"; reg = <0x0 0x0000000 0x0 0x2000000>; }; +}; +# 20 "nvt-evb.dts" 2 +# 1 "nvt-info.dtsi" 1 + + + + + + + +/ { + nvt_info { + BIN_NAME = "FW98565A"; + BIN_NAME_T = "FW98565T"; + RTOS_APP_MAIN = "cardv"; + + EMBMEM_BLK_SIZE = "0x10000"; +# 24 "nvt-info.dtsi" + EMBMEM = "EMBMEM_SPI_NOR"; +# 34 "nvt-info.dtsi" + FW_TYPE = "FW_TYPE_PARTIAL"; + + + + + + UI_STYLE = "UI_STYLE_LVGL"; + + + + + + NVT_CFG_APP_EXTERNAL = "hostapd wireless_tool iperf-3 wpa_supplicant dhd_priv"; + + NVT_CFG_APP = "mem cardv memcpy isp_demon sf_app"; + + NVT_ROOTFS_ETC = ""; + + NVT_BINARY_FILE_STRIP = "yes"; + + NVT_CFG_KERNEL_CFG = "na51089_evb_cardv_defconfig_release"; + + NVT_MAKE_POST = "make_post.sh"; + + NVT_SAMPLES_INSTALL = "DISABLE"; + + NVT_CFG_UBOOT_CFG = ""; + + + + + + + + NVT_LINUX_SMP = "NVT_LINUX_SMP_OFF"; + + + + + + + + NVT_CHIP_ID = "CHIP_NA51089"; + + + + + + + + NVT_LINUX_COMPRESS = "NVT_LINUX_COMPRESS_GZ"; + + + + + + + + NVT_DEFAULT_NETWORK_BOOT_PROTOCOL = "NVT_DEFAULT_NETWORK_BOOT_PROTOCOL_STATIC_IP"; +# 103 "nvt-info.dtsi" + NVT_ROOTFS_TYPE = "NVT_ROOTFS_TYPE_RAMDISK"; +# 113 "nvt-info.dtsi" + LCD1 = "disp_if8b_lcd1_psd200_st7789v"; +# 126 "nvt-info.dtsi" + SENSOR1 = "sen_os05b10"; + SENSOR1_CFG = "sen_os05b10_565"; + SENSOR2 = "sen_off"; + SENSOR2_CFG = "sen_off"; + + + + + + NVT_ROOTFS_RW_PART_EN = "NVT_ROOTFS_RW_PART_EN_ON"; + + + + + + + NVT_ETHERNET = "NVT_ETHERNET_NONE"; +# 151 "nvt-info.dtsi" + NVT_SDIO_WIFI = "NVT_SDIO_WIFI_RTK"; + + + + + + NVT_USB_WIFI = "NVT_USB_WIFI_NONE"; + + + + + + NVT_USB_4G = "NVT_USB_4G_NONE"; + + + + + + + WIFI_RTK_MDL = "WIFI_RTK_MDL_8189"; + + + + + + + + WIFI_BRCM_MDL = "WIFI_BRCM_MDL_43456c5_ampk6256c5"; + + + + + + + WIFI_NVT_MDL = "WIFI_NVT_MDL_18211"; + + + + + + + NVT_CURL_SSL = "NVT_CURL_SSL_OPENSSL"; +# 201 "nvt-info.dtsi" + NVT_UBOOT_ENV_IN_STORG_SUPPORT = "NVT_UBOOT_ENV_IN_STORG_SUPPORT_OFF"; + + + + + + + TOUCH = "TOUCH_OFF"; + + + + + + + UBOOT_ONLY_LOAD_LINUX = "UBOOT_ONLY_LOAD_LINUX_ON"; + + }; +}; +# 21 "nvt-evb.dts" 2 +# 1 "nvt-nvtpack.dtsi" 1 + + + + + + + +&nor { + + + + + nvtpack { + ver = "NVTPACK_FW_INI_16072017"; + method = <1>; + index { + id0 { partition_name = "loader"; source_file = ""; }; + id1 { partition_name = "fdt"; source_file = "nvt-evb.bin"; }; + id2 { partition_name = "fdt.restore"; source_file = ""; }; + id3 { partition_name = "fdt.app"; source_file = "../application.bin"; }; + id4 { partition_name = "uboot"; source_file = "u-boot.bin"; }; + id5 { partition_name = "uenv"; source_file = ""; }; + id6 { partition_name = "kernel"; source_file = "uImage.bin"; }; + id7 { partition_name = "rootfs"; source_file = "rootfs.ramdisk.bin"; }; + id8 { partition_name = "rootfs1"; source_file = "rootfs_1.squash.bin"; }; + id9 { partition_name = "rtos"; source_file = "../rtos-main.bin"; }; + id10 { partition_name = "app"; source_file = "appfs.cardv.jffs2.nor.bin"; }; + id11 { partition_name = "sys"; source_file = ""; }; + }; + }; +}; +# 21 "nvt-evb.dts" 2 diff --git a/loader/ARC/Lib/Release/Ctrl_Flow.a b/loader/ARC/Lib/Release/Ctrl_Flow.a new file mode 100644 index 0000000000000000000000000000000000000000..165664bf9055791750a1780eb14c5201ac6ad525 GIT binary patch literal 30102 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 L1`SXLOWywjb@oXH literal 0 HcmV?d00001 diff --git a/loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/bl_u2.o b/loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/bl_u2.o new file mode 100644 index 0000000000000000000000000000000000000000..72f9d85590950aea253903a407c42f057ab50c66 GIT binary patch literal 780 zcmah`%}&BV5T2zV;7N_fzr<88qLIxOXrbO3L@#(T-V8CjZHY~Qnzk4{`7&O7FJHhX z(Al;d3yC_(biQw9`t3~Sbuhdngn%*v4ftUIZyBj{(uM}qVFlo--#^zI!(hgvP)DL$ zw9{-cqeq!}A_+BgNm-|5>UWd0uUY8PBmXIggK(yIg<*QEXW1^Zt+C&>E!O6q)%IM& z=A!G4S=;nQmyN*b;RM|0A^<`WR{CL-_|HwphLzQ-QzP}#Mro65k!@{?7ZmZla^sW0nPYM_?<0QO&oGSiLFBBPCqs%E&dfx@=N$>yw literal 0 HcmV?d00001 diff --git a/loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/main.o b/loader/LibExt/LIBExt_src/Ctrl_Flow/Ctrl_Flow_Data/Release/ObjectCode/main.o new file mode 100644 index 0000000000000000000000000000000000000000..af3ea2456525b6a526cea6425b3ba3500e429a09 GIT binary patch literal 2200 zcma)7&2Jk;6n|@PnvbT`Nn6?`B220vLhG#TeA$K~kvNz{I3#KmsRY4lKPK^twb$Am z7Y8KZPzebR<-(;0{snSD6hT!9PQCSr#H9x$5Fpejk?;Ws@2z(dcMF1%W`6JYn>RCl zvu~c?d$C+n6a{2cU>uGZz^!B9OxJV>n!OT%jN zmxPsSDd|%Ssa7J5?83qCe;vr4UL@<%5-ar%OHD0Ft9!RU(Y@QF{b%0o#9nRYCjC-pY+Td)|$K(DzH+ z{dj40=+DZ=&?ocB?^r37yItD3{ms>4OTD!Bqr3}=y=aVJAH`1h(8PYCZ~c{xm6u1M z;RxTWF=6;yT?(S`;LVA-0vzk>p6gM16N8D<${FQs@|<#B8B#{n3(7@h zp)#srMnApuNcy}Y5X*DSAE_jwRNadmyEcFk}d+Yo%IXjm0K=el6k8@lCk zqjog8a5!mmv$3UDgDq$XSGRqms@Hu_a7*aCMrjVFtJC2n*L&+xA3VZ(^HDi^BDB`$ z`1*X|1>qBf&9Ybltq3Wn$d4XMh+42+6^02~ApAB~q=j`tfJRpWnu)2S`P|j& zcwJdEJ<@4WRzr$6Ugb6Pp1ZQF8AAAu*$_OybN*)=Mn6ht`O4e>V@Hc+s*gr~vYPyx z-_z(vVg8q2Cfcv_T&f?k$tsjaf&O1!h$fm{?OKIp9V<<{(|I}Uw4CyUS{}(qZ8IEc zjymNFA)Qa{TO^IP8IIC#1sTRrms5Exs|86A$&VVQ-eIi7uVO$t8Bvpdgq@XHAlX5Y ZYAGEQc>U>D?g@t{ueh;NbkpQp8TVW)BJsIr#jv^>1YRxT^`{(Zh!pQ4sUP=vjs7u`K{etY5@&nC`3rO`4$zW@P(t!M oP~60O56DTuI8LdGEor$C09=KG^-}zu?ZWNJk;2+BU@^m$iA(pgoN0# zV%;4(c67s%e;~iW51{UmU?%n?uGny-lX)G_ojZ2kKN&t1LI6WR1=bP3r_8dl(OjAe zY(XA=p?`qfMUpm_fH?mKUkk%~-k1KB#mM{6FD^cNAN#q*PfzG)^RoYPWcz2M^Y5S| z3C{+DM|x%G2Ua-KG0@wxS=%@2U1_u)P$26%g+_C~rN25_>S`&C9=a!fMd6E=&v zUS1S3rOb7)BW`HB;-568fMbaAPZO1 z35-h^S68_>UWNbk+gz8>(;x>sXlX_RS;Bs0v;=x@+w^=i_YZ?vc<4Kk9K)W1JqP00 z4U|7Qh2TW70H2{*GBmb~PN&MU(W)@E9(%Y-1=6vU1=5ZpkfD1dDJd^CmgCuUiid#g zy?8Dyr9$66R&IpN{|~oOMt9>|$KU7rS$;Qn6CH1xbaa14HgWEw%_CViWImt literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/LD98565A.bin b/loader/Project/Model/Loader565_Data/Release/LD98565A.bin new file mode 100755 index 0000000000000000000000000000000000000000..eaaf07da2e752246020fbef567b3b79c23ef605b GIT binary patch literal 32768 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≪KO)h()EQC3@ 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 literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectCode/uart_upgrade.o b/loader/Project/Model/Loader565_Data/Release/ObjectCode/uart_upgrade.o new file mode 100644 index 0000000000000000000000000000000000000000..0c9cf7b0182dd86aca3efcce1393b11f42929312 GIT binary patch literal 3024 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 DPS08b literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/Common_exFAT.a b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/Common_exFAT.a new file mode 100755 index 0000000000000000000000000000000000000000..c09b57a54d74a464103f2895394869e38d26d242 GIT binary patch literal 24746 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 literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/global.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Common_exFAT/global.o new file mode 100644 index 0000000000000000000000000000000000000000..ef0b9a0074a2e95dccd5dcd53d52ff8c00196833 GIT binary patch literal 3476 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 literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o new file mode 100644 index 0000000000000000000000000000000000000000..af3ea2456525b6a526cea6425b3ba3500e429a09 GIT binary patch literal 2200 zcma)7&2Jk;6n|@PnvbT`Nn6?`B220vLhG#TeA$K~kvNz{I3#KmsRY4lKPK^twb$Am z7Y8KZPzebR<-(;0{snSD6hT!9PQCSr#H9x$5Fpejk?;Ws@2z(dcMF1%W`6JYn>RCl zvu~c?d$C+n6a{2cU>uGZz^!B9OxJV>n!OT%jN zmxPsSDd|%Ssa7J5?83qCe;vr4UL@<%5-ar%OHD0Ft9!RU(Y@QF{b%0o#9nRYCjC-pY+Td)|$K(DzH+ z{dj40=+DZ=&?ocB?^r37yItD3{ms>4OTD!Bqr3}=y=aVJAH`1h(8PYCZ~c{xm6u1M z;RxTWF=6;yT?(S`;LVA-0vzk>p6gM16N8D<${FQs@|<#B8B#{n3(7@h zp)#srMnApuNcy}Y5X*DSAE_jwRNadmyEcFk}d+Yo%IXjm0K=el6k8@lCk zqjog8a5!mmv$3UDgDq$XSGRqms@Hu_a7*aCMrjVFtJC2n*L&+xA3VZ(^HDi^BDB`$ z`1*X|1>qBf&9Ybltq3Wn$d4XMh+42+6^02~ApAB~q=j`tfJRpWnu)2S`P|j& zcwJdEJ<@4WRzr$6Ugb6Pp1ZQF8AAAu*$_OybN*)=Mn6ht`O4e>V@Hc+s*gr~vYPyx z-_z(vVg8q2Cfcv_T&f?k$tsjaf&O1!h$fm{?OKIp9V<<{(|I}Uw4CyUS{}(qZ8IEc zjymNFA)Qa{TO^IP8IIC#1sTRrms5Exs|86A$&VVQ-eIi7uVO$t8Bvpdgq@XHAlX5Y ZYA diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Debug/debug.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Debug/debug.o new file mode 100644 index 0000000000000000000000000000000000000000..868702b2c95da20f3d7f7aa14cea344e716729d5 GIT binary patch literal 2676 zcmbtVO>7%Q6n^V<9LJ<-NYfGmlm!JafvoKOJK~U##IZ;ts!|YAi=4H08(WI)u)C>( zI1q6_aDrn%2yx(^R3e8;&4~*KE{G#Y99zVxQl;iZc;D=dJ=ubU#FNJFeQ&<`cIM67 z^+(H>iiTm3GJ~?zK}5-JG1E0ET$V1-IqF_LIHdiF+o`qD+VHKVi-X6;S-O32^h)ho zZExk_U8S|ltdoa-o$Ma%anxHx+*QJ_C1OMgf%lHECdtEG#j2t8^evOMc13>gFj=I1 zQ(L)rgl!!hc5%L^6e(wgW=dm0KU#Gl`05#Be;mJ=D*k?a{af1qw3y`R>OtzywE6Yx z#xF)nhz#~JqhJgnRf zoypMh9C0vbk!2CBEH2Jj*-Q1N z<>Ad!-252yh)iDKO^{qZ5D34V+_`R|H^mfP`nba5K_X+;>HY>ty$SW)fPzmFa zdUj3%nn{mKcH~SNpiwPjar_z&)E_4q;CdF>KgI(*;H&JFLA}faeAHlo>-oOKLjq^$ zLy6IH16+^KB;FLbkI3~Z+Z%Q@^5w1VupESby}3anA&t1yC|6s}ptb2qf?E%q%BELt z1RFAQDk|S}d|L9V<0WtBt%Io1FaGc-* zqsAF-A)Fijg7ie-^7HT((UQb(NdJ!X=r`ewcrRrC(TF0ay1AIdO^ceCIlCzlBX<$9bC{SZy^LUX!=FaAnPQ zLTxMblb372MFWtZKUSbaVLg#U-v`xk6rTBBRZC2Ey zfapDZOXqpO`n#gOMXx~%1J7IKq3hx9^*yTRu5e!0vsiDQbI?N#lpcCW*ZV?p*a=g5 zR~YGf>#T?UKo4H&;YHN-zGIAUi!!CxcZV_F3uQ|0V@~LL zyR28@9Q5$jR(juXtm{2sjBlGVrS}ylbiE&0Z=G|{!*@XGea|uU@Xo^48Jvqk@ryZ( zAEZY=zyeNgN1^ytyq_3xPi?8GdpuE4fIWCH{4=QD1J3fL{)RxB;=w0WlKlvS%RJ6= XjQ?hwqn`)Ps_TV3@g?V!DZRe|>Rxf~ literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/Driver.a b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/Driver.a new file mode 100755 index 0000000000000000000000000000000000000000..d58ec9fbcaf93ec9570d1dab5f59fb1ec9927e1f GIT binary patch literal 14070 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 XFj4>L`Or0>I7dG~fs*6Yz7zYu;gMoI literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/fuart.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Driver/fuart.o new file mode 100644 index 0000000000000000000000000000000000000000..5f014d7ef2bfa76094584f419cbd1a1427e84b8c GIT binary patch literal 3996 zcma)9TW=dh6h6D_TbwkBFO<~j#Z7~hl*Y21ThqQIaS0_!QPieF1dwApPVJJ!#$F>A z32KQV!2>@4A<;_k22xAaJRo7ULVf82Qd`jn#1kMCZVyHjH6TPeXLe^jJ58jHvYvDK z<~uXz%)(6oOxI$q z4%dUw-vE5L?>jg1AXIj$(itF2G$h0DH8r31dG)gM0i z@8RZ#e|pD$V}^-_q6HQ^WX4ng{o@f zJnCfEuy^-pn~p=ZdM_vq9n?mfxjy2hC^!cQPKT^Gofzlt=FRAVhNgXmz4})zJ{J$< z68CH9X|>|DJVv}WGhbpX&kXdC{$hS1wJ`5`&Re~U8Fo(lt9P%eMYPV-jBrloJe@Oy z?yd$f1G}$lGu>6qmbU=%H4x!H5qRF0iiy zFz>kI{aiV+kP1)zy5a3t@4$gXu~FaA|IckD{^tf<7h_*pcTB$e;0}S6~p#qj< z;DZuA$nbL(s<{&k{7wnK(?S~lE?kk=x)@)dWioV2#ry@B-?4@S&CZadmmq|1#5C;Z0MgtIUtHeb3YvncfZ` znY!WcfKN?5%KSdKVd`O~2jFW{H~53_y{S`;{IC=7Qe({+k5-&K<%k|1<_lkNtZ_Yv zI?bIj=fmH9rk`x2!*V56(jyt@)uDF@dQ(u&mh!2UWU-=WOgWxBlNA)fV>p&)^XcSV zML)$xCUU6~*iEPO5>S|Ap_pAeb*`*uS5HrzoadqPYk7Suf82`SMBq#)K(bg^!FTT& zV^}8lDvQcuAOhpr0ce|~H}yF{DQQe4eKwmh!p4$?^jXFfWm2Y6DrML7Ih=KNwUQ{T zt`^oNE6XgeDsC9cr5XdEw~abvB1fZUNDRrUWRPuvj~mk!2E>!b2wDX*^ZMB;EVy``o00hlvEq+< z&Du8|@-B#Eu*g_)h)kS35lQKKDW9(B*)kU5Fn-e=TvzFCyF;-j(R{0P^)_Y6KX!K8%C zZG$^4;Vx{0qw!+gOWWYyl5k(5PIKms=j9DFh*H8~S+Mb%}2t`4-W}8;|=98pOEQwuyTiabny~Auipe zJnnB2-wov3Du4JvY~$+^_~>ha^SN-mIKKueVf6FH*Re;!bz;J{%JVM7iR%apaf3+8 z;~tgxR*+BJ&%7R^5?`OdM_(PBkMfUy*15cZ1Y6~0PU4FqUnh>EeMRv(-&vE7b6i8d z3i^4YSoDgD_L^Ntyw>`K zfYgE|t{ft9D_qJM2@d5(lz)Lp<$^f$21gg=z@aLgS?_b!7N{L*cIG$pdo%O)z1_Q~ zm(DQ8KnjB?*h2tX#Lq-#d@}|6U<6W&o6q6th&_==br^iLqjqA7a&&xW-_m0ziID>@ zQ=K>@UyhW%+iiPkyU^i~F2`-Y3p`$Ce9SI(G&WX#Y;JA=-`vt5+M)9M(MC#bto_h= z9Z_GY=Ti3N*x!G&w_sc5NBsOm&^tlBRpr>wPPFu^Q+Ur(4;B*Jj049tq}#H#Qeu-- zdA!`-N@E|jhn30k@;`4W7WHeVZQi+C;JbH#?=}m(^AV`dA)4{*!oo>Dwd6ER&*cbs zPM?`RVPxiYWAh0gb<=4%ZiCNNGP5;fK9{c=`CQ$~=5t2Y ztmU$`Y9?=1=BjlgJ8MjptU;_VqQNlY)qD&;g$EN`(PEU#g%E;j1!0Bgf^0&3rCpXFIC zORU)I;*`75xah1|o*!&ri0@bNWEpnLv@6?fgMS^yVuHYMFXXR^-%40`MK znlLM9h1a#V^zb?h&}*hJL9eu0pnKM;-ZVXt0iAL>P4|g;_LAYL_M!u`=~Z`a&1zt) z;)U;ZQwYzgtP87!6aGJ$KpLHoylLHk;@(=yk$jCxzWic7$NL63bgTZ0X9V@aeSgQ8 z6fJO$qorF}2=Fo{@Cbmu5#o?izd6+KKHedwJ10ffqq7Y2J|G^IB(#!ueSnw1Mf?-I zdjXI3LvkE>>s{A>QZLf`sQ6Breh?qOVK6TNTH=s=i7MY6VH*c}L{1=*M>hO7dxL>L aQR#a diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o new file mode 100644 index 0000000000000000000000000000000000000000..5872e1e02068323391a6d24c2cefa06fdccd4843 GIT binary patch literal 896 zcmaJ<&2G~`5T3P@(DXvuf@q5b22~=hn$@O>otQ(_C=@Q?Qo#kpVf_=ZgkxlH5uA7h z9)WYuya`XyTk-@jv)NS*2S%FxzM1)UygS}+=dp@uHBp#`t6 z02%LTGK?nryJPv+dkrciBC6m+i5A_Mq{Y9kFNi zVVL9BQw>=CHfas+U(*9{VLd>raWQk-1{(jZ<78{*LKC)4e1^D1{o-OV&)%0ZpS|HR z93(K+i3^#(k`Vx}zUB%EuT;6l50>GL74SqV2|TJQ;Bk@X=>l_;iD0qMwn zbnNvBLEAO1q2UC!-xhNFP0Ihm!Z{IRR!3O>V+WY{jyXCrIo+d!-bSzY`-!@Tn6qa4 F{Q)2>U0?tJ literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o new file mode 100644 index 0000000000000000000000000000000000000000..a838951683aad2157bece97b4888b47476998a5a GIT binary patch literal 3556 zcmb7HU2GIp6h3!%OSe$d=?@gONf%ND1==lO1j0jGT2f-Mr7cQGaG2elwiEWJ%uZ<` zRkrZN8!_=olkEeE#`xePF`6`n2NR<&*4T$?x?KhlakChR8Y}B}W_On9&_sLNv*� z@7{Cn-Fvf_d-{$FA;=zrcG43>G+k|3D)w7!Csok~`ibaXLq2UfiSmK01Rc{YFOlCz z)Cal_ng=a_NcbPjQT2m*@;s1gYI9=aT-LK`F6$$3kN`Ds%m?vyW60%zd;kZO(4+ zE)|Gt1_fucqHQ*Fb^Ddf8*P<25xlzW#oT`t3Lgt;X4yw4vX3yIog<31SaG!}(^rdr z)XrqZ=9#Rg4jkm!GL!Ye)?1%8{oozo)!=8Fi@vts+2)j4!2HvVDRX)U_tmpx*XBb^ zpe|+Fa|WAhb3XJb*er4nJ!$h{9cX*n6o;-XiT2dbLOQXGo}6BQt!7gy`xto_*0A4% z{T5;cr80A{Qy^s$`Y=%A$$bEuA91`NY?q)TTEbcJI{L>wPg&>3UYotYK9{~5`2_M2 zYIpj2us%Kqynh_i0pgtYKC&;L56aJG!0!b*_WZJS5NjQH&wQoOmITy02Wi&qdlCvt?jy$E!fl^FoiFd6d$Jfa5339k&*VB*Bkb`@|WLA8Ok>uX8C;n_GR3CpheIU zXdZMQMD$X=^F=U4RYDqxCWsYB61t&I?dd#78#Y#U`bCxJWzp@tjX7@h@UFV8u}b_o zhnIXV4?%u7q{?oB8k_;}ZUhdLb%I(Uw>WSYyzXdtyz+uS6_k)#!#_$>)@cUuoBM|s4vGEWDephTPL*O^Y#t{hCdt)hz^&Kc#dH!>dR~*=Y zES1|V=n8Pqfv*9NIq_`U;w2;AbqhcyJ<1n+j>TfiSV@VCG|NButl&p9yn zYtd03V0n0{f|kk%bwIx3!oR!lKQ3HVUVAZqn+w0{!pB@#ap6f9zUIPQy1gF~_Tz@j z{-q0l@EcAu? z4MjI-M2RLTqQ%vSti_XtJ`pywL>$hE5o1!(RcH-W*C)melE-y* zL^Z-=vJ%3bKypMe6kFEx^CXXG=cy$^;i#(Up=6RK70r;xE?ktO2_-^W{K9ZF1SR9d zIAH}v!Pdxqd*Or-!wAU{U5Uxz_9u#Dg4DPYimGy7I~{v{SnliZA0TyVTpm-RSWPIA zFf4tq5|2bxorV+R{Ubw$5a6DYcZ-Wt5a&Y*b_MfGp*8x$0uYZ646&{liH;x zepdBXPgloV`lsTH-sO0?tG|C(?m5+SLl@mfq7Rpn7NuIfruzNGPgv8uH!Q7xt+2yLdAqQ!~Rs3Q~Bxxhv-jHscB zQ8|_zU5(@mitf_jbXc0c)AGr9I1$4s!Paw*ZZ*8OSDhL%bbPl0AP>G1EhWx(HDkV` zne*MuobP1j3*b$-bQhV!xPtTC1S8)$9$fw_%-dnC0N+d0z375XIH0{U*ljX~N7l{4;%a8jBpK&m2aK0Tj0Oz@R)Pn3> rj1S|tRR;^DVf!)17L>;gmPdH=Fxozm|euF8QURUn$#mz7;Zi+jiUV z?HoZGQRp-cl7jELu3wlgPTO{&;<=uu`+VN_F}dUl!*=dsVP(;>ET(CRMdS415nU!u z+HFP0DN8*>5B9Bwf2=yhAD^D?n4>m|=_*k523h?u({s%*4o;_P73#_L)-qPMYr>j0 zck_O^)T`YRrSO@OqV6{ci_#|GO*DmQ#)$W^jRe!MqUE)XttEA|dk}v4imj6Ru~*OI8RK@u8I{o^(Z2zw!Z49I1U^2lQ@V#@I4s>j5C4kw}kIwN!zTt zwfze^i&oWs8I$-tyj7mhIQB=hFWEYWZ;E97HwGEs371bW$HKvUW8y#y-w)Wr#o;Of zRW`H;j&+v|LSLa>qRCnK9DFx?R+DcS6Mte%MEG`^VNl%KKRG;3o=T@T;(5M)Wu4#1 zeX>~ljbux^@2)?<=}q?f!8X`I|q@*jCY3XW^Vth3K> rlfZ$iU1yB@PMzHVH-jc3>#{bpx(WX;8ow9*PkdHq*N6!R%(ndu?*V!Y literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o new file mode 100644 index 0000000000000000000000000000000000000000..b3a88e57600f0b559978b60f0d2d8233b0962a3c GIT binary patch literal 7756 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 Q2a(CMao#6`Ku)s%0|)q+<^TWy literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o new file mode 100644 index 0000000000000000000000000000000000000000..7838cbe605092bf4dd73f43e7a2de807d02680c1 GIT binary patch literal 1020 zcmah{%Wl&^6uo0RaUVgoQE4eJxd@4X8q3bZiIETr39v~wY%64qA8C!^xUwe*R{aqc ztoaH)hz(x=cbpmO2%#Qnbndz5c;@ORS8rx-2_YaspbggwV4+k_qhC=Qc0jMH?;lT~ zpak^QrS%H3y@!YUps1Cl9N%h#VH)rQU{6t6EyFmd&}sp+5M(-?nx<|fuXRJ4?(S+= z|Dd`E-c2SitoAHj(jvD|Sf1VQbRBnOJA-Fj*sjH;)9((fvqhEb)G}6)d`inSUs}V^ z9mLMa^CQRi=1I@@oF0w6UL3hT4TsU(=?#)_=zM_j2;Zg&4O1XCmW@eXu;g=R>_c-$ zA8(Ou<+idV^xT!g|p%qhhBH6*M@g zH&EB1LZdG6>n0qD&IPi`^HIK>r{_Uj(98|G0Sgy)1W#hXRz?HimI-6&@;vAQ*yWdu z(GZyxYrc>bu7rUdQ%1oK%M$D&UyCTuvSf+g`2DF(87tCo#gcMkxEsWM^!YlQBDenU zU4JB3eJpZvQ~%37#oQL2n{p@OKKV=V`}po8fQ&)^8-EAmRzoVdr&OFa1IB~k?w xo4yptJi}q)k+X6A00%hbg@DX)ma}ndhK+B?+v4!~3{ltb`-wR@E82hG{R7DWZPx$* literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o new file mode 100644 index 0000000000000000000000000000000000000000..772f1f10fcb93b362dcad93639f820b64cd6412f GIT binary patch literal 1016 zcmah{O>fgc5S_J?v~fk0Ku}9S$U#UAh*(aOI5853DCOgjUO+veDq4S}u~f&%-WE8) zPvFFf13!fy#D!k~Gxo0P98jM$dh=%9uE%44dAWGS7y|_cJ-Ai?Yc20oM>+MtfStnn zbpk1#tAGCnr|_nI*nI$cC2winTfIE_rD>pPhS6+xau^MOhS6xiF||98z3af8)4jd+ zN5Yi?iTpggp3k3~y+yR)X=0)<9c$D-vIkSk9zP*r4NQ{u=xA)dzsP<4lE+NLt0;?- zjXCiK-Ei4E%x1y@|iFhvU$j*k>@C;85C>E_eI#$Zi zp#tr40d*NVRLc@i*I-{(*2pdL`^jb%oiBrw$AhKtE-W7&2Y`i`FJ&(ag@`ui09N)n z7TiM?X~Aoi;W`9Z0T&!BFU!D6lS24O9ETh1&EB3^T!=LCE=8Da4R(XLk9}HYP5O%e z?)s2gb65J*mj35EMBgsPO}=OHKJ^voKH8gt+BVf`23t0MAYaOyhbkZ_`izZMB?5fTBB)uxV}m|GNDs1ziGxFHT}djpmlyIs2oPP{@7 zeTlwBukbcJL78!Oi^GMH#@{#djmJCV{jt9|V2pt?1_SsT0rXn6(izt%Nk{_&`;8#ZdV(OH;SUW~D)rQ|!*V7^KHnv0YdO@zn!^}Mw z)cCL7-cUX0z_!hB#4YNV6!|jyY}D$&=#zH}iAdl{3X4Le+8pMUHn}=F%$Eg#D8H{N z6(d$=jb9wY@hcFisuYO0EI}m2YNd0`&ECHis;W#DpH{luIM9EBhp5wj=oXNz@5P$a z)9r58a?eUs$1NvtTX>4Rhwkb=kk~NS?*-lmT7pZJU{Cvg3? qkh^bE{t|_KBGz0TVe=2RF>!`DIx{)VaSOeV-t2ddb#!KDuHPS^tzI4g literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o new file mode 100644 index 0000000000000000000000000000000000000000..9fa24ee2a480164ad5e27dd2edee30d07c8902f0 GIT binary patch literal 884 zcma)4F>4f25dK~^m)xb$7j1+DbAdyn=#nA`g2kR13sLS61Pej-$bwrWIrd(NR<0q1 zWfc2MX<@HrgcSY&|G=>rE|j%r>Z><4})gj%Ls zxwjjc;ML9MZOkpqH>;{Pb6wq^yjFgssfROlO~65MP)l-%Om|S2W%7{HxlL>V}VfKQu4G9TP;+Ue~~c+d;%QG-zxAZtwNB@jJ98D(p+^aX|xj%QrsU zPOk^I`Q)+d8xw_{JrnfCWBT$TDS z-i?COrO8G5Nv##zevyFfCAr^BoZY>6C&7h3`PJl;9}(mKjv7_=(4{}w?+1CS#H~ml Fkv}2~j++1g literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/exp.o b/loader/Project/Model/Loader565_Data/Release/ObjectLds/Reset_560/exp.o new file mode 100644 index 0000000000000000000000000000000000000000..60be624a5a667dec6189e91aa8b2464581926893 GIT binary patch literal 636 zcmah`O-sW-5PjP;ZCViOQS3oMw21D>i_lA`l^!ZBp1jG11T6SPvVxxUzv{`8f1uQv zWQS}{o$z>XcHYcnlh5h=S}6qyg%Rou7*|PnQ5r^w5CVS(-|NlhH$J9AlbK`%H6$5M zUUHkgpU0Qz^t*ASdaYA+H3yAtK!8?VBo)xpoS@KeIGWV}ZR~jU0e4UDmiP0; zVu>SD>X~^?AF~|L#mAF139-#9eh@_$vCyfp20AGU==k8p&*a|(L;fNgv&=I;8rINQlvzw42Oz~vrd;1DYdKhR_1kv$iQ_nA%%KKVifGH5jMO$K zu0hMRK)+8;ewzGZ^xce{3WS3jP(q4iM9vjpt(7S)kM0DIslL1rEILc>Z6~x>oX(zt zH`5W3hsQRLYJX*%LBgqNl1CT8i+ z$u9SO^+EwI4wdhLi^Jsech42)?5;xi`SHFM3A|Q?e`!d`v5$MI$!FRXT9BXQIr%}< z^M%%GlpJcA7mNJI_Zo8e)azv~|4-HZtoSnGOL({NvVC=nzPWdv&vTe>mD>CXkDwcP zjhP#E9Ra)EH`H50jBD^*Q*XnH0cpS=%S=7)8}km#&;W4L2zZls7HoRs;a^xcWGKz# evB%KVK7a-Ya?kufa)0bu+x5O9=LcfOOuav7c7z%L literal 0 HcmV?d00001 diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_ext.d b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_ext.d new file mode 100644 index 000000000..ad6db6c7a --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_ext.d @@ -0,0 +1,98 @@ +Loader565_Data/Release/ObjectLds/Reset_560/Reset_560.a:../../ARC/Lib/Release/Reset_560.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/reset.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/reset.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/reset.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/reset.o) Loader565_Data/Release/ObjectLds/Reset_560/reset.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o) Loader565_Data/Release/ObjectLds/Reset_560/configramFreqParam.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o) Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_tbl.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o) Loader565_Data/Release/ObjectLds/Reset_560/config_dram1_2_tbl.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o) Loader565_Data/Release/ObjectLds/Reset_560/core2_entry.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/exp.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/exp.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/exp.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/exp.o) Loader565_Data/Release/ObjectLds/Reset_560/exp.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o) Loader565_Data/Release/ObjectLds/Reset_560/configDDR.o; + +Loader565_Data/Release/ObjectLds/Remap_LZ565/Remap_LZ565.a:../../ARC/Lib/Release/Remap_LZ565.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o) Loader565_Data/Release/ObjectLds/Remap_LZ565/configramLZ.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o) Loader565_Data/Release/ObjectLds/Remap_LZ565/doremapLZ565.o; + +Loader565_Data/Release/ObjectLds/Driver/Driver.a:../../ARC/Lib/Release/Driver.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Driver/fuart.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Driver/fuart.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Driver/fuart.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Driver/fuart.o) Loader565_Data/Release/ObjectLds/Driver/fuart.o; + @echo Extracting: Loader565_Data/Release/ObjectLds/Driver/rtc.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Driver/rtc.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Driver/rtc.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Driver/rtc.o) Loader565_Data/Release/ObjectLds/Driver/rtc.o; + +Loader565_Data/Release/ObjectLds/Debug/Debug.a:../../ARC/Lib/Release/Debug.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Debug/debug.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Debug/debug.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Debug/debug.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Debug/debug.o) Loader565_Data/Release/ObjectLds/Debug/debug.o; + +Loader565_Data/Release/ObjectLds/Common_exFAT/Common_exFAT.a:../../ARC/Lib/Release/Common_exFAT.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Common_exFAT/global.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Common_exFAT/global.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Common_exFAT/global.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Common_exFAT/global.o) Loader565_Data/Release/ObjectLds/Common_exFAT/global.o; + +Loader565_Data/Release/ObjectLds/Ctrl_Flow/Ctrl_Flow.a:../../ARC/Lib/Release/Ctrl_Flow.a + @echo Copying ObjectLds: $(notdir $@) + @rm -rf $(dir $@) + @mkdir -p $(dir $@) + cp $< $@ + chmod 777 $@ + @echo Extracting: Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o + $(AR) x $@ $(notdir Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o) + $(AR) d $@ $(notdir Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o) + mv $(notdir Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o) Loader565_Data/Release/ObjectLds/Ctrl_Flow/main.o; + diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib.txt b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib.txt new file mode 100644 index 000000000..cd1a6d1da --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib.txt @@ -0,0 +1 @@ +Loader565_Data/Release/ObjectLds/Reset_560/Reset_560.a Loader565_Data/Release/ObjectLds/Remap_LZ565/Remap_LZ565.a Loader565_Data/Release/ObjectLds/Driver/Driver.a Loader565_Data/Release/ObjectLds/Debug/Debug.a Loader565_Data/Release/ObjectLds/Common_exFAT/Common_exFAT.a Loader565_Data/Release/ObjectLds/Ctrl_Flow/Ctrl_Flow.a \ No newline at end of file diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib_ban.txt b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib_ban.txt new file mode 100644 index 000000000..284bcdff6 --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/ld_lib_ban.txt @@ -0,0 +1 @@ +../../ARC/Lib/Release/Reset_560.a ../../ARC/Lib/Release/Remap_LZ565.a ../../ARC/Lib/Release/Driver.a ../../ARC/Lib/Release/Debug.a ../../ARC/Lib/Release/Common_exFAT.a ../../ARC/Lib/Release/Ctrl_Flow.a \ No newline at end of file diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/libs.txt b/loader/Project/Model/Loader565_Data/Release/ObjectLds/libs.txt new file mode 100644 index 000000000..0dd96a5bf --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/libs.txt @@ -0,0 +1 @@ +../../ARC/Lib/Release/Ctrl_Flow.a ../../ARC/Lib/Release/nvtpack.a ../../ARC/Lib/Release/Compress.a ../../ARC/Lib/Release/STRGINT_EMMC.a ../../ARC/Lib/Release/Driver.a ../../ARC/Lib/Release/fdt.a ../../ARC/Lib/Release/CA9.a ../../ARC/Lib/Release/Debug.a ../../ARC/Lib/Release/STRGINT_SpiFlash.a ../../ARC/Lib/Release/STRGINT_NandSpi.a ../../ARC/Lib/Release/STRGEXT_Sdio1.a ../../ARC/Lib/Release/Remap_LZ565.a ../../ARC/Lib/Release/Reset_560.a ../../ARC/Lib/Release/Common_exFAT.a diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/objs.txt b/loader/Project/Model/Loader565_Data/Release/ObjectLds/objs.txt new file mode 100644 index 000000000..48f1cae48 --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/objs.txt @@ -0,0 +1 @@ +Loader565_Data/Release/ObjectCode/prj_main.o Loader565_Data/Release/ObjectCode/usb_update.o Loader565_Data/Release/ObjectCode/uart_upgrade.o diff --git a/loader/Project/Model/Loader565_Data/Release/ObjectLds/replace.lds b/loader/Project/Model/Loader565_Data/Release/ObjectLds/replace.lds new file mode 100644 index 000000000..7f47599f2 --- /dev/null +++ b/loader/Project/Model/Loader565_Data/Release/ObjectLds/replace.lds @@ -0,0 +1,172 @@ +/* Linker script for malta + * + * Version: Sourcery G++ Lite 4.3-221 + * Support: https://support.codesourcery.com/GNUToolchain/ + * + * Copyright (c) 2007, 2008, 2009 CodeSourcery, Inc. + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + * */ + +/* Rule: + * 1. to use .o in project layer just type the .o name with file extension. (UiFlow.o) + * 2. to use .o in library layer have to add prefix module name. (DscSystem/SysTask.o) + * */ + +OUTPUT_ARCH(arm) +ENTRY(__start) +SEARCH_DIR(.) + +SECTIONS +{ + .BOOT_EXEC 0xF07C0000|0x00000000: + AT (0) + { + _load_BOOT_EXEC_start_base = .; + KEEP(Reset_560/reset.o(.data*)); + Reset_560/reset.o(.text*); + _load_BOOT_EXEC_end_base = .; + } + .LOADER_CONFIGRAM (0xF07C0000|0x00000000) + 0x30: + AT (0x30) + { + _load_LOADER_CONFIGRAM_start_base = .; + KEEP(Remap_LZ565/configramLZ.o(.data*)); + _load_LOADER_CONFIGRAM_end_base = .; + _load_LOADER_CONFIGRAM_FREQ_PARAM_start_base = .; + KEEP(Reset_560/configramFreqParam.o(.data*)); + _load_LOADER_CONFIGRAM_FREQ_PARAM_end_base = .; + } + .LOADER_CONFIGRAM2 (0xF07C0000|0x00000000) + 0x300: + AT (0x300) + { + KEEP(Reset_560/config_dram1_tbl.o(.rodata*)); + config_dram1_tbl_2_start_base = .; + KEEP(Reset_560/config_dram1_2_tbl.o(.rodata*)); + } + .LOADER_CORE2_ENTRY_PROGRAM (0xF07C0000|0x00000000) + 0x500: + AT (0x500) + { + _load_core2_entry_program_start_base = .; + KEEP(Reset_560/core2_entry.o(.text)); + _load_core2_entry_program_end_base = .; + } + .LOADER_REMAP (0xF07C0000|0x00000000) + 0x600: + AT (0x600) + { + _load_LOADER_REMAP_start_base = .; + Remap_LZ565/doremapLZ565.o(.text*); + _load_LOADER_REMAP_end_base = .; + _load_vector_exp_table_start_base = .; + KEEP(Reset_560/exp.o(.text*)); + _load_vector_exp_table_end_base = .; + KEEP(Reset_560/configDDR.o(.text*)); + KEEP(Reset_560/configDDR.o(.rodata*)); + KEEP(Driver/fuart.o(.text* .data* .rodata*)); + KEEP(Debug/debug.o (.text* .data* .bss*)); + KEEP(Common_exFAT/global.o (.text* .data* .bss* .rodata*)); + . = ALIGN(4); /* This is MUST. Ensure section size is word aligned. */ + } + + . = ALIGN(4); + .LOADER_EXEC ADDR(.LOADER_REMAP) + SIZEOF(.LOADER_REMAP) : + AT (LOADADDR(.LOADER_REMAP) + SIZEOF(.LOADER_REMAP)) + { + _loader_exec_start_base = .; + KEEP(Ctrl_Flow/main.o(.part1*)); + KEEP(Driver/rtc.o(.part1*)); + * (.part1) + _loader_exec_end_base = .; + } + _loader_exec_cpu_addr = LOADADDR(.LOADER_EXEC) + ADDR(.BOOT_EXEC); + _loader_exec_size = SIZEOF(.LOADER_EXEC); + + . = ALIGN(4); + .text 0x1000000: + AT (LOADADDR(.LOADER_EXEC) + SIZEOF(.LOADER_EXEC)) + { + _loader_exec_compres_start = .; + _internal_strg_param_start = .; + *(.text*) + _loader_exec_compres_end = .; + } + _loader_exec_compress_load_base = LOADADDR(.text); + _loader_exec_compress_load_cpu_addr = LOADADDR(.text) + ADDR(.BOOT_EXEC); + .ARM.exidx : + { + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + } + . = ALIGN(4); + .rodata : + { + *(.rodata*) + . = ALIGN(8); /* This is MUST. Ensure ro size is 2 word aligned. */ + } + .dram_text : + AT (LOADADDR(.rodata) + SIZEOF(.rodata)) + { + _loader_dram_text_start_base = .; + * (.dram_text) + } + _loader_dram_text_cpu_addr = LOADADDR(.dram_text) + ADDR(.BOOT_EXEC); + _loader_dram_text_size = SIZEOF(.dram_text); + .data : + AT (LOADADDR(.dram_text) + SIZEOF(.dram_text)) + { + _loader_data_start_base = .; + _load_general_var_base = .; + _image_general_var_base = .; + *(.data*) + _image_general_var_limit = .; + } + _loader_data_cpu_addr = LOADADDR(.data) + ADDR(.BOOT_EXEC); + _loader_data_size = SIZEOF(.data); + .dummy : { LONG (0x00000000) } + . = ALIGN(4); + .got : { *(.got) } + . = ALIGN(4); + .bss : { /* locate bss at DRAM end */ + _image_general_zi_zi_base = .; + *(.bss) + . = ALIGN(0x4000); + _ttb = .; + . = . + 0x4000; + . = ALIGN(0x400); + _ttb_lv2 = .; + . = . + 0x400; + } + .common : + { + __common_base = ABSOLUTE(.); + /* collect "small" un-initialized global data (mark "C" in sym file) */ + *(.scommon*) + /* collect "large" un-initialized global data (mark "B" in sym file) */ + *(COMMON) + __common_limit = ABSOLUTE(.); + } + . = ALIGN(64); + _image_general_zi_zi_limit = ABSOLUTE(.); + _load_load_reset_base = .; + _image_load_reset_base = .; + _image_load_reset_length = .; + _image_load_reset_zi_base = .; + _image_load_reset_zi_limit = .; + . = ALIGN(64); + .loader_heap : + { + _loader_heap_base = .; + . += 0xA0000 + 0x20000 + 0x80000; + } + . = ALIGN(64); + _stack_start = .; + +} diff --git a/loader/Project/Model/Src/prj_main.c b/loader/Project/Model/Src/prj_main.c index 342dbb886..15add37aa 100755 --- a/loader/Project/Model/Src/prj_main.c +++ b/loader/Project/Model/Src/prj_main.c @@ -36,9 +36,10 @@ /* S530*/ #elif (MODEL == MODEL_S530) #define GPIO_KEY_TEST S_GPIO_6 +#define GPIO_ISP_KEY_DET C_GPIO_4 #define GPIO_FASTBOOT_KEY GPIO_KEY_TEST #define GPIO_SPECIAL_KEY GPIO_KEY_TEST - +#define GPIO_SPECIAL_KEY2 GPIO_ISP_KEY_DET /* Unknown */ #else #error "Unknown Model" @@ -94,9 +95,23 @@ static BOOL prj_isSpecialKeyPressed(void) // Add the necessary code.. // if (gpio_getPin(P_GPIO_8) && gpio_getPin(P_GPIO_9)) { + /*if (!gpio_getPin(GPIO_SPECIAL_KEY)) { + debug_msg("GPIO_SPECIAL_KEY 0\r\n"); + }else{ + debug_msg("GPIO_SPECIAL_KEY 1\r\n"); + } + if((gpio_getPin(GPIO_SPECIAL_KEY2))){ + debug_msg("GPIO_SPECIAL_KEY2 1\r\n"); + }else{ + debug_msg("GPIO_SPECIAL_KEY2 0\r\n"); + }*/ + if (!gpio_getPin(GPIO_SPECIAL_KEY)) { return TRUE; - } else { + } + else if(!(gpio_getPin(GPIO_SPECIAL_KEY2))){ + return TRUE; + }else { return FALSE; } //return TRUE; @@ -163,7 +178,6 @@ _THUMB2 void prj_main(void) debug_msg("."); debug_msg(Dec2HexStr2Bytes((LoaderInternalInfo[1] >> 16) & 0xFF)); debug_msg("\r\n"); - // Print project layer info if((LoaderInternalInfo[6] & 0x100000) == 0x100000) { if(gpio_getPin((((LoaderInternalInfo[6]>>12)&0x7)*32) + ((LoaderInternalInfo[6]>>15)&0x1f))) { diff --git a/rtos/BSP/u-boot/include/configs/nvt-na51089-evb.h b/rtos/BSP/u-boot/include/configs/nvt-na51089-evb.h index 5e064da43..8b7654332 100755 --- a/rtos/BSP/u-boot/include/configs/nvt-na51089-evb.h +++ b/rtos/BSP/u-boot/include/configs/nvt-na51089-evb.h @@ -81,7 +81,7 @@ #define PWM_LED_ERASE 50 #define PWM_LED_PROGRAM 5 #else -#define NVT_LED_PIN P_GPIO(10) +#define NVT_LED_PIN DSI_GPIO(9) #define NVT_LED_ERASE_DURATION 30 #define NVT_LED_PROGRAM_DURATION 10 #endif diff --git a/rtos/code/application/source/cardv/Makefile b/rtos/code/application/source/cardv/Makefile index 9b0a2c2fb..2bc2b4a3d 100644 --- a/rtos/code/application/source/cardv/Makefile +++ b/rtos/code/application/source/cardv/Makefile @@ -408,7 +408,6 @@ SRC += \ ./SrcCode/Gx/GxPower/GxTime.c \ ./SrcCode/Gx/GxPower/GxPower.c \ ./SrcCode/Gx/GxPower/GxPower_cmd.c \ - ./SrcCode/Gx/GxPower/sf_battery.c \ ./SrcCode/Gx/GxPower/GxPowerVerInfo.c \ ./SrcCode/Gx/GxSound/sxsound/PlaySoundAPI.c \ ./SrcCode/Gx/GxSound/sxsound/PlaySoundTsk.c \ 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 7bddfee8a..23cdaeb52 100644 --- 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 @@ -25,6 +25,7 @@ #include "PrjInc.h" #if HUNTING_CAMERA_MCU == ENABLE #include +#include "sys_fastboot.h" #endif #define IRLED_CTRL_BY_PWM ENABLE//DISABLE// @@ -160,7 +161,6 @@ UINT32 DrvGPIO_GetPhotoMovieModeFromMonitor(void) //sf_mcu_power_on_para_get(SF_MCU_POWERON); //sf_mcu_wdg_set(5); //sf_mcu_reg_set(SF_MCU_CTRL_MODULE_PIR, 1); - switch(value) { case PWR_OFF: @@ -169,6 +169,8 @@ UINT32 DrvGPIO_GetPhotoMovieModeFromMonitor(void) case PWR_ON_SETUP: #if SF_IQ_TEST == DISABLE case PWR_ON_AUTO: + //fastboot_msg_en(ENABLE); + //Delay_DelayMs(300); case PWR_ON_SMS: case PWR_ON_DAILY_REPORT: case PWR_ON_GPRS_INIT://A @@ -319,7 +321,7 @@ void DrvGPIO_IRLed_Turn_Onoff(BOOL onoff) CHKPNT; //printf("%s:%d e\n", __FUNCTION__, __LINE__); } - else + else { //CHKPNT; pwm_pwm_disable(IRLED_PWMID); diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c index a672f9e64..80bce0167 100755 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c +++ b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.c @@ -19,7 +19,6 @@ #include "DrvExt.h" #include "IOCfg.h" #include "IOInit.h" - /////////////////////////////////////////////////////////////////////////////// #define __MODULE__ DxDrv #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER @@ -158,14 +157,14 @@ void Dx_InitIO(void) // Config IO for external device Dx_Open(Dx_GetObject(DX_CLASS_POWER_EXT)); MCUCtrl_Open(); #endif -gpio_setDir(GPIO_IR_LED_PWR, GPIO_DIR_OUTPUT); -gpio_clearPin(GPIO_IR_LED_PWR); + gpio_setDir(GPIO_IR_LED_PWR, GPIO_DIR_OUTPUT); + gpio_clearPin(GPIO_IR_LED_PWR); -gpio_setDir(GPIO_IRCUT_MEN1, GPIO_DIR_OUTPUT); -gpio_clearPin(GPIO_IRCUT_MEN1); + gpio_setDir(GPIO_IRCUT_MEN1, GPIO_DIR_OUTPUT); + gpio_clearPin(GPIO_IRCUT_MEN1); -gpio_setDir(GPIO_IRCUT_MEN2, GPIO_DIR_OUTPUT); -gpio_clearPin(GPIO_IRCUT_MEN2); + gpio_setDir(GPIO_IRCUT_MEN2, GPIO_DIR_OUTPUT); + gpio_clearPin(GPIO_IRCUT_MEN2); } diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/Source.mk b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/Source.mk index 88c2b4ea5..adcc3c34c 100755 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/Source.mk +++ b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/Source.mk @@ -11,7 +11,6 @@ DX_SRC = \ ./SrcCode/Dx/$(MODEL)/IOCfg.c \ ./SrcCode/Dx/$(MODEL)/DxUsb.c \ ./SrcCode/Dx/$(MODEL)/DxHunting.c \ - ./SrcCode/Dx/$(MODEL)/sf_led.c \ # ./SrcCode/Dx/$(MODEL)/DxCamera_Sensor.c \ # ./SrcCode/Dx/$(MODEL)/DxCfg.c diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/sf_led.c b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/sf_led.c deleted file mode 100755 index e08aede18..000000000 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/sf_led.c +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2009-2023 by SiFar Technology, Inc. - * - * This software is copyrighted by and is the property of SiFar - * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. - * This software may only be used in accordance with the corresponding - * license agreement. Any unauthorized use, duplication, distribution, - * or disclosure of this software is expressly forbidden. - * - * This Copyright notice MUST not be removed or modified without prior - * written consent of SiFar Technology, Inc.. - * - * SiFar Technology, Inc. reserves the right to modify this software without notice. - * - * Author: Payton - * Ver: 1.0.0 2023.01.29 - * Description: - * -**************************************************************************/ - -#include -#include -#include -#include "DxOutput.h" -#include "DxCfg.h" -#include "IOCfg.h" -#include "DxHunting.h" -#include "kwrap/type.h" -#include -#include "modelext_info.h" -#include "DrvExt.h" -#include "PrjInc.h" -#include - - -void sf_trigger_time_led_cb(UINT32 cnt) -{ - printf("[%s:%d] led\n", __FUNCTION__, __LINE__); - gpio_direction_output(GPIO_GREEN_LED, 1); - gpio_set_value(GPIO_GREEN_LED, cnt); -} - - - diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/include/sf_led.h b/rtos/code/application/source/cardv/SrcCode/Dx/include/sf_led.h deleted file mode 100755 index e18e6950a..000000000 --- a/rtos/code/application/source/cardv/SrcCode/Dx/include/sf_led.h +++ /dev/null @@ -1,26 +0,0 @@ -/************************************************************************** - * - * Copyright (c) 2009-2023 by SiFar Technology, Inc. - * - * This software is copyrighted by and is the property of SiFar - * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. - * This software may only be used in accordance with the corresponding - * license agreement. Any unauthorized use, duplication, distribution, - * or disclosure of this software is expressly forbidden. - * - * This Copyright notice MUST not be removed or modified without prior - * written consent of SiFar Technology, Inc.. - * - * SiFar Technology, Inc. reserves the right to modify this software without notice. - * - * Author: Payton - * Ver: 1.0.0 2023.01.29 - * Description: - * -**************************************************************************/ - - -void sf_trigger_time_led_cb(UINT32 cnt); -void sf_trigger_time_led_cb_init(void); - - 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 fd9837c32..4a552b353 100644 --- 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 DISABLE // disable boot msg for fast boot, but hard to debug +#define POWERON_FAST_BOOT_MSG ENABLE // 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 @@ -938,7 +938,7 @@ #define STOP_REC_BK DISABLE #define NMEDIAPLAY_FUNC DISABLE // switch SMediaPlay and NMediaPlay flow, use NMediaPlay when DISABLE to be set. #define HUNTING_CAMERA_MODEL ENABLE -#define HUNTING_CAMERA_SYS_PARTITION_NAME sys +#define HUNTING_CAMERA_SYS_PARTITION_NAME sys #define HUNTING_CAMERA_BOOT_LINUX ENABLE #define HUNTING_CAMERA_MCU ENABLE #define HUNTING_CAMERA_4G ENABLE @@ -954,7 +954,8 @@ #define HUNTING_MCU_UART ENABLE #define HUNTING_IR_LED_940 ENABLE #define SF_EXIF_MN_BUF_SIZE 256 -#define SF_BASE_VERSION "7MD4RCwD6T2" +#define SF_BASE_VERSION "7MD4RCwD6T4" +#define HW_S530 1 #define SF_TRIGGER_TIME_TEST DISABLE #define SF_IQ_TEST DISABLE 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 f73c7d3b6..7886aa314 100644 --- a/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c +++ b/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c @@ -86,6 +86,7 @@ #if HUNTING_CAMERA_MCU == ENABLE #include #include "sf_led.h" +#include "sf_battery.h" #endif //dis @@ -389,6 +390,13 @@ static void mcu_task(void) sf_mcu_wdg_set(5); sf_mcu_reg_set(SF_MCU_CTRL_MODULE_PIR, 1); + //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); + + sf_battery_thread_init(); + //vos_util_delay_ms(15); //if(sf_is_night_mode(1) !=TRUE) //{ diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c b/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c index 9c9a212b8..94918ec2d 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c @@ -22,7 +22,9 @@ #include #include #include "DxHunting.h" - +#if HUNTING_CAMERA_MCU == ENABLE +#include "sf_mcu.h" +#endif #define CFG_BOOTARG_EXTRA_MAX_LEN 0x100 /* for init.d script parsing by (dmesg | grep xxx) */ #define CFG_INDEP_RAMDISK ENABLE @@ -837,7 +839,11 @@ void linuxboot_set_extra_bootarg(char* bootarg) static int make_bootargs(LINUXTMP_PARTITION *p_linuxtmp, unsigned int bootts_begin) { //static char bootargs[] = "root=/dev/ram0 rootfstype=ramfs rdinit=/linuxrc bootts=568047,1720128 resume_addr=0x00007e88 user_debug=0xff"; - +#if HUNTING_CAMERA_MCU == ENABLE + char PowerOnModeStr[32] = {'\0'}; + snprintf(PowerOnModeStr, sizeof(PowerOnModeStr), "Mode=%d",sf_get_power_on_mode()); + linuxboot_set_extra_bootarg(PowerOnModeStr); +#endif p_linuxtmp->bootargs_addr = p_linuxtmp->tmp_curr; p_linuxtmp->bootargs_size = CFG_BOOTARG_MAX_LEN + CFG_BOOTARG_EXTRA_MAX_LEN; p_linuxtmp->tmp_curr += p_linuxtmp->bootargs_size; diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index a74a92b85..7d0cffb44 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -31,6 +31,7 @@ #include "flow_boot_linux.h" #include "DxHunting.h" #include "flow_preview.h" +#include #if defined(_UI_STYLE_LVGL_) #include "flow_lvgl.h" @@ -75,10 +76,10 @@ static DCF_HANDLE g_dcf_hdl = 0; static ID MOVIEFAST_FLG_ID = 0; static UINT32 g_moviefast_tsk_run = 1; static UINT32 g_moviefast_poweroff_tsk_run = 1; -static UINT32 g_MovieFast_InitCommonMemFinish=0; static THREAD_HANDLE g_moviefast_tsk_id = 0; static THREAD_HANDLE g_moviefast_power_off_tsk_id = 0; static BOOL g_bIsRecStatus = FALSE; +static VOS_TICK g_rec_start_tick = 0; //local function @@ -103,6 +104,27 @@ static void MovieFast_Close(void); rowrc.max_p_qp = 51; hd_videoenc_set(path_id, HD_VIDEOENC_PARAM_OUT_ROW_RC, &rowrc); } +static VOID MovieFast_Set_RecStartTick(VOS_TICK tick) +{ + g_rec_start_tick = tick; +} + +static BOOL MovieFast_Get_RecStartTick(VOS_TICK* tick) +{ + if(tick == NULL){ + DBG_ERR("tick can't be null!\n"); + return FALSE; + } + + if(g_rec_start_tick == 0){ + DBG_ERR("rec start tick is invalid!\n"); + return FALSE; + } + + *tick = g_rec_start_tick; + + return TRUE; +} static ER MovieFast_InstallID(void) { @@ -130,7 +152,7 @@ static THREAD_RETTYPE MovieFast_PowerOffTsk(void) while(g_moviefast_poweroff_tsk_run) { if(TRUE == flow_preview_get_stop_flag()){ - DBG_ERR("Stop!!!!!!!!!!!!!!!!!\n"); + DBG_WRN("detected stop signal, power off ...\n"); break; } @@ -181,6 +203,48 @@ static THREAD_RETTYPE MovieFast_CmdTsk(void) THREAD_RETURN(0); } +#if POWERON_BOOT_REPORT == ENABLE + +/******************************************************************** + * extern PhotoFast function + *********************************************************************/ +extern UINT32 PhotoFast_GetTriggerFrmCnt(VOID); +extern BOOL PhotoFast_GetTick(UINT32 cnt, VOS_TICK* tick); +extern void PhotoFast_TriggerFrm_Dump(void); + +static void MovieFast_PV_ChangeMode_Dump(void) +{ + VOS_TICK rec_start_tick; + + if(MovieFast_Get_RecStartTick(&rec_start_tick) == TRUE){ + + UINT32 cnt = PhotoFast_GetTriggerFrmCnt(); + VOS_TICK trig_tick; + + if(PhotoFast_GetTick(cnt, &trig_tick) == TRUE){ + + DBG_DUMP("\n\n**********************************************************\n" + " P + V Change mode: %lu ms\n" + "**********************************************************\n", + vos_perf_duration(trig_tick, rec_start_tick) / 1000 + ); + } + } +} + +static void MovieFast_PV_Info_Dump(void) +{ + + + /* report trigger speed */ + PhotoFast_TriggerFrm_Dump(); + + /* report P + V change mode speed */ + MovieFast_PV_ChangeMode_Dump(); +} + +#endif + static void MovieFast_ShutDown(void) { UINT8 mode = DrvGPIO_GetPhotoMovieModeFromMonitor(); @@ -201,8 +265,7 @@ static void MovieFast_ShutDown(void) vos_perf_list_dump(); if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){ - extern void PhotoFast_TriggerFrm_Dump(void); - PhotoFast_TriggerFrm_Dump(); + MovieFast_PV_Info_Dump(); } #endif @@ -232,8 +295,7 @@ static void MovieFast_ShutDown(void) vos_perf_list_dump(); if(mode == DX_HUNTING_MODE_PHOTO_MOVIE){ - extern void PhotoFast_TriggerFrm_Dump(void); - PhotoFast_TriggerFrm_Dump(); + MovieFast_PV_Info_Dump(); } #endif @@ -552,7 +614,6 @@ static void MovieFast_SetRecInfoByUISetting(void) } } - static void MovieFast_OnRecStart(void) { UINT32 i, mask; @@ -656,7 +717,6 @@ static void MovieFast_OnRecStart(void) { // start clone path first due to some functions (such as 2v1a need this procedure) if (clone_rec_mask & mask) { - vos_perf_list_mark("sie_vd", __LINE__, 5); ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_WRITE_BLKSIZE, 0x200000); ImageApp_MovieMulti_SetParam(gMovie_Clone_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_BUFRESSEC, uifile_buffer_reserved_sec); //ImageApp_MovieMulti_RecStart(gMovie_Clone_Info[i].rec_id); @@ -671,10 +731,7 @@ static void MovieFast_OnRecStart(void) } if (movie_rec_mask & mask) { - #if SF_TRIGGER_TIME_TEST == ENABLE && HUNTING_CAMERA_MCU == ENABLE - sf_trigger_time_led_cb(1); - #endif - vos_perf_list_mark("sie_vd", __LINE__, 6); + ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_WRITE_BLKSIZE, 0x200000); ImageApp_MovieMulti_SetParam(gMovie_Rec_Info[i].rec_id, MOVIEMULTI_PARAM_FILE_BUFRESSEC, uifile_buffer_reserved_sec); //ImageApp_MovieMulti_RecStart(gMovie_Rec_Info[i].rec_id); @@ -688,9 +745,17 @@ static void MovieFast_OnRecStart(void) #endif } + #if SF_TRIGGER_TIME_TEST == ENABLE && HUNTING_CAMERA_MCU == ENABLE + sf_trigger_time_led_cb(1); + #endif + + VOS_TICK rec_start_tick; + vos_perf_mark(&rec_start_tick); + MovieFast_Set_RecStartTick(rec_start_tick); + mask <<= 1; } - //nvt_cmdsys_runcmd("venc info"); + nvt_cmdsys_runcmd("venc info"); } static void MovieFast_OnRecStop(void) @@ -881,29 +946,32 @@ int MovieFast_GetWaterLogoSource(const UINT32 recWidth,WATERLOGO_BUFFER *waterSr THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg) { - if(fastboot_wait_done_timeout(BOOT_INIT_FILESYSOK, FASTBOOT_WAIT_FILESYS_TIMEOUT_MS) != E_OK){ - goto EXIT; + if(DrvGPIO_GetPhotoMovieModeFromMonitor() != DX_HUNTING_MODE_PHOTO_MOVIE ){ + + if(fastboot_wait_done_timeout(BOOT_INIT_FILESYSOK, FASTBOOT_WAIT_FILESYS_TIMEOUT_MS) != E_OK){ + goto EXIT; + } + + DCF_InstallID(); + + DCF_OPEN_PARM dcfParm = { + .Drive = 'A', + .WorkbuffAddr = mempool_dcf, + .WorkbuffSize = POOL_SIZE_DCF_BUFFER, + }; + g_dcf_hdl = DCF_Open(&dcfParm); + + DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FOLDER, TRUE); + DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FILE, TRUE); + DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_MP4|DCF_FILE_TYPE_MOV); + DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_WAV|DCF_FILE_TYPE_MPO); + DCF_SetDirFreeChars(DCF_DIR_NAME); + DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME); + DCF_ScanObj(); + + fastboot_set_done(BOOT_INIT_FILENAMINGOK); } - DCF_InstallID(); - - DCF_OPEN_PARM dcfParm = { - .Drive = 'A', - .WorkbuffAddr = mempool_dcf, - .WorkbuffSize = POOL_SIZE_DCF_BUFFER, - }; - g_dcf_hdl = DCF_Open(&dcfParm); - - DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FOLDER, TRUE); - DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FILE, TRUE); - DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_MP4|DCF_FILE_TYPE_MOV); - DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_WAV|DCF_FILE_TYPE_MPO); - DCF_SetDirFreeChars(DCF_DIR_NAME); - DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME); - DCF_ScanObj(); - - fastboot_set_done(BOOT_INIT_FILENAMINGOK); - EXIT: THREAD_RETURN(0); } @@ -927,21 +995,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) DBG_FUNC("\r\n"); Movie_CommPoolInit(); - g_MovieFast_InitCommonMemFinish = 1; -/* -#if (defined(_sen_os05a10_) || defined(_sen_imx335_)) - SysSetFlag(FL_MOVIE_SIZE, MOVIE_SIZE_FRONT_2560x1440P30); -#elif (defined(_sen_imx290_) || defined(_sen_imx291_)) - SysSetFlag(FL_MOVIE_SIZE, MOVIE_SIZE_FRONT_1920x1080P30); -#else - SysSetFlag(FL_MOVIE_SIZE, MOVIE_SIZE_FRONT_2560x1440P30); -#endif - - SysSetFlag(FL_MOVIE_TIMELAPSE_REC, MOVIE_TIMELAPSEREC_OFF); - SysSetFlag(FL_MovieAudioRec, MOVIE_AUD_REC_ON); - SysSetFlag(FL_MOVIE_CYCLIC_REC, MOVIE_CYCLICREC_1MIN); - */ MovieFast_SetRecInfoByUISetting(); Set_NIGHTMODE(0, 1); Set_AEMODE(0); @@ -1021,12 +1075,11 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PRARM_FILEDB_MAX_MUM, 5000); - MOVIEMULTI_IPL_SIZE_INFO ipl_size={{2560,1440},30}; + MOVIEMULTI_IPL_SIZE_INFO ipl_size={{2560,1440}, 30}; ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_USER_IMG_SIZE, (UINT32)&ipl_size); ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_FORCED_IMG_SIZE, MOVIE_IPL_SIZE_USER); - #if (ANR_FUNC == ENABLE) HD_AUDIOCAP_ANR audio_cfg_param = {0}; @@ -1039,9 +1092,10 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_AUD_ACAP_ANR, (UINT32)&audio_cfg_param); #endif + setet_preset_param(); + ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_FILE_USE_FILEDB, FALSE); ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PARAM_FILE_CB_CLOSED_FILE_INFO, TRUE); - setet_preset_param(); ImageApp_MovieMulti_Open(); for (i = 0; i < SENSOR_CAPS_COUNT; i++) { @@ -1067,8 +1121,6 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg) MovieFast_InstallID(); vos_util_delay_ms(132); - //Set_AEMODE(1); - //vos_util_delay_ms(500); if ((g_moviefast_power_off_tsk_id = vos_task_create(MovieFast_PowerOffTsk, 0, "MovieFastPwrTsk", PRI_MOVIEFAST_CMDTSK, STKSIZE_MOVIEFAST_CMDTSK)) == 0) { DBG_ERR("MovieFast_PowerOffTsk create failed.\r\n"); 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 3695fd40a..8f5953cf7 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -86,7 +86,7 @@ static MEM_RANGE g_photo_fast_fdb_pool = { static CHAR g_photo_fast_write_file_Path[NMC_TOTALFILEPATH_MAX_LEN] = {0}; static INT32 g_photo_fast_id_mapping[PHOTO_CAP_ID_MAX] = {-1,-1}; static PHOTO_FILENAME_CB *g_fpPhotoFastFileNameCB = NULL; -static DCF_HANDLE g_dcf_hdl = -1; +static DCF_HANDLE g_dcf_hdl = 0; static HD_PATH_ID g_video_enc_path[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; static UINT32 g_bVideoEncPathStart[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; static HD_VIDEOENC_BUFINFO g_enc_buf_info[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; @@ -724,12 +724,16 @@ INT32 PhotoFast_FileNaming_Open(void) INT32 PhotoFast_FileNaming_Close(void) { - if(g_dcf_hdl >= 0){ - DCF_Close(g_dcf_hdl); - g_dcf_hdl = -1; + if(DrvGPIO_GetPhotoMovieModeFromMonitor() != DX_HUNTING_MODE_PHOTO_MOVIE ){ + + if(g_dcf_hdl >= 0){ + DCF_Close(g_dcf_hdl); + g_dcf_hdl = -1; + } + + DCF_UnInstallID(); } - DCF_UnInstallID(); return 0; } @@ -870,7 +874,12 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId) #if HUNTING_CAMERA_MCU == ENABLE char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'}; - sprintf(tmp, "W%03ld%04ld.JPG", nextFolderID, nextFileID); + char str1[5] = { 0 }; + char str2[5] = { 0 }; + memcpy(str1, FilePath + 8, 3); + memcpy(str2, FilePath + 21, 4); + sprintf(tmp, "W%s%s.JPG", str1, str2); + //sprintf(tmp, "W%03ld%04ld.JPG", nextFolderID, nextFileID); strncpy(g_photo_fast_write_file_Path, tmp, sizeof(g_photo_fast_write_file_Path) - 1); DBG_IND("last send file:%s\r\n", tmp); #else 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 fcb88e503..df7c1ff20 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastCapDateImprint.c @@ -442,35 +442,34 @@ void PhotoFastCapDateImprint_UninitBuff(void) INT32 PhotoFastCapDateImprint_GenYuvData(HD_VIDEO_FRAME *pDstImg) { - HD_VIDEO_FRAME src_img; -// VF_GFX_COPY param_img = {0}, - VF_GFX_COPY param_text = {0}; + HD_VIDEO_FRAME src_img; +// VF_GFX_COPY param_img = {0}, + VF_GFX_COPY param_text = {0}; + UINT32 target_ofs_x, target_ofs_y; -// lv_user_font_conv(&stamp_img.draw_cfg, &stamp_img.mem_cfg); +// lv_user_font_conv(&stamp_img.draw_cfg, &stamp_img.mem_cfg); // -// lv_user_font_conv_cfg_to_hd_frame( -// &stamp_img.draw_cfg, -// &stamp_img.mem_cfg, -// stamp_img.buff_size.width, -// stamp_img.buff_size.height, -// &src_img -// ); +// lv_user_font_conv_cfg_to_hd_frame( +// &stamp_img.draw_cfg, +// &stamp_img.mem_cfg, +// stamp_img.buff_size.width, +// stamp_img.buff_size.height, +// &src_img +// ); // -// memset(¶m_img, 0, sizeof(param_img)); -// param_img.src_img = src_img; -// param_img.src_region.x = 0; -// param_img.src_region.y = 0; -// param_img.src_region.w = src_img.dim.w; -// param_img.src_region.h = src_img.dim.h; -// param_img.dst_img = *pDstImg; -// param_img.dst_pos.x = 0; -// param_img.dst_pos.y = 0; -// param_img.alpha = 255; -// param_img.colorkey = CKEY; -// param_img.engine = 0; -// vf_gfx_copy(¶m_img); - - printf("[%s:%d] s\n",__FUNCTION__,__LINE__); +// memset(¶m_img, 0, sizeof(param_img)); +// param_img.src_img = src_img; +// param_img.src_region.x = 0; +// param_img.src_region.y = 0; +// param_img.src_region.w = src_img.dim.w; +// param_img.src_region.h = src_img.dim.h; +// param_img.dst_img = *pDstImg; +// param_img.dst_pos.x = 0; +// param_img.dst_pos.y = 0; +// param_img.alpha = 255; +// param_img.colorkey = CKEY; +// param_img.engine = 0; +// vf_gfx_copy(¶m_img); /* select font by image width */ @@ -481,34 +480,59 @@ INT32 PhotoFastCapDateImprint_GenYuvData(HD_VIDEO_FRAME *pDstImg) stamp_text.draw_cfg.string.font = (lv_font_t *) lv_plugin_get_font(FONT)->font; #endif - stamp_text.draw_cfg.string.text = PhotoFast_InitStrBuf(); - - lv_user_font_conv_calc_buffer_size(&stamp_text.draw_cfg, &stamp_text.buff_size); - lv_user_font_conv(&stamp_text.draw_cfg, &stamp_text.mem_cfg); + stamp_text.draw_cfg.string.text = PhotoFast_InitStrBuf(); + + lv_user_font_conv_calc_buffer_size(&stamp_text.draw_cfg, &stamp_text.buff_size); + lv_user_font_conv(&stamp_text.draw_cfg, &stamp_text.mem_cfg); - lv_user_font_conv_cfg_to_hd_frame( - &stamp_text.draw_cfg, - &stamp_text.mem_cfg, - stamp_text.buff_size.width, - stamp_text.buff_size.height, - &src_img - ); + lv_user_font_conv_cfg_to_hd_frame( + &stamp_text.draw_cfg, + &stamp_text.mem_cfg, + stamp_text.buff_size.width, + stamp_text.buff_size.height, + &src_img + ); - memset(¶m_text, 0, sizeof(param_text)); - param_text.src_img = src_img; - param_text.src_region.x = 0; - param_text.src_region.y = 0; - param_text.src_region.w = src_img.dim.w; - param_text.src_region.h = src_img.dim.h; - param_text.dst_img = *pDstImg; - param_text.dst_pos.x = param_text.dst_img.dim.w - param_text.src_img.dim.w - (param_text.src_img.dim.h); - param_text.dst_pos.y = param_text.dst_img.dim.h - param_text.src_img.dim.h - (param_text.src_img.dim.h); + memset(¶m_text, 0, sizeof(param_text)); + param_text.src_img = src_img; + param_text.src_region.x = 0; + param_text.src_region.y = 0; + param_text.src_region.w = src_img.dim.w; + param_text.src_region.h = src_img.dim.h; + param_text.dst_img = *pDstImg; - param_text.alpha = 255; - param_text.colorkey = CKEY; - param_text.engine = 0; - vf_gfx_copy(¶m_text); - printf("[%s:%d] e\n",__FUNCTION__,__LINE__); + target_ofs_x = param_text.src_img.dim.w + param_text.src_img.dim.h; + target_ofs_y = param_text.src_img.dim.h + param_text.src_img.dim.h; + + /********************************************************** + * bounds checking + **********************************************************/ + if(param_text.dst_img.dim.w >= target_ofs_x){ + param_text.dst_pos.x = param_text.dst_img.dim.w - target_ofs_x; + } + else if(param_text.dst_img.dim.w >= param_text.src_img.dim.w){ + param_text.dst_pos.x = param_text.dst_img.dim.w - param_text.src_img.dim.w; + } + else{ + DBG_WRN("stamp width(%lu) exceed slice width\n", target_ofs_x); + return E_OK; + } + + if(param_text.dst_img.dim.h >= target_ofs_y){ + param_text.dst_pos.y = param_text.dst_img.dim.h - target_ofs_y; + } + else if(param_text.dst_img.dim.h >= param_text.src_img.dim.h){ + param_text.dst_pos.y = param_text.dst_img.dim.h - param_text.src_img.dim.h; + } + else{ + DBG_WRN("stamp height + padding (%lu) exceed slice height\n", target_ofs_y); + return E_OK; + } + + param_text.alpha = 255; + param_text.colorkey = CKEY; + param_text.engine = 0; + vf_gfx_copy(¶m_text); return E_OK; } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c index 8b2e751b4..0b5e2b604 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c @@ -27,6 +27,7 @@ * independent thumbnail *********************************************************************************/ +#define PHOTOFAST_FAST_CLOSE 1 #define PHOTOFAST_SLICE_ENC_DBG_DUMP 0 #define PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV 0 @@ -486,7 +487,11 @@ static INT32 PhotoFast_SliceEncode_Alloc_Buffer(PhotoFast_MEM_Info* info, char* void *va_ptr; HD_COMMON_MEM_DDR_ID ddr_id = DDR_ID0; +#if PHOTOFAST_FAST_CLOSE + if ((ret = hd_common_mem_alloc("NVTMPP_TEMP", &info->pa, (void **)&va_ptr, info->blk_size, ddr_id)) != HD_OK) { +#else if ((ret = hd_common_mem_alloc(name, &info->pa, (void **)&va_ptr, info->blk_size, ddr_id)) != HD_OK) { +#endif DBG_ERR("hd_common_mem_alloc failed(%d)\r\n", ret); return E_SYS; } @@ -1726,10 +1731,8 @@ typedef struct { lfqueue_t* queue23; /* shared with CB2 */ } PhotoFast_SliceEncode_CB3_Param; -//static PhotoFast_SliceEncode_Task_Param task1_param = {0}; static PhotoFast_SliceEncode_Task_Param task2_param = {0}; static PhotoFast_SliceEncode_Task_Param task3_param = {0}; -//static PhotoFast_SliceEncode_CB1_Param cb1_param = {0}; static PhotoFast_SliceEncode_CB2_Param cb2_param = {0}; static PhotoFast_SliceEncode_CB3_Param cb3_param = {0}; static lfqueue_t queue12 = {0}; @@ -2060,7 +2063,6 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) INT32 ret = E_OK; PhotoFast_SliceEncode_CB3_Param* param = NULL; PhotoFast_SliceEncode_Queue23_Param* queue_ele_in = NULL; -// PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB; if(!user_data){ DBG_ERR("user_data can't be null!\n"); @@ -2121,7 +2123,7 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); #endif - DBG_DUMP("PHOTO THUMB %s\n", tmp); + DBG_IND("PHOTO THUMB %s\n", tmp); FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE); @@ -2133,9 +2135,8 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) snprintf(tmp, sizeof(tmp), "%s/%s", SF_SEND_LIST_DIR, file_path); /* DCF 8.3 naming rule */ snprintf(tmp2, sizeof(tmp2), "%s", file_path); /* DCF 8.3 naming rule */ sf_file_thumb_cfg_fill(tmp, tmp2, queue_ele_in->jpg_thumb_size, SF_FILE_TYPE_PIC_SMALL); - DBG_DUMP("PHOTO THUMB %s \n %s\n %s\n", tmp, tmp2,file_path); - - printf("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,queue_ele_in->jpg_thumb_size,tmp2,tmp); + DBG_IND("PHOTO THUMB %s \n %s\n %s\n", tmp, tmp2,file_path); + DBG_IND("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,queue_ele_in->jpg_thumb_size,tmp2,tmp); #endif } @@ -2212,23 +2213,32 @@ VOID PhotoFast_SliceEncode2_Close(VOID) DBG_DUMP("PhotoFast_SliceEncode2_Close\n"); /* stop cmd */ -// set_flg(task1_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_STOP); set_flg(task2_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_STOP); + +#if !PHOTOFAST_FAST_CLOSE set_flg(task3_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_STOP); +#endif /* check stopped */ -// wai_flg(&flag, task1_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STOPPED, TWF_ORW); wai_flg(&flag, task2_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STOPPED, TWF_ORW); + +#if !PHOTOFAST_FAST_CLOSE wai_flg(&flag, task3_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STOPPED, TWF_ORW); +#endif DBG_DUMP("slice encode finished\n"); lfqueue_destroy(&queue12); - lfqueue_destroy(&queue23); -// PhotoFast_SliceEncode_Uninit_Flag(&task1_param.flag_id); +#if !PHOTOFAST_FAST_CLOSE + lfqueue_destroy(&queue23); +#endif + PhotoFast_SliceEncode_Uninit_Flag(&task2_param.flag_id); + +#if !PHOTOFAST_FAST_CLOSE PhotoFast_SliceEncode_Uninit_Flag(&task3_param.flag_id); +#endif } INT32 PhotoFast_SliceEncode2_Open( @@ -2249,40 +2259,6 @@ INT32 PhotoFast_SliceEncode2_Open( goto EXIT; } - /*************************************************************************************** - * task1 - ***************************************************************************************/ - -// memset(&task1_param, 0, sizeof(PhotoFast_SliceEncode_Task_Param)); -// memset(&cb1_param, 0, sizeof(PhotoFast_SliceEncode_CB1_Param)); -// -// -// if(PhotoFast_SliceEncode_Init_Flag(&(task1_param.flag_id), "slice_enc_flag1") != E_OK){ -// goto EXIT; -// } -// -// task1_param.callback = PhotoFast_SliceEncode_CB1; -// task1_param.user_data = &cb1_param; -// task1_param.run = 0; -// task1_param.is_running = 0; -// task1_param.task_id = vos_task_create(_PhotoFast_SliceEncode_Worker, &task1_param, "slice_enc_tsk1", 9, 2048); -// if(!task1_param.task_id){ -// DBG_ERR("create task1 failed!\n"); -// ret = E_SYS; -// goto EXIT; -// } -// -// cb1_param.max_cnt = max_cnt; -// cb1_param.cnt = 0; -// cb1_param.queue12 = &queue12; -// -// cb1_param.period = 1000 / max_cnt; /* average ms in one second */ -//// cb1_param.period = 1000; -// -// DBG_DUMP("resume task1\n"); -// task1_param.run = 1; -// vos_task_resume(task1_param.task_id); - /*************************************************************************************** * task2 ***************************************************************************************/ @@ -2339,18 +2315,15 @@ INT32 PhotoFast_SliceEncode2_Open( cb3_param.max_cnt = max_cnt; cb3_param.cnt = 0; cb3_param.queue23 = &queue23; - DBG_DUMP("resume task3\n"); task3_param.run = 1; vos_task_resume(task3_param.task_id); /* start cmd */ -// set_flg(task1_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_START); set_flg(task2_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_START); set_flg(task3_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_CMD_START); /* check started */ -// wai_flg(&flag, task1_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STARTED, TWF_ORW); wai_flg(&flag, task2_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STARTED, TWF_ORW); wai_flg(&flag, task3_param.flag_id, FLG_PHOTO_FAST_SLICE_ENC_STA_STARTED, TWF_ORW); 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 a1a32be0d..e5fdb479a 100644 --- 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 @@ -778,6 +778,7 @@ enum _PHOTO_SIZE { #if PHOTO_PREVIEW_SLICE_ENC_FUNC || POWERON_FAST_SLICE_ENC PHOTO_SIZE_40M, #endif + PHOTO_SIZE_32M, PHOTO_SIZE_24M, PHOTO_SIZE_16M, PHOTO_SIZE_12M, diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c index 952fc588f..42ddd8609 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIMovieMapping.c @@ -275,7 +275,7 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = { [MOVIE_SIZE_1920x1080P25] = { {1920, 1080, 25, 104857/*262144 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1, 3, 36, 8, -8, 0}, - {1, 4, 25, 104857/*262144 2M = 2*1024*1024/8 */, 25, 26, 15, 50, 26, 15, 50, 20, 1, 8, 4}, + {1, 4, 25, 104857/*262144 2M = 2*1024*1024/8 */, 125, 26, 15, 50, 26, 15, 50, 20, 1, 8, 4}, }, [MOVIE_SIZE_1280x720P25] = { diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c index dfe0be4a8..e5388cbeb 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIPhotoMapping.c @@ -33,6 +33,7 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = { #if PHOTO_PREVIEW_SLICE_ENC_FUNC || POWERON_FAST_SLICE_ENC {7552, 4248, IMAGERATIO_4_3, "40M"}, /* 40M */ #endif + {6528, 4896, IMAGERATIO_4_3, "32M"}, /* 32M */ {5632, 4224, IMAGERATIO_4_3, "24M"}, //16M {4608, 3456, IMAGERATIO_4_3, "16M"}, //16M {4032, 3024, IMAGERATIO_4_3, "12M"}, //12M diff --git a/rtos/code/application/source/cardv/SrcCode/Gx/include/sf_battery.h b/rtos/code/driver/na51089/include/sf_battery.h old mode 100755 new mode 100644 similarity index 69% rename from rtos/code/application/source/cardv/SrcCode/Gx/include/sf_battery.h rename to rtos/code/driver/na51089/include/sf_battery.h index 1e87a3303..11cd9b50c --- a/rtos/code/application/source/cardv/SrcCode/Gx/include/sf_battery.h +++ b/rtos/code/driver/na51089/include/sf_battery.h @@ -5,6 +5,12 @@ typedef signed int SINT32; +typedef enum { + SF_POWER_TYPE_DC = (unsigned char)0x01, + SF_POWER_TYPE_LI_POLYER, + SF_POWER_TYPE_AA +} SF_POWERTYPE_E; + UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 adcVal); UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 volt); UINT32 sf_get_max_value(UINT32 *_ValueList); @@ -19,6 +25,12 @@ 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); +UINT8 sf_battery_type_get(void); +BOOL sf_battery_check_init(void); +void sf_set_need_check_first(void); +BOOL sf_is_enough_power_to_update(void); +BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode); #endif diff --git a/rtos/code/driver/na51089/include/sf_led.h b/rtos/code/driver/na51089/include/sf_led.h new file mode 100755 index 000000000..76aaed83f --- /dev/null +++ b/rtos/code/driver/na51089/include/sf_led.h @@ -0,0 +1,118 @@ +/************************************************************************** + * + * Copyright (c) 2009-2023 by SiFar Technology, Inc. + * + * This software is copyrighted by and is the property of SiFar + * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. + * This software may only be used in accordance with the corresponding + * license agreement. Any unauthorized use, duplication, distribution, + * or disclosure of this software is expressly forbidden. + * + * This Copyright notice MUST not be removed or modified without prior + * written consent of SiFar Technology, Inc.. + * + * SiFar Technology, Inc. reserves the right to modify this software without notice. + * + * Author: Payton + * Ver: 1.0.0 2023.01.29 + * Description: + * +**************************************************************************/ +#include "UIInfo/UIInfo.h" + +void sf_trigger_time_led_cb(UINT32 cnt); +void sf_trigger_time_led_cb_init(void); + + + +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; + +typedef enum Ledstate_e +{ + SF_LED_STATE_OFF, + SF_LED_STATE_ON, + SF_LED_STATE_SLOW_FLASHING,/*0.5s*/ + SF_LED_STATE_FLASHING, /*1s*/ +}Ledstate_t; + +typedef enum LedSysState_e +{ + SF_LED_SYS_STATE_ERROR, + SF_LED_SYS_STATE_NORMAL, + SF_LED_SYS_STATE_UPDATE, + SF_LED_SYS_STATE_SENDING, + SF_LED_SYS_STATE_SEND_FAIL, + SF_LED_SYS_STATE_SEND_SUCCESS, + SF_LED_SYS_STATE_SD_NORMAL,/*6*/ + SF_LED_SYS_STATE_SD_ERROR, + SF_LED_SYS_STATE_SD_FULL, + 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,/*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,/*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,/*26*/ + SF_LED_SYS_STATE_SIM_ERROR, + SF_LED_SYS_STATE_SERVER_FAIL, + SF_LED_SYS_STATE_DEBUG_ON, + SF_LED_SYS_STATE_DEBUG_OFF, + SF_LED_SYS_STATE_RESET, + SF_LED_SYS_STATE_USB_IN, + 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,/*36*/ + SF_LED_SYS_STATE_PIR_NOT_DETECT, + SF_LED_SYS_STATE_BAT_0_SLOW, +}LedSysState_t; + +typedef struct LedInfo_s +{ + LedId_t ledId; + Ledstate_t ledstate; + UINT16 times; + UINT32 gpioNum; +}LedInfo_t; + + + +void sf_led_init(void); +void sf_led_go_to_pir(BOOL mode); +UINT8 sf_led_set(LedId_t ledId, Ledstate_t ledstate); +Ledstate_t sf_led_get(LedId_t ledId); +void sf_sys_status_led_set(LedSysState_t ledSysStateId); +void sf_trigger_time_led_cb(UINT32 cnt); +void sf_led_stop(void); \ No newline at end of file diff --git a/rtos/code/driver/na51089/source/mcu/Makefile b/rtos/code/driver/na51089/source/mcu/Makefile index 85a72425b..fec2f225c 100755 --- a/rtos/code/driver/na51089/source/mcu/Makefile +++ b/rtos/code/driver/na51089/source/mcu/Makefile @@ -1,3 +1,5 @@ +include $(NVT_PRJCFG_MODEL_CFG) + MODULE_NAME = sifar # DIRs VOS_DRIVER_DIR = $(NVT_VOS_DIR)/drivers @@ -28,7 +30,22 @@ EXTRA_INCLUDE += -I$(VOS_INC_PATH) \ -I$(INCLUDE_DIR) \ -I$(INCLUDE_DIR) \ -I$(CARDV_SOURCE_DIR)/Gx/include \ + -I$(CARDV_SOURCE_DIR)/FastFlow \ -I$(CARDV_SOURCE_LVGL_SPORTCAM_DIR) \ + -I$(APP_DIR)/source/cardv/SrcCode \ + -I$(APP_DIR)/source/cardv/SrcCode/Startup \ + -I$(APP_DIR)/source/cardv/SrcCode/System \ + -I$(APP_DIR)/source/cardv/SrcCode/Dx/include \ + -I$(APP_DIR)/source/cardv/SrcCode/Gx/include \ + -I$(APP_DIR)/source/cardv/SrcCode/Compatible \ + -I$(APP_DIR)/source/cardv/SrcCode/Dx/$(MODEL)\ + -I$(NVT_HDAL_DIR)/include \ + -I$(NVT_HDAL_DIR)/drivers/k_flow/include \ + -I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \ + -I$(NVT_HDAL_DIR)/vendor/media/include \ + -I$(NVT_HDAL_DIR)/vendor/common/include \ + -I$(NVT_HDAL_DIR)/vendor/isp/include \ + -I$(NVT_HDAL_DIR)/vendor/isp/drivers/include \ -I$(VOS_KWRAP_INC_PATH) .PHONY: modules modules_install clean @@ -91,6 +108,8 @@ SRC = \ sf_i2c_driver.c \ sf_sd_common.c \ sf_commu_mcu.c \ + sf_led.c \ + sf_battery.c \ sf_mcu.c copy = if [ ! -z "$(1)" -a "$(1)" != " " ]; then cp -avf $(1) $(2); fi diff --git a/rtos/code/driver/na51089/source/mcu/sf_battery.c b/rtos/code/driver/na51089/source/mcu/sf_battery.c new file mode 100644 index 000000000..843cdc29c --- /dev/null +++ b/rtos/code/driver/na51089/source/mcu/sf_battery.c @@ -0,0 +1,1274 @@ +/************************************************************************** + * + * Copyright (c) 2009-2018 by SiFar Technology, Inc. + * + * This software is copyrighted by and is the property of SiFar + * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. + * This software may only be used in accordance with the corresponding + * license agreement. Any unauthorized use, duplication, distribution, + * or disclosure of this software is expressly forbidden. + * + * This Copyright notice MUST not be removed or modified without prior + * written consent of SiFar Technology, Inc.. + * + * SiFar Technology, Inc. reserves the right to modify this software without notice. + * + * Author: Payton + * Ver: 1.0.0 2023.02.14 + * Description: mcu code + * +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include "PrjInc.h" +#include "IOCfg.h" +#include "DxHunting.h" +#include "sf_led.h" +#include "flow_preview.h" + +/* +#include "NvtUser/NvtUser.h" +#include "AppControl/AppControl.h" +#include "comm/hwclock.h" +#include +#include +#include +#include "UIInfo/UIInfo.h" +#include "IOCfg.h" +*/ + +#if HUNTING_CAMERA_MCU == ENABLE + +UINT32 _DcVoltageVal = 0; +UINT32 _LiPolymerVoltageVal = 0; /*4.0P no use*/ +UINT32 _BatVoltageVal = 45; +UINT8 IsNightLedOn = 0; +UINT32 IsPowerDcIn = 1; +UINT32 BatVoltageVal = 45; +SF_BatteryLevel_e sf_LatestBattLevel = SF_BATT_LEVEL_0; +UINT8 needCheckFirst = TRUE; +UINT32 DcVoltageVal = 0; +UINT32 LiPolymerVoltageVal = 0; /*4.0P no use*/ +UINT32 batTempLevel = 0xff; + +#define SF_READ_BAT_MAX 10 +ID FLG_ID_SF_BSTTERY = 0; +#define SF_DC_IN_VOLATAGE 70 +#define SF_LI_IN_VOLATAGE 99 + +/************************************************* + Function: sf_battery_voltage_convert + Description: battery voltage convert + Input: resistanceGnd:Grounding terminal resistance,resistanceVin:Input resistance,adcVal:adc val + Output: N/A + Return: Volt * 10 + Others: N/A +*************************************************/ +UINT32 sf_battery_voltage_convert(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 adcVal) +{ + UINT32 volt = 0; + + /*511 * (detected voltage) / (SARADC reference voltage) + DC input voltage x resistanceGnd/(resistanceGnd + resistanceVin) = detected voltage, + SARADC reference voltage:1.8V + */ + + volt = 25 * adcVal * (resistanceGnd + resistanceVin) / resistanceGnd / 512; + + return volt; +} + +UINT32 sf_battery_convert_to_adc(UINT32 resistanceGnd, UINT32 resistanceVin, UINT32 volt) +{ + UINT32 adcVal = 0; + + adcVal = volt * resistanceGnd * 512 / 25 / (resistanceGnd + resistanceVin); + + return adcVal; +} + +UINT32 sf_get_max_value(UINT32 *_ValueList) +{ + UINT8 readBatCnt = 0; + UINT32 MaxValue = 0; + + for(readBatCnt = 0; readBatCnt < 5; readBatCnt++) /*get max value of 5 times.*/ + { + MaxValue = (MaxValue > _ValueList[readBatCnt]? MaxValue : _ValueList[readBatCnt]); + } + + return MaxValue; +} + +void sf_adc_init(void) +{ + + if (adc_open(ADC_CH_VOLDET_BATTERY) != 0) { + printf("sf_adc_init Can't open ADC channel for battery voltage detection\r\n"); + return; + } + + //650 Range is 250K Hz ~ 2M Hz + adc_setConfig(ADC_CONFIG_ID_OCLK_FREQ, 250000); //250K Hz + + //battery voltage detection + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_SAMPLE_FREQ, 10000); //10K Hz, sample once about 100 us for CONTINUOUS mode + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_SAMPLE_MODE, (VOLDET_ADC_MODE) ? ADC_CH_SAMPLEMODE_CONTINUOUS : ADC_CH_SAMPLEMODE_ONESHOT); + adc_setChConfig(ADC_CH_VOLDET_BATTERY, ADC_CH_CONFIG_ID_INTEN, FALSE); + + // Enable adc control logic + adc_setEnable(TRUE); + +} +/************************************************* + Function: sf_battery_adc_value_get_once + Description: get battery adc only once + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A +*************************************************/ +UINT32 sf_adc_value_get(UINT32 mux, UINT32 *pval) +{ + static UINT8 getAdcFlg = 0; + static UINT8 outputflag = 1; + *pval = 0; + + if(getAdcFlg) + { + return FAIL; + } + getAdcFlg = 1; + + if(outputflag) + { + outputflag = 0; + gpio_direction_output(P_GPIO_0,0); + gpio_direction_output(P_GPIO_1,0); + vos_util_delay_ms(1); + } + + if(SF_ADC_BATT == mux)//bat_det + { + //B:0 A:0 + gpio_set_value(P_GPIO_0, 0);//adc_muxa + gpio_set_value(P_GPIO_1, 0);//adc_muxb + } + else if(SF_ADC_LI == mux)//v-li_det + { + //B:0 A:1 + gpio_set_value(P_GPIO_0, 1);//adc_muxa + gpio_set_value(P_GPIO_1, 0);//adc_muxb + + } + else if(SF_ADC_DC == mux)//dc12_det + { + //B:1 A:0 + gpio_set_value(P_GPIO_0, 0);//adc_muxa + gpio_set_value(P_GPIO_1, 1);//adc_muxb + } + else if(SF_ADC_TEMP == mux)//temp_det + { + //B:1 A:1 + gpio_set_value(P_GPIO_0, 1);//adc_muxa + gpio_set_value(P_GPIO_1, 1);//adc_muxb + } + + //vos_util_delay_us(500); + vos_util_delay_ms(1); + + *pval = adc_readData(0); + //printf("[%s:%d] *pval:%d\n", __FUNCTION__, __LINE__,*pval); + getAdcFlg = 0; + return SUCCESS; + +} + +/************************************************* + Function: sf_battery_adc_value_get_once + Description: get battery adc only once + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A +*************************************************/ +UINT32 sf_battery_adc_value_get_once(void) +{ + UINT32 batAdc = 0; + static UINT8 getBatAdcFlg = 0; + + if(getBatAdcFlg) + { + return SUCCESS; + } + + getBatAdcFlg = 1; + + if(sf_adc_value_get(SF_ADC_DC, &batAdc) == SUCCESS) + { + _DcVoltageVal = sf_battery_voltage_convert(10, 100, batAdc); + + if(sf_adc_value_get(SF_ADC_LI, &batAdc) == SUCCESS) + { + _LiPolymerVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); + + if(_LiPolymerVoltageVal > SF_LI_IN_VOLATAGE) + { + getBatAdcFlg = 0; + return SUCCESS; + } + else + { + if(sf_adc_value_get(SF_ADC_BATT, &batAdc) == SUCCESS) + { + _BatVoltageVal = sf_battery_voltage_convert(15, 100, batAdc); + //_BatVoltageVal += 1; + + getBatAdcFlg = 0; + return SUCCESS; + } + else + { + getBatAdcFlg = 0; + printf("%s:%d [ERR] failed !!!\n", __FUNCTION__, __LINE__); + return FAIL; + } + } + } + else + { + getBatAdcFlg = 0; + printf("%s:%d [ERR] failed !!!\n", __FUNCTION__, __LINE__); + return FAIL; + } + + + } + else + { + getBatAdcFlg = 0; + printf("%s:%d [ERR] failed !!!\n", __FUNCTION__, __LINE__); + return FAIL; + } +} + +#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. + 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; + + if(sf_get_night_led_flag()) + { + return; + } + + if(IsPowerDcIn == 0) + { + batteryVal = BatVoltageVal; + + if(SysGetFlag(BatteryType) == SF_BATT_ALKALINE) + { + if(batteryVal >= 106) + { + batteryLevel = SF_BATT_LEVEL_5; + } + else if(batteryVal >= 102) + { + batteryLevel = SF_BATT_LEVEL_4; + } + else if(batteryVal >= 97) + { + batteryLevel = SF_BATT_LEVEL_3; + } + else if(batteryVal >= 90) + { + batteryLevel = SF_BATT_LEVEL_2; + } + else if(batteryVal >= 75) + { + batteryLevel = SF_BATT_LEVEL_1; + } + else + { + batteryLevel = SF_BATT_LEVEL_0; + } + } + else if(SysGetFlag(BatteryType) == SF_BATT_NI_MH) + { + if(batteryVal >= 103) + { + batteryLevel = SF_BATT_LEVEL_5; + } + else if(batteryVal >= 101) + { + batteryLevel = SF_BATT_LEVEL_4; + } + else if(batteryVal >= 100) + { + batteryLevel = SF_BATT_LEVEL_3; + } + else if(batteryVal >= 97) + { + batteryLevel = SF_BATT_LEVEL_2; + } + else if(batteryVal >= 75) + { + batteryLevel = SF_BATT_LEVEL_1; + } + else + { + batteryLevel = SF_BATT_LEVEL_0; + } + } + else if(SysGetFlag(BatteryType) == SF_BATT_LI) //5.8CG Li Battery + { + if(batteryVal >= 122) + { + batteryLevel = SF_BATT_LEVEL_5; + } + else if(batteryVal >= 120) + { + batteryLevel = SF_BATT_LEVEL_4; + } + else if(batteryVal >= 117) + { + batteryLevel = SF_BATT_LEVEL_3; + } + else if(batteryVal >= 110) + { + batteryLevel = SF_BATT_LEVEL_2; + } + else if(batteryVal >= 80) + { + batteryLevel = SF_BATT_LEVEL_1; + } + else + { + batteryLevel = SF_BATT_LEVEL_0; + } + } + } + else + { + batteryLevel = SF_BATT_LEVEL_5; + } + + sf_LatestBattLevel = batteryLevel; + + if(SysGetFlag(BatteryLogSwitch)) + { + printf("battery levle=%d\n", sf_LatestBattLevel); + } +} +#endif +/************************************************* + Function: sf_check_low_battery + Description: check is low battery in auto mode. + Output: N/A + Return: TRUE/FALSE + Others: N/A +*************************************************/ +BOOL sf_check_low_battery(void) +{ + UINT8 lowCompareVal = 0; + BOOL ret = FALSE; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + + if(sf_is_usb_flag()) + { + return FALSE; + } + + sf_battery_level_update(); + + if(sf_get_night_led_flag()) + { + if(puiPara->BatteryType == SF_BATT_ALKALINE) + { + lowCompareVal = 69; + } + else if(puiPara->BatteryType == SF_BATT_NI_MH) + { + lowCompareVal = 71; + } + } + else + { + if(puiPara->BatteryType == SF_BATT_ALKALINE) + { + lowCompareVal = 80; + } + else if(puiPara->BatteryType == SF_BATT_NI_MH) + { + lowCompareVal = 80; + } + else + { + lowCompareVal = 80; + } + } + + if((IsPowerDcIn == 0) && (BatVoltageVal < lowCompareVal)) + { + ret = TRUE; + } + else + { + ret = FALSE; + } + + return ret; +} + +/****************************************************** + Function: sf_battery_adc_value_get + Description: auto mode:take the maximum of 5 times; + manual mode:take the average of 10 times; + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A + *******************************************************/ +signed int sf_battery_adc_value_get(void) +{ + UINT8 readBatCnt = 0; + + UINT32 dcTemp = 0; + UINT32 batTemp = 0; + UINT32 dcValueList[12] = { 0 }; + UINT32 batValueList[12] = { 0 }; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + + SINT32 ret = FAIL; + + if((sf_get_mode_flag() == 0) || (needCheckFirst == TRUE)) + { + //printf("[%s:%d]ConfigureModeFlag=%d,needCheckFirst=%d\n",__FUNCTION__,__LINE__,sf_get_mode_flag(),needCheckFirst); + needCheckFirst = FALSE; + + for(readBatCnt = 0; readBatCnt < 5;) //get max value of 5 times. + { + if(sf_battery_adc_value_get_once() == SUCCESS) + { + dcValueList[readBatCnt] = _DcVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]DC ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(10, 100, dcValueList[readBatCnt]), + dcValueList[readBatCnt], dcValueList[readBatCnt] / 10, dcValueList[readBatCnt] % 10); + } + + if(_LiPolymerVoltageVal) + { + batValueList[readBatCnt] = _LiPolymerVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]Li Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(15, 100, batValueList[readBatCnt]), + batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); + } + } + else + { + batValueList[readBatCnt] = _BatVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]Other Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(15, 100, batValueList[readBatCnt]), + batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); + } + } + + //appTimeDelayMs(50); + readBatCnt++; + } + } + + DcVoltageVal = sf_get_max_value(dcValueList); + + if(_LiPolymerVoltageVal) + { + LiPolymerVoltageVal = sf_get_max_value(batValueList); + BatVoltageVal = 0; + } + else + { + BatVoltageVal = sf_get_max_value(batValueList); + LiPolymerVoltageVal = 0; + } + + if(DcVoltageVal >= SF_DC_IN_VOLATAGE) + { + IsPowerDcIn = 1; + } + else + { + IsPowerDcIn = 0; + } + + //if(puiPara->BatteryLogSwitch) + { + printf("\n[max]DC,After Convert:(%lu.%luV),Is Dc In=%s\n", DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No"); + + if(LiPolymerVoltageVal) + { + printf("[max]Li Battery,After Convert:(%lu.%luV)\n\n", LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10); + } + else + { + printf("[max]Other Battery,After Convert:(%lu.%luV)\n\n", BatVoltageVal / 10, BatVoltageVal % 10); + } + } + + ret = SUCCESS; + } + else + { + for(readBatCnt = 0; readBatCnt < 10;) //get average value of 10 times. + { + if(sf_battery_adc_value_get_once() == SUCCESS) + { + dcValueList[readBatCnt] = _DcVoltageVal; + + if(_LiPolymerVoltageVal) + { + batValueList[readBatCnt] = _LiPolymerVoltageVal; + } + else + { + batValueList[readBatCnt] = _BatVoltageVal; + } + + dcTemp += dcValueList[readBatCnt]; + batTemp += batValueList[readBatCnt]; + + readBatCnt++; + vos_util_delay_ms(100); + + if(readBatCnt >= SF_READ_BAT_MAX) + { + _DcVoltageVal = dcTemp / SF_READ_BAT_MAX; + + if(_LiPolymerVoltageVal) + { + _LiPolymerVoltageVal = batTemp / SF_READ_BAT_MAX; + } + else + { + _BatVoltageVal = batTemp / SF_READ_BAT_MAX; + } + } + } + } + + ret = SUCCESS; + } + + return ret; +} + +/************************************************* + Function: sf_battery_level_polling + Description: polling battery level + Input: N/A + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +void sf_battery_level_polling(void) +{ + UINT16 readBatCnt = 0; + UINT32 dcTemp = 0; + UINT32 batTemp = 0; + UINT32 dcValueList[12] = { 0 }; + UINT32 batValueList[12] = { 0 }; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + static UINT32 prePowerDcStatus = 0; + + //signed int ret = FALSE; + + static UINT32 battEmpty = 0; + + for(readBatCnt = 0; readBatCnt < 10;) //get average value of 10 times. + { + if(sf_battery_adc_value_get() == SUCCESS) + { + dcValueList[readBatCnt] = _DcVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]DC ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(10, 130, dcValueList[readBatCnt]), + dcValueList[readBatCnt], dcValueList[readBatCnt] / 10, dcValueList[readBatCnt] % 10); + } + + if(_LiPolymerVoltageVal) + { + batValueList[readBatCnt] = _LiPolymerVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]Li Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(15, 130, batValueList[readBatCnt]), + batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); + } + } + else + { + batValueList[readBatCnt] = _BatVoltageVal; + + if(puiPara->BatteryLogSwitch) + { + printf("%s:%d [%d]Other Battery ADC Value=%lu,After Convert:%lu(%lu.%luV)\n", __FUNCTION__, __LINE__, readBatCnt + 1, sf_battery_convert_to_adc(15, 130, batValueList[readBatCnt]), + batValueList[readBatCnt], batValueList[readBatCnt] / 10, batValueList[readBatCnt] % 10); + } + } + + dcTemp += dcValueList[readBatCnt]; + batTemp += batValueList[readBatCnt]; + + readBatCnt++; + + if(readBatCnt >= SF_READ_BAT_MAX) + { + _DcVoltageVal = dcTemp / SF_READ_BAT_MAX; + + if(_LiPolymerVoltageVal) + { + _LiPolymerVoltageVal = batTemp / SF_READ_BAT_MAX; + } + else + { + _BatVoltageVal = batTemp / SF_READ_BAT_MAX; + } + + DcVoltageVal = _DcVoltageVal; + LiPolymerVoltageVal = _LiPolymerVoltageVal; + BatVoltageVal = _BatVoltageVal; + + if(DcVoltageVal >= SF_DC_IN_VOLATAGE) + { + IsPowerDcIn = 1; + } + else + { + IsPowerDcIn = 0; + } + + if(puiPara->BatteryLogSwitch) + { + printf("\n[average]DC,After Convert:(%lu.%luV),Is Dc In=%s\n", DcVoltageVal / 10, DcVoltageVal % 10, IsPowerDcIn == 1? "Yes" : "No"); + + if(LiPolymerVoltageVal) + { + printf("[average]Li Battery,After Convert:(%lu.%luV)\n\n", LiPolymerVoltageVal / 10, LiPolymerVoltageVal % 10); + } + else + { + printf("[average]Other Battery,After Convert:(%lu.%luV)\n\n", BatVoltageVal / 10, BatVoltageVal % 10); + } + } + } + } + } + + sf_battery_level_update(); + + //ret = sf_check_low_battery(); + + if(puiPara->BatteryLogSwitch) + { + printf("[%s:%d]batTempLevel=%lu,sf_LatestBattLevel=%d\n", __FUNCTION__, __LINE__, batTempLevel, sf_LatestBattLevel); + } + + if((batTempLevel != sf_LatestBattLevel) || IsPowerDcIn != prePowerDcStatus) + { + prePowerDcStatus = IsPowerDcIn; + batTempLevel = sf_LatestBattLevel; + #if HW_S530 + sf_view_osd_battery_draw(TRUE); + #endif + } + + if(sf_LatestBattLevel == SF_BATT_LEVEL_0) + { + if(sf_get_night_led_flag()) + { + sf_ir_led_set(0, 0, 0, 0); + //pwm_pwm_disable(IRLED_PWMID); + //printf("%s:%d \n", __FUNCTION__, __LINE__); + } + + //the Module not need sleep. + //gModuleSleep = 0; + sf_set_module_sleep_flag(0); + + if(battEmpty == 0) + { + battEmpty = 1; + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + //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); + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_0_SLOW); + } + 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); + sf_sys_status_led_set(SF_LED_SYS_STATE_BAT_1); + } + } + else + { + } +} +THREAD_RETTYPE sf_battery_check_thread(void *arg) +{ + THREAD_ENTRY(); + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + + if(sf_is_battery_low(1, 0) == TRUE) + { + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start + sf_set_power_off_flag(1); + flow_preview_set_stop_flag(TRUE); + + } + else { + while(sf_while_flag()) + { + sf_battery_level_polling(); + } + } + printf("[%s:%d] e \n", __FUNCTION__, __LINE__); + THREAD_RETURN(0); +} + + +void sf_battery_thread_init(void) +{ + static UINT8 dofirst = 1; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + if(!dofirst) + return; + dofirst = 0; + sf_adc_init(); + VK_TASK_HANDLE s_handle_batt = 0; + + vos_flag_create(&FLG_ID_SF_BSTTERY, NULL, "FLG_ID_SF_BSTTERY"); + /*thread creat*/ + s_handle_batt = vos_task_create(sf_battery_check_thread, NULL, "sf_battery_check_thread", 25, 2048); + vos_task_resume(s_handle_batt); + printf("[%s:%d] e\n", __FUNCTION__, __LINE__); +} + +UINT8 sf_get_night_led_flag(void) +{ + return IsNightLedOn; +} + +void sf_set_night_led_flag(UINT8 flag) +{ + IsNightLedOn = flag; +} + +/************************************************* + Function: sf_battery_level_get + Description: get battery level + Input: N/A + Output: N/A + Return: SUCCESS/FAIL + Others: N/A +*************************************************/ +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; + + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + 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(puiPara->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(puiPara->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; + +} +/************************************************* + Function: sf_battery_type_get + Description: Get battery type. + Input: N/A + Output: N/A + Return: value: battery type, 0:normal 1:LiPolymer + Others: N/A +*************************************************/ +UINT8 sf_battery_type_get(void) +{ + if(IsPowerDcIn) + return SF_POWER_TYPE_DC; + else if(LiPolymerVoltageVal) + return SF_POWER_TYPE_LI_POLYER; + else + return SF_POWER_TYPE_AA; +} + +/************************************************* + Function: sf_is_battery_low + Description: Judge whether the power is low + Input: refresh:refresh ADC acquisition or no, + nightMode:day or night + Output: N/A + Return: TRUE/FALSE + Others: N/A +*************************************************/ +BOOL sf_is_battery_low(UINT8 refresh, UINT8 nightMode) +{ + UINT8 batteryVal = 0; + UINT8 batteryLevel = 0; + + if(refresh) + { + sf_battery_adc_value_get(); + //printf("DC=%d Custom=%d bat=%d\n", dcValue, CustomValue, batli8v); + } + + batteryVal = sf_battery_value_get(nightMode); + + if(!sf_get_mode_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; + } + + if(batteryVal == 0) + return TRUE; + + return FALSE; +} +/************************************************* + Function: sf_battery_check_init + Description: Perform a battery test in manual mode. + Input: N/A + Output: N/A + Return: value: TRUE ,FALSE + Others: N/A +*************************************************/ +BOOL sf_battery_check_init(void) +{ + if(sf_battery_adc_value_get() == SUCCESS) + { + if(sf_is_battery_low(0, 0) == TRUE) + { + printf("[%s:%d]power off because low battery\n", __FUNCTION__, __LINE__); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); //shutdown start + sf_set_power_off_flag(1); + flow_preview_set_stop_flag(TRUE); + return FALSE; + } + } + else + { + return FALSE; + } + #if HW_S530 + sf_view_osd_battery_draw(TRUE); + #endif + return TRUE; +} +void sf_set_need_check_first(void) +{ + needCheckFirst = TRUE; +} +/************************************************* + Function: sf_is_enough_power_to_update + Description: whether or not enough power to update + Input: N/A + Output: N/A + Return: TRUE/FALSE + Others: N/A +*************************************************/ +BOOL sf_is_enough_power_to_update(void) +{ + sf_set_need_check_first(); + sf_battery_adc_value_get(); + printf("update DC=%lu Li=%lu Bat=%lu\n", DcVoltageVal, LiPolymerVoltageVal, BatVoltageVal); + + if(sf_battery_value_get(0) < 40) + { + printf("low battery, no update\n"); + + return FALSE; + } + + return TRUE; +} + + +#endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_led.c b/rtos/code/driver/na51089/source/mcu/sf_led.c new file mode 100755 index 000000000..970194978 --- /dev/null +++ b/rtos/code/driver/na51089/source/mcu/sf_led.c @@ -0,0 +1,637 @@ +/************************************************************************** + * + * Copyright (c) 2009-2023 by SiFar Technology, Inc. + * + * This software is copyrighted by and is the property of SiFar + * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. + * This software may only be used in accordance with the corresponding + * license agreement. Any unauthorized use, duplication, distribution, + * or disclosure of this software is expressly forbidden. + * + * This Copyright notice MUST not be removed or modified without prior + * written consent of SiFar Technology, Inc.. + * + * SiFar Technology, Inc. reserves the right to modify this software without notice. + * + * Author: Payton + * Ver: 1.0.0 2023.01.29 + * Description: + * +**************************************************************************/ + +#include +#include +#include +//#include "DxOutput.h" +//#include "DxCfg.h" +#include "IOCfg.h" +#include "DxHunting.h" +#include "kwrap/type.h" +#include +#include "modelext_info.h" +#include "DrvExt.h" +#include "PrjInc.h" +#include +#include "sf_mcu.h" + +void sf_trigger_time_led_cb(UINT32 cnt) +{ + printf("[%s:%d] led\n", __FUNCTION__, __LINE__); + gpio_direction_output(GPIO_GREEN_LED, 1); + gpio_set_value(GPIO_GREEN_LED, cnt); +} + +#if 1 + +VK_TASK_HANDLE ledTskId; + +//static BOOL isIrLedOn = FALSE; +static BOOL isGoToPir = FALSE; +static unsigned char isLedExit = 1; + +static BOOL isUsbIn = FALSE; +#if HW_S530 +VK_TASK_HANDLE 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, DSI_GPIO_8}, + {SF_LED_STATUS_G, SF_LED_STATE_OFF, 0, DSI_GPIO_9}, + {SF_LED_SD_G, SF_LED_STATE_OFF, 0, DSI_GPIO_7}, + {SF_LED_SD_R, SF_LED_STATE_OFF, 0, DSI_GPIO_4}, + {SF_LED_WIFI, SF_LED_STATE_OFF, 0, DSI_GPIO_6}, + {SF_LED_BAT1, SF_LED_STATE_OFF, 0, DSI_GPIO_5}, + {SF_LED_BAT2, SF_LED_STATE_OFF, 0, DSI_GPIO_2}, + {SF_LED_BAT3, SF_LED_STATE_OFF, 0, DSI_GPIO_3}, + {SF_LED_BAT4, SF_LED_STATE_OFF, 0, DSI_GPIO_0}, + {SF_LED_SIG1_R, SF_LED_STATE_OFF, 0, DSI_GPIO_10}, + {SF_LED_SIG1_G, SF_LED_STATE_OFF, 0, DSI_GPIO_1}, + {SF_LED_SIG2, SF_LED_STATE_OFF, 0, L_GPIO_1}, + {SF_LED_SIG3, SF_LED_STATE_OFF, 0, L_GPIO_0}, + {SF_LED_SIG4, SF_LED_STATE_OFF, 0, P_GPIO_8}, + #endif + {SF_LED_BUSY, SF_LED_STATE_OFF, 0, P_GPIO_10}, +}; + +//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); + gpio_set_value(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); + 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(isLedExit) + { + 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) +{ + THREAD_ENTRY(); + UINT8 i = 0; + + /*gpio init*/ + for(i = 0; i < SF_LED_ALL; i++) + { + + //gpio_setDir(LedInfo[i].gpioNum, GPIO_DIR_OUTPUT); + + //gpio_setPin(LedInfo[i].gpioNum); + gpio_direction_output(LedInfo[i].gpioNum,GPIO_DIR_OUTPUT); + //gpio_direction_output(LedInfo[i].gpioNum, GPIO_DIR_OUTPUT); + gpio_set_value(LedInfo[i].gpioNum, LedInfo[i].ledstate); + } + + //FLGPTN FlgPtn; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + while(isLedExit) + { + + for(i = 0; i < SF_LED_ALL; i++) + { + if(isUsbIn) + { + if((SF_LED_BUSY == i)/* || (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 + } + vos_util_delay_ms(10); + } + + printf("[%s:%d] e \n", __FUNCTION__, __LINE__); + THREAD_RETURN(0); + +} + + +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 0; + } + else if(ledId < SF_LED_ALL) + { + /*printf("led id:%d, state:%d\n", ledId,ledstate);*/ + LedInfo[ledId].ledstate = ledstate; + LedInfo[ledId].times = 0; + return 0; + } + else + { + return 1; + } +} + + +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__); + UINT8 startup = sf_get_power_on_mode(); + if(((PWR_ON_SETUP != startup) && (PWR_ON_AUTO != startup) && (PWR_ON_USB != startup))) + return; + + if(!dofirst) + 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); + gpio_direction_output(LedInfo[i].gpioNum, GPIO_DIR_OUTPUT); + gpio_set_value(LedInfo[i].gpioNum, LedInfo[i].ledstate); + } + + //vos_flag_create(&FLG_ID_SF_LED, NULL, "FLG_ID_SF_LED"); + /*thread creat*/ + ledTskId = vos_task_create(sf_led_thread, NULL, "sf_led_thread", 25, 2048); + vos_task_resume(ledTskId); + #if HW_S530 + /*thread creat*/ + ledRunningTskId = vos_task_create(sf_runningLed_thread, NULL, "sf_runningLed_thread", 25, 2048); + vos_task_resume(ledRunningTskId); + #endif + printf("[%s:%d] e SF_LED_ALL:%d\n", __FUNCTION__, __LINE__,SF_LED_ALL); +} + +void sf_led_stop(void) +{ + printf("[%s:%d] e\n", __FUNCTION__, __LINE__); +} + + +void sf_sys_status_led_set(LedSysState_t ledSysStateId) +{ + UINT8 startup = sf_get_power_on_mode(); + if(((PWR_ON_SETUP != startup) && (PWR_ON_AUTO != startup) && (PWR_ON_USB != startup))) + 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; + case SF_LED_SYS_STATE_BAT_0_SLOW: + sf_led_set(SF_LED_BAT1, SF_LED_STATE_SLOW_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; + + default: + break; + } + +} + + +#endif + diff --git a/rtos/code/driver/na51089/source/mcu/sf_mcu.c b/rtos/code/driver/na51089/source/mcu/sf_mcu.c index 1fd215a0f..388c85afa 100644 --- a/rtos/code/driver/na51089/source/mcu/sf_mcu.c +++ b/rtos/code/driver/na51089/source/mcu/sf_mcu.c @@ -45,7 +45,7 @@ static UINT8 POWEROFF = 0; static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */ static UINT8 AeNightMode = 0; /* 0:day 1:night */ //#define printf(fmt, args...) printk(fmt , ## args) -static UINT32 simCardInsert=0; +static UINT32 simCardInsert=1; static UINT8 gModuleSleep = 1; static UINT32 SmsCheck = 0; //static SF_CAMERA_CMD_S CameraCmd = {0}; @@ -588,6 +588,15 @@ UINT8 sf_mcu_wdg_set(UINT8 value) return SUCCESS; } +void sf_set_sim_insert(UINT32 sim) +{ + simCardInsert = sim; +} + +UINT32 sf_get_sim_insert(void) +{ + return simCardInsert; +} #if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_) @@ -1335,24 +1344,25 @@ UINT8 sf_mcu_analog_pir_sen_convert(UINT8 pirs) Return: N/A Others: N/A *************************************************/ - UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) { - UINT8 mcuReg[REG_SIZE] = {0}; - UINT8 mcuData[REG_SIZE] = {0}; - UINT8 i = 0; - //UINT8 j = 0; - UINT8 temp = 0; - UINT8 paraSyncFlag = 0; - UINT8 gpsAlwaysFlag = 0; + unsigned char mcuReg[REG_SIZE] = {0}; + unsigned char mcuData[REG_SIZE] = {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; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + //SF_PARA_TIME_S date = { 0 }; UINT8 PowerOnMode = 0; signed int isUsb = 0; signed int isCard = 0; signed int isCardFull = 0; - printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION); - printf("%s:%d start mode = %d IRSHTTER = %d\n", __FUNCTION__, __LINE__ , sf_get_power_on_mode(), IRSHTTER); - UIMenuStoreInfo *puiPara = sf_ui_para_get(); - + if(attrId != SF_MCU_CTRL_MODULE_PIR)//AND LDS SECTION_01 loading order. { isUsb = sf_is_usb_flag(); @@ -1361,21 +1371,26 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) PowerOnMode = sf_get_power_on_mode(); } - if (attrId > SF_MCU_PARAM_MAX) + sf_set_sim_insert(1);//Remove hardware detection SIM card + printf("Firmware compile time:%s %s VER:%s\n", __DATE__, __TIME__,SF_BASE_VERSION); + printf("%s:%d DailyReportSwitch=%d %02d:%02d\n",__FUNCTION__,__LINE__, puiPara->DailyReportSwitch, puiPara->DailyReportTime2.Hour, puiPara->DailyReportTime2.Min); + printf("%s:%d isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %ld start mode = %d\n",__FUNCTION__,__LINE__, isUsb, isCard, isCardFull, val, simCardInsert, PowerOnMode); + + if (attrId > SF_MCU_PARAM_MAX) { - printf("attrId ERROR!\n"); - return FAIL; + printf("attrId ERROR!\n"); + return -1; } - printf("sf_mcu_reg_set attrId=%d val=%d\n", attrId, val); - if(attrId == SF_MCU_POWEROFF) { - if((simCardInsert) && (1 == puiPara->NeedTimeSyncStartUp)) - { - paraSyncFlag = 1; - } + //printf("SynMcuSet = %x\n", statisPara->SynMcuSet); + printf("NeedTimeSyncStartUp = %d\n", puiPara->NeedTimeSyncStartUp); + if(puiPara->NeedTimeSyncStartUp == 1) + { + paraSyncFlag = 1; + } #if 0 struct tm ctv = {0}; ctv = hwclock_get_time(TIME_ID_CURRENT); @@ -1394,22 +1409,20 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) mcuReg[i] = SF_RTC_SEC; mcuData[i++] = ctv.tm_sec; #endif - gpsAlwaysFlag = 0; - if((1 == puiPara->GpsSwitch) && (puiPara->GpsNumber)) - { - gpsAlwaysFlag=1; - }else - { - gpsAlwaysFlag=0; - } - - if(puiPara->PirSensitivity){ - temp = 0x01; - }else{ - temp = 0x00; - } + if((puiPara->GpsSwitch == 1) && (puiPara->GpsNumber)) + { + gpsAlwaysFlag=1; + } + else + { + gpsAlwaysFlag=0; + } + if(puiPara->PirSensitivity) + temp = 0x01; + else + temp = 0x00; if(1 == puiPara->TimelapseSwitch) { @@ -1446,13 +1459,17 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) if(puiPara->TimeSend2Switch == 1) temp |= 0x40; - + if(gpsAlwaysFlag && simCardInsert) temp |= 0x80; + temp |= 0x10; + mcuReg[i] = FUNCTION_SWTICH0; mcuData[i++] = temp; + temp = 0; + if(puiPara->TimelapseSwitch) { mcuReg[i] = TIMELAPSE_HOUR; @@ -1460,12 +1477,13 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 val) 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)) mcuData[i++] = 5; else - mcuData[i++] = puiPara->TimelapseTime.Sec; - }else + mcuData[i++] = puiPara->TimelapseTime.Sec; + } + else { mcuReg[i] = TIMELAPSE_HOUR; mcuData[i++] = 0; @@ -1474,342 +1492,347 @@ UINT8 sf_mcu_reg_set(MCUParam_t attrId, UINT8 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; - } + { + 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++] = 0; - mcuReg[i] = TIME_SYNC_SEC; mcuData[i++] = 1; + mcuReg[i] = TIME_SYNC_SEC; + mcuData[i++] = 30; } - + if(puiPara->DailyReportSwitch) { mcuReg[i] = DAILY_REPORT_HOUR; mcuData[i++] = puiPara->DailyReportTime2.Hour; mcuReg[i] = DAILY_REPORT_MINUTE; mcuData[i++] = puiPara->DailyReportTime2.Min; - }else + } + else { mcuReg[i] = DAILY_REPORT_HOUR; mcuData[i++] =0; mcuReg[i] = DAILY_REPORT_MINUTE; mcuData[i++] =0; } - - mcuReg[i] = DAILY_SEND1_HOUR; + 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; + mcuReg[i] = DAILY_SEND2_HOUR; mcuData[i++] = puiPara->TimeSend2.Hour; mcuReg[i] = DAILY_SEND2_MINUTE; mcuData[i++] = puiPara->TimeSend2.Min; - - mcuReg[i] = ANALOG_PIR_SENSITIVITY; + + mcuReg[i] = ANALOG_PIR_SENSITIVITY; temp = sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity); - - //hybrid mode 4G module keep sleep + //hybrid mode 4G module keep sleep if(((puiPara->NetWorkNeedSearch) != 3) && simCardInsert && gModuleSleep) - { - //bit 5-bit 6, daily mode 0, hybrid mode 1, instant mode 2 + { + //bit 5-bit 6, daily mode 0, hybrid mode 1, instant mode 2 if(((puiPara->GprsMode) == 1) || (paraSyncFlag)) - { - temp |= 0x40; - }else{ + { + temp |= 0x40; + } + else + { if (((puiPara->GprsMode) == 2) && isSignalReady && (GPRS_ERRNO == 0)) - temp |= 0x20; - - //sf_pdp_flg_set(0); - } + temp |= 0x20; + + //sf_pdp_flg_set(0); + } } - + if((PowerOnMode == PWR_ON_AUTO) || (PowerOnMode == PWR_ON_SETUP) || (PowerOnMode == PWR_ON_GPRS_INIT) || ((PowerOnMode == PWR_ON_DAILY_REPORT) /*&& (drNoResetTimeSync != SF_TRUE)*/)) + { + temp |= 0x10; /*bit4 rest*/ + } if(((puiPara->GprsSwitch) && (simCardInsert) && ((puiPara->SendType) == 0)) || (paraSyncFlag)) { - temp |= 0x80; - }else{ - //sf_pdp_flg_set(0); - } + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } + + mcuData[i++] = temp; - mcuData[i++] = temp; - - mcuReg[i] = DIGITAL_PIR_SENSITIVITY; + mcuReg[i] = DIGITAL_PIR_SENSITIVITY; mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; - mcuReg[i] = DIGITAL_PIR_CFG; + mcuReg[i] = DIGITAL_PIR_CFG; mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt); - //mcuData[i++] = (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0); + //mcuData[i++] = (PirDigtSensRegValue[SysGetFlag(PirSensitivity)] <= 10 ? 1 : 0); - //DSP busy/idle + //DSP busy/idle mcuReg[i] = DSP_BUSY_STATUS; mcuData[i++] = 0; - - mcuReg[i] = SF_SYS_STATUS; + + mcuReg[i] = SF_SYS_STATUS; mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0; - - mcuReg[i] = POWEROFF_TYPE; - temp = 0; - + + mcuReg[i] = POWEROFF_TYPE; + temp = 0; + if(simCardInsert && (puiPara->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; - } - - mcuData[i++] = (0) << 7 | (val == APP_POWER_OFF_BATT_EMPTY) << 6 | (val == APP_POWER_OFF_APO) << 6 | temp; - - //battery recovery - mcuReg[i] = VBAT_RECOVER_VAL; - mcuData[i++] = SF_BATT_RECOVERY; - + && ((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(puiPara->WorkTime1Switch) - { - mcuReg[i] = WORKTIME1_SWITCH; - mcuData[i++] = 0xFF; + { + 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_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_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_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; - } + mcuReg[i] = WORKTIME1_STOP_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME1_STOP_MINUTE; + mcuData[i++] = 0; + } if(puiPara->WorkTime2Switch) - { - mcuReg[i] = WORKTIME2_SWITCH; - mcuData[i++] = 0xFF; + { + 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_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_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_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] = WORKTIME2_STOP_HOUR; + mcuData[i++] = 0; + mcuReg[i] = WORKTIME2_STOP_MINUTE; + mcuData[i++] = 0; + } - if(((puiPara->GpsSwitch) || (puiPara->FristSendDailyAndGps)) && (sf_get_mode_flag() || 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; - } + if(((puiPara->GpsSwitch) || (puiPara->FristSendDailyAndGps)) && (((sf_get_mode_flag())) || 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; + temp = 0; if((puiPara->TimeSend3Switch) == 1) - temp |= 0x01; + temp |= 0x01; if((puiPara->TimeSend4Switch) == 1) - temp |= 0x02; + temp |= 0x02; - mcuReg[i] = FUNCTION_SWTICH1; - mcuData[i++] = temp; + mcuReg[i] = FUNCTION_SWTICH1; + mcuData[i++] = temp; - mcuReg[i] = DAILY_SEND3_HOUR; + mcuReg[i] = DAILY_SEND3_HOUR; mcuData[i++] = puiPara->TimeSend3.Hour; mcuReg[i] = DAILY_SEND3_MINUTE; mcuData[i++] = puiPara->TimeSend3.Min; - mcuReg[i] = DAILY_SEND4_HOUR; + mcuReg[i] = DAILY_SEND4_HOUR; mcuData[i++] = puiPara->TimeSend4.Hour; mcuReg[i] = DAILY_SEND4_MINUTE; mcuData[i++] = puiPara->TimeSend4.Min; - } - else if(attrId == SF_MCU_CTRL_MODULE_PIR) - { - mcuReg[i] = ANALOG_PIR_SENSITIVITY; + }else if(attrId == SF_MCU_CTRL_MODULE_PIR){ + mcuReg[i] = ANALOG_PIR_SENSITIVITY; temp = (puiPara->PirSensitivity);//sf_mcu_analog_pir_sen_convert(SysGetFlag(DigPirSensitivity)); - + if(puiPara->GprsMode)//hybrid mode 4G module keep sleep { - temp |= 0x40; + temp |= 0x40; } - + if((puiPara->GprsSwitch) && (val == 1)) { - temp |= 0x80; - }else - { - //sf_pdp_flg_set(0); - } + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } - mcuData[i++] = temp; + mcuData[i++] = temp; - if(ConfigureModeFlag) - { - mcuReg[i] = DIGITAL_PIR_SENSITIVITY; + if(ConfigureModeFlag) + { + mcuReg[i] = DIGITAL_PIR_SENSITIVITY; mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; mcuReg[i] = DIGITAL_PIR_CFG; mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt); - } + } if(((puiPara->GpsSwitch) || (puiPara->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; - + { + 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 = (puiPara->PirSensitivity);//sf_mcu_analog_pir_sen_convert(puiPara->PirSensitivity); - + if((puiPara->GprsMode) && (gModuleSleep == 1))//hybrid mode 4G module keep sleep - { - temp |= 0x40; - } + { + temp |= 0x40; + } if((puiPara->GprsSwitch) && (simCardInsert)) - { - temp |= 0x80; - }else - { - //sf_pdp_flg_set(0); - } + { + temp |= 0x80; + } + else + { + //sf_pdp_flg_set(0); + } - mcuData[i++] = temp; - - printf("[%s:%d] temp:0x%02x GprsSwitch:%d simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, puiPara->GprsSwitch, simCardInsert); + mcuData[i++] = temp; + + printf("[%s:%d] temp:0x%02x GprsSwitch:%d simCardInsert:%lu\n", __FUNCTION__, __LINE__, temp, puiPara->GprsSwitch, simCardInsert); mcuReg[i] = DIGITAL_PIR_SENSITIVITY; mcuData[i++] = (puiPara->DigitPirSensitivity);//PirDigtSensRegValue[SysGetFlag(PirSensitivity)]; - mcuReg[i] = DIGITAL_PIR_CFG; + mcuReg[i] = DIGITAL_PIR_CFG; mcuData[i++] = ((puiPara->DigitPirWindowTime) << 4) | (puiPara->DigitPirCnt); - mcuReg[i] = SF_SYS_STATUS; + mcuReg[i] = SF_SYS_STATUS; mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0; if(((puiPara->GpsSwitch) || (puiPara->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] = SF_SYS_STATUS; + { + 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] = SF_SYS_STATUS; mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x10; - //sf_pdp_flg_set(0); - } - else if(attrId == SF_MCU_SOFT_UPDATE) - { - mcuReg[i] = SF_SYS_STATUS; - - if(val == 1) - { + //sf_pdp_flg_set(0); + }else if(attrId == SF_MCU_SOFT_UPDATE){ + mcuReg[i] = SF_SYS_STATUS; + + if(val == 1) + { mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x08; - } - else - { + } + else + { mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0; - } - } - else if(attrId == SF_MCU_POWER_RESTART) - { - mcuReg[i] = SF_SYS_STATUS; + } + }else if(attrId == SF_MCU_POWER_RESTART){ + mcuReg[i] = SF_SYS_STATUS; mcuData[i++] = (puiPara->CamArmDiable) << 6 | isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x20; - } - else if(attrId == SF_MCU_PIR_RESTART) - { - mcuReg[i] = SF_SYS_STATUS; + }else if(attrId == SF_MCU_PIR_RESTART){ + mcuReg[i] = SF_SYS_STATUS; mcuData[i++] = (puiPara->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)]); + } + + 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(); - } + 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_mcu_write_multi(mcuReg, mcuData, i); + return SUCCESS; } + #endif BOOL sf_get_mode_flag(void) @@ -2146,6 +2169,9 @@ void sf_add_file_name_to_send_list(char *sendfname) printf("Add %s to send.List\n", sendfname); if(0 == puiPara->SendType){ snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_AUTO); + if (FileSys_DeleteFile(sendListName) != FST_STA_OK) { + DBG_IND("Ignore deleting file.\r\n"); + } }else { snprintf(sendListName, sizeof(sendListName), "%s", SF_THUMB_SEND_LIST); }