Merge "[Feature][ZXW-90]add gnss demo code. Only Configure:No; Affected branch:master; Affected module:Gnss; Is it affected on both ZXIC and MTK: only ZXIC; Self-test: Yes; Doc Update:Need"
diff --git a/allbins/zx297520v3/prj_vehicle/scripts_linux/copybin_vehicle_dc_ref.sh b/allbins/zx297520v3/prj_vehicle/scripts_linux/copybin_vehicle_dc_ref.sh
index 5fb66ce..cb9574a 100755
--- a/allbins/zx297520v3/prj_vehicle/scripts_linux/copybin_vehicle_dc_ref.sh
+++ b/allbins/zx297520v3/prj_vehicle/scripts_linux/copybin_vehicle_dc_ref.sh
@@ -36,17 +36,17 @@
 rm $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/phyLteaAmtCali_nvro_0x00078000.bin
 
 #uboot
-mkdir -p $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_on
+mkdir -p $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_off
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/tboot.bin  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/tboot.bin
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/tloader.bin  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/tloader.bin
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/uboot.bin  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/uboot.bin
-cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_on/zloader.bin  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/zloader.bin
+cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_off/zloader.bin  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/zloader.bin
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/u-boot  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/u-boot
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/u-boot.map  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/u-boot.map
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/z-load  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/z-load
 cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/z-load.map  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/z-load.map
-cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_on/z-load  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_on/z-load
-cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_on/z-load.map  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_on/z-load.map
+cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_off/z-load  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_off/z-load
+cp -rvf $TOP_DIR/boot/prj/zx297520v3/vehicle_dc_ref/bin/dl_off/z-load.map  $TOP_DIR/allbins/zx297520v3/prj_vehicle/elf_dc_ref/boot/dl_off/z-load.map
 
 #ap
 cp -rvf $TOP_DIR/ap/project/zx297520v3/prj_vehicle_dc_ref/bin/220A1/allbins/*  $TOP_DIR/allbins/zx297520v3/prj_vehicle/allbins_dc_ref/
diff --git a/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c b/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c
index 2d4c6b1..03d43eb 100755
--- a/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c
+++ b/ap/app/zte_comm/at_ctl/src/atconfig/ps_normal.c
@@ -115,6 +115,14 @@
 	void *p[5] = {&timeinfo.time_zone,&timeinfo.sav_time,temp1,temp2,timeinfo.univer_time};

 	int time_zone = 0;

 	

+	//>>>sj.zhang add @2023-08-10 for systime NITZ sync enable/disenable.

+	if(0 != system("uci get lynq_uci.lynq_sync_time.lynq_modem_sync_time_enable | grep -E \'^1$\'"))

+	{

+		at_print(AT_ERR,"zmmi_auto_act: nitz disenabled. \n");

+		return AT_END;

+	}

+	//>>>sj.zhang add @2023-08-10 end.

+

     sc_cfg_get("sntp_time_set_mode", mode, sizeof(mode));

 	if(strcmp(mode, "manual") == 0)

 	{

diff --git a/boot/common/src/loader/lib/board.c b/boot/common/src/loader/lib/board.c
index 09417af..6d38893 100755
--- a/boot/common/src/loader/lib/board.c
+++ b/boot/common/src/loader/lib/board.c
@@ -20,7 +20,11 @@
 #include "pub_flags.h"
 
 #define FLAGS_PARTITION_ERROR (0x1111) /*·ÖÇøÒì³£*/
-
+//xf.li@20230815 add for download without powerkey start 
+#define GPIO0_REG_BASE      0x0013D000
+#define GPIO24_PSHOLD	(24)
+#define IO_CFG_BASE (0x0013C000+0x800)
+//xf.li@20230815 add for download without powerkey end
 typedef short (init_fnc_t) (void);
 
 int print_info(void)
@@ -152,6 +156,21 @@
 #if CFG_PRINTF
 	uart_init();
 #endif
+//xf.li@20230815 add for download without powerkey start
+#if 1//pshold on	
+	amt_value = readl(IO_CFG_BASE+0x4);
+	amt_value &= ~(3<<28);
+	writel(amt_value, (IO_CFG_BASE+0x4));
+	/*direction: out*/
+	amt_value = readl(GPIO0_REG_BASE + (GPIO24_PSHOLD/16)*0x40);
+	amt_value &= ~(1<<(24%16));
+	writel(amt_value, GPIO0_REG_BASE + (GPIO24_PSHOLD/16)*0x40);
+	/*set out 1*/
+	amt_value = readl(GPIO0_REG_BASE + 0x18+ (GPIO24_PSHOLD/16)*0x40);
+	amt_value |= (1<<(24%16));
+	writel(amt_value, GPIO0_REG_BASE + 0x18+ (GPIO24_PSHOLD/16)*0x40);
+#endif
+//xf.li@20230815 add for download without powerkey end
 	print_info();
 
 	/* After reset, Copy zloader forcely. */
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc.conf b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc.conf
index 5de1db2..d5acc77 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc.conf
+++ b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc.conf
@@ -163,6 +163,7 @@
         liblynq-qser-network \
         liblynq-qser-gnss \
         liblynq-qser-fota \
+        liblynq-systime \
 	"
 
 zxic_lib += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'libril libreference-ril', 'libtelsvr', d)}"
@@ -231,6 +232,7 @@
         lynq-qser-fota-demo \
         lynq-qser-gnss-demo \
         lynq-qser-network-demo \
+        lynq-systime-demo \
 	"
 
 zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'rild', '', d)}"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
index f4036e7..23bac63 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
+++ b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
@@ -40,7 +40,7 @@
 DISTRO_FEATURES_append=" selinux "
 
 # 默认是强制模式 enforcing ,调试建议采用宽容模式 permissive
-DEFAULT_ENFORCING = "enforcing"
+DEFAULT_ENFORCING = "permissive"
 
 # selinux 策略
 PREFERRED_PROVIDER_virtual/refpolicy ?= "refpolicy-mls"
@@ -191,6 +191,8 @@
         liblynq-qser-network \
         liblynq-qser-gnss \
         liblynq-qser-fota \
+        libpoweralarm \
+        liblynq-systime \
 	"
 
 zxic_lib += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'libril', 'libtelsvr', d)}"
@@ -258,7 +260,9 @@
         lynq-qser-fota-demo \
         lynq-qser-gnss-demo \
         lynq-qser-network-demo \
-	"
+        poweralarm-demo \
+        lynq-systime-demo \
+        "
 
 zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'rild', '', d)}"
 zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'BL', 'tel-svr', '', d)}"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-systime/liblynq-systime.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-systime/liblynq-systime.bb
new file mode 100644
index 0000000..da64aad
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-systime/liblynq-systime.bb
@@ -0,0 +1,64 @@
+#inherit externalsrc package
+
+DESCRIPTION = "liblynq-systime"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'T106', "libsctel", '', d)} liblynq-uci liblynq-log"
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-systime/"
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/lib/:"
+SRC_URI = " \
+          file://liblynq-systime \
+          "
+
+SRC-DIR = "${S}/../liblynq-systime"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+FILES_${PN} = "${base_libdir}/*.so \
+               ${base_bindir}\
+               ${base_sbindir} \
+               /etc/dbus-1/system.d/"
+FILES_${PN}-dev = "/test \
+                   ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+                  ${base_libdir}/.debug \
+                  ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	if [ "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" ]; then
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu"
+	elif [ "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4" ]; then
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu"
+	elif [ "${PACKAGE_ARCH}" = "cortexa53hf-neon-fp-armv8" ]; then
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu -mhard-float -mfpu=neon-fp-armv8 -mfloat-abi=hard -mcpu=cortex-a53 -mtune=cortex-a53"
+	else
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu"
+	fi
+}
+
+do_install () {
+    oe_runmake install -C ${SRC-DIR} ROOT=${D}
+	
+    if [ -d "${WORKONSRC}" ] ; then
+        install -d ${D}${includedir}/
+        cp -af ${SRC-DIR}/include/ ${D}${includedir}/
+    fi 
+}
+
+addtask bachclean
+do_bachclean () {
+    oe_runmake clean
+}
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/libpoweralarm/libpoweralarm.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/libpoweralarm/libpoweralarm.bb
new file mode 100755
index 0000000..0867686
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/libpoweralarm/libpoweralarm.bb
@@ -0,0 +1,58 @@
+#inherit externalsrc package
+DESCRIPTION = "libpoweralarm.so "
+SECTION = "base"
+#LICENSE = "Mobiletek""
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d759532d295a4ec07250edf931caef80"
+DEPENDS += "bootchart  liblynq-log libsctel "
+
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/lib/libpoweralarm/"
+
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/lib/:"
+SRC_URI = " \
+          file://libpoweralarm \
+          "
+SRC-DIR = "${S}/../libpoweralarm"
+TARGET_CC_ARCH += "${LDFLAGS}"
+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"
+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"
+
+#Parameters passed to do_compile()
+
+FILES_${PN} = "${base_libdir}/*.so \
+               ${base_bindir}\
+               ${base_sbindir}"
+
+
+FILES_${PN}-dev = "/test \
+                   ${includedir}"
+
+FILES_${PN}-doc = "/doc"
+
+FILES_${PN}-dbg ="${base_bindir}/.debug \
+                  ${base_libdir}/.debug \
+                  ${base_sbindir}/.debug"
+
+INSANE_SKIP_${PN} += "already-stripped"
+INSANE_SKIP_${PN} += "installed-vs-shipped"
+
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"
+}
+
+do_install () {
+    oe_runmake install -C ${SRC-DIR} ROOT=${D}
+	
+    if [ -d "${WORKONSRC}" ] ; then
+        install -d ${D}${includedir}/
+        cp -af ${SRC-DIR}/include/ ${D}${includedir}/
+    fi 
+}
+
+addtask bachclean
+do_bachclean () {
+    oe_runmake clean
+}
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/lynq-qser-fota-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/files/lynq-qser-fota-demo.cpp
similarity index 100%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/lynq-qser-fota-demo.cpp
rename to cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/files/lynq-qser-fota-demo.cpp
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/lynq-qser-fota-demo.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/lynq-qser-fota-demo.bb
index ad8af28..d24b8bb 100644
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/lynq-qser-fota-demo.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/lynq-qser-fota-demo.bb
@@ -1,36 +1,33 @@
-#inherit externalsrc package
-#inherit externalsrc package systemd
-DESCRIPTION = "lynq-qser-fota-demo"
-LICENSE = "CLOSED"
-LICENSE = "CLOSED"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
-DEPENDS += "liblynq-qser-fota"
-#inherit workonsrc
-WORKONSRC = "${TOPDIR}/../src/lynq/packages/apps/lynq-qser-fota-demo"
-FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/packages/apps:"
-SRC_URI = " \
-          file://lynq-qser-fota-demo \
-          "
+# Package summary
+SUMMARY = "lynq-qser-fota-demo"
+# License, for example MIT
+LICENSE = "MIT"
+# License checksum file is always required
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+		  
+SRC_URI = " file://lynq-qser-fota-demo.cpp"
 
 SRC-DIR = "${S}/../lynq-qser-fota-demo"
 TARGET_CC_ARCH += "${LDFLAGS}"
-SYSTEMD_PACKAGES = "${PN}"
+
 #Parameters passed to do_compile()
 EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'\"
 EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
 
-EXTRA_OEMAKE += "'MOBILETEK_FOTA_CFG = ${MOBILETEK_FOTA_CFG}'"
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+S = "${WORKDIR}"
 
 #INHIBIT_PACKAGE_STRIP = "1"
 do_compile () {
-	if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"
-	else
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST}"
-	fi
+
+	${CXX} -Wall lynq-qser-fota-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o lynq-qser-fota-demo
 }
 
 do_install() {
 	install -d ${D}${bindir}/
-	install -m 0755 ${SRC-DIR}/lynq-qser-fota-demo ${D}${bindir}/
+	install -m 0755 ${S}/lynq-qser-fota-demo ${D}${bindir}/
 }
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/lynq-qser-network-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
similarity index 100%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/lynq-qser-network-demo.cpp
rename to cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq-qser-network-demo.cpp
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/include/lynq_qser_network.h b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
similarity index 100%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/include/lynq_qser_network.h
rename to cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/files/lynq_qser_network.h
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/lynq-qser-network-demo.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/lynq-qser-network-demo.bb
index f2f1f04..a38c191 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/lynq-qser-network-demo.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-network-demo/lynq-qser-network-demo.bb
@@ -1,35 +1,33 @@
-#inherit externalsrc package
-#inherit externalsrc package systemd
-DESCRIPTION = "lynq-qser-network-demo"
-LICENSE = "CLOSED"
-LICENSE = "CLOSED"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
-#DEPENDS += "liblynq-qser-fota"
-#inherit workonsrc
-WORKONSRC = "${TOPDIR}/../src/lynq/packages/apps/lynq-qser-network-demo"
-FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/packages/apps:"
-SRC_URI = " \
-          file://lynq-qser-network-demo \
-          "
+# Package summary
+SUMMARY = "lynq-qser-network-demo"
+# License, for example MIT
+LICENSE = "MIT"
+# License checksum file is always required
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+		  
+SRC_URI = "file://lynq_qser_network.h file://lynq-qser-network-demo.cpp"
 
 SRC-DIR = "${S}/../lynq-qser-network-demo"
 TARGET_CC_ARCH += "${LDFLAGS}"
-SYSTEMD_PACKAGES = "${PN}"
+
 #Parameters passed to do_compile()
 EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'\"
 EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
 
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+S = "${WORKDIR}"
 
 #INHIBIT_PACKAGE_STRIP = "1"
 do_compile () {
-	if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"
-	else
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST}"
-	fi
+
+	${CXX} -Wall lynq-qser-network-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o lynq-qser-network-demo
 }
 
 do_install() {
 	install -d ${D}${bindir}/
-	install -m 0755 ${SRC-DIR}/lynq-qser-network-demo ${D}${bindir}/
+	install -m 0755 ${S}/lynq-qser-network-demo ${D}${bindir}/
 }
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/lynq-qser-voice-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/files/lynq-qser-voice-demo.cpp
similarity index 100%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/lynq-qser-voice-demo.cpp
rename to cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/files/lynq-qser-voice-demo.cpp
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/include/lynq-qser-voice-demo.h b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/files/lynq-qser-voice-demo.h
similarity index 100%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/include/lynq-qser-voice-demo.h
rename to cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/files/lynq-qser-voice-demo.h
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/lynq-qser-voice-demo.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/lynq-qser-voice-demo.bb
index ec11c10..1fb0142 100644
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/lynq-qser-voice-demo.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-voice-demo/lynq-qser-voice-demo.bb
@@ -1,36 +1,33 @@
-#inherit externalsrc package
-#inherit externalsrc package systemd
-DESCRIPTION = "lynq-qser-voice-demo"
-LICENSE = "CLOSED"
-LICENSE = "CLOSED"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
-DEPENDS += "liblynq-qser-voice"
-#inherit workonsrc
-WORKONSRC = "${TOPDIR}/../src/lynq/packages/apps/lynq-qser-voice-demo"
-FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/packages/apps:"
-SRC_URI = " \
-          file://lynq-qser-voice-demo \
-          "
+# Package summary
+SUMMARY = "lynq-qser-fota-demo"
+# License, for example MIT
+LICENSE = "MIT"
+# License checksum file is always required
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+		  
+SRC_URI = "file://lynq-qser-voice-demo.h file://lynq-qser-voice-demo.cpp"
 
-SRC-DIR = "${S}/../lynq-qser-voice-demo"
+SRC-DIR = "${S}/../lynq-qser-fota-demo"
 TARGET_CC_ARCH += "${LDFLAGS}"
-SYSTEMD_PACKAGES = "${PN}"
+
 #Parameters passed to do_compile()
 EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'\"
 EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
 
-EXTRA_OEMAKE += "'MOBILETEK_FOTA_CFG = ${MOBILETEK_FOTA_CFG}'"
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+S = "${WORKDIR}"
 
 #INHIBIT_PACKAGE_STRIP = "1"
 do_compile () {
-	if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"
-	else
-		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST}"
-	fi
+
+	${CXX} -Wall lynq-qser-voice-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o lynq-qser-voice-demo
 }
 
 do_install() {
 	install -d ${D}${bindir}/
-	install -m 0755 ${SRC-DIR}/lynq-qser-voice-demo ${D}${bindir}/
+	install -m 0755 ${S}/lynq-qser-voice-demo ${D}${bindir}/
 }
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/lynq-systime-demo.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/lynq-systime-demo.bb
new file mode 100644
index 0000000..ca07a8a
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-systime-demo/lynq-systime-demo.bb
@@ -0,0 +1,36 @@
+#inherit externalsrc package
+#inherit externalsrc package systemd
+DESCRIPTION = "lynq-systime-demo"
+LICENSE = "CLOSED"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+DEPENDS += "liblynq-systime"
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/packages/apps/lynq-systime-demo"
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/packages/apps:"
+SRC_URI = " \
+          file://lynq-systime-demo \
+          "
+
+SRC-DIR = "${S}/../lynq-systime-demo"
+TARGET_CC_ARCH += "${LDFLAGS}"
+SYSTEMD_PACKAGES = "${PN}"
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'\"
+EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
+
+EXTRA_OEMAKE += "'MOBILETEK_FOTA_CFG = ${MOBILETEK_FOTA_CFG}'"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+	if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"
+	else
+		oe_runmake all -C ${SRC-DIR} ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST}"
+	fi
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${SRC-DIR}/lynq-systime-demo ${D}${bindir}/
+}
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
new file mode 100755
index 0000000..199106b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
@@ -0,0 +1,186 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <sys/types.h>

+#include <unistd.h>

+#include <dlfcn.h>

+#include <stdint.h>

+

+typedef struct

+{

+    int  cmdIdx;

+    char *funcName;

+} st_api_test_case;

+    

+//for server test

+st_api_test_case at_api_testcases[] = 

+{

+    {0,   "print_help"},

+    {1,   "poweralarm"},

+    {2,   "wakealarm"},

+    {3,   "cancel_wakealarm"},

+    {4,   "lynq_set_poweralarm"},

+    {5,   "lynq_set_wakealarm"},

+    {-1,    NULL}

+};

+

+

+int (*poweralarm)(char *buffer);

+int (*wakealarm)(char *buffer);

+int (*cancel_wakealarm)();

+int (*lynq_set_poweralarm)(unsigned long time_sec);

+int (*lynq_set_wakealarm)(unsigned long time_sec);

+

+void *dlHandle_poweralarm = NULL;

+

+

+void print_help(void)

+{

+    int i;

+    printf("Supported test cases:\n");

+    for(i = 0; ; i++)

+    {

+        if(at_api_testcases[i].cmdIdx == -1)

+        {

+            break;

+        }

+        printf("%d:\t%s\n", at_api_testcases[i].cmdIdx, at_api_testcases[i].funcName);

+    }

+}

+

+int main(int argc,char *argv[])

+{

+

+    int flag = 0; 

+    int cmdIdx = 0;

+    printf("Enter main function\n");

+    

+    const char *dlHandle_Path_poweralarm = "/lib/libpoweralarm.so";

+    dlHandle_poweralarm = dlopen(dlHandle_Path_poweralarm, RTLD_NOW);

+    if (dlHandle_poweralarm == NULL) 

+    {

+        printf("dlopen dlHandle_fota failed: %s\n", dlerror());

+        return -1;

+    }

+

+    poweralarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "poweralarm");

+    if(poweralarm == NULL)

+    {

+        printf("poweralarm is null\n");

+        return -1;

+    }

+

+   wakealarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "wakealarm");

+    if(wakealarm == NULL)

+    {

+        printf("wakealarm is null\n");

+        return -1;

+    }

+    lynq_set_poweralarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_poweralarm");

+    if(lynq_set_poweralarm == NULL)

+    {

+        printf("lynq_set_poweralarm is null\n");

+        return -1;

+    }

+    lynq_set_wakealarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_wakealarm");

+    if(lynq_set_wakealarm == NULL)

+    {

+        printf("lynq_set_wakealarm is null\n");

+        return -1;

+    }

+    

+    cancel_wakealarm = (int (*)())dlsym(dlHandle_poweralarm, "cancel_wakealarm");

+     if(cancel_wakealarm == NULL)

+    {

+        printf("cancel_wakealarm is null\n");

+        return -1;

+    }

+    print_help();

+    while(1)

+    {

+        printf("\nplease input cmd index(-1 exit): ");

+        scanf("%d", &cmdIdx);

+        if(cmdIdx == -1)

+        {

+            break;

+        }

+        switch(cmdIdx)

+        {   

+            case 0:

+                print_help();

+                break;

+            case 1:

+                {

+                    int ret = 0;

+                    char tmp_time[32] = {0};

+                    printf("Set poweralarm time,e.g: 60 (seconds)\n");

+                    scanf("%s",tmp_time);

+                    ret = poweralarm(tmp_time);

+                    if(ret != 0)

+                    {

+                        printf("set poweralarm failed\n");

+                        return -1;

+                    }

+                break;

+                }

+            case 2:

+                {

+                    int ret = 0;

+                    char tmp_time[32]={0};

+                    printf("Set wakealarm time ,e.g: 60 (seconds)\n");

+                    scanf("%s",tmp_time);

+                    ret = wakealarm(tmp_time);

+                    if(ret != 0)

+                    {

+                        printf("set poweralarm failed\n");

+                        return -1;

+                    }

+                    break;

+                }

+             case 3:

+                {

+                    int ret = 0;

+                    ret = cancel_wakealarm();

+                    if(ret != 0)

+                    {

+                        printf("Cancel_wakealarm failed!!!");

+                        return -1;

+                    }

+                    break;

+                }

+             case 4:

+                { 

+                   int ret = 0; 

+                   unsigned long time_sec = 0;

+                   printf("Input time_sec you want poweralarm,e.g:60 (seconds)\n");

+                   scanf("%lu",&time_sec);

+                   ret =lynq_set_poweralarm(time_sec);

+                   if(ret != 0)

+                   {

+                        printf("lynq_set_poweralarm failed\n");

+                        return -1;

+                   }

+

+                }

+            case 5:

+                { 

+                   int ret = 0; 

+                   unsigned long time_sec = 0;

+                   printf("Input time_sec you want poweralarm,e.g:60 (seconds)\n");

+                   scanf("%lu",&time_sec);

+                   ret =lynq_set_wakealarm(time_sec);

+                   if(ret != 0)

+                   {

+                        printf("lynq_set_wakealarm failed\n");

+                        return -1;

+                   }

+               }

+                

+            default:

+                break;

+        }

+    }

+    return 0;

+

+}

+

diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/poweralarm-demo.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/poweralarm-demo.bb
new file mode 100644
index 0000000..978dd0b
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/poweralarm-demo.bb
@@ -0,0 +1,33 @@
+# Package summary
+SUMMARY = "poweralarm-demo"
+# License, for example MIT
+LICENSE = "MIT"
+# License checksum file is always required
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+		  
+SRC_URI = " file://poweralarm-demo.cpp"
+
+SRC-DIR = "${S}/../poweralarm-demo"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'TARGET_PLATFORM = ${TARGET_PLATFORM}'\"
+EXTRA_OEMAKE += "'MOBILETEK_RIL_CFG = ${MOBILETEK_RIL_CFG}'"
+
+LOCAL_C_INCLUDES = "-I."
+
+LOCAL_LIBS = "-L. -ldl -lstdc++"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+S = "${WORKDIR}"
+
+#INHIBIT_PACKAGE_STRIP = "1"
+do_compile () {
+
+	${CXX} -Wall poweralarm-demo.cpp ${LOCAL_LIBS} ${LOCAL_C_INCLUDES} -o poweralarm-demo
+}
+
+do_install() {
+	install -d ${D}${bindir}/
+	install -m 0755 ${S}/poweralarm-demo ${D}${bindir}/
+}
diff --git a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
index ce51bab..324925d 100755
--- a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
+++ b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
@@ -1973,13 +1973,14 @@
 # CONFIG_ZX_TDM is not set
 CONFIG_SND_SOC_SANECHIPS=y
 # CONFIG_SND_SOC_ZX29_TI3100 is not set
-CONFIG_SND_SOC_ZX29_NAU8810=y
+# CONFIG_SND_SOC_ZX29_NAU8810 is not set
 # CONFIG_SND_SOC_ZX29_TI3104 is not set
 # CONFIG_SND_SOC_ZX29_ES8374 is not set
 # CONFIG_SND_SOC_ZX29_ES8312 is not set
 # CONFIG_SND_SOC_ZX29_AK4940 is not set
 # CONFIG_SND_SOC_ZX29_MAX9867 is not set
 # CONFIG_SND_SOC_ZX29_ES8311 is not set
+CONFIG_SND_SOC_ZX29_ES8311=y
 CONFIG_SND_SOC_ZX_VOICE=y
 CONFIG_SND_SOC_ZX297520V3=y
 CONFIG_SND_SOC_ZX_I2S=y
@@ -1989,6 +1990,7 @@
 # CONFIG_SND_SOC_TLV320AIC3X is not set
 # CONFIG_SND_SOC_MAX9867 is not set
 # CONFIG_SND_SOC_ES8311 is not set
+CONFIG_SND_SOC_ES8311=y
 CONFIG_SND_EXTRA_CTRL=y
 CONFIG_USE_TOP_I2S0=y
 # CONFIG_USE_TOP_I2S1 is not set
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/data/data.cpp b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/data/data.cpp
index b8990d2..673960a 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/data/data.cpp
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/data/data.cpp
@@ -985,6 +985,7 @@
     const char *authtype = argv[5];
     const char *pdp_type = argv[6];
     const char *optional_property = "";
+    const char *normal_pdp = "2";
 
     android::Parcel p;
     size_t pos = p.dataPosition();
@@ -997,7 +998,16 @@
     writeStringToParcel(p,password);
     writeStringToParcel(p,authtype);
     writeStringToParcel(p,pdp_type);//protocol == (ZXW)pdp_type
-    writeStringToParcel(p, optional_property);
+    if(strcmp(apn, "default") == 0)
+    {
+        writeStringToParcel(p, normal_pdp);//((const char **)data)[7] set "2",use normal_pdp datacall
+        RLOGD("setupDataCallargc:It is normal pdp data call");
+    }
+    else
+    {
+        writeStringToParcel(p, optional_property);
+        RLOGD("setupDataCallargc:It is not normal pdp data call");
+    }
     p.setDataPosition(pos);
 
     RLOGD("setupDataCallargc: \nradioTechnoloy: %s\nprofileId: %s\napn: %s\n \
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
index bee6e5e..9525e75 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -808,7 +808,6 @@
        return LYNQ_E_CONFLICT;

     }      

     lynq_call_hungup_all();  

-    lynq_set_voice_audio_mode(AUDIO_MODE_CODEC);

     g_module_init_flag = MODULE_SWITCHING;

     lynq_close_all_urc_socket_thread();

     lynq_close_all_rc_socket_thread();    

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
index eb566f4..f35562b 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -958,7 +958,7 @@
     //xf.li@20230610 add for T106 data start
     #ifdef MOBILETEK_TARGET_PLATFORM_T106
     LYINFLOG("[%s][%d] call lynq_setup_data_call_sp",__FUNCTION__,__LINE__);
-    error = lynq_setup_data_call_sp_t106(handle,NULL,"iot_default",NULL,NULL,NULL,NULL,NULL);
+    error = lynq_setup_data_call_sp_t106(handle,"default","iot_default",NULL,NULL,NULL,NULL,NULL);
     return error;
     #else
     //xf.li@20230610 add for T106 data end
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
index 8cb0da3..f017ef6 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
@@ -141,9 +141,14 @@
         node_num++;
         sum_node = sum_node->next;
     }
+    LYINFLOG("apn_num = %d ",node_num);
+    if(node_num >= QSER_APN_MAX_LIST)
+    {
+        LYERRLOG("apn num reached the max");
+        goto FAILED;
+    }
     tmp_node = xmlNewNode(NULL,BAD_CAST"apn");
     *apn_num = node_num;
-    LYERRLOG("apn_num%d ",node_num);
     bzero(temp_buff,12);
     snprintf(temp_buff,sizeof(temp_buff),"%d",*apn_num);
     xmlNewProp(tmp_node,BAD_CAST"profile_idx",(xmlChar *)temp_buff);
@@ -873,4 +878,4 @@
         return ret;
     }
     return ret;
-}
\ No newline at end of file
+}
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
index 735f350..9baced7 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-fota/lynq-qser-fota.cpp
@@ -41,6 +41,15 @@
 #define UNBOOTABLE "47806"

 

 

+#define    LYNQ_UPGRADE_STATUS_VERIFING            (0)

+#define    LYNQ_UPGRADE_STATUS_VERIFY_SUCCESS      (1)

+#define    LYNQ_UPGRADE_STATUS_VERIFY_FAIL         (2)

+#define    LYNQ_UPGRADE_STATUS_UPDATING            (3)

+#define    LYNQ_UPGRADE_STATUS_UPDATE_SUCCESS      (4)

+#define    LYNQ_UPGRADE_STATUS_UPDATE_FAIL         (5)

+

+

+

 typedef struct

 {

     int system;

@@ -130,7 +139,7 @@
     }

 

     ret = lynq_get_upgrade_status();

-    if(ret != 0)

+    if(ret != LYNQ_UPGRADE_STATUS_UPDATE_SUCCESS)

     {

         LYINFLOG("Upgrade failed ");

         return -1;

@@ -483,13 +492,8 @@
     LYINFLOG("Current upgrade status:%d ", status.upgrade_status);

     LYINFLOG("Current upgrade total size:%d ", status.total_size);

     LYINFLOG("Current upgrade updated size:%d ", status.upgraded_size);

-    if(status.upgrade_status != 4)

-    {

-        LYINFLOG("Upgrade failed");

-        return -1;

-    }

-    

-    return 0;

+

+    return status.upgrade_status;

 

 }

 

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
index 118ebe0..eb7002c 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/mbtk_gnss_internal.h
@@ -136,9 +136,9 @@
 
 typedef enum
 {
-    E_MT_LOC_MSG_ID_LOCATION_INFO,          /**<  pv_data = &QL_LOC_LOCATION_INFO_T  */
-    E_MT_LOC_MSG_ID_NMEA_INFO,              /**<  pv_data = &QL_LOC_NMEA_INFO_T  */
-}e_msg_id_t;
+    E_MT_LOC_MSG_ID_LOCATION_INFO = 1,          /**<  pv_data = &QL_LOC_LOCATION_INFO_T  */
+    E_MT_LOC_MSG_ID_NMEA_INFO = 3,              /**<  pv_data = &QL_LOC_NMEA_INFO_T  */
+}e_msg_id_t;  //0,2reserve
 
 #define     QL_LOC_MAX_SEVER_ADDR_LENGTH    255 /**  Maximum generic server address length for the host name. */
 typedef struct 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
index b90ff63..c2f3056 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/mbtk_gnss.cpp
@@ -144,7 +144,6 @@
             (n[1] = strstr_n(&data[n[0]], "*")) &&
             (n[1] > 1)) {
         memcpy(out_data, &data[n[0]], n[1] - 1);
-        printf("%s\n",out_data);
     } else {
         gnss_log("%s %d : error [%d]\n" , __func__, __LINE__, n[1]);
         gnss_log("error: [%d] %s\n", num, data);
@@ -659,15 +658,12 @@
         size_to_wr = buf_len - size;
         if( size_to_wr > MBTK_UART_SEND_BUFFER_MAX)
             size_to_wr = MBTK_UART_SEND_BUFFER_MAX;
-        printf("write 0\n");
         size_written = write(fd, &buf[size], size_to_wr);
-        printf("write 1\n");
         if (size_written==-1)
         {
             return -1;
         }
         printf("send cmd: %s\n", &buf[size]);
-        printf("%d\n",fd);
         size += size_written;
         if(size_written != size_to_wr)
         {
@@ -742,7 +738,6 @@
     {
         while(mbtk_gnss_handle->getap_status){
             // 在读AP_DATA星历时,不能输出NMEA
-            printf("g");
             usleep(100000);
         }
         if(nmea_state == 1)
@@ -751,7 +746,7 @@
             ret = mopen_gnss_read(gnss_handle->dev_fd, buf, MBTK_UART_RECV_BUFFER_SIZE);
             nmea_reading = 0;
             if(ret > 0) {
-                printf("read: [%d] %s\n", ret, buf);
+                printf("%s\n",buf);
                 ring_buffer_queue_arr(&gnss_handle->ring_buffer, buf, ret);
                 memset(buf, 0, sizeof(buf));
             } else {
@@ -934,7 +929,6 @@
         goto err;
     } else if (B9600 == ret) {
         ret = mopen_uart_change(mbtk_gnss_handle->dev_fd, 1);
-        printf("1\n");
         if(ret)
         {
             printf("GNSS Uart set B115200 error\n");
@@ -1086,7 +1080,6 @@
     }
 
     ret = lynq_gnss_send_cmd(h_gnss, send_buf, strlen(send_buf));
-    printf("%s \n",h_gnss);
     if(ret < 0)
     {
         printf("%s FAIL. ret:%d\n", __FUNCTION__, ret);
@@ -1158,16 +1151,13 @@
         printf("%s handler invalid.\n", __func__);
         return -1;
     }
-    printf("ant 0\n");
     ret = lynq_gnss_send_cmd(h_gnss, cmd1_buf, strlen(cmd1_buf));
-    printf("ant 1\n");
     if(ret < 0)
     {
         gnss_log("%s FAIL. ret:%d\n", __func__, ret);
         return -1;
     }
     ret = lynq_gnss_send_cmd(h_gnss, cmd2_buf, strlen(cmd2_buf));
-    printf("ant 2\n");
     if(ret < 0)
     {
         gnss_log("%s FAIL. ret:%d\n", __func__, ret);
@@ -1204,7 +1194,6 @@
         return -1;
     }
     gnss_handle->gnss_handler_func = handler_ptr;
-    printf("okok\n");
     return 0;
 }
 
@@ -1277,7 +1266,6 @@
     {
         if(fgets(buffer, 256, pipe))
         {
-            printf("%s", buffer);
             memset(buffer, 0, sizeof(buffer));
         }
     }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/LICENSE b/cap/zx297520v3/src/lynq/lib/liblynq-systime/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/include/lynq_systime.h b/cap/zx297520v3/src/lynq/lib/liblynq-systime/include/lynq_systime.h
new file mode 100755
index 0000000..001edda
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/include/lynq_systime.h
@@ -0,0 +1,123 @@
+/**@file lynq-systime.h

+ *

+ * @brief Sync systime form each time source.

+ *

+ * @author sj.zhang

+ *

+ * @date 2023-08-14

+ *

+ * @version V1.0

+ *

+ * @copyright Copyright (c) MobileTek

+ */

+#include <stdio.h>

+#include <string.h>

+#include <stdlib.h>

+#include <time.h>

+#include <include/lynq_uci.h>

+

+#ifndef _LYNQ_SYSTIME_H_

+#define _LYNQ_SYSTIME_H_

+

+#ifdef __cplusplus

+extern "C"

+{

+#endif

+

+typedef struct time_source_status

+{

+    int ntp;

+    int nitz;

+    int gnss;

+}time_src_status_s;

+

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+

+    /**@brief Set the rtc time to the system time.

+     *

+     * @param void

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int lynq_sync_time_from_rtc(void);

+

+    /**@brief Set the system time to the rtc time.

+     *

+     * @param void

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int lynq_set_rtc_time(void);

+

+    /**@brief Query the rtc time.

+     *

+     * @param [OUT] ulsec: rtc time, secconds from 1900.1.1 00:00

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int lynq_get_rtc_time(unsigned long *ulsec);

+#endif

+

+    /**@brief Query the time source status now.

+     *

+     * @param [OUT] ntp, nitz, gnss:

+     *        0: disable

+     *        1: enable

+     *

+     * @return

+     *      0 : success

+     *      other:failure

+     */

+    int lynq_get_time_src_status(time_src_status_s *time_src);

+

+    /**@brief Turn sntp on/off

+     *

+     * @param enable [IN] : 0  disenable; 1 enable;

+     *

+     * @return

+     *    0 set success

+     *    1 SNTP_DISENABLE

+     *    2 SNTP_ALREADY_ENABLE

+     */

+    int ntp_sync_time(int enable);

+

+    /**@brief Enable/Disenable sync time from NITZ.

+     *

+     * @param enable [IN] : 0  disenable; 1 enable;

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int modem_time_enable(int enable);

+

+    /**@brief Enable/Disenable sync time from GNSS.

+     *

+     * @param enable [IN] : 0  disenable; 1 enable;

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int gnss_time_enable(int enable);

+

+    /**@brief User set systime manually.

+     *

+     * @param enable [IN] : 0  disenable; 1 enable;

+     *

+     * @return

+     *      0:success

+     *      other:failure

+     */

+    int user_set_time(char *date, char *time);

+

+#ifdef __cplusplus

+}

+#endif

+#endif

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp
new file mode 100755
index 0000000..6b7351b
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/lynq_systime.cpp
@@ -0,0 +1,382 @@
+/**@file lynq-systime.cpp

+ *

+ * @brief Sync systime form different time source.

+ *

+ * @author sj.zhang

+ *

+ * @date 2023-08-15

+ *

+ * @version V1.0

+ *

+ * @copyright Copyright (c) MobileTek

+ */

+#include <stdio.h>

+#include <string.h>

+#include <stdlib.h>

+#include <time.h>

+#include <unistd.h>

+#include <include/lynq_uci.h>

+#include "liblog/lynq_deflog.h"

+#include "lynq_systime.h"

+

+#ifdef __cplusplus

+extern "C"

+{

+#endif

+

+#define USER_LOG_TAG "LYNQ_SYSTIME"

+#define LOG_LEVEL 4

+

+#define LYNQ_SYNC_TIME_SECTION "lynq_sync_time"

+#define LYNQ_MODEM_TIME_KEY "lynq_modem_sync_time_enable"

+#define LYNQ_GNSS_TIME_KEY "lynq_gnss_sync_time_enable"

+#define BUF_LEN 258

+#define TIME_BUF 100

+#define SYNC_TIME_SUCCESS 0

+#define NTP_ALREADY_ENABLE 1

+#define NTP_ALREADY_DISABLE 2

+

+#define OPEN_ERROR 7

+#define ERROR_PARA 8

+

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+#define NTP_RESTART_BUF "/etc/init.d/sntp restart"

+#define NTP_STOP_BUF "/etc/init.d/sntp stop"

+#define NTP_START_BUF "/etc/init.d/sntp start"

+#define PGREP_NTP_DARMON "pgrep -x /usr/bin/sntp"

+#define SET_RTC() lynq_set_rtc_time()

+#else

+#define NTP_RESTART_BUF "systemctl restart ntpd"

+#define NTP_STOP_BUF "systemctl stop ntpd"

+#define NTP_START_BUF "systemctl start ntpd"

+#define PGREP_NTP_DARMON "pgrep ntpd"

+#define SET_RTC() system("hwclock -w -f /dev/rtc0")

+#endif

+

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+    typedef int (*sc_rtc_time_get_cb)(unsigned int src_id, unsigned long ulsec);

+extern int sc_rtc_timer_init(void);

+extern int sc_rtc_timer_uninit(void);

+extern int sc_rtc_time_set(int srcid);

+extern int sc_rtc_time_get(int srcid, sc_rtc_time_get_cb rtc_notify);

+

+char sync_from_rtc_cb_flag = 1;

+char rtc_time_get_cb_flag = 1;

+static unsigned long s_rtc_sec = 0;

+

+static int sync_from_rtc_cb(unsigned int src_id, unsigned long ulsec)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    sync_from_rtc_cb_flag = 1;

+    struct tm rtc_time = {0};

+    time_t tmp = 0;

+    char command[100] = "";

+    tmp = (time_t)ulsec;

+    rtc_time = *localtime(&tmp);

+

+    LYINFLOG("RTC time now is: %d-%d-%d,%d:%d:%d\n",

+             rtc_time.tm_year + 1900, rtc_time.tm_mon + 1, rtc_time.tm_mday, rtc_time.tm_hour, rtc_time.tm_min, rtc_time.tm_sec);

+    snprintf(command, sizeof(command), "date --set=\'@%lu\' ", ulsec);

+    system(command);

+    sync_from_rtc_cb_flag = 0;

+    return 0;

+}

+

+static int rtc_time_get_cb(unsigned int src_id, unsigned long ulsec)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    rtc_time_get_cb_flag = 1;

+    s_rtc_sec = ulsec;

+    struct tm rtc_time = {0};

+    time_t tmp = 0;

+    tmp = (time_t)ulsec;

+    rtc_time = *localtime(&tmp);

+    LYINFLOG("RTC time now is: %d-%d-%d,%d:%d:%d\n",

+             rtc_time.tm_year + 1900, rtc_time.tm_mon + 1, rtc_time.tm_mday, rtc_time.tm_hour, rtc_time.tm_min, rtc_time.tm_sec);

+    rtc_time_get_cb_flag = 0;

+    return 0;

+}

+

+int lynq_sync_time_from_rtc(void)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    int ret = -1;

+    int srcid = -1;

+    int i = 0;

+    if ((srcid = sc_rtc_timer_init()) <= 0)

+    {

+        LYERRLOG("rtc_timer_demo:rtc_timer_init fail!\n");

+        return -1;

+    }

+    ret = sc_rtc_time_get(srcid, sync_from_rtc_cb);

+    if (ret != 0)

+    {

+        LYERRLOG("sc_rtc_time_get failed !\n");

+        sc_rtc_timer_uninit();

+        return -1;

+    }

+

+    // Wait for the callback function to finish executing. But 5 seconds tops.

+    for (i = 25; i > 0; i--)

+    {

+        if (sync_from_rtc_cb_flag == 0)

+            break;

+        usleep(200000);

+    }

+

+    if (sync_from_rtc_cb_flag != 0)

+    {

+        LYERRLOG("rtc_get_time_cb failed\n");

+        sc_rtc_timer_uninit();

+        return -1;

+    }

+    LYINFLOG("sync from rtc success\n");

+    ret = sc_rtc_timer_uninit();

+    if (0 != ret)

+    {

+        LYERRLOG("uninit failed \n");

+        return -1;

+    }

+    return 0;

+}

+

+int lynq_set_rtc_time(void)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    int ret = -1;

+    int srcid = -1;

+    if ((srcid = sc_rtc_timer_init()) <= 0)

+    {

+        LYERRLOG("rtc_timer_demo:rtc_timer_init fail!\n");

+        return -1;

+    }

+    ret = sc_rtc_time_set(srcid);

+    if (ret != 0)

+    {

+        LYERRLOG("sc_rtc_time_set failed !\n");

+        return -1;

+    }

+    ret = sc_rtc_timer_uninit();

+    if (0 != ret)

+    {

+        LYERRLOG("uninit failed \n");

+        return -1;

+    }

+    return 0;

+}

+

+int lynq_get_rtc_time(unsigned long *ulsec)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    int ret = -1;

+    int srcid = -1;

+    int i = 0;

+    if (NULL == ulsec)

+    {

+        LYERRLOG("NULL parameter!\n");

+        return ERROR_PARA;

+    }

+    if ((srcid = sc_rtc_timer_init()) <= 0)

+    {

+        LYERRLOG("rtc_timer_demo:rtc_timer_init fail!\n");

+        return -1;

+    }

+    ret = sc_rtc_time_get(srcid, rtc_time_get_cb);

+    if (ret != 0)

+    {

+        LYERRLOG("sc_rtc_time_get failed !\n");

+        sc_rtc_timer_uninit();

+        return -1;

+    }

+

+    // Wait for the callback function to finish executing. But 5 seconds tops.

+    for (i = 25; i > 0; i--)

+    {

+        if (rtc_time_get_cb_flag == 0)

+            break;

+        usleep(200000);

+    }

+    if (rtc_time_get_cb_flag != 0)

+    {

+        LYERRLOG("rtc_get_time_cb failed\n");

+        sc_rtc_timer_uninit();

+        return -1;

+    }

+    *ulsec = s_rtc_sec;

+    ret = sc_rtc_timer_uninit();

+    if (0 != ret)

+    {

+        LYERRLOG("uninit failed \n");

+        return -1;

+    }

+    return 0;

+}

+#endif

+

+int lynq_get_time_src_status(time_src_status_s *time_src)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    char nitz_enable[8] = "";

+    char gnss_enable[8] = "";

+    char buf[BUF_LEN] = "";

+    if (NULL == time_src)

+    {

+        LYERRLOG("NULL parameter!\n");

+        return ERROR_PARA;

+    }

+    // get ntp status.

+    int ret = system(PGREP_NTP_DARMON);

+    if (0 == ret)

+    {

+        time_src->ntp = 1;

+    }

+    else

+    {

+        time_src->ntp = 0;

+    }

+

+    // get nitz status

+    sprintf(buf, "%s.%s.%s", LYNQ_UCI_FILE, LYNQ_SYNC_TIME_SECTION, LYNQ_MODEM_TIME_KEY);

+    lynq_uci_get(buf, nitz_enable);

+    time_src->nitz = atoi(nitz_enable);

+

+    // get gnss status

+    sprintf(buf, "%s.%s.%s", LYNQ_UCI_FILE, LYNQ_SYNC_TIME_SECTION, LYNQ_GNSS_TIME_KEY);

+    lynq_uci_get(buf, gnss_enable);

+    time_src->gnss = atoi(gnss_enable);

+

+    return 0;

+}

+

+const char *lynq_read_version()

+{

+    return "SYSTIME_V1.0";

+}

+

+int user_set_time(char *date, char *time)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    char cmd_buf[TIME_BUF] = "";

+    if (NULL == date || NULL == time)

+    {

+        LYERRLOG("NULL parameter!\n");

+        return ERROR_PARA;

+    }

+

+    // set systime

+    snprintf(cmd_buf, sizeof(cmd_buf), "date -s %s+%s", date, time);

+    system(cmd_buf);

+

+    // set RTC by macrofunction

+    SET_RTC();

+    return 0;

+}

+

+int ntp_sync_time(int enable)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    if (enable != 0 && enable != 1)

+    {

+        LYERRLOG("Parameter error! Only 0/1 allowed.\n");

+        return ERROR_PARA;

+    }

+    int ret = system(PGREP_NTP_DARMON);

+    if (0 == ret)

+    {

+        if (enable)

+        {

+            system(NTP_RESTART_BUF);

+            return NTP_ALREADY_ENABLE;

+        }

+        else

+        {

+            system(NTP_STOP_BUF);

+            return SYNC_TIME_SUCCESS;

+        }

+    }

+    else

+    {

+        if (enable)

+        {

+            // Only one time source is allowed to run simultaneously.

+            modem_time_enable(0);

+            gnss_time_enable(0);

+            system(NTP_START_BUF);

+            return SYNC_TIME_SUCCESS;

+        }

+        else

+        {

+            return NTP_ALREADY_DISABLE;

+        }

+    }

+}

+

+int modem_time_enable(int enable)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    char buf[BUF_LEN] = "";

+    int ret = 0;

+    if (enable != 0 && enable != 1)

+    {

+        LYERRLOG("Parameter error! Only 0/1 allowed.\n");

+        return ERROR_PARA;

+    }

+    if (enable)

+    {

+        // Only one time source is allowed to run simultaneously.

+        ntp_sync_time(0);

+        gnss_time_enable(0);

+    }

+    sprintf(buf, "%s.%s.%s=%d", LYNQ_UCI_FILE, LYNQ_SYNC_TIME_SECTION, LYNQ_MODEM_TIME_KEY, enable);

+    ret = lynq_uci_set(buf);

+    if (ret == 4)

+        ret = 0;

+    return ret;

+}

+

+int gnss_time_enable(int enable)

+{

+    LYLOGSET(LOG_LEVEL);

+    LYLOGEINIT(USER_LOG_TAG);

+    LYDBGLOG("[%s][%d] enter.\n", __FUNCTION__, __LINE__);

+    char buf[BUF_LEN] = "";

+    int ret = 0;

+    if (enable != 0 && enable != 1)

+    {

+        LYERRLOG("Parameter error! Only 0/1 allowed.\n");

+        return ERROR_PARA;

+    }

+    if (enable)

+    {

+        // Only one time source is allowed to run simultaneously.

+        ntp_sync_time(0);

+        modem_time_enable(0);

+    }

+    sprintf(buf, "%s.%s.%s=%d", LYNQ_UCI_FILE, LYNQ_SYNC_TIME_SECTION, LYNQ_GNSS_TIME_KEY, enable);

+    ret = lynq_uci_set(buf);

+    if (ret == 4)

+        ret = 0;

+    return ret;

+}

+

+#ifdef __cplusplus

+}

+#endif

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile
new file mode 100755
index 0000000..758315f
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-systime/makefile
@@ -0,0 +1,75 @@
+SHELL = /bin/sh

+RM = rm -f

+

+LOCAL_CFLAGS := -Wall \

+                -std=gnu++14 \

+                -g -Os \

+                -flto \

+                -fPIC \

+                -fpermissive \

+

+ifeq ($(strip $(TARGET_PLATFORM)), T106)

+LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0 

+endif

+

+ifeq ($(strip $(TARGET_PLATFORM)), T106)

+LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T106

+endif

+

+LOCAL_CFLAGS += $(CFLAGS)

+$(warning ################# rock ROOT: $(ROOT),includedir:$(includedir),)

+

+LOCAL_PATH   = .

+

+LOCAL_C_INCLUDES = \

+  -I. \

+  -I$(LOCAL_PATH)/include \

+  -I$(ROOT)$(includedir)/logger \

+  -I$(ROOT)$(includedir)/liblog \

+  -I$(ROOT)$(includedir) \

+

+

+LOCAL_LIBS := \

+    -L. \

+    -ldl \

+    -lstdc++ \

+    -lpthread \

+    -lsctel \

+    -llynq-uci \

+    -llynq-log \

+

+

+SOURCES = $(wildcard *.cpp)

+

+EXECUTABLE = liblynq-systime.so

+

+OBJECTS=$(SOURCES:.cpp=.o)

+

+.PHONY: build clean install pack_rootfs 

+

+all: build

+$(EXECUTABLE): $(OBJECTS)

+	$(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@

+

+%.o : %.cpp

+	$(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $< 

+

+build:  $(EXECUTABLE)

+	$(warning ########## build $(EXECUTABLE)  ##########)

+

+install:

+	mkdir -p $(ROOT)$(base_libdir)/

+	install $(EXECUTABLE) $(ROOT)$(base_libdir)/

+	mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk

+

+pack_rootfs:

+	mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/

+	cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/

+	$(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)

+	mkdir -p $(PACK_TO)$(base_libdir)/

+	cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/

+	$(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)

+.PHONY: clean

+clean:

+	$(RM) $(OBJECTS) $(EXECUTABLE)

+

diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
index 3ac501d..f77fd37 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -9,7 +9,8 @@
         option gateway '192.168.11.1'

 

 config  lynq_sync_time_rw  'lynq_sync_time'

-

+        option lynq_modem_sync_time_enable '0'

+        option lynq_gnss_sync_time_enable '0'

 config  lynq_autosuspend  'lynq_autosuspend'

         option auto_enable '0'

         option debug '1'

diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/LICENSE b/cap/zx297520v3/src/lynq/lib/libpoweralarm/LICENSE
new file mode 100644
index 0000000..7ac229e
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to Mobiletek Inc. and/or its licensors. Without
+the prior written permission of Mobiletek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+Mobiletek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("Mobiletek SOFTWARE")
+RECEIVED FROM MOBILETEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MOBILETEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MOBILETEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MOBILETEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MOBILETEK
+SOFTWARE. MOBILETEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MOBILETEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MOBILETEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MOBILETEK'S OPTION, TO REVISE OR REPLACE THE
+MOBILETEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MOBILETEK FOR SUCH MOBILETEK SOFTWARE AT ISSUE.
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
new file mode 100755
index 0000000..54191a6
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
@@ -0,0 +1,30 @@
+/*******************************************************

+* 

+* @brief:   none

+* @details:  add libpoweralarm api

+* @author:   l.yang

+* @date:     2023.8.21

+* @version:  V1.0

+* @copyright:Copyright (c) MobileTek 

+*

+*********************************************/

+

+#ifndef _LYNQ_POWERALARM_

+#define _LYNQ_POWERALARM_

+#ifdef __cplusplus

+    extern "C" {

+#endif

+

+ssize_t poweralarm(char * buffer);

+ssize_t wakealarm(char *buffer);

+ssize_t cancel_wakealarm(void);

+int lynq_set_wakealarm(unsigned long  time_sec);

+int lynq_set_poweralarm(unsigned long time_sec);

+

+

+#ifdef __cplusplus

+}

+#endif

+#endif

+

+

diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
new file mode 100755
index 0000000..945e0a4
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
@@ -0,0 +1,274 @@
+/*******************************************************

+* 

+* @brief:    none

+* @details:      Add  wakealrm and poweralarm api code 

+* @author:    l.yang

+* @date:    2023.8.17

+* @version:    V1.0

+* @copyright:    Copyright (c) MobileTek 

+*

+*********************************************/

+

+#include<stdio.h>

+#include<stdlib.h>

+#include<unistd.h>

+#include<stdbool.h>

+#include<log/log.h>

+#include "liblog/lynq_deflog.h"

+#include <include/libpoweralarm.h>

+#include <pthread.h>

+

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+#define USER_LOG_TAG "LYNQ_POWERALARM"

+

+

+static int wk_rtc_id = 1;

+static int pw_rtc_id = 2;

+static int wk_srcid = 0;

+

+typedef int (*sc_rtc_timer_exp_cb)(unsigned int src_id, int rtc_id);

+extern int sc_rtc_timer_init(void);

+extern int sc_rtc_timer_uninit(void );

+extern int sc_rtc_timer_add(int srcid, int rtc_id, unsigned long ulSec, sc_rtc_timer_exp_cb rtc_notify);

+extern int sc_rtc_timer_del(int srcid, int rtc_id);

+

+

+

+/*****************************************

+* @brief:sc_rtc_timer_add_cb

+* @param count [IN]:src_id, rtc_id,

+* @param sum [OUT]:NA

+* @return :0

+* @todo:

+* @see:NA

+* @warning:

+******************************************/

+int sc_rtc_timer_add_cb(unsigned int src_id, int rtc_id)

+{

+    return 0;

+}

+

+

+/*****************************************

+* @brief:Set wakealarm time

+* @param count [IN]:buffer,

+* @param sum [OUT]:NA

+* @return :success 0, failed -1

+* @todo:

+* @see:NA

+* @warning:

+******************************************/

+ssize_t wakealarm(char *buffer)

+{

+    unsigned long  time_sec = 0;

+    int ret = 0;

+    

+    LYLOGSET(LOG_INFO);

+    LYLOGEINIT(USER_LOG_TAG);

+    

+    if(buffer == NULL)

+    {

+        LYINFLOG("Bad input parameter,exit!!!!");

+        return -1;

+    }

+

+    time_sec = atoll(buffer);

+    

+    LYINFLOG("Set  wakealarm   %lu seconds ",time_sec);

+    wk_srcid = sc_rtc_timer_init();

+    if (wk_srcid <= 0)

+    {

+        LYINFLOG("rtc_timer_init fail!");

+        return -1;

+    }

+    ret = sc_rtc_timer_add(wk_srcid, wk_rtc_id, time_sec, sc_rtc_timer_add_cb);

+    if(ret < 0)

+    {

+        LYINFLOG("Add  rtc timer failed!!!!");

+        return -1;

+    }

+    

+    LYINFLOG("Set wakealarm success !!!");

+

+    ret = sc_rtc_timer_uninit();

+    if(ret != 0)

+    {

+        LYINFLOG("Deinit failed");

+    }

+    

+    return 0;

+

+}

+

+

+/*****************************************

+* @brief:set poweralarm time 

+* @param count [IN]:buffer,

+* @param sum [OUT]:NA

+* @return :success 0, failed -1

+* @todo:

+* @see:NA

+* @warning:

+******************************************/

+ssize_t poweralarm(char *buffer)

+{

+    int srcid = 0;

+    unsigned long  time_sec = 0;

+    int ret = 0;

+    

+    LYLOGSET(LOG_INFO);

+    LYLOGEINIT(USER_LOG_TAG);

+    

+    if(buffer == NULL)

+    {

+        LYINFLOG("Bad input parameter,exit!!!!");

+        return -1;

+    }

+

+    time_sec = atoll(buffer);

+    

+    LYINFLOG("Set poweralarm %lu seconds",time_sec);

+    srcid = sc_rtc_timer_init();

+    if (srcid <= 0)

+    {

+        LYINFLOG("rtc_timer_init fail!");

+        return -1;

+    }

+    ret = sc_rtc_timer_add(srcid, pw_rtc_id, time_sec, sc_rtc_timer_add_cb);

+    if(ret < 0)

+    {

+        LYINFLOG("Add  rtc timer failed!!!!");

+        return -1;

+    }

+    

+    LYINFLOG("Set poweralarm success !!!");

+

+    ret = sc_rtc_timer_uninit();

+    if(ret != 0)

+    {

+        LYINFLOG("Deinit failed");

+    }

+    

+    return 0;

+

+}

+

+/**********************************************

+* @brief:cancel_wakealarm,

+* @param count [IN]:void

+* @param sum [OUT]:NA

+* @return :success 0, failed -1

+* @todo:

+* @see:NA

+* @warning:

+********************************************/

+ssize_t cancel_wakealarm(void)

+{

+    int ret = 0;

+

+    LYINFLOG("Enter cancel_wakealarm ");

+    ret = sc_rtc_timer_del(wk_srcid, wk_rtc_id);

+    if(ret < 0)

+    {

+        LYINFLOG("Del wakealarm failed!!!");

+        return -1;

+    }

+

+    return 0;

+    

+}

+

+

+/*****************************************

+* @brief:lynq_set_poweralarm

+* @param count [IN]:unsigned long time_sec

+* @param sum [OUT]:NA

+* @return :success 0, failed -1

+* @todo:

+* @see:NA

+* @warning:

+******************************************/

+int  lynq_set_poweralarm(unsigned long time_sec)

+{

+    LYLOGSET(LOG_INFO);

+    LYLOGEINIT(USER_LOG_TAG);

+    int ret = 0;

+    int srcid = 0;

+    LYINFLOG("lynq_set_poweralarm %lu seconds",time_sec);

+    srcid = sc_rtc_timer_init();

+    if (srcid <= 0)

+    {

+        LYINFLOG("rtc_timer_init fail!");

+        return -1;

+    }

+    ret = sc_rtc_timer_add(srcid, pw_rtc_id, time_sec, sc_rtc_timer_add_cb);

+    if(ret < 0)

+    {

+        LYINFLOG("Add  rtc timer failed!!!!");

+        return -1;

+    }

+    

+    LYINFLOG("Set poweralarm success !!!");

+

+    ret = sc_rtc_timer_uninit();

+    if(ret != 0)

+    {

+        LYINFLOG("Deinit failed");

+    }

+    

+    return 0;

+

+}

+

+

+/*****************************************

+* @brief:lynq_set_wakealarm

+* @param count [IN]:unsigned long  time_sec

+* @param sum [OUT]:NA

+* @return :success 0, failed -1

+* @todo:

+* @see:NA

+* @warning:

+******************************************/

+int lynq_set_wakealarm(unsigned long  time_sec)

+{

+    int ret = 0;

+    

+    LYLOGSET(LOG_INFO);

+    LYLOGEINIT(USER_LOG_TAG);

+    

+    LYINFLOG("lynq_set_wakealarm   %lu seconds ",time_sec);

+    wk_srcid = sc_rtc_timer_init();

+    if (wk_srcid <= 0)

+    {

+        LYINFLOG("rtc_timer_init fail!");

+        return -1;

+    }

+    ret = sc_rtc_timer_add(wk_srcid, wk_rtc_id, time_sec, sc_rtc_timer_add_cb);

+    if(ret < 0)

+    {

+        LYINFLOG("Add  rtc timer failed!!!!");

+        return -1;

+    }

+    

+    LYINFLOG("Set wakealarm success !!!");

+

+    ret = sc_rtc_timer_uninit();

+    if(ret != 0)

+    {

+        LYINFLOG("Deinit failed!!!");

+    }

+    

+    return 0;

+

+}

+

+

+#ifdef __cplusplus

+}

+#endif

+

diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/makefile b/cap/zx297520v3/src/lynq/lib/libpoweralarm/makefile
new file mode 100755
index 0000000..fc6916f
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/makefile
@@ -0,0 +1,75 @@
+SHELL = /bin/sh

+RM = rm -f

+

+LOCAL_CFLAGS := -Wall \

+                -std=gnu++14 \

+                -g -Os \

+                -flto \

+                -fPIC \

+                -fpermissive \

+    

+                

+ 

+ifeq ($(strip $(TARGET_PLATFORM)), T106)

+LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0

+endif

+

+

+$(warning ################# rock ROOT: $(ROOT),includedir:$(includedir),)

+

+LOCAL_PATH   = .

+

+LOCAL_C_INCLUDES = \

+  -I. \

+  -I$(LOCAL_PATH)/include \

+  -I$(ROOT)$(includedir)/logger \

+  -I$(ROOT)$(includedir)/liblog \

+  -I$(ROOT)$(includedir)/glib-2.0 \

+  -I$(ROOT)$(libdir)/glib-2.0/include \

+  -I$(ROOT)$(includedir)  \

+

+

+

+LOCAL_LIBS := \

+    -L. \

+    -ldl \

+    -lstdc++ \

+    -llynq-log \

+	-lsctel \

+

+

+SOURCES = $(wildcard *.cpp)

+

+EXECUTABLE = libpoweralarm.so

+

+OBJECTS=$(SOURCES:.cpp=.o)

+

+

+.PHONY: build clean install pack_rootfs 

+

+all: build

+$(EXECUTABLE): $(OBJECTS)

+	$(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@

+

+%.o : %.cpp

+	$(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $< 

+

+build:  $(EXECUTABLE)

+	$(warning ########## build $(EXECUTABLE)  ##########)

+

+install:

+	mkdir -p $(ROOT)$(base_libdir)/

+	install $(EXECUTABLE) $(ROOT)$(base_libdir)/

+	mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk

+

+pack_rootfs:

+	mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/

+	cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/

+	$(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)

+	mkdir -p $(PACK_TO)$(base_libdir)/

+	cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/

+	$(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)

+.PHONY: clean

+clean:

+	$(RM) $(OBJECTS) $(EXECUTABLE)

+

diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
index 126624c..a4be3e7 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
@@ -157,8 +157,8 @@
         return ret;

     }

 

-    memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE+1);

-    memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE+1);    

+    memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE);

+    memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);    

     

     ret = qser_data_call_start(&datacall, &err);

     printf("%s%d\n",TEST_RESULT,ret);

@@ -297,10 +297,10 @@
         printf("LYNQ_QSER_APN_SET: auth_proto input error\n");

         return ret;

     }

-    memcpy(apn.apn_name,argv[4],sizeof(argv[4]));

-    memcpy(apn.username,argv[5],sizeof(argv[5]));

-    memcpy(apn.password,argv[6],sizeof(argv[6]));

-    memcpy(apn.apn_type,argv[7],sizeof(argv[7]));

+    memcpy(apn.apn_name,argv[4],QSER_APN_NAME_SIZE);

+    memcpy(apn.username,argv[5],QSER_APN_USERNAME_SIZE);

+    memcpy(apn.password,argv[6],QSER_APN_PASSWORD_SIZE);

+    memcpy(apn.apn_type,argv[7],QSER_APN_NAME_SIZE);

     ret = qser_apn_set(&apn);

     printf("%s%d\n",TEST_RESULT,ret);

     return ret;

@@ -371,10 +371,12 @@
         printf("LYNQ_QSER_APN_ADD: auth_proto input error\n");

         return ret;

     }

-    memcpy(apn.apn_name,argv[3],sizeof(argv[3]));

-    memcpy(apn.username,argv[4],sizeof(argv[4]));

-    memcpy(apn.password,argv[5],sizeof(argv[5]));

-    memcpy(apn.apn_type,argv[6],sizeof(argv[6]));

+

+    memcpy(apn.apn_name,argv[3],QSER_APN_NAME_SIZE);

+    memcpy(apn.username,argv[4],QSER_APN_USERNAME_SIZE);

+    memcpy(apn.password,argv[5],QSER_APN_PASSWORD_SIZE);

+    memcpy(apn.apn_type,argv[6],QSER_APN_NAME_SIZE);

+

     printf("LYNQ_QSER_APN_ADD: ready to qser_apn_add\n");

     ret = qser_apn_add(&apn, &profile_idx_char);

     printf("%s%d,profile = %d\n",TEST_RESULT,ret,profile_idx_char);

diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/makefile b/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/makefile
deleted file mode 100755
index 7a6d23f..0000000
--- a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/makefile
+++ /dev/null
@@ -1,57 +0,0 @@
-SHELL = /bin/sh

-RM = rm -f

-

-LOCAL_CFLAGS := -Wall \

-                -std=gnu++14 \

-                -g -Os \

-                -flto \

-                -fPIC \

-    

-                

- 

-ifeq ($(strip $(TARGET_PLATFORM)), T106)

-LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0

-endif

-

-LOCAL_CFLAGS += -Werror=format-security

-

-$(warning ################# rock ROOT: $(ROOT),includedir:$(includedir),)

-

-LOCAL_PATH   = .

-

-LOCAL_C_INCLUDES = \

-  -I. \

-  -I$(LOCAL_PATH)/include \

-  -I$(ROOT)$(includedir)/logger \

-  -I$(ROOT)$(includedir)/liblog \

-  -I$(ROOT)$(includedir)/glib-2.0 \

-  -I$(ROOT)$(libdir)/glib-2.0/include \

-  -I$(ROOT)$(includedir)  \

-

-

-

-LOCAL_LIBS := \

-    -L. \

-    -ldl \

-    -lstdc++ \

-

-SOURCES = lynq-qser-fota-demo.cpp

-

-EXECUTABLE = lynq-qser-fota-demo

-

-OBJECTS=$(SOURCES:.cpp=.o)

-

-OBJECTS_TOOL=$(SOURCES_TOOL:.cpp=.o)

-all: $(EXECUTABLE) 

-

-$(EXECUTABLE): $(OBJECTS)

-	$(CXX) $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@

-

-%.o : %.cpp

-	$(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $< 

-

-.PHONY: clean

-clean:

-	$(RM) $(OBJECTS) $(EXECUTABLE)

-	$(RM) $(OBJECTS_TOOL) $(EXECUTABLE)

-

diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/makefile b/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/makefile
deleted file mode 100755
index 975557b..0000000
--- a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-network-demo/makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-SHELL = /bin/sh

-RM = rm -f

-

-LOCAL_CFLAGS := -Wall \

-                -std=gnu++14 \

-                -g -Os \

-                -flto \

-                -fPIC \

-    

-                

- 

-ifeq ($(strip $(TARGET_PLATFORM)), T106)

-LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0

-endif

-

-LOCAL_CFLAGS += -Werror=format-security

-

-$(warning ################# rock ROOT: $(ROOT),includedir:$(includedir),)

-

-LOCAL_PATH   = .

-

-LOCAL_C_INCLUDES = \

-  -I. \

-  -I$(LOCAL_PATH)/include/ \

-  -I$(ROOT)$(includedir)/liblog \

-

-

-

-

-LOCAL_LIBS := \

-    -L. \

-    -ldl \

-    -lstdc++ \

-

-SOURCES = lynq-qser-network-demo.cpp

-

-EXECUTABLE = lynq-qser-network-demo

-

-OBJECTS=$(SOURCES:.cpp=.o)

-

-OBJECTS_TOOL=$(SOURCES_TOOL:.cpp=.o)

-all: $(EXECUTABLE) 

-

-$(EXECUTABLE): $(OBJECTS)

-	$(CXX) $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@

-

-%.o : %.cpp

-	$(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $< 

-

-.PHONY: clean

-clean:

-	$(RM) $(OBJECTS) $(EXECUTABLE)

-	$(RM) $(OBJECTS_TOOL) $(EXECUTABLE)

-

diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/lynq_systime_demo.cpp b/cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/lynq_systime_demo.cpp
new file mode 100755
index 0000000..d0fffcf
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/lynq_systime_demo.cpp
@@ -0,0 +1,252 @@
+/**@File lynq-systime-demo.cpp

+ *

+ * @Brief As a example for liblynq-systime.

+ *

+ * @Author sj.zhang

+ *

+ * @Date 2023-08-15

+ *

+ * @Version V1.0

+ *

+ * @copyright Copyright (c) MobileTek

+ */

+#include <stdio.h>

+#include <dlfcn.h>

+#include <string.h>

+#include <stdlib.h>

+#include <time.h>

+

+typedef struct time_source_status

+{

+    int ntp;

+    int nitz;

+    int gnss;

+} time_src_status_s;

+

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+int (*lynq_sync_time_from_rtc)(void);

+int (*lynq_set_rtc_time)(void);

+int (*lynq_get_rtc_time)(unsigned long *ulsec);

+

+#endif

+void *dlHandle_systime = NULL;

+int (*modem_time_enable)(int enable);

+int (*gnss_time_enable)(int enable);

+int (*ntp_sync_time)(int enable);

+int (*user_set_time)(char *date, char *time);

+int (*lynq_get_time_src_status)(time_src_status_s *time_src);

+

+int lynq_ntp_sync_demo(int argc, char *argv[])

+{

+    int ret = -1;

+    if (argc != 3)

+    {

+        printf("Parameter number wrong !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ntp_sync_time = (int (*)(int enable))dlsym(dlHandle_systime, "ntp_sync_time");

+    if (NULL == ntp_sync_time)

+    {

+        fprintf(stderr, "Failed to dlsym function ntp_sync_time : %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ret = ntp_sync_time(atoi(argv[2]));

+    switch (ret)

+    {

+    case 0:

+        printf("set success!\n");

+        break;

+    case 1:

+        printf("NTP_ALREADY_ENABLE!\n");

+        break;

+    case 2:

+        printf("NTP_ALREADY_DISENABLE!\n");

+        break;

+    default:

+        break;

+    }

+    return ret;

+}

+

+int lynq_modem_sync_demo(int argc, char *argv[])

+{

+    int ret = -1;

+    if (argc != 3)

+    {

+        printf("Parameter number wrong !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    modem_time_enable = (int (*)(int enable))dlsym(dlHandle_systime, "modem_time_enable");

+    if (NULL == modem_time_enable)

+    {

+        fprintf(stderr, "Failed to dlsym function modem_time_enable: %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ret = modem_time_enable(atoi(argv[2]));

+    printf("ret = %d\n", ret);

+    if (ret != 0 && ret != 4)

+    {

+        printf("modem_time_enable failed !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    return 0;

+}

+

+int lynq_gnss_sync_demo(int argc, char *argv[])

+{

+    int ret = -1;

+    if (argc != 3)

+    {

+        printf("Parameter number wrong !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    gnss_time_enable = (int (*)(int enable))dlsym(dlHandle_systime, "gnss_time_enable");

+    if (NULL == gnss_time_enable)

+    {

+        fprintf(stderr, "Failed to dlsym function gnss_time_enable: %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ret = gnss_time_enable(atoi(argv[2]));

+    printf("ret = %d\n", ret);

+    if (ret != 0 && ret != 4)

+    {

+        printf("gnss_time_enable failed !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    return ret;

+}

+

+int lynq_user_set_time_demo(int argc, char *argv[])

+{

+    int ret = -1;

+    if (argc != 4)

+    {

+        printf("Parameter number wrong !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    user_set_time = (int (*)(char *date, char *time))dlsym(dlHandle_systime, "user_set_time");

+    if (NULL == user_set_time)

+    {

+        fprintf(stderr, "Failed to dlsym function user_set_time: %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    ret = user_set_time(argv[2], argv[3]);

+    return ret;

+}

+

+int lynq_get_time_src_status_demo(int arg_c, char *arg_v[])

+{

+    lynq_get_time_src_status = (int (*)(time_src_status_s *time_src))dlsym(dlHandle_systime, "lynq_get_time_src_status");

+    if (NULL == lynq_get_time_src_status)

+    {

+        fprintf(stderr, "Failed to dlsym function lynq_get_time_src_status : %s\n", dlerror());

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    time_src_status_s time_src = {0};

+    lynq_get_time_src_status(&time_src);

+    printf("time source status are :\nntp=%d\nnitz=%d\ngnss=%d\n", time_src.ntp, time_src.nitz, time_src.gnss);

+    return 0;

+}

+

+int main(int argc, char *argv[])

+{

+    int ret = -1;

+    char *cmd = argv[1];

+    printf("enter lynq_systime_demo \n");

+    dlHandle_systime = dlopen("/lib/liblynq-systime.so", RTLD_NOW);

+    if (!dlHandle_systime)

+    {

+        fprintf(stderr, "Failed to load library: %s\n", dlerror());

+        return 1;

+    }

+

+    if (cmd == NULL)

+    {

+        printf("No command received!\n");

+        dlclose(dlHandle_systime);

+        return 1;

+    }

+    else if (strcmp(cmd, "ntp") == 0)

+    {

+        ret = lynq_ntp_sync_demo(argc, argv);

+    }

+    else if (strcmp(cmd, "nitz") == 0)

+    {

+        ret = lynq_modem_sync_demo(argc, argv);

+    }

+    else if (strcmp(cmd, "gnss") == 0)

+    {

+        ret = lynq_gnss_sync_demo(argc, argv);

+    }

+    else if (strcmp(cmd, "user") == 0)

+    {

+        ret = lynq_user_set_time_demo(argc, argv);

+    }

+#ifdef MOBILETEK_TARGET_PLATFORM_T106

+    else if (strcmp(cmd, "sync_rtc") == 0)

+    {

+        lynq_sync_time_from_rtc = (int (*)(void))dlsym(dlHandle_systime, "lynq_sync_time_from_rtc");

+        if (NULL == lynq_sync_time_from_rtc)

+        {

+            fprintf(stderr, "Failed to dlsym function lynq_sync_time_from_rtc : %s\n", dlerror());

+            dlclose(dlHandle_systime);

+            return -1;

+        }

+        ret = lynq_sync_time_from_rtc();

+    }

+    else if (strcmp(cmd, "rtc_set") == 0)

+    {

+        lynq_set_rtc_time = (int (*)(void))dlsym(dlHandle_systime, "lynq_set_rtc_time");

+        if (NULL == lynq_set_rtc_time)

+        {

+            fprintf(stderr, "Failed to dlsym function lynq_set_rtc_time : %s\n", dlerror());

+            dlclose(dlHandle_systime);

+            return -1;

+        }

+        ret = lynq_set_rtc_time();

+    }

+    else if (strcmp(cmd, "rtc_get") == 0)

+    {

+        lynq_get_rtc_time = (int (*)(unsigned long *ulsec))dlsym(dlHandle_systime, "lynq_get_rtc_time");

+        if (NULL == lynq_get_rtc_time)

+        {

+            fprintf(stderr, "Failed to dlsym function lynq_get_rtc_time : %s\n", dlerror());

+            dlclose(dlHandle_systime);

+            return -1;

+        }

+        unsigned long time_ret;

+        ret = lynq_get_rtc_time(&time_ret);

+        time_t tp = (time_t)time_ret;

+        char *rtc_time = ctime(&tp);

+        printf("rtc_time seconds = %lu\n", time_ret);

+        printf("rtc time = %s\n", rtc_time);

+    }

+#endif

+    else if (strcmp(cmd, "src_status") == 0)

+    {

+        ret = lynq_get_time_src_status_demo(argc, argv);

+    }

+    else

+    {

+        printf("command wrong !\n");

+        dlclose(dlHandle_systime);

+        return -1;

+    }

+    if (0 != ret)

+    {

+        printf("ret = %d\n Command execution failure.\n", ret);

+    }

+    dlclose(dlHandle_systime);

+    return ret;

+}

diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/makefile b/cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/makefile
similarity index 79%
rename from cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/makefile
rename to cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/makefile
index 164a575..890f85a 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-voice-demo/makefile
+++ b/cap/zx297520v3/src/lynq/packages/apps/lynq-systime-demo/makefile
@@ -11,6 +11,10 @@
 LOCAL_CFLAGS += -DBINDER_IPC_32BIT=1 -DHAVE_ENDIAN_H -DHAVE_PTHREADS -DHAVE_SYS_UIO_H -DHAVE_POSIX_FILEMAP -DHAVE_STRLCPY -DHAVE_PRCTL -DHAVE_MEMSET16 -DHAVE_MEMSET32 -DANDROID_SMP=0

 endif

 

+ifeq ($(strip $(TARGET_PLATFORM)), T106)

+LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T106

+endif

+

 LOCAL_CFLAGS += -Wno-error=format-security

 

 LOCAL_PATH   = .

@@ -18,8 +22,9 @@
 LOCAL_C_INCLUDES = \

   -I. \

   -I$(LOCAL_PATH)/include/ \

-  -I$(ROOT)$(includedir)/liblog \

-  -I$(ROOT)$(includedir)/libcall \

+  -I$(ROOT)$(includedir)/ \

+  -I$(ROOT)$(includedir)/include/ \

+

 

 

 LOCAL_LIBS := \

@@ -27,11 +32,13 @@
     -ldl \

     -lstdc++ \

     -lpthread \

+    -llynq-systime \

 

 

-SOURCES = lynq-qser-voice-demo.cpp

 

-EXECUTABLE = lynq-qser-voice-demo

+SOURCES = lynq_systime_demo.cpp

+

+EXECUTABLE = lynq-systime-demo

 

 OBJECTS=$(SOURCES:.cpp=.o)

 

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
index 7d0c6aa..ff55fb9 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
@@ -141,7 +141,7 @@
 };	
 &zx29_nau8810 {
 	pinctrl-0 = <&i2s0_pins>;
-	status = "okay";
+//	status = "okay";
 };
 &zx29_dummycodec{
 	pinctrl-0 = <&i2s1_pins>;
@@ -155,11 +155,11 @@
 //	status = "okay";
 };
 &codec_es8311 {
-//	status = "okay";
+	status = "okay";
 };	
 &zx29_es8311 {
 	pinctrl-0 = <&i2s0_pins>;
-//	status = "okay";
+	status = "okay";
 };
 &gmac {
     port-nums = <1>;
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
index 53f21ab..94587cb 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
@@ -351,6 +351,9 @@
 			             <GIC_SPI UART0_RXD_INT IRQ_TYPE_EDGE_FALLING>; 
 			clocks = <&clkc UART0_WCLK>, <&clkc UART0_PCLK>;
 			clock-names = "uartclk", "apb_pclk";
+            /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 start*/
+			uart-max-bus-freq = <104000000>;
+            /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 end*/
 			status = "disabled";
 		};
 
@@ -372,6 +375,9 @@
 			clock-names = "uartclk", "apb_pclk";
 			pinctrl-names = "uart2_tx_rx";
 			pinctrl-0 = <&uart2_pins>;
+            /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 start*/
+			uart-max-bus-freq = <104000000>;
+            /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 end*/
 			status = "disabled";
 		};
 
@@ -476,11 +482,11 @@
 			};	
 			codec_es8311: codec_es8311@18 {         
 				compatible = "everest,es8311";
-				reg = <0x1A>;		
+				reg = <0x18>;
 				//reset-gpios = <&bgpio 122 GPIO_ACTIVE_HIGH>;/*RST*/
-				clock-names = "clk_out";	
+				clock-names = "clk_out2";
 				clocks = <&clkc CLKOUT2_CLK>;		
-				pinctrl-names = "clk_out";			
+				pinctrl-names = "clk_out2";
 				pinctrl-0 = <&clk2_func_pins>;				
 				status = "disabled";
 			};			
@@ -631,8 +637,10 @@
 		};
 	       
 		soc_ssp1: ssp@1410000 {
-			/*compatible = "zte,zx29_ssp";*/
-			compatible = "zte,zx29_ssp_slave";
+			/*xf.li@20230812 modify for spi1 test start*/
+			compatible = "zte,zx29_ssp";
+			/*compatible = "zte,zx29_ssp_slave";*/
+			/*xf.li@20230812 modify for spi1 test end*/
 			reg = <0x0 0x1410000 0x0 0x00001000>;
 			interrupts = <GIC_SPI SSP1_INT IRQ_TYPE_LEVEL_HIGH>;
 			clock-frequency = <52000000>;
@@ -809,7 +817,7 @@
 			reg-names = "soc_sys";
 
 			zxic,i2s-controller = <&i2s0>;
-			zxic,audio-codec = <&codec_nau8810>;
+                        zxic,audio-codec = <&codec_es8311>;
 			status = "disabled";
 		};		
 		softwdt: softwdt@1301000 {
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/phy/jlsemi/jl3xxx.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/phy/jlsemi/jl3xxx.c
index 52e15a1..7f9c48c 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/phy/jlsemi/jl3xxx.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/phy/jlsemi/jl3xxx.c
@@ -286,10 +286,10 @@
 
 	if ((i % 5 == 0) && debug_on) {
         printk("[%s] link:%d\n", __func__, phydev->link);
-		mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x3);
-	    mdiobus_write(phydev->mdio.bus, 7, 0x0e, 0x8000);
-	    mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x4000 | 0x3);	    
-		printk("[%s] rmii config:0x%x\n", __func__, mdiobus_read(phydev->mdio.bus, 7, 0x0e));
+		mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x3);
+	    mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0e, 0x8000);
+	    mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x4000 | 0x3);
+		printk("[%s] cy rmii config:0x%x\n", __func__, mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, 0x0e));
 		
     }
 	i++;
@@ -300,17 +300,17 @@
 static int jl3_config_init(struct phy_device *phydev)
 {
 	DBG("%s(), an:= %d, if:= %d\n", __func__, phydev->autoneg, phydev->interface);
-	printk("[%s] addr:%d\n", __func__, phydev->mdio.addr);
+	printk("[%s] cy-addr:%d\n", __func__, phydev->mdio.addr);
 //	jl3113_config_init(phydev, ROLE, SPEED_1000);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x3);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0e, 0x8000);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x4000 | 0x3);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0e, 0x46);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x3);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0e, 0x8000);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x4000 | 0x3);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0e, 0x46);
 
-	mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x1);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0e, 0x0000);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0d, 0x4000 | 0x1);
-	mdiobus_write(phydev->mdio.bus, 7, 0x0e, 0xA000);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x1);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0e, 0x0000);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0d, 0x4000 | 0x1);
+	mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, 0x0e, 0xA000);
 
 	return 0;
 }
@@ -325,6 +325,7 @@
 	if(phydev->mdio.bus == NULL)
 		return 0;
 
+
 	org_phy_status = jlphy_port_state;
 	islink = rd(phydev, 0x1, 0x1);
 	islink = (islink&0x4)?1:0;
@@ -334,12 +335,8 @@
 	if(islink == 1)
 		new_phy_status = 1;
 
-	if((org_phy_status == 0)&&(new_phy_status == 1)) {
-	    wt(phydev, 0x3, 0x8000, 0x46);
-        wt(phydev, 0x1, 0x0000, 0xA000);
-        gmac_event_notify(GMAC_ETH_PHY_PLUGIN, NULL);
-    }
-
+	if((org_phy_status == 0)&&(new_phy_status == 1))
+		gmac_event_notify(GMAC_ETH_PHY_PLUGIN, NULL);
 
 	if((org_phy_status == 1)&&(new_phy_status == 0))
 		gmac_event_notify(GMAC_ETH_PHY_PLUGOUT, NULL);
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/tty/serial/zx29_uart.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/tty/serial/zx29_uart.c
index f199d9c..26f5d98 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/tty/serial/zx29_uart.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/tty/serial/zx29_uart.c
@@ -3235,7 +3235,9 @@
 	unsigned int offset=(unsigned int)(pdev->id);
 	struct device_node *np = pdev->dev.of_node;
 	unsigned int baud, ibrd, fbrd;
-
+    /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 start*/
+	unsigned int max_bus_clk;
+    /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 end*/
 	struct resource *regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	//struct resource *irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);	
 
@@ -3259,6 +3261,12 @@
 		printk("failed to get zx29_port->wclk: %d\n", ret);
 		return ret;
 	}
+   /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 start*/
+	if(0 == pdev->id || 2 == pdev->id){
+		device_property_read_u32(&pdev->dev, "uart-max-bus-freq", &max_bus_clk);
+		clk_set_rate(zx29_port->wclk, max_bus_clk);
+	}
+   /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 end*/
 	if(offset == 0){
 	clk_set_rate(zx29_port->wclk, 104 * 1000000);
 	}
@@ -3288,6 +3296,11 @@
 	//here is temple def	
 	if(port->uartclk == 0){
 		printk("---zx29_init_ports,  uartclk hard set to 26M\n");
+        /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 start*/
+		if(0 == pdev->id || 2 == pdev->id)
+			port->uartclk = 104000000;
+		else
+        /*cz.li add for uart1 2 change baudrate to 4M on 2023/8/15 end*/
 		port->uartclk = 26000000;
 	}
 	printk("---zx29_init_ports, line:%d, irq:%d, membase:%08x, uartclk:%d\n", port->line, port->irq, port->membase, port->uartclk);
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
index 97e4bc5..74d24c8 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/Kconfig
@@ -799,6 +799,7 @@
 config SND_SOC_ES8311
 	tristate "Everest Semi ES8311 CODEC"
 	depends on I2C
+       tristate
 	
 config SND_SOC_GTM601
 	tristate 'GTM601 UMTS modem audio codec'
@@ -1395,6 +1396,7 @@
 config SND_SOC_TLV320AIC3X
 	tristate "Texas Instruments TLV320AIC3x CODECs"
 	depends on I2C
+       select REGMAP_I2C
 
 config SND_SOC_TLV320DAC33
 	tristate
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
index b68ee46..e5e7d25 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.c
@@ -37,6 +37,7 @@
 struct	es8311_private {

 	struct snd_soc_component *component;

 	struct regmap *regmap;

+        struct device *dev;
 	struct clk *mclk;

 	unsigned int mclk_rate;

 	int mastermode;

@@ -1050,7 +1051,8 @@
 	 * 1. sclk/bclk is used as mclk

 	 * 2. mclk is controled by soc I2S

 	 */

-	if (es8311->mclk_src == ES8311_MCLK_PIN) {

+	//if (es8311->mclk_src == ES8311_MCLK_PIN) {

+	if(0) {
 		es8311->mclk = devm_clk_get(component->dev, "mclk");

 		if (IS_ERR(es8311->mclk)) {

 			dev_err(component->dev, "%s,unable to get mclk\n", __func__);

@@ -1129,6 +1131,10 @@
 	snd_soc_component_write(component, ES8311_DAC_REG37, 0x48);

 	snd_soc_component_write(component, ES8311_ADC_REG17, 0xBF);

 	snd_soc_component_write(component, ES8311_DAC_REG32, 0xBF);

+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG02, 0x98);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG03, 0x1b);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG04, 0x1b);
+	snd_soc_component_write(component, ES8311_CLK_MANAGER_REG05, 0xbb);
 	msleep(100);

 	es8311_set_bias_level(component, SND_SOC_BIAS_STANDBY);

 

@@ -1149,6 +1155,16 @@
 	struct es8311_private *info = dev_get_drvdata(dev);

 	struct device_node *np = dev->of_node;

 

+	unsigned tmp;
+
+	#if 1
+        void __iomem 	*reg_base;
+        reg_base = ioremap(0x13B000+0x94 ,4);
+        tmp  = ioread32(reg_base);
+        tmp |= (1<<0)|(1<<2);
+	iowrite32(tmp,reg_base);
+	#endif
+
 	dev_info(dev, "%s:start!\n", __func__);

 

 	if(dev == NULL){

@@ -1166,7 +1182,7 @@
 	}

 

 

-	state0 = pinctrl_lookup_state(pctrl, "clk_out");

+	state0 = pinctrl_lookup_state(pctrl, "clk_out2");

 	if (IS_ERR(state0)) {

 		devm_pinctrl_put(pctrl);

 		dev_err(dev, "missing clk_out\n");

@@ -1188,7 +1204,7 @@
 

 

 	

-	clk = of_clk_get_by_name(np, "clk_out");	

+	clk = of_clk_get_by_name(np, "clk_out2");

 	if (IS_ERR(clk)) {

 		dev_err(dev, "Could not get clk_out\n");

 		ret = PTR_ERR(clk);

@@ -1459,6 +1475,8 @@
 	if (ret)

 		pr_err("failed to create attr group\n");

 

+        printk("%s end\n", __func__);
+
 	return ret;

 }

 

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
index 6ffc3d9..5acb206 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/es8311.h
@@ -73,7 +73,8 @@
 /* The VMIDLEVEL is different for 1.8V AVDD */

 #define ES8311_3V3 0

 #define ES8311_1V8 1

-#define ES8311_AVDD ES8311_3V3

+//#define ES8311_AVDD ES8311_3V3

+#define ES8311_AVDD ES8311_1V8

 

 #define ES8311_MCLK_PIN	0

 #define ES8311_BCLK_PIN 1

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
index 2a0a3c8..050a0f8 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/sanechips/zx29_es83xx.c
@@ -556,7 +556,7 @@
 
 #if defined(CONFIG_SND_SOC_ZX29_ES8311)
 SND_SOC_DAILINK_DEF(codec, \
-		DAILINK_COMP_ARRAY(COMP_CODEC("es8311.1-001a", "es8311-hifi")));
+		DAILINK_COMP_ARRAY(COMP_CODEC("es8311.1-0018", "ES8311 HiFi")));
 
 #elif defined(CONFIG_SND_SOC_ZX29_ES8374)
 
@@ -680,7 +680,8 @@
 	.owner = THIS_MODULE,
 	.dai_link = zx29_dai_link,
 	.num_links = ARRAY_SIZE(zx29_dai_link),
-#ifdef USE_ALSA_VOICE_FUNC
+//#ifdef USE_ALSA_VOICE_FUNC
+#if 0
 	 .controls = vp_snd_controls,
 	 .num_controls = ARRAY_SIZE(vp_snd_controls),
 #endif	
diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/at_ctl/src/atconfig/ps_normal.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/at_ctl/src/atconfig/ps_normal.c
index f7becaa..caac23e 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/at_ctl/src/atconfig/ps_normal.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/platform/at_ctl/src/atconfig/ps_normal.c
@@ -115,6 +115,14 @@
 	void *p[5] = {&timeinfo.time_zone,&timeinfo.sav_time,temp1,temp2,timeinfo.univer_time};

 	int time_zone = 0;

 	

+	//>>>sj.zhang add @2023-08-10 for systime NITZ sync enable/disenable.

+	if(0 != system("uci get lynq_uci.lynq_sync_time.lynq_modem_sync_time_enable | grep -E \'^1$\'"))

+	{

+		at_print(AT_ERR,"zmmi_auto_act: nitz disenabled. \n");

+		return AT_END;

+	}

+	//>>>sj.zhang add @2023-08-10 end.

+

     sc_cfg_get("sntp_time_set_mode", mode, sizeof(mode));

 	if(strcmp(mode, "manual") == 0)

 	{

diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/binder/liblog/logd_write.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/binder/liblog/logd_write.c
index ac07ef5..dbe869f 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/binder/liblog/logd_write.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/binder/liblog/logd_write.c
@@ -132,7 +132,7 @@
 	va_list arg = {0};
 	int ret = 0;
 
-	if (prio >= ANDROID_LOG_DEBUG && ANDROID_LOG_ERROR <= prio) {
+	if (prio >= ANDROID_LOG_DEBUG && ANDROID_LOG_ERROR >= prio) {
 		switch (prio) {
 			case ANDROID_LOG_DEBUG: {
 				put_to_syslog(DEBUG);
@@ -159,7 +159,7 @@
 		}
 	}
 
-	if (prio >= ANDROID_LOG_DEBUG && ANDROID_LOG_ERROR <= prio) {
+	if (prio >= ANDROID_LOG_DEBUG && ANDROID_LOG_ERROR >= prio) {
 		put_to_console(mod, fmt, arg);
 	}
 
@@ -412,7 +412,7 @@
 
     return ret;
 #else
-    printf("%s%s\n",(char*)(vec[1].iov_base), (char*)(vec[2].iov_base));
+    //printf("%s%s\n",(char*)(vec[1].iov_base), (char*)(vec[2].iov_base));
 	int prio = *(int*)(vec[0].iov_base);
 	char* mode = (char*)(vec[1].iov_base);
 	char* buf = (char*)(vec[2].iov_base);
diff --git a/esdk_patch/linux_bb.diff b/esdk_patch/linux_bb.diff
index b4bc4f9..d68aeb5 100644
--- a/esdk_patch/linux_bb.diff
+++ b/esdk_patch/linux_bb.diff
@@ -1,20 +1,19 @@
 diff --git a/linux-zxic_5.10.bb b/linux-zxic_5.10.bb
-old mode 100644
-new mode 100755
-index 29942f4..4b10e1c
+index abadd9b..a8c7f65 100755
 --- a/linux-zxic_5.10.bb
 +++ b/linux-zxic_5.10.bb
-@@ -4,15 +4,15 @@ PV      = "${LINUX_VERSION}"
+@@ -4,16 +4,16 @@ PV      = "${LINUX_VERSION}"
  LICENSE = "GPLv2"
  LIC_FILES_CHKSUM ?= "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
  LINUX_VERSION    ?= "5.10.156"
 -
-+BSPDIR = "${TOPDIR}/../upstream/"
++BSPDIR = "${TOPDIR}/../upstream"
  #pub include
 -include ${BSPDIR}/sources/meta-zxic/conf/pub.inc
 +include ${TOPDIR}/layers/meta-zxic/conf/pub_esdk.inc
  
  DEPENDS += "kern-tools-native"
+ DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES','dm-verity','zstd-native','',d)}"
  inherit kernel  siteinfo  
  
  EXTRA_OEMAKE_append = " LOADADDR=${KERNEL_LOADADDR} EXTRA_CFLAGS='${ZXIC_EXTRA_CFLAGS}' "
@@ -23,3 +22,11 @@
  # PR_CONFIG_cpe = "linux-5_10-cpe-${BOOT_CTL}-defconfig"
  # PR_CONFIG_v2x = "linux-5_10-v2x-${BOOT_CTL}-defconfig"
  PR_CONFIG_vehicle_dc = "linux-5_10-vehicle_dc-${BOOT_CTL}-defconfig"
+@@ -61,7 +61,7 @@ kernel_do_configure() {
+ 
+ fakeroot do_cpio () {
+ 	if ${@bb.utils.contains('DISTRO_FEATURES','dm-verity','true','false',d)}; then
+-		cp  -v  ${BSPDIR}/sources/meta-zxic-custom/conf/distro/dm-verity/${KERNEL_INITRAMFS_CPIO}   ${B}/
++		cp  -v  ${BSPDIR}/../esdk/sources/meta-zxic-custom/conf/distro/dm-verity/${KERNEL_INITRAMFS_CPIO}   ${B}/
+ 	fi
+ }
diff --git a/esdk_patch/mk_esdk.sh b/esdk_patch/mk_esdk.sh
index 5037d76..75a112e 100755
--- a/esdk_patch/mk_esdk.sh
+++ b/esdk_patch/mk_esdk.sh
@@ -3,7 +3,7 @@
 dest_dir_relative=$1
 intall_dir=$(pwd)
 
-chmod a+x ./vehicle_dc-glibc-x86_64-zxic-image-armv7a-zx297520v3-toolchain-ext-1.0.sh
+chmod a+x ./vehicle_dc_ref-glibc-x86_64-zxic-image-armv7a-zx297520v3-toolchain-ext-1.0.sh
 mkdir ${dest_dir_relative}
 cd $1
 dest_dir=$(pwd)
@@ -12,7 +12,7 @@
 	echo "Input invaild path for folders to install\n"
 	exit 1
 fi
-./vehicle_dc-glibc-x86_64-zxic-image-armv7a-zx297520v3-toolchain-ext-1.0.sh -d ${dest_dir}/esdk
+./vehicle_dc_ref-glibc-x86_64-zxic-image-armv7a-zx297520v3-toolchain-ext-1.0.sh -d ${dest_dir}/esdk
 tar -zxvf upstream.tar.gz -C $dest_dir
 ln -s ${dest_dir}/upstream/tools ${dest_dir}/esdk
 cp linux_bb.diff ${dest_dir}/esdk/layers/meta-zxic/recipes-kernel/linux/
diff --git a/update_version.sh b/update_version.sh
index afcf2af..e99f7ef 100644
--- a/update_version.sh
+++ b/update_version.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
 #export LYNQ_VERSION="T106_lynq_version_ap_build_sh"
-LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P49.AP.06.02"
-LYNQ_CAP_INSIDE_VERSION="CAP.06.02"
-LYNQ_CAP_VERSION="CAP.06.02"
+LYNQ_AP_VERSION="T106CN-ZS03.V2.01.01.02P50.AP.07.01"
+LYNQ_CAP_INSIDE_VERSION="CAP.07.01"
+LYNQ_CAP_VERSION="CAP.07.01"
 COMMIT_ID="$(git rev-parse HEAD)"
 
 LYNQ_SW_INSIDE_VERSION="LYNQ_CONFIG_VERSION = \"${LYNQ_AP_VERSION}_${LYNQ_CAP_INSIDE_VERSION}\""