[Feature][T8TSK-82][AT]The SZZT branch synchronizes 103 AT instructions
Change-Id: Ia356d13cef32910664ae1bc15c31e4748ac453c8
diff --git a/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp b/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
index 1da486b..b1ed3f9 100755
--- a/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/factory/lynq_factory.cpp
@@ -1,4 +1,59 @@
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<unistd.h>
+#include<netinet/in.h>
+#include<arpa/inet.h>
+#include<netdb.h>
+#include<signal.h>
+#include <log/log.h>
+#include <hardware_legacy/power.h>
+#include <vendor-ril/telephony/ril.h>
+#include <telephony/ril_cdma_sms.h>
+
+#include <telephony/record_stream.h>
+#include <utils/SystemClock.h>
+#include <binder/Parcel.h>
+#include <cutils/jstring.h>
+#include <sys/types.h>
+#include <limits.h>
+#include <pwd.h>
+
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <ctype.h>
+#include <alloca.h>
+#include <sys/un.h>
+#include <assert.h>
+#include <netinet/in.h>
+#include <atomic>
+
+#include "utils/String8.h"
+#include "ss.h"
+
+#include "cc.h"
+#include "network.h"
+#include "stk.h"
+
+
+#include "atci/ATCI.h"
+#include "data/data.h"
+#include "data/data_gdbus.h"
+#include "ecall/eCall.h"
+#include "em/em.h"
+#include "sms/sms.h"
+#include "sms/cdma/sms_pdu_cdma.h"
+#include "stateManager/stateManager.h"
+
+
+#include "Radio_capability_switch_util.h"
+
#include <stdio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include "common.h"
#include "utils.h"
#include "Phone_utils.h"
@@ -16,6 +71,8 @@
int already_gps = 0;
int enable_nema = 0;
int sustain = 1;
+char rgmii[32] = {0};
+//char sgmii[32] = {0};
pthread_t lynq_gps_tid;
// static pthread_mutex_t s_gps_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
// static pthread_cond_t s_gps_change_cond = PTHREAD_COND_INITIALIZER;
@@ -562,7 +619,68 @@
return 0;
}
+void lynq_sendRequestToMd(int request, int id) {
+ RequestInfo* info = creatRILInfoAndInit(request, INIT, (RIL_SOCKET_ID) ((id)));
+ info->lynqEvent = 1;
+ switch(request){
+ case RIL_REQUEST_DEVICE_IDENTITY:
+ {
+ getDeviceIdentity(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+ break;
+ }
+ case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE:
+ {
+ getPreferredNetworkType(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+ break;
+ }
+ case RIL_REQUEST_GET_SIM_STATUS:
+ {
+ getIccCardStatus(1, NULL, (RIL_SOCKET_ID) (id), info);
+ break;
+ }
+ case RIL_REQUEST_DATA_REGISTRATION_STATE:
+ {
+ getDataRegistrationState(1, NULL, (RIL_SOCKET_ID) (id), info);
+ break;
+ }
+ case RIL_REQUEST_VOICE_REGISTRATION_STATE:
+ {
+ getVoiceRegistrationState(1, NULL, (RIL_SOCKET_ID) (id), info);
+ break;
+ }
+ case RIL_REQUEST_VOICE_RADIO_TECH:
+ {
+ getVoiceRadioTechnology(1, NULL, (RIL_SOCKET_ID) (id), info);
+ break;
+ }
+ case RIL_REQUEST_OEM_HOOK_RAW:
+ {
+ char* tmp[2] = {"RIL_REQUEST_OEM_HOOK_RAW", "AT+ECAL"};
+ sendATCMD(2, tmp, (RIL_SOCKET_ID) (id), info);
+ break;
+ }
+ case RIL_REQUEST_GET_RADIO_CAPABILITY:
+ {
+ getRadioCapability(1, NULL, (RIL_SOCKET_ID) ((id)), info);
+ break;
+ }
+ default:
+ RLOGE("don't support %d in init", id);
+ if(info) {
+ free(info);
+ }
+ }
+}
+
int lynq_get_factory_data(int num,char *argv[MAX_ARGS]){
+ if(!strcmp(argv[1],"AT+CGSN"))
+ {
+ for(int i = 0; i < 2; i++)
+ {
+ lynq_sendRequestToMd(RIL_REQUEST_DEVICE_IDENTITY,i);
+ }
+ //lynq_get_imei(num, argv);
+ }
if(num < 4)
return -1;
// if(!strcmp(argv[3], "wifi")){
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_at.cpp b/src/lynq/framework/lynq-ril-service/src/lynq_at.cpp
index 6ff642c..87418fd 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_at.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_at.cpp
@@ -6,6 +6,7 @@
** LastChange: 2021-09-28
** History:
**=============================================================================*/
+#include <string.h>
#include "lynq_at.h"
#include "common.h"
#include "stateManager/stateManager.h"
@@ -32,7 +33,14 @@
//RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
- pRI->lynqEvent=1;
+ if(!strcmp(argv[1],"AT+CFSN"))
+ {
+ pRI->lynqEvent=2;
+ }
+ else
+ {
+ pRI->lynqEvent=1;
+ }
printf("Warren test ====> argv[1]=%s\n",argv[1]);
sendATCMD(2, argv,id,pRI);
return 0;
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_at_transfer_table.h b/src/lynq/framework/lynq-ril-service/src/lynq_at_transfer_table.h
index 1b1308d..a8d09b7 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_at_transfer_table.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_at_transfer_table.h
@@ -3,6 +3,9 @@
{LYNQ_REQUEST_CGAUTO,"CGAUTO",0},
{LYNQ_REQUEST_CGACT,"CGACT",4},
{LYNQ_REQUEST_CGDCONT,"CGDCONT",4},
+/*lei add for clt*/
+{LYNQ_REQUEST_CFSN,"CFSN",7},
+/*lei add for clt*/
{LYNQ_USER_REQUEST_GNSS,"LYNQGNSS",7},
{LYNQ_USER_REQUEST_OTHRE,"LYNQOTHER",7},
{LYNQ_REQUEST_LAPNACT,"LAPNACT",7},
@@ -11,10 +14,16 @@
{LYNQ_REQUEST_SCREEN_STATE,"SCREEN",7},
{LYNQ_REQUEST_SEND_LOG_DATA,"LOGS",7},
{LYNQ_PLAT_LGMDS,"LGMDS",7},
+/*lei add for clt*/
+{LYNQ_REQUEST_RST,"RST",7},
+/*lei add for clt*/
{LYNQ_REQUEST_RNDIS,"LRNDISHANDLE",7},
{LYNQ_REQUEST_FACTORY,"LYNQFACTORY",7},
{LYNQ_REQUEST_LINFO,"LINFO",7},
{LYNQ_REQUEST_FOTA,"LYNQFOTA",7},
+{LYNQ_REQUEST_FACTORY,"CGSN",7},
+
+
/*lei add*/
{LYNQ_REQUEST_CSCLK,"CSCLK",7},
{LYNQ_REQUEST_MPWRSM,"MPWRSM",7},
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_commands.h b/src/lynq/framework/lynq-ril-service/src/lynq_commands.h
index adfda0f..ae1d99e 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_commands.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_commands.h
@@ -12,7 +12,8 @@
{LYNQ_REQUEST_ELAPNACT,"RIL_REQUEST_SETUP_DATA_CALL","ELAPNACT",setupData_e,NULL},
{LYNQ_USER_REQUEST_GNSS,NULL,"LYNQGNSS",NULL,lynqGnss},
{LYNQ_USER_REQUEST_OTHRE,NULL,"LYNQOTHER",NULL,lynqOther},
-{LYNQ_REQUEST_SWITCH_SIM,"SET_DEFAULT_SIM_ALL","LCSUS",switchSim,NULL},
+{LYNQ_REQUEST_SWITCH_SIM,"SET_DEFAULT_SIM_ALL","LCSUS",lynq_dsds_support,NULL},
{LYNQ_REQUEST_SCREEN_STATE,"RIL_REQUEST_SCREEN_STATE","SCREEN",lynq_screen,NULL},
{LYNQ_PLAT_LGMDS,"LYNQ_PLAT_LGMDS","LGMDS",NULL,getMDstate},
+{LYNQ_REQUEST_RST,"LYNQ_REQUEST_RST","RST",NULL,rst},
{-1,NULL,NULL,NULL,NULL},
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
index 9f302c4..258f066 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
@@ -6,10 +6,12 @@
** LastChange: 2021-09-27
** History:
**=============================================================================*/
-
+#include <sys/types.h>
+#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <log/log.h>
+#include <fcntl.h>
#include "lynq_common.h"
#include "lynq_user.h"
#include "common.h"
@@ -18,6 +20,7 @@
#include <liblog/lynq_deflog.h>
#include <sys/time.h>
#include "Phone_utils.h"
+#include "pms/lynq_pms.h"
usb_cmd_t Usb_commands[] = {
#include "lynq_commands.h"
};
@@ -39,6 +42,9 @@
int g_lynq_csclk = 0;
int g_lynq_mpwrsm = 0;//at+mpwrsm need
int g_lynq_mwakeupcfg = 0;//at+mwakeupcfg need
+int sleep_flag = 0;
+extern pms_manager * g_pmsManagement;
+int sleep_end = 0;
/*lei add for PMS szzt*/
//int lynqSendToRil(int argc,char *argv[],int uToken);
@@ -81,6 +87,7 @@
case LYNQ_REQUEST_GMI:
case LYNQ_REQUEST_CGACT:
case LYNQ_REQUEST_CGDCONT:
+ case LYNQ_REQUEST_CFSN:
{
return LYNQ_GOTO_AT;
}
@@ -106,6 +113,7 @@
}
case LYNQ_USER_REQUEST_GNSS:
case LYNQ_USER_REQUEST_OTHRE:
+ case LYNQ_REQUEST_RST:
case LYNQ_PLAT_LGMDS:
{
return LYNQ_GOTO_USER_REQ;
@@ -143,7 +151,7 @@
int len = 0;
if(error_code==0)
{
- len = write(ttyGS3_fd,"OK\n",3);
+ len = write(ttyGS3_fd,"\nOK\n",4);
}
else
{
@@ -495,21 +503,58 @@
}
return 0;
}
-int switchSim(int argc,char*argv[],char *rilReq, int uToken)
+
+static void lynq_get_current_card(void)
+{
+ int id = get_default_sim_all();
+ lynq_output_info("+LCSUS: %d\n", id);
+ lynq_output_info("OK\n");
+ return;
+}
+
+static void lynq_switch_card(char*argv[], char *rilReq, int uToken)
{
int slot = 0;
int ret = -1;
char *new_argv[10] = {};
+ slot = atoi(argv[3]);
+ new_argv[0] = (char *)rilReq;
+ new_argv[1] = argv[3];
+ android::lynqSendToRil(2,new_argv,uToken);
+ return;
+}
+
+static void lynq_display_dsds_mode(void)
+{
+ lynq_output_info("+LCSUS: (0-1)\n");
+ lynq_output_info("OK\n");
+ return;
+}
+
+
+int lynq_dsds_support(int argc,char*argv[],char *rilReq, int uToken)
+{
if(argc < 4)
{
RLOGD("parameter error!!!");
return 1;
}
- slot = atoi(argv[3]);
- new_argv[0] = (char *)rilReq;
- new_argv[1] = argv[3];
- android::lynqSendToRil(2,new_argv,uToken);
- syncRespToUsb(0);
+ int type = atoi(argv[2]);
+ if(type == 2)//get mode
+ {
+ RLOGD("lynq_dsds_support get mode\n");
+ lynq_get_current_card();
+ }
+ else if(type == 0)//set mode
+ {
+ RLOGD("lynq_dsds_support set mode\n");
+ lynq_switch_card(argv, rilReq, uToken);
+ }
+ else if(type == 1)//get list mode
+ {
+ RLOGD("lynq_dsds_support get list mode\n");
+ lynq_display_dsds_mode();
+ }
return 0;
}
@@ -524,7 +569,7 @@
}
while(fgets(buf, 4072, fp) != NULL){}
pclose(fp);
- return 0;
+ return NULL;
}
int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
@@ -583,10 +628,19 @@
perror("lynq resp write:");
return 0;
}
+ pclose(FP);
syncRespToUsb(0);
return 0;
}
+void* rst(int argc,char*argv[],int uToken)
+{
+ syncRespToUsb(0);
+ system("reboot");
+ kill(0, SIGKILL);
+ return 0;
+}
+
int lynqATWaitWithTime(int time)
{
int ret = 0;
@@ -641,66 +695,132 @@
}
}
+
+
+
+void lynq_switch_card(char *card)
+{
+ char *sim_argv[3] = {};
+ sim_argv[0] = "SET_DEFAULT_SIM_ALL";
+ sim_argv[1] = card;
+ sim_argv[2] = "sleep";
+ android::lynqSendToRil(2,sim_argv,8888);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
+ sleep(1);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
+ return;
+}
+
+/*
+/**
+ * @brief Switch the card and shut down the modem
+ *
+ * @param card 0 or 1
+ */
+void lynq_shutdown_modem(void)
+{
+ char *new_argv[2] = {};
+ new_argv[0] = "RIL_REQUEST_SCREEN_STATE";
+ new_argv[1] = "0";
+ android::lynqSendToRil(2,new_argv,77777);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
+ return;
+}
+
+void lynq_sendRequestToMd(int request, int id)
+{
+ RequestInfo* info = creatRILInfoAndInit(request, INIT, (RIL_SOCKET_ID) ((id)));
+ switch(request){
+ case RIL_REQUEST_SCREEN_STATE:
+ {
+ char *argv[2] = {0};
+ argv[1] = "0";//default value
+ getScreenState(2, argv, (RIL_SOCKET_ID) ((id)), info);
+ break;
+ }
+ default:
+ RLOGE("don't support %d in init", id);
+ if(info) {
+ free(info);
+ }
+ }
+}
+
+
/**
* @brief auto_suspend
* @param argv [Type]:in My Param doc
*/
-static void auto_suspend(char *argv)
+void auto_suspend(int argv)
{
- if(NULL == argv)
+ system("echo 7 | emdlogger_ctrl");
+ int res = system("echo reg_netsys_srcclkena_mask_b 0 > /sys/power/spm/suspend_ctrl");
+ res = system("echo reg_netsys_infra_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+ res = system("echo reg_netsys_apsrc_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+ res = system("echo reg_netsys_vrf18_req_mask_b 0 > /sys/power/spm/suspend_ctrl");
+ res = system("echo reg_netsys_ddr_en_mask_b 0 > /sys/power/spm/suspend_ctrl");
+ for(int i = 0; i < 2; i++)
{
- return;
+ lynq_sendRequestToMd(RIL_REQUEST_SCREEN_STATE, i);
}
- char buf[128] = {0};
- char cmd[64] = {0};
- sprintf(buf, "%s%s%s", "uci set lynq_uci.lynq_autosuspend.auto_enable=\'", argv, "\'");
- system(buf);
- system("commit");
- system("systemctl stop autosuspend.service");
- system("systemctl start autosuspend.service");
- usleep(1000*100);
- sprintf(cmd, "%s %s", "autosuspend-client-demo", argv);
- system(cmd);
+ if(argv==1)
+ {
+ //autosleep
+ RLOGD("auto_suspend autosleep");
+ res = system("echo mem > /sys/power/autosleep");
+ }
+ else if (argv==0)
+ {
+ //state
+ RLOGD("state autosleep");
+ res = system("echo mem > /sys/power/state");
+ }
return;
}
-/**
- * @brief check_pin_level
- * @param buf Type:[in]
- * @param flag Type:[in]
- * @return int
- */
-static int check_pin_level(char *buf, int flag)
+void check_autosleep(int testnum)
{
- if(NULL == buf)
+ if(ttyGS3_fd != -1)
{
- return -1;
+ close(ttyGS3_fd);
}
- if(flag > strlen(buf))
+ //sleep(1);//for wait g_lynq_mwakeupcfg change
+ if(!sleep_end)//must be config and need wait autosleep
{
- return -1;
- }
- char *p = buf;
- int tmp = 0;
- while(*p != '\0')
- {
- if(tmp != flag)
+ if(g_lynq_mwakeupcfg)//means need autosleep,so wait
{
- tmp++;
- *p ++;
- }
- else
- {
- if(*p == '1')
+ int i = 50;
+ /*wait*/
+ while (i)
{
- return 0;
+ if(sleep_end == 1)
+ {
+ RLOGD("check_autosleep no need wait\n");
+ break;
+ }
+ RLOGD("check_autosleep need to wait\n");//reason:1.worst:network is not online need wait 10+1(s);2.autosleep not completed
+ sleep(1);
+ i--;
}
- else
- {
- return 1;
- }
+ /*wait*/
+ sleep_end = 1;
+ //printf("g_lynq_mwakeupcfg %d no need to wait\n", g_lynq_mwakeupcfg);
}
+
}
+ else
+ {
+ RLOGD("[%s] sleep_end %d!!!\n",__FUNCTION__,sleep_end);
+ }
+ ttyGS3_fd = open("/dev/ttyGS3",O_RDWR);
+ RLOGD("[%s]ttyGS3_fd %d successfully testnum %d!!!\n",__FUNCTION__,ttyGS3_fd, testnum);
+ if(ttyGS3_fd == -1)
+ {
+ return;
+ }
+ //printf("[%s]open successfully!!!\n",__FUNCTION__);
+ //RLOGD("[%s]open successfully!!!\n",__FUNCTION__);
+ return;
}
/**
@@ -712,18 +832,25 @@
FILE *fp;
char buf[32] = {0};
char cmd[64] = {0};
- sprintf(cmd,"%s %s %s", "cat /sys/devices/platform/10005000.pinctrl/mt_gpio |grep", pin, "2>&1");
+ sprintf(cmd,"%s %s %s", "cat /sys/devices/platform/10005000.pinctrl/mt_gpio |grep", pin, "2>&1");
fp = popen(cmd, "r");
if(NULL == fp)
{
return -1;
}
+
fgets(buf, sizeof(buf), fp);
- if(!check_pin_level(buf, 7))//mean high level
+ buf[31] = '\0';
+ if (strlen(buf) <= 8 ) {
+ return -1;
+ }
+ int i = 0;
+ if (buf[8] == '1')
{
pclose(fp);
return 1;
}
+ //mean low level
pclose(fp);
return 0;//mean
}
@@ -787,7 +914,18 @@
RLOGD("display_set_mode\n");
if(!strcmp(argv[0], "CSCLK"))
{
+
+ if(argv[3] == NULL)
+ {
+ RLOGD("argv[3] == NULL __FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ return;
+ }
g_lynq_csclk = atoi(argv[3]);
+
+ g_pmsManagement->lynq_write_pms_to_memory(argv[0], g_lynq_csclk);
+
+
+
if(g_lynq_csclk == 1)
{
/*if dtr is 1, at+mpwrsm will check dtr pin level*/
@@ -798,45 +936,36 @@
/*if dtr is 1, at+mpwrsm will't check dtr pin level*/
RLOGD("dtr is 0, at+mpwrsm will't check dtr pin level\n");
}
- #if 0
- else if(g_lynq_csclk == 2)
- {
- /*g_lynq_wakeup_in*/
- g_lynq_wakeup_in = 1;
- }
- #endif
}
else if(!strcmp(argv[0], "MPWRSM"))
{
RLOGD("at+MPWRSM begin\n");
+ if(argv[3] == NULL)
+ {
+ RLOGD("argv[3] == NULL __FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ return;
+ }
g_lynq_mpwrsm = atoi(argv[3]);
- /*AT+MPWRSM disable*/
+ g_pmsManagement->lynq_write_pms_to_memory(argv[0], g_lynq_mpwrsm);
+ /*AT+MPWRSM state*/
if(!strcmp(argv[3], "0"))
{
- auto_suspend(argv[3]);
- }
- /*AT+MPWRSM enable*/
- else if(!strcmp(argv[3], "1"))
- {
- RLOGD("at+MPWRSM begin and value is 1\n");
if(g_lynq_csclk == 0)
{
- /*if module entry sleep mode, need to pull ring pin high level*/
- system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
- RLOGD("g_lynq_csclk = 0, entry sleep mode, dont't check dtr pin level\n");
- auto_suspend(argv[3]);
+ /*quit sleep mode*/
+ syncRespToUsb(0);
+ auto_suspend(g_lynq_mpwrsm);
}
/*DTR pin*/
else if(g_lynq_csclk == 1)
{
RLOGD("g_lynq_csclk = 1, entry sleep mode, check dtr pin level\n");
/*check dtr level*/
-
if(cat_pin_level("006"))//cat dtr pin level
{
- /*if module entry sleep mode, need to pull ring pin high level*/
- system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
- auto_suspend(argv[3]);
+ syncRespToUsb(0);
+ auto_suspend(g_lynq_mpwrsm);
+ return;
}
else
{
@@ -845,35 +974,38 @@
}
}
- #if 0
- /*WAKEUP_IN pin*/
- else if(g_lynq_csclk == 2)
+ return;
+ }
+ /*AT+MPWRSM autosleep*/
+ else if(!strcmp(argv[3], "1"))
+ {
+ RLOGD("at+MPWRSM begin and value is 1\n");
+ if(g_lynq_csclk == 0)
{
- if(g_lynq_wakeup_in == 0)
+ RLOGD("g_lynq_csclk = 0, entry sleep mode, dont't check dtr pin level\n");
+ auto_suspend(g_lynq_mpwrsm);
+ syncRespToUsb(0);
+ return;
+ }
+ /*DTR pin*/
+ else if(g_lynq_csclk == 1)
+ {
+ RLOGD("g_lynq_csclk = 1, entry sleep mode, check dtr pin level\n");
+ /*check dtr level*/
+ if(cat_pin_level("061"))//cat dtr pin level
{
- /*don't check WAKEUP_IN level*/
- auto_suspend(argv[3]);
- /*if module entry sleep mode, need to pull ring pin high level*/
- system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+ auto_suspend(g_lynq_mpwrsm);
+ syncRespToUsb(0);
+ return;
}
- /*check WAKEUP_IN level*/
- else if (g_lynq_wakeup_in == 1)
+ else
{
- if(cat_pin_level("xxx"))
- {
- auto_suspend(argv[3]);
- /*if module entry sleep mode, need to pull ring pin high level*/
- system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
- }
- else
- {
- syncRespToUsb(10);//WAKEUP_IN pin is low level, so can't entry sleep mode
- return;
- }
+ syncRespToUsb(10);//dtr pin is high level, so can't entry sleep mode
+ return;
}
}
- #endif
}
+ /*invalid value*/
else
{
syncRespToUsb(100);
@@ -882,9 +1014,16 @@
}
else if(!strcmp(argv[0], "MWAKEUPCFG"))
{
+ if(argv[3] == NULL)
+ {
+ RLOGD("argv[3] == NULL __FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ return;
+ }
g_lynq_mwakeupcfg = atoi(argv[3]);
+ g_pmsManagement->lynq_write_pms_to_memory(argv[0], g_lynq_mwakeupcfg);
}
syncRespToUsb(0);
+ return;
}
/**
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.h b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
index 5c988ad..a5de38a 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
@@ -66,6 +66,8 @@
#define LYNQ_REQUEST_CSCLK (LYNQ_VERSION +20)
#define LYNQ_REQUEST_MPWRSM (LYNQ_VERSION +21)
#define LYNQ_REQUEST_MWAKEUPCFG (LYNQ_VERSION +22)
+#define LYNQ_REQUEST_CFSN (LYNQ_VERSION +23)
+#define LYNQ_REQUEST_RST (LYNQ_VERSION +25)
/*lei add*/
#define LYNQ_USER_REQUEST_GNSS (LYNQ_VERSION +100)
#define LYNQ_USER_REQUEST_OTHRE (LYNQ_VERSION +101)
@@ -114,11 +116,25 @@
*/
extern int g_lynq_mwakeupcfg;//at+mwakeupcfg need
/*lei add for PMS*/
+
+/*
+ Can sleep sign automatically
+*/
+extern int sleep_flag;
+
+/*
+ whether can open ttyGS3
+*/
+extern int sleep_end;
+
usb_at_transfer_t *lynqFindId(char *cmd);
usb_cmd_t * lynqFindUsbEvent(char *cmd);
int transferAtToRequest(char *cmd);
//argv[2]:0 send,1 list,2 get
int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],char* parser_buf,int maxArgc);
+void auto_suspend(int argv);
+void check_autosleep(int testnum);
+void lynq_sendRequestToMd(int request, int id);
int routeCmd(int request);
@@ -126,7 +142,7 @@
int dialACall(int argc,char*argv[],char *rilReq, int uToken);
int setupData(int argc,char*argv[],char *rilReq, int uToken);
int setupData_e(int argc,char*argv[],char *rilReq, int uToken);
-int switchSim(int argc,char*argv[],char *rilReq, int uToken);
+int lynq_dsds_support(int argc,char*argv[],char *rilReq, int uToken);
int lynq_screen(int argc,char*argv[],char *rilReq, int uToken);
void* getMDstate(int argc,char*argv[],int uToken);
int lynqATWaitWithTime(int time);//time(s)
@@ -136,4 +152,14 @@
/*lei add for PMS*/
void lynq_pms(char *argv[]);
/*lei add for PMS*/
+
+/**
+ * @brief reboot
+ *
+ * @param argc
+ * @param argv
+ * @param uToken
+ * @return void*
+ */
+void* rst(int argc,char*argv[],int uToken);
#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_ril_service.service b/src/lynq/framework/lynq-ril-service/src/lynq_ril_service.service
index c89731a..86df0f9 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_ril_service.service
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_ril_service.service
@@ -9,6 +9,8 @@
RemainAfterExit=no
ExecStart=/usr/bin/lynq-ril-service
Restart=always
+RestartSec=500ms
+StartLimitInterval=0
User=root
Group=root
diff --git a/src/lynq/framework/lynq-ril-service/src/main.cpp b/src/lynq/framework/lynq-ril-service/src/main.cpp
index 96d5bf9..ca78fb2 100755
--- a/src/lynq/framework/lynq-ril-service/src/main.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/main.cpp
@@ -35,8 +35,14 @@
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/types.h>
-
+#include <signal.h>
#include "common.h"
+#include "lynq_common.h"
+#include "pms/lynq_pms.h"
+#include "network.h"
+
+#define CHECK_TIME 5 //check whether online
+
extern "C" void RIL_register (const RIL_RadioFunctions *callbacks);
@@ -55,13 +61,110 @@
#undef LOG_TAG
#define LOG_TAG "DEMO_MAIN"
+
static struct RIL_Env s_rilEnv = {
RIL_onRequestComplete,
RIL_onUnsolicitedResponse,
NULL
};
+
+
+
+
+extern int sleep_flag;
+
+extern pms_manager * g_pmsManagement;
+
+void signal_handler_fun(int signum) {
+ RLOGD("signal_handler_fun catch signal %d\n", signum);
+ check_autosleep(signum);
+ return;
+}
+
+static void query_network_state(int request, int slot)
+{
+ RequestInfo* info = creatRILInfoAndInit(request, INIT, (RIL_SOCKET_ID) ((slot)));
+ switch (request)
+ {
+ case RIL_REQUEST_DATA_REGISTRATION_STATE:
+ /* code */
+ getDataRegistrationState(1, NULL, (RIL_SOCKET_ID) (slot), info);
+ break;
+ case RIL_REQUEST_VOICE_REGISTRATION_STATE:
+ /* code */
+ getVoiceRegistrationState(1, NULL, (RIL_SOCKET_ID) (slot), info);
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+/**
+ * @brief 1 means can go to autosleep
+ *
+ * @return int
+ */
+static int lynq_ensure_online(void)
+{
+ #if 0
+ /*ensure inject 2G/3G/4G*/
+ int slot_id = get_default_sim_all();
+ int i = 10;
+ while (i)
+ {
+ if(!sleep_flag)
+ {
+ RLOGD("function %s no network\n", __FUNCTION__);
+ }
+ else
+ {
+ RLOGD("%s network is online\n", __FUNCTION__);
+ break;
+ }
+ //query_network_state(RIL_REQUEST_DATA_REGISTRATION_STATE, slot_id);
+ query_network_state(RIL_REQUEST_VOICE_REGISTRATION_STATE, slot_id);
+ sleep(1);
+ i--;
+ }
+ #endif
+ return 1;
+}
+
+void lynq_goto_sleep(void)
+{
+ if(lynq_ensure_online())//ensure online
+ {
+ if(g_lynq_mwakeupcfg != 0)//means user must be configed it
+ {
+ RLOGD("means user must be configed it go to sleep\n");
+ sleep(5);//for too early to send command cause fail
+ auto_suspend(g_lynq_mpwrsm);
+ //sleep(4);
+ }
+ }
+ else
+ {
+ RLOGD("can't autosleep because network is unreable %d\n", sleep_flag);
+ }
+ sleep_end = 1;
+ return;
+}
+
+
+
int main(int argc, char **argv) {
+ system("route add -host 255.255.255.255 dev lo");
+ signal(SIGHUP,signal_handler_fun);
+ /*get pro*/
+ lynq_init_pms_manager();
+ g_pmsManagement->lynq_read_pms_from_memory("MPWRSM", &g_lynq_mpwrsm);
+ g_pmsManagement->lynq_read_pms_from_memory("CSCLK", &g_lynq_csclk);
+ g_pmsManagement->lynq_read_pms_from_memory("MWAKEUPCFG", &g_lynq_mwakeupcfg);
+ RLOGD("g_lynq_mpwrsm %d\n", g_lynq_mpwrsm);
+ RLOGD("CSCLK %d\n", g_lynq_csclk);
+ RLOGD("MWAKEUPCFG %d\n", g_lynq_mwakeupcfg);
int lock_file = open("/tmp/tel_demo_single_proc.lock", O_CREAT|O_RDWR, 0666);
int rc = flock(lock_file,LOCK_EX|LOCK_NB);
if(rc) {
@@ -113,6 +216,7 @@
android::startGdbusLoop();
RLOGD("RIL_Init RIL_register completed");
printf("DemoApp launch done!\n");
+ lynq_goto_sleep();
while (true) {
sleep(UINT32_MAX);
}
diff --git a/src/lynq/framework/lynq-ril-service/src/makefile b/src/lynq/framework/lynq-ril-service/src/makefile
index f407000..10132c9 100755
--- a/src/lynq/framework/lynq-ril-service/src/makefile
+++ b/src/lynq/framework/lynq-ril-service/src/makefile
@@ -67,6 +67,7 @@
-I$(LOCAL_PATH)/rndis \
-I$(LOCAL_PATH)/factory \
-I$(LOCAL_PATH)/log \
+ -I$(LOCAL_PATH)/pms \
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
-I$(ROOT)$(includedir)/include \
@@ -119,7 +120,7 @@
endif
-SOURCES = $(wildcard util/*.cpp *.cpp ecall/*.cpp ecall/gost/*.cpp ecall/gost/utils/*.cpp ecall/gost/sslp/*.cpp ecall/gost/sslp/auth/*.cpp ecall/gost/sslp/firmware/*.cpp ecall/gost/sslp/commands/*.cpp ecall/gost/sslp/ecall/*.cpp ecall/gost/sslp/teledata/*.cpp data/*.cpp em/rfdesense/*.cpp em/networkinfo/*.cpp em/*.cpp sms/*.cpp sms/gsm/*.cpp sms/cdma/*.cpp atci/*.cpp stateManager/*.cpp sms/lynqSmsManager/*.cpp rndis/*.cpp factory/*.cpp log/*.cpp)
+SOURCES = $(wildcard util/*.cpp *.cpp ecall/*.cpp ecall/gost/*.cpp ecall/gost/utils/*.cpp ecall/gost/sslp/*.cpp ecall/gost/sslp/auth/*.cpp ecall/gost/sslp/firmware/*.cpp ecall/gost/sslp/commands/*.cpp ecall/gost/sslp/ecall/*.cpp ecall/gost/sslp/teledata/*.cpp data/*.cpp em/rfdesense/*.cpp em/networkinfo/*.cpp em/*.cpp sms/*.cpp sms/gsm/*.cpp sms/cdma/*.cpp atci/*.cpp stateManager/*.cpp sms/lynqSmsManager/*.cpp rndis/*.cpp factory/*.cpp log/*.cpp pms/*.cpp)
EXECUTABLE = lynq-ril-service
diff --git a/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.cpp b/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.cpp
new file mode 100755
index 0000000..e17c7df
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.cpp
@@ -0,0 +1,349 @@
+#include "lynq_pms.h"
+
+enum
+{
+ NO_INFO = 2,
+ GET_INFO = 1,
+ NOT_FIND =0
+};
+
+int pms_check_res = NOT_FIND;
+
+char pmp_content[128] = {0};
+
+pms_manager *g_pmsManagement;
+
+pms_manager:: ~ pms_manager(){}
+
+int read_pms_from_memory_cb(void *data, int argc, char **argv, char **azColName)
+{
+ return 0;
+}
+
+/**
+ * @brief Check whether the ID exists in the database
+ *
+ * @param index
+ * @return int
+ * find:turn 1
+ * not find:turn 0
+ */
+int pms_manager::lynq_check_function(char *function)
+{
+ memset(pmp_content,0,128);
+ strcpy(pmp_content, function);
+ char *zErrMsg = 0;
+ int rc;
+ char sql[128]={0};
+ /* Open database */
+ rc = sqlite3_open(PMS_DB_PATH, &pmsDb);
+ if( rc )
+ {
+ //printf("[%s] Can't open database: %s\n", __FUNCTION__,sqlite3_errmsg(pmsDb));
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ sprintf(sql,"%s", "SELECT * FROM LYNQPMS W");
+ char **dbResult;
+ int nRow=-1, nColumn=-1;
+ int i,j;
+ int rdy = 0;
+ rc = sqlite3_get_table(pmsDb,sql,&dbResult,&nRow,&nColumn,&zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ //printf("SQL error: %s\n", zErrMsg);
+ sqlite3_free_table(dbResult);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ //printf("[%s] %s row %d\n", __FUNCTION__,sqlite3_errmsg(pmsDb),nRow);
+ int index = nColumn;
+ if(nRow == 0)
+ {
+ pms_check_res = NO_INFO;
+ }
+ else
+ {
+ for(i = 0; i < nRow; i++)
+ {
+ for(j = 0; j < nColumn; j++)
+ {
+ //printf("j:%s : index:%s\n", dbResult[j],dbResult[index]);
+ if(!strcmp(dbResult[index],function))
+ {
+ pms_check_res = GET_INFO;
+ rdy = 1;
+ break;
+ }
+ index++;
+ }
+ }
+ if(!rdy)
+ {
+ pms_check_res = NOT_FIND;
+ }
+ }
+ sqlite3_free_table(dbResult);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return 0;
+}
+
+int pms_manager::lynq_write_pms_to_pms_db(char *function, int state)
+{
+ char *zErrMsg = 0;
+ int rc;
+ char sql[128]={0};
+ //printf("function %s %s\n", __FUNCTION__, function);
+
+ if(!lynq_check_function(function))
+ {
+ rc = sqlite3_open(PMS_DB_PATH, &pmsDb);
+ if( rc )
+ {
+ //printf("[%s] Can't open database: %s\n", __FUNCTION__,sqlite3_errmsg(pmsDb));
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ //printf("[%s] Opened database successfully\n",__FUNCTION__);
+ if(NO_INFO == pms_check_res)//insert
+ {
+ //printf("insert SQL %s rc %d\n", zErrMsg, rc);
+
+ sprintf(sql,"INSERT INTO LYNQPMS (ID,FUNCTION,STATUS,NUMBER) VALUES (NULL,'%s',%d,%d);",function,state,1);
+ rc = sqlite3_exec(pmsDb, sql, NULL, NULL, &zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ //printf("SQL error: %s rc %d\n", zErrMsg, rc);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ }
+ else if (GET_INFO == pms_check_res)//update
+ {
+ //printf("update SQL %s rc %d\n", zErrMsg, rc);
+ /*update*/
+ sprintf(sql,"%s%d%s%s%s","UPDATE LYNQPMS set STATUS = ",state," WHERE FUNCTION='",function,"'");
+ rc = sqlite3_exec(pmsDb, sql, NULL, NULL, &zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ //printf("SQL error: %s rc %d\n", zErrMsg, rc);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ }
+ else if(NOT_FIND == pms_check_res)//insert
+ {
+ //printf("not find %s rc %d\n", zErrMsg, rc);
+ //printf("insert SQL %s rc %d\n", zErrMsg, rc);
+
+ sprintf(sql,"INSERT INTO LYNQPMS (ID,FUNCTION,STATUS,NUMBER) VALUES (NULL,'%s',%d,%d);",function,state,1);
+ rc = sqlite3_exec(pmsDb, sql, NULL, NULL, &zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ //printf("SQL error: %s rc %d\n", zErrMsg, rc);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ }
+
+ }
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_OK;
+
+}
+
+int pms_manager::lynq_write_pms_to_memory(char *function, int state)
+{
+
+ lynq_write_pms_to_pms_db(function,state);
+ return LYNQ_E_PMS_DB_OK;
+}
+
+int pms_manager::lynq_read_pms_from_memory(char *function, int *state)
+{
+ char *zErrMsg = 0;
+ int rc;
+ char sql[128]={0};
+ if(!lynq_check_function(function))
+ {
+ rc = sqlite3_open(PMS_DB_PATH, &pmsDb);
+ if( rc )
+ {
+ //printf("[%s] Can't open database: %s\n", __FUNCTION__,sqlite3_errmsg(pmsDb));
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ //printf("[%s] Opened database successfully\n",__FUNCTION__);
+ if (GET_INFO == pms_check_res)//select
+ {
+ //printf("select SQL %s rc %d\n", zErrMsg, rc);
+ /*update*/
+ //SELECT * FROM LYNQPMS WHERE FUNCTION= 'CSCLK'
+ sprintf(sql,"%s%s%s", "SELECT * FROM LYNQPMS WHERE FUNCTION ='", function, "'");
+ char **dbResult;
+ int nRow=-1, nColumn=-1;
+ int i,j;
+ int rdy = 0;
+ rc = sqlite3_get_table(pmsDb,sql,&dbResult,&nRow,&nColumn,&zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ //printf("SQL error: %s\n", zErrMsg);
+ sqlite3_free_table(dbResult);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return LYNQ_E_PMS_DB_FAIL;
+ }
+ ////printf("[%s] %s row %d\n", __FUNCTION__,sqlite3_errmsg(pmsDb),nRow);
+ int index = nColumn;
+ if(nRow == 0)
+ {
+ pms_check_res = NO_INFO;
+ }
+ else
+ {
+ for(i = 0; i < nRow; i++)
+ {
+ for(j = 0; j < nColumn; j++)
+ {
+ ////printf("%s:%s\n", dbResult[j],dbResult[index]);
+ if(!strcmp(dbResult[j],"STATUS"))
+ {
+ pms_check_res = GET_INFO;
+ *state = atoi(dbResult[index]);
+ rdy = 1;
+ break;
+ }
+ index++;
+ }
+ }
+ if(!rdy)
+ {
+ pms_check_res = NOT_FIND;
+ }
+ }
+ sqlite3_free_table(dbResult);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ }
+
+ }
+ return 0;
+}
+
+int lynq_init_pms_manager()
+{
+ g_pmsManagement = new pms_manager();
+ if(g_pmsManagement==NULL)
+ {
+ RLOGE("init class sms manager fail!!!");
+ exit(EXIT_FAILURE);
+ }
+ RLOGD("init class sms manager success!!!");
+ g_pmsManagement->initpmsManager();
+ return 0;
+}
+
+int has_pms_db_created(char *path,sqlite3* smsDb_l)
+{
+ if (path == NULL || strlen(path) == 0)
+ {
+ //printf("initSmsDb error with null path!");
+ return PMS_DB_ERR;
+ }
+ int rc = sqlite3_open_v2(path, &smsDb_l, SQLITE_OPEN_READWRITE,NULL);
+ if (rc == SQLITE_OK)
+ {
+ //printf("check init success!");
+ return PMS_DB_READED;
+ }
+ else
+ {
+ //printf("db has not create %s!", sqlite3_errmsg(smsDb_l));
+ sqlite3_close_v2(smsDb_l);
+ return PMS_DB_ERR;
+ }
+}
+
+int pms_manager::create_pms_db(char *path)
+{
+ if (path == NULL || strlen(path) == 0) {
+ //printf("initSmsDb error with null path!");
+ return PMS_DB_ERR;
+ }
+ if(PMS_DB_READED==has_pms_db_created(path,pmsDb))
+ {
+ return PMS_DB_READED;
+ }
+ int rc = sqlite3_open(path, &pmsDb);
+ if (rc != SQLITE_OK) {
+ //printf("initDb failed %s", sqlite3_errcode(pmsDb));
+ return PMS_DB_ERR;
+ } else {
+ //printf("create db in %s", path);
+ }
+ sqlite3_close(pmsDb);
+ return PMS_DB_CREATE;
+}
+
+int pms_manager::initpmsManager()
+{
+ int db_ret=0;
+ int table_ret=0;
+ db_ret = create_pms_db(PMS_DB_PATH);
+ if(db_ret==PMS_DB_CREATE)
+ {
+ table_ret = create_pms_table(PMS_DB_PATH);
+ if(table_ret!=0)
+ {
+ //printf("create sms table fail!!!");
+ return 1;
+ }
+ }
+ else if(db_ret==PMS_DB_READED)
+ {
+ //printf("[%s] sms db has be build!!!",__FUNCTION__);
+ }
+ else
+ {
+ //printf("init sms db fail!!!");
+ }
+ return 0;
+}
+
+int pms_manager::create_pms_table(char*path)
+{
+ char *zErrMsg = 0;
+ int rc;
+ char *sql;
+
+ /* Open database */
+ rc = sqlite3_open(path, &pmsDb);
+ if( rc )
+ {
+ RLOGD("[%s] Can't open database: %s\n", __FUNCTION__,sqlite3_errmsg(pmsDb));
+ return 1;
+ }
+ RLOGD("[%s] Opened database successfully\n",__FUNCTION__);
+ /* Create SQL statement */
+ /*lei modify for autosleep 2022/8/25*/
+ sql = "CREATE TABLE LYNQPMS( \
+ ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \
+ FUNCTION NONE NOT NULL, \
+ STATUS INT NOT NULL, \
+ NUMBER INT NOT NULL)";
+ /* Execute SQL statement */
+ /*lei modify for autosleep 2022/8/25*/
+ rc = sqlite3_exec(pmsDb, sql, NULL, 0, &zErrMsg);
+ if( rc != SQLITE_OK )
+ {
+ RLOGD("SQL error: %s\n", zErrMsg);
+ sqlite3_free(zErrMsg);
+ sqlite3_close(pmsDb);
+ return 1;
+ }
+ RLOGD("Table LYNQSMS created successfully\n");
+ sqlite3_close(pmsDb);
+ return 0;
+}
\ No newline at end of file
diff --git a/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.h b/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.h
new file mode 100755
index 0000000..57796d0
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/pms/lynq_pms.h
@@ -0,0 +1,39 @@
+#ifndef __LYNQ_PMS__
+#define __LYNQ_PMS__
+#include <sqlite3.h>
+#include <log/log.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define PMS_DB_PATH "/system/etc/tele/pms.db"
+#define LYNQ_E_PMS_DB_OK 0
+#define LYNQ_E_PMS_DB_FAIL -1
+#define PMS_DB_READED 0
+#define PMS_DB_ERR 1
+#define PMS_DB_CREATE 2
+
+class pms_manager
+{
+ public:
+ virtual ~ pms_manager();
+ int initpmsManager();
+ int lynq_write_pms_to_memory(char *function, int state);
+ int lynq_read_pms_from_memory(char *function, int *state);
+ private:
+ int create_pms_db(char *path);
+ int create_pms_table(char*path);
+ int lynq_write_pms_to_pms_db(char *function, int state);
+ int lynq_check_function(char *function);
+ sqlite3* pmsDb;
+};
+extern pms_manager *g_pmsManagement;
+int lynq_init_pms_manager();
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index 54d2185..d51720c 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -79,6 +79,7 @@
/*lei add*/
#include "lynq_at.h"
#include "lynq_user.h"
+#include "lynq_pms.h"
#include "lynq_rndis.h"
#include "lynq_factory.h"
/*victor add*/
@@ -175,6 +176,7 @@
/*For at extension to receive at buffer*/
char *at_buf_ext[MAX_AT_CMD];
int sockfd = 0;
+int imei_cnt = 0;
/*lei add*/
#if RILC_LOG
static char printBuf[PRINTBUF_SIZE];
@@ -3856,6 +3858,59 @@
return 0;
}
+/**
+ * @brief EGMR->CFSN
+ *
+ * @param response
+ */
+static void lynq_parse_EGMR(void *response)
+{
+ char *ptr = (char *)response;
+ while(*ptr != '\0')
+ {
+ *ptr++;
+ if(*ptr == 'E')
+ {
+ *ptr = 'C';
+ }
+ if(*ptr == 'G')
+ {
+ *ptr = 'F';
+ }
+ if(*ptr == 'M')
+ {
+ *ptr = 'S';
+ }
+ if(*ptr == 'R')
+ {
+ *ptr = 'N';
+ }
+ if(*ptr == ':')
+ {
+ break;
+ }
+
+ }
+ return;
+}
+
+/**
+ * @brief To handle comma-separated strings, take the character before the first comma eg:123456,78 ->123456
+ *
+ * @param buf Type:[IN]
+ */
+static void parse_imei(char buf[])
+{
+ if(NULL == buf)
+ {
+ return;
+ }
+ const char s[2] = ",";
+ char *token;
+ token = strtok(buf, s);
+ return;
+}
+
extern "C" void
RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
RequestInfo *pRI;
@@ -4086,7 +4141,6 @@
if(strstr((const char*)response,"+CGMR")){
lynq_get_version();
}
- /*lei add for at+cgmr*/
int n = write(ttyGS3_fd,response,responselen);
if(n<0)
{
@@ -4094,7 +4148,77 @@
}
printf("n = %d\n",n);
}
+ if(pRI->lynqEvent==2)
+ {
+ if(strstr((const char*)response,"+EGMR")){
+ lynq_parse_EGMR(response);
+ }
+ int n = write(ttyGS3_fd,response,responselen);
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ printf("n = %d\n",n);
+ }
+ break;
}
+ /*lei add for AT+CGSN 2022/8/4*/
+ case RIL_REQUEST_DEVICE_IDENTITY:
+ {
+ int resp_type;
+ int request;
+ int slot_id;
+ int error1;
+ int num;
+ char imei[32] = {0};
+ if(pRI->lynqEvent==1)
+ {
+ //printf("lei test %s\n" ,printBuf);
+ p.setDataPosition(0);
+ if(p.dataAvail() > 0)
+ {
+ p.readInt32(&resp_type);
+ p.readInt32(&request);
+ p.readInt32(&slot_id);
+ p.readInt32(&error1);
+ if(!error1)
+ {
+ p.readInt32(&num);
+ char * test = strdupReadString(p);
+ parse_imei(test);
+ if(imei_cnt % 2 == 0)
+ {
+ sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
+ int n = write(ttyGS3_fd,imei,strlen(imei));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ }
+ else
+ {
+ sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
+ int n = write(ttyGS3_fd,imei,strlen(imei));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ char eBuf[64] = {0};
+ sprintf(eBuf,"OK\n");
+ n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ }
+ free(test);
+ imei_cnt++;
+ }
+ }
+ }
+ break;
+ }
+ /*lei add for AT+CGSN 2022/8/4*/
default:
break;
}
@@ -4515,6 +4639,8 @@
if(wakeup_result)
{
/*RING pin pull low level to wake up host*/
+ system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+ usleep(120*1000);
system("echo out 4 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
}
/*lei add for at+mwakeupcfg szzt*/
@@ -4538,6 +4664,8 @@
if(wakeup_result)
{
/*RING pin pull low level to wake up host*/
+ system("echo out 4 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+ usleep(120*1000);
system("echo out 4 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
}
/*lei add for at+mwakeupcfg szzt*/
@@ -6298,7 +6426,7 @@
printf("open ttyGS3 failure!!!\n");
//printf("%s\n",strerr(errno));
perror("--test--");
- kill(0, SIGKILL);
+ //kill(0, SIGKILL);
}
RLOGD("[%s]open %s successfully!!!\n",__FUNCTION__,ttyname(ttyGS3_fd));
while(1)
diff --git a/src/lynq/framework/lynq-ril-service/src/sim.cpp b/src/lynq/framework/lynq-ril-service/src/sim.cpp
index a6032a2..bcef49d 100755
--- a/src/lynq/framework/lynq-ril-service/src/sim.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/sim.cpp
@@ -42,9 +42,40 @@
#include "sim.h"
#include "common.h"
#include "Radio_capability_switch_util.h"
+/*Warren add for FAW platform 2021/12/08 start*/
+#include "lynq_common.h"
+/*Warren add for FAW platform 2021/12/08 end*/
#undef LOG_TAG
#define LOG_TAG "DEMO_SIM"
+/*Warren add for FAW platform 2021/12/08 start*/
+
+static void sendAtTottyGS(int error)
+{
+ char eBuf[64] = {0};
+ bzero(eBuf, 64);
+ if(error==RIL_E_SUCCESS)
+ {
+ sprintf(eBuf,"\nOK\n\0");
+ }
+ else
+ {
+ sprintf(eBuf,"\n+CME ERROR: %d\n\0",error);
+ }
+ if(ttyGS3_fd == -1)
+ {
+ return;
+ }
+ int n = write(ttyGS3_fd,eBuf,strlen(eBuf));//if no usb will block
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
+ if(n<0)
+ {
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
+ perror("lynq resp write:");
+ }
+ return;
+}
+/*Warren add for FAW platform 2021/12/08 end*/
static char* checkParameters(char* para){
if (strcasecmp(para, "null") == 0) {
@@ -182,15 +213,36 @@
free(pRI);
RLOGD("the paremeters numbers isn't right , so return");
android::emResultNotify("Set failed.\n");
+ /*Warren add for FAW platform 2021/12/08 start*/
+ //printf("set failed\n");
+ if(argv[2] == NULL)
+ {
+ sendAtTottyGS(2);
+ }
+ /*Warren add for FAW platform 2021/12/08 end*/
return -1;
}
if(Radio_capability_switch_util::is_sim_inserted(atoi(argv[1]))) {
set_default_sim_all(atoi(argv[1]));
android::emResultNotify("Set successful.\n");
+ /*Warren add for FAW platform 2021/12/08 start*/
+ //printf("set successful\n");
+ if(argv[2] == NULL)
+ {
+ sendAtTottyGS(0);
+ }
+ /*Warren add for FAW platform 2021/12/08 end*/
free(pRI);
} else {
RLOGD("Set default all fail, SIM card absent");
+ /*Warren add for FAW platform 2021/12/08 start*/
+ if(argv[2] == NULL)
+ {
+ sendAtTottyGS(11);
+ }
+ //printf("Set default all fail, SIM card absent\n");
+ /*Warren add for FAW platform 2021/12/08 end*/
android::emResultNotify("Set default all fail, SIM card absent.\n");
free(pRI);
}
diff --git a/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp b/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
index 9e16b5e..93e123c 100755
--- a/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
@@ -128,7 +128,15 @@
int sendATCMD(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI)
{
android::Parcel p;
- char *cmd = (char *)argv[1];
+ char *cmd = NULL;
+ if(!strcmp(argv[1],"AT+CFSN"))
+ {
+ cmd = "AT+EGMR=0,5";
+ }
+ else
+ {
+ cmd = (char *)argv[1];
+ }
size_t pos = p.dataPosition();
if (cmd == NULL){
RLOGD("sendATCMD:cmd is null\n");