Merge "[Feature][T106]version update to T106CN-ZS03.V2.01.01.02P52U02.AP.09.05_CAP.09.05"
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 13467a6..2b189ba 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
@@ -60,7 +60,7 @@
 
 #rootfs文件系统squashfs参数配置,压缩方式和块大小可以更改
 #squashfs_xz squashfs_zstd
-DISTRO_FEATURES_append = " squashfs_xz "
+DISTRO_FEATURES_append = " squashfs_zstd "
 ROOTFS_SQUASHFS_ARGS = "-nopad -noappend -root-owned -b 256k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 1"
 ROOTFS_SQUASHFS_ARGS += " ${@bb.utils.contains("DISTRO_FEATURES", "selinux", "-xattrs", "", d)} "
 ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_zstd", " -comp zstd ","", d)}"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
index eb557f6..dcf37a9 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
@@ -4,8 +4,6 @@
 #include <errno.h>
 #include <include/lynq-qser-audio.h>
 
-extern sc_audio_handle_t playback_handle;
-
 void player_cmd_proc(char *cmdstr)
 {
     if (strcmp(cmdstr, "P\n") == 0)
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
index 641ebb7..1425ad8 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
@@ -3,7 +3,8 @@
 DESCRIPTION = "lynq ril service"
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
-DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)} libapn libpal libvendor-ril libbinder glib-2.0 dbus liblynq-log liblynq-uci liblynq-shm libmedia"
+DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)} libapn libpal libril libvendor-ril libbinder glib-2.0 dbus liblynq-log liblynq-uci liblynq-shm libmedia libsd-daemon"
+RDEPENDS_${PN} = "libbinder libril libsd-daemon"
 #inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/framework/lynq-ril-service/src"
 FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/framework/:"
@@ -52,7 +53,7 @@
 		install -d ${D}${sysconfdir}/init.d
 		install -m 0755  ${SRC-DIR}/lynq-ril-service.sh ${D}${sysconfdir}/init.d/lynq-ril-service.sh
 		install -d ${D}${sysconfdir}/rcS.d
-		ln -s ../init.d/lynq-ril-service.sh ${D}${sysconfdir}/rcS.d/S82lynq-ril-service
+		ln -s ../init.d/lynq-ril-service.sh ${D}${sysconfdir}/rcS.d/S21lynq-ril-service
 	fi
 #	install -d ${D}${includedir}
 #	install ${S}/atci/ATCI.h ${D}${includedir}
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
index 267f42b..4514ab0 100644
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
@@ -11,7 +11,7 @@
 
 start() {
         echo -n "Starting $DAEMON... "
-        start-stop-daemon --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS
+        start-stop-daemon --notify-await --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS
         [ $? -eq 0 ] && echo "OK" || echo "ERROR"
 }
 
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
index b946904..d5aa454 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
@@ -39,6 +39,14 @@
 #include <signal.h>
 #include "common.h"
 #include "lynq_shm.h"
+#include "sd-daemon.h"
+/*
+#ifdef RIL_TIME_CB
+extern "C" {
+        #include "telephony/ril.h"
+}
+#endif
+*/
 
 extern "C" void RIL_register (const RIL_RadioFunctions *callbacks);
 
@@ -54,6 +62,15 @@
                                 size_t datalen);
 #endif
 
+/*
+#if 1
+ #ifdef RIL_TIME_CB
+extern "C" void RIL_requestTimedCallback (RIL_TimedCallback callback,
+        void *param, const struct timeval *relativeTime);
+#endif
+#endif
+*/
+
 #ifdef RIL_TIME_CB
 void RIL_requestTimedCallback (RIL_TimedCallback callback,void *param, const struct timeval *relativeTime)
 {
@@ -201,6 +218,7 @@
     RLOGD("start rilInit");
     funcs = rilInit(&s_rilEnv, 0, NULL);;
     RLOGD("start RIL_register");
+    sd_notify(0, "READY=1");
     RIL_register(funcs);
 
     android::startGdbusLoop();
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
index 746c615..11e2e1e 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
@@ -144,6 +144,8 @@
     -llynq-uci \
     -llynq-shm  \
     -lmedia \
+    -lril \
+    -lsd-daemon \
 
 ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
 LOCAL_LIBS += -luciwrapper -luciwrapper -lgstbase-1.0 -llynq-protcl -llynq-thermal -llynq-systime  -lnandapi -ldtmf -lasound -lgstreamer-1.0 -lmtk_audio_mixer_ctrl -lpower
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
index cc37b2e..d963767 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
@@ -17,8 +17,8 @@
 
 #include "sc_audio.h"
 
-sc_audio_handle_t playback_handle = SC_AUDIO_INVALID_HANDLE;
-sc_audio_handle_t capture_handle = SC_AUDIO_INVALID_HANDLE;
+extern sc_audio_handle_t playback_handle;
+extern sc_audio_handle_t capture_handle;
 
 typedef void (*_cb_onPlayer)(int);
 
@@ -31,6 +31,8 @@
 
 int qser_AudRecorder_Open(char* device, _cb_onPlayer cb_fun);
 int qser_AudRecorder_StartRecord(int hdl, const char *fd, int offset);
+int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, \
+                 int period_count, int num_channels, int sample_rate);
 int qser_AudRecorder_Pause(void);
 int qser_AudRecorder_Resume(void);
 void qser_AudRecorder_Stop(void);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
index 70b4e43..63ce463 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
@@ -16,6 +16,9 @@
 #define SC_AUDIO_BE_DAI_MIN -1
 #define SC_AUDIO_STREAM_FORMAT_INVALID 0
 
+sc_audio_handle_t playback_handle = SC_AUDIO_INVALID_HANDLE;
+sc_audio_handle_t capture_handle = SC_AUDIO_INVALID_HANDLE;
+
 /********************************************************************
 * @brief: _cb_onPlayer, typedef for a callback function that is called
           when an audio operation is performed
@@ -204,6 +207,83 @@
 }
 
 /********************************************************************
+* @brief: qser_AudRecorder_StartRecord_Custom, used to capture audio from a file and play it
+* @param file [IN]: char*, the path of the audio file
+* @param period_size [IN]: int, the period size of the PCM buffer
+* @param period_count [IN]: int, the period count of the PCM buffer
+* @param num_channels [IN]: int, the number of channels in the audio
+* @param sample_rate [IN]: int, the sample rate of the audio
+* @return : int, returns 0 if successful, returns -1 if failed
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, int period_count, \
+                        int num_channels, int sample_rate)
+{
+    int error_line;
+    sc_audio_pcm_config_t pcm_config;
+    int ret = 0;
+
+    if(NULL == file || 0 == strlen(file))
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    capture_handle = sc_audio_capture_open(SC_AUDIO_FE_PCM_DEV_MULTIMEDIA1, SC_AUDIO_BE_DAI_MIN);
+
+    if (SC_AUDIO_INVALID_HANDLE == capture_handle)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    memset(&pcm_config, 0, sizeof(sc_audio_pcm_config_t));
+
+    if(-1 == period_size || -1 == period_count || -1 == num_channels || -1 == sample_rate)
+    {
+        ret = sc_audio_capture_file_prepare(capture_handle, file, SC_AUDIO_STREAM_FORMAT_INVALID, \
+                        NULL, capture_state_cb, NULL);
+    }
+    else
+    {
+        pcm_config.period_size = period_size;
+        pcm_config.period_count = period_count;
+        pcm_config.flags = 0;
+        pcm_config.num_channels = num_channels;
+        pcm_config.sample_rate = sample_rate;
+        pcm_config.pcm_format = 2;
+        ret = sc_audio_capture_file_prepare(capture_handle, file, SC_AUDIO_STREAM_FORMAT_INVALID, \
+                        &pcm_config, capture_state_cb, NULL);
+    }
+
+    if (SC_ERR_SUCCESS != ret)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    ret = sc_audio_capture_record(capture_handle);
+
+    if (SC_ERR_SUCCESS != ret)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    return 0;
+
+exit:
+    if (SC_AUDIO_INVALID_HANDLE != capture_handle)
+    {
+        sc_audio_capture_close(capture_handle);
+    }
+    LYINFLOG("player_capture_play_file error_line=%d\n", error_line);
+    return -1;
+}
+
+/********************************************************************
 * @brief: qser_AudPlayer_Pause, pause the audio playback
 * @param hdl [IN]: int, handle for the audio device or stream
 * @return : success 0, failed -1
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 1be825b..138514d 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
@@ -27,6 +27,7 @@
 #define COPY_XML_RETRY_TIMES 3
 
 static qser_data_call_evt_cb_t s_data_call_cb = NULL;
+static xmlDocPtr apn_table_xml_pdoc = NULL;
 const int apndb_offset = 683;
 
 void lynq_ipv4_aton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
@@ -385,18 +386,19 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr tmp_node = NULL;
     xmlNodePtr sum_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -441,15 +443,16 @@
     xmlNewProp(tmp_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlNewProp(tmp_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
     xmlAddChild(node,tmp_node);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+   
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
     
     FAILED:
-    if (pdoc)
+    /* if (apn_table_xml_pdoc)
     {
-        xmlFreeDoc(pdoc);
-    }
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }*/
     return RESULT_ERROR;
 }
 
@@ -457,17 +460,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+    // apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -522,15 +525,15 @@
         modify_node = modify_node->next;
         node_num++;
     }
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -538,17 +541,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -579,15 +582,15 @@
     xmlSetProp(modify_node,BAD_CAST"username",(xmlChar *)apn->username);
     xmlSetProp(modify_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlSetProp(modify_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -595,18 +598,18 @@
 int apn_xml_query(unsigned char profile_idx,qser_apn_info_s *apn)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     unsigned char temp = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -650,34 +653,34 @@
     strncpy(apn->username,(char *)xmlGetProp(modify_node, "username"), QSER_APN_USERNAME_SIZE);
     strncpy(apn->password,(char *)xmlGetProp(modify_node, "password"), QSER_APN_PASSWORD_SIZE);
     strncpy(apn->apn_type,(char *)xmlGetProp(modify_node, "apn_type"), QSER_APN_NAME_SIZE);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
 int apn_xml_query_list(qser_apn_info_list_s *apn_list)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     xmlChar *temp_char;
     char temp[64];
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -705,15 +708,15 @@
         modify_node = modify_node->next;
     }
     apn_list->cnt = node_num;
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -973,13 +976,22 @@
         return RESULT_ERROR;
     }
     qser_cb_pthread_create();
+    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
+    {
+        LYERRLOG("open xml file error");
+        return RESULT_ERROR;
+    }
     return RESULT_OK;
 }
 
 void qser_data_call_destroy(void)
 {
     LYINFLOG("[%s] start [%d]",__FUNCTION__,__LINE__);
-    
+    if(apn_table_xml_pdoc)
+    {
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }
     lynq_deinit_data();
     qser_cb_pthread_cancel();
     s_data_call_cb = NULL;
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 284caad..305e4e4 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,5 +1,3 @@
 config lynq_version_ro 'lynq_version'

-

-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'

+        option LYNQ_SW_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.05_CAP.09.05'

+        option LYNQ_SW_INSIDE_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.05_CAP.09.05'

diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
index d1d0a21..da0ce95 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
@@ -19,7 +19,7 @@
 int strStartsWith(const char *line, const char *prefix)
 {
     for ( ; *line != '\0' && *prefix != '\0' ; line++, prefix++) {
-        if (toupper(*line) != toupper(*prefix)) {
+        if (tolower(*line) != tolower(*prefix)) {
             return 0;
         }
     }