diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index f4aec91..6091329 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -59,7 +59,7 @@
 lynq_call_list_e_t lynq_call_lists[LYNQ_CALL_MAX]={};
 static pthread_mutex_t call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t call_state_change_cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t s_urc_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_urc_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t s_urc_call_state_change_cond = PTHREAD_COND_INITIALIZER;
 static pthread_mutex_t s_incoming_call_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_cond_t s_incoming_call_cond = PTHREAD_COND_INITIALIZER;
@@ -71,24 +71,24 @@
     CALL_OFF=0,
     CALL_ON=1
 }call_state;
-typedef enum{
-    LYNQ_E_CARDSTATE_ERROR=8000,
-    /* The voice service state is out of service*/
-    LYNQ_E_STATE_OUT_OF_SERVICE=8001,
-    /* The voice service state is EMERGENCY_ONLY*/
-    LYNQ_E_STATE_EMERGENCY_ONLY=8002,
-    /* The radio power is power off*/
-    LYNQ_E_STATE_POWER_OFF=8003,
-    LYNQ_E_TIME_OUT=8004,
-    /*create or open sms DB fail */
-    LYNQ_E_SMS_DB_FAIL=8005,
-    /*Failed to execute sql statement*/
-    LYNQ_E_SMS_SQL_FAIL = 8006,
-    LYNQ_E_SMS_NOT_FIND = 8007,
-    /* The logic conflict*/
-    LYNQ_E_CONFLICT=9000,
-    /*Null anomaly*/
-    LYNQ_E_NULL_ANONALY=9001
+typedef enum{
+    LYNQ_E_CARDSTATE_ERROR=8000,
+    /* The voice service state is out of service*/
+    LYNQ_E_STATE_OUT_OF_SERVICE=8001,
+    /* The voice service state is EMERGENCY_ONLY*/
+    LYNQ_E_STATE_EMERGENCY_ONLY=8002,
+    /* The radio power is power off*/
+    LYNQ_E_STATE_POWER_OFF=8003,
+    LYNQ_E_TIME_OUT=8004,
+    /*create or open sms DB fail */
+    LYNQ_E_SMS_DB_FAIL=8005,
+    /*Failed to execute sql statement*/
+    LYNQ_E_SMS_SQL_FAIL = 8006,
+    LYNQ_E_SMS_NOT_FIND = 8007,
+    /* The logic conflict*/
+    LYNQ_E_CONFLICT=9000,
+    /*Null anomaly*/
+    LYNQ_E_NULL_ANONALY=9001
 }LYNQ_E;
 
 int lynq_call_state =CALL_OFF;
@@ -148,10 +148,10 @@
     return 0;
 }
 static char *strdupReadString(Parcel &p) {
-    size_t stringlen;
+    size_t stringlen;
     const char16_t *s16;
     s16 = p.readString16Inplace(&stringlen);
-    return strndup16to8(s16, stringlen);
+    return strndup16to8(s16, stringlen);
 }
 
 int lynq_get_current_call_list(lynq_call_list_t call_list[LYNQ_CALL_MAX])
@@ -324,21 +324,21 @@
 }
 
 void *triggerGetCallList(void *parg)
-{
-    int ret=0;
-    lynq_call_list_t call_list[LYNQ_CALL_MAX];
+{
+    int ret=0;
+    lynq_call_list_t call_list[LYNQ_CALL_MAX];
     while(call_list_loop)
-    {
-        pthread_mutex_lock(&s_urc_call_state_change_mutex);
-        pthread_cond_wait(&s_urc_call_state_change_cond, &s_urc_call_state_change_mutex);
+    {
+        pthread_mutex_lock(&s_urc_call_state_change_mutex);
+        pthread_cond_wait(&s_urc_call_state_change_cond, &s_urc_call_state_change_mutex);
         LYDBGLOG("triggerGetCallList event!!!\n");
-        memset(call_list,0,sizeof(call_list));
-        ret = lynq_get_current_call_list(call_list);
-        if(ret != 0)
-        {
-            printf("get current call list failure!!!\n");
-            break;
-        }
+        memset(call_list,0,sizeof(call_list));
+        ret = lynq_get_current_call_list(call_list);
+        if(ret != 0)
+        {
+            printf("get current call list failure!!!\n");
+            break;
+        }
         for(int i = 0;i < LYNQ_CALL_MAX;i++)
         {
             if(call_list[i].direction == 1)//MT call
@@ -376,28 +376,28 @@
                 LYDBGLOG("[count:%d]call_id=%d,call_state=%d,direction=%d,addr=%s,toa=%d",i,call_list[i].call_id,call_list[i].call_state,
                 call_list[i].direction,call_list[i].addr,call_list[i].toa);
             }
-        }
+        }
         s_call_urc_event_complete = 1;
         if(isDial==1)
         {
             sendSignalToWaitCallStateChange();
             isDial = 0;
         }
-        pthread_mutex_unlock(&s_urc_call_state_change_mutex);
-    }
-    return NULL;
+        pthread_mutex_unlock(&s_urc_call_state_change_mutex);
+    }
+    return NULL;
 }
 
 void lynqRespWatingEvent()
-{
-    if(s_call_urc_event_complete==1)
-    {
-        pthread_mutex_lock(&s_urc_call_state_change_mutex);
-        pthread_cond_signal(&s_urc_call_state_change_cond);
-        s_call_urc_event_complete = 0;
-        pthread_mutex_unlock(&s_urc_call_state_change_mutex);
+{
+    if(s_call_urc_event_complete==1)
+    {
+        pthread_mutex_lock(&s_urc_call_state_change_mutex);
+        pthread_cond_signal(&s_urc_call_state_change_cond);
+        s_call_urc_event_complete = 0;
+        pthread_mutex_unlock(&s_urc_call_state_change_mutex);
     }
-    return;
+    return;
 }
 
 /*Warren add for T800 platform 2021/11/19 start*/
@@ -442,7 +442,7 @@
 
 }
 void *thread_urc_recv(void *parg)
-{
+{
     int socket_fd = (int64_t)parg;
     int len=0;
     socklen_t addr_len=0;
@@ -460,9 +460,9 @@
         //get data msg
         len = recvfrom(socket_fd,urc_data,LYNQ_REC_BUF,0,(struct sockaddr *)&dest_addr,&addr_len);
         if(len <= 0)
-        {
+        {
             perror("thread_urc_recv step2 fail:");
-            break;
+            break;
         }
         LYDBGLOG("=====>urc data len<=====:%d\n",len);
         p = new Parcel();
@@ -519,28 +519,28 @@
     struct sockaddr_in urc_local_addr;
     pthread_t tid;
     pthread_attr_t attr;
-    socket_fd = socket(AF_INET,SOCK_DGRAM,0);
-    printf("test 001\n");
-    if(socket_fd < 0)
-    {
+    socket_fd = socket(AF_INET,SOCK_DGRAM,0);
+    printf("test 001\n");
+    if(socket_fd < 0)
+    {
         perror("creaet socket for udp fail");
-        return -1;
+        return -1;
     }
     urc_local_addr.sin_family = AF_INET;
     urc_local_addr.sin_port = htons(LYNQ_URC_SERVICE_PORT);
     urc_local_addr.sin_addr.s_addr = htons(INADDR_ANY);
     /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
-    rt = setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
-    if(rt<0)
-    {
+    rt = setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
+    if(rt<0)
+    {
         perror("SO_REUSEADDR fail\n");
         return -1;
     }
     rt = bind(socket_fd ,(struct sockaddr*)&urc_local_addr, sizeof(urc_local_addr));
-    if (rt == -1)
-    {
+    if (rt == -1)
+    {
         perror("bind failed");
-        return -1;
+        return -1;
     }
     pthread_attr_init(&attr);
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
@@ -786,6 +786,7 @@
     if(enable != 1 || enable != 0){
         return 0;
     }
+    return 1;
 }
 
 int lynq_set_mute_mic(const int enable)
@@ -852,6 +853,7 @@
     if(volume < 0 ||volume >36){
         return 0;
     }
+    return 1;
 }
 
 int lynq_set_DTMF_volume(const int volume)
