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;
}
}