blob: f8e2a6ad5262749748e41762a2398efb26e12341 [file] [log] [blame]
llb52a49f2022-09-05 00:23:18 -07001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <unistd.h>
7#include <binder/Parcel.h>
8#include <log/log.h>
9#include <cutils/jstring.h>
10#include <pthread.h>
11#include <sys/socket.h>
12#include <netinet/in.h>
13#include <arpa/inet.h>
14#include <errno.h>
15#include "lynq_timer.h"
16
17#define DEST_PORT 8088
18#define DSET_IP_ADDRESS "127.0.0.1"
ll892b6ef2022-09-08 06:45:34 -070019#define RIL_REQUEST_DEVICE_IDENTITY 98
llb52a49f2022-09-05 00:23:18 -070020#define MAX_LEN 1024
jb.qi3d1d9a42023-05-16 06:55:53 -070021#define TIMER 30
llb52a49f2022-09-05 00:23:18 -070022
23using ::android::Parcel;
24
25static pthread_mutex_t g_lynq_sim_sendto_mutex;
26
27typedef struct{
28 int uToken;
29 int request;
30 int paramLen;
31 char param[MAX_LEN];
32}lynq_client_t;
33
34static int get_md_sta(void)
35{
36 FILE *fp;
37 char buffer[64]={};
38 fp = popen("cat /sys/kernel/ccci/boot","r");
39 if(fp == NULL)
40 {
ll892b6ef2022-09-08 06:45:34 -070041 RLOGD("function %s fp is null\n", __FUNCTION__);
ll2f5e1c82022-09-07 00:01:43 -070042 return 0;
43 }
llb52a49f2022-09-05 00:23:18 -070044 fgets(buffer,sizeof(buffer),fp);
ll892b6ef2022-09-08 06:45:34 -070045 if(!strlen(buffer))
46 {
47 RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
48 pclose(fp);
49 return 0;
50 }
llb52a49f2022-09-05 00:23:18 -070051 if(buffer[4] == '4')
52 {
53 pclose(fp);
54 return 1;
55 }
ll892b6ef2022-09-08 06:45:34 -070056 RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
llb52a49f2022-09-05 00:23:18 -070057 pclose(fp);
58 return 0;
59}
60
61static int check_service(const char *service)
62{
63 FILE *fp;
64 char buffer[1024]={};
65 if(!strcmp(service, "/usr/sbin/mtkfusionrild"))
66 {
67 fp = popen("ps -ef|grep rild","r");
68 }
69 else if(!strcmp(service, "lynq-ril-service"))
70 {
71 fp = popen("ps -ef|grep ril-service","r");
72 }
73 if(fp == NULL)
74 {
ll892b6ef2022-09-08 06:45:34 -070075 RLOGD("function %s fp is null\n", __FUNCTION__);
llb52a49f2022-09-05 00:23:18 -070076 return 0;
77 }
78 while(NULL != fgets(buffer,sizeof(buffer),fp))
79 {
80 if(strstr(buffer,service))
81 {
82 pclose(fp);
ll88c42532023-02-01 15:34:52 +080083 RLOGD("check_service 1\n");
llb52a49f2022-09-05 00:23:18 -070084 return 1;
85 }
86 }
ll88c42532023-02-01 15:34:52 +080087 RLOGD("check_service 0\n");
llb52a49f2022-09-05 00:23:18 -070088 pclose(fp);
89 return 0;
90}
91
92/**
jb.qi3d1d9a42023-05-16 06:55:53 -070093 * @brief 30s request imei
llb52a49f2022-09-05 00:23:18 -070094 *
95 * @param arg
96 * @return void*
97 */
98void * timer_request_imei(void * arg)
99{
100 int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
101 if (-1 == sock_fd)
102 {
103 RLOGD("__FUNCTION__ %s create sock_fd failed %s\n", __FUNCTION__, strerror(errno));
104 /*set uci*/
105 /*socket abnormal*/
106 system("uci set lynq_uci.sdk_ready='3'");
107 /*set uci*/
108 return NULL;
109 }
110 struct timeval timeOut;
111 timeOut.tv_sec = 3;//timeout time 3s
112 timeOut.tv_usec = 0;
113 if (setsockopt(sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
114 {
115 RLOGD("__FUNCTION__ %s time out setting failed %s\n", __FUNCTION__, strerror(errno));
116 /*set uci*/
117 /*socket abnormal*/
118 system("uci set lynq_uci.sdk_ready='3'");
119 /*set uci*/
120 return NULL;
121 }
jb.qi3d1d9a42023-05-16 06:55:53 -0700122 struct sockaddr_in addr_serv;
123 memset(&addr_serv, 0, sizeof(addr_serv));
124 addr_serv.sin_family = AF_INET;
125 addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
126 addr_serv.sin_port = htons(DEST_PORT);
127 int len_addr_serv = sizeof(addr_serv);
llb52a49f2022-09-05 00:23:18 -0700128 int send_num = -1;
129 int recv_num = -1;
130 int resp_type = -1;
131 int request = -1;
132 int slot_id = -1;
llf0936572022-09-15 19:06:10 +0800133 int token = -1;
llb52a49f2022-09-05 00:23:18 -0700134 int res_error = -1;
135 lynq_client_t client_t;
136 char res_data[MAX_LEN] = {0};
ll892b6ef2022-09-08 06:45:34 -0700137 client_t.request = RIL_REQUEST_DEVICE_IDENTITY;
llb52a49f2022-09-05 00:23:18 -0700138 client_t.paramLen = 0;
139 client_t.uToken = 999;
140 memset(client_t.param, 0, sizeof(client_t.param));
141 while (1)
142 {
llb52a49f2022-09-05 00:23:18 -0700143 bzero(res_data, MAX_LEN);
144 pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
jb.qi3d1d9a42023-05-16 06:55:53 -0700145 send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
ll88c42532023-02-01 15:34:52 +0800146 RLOGD("send_num %d\n", send_num);
llb52a49f2022-09-05 00:23:18 -0700147 if(send_num == 0)
148 {
149 RLOGD("__FUNCTION__ %s Close to end %s\n", __FUNCTION__, strerror(errno));
150 //unknow
151 system("uci set lynq_uci.sdk_ready='4'");
152 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
153 continue;
154 }
155 if(send_num < 0)
156 {
157 RLOGD("__FUNCTION__ %s sendto error %s\n", __FUNCTION__, strerror(errno));
158 //unknow
159 system("uci set lynq_uci.sdk_ready='4'");
160 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
161 continue;
162 }
163 //get data msg
jb.qi3d1d9a42023-05-16 06:55:53 -0700164 recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
ll88c42532023-02-01 15:34:52 +0800165 RLOGD("recv_num %d\n", recv_num);
llb52a49f2022-09-05 00:23:18 -0700166 if(recv_num == 0)
167 {
168 RLOGD("__FUNCTION__ %s Close to end\n", __FUNCTION__);
169 //unknow
170 system("uci set lynq_uci.sdk_ready='4'");
171 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
172 continue;;
173 }
174 if(recv_num == -1 && errno == EAGAIN)
175 {
176 RLOGD("__FUNCTION__ %srecvfrom fail because timeout\n", __FUNCTION__);
177 /*set uci*/
178 if(!get_md_sta())
179 {
180 system("uci set lynq_uci.sdk_ready='1'");
181 }
182 else
183 {
184 if(check_service("/usr/sbin/mtkfusionrild"))//rild work
185 {
186 if(!check_service("lynq-ril-service"))//not find,must be socket error
187 {
188 system("uci set lynq_uci.sdk_ready='3'");
189 }
190 else
191 {
192 //unknow error
193 system("uci set lynq_uci.sdk_ready='4'");
194 }
195
196 }
197 else//rild no work
198 {
199 //unknow
200 system("uci set lynq_uci.sdk_ready='4'");
201 }
202 }
203 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
204 continue;;
205 }
206 if(recv_num < 0)
207 {
208 RLOGD("__FUNCTION__ %srecvfrom fail %s\n", __FUNCTION__, strerror(errno));
209 //unknow
210 system("uci set lynq_uci.sdk_ready='4'");
211 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
212 continue;;
213 }
214 Parcel p;
215 p.setData((uint8_t *)res_data,sizeof(char)*recv_num);
216 p.setDataPosition(0);
217 if(p.dataAvail() > 0)
218 {
219 p.readInt32(&resp_type);
llf0936572022-09-15 19:06:10 +0800220 p.readInt32(&token);
llb52a49f2022-09-05 00:23:18 -0700221 p.readInt32(&request);
222 p.readInt32(&slot_id);
223 p.readInt32(&res_error);
224 }
225 /*judge the res_error*/
226 if(!res_error)
227 {
ll892b6ef2022-09-08 06:45:34 -0700228 system("uci set lynq_uci.sdk_ready='0'");
llb52a49f2022-09-05 00:23:18 -0700229 }
230 else
231 {
ll892b6ef2022-09-08 06:45:34 -0700232 system("uci set lynq_uci.sdk_ready='2'"); //Md configurations are inconsistent with AP configurations
llb52a49f2022-09-05 00:23:18 -0700233 }
234 RLOGD("__FUNCTION__ %s res_error %d\n", __FUNCTION__, res_error);
235 /*judge the res_error*/
236 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
ll2f5e1c82022-09-07 00:01:43 -0700237 sleep(TIMER);
llb52a49f2022-09-05 00:23:18 -0700238 }
239 return NULL;
240}
241
242
qjbd37f0902023-08-04 04:08:52 -0700243void delete_enter(char data[])
244{
245 char *find = strchr(data, '\n');
246 if(find)
247 *find = '\0';
248 return ;
qjbdeea8452023-08-03 06:35:43 -0700249}
250
251
252void *check(void * arg)
253{
254
255 char pid[200][8];
qjbd37f0902023-08-04 04:08:52 -0700256 char ffd[200][4];
qjbdeea8452023-08-03 06:35:43 -0700257 char buf[64];
258 char check_time[4];
259 char timebuf[32];
qjbd37f0902023-08-04 04:08:52 -0700260 int num = 1;
261 int i=0;
qjbdeea8452023-08-03 06:35:43 -0700262 int j;
263 FILE *fp,*fp_1;
264 int ret;
265
266 RLOGD("check cpu/pid/interrupts/fd!!!\n");
qjbd37f0902023-08-04 04:08:52 -0700267 system("mkdir /media/check_file");
qjbdeea8452023-08-03 06:35:43 -0700268 system("touch /media/check_time");
269 fp_1 = popen("cat /media/check_time","r");
270 if(fgets(check_time, 4, fp_1) != NULL)
271 {
272 num = atoi(check_time);
273 }
274 pclose(fp_1);
275 while(1)
276 {
277 i = 0;
278 system("date >>/media/check_file/cpu_moniter.txt");
279 ret = system("top -b |head -n 25 >>/media/check_file/cpu_moniter.txt");
280 RLOGD("cpu ret %d", ret);
281 system("date >>/media/check_file/inter_moniter.txt");
qjbd37f0902023-08-04 04:08:52 -0700282 ret = system("cat /proc/interrupts |grep -v \": 0 0\" >>/media/check_file/inter_moniter.txt");
qjbdeea8452023-08-03 06:35:43 -0700283 RLOGD("interrupts ret %d", ret);
284 system("date >>/media/check_file/pid_moniter.txt");
285 ret = system("ps -eo \"%p %a\" | grep -v \"\\[\" >>/media/check_file/pid_moniter.txt");
286 RLOGD("pid ret %d", ret);
287 system("date >>/media/check_file/fd_moniter.txt");
288
289 fp = popen("ps -eo \"%p %a\" | grep -v \"\\[\"|awk '{print $1}'","r");
290 while(fgets(pid[i], 8, fp) != NULL)
291 {
292 delete_enter(pid[i]);
293 i++;
294 }
295 pclose(fp);
296
297 for(j=1;j<i;j++)
298 {
299 sprintf(buf, "ls /proc/%s/fd | wc -l", pid[j]);
300 fp = popen(buf, "r");
301 fgets(ffd[j], 4, fp);
302 sprintf(buf,"echo \"pid: %s, fd_num: %s\" >>/media/check_file/fd_moniter.txt",pid[j], ffd[j]);
303 system(buf);
304 pclose(fp);
305 }
qjbd37f0902023-08-04 04:08:52 -0700306
307 if(num > 60)
308 {
309 system("cp /media/check_file/cpu_moniter.txt /media/check_file/cpu_moniter_1.txt");
310 system("cp /media/check_file/inter_moniter.txt check_file/inter_moniter_1.txt");
311 system("cp /media/check_file/pid_moniter.txt /media/check_file/pid_moniter_1.txt");
312 system("cp /media/check_file/fd_moniter.txt /media/check_file/fd_moniter_1.txt");
313 system("rm -rf /media/check_file/cpu_moniter.txt");
314 system("rm -rf /media/check_file/inter_moniter.txt");
315 system("rm -rf /media/check_file/pid_moniter.txt");
316 system("rm -rf /media/check_file/fd_moniter.txt");
317 num = 0;
318 }
qjbdeea8452023-08-03 06:35:43 -0700319 num++;
320 sprintf(timebuf, "echo \"%d\" >/media/check_time", num);
321 ret = system(timebuf);
qjbdeea8452023-08-03 06:35:43 -0700322 sleep(300);
qjbdeea8452023-08-03 06:35:43 -0700323 }
324
qjbdeea8452023-08-03 06:35:43 -0700325}
326
llb52a49f2022-09-05 00:23:18 -0700327void start_timer_request(void)
328{
qjbdeea8452023-08-03 06:35:43 -0700329 pthread_t thid,thid_1;
llb52a49f2022-09-05 00:23:18 -0700330 pthread_attr_t a;
331 pthread_attr_init(&a);
332 pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
qjbdeea8452023-08-03 06:35:43 -0700333
llb52a49f2022-09-05 00:23:18 -0700334 int ret = pthread_create(&thid, &a, timer_request_imei, NULL);
335 if(ret != 0){
336 RLOGD("pthread_create error!!!");
337 return;
338 }
qjbdeea8452023-08-03 06:35:43 -0700339 sleep(20);
340 ret = pthread_create(&thid_1, NULL, check, NULL);
341 if(ret != 0){
342 RLOGD("pthread_create error!!!");
343 return;
344 }
llb52a49f2022-09-05 00:23:18 -0700345 return;
346}
347