[Feature][ZXW-171][SDK-READY]add lynq-sdk-ready service
Only Configure: No
Affected branch: master
Affected module: sdk-ready
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: Yes
Change-Id: Id186550e40df3d8305e82f49266b8975cd965b16
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 b186409..cf42b4f 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
@@ -263,6 +263,7 @@
msm-svr \
player-demo \
lynq-ril-service \
+ lynq-sdk-ready \
lynq-led-demo \
lynq-led-sev \
uci \
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc/init.d/zcatlog_config.sh b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc/init.d/zcatlog_config.sh
index b6946d5..cebf7b0 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc/init.d/zcatlog_config.sh
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-core/images/files/zx297520v3/vehicle_dc_ref/fs/normal/rootfs/etc/init.d/zcatlog_config.sh
@@ -1,7 +1,9 @@
#!/bin/sh
if [ ! -d "/mnt/userdata/config/" ];then
- cp -R /etc/config /mnt/userdata/
+ mkdir config
+ cp -R /etc/config/lynq_uci /mnt/userdata/config/
+ ln -s /etc/config/lynq_uci_ro /mnt/userdata/config/
else
echo "uci config has exist"
fi
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-sdk-ready/lynq-sdk-ready.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-sdk-ready/lynq-sdk-ready.bb
new file mode 100755
index 0000000..ca0aaf7
--- /dev/null
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-sdk-ready/lynq-sdk-ready.bb
@@ -0,0 +1,49 @@
+#inherit externalsrc package
+
+DESCRIPTION = "lynq sdk-ready sev"
+LICENSE = "CLOSED"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
+DEPENDS += "liblynq-uci liblynq-log "
+#inherit workonsrc
+WORKONSRC = "${TOPDIR}/../src/lynq/framework/lynq-sdk-ready"
+FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/framework/:"
+SRC_URI = " \
+ file://lynq-sdk-ready \
+ "
+
+SRC-DIR = "${S}/../lynq-sdk-ready"
+TARGET_CC_ARCH += "${LDFLAGS}"
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "lynq_sdk_ready.service"
+FILES_${PN} += "${systemd_unitdir}/system/lynq_sdk_ready.service"
+FILES_${PN} += "/system/etc/tele/ring ${bindir}"
+#Parameters passed to do_compile()
+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\
+ 'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\
+ 'TARGET_PLATFORM = ${TARGET_PLATFORM}'\
+ 'MTK_LED_SUPPORT = ${MTK_LED_SUPPORT}'\
+ 'TARGET_PLATFORM = ${TARGET_PLATFORM}'"
+
+
+#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-sdk-ready ${D}${bindir}/
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${B}/lynq_sdk_ready.service ${D}${systemd_unitdir}/system
+ else
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${SRC-DIR}/lynq-sdk-ready.sh ${D}${sysconfdir}/init.d/lynq-sdk-ready.sh
+ install -d ${D}${sysconfdir}/rcS.d
+ ln -s ../init.d/lynq-sdk-ready.sh ${D}${sysconfdir}/rcS.d/S23lynq-sdk-ready
+ fi
+}
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq-sdk-ready.sh b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq-sdk-ready.sh
new file mode 100755
index 0000000..382e072
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq-sdk-ready.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Run the daemon
+#
+
+DAEMON="lynq-sdk-ready-service"
+PIDFILE="/var/run/$DAEMON.pid"
+EXEC="/usr/bin/lynq-sdk-ready"
+EXEC_ARGS=""
+
+
+start() {
+ echo -n "Starting $DAEMON... "
+ start-stop-daemon --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS
+ [ $? -eq 0 ] && echo "OK" || echo "ERROR"
+}
+
+stop() {
+ echo -n "Stopping $DAEMON... "
+ start-stop-daemon -K -p $PIDFILE
+ [ $? -eq 0 ] && echo "OK" || echo "ERROR"
+}
+
+restart() {
+ stop
+ start
+}
+
+case "$1" in
+ start|stop|restart)
+ "$1"
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+esac
+
+exit $?
+
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_sdk_ready.service b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_sdk_ready.service
new file mode 100755
index 0000000..5132c86
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_sdk_ready.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=lynq sdk ready
+After=lynq_ril_service.service
+
+[Service]
+StandardOutput=kmsg+console
+Type=simple
+RemainAfterExit=no
+ExecStart=/usr/bin/lynq-sdk-ready
+Restart=always
+User=root
+Group=root
+
+[Install]
+Alias=rilsvc
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.cpp b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.cpp
new file mode 100755
index 0000000..b9fba74
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.cpp
@@ -0,0 +1,668 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <unistd.h>
+#include <binder/Parcel.h>
+#include <log/log.h>
+#include <cutils/jstring.h>
+#include <pthread.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
+
+#include <errno.h>
+#include "lynq_timer.h"
+#include <include/lynq_uci.h>
+
+#define LOG_TAG "LYNQ_SDK"
+#define DEST_PORT 8088
+#define DSET_IP_ADDRESS "127.0.0.1"
+#define RIL_REQUEST_DEVICE_IDENTITY 98
+#define MAX_LEN 1024
+#define TIMER 30
+
+
+#define LOG_UCI_FILE "lynq_uci"
+#define LOG_UCI_MODULE "debug_mode"
+
+using ::android::Parcel;
+
+static pthread_mutex_t g_lynq_sim_sendto_mutex;
+
+typedef struct{
+ int uToken;
+ int request;
+ int paramLen;
+ char param[MAX_LEN];
+}lynq_client_t;
+
+int num = 0;
+
+int max_num;
+static int get_md_sta(void)
+{
+ FILE *fp;
+ char buffer[64]={};
+ fp = popen("cat /sys/kernel/ccci/boot","r");
+ if(fp == NULL)
+ {
+ RLOGD("function %s fp is null\n", __FUNCTION__);
+ return 0;
+ }
+ fgets(buffer,sizeof(buffer),fp);
+ if(!strlen(buffer))
+ {
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ pclose(fp);
+ return 0;
+ }
+ if(buffer[4] == '4')
+ {
+ pclose(fp);
+ return 1;
+ }
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ pclose(fp);
+ return 0;
+}
+
+static int t800_check_service(const char *service)
+{
+ FILE *fp;
+ char buffer[1024]={};
+ if(!strcmp(service, "/usr/sbin/mtkfusionrild"))
+ {
+ fp = popen("ps -ef|grep rild","r");
+ }
+ else if(!strcmp(service, "lynq-ril-service"))
+ {
+ fp = popen("ps -ef|grep ril-service","r");
+ }
+ if(fp == NULL)
+ {
+ RLOGD("function %s fp is null\n", __FUNCTION__);
+ return 0;
+ }
+ while(NULL != fgets(buffer,sizeof(buffer),fp))
+ {
+ if(strstr(buffer,service))
+ {
+ pclose(fp);
+ RLOGD("check_service 1\n");
+ return 1;
+ }
+ }
+ RLOGD("check_service 0\n");
+ pclose(fp);
+ return 0;
+}
+
+
+static int t106_check_service(const char *service)
+{
+ FILE *fp;
+ char buffer[1024]={};
+
+ fp = popen("ps -ef|grep ril-service","r");
+ if(fp == NULL)
+ {
+ ALOGD("ril-service fp is null\n");
+ return -1;
+ }
+ while(NULL != fgets(buffer,sizeof(buffer),fp))
+ {
+ if(strstr(buffer,service))
+ {
+ pclose(fp);
+ ALOGD("check_service right\n");
+ return 1;
+ }
+ }
+ ALOGD("check_service -1\n");
+ pclose(fp);
+ return 0;
+}
+
+/**
+ * @brief 30s request imei
+ *
+ * @param arg
+ * @return void*
+ */
+void * timer_request_imei(void * arg)
+{
+ int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (-1 == sock_fd)
+ {
+ RLOGD("__FUNCTION__ %s create sock_fd failed %s\n", __FUNCTION__, strerror(errno));
+ /*set uci*/
+ /*socket abnormal*/
+ system("uci set lynq_uci.sdk_ready='3'");
+ /*set uci*/
+ return NULL;
+ }
+ struct sockaddr_in liblynq_data_socket;
+ bzero(&liblynq_data_socket, sizeof(liblynq_data_socket));
+ //set this lib socket config
+ liblynq_data_socket.sin_family = AF_INET;
+ liblynq_data_socket.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
+ int ret = bind(sock_fd, (struct sockaddr *)&liblynq_data_socket, sizeof(liblynq_data_socket));
+ if (-1 == ret)
+ {
+ RLOGE("liblynq_data_socket bind fail,errno:%d",errno);
+ return NULL;
+ }
+
+ struct timeval timeOut;
+ timeOut.tv_sec = 3;//timeout time 3s
+ timeOut.tv_usec = 0;
+ if (setsockopt(sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
+ {
+ RLOGD("__FUNCTION__ %s time out setting failed %s\n", __FUNCTION__, strerror(errno));
+ /*set uci*/
+ /*socket abnormal*/
+ system("uci set lynq_uci.sdk_ready='3'");
+ /*set uci*/
+ return NULL;
+ }
+ struct sockaddr_in addr_serv;
+ memset(&addr_serv, 0, sizeof(addr_serv));
+ addr_serv.sin_family = AF_INET;
+ addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
+ addr_serv.sin_port = htons(DEST_PORT);
+ int len_addr_serv = sizeof(addr_serv);
+ int send_num = -1;
+ int recv_num = -1;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int token = -1;
+ int res_error = -1;
+ lynq_client_t client_t;
+ char res_data[MAX_LEN] = {0};
+ client_t.request = RIL_REQUEST_DEVICE_IDENTITY;
+ client_t.paramLen = 0;
+ client_t.uToken = 999;
+ memset(client_t.param, 0, sizeof(client_t.param));
+ while (1)
+ {
+ bzero(res_data, MAX_LEN);
+ pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
+ send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
+ RLOGD("send_num %d\n", send_num);
+ if(send_num == 0)
+ {
+ RLOGD("__FUNCTION__ %s Close to end %s\n", __FUNCTION__, strerror(errno));
+ //unknow
+ system("uci set lynq_uci.sdk_ready='4'");
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ continue;
+ }
+ if(send_num < 0)
+ {
+ RLOGD("__FUNCTION__ %s sendto error %s\n", __FUNCTION__, strerror(errno));
+ //unknow
+ system("uci set lynq_uci.sdk_ready='4'");
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ continue;
+ }
+ //get data msg
+ recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&
+len_addr_serv);
+ RLOGD("recv_num %d\n", recv_num);
+ if(recv_num == 0)
+ {
+ RLOGD("__FUNCTION__ %s Close to end\n", __FUNCTION__);
+ //unknow
+ system("uci set lynq_uci.sdk_ready='4'");
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ continue;;
+ }
+ if(recv_num == -1 && errno == EAGAIN)
+ {
+ RLOGD("__FUNCTION__ %srecvfrom fail because timeout\n", __FUNCTION__);
+ /*set uci*/
+#ifdef MOBILETEK_TARGET_PLATFORM_T800
+ if(!get_md_sta())
+ {
+ system("uci set lynq_uci.sdk_ready='1'");
+ }
+ else
+ {
+ if(t800_check_service("/usr/sbin/mtkfusionrild"))//rild work
+ {
+ if(!t800_check_service("lynq-ril-service"))//not find,must be socket error
+ {
+ system("uci set lynq_uci.sdk_ready='3'");
+ }
+ else
+ {
+ //unknow error
+ system("uci set lynq_uci.sdk_ready='4'");
+ }
+
+ }
+ else//rild no work
+ {
+ //unknow
+ system("uci set lynq_uci.sdk_ready='4'");
+ }
+ }
+#endif
+
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+ if(!t106_check_service("lynq-ril-service"))//not find,must be socket error
+ {
+ //unknow error
+ system("uci set lynq_uci.sdk_ready='4'");
+ }
+#endif
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ continue;;
+ }
+ if(recv_num < 0)
+ {
+ RLOGD("__FUNCTION__ %srecvfrom fail %s\n", __FUNCTION__, strerror(errno));
+ //unknow
+ system("uci set lynq_uci.sdk_ready='4'");
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ continue;;
+ }
+ Parcel p;
+ p.setData((uint8_t *)res_data,sizeof(char)*recv_num);
+ p.setDataPosition(0);
+ if(p.dataAvail() > 0)
+ {
+ p.readInt32(&resp_type);
+ p.readInt32(&token);
+ p.readInt32(&request);
+ p.readInt32(&slot_id);
+ p.readInt32(&res_error);
+ }
+ /*judge the res_error*/
+ if(!res_error)
+ {
+ system("uci set lynq_uci.sdk_ready='0'");
+ }
+ else
+ {
+ system("uci set lynq_uci.sdk_ready='2'"); //Md configurations are inconsistent with AP configurations
+ }
+ RLOGD("__FUNCTION__ %s res_error %d\n", __FUNCTION__, res_error);
+ /*judge the res_error*/
+ pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
+ sleep(TIMER);
+ }
+ return NULL;
+}
+
+
+
+void delete_enter(char data[])
+{
+ char *find = strchr(data, '\n');
+ if(find)
+ *find = '\0';
+ return ;
+}
+
+
+void *check(void * arg)
+{
+
+ char pid[200][8];
+ char ffd[200][4];
+ char buf[128];
+ char check_time[4];
+ char timebuf[32];
+ int num = 1;
+ int i=0;
+ int j;
+ FILE *fp,*fp_1;
+ int ret;
+
+ ALOGD("check cpu/pid/interrupts/fd!!!\n");
+ system("mkdir /var/log/check_file");
+ system("touch /var/log/check_time");
+ fp_1 = popen("cat /var/log/check_time","r");
+ if(fgets(check_time, 4, fp_1) != NULL)
+ {
+ num = atoi(check_time);
+ }
+ pclose(fp_1);
+ while(1)
+ {
+ i = 0;
+ system("date >>/var/log/check_file/cpu_moniter.txt");
+ ret = system("top -b |head -n 25 >>/var/log/check_file/cpu_moniter.txt");
+ ALOGD("cpu ret %d", ret);
+ system("date >>/var/log/check_file/inter_moniter.txt");
+ ret = system("cat /proc/interrupts |grep -v \": 0 0\" >>/var/log/check_file/inter_moniter.txt");
+ ALOGD("interrupts ret %d", ret);
+
+ system("date >>/var/log/check_file/pid_moniter.txt");
+ ret = system("ps -e \"%p %a\" | grep -v \"\\[\" >>/var/log/check_file/pid_moniter.txt");
+ ALOGD("pid ret %d", ret);
+
+ system("date >>/var/log/check_file/meminfo_moniter.txt");
+ ret = system("cat /proc/meminfo >>/var/log/check_file/meminfo_moniter.txt");
+ ALOGD("meminfo ret %d", ret);
+
+ system("date >>/var/log/check_file/buddyinfo_moniter.txt");
+ ret = system("cat /proc/buddyinfo >>/var/log/check_file/buddyinfo_moniter.txt");
+ ALOGD("buddyinfo ret %d", ret);
+#ifdef MOBILETEK_TARGET_PLATFORM_T800
+ system("date >>/var/log/check_file/ps_auxw_moniter.txt");
+ ret = system("ps -auxw|grep -v \"0.0 0.0\"|grep -v \"0.1 0.0\"|grep -v \"0.0 0.1\" >>/var/log/check_file/ps_auxw_moniter.txt");
+ ALOGD("ps_auxw ret %d", ret);
+#endif
+ system("date >>/var/log/check_file/cur_freq_moniter.txt");
+ ret = system("cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq >>/var/log/check_file/cur_freq_moniter.txt");
+ ALOGD("cur_freq ret %d", ret);
+
+ system("date >>/var/log/check_file/available_frequencies_moniter.txt");
+ ret = system("cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies >>/var/log/check_file/available_frequencies_moniter.txt");
+ ALOGD("available_frequencies ret %d", ret);
+
+ system("date >>/var/log/check_file/fd_moniter.txt");
+ fp = popen("ps -e \"%p %a\" | grep -v \"\\[\"|awk '{print $1}'","r");
+ while(fgets(pid[i], 8, fp) != NULL)
+ {
+ ALOGD("pid[%d]:%s", i, pid[i]);
+ delete_enter(pid[i]);
+ i++;
+ }
+ pclose(fp);
+
+ for(j=1;j<i;j++)
+ {
+ sprintf(buf, "ls /proc/%s/fd | wc -l", pid[j]);
+ fp = popen(buf, "r");
+ fgets(ffd[j], 4, fp);
+ sprintf(buf,"echo \"pid: %s, fd_num: %s\" >>/var/log/check_file/fd_moniter.txt",pid[j], ffd[j]);
+ ALOGD("%s",buf);
+ system(buf);
+ pclose(fp);
+ }
+
+ if(num > max_num)
+ {
+ system("cp /var/log/check_file/cpu_moniter.txt /var/log/check_file/cpu_moniter_1.txt");
+ system("cp /var/log/check_file/inter_moniter.txt /var/log/check_file/inter_moniter_1.txt");
+ system("cp /var/log/check_file/pid_moniter.txt /var/log/check_file/pid_moniter_1.txt");
+ system("cp /var/log/check_file/fd_moniter.txt /var/log/check_file/fd_moniter_1.txt");
+ system("cp /var/log/check_file/meminfo_moniter.txt /var/log/check_file/meminfo_moniter_1.txt");
+ system("cp /var/log/check_file/buddyinfo_moniter.txt /var/log/check_file/buddyinfo_moniter_1.txt");
+#ifdef MOBILETEK_TARGET_PLATFORM_T800
+ system("cp /var/log/check_file/ps_auxw_moniter.txt /var/log/check_file/ps_auxw_moniter_1.txt");
+#endif
+ system("cp /var/log/check_file/cur_freq_moniter.txt /var/log/check_file/cur_freq_moniter_1.txt");
+ system("cp /var/log/check_file/available_frequencies_moniter.txt /var/log/check_file/available_frequencies_moniter_1.txt");
+
+
+ system("rm -rf /var/log/check_file/cpu_moniter.txt");
+ system("rm -rf /var/log/check_file/inter_moniter.txt");
+ system("rm -rf /var/log/check_file/pid_moniter.txt");
+ system("rm -rf /var/log/check_file/fd_moniter.txt");
+ system("rm -rf /var/log/check_file/meminfo_moniter.txt");
+ system("rm -rf /var/log/check_file/buddyinfo_moniter.txt");
+#ifdef MOBILETEK_TARGET_PLATFORM_T800
+ system("rm -rf /var/log/check_file/ps_auxw_moniter.txt");
+#endif
+ system("rm -rf /var/log/check_file/cur_freq_moniter.txt");
+ system("rm -rf /var/log/check_file/available_frequencies_moniter.txt");
+
+ num = 0;
+ }
+ num++;
+ sprintf(timebuf, "echo \"%d\" >/var/log/check_time", num);
+ ret = system(timebuf);
+ sleep(300);
+ }
+ return NULL;
+
+}
+
+
+void *t800_check_uci(void * arg)
+{
+ int ret[6];
+ int result = 0;
+ int flag = 0;
+
+ char uci_0[]="/etc/config/lynq_uci";
+ char uci_1[]="/etc/config/lynq_uci_ro";
+ char uci_2[]="/etc/config/mdlog";
+ char uci_3[]="/etc/config/radio_property";
+ char uci_4[]="/etc/config/service";
+ char uci_5[]="/etc/config/usb";
+ RLOGD("start check uci\n");
+ while(num++ < 4)
+ {
+ RLOGD("@@@@@@@num=%d\n", num);
+ flag = 0;
+ ret[0] = system("uci show | grep \"lynq_uci.lynq_ril\" > /dev/null");
+ if(ret[0] != 0)
+ {
+ RLOGD("lynq_uci unload\n");
+ flag = 1;
+ }
+
+ ret[1] = system("uci show | grep \"^lynq_uci_ro\.\" > /dev/null");
+ if(ret[1] != 0)
+ {
+ RLOGD("lynq_uci_ro unload\n");
+ flag = 1;
+ }
+
+ ret[2] = system("uci show | grep \"^mdlog\.\"");
+ if(ret[2] != 0)
+ {
+ RLOGD("mdlog unload\n");
+ flag = 1;
+ }
+
+ ret[3] = system("uci show | grep \"^radio_property\.\" > /dev/null");
+ if(ret[3] != 0)
+ {
+ RLOGD("radio_property unload\n");
+ flag = 1;
+ }
+
+ ret[4] = system("uci show | grep \"^service\.\" > /dev/null");
+ if(ret[4] != 0)
+ {
+ RLOGD("service unload\n");
+ flag = 1;
+ }
+
+ ret[5] = system("uci show | grep \"^usb\.\" > /dev/null");
+ if(ret[5] != 0)
+ {
+ RLOGD("usb unload\n");
+ flag = 1;
+ }
+
+ RLOGD("flag=%d\n",flag);
+ if(flag != 0)
+ {
+ RLOGD("config reload\n");
+ result = chdir("/data_backup/");
+ result =system("tar -zxvf userdata.tar.gz -C /STATE/ >/dev/null");
+ if(result!= 0)
+ {
+ RLOGD("cp config fail\n");
+ }
+ if(ret[0] != 0)
+ {
+ lynq_load_config(uci_0);
+ RLOGD("reload lynq_uci\n");
+ system("systemctl start autosuspend");
+ }
+ if(ret[1] != 0)
+ {
+ lynq_load_config(uci_1);
+ RLOGD("reload lynq_uci_ro\n");
+ }
+ if(ret[2] != 0)
+ {
+ lynq_load_config(uci_2);
+ RLOGD("reload mdlog\n");
+ }
+ if(ret[3] != 0)
+ {
+ lynq_load_config(uci_3);
+ RLOGD("reload radio_property\n");
+ system("systemctl restart mtkfusionrild");
+ }
+ if(ret[4] != 0)
+ {
+ lynq_load_config(uci_4);
+ RLOGD("reload service\n");
+ }
+ if(ret[5] != 0)
+ {
+ lynq_load_config(uci_5);
+ RLOGD("reload usb\n");
+ }
+ }
+ else
+ {
+ RLOGD("uci check success, exit check!\n");
+ break;
+ }
+ sleep(2);
+ }
+ return NULL;
+}
+
+
+void *t106_check_uci(void * arg)
+{
+ int ret[6];
+ int result = 0;
+ int flag = 0;
+
+ char uci_0[]="/etc/config/lynq_uci";
+ char uci_1[]="/etc/config/lynq_uci_ro";
+
+ ALOGD("start check uci\n");
+ while(num++ < 4)
+ {
+ ALOGD("@@@@@@@num=%d\n", num);
+ flag = 0;
+ ret[0] = system("uci show | grep \"lynq_uci.lynq_ril\"");
+ if(ret[0] != 0)
+ {
+ ALOGD("lynq_uci unload\n");
+ flag = 1;
+ }
+
+ ret[1] = system("uci show | grep \"^lynq_uci_ro\.\"");
+ if(ret[1] != 0)
+ {
+ ALOGD("lynq_uci_ro unload\n");
+ flag = 1;
+ }
+
+ ALOGD("flag=%d\n",flag);
+ if(flag != 0)
+ {
+ ALOGD("config reload\n");
+ result =system("cp -R /etc/config/ /mnt/userdata/");
+ if(result!= 0)
+ {
+ ALOGD("cp config fail\n");
+ }
+ if(ret[0] != 0)
+ {
+ ALOGD("config reload\n");
+ result =system("cp -R /etc/config/lynq_uci /mnt/userdata/config/");
+ if(result!= 0)
+ {
+ ALOGD("cp config fail\n");
+ }
+ lynq_load_config(uci_0);
+ ALOGD("reload lynq_uci\n");
+ system("./etc/init.d/lynq-autosuspend.sh restart");
+ }
+ if(ret[1] != 0)
+ {
+ ALOGD("config reload\n");
+ result =system("ln -s /etc/config/lynq_uci_ro /mnt/userdata/config/");
+ if(result!= 0)
+ {
+ ALOGD("cp config fail\n");
+ }
+ lynq_load_config(uci_1);
+ ALOGD("reload lynq_uci_ro\n");
+ }
+ }
+ else
+ {
+ ALOGD("uci check success, exit check!\n");
+ break;
+ }
+ sleep(2);
+ }
+ return NULL;
+}
+
+
+
+void start_timer_request(void)
+{
+ pthread_t thid,thid_1,thid_2;
+ pthread_attr_t a;
+ pthread_attr_init(&a);
+ pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
+
+ char tmp[20];
+ int debug_mode;
+ int ret;
+
+ ALOGD("start lynq-sdk-ready\n");
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+ ret = pthread_create(&thid_2,NULL,t106_check_uci,NULL);
+#endif
+
+#ifdef MOBILETEK_TARGET_PLATFORM_T800
+ ret = pthread_create(&thid_2,NULL,t800_check_uci,NULL);
+#endif
+ if(ret != 0){
+ ALOGD("pthread_create error!!!");
+ return;
+ }
+ pthread_detach(thid_2);
+
+ ret = pthread_create(&thid, &a, timer_request_imei, NULL);
+ if(ret != 0){
+ ALOGD("pthread_create error!!!");
+ return;
+ }
+
+ ret = lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, "check_file_size", tmp);
+ ALOGD("ret =%d, tmp is %s\n", ret, tmp);
+ max_num=atoi(tmp);
+ ALOGD("max_num is %d!!!\n", max_num);
+
+ ret = lynq_get_value(LOG_UCI_FILE, LOG_UCI_MODULE, "sysinfo_debug_status", tmp);
+ ALOGD("ret =%d, tmp is %s\n", ret, tmp);
+ debug_mode=atoi(tmp);
+ ALOGD("debug_mode is %d!!!\n", debug_mode);
+ if((debug_mode == 1) &&(max_num > 0))
+ {
+ ALOGD("debug_mode is 1, pthread_create start!!!\n");
+ ret = pthread_create(&thid_1, NULL, check, NULL);
+ if(ret != 0)
+ {
+ ALOGD("pthread_create error!!!");
+ return;
+ }
+
+ }
+
+ return;
+}
+
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.h b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.h
new file mode 100755
index 0000000..fac1352
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/lynq_timer.h
@@ -0,0 +1,16 @@
+#ifndef __LYNQ_FACTORY_H__
+#define __LYNQ_FACTORY_H__
+#ifdef __cplusplus
+
+extern "C" {
+#endif
+
+
+
+void start_timer_request(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/main.cpp b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/main.cpp
new file mode 100755
index 0000000..5eead08
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/main.cpp
@@ -0,0 +1,24 @@
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include "lynq_timer.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+int main(void){
+ start_timer_request();
+ while (1)
+ {
+ sleep(UINT32_MAX);
+ }
+
+ return 0;
+}
+#ifdef __cplusplus
+}
+#endif
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/makefile b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/makefile
new file mode 100755
index 0000000..56280dd
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/framework/lynq-sdk-ready/makefile
@@ -0,0 +1,62 @@
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+ -std=c++11 \
+ -g -Os \
+ -flto \
+ -DRIL_SHLIB \
+ -DATCI_PARSE \
+ -DKEEP_ALIVE \
+ -DECALL_SUPPORT \
+ -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 -DMOBILETEK_TARGET_PLATFORM_T106
+endif
+
+ifeq ($(strip $(TARGET_PLATFORM)), T106)
+ LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T106
+endif
+
+ifeq ($(strip $(TARGET_PLATFORM)), T800)
+ LOCAL_CFLAGS += -DMOBILETEK_TARGET_PLATFORM_T800
+endif
+
+$(warning ################# lynq sdk ROOT: $(ROOT),includedir:$(includedir))
+LOCAL_PATH = .
+
+LOCAL_C_INCLUDES = \
+ -I. \
+ -I$(LOCAL_PATH) \
+ -I$(ROOT)$(includedir)/logger \
+ -I$(ROOT)$(includedir)/liblog \
+
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -lstdc++ \
+ -llog \
+ -lcutils \
+ -lutils \
+ -lbinder \
+ -lpthread \
+ -llynq-uci \
+
+LOCAL_SRC_FILES_CPP = $(wildcard *.cpp)
+EXECUTABLE = lynq-sdk-ready
+
+OBJECTS=$(LOCAL_SRC_FILES_CPP:.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)
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/include/lynq_uci.h b/cap/zx297520v3/src/lynq/lib/liblynq-uci/include/lynq_uci.h
index 0e9ec37..0a08c31 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/include/lynq_uci.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/include/lynq_uci.h
@@ -29,6 +29,9 @@
int lynq_get_value(char *file, char *section, char *key, char *tmp);
+
+int lynq_load_config(char *filename);
+
#ifdef __cplusplus
}
#endif
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 b3eb4bc..f88ea81 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -15,6 +15,9 @@
option auto_enable '0'
option debug '1'
+config debug_mode 'debug_mode'
+ option sysinfo_debug_status '1'
+ option check_file_size '228'
config lynq_fota_rw 'lynq_fota'
config service 'adb'
@@ -29,4 +32,4 @@
option status '0'
config lynq_led_rw 'lynq_led'
- option lynq_statusled_on '0'
\ No newline at end of file
+ option lynq_statusled_on '0'
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
index 4aa92ac..284caad 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
@@ -1,4 +1,5 @@
config lynq_version_ro 'lynq_version'
-config lynq_wifi_ro 'lynq_wifi'
- option serverport '8000'
\ No newline at end of file
+config lynq_version 'lynq_version_ro'
+ option LYNQ_SW_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.04_CAP.09.04'
+ option LYNQ_SW_INSIDE_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.04_CAP.09.04'
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/src/lynq_uci.c b/cap/zx297520v3/src/lynq/lib/liblynq-uci/src/lynq_uci.c
index a50eed1..b8a658d 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/src/lynq_uci.c
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/src/lynq_uci.c
@@ -214,3 +214,22 @@
#endif //#if UCI_SUPPORT
return 0;//#if UCI_SUPPORT add
}
+
+int lynq_load_config(char *filename)
+{
+ struct uci_context * ctx = NULL;
+ struct uci_element *e;
+ struct uci_package * pkg = NULL;
+ ctx = uci_alloc_context();
+ if (UCI_OK != uci_load(ctx, filename, &pkg))
+ {
+ uci_free_context(ctx);
+ ctx = NULL;
+ return -1;
+ }
+ uci_unload(ctx, pkg);
+ uci_free_context(ctx);
+ ctx = NULL;
+ return 0;
+}
+
diff --git a/update_version.sh b/update_version.sh
old mode 100644
new mode 100755
index 1c2a397..a1270f5
--- a/update_version.sh
+++ b/update_version.sh
@@ -10,6 +10,9 @@
LYNQ_AP_SW_VERSION="export LYNQ_VERSION=\"${LYNQ_AP_VERSION}\""
LYNQ_COMMITID="LYNQ_CONFIG_COMMITID = \"${COMMIT_ID}\""
LYNQ_BOOT_COMMIT_ID="LYNQ_COMMIT_ID = \"${COMMIT_ID}\""
+LYNQ_VERSION_UCI=" option LYNQ_SW_VERSION '${LYNQ_AP_VERSION}_${LYNQ_CAP_VERSION}'"
+LYNQ_INSIDE_VERSION_UCI=" option LYNQ_SW_INSIDE_VERSION '${LYNQ_AP_VERSION}_${LYNQ_CAP_INSIDE_VERSION}'"
+
eval sed -i 's/^.*LYNQ_CONFIG_VERSION.*$/"${LYNQ_SW_INSIDE_VERSION}"/' $(pwd)/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
eval sed -i 's/^.*LYNQ_CONFIG_SW_VERSION.*$/"${LYNQ_SW_VERSION}"/' $(pwd)/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
eval sed -i 's/^.*LYNQ_CONFIG_VERSION.*$/"${LYNQ_SW_INSIDE_VERSION}"/' $(pwd)/cap/zx297520v3/sources/meta-zxic-custom/conf/lynq_base.conf
@@ -18,4 +21,6 @@
eval sed -i 's/^.*LYNQ_VERSION.*$/"${LYNQ_AP_SW_VERSION}"/' $(pwd)/ap/build/build.sh
eval sed -i 's/^.*LYNQ_CONFIG_VERSION[[:space:]]=.*$/"${LYNQ_SW_INSIDE_VERSION}"/' $(pwd)/boot/common/src/uboot/arch/arm/lib/Makefile
eval sed -i 's/^.*LYNQ_CONFIG_COMMITID[[:space:]]=.*$/"${LYNQ_COMMITID}"/' $(pwd)/boot/common/src/uboot/arch/arm/lib/Makefile
+eval sed -i 's/^.*LYNQ_SW_VERSION.*$/"${LYNQ_VERSION_UCI}"/' $(pwd)/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
+eval sed -i 's/^.*LYNQ_SW_INSIDE_VERSION.*$/"${LYNQ_INSIDE_VERSION_UCI}"/' $(pwd)/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config