| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 1 | #include <stdio.h>
|
| q.huang | af58bc8 | 2022-08-19 17:11:21 +0800 | [diff] [blame] | 2 | #include <stdint.h> /*just for uint64_t in lynq_query_cell_info 20220819 hq*/
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 3 | #include <sys/types.h>
|
| 4 | #include <string.h>
|
| 5 | #include <unistd.h>
|
| 6 | #include <pthread.h>
|
| 7 | #include <signal.h>
|
| 8 | #include <errno.h> |
| 9 | #include <fcntl.h>
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 10 | #include <stdarg.h>
|
| 11 | #include <climits>
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 12 | #include "liblog/lynq_deflog.h"
|
| 13 | #include "lynq_network.h"
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 14 | #include "lynq_module_common.h"
|
| 15 | #include "lynq_module_state_buffer.h"
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 16 |
|
| 17 | #define USER_LOG_TAG "LYNQ_NETWORK"
|
| 18 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 19 | static timer_t s_state_buffer_timer[NETWORK_STATE_BUFFER_TYPE_MAX];
|
| 20 |
|
| 21 | static int s_state_buffer_sig_value[NETWORK_STATE_BUFFER_TYPE_MAX]={2,3,4};
|
| 22 |
|
| 23 | static int s_state_buffer_valid[NETWORK_STATE_BUFFER_TYPE_MAX]={false,false,false};
|
| 24 |
|
| 25 | static char* s_state_buffer_file[NETWORK_STATE_BUFFER_TYPE_MAX]={
|
| 26 | "/data/ril/network/.network_register_voice_buffer",
|
| 27 | "/data/ril/network/.network_register_data_buffer",
|
| 28 | "/data/ril/network/.network_register_ims_buffer"
|
| 29 | };
|
| 30 |
|
| 31 | #define STATE_BUFFER_CONFIG_FILE "/data/ril/network/.state_buffer_cfg"
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 32 | typedef struct{
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 33 | int valid_period[NETWORK_STATE_BUFFER_TYPE_MAX];
|
| 34 | }network_state_buffer_cfg;
|
| 35 | static network_state_buffer_cfg s_state_buffer_cfg;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 36 | static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 37 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 38 | void get_state_buffer_timer_length_from_file()
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 39 | {
|
| 40 | int fd_backup;
|
| 41 | int ret;
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 42 | memset(&s_state_buffer_cfg,0,sizeof (s_state_buffer_cfg));
|
| 43 | fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_RDONLY | O_CREAT,0777);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 44 | if (fd_backup < 0) {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 45 | LYERRLOG("%s open file faile, error is %s\n",__func__,strerror(errno));
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 46 | return;
|
| 47 | }
|
| 48 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 49 | ret = read(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 50 | if(ret<=0)
|
| 51 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 52 | LYERRLOG("%s read fail, ret is %d",__func__,ret);
|
| 53 | memset(&s_state_buffer_cfg,0,sizeof (s_state_buffer_cfg));
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 54 | }
|
| 55 | else
|
| 56 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 57 | LYINFLOG("%s suc",__func__);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 58 | }
|
| 59 | close(fd_backup);
|
| 60 |
|
| 61 | return;
|
| 62 | }
|
| 63 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 64 | int set_state_buffer_timer_length_to_file()
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 65 | {
|
| 66 | int fd_backup;
|
| 67 | int ret;
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 68 | fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_WRONLY | O_CREAT,0777);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 69 | if (fd_backup < 0) {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 70 | LYERRLOG("%s open file fail, error is %s\n",__func__,strerror(errno));
|
| 71 | return -1;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 72 | }
|
| 73 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 74 | ret = write(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 75 | if(ret<=0)
|
| 76 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 77 | LYERRLOG("%s write fail, ret is %d",__func__,ret);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 78 | }
|
| 79 | else
|
| 80 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 81 | LYINFLOG("%s suc",__func__);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 82 | }
|
| 83 | close(fd_backup);
|
| 84 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 85 | return ret>0? 0:-2;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 86 | }
|
| 87 |
|
| 88 | void start_network_timer(timer_t timer, int signal_value, int milliseconds) {
|
| 89 | LYINFLOG("start_network_timer(), timer_id=%ld, signal_value=%d, time=%d",(long)timer, signal_value, milliseconds);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 90 | |
| 91 | struct itimerspec expire; |
| 92 | expire.it_interval.tv_sec = 0; |
| 93 | expire.it_interval.tv_nsec = 0; |
| 94 | expire.it_value.tv_sec = milliseconds/1000; |
| 95 | expire.it_value.tv_nsec = (milliseconds%1000)*1000000; |
| 96 | if (timer_settime(timer, 0, &expire, NULL) == -1) { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 97 | LYERRLOG("timer_settime failed reason=[%s]", strerror(errno));
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 98 | } |
| 99 | } |
| 100 | |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 101 | void stop_network_timer(timer_t timer, int signal_value) {
|
| 102 | LYINFLOG("stop_network_timer(), timer_id=%ld, signal_value=%d", (long)timer, signal_value);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 103 | struct itimerspec timespec; |
| 104 | if(timer_gettime(timer, ×pec) == -1) { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 105 | LYERRLOG("stop_network_timer(), get time fail(%s)", strerror(errno));
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 106 | return; |
| 107 | } |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 108 | LYINFLOG("stop_network_timer(), tv_sec=%ld, tv_nsec=%ld",timespec.it_value.tv_sec, timespec.it_value.tv_nsec);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 109 | if((timespec.it_value.tv_sec == 0) && (timespec.it_value.tv_nsec == 0) ) { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 110 | LYINFLOG("stop_network_timer(), timer_id(%ld) had stopped, just return", (long)timer);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 111 | return; |
| 112 | } else { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 113 | start_network_timer(timer, signal_value, 0);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 114 | } |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 115 | }
|
| 116 |
|
| 117 | void network_timer_handler(sigval_t sig) {
|
| 118 | LYINFLOG("network_timer_handler, sig_value: %d", sig.sival_int);
|
| 119 | int s;
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 120 | s = pthread_mutex_lock(&mtx); |
| 121 | if(s != 0) { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 122 | LYERRLOG("network_timer_handler, pthead_mutex_lock fail");
|
| 123 | }
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 124 | for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 125 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 126 | if(sig.sival_int == s_state_buffer_sig_value[i])
|
| 127 | {
|
| 128 | s_state_buffer_valid[i]=false;
|
| 129 | break;
|
| 130 | }
|
| 131 | }
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 132 | s = pthread_mutex_unlock(&mtx); |
| 133 | if(s != 0) { |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 134 | LYERRLOG("network_timer_handler, pthread_mutex_unlock fail");
|
| 135 | }
|
| 136 | }
|
| 137 |
|
| 138 | void init_network_timer(timer_t* timer, int signal_value)
|
| 139 | {
|
| 140 | struct sigevent sevp;
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 141 | memset(&sevp, 0, sizeof(sevp)); |
| 142 | sevp.sigev_value.sival_int = signal_value; |
| 143 | sevp.sigev_notify = SIGEV_THREAD; |
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 144 | sevp.sigev_notify_function = network_timer_handler;
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 145 | |
| 146 | if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) { |
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 147 | LYERRLOG("init_network_timer() failed reason=[%s]", strerror(errno));
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 148 | } |
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 149 | LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);
|
| q.huang | 5292166 | 2022-10-20 15:25:45 +0800 | [diff] [blame^] | 150 | } |
| 151 | |
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 152 | void init_network_timer_all() {
|
| 153 |
|
| 154 | for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){
|
| 155 | init_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
|
| 156 | s_state_buffer_valid[i] = false;
|
| 157 | }
|
| 158 | get_state_buffer_timer_length_from_file();
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 159 | }
|
| 160 |
|
| 161 | void deinit_network_timer_all()
|
| 162 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 163 | for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){
|
| 164 | stop_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
|
| 165 | s_state_buffer_valid[i] = false;
|
| 166 | }
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 167 | }
|
| 168 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 169 | int is_period_equal_not_valid(int period)
|
| 170 | {
|
| 171 | return period<=0 || (period > INT_MAX/1000);
|
| 172 | }
|
| 173 |
|
| 174 | void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid)
|
| 175 | {
|
| 176 | if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))
|
| 177 | {
|
| 178 | valid=false;
|
| 179 | }
|
| 180 | s_state_buffer_valid[type] = valid;
|
| 181 | if(s_state_buffer_valid[type]==false)
|
| 182 | {
|
| 183 | stop_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type]);
|
| 184 | }
|
| 185 | else
|
| 186 | {
|
| 187 | start_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type],s_state_buffer_cfg.valid_period[type]*1000);
|
| 188 | }
|
| 189 | LYINFLOG("%s type %d valid is %d",__func__,type,valid);
|
| 190 | }
|
| 191 |
|
| 192 | int get_state_buffer_valid(lynq_network_state_buffer_type type)
|
| 193 | {
|
| 194 | return s_state_buffer_valid[type];
|
| 195 | }
|
| 196 |
|
| 197 | void set_state_to_buf(lynq_network_state_buffer_type type,...)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 198 | {
|
| 199 | int ret;
|
| 200 | int fd_backup;
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 201 |
|
| 202 | if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 203 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 204 | LYINFLOG("%s type %d timer length %d is equal not valid",__func__,type,s_state_buffer_cfg.valid_period[type]);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 205 | return;
|
| 206 | }
|
| 207 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 208 | fd_backup = open(s_state_buffer_file[type],O_WRONLY | O_CREAT,0777);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 209 |
|
| 210 | if (fd_backup < 0) {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 211 | LYERRLOG("%s Error opening registrate buffer file: %s\n",__func__,strerror(errno));
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 212 | return ;
|
| 213 | }
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 214 |
|
| 215 | va_list pArgs;
|
| 216 | va_start(pArgs, type);
|
| 217 |
|
| 218 | int int_num;
|
| 219 | int i,int_value;
|
| 220 |
|
| 221 | int_num = va_arg(pArgs, int);
|
| 222 | LYINFLOG("%s int_num is %d",__func__,int_num);
|
| 223 | for(i=0;i<int_num;i++)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 224 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 225 | int_value=va_arg(pArgs, int);
|
| 226 | LYINFLOG("%s int_value is %d",__func__,int_value);
|
| 227 | ret = write(fd_backup,&int_value,sizeof (int));
|
| 228 | if(ret<=0)
|
| 229 | {
|
| 230 | LYERRLOG("%s write int %d value %d fail, ret is %d",__func__,i,int_value,ret);
|
| 231 | goto set_state_error_done;
|
| 232 | }
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 233 |
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 234 | }
|
| 235 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 236 | int stringNum;
|
| 237 | char * p_value;
|
| 238 | int stringLen;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 239 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 240 | stringNum = va_arg(pArgs, int);
|
| 241 | LYINFLOG("%s stringNum is %d",__func__,stringNum);
|
| 242 | for(i=0;i<stringNum;i++)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 243 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 244 | p_value=va_arg(pArgs, char*);
|
| 245 | stringLen=strlen(p_value)+1;
|
| 246 | LYINFLOG("%s p_value is %s,stringlen is %d",__func__,p_value,stringLen);
|
| 247 | ret = write(fd_backup,&stringLen,sizeof(int));
|
| 248 | if(ret<=0)
|
| 249 | {
|
| 250 | LYERRLOG("%s write %i stringlen %d fail, ret is %d",__func__,i,stringLen,ret);
|
| 251 | goto set_state_error_done;
|
| 252 | }
|
| 253 | ret = write(fd_backup,p_value,stringLen);
|
| 254 | if(ret<=0)
|
| 255 | {
|
| 256 | LYERRLOG("%s write string %d stringlen %d fail, ret is %d",__func__,i, stringLen,ret);
|
| 257 | goto set_state_error_done;
|
| 258 | }
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 259 | }
|
| 260 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 261 | va_end(pArgs);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 262 |
|
| 263 | sync();
|
| 264 | close(fd_backup);
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 265 | set_state_buffer_valid(type,true);
|
| 266 | LYINFLOG("%s type %d suc",__func__,type);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 267 | return;
|
| 268 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 269 | set_state_error_done:
|
| 270 | set_state_buffer_valid(type,false);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 271 | close(fd_backup);
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 272 | return;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 273 | }
|
| 274 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 275 | int get_state_from_buf(lynq_network_state_buffer_type type,...)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 276 | {
|
| 277 | int ret;
|
| 278 | int fd_backup;
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 279 |
|
| 280 | if(!get_state_buffer_valid(type))
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 281 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 282 | LYINFLOG("%s type %d buffer not valid",__func__,type);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 283 | return 1;
|
| 284 | }
|
| 285 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 286 | fd_backup = open(s_state_buffer_file[type], O_RDONLY);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 287 |
|
| 288 | if (fd_backup < 0) {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 289 | LYERRLOG("%s Error opening type %d buffer file: %s\n",__func__,type,strerror(errno));
|
| 290 | set_state_buffer_valid(type,false);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 291 | return -1;
|
| 292 | }
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 293 |
|
| 294 | va_list pArgs;
|
| 295 | va_start(pArgs, type);
|
| 296 | int int_p_num;
|
| 297 | int i;
|
| 298 | int* int_p_value;
|
| 299 |
|
| 300 | int_p_num= va_arg(pArgs, int);
|
| 301 | LYINFLOG("%s int_num is %d",__func__,int_p_num);
|
| 302 | for(i=0;i<int_p_num;i++)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 303 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 304 | int_p_value=va_arg(pArgs, int*);
|
| 305 | ret = read(fd_backup,int_p_value,sizeof (int));
|
| 306 | LYINFLOG("%s int_p_value is %d",__func__,(*int_p_value));
|
| 307 | if(ret<=0)
|
| 308 | {
|
| 309 | LYERRLOG("%s read int %d fail, ret is %d",__func__,i,ret);
|
| 310 | goto get_state_error_done;
|
| 311 | }
|
| 312 |
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 313 | }
|
| 314 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 315 | int stringNum;
|
| 316 | char * p_value;
|
| 317 | int stringLen;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 318 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 319 | stringNum = va_arg(pArgs, int);
|
| 320 | LYINFLOG("%s stringNum is %d",__func__,stringNum);
|
| 321 | for(i=0;i<stringNum;i++)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 322 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 323 | ret = read(fd_backup,&stringLen,sizeof (int));
|
| 324 | if(ret<=0)
|
| 325 | {
|
| 326 | LYERRLOG("%s get %d string len fail, ret is %d",__func__,i,ret);
|
| 327 | goto get_state_error_done;
|
| 328 | }
|
| 329 | LYINFLOG("%s stringlen is %d",__func__,stringLen);
|
| 330 | p_value=va_arg(pArgs, char*);
|
| 331 | ret = read(fd_backup,p_value,stringLen);
|
| 332 | if(ret<=0)
|
| 333 | {
|
| 334 | LYERRLOG("%s get %d string fail, stringlen is %d, ret is %d",__func__, stringLen,ret);
|
| 335 | goto get_state_error_done;
|
| 336 | }
|
| 337 | LYINFLOG("%s p_value is %s",__func__,p_value);
|
| 338 | }
|
| 339 | va_end(pArgs);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 340 |
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 341 | close(fd_backup);
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 342 | LYINFLOG("%s type %d suc",__func__,type);
|
| 343 | return 0;
|
| 344 |
|
| 345 | get_state_error_done:
|
| 346 | set_state_buffer_valid(type,false);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 347 | close(fd_backup);
|
| 348 | return -1;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 349 | }
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 350 |
|
| 351 | int lynq_set_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type,int valid_period)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 352 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 353 | if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 354 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 355 | LYERRLOG("%s type %d error",__func__,type);
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 356 | return -1;
|
| 357 | }
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 358 | if(valid_period>INT_MAX/1000 || valid_period <0)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 359 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 360 | LYERRLOG("%s type %d error",__func__,valid_period);
|
| 361 | return -2;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 362 | }
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 363 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 364 | network_state_buffer_cfg cfg_back=s_state_buffer_cfg;
|
| 365 | s_state_buffer_cfg.valid_period[type]=valid_period;
|
| 366 | int ret=set_state_buffer_timer_length_to_file();
|
| 367 | if(ret!=0)
|
| 368 | {
|
| 369 | s_state_buffer_cfg=cfg_back;
|
| 370 | }
|
| 371 | else
|
| 372 | {
|
| 373 | set_state_buffer_valid(type,false);
|
| 374 | }
|
| 375 | LYINFLOG("%s type %d period %d ret is %d",__func__,type,valid_period,ret);
|
| 376 | return ret;
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 377 | }
|
| 378 |
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 379 | int lynq_get_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type)
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 380 | {
|
| q.huang | d3804bd | 2022-10-20 14:36:14 +0800 | [diff] [blame] | 381 | if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)
|
| 382 | {
|
| 383 | LYERRLOG("%s type %d error",__func__,type);
|
| 384 | return 0;
|
| 385 | }
|
| 386 | return s_state_buffer_cfg.valid_period[type];
|
| q.huang | 47d4dfe | 2022-08-17 17:52:29 +0800 | [diff] [blame] | 387 | }
|