[fix]
1.fix bug API 42
2.fix bug API 10
3.fix bug lynq_deinit_data
Change-Id: Ia2597f906a5816726afe25a208cc631e59d09272
diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index b1f8512..4df67e7 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -1,32 +1,32 @@
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <binder/Parcel.h>
-#include <log/log.h>
-#include "lynq_data.h"
-#include <cutils/jstring.h>
-#include <pthread.h>
-#include "liblog/lynq_deflog.h"
-#include <sys/time.h>
-#define LYNQ_SERVICE_PORT 8088
-#define LYNQ_URC_SERVICE_PORT 8086
-#define LYNQ_REC_BUF 8192
-#define LYNQ_REQUEST_PARAM_BUF 8192
-#define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
-#define USER_LOG_TAG "LYNQ_DATA"
-
-using ::android::Parcel;
-typedef struct{
- int uToken;
- int request;
- int paramLen;
- char param[LYNQ_REQUEST_PARAM_BUF];
-}lynq_client_t;
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <binder/Parcel.h>
+#include <log/log.h>
+#include "lynq_data.h"
+#include <cutils/jstring.h>
+#include <pthread.h>
+#include "liblog/lynq_deflog.h"
+#include <sys/time.h>
+#define LYNQ_SERVICE_PORT 8088
+#define LYNQ_URC_SERVICE_PORT 8086
+#define LYNQ_REC_BUF 8192
+#define LYNQ_REQUEST_PARAM_BUF 8192
+#define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
+#define USER_LOG_TAG "LYNQ_DATA"
+
+using ::android::Parcel;
+typedef struct{
+ int uToken;
+ int request;
+ int paramLen;
+ char param[LYNQ_REQUEST_PARAM_BUF];
+}lynq_client_t;
typedef enum{
LYNQ_E_CARDSTATE_ERROR=8000,
/* The voice service state is out of service*/
@@ -45,728 +45,740 @@
LYNQ_E_CONFLICT=9000,
/*Null anomaly*/
LYNQ_E_NULL_ANONALY=9001
-}LYNQ_E;
-
-int lynq_client_sockfd = 0;
-int Global_uToken = 0;
-bool urc_recive_status = 1;
-int lynq_data_call_change_id = -1;
-static pthread_mutex_t s_data_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t s_data_call_state_change_cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t s_pdn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t s_pdn_change_cond = PTHREAD_COND_INITIALIZER;
-
-typedef struct{
- char apn[LYNQ_APN_MAX_LEN];
- char apnType[LYNQ_APN_TYPE_MAX_LEN];
- char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
- int hasUsed;
- int hasTimeout;
-}lynq_apn_t;
-lynq_apn_t lynq_apn_table[LYNQ_APN_CHANNEL_MAX] = {};
-lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
-int lynq_data_call = 0;
-
-int getLynqApnID(char apnType[])
-{
- int ret = 0;
- for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
- {
- if(strcmp(lynq_apn_table[ret].apnType,apnType)==0)
- {
- return ret;
- }
- }
- return -1;
-}
-void updateApnTable(lynq_apn_t *apn_table,char apn[],char apntype[],char ifaceName[])
-{
- if(apn_table==NULL)
- {
- LYERRLOG("apn_table is null");
- return;
- }
- memcpy(apn_table->apn,apn,strlen(apn)+1);
- memcpy(apn_table->apnType,apntype,strlen(apntype)+1);
- memcpy(apn_table->ifaceName,ifaceName,strlen(ifaceName)+1);
- apn_table->hasTimeout = 0;
- apn_table->hasUsed = 1;
- return;
-}
-void cleanOnceApnTable(int apnId)
-{
- if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
- {
- LYERRLOG("apn id is invalid!!!");
- return;
- }
- lynq_apn_table[apnId].hasTimeout = 0;
- lynq_apn_table[apnId].hasUsed = 0;
- bzero(lynq_apn_table[apnId].apn,LYNQ_APN_MAX_LEN);
- bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);
- bzero(lynq_apn_table[apnId].ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
- return;
-}
-int getUnusedElement()
-{
- for(int i=0;i < LYNQ_APN_CHANNEL_MAX; i++)
- {
- if(lynq_apn_table[i].hasUsed!=1)
- {
- return i;
- }
- }
- return -1;
-}
-int updateApn(char apnType[])
-{
- int ret = 0;
- ret = getUnusedElement();
- memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
- lynq_apn_table[ret].hasUsed = 1;
- return ret;
-}
-
-int waitPdnChange()
-{
- int ret = 0;
- pthread_mutex_lock(&s_pdn_change_mutex);
- ret = pthread_cond_wait(&s_pdn_change_cond,&s_pdn_change_mutex);
- pthread_mutex_unlock(&s_pdn_change_mutex);
- return ret;
-}
-int waitDataCallstateChange(int mtime)
-{
- int ret = 0;
- int sec = 0;
- int usec = 0;
- struct timeval now;
- struct timespec timeout;
- gettimeofday(&now,NULL);
- sec = mtime/1000;
- usec = mtime%1000;
- timeout.tv_sec = now.tv_sec+sec;
- timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
- pthread_mutex_lock(&s_data_call_state_change_mutex);
- ret = pthread_cond_timedwait(&s_data_call_state_change_cond,&s_data_call_state_change_mutex,&timeout);
- pthread_mutex_unlock(&s_data_call_state_change_mutex);
- return ret;
-}
-void sendSignalDataCallStateChange()
-{
- pthread_mutex_lock(&s_data_call_state_change_mutex);
- pthread_cond_signal(&s_data_call_state_change_cond);
- pthread_mutex_unlock(&s_data_call_state_change_mutex);
- return;
-}
-void sendSignalPdnChange()
-{
- pthread_mutex_lock(&s_pdn_change_mutex);
- pthread_cond_signal(&s_pdn_change_cond);
- pthread_mutex_unlock(&s_pdn_change_mutex);
- return;
-}
-
-int get_response(int sockfd,Parcel &p)
-{
- int len = 0;
- char recvline[LYNQ_REC_BUF];
- bzero(recvline,LYNQ_REC_BUF);
- /* receive data from server */
- len = read(sockfd, recvline, LYNQ_REC_BUF);
- if(len == -1)
- {
- perror("read error");
- return -1;
- }
- printf("===>n=%d\n",len);
- if (recvline != NULL) {
- p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
- p.setDataPosition(0);
- }
- return 0;
-}
-int JumpHeader(Parcel &p,int *resp_type,int *request,int *slot_id,int *error)
-{
- if(p.dataAvail() > 0)
- {
- p.readInt32(resp_type);
- p.readInt32(request);
- p.readInt32(slot_id);
- p.readInt32(error);
- return 0;
- }
- else
- {
- return -1;
- }
-}
-int send_request(int sockfd,lynq_client_t *client_tmp)
-{
- int ret=0;
- ret = write(sockfd, client_tmp, LYQN_SEDN_BUF);
- if(ret==-1)
- {
- perror("write error");
- return -1;
- }
- return 0;
-}
-static char *strdupReadString(Parcel &p) {
- size_t stringlen;
- const char16_t *s16;
- s16 = p.readString16Inplace(&stringlen);
- return strndup16to8(s16, stringlen);
-}
-static char *strdupReadString_p(Parcel *p) {
- size_t stringlen;
- const char16_t *s16;
- s16 = p->readString16Inplace(&stringlen);
- return strndup16to8(s16, stringlen);
-}
-
-
-/*Warren add for T800 platform 2021/11/19 start*/
-int lynq_socket_client_start()
-{
- struct sockaddr_in lynq_socket_server_addr;
- /* init lynq_socket_server_addr */
- bzero(&lynq_socket_server_addr, sizeof(lynq_socket_server_addr));
- lynq_socket_server_addr.sin_family = AF_INET;
- lynq_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
- lynq_socket_server_addr.sin_addr.s_addr = htons(INADDR_ANY);
- /*
- if(inet_pton(AF_INET,"127.0.0.1", &lynq_socket_server_addr.sin_addr) <= 0)
- {
- printf("[%s] is not a valid IPaddress\n", argv[1]);
- exit(1);
- }
-*/
- lynq_client_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if(connect(lynq_client_sockfd, (struct sockaddr *)&lynq_socket_server_addr, sizeof(lynq_socket_server_addr)) == -1)
- {
- perror("connect error");
- return -1;
- }
- return 0;
-}
-void *thread_urc_recv(void *parg)
+}LYNQ_E;
+
+int lynq_client_sockfd = 0;
+int Global_uToken = 0;
+bool data_urc_recive_status = 1;
+int lynq_data_call_change_id = -1;
+pthread_t lynq_data_tid =-1;
+static pthread_mutex_t s_data_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_data_call_state_change_cond = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t s_pdn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_pdn_change_cond = PTHREAD_COND_INITIALIZER;
+
+typedef struct{
+ char apn[LYNQ_APN_MAX_LEN];
+ char apnType[LYNQ_APN_TYPE_MAX_LEN];
+ char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
+ int hasUsed;
+ int hasTimeout;
+}lynq_apn_t;
+lynq_apn_t lynq_apn_table[LYNQ_APN_CHANNEL_MAX] = {};
+lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
+int lynq_data_call = 0;
+int millli_sleep_with_restart(int millisecond)
{
- int socket_fd = (int64_t)parg;
- int len=0;
- socklen_t addr_len=0;
- uint8_t *dataLength = NULL;
- char urc_data[LYNQ_REC_BUF];
- char apn[LYNQ_APN_MAX_LEN];
- char apnType[LYNQ_APN_TYPE_MAX_LEN];
- int pdnState = 0;
- char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
- int slot_id = -1;
- int resp_type = -1;
- int urcid = -1;
- char *urc_msg = NULL;
- Parcel *p = NULL;
- struct sockaddr_in dest_addr;
- LYINFLOG("thread_urc_recv in running....\n");
- while(urc_recive_status)
- {
- bzero(urc_data,LYNQ_REC_BUF);
- //get data msg
- len = recvfrom(socket_fd,urc_data,LYNQ_REC_BUF,0,(struct sockaddr *)&dest_addr,&addr_len);
- if(len <= 0)
+ int left = millisecond*1000;
+ while (left > 0)
+ {
+ left = usleep(left);
+ }
+
+ return 0;
+}
+int getLynqApnID(char apnType[])
+{
+ int ret = 0;
+ for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
+ {
+ if(strcmp(lynq_apn_table[ret].apnType,apnType)==0)
{
- perror("thread_urc_recv step2 fail:");
+ return ret;
+ }
+ }
+ return -1;
+}
+void updateApnTable(lynq_apn_t *apn_table,char apn[],char apntype[],char ifaceName[])
+{
+ LYDBGLOG("[updateApnTable] apn:%s,apntype:%s,ifaceName:%s",apn,apntype,ifaceName);
+ if(apn_table==NULL)
+ {
+ LYERRLOG("apn_table is null");
+ return;
+ }
+ memcpy(apn_table->apn,apn,strlen(apn)+1);
+ memcpy(apn_table->apnType,apntype,strlen(apntype)+1);
+ memcpy(apn_table->ifaceName,ifaceName,strlen(ifaceName)+1);
+ apn_table->hasTimeout = 0;
+ apn_table->hasUsed = 1;
+ return;
+}
+void cleanOnceApnTable(int apnId)
+{
+ LYDBGLOG("apn id:%d",apnId);
+ if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
+ {
+ LYERRLOG("apn id is invalid!!!");
+ return;
+ }
+ lynq_apn_table[apnId].hasTimeout = 0;
+ lynq_apn_table[apnId].hasUsed = 0;
+ bzero(lynq_apn_table[apnId].apn,LYNQ_APN_MAX_LEN);
+ //bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);
+ bzero(lynq_apn_table[apnId].ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
+ return;
+}
+int getUnusedElement()
+{
+ for(int i=0;i < LYNQ_APN_CHANNEL_MAX; i++)
+ {
+ if(lynq_apn_table[i].hasUsed!=1)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+int updateApn(char apnType[])
+{
+ int ret = 0;
+ ret = getUnusedElement();
+ memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
+ lynq_apn_table[ret].hasUsed = 1;
+ return ret;
+}
+
+int waitPdnChange()
+{
+ int ret = 0;
+ pthread_mutex_lock(&s_pdn_change_mutex);
+ ret = pthread_cond_wait(&s_pdn_change_cond,&s_pdn_change_mutex);
+ pthread_mutex_unlock(&s_pdn_change_mutex);
+ return ret;
+}
+int waitDataCallstateChange(int mtime)
+{
+ int ret = 0;
+ int sec = 0;
+ int usec = 0;
+ struct timeval now;
+ struct timespec timeout;
+ gettimeofday(&now,NULL);
+ sec = mtime/1000;
+ usec = mtime%1000;
+ timeout.tv_sec = now.tv_sec+sec;
+ timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
+ pthread_mutex_lock(&s_data_call_state_change_mutex);
+ ret = pthread_cond_timedwait(&s_data_call_state_change_cond,&s_data_call_state_change_mutex,&timeout);
+ pthread_mutex_unlock(&s_data_call_state_change_mutex);
+ return ret;
+}
+void sendSignalDataCallStateChange()
+{
+ pthread_mutex_lock(&s_data_call_state_change_mutex);
+ pthread_cond_signal(&s_data_call_state_change_cond);
+ pthread_mutex_unlock(&s_data_call_state_change_mutex);
+ return;
+}
+void sendSignalPdnChange()
+{
+ pthread_mutex_lock(&s_pdn_change_mutex);
+ pthread_cond_signal(&s_pdn_change_cond);
+ pthread_mutex_unlock(&s_pdn_change_mutex);
+ return;
+}
+
+int get_response(int sockfd,Parcel &p)
+{
+ int len = 0;
+ char recvline[LYNQ_REC_BUF];
+ bzero(recvline,LYNQ_REC_BUF);
+ /* receive data from server */
+ len = read(sockfd, recvline, LYNQ_REC_BUF);
+ if(len == -1)
+ {
+ perror("read error");
+ return -1;
+ }
+ if (recvline != NULL) {
+ p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
+ p.setDataPosition(0);
+ }
+ return 0;
+}
+int JumpHeader(Parcel &p,int *resp_type,int *request,int *slot_id,int *error)
+{
+ if(p.dataAvail() > 0)
+ {
+ p.readInt32(resp_type);
+ p.readInt32(request);
+ p.readInt32(slot_id);
+ p.readInt32(error);
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+}
+int send_request(int sockfd,lynq_client_t *client_tmp)
+{
+ int ret=0;
+ ret = write(sockfd, client_tmp, LYQN_SEDN_BUF);
+ if(ret==-1)
+ {
+ perror("write error");
+ return -1;
+ }
+ return 0;
+}
+static char *strdupReadString(Parcel &p) {
+ size_t stringlen;
+ const char16_t *s16;
+ s16 = p.readString16Inplace(&stringlen);
+ return strndup16to8(s16, stringlen);
+}
+static char *strdupReadString_p(Parcel *p) {
+ size_t stringlen;
+ const char16_t *s16;
+ s16 = p->readString16Inplace(&stringlen);
+ return strndup16to8(s16, stringlen);
+}
+
+
+/*Warren add for T800 platform 2021/11/19 start*/
+int lynq_socket_client_start()
+{
+ struct sockaddr_in lynq_socket_server_addr;
+ /* init lynq_socket_server_addr */
+ bzero(&lynq_socket_server_addr, sizeof(lynq_socket_server_addr));
+ lynq_socket_server_addr.sin_family = AF_INET;
+ lynq_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
+ lynq_socket_server_addr.sin_addr.s_addr = htons(INADDR_ANY);
+ /*
+ if(inet_pton(AF_INET,"127.0.0.1", &lynq_socket_server_addr.sin_addr) <= 0)
+ {
+ printf("[%s] is not a valid IPaddress\n", argv[1]);
+ exit(1);
+ }
+*/
+ lynq_client_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(connect(lynq_client_sockfd, (struct sockaddr *)&lynq_socket_server_addr, sizeof(lynq_socket_server_addr)) == -1)
+ {
+ perror("connect error");
+ return -1;
+ }
+ return 0;
+}
+void *thread_urc_recv(void *parg)
+{
+ int socket_fd = (int64_t)parg;
+ int len=0;
+ socklen_t addr_len=0;
+ uint8_t *dataLength = NULL;
+ char urc_data[LYNQ_REC_BUF];
+ char apn[LYNQ_APN_MAX_LEN];
+ char apnType[LYNQ_APN_TYPE_MAX_LEN];
+ int pdnState = 0;
+ char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
+ int slot_id = -1;
+ int resp_type = -1;
+ int urcid = -1;
+ char *urc_msg = NULL;
+ Parcel *p = NULL;
+ struct sockaddr_in dest_addr;
+ LYINFLOG("thread_urc_recv in running....\n");
+ while(data_urc_recive_status)
+ {
+ bzero(urc_data,LYNQ_REC_BUF);
+ //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:");
+ millli_sleep_with_restart(1);
break;
- }
- LYDBGLOG("=====>urc data len<=====:%d\n",len);
- p = new Parcel();
- if(p==NULL)
- {
- RLOGD("new parcel failure!!!");
- break;
- }
- p->setData((uint8_t *)urc_data,len); // p.setData((uint8_t *) buffer, buflen);
- p->setDataPosition(0);
- if(p->dataAvail() > 0)
- {
- p->readInt32(&resp_type);
- p->readInt32(&urcid);
- p->readInt32(&slot_id);
- //LYDBGLOG("*******Warren test*******:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
- switch (urcid)
- {
- case 9003://LYNQ_URC_DATA_CALL_STATUS_IND
- {
- LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
- p->readInt32(&pdnState);
- bzero(apn,LYNQ_APN_MAX_LEN);
- bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
- bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
- if(pdnState!=4)//PDN_DISCONNECTED
- {
- urc_msg = strdupReadString_p(p);
- int len = strlen(urc_msg);
- if(len < LYNQ_APN_MAX_LEN-1)
- {
- memcpy(apn,urc_msg,len+1);
- }
- urc_msg = strdupReadString_p(p);
- len = strlen(urc_msg);
- if(len < LYNQ_APN_TYPE_MAX_LEN-1)
- {
- memcpy(apnType,urc_msg,len+1);
- }
- urc_msg = strdupReadString_p(p);
- len = strlen(urc_msg);
- if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
- {
- memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
- }
- //sendSignalDataCallStateChange();
- }
- int apnId = getLynqApnID(apnType);
- if(lynq_apn_table[apnId].hasTimeout==1)
- {
- LYERRLOG("apn:%s has time out",lynq_apn_table[apnId].apn);
- lynq_deactive_data_call(&apnId);
- continue;
- }
- updateApnTable(&lynq_apn_table[apnId], apn,apnType,ifaceName);
- sendSignalPdnChange();
- lynq_data_call_change_id = apnId;
- if(lynq_data_call==1)
- {
- sendSignalDataCallStateChange();
- lynq_data_call = 0;
- }
- /*
- if(dataCb!=NULL)
- {
- (*dataCb)(apn,apnType,pdnState,ifaceName);
- }
- */
- break;
- }
- default:
- break;
- }
- }
- delete p;
- p = NULL;
- }
- close(socket_fd);
-}
-int lynq_socket_urc_start()
-{
- int socket_fd=0;
- int rt=0;
- int len=0;
- int on=1;
- struct sockaddr_in urc_local_addr;
- pthread_t tid;
- pthread_attr_t attr;
+ }
+ LYDBGLOG("=====>urc data len<=====:%d\n",len);
+ p = new Parcel();
+ if(p==NULL)
+ {
+ RLOGD("new parcel failure!!!");
+ break;
+ }
+ p->setData((uint8_t *)urc_data,len); // p.setData((uint8_t *) buffer, buflen);
+ p->setDataPosition(0);
+ if(p->dataAvail() > 0)
+ {
+ p->readInt32(&resp_type);
+ p->readInt32(&urcid);
+ p->readInt32(&slot_id);
+ //LYDBGLOG("*******Warren test*******:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
+ switch (urcid)
+ {
+ case 9003://LYNQ_URC_DATA_CALL_STATUS_IND
+ {
+ LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
+ p->readInt32(&pdnState);
+ bzero(apn,LYNQ_APN_MAX_LEN);
+ bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
+ bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
+ if(pdnState!=4)//PDN_DISCONNECTED
+ {
+ urc_msg = strdupReadString_p(p);
+ int len = strlen(urc_msg);
+ if(len < LYNQ_APN_MAX_LEN-1)
+ {
+ memcpy(apn,urc_msg,len+1);
+ }
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+ {
+ memcpy(apnType,urc_msg,len+1);
+ }
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
+ {
+ memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
+ }
+ //sendSignalDataCallStateChange();
+ int apnId = getLynqApnID(apnType);
+ if(apnId >= 0)
+ {
+ if(lynq_apn_table[apnId].hasTimeout==1)
+ {
+ LYERRLOG("apn:%s has time out",lynq_apn_table[apnId].apn);
+ lynq_deactive_data_call(&apnId);
+ continue;
+ }
+ updateApnTable(&lynq_apn_table[apnId], apn,apnType,ifaceName);
+ }
+ lynq_data_call_change_id = apnId;
+ sendSignalPdnChange();
+ LYDBGLOG("data call state:%d",lynq_data_call);
+ if(lynq_data_call==1)
+ {
+ sendSignalDataCallStateChange();
+ lynq_data_call = 0;
+ }
+ }
+ else
+ {
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+ {
+ memcpy(apnType,urc_msg,len+1);
+ }
+ LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
+ int apnId = getLynqApnID(apnType);
+ if(apnId >= 0)
+ {
+ lynq_data_call_change_id = apnId;
+ bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
+ }
+ sendSignalPdnChange();
+ LYDBGLOG("data call state:%d",lynq_data_call);
+ if(lynq_data_call==1)
+ {
+ sendSignalDataCallStateChange();
+ lynq_data_call = 0;
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ delete p;
+ p = NULL;
+ }
+ close(socket_fd);
+}
+int lynq_socket_urc_start()
+{
+ int socket_fd=0;
+ int rt=0;
+ int len=0;
+ int on=1;
+ struct sockaddr_in urc_local_addr;
+ pthread_attr_t attr;
socket_fd = socket(AF_INET,SOCK_DGRAM,0);
- printf("test 001\n");
if(socket_fd < 0)
{
- perror("creaet socket for udp fail");
+ perror("creaet socket for udp fail");
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*/
+ }
+ 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)
{
- perror("SO_REUSEADDR fail\n");
- return -1;
- }
- rt = bind(socket_fd ,(struct sockaddr*)&urc_local_addr, sizeof(urc_local_addr));
+ perror("SO_REUSEADDR fail\n");
+ return -1;
+ }
+ rt = bind(socket_fd ,(struct sockaddr*)&urc_local_addr, sizeof(urc_local_addr));
if (rt == -1)
{
- perror("bind failed");
+ perror("bind failed");
return -1;
- }
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- rt = pthread_create(&tid,&attr,thread_urc_recv,(void *)socket_fd);
- if(rt < 0)
- {
- printf("urc loop failure!!!\n");
- return -1;
- }
- printf("urc loop success!!!\n");
- return 0;
-}
-void lynq_call_state_change_test(int soc_id)
-{
- printf("call state change,sim:%d\n",soc_id);
-}
-void lynq_data_call_state_cb_test(char apn[LYNQ_APN_MAX_LEN],char apnType[LYNQ_APN_TYPE_MAX_LEN],int pdnState,char ifaceName[LYNQ_IFACE_NAME_MAX_LEN])
-{
- printf("data state change,apn=%s,apntype=%s,pdnstate=%d,ifacename=%s:%d\n",apn,apnType,pdnState,ifaceName);
-}
-
-int lynq_init_data(int uToken)
-{
- int result = 0;
- Global_uToken = uToken;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
- result = lynq_socket_client_start();
- if(result!=0)
- {
- LYERRLOG("init socket client fail!!!");
- return -1;
- }
- result = lynq_socket_urc_start();
- if(result!=0)
- {
- LYERRLOG("init socket urc fail!!!");
- return -1;
- }
- memset(lynq_apn_table,0,sizeof(lynq_apn_table));
- LYDBGLOG("lynq init call success!!!");
- return 0;
-
-}
-int lynq_deinit_data()
-{
- close(lynq_client_sockfd);
- for(int i =0;i<LYNQ_APN_CHANNEL_MAX;i++)
- {
- if(lynq_apn_table[i].apnType!=NULL)
- {
- lynq_deactive_data_call(&i);
- }
- }
- urc_recive_status = 0;
- return 0;
-}
-int lynq_setup_data_call(int *handle)
-{
- Parcel p;
- lynq_client_t client;
- int resp_type = -1;
- int request = -1;
- int slot_id = -1;
- int error = -1;
- char iface = NULL;
- int lynq_data_call_id = 0;
- if(handle==NULL)
- {
- LYERRLOG("handle is null!!!");
- return LYNQ_E_NULL_ANONALY;
- }
- client.uToken = Global_uToken;
- client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
- client.paramLen = 0;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
- if(send_request(lynq_client_sockfd,&client)==-1)
- {
- LYERRLOG("send request fail");
- perror("[LYNQ_DATA] send request fail:");
- return -1;
- }
- get_response(lynq_client_sockfd,p);
- JumpHeader(p,&resp_type,&request,&slot_id,&error);
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
- lynq_data_call_id = updateApn("default");
- lynq_data_call = 1;
- if(error==0)
- {
- if(waitDataCallstateChange(1000)==ETIMEDOUT)//1000ms
- {
- error = LYNQ_E_TIME_OUT;
- LYERRLOG("timeout:wait data Call state fail!!!");
- lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
- return error;
- }
- *handle = lynq_data_call_id;
- }
- return error;
-}
-int lynq_deactive_data_call(int *handle)
-{
- Parcel p;
- lynq_client_t client;
- int resp_type = -1;
- int request = -1;
- int slot_id = -1;
- int error = -1;
- int lynq_data_call_id = -1;
- lynq_data_call_id = *handle;
- if(handle==NULL)
- {
- LYERRLOG("handle is null!!!");
- return -1;
- }
- client.uToken = Global_uToken;
- client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
- if(strcmp(lynq_apn_table[lynq_data_call_id].apnType,"default")==0)
- {
- client.paramLen = 0;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- }
- else
- {
- client.paramLen = 1;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
- }
- LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
- if(send_request(lynq_client_sockfd,&client)==-1)
- {
- LYERRLOG("send request fail");
- perror("[LYNQ_DATA] send request fail:");
- return -1;
- }
- get_response(lynq_client_sockfd,p);
- JumpHeader(p,&resp_type,&request,&slot_id,&error);
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
- cleanOnceApnTable(lynq_data_call_id);
- return error;
-}
-int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
-{
- Parcel p;
- lynq_client_t client;
- int resp_type = -1;
- int request = -1;
- int slot_id = -1;
- int error = -1;
- char iface = NULL;
- int lynq_data_call_id = -1;
- char *argv[10] = {};
- if(handle==NULL||apn==NULL||apnType==NULL)
- {
- LYERRLOG("handle ,apn or apntype is null!!!");
- return -1;
- }
- if(user==NULL)
+ }
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ rt = pthread_create(&lynq_data_tid,&attr,thread_urc_recv,(void *)socket_fd);
+ if(rt < 0)
{
- argv[1] = "null";
+ LYERRLOG("urc loop failure!!!\n");
+ return -1;
+ }
+ LYDBGLOG("urc loop success!!!\n");
+ return 0;
+}
+int lynq_init_data(int uToken)
+{
+ int result = 0;
+ Global_uToken = uToken;
+ data_urc_recive_status = 1;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ result = lynq_socket_client_start();
+ if(result!=0)
+ {
+ LYERRLOG("init socket client fail!!!");
+ return -1;
+ }
+ result = lynq_socket_urc_start();
+ if(result!=0)
+ {
+ LYERRLOG("init socket urc fail!!!");
+ return -1;
+ }
+ memset(lynq_apn_table,0,sizeof(lynq_apn_table));
+ LYDBGLOG("lynq init call success!!!");
+ return 0;
+
+}
+int lynq_deinit_data()
+{
+ int ret = -1;
+ for(int i =0;i<LYNQ_APN_CHANNEL_MAX;i++)
+ {
+ if(strlen(lynq_apn_table[i].apnType)!=0)
+ {
+ lynq_deactive_data_call(&i);
+ }
+ }
+ if(lynq_client_sockfd>0)
+ {
+ close(lynq_client_sockfd);
+ }
+ data_urc_recive_status = 0;
+ ret = pthread_cancel(lynq_data_tid);
+ LYDBGLOG("pthread cancel ret = %d",ret);
+ ret = pthread_join(lynq_data_tid,NULL);
+ LYDBGLOG("pthread join ret = %d",ret);
+ return 0;
+}
+int lynq_setup_data_call(int *handle)
+{
+ Parcel p;
+ lynq_client_t client;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ char iface = NULL;
+ int lynq_data_call_id = 0;
+ if(handle==NULL)
+ {
+ LYERRLOG("handle is null!!!");
+ return LYNQ_E_NULL_ANONALY;
+ }
+ client.uToken = Global_uToken;
+ client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
+ client.paramLen = 0;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ return -1;
+ }
+ get_response(lynq_client_sockfd,p);
+ JumpHeader(p,&resp_type,&request,&slot_id,&error);
+ LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ lynq_data_call_id = updateApn("default");
+ lynq_data_call = 1;
+ if(error==0)
+ {
+ if(waitDataCallstateChange(20000)==ETIMEDOUT)//20s
+ {
+ error = LYNQ_E_TIME_OUT;
+ LYERRLOG("timeout:wait data Call state fail!!!");
+ lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
+ return error;
+ }
+ *handle = lynq_data_call_id;
+ }
+ return error;
+}
+int lynq_deactive_data_call(int *handle)
+{
+ Parcel p;
+ lynq_client_t client;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ int lynq_data_call_id = -1;
+ lynq_data_call_id = *handle;
+ if(handle==NULL)
+ {
+ LYERRLOG("handle is null!!!");
+ return -1;
+ }
+ client.uToken = Global_uToken;
+ client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
+ if(strcmp(lynq_apn_table[lynq_data_call_id].apnType,"default")==0)
+ {
+ client.paramLen = 0;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
}
else
{
- argv[1] = user;
+ client.paramLen = 1;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
+ }
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ return -1;
+ }
+ get_response(lynq_client_sockfd,p);
+ JumpHeader(p,&resp_type,&request,&slot_id,&error);
+ LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ cleanOnceApnTable(lynq_data_call_id);
+ return error;
+}
+int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
+{
+ Parcel p;
+ lynq_client_t client;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ char iface = NULL;
+ int lynq_data_call_id = -1;
+ char *argv[10] = {};
+ if(handle==NULL||apn==NULL||apnType==NULL)
+ {
+ LYERRLOG("handle ,apn or apntype is null!!!");
+ return -1;
+ }
+ if(user==NULL)
+ {
+ argv[1] = "null";
+ }
+ else
+ {
+ argv[1] = user;
}
if(password==NULL)
{
- argv[2] = "null";
+ argv[2] = "null";
}
else
{
- argv[2] = password;
+ argv[2] = password;
}
if(authType==NULL)
{
- argv[3] = "null";
+ argv[3] = "null";
}
else
{
- argv[3] = authType;
+ argv[3] = authType;
}
if(normalProtocol==NULL)
{
- argv[4] = "null";
+ argv[4] = "null";
}
else
{
- argv[4] = normalProtocol;
+ argv[4] = normalProtocol;
}
if(roamingProtocol==NULL)
{
- argv[5] = "null";
+ argv[5] = "null";
}
else
{
- argv[5] = roamingProtocol;
- }
- client.uToken = Global_uToken;
- client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
- client.paramLen = 7;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- sprintf(client.param,"%s %s %s %s %s %s %s",apn,apnType,argv[1],argv[2],argv[3],argv[4],argv[5]);
- LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
- if(send_request(lynq_client_sockfd,&client)==-1)
- {
- LYERRLOG("send request fail");
- perror("[LYNQ_DATA] send request fail:");
- return -1;
- }
- get_response(lynq_client_sockfd,p);
- JumpHeader(p,&resp_type,&request,&slot_id,&error);
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
- lynq_data_call_id = updateApn(apnType);
- if(error==0)
- {
- if(waitDataCallstateChange(1000)==ETIMEDOUT)//1000ms
- {
- error = LYNQ_E_TIME_OUT;
- LYERRLOG("timeout:wait data Call state fail!!!");
- lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
- return error;
- }
- *handle = lynq_data_call_id;
- }
- return error;
-}
-/*
-int lynq_deactive_data_call_sp(int *handle,char *apnType)
-{
- Parcel p;
- lynq_client_t client;
- int resp_type = -1;
- int request = -1;
- int slot_id = -1;
- int error = -1;
- if(handle==NULL||apnType==NULL)
- {
- LYERRLOG("handle is null!!!");
- return -1;
- }
- client.uToken = Global_uToken;
- client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
- client.paramLen = 1;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- sprintf(client.param,"%s",apnType);
- LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
- if(send_request(lynq_client_sockfd,&client)==-1)
- {
- LYERRLOG("send request fail");
- perror("[LYNQ_DATA] send request fail:");
- return -1;
- }
- get_response(lynq_client_sockfd,p);
- JumpHeader(p,&resp_type,&request,&slot_id,&error);
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
- return error;
-}
-*/
-int getDataCallLists(lynq_data_call_response_v11_t dataCallList[LYNQ_APN_CHANNEL_MAX],int *realNum)
-{
- Parcel p;
- lynq_client_t client;
- int resp_type = -1;
- int request = -1;
- int slot_id = -1;
- int error = -1;
- int version =0;
- int num = 0;
- int temp_int =0;
- char *temp_char = NULL;
- if(dataCallList==NULL)
- {
- LYERRLOG("dataCallList is null!!!");
- return -1;
- }
- client.uToken = Global_uToken;
- client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
- client.paramLen = 0;
- bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
- LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
- if(send_request(lynq_client_sockfd,&client)==-1)
- {
- LYERRLOG("send request fail");
- perror("[LYNQ_DATA] send request fail:");
- return -1;
- }
- get_response(lynq_client_sockfd,p);
- JumpHeader(p,&resp_type,&request,&slot_id,&error);
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
- p.readInt32(&version);
- if(version==11)
- {
- p.readInt32(&num);
- *realNum = num;
- for (int i = 0; i < num; i++)
- {
- p.readInt32(&dataCallList[i].status);
- p.readInt32(&dataCallList[i].suggestedRetryTime);
- p.readInt32(&dataCallList[i].cid);
- p.readInt32(&dataCallList[i].active);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
- temp_char = strdupReadString(p);
- memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
- p.readInt32(&dataCallList[i].mtu);
- }
- }
- return error;
-}
-int lynq_get_data_call_list(int *handle,lynq_data_call_response_v11_t dataCallList)
-{
- lynq_data_call_response_v11_t interDataCallList[LYNQ_APN_CHANNEL_MAX]={};
- int number = 0;
- int lynq_data_call_id = 0;
- int error = 0;
- lynq_data_call_id = *handle;
- if(handle==NULL)
- {
- LYERRLOG("handle is NULL");
- return LYNQ_E_NULL_ANONALY;
- }
- memset(interDataCallList,0,sizeof(interDataCallList));
- error = getDataCallLists(interDataCallList,&number);
- if(error == 0)
- {
- for(int i = 0;i < number;i++)
- {
- if(strcmp(interDataCallList[i].ifname,lynq_apn_table[lynq_data_call_id].ifaceName)==0)
- {
- dataCallList.active = interDataCallList[i].active;
- dataCallList.suggestedRetryTime = interDataCallList[i].suggestedRetryTime;
- dataCallList.cid = interDataCallList[i].cid;
- dataCallList.status = interDataCallList[i].status;
- dataCallList.mtu = interDataCallList[i].mtu;
- memcpy(dataCallList.addresses,interDataCallList[i].addresses,sizeof(interDataCallList[i].addresses));
- memcpy(dataCallList.ifname,interDataCallList[i].ifname,sizeof(interDataCallList[i].ifname));
- memcpy(dataCallList.dnses,interDataCallList[i].dnses,sizeof(interDataCallList[i].dnses));
- memcpy(dataCallList.type,interDataCallList[i].type,sizeof(interDataCallList[i].type));
- memcpy(dataCallList.gateways,interDataCallList[i].gateways,sizeof(interDataCallList[i].gateways));
- memcpy(dataCallList.pcscf,interDataCallList[i].pcscf,sizeof(interDataCallList[i].pcscf));
- }
- }
- }
- return error;
-}
-int lynq_wait_data_call_state_change(int *handle)
-{
- waitPdnChange();
- *handle = lynq_data_call_change_id;
- LYINFLOG("lynq data call id:%d",lynq_data_call_change_id);
- return 0;
-}
-#if 0
-int main(int argc,char **argv)
-{
- int n = 0;
- n = lynq_init_call(lynq_call_state_change_test,2222);
- if(n<0)
- {
- printf("lynq init call fail!!!\n");
- return -1;
- }
- printf("lynq call init success!!!\n");
- char phoneNum[LYNQ_PHONE_NUMBER_MAX];
- sprintf(phoneNum,"18180053406 0",strlen("18180053406 0")+1);
- lynq_call(phoneNum);
- while(1)
- {
- sleep(1);
- }
- return 0;
-}
-#endif
-/*Warren add for T800 platform 2021/11/19 end*/
+ argv[5] = roamingProtocol;
+ }
+ client.uToken = Global_uToken;
+ client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
+ client.paramLen = 7;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ sprintf(client.param,"%s %s %s %s %s %s %s",apn,apnType,argv[1],argv[2],argv[3],argv[4],argv[5]);
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ return -1;
+ }
+ get_response(lynq_client_sockfd,p);
+ JumpHeader(p,&resp_type,&request,&slot_id,&error);
+ LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ lynq_data_call_id = updateApn(apnType);
+ lynq_data_call = 1;
+ if(error==0)
+ {
+ if(waitDataCallstateChange(20000)==ETIMEDOUT)//20s
+ {
+ error = LYNQ_E_TIME_OUT;
+ LYERRLOG("timeout:wait data Call state fail!!!");
+ lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
+ return error;
+ }
+ *handle = lynq_data_call_id;
+ }
+ return error;
+}
+/*
+int lynq_deactive_data_call_sp(int *handle,char *apnType)
+{
+ Parcel p;
+ lynq_client_t client;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ if(handle==NULL||apnType==NULL)
+ {
+ LYERRLOG("handle is null!!!");
+ return -1;
+ }
+ client.uToken = Global_uToken;
+ client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
+ client.paramLen = 1;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ sprintf(client.param,"%s",apnType);
+ LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ return -1;
+ }
+ get_response(lynq_client_sockfd,p);
+ JumpHeader(p,&resp_type,&request,&slot_id,&error);
+ LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ return error;
+}
+*/
+int getDataCallLists(lynq_data_call_response_v11_t dataCallList[LYNQ_APN_CHANNEL_MAX],int *realNum)
+{
+ Parcel p;
+ lynq_client_t client;
+ int resp_type = -1;
+ int request = -1;
+ int slot_id = -1;
+ int error = -1;
+ int version =0;
+ int num = 0;
+ int temp_int =0;
+ char *temp_char = NULL;
+ if(dataCallList==NULL)
+ {
+ LYERRLOG("dataCallList is null!!!");
+ return -1;
+ }
+ client.uToken = Global_uToken;
+ client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
+ client.paramLen = 0;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ if(send_request(lynq_client_sockfd,&client)==-1)
+ {
+ LYERRLOG("send request fail");
+ perror("[LYNQ_DATA] send request fail:");
+ return -1;
+ }
+ get_response(lynq_client_sockfd,p);
+ JumpHeader(p,&resp_type,&request,&slot_id,&error);
+ LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ p.readInt32(&version);
+ if(version==11)
+ {
+ p.readInt32(&num);
+ *realNum = num;
+ for (int i = 0; i < num; i++)
+ {
+ p.readInt32(&dataCallList[i].status);
+ p.readInt32(&dataCallList[i].suggestedRetryTime);
+ p.readInt32(&dataCallList[i].cid);
+ p.readInt32(&dataCallList[i].active);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+ temp_char = strdupReadString(p);
+ memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+ p.readInt32(&dataCallList[i].mtu);
+ }
+ }
+ return error;
+}
+int lynq_get_data_call_list(int *handle,lynq_data_call_response_v11_t *dataCallList)
+{
+ lynq_data_call_response_v11_t interDataCallList[LYNQ_APN_CHANNEL_MAX]={};
+ int number = 0;
+ int lynq_data_call_id = 0;
+ int error = 0;
+ lynq_data_call_id = *handle;
+ if(handle==NULL)
+ {
+ LYERRLOG("handle is NULL");
+ return LYNQ_E_NULL_ANONALY;
+ }
+ memset(interDataCallList,0,sizeof(interDataCallList));
+ error = getDataCallLists(interDataCallList,&number);
+ if(error == 0)
+ {
+ for(int i = 0;i < number;i++)
+ {
+ if(strcmp(interDataCallList[i].ifname,lynq_apn_table[lynq_data_call_id].ifaceName)==0)
+ {
+ dataCallList->active = interDataCallList[i].active;
+ dataCallList->suggestedRetryTime = interDataCallList[i].suggestedRetryTime;
+ dataCallList->cid = interDataCallList[i].cid;
+ dataCallList->status = interDataCallList[i].status;
+ dataCallList->mtu = interDataCallList[i].mtu;
+ memcpy(dataCallList->addresses,interDataCallList[i].addresses,sizeof(interDataCallList[i].addresses));
+ memcpy(dataCallList->ifname,interDataCallList[i].ifname,sizeof(interDataCallList[i].ifname));
+ memcpy(dataCallList->dnses,interDataCallList[i].dnses,sizeof(interDataCallList[i].dnses));
+ memcpy(dataCallList->type,interDataCallList[i].type,sizeof(interDataCallList[i].type));
+ memcpy(dataCallList->gateways,interDataCallList[i].gateways,sizeof(interDataCallList[i].gateways));
+ memcpy(dataCallList->pcscf,interDataCallList[i].pcscf,sizeof(interDataCallList[i].pcscf));
+ LYDBGLOG("ifname:%s,addr:%s",dataCallList->ifname,dataCallList->addresses);
+ }
+ }
+ }
+ return error;
+}
+int lynq_wait_data_call_state_change(int *handle)
+{
+ waitPdnChange();
+ *handle = lynq_data_call_change_id;
+ LYINFLOG("lynq data call id:%d",lynq_data_call_change_id);
+ return 0;
+}
+/*Warren add for T800 platform 2021/11/19 end*/