[feature]at of sleep
Change-Id: I89811f7c7284a6d058ec1c8febbd6c03ebd2a775
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 0ee18b9..1b1308d 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
@@ -15,4 +15,9 @@
{LYNQ_REQUEST_FACTORY,"LYNQFACTORY",7},
{LYNQ_REQUEST_LINFO,"LINFO",7},
{LYNQ_REQUEST_FOTA,"LYNQFOTA",7},
+/*lei add*/
+{LYNQ_REQUEST_CSCLK,"CSCLK",7},
+{LYNQ_REQUEST_MPWRSM,"MPWRSM",7},
+{LYNQ_REQUEST_MWAKEUPCFG,"MWAKEUPCFG",7},
+/*lei add*/
{-1,NULL,0},
\ No newline at end of file
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 a850d03..9f302c4 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
@@ -35,6 +35,12 @@
pthread_mutex_t lynq_at_mutex= PTHREAD_MUTEX_INITIALIZER;
+/*lei add for PMS szzt*/
+int g_lynq_csclk = 0;
+int g_lynq_mpwrsm = 0;//at+mpwrsm need
+int g_lynq_mwakeupcfg = 0;//at+mwakeupcfg need
+/*lei add for PMS szzt*/
+
//int lynqSendToRil(int argc,char *argv[],int uToken);
usb_at_transfer_t *lynqFindId(char *cmd)
{
@@ -78,6 +84,14 @@
{
return LYNQ_GOTO_AT;
}
+ /*lei add szzt*/
+ case LYNQ_REQUEST_CSCLK:
+ case LYNQ_REQUEST_MPWRSM:
+ case LYNQ_REQUEST_MWAKEUPCFG:
+ {
+ return LYNQ_GOTO_PMS;
+ }
+ /*lei add szzt*/
case LYNQ_REQUEST_ATD:
case LYNQ_REQUEST_LAPNACT:
case LYNQ_REQUEST_ELAPNACT:
@@ -236,41 +250,41 @@
else
{
RLOGD("sp test 01");
- if(!strcmp(cmd, "ATA")){
- lynqSetArgv(&(argv[0]),&Point,"ATA");
+ if(!strcmp(cmd, "ATA")){
+ lynqSetArgv(&(argv[0]),&Point,"ATA");
return 3;
}
if(!strcmp(cmd, "AT")){
- lynqSetArgv(&(argv[0]),&Point,"AT");
+ lynqSetArgv(&(argv[0]),&Point,"AT");
return 3;
}
/*UNKNOW*/
else if(!strncmp(cmd, "ATD", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATD");
+ lynqSetArgv(&(argv[0]),&Point,"ATD");
argv[3] = test+3;
return 4;
}
else if(!strncmp(cmd, "ATE", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATE");
+ lynqSetArgv(&(argv[0]),&Point,"ATE");
argv[3] = test+3;
return 4;
}
else if(!strcmp(cmd, "ATH")){
- lynqSetArgv(&(argv[0]),&Point,"ATH");
+ lynqSetArgv(&(argv[0]),&Point,"ATH");
return 3;
}
else if(!strncmp(cmd, "ATI", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATI");
+ lynqSetArgv(&(argv[0]),&Point,"ATI");
argv[3] = test+3;
return 4;
}
else if(!strncmp(cmd, "ATL", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATL");
+ lynqSetArgv(&(argv[0]),&Point,"ATL");
argv[3] = test+3;
return 4;
}
else if(!strncmp(cmd, "ATO", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATO");
+ lynqSetArgv(&(argv[0]),&Point,"ATO");
argv[3] = test+3;
return 3;
}
@@ -278,22 +292,22 @@
/*
*/
else if(!strncmp(cmd, "ATQ", 3)){
- lynqSetArgv(&(argv[0]),&Point,"ATQ");
+ lynqSetArgv(&(argv[0]),&Point,"ATQ");
argv[3] = test+3;
return 4;
}
else if(!strncmp(cmd, "ATS3", 4)){
- lynqSetArgv(&(argv[0]),&Point,"ATS3");
+ lynqSetArgv(&(argv[0]),&Point,"ATS3");
argv[3] = test+4;
return 4;
}
else if(!strncmp(cmd, "ATS4", 4)){
- lynqSetArgv(&(argv[0]),&Point,"ATS4");
+ lynqSetArgv(&(argv[0]),&Point,"ATS4");
argv[3] = test+4;
return 4;
}
else if(!strncmp(cmd, "ATS5", 4)){
- lynqSetArgv(&(argv[0]),&Point,"ATS5");
+ lynqSetArgv(&(argv[0]),&Point,"ATS5");
argv[3] = test+4;
return 4;
}
@@ -301,17 +315,17 @@
/*
*/
else if(!strncmp(cmd, "ATS7", 4)){
- lynqSetArgv(&(argv[0]),&Point,"ATS7");
+ lynqSetArgv(&(argv[0]),&Point,"ATS7");
argv[3] = test+4;
return 4;
}
else if(!strncmp(cmd, "ATS8", 4)){
- lynqSetArgv(&(argv[0]),&Point,"ATS8");
+ lynqSetArgv(&(argv[0]),&Point,"ATS8");
argv[3] = test+4;
return 4;
}
else if(!strncmp(cmd, "ATS10", 5)){
- lynqSetArgv(&(argv[0]),&Point,"ATS10");
+ lynqSetArgv(&(argv[0]),&Point,"ATS10");
argv[3] = test+5;
return 4;
}
@@ -601,28 +615,300 @@
{
int type = atoi(argv[2]);
- if(type==2){
- lynq_output_LINFO_all();
+ if(type==2){
+ lynq_output_LINFO_all();
syncRespToUsb(0);
}
- else if(type==0){
+ else if(type==0){
int status = atoi(argv[3]);
if(status==1 || status==0){
lynq_output_LINFO_enable=status;
- lynq_output_info("+LINFO: Report switch when key information changed is set: %d\n",lynq_output_LINFO_enable);
+ lynq_output_info("+LINFO: Report switch when key information changed is set: %d\n",lynq_output_LINFO_enable);
syncRespToUsb(0);
- }
+ }
else {
- lynq_output_info("parameter error\n");
- syncRespToUsb(100);
+ lynq_output_info("parameter error\n");
+ syncRespToUsb(100);
}
}
- else if(type==1){
- lynq_output_info("+LINFO: (0-1)\n");
+ else if(type==1){
+ lynq_output_info("+LINFO: (0-1)\n");
syncRespToUsb(0);
}
- else {
- lynq_output_info("parameter error\n");
+ else {
+ lynq_output_info("parameter error\n");
syncRespToUsb(100);
}
}
+
+/**
+ * @brief auto_suspend
+ * @param argv [Type]:in My Param doc
+ */
+static void auto_suspend(char *argv)
+{
+ if(NULL == argv)
+ {
+ return;
+ }
+ 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);
+ return;
+}
+
+/**
+ * @brief check_pin_level
+ * @param buf Type:[in]
+ * @param flag Type:[in]
+ * @return int
+ */
+static int check_pin_level(char *buf, int flag)
+{
+ if(NULL == buf)
+ {
+ return -1;
+ }
+ if(flag > strlen(buf))
+ {
+ return -1;
+ }
+ char *p = buf;
+ int tmp = 0;
+ while(*p != '\0')
+ {
+ if(tmp != flag)
+ {
+ tmp++;
+ *p ++;
+ }
+ else
+ {
+ if(*p == '1')
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ }
+}
+
+/**
+ * @brief check_dtr_level 0 is low, 1 is high
+ * @return int
+ */
+static int cat_pin_level(char *pin)
+{
+ 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");
+ fp = popen(cmd, "r");
+ if(NULL == fp)
+ {
+ return -1;
+ }
+ fgets(buf, sizeof(buf), fp);
+ if(!check_pin_level(buf, 7))//mean high level
+ {
+ pclose(fp);
+ return 1;
+ }
+ pclose(fp);
+ return 0;//mean
+}
+
+/**
+ * @brief display_get_mode
+ * @param argv [Type]:in My Param doc
+ */
+static void display_get_mode(char *argv[])
+{
+ RLOGD("display_get_mode");
+ if(!strcmp(argv[0], "CSCLK"))
+ {
+ lynq_output_info("+CSCLK: %d\n", g_lynq_csclk);
+ }
+ else if(!strcmp(argv[0], "MPWRSM"))
+ {
+ lynq_output_info("+MPWRSM: %d\n", g_lynq_mpwrsm);
+ }
+ else if(!strcmp(argv[0], "MWAKEUPCFG"))
+ {
+ lynq_output_info("+MWAKEUPCFG: %d\n", g_lynq_mwakeupcfg);
+ }
+ syncRespToUsb(0);
+ return;
+}
+
+/**
+ * @brief display_list_modeget_mode
+ * @param argv [Type]:in My Param doc
+ */
+static void display_list_mode(char *argv[])
+{
+ RLOGD("display_list_mode\n");
+ if(!strcmp(argv[0], "CSCLK"))
+ {
+ RLOGD("CSCLK list mode\n");
+ lynq_output_info("+CSCLK: (0-1)\n");
+ }
+ else if(!strcmp(argv[0], "MPWRSM"))
+ {
+ RLOGD("MPWRSM list mode\n");
+ lynq_output_info("+MPWRSM: (0-1)\n");
+ }
+ else if(!strcmp(argv[0], "MWAKEUPCFG"))
+ {
+ RLOGD("MWAKEUPCFG list mode\n");
+ lynq_output_info("+MWAKEUPCFG: (0-1)\n");
+ }
+ RLOGD("get list mode\n");
+ syncRespToUsb(0);
+ return;
+}
+
+/**
+ * @brief display_set_mode
+ * @param argv [Type]:in My Param doc
+ */
+static void display_set_mode(char *argv[])
+{
+ RLOGD("display_set_mode\n");
+ if(!strcmp(argv[0], "CSCLK"))
+ {
+ g_lynq_csclk = atoi(argv[3]);
+ if(g_lynq_csclk == 1)
+ {
+ /*if dtr is 1, at+mpwrsm will check dtr pin level*/
+ RLOGD("dtr is 1, at+mpwrsm will check dtr pin level\n");
+ }
+ else if(g_lynq_csclk == 0)
+ {
+ /*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");
+ g_lynq_mpwrsm = atoi(argv[3]);
+ /*AT+MPWRSM disable*/
+ 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]);
+ }
+ /*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]);
+ }
+ else
+ {
+ syncRespToUsb(10);//dtr pin is low level, so can't entry sleep mode
+ return;
+ }
+
+ }
+ #if 0
+ /*WAKEUP_IN pin*/
+ else if(g_lynq_csclk == 2)
+ {
+ if(g_lynq_wakeup_in == 0)
+ {
+ /*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");
+ }
+ /*check WAKEUP_IN level*/
+ else if (g_lynq_wakeup_in == 1)
+ {
+ 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;
+ }
+ }
+ }
+ #endif
+ }
+ else
+ {
+ syncRespToUsb(100);
+ return;
+ }
+ }
+ else if(!strcmp(argv[0], "MWAKEUPCFG"))
+ {
+ g_lynq_mwakeupcfg = atoi(argv[3]);
+ }
+ syncRespToUsb(0);
+}
+
+/**
+ * @brief when user input at of sleep,it will work
+ * @param argv My Param doc
+ */
+void lynq_pms(char *argv[])
+{
+ RLOGD("lynq_pms works\n");
+ int type = atoi(argv[2]);
+ if(type == 2)//get mode
+ {
+ RLOGD("get mode\n");
+ display_get_mode(argv);
+ }
+ else if(type == 0)//set mode
+ {
+ RLOGD("set mode\n");
+ display_set_mode(argv);
+ }
+ else if(type == 1)//get list mode
+ {
+ RLOGD("get list mode\n");
+ display_list_mode(argv);
+ }
+ 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 513431b..5c988ad 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
@@ -33,6 +33,8 @@
#define LYNQ_GOTO_LINFO_REQ 7
/*fota*/
#define LYNQ_GOTO_FOTA 8
+/*PMS*/
+#define LYNQ_GOTO_PMS 9
#define LYNQ_APN_LEN_MAX 100
#define LYNQ_APNTPYE_LEN_MAX 50
@@ -60,6 +62,11 @@
#define LYNQ_REQUEST_LINFO (LYNQ_VERSION +17)
#define LYNQ_REQUEST_SCREEN_STATE (LYNQ_VERSION +18)
#define LYNQ_REQUEST_FOTA (LYNQ_VERSION +19)
+/*lei add*/
+#define LYNQ_REQUEST_CSCLK (LYNQ_VERSION +20)
+#define LYNQ_REQUEST_MPWRSM (LYNQ_VERSION +21)
+#define LYNQ_REQUEST_MWAKEUPCFG (LYNQ_VERSION +22)
+/*lei add*/
#define LYNQ_USER_REQUEST_GNSS (LYNQ_VERSION +100)
#define LYNQ_USER_REQUEST_OTHRE (LYNQ_VERSION +101)
@@ -90,6 +97,23 @@
extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX];
extern int apn_count;
extern char lynq_at[LYNQ_AT_LEN_MAX];
+/*lei add for PMS*/
+typedef enum
+{
+ call_event = 1,
+ sms_event = 2
+}lynq_urc_event;
+
+extern int g_lynq_csclk;
+extern int g_lynq_mpwrsm;//at+mpwrsm need
+/* g_lynq_mwakeupcfg explain:
+0(00):close wakeup external MCU function(default value)
+1(01):call event wakeup external MCU function
+2(10):sms event wakeup external MCU function
+3(11):call and sms event wakeup external MCU function
+*/
+extern int g_lynq_mwakeupcfg;//at+mwakeupcfg need
+/*lei add for PMS*/
usb_at_transfer_t *lynqFindId(char *cmd);
usb_cmd_t * lynqFindUsbEvent(char *cmd);
int transferAtToRequest(char *cmd);
@@ -109,4 +133,7 @@
void lynqAtRespWatingEvent();
int syncRespToUsb(int error_code);
void lynqInfo(char*argv[]);
+/*lei add for PMS*/
+void lynq_pms(char *argv[]);
+/*lei add for PMS*/
#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index 0b468c3..74de6c2 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -4437,7 +4437,11 @@
}
#endif
appendPrintBuf("[UNSL][SIM%d]< %s", soc_id, requestToString(unsolResponse));
-
+ /*lei add for at+mwakeupcfg*/
+ int call_active = 1;
+ int sms_active = 2;
+ int wakeup_result = 0;
+ /*lei add for at+mwakeupcfg*/
Parcel p;
p.writeInt32 (RESPONSE_UNSOLICITED);
p.writeInt32 (unsolResponse);
@@ -4488,9 +4492,32 @@
//unsol trigger other things.
switch(unsolResponse) {
- //case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
+
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
+ /*warren modify for t800 service start 2021/12/12*/
//ARspRequest(RIL_REQUEST_GET_CURRENT_CALLS, soc_id);
- //break;
+ /*warren modify for t800 service start 2021/12/12*/
+ /*lei add for at+mwakeupcfg szzt
+
+ explain:
+ wakeup_result = 0:Mask the reporting of URC events wakeup_result != 0:Mask URC based on the configuration
+ when g_lynq_mwakeupcfg is 2(binary system is 00000010) ,and sms_event is 2(00000010 bit)
+ 00000010 & 00000010 = 00000010(b) = 2
+ 2 != 0,so ring pin pull low level to wake up host,otherwise do nothing
+
+ When the g_lynq_mwakeupcfg is set to 1, only phone calls can wake up the host,The sample is as follows
+ 00000001 & 00000001 = 00000001
+ 00000001 & 00000010 = 00000000
+ */
+ wakeup_result = g_lynq_mwakeupcfg & call_event;
+ if(wakeup_result)
+ {
+ /*RING pin pull low level to wake up host*/
+ system("echo out 4 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+ }
+ /*lei add for at+mwakeupcfg szzt*/
+ break;
+
case RIL_UNSOL_CALL_RING:
callRing(soc_id);
break;
@@ -4504,6 +4531,14 @@
responseNewSMS((const char*)data, datalen,soc_id,unsolResponse,p);
unreadStatusWriteSMSToSim((const char*)data, datalen, soc_id);
sendSMSACK(soc_id);
+ /*lei add for at+mwakeupcfg szzt*/
+ wakeup_result = g_lynq_mwakeupcfg & sms_event;
+ if(wakeup_result)
+ {
+ /*RING pin pull low level to wake up host*/
+ system("echo out 4 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+ }
+ /*lei add for at+mwakeupcfg szzt*/
break;
case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS:
{
@@ -6301,16 +6336,16 @@
{
argc = lynqParseUsbCommand(buffer,argv,tempbuf,buf_parser,MAX_ARGS);
if(argc<0)
- {
- bzero(eBuf, 1024);
- sprintf(eBuf,"LYNQ:%s not support!!!\n",buffer);
- int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
- if(n<0)
{
- perror("lynq resp write:");
- }
- RLOGD("n = %d\n",n);
- continue;
+ bzero(eBuf, 1024);
+ sprintf(eBuf,"LYNQ:%s not support!!!\n",buffer);
+ int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ RLOGD("n = %d\n",n);
+ continue;
}
usb_at_transfer_t *atCmd = lynqFindId(argv[0]);
if(atCmd==NULL)
@@ -6386,11 +6421,17 @@
// lynq_atfota_test(argv);
// break;
// }
+ /*lei add*/
+ case LYNQ_GOTO_PMS:
+ {
+ lynq_pms(argv);
+ break;
+ }
+ /*lei add*/
default:
break;
}
}
-
}
}
close(ttyGS3_fd);