Merge "[Bugfix][T106BUG-115][Network] lynq_set_state_buffer_valid_period_of_network,  return 1, Only Configure: No, Affected branch: unknown, Affected module: unknown, Is it affected on both ZXIC and MTK: ZXIC only, Self-test: Yes, Doc Update: No"
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 e550600..333a235 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
@@ -221,6 +221,7 @@
         gdb \
         mobiletek-tester-rdit \
         lynq-qser-voice-demo \
+        lynq-qser-fota-demo \
 	"
 
 zxic_app_open += "${@bb.utils.contains('CONFIG_TEL_API_SUPPORT', 'RIL', 'rild', '', d)}"
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
new file mode 100644
index 0000000..ad8af28
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-fota-demo/lynq-qser-fota-demo.bb
@@ -0,0 +1,36 @@
+#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 \
+          "
+
+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}'"
+
+#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-qser-fota-demo ${D}${bindir}/
+}
diff --git a/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/lynq-qser-fota-demo.cpp b/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/lynq-qser-fota-demo.cpp
new file mode 100755
index 0000000..63c9504
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/lynq-qser-fota-demo.cpp
@@ -0,0 +1,94 @@
+#include <stdlib.h>

+#include <stdio.h>

+#include <string.h>

+#include <sys/types.h>

+#include <unistd.h>

+#include <dlfcn.h>

+#include <stdint.h>

+

+int (*lynq_get_upgrade_status)(void);

+int (*lynq_fota_set_addr_value)(char *value,int size);

+int (*lynq_fota_nrestart)(void);

+int (*lynq_rock_main)(int first_run);

+

+void *dlHandle_fota = NULL;

+

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

+{

+    int ret = 0;

+    int reboot_flag; 

+    char *value = argv[1];

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

+    

+    const char *lynqLibPath_fota = "/lib/liblynq-fota.so";

+    dlHandle_fota = dlopen(lynqLibPath_fota, RTLD_NOW);

+    if (dlHandle_fota == NULL) 

+    {

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

+        return -1;

+    }

+

+    lynq_fota_set_addr_value = (int (*)(char *value,int size))dlsym(dlHandle_fota, "lynq_fota_set_addr_value");

+    if(lynq_fota_set_addr_value == NULL)

+    {

+        printf("lynq fota ser addr value is null\n");

+        return -1;

+    }

+

+    lynq_get_upgrade_status = (int (*)(void))dlsym(dlHandle_fota,"lynq_get_upgrade_status");

+    if(lynq_get_upgrade_status == NULL)

+    {

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

+        return -1;

+    }

+    lynq_fota_nrestart = (int (*)())dlsym(dlHandle_fota,"lynq_fota_nrestart");

+    if(lynq_fota_nrestart == NULL)

+    {

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

+        return -1;

+    }

+    lynq_rock_main = (int (*)(int first_run))dlsym(dlHandle_fota,"lynq_rock_main");

+    if(lynq_rock_main == NULL)

+    {

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

+        return -1;

+    }

+    

+    ret = lynq_fota_set_addr_value(value,(int )strlen(value));

+    if(ret != 0)

+    {

+        printf("set upgrade package addr failed\n");

+        return -1;

+    }

+

+    printf("Please chose  reboot or not when upgrade done  1: reboot 0: not reboot\n");

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

+

+    switch(reboot_flag)

+    {

+        case 0:

+            printf("Not reboot when upgrade done!!!\n ");

+            ret = lynq_fota_nrestart();

+            printf("upgrade result is %d\n",ret);

+            ret = lynq_get_upgrade_status();

+            printf("get upgrade status result is %d\n",ret);

+            break;

+

+        case 1:

+            printf("Will reboot when upgrade done!!!\n ");

+            ret = lynq_rock_main(1);

+            printf("upgrade result is %d\n",ret);

+            ret = lynq_get_upgrade_status();

+            printf("get upgrade status result is %d\n",ret);

+            break;

+

+        default:

+            printf("please input right flag 1 or 0\n");

+            break;

+

+    }

+    

+    return 0;

+

+}

+

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
new file mode 100755
index 0000000..7a6d23f
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/packages/apps/lynq-qser-fota-demo/makefile
@@ -0,0 +1,57 @@
+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)

+