[Bugfix][API-616][network] lynq_set_state_buffer_valid_period_of_network set exception value, no error return
Change-Id: Id05a3493e98ecfd375b4dcf0e96e2e2c3936f97c
diff --git a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
index 9f32bed..8c40b68 100755
--- a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
+++ b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
@@ -72,12 +72,14 @@
int lynq_set_ims(const int ims_mode);
int lynq_wait_signalchanges(int *handle);
int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id);
-void lynq_set_voice_registration_valid_period(int valid_period);
-void lynq_set_data_registration_valid_period(int valid_period);
-void lynq_set_ims_registration_valid_period(int valid_period);
-int lynq_get_voice_registration_valid_period();
-int lynq_get_data_registration_valid_period();
-int lynq_get_ims_registration_valid_period();
+typedef enum {
+ NETWORK_STATE_BUFFER_TYPE_VOICE_REG,
+ NETWORK_STATE_BUFFER_TYPE_DATA_REG,
+ NETWORK_STATE_BUFFER_TYPE_IMS_REG,
+ NETWORK_STATE_BUFFER_TYPE_MAX,
+}lynq_network_state_buffer_type;
+int lynq_set_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type,int valid_period);
+int lynq_get_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type);
#ifdef MODEM_GEN97
/**@brief set or get OOS recover timer interval
* @param mode [IN] <mode>:
diff --git a/src/lynq/lib/liblynq-network/lynq_network.cpp b/src/lynq/lib/liblynq-network/lynq_network.cpp
index 2212648..2fc1480 100755
--- a/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -451,7 +451,7 @@
{
case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
{
- set_register_voice_buffer_valid(false);
+ set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);
network_wait_urc_id = urc_id;
LYINFLOG("slot_id = %d",network_urc_slot_id);
send_signal_changes();
@@ -459,7 +459,7 @@
}
case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
{
- set_register_data_buffer_valid(false);
+ set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);
network_wait_urc_id = urc_id;
LYINFLOG("slot_id = %d",network_urc_slot_id);
send_signal_changes();
@@ -467,7 +467,7 @@
}
case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
{
- set_register_ims_buffer_valid(false);
+ set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);
network_wait_urc_id = urc_id;
LYINFLOG("slot_id = %d",network_urc_slot_id);
send_signal_changes();
@@ -1131,21 +1131,21 @@
strUpper(str);
if(!strcmp(str,"VOICE"))
{
- if(lynq_get_registration_state_to_buf_voice(regState,netType,netRejected)==0)
+ if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)
{
- return 0;
+ return RESULT_OK;
}
request = RIL_REQUEST_VOICE_REGISTRATION_STATE;
}else if(!strcmp(str,"DATA")){
- if(lynq_get_registration_state_to_buf_data(regState,LAC,CID,netType)==0)
+ if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)
{
- return 0;
+ return RESULT_OK;
}
request = RIL_REQUEST_DATA_REGISTRATION_STATE;
}else if(!strcmp(str,"IMS")){
- if(lynq_get_registration_state_to_buf_ims(imsRegState,radioTechFam)==0)
+ if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,imsRegState,radioTechFam,0)==0)
{
- return 0;
+ return RESULT_OK;
}
request = RIL_REQUEST_IMS_REGISTRATION_STATE;
}else{
@@ -1195,7 +1195,7 @@
lynqStrdupReadString(p);
lynqStrdupReadString(p);
*netRejected = atoi(lynqStrdupReadString(p));
- lynq_set_registration_state_to_buf_voice(*regState,*netType,*netRejected);
+ set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);
}
else
{
@@ -1216,7 +1216,7 @@
resp[1] = lynqStrdupReadString(p);
strcpy(CID,resp[1]);
*netType = atoi(lynqStrdupReadString(p));
- lynq_set_registration_state_to_buf_data(*regState,LAC,CID,*netType);
+ set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);
}
else
{
@@ -1233,7 +1233,7 @@
{
p->readInt32(imsRegState);
p->readInt32(radioTechFam);
- lynq_set_registration_state_to_buf_ims(*imsRegState,*radioTechFam);
+ set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);
}
else
{
diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
index 2fdea32..7b41533 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
@@ -7,160 +7,129 @@
#include <signal.h>
#include <errno.h>
#include <fcntl.h>
+#include <stdarg.h>
+#include <climits>
#include "liblog/lynq_deflog.h"
#include "lynq_network.h"
#include "lynq_network_state_buffer.h"
#define USER_LOG_TAG "LYNQ_NETWORK"
+static timer_t s_state_buffer_timer[NETWORK_STATE_BUFFER_TYPE_MAX];
+
+static int s_state_buffer_sig_value[NETWORK_STATE_BUFFER_TYPE_MAX]={2,3,4};
+
+static int s_state_buffer_valid[NETWORK_STATE_BUFFER_TYPE_MAX]={false,false,false};
+
+static char* s_state_buffer_file[NETWORK_STATE_BUFFER_TYPE_MAX]={
+ "/data/ril/network/.network_register_voice_buffer",
+ "/data/ril/network/.network_register_data_buffer",
+ "/data/ril/network/.network_register_ims_buffer"
+};
+
+#define STATE_BUFFER_CONFIG_FILE "/data/ril/network/.state_buffer_cfg"
typedef struct{
- int voice_valid_period;
- int data_valid_period;
- int ims_valid_period;
-}lynq_network_register_buf_cfg;
-
-lynq_network_register_buf_cfg s_register_cfg;
-static timer_t s_register_timer_voice;
-static timer_t s_register_timer_data;
-static timer_t s_register_timer_ims;
-static int register_sig_value_voice = 2;
-static int register_sig_value_data = 3;
-static int register_sig_value_ims = 4;
-static int s_register_voice_valid=false;
-static int s_register_data_valid=false;
-static int s_register_ims_valid=false;
+ int valid_period[NETWORK_STATE_BUFFER_TYPE_MAX];
+}network_state_buffer_cfg;
+static network_state_buffer_cfg s_state_buffer_cfg;
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
-#define VOICE_REG_BUFFER_FILE "/data/ril/network/.network_register_voice_buffer"
-#define DATA_REG_BUFFER_FILE "/data/ril/network/.network_register_data_buffer"
-#define IMS_REG_BUFFER_FILE "/data/ril/network/.network_register_ims_buffer"
-#define REG_CONFIG_FILE "/data/ril/network/.network_cfg"
-void get_network_register_timer_length_from_file()
+void get_state_buffer_timer_length_from_file()
{
int fd_backup;
int ret;
- memset(&s_register_cfg,0,sizeof (s_register_cfg));
- fd_backup = open(REG_CONFIG_FILE,O_RDONLY | O_CREAT,0777);
+ memset(&s_state_buffer_cfg,0,sizeof (s_state_buffer_cfg));
+ fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_RDONLY | O_CREAT,0777);
if (fd_backup < 0) {
- LYERRLOG("when get, Error opening register cfg file: %s\n",strerror(errno));
+ LYERRLOG("%s open file faile, error is %s\n",__func__,strerror(errno));
return;
}
- ret = read(fd_backup,&s_register_cfg,sizeof (s_register_cfg));
+ ret = read(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));
if(ret<=0)
{
- LYERRLOG("%s get register cfg fail, ret is %d",__func__,ret);
+ LYERRLOG("%s read fail, ret is %d",__func__,ret);
+ memset(&s_state_buffer_cfg,0,sizeof (s_state_buffer_cfg));
}
else
{
- LYINFLOG("%s get register cfg suc %d",__func__);
+ LYINFLOG("%s suc",__func__);
}
close(fd_backup);
return;
}
-void set_network_register_timer_length_to_file()
+int set_state_buffer_timer_length_to_file()
{
int fd_backup;
int ret;
- fd_backup = open(REG_CONFIG_FILE,O_WRONLY | O_CREAT,0777);
+ fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_WRONLY | O_CREAT,0777);
if (fd_backup < 0) {
- LYERRLOG("when set, Error opening register cfg file: %s\n",strerror(errno));
- return;
+ LYERRLOG("%s open file fail, error is %s\n",__func__,strerror(errno));
+ return -1;
}
- ret = write(fd_backup,&s_register_cfg,sizeof (s_register_cfg));
+ ret = write(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));
if(ret<=0)
{
- LYERRLOG("%s set register cfg fail, ret is %d",__func__,ret);
+ LYERRLOG("%s write fail, ret is %d",__func__,ret);
}
else
{
- LYINFLOG("%s set register cfg suc %d",__func__);
+ LYINFLOG("%s suc",__func__);
}
close(fd_backup);
- return;
-}
-
-void set_register_voice_buffer_valid(int valid)
-{
- s_register_voice_valid = valid;
- if(valid==false)
- {
- stop_network_timer(s_register_timer_voice, register_sig_value_voice);
- }
-}
-
-void set_register_data_buffer_valid(int valid)
-{
- s_register_data_valid = valid;
- if(valid==false)
- {
- stop_network_timer(s_register_timer_data, register_sig_value_data);
- }
-}
-
-void set_register_ims_buffer_valid(int valid)
-{
- s_register_ims_valid = valid;
- if(valid==false)
- {
- stop_network_timer(s_register_timer_ims, register_sig_value_ims);
- }
+ return ret>0? 0:-2;
}
void start_network_timer(timer_t timer, int signal_value, int milliseconds) {
LYINFLOG("start_network_timer(), timer_id=%ld, signal_value=%d, time=%d",(long)timer, signal_value, milliseconds);
-
- struct itimerspec expire;
- expire.it_interval.tv_sec = 0;
- expire.it_interval.tv_nsec = 0;
- expire.it_value.tv_sec = milliseconds/1000;
- expire.it_value.tv_nsec = (milliseconds%1000)*1000000;
- if (timer_settime(timer, 0, &expire, NULL) == -1) {
+
+ struct itimerspec expire;
+ expire.it_interval.tv_sec = 0;
+ expire.it_interval.tv_nsec = 0;
+ expire.it_value.tv_sec = milliseconds/1000;
+ expire.it_value.tv_nsec = (milliseconds%1000)*1000000;
+ if (timer_settime(timer, 0, &expire, NULL) == -1) {
LYERRLOG("timer_settime failed reason=[%s]", strerror(errno));
- }
-}
-
+ }
+}
+
void stop_network_timer(timer_t timer, int signal_value) {
LYINFLOG("stop_network_timer(), timer_id=%ld, signal_value=%d", (long)timer, signal_value);
- struct itimerspec timespec;
- if(timer_gettime(timer, ×pec) == -1) {
+ struct itimerspec timespec;
+ if(timer_gettime(timer, ×pec) == -1) {
LYERRLOG("stop_network_timer(), get time fail(%s)", strerror(errno));
- return;
- }
+ return;
+ }
LYINFLOG("stop_network_timer(), tv_sec=%ld, tv_nsec=%ld",timespec.it_value.tv_sec, timespec.it_value.tv_nsec);
- if((timespec.it_value.tv_sec == 0) && (timespec.it_value.tv_nsec == 0) ) {
+ if((timespec.it_value.tv_sec == 0) && (timespec.it_value.tv_nsec == 0) ) {
LYINFLOG("stop_network_timer(), timer_id(%ld) had stopped, just return", (long)timer);
- return;
- } else {
+ return;
+ } else {
start_network_timer(timer, signal_value, 0);
- }
+ }
}
void network_timer_handler(sigval_t sig) {
LYINFLOG("network_timer_handler, sig_value: %d", sig.sival_int);
int s;
- s = pthread_mutex_lock(&mtx);
- if(s != 0) {
+ s = pthread_mutex_lock(&mtx);
+ if(s != 0) {
LYERRLOG("network_timer_handler, pthead_mutex_lock fail");
}
- if(sig.sival_int == register_sig_value_voice)
+ for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++)
{
- s_register_voice_valid=false;
- }
- else if(sig.sival_int == register_sig_value_data)
- {
- s_register_data_valid=false;
- }
- else if(sig.sival_int == register_sig_value_ims)
- {
- s_register_ims_valid=false;
- }
- s = pthread_mutex_unlock(&mtx);
- if(s != 0) {
+ if(sig.sival_int == s_state_buffer_sig_value[i])
+ {
+ s_state_buffer_valid[i]=false;
+ break;
+ }
+ }
+ s = pthread_mutex_unlock(&mtx);
+ if(s != 0) {
LYERRLOG("network_timer_handler, pthread_mutex_unlock fail");
}
}
@@ -168,414 +137,250 @@
void init_network_timer(timer_t* timer, int signal_value)
{
struct sigevent sevp;
- memset(&sevp, 0, sizeof(sevp));
- sevp.sigev_value.sival_int = signal_value;
- sevp.sigev_notify = SIGEV_THREAD;
+ memset(&sevp, 0, sizeof(sevp));
+ sevp.sigev_value.sival_int = signal_value;
+ sevp.sigev_notify = SIGEV_THREAD;
sevp.sigev_notify_function = network_timer_handler;
-
- if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {
- LYERRLOG("init_network_timer() failed reason=[%s]", strerror(errno));
- }
- LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);
-}
-
-void init_network_timer_all() {
- init_network_timer(&s_register_timer_voice,register_sig_value_voice);
- init_network_timer(&s_register_timer_data,register_sig_value_data);
- init_network_timer(&s_register_timer_ims,register_sig_value_ims);
- s_register_voice_valid = false;
- s_register_data_valid = false;
- s_register_ims_valid = false;
- get_network_register_timer_length_from_file();
+ if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {
+ LYERRLOG("init_network_timer() failed reason=[%s]", strerror(errno));
+ }
+ LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);
+}
+
+void init_network_timer_all() {
+
+ for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){
+ init_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
+ s_state_buffer_valid[i] = false;
+ }
+ get_state_buffer_timer_length_from_file();
}
void deinit_network_timer_all()
{
- stop_network_timer(s_register_timer_voice, register_sig_value_voice);
- stop_network_timer(s_register_timer_data, register_sig_value_data);
- stop_network_timer(s_register_timer_ims, register_sig_value_ims);
- s_register_voice_valid = false;
- s_register_data_valid = false;
- s_register_ims_valid = false;
+ for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){
+ stop_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
+ s_state_buffer_valid[i] = false;
+ }
}
-void lynq_set_registration_state_to_buf_voice(int regState,int netType,int netRejected)
+int is_period_equal_not_valid(int period)
+{
+ return period<=0 || (period > INT_MAX/1000);
+}
+
+void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid)
+{
+ if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))
+ {
+ valid=false;
+ }
+ s_state_buffer_valid[type] = valid;
+ if(s_state_buffer_valid[type]==false)
+ {
+ stop_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type]);
+ }
+ else
+ {
+ start_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type],s_state_buffer_cfg.valid_period[type]*1000);
+ }
+ LYINFLOG("%s type %d valid is %d",__func__,type,valid);
+}
+
+int get_state_buffer_valid(lynq_network_state_buffer_type type)
+{
+ return s_state_buffer_valid[type];
+}
+
+void set_state_to_buf(lynq_network_state_buffer_type type,...)
{
int ret;
int fd_backup;
-
- if(s_register_cfg.voice_valid_period<=0)
+
+ if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))
{
- LYINFLOG("%s timer length is not greater than 0",__func__);
+ LYINFLOG("%s type %d timer length %d is equal not valid",__func__,type,s_state_buffer_cfg.valid_period[type]);
return;
}
- fd_backup = open(VOICE_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);
+ fd_backup = open(s_state_buffer_file[type],O_WRONLY | O_CREAT,0777);
if (fd_backup < 0) {
- LYERRLOG("Error opening registrate voice buffer file: %s\n",strerror(errno));
+ LYERRLOG("%s Error opening registrate buffer file: %s\n",__func__,strerror(errno));
return ;
}
-
- ret = write(fd_backup,®State,sizeof (regState));
- if(ret<=0)
+
+ va_list pArgs;
+ va_start(pArgs, type);
+
+ int int_num;
+ int i,int_value;
+
+ int_num = va_arg(pArgs, int);
+ LYINFLOG("%s int_num is %d",__func__,int_num);
+ for(i=0;i<int_num;i++)
{
- LYERRLOG("%s set regState fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = write(fd_backup,&netType,sizeof (netType));
- if(ret<=0)
- {
- LYERRLOG("%s set netType fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = write(fd_backup,&netRejected,sizeof (netRejected));
- if(ret<=0)
- {
- LYERRLOG("%s set netRejected fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- sync();
- close(fd_backup);
- start_network_timer(s_register_timer_voice,register_sig_value_voice,s_register_cfg.voice_valid_period*1000);
- s_register_voice_valid=true;
-
- LYINFLOG("set_registration_state voice suc, regState is %d, netType is %d, netRejected is %d",regState,netType,netRejected);
- return;
-
-error_done:
-
- close(fd_backup);
- return;
-}
-void lynq_set_registration_state_to_buf_data(int regState,char * LAC,char * CID,int netType)
-{
- int ret;
- int stringLen;
- int fd_backup;
-
- if(s_register_cfg.data_valid_period <=0)
- {
- LYINFLOG("%s timer length is not greater than 0",__func__);
- return;
- }
+ int_value=va_arg(pArgs, int);
+ LYINFLOG("%s int_value is %d",__func__,int_value);
+ ret = write(fd_backup,&int_value,sizeof (int));
+ if(ret<=0)
+ {
+ LYERRLOG("%s write int %d value %d fail, ret is %d",__func__,i,int_value,ret);
+ goto set_state_error_done;
+ }
- fd_backup = open(DATA_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);
-
- if (fd_backup < 0) {
- LYERRLOG("Error opening registrate data buffer file: %s\n",strerror(errno));
- return ;
- }
-
- ret = write(fd_backup,®State,sizeof (regState));
- if(ret<=0)
- {
- LYERRLOG("%s set regState fail, ret is %d",__func__, ret);
- goto error_done;
}
- ret = write(fd_backup,&netType,sizeof (netType));
- if(ret<=0)
- {
- LYERRLOG("%s set netType fail, ret is %d",__func__, ret);
- goto error_done;
- }
+ int stringNum;
+ char * p_value;
+ int stringLen;
- stringLen=strlen(LAC)+1;
- ret = write(fd_backup,&stringLen,sizeof (stringLen));
- if(ret<=0)
+ stringNum = va_arg(pArgs, int);
+ LYINFLOG("%s stringNum is %d",__func__,stringNum);
+ for(i=0;i<stringNum;i++)
{
- LYERRLOG("%s set lac stringLen %d fail, ret is %d",__func__, stringLen, ret);
- goto error_done;
- }
-
- ret = write(fd_backup,LAC,stringLen);
- if(ret<=0)
- {
- LYERRLOG("%s set lac fail, ret is %d",__func__, ret);
- goto error_done;
+ p_value=va_arg(pArgs, char*);
+ stringLen=strlen(p_value)+1;
+ LYINFLOG("%s p_value is %s,stringlen is %d",__func__,p_value,stringLen);
+ ret = write(fd_backup,&stringLen,sizeof(int));
+ if(ret<=0)
+ {
+ LYERRLOG("%s write %i stringlen %d fail, ret is %d",__func__,i,stringLen,ret);
+ goto set_state_error_done;
+ }
+ ret = write(fd_backup,p_value,stringLen);
+ if(ret<=0)
+ {
+ LYERRLOG("%s write string %d stringlen %d fail, ret is %d",__func__,i, stringLen,ret);
+ goto set_state_error_done;
+ }
}
- stringLen=strlen(CID)+1;
- ret = write(fd_backup,&stringLen,sizeof (stringLen));
- if(ret<=0)
- {
- LYERRLOG("%s set cid stringLen %d fail, ret is %d",__func__, stringLen, ret);
- goto error_done;
- }
-
- ret = write(fd_backup,CID,stringLen);
- if(ret<=0)
- {
- LYERRLOG("%s set cid fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- sync();
- close(fd_backup);
- start_network_timer(s_register_timer_data,register_sig_value_data,s_register_cfg.data_valid_period*1000);
- s_register_data_valid=true;
-
- LYINFLOG("set_registration_state data suc, regState is %d, netType is %d, LAC is %s, CID is %s",regState,netType,LAC,CID);
- return;
-
-error_done:
-
- close(fd_backup);
- return;
-}
-void lynq_set_registration_state_to_buf_ims(int imsRegState,int radioTechFam)
-{
- int ret;
- int fd_backup;
-
- if(s_register_cfg.ims_valid_period<=0)
- {
- LYINFLOG("%s timer length is not greater than 0",__func__);
- return;
- }
-
- fd_backup = open(IMS_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);
-
- if (fd_backup < 0) {
- LYERRLOG("Error opening registrate ims buffer file: %s\n",strerror(errno));
- return ;
- }
-
- ret = write(fd_backup,&imsRegState,sizeof (imsRegState));
- if(ret<=0)
- {
- LYERRLOG("%s set imsRegState fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = write(fd_backup,&radioTechFam,sizeof (radioTechFam));
- if(ret<=0)
- {
- LYERRLOG("%s set radioTechFam fail, ret is %d",__func__, ret);
- goto error_done;
- }
+ va_end(pArgs);
sync();
close(fd_backup);
- start_network_timer(s_register_timer_ims,register_sig_value_ims,s_register_cfg.ims_valid_period*1000);
- s_register_ims_valid=true;
-
- LYINFLOG("set_registration_state ims suc, imsRegState is %d, radioTechFam is %d",imsRegState,radioTechFam);
+ set_state_buffer_valid(type,true);
+ LYINFLOG("%s type %d suc",__func__,type);
return;
-error_done:
-
+set_state_error_done:
+ set_state_buffer_valid(type,false);
close(fd_backup);
- return;
+ return;
}
-int lynq_get_registration_state_to_buf_voice(int* regState,int *netType,int *netRejected)
+int get_state_from_buf(lynq_network_state_buffer_type type,...)
{
int ret;
int fd_backup;
-
- if(!s_register_voice_valid)
+
+ if(!get_state_buffer_valid(type))
{
- LYINFLOG("registration voice buffer is false");
+ LYINFLOG("%s type %d buffer not valid",__func__,type);
return 1;
}
- fd_backup = open(VOICE_REG_BUFFER_FILE, O_RDONLY);
+ fd_backup = open(s_state_buffer_file[type], O_RDONLY);
if (fd_backup < 0) {
- LYERRLOG("Error opening registrate voice buffer file: %s\n",strerror(errno));
- s_register_voice_valid=false;
+ LYERRLOG("%s Error opening type %d buffer file: %s\n",__func__,type,strerror(errno));
+ set_state_buffer_valid(type,false);
return -1;
}
-
- ret = read(fd_backup,regState,sizeof (int));
- if(ret<=0)
+
+ va_list pArgs;
+ va_start(pArgs, type);
+ int int_p_num;
+ int i;
+ int* int_p_value;
+
+ int_p_num= va_arg(pArgs, int);
+ LYINFLOG("%s int_num is %d",__func__,int_p_num);
+ for(i=0;i<int_p_num;i++)
{
- LYERRLOG("%s get regState fail, ret is %d",__func__,ret);
- goto error_done;
+ int_p_value=va_arg(pArgs, int*);
+ ret = read(fd_backup,int_p_value,sizeof (int));
+ LYINFLOG("%s int_p_value is %d",__func__,(*int_p_value));
+ if(ret<=0)
+ {
+ LYERRLOG("%s read int %d fail, ret is %d",__func__,i,ret);
+ goto get_state_error_done;
+ }
+
}
- ret = read(fd_backup,netType,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get netType fail, ret is %d",__func__,ret);
- goto error_done;
- }
+ int stringNum;
+ char * p_value;
+ int stringLen;
- ret = read(fd_backup,netRejected,sizeof (int));
- if(ret<=0)
+ stringNum = va_arg(pArgs, int);
+ LYINFLOG("%s stringNum is %d",__func__,stringNum);
+ for(i=0;i<stringNum;i++)
{
- LYERRLOG("%s get netRejected fail, ret is %d",__func__,ret);
- goto error_done;
- }
+ ret = read(fd_backup,&stringLen,sizeof (int));
+ if(ret<=0)
+ {
+ LYERRLOG("%s get %d string len fail, ret is %d",__func__,i,ret);
+ goto get_state_error_done;
+ }
+ LYINFLOG("%s stringlen is %d",__func__,stringLen);
+ p_value=va_arg(pArgs, char*);
+ ret = read(fd_backup,p_value,stringLen);
+ if(ret<=0)
+ {
+ LYERRLOG("%s get %d string fail, stringlen is %d, ret is %d",__func__, stringLen,ret);
+ goto get_state_error_done;
+ }
+ LYINFLOG("%s p_value is %s",__func__,p_value);
+ }
+ va_end(pArgs);
-
- close(fd_backup);
- LYINFLOG("get_registration_state voice suc, regState is %d, netType is %d, netRejected is %d",*regState,*netType,*netRejected);
- return 0;
-
-error_done:
- s_register_voice_valid=false;
- close(fd_backup);
- return -1;
-}
-int lynq_get_registration_state_to_buf_data(int* regState,char * LAC,char * CID,int *netType)
-{
- int ret;
- int stringLen;
- int fd_backup;
-
- if(!s_register_data_valid)
- {
- LYINFLOG("registration data buffer is false");
- return 1;
- }
-
- fd_backup = open(DATA_REG_BUFFER_FILE,O_RDONLY);
-
- if (fd_backup < 0) {
- LYERRLOG("Error opening registrate data buffer file: %s\n",strerror(errno));
- return -1;
- }
-
- ret = read(fd_backup,regState,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get regState fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = read(fd_backup,netType,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get netType fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = read(fd_backup,&stringLen,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get lac stringLen fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = read(fd_backup,LAC,stringLen);
- if(ret<=0)
- {
- LYERRLOG("%s get lac fail, ret is %d, stringLen is %d",__func__, ret,stringLen);
- goto error_done;
- }
-
-
- ret = read(fd_backup,&stringLen,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get cid stringLen fail, ret is %d",__func__, ret);
- goto error_done;
- }
-
- ret = read(fd_backup,CID,stringLen);
- if(ret<=0)
- {
- LYERRLOG("%s get cid fail, ret is %d, stringLen is %d",__func__, ret,stringLen);
- goto error_done;
- }
-
close(fd_backup);
-
- LYINFLOG("get_registration_state data suc, regState is %d, netType is %d, LAC is %s, CID is %s",*regState,*netType,LAC,CID);
- return 0;
-
-error_done:
- s_register_data_valid =false;
+ LYINFLOG("%s type %d suc",__func__,type);
+ return 0;
+
+get_state_error_done:
+ set_state_buffer_valid(type,false);
close(fd_backup);
return -1;
-
}
-int lynq_get_registration_state_to_buf_ims(int* imsRegState,int *radioTechFam)
+
+int lynq_set_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type,int valid_period)
{
- int ret;
- int fd_backup;
-
- if(!s_register_ims_valid)
+ if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)
{
- LYINFLOG("registration ims buffer is false");
- return 1;
- }
-
- fd_backup = open(IMS_REG_BUFFER_FILE,O_RDONLY);
-
- if (fd_backup < 0) {
- LYERRLOG("Error opening registrate ims buffer file: %s\n",strerror(errno));
+ LYERRLOG("%s type %d error",__func__,type);
return -1;
}
-
- ret = read(fd_backup,imsRegState,sizeof (int));
- if(ret<=0)
+ if(valid_period>INT_MAX/1000 || valid_period <0)
{
- LYERRLOG("%s get imsRegState fail, ret is %d",__func__, ret);
- goto error_done;
+ LYERRLOG("%s type %d error",__func__,valid_period);
+ return -2;
}
-
- ret = read(fd_backup,radioTechFam,sizeof (int));
- if(ret<=0)
- {
- LYERRLOG("%s get radioTechFam fail, ret is %d",__func__, ret);
- goto error_done;
- }
- close(fd_backup);
-
- LYINFLOG("get_registration_state ims suc, imsRegState is %d, radioTechFam is %d",*imsRegState,*radioTechFam);
- return 0;
-
-error_done:
- s_register_ims_valid =false;
- close(fd_backup);
- return -1;
+ network_state_buffer_cfg cfg_back=s_state_buffer_cfg;
+ s_state_buffer_cfg.valid_period[type]=valid_period;
+ int ret=set_state_buffer_timer_length_to_file();
+ if(ret!=0)
+ {
+ s_state_buffer_cfg=cfg_back;
+ }
+ else
+ {
+ set_state_buffer_valid(type,false);
+ }
+ LYINFLOG("%s type %d period %d ret is %d",__func__,type,valid_period,ret);
+ return ret;
}
-void lynq_set_voice_registration_valid_period(int valid_period)
+int lynq_get_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type)
{
- s_register_cfg.voice_valid_period=valid_period;
- stop_network_timer(s_register_timer_voice, register_sig_value_voice);
- s_register_voice_valid=false;
- set_network_register_timer_length_to_file();
+ if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)
+ {
+ LYERRLOG("%s type %d error",__func__,type);
+ return 0;
+ }
+ return s_state_buffer_cfg.valid_period[type];
}
-
-void lynq_set_data_registration_valid_period(int valid_period)
-{
- s_register_cfg.data_valid_period = valid_period;
- stop_network_timer(s_register_timer_data, register_sig_value_data);
- s_register_data_valid=false;
- set_network_register_timer_length_to_file();
-}
-
-void lynq_set_ims_registration_valid_period(int valid_period)
-{
- s_register_cfg.ims_valid_period=valid_period;
- stop_network_timer(s_register_timer_ims, register_sig_value_ims);
- s_register_ims_valid=false;
- set_network_register_timer_length_to_file();
-}
-
-int lynq_get_voice_registration_valid_period()
-{
- return s_register_cfg.voice_valid_period;
-}
-
-int lynq_get_data_registration_valid_period()
-{
- return s_register_cfg.data_valid_period;
-}
-
-int lynq_get_ims_registration_valid_period()
-{
- return s_register_cfg.ims_valid_period;
-}
-
diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
index c0e20be..b451c65 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
+++ b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
@@ -3,20 +3,11 @@
#ifdef __cplusplus
extern "C" {
#endif
-void set_register_voice_buffer_valid(int valid);
-void set_register_data_buffer_valid(int valid);
-void set_register_ims_buffer_valid(int valid);
-void stop_network_timer(timer_t timer, int signal_value);
-void start_network_timer(timer_t timer, int signal_value, int milliseconds);
+void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid);
+void set_state_to_buf(lynq_network_state_buffer_type type,...);
+int get_state_from_buf(lynq_network_state_buffer_type type,...);
void init_network_timer_all();
void deinit_network_timer_all();
-void lynq_set_registration_state_to_buf_voice(int regState,int netType,int netRejected);
-void lynq_set_registration_state_to_buf_data(int regState,char * LAC,char * CID,int netType);
-void lynq_set_registration_state_to_buf_ims(int imsRegState,int radioTechFam);
-int lynq_get_registration_state_to_buf_voice(int* regState,int *netType,int *netRejected);
-int lynq_get_registration_state_to_buf_data(int* regState,char * LAC,char * CID,int *netType);
-int lynq_get_registration_state_to_buf_ims(int* imsRegState,int *radioTechFam);
-
#ifdef __cplusplus
}
#endif