[Feature][T3TSK-6][AT]If the sleep command is configured,it will take effect automatically after the next startup
[Bugfix][SZZT-85][AT]if only one sim card is inserted into the module,at+mpwrsm=1 will return +CME ERROR:11
[Bugfix][SZZT-72][telephony-sh]can't read IMEI
Change-Id: I9f1bd828cbbaadea4c2530191496bbd246b05a58
diff --git a/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf b/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
index 5c69c47..bf490ad 100755
--- a/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
+++ b/meta/meta-mediatek-mt2731/conf/machine/auto2731evb-ivt-main.conf
@@ -50,7 +50,10 @@
# [S] ss / dsss / dsds; [N] dsda / tsts / qsqs
MTK_MULTI_SIM_SUPPORT = "dsds"
# [S] C/Lf/Lt/W/T/G, Lf/Lt/W/T/G, Lf/Lt/W/G; [N] Lf/Lt/T/G, W/T/G, W/G, T/G, G
-MTK_PROTOCOL1_RAT_CONFIG = "C/Lf/Lt/W/T/G"
+#lei add for imei
+#MTK_PROTOCOL1_RAT_CONFIG = "C/Lf/Lt/W/T/G"
+MTK_PROTOCOL1_RAT_CONFIG = "Lf/Lt/W/T/G"
+#lei add for imei
MTK_PROTOCOL2_RAT_CONFIG = "L/W/G"
#MTK_PROTOCOL3_RAT_CONFIG = "G"
# yes / no
diff --git a/src/lynq/framework/lynq-atsvc/src/common.cpp b/src/lynq/framework/lynq-atsvc/src/common.cpp
index 2074714..83bee1a 100755
--- a/src/lynq/framework/lynq-atsvc/src/common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/common.cpp
@@ -48,7 +48,7 @@
#define UNKOWN_VALUE (-1)
/*Warren add for FAW 2021/11/1 start*/
-extern int ttyGS3_fd = -1;
+int ttyGS3_fd = -1;
/*Warren add for FAW 2021/11/1 end*/
@@ -102,6 +102,28 @@
#endif
} RIL_RadioNW;
+void parse_version_buf(char *buf){
+ char *p = buf;
+ int flag = 0;
+ int recv = 0;
+ int tmp = -1;
+ while (*p != '\0')
+ {
+ recv++;
+ if(*p == '"'){
+ tmp = recv;
+ }
+ if(tmp >= 0){
+ buf[flag++] = buf[tmp++];
+ if(buf[flag-1] == '\"'){
+ buf[flag-1] = '\0';
+ }
+ }
+ *p++;
+ }
+ return;
+}
+
const char * cardStateToString(int cardStatus)
{
switch(cardStatus) {
@@ -327,12 +349,15 @@
void set_default_sim_all(int slot_id){
RLOGD("set_default_sim_all: %d", slot_id);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
default_sim_all = slot_id;
set_default_sim_all_except_data(slot_id);
set_default_sim_data(slot_id);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
}
int get_default_sim_all(){
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
return default_sim_all;
}
diff --git a/src/lynq/framework/lynq-atsvc/src/common.h b/src/lynq/framework/lynq-atsvc/src/common.h
index 2131984..05fe74c 100755
--- a/src/lynq/framework/lynq-atsvc/src/common.h
+++ b/src/lynq/framework/lynq-atsvc/src/common.h
@@ -148,10 +148,13 @@
extern int modemStatus;
/*Warren add for SZZT 2021/11/14 end*/
+
+
extern int lynq_output_LINFO_enable;
void lynq_output_info(const char* format,...);
void lynq_output_LINFO(const char* format,...);
void lynq_output_LINFO_all();
+void parse_version_buf(char *buf);
typedef struct {
char *name; /* User printable name of the function. */
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq-atsvc.service b/src/lynq/framework/lynq-atsvc/src/lynq-atsvc.service
old mode 100644
new mode 100755
index f9faa2d..a39f000
--- a/src/lynq/framework/lynq-atsvc/src/lynq-atsvc.service
+++ b/src/lynq/framework/lynq-atsvc/src/lynq-atsvc.service
@@ -3,7 +3,7 @@
After=wmtd.service
[Service]
-StandardOutput =syslog+console
+StandardOutput=syslog+console
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/lynq-atsvc
diff --git a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
index 6494873..4e87815 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.cpp
@@ -11,6 +11,7 @@
#include <stdio.h>
#include <string.h>
#include <log/log.h>
+#include <fcntl.h>
#include "lynq_common.h"
#include "lynq_user.h"
#include "common.h"
@@ -20,6 +21,7 @@
#include <sys/time.h>
#include "utils.h"
#include "Phone_utils.h"
+#include "pms/lynq_pms.h"
usb_cmd_t Usb_commands[] = {
#include "lynq_commands.h"
};
@@ -40,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);
@@ -625,6 +630,7 @@
perror("lynq resp write:");
return 0;
}
+ pclose(FP);
syncRespToUsb(0);
return 0;
}
@@ -697,7 +703,9 @@
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;
}
@@ -713,6 +721,7 @@
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;
}
@@ -720,7 +729,7 @@
* @brief auto_suspend
* @param argv [Type]:in My Param doc
*/
-static void auto_suspend(int argv)
+void auto_suspend(int argv)
{
pthread_t thid;
pthread_attr_t a;
@@ -731,16 +740,24 @@
RLOGD("pthread_create error!!!");
return;
}
- system("mdlogctl stop");
- system("echo 0 > /dev/wmtWifi");
- system("echo 7 9 0 > /proc/driver/wmt_dbg");
+ int res = system("mdlogctl stop");
+ //printf("auto_suspend mdlogctl stop ret %d\n", res);
+ res = system("echo 0 > /dev/wmtWifi");
+ //printf("auto_suspend echo 0 > /dev/wmtWifi ret %d\n", res);
+ res = system("echo 7 9 0 > /proc/driver/wmt_dbg");
+ //printf("auto_suspend echo 7 9 0 > /proc/driver/wmt_dbg ret %d\n", res);
/*If have two cards*/
/*Query the current card*/
int id = get_default_sim_all();
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
lynq_switch_card("1");
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
lynq_shutdown_modem();
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
lynq_switch_card("0");
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
lynq_shutdown_modem();
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
if(id == RIL_SOCKET_2)
{
lynq_switch_card("1");
@@ -750,18 +767,64 @@
{
//autosleep
RLOGD("auto_suspend autosleep");
- system("echo mem > /sys/power/autosleep");
+ //printf("auto_suspend autosleep");
+ res = system("echo mem > /sys/power/autosleep");
+ //printf("auto_suspend echo 7 9 0 > /proc/driver/wmt_dbg ret %d\n", res);
}
else if (argv==0)
{
//state
RLOGD("state autosleep");
- system("echo mem > /sys/power/state");
+ //printf("state autosleep");
+ res = system("echo mem > /sys/power/state");
+ //printf("auto_suspend echo 7 9 0 > /proc/driver/wmt_dbg ret %d\n", res);
}
return;
}
+void check_autosleep(int testnum)
+{
+ if(ttyGS3_fd != -1)
+ {
+ close(ttyGS3_fd);
+ }
+ //sleep(1);//for wait g_lynq_mwakeupcfg change
+ if(!sleep_end)//must be config and need wait autosleep
+ {
+ if(g_lynq_mwakeupcfg)//means need autosleep,so wait
+ {
+ /*wait*/
+ while (1)
+ {
+ 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);
+ }
+ /*wait*/
+ //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;
+}
+
/**
* @brief check_dtr_level 0 is low, 1 is high
* @return int
@@ -860,6 +923,11 @@
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*/
@@ -880,6 +948,7 @@
return;
}
g_lynq_mpwrsm = atoi(argv[3]);
+ g_pmsManagement->lynq_write_pms_to_memory(argv[0], g_lynq_mpwrsm);
/*AT+MPWRSM state*/
if(!strcmp(argv[3], "0"))
{
@@ -950,6 +1019,7 @@
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-atsvc/src/lynq_common.h b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
index 95e8584..4cf1b15 100755
--- a/src/lynq/framework/lynq-atsvc/src/lynq_common.h
+++ b/src/lynq/framework/lynq-atsvc/src/lynq_common.h
@@ -123,11 +123,24 @@
*/
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);
int routeCmd(int request);
diff --git a/src/lynq/framework/lynq-atsvc/src/main.cpp b/src/lynq/framework/lynq-atsvc/src/main.cpp
index 57e43eb..3bf12f6 100755
--- a/src/lynq/framework/lynq-atsvc/src/main.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/main.cpp
@@ -36,8 +36,15 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <signal.h>
+#include <pthread.h>
+#include <sys/socket.h>
+#include <linux/netlink.h>
#include "common.h"
+#include "lynq_common.h"
+#include "pms/lynq_pms.h"
+#include "network.h"
+#define CHECK_TIME 5 //check whether online
#define ERR_EXIT(m) \
do\
{\
@@ -62,6 +69,7 @@
#undef LOG_TAG
#define LOG_TAG "DEMO_MAIN"
+#define UEVENT_BUFFER_SIZE 2048
static struct RIL_Env s_rilEnv = {
RIL_onRequestComplete,
@@ -94,44 +102,173 @@
return;
}
-void test(int sigino, siginfo_t* msg, void*mycat)
-{
- printf("\nsigino:%d\n",sigino);
- RLOGD("\nsigino:%d\n",sigino);
- //lynq_ril_deinit();
- //exit(0);
-}
+extern int sleep_flag;
+
+extern pms_manager * g_pmsManagement;
void signal_handler_fun(int signum) {
- RLOGD("catch signal %d\n", signum);
- /*lei add fow cv2x 2022/5/17*/
- /*reopen ttyGS3*/
- ttyGS3_fd = open("/dev/ttyGS3",O_RDWR);
- RLOGD("/dev/ttyGS3\n");
- if(ttyGS3_fd==-1)
- {
- RLOGE("open ttyGS3 failure!!!");
- //kill(0, SIGKILL);
- }
- /*reopen ttyGS3*/
- /*lei add fow cv2x 2022/5/17*/
+ RLOGD("signal_handler_fun catch signal %d\n", signum);
+ //printf("signal_handler_fun catch signal %d\n", signum);
+ check_autosleep(signum);
+ //RLOGD("signal_handler_fun catch signal %d %d\n", signum, __LINE__);
+ //printf("signal_handler_fun catch signal %d %d\n", signum, __LINE__);
+ 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)
+{
+ /*ensure inject 2G/3G/4G*/
+ int slot_id = get_default_sim_all();
+ int i = 3;
+ while (i)
+ {
+ if(!sleep_flag)
+ {
+ RLOGD("function %s no network\n", __FUNCTION__);
+ printf("%s no network\n", __FUNCTION__);
+ }
+ else
+ {
+ RLOGD("%s network is online\n", __FUNCTION__);
+ printf("%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--;
+ }
+ printf("%s i %d\n",__FUNCTION__, i);
+ return i;
+}
+
+/**
+ * @brief Get the prop
+ *
+ * @param ptr
+ */
+static char* get_pro(const char *ptr)
+{
+ FILE *fp;
+ static char res[128] = {};
+ bzero(res, 128);
+ fp = popen(ptr,"r");
+ fgets(res,sizeof(res),fp);
+ printf("buffer %s",res);
+ pclose(fp);
+ parse_version_buf(res);
+ return res;
+}
+
+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");
+ //printf("means user must be configed it go to sleep\n");
+ auto_suspend(g_lynq_mpwrsm);
+ //sleep(4);
+ }
+ }
+ else
+ {
+ RLOGD("can't autosleep because network is unreable %d\n", sleep_flag);
+ //printf("can't autosleep because network is unreable %d\n", sleep_flag);
+ }
+ sleep_end = 1;
+ return;
+}
+
+/*check usb connect/disconnect*/
+void * hot_usb(void * arg)
+{
+ struct sockaddr_nl client;
+ struct timeval tv;
+ int CppLive, rcvlen, ret;
+ fd_set fds;
+ int buffersize = 1024;
+ CppLive = socket(AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);
+ memset(&client, 0, sizeof(client));
+ client.nl_family = AF_NETLINK;
+ client.nl_pid = getpid();
+ client.nl_groups = 1; /* receive broadcast message*/
+ setsockopt(CppLive, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize));
+ bind(CppLive, (struct sockaddr*)&client, sizeof(client));
+ while (1)
+ {
+ char buf[UEVENT_BUFFER_SIZE] = { 0 };
+ FD_ZERO(&fds);
+ FD_SET(CppLive, &fds);
+ tv.tv_sec = 0;
+ tv.tv_usec = 100 * 1000;
+ ret = select(CppLive + 1, &fds, NULL, NULL, &tv);
+ if(ret < 0)
+ continue;
+ if(!(ret > 0 && FD_ISSET(CppLive, &fds)))
+ continue;
+ /* receive data */
+ rcvlen = recv(CppLive, &buf, sizeof(buf), 0);
+ if (rcvlen > 0)
+ {
+ check_autosleep(777);
+ /*You can do something here to make the program more perfect!!!*/
+ }
+ }
+ close(CppLive);
+ return NULL;
}
int main(int argc, char **argv) {
system("route add -host 255.255.255.255 dev lo");
- FILE *FP;
- char BUFFER[64]={};
- /*lei add for cv2x 2022/5/17*/
- signal(SIGTERM,signal_handler_fun);
signal(SIGHUP,signal_handler_fun);
- /*lei add for cv2x 2022/5/17*/
- // signal(SIGTERM,SIG_IGN);
- // signal(SIGHUP,SIG_IGN);
- FP = popen("cat /sys/kernel/ccci/boot","r");
- fgets(BUFFER,sizeof(BUFFER),FP);
- RLOGD("liulei buffer %s",BUFFER);
- modemStatus = atoi(&BUFFER[4]);
+ /*lei add for hot usb plug in 2022/8/27*/
+ pthread_t thid;
+ pthread_attr_t a;
+ pthread_attr_init(&a);
+ pthread_attr_setdetachstate(&a, PTHREAD_CREATE_DETACHED);
+ int ret = pthread_create(&thid, &a, hot_usb, NULL);
+ if(ret != 0){
+ RLOGD("pthread_create error!!!");
+ return 0;
+ }
+ /*lei add for hot usb plug in 2022/8/27*/
+ /*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);
+ //printf("g_lynq_mpwrsm %d\n", g_lynq_mpwrsm);
+ RLOGD("CSCLK %d\n", g_lynq_csclk);
+ //printf("CSCLK %d\n", g_lynq_csclk);
+ RLOGD("MWAKEUPCFG %d\n", g_lynq_mwakeupcfg);
+ //printf("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) {
@@ -159,7 +296,6 @@
RLOGE("dlopen failed: %s", dlerror());
exit(EXIT_FAILURE);
}
-
android::RIL_startEventLoop();
//android::startATCILoop();
//android::startPMLoop();
@@ -183,6 +319,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-atsvc/src/makefile b/src/lynq/framework/lynq-atsvc/src/makefile
index f3f7b8c..744748a 100755
--- a/src/lynq/framework/lynq-atsvc/src/makefile
+++ b/src/lynq/framework/lynq-atsvc/src/makefile
@@ -71,6 +71,7 @@
-I$(LOCAL_PATH)/fota \
-I$(LOCAL_PATH)/temp \
-I$(LOCAL_PATH)/time \
+ -I$(LOCAL_PATH)/pms \
-I$(ROOT)$(includedir)/ \
-I$(ROOT)$(includedir)/liblog \
-I$(ROOT)$(includedir)/liblynq-thermal \
@@ -117,6 +118,7 @@
-lnandapi \
-llynq-thermal \
-llynq-systime \
+ -lsqlite3 \
ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
LOCAL_LIBS += -luciwrapper
@@ -125,7 +127,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 log/*.cpp rndis/*.cpp factory/*.cpp temp/*.cpp time/*.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 log/*.cpp rndis/*.cpp factory/*.cpp temp/*.cpp time/*.cpp pms/*.cpp)
EXECUTABLE = lynq-atsvc
diff --git a/src/lynq/framework/lynq-atsvc/src/pms/lynq_pms.cpp b/src/lynq/framework/lynq-atsvc/src/pms/lynq_pms.cpp
new file mode 100755
index 0000000..6dca887
--- /dev/null
+++ b/src/lynq/framework/lynq-atsvc/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_sms_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_sms_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-atsvc/src/pms/lynq_pms.h b/src/lynq/framework/lynq-atsvc/src/pms/lynq_pms.h
new file mode 100755
index 0000000..57796d0
--- /dev/null
+++ b/src/lynq/framework/lynq-atsvc/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-atsvc/src/ril.cpp b/src/lynq/framework/lynq-atsvc/src/ril.cpp
index 95d43fd..b21bff6 100755
--- a/src/lynq/framework/lynq-atsvc/src/ril.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/ril.cpp
@@ -85,6 +85,8 @@
#include "lynq_factory.h"
#include "lynq_at_temp.h"
#include "lynq_at_time.h"
+#include "lynq_pms.h"
+#include "lynq_common.h"
/*Warren add for FAW platform 2021/9/28 end*/
@@ -403,7 +405,6 @@
*/
int simRuimStatus = -1;
-
static char *
strdupReadString(Parcel &p) {
size_t stringlen;
@@ -3804,27 +3805,7 @@
#endif
-static void parse_version_buf(char *buf){
- char *p = buf;
- int flag = 0;
- int recv = 0;
- int tmp = -1;
- while (*p != '\0')
- {
- recv++;
- if(*p == '"'){
- tmp = recv;
- }
- if(tmp >= 0){
- buf[flag++] = buf[tmp++];
- if(buf[flag-1] == '\"'){
- buf[flag-1] = '\0';
- }
- }
- *p++;
- }
- return;
-}
+
static int lynq_get_version(){
FILE *fp;
@@ -3986,8 +3967,12 @@
tempVal = atoi((char *)p_cur[0]);
if(tempVal == 1 || tempVal==5){
sprintf(respStr,"[SIM%d]%s register is in service!",socket_id +1, respStr);
+ /*lei add for autosleep 2022/8/23*/
+ sleep_flag = 1;
+ /*lei add for autosleep 2022/8/23*/
}else{
sprintf(respStr,"[SIM%d]%s register is not in service!",socket_id +1, respStr);
+ sleep_flag =0;
}
if(numStrings >=4 && p_cur[3] != NULL)
{
@@ -3995,6 +3980,7 @@
tempVal = atoi((char *)p_cur[3]);
if(tempVal == RADIO_TECH_LTE){//4G
sprintf(respStr,"%s radioTech is 4G!",respStr);
+ sleep_flag = 4;
} else if( tempVal == RADIO_TECH_GSM ||
tempVal == RADIO_TECH_GPRS ||
tempVal == RADIO_TECH_EDGE ||
@@ -4002,6 +3988,7 @@
tempVal == RADIO_TECH_IS95B ||
tempVal == RADIO_TECH_1xRTT) { //2G
sprintf(respStr,"%s radioTech is 2G!",respStr);
+ sleep_flag = 2;
} else if( tempVal == RADIO_TECH_UMTS ||
tempVal == RADIO_TECH_HSDPA ||
tempVal == RADIO_TECH_HSUPA ||
@@ -4013,6 +4000,7 @@
tempVal == RADIO_TECH_EVDO_A ||
tempVal == RADIO_TECH_EVDO_B) { //3G
sprintf(respStr,"%s radioTech is 3G!",respStr);
+ sleep_flag = 3;
#ifdef TELEMATIC_5G_SUPPORT
} else if(tempVal == RADIO_TECH_NR) { //5G
sprintf(respStr,"%s radioTech is 5G!",respStr);
@@ -6497,12 +6485,14 @@
}
for(int i =0;i<argc;i++)
{
- printf("argv[%d]=%s\n",i,argv[i]);
+ RLOGD("argv[%d]=%s\n",i,argv[i]);
+ //printf("liulei argv[%d]=%s\n",i,argv[i]);
}
COMMAND *command = find_command(argv[0]);
if(!command)
{
RLOGE("%s: No such command for DemoApp", argv[0]);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
return 1;
}
@@ -6519,7 +6509,9 @@
if(request == -1)
{
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
(*(command->func)) (argc, argv, id, NULL);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
return 1;
}
@@ -6533,6 +6525,7 @@
RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
/*lei modify to not display RIL_REQUEST_SCREEN_STATE of ok only sleep mode*/
if(uToken == 77777 && request == RIL_REQUEST_SCREEN_STATE)
{
@@ -6552,7 +6545,9 @@
GetTimeString(Time_buf);
//FUNCTION_CALLED(Time_buf,requestToString(request));
int waittoken = pRI->token;
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
(*(command->func)) (argc, argv, pRI->socket_id, pRI);
+ //printf("FUNCIONT %s LINE %d\n", __FUNCTION__, __LINE__);
FUNCTION_CALLED(Time_buf,requestToString(request));
waitResponse(waittoken);
memset(Time_buf,0,sizeof(Time_buf));
@@ -6560,6 +6555,7 @@
FUNCTION_RETURN(Time_buf,requestToString(request));
return 0;
}
+
void startUsbLoop(void)
{
int nread=-1;
@@ -6571,16 +6567,14 @@
int argc = 0;
char *argv[MAX_ARGS];//argv[0]:at name,argv[1]:raw data,argv[2]:at type,argv[3]:paramter1,argv[4]:paramter2 ....
char eBuf[1024];
- ttyGS3_fd = open("/dev/ttyGS3",O_RDWR);
+ check_autosleep(999);
if(ttyGS3_fd==-1)
{
RLOGE("open ttyGS3 failure!!!");
printf("open ttyGS3 failure!!!\n");
- //printf("%s\n",strerr(errno));
- perror("--test--");
- kill(0, SIGKILL);
+ return;
+ //kill(0, SIGKILL);
}
- printf("[%s]open %s successfully!!!\n",__FUNCTION__,ttyname(ttyGS3_fd));
while(1)
{
bzero(buffer, 1024);
diff --git a/src/lynq/framework/lynq-atsvc/src/sim.cpp b/src/lynq/framework/lynq-atsvc/src/sim.cpp
old mode 100644
new mode 100755
index 2235373..021ac76
--- a/src/lynq/framework/lynq-atsvc/src/sim.cpp
+++ b/src/lynq/framework/lynq-atsvc/src/sim.cpp
@@ -56,15 +56,21 @@
bzero(eBuf, 64);
if(error==RIL_E_SUCCESS)
{
- sprintf(eBuf,"\nOK\n\0");
+ sprintf(eBuf,"\nOK\n\0");
}
else
{
sprintf(eBuf,"\n+CME ERROR: %d\n\0",error);
}
- int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+ 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;
@@ -202,28 +208,31 @@
//SET_DEFAULT_SIM_ALL
int set_default_sim_all(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI){
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
if((argc != 2) || (!is_valid(atoi(argv[1]))))
{
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
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");
- sendAtTottyGS(2);
+ //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]))) {
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
set_default_sim_all(atoi(argv[1]));
+ //printf("function %s line %d\n", __FUNCTION__, __LINE__);
android::emResultNotify("Set successful.\n");
/*Warren add for FAW platform 2021/12/08 start*/
- printf("set successful\n");
- if(argv[2] != NULL)
- {
- /*do nothing*/
- }
- else
+ //printf("set successful\n");
+ if(argv[2] == NULL)
{
sendAtTottyGS(0);
}
@@ -232,8 +241,11 @@
} else {
RLOGD("Set default all fail, SIM card absent");
/*Warren add for FAW platform 2021/12/08 start*/
- sendAtTottyGS(11);
- printf("Set default all fail, SIM card absent\n");
+ 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);