blob: 2e0c5e2480b97593ad994d710136f9aff45e976f [file] [log] [blame]
lle1d5d7c2022-01-18 12:34:30 +00001/*=============================================================================
2# FileName: lynq_sim.cpp
3# Desc: about SIM API
4# Author: mobiletek
5# Version: V1.0
6# LastChange: 2021-12-29
7# History:
8=============================================================================*/
9#include <stdio.h>
10#include <sys/types.h>
11#include <sys/socket.h>
12#include <arpa/inet.h>
13#include <string.h>
14#include <unistd.h>
15#include <binder/Parcel.h>
16#include <log/log.h>
17#include <cutils/jstring.h>
18#include <pthread.h>
you.chen24d54af2024-01-02 12:26:57 +080019#include <vendor-ril/telephony/ril.h>
20#include <sys/socket.h>
21#include <netinet/in.h>
lle1d5d7c2022-01-18 12:34:30 +000022#include <arpa/inet.h>
jb.qi6b23ed42022-09-22 00:30:55 -070023#include <errno.h> /*add for get recvfrom errorid on 20220921*/
ll88f00782022-10-04 10:16:28 +080024#include <sys/stat.h>
25#include <fcntl.h>
you.chen24d54af2024-01-02 12:26:57 +080026#include "lynq_sim.h"
lhee0d3b32024-04-25 03:54:48 -070027#include "liblog/lynq_deflog.h"
28#include "lynq_sim_urc.h"
29
30
lle1d5d7c2022-01-18 12:34:30 +000031#define MAX_BUF 20
32#define MAX_NUM 80
lhee0d3b32024-04-25 03:54:48 -070033
lle1d5d7c2022-01-18 12:34:30 +000034#define MAX_LEN 1024*8
lhee0d3b32024-04-25 03:54:48 -070035
36#define USER_LOG_TAG "LYNQ_SIM"
lle1d5d7c2022-01-18 12:34:30 +000037#define FLAG_TESS 0
38using ::android::Parcel;
39#define DEST_PORT 8088
40#define DSET_IP_ADDRESS "127.0.0.1"
41
42typedef struct{
43 int uToken;
44 int request;
45 int paramLen;
46 char param[MAX_LEN];
47}lynq_client_t;
48
lle1d5d7c2022-01-18 12:34:30 +000049/* socket文件描述符 */
50int len_addr_serv;
51struct sockaddr_in addr_serv;
52static int sock_fd = 0;
you.chen24d54af2024-01-02 12:26:57 +080053int Global_uToken = 0;
xy.hedecca822024-09-03 13:26:29 +080054static int default_cnt = 20;
llab0f3e12022-07-20 11:59:51 +000055static pthread_mutex_t g_lynq_sim_sendto_mutex;
llba425bd2022-03-17 02:23:00 +000056/**
57 * @brief mark call initialization state
58 * 0: deinit state
59 * 1: init state
60 */
61int g_lynq_sim_init_flag = 0;
62
63/**
64 * @brief lynq_req_sim_io need to send request
65 */
66char data_buf[32] = {0};
67char pin2_buf[32] = {0};
68char aidPtr_buf[32] = {0};
lle1d5d7c2022-01-18 12:34:30 +000069
you.chen24d54af2024-01-02 12:26:57 +080070/**
71 * @brief lynq_shutdown need
72 */
llb15599d2022-04-01 07:50:08 +000073char options_buf[32] = {0};
74char time_buf[32] = {0};
75char message_buf[32] = {0};
76
you.chen24d54af2024-01-02 12:26:57 +080077typedef struct{
78 int resp_type;
79 int token;
80 int request;
81 int slot_id;
82 int error;
83}lynq_resp_t;
84
lhee0d3b32024-04-25 03:54:48 -070085static pthread_mutex_t s_sim_allow_data_mutex = PTHREAD_MUTEX_INITIALIZER;
86static pthread_cond_t s_sim_allow_data_cond = PTHREAD_COND_INITIALIZER;
87static int s_sim_allow_data_value = -1;
88#define SIM_ALLOW_DATA_TIMEOUT 60*1000
you.chen24d54af2024-01-02 12:26:57 +080089
lhee0d3b32024-04-25 03:54:48 -070090int waitAllowDataSignal(int mtime)
91{
92 int ret = 0;
93 int sec = 0;
94 int usec = 0;
95 struct timeval now;
96 struct timespec timeout;
97 gettimeofday(&now,NULL);
98 sec = mtime/1000;
99 usec = mtime%1000;
100 timeout.tv_sec = now.tv_sec+sec;
101 timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
102 pthread_mutex_lock(&s_sim_allow_data_mutex);
103 ret = pthread_cond_timedwait(&s_sim_allow_data_cond,&s_sim_allow_data_mutex,&timeout);
104 pthread_mutex_unlock(&s_sim_allow_data_mutex);
105 return ret;
106}
107
108void sendAllowDataSignal(int value)
109{
110 pthread_mutex_lock(&s_sim_allow_data_mutex);
111 s_sim_allow_data_value = value;
112 pthread_cond_signal(&s_sim_allow_data_cond);
113 pthread_mutex_unlock(&s_sim_allow_data_mutex);
114 return;
115}
you.chen24d54af2024-01-02 12:26:57 +0800116
117/**@brief print solicied response msg's head information
118* @param head [IN]: head information
119* @return none
120*/
121void PrintHeader(lynq_resp_t& head)
122{
123 RLOGD("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",head.resp_type,head.token,head.request,head.slot_id,head.error);
124}
125
126int GetHeader(Parcel* &p, lynq_resp_t& head, int request_id)
127{
128 RLOGD("get header");
129 if(p->dataAvail() > 0)
130 {
131 p->readInt32(&(head.resp_type));
132 p->readInt32(&(head.token));
133 p->readInt32(&(head.request));
134 RLOGD("%s %d", __FUNCTION__, head.request);
135 p->readInt32(&(head.slot_id));
136 p->readInt32(&(head.error));
137 PrintHeader(head);
138 return head.error;
139 }
140 else
141 {
142 return RESULT_ERROR;
143 }
144}
xy.hedecca822024-09-03 13:26:29 +0800145int get_utoken()
146{
147 return (Global_uToken++)%10000;/*0-10000*/
148}
149int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, int sim_count, const char* format,...)
you.chen24d54af2024-01-02 12:26:57 +0800150{
151 lynq_client_t client;
152 int ret;
153 int send_num;
154 int recv_num;
155 char res_data[MAX_LEN] = {0};
xy.hedecca822024-09-03 13:26:29 +0800156 client.uToken = get_utoken();
you.chen24d54af2024-01-02 12:26:57 +0800157 if(request_id == RIL_REQUEST_SCREEN_STATE)
158 {
159 client.request = LYNQ_REQUEST_CHANGE_SCREEN_STATE;
160 }
161 else if(request_id == RIL_REQUEST_RADIO_POWER)
162 {
163 client.request = LYNQ_REQUEST_CHANGE_RADIO;
164 }
165 else
166 {
167 client.request = request_id;
168 }
169 client.paramLen = argc;
170 bzero(client.param,MAX_LEN);
171 if(argc!=0)
172 {
173 va_list args;
174 va_start(args, format);
175 vsnprintf(client.param, MAX_LEN, format, args);
176 va_end(args);
177 }
178 RLOGD("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
179 pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
180 send_num = sendto(sock_fd,&client,sizeof(client),0,(struct sockaddr *)&addr_serv,len_addr_serv);
181 if(send_num <= 0)
182 {
183 RLOGD("send request fail, send num is %d", send_num);
184 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
185 return LYNQ_E_SEND_REQUEST_FAIL;
186 }
187 lynq_resp_t head;
188 head.request = -1;
xy.hedecca822024-09-03 13:26:29 +0800189 for(int i = 0; i < cnt; i++)
you.chen24d54af2024-01-02 12:26:57 +0800190 {
xy.hedecca822024-09-03 13:26:29 +0800191 head.resp_type = -1;
192 head.token = -1;
193 head.request = -1;
194 head.slot_id = -1;
195 head.error = -1;
you.chen24d54af2024-01-02 12:26:57 +0800196 recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN, 0, (struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
197 if(recv_num <= 0)
198 {
xy.he69307882024-04-26 18:14:53 +0800199 #ifdef MODE_DSDS
200 if (errno == EAGAIN || errno == EWOULDBLOCK)
201 {
202 RLOGD("recv from timeout");
203 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
204 return LYNQ_E_TIME_OUT;
205 }
206 else
207 {
208 RLOGD("recv request fail, recv num is %d", recv_num);
209 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
210 return recv_num;
211 }
212 #else
you.chen24d54af2024-01-02 12:26:57 +0800213 RLOGD("recv request fail, recv num is %d", recv_num);
214 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
215 return recv_num;
xy.he69307882024-04-26 18:14:53 +0800216 #endif
you.chen24d54af2024-01-02 12:26:57 +0800217 }
218 p->setData((uint8_t *)res_data,sizeof(char)*recv_num);
219 p->setDataPosition(0);
220 ret=GetHeader(p,head,request_id);
221 if(ret!=0)
222 {
223 RLOGD("%s %d get head error %d",__FUNCTION__,client.uToken,ret);
xy.hedecca822024-09-03 13:26:29 +0800224
225 if (head.token != client.uToken)
226 {
227 RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
228 ret = RESULT_ERROR;
229 continue;
230 }
231
you.chen24d54af2024-01-02 12:26:57 +0800232 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
233 return ret;
234 }
xy.hedecca822024-09-03 13:26:29 +0800235 if (head.token != client.uToken)
236 {
237 RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
238 ret = RESULT_ERROR;
239 continue;
240 }
you.chen24d54af2024-01-02 12:26:57 +0800241 if(request_id == head.request)
242 {
xy.hedecca822024-09-03 13:26:29 +0800243 sim_count--;
244 if(sim_count <= 0)
245 break;
246 else
247 continue;
you.chen24d54af2024-01-02 12:26:57 +0800248 }
249 }
250 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
251 return ret;
252}
253
lle1d5d7c2022-01-18 12:34:30 +0000254int lynq_sim_init(int utoken){
lhee0d3b32024-04-25 03:54:48 -0700255 LYLOGSET(LOG_DEBUG);
256 LYLOGEINIT(USER_LOG_TAG);
q.huangf6a9ddc2023-12-08 20:23:56 +0800257 RLOGE("%s start, parameter is %d", __func__,utoken);
258
llba425bd2022-03-17 02:23:00 +0000259 if(g_lynq_sim_init_flag == 1)
260 {
261 RLOGD("lynq_sim_init failed");
262 return -1;
263 }
264 g_lynq_sim_init_flag = 1;
lle1d5d7c2022-01-18 12:34:30 +0000265 if(utoken < 0){
266 return -1;
267 }
lle1d5d7c2022-01-18 12:34:30 +0000268 Global_uToken = utoken;
269 sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
ll33334af2022-06-30 16:54:51 +0800270 if (-1 == sock_fd)
271 {
272 return sock_fd;
273 }
lh8d290112023-10-22 20:53:06 -0700274
275 struct sockaddr_in liblynq_data_socket;
276 bzero(&liblynq_data_socket, sizeof(liblynq_data_socket));
277 //set this lib socket config
278 liblynq_data_socket.sin_family = AF_INET;
279 liblynq_data_socket.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
280 int ret = bind(sock_fd, (struct sockaddr *)&liblynq_data_socket, sizeof(liblynq_data_socket));
281 if (-1 == ret)
282 {
283 RLOGE("liblynq_data_socket bind fail,errno:%d",errno);
284 return -1;
285 }
286
ll33334af2022-06-30 16:54:51 +0800287 struct timeval timeOut;
llab0f3e12022-07-20 11:59:51 +0000288 timeOut.tv_sec = 60;
ll33334af2022-06-30 16:54:51 +0800289 timeOut.tv_usec = 0;
290 if (setsockopt(sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
291 {
lhee0d3b32024-04-25 03:54:48 -0700292 RLOGD("time out setting failed\n");
ll33334af2022-06-30 16:54:51 +0800293 return -1;
294 }
q.huangf6a9ddc2023-12-08 20:23:56 +0800295
lhee0d3b32024-04-25 03:54:48 -0700296 memset(&addr_serv, 0, sizeof(addr_serv));
297 addr_serv.sin_family = AF_INET;
298 addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
299 addr_serv.sin_port = htons(DEST_PORT);
300 len_addr_serv = sizeof(addr_serv);
301
302#ifdef MODE_DSDS
303 ret = lynq_start_all_urc_socket_thread();
304 if(ret != RESULT_OK)
305 {
306 LYERRLOG("init socket urc fail!!!");
307 return LYNQ_E_INNER_ERROR;
308 }
309#endif
q.huangf6a9ddc2023-12-08 20:23:56 +0800310 RLOGE("%s end suc", __func__);
lle1d5d7c2022-01-18 12:34:30 +0000311 return 0;
312}
313
314int lynq_sim_deinit(void){
q.huangf6a9ddc2023-12-08 20:23:56 +0800315
316 RLOGE("%s start", __func__);
317
llba425bd2022-03-17 02:23:00 +0000318 if(g_lynq_sim_init_flag == 0)
319 {
320 RLOGD("lynq_sim_deinit failed");
321 return -1;
322 }
lhee0d3b32024-04-25 03:54:48 -0700323
xy.he69307882024-04-26 18:14:53 +0800324 #ifdef MODE_DSDS
lhee0d3b32024-04-25 03:54:48 -0700325 lynq_close_all_urc_socket_thread();
326#endif
llba425bd2022-03-17 02:23:00 +0000327 g_lynq_sim_init_flag = 0;
lle1d5d7c2022-01-18 12:34:30 +0000328 close(sock_fd);
q.huangf6a9ddc2023-12-08 20:23:56 +0800329
330 RLOGE("%s end suc", __func__);
lle1d5d7c2022-01-18 12:34:30 +0000331 return 0;
332}
333
334static char * lynqStrdupReadString(Parcel &p) {
335 size_t stringlen;
336 const char16_t *s16;
337
338 s16 = p.readString16Inplace(&stringlen);
339 return strndup16to8(s16, stringlen);
340}
341
llba425bd2022-03-17 02:23:00 +0000342/*If you need to use any API under lynq_sim, you mustfirst call the lynq_sim_init() function to initialize these functions.*/
lle1d5d7c2022-01-18 12:34:30 +0000343int lynq_get_sim_status(int *card_status)
344{
ll27dbe752022-08-10 00:33:52 -0700345 if(g_lynq_sim_init_flag == 0)
346 {
347 return -1;
348 }
you.chen24d54af2024-01-02 12:26:57 +0800349 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800350 int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,default_cnt,1,"");
you.chen24d54af2024-01-02 12:26:57 +0800351 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000352 {
you.chen24d54af2024-01-02 12:26:57 +0800353 RLOGD("function %s execute error", __FUNCTION__);
354 return res;
lle1d5d7c2022-01-18 12:34:30 +0000355 }
you.chen24d54af2024-01-02 12:26:57 +0800356 p.readInt32(card_status);
357 return res;
lle1d5d7c2022-01-18 12:34:30 +0000358}
llba425bd2022-03-17 02:23:00 +0000359
lle1d5d7c2022-01-18 12:34:30 +0000360int lynq_get_imsi(char buf[])
you.chen24d54af2024-01-02 12:26:57 +0800361{
ll27dbe752022-08-10 00:33:52 -0700362 if(g_lynq_sim_init_flag == 0)
363 {
364 return -1;
365 }
lle1d5d7c2022-01-18 12:34:30 +0000366 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800367 int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,default_cnt,1,"");
you.chen24d54af2024-01-02 12:26:57 +0800368 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000369 {
you.chen24d54af2024-01-02 12:26:57 +0800370 RLOGD("function %s execute error", __FUNCTION__);
371 return res;
lle1d5d7c2022-01-18 12:34:30 +0000372 }
you.chen24d54af2024-01-02 12:26:57 +0800373 char * test = lynqStrdupReadString(p);
374 memcpy(buf, test, strlen(test));
375 free(test);
376 return res;
lle1d5d7c2022-01-18 12:34:30 +0000377}
378
379
380/*add by lei*/
381
382int lynq_get_iccid(char buf[]){
ll27dbe752022-08-10 00:33:52 -0700383 if(g_lynq_sim_init_flag == 0)
384 {
385 return -1;
386 }
lle1d5d7c2022-01-18 12:34:30 +0000387 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800388 int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,default_cnt,1,"");
you.chen24d54af2024-01-02 12:26:57 +0800389 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000390 {
you.chen24d54af2024-01-02 12:26:57 +0800391 RLOGD("function %s execute error", __FUNCTION__);
392 return res;
lle1d5d7c2022-01-18 12:34:30 +0000393 }
you.chen24d54af2024-01-02 12:26:57 +0800394 char * test = lynqStrdupReadString(p);
395 memcpy(buf, test, strlen(test));
396 free(test);
397 return res;
lle1d5d7c2022-01-18 12:34:30 +0000398}
399
400int lynq_enable_pin(char *pin){
ll27dbe752022-08-10 00:33:52 -0700401 if(g_lynq_sim_init_flag == 0)
402 {
403 return -1;
404 }
lle1d5d7c2022-01-18 12:34:30 +0000405 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800406 int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "1");
you.chen24d54af2024-01-02 12:26:57 +0800407 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000408 {
you.chen24d54af2024-01-02 12:26:57 +0800409 RLOGD("function %s execute error", __FUNCTION__);
410 return res;
lle1d5d7c2022-01-18 12:34:30 +0000411 }
you.chen24d54af2024-01-02 12:26:57 +0800412 return res;
lle1d5d7c2022-01-18 12:34:30 +0000413}
414
lle6cc3932022-08-18 06:06:39 -0700415int lynq_sim_power(int mode)
416{
417 if(g_lynq_sim_init_flag == 0)
418 {
419 return -1;
420 }
lle6cc3932022-08-18 06:06:39 -0700421 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800422 int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s%d", "AT+ESIMPOWER=", mode);
you.chen24d54af2024-01-02 12:26:57 +0800423 if(res != 0)
424 {
425 RLOGD("function %s execute error", __FUNCTION__);
426 return res;
lle6cc3932022-08-18 06:06:39 -0700427 }
you.chen24d54af2024-01-02 12:26:57 +0800428 return res;
lle6cc3932022-08-18 06:06:39 -0700429}
430
lle1d5d7c2022-01-18 12:34:30 +0000431int lynq_disable_pin(char *pin){
ll27dbe752022-08-10 00:33:52 -0700432 if(g_lynq_sim_init_flag == 0)
433 {
434 return -1;
435 }
lle1d5d7c2022-01-18 12:34:30 +0000436 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800437 int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "0");
you.chen24d54af2024-01-02 12:26:57 +0800438 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000439 {
you.chen24d54af2024-01-02 12:26:57 +0800440 RLOGD("function %s execute error", __FUNCTION__);
441 return res;
lle1d5d7c2022-01-18 12:34:30 +0000442 }
you.chen24d54af2024-01-02 12:26:57 +0800443 return res;
lle1d5d7c2022-01-18 12:34:30 +0000444}
445
446int lynq_query_pin_lock(char *pin,int buf[]){
ll27dbe752022-08-10 00:33:52 -0700447 if(g_lynq_sim_init_flag == 0)
448 {
449 return -1;
450 }
lle1d5d7c2022-01-18 12:34:30 +0000451 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800452 int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,default_cnt,1,"%s %s %s\n", "SC", pin, "11");
you.chen24d54af2024-01-02 12:26:57 +0800453 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000454 {
you.chen24d54af2024-01-02 12:26:57 +0800455 RLOGD("function %s execute error", __FUNCTION__);
456 return res;
lle1d5d7c2022-01-18 12:34:30 +0000457 }
you.chen24d54af2024-01-02 12:26:57 +0800458 int num = -1;
459 p.readInt32(&num);
460 if(num > 0)
461 {
462 int *test = (int *)calloc(num, sizeof(int));
463 for(int i =0; i <num; i++){
464 p.readInt32(&test[i]);
465 buf[i] = test[i];
466 }
467 free(test);
468 }
469 return res;
lle1d5d7c2022-01-18 12:34:30 +0000470}
471
472int lynq_verify_pin(char *pin){
ll27dbe752022-08-10 00:33:52 -0700473 if(g_lynq_sim_init_flag == 0)
474 {
475 return -1;
476 }
lle1d5d7c2022-01-18 12:34:30 +0000477 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800478 int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,default_cnt,1,"%s\n", pin);
you.chen24d54af2024-01-02 12:26:57 +0800479 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000480 {
you.chen24d54af2024-01-02 12:26:57 +0800481 RLOGD("function %s execute error", __FUNCTION__);
482 return res;
lle1d5d7c2022-01-18 12:34:30 +0000483 }
you.chen24d54af2024-01-02 12:26:57 +0800484 return res;
lle1d5d7c2022-01-18 12:34:30 +0000485}
486
487int lynq_change_pin(char *old_pin, char *new_pin){
ll27dbe752022-08-10 00:33:52 -0700488 if(g_lynq_sim_init_flag == 0)
489 {
490 return -1;
491 }
you.chen24d54af2024-01-02 12:26:57 +0800492 int res = -1;
lle1d5d7c2022-01-18 12:34:30 +0000493 if(old_pin == NULL || new_pin == NULL)
you.chen24d54af2024-01-02 12:26:57 +0800494 return res;
rjw5d2a50e2022-02-28 15:01:49 +0800495 if(!strlen(new_pin))
you.chen24d54af2024-01-02 12:26:57 +0800496 return res;
ll3fe03462022-03-01 09:18:53 +0000497 if(!strlen(old_pin))
you.chen24d54af2024-01-02 12:26:57 +0800498 return res;
lle1d5d7c2022-01-18 12:34:30 +0000499 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800500 res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,default_cnt,1,"%s %s\n", old_pin, new_pin);
you.chen24d54af2024-01-02 12:26:57 +0800501 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000502 {
you.chen24d54af2024-01-02 12:26:57 +0800503 RLOGD("function %s execute error", __FUNCTION__);
504 return res;
lle1d5d7c2022-01-18 12:34:30 +0000505 }
you.chen24d54af2024-01-02 12:26:57 +0800506 return res;
lle1d5d7c2022-01-18 12:34:30 +0000507}
508
509int lynq_unlock_pin(char *puk, char *pin){
ll27dbe752022-08-10 00:33:52 -0700510 if(g_lynq_sim_init_flag == 0)
511 {
512 return -1;
513 }
lle1d5d7c2022-01-18 12:34:30 +0000514 if(puk == NULL || pin == NULL)
you.chen24d54af2024-01-02 12:26:57 +0800515 return -1;
lle1d5d7c2022-01-18 12:34:30 +0000516 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800517 int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,default_cnt,1,"%s %s\n", puk, pin);
you.chen24d54af2024-01-02 12:26:57 +0800518 if(res != 0)
lle1d5d7c2022-01-18 12:34:30 +0000519 {
you.chen24d54af2024-01-02 12:26:57 +0800520 RLOGD("function %s execute error", __FUNCTION__);
521 return res;
lle1d5d7c2022-01-18 12:34:30 +0000522 }
you.chen24d54af2024-01-02 12:26:57 +0800523 return res;
lle1d5d7c2022-01-18 12:34:30 +0000524}
525
526static void delete_char(char str[],char target){
527 if(str == NULL){
528 return;
529 }
530 int i,j;
531 for(i=j=0;str[i]!='\0';i++){
532 if(str[i]!=target){
533 str[j++]=str[i];
534 }
535 }
536 str[j]='\0';
537}
538
539static int parse_param(char *cmd, char **argv, char buf[]){
540 if(cmd == NULL || argv == NULL || buf == NULL){
ll1651f342022-06-06 10:13:48 +0800541 return -1;
lle1d5d7c2022-01-18 12:34:30 +0000542 }
543 if(strstr(cmd,"ERROR")){
lle1d5d7c2022-01-18 12:34:30 +0000544 return 3;
545 }
546 else{
547 int argc = 0;
548 char *token;
549 token = strtok(cmd, ",");
lle4860662022-09-15 19:07:10 +0800550 if(token == NULL)
551 {
552 return 9001;
553 }
llbe2bdbd2022-06-14 02:40:33 +0000554 if(strstr(token, "CNUM"))
555 {
lle1d5d7c2022-01-18 12:34:30 +0000556 char *string;
557 while (token != NULL)
llbe2bdbd2022-06-14 02:40:33 +0000558 {
559 if(argc == 5)
560 {
561 if(NULL == argv[1])
562 {
563 return 9002;
564 }
565 int lengh = strlen(argv[1]);
566 memcpy(buf, argv[1], lengh);
567 delete_char(buf, '"');
568 RLOGD("too many phone number return\n");
569 return 0;
570 }
lle1d5d7c2022-01-18 12:34:30 +0000571 string = token;
572 argv[argc++] = string;
573 token = strtok(NULL, ",");
574 }
llbe2bdbd2022-06-14 02:40:33 +0000575 if(NULL == argv[1])
576 {
577 return 9001;
578 }
lle1d5d7c2022-01-18 12:34:30 +0000579 int lengh = strlen(argv[1]);
580 memcpy(buf, argv[1], lengh);
lle1d5d7c2022-01-18 12:34:30 +0000581 delete_char(buf, '"');
ll1651f342022-06-06 10:13:48 +0800582 return 0;
lle1d5d7c2022-01-18 12:34:30 +0000583 }
llbe2bdbd2022-06-14 02:40:33 +0000584 return 9001;
lle1d5d7c2022-01-18 12:34:30 +0000585 }
lle1d5d7c2022-01-18 12:34:30 +0000586}
587
588int lynq_query_phone_number(char buf[]){
ll27dbe752022-08-10 00:33:52 -0700589 if(g_lynq_sim_init_flag == 0)
590 {
591 return -1;
592 }
lle1d5d7c2022-01-18 12:34:30 +0000593 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800594 int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s\n", "AT+CNUM");
you.chen24d54af2024-01-02 12:26:57 +0800595 if(res != 0)
596 {
597 RLOGD("function %s execute error", __FUNCTION__);
598 return res;
lle1d5d7c2022-01-18 12:34:30 +0000599 }
you.chen24d54af2024-01-02 12:26:57 +0800600 int num = -1;
601 p.readInt32(&num);
602 char test[128] = {0};
603 char *argv[5] = {0};
604 if(num != -1)
605 {
606 p.read(test, num);
607 num = parse_param(test, argv, buf);
608 return num;
609 }
610 return res;
lle1d5d7c2022-01-18 12:34:30 +0000611}
rjw5d2a50e2022-02-28 15:01:49 +0800612
q.huangbe2d6932022-10-19 16:39:29 +0800613int lynq_get_imei(char buf[])
614{
615 if(g_lynq_sim_init_flag == 0)
616 {
617 return -1;
618 }
q.huangbe2d6932022-10-19 16:39:29 +0800619 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800620 int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
you.chen24d54af2024-01-02 12:26:57 +0800621 if(res != 0)
q.huangbe2d6932022-10-19 16:39:29 +0800622 {
you.chen24d54af2024-01-02 12:26:57 +0800623 RLOGD("function %s execute error", __FUNCTION__);
624 return res;
q.huangbe2d6932022-10-19 16:39:29 +0800625 }
you.chen24d54af2024-01-02 12:26:57 +0800626 int num = 0;
627 p.readInt32(&num);
628 char * test = lynqStrdupReadString(p);
629 memcpy(buf, test, strlen(test));
630 free(test);
631 return res;
q.huangbe2d6932022-10-19 16:39:29 +0800632}
633
q.huang2a282792022-10-12 11:39:36 +0800634int lynq_get_imei_and_sv(char imei[],char sv[])
q.huangd3b254d2022-10-19 16:39:29 +0800635{
636 if(g_lynq_sim_init_flag == 0)
637 {
you.chen24d54af2024-01-02 12:26:57 +0800638 return -1;
q.huangd3b254d2022-10-19 16:39:29 +0800639 }
640 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800641 int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
you.chen24d54af2024-01-02 12:26:57 +0800642 if(res != 0)
q.huangd3b254d2022-10-19 16:39:29 +0800643 {
you.chen24d54af2024-01-02 12:26:57 +0800644 RLOGD("function %s execute error", __FUNCTION__);
645 return res;
646 }
647 int num = 0;
648 p.readInt32(&num);
649 if(num<2)
650 {
651 RLOGD("%s num %d error, should greater than 1",__func__,num);
652 return -1;
653 }
654 char *resp[2]={NULL,NULL};
655 int i;
656 for(i=0;i<2;i++)
657 {
658 resp[i]= lynqStrdupReadString(p);
659 if(resp[i]==NULL)
660 {
661 break;
q.huangd3b254d2022-10-19 16:39:29 +0800662 }
you.chen24d54af2024-01-02 12:26:57 +0800663 }
664 if(i==2){
665 memcpy(imei, resp[0], strlen(resp[0])+1);
666 memcpy(sv, resp[1], strlen(resp[1])+1);
667 }
668 else
669 {
670 RLOGD("%s resp[%d] is null",__func__,i);
671 }
672 for(i=0;i<2;i++)
673 {
674 if(resp[i]!=NULL)
675 {
676 free(resp[i]);
677 }
678 }
679 return i==2? 0:-1;
680
q.huangd3b254d2022-10-19 16:39:29 +0800681}
682
rjw5d2a50e2022-02-28 15:01:49 +0800683static int judge(int slot){
684 switch(slot){
685 case 0:
686 return -1;
687 case 1:
688 return -1;
689 }
690 return 0;
691}
692
lhee0d3b32024-04-25 03:54:48 -0700693#ifdef MODE_DSDS
694int lynq_set_default_sim(const int slot)
695{
696 if(g_lynq_sim_init_flag == 0)
697 {
698 RLOGE("can`t init SIM module");
699 return -1;
700 }
701 if(!judge(slot))
702 {
703 RLOGD("is not 0 or 1");
704 return -1;
705 }
706 int send_num = 0;
707 lynq_client_t client_t;
708 client_t.request = LYNQ_REQUEST_SET_DEFAULT_SIM_ALL;
709 client_t.paramLen = 1;
710 client_t.uToken = Global_uToken;
711 sprintf(client_t.param, "%d\n", slot);
712 pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
713 send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
714 if(send_num < 0)
715 {
716 RLOGD("function %s sendto error:", __FUNCTION__);
717 return send_num;
718 }
719
720 if(waitAllowDataSignal(SIM_ALLOW_DATA_TIMEOUT) == ETIMEDOUT)
721 {
722 LYERRLOG("timeout:wait allow data fail!!!");
723 return LYNQ_E_TIME_OUT;
724 }
725 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
726 LYERRLOG("sim allow data value %d",s_sim_allow_data_value);
727 return s_sim_allow_data_value;
728}
xy.he69307882024-04-26 18:14:53 +0800729
730
731int lynq_set_default_sim_except_data(const int slot)
732{
733 RLOGD("Enter %s",__FUNCTION__);
734
735 if(g_lynq_sim_init_flag == 0)
736 {
737 return -1;
738 }
739
740 RLOGD("Slot is %d",slot);
741
742 if(!judge(slot))
743 {
744 RLOGD("is not 0 or 1");
745 return -1;
746 }
747
748 int send_num = 0;
749 Parcel p;
750 RLOGD(
751"send LYNQ_REQUEST_SET_DEFAULT_SIM_ALL_EXCEPT_DATA");
xy.hedecca822024-09-03 13:26:29 +0800752 int res = lynq_send_common_request(&p,LYNQ_REQUEST_SET_DEFAULT_SIM_ALL_EXCEPT_DATA,1,default_cnt,1,"%d",slot);
xy.he69307882024-04-26 18:14:53 +0800753 if(res != 0)
754 {
755 RLOGD("function %s execute error", __FUNCTION__);
756 return res;
757 }
758
759 return 0;
760}
761
762
763
764int lynq_get_default_sim_all(int *bit_slot)
765{
766 RLOGD("Enter %s",__FUNCTION__);
767
768 int sim_except_data = 0;
769 int sim_data = 0;
770
771 if(g_lynq_sim_init_flag == 0)
772 {
773 return -1;
774 }
775
776 int send_num = 0;
777 Parcel p;
778
779 RLOGD(
780"send LYNQ_REQUEST_GET_DEFAULT_SIM_ALL");
xy.hedecca822024-09-03 13:26:29 +0800781 int res = lynq_send_common_request(&p,LYNQ_REQUEST_GET_DEFAULT_SIM_ALL,0,default_cnt,1,"");
xy.he69307882024-04-26 18:14:53 +0800782 if(res != 0)
783 {
784 RLOGD("function %s execute error", __FUNCTION__);
785 return res;
786 }
787
788 p.readInt32(bit_slot);
789 return 0;
790}
791
lhee0d3b32024-04-25 03:54:48 -0700792#endif
793
rjw5d2a50e2022-02-28 15:01:49 +0800794int lynq_switch_card(int slot){
ll27dbe752022-08-10 00:33:52 -0700795 if(g_lynq_sim_init_flag == 0)
796 {
797 return -1;
798 }
rjw5d2a50e2022-02-28 15:01:49 +0800799 if(!judge(slot))
you.chen24d54af2024-01-02 12:26:57 +0800800 return -1;
rjw5d2a50e2022-02-28 15:01:49 +0800801 int send_num = 0;
you.chen24d54af2024-01-02 12:26:57 +0800802 lynq_client_t client_t;
rjw5d2a50e2022-02-28 15:01:49 +0800803 client_t.request = LYNQ_REQUEST_SET_DEFAULT_SIM_ALL;
804 client_t.paramLen = 1;
xy.hedecca822024-09-03 13:26:29 +0800805 client_t.uToken = get_utoken();
rjw5d2a50e2022-02-28 15:01:49 +0800806 sprintf(client_t.param, "%d\n", slot);
llab0f3e12022-07-20 11:59:51 +0000807 pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
you.chen24d54af2024-01-02 12:26:57 +0800808 send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv); //because ril of id = -1
rjw5d2a50e2022-02-28 15:01:49 +0800809 if(send_num < 0)
810 {
ll88f00782022-10-04 10:16:28 +0800811 RLOGD("function %s sendto error:", __FUNCTION__);
rjw5d2a50e2022-02-28 15:01:49 +0800812 return send_num;
813 }
llab0f3e12022-07-20 11:59:51 +0000814 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
rjw5d2a50e2022-02-28 15:01:49 +0800815 return 0;
816}
jb.qi96449342022-09-19 22:14:41 -0700817/**@breif change screen state
818*param num type: [IN] screen_state,0:close,1:open
819*param ret type: [OUT] result,0:success,other:fail
820*return int
821*/
ll887a0172022-03-09 03:13:31 +0000822int lynq_screen(int num){
ll27dbe752022-08-10 00:33:52 -0700823 if(g_lynq_sim_init_flag == 0)
824 {
825 return -1;
826 }
ll887a0172022-03-09 03:13:31 +0000827 if(!judge(num))
you.chen24d54af2024-01-02 12:26:57 +0800828 return -1;
829 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800830 int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,default_cnt,2,"%d\n",num);
you.chen24d54af2024-01-02 12:26:57 +0800831 if(res != 0)
ll887a0172022-03-09 03:13:31 +0000832 {
you.chen24d54af2024-01-02 12:26:57 +0800833 RLOGD("function %s execute error", __FUNCTION__);
834 return res;
ll887a0172022-03-09 03:13:31 +0000835 }
you.chen24d54af2024-01-02 12:26:57 +0800836 return res;
ll887a0172022-03-09 03:13:31 +0000837}
llba425bd2022-03-17 02:23:00 +0000838
ll71a113b2022-10-21 18:07:25 +0800839/**@breif change screen state
840*param num type: [IN] screen_state,0:close,1:open
841*param ret type: [OUT] result,0:success,other:fail
842*return int
843*/
844int lynq_factory_radio_state(int num){
845 if(g_lynq_sim_init_flag == 0)
846 {
847 return -1;
848 }
ll71a113b2022-10-21 18:07:25 +0800849 if(!judge(num))
you.chen24d54af2024-01-02 12:26:57 +0800850 return -1;
851 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800852 int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,default_cnt,2,"%d\n",num);
you.chen24d54af2024-01-02 12:26:57 +0800853 if(res != 0)
ll71a113b2022-10-21 18:07:25 +0800854 {
you.chen24d54af2024-01-02 12:26:57 +0800855 RLOGD("function %s execute error", __FUNCTION__);
856 return res;
ll71a113b2022-10-21 18:07:25 +0800857 }
you.chen24d54af2024-01-02 12:26:57 +0800858 return res;
ll71a113b2022-10-21 18:07:25 +0800859}
860
llba425bd2022-03-17 02:23:00 +0000861/**
862 * @brief Check whether the input is valid for lynq_req_sim_io api
863 * @param list type: [IN] list[0]:one of the commands listed for TS 27.007 +CRSM.(command)
864 * type: [IN] list[1]:EF id(fileid)
865 * type: [IN] list[2]:offset(p1)
866 * type: [IN] list[3]:offset(p2)
867 * type: [IN] list[4]:response len,sometimes needn't care(p3)
868 * @param path type: [IN] "pathid" from TS 27.007 +CRSM command.
869 type: [IN] Path is in hex asciii format eg "7f205f70"
870 type: [IN] Path must always be provided.
871 * @param data type: [IN] May be NULL
872 * @param pin2 type: [IN] May be NULL
873 * @param aidPtr type: [IN] AID value, See ETSI 102.221 8.1 and 101.220 4, NULL if no value.
874 * @param sw type: [OUT]
875 * @param simResponse type: [OUT] response
876 * @return int
877 */
878static int judge_illegal(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse)
879{
llba425bd2022-03-17 02:23:00 +0000880 if(list == NULL)
881 {
882 return -1;
883 }
884 if(path == NULL)
885 {
886 return -1;
887 }
888 if(sw == NULL){
889 return -1;
890 }
891 if(simResponse == NULL){
892 return -1;
893 }
894 if(data == NULL)
895 {
896 memcpy(data_buf, "null", 4);
897 }
898 else
899 {
900 bzero(data_buf,32);
901 memcpy(data_buf, data, strlen(data));
902 }
903 if(pin2 == NULL)
904 {
905 memcpy(pin2_buf, "null", 4);
906 }
907 else
908 {
909 bzero(pin2_buf,32);
910 memcpy(pin2_buf, data, strlen(data));
911 }
912 if(aidPtr == NULL)
913 {
914 memcpy(aidPtr_buf, "null", 4);
915 }
916 else
917 {
918 bzero(aidPtr_buf,32);
919 memcpy(aidPtr_buf, data, strlen(data));
920 }
921 return 0;
922}
923
924int lynq_req_sim_io(int list[5], char *path, char *data, char *pin2, char *aidPtr, int sw[2], char *simResponse)
ll27dbe752022-08-10 00:33:52 -0700925{
926 if(g_lynq_sim_init_flag == 0)
927 {
928 return -1;
929 }
llba425bd2022-03-17 02:23:00 +0000930 if(judge_illegal(list, path, data, pin2, aidPtr, sw, simResponse))
931 {
you.chen24d54af2024-01-02 12:26:57 +0800932 return -1;
llba425bd2022-03-17 02:23:00 +0000933 }
934 Parcel p;
xy.hedecca822024-09-03 13:26:29 +0800935 int res = lynq_send_common_request(&p,RIL_REQUEST_SIM_IO,9,default_cnt,1,"%d %d %s %d %d %d %s %s %s\n", list[0], list[1], path, list[2], list[3], list[4], data_buf, pin2_buf, aidPtr_buf);
you.chen24d54af2024-01-02 12:26:57 +0800936 if(res != 0)
llb15599d2022-04-01 07:50:08 +0000937 {
you.chen24d54af2024-01-02 12:26:57 +0800938 RLOGD("function %s execute error", __FUNCTION__);
939 return res;
llba425bd2022-03-17 02:23:00 +0000940 }
you.chen24d54af2024-01-02 12:26:57 +0800941 p.readInt32(&sw[0]);
942 p.readInt32(&sw[1]);
943 char * test = lynqStrdupReadString(p);
944 memcpy(simResponse, test, strlen(test));
945 free(test);
946 return res;
llba425bd2022-03-17 02:23:00 +0000947}
llb15599d2022-04-01 07:50:08 +0000948
ll88f00782022-10-04 10:16:28 +0800949static void wait_reset_mipc_response(int *response)
950{
ll74a73b72022-10-17 10:30:58 +0800951 usleep(500*1000);
ll88f00782022-10-04 10:16:28 +0800952 int outfd = open("/data/tp",O_RDONLY);
953 if(outfd == -1){
954 RLOGD("open error");
955 return;
956 }
957 char rst[1024];
958 int s;
959 s = read(outfd,rst,sizeof(rst));
960 sscanf(rst,"%d",response);
961 usleep(1);
962 close(outfd);
963 return;
964}
965
966int lynq_reset_modem(void)
967{
968 if(g_lynq_sim_init_flag == 0)
969 {
970 return -1;
971 }
972 int ret = -1;
973 int send_num = 0;
you.chen24d54af2024-01-02 12:26:57 +0800974 lynq_client_t client_t;
ll88f00782022-10-04 10:16:28 +0800975 client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
976 client_t.paramLen = 1;
xy.hedecca822024-09-03 13:26:29 +0800977 client_t.uToken = get_utoken();
ll88f00782022-10-04 10:16:28 +0800978 sprintf(client_t.param, "%s\n", "AT+LRSTMD");
979 pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
you.chen24d54af2024-01-02 12:26:57 +0800980 send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);//because response not by ril callback
ll88f00782022-10-04 10:16:28 +0800981 if(send_num < 0)
982 {
983 RLOGD("function %s sendto error:", __FUNCTION__);
984 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
985 return ret;
986 }
987 wait_reset_mipc_response(&ret);
988 pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
you.chen24d54af2024-01-02 12:26:57 +0800989 RLOGD("function %s ret %d",__FUNCTION__, ret);
ll88f00782022-10-04 10:16:28 +0800990 return ret;
991}
992
llb15599d2022-04-01 07:50:08 +0000993/**
994 * @brief handle shutdown buf
995 * @param options type: [IN]My Param doc
996 * @param time type: [IN]My Param doc
997 * @param message type: [IN]My Param doc
998 */
999static void handle_shutdown_buf(char options[], char time[], char message[])
1000{
1001 if(NULL == options)
1002 {
1003 bzero(options_buf, 32);
1004 memcpy(options_buf," ", 1);
1005 }
1006 else
1007 {
1008 memcpy(options_buf,options, strlen(options));
1009 }
1010 if(NULL == time)
1011 {
1012 bzero(time_buf, 32);
1013 memcpy(time_buf," ", 1);
1014 }
1015 else
1016 {
1017 memcpy(time_buf, time, strlen(time));
1018 }
1019 if(NULL == message)
1020 {
1021 bzero(message_buf, 32);
1022 memcpy(message_buf," ", 1);
1023 }
1024 else
1025 {
1026 memcpy(message_buf, message, strlen(message));
1027 }
1028}
1029
1030int lynq_shutdown(char options[], char time[], char message[])
1031{
1032 char cmd[128] = {0};
1033 handle_shutdown_buf(options, time, message);
1034 sprintf(cmd, "%s %s %s %s", "shutdown", options_buf, time_buf, message_buf);
1035 system(cmd);
1036 return 0;
1037}
1038
1039int lynq_get_version(char buf[])
1040{
you.chen24d54af2024-01-02 12:26:57 +08001041 FILE *fp;
llb15599d2022-04-01 07:50:08 +00001042 char buffer[128];
1043 sprintf(buffer, "%s", "uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION");
1044 fp = popen(buffer, "r");
you.chen24d54af2024-01-02 12:26:57 +08001045 if(NULL == fp)
1046 {
1047 RLOGE("popen failed !");
1048 return -1;
1049 }
1050 if(NULL != fgets(buffer, sizeof(buffer), fp))
1051 {
1052 if('\n' == buffer[strlen(buffer) - 1])
1053 {
1054 buffer[strlen(buffer) - 1] = '\0';
1055 }
1056 }
1057 else
1058 {
1059 RLOGE("fgets failed !");
1060 pclose(fp);
1061 return -1;
1062 }
llb15599d2022-04-01 07:50:08 +00001063 memcpy(buf, buffer, strlen(buffer));
1064 buf[strlen(buffer)] = '\0';
1065 pclose(fp);
1066 return 0;
1067}
lle1d5d7c2022-01-18 12:34:30 +00001068
lhee0d3b32024-04-25 03:54:48 -07001069void urc_msg_process(Parcel *p)
1070{
1071 int resp_type;
1072 int urcid;
1073 int slot_id;
1074 int error_code;
1075
1076 int size=p->dataSize();
1077 p->readInt32(&resp_type);
1078 p->readInt32(&urcid);
1079 p->readInt32(&slot_id);
1080 LYINFLOG("%s urc id = %d, slot_id = %d, size is %d",__func__, urcid,slot_id,size);
1081 switch (urcid)
1082 {
1083 case LYNQ_URC_ALLOW_DATA://new sms received
1084 {
1085 LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d",resp_type,urcid,slot_id);
1086 p->readInt32(&error_code);
1087 sendAllowDataSignal(error_code);
1088 break;
1089 }
1090 default:
1091 break;
1092 }
1093}
1094