[feature]add at service
Change-Id: I04fca1abfa7e324b719e08cd5c0725594e1ecc02
diff --git a/framework/lynq-ril-service/src/common.cpp b/framework/lynq-ril-service/src/common.cpp
index 37e5c41..7c5205d 100755
--- a/framework/lynq-ril-service/src/common.cpp
+++ b/framework/lynq-ril-service/src/common.cpp
@@ -44,6 +44,13 @@
#undef LOG_TAG
#define LOG_TAG "DEMO_COMMON"
+#define UNKOWN_VALUE (-1)
+
+/*Warren add for FAW 2021/11/1 start*/
+extern int ttyGS3_fd = -1;
+/*Warren add for FAW 2021/11/1 end*/
+
+
typedef enum {
STATE_IN_SERVICE =0,
STATE_OUT_OF_SERVICE =1,
@@ -74,6 +81,114 @@
static std::int32_t token = 0;
static std::mutex g_mutex;
+/*Warren add for SZZT 2021/11/14 start*
+** record data registration
+*/
+extern int current_data_reg = -1;
+extern int modemStatus = 0;
+
+/*Warren add for SZZT 2021/11/14 end*/
+
+
+/*hq add for key information output start 2022/03/01*/
+// extern int lynq_output_LINFO_enable =0;
+
+// typedef enum {
+// RADIO_NW_2G = 0,
+// RADIO_NW_3G = 1,
+// RADIO_NW_4G = 2,
+// #ifdef TELEMATIC_5G_SUPPORT
+// RADIO_NW_5G = 3,
+// #endif
+// } RIL_RadioNW;
+
+// const char * cardStateToString(int cardStatus)
+// {
+// switch(cardStatus) {
+// case RIL_CARDSTATE_ABSENT:
+// return "absent";
+// case RIL_CARDSTATE_PRESENT:
+// return "present";
+// case RIL_CARDSTATE_ERROR:
+// return "error";
+// default:
+// return "unknown";
+// }
+// }
+// const char * serviceStateToString(int service_state)
+// {
+// switch(service_state) {
+// case STATE_IN_SERVICE:
+// return "IN SERVICE";
+// case STATE_OUT_OF_SERVICE:
+// return "OUT OF SERVICE";
+// case STATE_POWER_OFF:
+// return "POWER_OFF";
+// case STATE_EMERGENCY_ONLY:
+// return "EMERGENCY_ONLY";
+// case UNKOWN_VALUE:
+// return "unDefined";
+// default:
+// return "unDefined";
+// }
+// }
+// const char * RadioNwToString(int radio_nw)
+// {
+// switch(radio_nw) {
+// case RADIO_NW_2G:
+// return "2G";
+// case RADIO_NW_3G:
+// return "3G";
+// case RADIO_NW_4G:
+// return "4G";
+// #ifdef TELEMATIC_5G_SUPPORT
+// case RADIO_NW_5G:
+// return "5G";
+// #endif
+// case UNKOWN_VALUE:
+// return "unknown";
+// default:
+// return "unknown";
+// }
+// }
+// const char * preferredNetworkTypeToString(int preferred_network_type)
+// {
+// switch(preferred_network_type) {
+// case PREF_NET_TYPE_GSM_WCDMA /*0*/ : return " GSM/WCDMA (WCDMA case PREFerred)";
+// case PREF_NET_TYPE_GSM_ONLY : return " GSM only";
+// case PREF_NET_TYPE_WCDMA : return " WCDMA ";
+// case PREF_NET_TYPE_GSM_WCDMA_AUTO : return " GSM/WCDMA (auto mode, according to PRL)";
+// case PREF_NET_TYPE_CDMA_EVDO_AUTO : return " CDMA and EvDo (auto mode, according to PRL)";
+// case PREF_NET_TYPE_CDMA_ONLY : return " CDMA only";
+// case PREF_NET_TYPE_EVDO_ONLY : return " EvDo only";
+// case PREF_NET_TYPE_GSM_WCDMA_CDMA_EVDO_AUTO : return " GSM/WCDMA, CDMA, and EvDo (auto mode, according to PRL)";
+// case PREF_NET_TYPE_LTE_CDMA_EVDO : return " LTE, CDMA and EvDo";
+// case PREF_NET_TYPE_LTE_GSM_WCDMA : return " LTE, GSM/WCDMA";
+// case PREF_NET_TYPE_LTE_CMDA_EVDO_GSM_WCDMA : return " LTE, CDMA, EvDo, GSM/WCDMA";
+// case PREF_NET_TYPE_LTE_ONLY : return " LTE only";
+// case PREF_NET_TYPE_LTE_WCDMA /*12*/ : return " LTE/WCDMA";
+// case PREF_NET_TYPE_LTE_GSM /*30*/ : return " LTE/GSM";
+// case PREF_NET_TYPE_LTE_TDD_ONLY /*31*/ : return " LTE only";
+// case 13: return "TD-SCDMA only";
+// case 14: return "TD-SCDMA and WCDMA";
+// case 15: return "TD-SCDMA and LTE";
+// case 16: return "TD-SCDMA and GSM";
+// case 17: return "TD-SCDMA,GSM and LTE";
+// case 18: return "TD-SCDMA, GSM/WCDMA";
+// case 19: return "TD-SCDMA, WCDMA and LTE";
+// case 20: return "TD-SCDMA, GSM/WCDMA and LTE";
+// case 21: return "TD-SCDMA,EvDo,CDMA,GSM/WCDMA";
+// case 22: return "TD-SCDMA/LTE/GSM/WCDMA, CDMA, and EvDo";
+// //case 30: return "LTE/GSM";
+// //case 31: return "LTE TDD Only mode";
+// case 32: return "CDMA,GSM(2G Global)";
+// case 33: return "CDMA,EVDO,GSM";
+// case 34: return "LTE,CDMA,EVDO,GSM(4G Global, 4M)";
+// default:
+// return "unDefined";
+// }
+// }
+/*hq add for key information output end*/
static int regCodeToRadioTechnology(int request, int code, int slot);
@@ -437,6 +552,10 @@
if((reg_data_service_state[slot] != atoi(code)) || ((token&RIL_TOKEN_MARK) == RIL_TOKEN_MARK)) {
reg_data_service_state[slot] = atoi(code);
regCodeToServiceState(request, atoi(code), slot);
+ /*Warren change for SZZT 2021//11/14 start*/
+ int status = regCodeToServiceState(request, atoi(code), slot);
+ current_data_reg = status;
+ /*Warren change for SZZT 2021//11/14 end*/
}
}
@@ -824,4 +943,72 @@
RLOGD("[lynqSocketSendto] send msg fail!!!");
return -1;
}
-}
\ No newline at end of file
+}
+/*hq add for key info output 2022/03/01 begin*/
+// void lynq_output_LINFO_all()
+// {
+// int slot,startSlot=0,slotNum=SIM_COUNT;
+
+// if(default_sim_voice==default_sim_data && default_sim_voice==default_sim_sms){
+// startSlot=default_sim_voice;
+// slotNum=1;
+// }
+
+// lynq_output_info("+LINFO: Report switch when key information changed is set: %d\n",lynq_output_LINFO_enable);
+// lynq_output_info("+LINFO: Default voice SIM card is set : [SIM%d]\n", default_sim_voice+1);
+// lynq_output_info("+LINFO: Default data SIM card is set : [SIM%d]\n", default_sim_data+1);
+// lynq_output_info("+LINFO: Default sms SIM card is set : [SIM%d]\n", default_sim_sms+1);
+
+// for(slot=startSlot;slot<startSlot+slotNum;slot++){
+// lynq_output_info("+LINFO: [SIM%d] Card State is %s\n",slot+1,cardStateToString((cur_CardS_Status[slot]!=NULL ? cur_CardS_Status[slot]->card_state:UNKOWN_VALUE)));
+// lynq_output_info("+LINFO: [SIM%d] Preferred network_type: is %s\n", slot+1, preferredNetworkTypeToString(preferred_network_type[slot]));
+// lynq_output_info("+LINFO: [SIM%d] Voice Registration State is %s\n",slot+1,serviceStateToString(regCodeToServiceState(reg_voice_service_state[slot])));
+// lynq_output_info("+LINFO: [SIM%d] Voice Radio Access Network is %s\n",slot+1,RadioNwToString(regCodeToRadioTechnology(reg_voice_radio_tech[slot])));
+// lynq_output_info("+LINFO: [SIM%d] Data Registration State is %s\n",slot+1,serviceStateToString(regCodeToServiceState(reg_data_service_state[slot])));
+// lynq_output_info("+LINFO: [SIM%d] Data Radio Access Network is %s\n",slot+1,RadioNwToString(regCodeToRadioTechnology(reg_data_radio_tech[slot])));
+// }
+// return;
+// }
+// void lynq_output_LINFO(const char* format,...)
+// {
+// char buf[1024] = {0};
+// int n;
+// char ebuf[1024] = {0};
+
+// if(lynq_output_LINFO_enable)
+// {
+// va_list args;
+// va_start(args, format);
+// vsnprintf(buf, sizeof(buf), format, args);
+// va_end(args);
+
+// printf("hq %s",buf);
+// n=snprintf(ebuf,sizeof(ebuf),"+LINFO: %s", buf);
+
+// n=write(ttyGS3_fd, ebuf, strlen(ebuf));
+// if(n < 0)
+// {
+// perror("lynq resp write:");
+// }
+// }
+// return;
+// }
+// void lynq_output_info(const char* format,...)
+// {
+// char buf[1024] = {0};
+// int n;
+
+// va_list args;
+// va_start(args, format);
+// vsnprintf(buf, sizeof(buf), format, args);
+// va_end(args);
+
+// n=write(ttyGS3_fd, buf, strlen(buf));
+// if(n < 0)
+// {
+// perror("lynq resp write:");
+// }
+
+// return;
+// }
+/*hq add for key info output 2022/03/01 end*/
diff --git a/framework/lynq-ril-service/src/common.h b/framework/lynq-ril-service/src/common.h
index e952dcb..8de5199 100755
--- a/framework/lynq-ril-service/src/common.h
+++ b/framework/lynq-ril-service/src/common.h
@@ -139,6 +139,21 @@
RIL_SOCKET_ID socket_id;
} RequestInfo;
+/*Warren add for FAW 2021/11/1 start*/
+extern int ttyGS3_fd;
+/*Warren add for FAW 2021/11/1 end*/
+/*Warren add for SZZT 2021/11/14 start*
+** record data registration
+*/
+extern int current_data_reg;
+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();
+
typedef struct {
char *name; /* User printable name of the function. */
int (*func)(int argc, char *argv[], RIL_SOCKET_ID socket_id, RequestInfo *pRI); /* Function to call to do the job. */
@@ -232,7 +247,13 @@
int emResultNotify(const char *str);
void ATCIRequest(int request, char* reqString, void* t,int argc, char**argv);
void startWakupLoop(void);
-/*Warren add for t800 RIL Service 2021/12/10 start*/
+ /*Warren add for FAW platform 2021/9/27 start*/
+ void startUsbLoop(void);
+ int sendRespToUsb(char *cmd);
+ int sendUrcToUsb(char *cmd);
+ int lynqSendToRil(int argc,char *argv[],int uToken);
+ /*Warren add for FAW platform 2021/9/27 end*/
+ /*Warren add for t800 RIL Service 2021/12/10 start*/
int lynqSocketSendto(int fd,struct sockaddr *dest_addr,int addr_len,char msg[]);
/*Warren add for t800 RIL Service 2021/12/10 end*/
/*Warren add for t800 ril service 2021/12/23 start*/
diff --git a/framework/lynq-ril-service/src/factory/lynq_factory.cpp b/framework/lynq-ril-service/src/factory/lynq_factory.cpp
new file mode 100755
index 0000000..a8ef998
--- /dev/null
+++ b/framework/lynq-ril-service/src/factory/lynq_factory.cpp
@@ -0,0 +1,573 @@
+#include <stdio.h>
+#include "common.h"
+#include "utils.h"
+#include "Phone_utils.h"
+#include <time.h>
+#include "sim.h"
+#include <string.h>
+#include<pthread.h>
+#include <cutils/properties.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <pthread.h>
+#define SIM_COUNT 2
+#define RIL_REQUEST_GET_SIM_STATUS 1
+int already_gps = 0;
+int enable_nema = 0;
+int sustain = 1;
+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;
+typedef enum {
+ sim1,
+#if (SIM_COUNT >= 2)
+ sim2,
+#if (SIM_COUNT >= 3)
+ RIL_SOCKET_3,
+#endif
+#if (SIM_COUNT >= 4)
+ RIL_SOCKET_4,
+#endif
+#endif
+ //RIL_SOCKET_NUM
+} RIL_SIM_COUNT;
+
+#include "lynq_factory.h"
+
+static const char *usb3_speed = "super-speed";
+static const char *usb2_speed = "high-speed";
+pthread_mutex_t lynq_audio_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+
+static void lynq_factory_response_ttyGS3(char *buf){
+ write(ttyGS3_fd,buf,strlen(buf));
+ return;
+}
+
+static void lynq_get_sim_state(RIL_SIM_COUNT id){
+ char *argv[MAX_ARGS];
+ if(utils::is_support_dsds()) {
+ id = (RIL_SIM_COUNT)get_default_sim_all_except_data();
+ } else if(utils::is_suppport_dsss()) {
+ id = (RIL_SIM_COUNT)Phone_utils::get_enable_sim_for_dsss();
+ }
+ RequestInfo *pRI = creatRILInfoAndInit(RIL_REQUEST_GET_SIM_STATUS, UDP, (RIL_SOCKET_ID)(id));
+ getIccCardStatus(RIL_REQUEST_GET_SIM_STATUS,argv,(RIL_SOCKET_ID)id,pRI);
+}
+void *thread_test(void *arg){
+ lynq_factory_response_ttyGS3("GPS OPNE\n");
+ #if 0
+ FILE *fp;
+ char test[100] = {0};
+ sprintf(test, "mnld_test start & %s", "2>&1");
+ char lynq_factory_buf[1024] = {0};
+ fp=popen(test, "r");
+ if(NULL == fp){
+ printf("popen errorn");
+ return 0;
+ }
+ // pthread_mutex_lock(&s_gps_state_change_mutex);
+ // pthread_cond_wait(&s_gps_change_cond, &s_gps_state_change_mutex);
+ // pthread_mutex_unlock(&s_gps_state_change_mutex);
+ while (sustain)
+ {
+ if(fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
+ if(enable_nema == 1){
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ }
+ }
+ else{
+ break;
+ }
+ }
+ pclose(fp);
+ #endif
+ system("echo \"debug.dbg2file=1\">>/usr/share/gps/mnl.prop");
+ system("mnld_test start &");
+ return 0;
+}
+
+void *thread_test_RGMII(void *arg){
+ FILE *fp;
+ fp=popen("ping -c 4 baidu.com 2>&1", "r");
+ if(NULL == fp){
+ printf("popen errorn");
+ return 0;
+ }
+ char lynq_factory_buf[1024] = {0};
+ if(NULL == fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
+ lynq_factory_response_ttyGS3("UNKONE ERROR\n");
+ pclose(fp);
+ return 0;
+ }
+ else{
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ if(strstr(lynq_factory_buf, "bad"))
+ return 0;
+ }
+ while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
+ {
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ }
+ pclose(fp);
+ return 0;
+}
+
+static void lynq_test_RGMII(void){
+ pthread_t thid;
+ if(pthread_create(&thid, NULL, thread_test_RGMII, NULL) != 0) {
+ return;
+ }
+ pthread_join(thid, NULL);
+ return;
+}
+
+static void lynq_gps_open(void){
+ if(already_gps == 1){
+ lynq_factory_response_ttyGS3("gps already open\n");
+ return;
+ }
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ int ret = pthread_create(&lynq_gps_tid, NULL, thread_test, NULL);
+ if(ret < 0)
+ {
+ lynq_factory_response_ttyGS3("gps thread create failure!!!\n");
+ return;
+ }
+ already_gps = 1;
+ return;
+}
+
+static void lynq_gps_close(void){
+ #if 0
+ enable_nema = 0;
+ sustain = 1;
+ int res = -1;
+ res = pthread_cancel(lynq_gps_tid);
+ if(res){
+ lynq_factory_response_ttyGS3("pthread cancel fail\n");
+ return;
+ }
+ pthread_join(lynq_gps_tid,NULL);
+ int ret = system("killall mnld_test");
+ already_gps = 0;
+ if(!ret){
+ lynq_factory_response_ttyGS3("GPS CLOSE SUCCESS\n");
+ }
+ else{
+ lynq_factory_response_ttyGS3("GPS CLOSE Failed\n");
+ }
+ #endif
+ system("killall mnld_test");
+ FILE *fp;
+ char test[100] = {0};
+ sleep(1);
+ sprintf(test, "cat /usr/share/gps/*.nmac %s", "2>&1");
+ char lynq_factory_buf[1024] = {0};
+ fp=popen(test, "r");
+ if(NULL == fp){
+ printf("popen errorn");
+ return;
+ }
+ while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
+ if(strlen(lynq_factory_buf) > 0)
+ {
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ }else{
+ lynq_factory_response_ttyGS3("+CME: ERROR TIMEOUT\n");
+ }
+ }
+ pclose(fp);
+ return;
+}
+
+static void lynq_wifi_open(void){
+ FILE *fp;
+ char test[100] = {0};
+ sprintf(test, "connmanctl enable wifi %s", "2>&1");
+ char lynq_factory_buf[1024] = {0};
+ fp=popen(test, "r");
+ if(NULL == fp){
+ printf("popen errorn");
+ return;
+ }
+ while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
+ if(strlen(lynq_factory_buf) > 0)
+ {
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ }else{
+ lynq_factory_response_ttyGS3("+CME: ERROR TIMEOUT\n");
+ }
+ }
+ pclose(fp);
+}
+
+static void lynq_wifi_close(void){
+ FILE *fp;
+ char test[100] = {0};
+ sprintf(test, "connmanctl disable wifi %s", "2>&1");
+ char lynq_factory_buf[1024] = {0};
+ fp=popen(test, "r");
+ if(NULL == fp){
+ printf("popen errorn");
+ return;
+ }
+ while(NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp)){
+ if(strlen(lynq_factory_buf) > 0)
+ {
+ lynq_factory_response_ttyGS3(lynq_factory_buf);
+ }else{
+ lynq_factory_response_ttyGS3("+CME: ERROR TIMEOUT\n");
+ }
+ }
+ pclose(fp);
+}
+
+
+int lynq_dispose_factory_adc(int num,char *argv[MAX_ARGS])
+{
+ FILE *fp;
+ char lynq_adc_dev[512] = {0};
+ char lynq_adc_buf[512];
+ char lynq_adc_log_buf[512];
+
+ int lynq_adc_num = atoi(argv[4]);
+ bzero(lynq_adc_buf, 512);
+ bzero(lynq_adc_dev,512);
+ bzero(lynq_adc_log_buf,512);
+ if(lynq_adc_num == 0)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device0/in_voltage23_ADC0_raw 2>&1");
+ }
+ else if(lynq_adc_num == 1)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device0/in_voltage22_ADC1_raw 2>&1");
+ }
+ else if(lynq_adc_num == 2)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device0/in_voltage21_ADC2_raw 2>&1");
+ }
+ else
+ {
+ lynq_factory_response_ttyGS3("[adc][errror]:no adc device \n");
+ return 0;
+ }
+ fp=popen(lynq_adc_dev, "r");
+ fgets(lynq_adc_buf,sizeof(lynq_adc_buf),fp);
+ if(strlen(lynq_adc_buf) > 0)
+ {
+ sprintf(lynq_adc_log_buf,"[adc%d][result]:%s\n",lynq_adc_num,lynq_adc_buf);
+ }
+ else
+ {
+ sprintf(lynq_adc_log_buf,"[adc%d][result]:error\n",lynq_adc_num);
+ }
+ lynq_factory_response_ttyGS3(lynq_adc_log_buf);
+ pclose(fp);
+ return 1;
+}
+
+int lynq_dispose_factory_usb(int num,char *argv[MAX_ARGS])
+{
+ FILE *fp;
+ char lynq_usb_dev[512] = {0};
+ char lynq_usb_buf[512];
+
+ bzero(lynq_usb_buf, 512);
+ bzero(lynq_usb_dev,512);
+ sprintf(lynq_usb_dev,"cat /sys/devices/platform/soc/11261000.usb/udc/11261000.usb/current_speed 2>&1");
+
+ fp=popen(lynq_usb_dev, "r");
+ fgets(lynq_usb_buf,sizeof(lynq_usb_buf),fp);
+ if(!strncmp(lynq_usb_buf,usb3_speed,strlen(usb3_speed)))
+ {
+ lynq_factory_response_ttyGS3("[usb][result],3.0 \n");
+ }
+ else if(!strncmp(lynq_usb_buf,usb2_speed,strlen(usb2_speed)))
+ {
+ lynq_factory_response_ttyGS3("[usb][result],2.0 \n");
+ }
+ else
+ {
+ lynq_factory_response_ttyGS3("[usb][rat][UNKNOWN] \n");
+ }
+ pclose(fp);
+ return 1;
+}
+
+void *lynq_deal_witch_audio(void *arg)
+{
+ char lynq_adudio_time_arr[128] = {0};
+ char *lynq_argv = (char *)arg;
+ pthread_mutex_lock(&lynq_audio_mutex);
+ system("echo write_reg,0x002c,0x0008 > /sys/kernel/debug/mtksocaudio");
+ system("echo write_reg,0x0030,0x0010 > /sys/kernel/debug/mtksocaudio");
+ sprintf(lynq_adudio_time_arr,"arecord -D plughw:0,1 --buffer-size=1024 -r 16000 -d %s -f S16_LE -c1 | aplay -D plughw:0,7 --buffer-size=1024 -r 16000 -d %s -f S16_LE -c1",lynq_argv,lynq_argv);
+// system("arecord -D plughw:0,1 --buffer-size=1024 -r 16000 -d 2 -f S16_LE -c1 | aplay -D plughw:0,7 --buffer-size=1024 -r 16000 -d 2 -f S16_LE -c1 ");
+ system(lynq_adudio_time_arr);
+ free(lynq_argv);
+ lynq_argv = NULL;
+ pthread_mutex_unlock(&lynq_audio_mutex);
+ pthread_exit(0);
+}
+
+int lynq_dispose_factory_audio(int num,char *argv[MAX_ARGS])
+{
+ pthread_t id;
+ int i,ret;
+ char *lynq_audio_time = (char *)malloc(16);
+ bzero(lynq_audio_time, 16);
+ if(lynq_audio_time != NULL)
+ {
+ memcpy(lynq_audio_time,argv[4],strlen(argv[4]));
+ }
+ ret=pthread_create(&id,NULL,lynq_deal_witch_audio,(char *)lynq_audio_time);
+ if(ret!=0)
+ {
+ return ret;
+ }
+ pthread_join(id,NULL);
+ return 0;
+}
+
+int lynq_check_emmc()
+{
+ FILE *fp;
+ char emmc_buf[100] = {0};
+ char buf[100] = {0};
+ sprintf(emmc_buf, "ls /dev | grep mmcblk0 2>&1");
+ fp=popen(emmc_buf, "r");
+ if(!fp){
+ //printf("popen error\n");
+ lynq_factory_response_ttyGS3("\n+CME: POPEN ERROR\n");
+ return -1;
+ }
+
+ while(fgets(buf, sizeof(buf), fp) != NULL){
+ lynq_factory_response_ttyGS3("[EMMC] EMMC OK \n");
+ pclose(fp);
+ return 0;
+ }
+
+ lynq_factory_response_ttyGS3("[EMMC] NO EMMC \n");
+ pclose(fp);
+ return 0;
+}
+static void lynq_gpsinfo(char *argv){
+ if(argv ==NULL)
+ return;
+ // pthread_mutex_lock(&s_gps_state_change_mutex);
+ enable_nema = atoi(argv);
+ // pthread_cond_signal(&s_gps_change_cond);
+ // pthread_mutex_unlock(&s_gps_state_change_mutex);
+ if(enable_nema == 1){
+ lynq_factory_response_ttyGS3("enable neam\n");
+ }
+ else if(enable_nema == 0){
+ lynq_factory_response_ttyGS3("disable neam\n");
+ }
+ else{
+ lynq_factory_response_ttyGS3("invalid value\n");
+ }
+}
+
+int lynq_check_gpio()
+{
+ FILE *fp;
+ int lynq_gpio_arr[57] = {47,49,50,48,43,14,15,13,6,7,5,4,93,94,96,95,87,88,82,81,27,26,132,131,130,133,79,80,77,78,90,28,60,62,63,19,18,64,59,10,3,8,41,42,40,39,38,37,55,54,53,52,89,24,46,44,45};
+ char lynq_set_gpio_arr[256] = {0};
+ char lynq_get_gpio_state[512] = {0};
+ char lynq_show_gpio_state[64] = {0};
+ int lynq_gpio_low = 0;
+ int lynq_gpio_hig = 0;
+ int i = 0,m = 0;
+ int lynq_gpio_beta_state = 1;
+
+ for(m = 0; m < 57; m++)
+ {
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m]);
+ system(lynq_set_gpio_arr);
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[m]);
+ system(lynq_set_gpio_arr);
+ }
+
+ for(i = 0; i < 57; i++)
+ {
+ lynq_gpio_low = 0;
+ lynq_gpio_hig = 0;
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo mode %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d 1 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 061");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+/*
+ if(strlen(lynq_get_gpio_state) > 0)
+ {
+ lynq_factory_response_ttyGS3(lynq_get_gpio_state);
+ lynq_factory_response_ttyGS3("\n");
+ }
+*/
+ pclose(fp);
+ if(lynq_get_gpio_state[8] == '1')
+ {
+ lynq_gpio_hig = 1;
+ }
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"echo out %d 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio",(char*)lynq_gpio_arr[i]);
+ system(lynq_set_gpio_arr);
+
+ bzero(lynq_set_gpio_arr, 256);
+ sprintf(lynq_set_gpio_arr,"cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep 061");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+/*
+ if(strlen(lynq_get_gpio_state) > 0)
+ {
+ lynq_factory_response_ttyGS3(lynq_get_gpio_state);
+ lynq_factory_response_ttyGS3("\n");
+ }
+*/
+ pclose(fp);
+ if(lynq_get_gpio_state[8] == '0')
+ {
+ lynq_gpio_low = 1;
+ }
+ bzero(lynq_show_gpio_state, 64);
+ if((lynq_gpio_low != 1) || (lynq_gpio_hig != 1))
+ {
+ lynq_gpio_beta_state = 0;
+ sprintf(lynq_show_gpio_state,"[gpio%d][result]:FAIL \n",(char *)lynq_gpio_arr[i]);
+ lynq_factory_response_ttyGS3(lynq_show_gpio_state);
+// lynq_factory_response_ttyGS3("[gpio][result]:FAIL \n");
+ }
+ }
+ if(lynq_gpio_beta_state == 1)
+ {
+ sprintf(lynq_show_gpio_state,"[gpio][result]:PASS \n",(char *)lynq_gpio_arr[i]);
+ lynq_factory_response_ttyGS3(lynq_show_gpio_state);
+ }
+ return 0;
+}
+
+int lynq_factory_write_sn(int num,char *argv[MAX_ARGS])
+{
+ int err = -1;
+ char lynq_sn_arr[16] = {"ro.SN"};
+ char lynq_sn_data[64] = {0};
+
+ if(argv[4] != NULL)
+ {
+ err = property_set(lynq_sn_arr,argv[4]);
+ if(err == 0)
+ {
+ lynq_factory_response_ttyGS3("[SN] Write SN OK \n");
+ }
+ else
+ {
+ lynq_factory_response_ttyGS3("[SN] Write SN Fail \n");
+ }
+ }
+ return err;
+}
+
+int lynq_factory_read_sn()
+{
+ int err = -1;
+ char lynq_sn_arr[16] = {"ro.SN"};
+ char lynq_sn_data[64] = {0};
+ char lynq_read_tty_buf[70] = {};
+ err = property_get(lynq_sn_arr,(char *)lynq_sn_data,NULL);
+ if(err > 0)
+ {
+ sprintf(lynq_read_tty_buf,"[SN]:%s\n",(char *)lynq_sn_data);
+ }
+ else
+ {
+ sprintf(lynq_read_tty_buf,"[SN]:Get SN Fail\n");
+ }
+ lynq_factory_response_ttyGS3(lynq_read_tty_buf);
+ return err;
+}
+
+int lynq_get_factory_data(int num,char *argv[MAX_ARGS]){
+ if(num < 4)
+ return -1;
+ if(!strcmp(argv[3], "wifi")){
+ lynq_wifi_open();
+ }
+ else if(!strcmp(argv[3], "wifi_close")){
+ lynq_wifi_close();
+ }
+ else if(!strcmp(argv[3], "gps")){
+ lynq_gps_open();
+ }
+ else if(!strcmp(argv[3], "gps_close")){
+ lynq_gps_close();
+ }
+ #if 0
+ else if(!strcmp(argv[3], "gpsinfo")){
+ lynq_gpsinfo(argv[4]);
+ }
+ else if(!strcmp(argv[3], "sim1")){
+ lynq_get_sim_state(sim1);
+ }
+ else if(!strcmp(argv[3], "sim2")){
+ lynq_get_sim_state(sim2);
+ }
+ #endif
+ else if(!strcmp(argv[3], "rgmii")){
+ lynq_test_RGMII();
+ }
+ else if((!strcmp(argv[3],"adc")))
+ {
+ lynq_dispose_factory_adc(num,argv);
+ }
+ else if((!strcmp(argv[3],"usb")))
+ {
+ lynq_dispose_factory_usb(num,argv);
+ }
+ else if((!strcmp(argv[3],"audio")))
+ {
+ lynq_dispose_factory_audio(num,argv);
+ }
+ else if((!strcmp(argv[3], "emmc")))
+ {
+ lynq_check_emmc();
+ }
+ else if((!strcmp(argv[3],"gpio")))
+ {
+ lynq_check_gpio();
+ }
+ else if((!strcmp(argv[3],"snwt")))
+ {
+ lynq_factory_write_sn(num,argv);
+ }
+ else if((!strcmp(argv[3],"snrd")))
+ {
+ lynq_factory_read_sn();
+ }
+ else{
+ lynq_factory_response_ttyGS3("invalid command\n");
+ }
+ return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/framework/lynq-ril-service/src/factory/lynq_factory.h b/framework/lynq-ril-service/src/factory/lynq_factory.h
new file mode 100755
index 0000000..bc14687
--- /dev/null
+++ b/framework/lynq-ril-service/src/factory/lynq_factory.h
@@ -0,0 +1,14 @@
+#ifndef __LYNQ_FACTORY_H__
+#define __LYNQ_FACTORY_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_ARGS 101
+int lynq_get_factory_data(int num,char *argv[MAX_ARGS]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/framework/lynq-ril-service/src/lynq_at.cpp b/framework/lynq-ril-service/src/lynq_at.cpp
new file mode 100755
index 0000000..6ff642c
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_at.cpp
@@ -0,0 +1,40 @@
+/*=============================================================================
+** FileName: lynq_at.cpp
+** Desc: lynq Send at to modem directly
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-28
+** History:
+**=============================================================================*/
+#include "lynq_at.h"
+#include "common.h"
+#include "stateManager/stateManager.h"
+#include "Phone_utils.h"
+#include "utils.h"
+
+int lynqSendAt(int argc,char *argv[],int uToken)
+{
+ int request = RIL_REQUEST_OEM_HOOK_RAW;
+ RIL_SOCKET_ID id = RIL_SOCKET_1;
+ if(utils::is_support_dsds())
+ {
+ id = (RIL_SOCKET_ID)get_default_sim_all_except_data();
+ }
+ else if(utils::is_suppport_dsss())
+ {
+ id = (RIL_SOCKET_ID)Phone_utils::get_enable_sim_for_dsss();
+ }
+ // if (request < 1 || (request >= (int32_t)NUM_ELEMS(s_commands) && request < RIL_REQUEST_VENDOR_BASE)) {
+ // RLOGW("unsupported request code %d token %d", request);
+ // FIXME this should perhaps return a response
+ // continue;
+ //}
+
+ //RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
+ RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
+ pRI->lynqEvent=1;
+ printf("Warren test ====> argv[1]=%s\n",argv[1]);
+ sendATCMD(2, argv,id,pRI);
+ return 0;
+}
+
diff --git a/framework/lynq-ril-service/src/lynq_at.h b/framework/lynq-ril-service/src/lynq_at.h
new file mode 100755
index 0000000..52bc79c
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_at.h
@@ -0,0 +1,12 @@
+/*=============================================================================
+** FileName: lynq_at.h
+** Desc: lynq Send at to modem directly
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-28
+** History:
+**=============================================================================*/
+#ifndef LYNQ_AT
+#define LYNQ_AT
+int lynqSendAt(int argc,char *argv[],int uToken);
+#endif
diff --git a/framework/lynq-ril-service/src/lynq_at_transfer_table.h b/framework/lynq-ril-service/src/lynq_at_transfer_table.h
new file mode 100755
index 0000000..0ee18b9
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_at_transfer_table.h
@@ -0,0 +1,18 @@
+{LYNQ_REQUEST_ATD,"ATD",7},
+{LYNQ_REQUEST_CGCMOD,"CGCMOD",0},
+{LYNQ_REQUEST_CGAUTO,"CGAUTO",0},
+{LYNQ_REQUEST_CGACT,"CGACT",4},
+{LYNQ_REQUEST_CGDCONT,"CGDCONT",4},
+{LYNQ_USER_REQUEST_GNSS,"LYNQGNSS",7},
+{LYNQ_USER_REQUEST_OTHRE,"LYNQOTHER",7},
+{LYNQ_REQUEST_LAPNACT,"LAPNACT",7},
+{LYNQ_REQUEST_ELAPNACT,"ELAPNACT",7},
+{LYNQ_REQUEST_SWITCH_SIM,"LCSUS",7},
+{LYNQ_REQUEST_SCREEN_STATE,"SCREEN",7},
+{LYNQ_REQUEST_SEND_LOG_DATA,"LOGS",7},
+{LYNQ_PLAT_LGMDS,"LGMDS",7},
+{LYNQ_REQUEST_RNDIS,"LRNDISHANDLE",7},
+{LYNQ_REQUEST_FACTORY,"LYNQFACTORY",7},
+{LYNQ_REQUEST_LINFO,"LINFO",7},
+{LYNQ_REQUEST_FOTA,"LYNQFOTA",7},
+{-1,NULL,0},
\ No newline at end of file
diff --git a/framework/lynq-ril-service/src/lynq_commands.h b/framework/lynq-ril-service/src/lynq_commands.h
new file mode 100755
index 0000000..adfda0f
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_commands.h
@@ -0,0 +1,18 @@
+/*=============================================================================
+** FileName: lynq_command.h
+** Desc: lynq commands table
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-10-27
+** History:
+**=============================================================================*/
+{LYNQ_REQUEST_CGMI,NULL,"CGMI",CGMI,NULL},
+{LYNQ_REQUEST_ATD,"RIL_REQUEST_DIAL","ATD",dialACall,NULL},
+{LYNQ_REQUEST_LAPNACT,"RIL_REQUEST_SETUP_DATA_CALL","LAPNACT",setupData,NULL},
+{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_SCREEN_STATE,"RIL_REQUEST_SCREEN_STATE","SCREEN",lynq_screen,NULL},
+{LYNQ_PLAT_LGMDS,"LYNQ_PLAT_LGMDS","LGMDS",NULL,getMDstate},
+{-1,NULL,NULL,NULL,NULL},
diff --git a/framework/lynq-ril-service/src/lynq_common.cpp b/framework/lynq-ril-service/src/lynq_common.cpp
index cb136c8..f77a55e 100755
--- a/framework/lynq-ril-service/src/lynq_common.cpp
+++ b/framework/lynq-ril-service/src/lynq_common.cpp
@@ -1,10 +1,623 @@
+/*=============================================================================
+** FileName: lynq_common.cpp
+** Desc: lynq common
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-27
+** History:
+**=============================================================================*/
+
+#include <stdio.h>
+#include <string.h>
+#include <log/log.h>
#include "lynq_common.h"
+#include "lynq_user.h"
+#include "common.h"
+#include <pthread.h>
+#define USB_BUF_SIZE 8192
#include <liblog/lynq_deflog.h>
#include <sys/time.h>
#include "Phone_utils.h"
-#include <stdio.h>
+usb_cmd_t Usb_commands[] = {
+#include "lynq_commands.h"
+};
+
+usb_at_transfer_t Usb_transfer_commands[] = {
+#include "lynq_at_transfer_table.h"
+};
#undef LOG_TAG
#define LOG_TAG "LYNQ_COMMON"
extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX] = {};
extern int apn_count = 0;
+extern char lynq_at[LYNQ_AT_LEN_MAX]= {};
+pthread_cond_t lynq_at_cond = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t lynq_at_mutex= PTHREAD_MUTEX_INITIALIZER;
+
+
+//int lynqSendToRil(int argc,char *argv[],int uToken);
+usb_at_transfer_t *lynqFindId(char *cmd)
+{
+ if(cmd==NULL)
+ {
+ RLOGD("lynqFindId CMD is NULL!!!");
+ return ((usb_at_transfer_t*)NULL);
+ }
+ for(int i=0;Usb_transfer_commands[i].cmdName;i++)
+ {
+ if (strcmp (cmd, Usb_transfer_commands[i].cmdName) == 0)
+ return (&Usb_transfer_commands[i]);
+ }
+ return ((usb_at_transfer_t*)NULL);
+}
+
+usb_cmd_t * lynqFindUsbEvent(char *cmd)
+{
+ if(cmd==NULL)
+ {
+ RLOGD("lynqFindUsbEvent CMD is NULL!!!");
+ return ((usb_cmd_t*)NULL);
+ }
+ printf("cmd =%s\n",cmd);
+ for(int i=0;Usb_commands[i].cmdName;i++)
+ {
+ if (strcmp (cmd, Usb_commands[i].cmdName) == 0)
+ return (&Usb_commands[i]);
+ }
+ return ((usb_cmd_t *)NULL);
+}
+
+int routeCmd(int request)
+{
+ switch (request)
+ {
+ case LYNQ_REQUEST_CGMI:
+ case LYNQ_REQUEST_GMI:
+ case LYNQ_REQUEST_CGACT:
+ case LYNQ_REQUEST_CGDCONT:
+ {
+ return LYNQ_GOTO_AT;
+ }
+ case LYNQ_REQUEST_ATD:
+ case LYNQ_REQUEST_LAPNACT:
+ case LYNQ_REQUEST_ELAPNACT:
+ case LYNQ_REQUEST_SCREEN_STATE:
+ case LYNQ_REQUEST_SWITCH_SIM:
+ {
+ return LYNQ_GOTO_TELE_REQ;
+ }
+ case LYNQ_REQUEST_SEND_LOG_DATA:
+ {
+ return LYNQ_GOTO_PLAT_REQ;
+ }
+ case LYNQ_USER_REQUEST_GNSS:
+ case LYNQ_USER_REQUEST_OTHRE:
+ case LYNQ_PLAT_LGMDS:
+ {
+ return LYNQ_GOTO_USER_REQ;
+ }
+ case LYNQ_REQUEST_RNDIS:
+ {
+
+ return LYNQ_GOTO_RNDIS_REQ;
+ }
+ case LYNQ_REQUEST_LINFO:
+ return LYNQ_GOTO_LINFO_REQ;
+ case LYNQ_REQUEST_FACTORY:
+ return LYNQ_GOTO_FACTORY;
+ case LYNQ_REQUEST_FOTA:
+ return LYNQ_GOTO_FOTA;
+ default:
+ return -1;
+ }
+}
+int g_number(const char *p){
+ int cnt = 0;
+ while(*p != '\0'){
+ if(*p == ','){
+ cnt++;
+ }
+ *p++;
+ }
+ return cnt+4;//for count character string
+
+}
+int syncRespToUsb(int error_code)
+{
+ char BUF[32] = {};
+ int ret = -1;
+ int len = 0;
+ if(error_code==0)
+ {
+ len = write(ttyGS3_fd,"OK\n",3);
+ }
+ else
+ {
+ sprintf(BUF,"+CME ERROR: %d\n\0",error_code);
+ len = write(ttyGS3_fd,BUF,strlen(BUF));
+ }
+ if(len < 0)
+ {
+ perror("lynq resp write:");
+ return -1;
+ }
+ return 0;
+}
+void lynqSetArgv(char **argv, char** Point,const char* value)
+{
+ *argv=*Point;
+ sprintf(*argv, "%s", value);
+ (*Point) += (strlen(value)+1);
+}
+//argv[2]:0 send,1 list,2 get
+int lynqParseUsbCommand(const char* cmd,char *argv[],char test[],char* parser_buf,int maxArgc)
+{
+ char *token;
+ char *str = test;
+ char *string;
+ char *parameter;
+ char* Point=parser_buf;
+ int cnt = g_number(cmd);
+ memcpy(test, cmd, strlen(cmd));
+ test[strlen(cmd)] = '\0';
+ argv[1] = (char *)cmd;
+ if(strstr(cmd,"=?"))
+ {
+ token = strtok(str, "=?");
+ //argv[0] = token;
+ argv[0] = strstr(token, "+")+1;
+ lynqSetArgv(&(argv[2]),&Point,"1");
+ while (token != NULL)
+ {
+ string = token;
+ token = strtok(NULL, "=?");
+ }
+ parameter = strtok(string, ",");
+ int i = 3;
+ while (parameter != NULL)
+ {
+ argv[i++] = parameter;
+ parameter = strtok(NULL, ",");
+ }
+ }
+ else if(strstr(cmd,"="))
+ {
+ lynqSetArgv(&(argv[2]),&Point,"0");
+ token = strtok(str, "=");
+ //argv[0] = token;
+ argv[0] = strstr(token, "+")+1;
+ while (token != NULL)
+ {
+ string = token;
+ token = strtok(NULL, "=");
+ }
+ parameter = strtok(string, ",");
+ int i = 3;
+ while (parameter != NULL)
+ {
+ argv[i++] = parameter;
+ parameter = strtok(NULL, ",");
+ }
+ }
+ else if(strstr(cmd,"?"))
+ {
+ lynqSetArgv(&(argv[2]),&Point,"2");
+ token = strtok(str, "?");
+ //argv[0] = token;
+ argv[0] = strstr(token, "+")+1;
+ while (token != NULL)
+ {
+ string = token;
+ token = strtok(NULL, "?");
+ }
+ parameter = strtok(string, ",");
+ int i = 3;
+ while (parameter != NULL)
+ {
+ argv[i++] = parameter;
+ parameter = strtok(NULL, ",");
+ }
+ }
+ else
+ {
+ lynqSetArgv(&(argv[2]),&Point,"0");
+ if(strstr(cmd,"+"))
+ {
+ argv[0] = test+3;
+ return 3;
+ }
+ else
+ {
+ RLOGD("sp test 01");
+ if(!strcmp(cmd, "ATA")){
+ lynqSetArgv(&(argv[0]),&Point,"ATA");
+ return 3;
+ }
+ if(!strcmp(cmd, "AT")){
+ lynqSetArgv(&(argv[0]),&Point,"AT");
+ return 3;
+ }
+ /*UNKNOW*/
+ else if(!strncmp(cmd, "ATD", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATD");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATE", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATE");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strcmp(cmd, "ATH")){
+ lynqSetArgv(&(argv[0]),&Point,"ATH");
+ return 3;
+ }
+ else if(!strncmp(cmd, "ATI", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATI");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATL", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATL");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATO", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATO");
+ argv[3] = test+3;
+ return 3;
+ }
+ /*ATP*/
+ /*
+ */
+ else if(!strncmp(cmd, "ATQ", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATQ");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATSO", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATSO");
+ argv[3] = test+4;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATS3", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS3");
+ argv[3] = test+4;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATS4", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS4");
+ argv[3] = test+4;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATS5", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS5");
+ argv[3] = test+4;
+ return 4;
+ }
+ /*ATS6*/
+ /*
+ */
+ else if(!strncmp(cmd, "ATS7", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS7");
+ argv[3] = test+4;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATS8", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS8");
+ argv[3] = test+4;
+ return 4;
+ }
+ else if(!strncmp(cmd, "ATS10", 5)){
+ lynqSetArgv(&(argv[0]),&Point,"ATS10");
+ argv[3] = test+5;
+ return 4;
+ }
+ /*ATT*/
+ /*
+
+
+
+ */
+ else if(!strncmp(cmd, "ATV", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATV");
+ argv[3] = test+3;
+ return 4;
+ }
+ /*ATX*/
+ /*
+
+
+
+ */
+ else if(!strncmp(cmd, "ATZ", 3)){
+ lynqSetArgv(&(argv[0]),&Point,"ATZ");
+ argv[3] = test+3;
+ return 4;
+ }
+ else if(!strncmp(cmd, "AT&F", 4)){
+ lynqSetArgv(&(argv[0]),&Point,"AT&F");
+ argv[3] = test+4;
+ return 4;
+ }
+ else
+ {
+ RLOGD("can't find this command");
+ return -1;
+ }
+ }
+ }
+ //char *testtest = strstr(argv[0], "+")+1;
+ //printf("testtest:%s\n", testtest);
+ //argv[0] = testtest;
+ //printf("%d\n", __FUNCTION__);
+ if(cnt > maxArgc)
+ return -1;
+ return cnt;
+}
+
+int CGMI(int argc,char*argv[],char *rilReq, int uToken)
+{
+ return 0;
+}
+int dialACall(int argc,char*argv[],char *rilReq, int uToken)
+{
+ if(argc < 4)
+ {
+ RLOGD("parameter error!!!");
+ return 1;
+ }
+ char *new_argv[3] = {};
+ new_argv[0] = (char *)rilReq;
+ new_argv[1] = argv[3];
+ new_argv[2] = "0";
+ android::lynqSendToRil(3,new_argv,uToken);
+ return 0;
+}
+int checkDataRegistration(int uToken)
+{
+ /*chech radio status*/
+ int ret = -1;
+ char *argv_temp[3]={};
+ argv_temp[0] = "RIL_REQUEST_DATA_REGISTRATION_STATE";
+ android::lynqSendToRil(1,argv_temp,uToken);
+ ret = lynqATWaitWithTime(10);
+ printf("ret=%d\n,current_data_reg=%d\n",ret,current_data_reg);
+ /*
+ if(ret == ETIMEDOUT)
+ {
+ int n = write(ttyGS3_fd,"+CME:ERROR 8004\n",strlen("+CME:ERROR 8004\n"));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ return -1;
+ }
+ */
+ if(current_data_reg!=0)
+ {
+ int n = write(ttyGS3_fd,"+CME ERROR: 1\n",strlen("+CME ERROR: 1\n"));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ return -1;
+ }
+ return 0;
+}
+int setupData(int argc,char*argv[],char *rilReq, int uToken)
+{
+ int status = 0;
+ int ret = -1;
+ if(argc < 4)
+ {
+ RLOGD("parameter error!!!");
+ return -1;
+ }
+ bzero(lynq_at,LYNQ_AT_LEN_MAX);
+ sprintf(lynq_at,"LAPNACT");
+ status = atoi(argv[3]);
+ char *new_argv[3] = {};
+ if(status==1)
+ {
+ ret = checkDataRegistration(uToken);
+ if(ret != 0)
+ {
+ RLOGD("[setupData] radio is not available!!!");
+ return -1;
+ }
+ new_argv[0] = (char *)rilReq;
+ android::lynqSendToRil(1,new_argv,uToken);
+ syncRespToUsb(0);
+ }
+ else if(status == 0)
+ {
+ new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
+ android::lynqSendToRil(1,new_argv,uToken);
+ }
+ return 0;
+}
+int setupData_e(int argc,char*argv[],char *rilReq, int uToken)
+{
+ int status = 0;
+ int ret = -1;
+ if(argc < 5)
+ {
+ RLOGD("parameter error!!!");
+ return 1;
+ }
+ bzero(lynq_at,LYNQ_AT_LEN_MAX);
+ sprintf(lynq_at,"ELAPNACT");
+ char *new_argv[10] = {};
+ status = atoi(argv[3]);
+ if(status == 1 )
+ {
+ ret = checkDataRegistration(uToken);
+ if(ret != 0)
+ {
+ RLOGD("[setupData] radio is not available!!!");
+ return -1;
+ }
+ new_argv[0] = (char *)rilReq;
+ new_argv[1] = argv[4];//apn
+ new_argv[2] = argv[5];//apntype
+ new_argv[3] = argv[6];//user
+ new_argv[4] = argv[7];//password
+ new_argv[5] = argv[8];//authType
+ new_argv[6] = argv[9];//normalprotocol
+ new_argv[7] = argv[10];//roamingprotocol
+ //memcpy(apn_table[apn_count].apn,argv[4],strlen(argv[4]));
+ //apn_count++;
+ android::lynqSendToRil(8,new_argv,uToken);
+ syncRespToUsb(0);
+ }
+ else if(status == 0)
+ {
+ new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
+ new_argv[1] = argv[4];//apntype
+ android::lynqSendToRil(2,new_argv,uToken);
+ }
+ return 0;
+}
+int switchSim(int argc,char*argv[],char *rilReq, int uToken)
+{
+ int slot = 0;
+ int ret = -1;
+ char *new_argv[10] = {};
+ 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);
+ return 0;
+}
+
+void * thread_test(void * arg)
+{
+ FILE *fp;
+ char buf[1024*3] = {0};
+ sprintf(buf, "echo 11 | emdlogger_ctrl 2>&1");
+ fp=popen(buf, "r");
+ if(!fp){
+ perror("popen:");
+ }
+ while(fgets(buf, 4072, fp) != NULL){}
+ pclose(fp);
+ return 0;
+}
+
+int lynq_screen(int argc,char*argv[],char *rilReq, int uToken){
+ char eBuf[64] = {0};
+ sprintf(eBuf,"\nOK\n\0");
+ int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ pthread_t thid;
+ int ret = pthread_create(&thid, NULL, thread_test, NULL);
+ if(ret != 0){
+ RLOGD("pthread_create error!!!");
+ return ret;
+ }
+ system("mdlogctl stop");
+ system("echo mem > /sys/power/autosleep");
+ system("echo 0 > /dev/wmtWifi");
+ system("echo 7 9 0 > /proc/driver/wmt_dbg");
+ char *new_argv[2] = {};
+ if(argc < 4)
+ {
+ RLOGD("parameter error!!!");
+ return -1;
+ }
+ new_argv[0] = (char *)rilReq;
+ new_argv[1] = argv[3];
+ android::lynqSendToRil(2,new_argv,uToken);
+ system("disown -a");
+ ret = pthread_join(thid,NULL);
+ if(ret != 0){
+ RLOGD("pthread_join error!!!");
+ return ret;
+ }
+ return 0;
+}
+
+void* getMDstate(int argc,char*argv[],int uToken)
+{
+ FILE *FP;
+ char BUFFER[64]={};
+ char BUF[32] = {};
+ int ret = -1;
+ int len = 0;
+ FP = popen("cat /sys/kernel/ccci/boot","r");
+ fgets(BUFFER,sizeof(BUFFER),FP);
+ printf("buffer %s",BUFFER);
+ modemStatus = atoi(&BUFFER[4]);
+ sprintf(BUF,"+LGMDS:%d\n\0",modemStatus);
+ len = write(ttyGS3_fd,BUF,strlen(BUF));
+ if(len < 0)
+ {
+ perror("lynq resp write:");
+ return 0;
+ }
+ syncRespToUsb(0);
+ return 0;
+}
+
+int lynqATWaitWithTime(int time)
+{
+ int ret = 0;
+ struct timespec start_tm;
+ //struct timespec end_tm;
+ //int timeout_ms = 2500;
+ clock_gettime(CLOCK_MONOTONIC, &start_tm);
+ //struct timeval now;
+ struct timespec outTime;
+ //gettimeofday(&now, NULL);//now.tv_sec(s),now.tv_usec(Micro s)
+ outTime.tv_sec = start_tm.tv_sec + time;
+ pthread_mutex_lock(&lynq_at_mutex);
+ //ret = pthread_cond_timedwait(&lynq_at_cond,&lynq_at_mutex,&outTime);
+ pthread_cond_wait(&lynq_at_cond,&lynq_at_mutex);
+ pthread_mutex_unlock(&lynq_at_mutex);
+ return ret;
+}
+void lynqAtRespWatingEvent()
+{
+ pthread_mutex_lock(&lynq_at_mutex);
+ pthread_cond_signal(&lynq_at_cond);
+ pthread_mutex_unlock(&lynq_at_mutex);
+ return;
+}
+void lynqInfo(char*argv[])
+{
+ int type = atoi(argv[2]);
+
+ if(type==2){
+ //lynq_output_LINFO_all();
+ syncRespToUsb(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);
+ syncRespToUsb(0);
+ }
+ else {
+ //lynq_output_info("parameter error\n");
+ syncRespToUsb(100);
+ }
+ }
+ else if(type==1){
+ //lynq_output_info("+LINFO: (0-1)\n");
+ syncRespToUsb(0);
+ }
+ else {
+ //lynq_output_info("parameter error\n");
+ syncRespToUsb(100);
+ }
+}
diff --git a/framework/lynq-ril-service/src/lynq_common.h b/framework/lynq-ril-service/src/lynq_common.h
index 90aa716..513431b 100755
--- a/framework/lynq-ril-service/src/lynq_common.h
+++ b/framework/lynq-ril-service/src/lynq_common.h
@@ -1,3 +1,13 @@
+/*=============================================================================
+** FileName: lynq_common.h
+** Desc: lynq common
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-27
+** History:
+**=============================================================================*/
+#ifndef LYNQ_COMMON
+#define LYNQ_COMMON
#include <stdlib.h>
#include <stdio.h>
#include <log/log.h>
@@ -6,19 +16,70 @@
#include "common.h"
#include <stateManager/stateManager.h>
#include <liblog/lynq_deflog.h>
-#include <pthread.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
+# include <pthread.h>
+
+#define LYNQ_GOTO_AT 1
+/*telephony*/
+#define LYNQ_GOTO_TELE_REQ 2
+/*Other-for-User*/
+#define LYNQ_GOTO_USER_REQ 3
+/*audio/etc*/
+#define LYNQ_GOTO_PLAT_REQ 4
+/*rndis/*/
+#define LYNQ_GOTO_RNDIS_REQ 5
+/*factory*/
+#define LYNQ_GOTO_FACTORY 6
+/*info output*/
+#define LYNQ_GOTO_LINFO_REQ 7
+/*fota*/
+#define LYNQ_GOTO_FOTA 8
+
#define LYNQ_APN_LEN_MAX 100
#define LYNQ_APNTPYE_LEN_MAX 50
#define LYNQ_APN_CHANNEL_MAX 10
#define LYNQ_AT_LEN_MAX 20
#define LYNQ_EVENT_WAIT_TIME_MAX 25 //m
+#define LYNQ_VERSION 8500
+#define LYNQ_REQUEST_CGMI (LYNQ_VERSION+1)
+#define LYNQ_REQUEST_GMI (LYNQ_VERSION+2)
+#define LYNQ_REQUEST_CGMM (LYNQ_VERSION +3)
+#define LYNQ_REQUEST_GMM (LYNQ_VERSION +4)
+#define LYNQ_REQUEST_ATD (LYNQ_VERSION +5)
+#define LYNQ_REQUEST_CGCMOD (LYNQ_VERSION +6)
+#define LYNQ_REQUEST_CGAUTO (LYNQ_VERSION +7)
+#define LYNQ_REQUEST_CGACT (LYNQ_VERSION +8)
+#define LYNQ_REQUEST_CGDCONT (LYNQ_VERSION +9)
+#define LYNQ_REQUEST_LAPNACT (LYNQ_VERSION +10)
+#define LYNQ_REQUEST_ELAPNACT (LYNQ_VERSION +11)
+#define LYNQ_REQUEST_SWITCH_SIM (LYNQ_VERSION +12)
+#define LYNQ_REQUEST_SEND_LOG_DATA (LYNQ_VERSION +13)
+#define LYNQ_PLAT_LGMDS (LYNQ_VERSION +14)
+#define LYNQ_REQUEST_RNDIS (LYNQ_VERSION +15)
+#define LYNQ_REQUEST_FACTORY (LYNQ_VERSION +16)
+#define LYNQ_REQUEST_LINFO (LYNQ_VERSION +17)
+#define LYNQ_REQUEST_SCREEN_STATE (LYNQ_VERSION +18)
+#define LYNQ_REQUEST_FOTA (LYNQ_VERSION +19)
+#define LYNQ_USER_REQUEST_GNSS (LYNQ_VERSION +100)
+#define LYNQ_USER_REQUEST_OTHRE (LYNQ_VERSION +101)
typedef struct
{
+ int cmdId;
+ char * cmdName;
+ int support;
+}usb_at_transfer_t;
+
+typedef struct
+{
+ int cmdId;
+ char* rilRequest;
+ char * cmdName;
+ int (*fun)(int argc,char*argv[],char *rilReq,int uToken);
+ void* (*ufun)(int argc,char *argv[],int uToken);
+}usb_cmd_t;
+typedef struct
+{
char apn[LYNQ_APN_LEN_MAX];
char apntype[LYNQ_APNTPYE_LEN_MAX];
char ifaceName[LYNQ_APNTPYE_LEN_MAX];
@@ -28,6 +89,24 @@
}apn_table_t;
extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX];
extern int apn_count;
-#ifdef __cplusplus
-}
+extern char lynq_at[LYNQ_AT_LEN_MAX];
+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);
+
+int routeCmd(int request);
+
+int CGMI(int argc,char*argv[],char *rilReq, int uToken);
+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_screen(int argc,char*argv[],char *rilReq, int uToken);
+void* getMDstate(int argc,char*argv[],int uToken);
+int lynqATWaitWithTime(int time);//time(s)
+void lynqAtRespWatingEvent();
+int syncRespToUsb(int error_code);
+void lynqInfo(char*argv[]);
#endif
diff --git a/framework/lynq-ril-service/src/lynq_user.cpp b/framework/lynq-ril-service/src/lynq_user.cpp
new file mode 100755
index 0000000..7078df7
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_user.cpp
@@ -0,0 +1,20 @@
+/*=============================================================================
+** FileName: lynq_user.cpp
+** Desc: handle data from user
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-28
+** History:
+**=============================================================================*/
+#include <stdio.h>
+#include "lynq_user.h"
+void* lynqGnss(int argc,char *argv[],int uToken)
+{
+ printf("[lynqGnss] this is user space !!!\n");
+ return 0;
+}
+void* lynqOther(int argc,char *argv[],int uToken)
+{
+ printf("[lynqOther] this is user space !!!\n");
+ return 0;
+}
diff --git a/framework/lynq-ril-service/src/lynq_user.h b/framework/lynq-ril-service/src/lynq_user.h
new file mode 100755
index 0000000..6ad7361
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_user.h
@@ -0,0 +1,14 @@
+/*=============================================================================
+** FileName: lynq_user.h
+** Desc: handle data from user
+** Author: Warren
+** Version: V1.0
+** LastChange: 2021-09-28
+** History:
+**=============================================================================*/
+#ifndef LYNQ_USER
+#define LYNQ_USER
+
+void* lynqGnss(int argc,char *argv[],int uToken);
+void* lynqOther(int argc,char *argv[],int uToken);
+#endif
diff --git a/framework/lynq-ril-service/src/lynq_user_commands.h b/framework/lynq-ril-service/src/lynq_user_commands.h
new file mode 100755
index 0000000..d3f5a12
--- /dev/null
+++ b/framework/lynq-ril-service/src/lynq_user_commands.h
@@ -0,0 +1 @@
+
diff --git a/framework/lynq-ril-service/src/makefile b/framework/lynq-ril-service/src/makefile
index d6d78f6..39ae608 100755
--- a/framework/lynq-ril-service/src/makefile
+++ b/framework/lynq-ril-service/src/makefile
@@ -64,8 +64,14 @@
-I$(LOCAL_PATH)/ecall/gost/sslp/commands \
-I$(LOCAL_PATH)/ecall/gost/sslp/ecall \
-I$(LOCAL_PATH)/ecall/gost/sslp/teledata \
+ -I$(LOCAL_PATH)/rndis \
+ -I$(LOCAL_PATH)/factory \
+ -I$(LOCAL_PATH)/fota \
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/include \
+ -I$(ROOT)$(includedir)/ftp \
+ -I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/vendor-ril \
-I$(ROOT)$(includedir)/gstreamer-1.0 \
-I$(ROOT)$(includedir)/glib-2.0 \
@@ -99,7 +105,9 @@
-ldtmf \
-lapn \
-ldbus-1 \
+ -llynq-log \
-lsqlite3 \
+ -lnandapi \
ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
LOCAL_LIBS += -luciwrapper
@@ -108,7 +116,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)
+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)
EXECUTABLE = lynq-ril-service
diff --git a/framework/lynq-ril-service/src/ril.cpp b/framework/lynq-ril-service/src/ril.cpp
index bc6133a..3dd15d3 100755
--- a/framework/lynq-ril-service/src/ril.cpp
+++ b/framework/lynq-ril-service/src/ril.cpp
@@ -76,6 +76,12 @@
#include "lynq_interface.h"
#include "lynq_common.h"
#include "lynq_sms_manager.h"
+/*lei add*/
+#include "lynq_at.h"
+#include "lynq_user.h"
+#include "lynq_rndis.h"
+#include "lynq_factory.h"
+/*lei add*/
/*Warren add for t800 RIL service 2021_12_10 end*/
#define LOG_TAG "DEMO_RIL"
@@ -3794,6 +3800,49 @@
#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;
+ char buf[128] = {0};
+ char cgmr[128] = {0};
+ sprintf(buf, "uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION 2>&1");
+ fp=popen(buf, "r");
+ int n;
+ while(fgets(buf, sizeof(buf), fp) != NULL){
+
+ }
+ //parse_version_buf(buf);
+ sprintf(cgmr, "%s %s", "+CGMR: ", buf);
+ n = write(ttyGS3_fd,cgmr,strlen(cgmr));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ pclose(fp);
+ return 0;
+}
+
extern "C" void
RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
RequestInfo *pRI;
@@ -3944,6 +3993,9 @@
{
update_reg_data_radio_tech(RIL_REQUEST_DATA_REGISTRATION_STATE, atoi((char *)p_cur[3]), socket_id, pRI->token);
}
+ /*Warren add for SZZT 2021/11/14 start*/
+ lynqAtRespWatingEvent();
+ /*Warren add for SZZT 2021/11/14 end*/
break;
}
case RIL_REQUEST_GET_CURRENT_CALLS:
@@ -4013,11 +4065,51 @@
}
break;
}
+ case RIL_REQUEST_OEM_HOOK_RAW:
+ {
+ if(pRI->lynqEvent==1)
+ {
+ /*lei add for at+cgmr*/
+ if(strstr((const char*)response,"+CGMR")){
+ lynq_get_version();
+ }
+ /*lei add for at+cgmr*/
+ int n = write(ttyGS3_fd,response,responselen);
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ printf("n = %d\n",n);
+ }
+ }
default:
break;
}
}
-
+ /*Warren add for FAW platform 2021/10/8 start*/
+ else
+ {
+ if(pRI->lynqEvent==1)
+ {
+ char eBuf[64] = {0};
+ bzero(eBuf, 64);
+ if(e==RIL_E_SUCCESS)
+ {
+ sprintf(eBuf,"\nOK\n\0");
+ }
+ else
+ {
+ sprintf(eBuf,"\nCME ERROR: %d\n\0",e);
+ }
+ int n = write(ttyGS3_fd,eBuf,strlen(eBuf));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ //printf("n = %d\n",n);
+ }
+ }
+ /*Warren add for FAW platform 2021/10/8 start*/
if (e != RIL_E_SUCCESS) {
appendPrintBuf("%s fails by %s", printBuf, failCauseToString(e));
}
@@ -5958,6 +6050,149 @@
return 0;
}
+void startUsbLoop(void)
+{
+ int nread=-1;
+ int n = -1;
+ int routeId = -1;
+ char buffer[1024]={};
+ char tempbuf[1024]={};
+ char buf_parser[64] = {};
+ 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);
+ if(ttyGS3_fd==-1)
+ {
+ RLOGE("open ttyGS3 failure!!!");
+ printf("open ttyGS3 failure!!!\n");
+ //printf("%s\n",strerr(errno));
+ perror("--test--");
+ kill(0, SIGKILL);
+ }
+ printf("[%s]open %s successfully!!!\n",__FUNCTION__,ttyname(ttyGS3_fd));
+ while(1)
+ {
+ bzero(buffer, 1024);
+ bzero(tempbuf, 1024);
+ bzero(buf_parser, 64);
+ if((nread=read(ttyGS3_fd,buffer,1024))>0)
+ {
+ if(nread<2)
+ {
+ //RLOGD("input is space!!!");
+ continue;
+ }
+ buffer[nread-1] = '\0';
+ //printf("buffer is %s\n",buffer);
+ for(int i = 0 ; i < nread ; i++)
+ {
+ if(buffer[i]=='=')
+ {
+ break;
+ }
+ if(buffer[i]>='a'&&buffer[i]<='z')
+ {
+ buffer[i] = buffer[i]-32;
+ }
+ }
+ printf("buffer is %s\n",buffer);
+ 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:");
+ }
+ printf("n = %d\n",n);
+ continue;
+ }
+ usb_at_transfer_t *atCmd = lynqFindId(argv[0]);
+ if(atCmd==NULL)
+ {
+ RLOGD("LYNQ send ATCMD:%s!!!",argv[1]);
+ lynqSendAt(argc,argv,1010);
+ continue;
+ }
+ if(!((1<<atoi(argv[2])) & (atCmd->support)))
+ {
+ RLOGD("LYNQ %s not support!!!",atCmd->cmdName);
+ int n = write(ttyGS3_fd,"\n+CME ERROR: 100\n",strlen("\n+CME ERROR: 100\n"));
+ if(n<0)
+ {
+ perror("lynq resp write:");
+ }
+ continue;
+ }
+ routeId = routeCmd(atCmd->cmdId);
+ //routeId = routeCmd(atcmd->cmdId);
+ //routeId = LYNQ_GOTO_AT;
+ switch(routeId)
+ {
+ case LYNQ_GOTO_AT:
+ {
+ lynqSendAt(argc,argv,1010);
+ break;
+ }
+ case LYNQ_GOTO_TELE_REQ:
+ {
+ usb_cmd_t *atCmdEvn = lynqFindUsbEvent(argv[0]);
+ if(!atCmdEvn)
+ {
+ RLOGD("can not find at cmd event!!!");
+ continue;
+ }
+ atCmdEvn->fun(argc,argv,atCmdEvn->rilRequest,1011);
+ break;
+ }
+ case LYNQ_GOTO_USER_REQ:
+ {
+ usb_cmd_t *atCmdEvn = lynqFindUsbEvent(argv[0]);
+ if(!atCmdEvn)
+ {
+ RLOGD("can not find at cmd event!!!");
+ continue;
+ }
+ atCmdEvn->ufun(argc,argv,1012);
+ break;
+ }
+ case LYNQ_GOTO_LINFO_REQ:
+ {
+ lynqInfo(argv);
+ break;
+ }
+ // case LYNQ_GOTO_PLAT_REQ:
+ // {
+ // lynq_deal_with_log_at(&argv[3]);
+ // break;
+ // }
+ case LYNQ_GOTO_RNDIS_REQ:
+ {
+ lynq_get_rndis_data(buffer);
+ break;
+ }
+ case LYNQ_GOTO_FACTORY:
+ {
+ lynq_get_factory_data(argc,argv);
+ break;
+ }
+ // case LYNQ_GOTO_FOTA:
+ // {
+ // lynq_atfota_test(argv);
+ // break;
+ // }
+ default:
+ break;
+ }
+ }
+ }
+ close(ttyGS3_fd);
+ return;
+}
+
void *
eventLoop(void *param) {
pthread_mutex_lock(&s_startupMutex);
@@ -5979,6 +6214,23 @@
return NULL;
}
+
+void *
+eventLoop_at(void *param) {
+ pthread_mutex_lock(&s_startupMutex);
+ s_started = 1;
+ pthread_cond_broadcast(&s_startupCond);
+ pthread_mutex_unlock(&s_startupMutex);
+ //RIL_StartRevSocket();
+ startUsbLoop();
+ //startUsbLoop_test();
+ RLOGD("error in event_loop_base errno:%d", errno);
+ // kill self to restart on error
+ kill(0, SIGKILL);
+
+ return NULL;
+}
+
const int RspDispFunction(int request,char* arg, RIL_SOCKET_ID socket_id)
{
int waittoken;
@@ -6221,6 +6473,82 @@
done:
pthread_mutex_unlock(&s_startupMutex);
}
+/*Warren add for FAW 2021/09/23 start
+** use ttyGS0 port
+*/
+int lynqSendToRil(int argc,char *argv[],int uToken)
+{
+ if(argc < 1)
+ {
+ RLOGE("lynqSendToRil error input.");
+ return 1;
+ }
+ for(int i =0;i<argc;i++)
+ {
+ printf("argv[%d]=%s\n",i,argv[i]);
+ }
+ COMMAND *command = find_command(argv[0]);
+ if(!command)
+ {
+ RLOGE("%s: No such command for DemoApp", argv[0]);
+ return 1;
+ }
+
+ int32_t request;
+
+ request = command->request;
+
+ RIL_SOCKET_ID id = RIL_SOCKET_1;
+ if(utils::is_support_dsds()) {
+ id = (RIL_SOCKET_ID)get_default_sim_all_except_data();
+ } else if(utils::is_suppport_dsss()) {
+ id = (RIL_SOCKET_ID)Phone_utils::get_enable_sim_for_dsss();
+ }
+
+ if(request == -1)
+ {
+ (*(command->func)) (argc, argv, id, NULL);
+ return 1;
+ }
+
+ if (request < 1 || (request >= (int32_t)NUM_ELEMS(s_commands) && request < RIL_REQUEST_VENDOR_BASE)) {
+ RLOGW("unsupported request code %d token %d", request);
+ // FIXME this should perhaps return a response
+ return 1;
+ }
+
+ RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
+
+
+ RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
+ pRI->lynqEvent = 1;
+ //Radio on/off only allow one thread operate.
+ if(request == RIL_REQUEST_RADIO_POWER)
+ {
+ speciaRequest_wait();
+ }
+ memset(Time_buf,0,sizeof(Time_buf));
+ GetTimeString(Time_buf);
+ //FUNCTION_CALLED(Time_buf,requestToString(request));
+ int waittoken = pRI->token;
+ (*(command->func)) (argc, argv, pRI->socket_id, pRI);
+ FUNCTION_CALLED(Time_buf,requestToString(request));
+ waitResponse(waittoken);
+ memset(Time_buf,0,sizeof(Time_buf));
+ GetTimeString(Time_buf);
+ FUNCTION_RETURN(Time_buf,requestToString(request));
+ return 0;
+}
+
+int sendRespToUsb(char *cmd)
+{
+ return 0;
+}
+int sendUrcToUsb(char *cmd)
+{
+ return 0;
+}
+/*Warren add for FAW 2021/09/23 end*/
void startPMLoop(void)
{
@@ -6302,11 +6630,22 @@
RLOGW("Failed to create dispatch thread: %s", strerror(result));
goto done;
}
+
+ while (s_started == 0) {
+ pthread_cond_wait(&s_startupCond, &s_startupMutex);
+ }
+ /*mobiletek add*/
+ s_started = 0;
+ result = pthread_create(&s_tid_dispatch, &attr, eventLoop_at, NULL);
+ if (result != 0) {
+ RLOGW("Failed to create dispatch thread: %s", strerror(result));
+ goto done;
+ }
while (s_started == 0) {
pthread_cond_wait(&s_startupCond, &s_startupMutex);
}
-
+ /*mobiletek add*/
result = pthread_create(&s_tid_dispatch, &attr, responseLoop, NULL);
if (result != 0) {
RLOGW("Failed to create response dispatch thread: %s", strerror(result));
diff --git a/framework/lynq-ril-service/src/rndis/lynq_rndis.cpp b/framework/lynq-ril-service/src/rndis/lynq_rndis.cpp
new file mode 100755
index 0000000..c7849c7
--- /dev/null
+++ b/framework/lynq-ril-service/src/rndis/lynq_rndis.cpp
@@ -0,0 +1,156 @@
+/*=============================================================================
+** FileName: lynq_send_log_data
+** Desc: send log data
+** Author: victor
+** Version: V1.0
+** LastChange: 2021-12-23
+** History:
+=============================================================================*/
+
+#include "common.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <malloc.h>
+#include<unistd.h>
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <log/log.h>
+#include "lynq_rndis.h"
+
+#define LYNQ_RNDIS_MALLOC_LEN 64
+
+void lynq_rndis_response_ttyGS3(char *log_buf)
+{
+// sprintf(log_buf,"LYNQ_GOTO_LOGS_REQ\n");
+ write(ttyGS3_fd,log_buf,strlen(log_buf));
+ return ;
+}
+
+int lynqParseRndisCommand(const char* cmd,char **argv)
+{
+ char test[1024];
+ char *token;
+ char *str = test;
+ char *string;
+ char *lynq_str_buf;
+ char *parameter;
+ int cnt = 0;
+ memcpy(test, cmd, strlen(cmd));
+ if(strstr(cmd,"="))
+ {
+ token = strtok(str, "=");
+ lynq_str_buf = strstr(token, "+");
+ cnt++;
+ if((strlen(lynq_str_buf)) <LYNQ_RNDIS_MALLOC_LEN)
+ {
+ bzero(argv[0], LYNQ_RNDIS_MALLOC_LEN);
+ memcpy(argv[0],lynq_str_buf,strlen(lynq_str_buf));
+ }
+
+ while (token != NULL)
+ {
+ string = token;
+ token = strtok(NULL, "=");
+ }
+ parameter = strtok(string, ",");
+ int i = 1;
+ while (parameter != NULL)
+ {
+ if(((strlen(parameter)) <LYNQ_RNDIS_MALLOC_LEN) && (cnt < MAX_RNDIS_NUM))
+ {
+ cnt++;
+ bzero(argv[i], LYNQ_RNDIS_MALLOC_LEN);
+ memcpy(argv[i++],parameter,strlen(parameter));
+ }
+ parameter = strtok(NULL, ",");
+ }
+ }
+ if(cnt > MAX_RNDIS_NUM)
+ return -1;
+ return cnt;
+}
+
+
+int lynq_deal_with_rndis(int cmd_num,char **lynq_rndis_arr)
+{
+ FILE *fp;
+ char lynq_rndis_dev[LYNQ_RNDIS_MALLOC_LEN+32] = {0};
+ char lynq_rndis_buf[1024];
+ char lynq_rndis_log_buf[256];
+ int m = 1;
+ if(0 == strcmp(lynq_rndis_arr[0], "+LRNDISHANDLE"))
+ {
+// lynq_rndis_response_ttyGS3("##############\n");
+ for(m = 1; m < cmd_num; m++)
+ {
+/* bzero(lynq_rndis_log_buf, 256);
+ sprintf(lynq_rndis_log_buf,"cmd_num:%d,m=%d:%s\n",cmd_num,m,lynq_rndis_arr[m]);
+ lynq_rndis_response_ttyGS3(lynq_rndis_log_buf);
+*/
+ bzero(lynq_rndis_buf, 1024);
+
+ bzero(lynq_rndis_dev, (LYNQ_RNDIS_MALLOC_LEN+32));
+ sprintf(lynq_rndis_dev,"%s 2>&1",lynq_rndis_arr[m]);
+ fp=popen(lynq_rndis_dev, "r");
+ usleep(500);
+// sleep(2);
+ fgets(lynq_rndis_buf,sizeof(lynq_rndis_buf),fp);
+ pclose(fp);
+ if(strlen(lynq_rndis_buf) > 0)
+ {
+ lynq_rndis_response_ttyGS3(lynq_rndis_buf);
+ lynq_rndis_response_ttyGS3("\n");
+ }
+ }
+
+ }
+ return 1;
+}
+
+int lynq_open_rndis(int cmd_num,char **lynq_argv)
+{
+ for(int j = 0;j<cmd_num;j++)
+ {
+ lynq_rndis_response_ttyGS3(lynq_argv[j]);
+ lynq_rndis_response_ttyGS3("\n");
+ }
+ return 1;
+}
+
+int lynq_get_rndis_data(char *rndis_data)
+{
+ int lynq_argc_num = 0;
+ char *lynq_str_argv[MAX_RNDIS_NUM];
+
+for(int i = 0;i < MAX_RNDIS_NUM; i++)
+{
+ lynq_str_argv[i] = (char*)calloc(1,LYNQ_RNDIS_MALLOC_LEN);
+ if(lynq_str_argv[i] == NULL)
+ {
+ return -1;
+ }
+}
+
+ lynq_argc_num = lynqParseRndisCommand(rndis_data,lynq_str_argv);
+// lynq_open_rndis(lynq_argc_num,lynq_str_argv);
+ lynq_deal_with_rndis(lynq_argc_num,lynq_str_argv);
+for(int mm= 0;mm < MAX_RNDIS_NUM; mm++)
+{
+ if(lynq_str_argv[mm] != NULL)
+ {
+ free(lynq_str_argv[mm]);
+ lynq_str_argv[mm] = NULL;
+ }
+}
+ return 1;
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/framework/lynq-ril-service/src/rndis/lynq_rndis.h b/framework/lynq-ril-service/src/rndis/lynq_rndis.h
new file mode 100755
index 0000000..a6d9009
--- /dev/null
+++ b/framework/lynq-ril-service/src/rndis/lynq_rndis.h
@@ -0,0 +1,16 @@
+#ifndef __LYNQ_RNDIS_H__
+#define __LYNQ_RNDIS_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_RNDIS_NUM 10
+
+int lynq_open_rndis(int cmd_num,char **lynq_argv);
+int lynq_get_rndis_data(char *rndis_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__LYNQ_LOGSEND_TEST_H__