[Feature][T8TSK-81]Merged and upload MR3.0 New Modify content,merged meta-sdk,modem
Change-Id: Idb6c80fcf349c0db72e7ca3fa5b1fd7944ec1290
diff --git a/src/bsp/lk/app/blxboot/rules.mk b/src/bsp/lk/app/blxboot/rules.mk
index b832b2c..2dfae7e 100644
--- a/src/bsp/lk/app/blxboot/rules.mk
+++ b/src/bsp/lk/app/blxboot/rules.mk
@@ -28,9 +28,11 @@
GLOBAL_COMPILEFLAGS += -DAB_OTA_UPDATER
endif
-ifeq ($(strip $(ENABLE_TCXO)),yes)
-GLOBAL_COMPILEFLAGS += -DENABLE_TCXO
-endif
+#Typethree@2023.2.01 modify for TCXO hw version start
+#ifeq ($(strip $(ENABLE_TCXO)),yes)
+#GLOBAL_COMPILEFLAGS += -DENABLE_TCXO
+#endif
+#Typethree@2023.2.01 modify for TCXO hw version end
# loading kernel format config,
# 0: fit image header 1: android image header
diff --git a/src/bsp/lk/engine.mk b/src/bsp/lk/engine.mk
index aeae002..d4717ea 100755
--- a/src/bsp/lk/engine.mk
+++ b/src/bsp/lk/engine.mk
@@ -83,6 +83,12 @@
endif
GLOBAL_CPPFLAGS := -fno-exceptions -fno-rtti -fno-threadsafe-statics
+#xf.li@20230207 modify for T8TSK-155
+LYNQ_CONFIG_COMMITID := $(shell git rev-parse HEAD)
+
+GLOBAL_COMPILEFLAGS += -DLYNQ_VERSION=\"$(LYNQ_CONFIG_VERSION)\"
+GLOBAL_COMPILEFLAGS += -DLYNQ_COMMITID=\"$(LYNQ_CONFIG_COMMITID)\"
+#xf.li@20230207 modify for T8TSK-155
#GLOBAL_CPPFLAGS += -Weffc++
GLOBAL_ASMFLAGS := -DASSEMBLY
GLOBAL_LDFLAGS :=
diff --git a/src/bsp/lk/makefile b/src/bsp/lk/makefile
index be3f634..6cd54cc 100644
--- a/src/bsp/lk/makefile
+++ b/src/bsp/lk/makefile
@@ -24,7 +24,10 @@
export SECURE_BOOT_TYPE
export AB_OTA_UPDATER
export AVB_ENABLE_ANTIROLLBACK
-export ENABLE_TCXO
+
+#Typethree@2023.2.01 modify for TCXO hw version start
+#export ENABLE_TCXO
+#Typethree@2023.2.01 modify for TCXO hw version end
# vaneer makefile that calls into the engine with lk as the build root
# if we're the top level invocation, call ourselves with additional args
diff --git a/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c b/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
index 7058a94..ac70548 100644
--- a/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
+++ b/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
@@ -40,6 +40,9 @@
#include <platform/clkbuf_ctl.h>
#include <platform/srclken_rc.h>
+/*Typethree2023/1/29 modify for TCXO hw version start*/
+#include <platform/mt_gpio.h>
+/*Typethree2023/1/29 modify for TCXO hw version end*/
#define clk_buf_warn(fmt, args...) dprintf(ALWAYS, fmt, ##args)
#define clk_buf_dbg(fmt, args...) //dprintf(SPEW, fmt, ##args)
@@ -311,13 +314,19 @@
pmic_config_interface(PMIC_XO_EXTBUF1_MODE_ADDR, PMIC_CW00_INIT_VAL,
PMIC_REG_MASK, PMIC_REG_SHIFT);
-#ifdef ENABLE_TCXO //tcxo
- pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL_TCXO,
- PMIC_REG_MASK, PMIC_REG_SHIFT);
-#else //normal case
- pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL,
- PMIC_REG_MASK, PMIC_REG_SHIFT);
-#endif
+/*Typethree2023/1/29 modify for TCXO hw version start*/
+//tcxo
+ if (mt_get_gpio_in(GPIO81) != 0 && mt_get_gpio_in(GPIO82) == 0) //TCXO open
+ {
+ pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL_TCXO,
+ PMIC_REG_MASK, PMIC_REG_SHIFT);
+ }
+ else
+ {
+ pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL,
+ PMIC_REG_MASK, PMIC_REG_SHIFT);
+ }
+/*Typethree2023/1/29 modify for TCXO hw version end*/
pmic_config_interface(PMIC_XO_EXTBUF7_MODE_ADDR, PMIC_CW09_H_INIT_VAL,
PMIC_REG_MASK, PMIC_REG_SHIFT);
@@ -411,29 +420,33 @@
PMIC_TMA_KEY_H_MASK, PMIC_TMA_KEY_H_SHIFT);
/* disable clock buffer by DCT setting */
-
-#ifdef ENABLE_TCXO //tcxo
- pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
- PMIC_XO_EXTBUF2_MODE_MASK,
- PMIC_XO_EXTBUF2_MODE_MASK,
- PMIC_XO_EXTBUF2_MODE_SHIFT);
- pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
- PMIC_XO_EXTBUF2_EN_M_MASK,
- PMIC_XO_EXTBUF2_EN_M_MASK,
- PMIC_XO_EXTBUF2_EN_M_SHIFT);
-#else //normal case
- if (CLK_BUF2_STATUS_PMIC == CLOCK_BUFFER_DISABLE) {
- pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
- PMIC_XO_EXTBUF2_MODE_MASK,
- PMIC_XO_EXTBUF2_MODE_MASK,
- PMIC_XO_EXTBUF2_MODE_SHIFT);
- pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
- PMIC_XO_EXTBUF2_EN_M_MASK,
- PMIC_XO_EXTBUF2_EN_M_MASK,
- PMIC_XO_EXTBUF2_EN_M_SHIFT);
- }
-#endif
-
+/*Typethree2023/1/29 modify for TCXO hw version start*/
+//tcxo
+ if (mt_get_gpio_in(GPIO81) !=0 && mt_get_gpio_in(GPIO82) == 0)
+ {
+ pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+ PMIC_XO_EXTBUF2_MODE_MASK,
+ PMIC_XO_EXTBUF2_MODE_MASK,
+ PMIC_XO_EXTBUF2_MODE_SHIFT);
+ pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+ PMIC_XO_EXTBUF2_EN_M_MASK,
+ PMIC_XO_EXTBUF2_EN_M_MASK,
+ PMIC_XO_EXTBUF2_EN_M_SHIFT);
+ }
+ else
+ {
+ if (CLK_BUF2_STATUS_PMIC == CLOCK_BUFFER_DISABLE) {
+ pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+ PMIC_XO_EXTBUF2_MODE_MASK,
+ PMIC_XO_EXTBUF2_MODE_MASK,
+ PMIC_XO_EXTBUF2_MODE_SHIFT);
+ pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+ PMIC_XO_EXTBUF2_EN_M_MASK,
+ PMIC_XO_EXTBUF2_EN_M_MASK,
+ PMIC_XO_EXTBUF2_EN_M_SHIFT);
+ }
+ }
+/*Typethree2023/1/29 modify for TCXO hw version end*/
if (CLK_BUF3_STATUS_PMIC == CLOCK_BUFFER_DISABLE) {
pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
PMIC_XO_EXTBUF3_MODE_MASK,
diff --git a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
index b180497..c9c61fb 100755
--- a/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
+++ b/src/bsp/lk/platform/mt2735/drivers/gpio/mt_gpio.c
@@ -982,6 +982,20 @@
//dongyu@2022.11.03 Modify the gpio of imu/smi230 end
#endif
+//Typethree2023/1/29 modify for TCXO hw version start
+ mt_set_gpio_mode(GPIO81, 0);
+ mt_set_gpio_dir(GPIO81, GPIO_DIR_IN);
+ mt_set_gpio_pull_enable(GPIO81, GPIO_PULL_DISABLE);
+ mt_set_gpio_smt(GPIO81, GPIO_SMT_ENABLE);
+ mt_set_gpio_ies(GPIO81, GPIO_IES_ENABLE);
+
+ mt_set_gpio_mode(GPIO82, 0);
+ mt_set_gpio_dir(GPIO82, GPIO_DIR_IN);
+ mt_set_gpio_pull_enable(GPIO82, GPIO_PULL_DISABLE);
+ mt_set_gpio_smt(GPIO82, GPIO_SMT_ENABLE);
+ mt_set_gpio_ies(GPIO82, GPIO_IES_ENABLE);
+//Typethree2023/1/29 modify for TCXO hw version end
+
}
diff --git a/src/bsp/lk/top/main.c b/src/bsp/lk/top/main.c
index 36b5a31..95fee17 100644
--- a/src/bsp/lk/top/main.c
+++ b/src/bsp/lk/top/main.c
@@ -87,7 +87,9 @@
// do any super early target initialization
lk_primary_cpu_init_level(LK_INIT_LEVEL_PLATFORM_EARLY, LK_INIT_LEVEL_TARGET_EARLY - 1);
target_early_init();
-
+#ifdef LYNQ_VERSION
+ dprintf(CRITICAL, "LYNQ_VERSION:"LYNQ_VERSION" LYNQ_COMMITID: "LYNQ_COMMITID"\n");
+#endif
#if WITH_SMP
dprintf(INFO, "\nwelcome to lk/MP\n\n");
#else
diff --git a/src/connectivity/gps/2.0/gnss_test/mnld_client/inc/mnld_test.h b/src/connectivity/gps/2.0/gnss_test/mnld_client/inc/mnld_test.h
index f8f29bf..c09611f 100644
--- a/src/connectivity/gps/2.0/gnss_test/mnld_client/inc/mnld_test.h
+++ b/src/connectivity/gps/2.0/gnss_test/mnld_client/inc/mnld_test.h
@@ -12,6 +12,7 @@
#define MNLD_TEST_NETWORK_ROAMING "roaming"
#define MNLD_TEST_NETWORK_DISABLE "disable"
#define MNLD_TEST_RAW_MEAS_START "raw_start"
+#define MNLD_TEST_RAW_MEAS_DEBUG "raw_dbg"
#define MNL_VER_LEN 52
diff --git a/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client.c b/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client.c
index 63c45ab..0ab2136 100644
--- a/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client.c
+++ b/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client.c
@@ -51,6 +51,7 @@
GpsNavigationMessageCallbacks* navi_msg_cbs = NULL;
int raw_flag = 0;
+int raw_dbg = 0;
int valid_ttff_cnt = 0;
int valid_ttff_sum = 0;
@@ -635,6 +636,16 @@
action = MNLD_TEST_ACTION_GNSS_RAW;
LOGD("mnld_test raw measurement start.\r\n");
exit_flag = 0;
+ if(argc == 3) {
+ if(!strncmp(argv[2], MNLD_TEST_RAW_MEAS_DEBUG, strlen(MNLD_TEST_RAW_MEAS_DEBUG))) {
+ raw_dbg = 1;
+ LOGD("raw measurement start with dbeug message print\r\n");
+ } else {
+ LOGW(" raw measurement start fail, Unknown command!(%d)\r\n", argc);
+ mnld_test_show_help();
+ exit_flag = 1;
+ }
+ }
}else{
LOGE("Unknown command!\r\n");
mnld_test_show_help();
diff --git a/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client_gps_cb.c b/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client_gps_cb.c
index 5e60550..fabb4c4 100644
--- a/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client_gps_cb.c
+++ b/src/connectivity/gps/2.0/gnss_test/mnld_client/src/mnld_client_gps_cb.c
@@ -18,6 +18,7 @@
GpsLocation_ext location_rslt;
mnld_test_result mnld_test_result_body;
extern char mnld_test_mnl_ver[MNL_VER_LEN];
+extern int raw_dbg;
#define MNLD_TEST_CB_DBG 0
@@ -299,61 +300,66 @@
}
meas_cnt = data->measurement_count;
- LOGD("==================== print_gnss_measurement ====================");
- LOGD("measurement count is: %d", meas_cnt);
- for (i = 0; i < meas_cnt; i++) {
- raw_meas = &(data->measurements[i]);
- LOGD("********* measurement message %d *********", i+1);
- LOGD("flags=0x%x", raw_meas->legacyMeasurement.flags);
- LOGD("svid=%d", raw_meas->legacyMeasurement.svid);
- LOGD("constellation=0x%x", raw_meas->legacyMeasurement.constellation);
- LOGD("time_offset_ns=%f", raw_meas->legacyMeasurement.time_offset_ns);
- LOGD("state=0x%x", raw_meas->legacyMeasurement.state);
- LOGD("received_gps_tow_ns=%"PRId64, raw_meas->legacyMeasurement.received_sv_time_in_ns);
- LOGD("received_gps_tow_uncertainty_ns=%"PRId64, raw_meas->legacyMeasurement.received_sv_time_uncertainty_in_ns);
- LOGD("c_n0_dbhz=%f", raw_meas->legacyMeasurement.c_n0_dbhz);
- LOGD("pseudorange_rate_mps=%f", raw_meas->legacyMeasurement.pseudorange_rate_mps);
- LOGD("pseudorange_rate_uncertainty_mps=%f", raw_meas->legacyMeasurement.pseudorange_rate_uncertainty_mps);
- LOGD("accumulated_delta_range_state=0x%x", raw_meas->legacyMeasurement.accumulated_delta_range_state);
- LOGD("accumulated_delta_range_m=%f", raw_meas->legacyMeasurement.accumulated_delta_range_m);
- LOGD("accumulated_delta_range_uncertainty_m=%f", raw_meas->legacyMeasurement.accumulated_delta_range_uncertainty_m);
- LOGD("carrier_frequency_hz=%f", raw_meas->legacyMeasurement.carrier_frequency_hz);
- LOGD("carrier_cycles=%"PRId64, raw_meas->legacyMeasurement.carrier_cycles);
- LOGD("carrier_phase=%f", raw_meas->legacyMeasurement.carrier_phase);
- LOGD("carrier_phase_uncertainty=%f", raw_meas->legacyMeasurement.carrier_phase_uncertainty);
- LOGD("multipath_indicator=%d", raw_meas->legacyMeasurement.multipath_indicator);
- LOGD("snr_db=%f", raw_meas->legacyMeasurement.snr_db);
-
- LOGD("agc_level_db=%f", raw_meas->agc_level_db);
- LOGD("codeType=%s", raw_meas->codeType);
- LOGD("fullInterSignalBiasNs=%f", raw_meas->fullInterSignalBiasNs);
- LOGD("fullInterSignalBiasUncertaintyNs=%f", raw_meas->fullInterSignalBiasUncertaintyNs);
- LOGD("satelliteInterSignalBiasNs=%f", raw_meas->satelliteInterSignalBiasNs);
- LOGD("satelliteInterSignalBiasUncertaintyNs=%f", raw_meas->satelliteInterSignalBiasUncertaintyNs);
- LOGD("basebandCN0DbHz=%f", raw_meas->basebandCN0DbHz);
+ if (raw_dbg == 1) {
+ LOGD("==================== print_gnss_measurement ====================");
}
+ LOGD("measurement count is: %d", meas_cnt);
- clk = &(data->clock);
- LOGD("======================= print_gnss_clock =======================");
- LOGD("flags=0x%x", clk->legacyClock.flags);
- LOGD("leap_second=%d", clk->legacyClock.leap_second);
- LOGD("time_ns=%"PRId64, clk->legacyClock.time_ns);
- LOGD("time_uncertainty_ns=%f", clk->legacyClock.time_uncertainty_ns);
- LOGD("full_bias_ns=%"PRId64, clk->legacyClock.full_bias_ns);
- LOGD("bias_ns=%f", clk->legacyClock.bias_ns);
- LOGD("bias_uncertainty_ns=%f", clk->legacyClock.bias_uncertainty_ns);
- LOGD("drift_nsps=%f", clk->legacyClock.drift_nsps);
- LOGD("drift_uncertainty_nsps=%f", clk->legacyClock.drift_uncertainty_nsps);
- LOGD("hw_clock_discontinuity_count=%d", clk->legacyClock.hw_clock_discontinuity_count);
- LOGD("constellation=%d", clk->referenceSignalTypeForIsb.constellation);
- LOGD("carrierFrequencyHz=%f", clk->referenceSignalTypeForIsb.carrierFrequencyHz);
- LOGD("codeType=%s", clk->referenceSignalTypeForIsb.codeType);
+ if (raw_dbg == 1) {
+ for (i = 0; i < meas_cnt; i++) {
+ raw_meas = &(data->measurements[i]);
+ LOGD("********* measurement message %d *********", i+1);
+ LOGD("flags=0x%x", raw_meas->legacyMeasurement.flags);
+ LOGD("svid=%d", raw_meas->legacyMeasurement.svid);
+ LOGD("constellation=0x%x", raw_meas->legacyMeasurement.constellation);
+ LOGD("time_offset_ns=%f", raw_meas->legacyMeasurement.time_offset_ns);
+ LOGD("state=0x%x", raw_meas->legacyMeasurement.state);
+ LOGD("received_gps_tow_ns=%"PRId64, raw_meas->legacyMeasurement.received_sv_time_in_ns);
+ LOGD("received_gps_tow_uncertainty_ns=%"PRId64, raw_meas->legacyMeasurement.received_sv_time_uncertainty_in_ns);
+ LOGD("c_n0_dbhz=%f", raw_meas->legacyMeasurement.c_n0_dbhz);
+ LOGD("pseudorange_rate_mps=%f", raw_meas->legacyMeasurement.pseudorange_rate_mps);
+ LOGD("pseudorange_rate_uncertainty_mps=%f", raw_meas->legacyMeasurement.pseudorange_rate_uncertainty_mps);
+ LOGD("accumulated_delta_range_state=0x%x", raw_meas->legacyMeasurement.accumulated_delta_range_state);
+ LOGD("accumulated_delta_range_m=%f", raw_meas->legacyMeasurement.accumulated_delta_range_m);
+ LOGD("accumulated_delta_range_uncertainty_m=%f", raw_meas->legacyMeasurement.accumulated_delta_range_uncertainty_m);
+ LOGD("carrier_frequency_hz=%f", raw_meas->legacyMeasurement.carrier_frequency_hz);
+ LOGD("carrier_cycles=%"PRId64, raw_meas->legacyMeasurement.carrier_cycles);
+ LOGD("carrier_phase=%f", raw_meas->legacyMeasurement.carrier_phase);
+ LOGD("carrier_phase_uncertainty=%f", raw_meas->legacyMeasurement.carrier_phase_uncertainty);
+ LOGD("multipath_indicator=%d", raw_meas->legacyMeasurement.multipath_indicator);
+ LOGD("snr_db=%f", raw_meas->legacyMeasurement.snr_db);
+
+ LOGD("agc_level_db=%f", raw_meas->agc_level_db);
+ LOGD("codeType=%s", raw_meas->codeType);
+ LOGD("fullInterSignalBiasNs=%f", raw_meas->fullInterSignalBiasNs);
+ LOGD("fullInterSignalBiasUncertaintyNs=%f", raw_meas->fullInterSignalBiasUncertaintyNs);
+ LOGD("satelliteInterSignalBiasNs=%f", raw_meas->satelliteInterSignalBiasNs);
+ LOGD("satelliteInterSignalBiasUncertaintyNs=%f", raw_meas->satelliteInterSignalBiasUncertaintyNs);
+ LOGD("basebandCN0DbHz=%f", raw_meas->basebandCN0DbHz);
+ }
+
+ clk = &(data->clock);
+ LOGD("======================= print_gnss_clock =======================");
+ LOGD("flags=0x%x", clk->legacyClock.flags);
+ LOGD("leap_second=%d", clk->legacyClock.leap_second);
+ LOGD("time_ns=%"PRId64, clk->legacyClock.time_ns);
+ LOGD("time_uncertainty_ns=%f", clk->legacyClock.time_uncertainty_ns);
+ LOGD("full_bias_ns=%"PRId64, clk->legacyClock.full_bias_ns);
+ LOGD("bias_ns=%f", clk->legacyClock.bias_ns);
+ LOGD("bias_uncertainty_ns=%f", clk->legacyClock.bias_uncertainty_ns);
+ LOGD("drift_nsps=%f", clk->legacyClock.drift_nsps);
+ LOGD("drift_uncertainty_nsps=%f", clk->legacyClock.drift_uncertainty_nsps);
+ LOGD("hw_clock_discontinuity_count=%d", clk->legacyClock.hw_clock_discontinuity_count);
+ LOGD("constellation=%d", clk->referenceSignalTypeForIsb.constellation);
+ LOGD("carrierFrequencyHz=%f", clk->referenceSignalTypeForIsb.carrierFrequencyHz);
+ LOGD("codeType=%s", clk->referenceSignalTypeForIsb.codeType);
- elap_realtime = &(data->elapsedRealtime);
- LOGD("================= print_gnss_elapsed_real_time =================");
- LOGD("flags=0x%x", elap_realtime->flags);
- LOGD("timestampNs=%"PRId64, elap_realtime->timestampNs);
- LOGD("timeUncertaintyNs=%"PRId64, elap_realtime->timeUncertaintyNs);
+ elap_realtime = &(data->elapsedRealtime);
+ LOGD("================= print_gnss_elapsed_real_time =================");
+ LOGD("flags=0x%x", elap_realtime->flags);
+ LOGD("timestampNs=%"PRId64, elap_realtime->timestampNs);
+ LOGD("timeUncertaintyNs=%"PRId64, elap_realtime->timeUncertaintyNs);
+ }
return;
}
@@ -384,13 +390,15 @@
return;
}
- LOGD("==================== print gnss navigation msg ====================");
- LOGD("[navi_msg] svid=%d", msg->svid);
- LOGD("[navi_msg] type=%d", msg->type);
- LOGD("[navi_msg] status=0x%x", msg->status);
- LOGD("[navi_msg] message_id=%d", msg->message_id);
- LOGD("[navi_msg] submessage_id=%d", msg->submessage_id);
- LOGD("[navi_msg] data_length=%zu", msg->data_length);
+ if (raw_dbg == 1) {
+ LOGD("==================== print gnss navigation msg ====================");
+ LOGD("[navi_msg] svid=%d", msg->svid);
+ LOGD("[navi_msg] type=%d", msg->type);
+ LOGD("[navi_msg] status=0x%x", msg->status);
+ LOGD("[navi_msg] message_id=%d", msg->message_id);
+ LOGD("[navi_msg] submessage_id=%d", msg->submessage_id);
+ LOGD("[navi_msg] data_length=%zu", msg->data_length);
+ }
data_length = msg->data_length;
if (data_length > MAX_NAV_DATA_LEN) {
@@ -398,8 +406,11 @@
}
memcpy(data, msg->data, data_length);
- for (i = 0; i < data_length; i++) {
- LOGD("[navi_msg] gnss navigation data[%d] = %x", i, data[i]);
+
+ if (raw_dbg == 1) {
+ for (i = 0; i < data_length; i++) {
+ LOGD("[navi_msg] gnss navigation data[%d] = %x", i, data[i]);
+ }
}
return;
diff --git a/src/connectivity/gps/2.0/gps_hal/inc/hardware/gps_mtk.h b/src/connectivity/gps/2.0/gps_hal/inc/hardware/gps_mtk.h
index f672617..da6ee72 100644
--- a/src/connectivity/gps/2.0/gps_hal/inc/hardware/gps_mtk.h
+++ b/src/connectivity/gps/2.0/gps_hal/inc/hardware/gps_mtk.h
@@ -787,6 +787,19 @@
/// v1.1 ///
int (*inject_fused_location)(double latitude, double longitude, float accuracy);
+ /** Dynamically set the fix interval.
+ *The unit of interval is ms.
+ */
+ int (*fix_interval)(uint32_t interval);
+
+ /** Dynamically set gnss OpMode. */
+ int (*op_mode)(uint8_t opmode);
+
+ /** Dynamically set elevation angle constraint. */
+ int (*elevation_angle)(uint8_t angle);
+
+ /** Dynamically set L5 disable/enable. */
+ int (*l5_disable)(bool disable);
} GpsInterface_ext;
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_common.h b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_common.h
index f1bf7f5..f1b812f 100644
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_common.h
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_common.h
@@ -52,6 +52,10 @@
HAL2MNL_SET_TTFF_ACC = 704,
HAL2MNL_BASIC_CAP_SYNC = 705,
HAL2MNL_EXT_CAP_SYNC = 706,
+ HAL2MNL_GPS_FIX_INTERVAL = 707,
+ HAL2MNL_GPS_OPMODE = 708,
+ HAL2MNL_GPS_ELEVATION_ANGLE = 709,
+ HAL2MNL_GPS_L5_DISABLE = 801,
} hal2mnl_cmd;
typedef int gps_pos_mode;
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_ext.c b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_ext.c
index aa6bf45..f384666 100644
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_ext.c
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_ext.c
@@ -184,6 +184,54 @@
return mnldinf_tcp_send(fd, buff, offset);
}
+int mnldinf_ext_gnss_fix_interval(int fd, uint32_t interval) {
+ LOGD("mnldinf_ext_gnss_fix_interval interval=%u", interval);
+ char buff[HAL_MNL_BUFF_SIZE] = {0};
+ int offset = 0;
+ mnldinf_put_int(buff, &offset, HAL_MNL_INTERFACE_VERSION);
+
+ mnldinf_put_int(buff, &offset, HAL2MNL_GPS_FIX_INTERVAL);
+ mnldinf_put_int(buff, &offset, interval);
+
+ return mnldinf_tcp_send(fd, buff, offset);
+}
+
+int mnldinf_ext_gnss_opmode(int fd, uint8_t opmode) {
+ LOGD("mnldinf_ext_gnss_opmode opmode=%hhu", opmode);
+ char buff[HAL_MNL_BUFF_SIZE] = {0};
+ int offset = 0;
+ mnldinf_put_int(buff, &offset, HAL_MNL_INTERFACE_VERSION);
+
+ mnldinf_put_int(buff, &offset, HAL2MNL_GPS_OPMODE);
+ mnldinf_put_byte(buff, &offset, opmode);
+
+ return mnldinf_tcp_send(fd, buff, offset);
+}
+
+int mnldinf_ext_gnss_elevation_angle(int fd, uint8_t elevation) {
+ LOGD("mnldinf_ext_gnss_elevation_angle elevation=%hhu", elevation);
+ char buff[HAL_MNL_BUFF_SIZE] = {0};
+ int offset = 0;
+ mnldinf_put_int(buff, &offset, HAL_MNL_INTERFACE_VERSION);
+
+ mnldinf_put_int(buff, &offset, HAL2MNL_GPS_ELEVATION_ANGLE);
+ mnldinf_put_byte(buff, &offset, elevation);
+
+ return mnldinf_tcp_send(fd, buff, offset);
+}
+
+int mnldinf_ext_gnss_l5_disable(int fd, bool flag) {
+ LOGD("mnldinf_ext_gnss_l5_disable flag=%hhu", flag);
+ char buff[HAL_MNL_BUFF_SIZE] = {0};
+ int offset = 0;
+ mnldinf_put_int(buff, &offset, HAL_MNL_INTERFACE_VERSION);
+
+ mnldinf_put_int(buff, &offset, HAL2MNL_GPS_L5_DISABLE);
+ mnldinf_put_byte(buff, &offset, flag);
+
+ return mnldinf_tcp_send(fd, buff, offset);
+}
+
int mnldinf_ext_gnss_set_position_mode(int fd, gps_pos_mode mode) {
LOGD("mode=%d", mode);
char buff[HAL_MNL_BUFF_SIZE] = {0};
diff --git a/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c b/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
index 82f109d..4de9894 100644
--- a/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
+++ b/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
@@ -434,6 +434,63 @@
return 0; // 0:ok, non-zero: error; but GPS JNI will ignore it
}
+//The unit of interval is ms.
+//interval:100,200,500,1000
+static int gpsinf_fix_interval(uint32_t interval){
+ int fix_interval;
+ if(interval == 100 || interval == 200 || interval == 500 ||
+ interval == 1000) {
+ fix_interval = interval;
+ }else{
+ fix_interval = 1000; //default 1HZ.
+ }
+ LOGD("fix interval = %u \n", fix_interval);
+
+ if (hal2mnl_gps_fix_interval(fix_interval) == -1) {
+ LOGE("hal2mnl_gps_fix_interval failed because of safe_sendto fail ,strerror:%s \n", strerror(errno));
+ }
+ return 0; // 0:ok, non-zero: error; but GPS JNI will ignore it
+}
+
+//2:GP+GL+BD
+//3:GP
+//4:BD
+//6:GP+GL+GA+BD
+//8:GP+GL+GA
+//10:GP+GL+GA+BD+NI
+static int gpsinf_opmode(uint8_t opmode){
+ if (hal2mnl_gps_opmode(opmode) == -1) {
+ LOGE("hal2mnl_gps_opmode failed because of safe_sendto fail ,strerror:%s \n", strerror(errno));
+ }
+
+ return 0; // 0:ok, non-zero: error; but GPS JNI will ignore it
+}
+
+//Constraint range:0~30 degree
+static int gpsinf_elevation_angle(uint8_t elevation){
+ char gnss_elevation;
+ if(elevation >= 0 && elevation <= 30){
+ gnss_elevation = elevation;
+ }else{
+ gnss_elevation = 5; //default 5 angle.
+ }
+
+ if (hal2mnl_gps_elevation_angle(gnss_elevation) == -1) {
+ LOGE("hal2mnl_gps_elevation_angle failed because of safe_sendto fail ,strerror:%s \n", strerror(errno));
+ }
+
+ return 0; // 0:ok, non-zero: error; but GPS JNI will ignore it
+}
+
+//1:Disable L5.
+//0:Enable L5;
+static int gpsinf_l5_disable(bool flag){
+ if (hal2mnl_gps_l5_disable(flag) == -1) {
+ LOGE("hal2mnl_gps_l5_disable failed because of safe_sendto fail ,strerror:%s \n", strerror(errno));
+ }
+ return 0; // 0:ok, non-zero: error; but GPS JNI will ignore it
+}
+
static const GpsInterface_ext mtk_gps_inf = {
sizeof(GpsInterface_ext),
gpsinf_init,
@@ -446,6 +503,10 @@
gpsinf_set_position_mode,
gpsinf_get_extension,
gpsinf_inject_fused_location,
+ gpsinf_fix_interval,
+ gpsinf_opmode,
+ gpsinf_elevation_angle,
+ gpsinf_l5_disable,
};
#ifdef __ANDROID_OS__
diff --git a/src/connectivity/gps/2.0/gps_hal/src/hal2mnl_interface.c b/src/connectivity/gps/2.0/gps_hal/src/hal2mnl_interface.c
index 003260e..3f103a8 100644
--- a/src/connectivity/gps/2.0/gps_hal/src/hal2mnl_interface.c
+++ b/src/connectivity/gps/2.0/gps_hal/src/hal2mnl_interface.c
@@ -56,6 +56,22 @@
return mnldinf_ext_gnss_delete_aiding_data(g_gpshal_ctx.fd_mnl2hal_ext, flags);
}
+int hal2mnl_gps_fix_interval(uint32_t interval){
+ return mnldinf_ext_gnss_fix_interval(g_gpshal_ctx.fd_mnl2hal_ext, interval);
+}
+
+int hal2mnl_gps_opmode(uint8_t opmode){
+ return mnldinf_ext_gnss_opmode(g_gpshal_ctx.fd_mnl2hal_ext, opmode);
+}
+
+int hal2mnl_gps_elevation_angle(uint8_t elevation){
+ return mnldinf_ext_gnss_elevation_angle(g_gpshal_ctx.fd_mnl2hal_ext, elevation);
+}
+
+int hal2mnl_gps_l5_disable(bool flag){
+ return mnldinf_ext_gnss_l5_disable(g_gpshal_ctx.fd_mnl2hal_ext, flag);
+}
+
int hal2mnl_gps_set_position_mode(gps_pos_mode mode, gps_pos_recurrence recurrence,
int min_interval, int preferred_acc, int preferred_time, bool lowPowerMode) {
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/aarch64/libmnl_gnss.so b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/aarch64/libmnl_gnss.so
index 09ab788..78b857e 100755
--- a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/aarch64/libmnl_gnss.so
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/aarch64/libmnl_gnss.so
Binary files differ
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps.h b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps.h
index f86a7d6..db1d0d1 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps.h
@@ -38,6 +38,9 @@
#ifdef __cplusplus
extern "C" {
#endif
+
+#define RAWMEAS_NUM 159
+
/* ================= Application layer functions ================= */
/*****************************************************************************
@@ -1853,18 +1856,11 @@
void
mtk_gnss_get_measurement(
-Gnssmeasurement GpQzMeasurement[MTK_GPS_SV_MAX_PRN+MTK_QZS_SV_MAX_PRN],
-Gnssmeasurement GloMeasurement[MTK_GLON_SV_MAX_NUM],
-Gnssmeasurement BDMeasurement[MTK_BEDO_SV_MAX_NUM],
-Gnssmeasurement GalMeasurement[MTK_GLEO_SV_MAX_NUM],
-Gnssmeasurement SBASMeasurement[MTK_SBAS_SV_MAX_NUM],
-Gnssmeasurement IRNSSMeasurement[MTK_NAVIC_SV_MAX_NUM],
-INT8 GpQz_Ch_Proc_Ord_PRN[MTK_GPS_SV_MAX_PRN+MTK_QZS_SV_MAX_PRN],
-INT8 Glo_Ch_Proc_Ord_PRN[MTK_GLON_SV_MAX_NUM],
-INT8 BD_Ch_Proc_Ord_PRN[MTK_BEDO_SV_MAX_NUM],
-INT8 Gal_Ch_Proc_Ord_PRN[MTK_GLEO_SV_MAX_NUM],
-INT8 SBAS_Ch_Proc_Ord_PRN[MTK_SBAS_SV_MAX_NUM],
-INT8 IRNSS_Ch_Proc_Ord_PRN[MTK_NAVIC_SV_MAX_NUM]);
+ Gnssmeasurement Measurement[RAWMEAS_NUM],
+ INT8 Ch_Proc_Ord_PRN[RAWMEAS_NUM],
+ INT8 Ch_Proc_Ord_SV_TYPE[RAWMEAS_NUM],
+ INT8 Ch_Proc_Ord_SIG_TYPE[RAWMEAS_NUM]
+);
INT32
mtk_gnss_get_clock(Gnssclock *GnssClock);
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
index 69b828b..3a61859 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnl/libs/inc/mtk_gps_type.h
@@ -931,7 +931,8 @@
MTK_DATUM_WGS1972_GLOBAL_DEFINITION,
MTK_DATUM_WGS1984_GLOBAL_DEFINITION,
MTK_DATUM_YACARE_URUGUAY,
- MTK_DATUM_ZANDERIJ_SURINAME
+ MTK_DATUM_ZANDERIJ_SURINAME,
+ MTK_DATUM_PZ90_11
} MTK_GPS_DATUM;
/************************************************
@@ -1042,6 +1043,10 @@
MTK_PARAM_CMD_RTK_FILL_NMEA_INFO,
MTK_PARAM_CMD_RTK_FILL_POSITION,
MTK_PARAM_CMD_RTK_STATUS_REPONSE,
+ MTK_PARAM_CMD_AUTO_ELEV_CONFIG,
+ MTK_PARAM_CMD_AUTO_OPMODE,
+ MTK_PARAM_CMD_AUTO_L5_DISABLE,
+ MTK_PARAM_CMD_AUTO_FIXRATE,
} MTK_GPS_PARAM;
typedef enum{
@@ -1620,8 +1625,9 @@
UINT8 factory_test_state; //0: normal, 1: specific customer's factory test
UINT8 factory_mode; //0: normal mode, 1: non-normal mode
UINT8 pps_polarity; /* Range: 0~1 , Default: 0 */
- INT32 pps_delay; /* Range: -4000~4000, Default: 0 */
+ INT32 pps_delay; /* Range: -4000~4000, Default: 0 */
INT8 elev_mask; /* Range: 0~90 */
+ UINT8 ga_before_ttff; //0:Disable,1:Enable
} MTK_GPS_INIT_CFG;
#define MTK_GPS_DRIVER_CFG_EXT_SUPPORT
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/gps_controller.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/gps_controller.h
index ef1f08e..a578f38 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/gps_controller.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/gps_controller.h
@@ -29,6 +29,8 @@
#define SVTYPE_GLONASS 16
#define SVTYPE_BD 32
+#define NUM_CH_ALL 159
+
int gps_control_init();
int gps_control_gps_start(int delete_aiding_data_flags);
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hal_mnl_interface_common.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hal_mnl_interface_common.h
index dcc636d..d7d1467 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hal_mnl_interface_common.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hal_mnl_interface_common.h
@@ -56,6 +56,10 @@
HAL2MNL_SET_TTFF_ACC = 704,
HAL2MNL_BASIC_CAP_SYNC = 705,
HAL2MNL_EXT_CAP_SYNC = 706,
+ HAL2MNL_GPS_FIX_INTERVAL = 707,
+ HAL2MNL_GPS_OPMODE = 708,
+ HAL2MNL_GPS_ELEVATION_ANGLE = 709,
+ HAL2MNL_GPS_L5_DISABLE = 801,
} hal2mnl_cmd;
typedef int gps_pos_mode;
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hardware/gps_mtk.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hardware/gps_mtk.h
index 0e1c37c..5ff3c19 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hardware/gps_mtk.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/hardware/gps_mtk.h
@@ -783,6 +783,19 @@
/// v1.1 ///
int (*inject_fused_location)(double latitude, double longitude, float accuracy);
+ /** Dynamically set the fix interval.
+ *The unit of interval is ms.
+ */
+ int (*fix_interval)(uint32_t interval);
+
+ /** Dynamically set gnss OpMode. */
+ int (*op_mode)(uint8_t opmode);
+
+ /** Dynamically set elevation angle constraint. */
+ int (*elevation_angle)(uint8_t angle);
+
+ /** Dynamically set L5 disable/enable. */
+ int (*l5_disable)(bool disable);
} GpsInterface_ext;
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl2hal_ext_interface.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl2hal_ext_interface.h
index 266c165..5250d69 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl2hal_ext_interface.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl2hal_ext_interface.h
@@ -49,6 +49,11 @@
void (*set_epo_enable)(epo_bitmap epo_cfg);
void (*set_ttff_acc)(ttff_acc acc_mode);
void (*client_capability_update)(int fd, mnl_hal_ext_client_cap *cap);
+
+ void (*gnss_fix_interval)(uint32_t interval);
+ void (*gnss_opmode)(uint8_t opmode);
+ void (*gnss_elevation_angle)(uint8_t elevation);
+ void (*gnss_l5_disable)(bool flag);
} hal2mnl_ext_interface;
int mnl2hal_mnld_reboot();
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl_common.h b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl_common.h
index f10bd01..f88c1e7 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl_common.h
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/inc/mnl_common.h
@@ -207,8 +207,12 @@
int pps_delay; /* range: -4000~4000 unit: ns */
int pps_polarity; /* pps polarity, Range: 0~1, Default: 0, 0: pps active low 1: pps active high */
int pps_duty; /* PPS pulse high duration (ms), Range: 0~2000, Default: 0 */
+ int dgps_mode_sbas; /* enable/disable SBAS*/
-int elev_mask; /* elevation angle mask in degree, Range: 0~90, Default: 5 */
+ int elev_mask; /* elevation angle mask in degree, Range: 0~90, Default: 5 */
+ UINT8 ga_before_ttff; //0:Disable,1:Enable
+ MTK_GPS_DATUM datum; /* datum */
+ UINT8 debug_type; //0:default,0x08:Comport use
} MNL_CONFIG_T;
/*---------------------------------------------------------------------------*/
typedef struct {
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
index 79a3574..7511179 100755
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/gps_controller.c
@@ -464,7 +464,11 @@
.pps_delay = 0,
.pps_polarity = 0,
.pps_duty = 100,
- .elev_mask = 5
+ .dgps_mode_sbas = 1,
+ .elev_mask = 5,
+ .ga_before_ttff = 0,
+ .datum = MTK_DATUM_WGS84,
+ .debug_type = 0
};
MTK_GPS_SV_BLACKLIST svBlacklist = {
@@ -964,6 +968,7 @@
init_cfg.pps_duty = mnl_config.pps_duty;
init_cfg.elev_mask = mnl_config.elev_mask;
+ init_cfg.ga_before_ttff = mnl_config.ga_before_ttff;
UINT32 hw_ver = 0;
UINT32 fw_ver = 0;
@@ -1064,17 +1069,24 @@
#endif
if(mnl_config.fix_interval == 200 || mnl_config.fix_interval == 500 ||
- mnl_config.fix_interval == 1000 || (mnl_config.fix_interval >= 100 &&
- mnl_config.GNSSOPMode == MTK_CONFIG_GPS_ONLY)) {
+ mnl_config.fix_interval == 1000 || mnl_config.fix_interval == 100) {
init_cfg.fix_interval = mnl_config.fix_interval;
}else{
- init_cfg.fix_interval = 1000;
+ init_cfg.fix_interval = 100;
}
LOGD("init_cfg.fix_interval = %d \n", init_cfg.fix_interval);
- init_cfg.datum = MTK_DATUM_WGS84; // datum
+ init_cfg.datum = mnl_config.datum; // datum
+ LOGD("init_cfg.datum = %d \n", init_cfg.datum);
+
init_cfg.dgps_mode = MTK_DGPS_MODE_SBAS; // enable SBAS
+ if ( mnl_config.dgps_mode_sbas == 1 ) { //1: enable sbas
+ init_cfg.dgps_mode = MTK_DGPS_MODE_SBAS;
+ } else if ( mnl_config.dgps_mode_sbas == 0 ) { //0: disable sbas
+ init_cfg.dgps_mode = MTK_DGPS_MODE_NONE;
+ }
+ LOGD("init_cfg.dgps_mode = %d \n", init_cfg.dgps_mode);
MTK_GPS_MNL_CONFIG_XML_PARAM mnl_config_xml;
#ifdef MTK_GPS_DUAL_FREQ_SUPPORT /*Defined in Android.mk*/
@@ -1611,7 +1623,8 @@
init_cfg.sv_type_agps_set = sv_type_agps_set;
gps_dbg_log_state_set_bitmask(mnl_config.dbg2file);
// driver_cfg.DebugType: 0x01-> libmnl write file;0x11 -> libmnl write file.
- driver_cfg.DebugType = gps_debuglog_state;
+ driver_cfg.DebugType = (gps_debuglog_state | mnl_config.debug_type);
+ LOGD("driver_cfg.DebugType(%d),mnl_config.debug_type(%d)!", driver_cfg.DebugType,mnl_config.debug_type);
MNLD_STRNCPY(gps_debuglog_file_name, mnl_config.debug_file_name, GPS_DEBUG_LOG_FILE_NAME_MAX_LEN);
if(gps_dbg_log_output2file() && (mnld_debug_file_check_init(mnl_config.debug_file_name) == MTK_GPS_ERROR)) {
gps_dbg_log_output2file_clean();
@@ -1705,8 +1718,8 @@
driver_cfg.socket_port = mnl_config.socket_port;
- LOGD("pps_config mode = %d, delay = %d, polarity = %d, duty = %d elev_mask = %d\n",
- init_cfg.pps_mode, init_cfg.pps_delay, init_cfg.pps_polarity, init_cfg.pps_duty, init_cfg.elev_mask);
+ LOGD("pps_config mode = %d, delay = %d, polarity = %d, duty = %d elev_mask = %d, ga_before_ttff = %d\n",
+ init_cfg.pps_mode, init_cfg.pps_delay, init_cfg.pps_polarity, init_cfg.pps_duty, init_cfg.elev_mask, init_cfg.ga_before_ttff);
mnl_status = mtk_gps_mnl_run((const MTK_GPS_INIT_CFG*)&init_cfg , (const MTK_GPS_DRIVER_CFG*)&driver_cfg);
LOGD("Status (%d) \n", mnl_status);
@@ -1809,6 +1822,9 @@
hasAlmanac();
+ ret = mtk_gps_set_param(MTK_PARAM_DGPS_CONFIG, &(init_cfg.dgps_mode));
+ LOGD("sent MTK_PARAM_DGPS_CONFIG to mnl, dgps_mode = %d ,ret = %d", init_cfg.dgps_mode, ret);
+
ret = mtk_gps_set_param(MTK_PARAM_CMD_SIB8_16_ENABLE, &sib8_16_enable);
LOGD("sent CMD_SIB8_16_ENABLE to mnl, sib8_16_enable = %d ,ret = %d", sib8_16_enable, ret);
ret = mtk_gps_set_param(MTK_PARAM_CMD_DEBUG2APP_CONFIG, &enable_debug2app);
@@ -2465,35 +2481,21 @@
}
gnss_data gnssdata;
-Gnssmeasurement gpqzmeasurement[MNLD_MGPSID+MNLD_MQZSSID];
-Gnssmeasurement glomeasurement[MNLD_MGLONID];
-Gnssmeasurement bdmeasurement[MNLD_MBD2ID];
-Gnssmeasurement galmeasurement[MNLD_MGLEOID];
-Gnssmeasurement sbasmeasurement[MNLD_SBAS_BUN_PRN];
-Gnssmeasurement navicmeasurement[MNLD_MNAVICID];
+Gnssmeasurement gnssmeasurement[NUM_CH_ALL];
static void get_gnss_measurement_clock_data() {
+ LOGD("get_gnss_measurement_clock_data begin");
+
int i;
unsigned int num = 0;
int ret;
- INT8 GpQz_Ch_Proc_Ord_PRN[MNLD_MGPSID+MNLD_MQZSSID] = {0};
- INT8 Glo_Ch_Proc_Ord_PRN[MNLD_MGLONID] = {0};
- INT8 BD_Ch_Proc_Ord_PRN[MNLD_MBD2ID] = {0};
- INT8 Gal_Ch_Proc_Ord_PRN[MNLD_MGLEOID] = {0};
- INT8 SBAS_Ch_Proc_Ord_PRN[MNLD_SBAS_BUN_PRN] = {0};
- INT8 NAVIC_Ch_Proc_Ord_PRN[MNLD_MNAVICID] = {0};
+ INT8 Gnss_Ch_Proc_Ord_PRN[NUM_CH_ALL] = {0};
+ INT8 Gnss_Ch_Proc_Ord_SV_TYPE[NUM_CH_ALL] = {0};
+ INT8 Gnss_Ch_Proc_Ord_SIG_TYPE[NUM_CH_ALL] = {0};
- LOGD("get_gnss_measurement_clock_data begin, sizeof(Gnssmeasurement):%lu, sizeof(gnss_data):%lu",sizeof(Gnssmeasurement), sizeof(gnss_data));
-
- memset(gpqzmeasurement, 0, sizeof(gpqzmeasurement));
- memset(glomeasurement, 0, sizeof(glomeasurement));
- memset(bdmeasurement, 0, sizeof(bdmeasurement));
- memset(galmeasurement, 0, sizeof(galmeasurement));
- memset(sbasmeasurement, 0, sizeof(sbasmeasurement));
- memset(navicmeasurement, 0, sizeof(navicmeasurement));
- mtk_gnss_get_measurement(gpqzmeasurement, glomeasurement, bdmeasurement, galmeasurement, sbasmeasurement,navicmeasurement,
- GpQz_Ch_Proc_Ord_PRN, Glo_Ch_Proc_Ord_PRN, BD_Ch_Proc_Ord_PRN, Gal_Ch_Proc_Ord_PRN, SBAS_Ch_Proc_Ord_PRN, NAVIC_Ch_Proc_Ord_PRN);
+ memset(gnssmeasurement, 0, sizeof(gnssmeasurement));
+ mtk_gnss_get_measurement(gnssmeasurement, Gnss_Ch_Proc_Ord_PRN, Gnss_Ch_Proc_Ord_SV_TYPE, Gnss_Ch_Proc_Ord_SIG_TYPE);
Gnssclock gnssclock;
if (mtk_gnss_get_clock(&gnssclock) == 0) {
@@ -2505,122 +2507,28 @@
update_gnss_clock(&gnss_clock, &gnssclock);
memset(&gnssdata, 0, sizeof(gnssdata));
- // For GPS & QZSS
- for (i = 0; i < MNLD_MGPSID+MNLD_MQZSSID; i++) {
- if (gpqzmeasurement[i].svid != 0) {
+
+ // For GNSS
+ for (i = 0; i < NUM_CH_ALL; i++) {
+ if (gnssmeasurement[i].svid != 0) {
num = gnssdata.measurement_count;
if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
LOGD("measurement_count exceed the upper limit!");
break;
}
- update_gnss_measurement(&gnssdata.measurements[num], &gpqzmeasurement[i]);
+ update_gnss_measurement(&gnssdata.measurements[num], &gnssmeasurement[i]);
if (gnssdata.measurements[num].state == 0) {
gnssdata.measurements[num].pseudorange_rate_mps = 1;
}
gnssdata.measurement_count++;
- LOGD("GPS/QZSS measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
- num, i, gnssdata.measurements[num].svid);
- }
- }
-
- // For Glonass
- for (i = 0; i < MNLD_MGLONID; i++) {
- if (glomeasurement[i].svid != 0) {
- num = gnssdata.measurement_count;
- if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
- LOGD("measurement_count exceed the upper limit!");
- break;
- }
-
- update_gnss_measurement(&gnssdata.measurements[num], &glomeasurement[i]);
- if (gnssdata.measurements[num].state == 0) {
- gnssdata.measurements[num].pseudorange_rate_mps = 1;
- }
- gnssdata.measurement_count++;
- LOGD("Glonass measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
- num, i, gnssdata.measurements[num].svid);
- }
- }
-
- // For Beidou
- for (i = 0; i < MNLD_MBD2ID; i++) {
- if (bdmeasurement[i].svid != 0) {
- num = gnssdata.measurement_count;
- if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
- LOGD("measurement_count exceed the upper limit!");
- break;
- }
-
- update_gnss_measurement(&gnssdata.measurements[num], &bdmeasurement[i]);
- if (gnssdata.measurements[num].state == 0) {
- gnssdata.measurements[num].pseudorange_rate_mps = 1;
- }
- gnssdata.measurement_count++;
- LOGD("Beidou measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
- num, i, gnssdata.measurements[num].svid);
- }
- }
-
- // For Galileo
- for (i = 0; i < MNLD_MGLEOID; i++) {
- if (galmeasurement[i].svid != 0) {
- num = gnssdata.measurement_count;
- if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
- LOGD("measurement_count exceed the upper limit!");
- break;
- }
-
- update_gnss_measurement(&gnssdata.measurements[num], &galmeasurement[i]);
- if (gnssdata.measurements[num].state == 0) {
- gnssdata.measurements[num].pseudorange_rate_mps = 1;
- }
- gnssdata.measurement_count++;
- LOGD("Galileo measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
- num, i, gnssdata.measurements[num].svid);
- }
- }
-
- // For SBAS
- for (i = 0; i < MNLD_SBAS_BUN_PRN; i++) {
- if (sbasmeasurement[i].svid != 0) {
- num = gnssdata.measurement_count;
- if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
- LOGD("measurement_count exceed the upper limit!");
- break;
- }
-
- update_gnss_measurement(&gnssdata.measurements[num], &sbasmeasurement[i]);
- if (gnssdata.measurements[num].state == 0) {
- gnssdata.measurements[num].pseudorange_rate_mps = 1;
- }
- gnssdata.measurement_count++;
- LOGD("SBAS measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
- num, i, gnssdata.measurements[num].svid);
- }
- }
-
- // For NAVIC
- for (i = 0; i < MNLD_MNAVICID; i++) {
- if (navicmeasurement[i].svid != 0) {
- num = gnssdata.measurement_count;
- if (num >= MTK_MNLD_GNSS_MAX_MEASUREMENT) {
- LOGD("measurement_count exceed the upper limit!");
- break;
- }
-
- update_gnss_measurement(&gnssdata.measurements[num], &navicmeasurement[i]);
- if (gnssdata.measurements[num].state == 0) {
- gnssdata.measurements[num].pseudorange_rate_mps = 1;
- }
- gnssdata.measurement_count++;
- LOGD("NAVIC measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
+ LOGD("GNSS measurements[%d] memcpy completed, old _num = %d, prn = %d\n",
num, i, gnssdata.measurements[num].svid);
}
}
memcpy(&gnssdata.clock , &gnss_clock, sizeof(gnss_clock));
- LOGD("gnssdata.measurement_count = %zu, sizeof(gnssdata) = %lu", gnssdata.measurement_count, sizeof(gnssdata));
+ LOGD("gnssdata.measurement_count = %lu, sizeof(gnssdata) = %lu", gnssdata.measurement_count, sizeof(gnssdata));
if (gnssdata.measurement_count > 0) {
ret = mnl2hal_gnss_measurements(&gnssdata);
LOGD("mnl2hal_gnss_measurements done ,ret = %d", ret);
@@ -2723,6 +2631,42 @@
LOGD("BD sv[%d], mnl2hal_gnss_navigation done ,ret = %d", svid, ret);
}
+ // beidou
+ LOGD("for BD GEO call again");
+ for (svid = 1; svid <= MTK_BEDO_SV_MAX_NUM; svid++) {
+ if (BD2_GEO != BD2_SVTYPE(svid)) {
+ continue;
+ }
+ ret = mtk_gnss_get_navigation_event(&gnss_navigation_msg, svid, SVTYPE_BD);
+ // Report only when has navy data.
+ if (1 != ret) {
+ if (gps_raw_debug_mode) {
+ LOGD("mtk_gnss_get_navigation_event BD sv fail, svid = %d,[ret=%d]\n", svid, ret);
+ }
+ continue;
+ }
+
+ memset(&gnssnavigation, 0, sizeof(gnss_nav_msg));
+ update_gnss_navigation(&gnssnavigation, &gnss_navigation_msg);
+ data_length = (int)MIN(gnssnavigation.data_length, sizeof(gnssnavigation.data));
+ if (BD2_MEO_IGSO == BD2_SVTYPE(svid)) {
+ data_length = (int)MIN(data_length, sizeof(gnss_navigation_msg.uData.BD_D1_data));
+ memcpy(gnssnavigation.data, gnss_navigation_msg.uData.BD_D1_data, data_length);
+ } else {
+ data_length = (int)MIN(data_length, sizeof(gnss_navigation_msg.uData.BD_D2_data));
+ memcpy(gnssnavigation.data, gnss_navigation_msg.uData.BD_D2_data, data_length);
+ }
+ LOGD("BD sv[%d] gnssnavigation data length = %d", svid, data_length);
+ if (gps_raw_debug_mode) {
+ for (i = 0; i < data_length; i++) {
+ LOGD("BD sv[%d] gnssnavigation.data[%d] = %x, %p",
+ svid, i, gnssnavigation.data[i], &gnssnavigation.data[i]);
+ }
+ }
+ ret = mnl2hal_gnss_navigation(gnssnavigation);
+ LOGD("BD sv[%d], mnl2hal_gnss_navigation done ,ret = %d", svid, ret);
+ }
+
// galileo
for (svid = 1; svid <= MTK_GLEO_SV_MAX_NUM; svid++) {
ret = mtk_gnss_get_navigation_event(&gnss_navigation_msg, svid, SVTYPE_GALILEO);
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl2hal_interface.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl2hal_interface.c
index 8fa283f..f7aee28 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl2hal_interface.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl2hal_interface.c
@@ -667,6 +667,46 @@
}
break;
}
+ case HAL2MNL_GPS_FIX_INTERVAL: {
+ if (hdlr->gnss_fix_interval) {
+ uint32_t interval = get_int(buff, &offset, sizeof(buff));
+ hdlr->gnss_fix_interval(interval);
+ } else {
+ LOGE("hal2mnl_ext_hdlr() gnss_fix_interval is NULL");
+ ret = -1;
+ }
+ break;
+ }
+ case HAL2MNL_GPS_OPMODE: {
+ if (hdlr->gnss_opmode) {
+ uint8_t opmode = get_byte(buff, &offset, sizeof(buff));
+ hdlr->gnss_opmode(opmode);
+ } else {
+ LOGE("hal2mnl_ext_hdlr() gnss_opmode is NULL");
+ ret = -1;
+ }
+ break;
+ }
+ case HAL2MNL_GPS_ELEVATION_ANGLE: {
+ if (hdlr->gnss_elevation_angle) {
+ uint8_t elevation = get_byte(buff, &offset, sizeof(buff));
+ hdlr->gnss_elevation_angle(elevation);
+ } else {
+ LOGE("hal2mnl_ext_hdlr() gnss_elevation_angle is NULL");
+ ret = -1;
+ }
+ break;
+ }
+ case HAL2MNL_GPS_L5_DISABLE: {
+ if (hdlr->gnss_l5_disable) {
+ bool flag = get_byte(buff, &offset, sizeof(buff));
+ hdlr->gnss_l5_disable(flag);
+ } else {
+ LOGE("hal2mnl_ext_hdlr() gnss_l5_disable is NULL");
+ ret = -1;
+ }
+ break;
+ }
case HAL2MNL_DATA_CONN_OPEN: {
if (hdlr->data_conn_open) {
char* apn = get_string(buff, &offset, sizeof(buff));
@@ -836,10 +876,10 @@
}
case HAL2MNL_SV_BLACKLIST: {
if (hdlr->set_sv_blacklist) {
- long long blacklist[7];
+ long long blacklist[8];
memset(blacklist, 0x00, sizeof(long long));
int size = get_int(buff, &offset, sizeof(buff));
- size = size < 7 ? size : 7;
+ size = size < 8 ? size : 8;
get_binary(buff, &offset, (char*)blacklist, sizeof(buff),
sizeof(long long) * size);
hdlr->set_sv_blacklist(blacklist, size);
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl_common.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl_common.c
index 953edb8..23acdf3 100644
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl_common.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnl_common.c
@@ -162,6 +162,8 @@
else if (!strcmp(key, "pmtk.serial.port")) {
prConfig->socket_port = atoi(val);
set_mnl_prop_config_socket_port();
+ } else if (!strcmp(key, "debug_type")) {
+ prConfig->debug_type = atoi(val);
}
else if (!strcmp(key, "debug.debug_nmea")) {
/* it will be set to enable_dbg_log */
@@ -259,6 +261,14 @@
prConfig->pps_polarity = atoi(val);
} else if ((!strcmp(key, "pps_duty"))) {
prConfig->pps_duty = atoi(val);
+ } else if ((!strcmp(key, "DGPS_MODE_SBAS"))) {
+ prConfig->dgps_mode_sbas = atoi(val);
+ } else if ((!strcmp(key, "elev_mask"))) {
+ prConfig->elev_mask = atoi(val);
+ }else if ((!strcmp(key, "ga_before_ttff"))) {
+ prConfig->ga_before_ttff = atoi(val);
+ }else if ((!strcmp(key, "datum"))) {
+ prConfig->datum = atoi(val);
}
return 0;
}
@@ -321,9 +331,9 @@
LOGD_ENG("[setting] load default value\n");
res = -1;
}
- LOGD("dev_dsp/dev_dsp2/dev_gps : %s %s %s,init_speed/link_speed: %d %d\n",
+ LOGD("dev_dsp/dev_dsp2/dev_gps : %s %s %s,init_speed/link_speed: %d %d,dgps_mode_sbas : %d.\n",
prConfig->dev_dsp, prConfig->dev_dsp2, prConfig->dev_gps,
- prConfig->init_speed, prConfig->link_speed);
+ prConfig->init_speed, prConfig->link_speed,prConfig->dgps_mode_sbas);
LOGD_ENG("pmtk_conn/socket_port/dev_dbg : %d %d %s\n",
prConfig->pmtk_conn, prConfig->socket_port, prConfig->dev_dbg);
LOGD_ENG("debug_nmea/debug_mnl: %d 0x%04X,nmea2file/dbg2file: %d/%d\n",
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
index ae5aa45..3411b98 100755
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
@@ -926,6 +926,20 @@
mnld_gps_client* raw_meas = &g_mnld_ctx.gps_status.clients.raw_meas;
ctx->meas_started = false;
+//ensure the navi/meas is disable, when raw meas stop
+ if(g_mnld_ctx.gps_status.is_gps_navi_enabled) {
+ LOGD("set gps_navigation disable");
+ g_mnld_ctx.gps_status.is_gps_navi_enabled = false;
+ }
+ if(g_enable_full_tracking) {
+ LOGD("set full tracking disable");
+ g_enable_full_tracking = false;
+ }
+ if(g_mnld_ctx.gps_status.is_gps_meas_enabled) {
+ LOGD("set gps_measurement disable");
+ g_mnld_ctx.gps_status.is_gps_meas_enabled = false;
+ }
+
LOGW("hal_raw_meas_gps_stop, fd:[%d], meas_open:%d", fd, raw_meas->gps_used);
if((raw_meas->gps_used == true) && client_list_is_all_meas_stop(&g_hal_basic_client_list)) {
raw_meas->gps_used = false;
@@ -1012,6 +1026,31 @@
mnld_fsm(GPS_EVENT_RESET, 0, 0, NULL);
}
+
+static void hal_gps_fix_interval(UINT32 interval) {
+ LOGD("hal_gps_fix_interval interval=%u.",interval);
+ // TODO libmnl.so
+ mtk_gps_set_param(MTK_PARAM_CMD_AUTO_FIXRATE,&interval);
+}
+
+static void hal_gps_opmode(UINT8 opmode) {
+ LOGD("hal_gps_opmode opmode=%hhu.",opmode);
+ // TODO libmnl.so
+ mtk_gps_set_param(MTK_PARAM_CMD_AUTO_OPMODE,&opmode);
+}
+
+static void hal_gps_elevation_angle(UINT8 elev) {
+ LOGD("hal_gps_elevation_angle elev=%hhu.",elev);
+ // TODO libmnl.so
+ mtk_gps_set_param(MTK_PARAM_CMD_AUTO_ELEV_CONFIG,&elev);
+}
+
+static void hal_gps_l5_disable(bool flag) {
+ LOGD("hal_gps_l5_disable flag=%hhu.",flag);
+ // TODO libmnl.so
+ mtk_gps_set_param(MTK_PARAM_CMD_AUTO_L5_DISABLE,&flag);
+}
+
static void hal_gps_set_position_mode(gps_pos_mode mode, gps_pos_recurrence recurrence,
int min_interval, int preferred_acc, int preferred_time, bool lowPowerMode) {
LOGD("hal_gps_set_position_mode mode=%d recurrence=%d min_interval=%d preferred_acc=%d preferred_time=%d lowPowerMode=%d",
@@ -1406,6 +1445,10 @@
hal_set_epo_enable,
hal_set_ttff_acc,
hal_ext_client_capability_update,
+ hal_gps_fix_interval,
+ hal_gps_opmode,
+ hal_gps_elevation_angle,
+ hal_gps_l5_disable,
};
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
index 716549a..e58b7fc 100755
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb.dts
@@ -793,7 +793,9 @@
pins_bus {
pinmux = <PINMUX_GPIO81__FUNC_SDA5>,
<PINMUX_GPIO82__FUNC_SCL5>;
- bias-pull-up;
+//Typethree@2023.2.01 modify for cancel internal pull-up start
+ bias-disable;
+//Typethree@2023.2.01 modify for cancel internal pull-up end
mediatek,res-sel = <3>;
};
};
@@ -1511,6 +1513,10 @@
"nfi_cg";
#endif
};
+/*Lxf add in 2022/12/2 for gpio init*/
+&gpio_init{
+};
+/*Lxf add in 2022/12/2 for gpio init end*/
#include <mediatek/evb6890v1_64_cpe/cust.dtsi>
/*End of this file, DO NOT ADD ANYTHING HERE*/
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_gsw.dts b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_gsw.dts
index 1e8f584..56090fe 100755
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_gsw.dts
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_gsw.dts
@@ -850,7 +850,9 @@
pins_bus {
pinmux = <PINMUX_GPIO81__FUNC_SDA5>,
<PINMUX_GPIO82__FUNC_SCL5>;
- bias-pull-up;
+//Typethree@2023.2.01 modify for cancel internal pull-up start
+ bias-disable;
+//Typethree@2023.2.01 modify for cancel internal pull-up end
mediatek,res-sel = <3>;
};
};
@@ -1569,6 +1571,10 @@
"nfi_cg";
#endif
};
+/*Lxf add in 2022/12/2 for gpio init*/
+&gpio_init{
+};
+/*Lxf add in 2022/12/2 for gpio init end*/
#include <mediatek/evb6890v1_64_cpe/cust.dtsi>
/*End of this file, DO NOT ADD ANYTHING HERE*/
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
index bb47281..7e172b6 100644
--- a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735.dtsi
@@ -4499,7 +4499,11 @@
enable-active-high;
/*zhengzhou 0316 ---*/
};
-
+/*Lxf add in 2022/12/2 for gpio init*/
+ gpio_init: gpio_init{
+ compatible = "linux,gpio_init";
+ };
+/*Lxf add in 2022/12/2 for gpio init end*/
firmware {
optee {
compatible = "linaro,optee-tz";
diff --git a/src/kernel/linux/v4.19/drivers/Makefile b/src/kernel/linux/v4.19/drivers/Makefile
index a4c433d..6066d60 100644
--- a/src/kernel/linux/v4.19/drivers/Makefile
+++ b/src/kernel/linux/v4.19/drivers/Makefile
@@ -5,7 +5,9 @@
# 15 Sep 2000, Christoph Hellwig <hch@infradead.org>
# Rewritten to use lists instead of if-statements.
#
-
+#Lxf add in 2022/12/2 for gpio init
+obj-y += lynq_gpio_init/
+#Lxf add in 2022/12/2 for gpio init end
obj-y += irqchip/
obj-y += bus/
diff --git a/src/kernel/linux/v4.19/drivers/lynq_gpio_init/Makefile b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/Makefile
new file mode 100644
index 0000000..0f7ff3d
--- /dev/null
+++ b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/Makefile
@@ -0,0 +1,2 @@
+
+obj-y += lynq_gpio_init.o
diff --git a/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.c b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.c
new file mode 100755
index 0000000..e7caba3
--- /dev/null
+++ b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.c
@@ -0,0 +1,71 @@
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/gpio.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <linux/platform_device.h>
+
+#include "../pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h"
+#include "../pinctrl/mediatek/pinctrl-mtk-common-v2.h"
+#include "lynq_gpio_init.h"
+
+
+static int __init drv_init(void)
+{
+ struct device_node *gpio_device_node = NULL;
+ struct device_node *gpio_next_node = NULL;
+ int ret = 0;
+ int i;
+
+ printk("GPIO_INIT:init start");
+ log_offset = sprintf(log_info, "GPIO init start\n");
+ //create folder in /sys
+ ret = kobject_init_and_add(&kobj,&ktype,NULL,"lynq_gpio");
+ ret = kobject_init_and_add(&kobj_log,&ktype_log,NULL,"lynq_log");
+ //find the dts node
+ gpio_device_node = of_find_node_by_path("/gpio_init");
+ if(gpio_device_node == NULL)
+ {
+ printk("GPIO_INIT: get DTS property failed!\n");
+ log_offset += sprintf(log_info + log_offset, "get DTS property failed!\n");
+ return 0;
+ }
+ //get the number of gpio_init child node
+ node_num = of_get_child_count(gpio_device_node);
+ if(node_num <= GPIO_NODE_NUM)
+ {
+ printk("GPIO_INIT:node number: %d", node_num);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT:node number: %d\n", node_num);
+ }
+ else
+ {
+ node_num = GPIO_NODE_NUM;
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT:over the max number\n");
+ printk("GPIO_INIT:over the max number");
+ }
+//set each gpio
+ for(i = 0; i < node_num; i++)
+ {
+ gpio_next_node = of_get_next_child(gpio_device_node, gpio_next_node);
+ if(gpio_next_node)
+ {
+ printk("exist this node");
+ }
+ else
+ {
+ printk("no more node");
+ break;
+ }
+ ret = set_gpio(gpio_next_node, i);
+ }
+
+ printk("GPIO_INIT:END");
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT:END\n");
+ return 0;
+}
+
+device_initcall(drv_init);
+MODULE_AUTHOR("Mobiletek");
+MODULE_DESCRIPTION("driver for init gpio");
+MODULE_LICENSE("GPL");
diff --git a/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h
new file mode 100755
index 0000000..1d58455
--- /dev/null
+++ b/src/kernel/linux/v4.19/drivers/lynq_gpio_init/lynq_gpio_init.h
@@ -0,0 +1,315 @@
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/gpio.h>
+#include <linux/of.h>
+#include <linux/of_gpio.h>
+#include <linux/kobject.h>
+#include <linux/platform_device.h>
+#include <linux/device.h>
+#include <linux/string.h>
+#include <linux/sysfs.h>
+#include <linux/stat.h>
+#include <linux/slab.h>
+
+#include "../pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h"
+#include "../pinctrl/mediatek/pinctrl-mtk-common-v2.h"
+
+#define GPIO_NODE_NUM 15
+#define LOG_SIZE 8192
+#define ERROR_SIZE 1024
+
+struct gpio_node{
+ int gpio_num;
+ int gpio_mode;
+ int gpio_dir;
+ int gpio_dout;
+ int gpio_din;
+};
+
+//struct gpio_node *gpio_test;
+
+struct mtk_pinctrl *hw = NULL;
+const struct mtk_pin_desc *desc = NULL;
+
+struct kobject kobj;
+struct kobject kobj_log;
+int node_num = 0;
+struct gpio_node gpio_node_list[GPIO_NODE_NUM];
+
+char log_info[LOG_SIZE];
+int log_offset = 0;
+char error_info[ERROR_SIZE];
+int error_offset = 0;
+
+ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf);
+ssize_t kobj_log_show(struct kobject *kobject, struct attribute *attr,char *buf);
+int set_gpio(struct device_node *gpio_node, int num);
+
+struct attribute gpio_attr = {
+ .name = "gpio_init",
+ .mode = S_IRUGO,
+};
+struct attribute gpio_attr_log = {
+ .name = "gpio_init_log",
+ .mode = S_IRUGO,
+};
+static struct attribute *def_attrs[] = {
+ &gpio_attr,
+ NULL,
+};
+static struct attribute *def_attrs_log[] = {
+ &gpio_attr_log,
+ NULL,
+};
+
+struct sysfs_ops obj_test_sysops =
+{
+ .show = kobj_test_show,
+};
+
+struct sysfs_ops gpio_log_sysops =
+{
+ .show = kobj_log_show,
+};
+
+struct kobj_type ktype =
+{
+ .sysfs_ops=&obj_test_sysops,
+ .default_attrs=def_attrs,
+};
+
+struct kobj_type ktype_log =
+{
+ .sysfs_ops=&gpio_log_sysops,
+ .default_attrs=def_attrs_log,
+};
+
+/*cat /sys/lynq_gpio/gpio_init*/
+ssize_t kobj_test_show(struct kobject *kobject, struct attribute *attr,char *buf)
+{
+ int show;
+ int i;
+ printk("gpio config show.\n");
+ printk("attrname:%s, node_num: %d.\n", attr->name, node_num);
+ show = sprintf(buf,"%s, node_num: %d\n",attr->name, node_num);
+ show += sprintf(buf + show, "%s", error_info);
+ show += sprintf(buf + show, "NUM\tMODE\tDIR\tDOUT\tDIN\n");
+ for(i = 0; i < node_num; i++)
+ {
+ show += sprintf(buf + show, "%d\t%d\t%d\t%d\t%d\n", gpio_node_list[i].gpio_num, gpio_node_list[i].gpio_mode, gpio_node_list[i].gpio_dir, gpio_node_list[i].gpio_dout, gpio_node_list[i].gpio_din);
+ printk("%d\t%d\t%d\t%d\t%d\n", gpio_node_list[i].gpio_num, gpio_node_list[i].gpio_mode, gpio_node_list[i].gpio_dir, gpio_node_list[i].gpio_dout, gpio_node_list[i].gpio_din);
+ }
+ return strlen(buf);
+}
+/*cat /sys/lynq_log/gpio_init_log*/
+ssize_t kobj_log_show(struct kobject *kobject, struct attribute *attr,char *buf)
+{
+ printk("gpio init log show.\n");
+ sprintf(buf,"SHOW LOG\n%s", log_info);
+ return strlen(buf);
+}
+int set_gpio(struct device_node *gpio_node, int num)
+{
+ int ret = 0;
+ unsigned int gpio_num, gpio_mode, gpio_dir, gpio_dout, gpio_din;
+ int read_mode = -1;
+
+ gpio_node_list[num].gpio_num = -1;
+ gpio_node_list[num].gpio_mode = -1;
+ gpio_node_list[num].gpio_dir = -1;
+ gpio_node_list[num].gpio_din = -1;
+ gpio_node_list[num].gpio_dout = -1;
+
+ //get the gpio hw
+ ret = of_property_read_u32(gpio_node, "gpio_num", &gpio_num);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset,"No gpio num\n");
+ return 0;
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+
+ gpio_node_list[num].gpio_num = (int)gpio_num;
+ printk("GPIO_INIT: the gpio_num is %u", gpio_num);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: the gpio_num is %u\n", gpio_num);
+
+ hw = mtk_gpio_find_mtk_pinctrl_dev_hw();
+ if(hw == NULL)
+ {
+ printk("GPIO_INIT: GET HW ERROR!");
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: can not find this gpiochip!\n");
+ return -1;
+ }
+ if (gpio_num > hw->soc->npins)
+ {
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: ERROR: over the max gpio num!\n");
+ error_offset += sprintf(error_info + error_offset, "GPIO_INIT: ERROR: over the max gpio num!\n");
+ return -1;
+ }
+ desc = (const struct mtk_pin_desc *)&hw->soc->pins[gpio_num];
+ //end of get gpio hw
+
+//set gpio mode
+ ret = of_property_read_u32(gpio_node, "gpio_mode", &gpio_mode);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset, "no value or no node\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ gpio_node_list[num].gpio_mode = (int)gpio_mode;
+ printk("GPIO_INIT: the gpio_mode is %u", gpio_mode);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: the gpio_mode is %u\n", gpio_mode);
+ if(gpio_mode >= 0 && gpio_mode <= 7)
+ {
+ ret = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_MODE, gpio_mode);
+ if(ret == 0)
+ {
+ ret = mtk_hw_get_value(hw, desc, PINCTRL_PIN_REG_MODE, &read_mode);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: Mode SET %d\n", read_mode);
+ printk("GPIO_INIT: modify successfully");
+ }
+ else
+ {
+ printk("GPIO_INIT: SET REEOR %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: SET REEOR %d\n", ret);
+ return ret;
+ }
+ }
+ else
+ {
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: mode: %u out of the range 0-7\n", gpio_mode);
+ error_offset += sprintf(error_info + error_offset, "GPIO_INIT: mode: %u out of the range 0-7\n", gpio_mode);
+ }
+ }
+//set gpio dir
+ ret = of_property_read_u32(gpio_node, "gpio_dir", &gpio_dir);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset, "no value or no node\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ gpio_node_list[num].gpio_dir = (int)gpio_dir;
+ printk("GPIO_INIT: the gpio_dir is %u", gpio_dir);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: the gpio_dir is %u\n", gpio_dir);
+ if(gpio_dir == 0 || gpio_dir == 1)
+ {
+ ret = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DIR, gpio_dir);
+ if(ret == 0)
+ {
+ printk("GPIO_INIT: modify successfully");
+ }
+ else
+ {
+ printk("GPIO_INIT: SET REEOR %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: SET REEOR %d\n", ret);
+ return ret;
+ }
+ }
+ else
+ {
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: dir: %u out of the range 0-1\n", gpio_dir);
+ error_offset += sprintf(error_info + error_offset, "GPIO_INIT: dir: %u out of the range 0-1\n", gpio_dir);
+ }
+
+ }
+//set gpio dout
+ ret = of_property_read_u32(gpio_node, "gpio_dout", &gpio_dout);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset, "no value or no node\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ gpio_node_list[num].gpio_dout = (int)gpio_dout;
+ printk("GPIO_INIT: the gpio_dout is %u", gpio_dout);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: the gpio_dout is %u\n", gpio_dout);
+ if(gpio_dout == 0 || gpio_dout == 1)
+ {
+ ret = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DO, gpio_dout);
+ if(ret == 0)
+ {
+ printk("GPIO_INIT: modify successfully");
+ }
+ else
+ {
+ printk("GPIO_INIT: SET REEOR %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: SET REEOR %d\n", ret);
+ return ret;
+ }
+ }
+ else
+ {
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: dout: %u out of the range 0-1\n", gpio_dout);
+ error_offset += sprintf(error_info + error_offset, "GPIO_INIT: dout: %u out of the range 0-1\n", gpio_dout);
+ }
+ }
+//set gpio din
+ ret = of_property_read_u32(gpio_node, "gpio_din", &gpio_din);
+ if(ret == -EINVAL || ret == -ENODATA)
+ {
+ printk("no value or no node");
+ log_offset += sprintf(log_info + log_offset, "no value or no node\n");
+ }
+ else if(ret < 0)
+ {
+ printk("GPIO_INIT:READ ERROR: %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: read num ERROR: %d\n", ret);
+ return ret;
+ }
+ else
+ {
+ gpio_node_list[num].gpio_din = (int)gpio_din;
+ printk("GPIO_INIT: the gpio_din is %u", gpio_din);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: the gpio_din is %u\n", gpio_din);
+ if(gpio_din == 0 || gpio_din == 1)
+ {
+ ret = mtk_hw_set_value(hw, desc, PINCTRL_PIN_REG_DI, gpio_din);
+ if(ret == 0)
+ {
+ printk("GPIO_INIT: modify successfully");
+ }
+ else
+ {
+ printk("GPIO_INIT: SET REEOR %d", ret);
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: SET REEOR %d\n", ret);
+ return ret;
+ }
+ }
+ else
+ {
+ log_offset += sprintf(log_info + log_offset, "GPIO_INIT: din: %u out of the range 0-1\n", gpio_din);
+ error_offset += sprintf(error_info + error_offset, "GPIO_INIT: din: %u out of the range 0-1\n", gpio_din);
+ }
+ }
+ return ret;
+}
diff --git a/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.c b/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.c
index 47c97dc..732260c 100644
--- a/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.c
+++ b/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.c
@@ -29,6 +29,9 @@
#include <linux/uaccess.h>
#include <linux/io.h>
//zhengzhou modify 20201110 end
+/*Lxf add in 2022/12/2 for gpio init*/
+#include "pinctrl-mtk-common-v2.h"
+/*Lxf add in 2022/12/2 for gpio init end*/
//zhengzhou modify 20201110 start start
struct mtk_pinctrl *hw_file ;//= dev_get_drvdata(dev);
struct device *dev_file;
@@ -66,7 +69,33 @@
pr_notice("[pinctrl]cannot find %s gpiochip\n", pinctrl_paris_modname);
}
+/*Lxf add in 2022/12/2 for gpio init*/
+struct mtk_pinctrl* mtk_gpio_find_mtk_pinctrl_dev_hw(void)
+{
+ struct gpio_desc *gdesc;
+ unsigned int pin = ARCH_NR_GPIOS - 1;
+ do {
+ gdesc = gpio_to_desc(pin);
+ if (gdesc
+ && !strncmp(pinctrl_paris_modname,
+ gdesc->gdev->chip->label,
+ strlen(pinctrl_paris_modname))) {
+ g_hw = gpiochip_get_data(gdesc->gdev->chip);
+
+ return g_hw;
+ }
+ if (gdesc)
+ pin = (pin + 1) - gdesc->gdev->chip->base;
+ if (pin == 0 || !gdesc)
+ break;
+ } while (1);
+
+ pr_notice("[pinctrl]cannot find %s gpiochip\n", pinctrl_paris_modname);
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(mtk_gpio_find_mtk_pinctrl_dev_hw);
+/*Lxf add in 2022/12/2 for gpio init end*/
int gpio_get_tristate_input(unsigned int pin)
{
struct mtk_pinctrl *hw = NULL;
diff --git a/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h b/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h
index 5227f59..2c97de8 100644
--- a/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h
+++ b/src/kernel/linux/v4.19/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2_debug.h
@@ -5,10 +5,14 @@
* Author: Light Hsieh <light.hsieh@mediatek.com>
*
*/
-
+/*Lxf add in 2022/12/2 for gpio init*/
+#include "pinctrl-mtk-common-v2.h"
+/*Lxf add in 2022/12/2 for gpio init end*/
#ifndef __PINCTRL_MTK_COMMON_V2_DEBUG_H
#define __PINCTRL_MTK_COMMON_V2_DEBUG_H
int gpio_get_tristate_input(unsigned int pin);
-
+/*Lxf add in 2022/12/2 for gpio init*/
+struct mtk_pinctrl* mtk_gpio_find_mtk_pinctrl_dev_hw(void);
+/*Lxf add in 2022/12/2 for gpio init end*/
#endif /* __PINCTRL_MTK_COMMON_V2_DEBUG_H */
diff --git a/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c b/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
index 9ae0db2..5c0281b 100644
--- a/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
+++ b/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
@@ -21,6 +21,9 @@
#define RTC_BBPU 0x0000
+/*dongyu@2023.1.9 RTC set sleep wake time and call shutdown for shutdown, the module will automatically turn on start*/
+#define RTC_BBPU_KEY 0x4300
+/*dongyu@2023.1.9 RTC set sleep wake time and call shutdown for shutdown, the module will automatically turn on end*/
#define RTC_BBPU_CBUSY BIT(6)
#define RTC_WRTGR_MT6330 0x3a
@@ -453,7 +456,13 @@
struct mt6330_rtc *rtc = data;
u32 irqsta = 0, irqen;
int ret;
+ /*dongyu@2023.1.9 RTC set sleep wake time and call shutdown for shutdown, the module will automatically turn on start*/
+ int ret2, tmp;
+ ret2 = rtc_read(rtc, rtc->addr_base + RTC_BBPU, &tmp);
+ ret2 = rtc_write(rtc, rtc->addr_base + RTC_BBPU, (tmp | RTC_BBPU_KEY | (1<<3)));
+ mtk_rtc_write_trigger(rtc);
+ /*dongyu@2023.1.9 RTC set sleep wake time and call shutdown for shutdown, the module will automatically turn on end*/
ret = rtc_read(rtc, rtc->addr_base + RTC_IRQ_STA, &irqsta);
if ((ret >= 0) && (irqsta & RTC_IRQ_STA_AL)) {
rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
diff --git a/src/kernel/linux/v4.19/drivers/soc/mediatek/Kconfig b/src/kernel/linux/v4.19/drivers/soc/mediatek/Kconfig
index c82a4f4..7945f5c 100644
--- a/src/kernel/linux/v4.19/drivers/soc/mediatek/Kconfig
+++ b/src/kernel/linux/v4.19/drivers/soc/mediatek/Kconfig
@@ -83,6 +83,10 @@
platform could enter deeper sleep mode when cpu preparing to
power down if it have sufficient time between warmboot.
+#Typethree@2023.2.01 modify for TCXO hw version start
+
+#Typethree@2023.2.01 modify for TCXO hw version end
+
config MTK_IPI
tristate "MediaTek IPI Support"
depends on RPMSG_MTK
diff --git a/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c b/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
index d9736f0..2c822d1 100755
--- a/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
+++ b/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
@@ -25,6 +25,9 @@
#include <dt-bindings/power/mt8173-power.h>
#include <dt-bindings/power/mt6880-power.h>
#include <dt-bindings/power/mt6890-power.h>
+/*Typethree add for tcxo power problem 2023/01/30 start*/
+#include <linux/gpio.h>
+/*Typethree add for tcxo power problem 2023/01/30 end*/
#include "mtk-scpsys.h"
#define MTCMOS_BRINGUP 0
@@ -62,10 +65,15 @@
#define SPM_WB_PWR_CON 0x02ec /* MT7622 */
/* NETSYS_S_SRAM_CON (0x10006000+0x378)*/
#define NETSYS_S_SRAM_CON 0x0378
-
+/* CONN_STATUS (0x10006000+0x62C)*/
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#define CONN_STATUS 0x062C
+/*Typethree add for tcxo power problem 2023/01/12 end*/
#define SPM_PWR_STATUS 0x060c
#define SPM_PWR_STATUS_2ND 0x0610
-
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#define CONN_STATUS_BIT BIT(0)
+/*Typethree add for tcxo power problem 2023/01/12 end*/
#define PWR_RST_B_BIT BIT(0)
#define PWR_ISO_BIT BIT(1)
#define PWR_ON_BIT BIT(2)
@@ -647,8 +655,28 @@
struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
struct scp *scp = scpd->scp;
void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
- u32 val;
+
+ u32 val;
int ret, tmp;
+
+/*Typethree add for tcxo power problem 2023/01/30 start*/
+ int gpio_81 = gpio_get_value(81+268);
+ int gpio_82 = gpio_get_value(82+268);
+ void __iomem *conn_status_addr = scp->base + CONN_STATUS;
+
+ if (gpio_81 != 0 && gpio_82 == 0) //TCXO open
+ {
+ val = readl(conn_status_addr);
+ if (strcmp(genpd->name, "conn") == 0) {
+ if ((val & CONN_STATUS_BIT) == CONN_STATUS_BIT)
+ dev_err(scp->dev, "gps try to power on\n");
+ else {
+ dev_err(scp->dev, "Skip conn power on\n");
+ return 0;
+ }
+ }
+ }
+/*Typethree add for tcxo power problem 2023/01/30 end*/
ret = scpsys_regulator_enable(scpd);
if (ret < 0)
@@ -755,8 +783,27 @@
struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
struct scp *scp = scpd->scp;
void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
+
u32 val;
int ret, tmp;
+/*Typethree add for tcxo power problem 2023/01/30 start*/
+ int gpio_81 = gpio_get_value(81+268);
+ int gpio_82 = gpio_get_value(82+268);
+ void __iomem *conn_status_addr = scp->base + CONN_STATUS;
+
+ if (gpio_81 != 0 && gpio_82 == 0)
+ {
+ val = readl(conn_status_addr);
+ if (strcmp(genpd->name, "conn") == 0) {
+ if ((val & CONN_STATUS_BIT) == CONN_STATUS_BIT)
+ dev_err(scp->dev, "gps try to power off\n");
+ else {
+ dev_err(scp->dev, "Skip conn power off\n");
+ return 0;
+ }
+ }
+ }
+/*Typethree add for tcxo power problem 2023/01/30 end*/
ret = scpsys_bus_protect_enable(scpd);
if (ret < 0)
diff --git a/src/kernel/linux/v4.19/fs/proc/version.c b/src/kernel/linux/v4.19/fs/proc/version.c
index b449f18..aab869f 100644
--- a/src/kernel/linux/v4.19/fs/proc/version.c
+++ b/src/kernel/linux/v4.19/fs/proc/version.c
@@ -5,6 +5,7 @@
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/utsname.h>
+#include <generated/compile.h>
static int version_proc_show(struct seq_file *m, void *v)
{
@@ -18,6 +19,7 @@
static int __init proc_version_init(void)
{
proc_create_single("version", 0, NULL, version_proc_show);
+ printk("VERSION: ("LYNQ_VERSION") "UTS_VERSION" \n");
return 0;
}
fs_initcall(proc_version_init);
diff --git a/src/kernel/linux/v4.19/init/version.c b/src/kernel/linux/v4.19/init/version.c
index ef4012e..0a0c76d 100644
--- a/src/kernel/linux/v4.19/init/version.c
+++ b/src/kernel/linux/v4.19/init/version.c
@@ -49,6 +49,7 @@
const char linux_proc_banner[] =
"%s version %s"
" (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ")"
+ " (" LYNQ_VERSION ")"
" (" LINUX_COMPILER ") %s\n";
BUILD_SALT;
diff --git a/src/kernel/linux/v4.19/oe-logs b/src/kernel/linux/v4.19/oe-logs
index 7c64d2b..b6ad895 120000
--- a/src/kernel/linux/v4.19/oe-logs
+++ b/src/kernel/linux/v4.19/oe-logs
@@ -1 +1 @@
-/mnt/sdc/qs.xiong/work_space/up_drv/build/tmp/work/auto2735evb_ivt_main-poky-linux/linux-mtk-extension/4.19-r0/temp
\ No newline at end of file
+/home/ren/git/diff/Merged/T800/build/tmp/work/auto2735evb_ivt_main-poky-linux/linux-mtk-extension/4.19-r0/temp
\ No newline at end of file
diff --git a/src/kernel/linux/v4.19/oe-workdir b/src/kernel/linux/v4.19/oe-workdir
index e87e9b6..b2307d2 120000
--- a/src/kernel/linux/v4.19/oe-workdir
+++ b/src/kernel/linux/v4.19/oe-workdir
@@ -1 +1 @@
-/mnt/sdc/qs.xiong/work_space/up_drv/build/tmp/work/auto2735evb_ivt_main-poky-linux/linux-mtk-extension/4.19-r0
\ No newline at end of file
+/home/ren/git/diff/Merged/T800/build/tmp/work/auto2735evb_ivt_main-poky-linux/linux-mtk-extension/4.19-r0
\ No newline at end of file
diff --git a/src/kernel/linux/v4.19/scripts/mkcompile_h b/src/kernel/linux/v4.19/scripts/mkcompile_h
index aebd613..4aaaa32 100755
--- a/src/kernel/linux/v4.19/scripts/mkcompile_h
+++ b/src/kernel/linux/v4.19/scripts/mkcompile_h
@@ -52,6 +52,7 @@
fi
#LXF 2022.10.10 modify for T8TSK-91 start
COMMITID=$(git rev-parse --short HEAD)
+#LYNQ_VERSION="T800_UNSET_v02.MP1_MR3.02b06.00.01"
UTS_VERSION="#$VERSION"
CONFIG_FLAGS=""
@@ -74,6 +75,7 @@
echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
#LXF 2022.10.10 modify for T8TSK-91 start
printf '#define LINUX_COMPILE_BY "%s"\n' "$LINUX_COMPILE_BY"
+ printf '#define LYNQ_VERSION "%s"\n' "$LYNQ_VERSION"
#echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
#LXF 2022.10.10 modify for T8TSK-91 end
echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
diff --git a/src/kernel/modules/connectivity/2.0/conninfra_driver/Makefile b/src/kernel/modules/connectivity/2.0/conninfra_driver/Makefile
index 67ec6d9..1ca5c6b 100755
--- a/src/kernel/modules/connectivity/2.0/conninfra_driver/Makefile
+++ b/src/kernel/modules/connectivity/2.0/conninfra_driver/Makefile
@@ -74,9 +74,11 @@
ccflags-y += -D CONFIG_CONNINFRA_THERMAL_SUPPORT=1
endif
-ifeq ($(ENABLE_TCXO), yes)
- ccflags-y += -D ENABLE_TCXO=1
-endif
+#Typethree@2023.2.01 modify for TCXO hw version start
+#ifeq ($(ENABLE_TCXO), yes)
+# ccflags-y += -D ENABLE_TCXO=1
+#endif
+#Typethree@2023.2.01 modify for TCXO hw version end
$(patsubst CONFIG_%, -DCFG_%=1, $(patsubst %=m,%,$(filter %=m,$(EXTRA_KCONFIG)))) \
$(patsubst CONFIG_%, -DCFG_%=1, $(patsubst %=y,%,$(filter %=y,$(EXTRA_KCONFIG)))) \
diff --git a/src/kernel/modules/connectivity/2.0/conninfra_driver/platform/consys_hw.c b/src/kernel/modules/connectivity/2.0/conninfra_driver/platform/consys_hw.c
index 1415faa..f3d038d 100755
--- a/src/kernel/modules/connectivity/2.0/conninfra_driver/platform/consys_hw.c
+++ b/src/kernel/modules/connectivity/2.0/conninfra_driver/platform/consys_hw.c
@@ -21,6 +21,10 @@
#include <linux/of_device.h>
#include <linux/of_reserved_mem.h>
#include <linux/pinctrl/consumer.h>
+/*Typethree@2023.2.01 modify for TCXO hw version start*/
+#include <linux/gpio.h>
+/*Typethree@2023.2.01 modify for TCXO hw version start*/
+
#include "osal.h"
@@ -510,6 +514,12 @@
int mtk_conninfra_probe(struct platform_device *pdev)
{
int ret = -1;
+
+/*Typethree add for tcxo power problem 2023/02/03 start*/
+ int gpio_81 = 0;
+ int gpio_82 = 0;
+/*Typethree add for tcxo power problem 2023/02/03 start*/
+
#if CFG_CONNINFRA_FW_LOG_SUPPORT
struct consys_emi_addr_info* emi_info = NULL;
#endif
@@ -552,12 +562,21 @@
pr_err("pmic_mng init fail, %d\n", ret);
return -5;
}
+
+ /*Typethree add for tcxo power problem 2023/02/03 start*/
+ gpio_81 = gpio_get_value(81+268);
+ gpio_82 = gpio_get_value(82+268);
-#ifdef ENABLE_TCXO
- conn_hw_env.tcxo_support = true;
-#else
- consys_hw_tcxo_parser(pdev);
-#endif
+ if (gpio_81 != 0 && gpio_82 == 0)
+ {
+ conn_hw_env.tcxo_support = true;
+ }
+ else
+ {
+ consys_hw_tcxo_parser(pdev);
+ }
+ /*Typethree add for tcxo power problem 2023/02/03 end*/
+
#if CFG_CONNINFRA_FW_LOG_SUPPORT
/* Setup connsys log emi base */
diff --git a/src/kernel/modules/connectivity/2.0/gps_driver/data_link/hal/gps_dl_power_ctrl.c b/src/kernel/modules/connectivity/2.0/gps_driver/data_link/hal/gps_dl_power_ctrl.c
index 1da21c4..878c01b 100644
--- a/src/kernel/modules/connectivity/2.0/gps_driver/data_link/hal/gps_dl_power_ctrl.c
+++ b/src/kernel/modules/connectivity/2.0/gps_driver/data_link/hal/gps_dl_power_ctrl.c
@@ -33,7 +33,9 @@
#if GPS_DL_ON_CTP
#include "gps_dl_ctp.h"
#endif
-
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#include <asm/io.h>
+/*Typethree add for tcxo power problem 2023/01/12 end*/
/* TODO: move them into a single structure */
bool g_gps_common_on;
bool g_gps_dsp_on_array[GPS_DATA_LINK_NUM];
@@ -337,6 +339,18 @@
gps_dl_hw_gps_dsp_ctrl(GPS_L5_DSP_CLEAR_PWR_STAT);
}
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+void gps_dl_hal_conn_power_ctrl_temp(unsigned int op)
+{
+ /*Troubleshoot the first GNSS startup failure due to no power supply for TCXO conn_vcn1.8*/
+ unsigned int md2gps_status = 0;
+ char *addr = ioremap(0x1000662c, 0x4);
+ md2gps_status = *(unsigned int *)addr;
+ md2gps_status = (md2gps_status & 0xFFFFFFFE)| op;
+ *(unsigned int *)addr = md2gps_status;
+ iounmap(addr);
+}
+/*Typethree add for tcxo power problem 2023/01/12 end*/
int gps_dl_hal_conn_power_ctrl(enum gps_dl_link_id_enum link_id, int op)
{
bool dma_en_flag = gps_dl_hal_get_dma_irq_en_flag();
@@ -349,6 +363,9 @@
if (1 == op) {
if (g_conn_user == 0) {
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+ gps_dl_hal_conn_power_ctrl_temp(op);
+/*Typethree add for tcxo power problem 2023/01/12 end*/
gps_dl_log_info_show();
if (!gps_dl_hal_conn_infra_driver_on())
return -1;
@@ -383,6 +400,9 @@
gps_dl_wake_lock_hold(false);
#endif
gps_dl_hal_conn_infra_driver_off();
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+ gps_dl_hal_conn_power_ctrl_temp(op);
+/*Typethree add for tcxo power problem 2023/01/12 end*/
}
}
diff --git a/src/lynq/framework/lynq-ril-service/LICENSE b/src/lynq/framework/lynq-ril-service/LICENSE
index 77f59ed..605b7ea 100755
--- a/src/lynq/framework/lynq-ril-service/LICENSE
+++ b/src/lynq/framework/lynq-ril-service/LICENSE
@@ -1,31 +1,31 @@
Copyright Statement:
-This software/firmware and related documentation ("MediaTek Software") are
+This software/firmware and related documentation ("MobileTek Software") are
protected under relevant copyright laws. The information contained herein is
-confidential and proprietary to MediaTek Inc. and/or its licensors. Without
-the prior written permission of MediaTek inc. and/or its licensors, any
-reproduction, modification, use or disclosure of MediaTek Software, and
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
information contained herein, in whole or in part, shall be strictly
prohibited.
-MediaTek Inc. (C) 2015. All rights reserved.
+MobileTek Inc. (C) 2015. All rights reserved.
BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
-THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
-RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
-ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
-NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
-INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
-OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
-SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
-STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
-ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
-RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
-MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
-CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/framework/lynq-ril-service/src/LICENSE b/src/lynq/framework/lynq-ril-service/src/LICENSE
index 77f59ed..605b7ea 100755
--- a/src/lynq/framework/lynq-ril-service/src/LICENSE
+++ b/src/lynq/framework/lynq-ril-service/src/LICENSE
@@ -1,31 +1,31 @@
Copyright Statement:
-This software/firmware and related documentation ("MediaTek Software") are
+This software/firmware and related documentation ("MobileTek Software") are
protected under relevant copyright laws. The information contained herein is
-confidential and proprietary to MediaTek Inc. and/or its licensors. Without
-the prior written permission of MediaTek inc. and/or its licensors, any
-reproduction, modification, use or disclosure of MediaTek Software, and
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
information contained herein, in whole or in part, shall be strictly
prohibited.
-MediaTek Inc. (C) 2015. All rights reserved.
+MobileTek Inc. (C) 2015. All rights reserved.
BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
-THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
-RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
-ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
-NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
-INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
-OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
-SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
-STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
-ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
-RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
-MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
-CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/ATCI.cpp b/src/lynq/framework/lynq-ril-service/src/atci/ATCI.cpp
old mode 100644
new mode 100755
index 16f38df..236a3d7
--- a/src/lynq/framework/lynq-ril-service/src/atci/ATCI.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/atci/ATCI.cpp
@@ -55,6 +55,7 @@
#include "atci_sys_cmd.h"
#include "atci_ss_cmd.h"
#include "atci_cc_cmd.h"
+#include "atci_lynq_data_cmd.h" //warren add for lynq atsvc on 20221207
#endif
struct sockaddr_un atci_server_addr;
@@ -454,6 +455,90 @@
RLOGD("Response Buf is %s, send length is %d",buf,len_s);
}
+/*warren add for lynq atsvc on 20221208 start*/
+int atci_send_result(int error_code)
+{
+ char buf[32];
+ memset(buf, 0, sizeof(buf));
+ if(error_code != 0)
+ {
+ sprintf(buf,"%s%d\r\n","\r\n+CME ERROR: ",error_code);
+ }
+ else
+ {
+ sprintf(buf,"%s","\r\nOK\r\n");
+ }
+ int len_s = send(atci_client_connect, buf, strlen(buf), 0);
+ if(len_s != strlen(buf))
+ {
+ RLOGD("send buf fail Response Buf is %s, send length is %d",buf,len_s);
+ return -1;
+ }
+ RLOGD("Response Buf is %s, send length is %d",buf,len_s);
+ return 0;
+}
+int atci_send_data(char *data)
+{
+ char buf[256];
+ int data_len = 0;
+ memset(buf, 0, sizeof(buf));
+ if(NULL == data)
+ {
+ RLOGD("data is null");
+ return -1;
+ }
+ else
+ {
+ data_len = strlen(data);
+ if(data_len > 252)// \r\n + \r\n\0
+ {
+ RLOGD("data too long");
+ snprintf(buf,252,"\r\n%s\r\n",data);
+ }
+ else
+ {
+ snprintf(buf,data_len+5,"\r\n%s\r\n",data);// \r\n + \r\n\0
+ }
+ int len_s = send(atci_client_connect, buf, strlen(buf), 0);
+ if(len_s != strlen(buf))
+ {
+ RLOGD("send buf fail Response Buf is %s, send length is %d",buf,len_s);
+ return -1;
+ }
+ RLOGD("Response Buf is %s, send length is %d",buf,len_s);
+ }
+ return 0;
+}
+void ATCIResponseNoToken(int error, char* data, int reqNum)
+{
+ char buf[64];
+ if(NULL == data && reqNum == 0)
+ {
+ RLOGD("[%d][%s] input error",__LINE__,__FUNCTION__);
+ return;
+ }
+ RLOGD("request is %d,%s",reqNum,android::requestToString(reqNum));
+ if(NULL == data)
+ {
+ if(atci_send_result(error)!=0)
+ {
+ RLOGD("send result fail");
+ }
+ }
+ else
+ {
+ if(atci_send_data(data)!=0)
+ {
+ RLOGD("send data fail");
+ return;
+ }
+ if(atci_send_result(error)!=0)
+ {
+ RLOGD("send result fail");
+ }
+ }
+}
+/*warren add for lynq atsvc on 20221208 end*/
#ifdef ATCI_PARSE
int acti_cmd_recv(int fd, char *buf, int len) {
int ret = 0;
@@ -588,7 +673,7 @@
}
#ifdef ATCI_PARSE
DbgMsg("init cmd handle");
- if(/*atci_generic_init(NULL)||*/atci_cc_init(NULL)||atci_ss_init(NULL)||atci_sys_init(NULL)) {
+ if(/*atci_generic_init(NULL)||*/atci_cc_init(NULL)||atci_ss_init(NULL)||atci_sys_init(NULL)||atci_lynq_data_init(NULL)) {
ErrMsg("module init function error,exit");
exit(-1);
}
@@ -798,7 +883,7 @@
int cmd_mode = atci_get_cmd_mode(line);
char response[MAX_RESP_BUF_LENGTH];
memset(response, 0, sizeof(response));
- RLOGD("write to handler");
+ RLOGD("write to handler,cmd_mode:%d",cmd_mode);
ret = cmd_handle->cmd_handle_func(line, cmd_mode, cmd_handle->target,
response);
if (SYS_FAIL == ret) {
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/ATCI.h b/src/lynq/framework/lynq-ril-service/src/atci/ATCI.h
index 45f9d4f..6d52dbf 100755
--- a/src/lynq/framework/lynq-ril-service/src/atci/ATCI.h
+++ b/src/lynq/framework/lynq-ril-service/src/atci/ATCI.h
@@ -146,6 +146,8 @@
#endif
void ATCIResponse(int token, int error, char* data, int reqNum);
-
+void ATCIResponseNoToken(int error, char* data, int reqNum); /*warren add for lynq atsvc on 20221208*/
+int atci_send_data(char *data);
+int atci_send_result(int error_code);
void * StartATCISocket(void *param);
#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.cpp b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.cpp
new file mode 100755
index 0000000..e0b8321
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.cpp
@@ -0,0 +1,694 @@
+/**********************************************************************************************
+* @file atci_lynq_data_cmd.cpp
+* @brief.Implementation of lynq data AT commands function
+* @details None
+* @author Hong Liu。
+* @date 2022-12-07
+* @version V1.0
+* @copyright Copyright (c) MobileTek
+***********************************************************************************************/
+#include <vendor-ril/telephony/ril.h>
+#include <string.h>
+#include <log/log.h>
+
+#include "ATCI.h"
+#include "atci_util.h"
+#include "atci_at_util.h"
+#include "atci_lynq_data_cmd.h"
+#include "atci_common.h"
+#include "lynq_common.h"
+#include "common.h"
+#include "sim.h"
+
+#undef LOG_TAG
+#define LOG_TAG "DEMO_ATCI_DATA"
+#define LINE __LINE__
+#define FUNC __FUNCTION__
+#define SET_DEFAULT_SIM_ALL -1
+
+int g_flag_apn = 0;
+
+atci_cmd_type_t atci_data_cmd_table[] = {
+//cmd_name target_type handler
+ { "AT+LAPNACT", TARGET_TELEPHONY, atci_data_enable_pdp_hdlr }, //AT command to enable defult PDP
+ { "AT+ELAPNACT", TARGET_TELEPHONY, atci_data_enable_pdp_with_apn_hdlr }, //AT command to enable PDP with APN
+ { "AT+LEAPNMOD", TARGET_TELEPHONY, atci_data_modify_apn_hdlr }, //AT command to modify APN
+ { "AT+LCSUS", TARGET_TELEPHONY, atci_switch_card_halr },
+ { NULL, TARGET_UNKNOWN, NULL }
+};
+int atci_lynq_data_init(void *arg) {
+ int ret;
+ ret = atci_cmd_register(atci_data_cmd_table);
+ return ret;
+}
+
+int atci_switch_card_halr(char *cmd, int op_mode, int target, char *response)
+{
+ char buf[16];
+ switch (op_mode)
+ {
+ case AT_SET_MODE:
+ {
+ //paser parameter
+ //send to target handle
+ //ex: at+lapnact=int
+ RLOGD("input cmd[%s]", cmd);
+ if (SYS_FAIL == atci_at_to_equal(&cmd))
+ {
+ //input error
+ ATCIResponseNoToken(100,NULL,SET_DEFAULT_SIM_ALL);
+ return SYS_FAIL;
+ }
+ RLOGD("[%d][%s] data is[%s]",LINE,FUNC,cmd);
+ int state;
+ if (SYS_FAIL == atci_at_get_nexthexint(&cmd, &state))
+ {
+ ATCIResponseNoToken(100,NULL,SET_DEFAULT_SIM_ALL);
+ return SYS_FAIL;
+ }
+ RLOGD("state value is %d", state);
+ if(state==1)
+ {
+ char* argv[2] = { 0 };
+ argv[0] = "SET_DEFAULT_SIM_ALL";
+ //sprintf(argv[1], "%d", state);
+ argv[1] = "1";
+
+ int argc = 2;
+ android::lynqSendToRil(2,argv,1024);
+ RLOGD("%s g_switch_card_error %d %d", __FUNCTION__, g_switch_card_error, __LINE__);
+ if(!g_switch_card_error)
+ {
+ ATCIResponseNoToken(0,NULL,-1);
+ }
+ else
+ {
+ ATCIResponseNoToken(g_switch_card_error,NULL,-1);
+ }
+
+ }
+ else if(state == 0)
+ {
+ char* argv[2] = { 0 };
+ argv[0] = "SET_DEFAULT_SIM_ALL";
+ //sprintf(argv[1], "%d", state);
+ argv[1] = "0";
+
+ int argc = 2;
+ android::lynqSendToRil(2,argv,1024);
+ RLOGD("%s g_switch_card_error %d %d", __FUNCTION__, g_switch_card_error, __LINE__);
+ if(!g_switch_card_error)
+ {
+ ATCIResponseNoToken(0,NULL,-1);
+ }
+ else
+ {
+ ATCIResponseNoToken(g_switch_card_error,NULL,-1);
+ }
+ }
+ else
+ {
+
+ ATCIResponseNoToken(100,NULL,SET_DEFAULT_SIM_ALL);
+ return SYS_FAIL;
+ }
+ break;
+ }
+ case AT_TEST_MODE:
+ {
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"%s","+LCSUS: (0,1)");
+ ATCIResponseNoToken(0,buf,SET_DEFAULT_SIM_ALL);
+ break;
+ }
+ case AT_READ_MODE:
+ {
+
+ int id = get_default_sim_all();
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"+LCSUS: %d", id);
+ ATCIResponseNoToken(0,buf,SET_DEFAULT_SIM_ALL);
+ break;
+ }
+ default:
+ {
+ RLOGD("set mute error");
+ break;
+ }
+ }
+ return SYS_SUCC;
+}
+
+int atci_data_enable_pdp_hdlr(char *cmd, int op_mode, int target, char *response)
+{
+ int ret;
+ char buf[16];
+ switch (op_mode)
+ {
+ case AT_SET_MODE:
+ {
+ //paser parameter
+ //send to target handle
+ //ex: at+lapnact=int
+ RLOGD("input cmd[%s]", cmd);
+
+ if (SYS_FAIL == atci_at_to_equal(&cmd))
+ {
+ //input error
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("[%d][%s] data is[%s]",LINE,FUNC,cmd);
+ int state;
+
+ if (SYS_FAIL == atci_at_get_nexthexint(&cmd, &state))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+
+ RLOGD("state value is %d", state);
+
+ //wrire data to target
+ atci_data_req_t req;
+
+ if(state==1)
+ {
+ req.request_id = RIL_REQUEST_SETUP_DATA_CALL;
+ }
+ else if(state == 0)
+ {
+ req.request_id = RIL_REQUEST_DEACTIVATE_DATA_CALL;
+ }
+ else
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+
+
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ char* argv[2] = { 0 };
+ argv[0] = reqStr;
+ int argc = 1;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ ATCIResponseNoToken(0,NULL,req.request_id);
+ break;
+ }
+ case AT_TEST_MODE:
+ {
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"%s","+LAPNACT: (0,1)");
+ ATCIResponseNoToken(0,buf,RIL_REQUEST_SETUP_DATA_CALL);
+ break;
+ }
+ default:
+ {
+ RLOGD("set mute error");
+ break;
+ }
+ }
+ return SYS_SUCC;
+}
+
+int atci_data_enable_pdp_with_apn_hdlr(char *cmd, int op_mode, int target,char *response)
+{
+ int ret;
+ int argc = 0;
+ char* argv[8] = { 0 };
+ char buf[512];
+ char authTypebuf[16] = {0};
+ int state = 0;
+ int authType = 0;
+ char *apn = NULL;
+ char *apnTpye = NULL;
+ char *user = NULL;
+ char *password =NULL;
+ char *apnprotocol = NULL;
+ char *apnRoamProtocol = NULL;
+ switch (op_mode)
+ {
+ case AT_SET_MODE:
+ {
+ //paser parameter
+ //send to target handle
+ //ex: at+lapnact=int
+ RLOGD("input cmd[%s]", cmd);
+
+ if (SYS_FAIL == atci_at_to_equal(&cmd))
+ {
+ //input error
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("[%d][%s] data is[%s]",LINE,FUNC,cmd);
+
+ if (SYS_FAIL == atci_at_get_nexthexint(&cmd, &state))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("state value is %d", state);
+ if(state == 1)
+ {
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apn))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("apn value is %s", apn);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apnTpye))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("apnTpye value is %s", apnTpye);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &user))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("user value is %s", user);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &password))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("pwd value is %s", password);
+ if (SYS_FAIL == atci_at_get_nexthexint(&cmd, &authType))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("authType value is %d", authType);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apnprotocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("apnprotocol value is %s", apnprotocol);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apnRoamProtocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("apnRoamProtocol value is %s", apnRoamProtocol);
+ argv[1] = apn;
+ argv[2] = apnTpye;
+ argv[3] = user;
+ argv[4] = password;
+ sprintf(authTypebuf,"%d",authType);
+ argv[5] = authTypebuf;
+ argv[6] = apnprotocol;
+ argv[7] = apnRoamProtocol;
+ argc = 8;
+ }
+ else if(state == 0)
+ {
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apnTpye))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+ RLOGD("apnTpye value is %s", apnTpye);
+ argv[1] = apnTpye;
+ argc = 2;
+ }
+ //wrire data to target
+ atci_data_req_t req;
+ if(state==1)
+ {
+ req.request_id = RIL_REQUEST_SETUP_DATA_CALL;
+ }
+ else if(state == 0)
+ {
+ req.request_id = RIL_REQUEST_DEACTIVATE_DATA_CALL;
+ }
+ else
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_FAIL;
+ }
+
+
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ argv[0] = reqStr;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ ATCIResponseNoToken(0,NULL,req.request_id);
+ break;
+ }
+ case AT_TEST_MODE:
+ {
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"%s","+ELAPNACT: (0,1),"","","","",(0-3),(\"null\",\"IPV4\",\"IPV6\",\"IPV4V6\"),(\"null\",\"IPV4\",\"IPV6\",\"IPV4V6\")");
+ ATCIResponseNoToken(0,buf,RIL_REQUEST_SETUP_DATA_CALL);
+ break;
+ }
+ case AT_READ_MODE:
+ {
+ for(int i = 0;i < LYNQ_APN_CHANNEL_MAX; i ++)
+ {
+ if(!apn_table[i].used)
+ {
+ continue;
+ }
+ memset(buf,0,sizeof(buf));
+ sprintf(buf,"+ELAPNACT:%s,%s,%d,%s,%s\n", apn_table[i].apn, apn_table[i].apntype ,apn_table[i].pdpstate, apn_table[i].ifaceName, apn_table[i].address);
+ if(atci_send_data(buf)!=0)
+ {
+ RLOGD("send data fail");
+ return SYS_FAIL;
+ }
+ }
+ if(apn_count == 0)
+ {
+ memset(buf,0,sizeof(buf));
+ ATCIResponseNoToken(0,buf,RIL_REQUEST_SETUP_DATA_CALL);
+ return SYS_SUCC;
+ }
+ atci_send_result(0);
+ break;
+ }
+ default:
+ {
+ RLOGD("set mute error");
+ break;
+ }
+ }
+ return SYS_SUCC;
+}
+
+static int insert_apn_char(char *agc, char *id,char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
+{
+ char strtmp[10][64];
+ if (!strcmp(id,"null"))
+ {
+ sprintf(strtmp[0], "id=;");
+ }
+ else
+ {
+ sprintf(strtmp[0], "id=%s;", id);
+ }
+ if (!strcmp(mcc,"null"))
+ {
+ char mcc[8] = {0};
+ if(strlen(mccmnc))
+ {
+ strncpy(mcc, mccmnc, 3);
+ sprintf(strtmp[1], "mcc=%s;", mcc);
+ }
+ else
+ {
+ sprintf(strtmp[2], "mcc=;");
+ }
+ }
+ else
+ {
+ sprintf(strtmp[1], "mcc=%s;", mcc);
+ }
+ if (!strcmp(mnc,"null"))
+ {
+ if(strlen(mccmnc))
+ {
+ sprintf(strtmp[2], "mnc=%s;", mccmnc+3);
+ }
+ else
+ {
+ sprintf(strtmp[2], "mnc=;");
+ }
+ }
+ else
+ {
+ sprintf(strtmp[2], "mnc=%s;", mnc);
+ }
+ if (!strcmp(apn,"null"))
+ {
+ sprintf(strtmp[3], "apn=;");
+ }
+ else
+ {
+ sprintf(strtmp[3], "apn=%s;", apn);
+ }
+ if (!strcmp(apntype,"null"))
+ {
+ sprintf(strtmp[4], "apntype=;");
+ }
+ else
+ {
+ sprintf(strtmp[4], "type=%s;", apntype);
+ }
+ if (!strcmp(user,"null"))
+ {
+ sprintf(strtmp[5], "user=;");
+ }
+ else
+ {
+ sprintf(strtmp[5], "user=%s;", user);
+ }
+ if (!strcmp(password,"null"))
+ {
+ sprintf(strtmp[6], "password=;");
+ }
+ else
+ {
+ sprintf(strtmp[6], "password=%s;", password);
+ }
+ if (!strcmp(normalprotocol,"null"))
+ {
+ sprintf(strtmp[7], "protocol=;");
+ }
+ else
+ {
+ sprintf(strtmp[7], "normalprotocol=%s;", normalprotocol);
+ }
+ if (!strcmp(roamingprotocol,"null"))
+ {
+ sprintf(strtmp[8], "roamingprotocol=;");
+ }
+ else
+ {
+ sprintf(strtmp[8], "roamingprotocol=%s;", roamingprotocol);
+ }
+ if (!strcmp(carrier,"null"))
+ {
+ sprintf(strtmp[9], "carrier=;");
+ }
+ else
+ {
+ sprintf(strtmp[9], "carrier=%s;", carrier);
+ }
+ sprintf(agc, "%s%s%s%s%s%s%s%s%s%s",strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
+ return 0;
+}
+
+int atci_data_modify_apn_hdlr(char *cmd, int op_mode, int target, char *response)
+{
+ char *id = NULL;
+ char *mcc = NULL;
+ char *mnc = NULL;
+ char *apn = NULL;
+ char *apntype = NULL;
+ char *user = NULL;
+ char *password = NULL;
+ char *normalprotocol = NULL;
+ char *roamingprotocol = NULL;
+ char *carrier = NULL;
+ int state = -1;
+ char apn_info[512];
+ char* argv[3] = { 0 };
+ int argc = 0;
+ g_flag_apn = 1;
+ switch (op_mode)
+ {
+ case AT_SET_MODE:
+ {
+ RLOGD("input cmd[%s]", cmd);
+ if (SYS_FAIL == atci_at_to_equal(&cmd))
+ {
+ //input error
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ RLOGD("[%d][%s] data is[%s]",LINE,FUNC,cmd);
+ if (SYS_FAIL == atci_at_get_nexthexint(&cmd, &state))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ RLOGD("state value is %d", state);
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &id))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if(state == 0)
+ {
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &mcc))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &mnc))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apn))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apntype))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &user))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &password))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &normalprotocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &roamingprotocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &carrier))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ /*get mccmnc*/
+ lynq_req_mccmnc(666);
+ lynq_wait_result_comeback(100);//wait 100ms
+ /*get mccmnc*/
+ insert_apn_char(apn_info, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
+ argv[1] = "0";
+ argv[2] = apn_info;
+ RLOGD("apn_info %s\n", apn_info);
+ atci_data_req_t req;
+ req.request_id = RIL_REQUEST_MODIFY_APN;
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ argv[0] = reqStr;
+ argc = 3;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ }
+ else if (state == 1)
+ {
+ sprintf(apn_info, "id=%s", id);
+ argv[1] = "1";
+ argv[2] = apn_info;
+ atci_data_req_t req;
+ req.request_id = RIL_REQUEST_MODIFY_APN;
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ argv[0] = reqStr;
+ argc = 3;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ }
+ else if (state == 2)
+ {
+ sprintf(apn_info, "id=%s", id);
+ argv[1] = "2";
+ argv[2] = apn_info;
+ atci_data_req_t req;
+ req.request_id = RIL_REQUEST_MODIFY_APN;
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ argv[0] = reqStr;
+ argc = 3;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ }
+ else if (state == 3)
+ {
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &mcc))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &mnc))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apn))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &apntype))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &user))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &password))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &normalprotocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &roamingprotocol))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&cmd, &carrier))
+ {
+ ATCIResponseNoToken(100,NULL,RIL_REQUEST_MODIFY_APN);
+ return SYS_FAIL;
+ }
+ insert_apn_char(apn_info, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
+ argv[1] = "3";
+ argv[2] = apn_info;
+ atci_data_req_t req;
+ req.request_id = RIL_REQUEST_MODIFY_APN;
+ char reqStr[RIL_REQUEST_STRING_LENGTH] = {0};
+ memcpy(reqStr, request2RILStr(req.request_id),strlen(request2RILStr(req.request_id)) + 1);
+ RLOGD("request is %s", reqStr);
+ argv[0] = reqStr;
+ argc = 3;
+ sendAtciRequest(req.request_id, reqStr, argc, argv);
+ }
+ else
+ {
+ RLOGD("function %s line %d unknow command", __FUNCTION__, __LINE__);
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+
+ }
+ return SYS_SUCC;
+}
+
+
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.h b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.h
new file mode 100755
index 0000000..09a030f
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_data_cmd.h
@@ -0,0 +1,22 @@
+/**********************************************************************************************
+* @file atci_lynq_data_cmd.h
+* @brief.define lynq data at commands function
+* @details None
+* @author Hong Liu。
+* @date 2022-12-07
+* @version V1.0
+* @copyright Copyright (c) MobileTek
+***********************************************************************************************/
+
+#ifndef __ATCI_LYNQ_DATA_CMD_H__
+#define __ATCI_LYNQ_DATA__CMD_H__
+
+extern int g_flag_apn;
+
+int atci_lynq_data_init(void *arg);
+int atci_data_enable_pdp_hdlr(char *cmd, int op_type, int target, char *response);
+int atci_data_enable_pdp_with_apn_hdlr(char *cmd, int op_mode, int target, char *response);
+int atci_data_modify_apn_hdlr(char *cmd, int op_mode, int target, char *response);
+int atci_switch_card_halr(char *cmd, int op_mode, int target, char *response);
+#endif
+
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.cpp b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.cpp
new file mode 100755
index 0000000..f94947c
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.cpp
@@ -0,0 +1,26 @@
+#include <vendor-ril/telephony/ril.h>
+#include <string.h>
+#include <log/log.h>
+
+#include "ATCI.h"
+#include "atci_util.h"
+#include "atci_at_util.h"
+#include "atci_lynq_generic_cmd.h"
+#include "atci_common.h"
+
+#undef LOG_TAG
+#define LOG_TAG "DEMO_ATCI_GENERIC"
+/*
+atci_cmd_type_t atci_generic_cmd_table[] = {
+//cmd_name target_type handler
+ { "AT+LCSUS", TARGET_TELEPHONY, atci_data_enable_pdp_hdlr }, //AT command to dsds
+ { "AT+SCREEN", TARGET_TELEPHONY, atci_data_enable_pdp_with_apn_hdlr }, //AT command to off/on modem screen
+ { "ATD", TARGET_TELEPHONY, atci_data_modify_apn_hdlr },
+ { NULL, TARGET_UNKNOWN, NULL }
+};
+int atci_lynq_generic_init(void *arg) {
+ int ret;
+ ret = atci_cmd_register(atci_generic_cmd_table);
+ return ret;
+}
+*/
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.h b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.h
new file mode 100755
index 0000000..33882cd
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/atci/atci_lynq_generic_cmd.h
@@ -0,0 +1 @@
+int atci_lynq_generic_init(void *arg);
diff --git a/src/lynq/framework/lynq-ril-service/src/atci/atci_util.cpp b/src/lynq/framework/lynq-ril-service/src/atci/atci_util.cpp
index 656a251..0cc6d9a 100755
--- a/src/lynq/framework/lynq-ril-service/src/atci/atci_util.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/atci/atci_util.cpp
@@ -76,6 +76,14 @@
return "RIL_REQUEST_DIAL_WITH_SIP_URI";
case RIL_REQUEST_SET_IMS_ENABLE:
return "RIL_REQUEST_SET_IMS_ENABLE";
+ case RIL_REQUEST_DEACTIVATE_DATA_CALL:
+ return "RIL_REQUEST_DEACTIVATE_DATA_CALL";
+ case RIL_REQUEST_SETUP_DATA_CALL:
+ return "RIL_REQUEST_SETUP_DATA_CALL";
+ case RIL_REQUEST_MODIFY_APN:
+ return "RIL_REQUEST_MODIFY_APN";
+ case RIL_REQUEST_OPERATOR:
+ return "RIL_REQUEST_OPERATOR";
default:
return "unknown define";
}
diff --git a/src/lynq/framework/lynq-ril-service/src/cc.cpp b/src/lynq/framework/lynq-ril-service/src/cc.cpp
index 2302212..8afb2d3 100755
--- a/src/lynq/framework/lynq-ril-service/src/cc.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/cc.cpp
@@ -47,6 +47,9 @@
/*Warren add for t800 ril servie 2021/12/23 start*/
#include "lynq_interface.h"
#include <binder/Parcel.h>
+#ifdef LED_SUPPORT
+#include "led.h"
+#endif
using android::Parcel;
/*Warren add for t800 ril servie 2021/12/23 end*/
diff --git a/src/lynq/framework/lynq-ril-service/src/common.cpp b/src/lynq/framework/lynq-ril-service/src/common.cpp
index bf45112..59d853d 100755
--- a/src/lynq/framework/lynq-ril-service/src/common.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/common.cpp
@@ -39,7 +39,10 @@
#include "cc.h"
#include "include/lynq_systime.h"
#include <include/lynq_uci.h>
-
+#ifdef LED_SUPPORT
+#include "led.h"
+#endif
+#include "lynq_shm.h"
static pthread_mutex_t s_DataMutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_DataCond = PTHREAD_COND_INITIALIZER;
@@ -83,6 +86,10 @@
static std::int32_t token = 0;
static std::mutex g_mutex;
+
+pthread_mutex_t s_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t s_state_change_cond = PTHREAD_COND_INITIALIZER;
+
/*Warren add for SZZT 2021/11/14 start*
** record data registration
*/
@@ -355,6 +362,32 @@
default_sim_voice = slot_id;
}
+void lynq_send_result_already(void)
+{
+ RLOGD("send_imei_state_change");
+ pthread_mutex_lock(&s_state_change_mutex);
+ pthread_cond_signal(&s_state_change_cond);
+ pthread_mutex_unlock(&s_state_change_mutex);
+}
+
+void lynq_wait_result_comeback(int mtime)
+{
+ RLOGD("wait_call_state");
+ int sec = 0;
+ int usec = 0;
+ struct timeval now;
+ struct timespec timeout;
+ gettimeofday(&now,NULL);
+ sec = mtime/1000;
+ usec = mtime%1000;
+ timeout.tv_sec = now.tv_sec+sec;
+ timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
+ pthread_mutex_lock(&s_state_change_mutex);
+ pthread_cond_timedwait(&s_state_change_cond,&s_state_change_mutex,&timeout);
+ pthread_mutex_unlock(&s_state_change_mutex);
+ RLOGD("wait_call_state end");
+}
+
int get_default_sim_voice(){
return default_sim_voice;
}
@@ -531,6 +564,9 @@
} else {
RLOGD("[slot%d]updateCardStatusV6: sim card message is null", slot);
}
+#ifdef LED_SUPPORT
+ mbtk_netled_state_update(GPIO_NETLED_REFLASH_NORMAL);
+#endif
}
char* getAid(int slot)
@@ -557,6 +593,9 @@
reg_voice_service_state[slot] = atoi(code);
regCodeToServiceState(request, atoi(code), slot);
}
+#ifdef LED_SUPPORT
+ mbtk_netled_state_update(GPIO_NETLED_REFLASH_NORMAL);
+#endif
}
void update_reg_voice_radio_tech(int request, int code, int slot, int32_t token) {
@@ -895,7 +934,7 @@
return ;
stime(&t);
-
+ system("hwclock -w -f /dev/rtc0");
return;
}
void notifyDataSignal() {
@@ -970,6 +1009,40 @@
return -1;
}
}
+
+void lynq_exit()
+{
+ ril_deinit_mem();
+ mbtk_netled_deinit();
+}
+
+#ifdef LED_SUPPORT
+bool ril_get_if_insert_simcard()
+{
+ int slot_id=get_default_sim_voice();
+
+ if(slot_id==0 || slot_id ==1)
+ {
+ if(cur_CardS_Status[slot_id]!=NULL)
+ {
+ return cur_CardS_Status[slot_id]->card_state == RIL_CARDSTATE_PRESENT;
+ }
+
+ }
+ return false;
+}
+
+bool ril_get_if_3gpp_reg_success()
+{
+ int slot_id=get_default_sim_voice();
+
+ if(slot_id==0 || slot_id ==1)
+ {
+ return reg_voice_service_state[slot_id] ==1;
+ }
+ return false;
+}
+#endif
/*hq add for key info output 2022/03/01 begin*/
// void lynq_output_LINFO_all()
// {
diff --git a/src/lynq/framework/lynq-ril-service/src/common.h b/src/lynq/framework/lynq-ril-service/src/common.h
index aa9d89c..58aef69 100755
--- a/src/lynq/framework/lynq-ril-service/src/common.h
+++ b/src/lynq/framework/lynq-ril-service/src/common.h
@@ -171,6 +171,9 @@
*/
void lynq_output_info(const char* format,...);
+void lynq_send_result_already(void);
+void lynq_wait_result_comeback(int mtime);
+
void updateCardStatusV6(RIL_CardStatus_v6 *card_status,int slot);
char* getAid(int slot);
@@ -200,6 +203,15 @@
const char *radioStateToString(RIL_RadioState);
const char * rilSocketIdToString(RIL_SOCKET_ID socket_id);
+#ifdef LED_SUPPORT
+/*for led add by hq 20221202*/
+bool ril_get_if_insert_simcard();
+bool ril_get_if_3gpp_reg_success();
+#endif
+
+/*for urc broad cast optimission by hq 20221216*/
+void lynq_exit();
+
#if EM_MODE_SUPPORT
typedef void (* netwokInfoNotify)(int type, char *data);
typedef void (*atCmdResponse)(char *response,int responselen);
@@ -270,7 +282,7 @@
int lynqAssemblyParcelheader(Parcel &p,int slot,int utoken,int request,int respType,int error);
int LYNQ_RIL_respSocket(Parcel &p,RIL_Token t);
int LYNQ_RIL_respSocket_sp(Parcel &p,RequestInfo *pRI);
- int LYNQ_RIL_urcBroadcast(Parcel &p);
+ int LYNQ_RIL_urcBroadcast(Parcel &p,int urc_id=0);
/*Warren add for t800 ril service 2021/12/23 end*/
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data.cpp b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
index 9a06968..8d81825 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
@@ -805,7 +805,7 @@
writeStringToParcel(urc_p, apn_table[i].apn);
writeStringToParcel(urc_p, apn_table[i].apntype);
writeStringToParcel(urc_p, apn_table[i].ifaceName);
- android::LYNQ_RIL_urcBroadcast(urc_p);
+ android::LYNQ_RIL_urcBroadcast(urc_p,LYNQ_URC_DATA_CALL_STATUS_IND);
RLOGD("apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
return -1;
}
@@ -843,7 +843,7 @@
writeStringToParcel(urc_p, apn_table[i].apn);
writeStringToParcel(urc_p, apn_table[i].apntype);
writeStringToParcel(urc_p, apn_table[i].ifaceName);
- android::LYNQ_RIL_urcBroadcast(urc_p);
+ android::LYNQ_RIL_urcBroadcast(urc_p,LYNQ_URC_DATA_CALL_STATUS_IND);
RLOGD("apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
return -1;
}
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
index 03b43dd..10f9c84 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -48,6 +48,11 @@
#include "lynq_common.h"
#include "lynq_interface.h"
#include <binder/Parcel.h>
+#include "ATCI.h"
+#include "atci_lynq_data_cmd.h"
+#ifdef LED_SUPPORT
+#include "led.h"
+#endif
using android::Parcel;
/*Warren add for t800 ril service 2021/12/25 end*/
@@ -78,7 +83,7 @@
p.writeInt32(lynq_request_id);
p.writeInt32(0);
writeStringToParcel(p,reason);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,lynq_request_id);
return 0;
}
@@ -86,18 +91,7 @@
/*Warren add for t103 szzt atsvc 2022/1/5 start*/
/*lei modify on 2022/11/16*/
-int lynqUpdateApnStatus(char *apn,char *apntype,int pdnState,char *ifname, char *addresses)//jb.qi add for IP address on20221025
-{
- if(pdnState==PDN_CONNECTED)
- {
- lynq_output_info("+LAPNST:%s,%s,%d,%s,%s\n",apn,apntype,pdnState,ifname,addresses);
- }
- else
- {
- lynq_output_info("+LAPNST:%s,%s,%d\n",apn,apntype,pdnState);
- }
- return 0;
-}
+
/*lei modify on 2022/11/16*/
/*Warren add for t103 szzt atsvc 2022/1/5 end*/
@@ -121,7 +115,7 @@
for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)
{
#if DEBUG
- lynq_output_info("line %d [PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",__LINE__, i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
+ printf("line %d [PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",__LINE__, i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
#endif
RLOGD("[PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
if((strcmp(apn_table[i].apntype,urc_response->apnType)==0)&&(apn_table[i].apnstatus==0))
@@ -132,14 +126,19 @@
apn_table[i].netId = 0;
apn_table[i].pdpstate = PDN_DISCONNECTED;
apn_count--;
- lynq_output_info("\nOK\n");
p.writeInt32 (1);
p.writeInt32 (LYNQ_URC_DATA_CALL_STATUS_IND);
p.writeInt32 (0);//temporary plan
p.writeInt32(PDN_DISCONNECTED);
writeStringToParcel(p,urc_response->apnType);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
RLOGD("removed apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
+#ifdef LED_SUPPORT
+ if(apn_count==0)
+ {
+ mbtk_netled_state_update(GPIO_NETLED_PPP_CLOSED);
+ }
+#endif
break;
}
}
@@ -164,14 +163,13 @@
memcpy(apn_table[apn_count].address,urc_response->addresses,strlen(urc_response->addresses)+1);
apn_table[apn_count].pdpstate = urc_response->pdnState;
#if DEBUG
- lynq_output_info("line %d apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",__LINE__,apn_count,apn_table[apn_count].apn,apn_table[apn_count].apntype,urc_response->apnName,urc_response->apnType);
+ printf("line %d apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",__LINE__,apn_count,apn_table[apn_count].apn,apn_table[apn_count].apntype,urc_response->apnName,urc_response->apnType);
#endif
RLOGD("apn_table[%d].apn:%s,apntype:%s,,,urc_response->apnName:%s,urc_response->apntype:%s\n",apn_count,apn_table[apn_count].apn,apn_table[apn_count].apntype,urc_response->apnName,urc_response->apnType);
apn_table[apn_count].apnstatus=1;
apn_table[apn_count].used=1;
apn_table[apn_count].netId=urc_response->netId;
apn_count++;
- lynqUpdateApnStatus(urc_response->apnName,urc_response->apnType,urc_response->pdnState,urc_response->ifname,urc_response->addresses);//jb.qi add for IP address on20221025
p.writeInt32(1);
p.writeInt32(LYNQ_URC_DATA_CALL_STATUS_IND);
p.writeInt32(0);//temporary plan
@@ -179,33 +177,35 @@
writeStringToParcel(p,urc_response->apnName);
writeStringToParcel(p,urc_response->apnType);
writeStringToParcel(p,urc_response->ifname);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
+#ifdef LED_SUPPORT
+ mbtk_netled_state_update(GPIO_NETLED_PPP_CONNECT);
+#endif
}
else
{
for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)//means apn state changed,need update
{
#if DEBUG
- lynq_output_info("line %d for apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",__LINE__,i,apn_table[i].apn,urc_response->apnName);
+ printf("line %d for apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",__LINE__,i,apn_table[i].apn,urc_response->apnName);
#endif
RLOGD("for apn_table[%d].apn:%s,,,,urc_response->apnName:%s\n",i,apn_table[i].apn,urc_response->apnName);
if(strcmp(apn_table[i].apn,urc_response->apnName)==0)
{
#if DEBUG
- lynq_output_info("line %d This apn has been created update???!!!\n",__LINE__);
+ printf("line %d This apn has been created update???!!!\n",__LINE__);
#endif
RLOGD("This apn has been created!!!");
apnHasCreated = TRUE;
if(apn_table[i].netId!=urc_response->netId)
{
#if DEBUG
- lynq_output_info("update???\n");
+ printf("update???\n");
#endif
apn_table[i].netId = urc_response->netId;
apn_table[i].pdpstate = urc_response->pdnState;
memcpy(apn_table[i].ifaceName,urc_response->ifname,strlen(urc_response->ifname)+1);
memcpy(apn_table[i].address,urc_response->addresses,strlen(urc_response->addresses)+1);
- lynqUpdateApnStatus(urc_response->apnName,urc_response->apnType,urc_response->pdnState,urc_response->ifname,urc_response->addresses);//jb.qi add for IP address on20221025
memcpy(iface_t,apn_table[i].ifaceName,strlen(apn_table[i].ifaceName)+1);
memcpy(apnType_t,apn_table[i].apntype,strlen(apn_table[i].apntype)+1);
memcpy(apn_t,apn_table[i].apn,strlen(apn_table[i].apn)+1);
@@ -219,7 +219,7 @@
writeStringToParcel(p,apn_t);
writeStringToParcel(p,apnType_t);
writeStringToParcel(p,iface_t);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
}
break;
}
@@ -239,7 +239,7 @@
if(getLable)
{
#if DEBUG
- lynq_output_info("line %d Multiple APNs are established\n", __LINE__);
+ printf("line %d Multiple APNs are established\n", __LINE__);
#endif
RLOGD("[getLable]:label==%d\n",lable);
memcpy(apn_table[lable].apn,urc_response->apnName,strlen(urc_response->apnName)+1);
@@ -252,7 +252,6 @@
apn_table[lable].used=1;
apn_table[lable].netId=urc_response->netId;
apn_count++;
- lynqUpdateApnStatus(urc_response->apnName,urc_response->apnType,urc_response->pdnState,urc_response->ifname,urc_response->addresses);//jb.qi add for IP address on20221025
p.writeInt32(1);
p.writeInt32(LYNQ_URC_DATA_CALL_STATUS_IND);
p.writeInt32(0);//temporary plan
@@ -260,7 +259,7 @@
writeStringToParcel(p,urc_response->apnName);
writeStringToParcel(p,urc_response->apnType);
writeStringToParcel(p,urc_response->ifname);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
}
else
{
@@ -280,7 +279,7 @@
for(i;i < LYNQ_APN_CHANNEL_MAX;i++)
{
#if DEBUG
- lynq_output_info("line %d don't know\n", __LINE__);
+ printf("line %d don't know\n", __LINE__);
#endif
RLOGD("[cid<0]apn_table[%d].apntype:%s,,,,urc_response->apntype:%s\n",i,apn_table[i].apntype,urc_response->apnType);
if(strcmp(apn_table[i].apntype,urc_response->apnType)==0)
@@ -293,7 +292,7 @@
if(apnHasCreated)
{
#if DEBUG
- lynq_output_info("line %d don't know\n", __LINE__);
+ printf("line %d don't know\n", __LINE__);
#endif
apn_table[i].pdpstate = urc_response->pdnState;
char ptr[1] = "";
@@ -305,7 +304,6 @@
{
memcpy(apn_table[i].address, ptr, strlen(ptr)+1);
}
- lynqUpdateApnStatus(apn_table[i].apn,apn_table[i].apntype,urc_response->pdnState,NULL,NULL);//jb.qi add for IP address on20221025
memcpy(iface_t,apn_table[i].ifaceName,strlen(apn_table[i].ifaceName)+1);
memcpy(apnType_t,apn_table[i].apntype,strlen(apn_table[i].apntype)+1);
memcpy(apn_t,apn_table[i].apn,strlen(apn_table[i].apn)+1);
@@ -316,7 +314,7 @@
writeStringToParcel(p,apn_t);
writeStringToParcel(p,apnType_t);
writeStringToParcel(p,iface_t);
- android::LYNQ_RIL_urcBroadcast(p);
+ android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
}
}
}
@@ -438,9 +436,14 @@
RLOGD("modifyApnDB_method_cb reason %s", ((reason == NULL)? "":reason));
printf("modify apn db success, return message: %s\n", ((reason == NULL)? "":reason));
//printf("modifyApnDB_method_cb reason %s\n", ((reason == NULL)? "":reason));
- /*lei add for at+lmdapn*/
- lynq_output_info("+LEAPNMOD:%s\n", ((reason == NULL)? "":reason));
- /*lei add for at+lmdapn*/
+ /*lei add for AT+LEAPNMOD*/
+ if(g_flag_apn)
+ {
+ char apn_buf[256];
+ sprintf(apn_buf, "+LEAPNMOD:%s", ((reason == NULL)? "":reason));
+ ATCIResponseNoToken(0, apn_buf, 666);//tmp plan
+ }
+ /*lei add for AT+LEAPNMOD*/
g_variant_unref(result);
lynq_data_modify_apn(reason,LYNQ_URC_MODIFY_APNDB);
}
diff --git a/src/lynq/framework/lynq-ril-service/src/ecall/eCall.cpp b/src/lynq/framework/lynq-ril-service/src/ecall/eCall.cpp
index 7c2b400..5d1ea71 100755
--- a/src/lynq/framework/lynq-ril-service/src/ecall/eCall.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ecall/eCall.cpp
@@ -864,7 +864,7 @@
free(pRI);
return 0;
}
- else if(enable <=-100){
+ else if(-200 < enable && enable<=-100){
g_reset_timer=-enable-100;
android::lynqAssemblyParcelheader(p,socket_id,pRI->uToken,RIL_REQUEST_ECALL_SET_IVS,0,0);
android::LYNQ_RIL_respSocket_sp(p,pRI);
diff --git a/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.cpp b/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.cpp
deleted file mode 100755
index d97a0ce..0000000
--- a/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-/*=============================================================================
-** 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>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#include <log/log.h>
-#include "lynq_fota.h"
-#include "ftp/lynq_ftp.h"
-#include "mtk_device_wrap.h"
-#include "include/iot_rock.h"
-
-static lynq_ftp_socker_info ftp_atfota_info;
-
-#define UPDATA_ADDR "/tmp/fota.delta"
-#define READ_BLOCK_SIZE 0x40000
-
-int lynq_fota_md5_flag = -1;
-
-#define FLASH_DEV_DELTA "/dev/mtd41"
-#define EMMC_DEV_DELTA "/media/fota.delta"
-
-void lynq_response_ttyGS3(char *log_buf)
-{
- if((ttyGS3_fd > 0) && (NULL != log_buf))
- {
- if(-1 == write(ttyGS3_fd,log_buf,strlen(log_buf)))
- {
- printf("write ttyGS3_fd fail \n");
- }
- }
- return ;
-}
-
-/**
- * @brief get fota patch
- *
- * @param string:ftp log message,Refer to the fota documentation
- */
-int lynq_ftp_download_atfota_package(char *string[])
-{
- int ret = 0;
-
- for(int i = 0; i < 9; i++)
- {
- if(string[i] == NULL)
- {
- lynq_response_ttyGS3("+LYNQFOTA: Download Data NULL\n");
- return 1;
- }
- }
-
- sprintf(ftp_atfota_info.sevname,"%s",string[0]);
-
- ftp_atfota_info.portnum = atoi(string[1]);
-
- sprintf(ftp_atfota_info.username,"%s",string[2]);
- sprintf(ftp_atfota_info.pw,"%s",string[3]);
-
-
- sprintf(ftp_atfota_info.is_pasv_mode,"%s",string[4]);
- sprintf(ftp_atfota_info.file_type,"%s",string[5]);
- sprintf(ftp_atfota_info.put_opt,"%s",string[6]);
-
- sprintf(ftp_atfota_info.getfilename_path,"%s",string[7]);
- sprintf(ftp_atfota_info.getfilename,"%s",string[8]);
- chdir("/tmp/");
- if(1 == lynq_ftp_login(&ftp_atfota_info))
- {
- if(0 == lynq_ftp_download(&ftp_atfota_info))
- {
- lynq_response_ttyGS3("+LYNQFOTA: GET FOTA FILE OK\n");
- ret = 0;
- }
- else
- {
- lynq_response_ttyGS3("+CME: GET FOTA FILE FAIL\n");
- ret = 1;
- }
- }
- else
- {
- lynq_response_ttyGS3("+CME: FOTA LOGIN FAIL\n");
- ret = 1;
- }
- return ret;
-}
-
-/**
- * @brief Differential subcontracting MD5 check
- *
- * @param string:MD5 value,Subcontracting address,Refer to the fota documentation
- */
-int lynq_md5_atfota_package(char *string[])
-{
- int fd_down,size,fd_target;
- char delta_data[READ_BLOCK_SIZE];
- char input_md5_data[64] = {0};
- char buf_buf[128] = {0};
-
- for(int i = 0; i < 2; i++)
- {
- if(string[i] == NULL)
- {
- lynq_response_ttyGS3("+LYNQFOTA: Md5 Value NULL\n");
- return 1;
- }
- }
-
- sprintf(input_md5_data,"%s",string[0]);
- lynq_fota_md5_flag = lynq_md5_file_verfy(UPDATA_ADDR, input_md5_data);
- if(lynq_fota_md5_flag == 0)
- {
- lynq_response_ttyGS3("+LYNQFOTA: MD5 OK\n");
- }
- else
- {
- lynq_response_ttyGS3("+LYNQFOTA: MD5 FAIL\n");
- return 1;
- }
-
- if((atoi(string[1])) == 0)
- {
- fd_down = open(UPDATA_ADDR,O_RDONLY);
- if (fd_down < 0) {
- lynq_response_ttyGS3("+LYNQFOTA: open source error\n");
- lynq_fota_md5_flag = -1;
- return 1;
- }
- if(lynq_fota_set_addr_value(FLASH_DEV_DELTA,strlen(FLASH_DEV_DELTA)))
- {
- lynq_response_ttyGS3("+LYNQFOTA: SET FOTA NAND ADDR FAIL\n");
- close(fd_down);
- lynq_fota_md5_flag = -1;
- return 1;
- }
- fd_target = open(FLASH_DEV_DELTA,O_RDWR);
- if (fd_target < 0) {
- close(fd_down);
- lynq_response_ttyGS3("+LYNQFOTA: open target error\n");
- lynq_fota_md5_flag = -1;
- return 1;
- }
-
- while(( size = read(fd_down,delta_data,READ_BLOCK_SIZE))>0) {
- write(fd_target,delta_data,READ_BLOCK_SIZE);
- memset(delta_data,0,READ_BLOCK_SIZE);
- }
- close(fd_target);
- close(fd_down);
- }
- else if((atoi(string[1])) == 1)
- {
- if(lynq_fota_set_addr_value(EMMC_DEV_DELTA,strlen(EMMC_DEV_DELTA)))
- {
- lynq_response_ttyGS3("+LYNQFOTA: SET FOTA EMMC ADDR FAIL\n");
- lynq_fota_md5_flag = -1;
- return 1;
- }
- system("cp -rf /tmp/fota.delta /media/");
- }
- else
- {
- lynq_response_ttyGS3("+LYNQFOTA: NO SET FOTA ADDR ERROR\n");
- lynq_fota_md5_flag = -1;
- return 1;
- }
-
- lynq_response_ttyGS3("+LYNQFOTA: Saving the upgrade Package Success\n");
-// lynq_response_ttyGS3("Store upgrade data to delta success\n");
-
- return 0;
-}
-
-/**
- * @brief fota
- *
- * @param void
- */
-int lynq_atfota_func_test(void)
-{
- if(lynq_fota_md5_flag == 0) //upgrade success ,device reboot ,lynq_fota_md5_flag no need to reset
- {
- lynq_response_ttyGS3("+LYNQFOTA: Recive upgrade Command OK\n");
- if(0 != lynq_rock_main(1))
- {
- lynq_response_ttyGS3("+LYNQFOTA: Upgrade Fail\n");
- lynq_fota_md5_flag = -1;
- }
- }
- else
- {
- lynq_response_ttyGS3("+LYNQFOTA: MD5 verify fail\n");
- return 1;
- }
- return 0;
-}
-
-void lynq_atfota_test(char *argv[])
-{
- if((argv[0] == NULL) || (argv[1] == NULL) || (argv[2] == NULL)|| (argv[3] == NULL))
- {
- printf("argv NULL\n");
- return ;
- }
- if(!strcmp(argv[3], "download"))
- {
- if(!(strcmp(argv[4], "ftp")))
- {
- if(lynq_ftp_download_atfota_package(&argv[5]))
- {
- printf("lynq_ftp_download_atfota_package fail\n");
- }
- }
- else
- {
- lynq_response_ttyGS3("+LYNQFOTA: No FTP Download\n");
- }
- }
- else if(!(strcmp(argv[3], "md5")))
- {
- if(lynq_md5_atfota_package(&argv[4]))
- {
- printf("lynq_md5_atfota_package fail\n");
- }
- }
- else if(!(strcmp(argv[3], "upgrade")))
- {
- if(lynq_atfota_func_test())
- {
- printf("lynq_atfota_func_test fail\n");
- }
- }
- else
- {
- lynq_response_ttyGS3("+LYNQFOTA: fota api error!!!\n");
- }
- return ;
-}
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.h b/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.h
deleted file mode 100755
index 33e5a03..0000000
--- a/src/lynq/framework/lynq-ril-service/src/fota/lynq_fota.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef __LYNQ_FOTA_H__
-#define __LYNQ_FOTA_H__
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define LYNQ_E_FTP_LOGIN_FAIL 9002 /*Ftp login fail*/
-#define LYNQ_E_FTP_SEND_FAIL 9003 /*Ftp send log fail*/
-#define LYNQ_E_GET_LOG_FAIL 9004 /*Get log fail*/
-#define LYNQ_E_LOG_CMD_ERROR 9005 /*cmd error*/
-
-void lynq_atfota_test(char *argv[]);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //__LYNQ_LOGSEND_TEST_H__
diff --git a/src/lynq/framework/lynq-ril-service/src/led/include/led.h b/src/lynq/framework/lynq-ril-service/src/led/include/led.h
new file mode 100755
index 0000000..d8d6508
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/led/include/led.h
@@ -0,0 +1,44 @@
+/**
+ * @file led.h
+ * @author hq
+ * @brief
+ * @version 1.0
+ * @date 2022-11-28
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+#ifdef LED_SUPPORT
+#ifndef LED_H
+#define LED_H 1
+
+#define wait_led_update_effective_timer_ms 20
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ GPIO_NETLED_REFLASH_NORMAL,
+ GPIO_NETLED_CS_CALLING,
+ GPIO_NETLED_CS_CALLEND,
+ GPIO_NETLED_PPP_CONNECT,
+ GPIO_NETLED_PPP_CLOSED,
+ GPIO_NETLED_AP_GOINGSLEEP,
+ GPIO_NETLED_AP_WAKEUP,
+ GPIO_NETLED_WWAN_CONNECT,
+ GPIO_NETLED_WWAN_CLOSED,
+} mbtk_netled_reflash_type;
+
+void mbtk_netled_state_update(mbtk_netled_reflash_type flag);
+
+void mbtk_netled_init();
+
+void mbtk_netled_deinit();
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/led/led.cpp b/src/lynq/framework/lynq-ril-service/src/led/led.cpp
new file mode 100755
index 0000000..62e4b11
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/led/led.cpp
@@ -0,0 +1,577 @@
+#ifdef LED_SUPPORT
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <binder/Parcel.h>
+#include <sys/socket.h>
+#include <errno.h>
+#include <unistd.h>
+#include <cutils/jstring.h>
+#include <sys/types.h>
+#include <time.h>
+#include <signal.h>
+#include "led.h"
+#include "led_inner.h"
+#include <liblog/lynq_deflog.h>
+#include "common.h"
+
+#undef LOG_TAG
+#define LOG_TAG "LED"
+
+
+/*************************************************************
+ Constants and Macros
+*************************************************************/
+#define GPIO_NETLED_CONNECT_REFLASH_TIMER 200
+#define GPIO_NETLED_CREG_REFLASH_TIMER 800
+#define MBTK_GPIO_NETLED_N 77
+
+/*************************************************************
+ Extern Function Declaration
+*************************************************************/
+void mbtk_netled_reflash_handle();
+
+/*************************************************************
+ Variables:local,extern
+*************************************************************/
+//static rex_timer_type mbtk_gpio_netled_timer;
+static mbtk_netled_state_t mbtk_netled_state;
+/*************************************************************
+ Definitions:enum,struct,union
+*************************************************************/
+
+/*=============================================
+FUNCTION
+ mbtk_get_netled_state
+
+DESCRIPTION
+ This function to return pointer of mbtk_netled_state.
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ None
+
+RETURN VALUE
+ &mbtk_netled_state
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+mbtk_netled_state_t * mbtk_get_netled_state()
+{
+ return &mbtk_netled_state;
+}
+
+/*=============================================
+FUNCTION
+ mbtk_init_netled_state
+
+DESCRIPTION
+ This function to init mbtk_netled_state.
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ None
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+void mbtk_init_netled_state()
+{
+ mbtk_netled_state_t * netled_state = NULL;
+ netled_state = mbtk_get_netled_state();
+
+ netled_state->gpio_netled_cs_flag = false;
+ netled_state->gpio_netled_goingsleep_flag = false;
+ netled_state->gpio_netled_ppp_flag = false;
+ netled_state->gpio_netled_wwan_flag = false;
+
+}
+
+static timer_t s_mbtk_gpio_netled_timer;
+
+static int s_mbtk_gpio_netled_timer_sig_value = 11; /* 2,3,4 are used by network */
+
+void start_led_timer(timer_t timer, int signal_value, int milliseconds)
+{
+ RLOGD("start_led_timer(), timer_id=%ld, signal_value=%d, time=%d",(long)timer, signal_value, milliseconds);
+
+ struct itimerspec expire;
+ expire.it_interval.tv_sec = 0;
+ expire.it_interval.tv_nsec = 0;
+ expire.it_value.tv_sec = milliseconds/1000;
+ expire.it_value.tv_nsec = (milliseconds%1000)*1000000;
+ if (timer_settime(timer, 0, &expire, NULL) == -1) {
+ RLOGE("timer_settime failed reason=[%s]", strerror(errno));
+ }
+
+}
+
+void stop_led_timer(timer_t timer, int signal_value) {
+ RLOGD("stop_led_timer(), timer_id=%ld, signal_value=%d", (long)timer, signal_value);
+ struct itimerspec timespec;
+ if(timer_gettime(timer, ×pec) == -1) {
+ RLOGE("stop_led_timer(), get time fail(%s)", strerror(errno));
+ return;
+ }
+ RLOGD("stop_led_timer(), tv_sec=%ld, tv_nsec=%ld",timespec.it_value.tv_sec, timespec.it_value.tv_nsec);
+ if((timespec.it_value.tv_sec == 0) && (timespec.it_value.tv_nsec == 0) ) {
+ RLOGD("stop_led_timer(), timer_id(%ld) had stopped, just return", (long)timer);
+ return;
+ } else {
+ start_led_timer(timer, signal_value, 0);
+ }
+}
+
+static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
+void led_timer_handler(sigval_t sig)
+{
+ RLOGD("led_timer_handler, sig_value: %d", sig.sival_int);
+ int s;
+ s = pthread_mutex_lock(&mtx);
+ if(s != 0) {
+ RLOGE("led_timer_handler, pthead_mutex_lock fail");
+ }
+ if(sig.sival_int == s_mbtk_gpio_netled_timer_sig_value)
+ {
+ mbtk_netled_reflash_handle();
+ }
+ s = pthread_mutex_unlock(&mtx);
+ if(s != 0) {
+ RLOGE("led_timer_handler, pthead_mutex_unlock fail");
+ }
+}
+
+void init_led_timer(timer_t* timer, int signal_value)
+{
+ struct sigevent sevp;
+ memset(&sevp, 0, sizeof(sevp));
+ sevp.sigev_value.sival_int = signal_value;
+ sevp.sigev_notify = SIGEV_THREAD;
+ sevp.sigev_notify_function = led_timer_handler;
+
+ if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {
+ RLOGE("init_led_timer() failed reason=[%s]", strerror(errno));
+ }
+ RLOGD("init_led_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);
+}
+
+void init_led_timer_all()
+{
+ init_led_timer(&s_mbtk_gpio_netled_timer,s_mbtk_gpio_netled_timer_sig_value);
+}
+
+void deinit_led_timer_all()
+{
+ stop_led_timer(s_mbtk_gpio_netled_timer,s_mbtk_gpio_netled_timer_sig_value);
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_init
+
+DESCRIPTION
+ This function to init timer
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+void mbtk_netled_init()
+{
+ mbtk_init_netled_state();
+ init_led_timer_all();
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_deinit
+
+DESCRIPTION
+ This function to init timer
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+void mbtk_netled_deinit()
+{
+ deinit_led_timer_all();
+}
+
+
+/*=============================================
+FUNCTION
+ mbtk_get_at_netled_cmd
+
+DESCRIPTION
+ This function to return netled switch value.
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ None
+
+RETURN VALUE
+ int
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+int mbtk_get_at_netled_cmd(void)
+{
+ return 1;
+// return (int) dsatutil_get_val(MBTK_AT_GPIO_CGNETLED_IDX,0,0,NUM_TYPE);
+}
+
+/*=============================================
+FUNCTION
+ mbtk_get_reg_net_status
+
+DESCRIPTION
+ This function that determine if net registers successfully.
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ mbtk_netled_reg_net_status
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+mbtk_netled_reg_net_status mbtk_get_reg_net_status(void)
+{
+ mbtk_netled_reg_net_status reg_net_status = NET_REG_FAIL;
+
+ if(false == ril_get_if_insert_simcard())
+ {
+ RLOGE("ril_get_if_insert_simcard false" );
+ reg_net_status = NET_REG_FAIL;
+ return reg_net_status;
+ }
+
+ if(true == ril_get_if_3gpp_reg_success())
+ {
+ RLOGD("ril_get_if_3gpp_reg_success true");
+ reg_net_status = NET_REG_SUCCESS;
+ return reg_net_status;
+ }
+
+ return reg_net_status;
+
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_get_socket_conn_status
+
+DESCRIPTION
+ This function that socket connects successfully.
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ mbtk_netled_socket_conn_status
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+mbtk_netled_socket_conn_status mbtk_netled_get_socket_conn_status(void)
+{
+ mbtk_netled_socket_conn_status socket_conn_status = MBTK_SOCKET_DISCONNECT;
+ mbtk_netled_state_t * netled_state = mbtk_get_netled_state();
+
+ if(netled_state->gpio_netled_ppp_flag || netled_state->gpio_netled_wwan_flag)
+ {
+ RLOGD("GPIO: ppp wwan netled state sockNum %d,%d",
+ netled_state->gpio_netled_ppp_flag, netled_state->gpio_netled_wwan_flag);
+
+ socket_conn_status = MBTK_SOCKET_CONNECTED;
+ return socket_conn_status;
+ }
+
+ return socket_conn_status;
+
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_get_current_state
+
+DESCRIPTION
+ get the netled status .
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ mbtk_netled_status_type
+
+SIDE EFFECTS
+ None
+=============================================*/
+mbtk_netled_status_type mbtk_netled_get_current_state(void)
+{
+ mbtk_netled_reg_net_status reg_net_status = NET_REG_FAIL;
+ mbtk_netled_status_type netled_status_type = GPIO_NETLED_OFF;
+ mbtk_netled_socket_conn_status socket_conn_status = MBTK_SOCKET_DISCONNECT;
+ int mbtk_netled_at_cmd_value = mbtk_get_at_netled_cmd(); // 0 -- close netled / 1 -- open netled
+ mbtk_netled_state_t * netled_state = mbtk_get_netled_state();
+
+ if(mbtk_netled_at_cmd_value == 0 ||
+ netled_state->gpio_netled_goingsleep_flag == true)
+ {
+ netled_status_type = GPIO_NETLED_OFF;
+ return netled_status_type;
+ }
+
+ reg_net_status = mbtk_get_reg_net_status();
+ if( NET_REG_FAIL == reg_net_status || true == netled_state->gpio_netled_cs_flag )
+ {
+ netled_status_type = GPIO_NETLED_LIGHT;
+ }
+ else if( NET_REG_SUCCESS == reg_net_status )
+ {
+ socket_conn_status = mbtk_netled_get_socket_conn_status();
+
+ if( MBTK_SOCKET_CONNECTED == socket_conn_status )
+ {
+ netled_status_type = GPIO_NETLED_CONNECT;
+ }
+ else if( MBTK_SOCKET_DISCONNECT == socket_conn_status )
+ {
+ netled_status_type = GPIO_NETLED_REG;
+ }
+ }
+ return netled_status_type;
+}
+
+
+
+bool is_mbtk_timer_finish() {
+ struct itimerspec timespec;
+ if(timer_gettime(s_mbtk_gpio_netled_timer, ×pec) == -1) {
+ RLOGD("%s(), get time fail(%s)", __FUNCTION__, strerror(errno));
+ return true;
+ }
+ RLOGD("%s(), tv_sec=%ld, tv_nsec=%ld", __FUNCTION__,timespec.it_value.tv_sec, timespec.it_value.tv_nsec);
+ if((timespec.it_value.tv_sec == 0) && (timespec.it_value.tv_nsec == 0) ) {
+ RLOGD("%s(), timer_id(%ld) had stopped", __FUNCTION__, (long)s_mbtk_gpio_netled_timer);
+ return true;
+ }
+ return false;
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_state_update
+
+DESCRIPTION
+ This function to reflash network led status and write gpio value
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param flag
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+void mbtk_netled_state_update(mbtk_netled_reflash_type flag)
+{
+// rex_timer_cnt_type prev_value;
+ mbtk_netled_state_t * netled_state = NULL;
+ netled_state = mbtk_get_netled_state();
+
+ switch (flag)
+ {
+ case GPIO_NETLED_REFLASH_NORMAL:
+ break;
+ case GPIO_NETLED_CS_CALLING:
+ netled_state->gpio_netled_cs_flag = true;
+ break;
+ case GPIO_NETLED_PPP_CONNECT:
+ netled_state->gpio_netled_ppp_flag = true;
+ break;
+ case GPIO_NETLED_PPP_CLOSED:
+ netled_state->gpio_netled_ppp_flag = false;
+ break;
+ case GPIO_NETLED_CS_CALLEND:
+ netled_state->gpio_netled_cs_flag = false;
+ break;
+ case GPIO_NETLED_AP_GOINGSLEEP:
+ netled_state->gpio_netled_goingsleep_flag = true;
+ break;
+ case GPIO_NETLED_AP_WAKEUP:
+ netled_state->gpio_netled_goingsleep_flag = false;
+ break;
+ case GPIO_NETLED_WWAN_CONNECT:
+ netled_state->gpio_netled_wwan_flag = true;
+ break;
+ case GPIO_NETLED_WWAN_CLOSED:
+ netled_state->gpio_netled_wwan_flag = false;
+ break;
+
+ }
+
+ //prev_value = rex_get_timer(&mbtk_gpio_netled_timer);
+// prev_value = timer_get_64(&mbtk_gpio_netled_timer, T_MSEC);
+// if( prev_value == 0)
+ if((flag== GPIO_NETLED_AP_GOINGSLEEP) || is_mbtk_timer_finish())
+ {
+ // MBTK_MSG1_HIGH("GPIO: rex_get_timer prev_value =%d",prev_value);
+ //rex_set_timer(&mbtk_gpio_netled_timer, 1);
+ //timer_set_64(&mbtk_gpio_netled_timer,1,0,T_MSEC);
+ start_led_timer(s_mbtk_gpio_netled_timer, s_mbtk_gpio_netled_timer_sig_value, 1);
+ }
+
+ return ;
+}
+
+/*=============================================
+FUNCTION
+ mbtk_netled_reflash_handle
+
+DESCRIPTION
+ This function to reflash network led status and write gpio value
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+
+void mbtk_gpio_write_output(int gpio_port, int value)
+{
+ if(value==1)
+ {
+ system("echo 255 > /sys/class/leds/led9515:green:cellular-radio/brightness");
+ }
+ else
+ {
+ system("echo 0 > /sys/class/leds/led9515:green:cellular-radio/brightness");
+ }
+}
+
+
+/*=============================================
+FUNCTION
+ mbtk_netled_reflash_handle
+
+DESCRIPTION
+ This function to reflash network led status and write gpio value
+
+DEPENDENCIES
+ None
+
+PARAMETERS
+ param not used
+
+RETURN VALUE
+ None
+
+SIDE EFFECTS
+ None
+=============================================*/
+void mbtk_netled_reflash_handle()
+{
+ mbtk_netled_status_type state = GPIO_NETLED_MAX;
+ state = mbtk_netled_get_current_state();
+ RLOGD("mbtk_netled_get_current_state state = %d",state);
+ static int led_val = 0;
+
+ switch(state)
+ {
+ case GPIO_NETLED_OFF:
+ {
+ if( 0 != led_val )
+ {
+ led_val = 0;
+ mbtk_gpio_write_output(MBTK_GPIO_NETLED_N, 0);
+ }
+ }
+ break;
+ case GPIO_NETLED_REG:
+ {
+ led_val = ( (1 == led_val)? 0:1 );
+ mbtk_gpio_write_output(MBTK_GPIO_NETLED_N, led_val);
+ start_led_timer(s_mbtk_gpio_netled_timer, s_mbtk_gpio_netled_timer_sig_value, GPIO_NETLED_CREG_REFLASH_TIMER);
+
+ // timer_set_64(&mbtk_gpio_netled_timer,GPIO_NETLED_CREG_REFLASH_TIMER,0,T_MSEC);
+ //rex_set_timer(&mbtk_gpio_netled_timer, GPIO_NETLED_CREG_REFLASH_TIMER);
+ }
+ break;
+ case GPIO_NETLED_CONNECT:
+ {
+ led_val = ( (1 == led_val)? 0:1 );
+ mbtk_gpio_write_output(MBTK_GPIO_NETLED_N, led_val);
+ start_led_timer(s_mbtk_gpio_netled_timer, s_mbtk_gpio_netled_timer_sig_value, GPIO_NETLED_CONNECT_REFLASH_TIMER);
+ // timer_set_64(&mbtk_gpio_netled_timer,GPIO_NETLED_CONNECT_REFLASH_TIMER,0,T_MSEC);
+ //rex_set_timer(&mbtk_gpio_netled_timer, GPIO_NETLED_CONNECT_REFLASH_TIMER);
+ }
+ break;
+ case GPIO_NETLED_LIGHT:
+ {
+ if( 1 != led_val )
+ {
+ led_val = 1;
+ mbtk_gpio_write_output(MBTK_GPIO_NETLED_N, 1);
+ }
+ }
+ break;
+ default:
+ RLOGE("GPIO: Unkown netled state !");
+ }
+}
+#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/led/led_inner.h b/src/lynq/framework/lynq-ril-service/src/led/led_inner.h
new file mode 100755
index 0000000..5b0750d
--- /dev/null
+++ b/src/lynq/framework/lynq-ril-service/src/led/led_inner.h
@@ -0,0 +1,61 @@
+/**
+ * @file led_inner.h
+ * @author hq
+ * @brief
+ * @version 1.0
+ * @date 2022-11-28
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+#ifdef LED_SUPPORT
+#ifndef LED_INNER_H
+#define LED_INNER_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*************************************************************
+ Definitions:enum,struct,union,class
+*************************************************************/
+typedef struct {
+ bool gpio_netled_cs_flag;
+ bool gpio_netled_ppp_flag;
+ bool gpio_netled_wwan_flag;
+ bool gpio_netled_goingsleep_flag;
+}mbtk_netled_state_t;
+
+typedef enum
+{
+ GPIO_NETLED_OFF,
+ GPIO_NETLED_REG,
+ GPIO_NETLED_CONNECT,
+ GPIO_NETLED_LIGHT,
+ GPIO_CS_REG,
+ GPIO_NETLED_MAX
+}mbtk_netled_status_type;
+
+typedef enum
+{
+ NET_REG_SUCCESS,
+ NET_REG_FAIL,
+ NET_REG_MAX
+}mbtk_netled_reg_net_status;
+
+typedef enum
+{
+ MBTK_SOCKET_CONNECTED,
+ MBTK_SOCKET_DISCONNECT,
+ MBTK_SOCKET_CONN_MAX
+}mbtk_netled_socket_conn_status;
+
+/*************************************************************
+ Function Declaration
+*************************************************************/
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
index 7b54cc8..418fe86 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.cpp
@@ -33,6 +33,7 @@
extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX] = {};
extern int apn_count = 0;
extern char lynq_at[LYNQ_AT_LEN_MAX]= {};
+char mccmnc[8] = {0};
pthread_cond_t lynq_at_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t lynq_at_mutex= PTHREAD_MUTEX_INITIALIZER;
@@ -502,7 +503,6 @@
new_argv[0] = "RIL_REQUEST_DEACTIVATE_DATA_CALL";
new_argv[1] = argv[4];//apntype
android::lynqSendToRil(2,new_argv,uToken);
- syncRespToUsb(0);
}
}
else if (type == 1)
@@ -519,7 +519,7 @@
int insert_apn_char(char *agc, char *id,char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
{
- char strtmp[10][32];
+ char strtmp[10][64];
if (!strcmp(id,"null"))
{
sprintf(strtmp[0], "id=;");
@@ -530,7 +530,16 @@
}
if (!strcmp(mcc,"null"))
{
- sprintf(strtmp[1], "mcc=;");
+ char mcc[8] = {0};
+ if(strlen(mccmnc))
+ {
+ strncpy(mcc, mccmnc, 3);
+ sprintf(strtmp[1], "mcc=%s;", mcc);
+ }
+ else
+ {
+ sprintf(strtmp[2], "mcc=;");
+ }
}
else
{
@@ -538,7 +547,14 @@
}
if (!strcmp(mnc,"null"))
{
- sprintf(strtmp[2], "mnc=;");
+ if(strlen(mccmnc))
+ {
+ sprintf(strtmp[2], "mnc=%s;", mccmnc+3);
+ }
+ else
+ {
+ sprintf(strtmp[2], "mnc=;");
+ }
}
else
{
@@ -604,6 +620,13 @@
return 0;
}
+void lynq_req_mccmnc(int uToken)
+{
+ char *new_argv[10] = {};
+ new_argv[0] = "RIL_REQUEST_OPERATOR";
+ android::lynqSendToRil(1,new_argv,uToken);//for get mccmnc
+}
+
int lynq_modify_apn_info(int argc,char*argv[],char *rilReq, int uToken)
{
/*
@@ -630,13 +653,14 @@
{
for(int i = 4; i < 14; i++)
{
- printf("argv[%d] %s\n", i,argv[i]);
if(argv[i] == NULL)
{
syncRespToUsb(100);
return -1;
}
}
+ lynq_req_mccmnc(uToken);
+ usleep(500*1000);
insert_apn_char(apn_info, argv[4], argv[5], argv[6], argv[7], argv[8], argv[9], argv[10], argv[11], argv[12], argv[13]);
new_argv[1] = "0";
new_argv[2] = apn_info;
diff --git a/src/lynq/framework/lynq-ril-service/src/lynq_common.h b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
index 483986a..ec1e9e2 100755
--- a/src/lynq/framework/lynq-ril-service/src/lynq_common.h
+++ b/src/lynq/framework/lynq-ril-service/src/lynq_common.h
@@ -98,12 +98,13 @@
extern apn_table_t apn_table[LYNQ_APN_CHANNEL_MAX];
extern int apn_count;
extern char lynq_at[LYNQ_AT_LEN_MAX];
+extern char mccmnc[8];
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 lynq_req_mccmnc(int uToken);
int routeCmd(int request);
int CGMI(int argc,char*argv[],char *rilReq, int uToken);
diff --git a/src/lynq/framework/lynq-ril-service/src/main.cpp b/src/lynq/framework/lynq-ril-service/src/main.cpp
index 50f270f..0b2c2a3 100755
--- a/src/lynq/framework/lynq-ril-service/src/main.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/main.cpp
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <signal.h>
#include "common.h"
+#include "lynq_shm.h"
extern "C" void RIL_register (const RIL_RadioFunctions *callbacks);
@@ -127,7 +128,8 @@
/*lei add for gsw
reason:Socket sending failed at GSW
*/
- signal(SIGHUP, signal_handler);
+ //signal(SIGHUP, signal_handler);
+ atexit (lynq_exit);
system("route add -host 255.255.255.255 dev lo");
int lock_file = open("/tmp/tel_demo_single_proc.lock", O_CREAT|O_RDWR, 0666);
int rc = flock(lock_file,LOCK_EX|LOCK_NB);
@@ -138,6 +140,14 @@
exit(0);
}
}
+
+ if(ril_init_mem()!=0)
+ {
+ printf("Error: cannot ril_init_mem\n");
+ RLOGD("Error: cannot ril_init_mem");
+ exit(0);
+ }
+
#ifdef BASELIB_DIR_LIB64
const char *rilLibPath = "/lib64/libvendor-ril.so";
#else
@@ -153,12 +163,12 @@
dlHandle = dlopen(rilLibPath, RTLD_NOW);
if (dlHandle == NULL) {
- RLOGE("dlopen failed: %s", dlerror());
+ RLOGE("dlopen failed: %s", dlerror());
exit(EXIT_FAILURE);
}
android::RIL_startEventLoop();
- //android::startATCILoop();
+ android::startATCILoop();
//android::startPMLoop();
//android::startWakupLoop();
diff --git a/src/lynq/framework/lynq-ril-service/src/makefile b/src/lynq/framework/lynq-ril-service/src/makefile
index a5c49fa..7eaf082 100755
--- a/src/lynq/framework/lynq-ril-service/src/makefile
+++ b/src/lynq/framework/lynq-ril-service/src/makefile
@@ -33,6 +33,10 @@
LOCAL_CFLAGS += -DMODE_DSSS
endif
+ifeq ($(strip $(MTK_LED_SUPPORT)), yes)
+ LOCAL_CFLAGS += -DLED_SUPPORT
+endif
+
$(warning ################# TARGET_PLATFORM: $(TARGET_PLATFORM))
ifeq ($(strip $(TARGET_PLATFORM)), mt2731)
$(warning ################# TARGET_PLATFORM_MT2731)
@@ -85,8 +89,8 @@
-I$(LOCAL_PATH)/ecall/gost/sslp/teledata \
-I$(LOCAL_PATH)/rndis \
-I$(LOCAL_PATH)/factory \
- -I$(LOCAL_PATH)/fota \
-I$(LOCAL_PATH)/temp \
+ -I$(LOCAL_PATH)/led/include \
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
-I$(ROOT)$(includedir)/liblynq-thermal \
@@ -96,6 +100,7 @@
-I$(ROOT)$(includedir)/vendor-ril \
-I$(ROOT)$(includedir)/gstreamer-1.0 \
-I$(ROOT)$(includedir)/glib-2.0 \
+ -I$(ROOT)$(includedir)/lynq_shm \
-I$(ROOT)$(libdir)/glib-2.0/include \
-I$(ROOT)$(libdir)/gstreamer-1.0/include\
-I$(ROOT)$(includedir)/dbus-1.0 \
@@ -133,8 +138,8 @@
-llynq-thermal \
-llynq-systime \
-llynq-uci \
- -llynq-fota \
-llynq-protcl \
+ -llynq-shm \
ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
LOCAL_LIBS += -luciwrapper
@@ -143,7 +148,7 @@
endif
-SOURCES = $(wildcard util/*.cpp *.cpp ecall/*.cpp ecall/gost/*.cpp ecall/gost/utils/*.cpp ecall/gost/sslp/*.cpp ecall/gost/sslp/auth/*.cpp ecall/gost/sslp/firmware/*.cpp ecall/gost/sslp/commands/*.cpp ecall/gost/sslp/ecall/*.cpp ecall/gost/sslp/teledata/*.cpp data/*.cpp em/rfdesense/*.cpp em/networkinfo/*.cpp em/*.cpp sms/*.cpp sms/gsm/*.cpp sms/cdma/*.cpp atci/*.cpp stateManager/*.cpp sms/lynqSmsManager/*.cpp rndis/*.cpp factory/*.cpp temp/*.cpp fota/*.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 temp/*.cpp led/*.cpp)
EXECUTABLE = lynq-ril-service
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index 386fd13..d0156ca 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -88,9 +88,12 @@
#include "lynq_at_temp.h"
/*rita add end*/
/*lt add start*/
-#include "lynq_fota.h"
/*lt add end*/
/*Warren add for t800 RIL service 2021_12_10 end*/
+#ifdef LED_SUPPORT
+#include "led.h"
+#endif
+#include "lynq_shm.h"
#define LOG_TAG "DEMO_RIL"
#define WAIT_TIME_FOR_SIM_SWITCH 30
@@ -171,6 +174,11 @@
//int LYNQ_RIL_respSocket(Parcel &p,RIL_Token t);
//int LYNQ_RIL_urcBroadcast(Parcel &p);
+/*hq add for urc broadcast opti 2023/01/06 */
+#define SHM_BUFFER_INDEX_OFFSET 1
+#define SHM_BUFFER_SIZE_OFFSET 16
+#define urc_broadcase_shm_size_limit 20
+
int lynq_urc_socket_fd = 0;
struct sockaddr_in urc_broadcast_addr;
/*Warren add for t800 RIL service 2021_12_10 end*/
@@ -3937,6 +3945,90 @@
return strndup16to8(s16, stringlen);
}
+static void lynq_get_mccmnc(Parcel &p, char *mccmnc)
+{
+ p.setDataPosition(0);
+ if(p.dataAvail() > 0)
+ {
+ int resp_type;
+ int token;
+ int request;
+ int slot_id;
+ int error1;
+ int num;
+ char *resp[128];
+ p.readInt32(&resp_type);
+ p.readInt32(&token);
+ p.readInt32(&request);
+ p.readInt32(&slot_id);
+ p.readInt32(&error1);
+ if(!error1)
+ {
+ p.readInt32(&num);
+ if(num == 0 || num > 128)
+ {
+ LYERRLOG("no paramters or num %d too great",num);
+ }
+ else
+ {
+ int i;
+ for(i = 0; i<num;i++)
+ {
+ resp[i] = lynqStrdupReadString(p);
+ }
+ if(NULL != resp[2])
+ {
+ strcpy(mccmnc,resp[2]);
+ printf("mcc mnc %s\n", mccmnc);
+ }
+ for(i = 0; i<num;i++)
+ {
+ if(resp[i]!=NULL)
+ {
+ free(resp[i]);
+ }
+ }
+ }
+ }
+ else
+ {
+ LYERRLOG("lynq_get_mccmnc error");
+ }
+ }
+}
+
+static void lynq_sdk_ready(Parcel &p)
+{
+ int resp_type;
+ int token;
+ int request;
+ int slot_id;
+ int error1;
+ int num;
+ char imei[32] = {0};
+ if(sdk_ready == true)
+ {
+ p.setDataPosition(0);
+ if(p.dataAvail() > 0)
+ {
+ p.readInt32(&resp_type);
+ p.readInt32(&token);
+ p.readInt32(&request);
+ p.readInt32(&slot_id);
+ p.readInt32(&error1);
+ if(!error1)
+ {
+ system("uci set lynq_uci.sdk_ready=0");
+ }
+ else
+ {
+ system("uci set lynq_uci.sdk_ready=2");
+ }
+ }
+ sdk_ready = false;
+ }
+}
+
extern "C" void
RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, size_t responselen) {
RequestInfo *pRI;
@@ -4168,152 +4260,23 @@
}
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);
- }
- /*lei add only for factory test 2022/5/19*/
- if(pRI->lynqEvent==3)
- {
- /*lei add for at+cgir*/
- if(strstr((const char*)response,"+CGMR")){
- lynq_get_inside_version();
- }
- /*lei add for at+cgir*/
- parse_inside_version(response);
- int n = write(ttyGS3_fd,response,responselen);
- if(n<0)
- {
- perror("lynq resp write:");
- }
- printf("n = %d\n",n);
- }
- break;
- }
- /*lei add for AT+CGSN 2022/8/4*/
+ /*lei add for sdk ready 2022/8/17*/
case RIL_REQUEST_DEVICE_IDENTITY:
{
- int resp_type;
- int token;
- int request;
- int slot_id;
- int error1;
- int num;
- char imei[32] = {0};
- if(pRI->lynqEvent==1)
- {
- //printf("lei test %s\n" ,printBuf);
- p.setDataPosition(0);
- if(p.dataAvail() > 0)
- {
- p.readInt32(&resp_type);
- p.readInt32(&token);
- p.readInt32(&request);
- p.readInt32(&slot_id);
- p.readInt32(&error1);
- if(!error1)
- {
- p.readInt32(&num);
- char * test = lynqStrdupReadString(p);
- parse_imei(test);
- if(imei_cnt % 2 == 0)
- {
- sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
- int n = write(ttyGS3_fd,imei,strlen(imei));
- if(n<0)
- {
- perror("lynq resp write:");
- }
- }
- else
- {
- sprintf(imei,"%s%s%s", "+CGSN: ", test, "\n");
- int n = write(ttyGS3_fd,imei,strlen(imei));
- if(n<0)
- {
- perror("lynq resp write:");
- }
- char eBuf[64] = {0};
- sprintf(eBuf,"OK\n");
- n = write(ttyGS3_fd,eBuf,strlen(eBuf));
- if(n<0)
- {
- perror("lynq resp write:");
- }
- }
- imei_cnt++;
- }
- }
- }
- /*lei add for sdk ready 2022/8/17*/
- else
- {
- if(sdk_ready == true)
- {
- p.setDataPosition(0);
- if(p.dataAvail() > 0)
- {
- p.readInt32(&resp_type);
- p.readInt32(&token);
- p.readInt32(&request);
- p.readInt32(&slot_id);
- p.readInt32(&error1);
- if(!error1)
- {
- system("uci set lynq_uci.sdk_ready=0");
- }
- else
- {
- system("uci set lynq_uci.sdk_ready=2");
- }
- }
- sdk_ready = false;
- }
- }
- /*lei add for sdk ready 2022/8/17*/
+ lynq_sdk_ready(p);
break;
}
- /*lei add for AT+CGSN 2022/8/4*/
+ /*lei add for sdk ready 2022/8/17*/
+ case RIL_REQUEST_OPERATOR:
+ {
+ lynq_get_mccmnc(p, mccmnc);
+ lynq_send_result_already();
+ break;
+ }
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));
}
@@ -4681,9 +4644,11 @@
//unsol trigger other things.
switch(unsolResponse) {
- //case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
- //ARspRequest(RIL_REQUEST_GET_CURRENT_CALLS, soc_id);
- //break;
+#ifdef LED_SUPPORT
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: //add this for API-720
+ ARspRequest(RIL_REQUEST_GET_CURRENT_CALLS, soc_id);
+ break;
+#endif
case RIL_UNSOL_CALL_RING:
callRing(soc_id);
break;
@@ -4829,7 +4794,7 @@
break;
}
/*Warren add for t800 ril service 2021/12/16 start*/
- ret = LYNQ_RIL_urcBroadcast(p);
+ ret = LYNQ_RIL_urcBroadcast(p,unsolResponse);
/*Warren add for t800 ril service 2021/12/16 end*/
#if 0
if (ret != 0 && unsolResponse == RIL_UNSOL_NITZ_TIME_RECEIVED) {
@@ -5306,6 +5271,7 @@
case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
@@ -5613,6 +5579,9 @@
static void initCoditions()
{
+#ifdef LED_SUPPORT
+ mbtk_netled_init();
+#endif
mixer_init();
if(utils::is_support_dsds()) {
for(int i = 0; i < 2 ; i++) {
@@ -5623,7 +5592,7 @@
if(utils::is_suppport_dsss()) {
int id = Phone_utils::get_enable_sim_for_dsss();
init(id);
- }
+ }
}
@@ -5929,6 +5898,21 @@
}
*/
}
+
+//add by hq for bug 760 2023/02/09
+static int setnonblocking(int sockfd) {
+ int flag = fcntl(sockfd, F_GETFL, 0); //get current flag
+ if (flag < 0) {
+ RLOGE("fcntl F_GETFL fail");
+ return -1;
+ }
+ if (fcntl(sockfd, F_SETFL, flag | O_NONBLOCK) < 0) { //add O_NONBLOCK
+ RLOGE("fcntl F_SETFL fail");
+ return -1;
+ }
+ return 0;
+}
+
void LYNQ_RIL_RecSocket()
{
RLOGD("LYNQ_RIL_RecSocket start\n");
@@ -5962,6 +5946,13 @@
RLOGE("Server Bind Failed:");
exit(1);
}
+
+ if(setnonblocking(server_socket_fd)!=0)
+ {
+ RLOGE("setnonblocking Failed");
+ exit(1);
+ }
+
/* create epoll fd,add socket to epoll */
ep_fd = epoll_create(LYNQ_SOCKET_ENVNT_FD_MAX);
//int len = sizeof(struct sockaddr_in);
@@ -6000,117 +5991,122 @@
socklen_t client_addr_length = sizeof(lynqClient_addr);
/* receive the data */
bzero(buffer, LYNQ_SOCKET_BUFFER);
- if(recvfrom(server_socket_fd, buffer, LYNQ_SOCKET_BUFFER,0,(struct sockaddr*)&lynqClient_addr, &client_addr_length) == -1)
+ while(recvfrom(server_socket_fd, buffer, LYNQ_SOCKET_BUFFER,0,(struct sockaddr*)&lynqClient_addr, &client_addr_length) != -1)//add while by hq for bug 760 2023/02/09
{
- RLOGE("Receive Data Failed:");
- continue;
- }
- client_tmp = (lynq_client_t*)buffer;
- RLOGD("[LYNQ socketId] utoken=%d,request=%d,len=%d,param=%s",client_tmp->uToken,client_tmp->request,client_tmp->paramLen,client_tmp->param);
- //char test[36] = {};
- //sprintf(test,"test okay len = %d",client_tmp->paramLen);
- //sendto(server_socket_fd,test,strlen(test),0,(struct sockaddr*)&client_addr,client_addr_length);
- argv[0] = (char *)lynq_requset_to_string(client_tmp->request);
- argc = 0;
- if(client_tmp->paramLen > 0)
- {
- /*transfer struct*/
- argc = parse_param(client_tmp->param, argv+1, MAX_ARGS);
- if(argc < 1)
+ client_tmp = (lynq_client_t*)buffer;
+ RLOGD("[LYNQ socketId] utoken=%d,request=%d,len=%d,param=%s",client_tmp->uToken,client_tmp->request,client_tmp->paramLen,client_tmp->param);
+ //char test[36] = {};
+ //sprintf(test,"test okay len = %d",client_tmp->paramLen);
+ //sendto(server_socket_fd,test,strlen(test),0,(struct sockaddr*)&client_addr,client_addr_length);
+ argv[0] = (char *)lynq_requset_to_string(client_tmp->request);
+ argc = 0;
+ if(client_tmp->paramLen > 0)
{
- RLOGE("%s: error input.", buffer);
+ /*transfer struct*/
+ argc = parse_param(client_tmp->param, argv+1, MAX_ARGS);
+ if(argc < 1)
+ {
+ RLOGE("%s: error input.", buffer);
+ continue;
+ }
+ }
+ printf("argc =%d\n",argc);
+ argc = argc+1;
+ for(int t = 0;t<argc;t++)
+ {
+ RLOGD("warren test argv[%d]=%s\n",t,argv[t]);
+ }
+ COMMAND *command = find_command(argv[0]);
+ if(!command)
+ {
+ RLOGE("%s: No such command for DemoApp", argv[0]);
continue;
}
- }
- printf("argc =%d\n",argc);
- argc = argc+1;
- for(int t = 0;t<argc;t++)
- {
- RLOGD("warren test argv[%d]=%s\n",t,argv[t]);
- }
- COMMAND *command = find_command(argv[0]);
- if(!command)
- {
- RLOGE("%s: No such command for DemoApp", argv[0]);
- continue;
- }
- 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);
- continue;
- }
- 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;
- }
- /*jb.qi add for two sim suspend 2022/9/19 start lei modify for factory test of sleep*/
- if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE || request == LYNQ_REQUEST_CHANGE_RADIO)
- {
- int i;
- RLOGD("lynq_request_change_screen_state");
- if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE)
- {
- for(i=0;i<2;i++) //suspend sim0 and sim1
- {
- lynq_sendRequestToMd(RIL_REQUEST_SCREEN_STATE, i, argv, lynqClient_addr, client_tmp->uToken);
- }
+ 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();
}
- /*lei modify for factory test of sleep*/
- if(request == LYNQ_REQUEST_CHANGE_RADIO)
+ if(request == -1)
{
- for(i=0;i<2;i++) //both radio on/off
- {
- lynq_sendRequestToMd(RIL_REQUEST_RADIO_POWER, i, argv, lynqClient_addr, client_tmp->uToken);
- }
+ (*(command->func)) (argc, argv, id, NULL);
+ continue;
}
- continue;
+ 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;
+ }
+ /*jb.qi add for two sim suspend 2022/9/19 start lei modify for factory test of sleep*/
+ if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE || request == LYNQ_REQUEST_CHANGE_RADIO)
+ {
+ int i;
+ RLOGD("lynq_request_change_screen_state");
+ if(request == LYNQ_REQUEST_CHANGE_SCREEN_STATE)
+ {
+ for(i=0;i<2;i++) //suspend sim0 and sim1
+ {
+ lynq_sendRequestToMd(RIL_REQUEST_SCREEN_STATE, i, argv, lynqClient_addr, client_tmp->uToken);
+ }
+ }
+ /*lei modify for factory test of sleep*/
+ if(request == LYNQ_REQUEST_CHANGE_RADIO)
+ {
+ for(i=0;i<2;i++) //both radio on/off
+ {
+ lynq_sendRequestToMd(RIL_REQUEST_RADIO_POWER, i, argv, lynqClient_addr, client_tmp->uToken);
+ }
+ }
+ continue;
+ }
+ /*jb.qi add for two sim suspend 2022/9/19 end*/
+ RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
+ RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
+ pRI->uToken = client_tmp->uToken;
+ pRI->lynqEvent = 2;
+ pRI->uClient_addr.sin_family = lynqClient_addr.sin_family;
+ pRI->uClient_addr.sin_addr.s_addr = lynqClient_addr.sin_addr.s_addr;
+ pRI->uClient_addr.sin_port = lynqClient_addr.sin_port;
+ //sendto(server_socket_fd,test,strlen(test),0,(struct sockaddr*)&pRI->uClient_addr,client_addr_length);
+ //pRI->uClient_addr.sa_family = (struct sockaddr)client_addr.sa_family;
+ //memcpy(pRI->uClient_addr.sa_data,&client_addr
+ //Radio on/off only allow one thread operate.
+ if(request == RIL_REQUEST_RADIO_POWER)
+ {
+ speciaRequest_wait();
+ }
+ #ifdef ECALL_SUPPORT
+ else if(request == RIL_REQUEST_ECALL_FAST_MAKE_ECALL)
+ {
+ init_redial_flag();
+ }
+ #endif
+ 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));
+ bzero(buffer, LYNQ_SOCKET_BUFFER);
+
}
- /*jb.qi add for two sim suspend 2022/9/19 end*/
- RLOGD("REQUEST: %s ParamterNum:%d", requestToString(request), argc);
- RequestInfo *pRI = creatRILInfoAndInit(request, UDP, (RIL_SOCKET_ID)(id));
- pRI->uToken = client_tmp->uToken;
- pRI->lynqEvent = 2;
- pRI->uClient_addr.sin_family = lynqClient_addr.sin_family;
- pRI->uClient_addr.sin_addr.s_addr = lynqClient_addr.sin_addr.s_addr;
- pRI->uClient_addr.sin_port = lynqClient_addr.sin_port;
- //sendto(server_socket_fd,test,strlen(test),0,(struct sockaddr*)&pRI->uClient_addr,client_addr_length);
- //pRI->uClient_addr.sa_family = (struct sockaddr)client_addr.sa_family;
- //memcpy(pRI->uClient_addr.sa_data,&client_addr
- //Radio on/off only allow one thread operate.
- if(request == RIL_REQUEST_RADIO_POWER)
- {
- speciaRequest_wait();
- }
-#ifdef ECALL_SUPPORT
- else if(request == RIL_REQUEST_ECALL_FAST_MAKE_ECALL)
- {
- init_redial_flag();
- }
-#endif
- 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));
+ RLOGE("process Receive Data end");
+ // continue;
}
}
}
RLOGD("close socket fd");
close(server_socket_fd);
+#ifdef LED_SUPPORT
+ mbtk_netled_deinit();
+#endif
return ;
}
int LYNQ_RIL_respSocket(Parcel &p,RIL_Token t)
@@ -6162,17 +6158,64 @@
return 0;
}
-int LYNQ_RIL_urcBroadcast(Parcel &p)
+bool is_need_use_shm(int dataSize, int urc_id)
+{
+ switch(urc_id)
+ {
+ /*network*/
+ case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_SIGNAL_STRENGTH:
+ /*sms*/
+ case RIL_UNSOL_RESPONSE_NEW_SMS:
+ /*sim*/
+ //case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: Not supported at present
+ /*call*/
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
+ case RIL_UNSOL_CALL_RING:
+ case RIL_UNSOL_RINGBACK_TONE:
+ case RIL_UNSOL_CALL_INFO_INDICATION:
+#ifdef ECALL_SUPPORT
+ case RIL_UNSOL_ECALL_INDICATIONS://9502
+#endif
+ /*Data*/
+ case LYNQ_URC_DATA_CALL_STATUS_IND:
+ case LYNQ_URC_MODIFY_APNDB:
+ case LYNQ_URC_RESET_APNDB:
+ break;
+ default:
+ return false;
+ }
+ if(dataSize>urc_broadcase_shm_size_limit && dataSize <= get_max_shem_buffer_size())
+ {
+ return true;
+ }
+ return false;
+}
+
+int LYNQ_RIL_urcBroadcast(Parcel &p, int urc_id)
{
RLOGD("LYNQ_RIL_urcBroadcast send start");
- int ret =0;
- bool sendResult =false;
- ssize_t sent = 0;
- uint8_t dataLength[4];
- int verify = 0x55aa;
- p.setDataPosition(0);
+ int ret =0;
+ ssize_t sent = 0;
+ p.setDataPosition(0);
int dataSize = p.dataSize();
const uint8_t* data = p.data();
+ RLOGD("LYNQ_RIL_urcBroadcast urc_id is %d, dataSize=%d, msg is %s", urc_id, dataSize, requestToString(urc_id));
+ if(is_need_use_shm(dataSize,urc_id))
+ {
+ int index,level;
+ if(get_cur_shem_buffer_index(dataSize,&level,&index))
+ {
+ char* p_shm_buffer=get_shem_buffer(level,index);
+ memcpy(p_shm_buffer,data,dataSize);
+ uint32_t* pFirstInt = (uint32_t*) const_cast<uint8_t*> (data);
+ *pFirstInt=*pFirstInt+((index+1)<<SHM_BUFFER_INDEX_OFFSET)+((dataSize)<<SHM_BUFFER_SIZE_OFFSET);
+ dataSize=sizeof(int32_t)*2;
+ RLOGD("LYNQ_RIL_urcBroadcast use share mem level is %d, index is %d,pointer is %p",level,index,p_shm_buffer);
+ }
+ }
sent = sendto(lynq_urc_socket_fd, data, dataSize, 0, (struct sockaddr *)&urc_broadcast_addr, sizeof(urc_broadcast_addr));
if( sent < 0 )
{
@@ -6180,6 +6223,7 @@
sent,lynq_urc_socket_fd, dataSize);
return -1;
}
+
return 0;
}
/*Warren add for t800 RIL Service 2021/12/10 end*/
@@ -6263,7 +6307,6 @@
} 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);
@@ -6697,11 +6740,6 @@
lynq_get_factory_data(argc,argv);
break;
}
- case LYNQ_GOTO_FOTA:
- {
- lynq_atfota_test(argv);
- break;
- }
/*rita add start*/
case LYNQ_GOTO_TEMP:
{
@@ -6941,13 +6979,19 @@
} else {
pRI->pCI = find_mtk_command(request);
}
+ /*lei modify for Some requests that are not in the ril_commands.h and mtk_ril_commands.h but in commands.h*/
+ COMMAND *command = find_command(reqString);
if(pRI->pCI == NULL){
- RLOGE("pCI command not found!");
- if(pRI) {
- free(pRI);
+ if(command == NULL)
+ {
+ RLOGE("pCI command & command not found!");
+ if(pRI) {
+ free(pRI);
+ }
+ return;
}
- return;
}
+ /*lei modify for Some requests that are not in the ril_commands.h and mtk_ril_commands.h but in commands.h*/
if(utils::is_suppport_dsss()){
pRI->socket_id = (RIL_SOCKET_ID)Phone_utils::get_enable_sim_for_dsss();
@@ -6956,11 +7000,10 @@
if(utils::is_support_dsds() && (request != RIL_REQUEST_RADIO_POWER)){
pRI->socket_id = (RIL_SOCKET_ID)get_atci_sim();
}
-
pRI->p_next = NULL;
- COMMAND *command = find_command(reqString);
-
+
+ RLOGD("function %s line %d reqString %s", __FUNCTION__, __LINE__, reqString);
if(command == NULL) {
RLOGE("ATCI request command find error!");
if(pRI) {
@@ -7163,7 +7206,8 @@
while (s_started == 0) {
pthread_cond_wait(&s_startupCond, &s_startupMutex);
}
- /*mobiletek add*/
+ //warren delete,beacuse of update at fwk.
+ /*mobiletek add*
s_started = 0;
result = pthread_create(&s_tid_dispatch, &attr, eventLoop_at, NULL);
if (result != 0) {
@@ -7174,7 +7218,7 @@
while (s_started == 0) {
pthread_cond_wait(&s_startupCond, &s_startupMutex);
}
- /*mobiletek add*/
+ *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/src/lynq/framework/lynq-ril-service/src/sim.cpp b/src/lynq/framework/lynq-ril-service/src/sim.cpp
index d77ab19..f1bba40 100755
--- a/src/lynq/framework/lynq-ril-service/src/sim.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/sim.cpp
@@ -46,6 +46,8 @@
#undef LOG_TAG
#define LOG_TAG "DEMO_SIM"
+int g_switch_card_error = 0;
+
static char* checkParameters(char* para){
if (strcasecmp(para, "null") == 0) {
return "";
@@ -182,19 +184,25 @@
free(pRI);
RLOGD("the paremeters numbers isn't right , so return");
android::emResultNotify("Set failed.\n");
- lynq_output_info("\nCME ERROR:2\n");
+ //lei modify: elt port is no longer used
+ //lynq_output_info("\nCME ERROR:2\n");
+ g_switch_card_error = 2;
return -1;
}
if(Radio_capability_switch_util::is_sim_inserted(atoi(argv[1]))) {
set_default_sim_all(atoi(argv[1]));
android::emResultNotify("Set successful.\n");
- lynq_output_info("\nOK\n");
+ //lei modify: elt port is no longer used
+ //lynq_output_info("\nOK\n");
+ g_switch_card_error = 0;
free(pRI);
} else {
RLOGD("Set default all fail, SIM card absent");
android::emResultNotify("Set default all fail, SIM card absent.\n");
- lynq_output_info("\nCME ERROR:11\n");
+ //lei modify: elt port is no longer used
+ //lynq_output_info("\nCME ERROR:11\n");
+ g_switch_card_error = 11;
free(pRI);
}
diff --git a/src/lynq/framework/lynq-ril-service/src/sim.h b/src/lynq/framework/lynq-ril-service/src/sim.h
index fe1863c..54d2564 100755
--- a/src/lynq/framework/lynq-ril-service/src/sim.h
+++ b/src/lynq/framework/lynq-ril-service/src/sim.h
@@ -38,6 +38,8 @@
#include <vendor-ril/telephony/ril.h>
#include "common.h"
+extern int g_switch_card_error;
+
int getIccCardStatus(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI);
int supplyIccPinForApp(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI);
int changeIccPinForApp(int argc, char **argv, RIL_SOCKET_ID socket_id, RequestInfo *pRI);
diff --git a/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp b/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
index e7b4d03..4b51c0d 100755
--- a/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
@@ -464,7 +464,7 @@
{
char *zErrMsg = 0;
int rc;
- char sql[LYNQ_SMS_MAX_SCA_NUMBER_LEN+LYNQ_SMS_MAX_PDU_NUMBER_LEN+LYNQ_SMS_MAX_TEXT_NUMBER_LEN+3+1+100]={0};
+ //char sql[LYNQ_SMS_MAX_SCA_NUMBER_LEN+LYNQ_SMS_MAX_PDU_NUMBER_LEN+LYNQ_SMS_MAX_TEXT_NUMBER_LEN+3+1+100]={0};
/* Open database */
rc = sqlite3_open(path, &smsDb);
if( rc )
@@ -475,9 +475,10 @@
}
LYDBGLOG("[%s] Opened database successfully",__FUNCTION__);
/* Create SQL statement */
- sprintf(sql,"INSERT INTO LYNQSMS (ID,SLOT,STATUS,ADDRESS,SMSC,CHARSET,PDU,CONTENT,CURRENT,TOTAL) VALUES (%d,%d,%d,'%s','%s',%d,'%s','%s',%d,%d);",id,slot_id,status,address,smsc,charset,pdu,content,current,total);
+ //sprintf(sql,"INSERT INTO LYNQSMS (ID,SLOT,STATUS,ADDRESS,SMSC,CHARSET,PDU,CONTENT,CURRENT,TOTAL) VALUES (%d,%d,%d,'%s','%s',%d,'%s','%s',%d,%d);",id,slot_id,status,address,smsc,charset,pdu,content,current,total);
/* Execute SQL statement */
//printf("%s\n",sql);
+ char *sql = sqlite3_mprintf("INSERT INTO LYNQSMS VALUES('%d','%d','%d','%q','%q','%d','%q','%q','%d','%d')",id,slot_id,status,address,smsc,charset,pdu,content,current,total);
rc = sqlite3_exec(smsDb, sql, NULL,NULL, &zErrMsg);
if( rc != SQLITE_OK )
{
diff --git a/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp b/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
index 9e16b5e..d4f3ce3 100755
--- a/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/stateManager/stateManager.cpp
@@ -47,6 +47,9 @@
#include "util/utils.h"
#include <cutils/jstring.h>
#include <liblog/lynq_deflog.h>
+#ifdef LED_SUPPORT
+#include "led.h"
+#endif
#undef LOG_TAG
#define LOG_TAG "DEMO_MANAGER"
@@ -96,7 +99,13 @@
size_t pos = p.dataPosition();
p.writeInt32(1);
- p.writeInt32(atoi(argv[1]));
+
+ int screen_state= atoi(argv[1]);
+ p.writeInt32(screen_state);
+#ifdef LED_SUPPORT
+ mbtk_netled_state_update(screen_state==0 ? GPIO_NETLED_AP_GOINGSLEEP : GPIO_NETLED_AP_WAKEUP);
+ usleep(wait_led_update_effective_timer_ms*1000);
+#endif
p.setDataPosition(pos);
pRI->pCI->dispatchFunction(p, pRI);
diff --git a/src/lynq/framework/lynq-sdk-ready/src/main.cpp b/src/lynq/framework/lynq-sdk-ready/src/main.cpp
index 5df9f27..0ff285c 100755
--- a/src/lynq/framework/lynq-sdk-ready/src/main.cpp
+++ b/src/lynq/framework/lynq-sdk-ready/src/main.cpp
@@ -10,8 +10,14 @@
extern "C" {
#endif
+#undef LOG_TAG
+#define LOG_TAG "LYNQ_SDK_READY"
+
int main(void){
RLOGD("lynq-sdk-ready begin");
+ //xf.li add in 2023.01.04 for API-696 start
+ system("hwnat -O 5");
+ //xf.li add in 2023.01.04 for API-696 end
start_timer_request();
while (1)
{
diff --git a/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp b/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
index e0bcffc..bbe70a0 100755
--- a/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
+++ b/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
@@ -80,11 +80,11 @@
if(strstr(buffer,service))
{
pclose(fp);
- printf("check_service 1\n");
+ RLOGD("check_service 1\n");
return 1;
}
}
- printf("check_service 0\n");
+ RLOGD("check_service 0\n");
pclose(fp);
return 0;
}
@@ -143,7 +143,7 @@
bzero(res_data, MAX_LEN);
pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);
- printf("send_num %d\n", send_num);
+ RLOGD("send_num %d\n", send_num);
if(send_num == 0)
{
RLOGD("__FUNCTION__ %s Close to end %s\n", __FUNCTION__, strerror(errno));
@@ -162,7 +162,7 @@
}
//get data msg
recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
- printf("recv_num %d\n", recv_num);
+ RLOGD("recv_num %d\n", recv_num);
if(recv_num == 0)
{
RLOGD("__FUNCTION__ %s Close to end\n", __FUNCTION__);
diff --git a/src/lynq/lib/libautosuspend/libautosuspend.c b/src/lynq/lib/libautosuspend/libautosuspend.c
index d39bab1..58412a6 100644
--- a/src/lynq/lib/libautosuspend/libautosuspend.c
+++ b/src/lynq/lib/libautosuspend/libautosuspend.c
@@ -28,6 +28,7 @@
static bool libautosuspend_inited;
+bool feedback_flag = true; //add for after sleeping once calling lynq_wailt_wakeup_event does not return sleep time
// static bool libautosuspend_enabled;
// static pthread_mutex_t get_feedback_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -468,7 +469,16 @@
int *socket_timeout = NULL;
struct time_info_t time_info;
int ret = 0;
-
+ /*add for after sleeping once calling lynq_wailt_wakeup_event does not return sleep time start*/
+ if(feedback_flag == true)
+ {
+ if(libautosuspend_init() != 0)
+ {
+ return -1;
+ }
+ }
+ feedback_flag = false;
+ /*add for after sleeping once calling lynq_wailt_wakeup_event does not return sleep time end*/
memset(&time_info,0,sizeof(struct time_info_t));
if(sleep_start_time == NULL || wakeup_time == NULL )
{
diff --git a/src/lynq/lib/liblynq-at-common/LICENSE b/src/lynq/lib/liblynq-at-common/LICENSE
new file mode 100755
index 0000000..382fc78
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("Mobiletek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to Mobiletek Inc. and/or its licensors. Without
+the prior written permission of Mobiletek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of Mobiletek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+Mobiletek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("Mobiletek SOFTWARE")
+RECEIVED FROM Mobiletek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. Mobiletek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES Mobiletek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE Mobiletek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN Mobiletek
+SOFTWARE. Mobiletek SHALL ALSO NOT BE RESPONSIBLE FOR ANY Mobiletek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND Mobiletek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE Mobiletek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT Mobiletek'S OPTION, TO REVISE OR REPLACE THE
+Mobiletek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO Mobiletek FOR SUCH Mobiletek SOFTWARE AT ISSUE.
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-common/atci_at_util.cpp b/src/lynq/lib/liblynq-at-common/atci_at_util.cpp
new file mode 100755
index 0000000..4c215a7
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/atci_at_util.cpp
@@ -0,0 +1,171 @@
+#include <string.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include "atci_at_util.h"
+
+#undef LOG_TAG
+#define LOG_TAG "AT_COMMON"
+
+int atci_at_skip_space(char **p_cur) {
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ while (**p_cur == ATCI_SPACE) {
+ (*p_cur)++;
+ }
+ return SYS_SUCC;
+}
+int atci_at_hasmore(char **p_cur) {
+ if (*p_cur == NULL || **p_cur == ATCI_END_CHAR) {
+ return SYS_FAIL;
+ }
+ return SYS_SUCC;
+}
+
+int atci_at_to_equal(char **p_cur) {
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ *p_cur = strchr(*p_cur, ATCI_EQUAL);
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ (*p_cur)++;
+ return SYS_SUCC;
+}
+int atci_at_to_colon(char **p_cur) {
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ *p_cur = strchr(*p_cur, ATCI_COLON);
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ (*p_cur)++;
+ return SYS_SUCC;
+}
+int atci_at_skip_next_comma(char **p_cur) {
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ *p_cur = strchr(*p_cur, ATCI_COMMA);
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ (*p_cur)++;
+ return SYS_SUCC;
+}
+int atci_at_get_next_key(char **p_cur, char **p_out) {
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ atci_at_skip_space(p_cur);
+ if (**p_cur == ATCI_DOUBLE_QUOTE) {
+ (*p_cur)++;
+ *p_out = strsep(p_cur, "\"");
+ atci_at_skip_next_comma(p_cur);
+ } else {
+ *p_out = strsep(p_cur, ",");
+ }
+ return SYS_SUCC;
+}
+
+/**
+ * Parses the next integer in the line and places it in *p_out
+ * "uns" is indicate in unsigned or not
+ * returns SYS_SUCC on success
+ * returns SYS_FAIL on fail
+ * updates *p_cur
+ * "base" is the same as the base param in strtol
+ */
+int atci_at_get_nextint_base(char **p_cur, int *p_out, int base, int uns) {
+ char *ret;
+ if (*p_cur == NULL) {
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(p_cur, &ret)) {
+ return SYS_FAIL;
+ } else {
+ long l;
+ char *end;
+ if (uns) {
+ l = strtoul(ret, &end, base);
+ } else {
+ l = strtol(ret, &end, base);
+ }
+ *p_out = (int) l;
+ if (end == ret) {
+ return SYS_FAIL;
+ }
+ }
+ return SYS_SUCC;
+}
+int atci_at_get_nextint(char **p_cur, int *p_out) {
+ return atci_at_get_nextint_base(p_cur, p_out, 10, 0);
+}
+int atci_at_get_nexthexint(char **p_cur, int *p_out) {
+ return atci_at_get_nextint_base(p_cur, p_out, 16, 1);
+}
+int atci_get_cmd_mode(char *line) {
+ int reasult = AT_WRONG_MODE;
+ char *p_cur = NULL;
+ if (NULL == line) {
+ reasult = AT_WRONG_MODE;
+ RLOGD("atci_get_cmd_mode error, input is NULL");
+ return reasult;
+ }
+ p_cur = strchr(line, ATCI_EQUAL);
+ if (NULL == p_cur) {
+ p_cur = strchr(line, ATCI_QUESTION_MARK);
+ if (NULL == p_cur) {
+ reasult = AT_ACTIVE_MODE;
+ } else {
+ reasult = AT_READ_MODE;
+ }
+ } else {
+ p_cur++;
+ atci_at_skip_space(&p_cur);
+ if (ATCI_QUESTION_MARK == *p_cur) {
+ reasult = AT_TEST_MODE;
+ } else {
+ reasult = AT_SET_MODE;
+ }
+ }
+ RLOGD("atci_get_cmd_mode success[%d]", reasult);
+ return reasult;
+}
+
+char* atci_get_cmd_prefix(char *line) {
+ int buf_len;
+ char *prefix;
+ char *end_ptr;
+ if (NULL == line) {
+ RLOGD("input is null");
+ return NULL;
+ }
+ end_ptr = line;
+ while (!ATCI_IS_CAHR(*end_ptr, ATCI_EQUAL)
+ && !ATCI_IS_CAHR(*end_ptr, ATCI_QUESTION_MARK)
+ && !ATCI_IS_CAHR(*end_ptr, ATCI_END_CHAR)
+ && !ATCI_IS_CAHR(*end_ptr, ATCI_CR) && !ATCI_IS_CAHR(*end_ptr, ATCI_LF)) {
+ end_ptr++;
+ }
+ buf_len = end_ptr - line + 1;
+ prefix = (char *) calloc(buf_len, 1);
+ if (prefix) {
+ int i;
+ char *in_ptr = line;
+ char *out_ptr = prefix;
+ for (i = 0; i < buf_len - 1; i++) {
+ if (!ATCI_IS_CAHR(*in_ptr, ATCI_SPACE)) {
+ *out_ptr = ATCI_UPPER_TO_LOWER(*in_ptr);
+ out_ptr++;
+ }
+ in_ptr++;
+ }
+ *out_ptr = ATCI_END_CHAR;
+ }
+ RLOGD("get cmd prefix [%d][%s]", buf_len, prefix);
+ return prefix;
+}
+
diff --git a/src/lynq/lib/liblynq-at-common/atci_at_util.h b/src/lynq/lib/liblynq-at-common/atci_at_util.h
new file mode 100755
index 0000000..d84fd63
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/atci_at_util.h
@@ -0,0 +1,128 @@
+#ifndef _ATCI_AT_UTIL_H_
+#define _ATCI_AT_UTIL_H_
+
+#define SYS_SUCC 0
+#define SYS_FAIL -1
+
+typedef enum {
+ ATCI_SPACE = ' ',
+ ATCI_EQUAL = '=',
+ ATCI_COMMA = ',',
+ ATCI_SEMICOLON = ';',
+ ATCI_COLON = ':',
+ ATCI_AT = '@',
+ ATCI_HAT = '^',
+ ATCI_MONEY = '$',
+ ATCI_DOUBLE_QUOTE = '"',
+ ATCI_QUESTION_MARK = '?',
+ ATCI_EXCLAMATION_MARK = '!',
+ ATCI_FORWARD_SLASH = '/',
+ ATCI_L_ANGLE_BRACKET = '<',
+ ATCI_R_ANGLE_BRACKET = '>',
+ ATCI_R_BRACKET = ')',
+ ATCI_L_BRACKET = '(',
+ ATCI_L_SQ_BRACKET = '[',
+ ATCI_R_SQ_BRACKET = ']',
+ ATCI_L_CURLY_BRACKET = '{',
+ ATCI_R_CURLY_BRACKET = '}',
+ ATCI_CHAR_STAR = '*',
+ ATCI_CHAR_POUND = '#',
+ ATCI_CHAR_AMPSAND = '&',
+ ATCI_CHAR_PERCENT = '%',
+ ATCI_CHAR_PLUS = '+',
+ ATCI_CHAR_MINUS = '-',
+ ATCI_CHAR_DOT = '.',
+ ATCI_CHAR_ULINE = '_',
+ ATCI_CHAR_TILDE = '~',
+ ATCI_CHAR_REVERSE_SOLIDUS = '\\',
+ ATCI_CHAR_VERTICAL_LINE = '|',
+ ATCI_END_CHAR = '\0',
+ ATCI_CR = '\r',
+ ATCI_LF = '\n',
+ ATCI_CHAR_0 = '0',
+ ATCI_CHAR_1 = '1',
+ ATCI_CHAR_2 = '2',
+ ATCI_CHAR_3 = '3',
+ ATCI_CHAR_4 = '4',
+ ATCI_CHAR_5 = '5',
+ ATCI_CHAR_6 = '6',
+ ATCI_CHAR_7 = '7',
+ ATCI_CHAR_8 = '8',
+ ATCI_CHAR_9 = '9',
+ ATCI_CHAR_A = 'A',
+ ATCI_CHAR_B = 'B',
+ ATCI_CHAR_C = 'C',
+ ATCI_CHAR_D = 'D',
+ ATCI_CHAR_E = 'E',
+ ATCI_CHAR_F = 'F',
+ ATCI_CHAR_G = 'G',
+ ATCI_CHAR_H = 'H',
+ ATCI_CHAR_I = 'I',
+ ATCI_CHAR_J = 'J',
+ ATCI_CHAR_K = 'K',
+ ATCI_CHAR_L = 'L',
+ ATCI_CHAR_M = 'M',
+ ATCI_CHAR_N = 'N',
+ ATCI_CHAR_O = 'O',
+ ATCI_CHAR_P = 'P',
+ ATCI_CHAR_Q = 'Q',
+ ATCI_CHAR_R = 'R',
+ ATCI_CHAR_S = 'S',
+ ATCI_CHAR_T = 'T',
+ ATCI_CHAR_U = 'U',
+ ATCI_CHAR_V = 'V',
+ ATCI_CHAR_W = 'W',
+ ATCI_CHAR_X = 'X',
+ ATCI_CHAR_Y = 'Y',
+ ATCI_CHAR_Z = 'Z',
+ ATCI_CHAR_a = 'a',
+ ATCI_CHAR_b = 'b',
+ ATCI_CHAR_c = 'c',
+ ATCI_CHAR_d = 'd',
+ ATCI_CHAR_e = 'e',
+ ATCI_CHAR_f = 'f',
+ ATCI_CHAR_g = 'g',
+ ATCI_CHAR_h = 'h',
+ ATCI_CHAR_i = 'i',
+ ATCI_CHAR_j = 'j',
+ ATCI_CHAR_k = 'k',
+ ATCI_CHAR_l = 'l',
+ ATCI_CHAR_m = 'm',
+ ATCI_CHAR_n = 'n',
+ ATCI_CHAR_o = 'o',
+ ATCI_CHAR_p = 'p',
+ ATCI_CHAR_q = 'q',
+ ATCI_CHAR_r = 'r',
+ ATCI_CHAR_s = 's',
+ ATCI_CHAR_t = 't',
+ ATCI_CHAR_u = 'u',
+ ATCI_CHAR_v = 'v',
+ ATCI_CHAR_w = 'w',
+ ATCI_CHAR_x = 'x',
+ ATCI_CHAR_y = 'y',
+ ATCI_CHAR_z = 'z',
+} atci_char_enum;
+
+typedef enum {
+ AT_WRONG_MODE, AT_SET_MODE, //Ex: at+eample=xxx
+ AT_READ_MODE, //Ex: at+eample?
+ AT_TEST_MODE, //Ex: at+eample=?
+ AT_ACTIVE_MODE //Ex: at+eample
+} atci_cmd_mode_e;
+
+#define ATCI_LOWER_TO_UPPER(alpha_char) (((alpha_char >= ATCI_CHAR_a)&&(alpha_char <= ATCI_CHAR_z)) ? (alpha_char-32): (alpha_char))
+#define ATCI_UPPER_TO_LOWER(alpha_char) (((alpha_char >= ATCI_CHAR_A)&&(alpha_char <= ATCI_CHAR_Z)) ? (alpha_char+32): (alpha_char))
+#define ATCI_IS_CAHR(input ,alpha_char) ((alpha_char == input)? 1 : 0)
+
+char* atci_get_cmd_prefix(char *line);
+int atci_get_cmd_mode(char *line);
+int atci_at_skip_space(char **p_cur);
+int atci_at_hasmore(char **p_cur);
+int atci_at_to_equal(char **p_cur);
+int atci_at_to_colon(char **p_cur);
+int atci_at_skip_next_comma(char **p_cur);
+int atci_at_get_nextint_base(char **p_cur, int *p_out, int base, int uns);
+int atci_at_get_nextint(char **p_cur, int *p_out);
+int atci_at_get_nexthexint(char **p_cur, int *p_out);
+int atci_at_get_next_key(char **p_cur, char **p_out);
+#endif
diff --git a/src/lynq/lib/liblynq-at-common/include/libat_common/lynq_at_common.h b/src/lynq/lib/liblynq-at-common/include/libat_common/lynq_at_common.h
new file mode 100755
index 0000000..6f68e04
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/include/libat_common/lynq_at_common.h
@@ -0,0 +1,23 @@
+/*=============================================================================
+# FileName: lynq_at_factory.h
+# Desc: about at of factory
+# Author: lei
+# Version: V1.0
+# LastChange: 2022-12-14
+# History:
+ copyright:Mobiletek
+=============================================================================*/
+#ifndef LYNQ_AT_COMMON_H
+#define LYNQ_AT_COMMON_H 1
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void ( *lynq_atsvc_incb )( const char *input,const int length);
+typedef void ( *lynq_atsvc_outcb )(char *output, int out_max_size, int mode);
+lynq_atsvc_incb lynq_register_at_common(lynq_atsvc_outcb out_cb);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp b/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp
new file mode 100755
index 0000000..ce8476a
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp
@@ -0,0 +1,402 @@
+
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include "include/libat_common/lynq_at_common.h"
+#include "atci_at_util.h"
+
+#undef LOG_TAG
+#define LOG_TAG "AT_COMMON"
+
+int g_mnetcall_mode = 0;
+int g_gtarndis_mode = 0;
+int g_version_mode = 0;
+
+lynq_atsvc_outcb handle_output;
+
+typedef struct
+{
+ char *cmd;
+ void (*func)(char *input,int mode);
+}Command;
+
+enum
+{
+ Response = 0,
+ Urc
+};
+
+void lynq_response_ok()
+{
+ char *str = "\r\nOK\r\n";
+ handle_output(str, strlen(str), Response);
+}
+
+void lynq_response_error()
+{
+ char *str = "\r\n+CME ERROR:100\r\n";
+ handle_output(str, strlen(str), Response);
+}
+
+static void lynq_get_poepn_buf(char *cmd)
+{
+ FILE *fp;
+ char buf[128] = {0};
+ fp = popen(cmd,"r");
+ while(fgets(buf, sizeof(buf), fp) != NULL){}
+ pclose(fp);
+ RLOGD("buf is %s size %d\n", buf, sizeof(buf));
+ handle_output(buf, strlen(buf), Response);
+ return;
+}
+
+void lynq_handle_rndis(char *input,int type)
+{
+ RLOGD("lynq_handle_rndis type %d\n", type);
+ char buf[128] = {0};
+ if(type == AT_SET_MODE)//set
+ {
+ int mode;
+ if (SYS_FAIL == atci_at_to_equal(&input))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_nexthexint(&input, &mode))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if(mode == 1)
+ {
+ g_mnetcall_mode = mode;
+ system("connmanctl enable gadget");
+ system("connmanctl tether gadget on");
+ lynq_response_ok();
+ }
+ else if (mode == 0)
+ {
+ g_mnetcall_mode = mode;
+ system("connmanctl disable gadget");
+ lynq_response_ok();
+ }
+ else
+ {
+ lynq_response_error();
+ }
+ }
+ else if(type == AT_TEST_MODE)//list
+ {
+ sprintf(buf,"+MNETCALL:(0-1)");
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if(type == AT_READ_MODE)//get
+ {
+ sprintf(buf,"+MNETCALL:%d", g_mnetcall_mode);
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else
+ {
+ lynq_response_error();
+ }
+ return;
+}
+
+void lynq_handle_rndis_configure(char *input,int type)
+{
+ RLOGD("lynq_handle_rndis_configure type %d\n", type);
+ char buf[128] = {0};
+ if(type == AT_SET_MODE)//set
+ {
+ int mode;
+ if (SYS_FAIL == atci_at_to_equal(&input))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_nexthexint(&input, &mode))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if(mode == 1)
+ {
+ g_gtarndis_mode = mode;
+ system("uci set lynq_uci.rndis=lynq_rndis");
+ system("uci set lynq_uci.rndis.status='1'");
+ system("uci commit");
+ lynq_response_ok();
+ }
+ else if (mode == 0)
+ {
+ g_gtarndis_mode = mode;
+ system("uci set lynq_uci.rndis=lynq_rndis");
+ system("uci set lynq_uci.rndis.status='0'");
+ system("uci commit");
+ lynq_response_ok();
+ }
+ else
+ {
+ lynq_response_error();
+ }
+ }
+ else if(type == AT_TEST_MODE)//list
+ {
+ sprintf(buf,"+GTARNDIS:(0-1)");
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if(type == AT_READ_MODE)//get
+ {
+ sprintf(buf,"+GTARNDIS:%d", g_gtarndis_mode);
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else
+ {
+ lynq_response_error();
+ }
+ return;
+}
+
+void lynq_handle_version(char *input,int type)
+{
+ RLOGD("lynq_handle_version type %d\n", type);
+ char buf[128] = {0};
+ if(type == AT_SET_MODE)//set
+ {
+ int mode;
+ if (SYS_FAIL == atci_at_to_equal(&input))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if (SYS_FAIL == atci_at_get_nexthexint(&input, &mode))
+ {
+ lynq_response_error();
+ return SYS_FAIL;
+ }
+ if(mode == 1)
+ {
+ g_version_mode = mode;
+ lynq_get_poepn_buf("uci get lynq_uci_ro.lynq_version.LYNQ_SW_INSIDE_VERSION");
+ //handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if (mode == 0)
+ {
+ g_version_mode = mode;
+ lynq_get_poepn_buf("uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION");
+ //handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else
+ {
+ lynq_response_error();
+ }
+ }
+ else if(type == AT_TEST_MODE)//list
+ {
+ sprintf(buf,"+CGIR:(0-1)");
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if(type == AT_READ_MODE)//get
+ {
+ sprintf(buf,"+CGIR:%d", g_version_mode);
+ handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if(type == AT_ACTIVE_MODE)//active
+ {
+ if(g_version_mode == 0)
+ {
+ lynq_get_poepn_buf("uci get lynq_uci_ro.lynq_version.LYNQ_SW_VERSION");
+ //handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ else if(g_version_mode == 1)
+ {
+ lynq_get_poepn_buf("uci get lynq_uci_ro.lynq_version.LYNQ_SW_INSIDE_VERSION");
+ //handle_output(buf, strlen(buf), Response);
+ lynq_response_ok();
+ }
+ }
+ return;
+}
+
+void lynq_display_modem_mode(const char *cmd)
+{
+ FILE *fp;
+ char buf[128] = {0};
+ fp = popen(cmd,"r");
+ while(fgets(buf, sizeof(buf), fp) != NULL){}
+ pclose(fp);
+ RLOGD("buf is %s size %d\n", buf, sizeof(buf));
+ char tmp[16] = {0};
+ sprintf(tmp, "+LGMDS: %c", buf[4]);
+ handle_output(tmp, strlen(tmp), Response);
+ return;
+}
+
+void lynq_handle_modem_status(char *input,int type)
+{
+ RLOGD("lynq_handle_modem_status type %d\n", type);
+ if(type == AT_ACTIVE_MODE)//active
+ {
+ lynq_display_modem_mode("cat /sys/kernel/ccci/boot");
+ lynq_response_ok();
+ }
+ return;
+}
+
+void lynq_tmp_handle_rndis(char *input,int type)
+{
+ RLOGD("lynq_tmp_handle_rndis type %d\n", type);
+ char *connman_cmd1 = NULL;
+ char *connman_cmd2 = NULL;
+ if(type == AT_SET_MODE)//set
+ {
+ if (SYS_FAIL == atci_at_to_equal(&input))
+ {
+ lynq_response_error();
+ return ;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&input, &connman_cmd1))
+ {
+ lynq_response_error();
+ return ;
+ }
+ if (SYS_FAIL == atci_at_get_next_key(&input, &connman_cmd2))
+ {
+ //lynq_response_error();
+ //return SYS_FAIL;
+ }
+ if((connman_cmd1 != NULL) && (connman_cmd2 != NULL))
+ {
+ if(!strcmp(connman_cmd1, "connmanctl enable gadget"))
+ {
+ system("connmanctl enable gadget");
+ }
+ else
+ {
+ lynq_response_error();
+ return;
+ }
+ if(!strcmp(connman_cmd2, "connmanctl tether gadget on"))
+ {
+ system("connmanctl tether gadget on");
+ }
+ else
+ {
+ lynq_response_error();
+ return;
+ }
+ lynq_response_ok();
+ }
+ if(connman_cmd2 == NULL)
+ {
+ if(!strcmp(connman_cmd1, "connmanctl disable gadget"))
+ {
+ system("connmanctl disable gadget");
+ }
+ else
+ {
+ lynq_response_error();
+ return;
+ }
+ lynq_response_ok();
+ }
+ }
+ // else if(type == AT_TEST_MODE)//list
+ // {
+ // sprintf(buf,"+MNETCALL:(0-1)");
+ // handle_output(buf, strlen(buf), Response);
+ // lynq_response_ok();
+ // }
+ // else if(type == AT_READ_MODE)//get
+ // {
+ // sprintf(buf,"+MNETCALL:%d", g_mnetcall_mode);
+ // handle_output(buf, strlen(buf), Response);
+ // lynq_response_ok();
+ // }
+ else
+ {
+ lynq_response_error();
+ }
+ return;
+}
+
+static Command commands[] =
+{
+{"at+mnetcall",lynq_handle_rndis},
+{"at+gtarndis",lynq_handle_rndis_configure},
+{"at+cgir",lynq_handle_version},
+{"at+lgmds",lynq_handle_modem_status},
+{"at+lrndishandle",lynq_tmp_handle_rndis},//tmp plan
+{NULL, NULL}
+};
+
+Command* find_command (char *input)
+{
+ RLOGD("function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ int i;
+ int ret = -1;
+ for (i = 0; commands[i].cmd; i++)
+ {
+ ret = strcmp(input, commands[i].cmd);
+ if(ret == 0)
+ {
+ RLOGD("function %s line %d find input %s commands[i].cmd %s strlen %d ret %d\n", __FUNCTION__, __LINE__, input, commands[i].cmd, strlen(commands[i].cmd), ret);
+ return (&commands[i]);
+ }
+ }
+ RLOGD("function %s line %d not find ret %d \n", __FUNCTION__, __LINE__, ret);
+ return ((Command *)NULL);
+}
+
+void lynq_at_common_cb(char *input, int input_max_size)
+{
+ if(handle_output != NULL)
+ {
+ RLOGD("function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ if(input != NULL)
+ {
+ char *prefix = NULL;
+ prefix = atci_get_cmd_prefix(input);
+ if (NULL == prefix) {
+ RLOGD("atci_cut_cmd_prefix error");
+ return;
+ }
+ RLOGD("find prefix [%s]", prefix);
+ Command *cmd = find_command(prefix);
+ if(cmd != NULL)
+ {
+ int cmd_mode = atci_get_cmd_mode(input);
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ (*(cmd->func))(input,cmd_mode);
+ free(prefix);
+ return;
+ }
+ else
+ {
+ RLOGD("not find prefix in list");
+ }
+ free(prefix);
+ }
+ }
+}
+
+lynq_atsvc_incb lynq_register_at_common(lynq_atsvc_outcb out_cb)
+{
+ if(out_cb != NULL)
+ {
+ handle_output = out_cb;
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ return lynq_at_common_cb;
+ }
+}
diff --git a/src/lynq/lib/liblynq-at-common/makefile b/src/lynq/lib/liblynq-at-common/makefile
new file mode 100755
index 0000000..3f9f757
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-common/makefile
@@ -0,0 +1,72 @@
+
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+ -std=gnu++14 \
+ -g -Os \
+ -flto \
+ -DRIL_SHLIB \
+ -DATCI_PARSE \
+ -fPIC \
+ -DKEEP_ALIVE \
+ -DECALL_SUPPORT \
+ -fpermissive \
+
+$(warning ################# lynq at factory demo ROOT: $(ROOT),includedir:$(includedir))
+LOCAL_PATH = .
+
+LOCAL_C_INCLUDES = \
+ -I. \
+ -I$(LOCAL_PATH)/include/libat \
+ -I$(ROOT)$(includedir)/logger \
+ -I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/vendor-ril \
+
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -lstdc++ \
+ -llog \
+ -lcutils \
+ -lutils \
+ -lbinder \
+ -lpthread \
+
+
+SOURCES = $(wildcard *.cpp)
+
+EXECUTABLE = liblynq-at-common.so
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+.PHONY: build clean install pack_rootfs
+
+all: build
+$(EXECUTABLE): $(OBJECTS)
+ $(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.cpp
+ $(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+build: $(EXECUTABLE)
+ $(warning ########## build $(EXECUTABLE) ##########)
+
+install:
+ mkdir -p $(ROOT)$(base_libdir)/
+ install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+ mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk
+
+pack_rootfs:
+ mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)
+ mkdir -p $(PACK_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
+
+.PHONY: clean
+clean:
+ $(RM) $(OBJECTS) $(EXECUTABLE)
+ -find . -name "*.o" -delete
diff --git a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
index 1a17fe9..0049eb1 100755
--- a/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
+++ b/src/lynq/lib/liblynq-at-extension/include/lib_at/lynq_at.h
@@ -10,9 +10,9 @@
#ifndef __LYNQ_AT__
#define __LYNQ_AT__
-#ifdef __cplusplus
-extern "C" {
-#endif
+//#ifdef __cplusplus
+//extern "C" {
+//#endif
/**
* @brief
@@ -31,8 +31,8 @@
*/
int lynq_reg_third_at(const char *ext_at, LYNQ_AT_CALLBACK callback);
-#ifdef __cplusplus
-}
-#endif
+//#ifdef __cplusplus
+//}
+//#endif
#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
index a7c6b2e..8785310 100755
--- a/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
+++ b/src/lynq/lib/liblynq-at-extension/lynq_at.cpp
@@ -1,20 +1,25 @@
-#include<sys/types.h>
-#include<sys/socket.h>
-#include<unistd.h>
-#include<arpa/inet.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <unistd.h>
+#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <log/log.h>
#include <pthread.h>
+#include <errno.h>
#include "liblog/lynq_deflog.h"
#include "include/lib_at/lynq_at.h"
#define LYNQ_AT_SERVICE_PORT 8087
#define OUT_MAX_SIZE 1024
#define USER_LOG_TAG "LYNQ_AT"
-
+#define AT_EXTERSION_SOCKET_NAME "/dev/socket/lynq_atsvc_socket_1"
+#define LINE __LINE__
+#define FUNC __FUNCTION__
+static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;
typedef enum
{
A_SUCCESS = 0,
@@ -28,8 +33,15 @@
char *output = NULL;
char buffer_at[OUT_MAX_SIZE] = {0};
struct sockaddr_in addr_serv;
+struct sockaddr_un addr_server;
+
+
socklen_t len;
LYNQ_AT_CALLBACK tmp = NULL;
+bool connect_state = false;
+#define SOCKET_ZERO 0
+#define SOCKET_SUCC 1
+#define SOCKET_FAIL -1
/**
* @brief Catch exceptions and free malloc's memory
@@ -66,6 +78,84 @@
}
}
+
+int socket_local_client (char* name) {
+ //struct sockaddr_un server;
+ //int fd = 0;
+ LYINFLOG("[%d][%s] enter",LINE,FUNC);
+ sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sockfd < 0)
+ {
+ LYDBGLOG("Can't open stream socket (%s)", name);
+ return -1;
+ }
+ addr_server.sun_family = AF_UNIX;
+ memset(addr_server.sun_path, '\0', sizeof(addr_server.sun_path));
+ strncpy(addr_server.sun_path, name, sizeof(addr_server.sun_path) - 1);
+ if (connect(sockfd, (struct sockaddr *) &addr_server, sizeof(struct sockaddr_un)) < 0)
+ {
+ close(sockfd);
+ LYDBGLOG("Can't connect to server side, path: %s, errno:%d", name, errno);
+ return -1;
+ }
+ LYINFLOG("[%d][%s] connect %s success",LINE,FUNC,name);
+ return sockfd;
+}
+bool send_msg_to_service(int fd,char *msg,int size)
+{
+ LYDBGLOG("[%d][%s] enter",LINE,FUNC);
+ if (fd < 0)
+ {
+ LYDBGLOG("fd invalid when send to atci service. errno = %d", errno);
+ return false;
+ }
+ if(NULL == msg)
+ {
+ LYDBGLOG("atcmd is null.");
+ return false;
+ }
+ int sendLen = send(fd, msg, size, 0);
+ if (sendLen != size)
+ {
+ LYDBGLOG("lose data when send to atci service. errno = %d", errno);
+ return false;
+ }
+ LYDBGLOG("send to app demo: %s", msg);
+ return true;
+}
+
+int atsvc_cmd_recv(int fd, char *buf, int len)
+{
+ int ret = 0;
+ fd_set rfds;
+ //FD_CLR(fd, &rfds);
+ FD_SET(fd, &rfds);
+ ret = select(fd + 1, &rfds, NULL, NULL, NULL);
+ if (ret <= 0)
+ {
+ LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_FAIL;
+ }
+ if (FD_ISSET(fd, &rfds))
+ {
+ ret = recv(fd, buf, len, 0);
+ if (ret < 0)
+ {
+ LYDBGLOG("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_FAIL;
+ }
+ else if(ret == 0)
+ {
+ LYDBGLOG("acti_cmd_recv recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_ZERO;
+ }
+ else
+ {
+ //buf[ret] = '\0';
+ }
+ }
+ return SOCKET_SUCC;
+}
/**
* @brief send third cmd to service and receive input,then send output to service
*
@@ -74,53 +164,73 @@
*/
void *thread_recv(void *parm)
{
- signal(SIGPIPE, signal_handler);
- signal(SIGABRT, signal_handler);
- signal(SIGBUS, signal_handler);
- signal(SIGFPE, signal_handler);
- signal(SIGILL, signal_handler);
- signal(SIGSEGV, signal_handler);
+ //signal(SIGPIPE, signal_handler);
+ //signal(SIGABRT, signal_handler);
+ //signal(SIGBUS, signal_handler);
+ //signal(SIGFPE, signal_handler);
+ //signal(SIGILL, signal_handler);
+ //signal(SIGSEGV, signal_handler);
+ LYINFLOG("[%d][%s] enter",LINE,FUNC);
int recv = 0;
int send = 0;
char at_cmd[100] = {0};
- sockfd=socket(AF_INET,SOCK_DGRAM,0);
- memset(&addr_serv, 0, sizeof(addr_serv));
- addr_serv.sin_family =AF_INET;
- addr_serv.sin_port =htons(LYNQ_AT_SERVICE_PORT);
- addr_serv.sin_addr.s_addr = htonl(INADDR_ANY);
- len=sizeof(addr_serv);
- int len_buf = strlen(buffer_at);
- send = sendto(sockfd, buffer_at, len_buf,0,(struct sockaddr*)&addr_serv,len);
- if(send < 0)
+ int fd = -1;
+ int ret = 0;
+ fd = socket_local_client(AT_EXTERSION_SOCKET_NAME);
+ if(fd <= 0)
{
- LYDBGLOG("thread_recv send fail\n");
- result = send;
+ connect_state = false;
+ pthread_mutex_unlock(&s_startupMutex);
return NULL;
}
+ int len_buf = strlen(buffer_at);
+ if(!send_msg_to_service(fd,buffer_at,len_buf))
+ {
+ connect_state = false;
+ pthread_mutex_unlock(&s_startupMutex);
+ return NULL;
+ }
+ connect_state = true;
+ pthread_mutex_unlock(&s_startupMutex);
char *input = NULL;
output = (char *)malloc(sizeof(char)*OUT_MAX_SIZE);
if(NULL == output)
{
LYDBGLOG("thread_recv malloc fail\n");
- result = A_ERROR;
return NULL;
}
+ TryNewLink:
+ if(connect_state == false)
+ {
+ if (connect(fd, (struct sockaddr *) &addr_server, sizeof(struct sockaddr_un)) < 0)
+ {
+ close(fd);
+ LYDBGLOG("Can't connect to server side, path: %s, errno:%d", AT_EXTERSION_SOCKET_NAME, errno);
+ return NULL;
+ }
+ connect_state = true;
+ }
while (1)
{
/*receive at cmd*/
- LYDBGLOG("lynq_reg_third_at receive at cmd\n");
- recv = recvfrom(sockfd,at_cmd,sizeof(at_cmd),0,(struct sockaddr*)&addr_serv,&len);
- if(recv < 0)
+ memset(at_cmd, 0, sizeof(at_cmd));
+ ret = atsvc_cmd_recv(fd, at_cmd,sizeof(at_cmd));
+ if (ret < 0)
{
- LYDBGLOG("thread_recv recv fail\n");
+ LYDBGLOG("[%d][%s]receive CMD error",LINE,FUNC);
continue;
}
+ else if(ret == SOCKET_ZERO)
+ {
+ ALOGE("maybe client socket closed 1. retry new link!");
+ connect_state = false;
+ goto TryNewLink;
+ }
input = at_cmd;
//begin deal with callback
tmp(input, output, OUT_MAX_SIZE);
LYDBGLOG("lynq_reg_third_at send output to service\n");
- send = sendto(sockfd, output, strlen(output),0,(struct sockaddr*)&addr_serv,len);
- if(send < 0)
+ if(!send_msg_to_service(fd,output, strlen(output)))
{
LYDBGLOG("thread_recv send fail\n");
continue;
@@ -128,9 +238,9 @@
}
free(output);
output = NULL;
- if(sockfd != 0)
+ if(fd != 0)
{
- close(sockfd);
+ close(fd);
}
return NULL;
}
@@ -142,11 +252,15 @@
*/
int lynq_connect_service_start(void)
{
+ LYINFLOG("[%d][%s] enter",LINE,FUNC);
pthread_t lynq_at_tid = -1;
int rt = pthread_create(&lynq_at_tid, NULL, thread_recv, NULL);
- if(rt < 0)
+ pthread_mutex_lock(&s_startupMutex);
+ LYINFLOG("[%d][%s] pthread mutex unlock",LINE,FUNC);
+ LYINFLOG(",rt:%d,connect state:%d\n",rt,connect_state);
+ if((connect_state != true) && rt < 0)
{
- LYERRLOG("urc loop failure!!!\n");
+ LYERRLOG("connect fail,rt:%d,connect state:%d\n",rt,connect_state);
return -1;
}
return 0;
@@ -166,15 +280,17 @@
}
memcpy(buffer_at, ext_at, strlen(ext_at));
tmp = callback;
- LYLOGSET(LOG_INFO);
+ LYLOGSET(LOG_DEBUG);
LYLOGEINIT(USER_LOG_TAG);
LYDBGLOG("lynq_reg_third_at start\n");
int ret = lynq_connect_service_start();
+
if(ret != 0)
{
LYDBGLOG("lynq_connect_service_start start failed\n");
return A_ERROR;
}
- return result;
+ LYDBGLOG("lynq_connect_service_start success ret:%d\n",ret);
+ return A_SUCCESS;
}
diff --git a/src/lynq/lib/liblynq-at-extension/makefile b/src/lynq/lib/liblynq-at-extension/makefile
index 0a6c2d3..257de29 100755
--- a/src/lynq/lib/liblynq-at-extension/makefile
+++ b/src/lynq/lib/liblynq-at-extension/makefile
@@ -6,10 +6,7 @@
-g -Os \
-flto \
-DRIL_SHLIB \
- -DATCI_PARSE \
-fPIC \
- -DKEEP_ALIVE \
- -DECALL_SUPPORT \
-fpermissive \
@@ -19,6 +16,7 @@
LOCAL_C_INCLUDES = \
-I. \
+ -I$(ROOT)/usr/include/binder \
-I$(LOCAL_PATH)/include/lib_at \
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
@@ -31,6 +29,7 @@
-llog \
-lpthread \
-llynq-log \
+ -lbinder \
SOURCES = $(wildcard *.cpp)
diff --git a/src/lynq/lib/liblynq-at-factory/LICENSE b/src/lynq/lib/liblynq-at-factory/LICENSE
new file mode 100755
index 0000000..382fc78
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-factory/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("Mobiletek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to Mobiletek Inc. and/or its licensors. Without
+the prior written permission of Mobiletek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of Mobiletek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+Mobiletek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("Mobiletek SOFTWARE")
+RECEIVED FROM Mobiletek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. Mobiletek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES Mobiletek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE Mobiletek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN Mobiletek
+SOFTWARE. Mobiletek SHALL ALSO NOT BE RESPONSIBLE FOR ANY Mobiletek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND Mobiletek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE Mobiletek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT Mobiletek'S OPTION, TO REVISE OR REPLACE THE
+Mobiletek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO Mobiletek FOR SUCH Mobiletek SOFTWARE AT ISSUE.
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-factory/include/libat/lynq_at_factory.h b/src/lynq/lib/liblynq-at-factory/include/libat/lynq_at_factory.h
new file mode 100755
index 0000000..b90270c
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-factory/include/libat/lynq_at_factory.h
@@ -0,0 +1,23 @@
+/*=============================================================================
+# FileName: lynq_at_factory.h
+# Desc: about at of factory
+# Author: lei
+# Version: V1.0
+# LastChange: 2022-12-14
+# History:
+ copyright:Mobiletek
+=============================================================================*/
+#ifndef LYNQ_AT_FACTORY_H
+#define LYNQ_AT_FACTORY_H 1
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void ( *lynq_atsvc_incb )( const char *input,const int length);
+typedef void ( *lynq_atsvc_outcb )(char *output, int out_max_size, int mode);
+lynq_atsvc_incb lynq_register_at_factory(lynq_atsvc_outcb out_cb);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
new file mode 100755
index 0000000..3f1bfa9
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-factory/lynq_at_factory.cpp
@@ -0,0 +1,489 @@
+
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include <liblog/lynq_deflog.h>
+#include "include/libat/lynq_at_factory.h"
+
+#define FACTORY_STRING "AT+LYNQFACTORY="
+#define USER_LOG_TAG "AT_FACTORY"
+
+#undef LOG_TAG
+#define LOG_TAG "AT_FACTORY"
+
+static const char *usb3_speed = "super-speed";
+static const char *usb2_speed = "high-speed";
+
+lynq_atsvc_outcb handle_output;
+
+typedef struct
+{
+ char *cmd;
+ void (*func)(char *input);
+}Command;
+
+enum
+{
+ Response = 0,
+ Urc
+};
+
+void lynq_handle_adc(char *input)
+{
+ FILE *fp;
+ char lynq_adc_dev[126] = {0};
+ char lynq_adc_buf[32] = {0};
+ int lynq_adc_num = atoi(input+4);
+ char flag[64] = {0};
+ if(lynq_adc_num == 0)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device1/in_voltage0_input 2>&1");
+ }
+ else if(lynq_adc_num == 1)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device1/in_voltage1_input 2>&1");
+ }
+ else if(lynq_adc_num == 2)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device1/in_voltage2_input 2>&1");
+ }
+ else if(lynq_adc_num == 3)
+ {
+ sprintf(lynq_adc_dev,"cat /sys/bus/iio/devices/iio:device1/in_voltage3_input 2>&1");
+ }
+ fp=popen(lynq_adc_dev, "r");
+ fgets(lynq_adc_buf,sizeof(lynq_adc_buf),fp);
+ sprintf(flag,"%s %s", "ADC:", lynq_adc_buf);
+ if(handle_output != NULL)
+ {
+ handle_output(flag, strlen(flag), Response);
+ }
+ pclose(fp);
+}
+
+void lynq_handle_sink(char *input)
+{
+ FILE *fp;
+ char lynq_usb_dev[512] = {0};
+ char lynq_usb_buf[512] = {0};
+ char buf[512] = {0};
+ int sink[3][3] = {{255,0,0},{0,255,0},{0,0,255}};
+ char dev_buf[][40]={{"green:cellular-radio/brightness"},{"green:cellular-quality/brightness"},{"red:system/brightness"}};
+ int i;
+ int j;
+ int k = 15;
+ char flag_buf[64] = {0};
+ for(i = 0;i < 3;i++){
+ bzero(flag_buf, 64);
+ bzero(lynq_usb_buf, 512);
+ bzero(buf, 512);
+ k = 15;
+ for(j = 0;j < 3;j++){
+ bzero(lynq_usb_dev, 512);
+ sprintf(lynq_usb_dev,"echo %d > /sys/class/leds/led95%d:%s 2>&1", sink[i][j], k++, dev_buf[j]);
+ fp=popen(lynq_usb_dev, "r");
+ }
+ usleep(10000);
+ sprintf(lynq_usb_buf,"cat /sys/bus/iio/devices/iio:device1/in_voltage4_input 2>&1");
+ fp=popen(lynq_usb_buf, "r");
+
+ fgets(buf, sizeof(buf), fp);
+ sprintf(flag_buf, "%s%d%s%s%s", "SINK[", i+1, "]: ", buf, "\n");
+ handle_output(flag_buf, strlen(flag_buf), Response);
+ }
+ pclose(fp);
+}
+
+void lynq_handle_emmc(char *input)
+{
+ 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){
+ char *str = "\n+CME: POPEN ERROR\n";
+ handle_output(str, strlen(str), Response);
+ return;
+ }
+ while(fgets(buf, sizeof(buf), fp) != NULL){
+ char *str = "+EMMC: OK \n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+ return;
+ }
+ char *str = "\033[47;31m+EMMC: ERROR\033[0m\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+}
+
+void lynq_handle_gpio(char *input)
+{
+ FILE *fp;
+ int lynq_gpio_arr[85] = {230,231,232,233,234,102,104,103,101,186 ,188 ,187 ,185 ,194 ,196 ,195 ,193 ,205 ,204 ,203 ,202, 201 ,190 ,192 ,191 ,189 ,173 ,174 ,175 ,176 ,170 ,169 ,184 ,183 ,182 ,181 ,24 ,25 ,157 ,158 ,155 ,156 ,143 ,144 ,140 ,141 ,153 ,154 ,180 ,179 ,29 ,30 ,178, 177, 7 ,5 ,4 ,113 ,112, 116 ,115 ,114, 107, 108, 105, 106, 100 ,99 ,98, 97, 94, 93, 92, 91, 1 ,130 ,41 ,67 ,69, 68, 63, 22, 23, 199, 200};
+ 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 < 85; 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 < 85; 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 006");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+ if(lynq_get_gpio_state[7] == '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 006");
+ fp=popen(lynq_set_gpio_arr, "r");
+ bzero(lynq_get_gpio_state, 512);
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+ if(lynq_get_gpio_state[7] == '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]);
+ handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
+ }
+ else
+ {
+ sprintf(lynq_show_gpio_state,"gpio%d\n",(char *)lynq_gpio_arr[i]);
+ handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
+ }
+ }
+ if(lynq_gpio_beta_state == 1)
+ {
+ sprintf(lynq_show_gpio_state,"[gpio][result]:PASS \n");
+ handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
+ }
+}
+
+void lynq_handle_pcie(char *input)
+{
+ FILE *fp;
+ char lynq_usb_dev[128] = {0};
+ char lynq_get_gpio_state[512] = {0};
+ sprintf(lynq_usb_dev,"cat sys/devices/platform/10005000.pinctrl/mt_gpio |grep 097 2>&1");
+ fp=popen(lynq_usb_dev, "r");
+ fgets(lynq_get_gpio_state,sizeof(lynq_get_gpio_state),fp);
+ pclose(fp);
+ if(lynq_get_gpio_state[6] == '1')
+ {
+ char *str = "+PCIE: OK\n";
+ handle_output(str, strlen(str), Response);
+ }
+ else
+ {
+ char *str = "+PCIE: ERROR\n";
+ handle_output(str, strlen(str), Response);
+ }
+}
+
+void lynq_handle_rgmii(char *input)
+{
+ char *ipv4 = input+6;
+ char cmd[128] = {0};
+ FILE *fp;
+ sprintf(cmd, "%s %s %s %s", "ping -I eth2", ipv4, "-c4", "2>&1");
+ fp=popen(cmd, "r");
+ if(NULL == fp){
+ char *str = "popen errorn\n";
+ handle_output(str, strlen(str), Response);
+ }
+ char lynq_factory_buf[1024] = {0};
+ while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
+ {
+ if(strstr(lynq_factory_buf, "Usage"))
+ {
+ char *str = "RGMII cannot recognize IP addresses\nERROR\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+ }
+ handle_output(lynq_factory_buf, strlen(lynq_factory_buf), Response);
+ }
+ char *str = "OK\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+}
+
+void lynq_handle_sgmii(char *input)
+{
+ char *ipv4 = input+6;
+ char cmd[128] = {0};
+ FILE *fp;
+ sprintf(cmd, "%s %s %s %s", "ping -I eth1", ipv4, "-c4", "2>&1");
+ fp=popen(cmd, "r");
+ if(NULL == fp){
+ char *str = "popen errorn\n";
+ handle_output(str, strlen(str), Response);
+ }
+ char lynq_factory_buf[1024] = {0};
+ while (NULL != fgets(lynq_factory_buf,sizeof(lynq_factory_buf),fp))
+ {
+ if(strstr(lynq_factory_buf, "Usage"))
+ {
+ char *str = "RGMII cannot recognize IP addresses\nERROR\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+ }
+ handle_output(lynq_factory_buf, strlen(lynq_factory_buf), Response);
+ }
+ char *str = "OK\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+}
+
+void lynq_handle_inside_version(char *input)
+{
+ FILE *fp;
+ char buf[64] = {0};
+ fp=popen("uci get lynq_uci_ro.lynq_version.LYNQ_SW_INSIDE_VERSION 2>&1", "r");
+ if(NULL == fp){
+ char *str = "popen errorn\n";
+ handle_output(str, strlen(str), Response);
+ }
+ fgets(buf, sizeof(buf), fp);
+ handle_output(buf, strlen(buf), Response);
+ char *str = "OK\n";
+ handle_output(str, strlen(str), Response);
+ pclose(fp);
+}
+
+void lynq_handle_usb(char *input)
+{
+ 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/11201000.usb/udc/11201000.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)))
+ {
+ char *res = "[usb][result],3.0";
+ handle_output(res, strlen(res), Response);
+ char *str = "OK\n";
+ handle_output(str, strlen(str), Response);
+ }
+ else if(!strncmp(lynq_usb_buf,usb2_speed,strlen(usb2_speed)))
+ {
+ char *res = "[usb][result],2.0";
+ handle_output(res, strlen(res), Response);
+ char *str = "OK\n";
+ handle_output(str, strlen(str), Response);
+ }
+ pclose(fp);
+ return 1;
+}
+
+
+static Command commands[] =
+{
+{"adc",lynq_handle_adc},
+{"sink",lynq_handle_sink},
+{"emmc",lynq_handle_emmc},
+{"gpio",lynq_handle_gpio},
+{"pcie",lynq_handle_pcie},
+{"rgmii",lynq_handle_rgmii},
+{"sgmii",lynq_handle_sgmii},
+{"usb",lynq_handle_usb},
+{NULL, NULL}
+};
+
+Command* find_command (char *input)
+{
+ RLOGD("function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ int i;
+ int ret = -1;
+ for (i = 0; commands[i].cmd; i++)
+ {
+ ret = strncmp(input, commands[i].cmd, strlen(commands[i].cmd));
+ if(ret == 0)
+ {
+ RLOGD("function %s line %d find input %s commands[i].cmd %s strlen %d ret %d\n", __FUNCTION__, __LINE__, input, commands[i].cmd, strlen(commands[i].cmd), ret);
+ return (&commands[i]);
+ }
+ }
+ RLOGD("function %s line %d not find ret %d \n", __FUNCTION__, __LINE__, ret);
+ return ((Command *)NULL);
+}
+
+/*
+int g_number(const char *p){
+ int cnt = 0;
+ while(*p != '\0'){
+ if(*p == ','){
+ cnt++;
+ }
+ *p++;
+ }
+ return cnt+4;//for count character string
+
+}
+
+void lynqSetArgv(char **argv, char** Point,const char* value)
+{
+ *argv=*Point;
+ sprintf(*argv, "%s", value);
+ (*Point) += (strlen(value)+1);
+}
+
+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;
+ if(strstr(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
+ {
+ argv[0] = token;
+ }
+ }
+ 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, ",");
+ }
+ }
+ if(cnt > maxArgc)
+ return -1;
+ return cnt;
+}
+*/
+
+
+
+void lynq_at_factory_cb(char *input, int input_max_size)
+{
+ if(handle_output != NULL)
+ {
+ RLOGD("function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+ if(input != NULL)
+ {
+ char *handle_string = input + strlen(FACTORY_STRING);
+ if(!strlen(handle_string))
+ {
+ RLOGD("function %s line %d strlen %d\n", __FUNCTION__, __LINE__, strlen(handle_string));
+ return;
+ }
+ RLOGD("function %s line %d handle_string %s\n", __FUNCTION__, __LINE__, handle_string);
+ Command *cmd = find_command(handle_string);
+ if(cmd != NULL)
+ {
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ (*(cmd->func))(handle_string);
+ return;
+ }
+ }
+ }
+}
+
+lynq_atsvc_incb lynq_register_at_factory(lynq_atsvc_outcb out_cb)
+{
+ if(out_cb != NULL)
+ {
+ handle_output = out_cb;
+ RLOGD("function %s line %d\n", __FUNCTION__, __LINE__);
+ return lynq_at_factory_cb;
+ }
+}
diff --git a/src/lynq/lib/liblynq-at-factory/makefile b/src/lynq/lib/liblynq-at-factory/makefile
new file mode 100755
index 0000000..f621678
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-factory/makefile
@@ -0,0 +1,73 @@
+
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+ -std=gnu++14 \
+ -g -Os \
+ -flto \
+ -DRIL_SHLIB \
+ -DATCI_PARSE \
+ -fPIC \
+ -DKEEP_ALIVE \
+ -DECALL_SUPPORT \
+ -fpermissive \
+
+$(warning ################# lynq at factory demo ROOT: $(ROOT),includedir:$(includedir))
+LOCAL_PATH = .
+
+LOCAL_C_INCLUDES = \
+ -I. \
+ -I$(LOCAL_PATH)/include/libat \
+ -I$(ROOT)$(includedir)/logger \
+ -I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/vendor-ril \
+
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -lstdc++ \
+ -llog \
+ -lcutils \
+ -lutils \
+ -lbinder \
+ -lpthread \
+ -llynq-log \
+
+
+SOURCES = $(wildcard *.cpp)
+
+EXECUTABLE = liblynq-at-factory.so
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+.PHONY: build clean install pack_rootfs
+
+all: build
+$(EXECUTABLE): $(OBJECTS)
+ $(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.cpp
+ $(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+build: $(EXECUTABLE)
+ $(warning ########## build $(EXECUTABLE) ##########)
+
+install:
+ mkdir -p $(ROOT)$(base_libdir)/
+ install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+ mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk
+
+pack_rootfs:
+ mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)
+ mkdir -p $(PACK_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
+
+.PHONY: clean
+clean:
+ $(RM) $(OBJECTS) $(EXECUTABLE)
+ -find . -name "*.o" -delete
diff --git a/src/lynq/lib/liblynq-at-fota/LICENSE b/src/lynq/lib/liblynq-at-fota/LICENSE
new file mode 100755
index 0000000..382fc78
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-fota/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("Mobiletek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to Mobiletek Inc. and/or its licensors. Without
+the prior written permission of Mobiletek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of Mobiletek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+Mobiletek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("Mobiletek SOFTWARE")
+RECEIVED FROM Mobiletek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. Mobiletek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES Mobiletek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE Mobiletek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN Mobiletek
+SOFTWARE. Mobiletek SHALL ALSO NOT BE RESPONSIBLE FOR ANY Mobiletek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND Mobiletek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE Mobiletek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT Mobiletek'S OPTION, TO REVISE OR REPLACE THE
+Mobiletek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO Mobiletek FOR SUCH Mobiletek SOFTWARE AT ISSUE.
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-at-fota/include/libat/lynq_at_fota.h b/src/lynq/lib/liblynq-at-fota/include/libat/lynq_at_fota.h
new file mode 100755
index 0000000..dd32d26
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-fota/include/libat/lynq_at_fota.h
@@ -0,0 +1,31 @@
+/*=============================================================================
+# FileName: lynq_at_fota.h
+# Desc: about at of fota
+# Author: jb.qi
+# Version: V1.0
+# LastChange: 2023-01-09
+# History:
+ copyright:Mobiletek
+=============================================================================*/
+#ifndef __LYNQ_FOTA_H__
+#define __LYNQ_FOTA_H__ 1
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LYNQ_E_FTP_LOGIN_FAIL 9002 /*Ftp login fail*/
+#define LYNQ_E_FTP_SEND_FAIL 9003 /*Ftp send log fail*/
+#define LYNQ_E_GET_LOG_FAIL 9004 /*Get log fail*/
+#define LYNQ_E_LOG_CMD_ERROR 9005 /*cmd error*/
+
+typedef void ( *lynq_atsvc_incb )( const char *input,const int length);
+typedef void ( *lynq_atsvc_outcb )(char *output, int out_max_size, int mode);
+lynq_atsvc_incb lynq_register_fota(lynq_atsvc_outcb out_cb);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__LYNQ_LOGSEND_TEST_H__
+
diff --git a/src/lynq/lib/liblynq-at-fota/lynq_at_fota.cpp b/src/lynq/lib/liblynq-at-fota/lynq_at_fota.cpp
new file mode 100755
index 0000000..148214c
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-fota/lynq_at_fota.cpp
@@ -0,0 +1,300 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "include/libat/lynq_at_fota.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <log/log.h>
+#include "mtk_device_wrap.h"
+#include "include/iot_rock.h"
+
+#define UPDATA_ADDR "/tmp/fota.delta"
+#define READ_BLOCK_SIZE 0x40000
+#define FLASH_DEV_DELTA "/dev/mtd41"
+#define LOG_TAG "AT-FOTA"
+
+lynq_atsvc_outcb g_handle_output;
+char str[128];
+char g_buffer[128] = {0};
+int Response = 0;
+int g_lynq_fota_md5_flag = -1;
+char g_put_addr[64];
+char g_put_path[35];
+char g_cmd[128];
+
+void *deal_download()
+{
+ int ret;
+ RLOGD("start deal_download !!!\n");
+ ret = system(g_cmd);
+ RLOGD("ret:%d \n", ret);
+ if(ret != 0)
+ {
+ strcpy(str, "+FOTA: fota download fail\n");
+ g_handle_output(str, strlen(str), Response);
+ return NULL;
+ }
+ else
+ {
+ strcpy(str, "+FOTA: fota download success\n");
+ g_handle_output(str, strlen(str), Response);
+ }
+ return NULL;
+}
+
+
+int lynq_download_package(char (*string)[35])
+{
+ int ret = 0;
+ int str_num = -1;
+ pthread_t tid;
+
+ RLOGD("function %s start\n", __FUNCTION__);
+ for(int i = 0; i < 9; i++)
+ {
+ if(string[i] == NULL)
+ {
+ strcpy(str, "+FOTA: download data null\n");
+ g_handle_output(str, strlen(str), Response);
+ return 1;
+ }
+ }
+
+ if(strlen(string[9]) == 0)
+ {
+ ret = chdir("/tmp/");
+ if( 0 != ret)
+ {
+ RLOGD("/tmp/ is error\n");
+ strcpy(str, "+FOTA: the tmp is error\n");
+ g_handle_output(str, strlen(str), Response);
+ return ret;
+ }
+ strcpy(g_put_path, "/tmp/");
+ }
+ else
+ {
+ ret = chdir(string[9]);
+ if( 0 != ret)
+ {
+ RLOGD("%s is error directory \n", string[9]);
+ strcpy(str, "+FOTA: NO such directory\n");
+ g_handle_output(str, strlen(str), Response);
+ return ret;
+ }
+ strcpy(g_put_path, string[9]);
+ }
+
+ sprintf(g_cmd,"wget ftp://%s:%s@%s:%s%s%s",string[2],string[3],string[0],string[1],string[7],string[8]);
+ RLOGD("g_cmd:%s\n", g_cmd);
+ str_num = strlen(g_put_path);
+
+ if(g_put_path[str_num - 1] == '/')
+ {
+ sprintf(g_put_addr,"%s%s", g_put_path, string[8]);
+ }
+ else
+ {
+ sprintf(g_put_addr,"%s/%s", g_put_path, string[8]);
+ }
+ RLOGD("g_put_addr: %s\n", g_put_addr);
+ if(lynq_fota_set_addr_value(g_put_addr,strlen(g_put_addr)))
+ {
+ strcpy(str, "+FOTA: set fota addr fail\n");
+ g_handle_output(str, strlen(str), Response);
+ }
+
+ pthread_create(&tid,NULL,deal_download,NULL);
+ pthread_detach(tid);
+
+ return ret;
+}
+
+/*
+ * @brief Differential subcontracting MD5 check
+ *
+ * @param string:MD5 value,Subcontracting address,Refer to the fota documentation
+ */
+
+int lynq_md5_package(char (*string)[35])
+{
+ char input_md5_data[64] = {0};
+ RLOGD("function %s start\n", __FUNCTION__);
+ for(int i = 0; i < 2; i++)
+ {
+ if(string[i] == NULL)
+ {
+ strcpy(str, "+FOTA: md5 value null\n");
+ g_handle_output(str, strlen(str), Response);
+ return 1;
+ }
+ }
+
+ sprintf(input_md5_data,"%s",string[0]);
+ RLOGD("input_md5_data: %s\n", string[0]);
+ g_lynq_fota_md5_flag = lynq_md5_file_verfy(g_put_addr, input_md5_data);
+ if(g_lynq_fota_md5_flag != 0)
+ {
+ strcpy(str, "+FOTA: md5 fail\n");
+ g_handle_output(str, strlen(str), Response);
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * @brief fota
+ *
+ * @param void
+ */
+int lynq_fota_try(void)
+{
+ RLOGD("function %s start\n", __FUNCTION__);
+ if(g_lynq_fota_md5_flag == 0) //upgrade success ,device reboot ,lynq_fota_md5_flag no need to reset
+ {
+ if(0 != lynq_rock_main(1))
+ {
+ g_lynq_fota_md5_flag = -1;
+ strcpy(str, "+FOTA: update fail\n");
+ g_handle_output(str, strlen(str), Response);
+ return 1;
+ }
+ }
+ else
+ {
+ strcpy(str, "+FOTA: md5 verify fail\n");
+ g_handle_output(str, strlen(str), Response);
+ return 1;
+ }
+
+ return 0;
+}
+
+void lynq_at_fota(char (*argv)[35])
+{
+ int result;
+ RLOGD("function %s start\n", __FUNCTION__);
+ RLOGD("buffer: %s",g_buffer);
+ if(!(strcmp(argv[0], "AT+FOTA?")))
+ {
+ if(strlen(g_buffer) == 0)
+ {
+ strcpy(str, "+FOTA: OK\n");
+ }
+ else
+ {
+ sprintf(str, "+FOTA: %s\n",g_buffer);
+
+ }
+ g_handle_output(str, strlen(str), Response);
+ return ;
+ }
+ else if(!(strcmp(argv[0], "AT+FOTA=?")))
+ {
+ strcpy(str, "+FOTA:(0-2),""\n");
+ g_handle_output(str, strlen(str), Response);
+ return ;
+
+ }
+ if(!(strcmp(argv[0], "AT+FOTA=0")) || !(strcmp(argv[0], "AT+LYNQFOTA=download")))
+ {
+ RLOGD("argv[0]: %s\n", argv[0]);
+ if(!(strcmp(argv[1], "ftp")))
+ {
+ result = lynq_download_package(&argv[2]);
+ if(result != 0)
+ {
+ strcpy(str, "+FOTA: DOWNLOAD FAIL\n");
+ }
+ else
+ {
+ strcpy(str, "+FOTA: DOWNLOAD START\n");
+ }
+ }
+ else
+ {
+ strcpy(str, "+FOTA: NO FTP DOWNLOAD\n");
+ }
+ }
+
+ else if(!(strcmp(argv[0], "AT+FOTA=1")) || !(strcmp(argv[0], "AT+LYNQFOTA=md5")))
+ {
+ RLOGD("argv[0]: %s\n", argv[0]);
+ result = lynq_md5_package(&argv[1]);
+ if(result != 0)
+ {
+ strcpy(str, "+FOTA: MD5 FAIL\n");
+ }
+ else
+ {
+ strcpy(str, "+FOTA: MD5 SUCCESS\n");
+ }
+ }
+ else if(!(strcmp(argv[0], "AT+FOTA=2")) || !(strcmp(argv[0], "AT+LYNQFOTA=upgrade")))
+ {
+ RLOGD("argv[0]: %s\n", argv[0]);
+ result = lynq_fota_try();
+ if(result == 0)
+ {
+ strcpy(str, "+FOTA: UPDATE SUCCESS\n");
+ }
+ else
+ {
+ strcpy(str, "+FOTA: UPDATE FAIL\n");
+ }
+ }
+ else
+ {
+ strcpy(str, "+CME: ERROR: 100\n");
+
+ }
+ g_handle_output(str, strlen(str), Response);
+
+}
+
+void lynq_at_fota_cb(char *input, int input_max_size)
+{
+ char arry[20][35]={};
+ char *p = NULL;
+ int i = 0;
+
+ if(input[8] == '0')
+ {
+ strcpy(g_buffer, input);
+ }
+ if(g_handle_output != NULL)
+ {
+ RLOGD("function %s start,input: %s \n", __FUNCTION__, input);
+ if(input != NULL)
+ {
+ while(( p = strsep(&input,",")) != NULL)
+ {
+ strcpy(arry[i],p);
+ i++;
+ }
+ lynq_at_fota(arry);
+ }
+ }
+
+}
+
+
+lynq_atsvc_incb lynq_register_fota(lynq_atsvc_outcb out_cb)
+{
+ if(out_cb != NULL)
+ {
+ g_handle_output = out_cb;
+ RLOGD("function %s start\n", __FUNCTION__);
+ return lynq_at_fota_cb;
+ }
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
diff --git a/src/lynq/lib/liblynq-at-fota/makefile b/src/lynq/lib/liblynq-at-fota/makefile
new file mode 100755
index 0000000..4368444
--- /dev/null
+++ b/src/lynq/lib/liblynq-at-fota/makefile
@@ -0,0 +1,87 @@
+
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+ -std=gnu++14 \
+ -g -Os \
+ -flto \
+ -DRIL_SHLIB \
+ -DATCI_PARSE \
+ -fPIC \
+ -DKEEP_ALIVE \
+ -DECALL_SUPPORT \
+ -fpermissive \
+
+$(warning ################# lynq at factory demo ROOT: $(ROOT),includedir:$(includedir))
+
+ifeq ($(strip $(MOBILETEK_FOTA_CFG)), PLATFORM)
+ LOCAL_CFLAGS += -DMOBILETEK_FOTA_CFG
+endif
+
+ifeq ($(strip $(MOBILETEK_FOTA_CFG)), GSW)
+ LOCAL_CFLAGS += -DGSW_FOTA_CFG
+endif
+
+
+LOCAL_PATH = .
+
+LOCAL_C_INCLUDES = \
+ -I. \
+ -I$(LOCAL_PATH)/include/libat \
+ -I$(ROOT)$(includedir)/logger \
+ -I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/vendor-ril \
+ -I$(ROOT)$(includedir)/ftp \
+
+
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -lstdc++ \
+ -llog \
+ -lcutils \
+ -lutils \
+ -lbinder \
+ -lpthread \
+ -llynq-log \
+ -llynq-fota \
+ -llynq-protcl \
+
+
+SOURCES = $(wildcard *.cpp)
+
+EXECUTABLE = liblynq-at-fota.so
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+.PHONY: build clean install pack_rootfs
+
+all: build
+$(EXECUTABLE): $(OBJECTS)
+ $(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.cpp
+ $(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+build: $(EXECUTABLE)
+ $(warning ########## build $(EXECUTABLE) ##########)
+
+install:
+ mkdir -p $(ROOT)$(base_libdir)/
+ install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+ mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk
+
+pack_rootfs:
+ mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)
+ mkdir -p $(PACK_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
+
+.PHONY: clean
+clean:
+ $(RM) $(OBJECTS) $(EXECUTABLE)
+ -find . -name "*.o" -delete
diff --git a/src/lynq/lib/liblynq-call/LICENSE b/src/lynq/lib/liblynq-call/LICENSE
index 77f59ed..605b7ea 100755
--- a/src/lynq/lib/liblynq-call/LICENSE
+++ b/src/lynq/lib/liblynq-call/LICENSE
@@ -1,31 +1,31 @@
Copyright Statement:
-This software/firmware and related documentation ("MediaTek Software") are
+This software/firmware and related documentation ("MobileTek Software") are
protected under relevant copyright laws. The information contained herein is
-confidential and proprietary to MediaTek Inc. and/or its licensors. Without
-the prior written permission of MediaTek inc. and/or its licensors, any
-reproduction, modification, use or disclosure of MediaTek Software, and
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
information contained herein, in whole or in part, shall be strictly
prohibited.
-MediaTek Inc. (C) 2015. All rights reserved.
+MobileTek Inc. (C) 2015. All rights reserved.
BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
-THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
-RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
-ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
-NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
-INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
-OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
-SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
-STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
-ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
-RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
-MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
-CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
index b9efae9..0b1b86e 100755
--- a/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
+++ b/src/lynq/lib/liblynq-call/include/libcall/lynq_call.h
@@ -6,7 +6,7 @@
#define LYNQ_PHONE_NUMBER_MAX 32
#define INDEX_IS_NUMBER( alpha_char ) \
( ( (alpha_char >= '0') && (alpha_char <= '9') ) ? 1 : 0 )
-#define LYNQ_CALL_MAX 10
+#define LYNQ_CALL_MAX 3
#define LYNQ_CALL_FAIL_VENDOR_CAUSE 64
#define MAX_IP_LENGTH 128
#define MAX_VLAN_INFO_LENGTH 128
@@ -48,7 +48,6 @@
int lynq_call_answer();
int lynq_call_hungup(int*handle);
int lynq_call_hungup_all();
-int lynq_wait_incoming_call(int *handle);
int lynq_set_auto_answercall(const int mode);
int lynq_get_mute_mic(int *status);
int lynq_set_mute_mic(const int enable);
@@ -63,6 +62,16 @@
int lynq_switch_waiting_or_holding_and_active(void);
int lynq_hangup_waiting_or_background(void);
int lynq_hangup_foreground_resume_background(void);
+
+/*lei add for API-163/API-164 2023/1/3*/
+/**
+ * @brief wait_call_state_change
+ *
+ * @param handle call_id
+ * @return int
+ */
+int lynq_wait_call_state_change(int *handle);
+/*lei add for API-163/API-164 2023/1/3*/
/*lei add for T8TSK-17 2022/7/20*/
#ifdef ECALL_SUPPORT
diff --git a/src/lynq/lib/liblynq-call/lynq_call.cpp b/src/lynq/lib/liblynq-call/lynq_call.cpp
index 0270aa1..d1e2293 100755
--- a/src/lynq/lib/liblynq-call/lynq_call.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call.cpp
@@ -74,9 +74,9 @@
static int s_module_isDial = 0;
static pthread_mutex_t call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t call_state_change_cond = PTHREAD_COND_INITIALIZER;
-static int s_IncomingCallId = 0;
-static pthread_mutex_t s_incoming_call_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t s_incoming_call_cond = PTHREAD_COND_INITIALIZER;
+static int s_CallId = 0;
+static pthread_mutex_t s_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_call_state_change_cond = PTHREAD_COND_INITIALIZER;
static int s_module_call_state =CALL_OFF;
static int s_call_auto_answer = 0;
@@ -299,6 +299,8 @@
s_call_lists[lynq_call_id].used = 0;
memset(s_call_lists[lynq_call_id].addr,0,sizeof(s_call_lists[lynq_call_id].addr));
}
+
+
int getUnusedElement()
{
for(int i=0;i < LYNQ_CALL_MAX; i++)
@@ -329,15 +331,15 @@
callList->direction = direction;
return;
}
-int waitIncomingCall()
+
+void wait_call_state()
{
- LYINFLOG("wait incming call");
- int ret = 0;
- pthread_mutex_lock(&s_incoming_call_mutex);
- ret = pthread_cond_wait(&s_incoming_call_cond,&s_incoming_call_mutex);
- pthread_mutex_unlock(&s_incoming_call_mutex);
- return ret;
+ LYINFLOG("call state changed");
+ pthread_mutex_lock(&s_call_state_change_mutex);
+ pthread_cond_wait(&s_call_state_change_cond,&s_call_state_change_mutex);
+ pthread_mutex_unlock(&s_call_state_change_mutex);
}
+
int checkHasCall(char addr[])
{
for(int i = 0;i<LYNQ_CALL_MAX;i++)
@@ -384,18 +386,25 @@
pthread_cond_signal(&call_state_change_cond);
pthread_mutex_unlock(&call_state_change_mutex);
}
-void sendSignalIncomingCall()
+void send_call_state_change()
{
- LYINFLOG("send incoming call signal");
- pthread_mutex_lock(&s_incoming_call_mutex);
- pthread_cond_signal(&s_incoming_call_cond);
- pthread_mutex_unlock(&s_incoming_call_mutex);
+ LYINFLOG("send call state change");
+ pthread_mutex_lock(&s_call_state_change_mutex);
+ pthread_cond_signal(&s_call_state_change_cond);
+ pthread_mutex_unlock(&s_call_state_change_mutex);
}
void cleanup_call_list_mutex(void *arg)
{
pthread_mutex_unlock(&s_notice_get_call_list_mutex);
}
+
+void update_end_state(int lynq_call_id)
+{
+ LYINFLOG("update_end_state local idx is %d, id is %d",lynq_call_id,s_call_lists[lynq_call_id].call_id);
+ s_call_lists[lynq_call_id].call_state = (int)LYNQ_CALL_END;
+}
+
void *triggerGetCallList(void *parg)
{
int ret=0;
@@ -447,8 +456,11 @@
}
if(call_end == 0)
{
- LYINFLOG("MT hungup,then clean call info local idx is %d id is %d",i, s_call_lists[i].call_id);
- cleanCallList(i);
+ LYINFLOG("MT/MO hungup,then clean call info local idx is %d id is %d",i, s_call_lists[i].call_id);
+ //update_end_state(i);//lei modify for:update end state for this call
+ cleanCallList(i);
+ send_call_state_change();//means mt/mo call is end
+ //cleanCallList(i);
}
} //fix bug API-54
else
@@ -494,8 +506,8 @@
{
n = addAddr(call_list[i].addr,call_list[i].call_id);
updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);
- s_IncomingCallId = call_list[i].call_id;
- sendSignalIncomingCall();
+ s_CallId = call_list[i].call_id;
+ send_call_state_change();
}
else if(s_call_lists[n].call_state == call_list[i].call_state)
{
@@ -507,15 +519,16 @@
**fix bug API-54
*/
LYINFLOG("resend incoming call signal");
- sendSignalIncomingCall();
+ send_call_state_change();
}
}
else
{
LYINFLOG("state changed from %d to %d",s_call_lists[n].call_state,call_list[i].call_state);
- updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);
- }
+ updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);//update mt call
+ send_call_state_change();
+ }
}
else
{
@@ -527,17 +540,18 @@
{
if(s_call_lists[n].call_id==0)
{
- LYINFLOG("add a call id");
- update=1;
+ LYINFLOG("add a call id");
+ update=1;//for send sigal
+ s_CallId = call_list[i].call_id;
}
LYINFLOG("local idx %d updated, original call id is %d origial addr is %s original state is %d",n,s_call_lists[n].call_id,s_call_lists[n].addr,s_call_lists[n].call_state);
updateCallList(&s_call_lists[n],call_list[i].call_id,call_list[i].call_state,call_list[i].toa,call_list[i].direction);
call_end = 1;
+ send_call_state_change();//means mo call is success
break;
}
}
-
- if(call_end == 0)
+ if(call_end == 0)//1.there is no space to use 2.can't find addr in buffer 3.call_id not equal eg:when call is error return 8004/handle <= 0 will into this
{
LYINFLOG("need to hangup id %d", call_list[i].call_id);
#ifdef ECALL_SUPPORT
@@ -550,6 +564,7 @@
LYINFLOG("hang up service call id %d",call_list[i].call_id);
lynq_call_hungup(&(call_list[i].call_id));
}
+
}
LYDBGLOG("servie idx %d end",i);
}
@@ -751,7 +766,7 @@
g_module_Global_uToken = utoken;
- int ret = lynq_urc_socket_start();
+ int ret = lynq_start_all_urc_socket_thread();
if(ret != RESULT_OK)
{
LYERRLOG("init socket urc fail!!!");
@@ -759,11 +774,11 @@
return LYNQ_E_INNER_ERROR;
}
- ret = lynq_server_socket_start();
+ ret = lynq_start_all_rc_socket_thread();
if(ret !=RESULT_OK)
{
LYERRLOG("init socket client fail!!!");
- lynq_close_urc_thread();
+ lynq_close_all_urc_socket_thread();
g_module_init_flag = MODULE_CLOSED;
return LYNQ_E_INNER_ERROR;
}
@@ -773,8 +788,8 @@
if(ret != RESULT_OK)
{
LYERRLOG("lynq_start_call_list_loop fail!!!");
- lynq_close_urc_thread();
- lynq_close_rc_thread();
+ lynq_close_all_urc_socket_thread();
+ lynq_close_all_rc_socket_thread();
g_module_init_flag = MODULE_CLOSED;
return LYNQ_E_INNER_ERROR;
}
@@ -795,8 +810,8 @@
lynq_call_hungup_all();
lynq_set_voice_audio_mode(AUDIO_MODE_CODEC);
g_module_init_flag = MODULE_SWITCHING;
- lynq_close_urc_thread();
- lynq_close_rc_thread();
+ lynq_close_all_urc_socket_thread();
+ lynq_close_all_rc_socket_thread();
lynq_stop_call_list_loop();
g_module_init_flag = MODULE_CLOSED;
return 0;
@@ -891,6 +906,7 @@
return s_module_isDial;
}
+
int lynq_call(int* handle,char addr[])
{
if(g_module_init_flag != MODULE_RUNNING)
@@ -921,25 +937,23 @@
return LYNQ_E_ECALL_BEING_RUNNING;
}
#endif
-
Parcel* p=NULL;
lynq_call_id = addAddr(addr,0);
int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_DIAL,2,"%s %d",addr, 0);
if(ret!=0)
{
- cleanCallList(lynq_call_id);
+ cleanCallList(lynq_call_id);
return ret;
- }
-
- delete p;
-
+ }
+ delete p;
s_module_isDial = 1;
if(waitCallstateChange(6000)==ETIMEDOUT)//6000ms
{
//if timeout,this call need destroy.
s_module_isDial = 0;
LYERRLOG("lynq_call timeout:wait Call state fail!!! clear local idx %d",lynq_call_id);
- cleanCallList(lynq_call_id);
+ cleanCallList(lynq_call_id);
+ send_call_state_change();
return LYNQ_E_TIME_OUT;
}
s_module_isDial = 0;
@@ -952,10 +966,12 @@
else
{
LYERRLOG("lynq_call dial addr %s fail, invalid id",addr);
- cleanCallList(lynq_call_id);
+ cleanCallList(lynq_call_id);
+ send_call_state_change();
return LYNQ_E_INVALID_ID_ANONALY;
- }
+ }
}
+
int lynq_call_answer()
{
if(g_module_init_flag != MODULE_RUNNING)
@@ -972,6 +988,7 @@
}
return ret;
}
+
int lynq_call_hungup(int* handle)
{
if(g_module_init_flag != MODULE_RUNNING)
@@ -1018,17 +1035,18 @@
}
return ret;
}
-int lynq_wait_incoming_call(int *handle)
+
+int lynq_wait_call_state_change(int *handle)
{
if(g_module_init_flag != MODULE_RUNNING)
{
LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
return LYNQ_E_CONFLICT;
}
- waitIncomingCall();
- *handle = s_IncomingCallId;
- LYINFLOG("lynq incoming call id:%d",s_IncomingCallId);
- return RESULT_OK;
+ wait_call_state();
+ *handle = s_CallId;
+ LYINFLOG("lynq mo/mt call id:%d",s_CallId);
+ return RESULT_OK;
}
int lynq_set_auto_answercall(const int mode)
@@ -1042,6 +1060,19 @@
LYINFLOG("auto answer call mode =%d",mode);
return RESULT_OK;
}
+
+int lynq_find_already_end()
+{
+ for(int i=0;i < LYNQ_CALL_MAX; i++)
+ {
+ if(s_call_lists[i].call_state == 6)
+ {
+ return 0;
+ }
+ }
+ return INVALID_ID;
+}
+
int lynq_get_current_call_state(int *handle, int *call_state,int *toa,int *direction,char addr[])
{
if(g_module_init_flag != MODULE_RUNNING)
@@ -1056,16 +1087,26 @@
LYERRLOG("handle is NULL");
return LYNQ_E_PARAMETER_ANONALY;
}
+ LYINFLOG("lynq_get_current_call_state %d\n ", *handle);
lynq_call_id = find_call_id_with_call_id(*handle);
if(lynq_call_id==INVALID_ID)
{
- return LYNQ_E_INVALID_ID_ANONALY;
+ //find end state
+ if((*handle) >= 0)
+ {
+ *call_state = (int)LYNQ_CALL_END;
+ return RESULT_OK;
+ }
+ else
+ {
+ return LYNQ_E_INVALID_ID_ANONALY;
+ }
}
*call_state = s_call_lists[lynq_call_id].call_state;
*toa = s_call_lists[lynq_call_id].toa;
*direction = s_call_lists[lynq_call_id].direction;
memcpy(addr,s_call_lists[lynq_call_id].addr,strlen(s_call_lists[lynq_call_id].addr)+1);
- return RESULT_OK;
+ return RESULT_OK;
}
int lynq_get_current_call_number()
@@ -1389,16 +1430,36 @@
}
/*audio end*/
+
+
+bool is_support_urc(int urc_id)
+{
+ switch(urc_id)
+ {
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
+ case RIL_UNSOL_CALL_RING:
+ case RIL_UNSOL_RINGBACK_TONE:
+ case RIL_UNSOL_CALL_INFO_INDICATION:
+#ifdef ECALL_SUPPORT
+ case RIL_UNSOL_ECALL_INDICATIONS://9502
+#endif
+ return true;
+ default:
+ return false;
+ }
+}
+
void urc_msg_process(Parcel *p)
{
int resp_type;
int urcid;
int slot_id;
-
+
+ int size=p->dataSize();
p->readInt32(&resp_type);
p->readInt32(&urcid);
p->readInt32(&slot_id);
- LYINFLOG("urc id = %d, slot_id = %d",urcid,slot_id);
+ LYINFLOG("%s urc id = %d, slot_id = %d, size is %d, msg is %s",__func__, urcid,slot_id,size,requestToString(urcid));
switch (urcid)
{
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED://1001
diff --git a/src/lynq/lib/liblynq-call/lynq_call_ecall.cpp b/src/lynq/lib/liblynq-call/lynq_call_ecall.cpp
index 0c76262..d25675a 100755
--- a/src/lynq/lib/liblynq-call/lynq_call_ecall.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call_ecall.cpp
@@ -479,7 +479,7 @@
}
if(enable<0)
{
- if(enable >-100)
+ if(enable >-200)
{
goto set_ivs_end;
// lynq_set_common_request(RIL_REQUEST_ECALL_SET_IVS,1,"%d",enable);
@@ -490,7 +490,7 @@
}
else
{
- s_ecall_whether_preempt= ((-100-enable) & 0x11);
+ s_ecall_whether_preempt= ((-200-enable) & 0x11);
}
return RESULT_OK;
}
diff --git a/src/lynq/lib/liblynq-call/lynq_call_rtp.cpp b/src/lynq/lib/liblynq-call/lynq_call_rtp.cpp
index f217c25..e22b016 100755
--- a/src/lynq/lib/liblynq-call/lynq_call_rtp.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_call_rtp.cpp
@@ -84,9 +84,7 @@
system(cmd);
}
else
- {
- sprintf(cmd, "amixer -D mtk_phonecall cset name=\"Speech_on\" %d", 1);
- system(cmd);
+ {
sprintf(cmd, "amixer -D mtk_phonecall cset name=\"M2M_Speech_on\" %d", 0);
system(cmd);
sprintf(cmd, "amixer -c0 cset name=\"PCM_2_PB_CH1 DL2_CH1\" %d", 0);
@@ -97,6 +95,8 @@
system(cmd);
sprintf(cmd, "amixer -c0 cset name=\"UL2_CH2 PCM_2_CAP_CH1\" %d", 0);
system(cmd);
+ sprintf(cmd, "amixer -D mtk_phonecall cset name=\"Speech_on\" %d", 1);
+ system(cmd);
}
}
diff --git a/src/lynq/lib/liblynq-call/lynq_module_common.h b/src/lynq/lib/liblynq-call/lynq_module_common.h
index 9e70d6c..590971a 100755
--- a/src/lynq/lib/liblynq-call/lynq_module_common.h
+++ b/src/lynq/lib/liblynq-call/lynq_module_common.h
@@ -5,29 +5,31 @@
#define RESULT_ERROR (-1)
/*the same with lynq_interface.h begin*/
-#define LYNQ_REQUEST_VENDOR_BASE 8000
-#define LYNQ_URC_VENDOR_BASE 9000
-#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
-#define LYNQ_URC_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+1)
-#define LYNQ_URC_DATA_STATUS_IND (LYNQ_URC_VENDOR_BASE+2)
-#define LYNQ_URC_DATA_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+3)
-#define LYNQ_AUTO_ANSWER_CALL (LYNQ_REQUEST_VENDOR_BASE +2)
-#define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
-#define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
-#define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
-
-
-#define LYNQ_REQUEST_WRITE_SMS_TO_MEMORY (LYNQ_REQUEST_VENDOR_BASE +4)
-#define LYNQ_REQUEST_READ_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 5)
-#define LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 6)
-#define LYNQ_REQUEST_LIST_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 7)
-#define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL (LYNQ_REQUEST_VENDOR_BASE + 8)
-
-#define LYNQ_REQUEST_SET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +9)
-#define LYNQ_REQUEST_GET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +10)
-#define LYNQ_REQUEST_RECORD (LYNQ_REQUEST_VENDOR_BASE +11)
-#define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
+#define LYNQ_REQUEST_VENDOR_BASE 8000
+#define LYNQ_URC_VENDOR_BASE 9000
+#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
+#define LYNQ_URC_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+1)
+#define LYNQ_URC_DATA_STATUS_IND (LYNQ_URC_VENDOR_BASE+2)
+#define LYNQ_URC_DATA_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+3)
+#define LYNQ_AUTO_ANSWER_CALL (LYNQ_REQUEST_VENDOR_BASE +2)
+#define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
+#define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
+#define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
+
+
+#define LYNQ_REQUEST_WRITE_SMS_TO_MEMORY (LYNQ_REQUEST_VENDOR_BASE +4)
+#define LYNQ_REQUEST_READ_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 5)
+#define LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 6)
+#define LYNQ_REQUEST_LIST_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 7)
+#define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL (LYNQ_REQUEST_VENDOR_BASE + 8)
+
+#define LYNQ_REQUEST_SET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +9)
+#define LYNQ_REQUEST_GET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +10)
+#define LYNQ_REQUEST_RECORD (LYNQ_REQUEST_VENDOR_BASE +11)
+#define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
#define LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +13)
+#define LYNQ_REQUEST_CHANGE_SCREEN_STATE (LYNQ_REQUEST_VENDOR_BASE + 14)/*jb.qi add for two sim suspend 2022/9/19*/
+#define LYNQ_REQUEST_CHANGE_RADIO (LYNQ_REQUEST_VENDOR_BASE + 15)
/*the same with lynq_interface.h end*/
typedef enum{
diff --git a/src/lynq/lib/liblynq-call/lynq_module_socket.cpp b/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
index 71862a8..ff45c02 100755
--- a/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-call/lynq_module_socket.cpp
@@ -15,6 +15,7 @@
#include "lynq_module_common.h"
#include "lynq_module_socket.h"
#include "liblog/lynq_deflog.h"
+#include "lynq_shm.h"
#define LYNQ_SERVICE_PORT 8088
#define LYNQ_ADDRESS "127.0.0.1"
@@ -40,6 +41,11 @@
int error;
}lynq_resp_t;
+typedef struct{
+ int resp_type;
+ int urcid;
+}lynq_head_t;
+
lynq_client_t client_t;
lynq_resp_t response;
@@ -67,6 +73,21 @@
const int waitResponse(int token,int time_out);
/*hq add for set waiting time 2022/09/13 end*/
+/*hq add for urc process asynchronous 2022/12/26 begin*/
+static pthread_mutex_t s_ProcessUrcMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_WaitProcessUrcMsgCond = PTHREAD_COND_INITIALIZER;
+
+#define BLOCK_PROCESS_URC_MSG_INIT() pthread_mutex_init(&s_ProcessUrcMsgBlockMutex,NULL)
+#define BLOCK_PROCESS_URC_MSG_LOCK() pthread_mutex_lock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_PROCESS_URC_MSG_UNLOCK() pthread_mutex_unlock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAIT_PROCESS_URC_MSG() pthread_cond_wait(&s_WaitProcessUrcMsgCond, &s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAKEUP_PROCESS_URC_MSG() pthread_cond_broadcast(&s_WaitProcessUrcMsgCond)
+static std::list<Parcel*> s_recv_urc_parcel_list;
+void *thread_urc_process(void *p);
+pthread_t module_urc_process_tid = -1;
+int module_urc_process_status = 1;
+/*hq add for urc process asynchronous 2022/12/26 end*/
+
int g_module_Global_uToken = 0;
int g_wait_time=5;
@@ -118,7 +139,7 @@
std::list<Parcel*>::iterator iter;
int cnt=0;
- gettimeofday(&now,NULL);
+ gettimeofday(&now,NULL);
timeout.tv_sec = now.tv_sec+time_out; //timeout is 1min
timeout.tv_nsec = now.tv_usec*1000;
@@ -268,6 +289,295 @@
return ret;
}
+/*hq add for urc broadcase optimisson 2023/01/03 begin*/
+#define SHM_BUFFER_INDEX_OFFSET 1
+#define SHM_BUFFER_SIZE_OFFSET 16
+#define SHM_BUFFER_INDEX_MASK 0x0000007F
+#define SHM_BUFFER_SIZE_MASK 0x0000FFFF
+
+bool urc_data_is_in_shm_data(int responseType,int& level, int& index, int& size)
+{
+ int shm_index=((responseType>>SHM_BUFFER_INDEX_OFFSET)&SHM_BUFFER_INDEX_MASK);
+ if (shm_index>0)
+ {
+ index=shm_index-1;
+ size=((responseType>>SHM_BUFFER_SIZE_OFFSET)&SHM_BUFFER_SIZE_MASK);
+ if(size>=sizeof(int32_t)*3 && get_shem_buffer_level(size,&level))
+ {
+ LYINFLOG("urc_data_is_in_shm_data level is %d, index is %d size is %d",level,index,size);
+ return true;
+ }
+ }
+ LYINFLOG("urc_data_is_in_shm_data return false, responseType is %d",responseType);
+ return false;
+}
+/*hq add for urc broadcase optimisson 2023/01/03 end*/
+
+void *thread_urc_recv(void *p)
+{
+ Parcel *urc_p =NULL;
+ char urc_data[LYNQ_REC_BUF];
+ int res = 0;
+ lynq_head_t* phead;
+ int level,index,size;
+ uint8_t * shm_buffer;
+
+ LYINFLOG("urc recv thread is running");
+ while(module_urc_status)
+ {
+ bzero(urc_data,LYNQ_REC_BUF);
+ res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
+ if(res<sizeof(int32_t)*2)
+ {
+ LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
+ continue;
+ }
+
+ phead=(lynq_head_t*) urc_data;
+ if(is_support_urc(phead->urcid)==false)
+ {
+ continue;
+ }
+ urc_p = new Parcel();
+ if(urc_p == NULL)
+ {
+ LYERRLOG("new parcel failure!!!");
+ continue;
+ }
+ if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
+ {
+ shm_buffer = (uint8_t *) get_shem_buffer(level,index);
+ LYINFLOG("shm pointer is %p", shm_buffer);
+ urc_p->setData(shm_buffer,size); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else if(res>=sizeof(int32_t)*3)
+ {
+ urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else
+ {
+ LYERRLOG("res %d error!!!", res);
+ delete urc_p;
+ urc_p = NULL;
+ continue;
+ }
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ s_recv_urc_parcel_list.push_back(urc_p);
+ BLOCK_WAKEUP_PROCESS_URC_MSG();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ }
+ else
+ {
+ delete urc_p;
+ urc_p = NULL;
+ }
+ }
+ LYINFLOG("urc recv thread ended");
+ return NULL;
+}
+
+void cleanup_urc_process_mutex(void *arg)
+{
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+}
+
+void *thread_urc_process(void *p)
+{
+ Parcel *urc_p =NULL;
+ std::list<Parcel*>::iterator iter;
+
+ LYINFLOG("urc process thread is running");
+ pthread_cleanup_push(cleanup_urc_process_mutex, NULL); // thread cleanup handler
+ while(module_urc_process_status)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ while(s_recv_urc_parcel_list.empty())
+ {
+ BLOCK_WAIT_PROCESS_URC_MSG();
+ }
+ iter=s_recv_urc_parcel_list.begin();
+ urc_p=(*iter);
+ s_recv_urc_parcel_list.erase(iter);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ pthread_mutex_lock(&s_urc_mutex);
+ urc_msg_process(urc_p);
+ pthread_mutex_unlock(&s_urc_mutex);
+ }
+ delete urc_p;
+ urc_p = NULL;
+ }
+ pthread_cleanup_pop(0);
+ LYINFLOG("urc process thread ended");
+ return NULL;
+}
+
+void lynq_close_urc_rev_thread()
+{
+ int ret;
+
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when recv from
+ module_urc_status = 0;
+ if(module_urc_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_tid);
+ LYINFLOG("pthread cancel urc rev ret = %d",ret);
+ }
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_tid != -1)
+ {
+ ret = pthread_join(module_urc_tid,NULL);
+ LYINFLOG("pthread join urc tid ret = %d",ret);
+ module_urc_tid =-1;
+ }
+}
+
+void lynq_close_urc_process_thread()
+{
+ int ret;
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when not process urc msg in list
+ pthread_mutex_lock(&s_urc_mutex); //just cancel urc process tid when not process urg msg avoid mutual lock for tid may call pthread_cond_wait
+ module_urc_process_status = 0;
+ if(module_urc_process_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_process_tid);
+ LYINFLOG("pthread cancel urc process ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_urc_mutex);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_process_tid != -1)
+ {
+ ret = pthread_join(module_urc_process_tid,NULL);
+ LYINFLOG("pthread join urc process tid ret = %d",ret);
+ module_urc_process_tid =-1;
+ }
+}
+
+int lynq_setup_urc_socket()
+{
+ int on = 1;
+ int ret = 0;
+ module_len_urc_addr_serv = sizeof(sockaddr_in);
+ module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (module_urc_sock_fd <0){
+ LYERRLOG("urc socket error");
+ return RESULT_ERROR;
+ }
+ module_urc_addr_serv.sin_family = AF_INET;
+ module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
+ module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
+ /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
+ ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
+ if(ret <0)
+ {
+ LYERRLOG("urc socket set error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));
+ if(ret <0)
+ {
+ LYERRLOG("urc socket bind error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
+}
+
+void lynq_close_urc_socket()
+{
+ if (module_urc_sock_fd >= 0)
+ {
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ }
+}
+
+int lynq_start_all_urc_socket_thread()
+{
+
+ if(ril_init_mem()!=0)
+ {
+ LYERRLOG("ril_init_mem fail");
+ return RESULT_ERROR;
+ }
+
+ int ret= lynq_setup_urc_socket();
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("call lynq_setup_urc_socket fail");
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ BLOCK_PROCESS_URC_MSG_INIT();
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ pthread_mutex_init(&s_urc_mutex, NULL);
+
+ module_urc_status = 1;
+ // pthread_attr_init(&attr);
+ // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc recv pthread create error");
+ module_urc_status = 0;
+ lynq_close_urc_socket();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ module_urc_process_status = 1;
+ ret = pthread_create(&module_urc_process_tid,/*&attr*/NULL,thread_urc_process,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc process pthread create error");
+ module_urc_process_status = 0;
+ lynq_close_urc_socket();
+ lynq_close_urc_rev_thread();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ LYINFLOG("urc start success");
+
+ return RESULT_OK;
+}
+
+void lynq_close_all_urc_socket_thread()
+{
+
+ lynq_close_urc_rev_thread();
+ lynq_close_urc_socket();
+ lynq_close_urc_process_thread();
+
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ ril_deinit_mem();
+}
+
/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread
* @param p [IN]: no meaning
* @return
@@ -347,44 +657,7 @@
return NULL;
}
-void *thread_urc_recv(void *p)
-{
- Parcel *urc_p =NULL;
- char urc_data[LYNQ_REC_BUF];
- int res = 0;
-
- LYINFLOG("urc thread is running");
- while(module_urc_status)
- {
- bzero(urc_data,LYNQ_REC_BUF);
- res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
- if(res<=0)
- {
- LYERRLOG("thread_urc_recv step2 fail:");
- break;
- }
- urc_p = new Parcel();
- if(urc_p == NULL)
- {
- LYERRLOG("new parcel failure!!!");
- break;
- }
- urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
- urc_p->setDataPosition(0);
- if(urc_p->dataAvail()>0)
- {
- pthread_mutex_lock(&s_urc_mutex);
- urc_msg_process(urc_p);
- pthread_mutex_unlock(&s_urc_mutex);
- }
- delete urc_p;
- urc_p = NULL;
- }
- LYINFLOG("urc thread ended");
- return NULL;
-}
-
-int lynq_server_socket_start()
+int lynq_start_all_rc_socket_thread()
{
module_rc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(module_rc_sock_fd < 0)
@@ -434,87 +707,12 @@
return RESULT_OK;
}
-int lynq_urc_socket_start()
-{
-// pthread_t tid;
-// pthread_attr_t attr;
- int on = 1;
- int ret = 0;
- module_len_urc_addr_serv = sizeof(sockaddr_in);
- module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (module_urc_sock_fd <0){
- LYERRLOG("urc socket error");
- return RESULT_ERROR;
- }
- module_urc_addr_serv.sin_family = AF_INET;
- module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
- module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
- /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
- ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
- if(ret <0)
- {
- LYERRLOG("urc socket set error");
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
- ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));
- if(ret <0)
- {
- LYERRLOG("urc socket bind error");
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
-
- module_urc_status = 1;
- // pthread_attr_init(&attr);
- // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);
- if(ret <0)
- {
- LYERRLOG("urc pthread create error");
- module_urc_status = 0;
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
- LYINFLOG("urc start success");
-
- return RESULT_OK;
-}
-
-void lynq_close_urc_thread()
-{
- int ret;
-
- pthread_mutex_lock(&s_urc_mutex); //just cancel urc tid when recvfrom avoid mutual lock for tid may call pthread_cond_wait
- module_urc_status = 0;
- if(module_urc_tid!=-1)
- {
- ret = pthread_cancel(module_urc_tid);
- LYINFLOG("pthread cancel urc ret = %d",ret);
- }
- pthread_mutex_unlock(&s_urc_mutex);
- if(module_urc_tid != -1)
- {
- ret = pthread_join(module_urc_tid,NULL);
- LYINFLOG("pthread join urc tid ret = %d",ret);
- module_urc_tid =-1;
- }
- if (module_urc_sock_fd > 0)
- {
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- }
-}
-
-void lynq_close_rc_thread()
+void lynq_close_all_rc_socket_thread()
{
int ret;
BLOCK_RECV_MSG_LOCK();
- module_rc_status = 0;
- BLOCK_WAKEUP_RECV_MSG();
+ module_rc_status = 0;
+ BLOCK_WAKEUP_RECV_MSG();
if(module_rc_tid != -1)
{
ret = pthread_cancel(module_rc_tid);
@@ -523,11 +721,11 @@
BLOCK_RECV_MSG_UNLOCK();
if(module_rc_tid != -1)
{
- ret = pthread_join(module_rc_tid,NULL);
+ ret = pthread_join(module_rc_tid,NULL);
module_rc_tid =-1;
- LYINFLOG("pthread join rc tid ret = %d",ret);
- }
-
+ LYINFLOG("pthread join rc tid ret = %d",ret);
+
+ }
if (module_rc_sock_fd > 0)
{
@@ -545,3 +743,273 @@
BLOCK_RECV_MSG_UNLOCK();
}
+const char * requestToString(int request)
+{
+ /*
+ cat libs/telephony/ril_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
+
+
+ cat libs/telephony/ril_unsol_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),([^}]+).+/case RIL_\1: return "\1";/'
+
+ */
+ switch(request) {
+ case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
+ case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
+ case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
+ case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
+ case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
+ case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
+ case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
+ case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
+ case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
+ case RIL_REQUEST_DIAL: return "DIAL";
+ case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
+ case RIL_REQUEST_HANGUP: return "HANGUP";
+ case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
+ case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
+ case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
+ case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
+ case RIL_REQUEST_UDUB: return "UDUB";
+ case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
+ case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
+ case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
+ case RIL_REQUEST_OPERATOR: return "OPERATOR";
+ case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
+ case RIL_REQUEST_DTMF: return "DTMF";
+ case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
+ case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
+ case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
+ case RIL_REQUEST_SIM_IO: return "SIM_IO";
+ case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
+ case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
+ case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
+ case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
+ case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
+ case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
+ case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
+ case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
+ case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
+ case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
+ case RIL_REQUEST_ANSWER: return "ANSWER";
+ case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
+ case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
+ case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
+ case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
+ case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
+ case RIL_REQUEST_DTMF_START: return "DTMF_START";
+ case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
+ case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
+ case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
+ case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "SET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "GET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "GET_NEIGHBORING_CELL_IDS";
+ case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
+ case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
+ case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
+ case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
+ case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
+ case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
+ case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
+ case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
+ case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
+ case RIL_REQUEST_STK_GET_PROFILE: return "STK_GET_PROFILE";
+ case RIL_REQUEST_STK_SET_PROFILE: return "STK_SET_PROFILE";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "STK_SEND_ENVELOPE_COMMAND";
+ case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "STK_SEND_TERMINAL_RESPONSE";
+ case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
+ case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
+ case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "EXPLICIT_CALL_TRANSFER";
+ case RIL_REQUEST_SET_LOCATION_UPDATES: return "SET_LOCATION_UPDATES";
+ case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:return"CDMA_SET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:return"CDMA_SET_ROAMING_PREFERENCE";
+ case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:return"CDMA_QUERY_ROAMING_PREFERENCE";
+ case RIL_REQUEST_SET_TTY_MODE:return"SET_TTY_MODE";
+ case RIL_REQUEST_QUERY_TTY_MODE:return"QUERY_TTY_MODE";
+ case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_FLASH:return"CDMA_FLASH";
+ case RIL_REQUEST_CDMA_BURST_DTMF:return"CDMA_BURST_DTMF";
+ case RIL_REQUEST_CDMA_SEND_SMS:return"CDMA_SEND_SMS";
+ case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:return"CDMA_SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG:return"GSM_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG:return"GSM_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION:return "GSM_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG:return "CDMA_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG:return "CDMA_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION:return "CDMA_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return"CDMA_VALIDATE_AND_WRITE_AKEY";
+ case RIL_REQUEST_CDMA_SUBSCRIPTION: return"CDMA_SUBSCRIPTION";
+ case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "CDMA_WRITE_SMS_TO_RUIM";
+ case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "CDMA_DELETE_SMS_ON_RUIM";
+ case RIL_REQUEST_DEVICE_IDENTITY: return "DEVICE_IDENTITY";
+ case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_REQUEST_GET_SMSC_ADDRESS: return "GET_SMSC_ADDRESS";
+ case RIL_REQUEST_SET_SMSC_ADDRESS: return "SET_SMSC_ADDRESS";
+ case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "REPORT_SMS_MEMORY_STATUS";
+ case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "REPORT_STK_SERVICE_IS_RUNNING";
+ case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "CDMA_GET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_ISIM_AUTHENTICATION: return "ISIM_AUTHENTICATION";
+ case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
+ case RIL_REQUEST_VOICE_RADIO_TECH: return "VOICE_RADIO_TECH";
+ case RIL_REQUEST_GET_CELL_INFO_LIST: return"GET_CELL_INFO_LIST";
+ case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return"SET_UNSOL_CELL_INFO_LIST_RATE";
+ case RIL_REQUEST_SET_INITIAL_ATTACH_APN: return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
+ case RIL_REQUEST_IMS_REGISTRATION_STATE: return "IMS_REGISTRATION_STATE";
+ case RIL_REQUEST_IMS_SEND_SMS: return "IMS_SEND_SMS";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: return "SIM_TRANSMIT_APDU_BASIC";
+ case RIL_REQUEST_SIM_OPEN_CHANNEL: return "SIM_OPEN_CHANNEL";
+ case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "SIM_CLOSE_CHANNEL";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "SIM_TRANSMIT_APDU_CHANNEL";
+ case RIL_REQUEST_GET_RADIO_CAPABILITY: return "RIL_REQUEST_GET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_RADIO_CAPABILITY: return "RIL_REQUEST_SET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_UICC_SUBSCRIPTION: return "SET_UICC_SUBSCRIPTION";
+ case RIL_REQUEST_ALLOW_DATA: return "ALLOW_DATA";
+ case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG";
+ case RIL_REQUEST_SIM_AUTHENTICATION: return "SIM_AUTHENTICATION";
+ case RIL_REQUEST_GET_DC_RT_INFO: return "GET_DC_RT_INFO";
+ case RIL_REQUEST_SET_DC_RT_INFO_RATE: return "SET_DC_RT_INFO_RATE";
+ case RIL_REQUEST_SET_DATA_PROFILE: return "SET_DATA_PROFILE";
+ case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
+ case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
+ case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST(obsolete)";
+ case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
+ case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
+ case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
+ case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
+ case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
+ case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
+ case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FUL";
+ case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
+ case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
+ case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
+ case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
+ case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS";
+ case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
+ case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
+ case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
+ case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
+ case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
+ case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
+ case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
+ case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
+ case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED";
+ case RIL_UNSOL_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
+ case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
+ case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
+ case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST";
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: return "RESPONSE_IMS_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: return "UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
+ case RIL_UNSOL_SRVCC_STATE_NOTIFY: return "UNSOL_SRVCC_STATE_NOTIFY";
+ case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "HARDWARE_CONFIG_CHANGED";
+ case RIL_UNSOL_DC_RT_INFO_CHANGED: return "UNSOL_DC_RT_INFO_CHANGED";
+ case RIL_REQUEST_SHUTDOWN: return "SHUTDOWN";
+ case RIL_UNSOL_RADIO_CAPABILITY: return "RIL_UNSOL_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_TRM: return "RIL_REQUEST_SET_TRM";
+ case RIL_REQUEST_SET_IMS_ENABLE:return "RIL_REQUEST_SET_IMS_ENABLE";
+ case RIL_REQUEST_SET_AUDIO_PATH: return "SET_AUDIO_PATH";
+ case RIL_REQUEST_HANGUP_ALL: return "HANGUP_ALL";
+ case RIL_REQUEST_FORCE_RELEASE_CALL: return "FORCE_RELEASE_CALL";
+ case RIL_REQUEST_EMERGENCY_DIAL: return "RIL_REQUEST_EMERGENCY_DIAL";
+ case RIL_REQUEST_SET_ECC_SERVICE_CATEGORY: return "RIL_REQUEST_SET_ECC_SERVICE_CATEGORY";
+ case RIL_REQUEST_SET_ECC_LIST: return "RIL_REQUEST_SET_ECC_LIST";
+ case RIL_REQUEST_AT_COMMAND_WITH_PROXY: return "AT_COMMAND_WITH_PROXY";
+ case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION";
+ case RIL_REQUEST_SET_CLIP: return "RIL_REQUEST_SET_CLIP";
+ case RIL_REQUEST_GET_COLP: return "RIL_REQUEST_GET_COLP";
+ case RIL_REQUEST_SET_COLP: return "RIL_REQUEST_SET_COLP";
+ case RIL_REQUEST_GET_COLR: return "RIL_REQUEST_GET_COLR";
+ case RIL_REQUEST_ADD_IMS_CONFERENCE_CALL_MEMBER: return "ADD_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_REMOVE_IMS_CONFERENCE_CALL_MEMBER: return "REMOVE_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_CONFERENCE_DIAL: return "CONFERENCE_DIAL";
+ case RIL_REQUEST_DIAL_WITH_SIP_URI: return "DIAL_WITH_SIP_URI";
+ case RIL_REQUEST_HOLD_CALL: return "HOLD_CALL";
+ case RIL_REQUEST_RESUME_CALL: return "RESUME_CALL";
+ case RIL_UNSOL_ECONF_SRVCC_INDICATION : return "ECONF_SRVCC_INDICATION";
+ case RIL_UNSOL_ECONF_RESULT_INDICATION : return "ECONF_RESULT_INDICATION";
+ case RIL_UNSOL_MAL_AT_INFO : return "UNSOL_MAL_AT_INFO";
+ case RIL_REQUEST_MODEM_POWEROFF: return "MODEM_POWEROFF";
+ case RIL_REQUEST_MODEM_POWERON: return "MODEM_POWERON";
+ case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
+ case RIL_REQUEST_QUERY_ICCID: return "RIL_REQUEST_QUERY_ICCID";
+ case RIL_UNSOL_TX_POWER: return "RIL_UNSOL_TX_POWER";
+ case RIL_UNSOL_NETWORK_INFO: return "RIL_UNSOL_NETWORK_INFO";
+ case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
+ case RIL_REQUEST_SET_IMSCFG: return "RIL_REQUEST_SET_IMSCFG";
+#ifdef ECALL_SUPPORT
+ case RIL_REQUEST_ECALL_FAST_MAKE_ECALL: return "ECALL_FAST_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_SET_IVS: return "RIL_REQUEST_ECALL_SET_IVS";
+ case RIL_REQUEST_ECALL_SET_PSAP: return "RIL_REQUEST_ECALL_SET_PSAP";
+ case RIL_REQUEST_ECALL_MAKE_ECALL: return "RIL_REQUEST_ECALL_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_IVS_PUSH_MSD: return "RIL_REQUEST_ECALL_IVS_PUSH_MSD";
+ case RIL_REQUEST_ECALL_PSAP_PULL_MSD: return "RIL_REQUEST_ECALL_PSAP_PULL_MSD";
+ case RIL_UNSOL_ECALL_MSDHACK : return "ECALL_MSDHACK";
+ case RIL_REQUEST_ECALL_SET_MSD: return "RIL_REQUEST_ECALL_SET_MSD";
+ case RIL_REQUEST_ECALL_CTRL_SEQUENCE: return "ECALL_SET_CTRL_SEQUENCE";
+ case RIL_UNSOL_ECALL_INDICATIONS : return "ECALL_INDICATIONS";
+ case RIL_REQUEST_ECALL_RESET_IVS: return "RIL_REQUEST_ECALL_RESET_IVS";
+ case RIL_REQUEST_ECALL_SET_PRI: return "RIL_REQUEST_ECALL_SET_PRI";
+ case RIL_REQUEST_ECALL_SET_TEST_NUM: return "RIL_REQUEST_ECALL_SET_TEST_NUM";
+ case RIL_REQUEST_ECALL_SET_RECONF_NUM: return "RIL_REQUEST_ECALL_SET_RECONF_NUM";
+ case RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD: return "RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD";
+ case RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME: return "RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME";
+ case RIL_REQUEST_ECALL_SET_REGISTRATION_STATE: return "RIL_REQUEST_ECALL_SET_REGISTRATION_STATE";
+#endif /*ECALL_SUPPORT*/
+#ifdef KEEP_ALIVE
+ case RIL_REQUEST_START_KEEPALIVE_PRO: return "RIL_REQUEST_START_KEEPALIVE_PRO";
+ case RIL_REQUEST_STOP_KEEPALIVE_PRO: return "RIL_REQUEST_STOP_KEEPALIVE_PRO";
+ case RIL_UNSOL_KEEPALIVE_STATUS_PRO: return "RIL_UNSOL_KEEPALIVE_STATUS_PRO";
+#endif /*KEEP_ALIVE*/
+ case RIL_REQUEST_SEND_USSI: return "SEND_USSI";
+ case RIL_REQUEST_CANCEL_USSI: return "CANCEL_USSI";
+ case RIL_REQUEST_GET_SMS_SIM_MEM_STATUS: return "GET_SMS_SIM_MEM_STATUS";
+ case RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR: return "RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR";
+ case RIL_REQUEST_REPORT_AIRPLANE_MODE: return "RIL_REQUEST_REPORT_AIRPLANE_MODE";
+ case RIL_REQUEST_SET_ECC_NUM: return "RIL_REQUEST_SET_ECC_NUM";
+ case RIL_REQUEST_GET_ECC_NUM: return "RIL_REQUEST_GET_ECC_NUM";
+ case RIL_UNSOL_ECC_NUM: return "RIL_UNSOL_ECC_NUM";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT: return "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT";
+ case RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE";
+ case RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE";
+ case RIL_UNSOL_CALL_INFO_INDICATION: return "RIL_UNSOL_CALL_INFO_INDICATION";
+ case RIL_REQUEST_MODIFY_APN: return "RIL_REQUEST_MODIFY_APN";
+ case RIL_REQUEST_RESET_APN: return "RIL_REQUEST_RESET_APN";
+ case RIL_REQUEST_QUERY_SIM_RETRY_COUNT: return "RIL_REQUEST_QUERY_SIM_RETRY_COUNT";
+ case RIL_REQUEST_QUERY_EID: return "RIL_REQUEST_QUERY_EID";
+ case LYNQ_REQUEST_SET_DTMF_VOLUME: return "RIL_REQUEST_SET_DTMF_VOLUME";
+ case LYNQ_REQUEST_SET_SPEECH_VOLUME: return "RIL_REQUEST_SET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_GET_SPEECH_VOLUME: return "RIL_REQUEST_GET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_RECORD: return "RIL_REQUEST_RECORD";
+ /*warren add for t800 ril service 2022/1/22 start*/
+ case LYNQ_REQUEST_WRITE_SMS_TO_MEMORY: return "LYNQ_REQUEST_WRITE_SMS_TO_MEMORY";
+ case LYNQ_REQUEST_READ_SMS_FROM_MEMORY: return "LYNQ_REQUEST_READ_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY: return "LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY: return "LYNQ_REQUEST_LIST_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
+ case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
+ case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
+ /*warren add for t800 ril service 2022/1/22 end*/
+ default: return "<unknown request>";
+ }
+}
+
+
diff --git a/src/lynq/lib/liblynq-call/lynq_module_socket.h b/src/lynq/lib/liblynq-call/lynq_module_socket.h
index 57466f6..41c0d1c 100755
--- a/src/lynq/lib/liblynq-call/lynq_module_socket.h
+++ b/src/lynq/lib/liblynq-call/lynq_module_socket.h
@@ -4,15 +4,18 @@
using ::android::Parcel;
int lynq_set_test_network(const int test_mode);
-int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...);
-int lynq_server_socket_start();
-int lynq_urc_socket_start();
-void lynq_close_urc_thread();
-void lynq_close_rc_thread();
extern int g_module_Global_uToken;
extern int g_wait_time;
+int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...);
+int lynq_start_all_urc_socket_thread();
+void lynq_close_all_urc_socket_thread();
+int lynq_start_all_rc_socket_thread();
+void lynq_close_all_rc_socket_thread();
+
+const char * requestToString(int request);
void urc_msg_process(Parcel *p);
+bool is_support_urc(int urc_id);
#endif
diff --git a/src/lynq/lib/liblynq-call/makefile b/src/lynq/lib/liblynq-call/makefile
index 0e021c5..40415dc 100755
--- a/src/lynq/lib/liblynq-call/makefile
+++ b/src/lynq/lib/liblynq-call/makefile
@@ -23,6 +23,7 @@
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
-I$(ROOT)$(includedir)/vendor-ril \
+ -I$(ROOT)$(includedir)/lynq_shm \
LOCAL_LIBS := \
@@ -35,7 +36,7 @@
-lbinder \
-lpthread \
-llynq-log \
-
+ -llynq-shm \
SOURCES = $(wildcard *.cpp)
diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index 5473fb2..fbd120d 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -15,8 +15,10 @@
#include <sys/time.h>
#include <include/lynq_uci.h>
#include <errno.h>
+#include <vector>
+#include "lynq_data_urc.h"
+
#define LYNQ_SERVICE_PORT 8088
-#define LYNQ_URC_SERVICE_PORT 8086
#define LYNQ_REC_BUF 8192
#define LYNQ_REQUEST_PARAM_BUF 8192
#define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
@@ -24,9 +26,6 @@
#define LYNQ_DATA_UCI_BUF 258
-
-
-
using ::android::Parcel;
typedef struct{
int uToken;
@@ -56,16 +55,19 @@
int lynq_client_sockfd = 0;
int Global_uToken = 0;
-bool data_urc_recive_status = 1;
+
int lynq_data_call_change_id = -1;
pthread_t lynq_data_tid =-1;
static pthread_mutex_t s_data_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_data_call_state_change_cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t s_pdn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t s_pdn_change_cond = PTHREAD_COND_INITIALIZER;
+
static pthread_mutex_t s_lynq_apn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_lynq_apn_change_cond = PTHREAD_COND_INITIALIZER;
+pthread_t data_list_urc_vector_tid = -1;
+int data_urc_vector_status = 0;
+static pthread_mutex_t s_lynq_urc_vector_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_lynq_urc_vector_cond = PTHREAD_COND_INITIALIZER;
/**g_lynq_data_sendto_mutex
* @brief mark data send request mutex
*/
@@ -82,6 +84,8 @@
*/
char g_lynq_apn_result[1024] = {};
+static std::vector<int> s_data_urc_wait_list;
+
typedef struct
{
char apn[LYNQ_APN_MAX_LEN];
@@ -93,16 +97,7 @@
lynq_apn_t lynq_apn_table[LYNQ_APN_CHANNEL_MAX] = {};
lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
int lynq_data_call = 0;
-int millli_sleep_with_restart(int millisecond)
-{
- int left = millisecond*1000;
- while (left > 0)
- {
- left = usleep(left);
- }
- return 0;
-}
int getLynqApnID(char apnType[])
{
int ret = 0;
@@ -115,6 +110,7 @@
}
return -1;
}
+
void updateApnTable(lynq_apn_t *apn_table,char apn[],char apntype[],char ifaceName[])
{
LYDBGLOG("[updateApnTable] apn:%s,apntype:%s,ifaceName:%s",apn,apntype,ifaceName);
@@ -130,6 +126,7 @@
apn_table->hasUsed = 1;
return;
}
+
void cleanOnceApnTable(int apnId)
{
LYDBGLOG("apn id:%d",apnId);
@@ -207,9 +204,9 @@
int waitPdnChange()
{
int ret = 0;
- pthread_mutex_lock(&s_pdn_change_mutex);
- ret = pthread_cond_wait(&s_pdn_change_cond,&s_pdn_change_mutex);
- pthread_mutex_unlock(&s_pdn_change_mutex);
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ ret = pthread_cond_wait(&s_lynq_urc_vector_cond,&s_lynq_urc_vector_mutex);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
return ret;
}
int waitDataCallstateChange(int mtime)
@@ -238,9 +235,9 @@
}
void sendSignalPdnChange()
{
- pthread_mutex_lock(&s_pdn_change_mutex);
- pthread_cond_signal(&s_pdn_change_cond);
- pthread_mutex_unlock(&s_pdn_change_mutex);
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ pthread_cond_signal(&s_lynq_urc_vector_cond);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
return;
}
@@ -301,7 +298,6 @@
return strndup16to8(s16, stringlen);
}
-
/*Warren add for T800 platform 2021/11/19 start*/
int lynq_socket_client_start()
{
@@ -335,144 +331,146 @@
}
return 0;
}
-void *thread_urc_recv(void *parg)
+
+bool is_support_urc(int urc_id)
{
- int socket_fd = (int64_t)parg;
- int len=0;
- socklen_t addr_len=0;
- uint8_t *dataLength = NULL;
- char urc_data[LYNQ_REC_BUF];
+ switch(urc_id)
+ {
+ case LYNQ_URC_DATA_CALL_STATUS_IND:
+
+ case LYNQ_URC_MODIFY_APNDB:
+ case LYNQ_URC_RESET_APNDB:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void urc_msg_process(Parcel *p)
+{
+ int len;
+ int resp_type;
+ int urcid;
+ int slot_id;
+
+ int pdnState = 0;
char apn[LYNQ_APN_MAX_LEN];
char apnType[LYNQ_APN_TYPE_MAX_LEN];
- int pdnState = 0;
char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
- int slot_id = -1;
- int resp_type = -1;
- int urcid = -1;
char *urc_msg = NULL;
- Parcel *p = NULL;
- struct sockaddr_in dest_addr;
- LYINFLOG("thread_urc_recv in running....\n");
- while(data_urc_recive_status)
+
+ int size = p->dataSize();
+ p->readInt32(&resp_type);
+ p->readInt32(&urcid);
+ p->readInt32(&slot_id);
+ LYINFLOG("data lib recv urc:resp_type=%d,urcid=%d,slot_id=%d,size=%d\n",resp_type,urcid,slot_id,size);
+ switch(urcid)
{
- bzero(urc_data,LYNQ_REC_BUF);
- //get data msg
- len = recvfrom(socket_fd,urc_data,LYNQ_REC_BUF,0,(struct sockaddr *)&dest_addr,&addr_len);
- if(len <= 0)
- {
- perror("thread_urc_recv step2 fail:");
- millli_sleep_with_restart(1);
- break;
- }
- LYDBGLOG("=====>urc data len<=====:%d\n",len);
- p = new Parcel();
- if(p==NULL)
- {
- RLOGD("new parcel failure!!!");
- break;
- }
- p->setData((uint8_t *)urc_data,len); // p.setData((uint8_t *) buffer, buflen);
- p->setDataPosition(0);
- if(p->dataAvail() > 0)
- {
- p->readInt32(&resp_type);
- p->readInt32(&urcid);
- p->readInt32(&slot_id);
- //LYDBGLOG("*******Warren test*******:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
- switch (urcid)
+ case LYNQ_URC_DATA_CALL_STATUS_IND:
+ p->readInt32(&pdnState);
+ bzero(apn,LYNQ_APN_MAX_LEN);
+ bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
+ bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
+ if(pdnState!=4)//PDN_DISCONNECTED
{
- case 9003://LYNQ_URC_DATA_CALL_STATUS_IND
- {
- LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
- p->readInt32(&pdnState);
- bzero(apn,LYNQ_APN_MAX_LEN);
- bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
- bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
- if(pdnState!=4)//PDN_DISCONNECTED
- {
- urc_msg = strdupReadString_p(p);
- int len = strlen(urc_msg);
- if(len < LYNQ_APN_MAX_LEN-1)
- {
- memcpy(apn,urc_msg,len+1);
- }
- urc_msg = strdupReadString_p(p);
- len = strlen(urc_msg);
- if(len < LYNQ_APN_TYPE_MAX_LEN-1)
- {
- memcpy(apnType,urc_msg,len+1);
- }
- urc_msg = strdupReadString_p(p);
- len = strlen(urc_msg);
- if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
- {
- memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
- }
- //sendSignalDataCallStateChange();
- int apnId = getLynqApnID(apnType);
- if(apnId >= 0)
- {
- if(lynq_apn_table[apnId].hasTimeout==1)
- {
- LYERRLOG("apn:%s has time out",lynq_apn_table[apnId].apn);
- lynq_deactive_data_call(&apnId);
- continue;
- }
- updateApnTable(&lynq_apn_table[apnId], apn,apnType,ifaceName);
- }
- lynq_data_call_change_id = apnId;
- sendSignalPdnChange();
- LYDBGLOG("data call state:%d",lynq_data_call);
- if(lynq_data_call==1)
- {
- sendSignalDataCallStateChange();
- lynq_data_call = 0;
- }
- }
- else
- {
- urc_msg = strdupReadString_p(p);
- len = strlen(urc_msg);
- if(len < LYNQ_APN_TYPE_MAX_LEN-1)
- {
- memcpy(apnType,urc_msg,len+1);
- }
- LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
- int apnId = getLynqApnID(apnType);
- if(apnId >= 0)
- {
- lynq_data_call_change_id = apnId;
- bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
- }
- sendSignalPdnChange();
- LYDBGLOG("data call state:%d",lynq_data_call);
- if(lynq_data_call==1)
- {
- sendSignalDataCallStateChange();
- lynq_data_call = 0;
- }
- }
- break;
- }
- case 9004:
- {
- LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
urc_msg = strdupReadString_p(p);
- if (NULL == urc_msg)
+ int len = strlen(urc_msg);
+ if(len < LYNQ_APN_MAX_LEN-1)
{
- LYERRLOG("error apn msg");
+ memcpy(apn,urc_msg,len+1);
}
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+ {
+ memcpy(apnType,urc_msg,len+1);
+ }
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
+ {
+ memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
+ }
+ //sendSignalDataCallStateChange();
+ int apnId = getLynqApnID(apnType);
+ if(apnId >= 0)
+ {
+ if(lynq_apn_table[apnId].hasTimeout==1)
+ {
+ LYERRLOG("apn:%s has time out,deacive this apn",lynq_apn_table[apnId].apn);
+ if (NULL != lynq_apn_table[apnId].apn && NULL != NULL != lynq_apn_table[apnId].apnType)
+ {
+ LYERRLOG("deactive this time out APN");
+ lynq_deactive_data_call(&apnId);
+ }
+ else
+ {
+ LYERRLOG("this table is invalid");
+ }
+ break;
+ }
+ updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
+ }
+ /*To be completed*/
else
{
- bzero(g_lynq_apn_result, 1024);
- strcpy(g_lynq_apn_result, urc_msg);
- sendSignalApnChange();
+ LYERRLOG("invalid apnId");
+ break;
}
- break;
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.push_back(apnId);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+ lynq_data_call_change_id = apnId;
+ //sendSignalPdnChange();
+ LYDBGLOG("data call state:%d",lynq_data_call);
+ if(lynq_data_call==1)
+ {
+ sendSignalDataCallStateChange();
+ lynq_data_call = 0;
+ }
}
- case 9005:
+ else
{
- LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d\n",resp_type,urcid,slot_id);
+ urc_msg = strdupReadString_p(p);
+ len = strlen(urc_msg);
+ if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+ {
+ memcpy(apnType,urc_msg,len+1);
+ }
+ LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
+ int apnId = getLynqApnID(apnType);
+ if(apnId >= 0)
+ {
+ lynq_data_call_change_id = apnId;
+ bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
+ }
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.push_back(apnId);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+ //sendSignalPdnChange();
+ LYDBGLOG("data call state:%d",lynq_data_call);
+ if(lynq_data_call==1)
+ {
+ sendSignalDataCallStateChange();
+ lynq_data_call = 0;
+ }
+ }
+ break;
+ case LYNQ_URC_MODIFY_APNDB:
+ urc_msg = strdupReadString_p(p);
+ if (NULL == urc_msg)
+ {
+ LYERRLOG("error apn msg");
+ }
+ else
+ {
+ bzero(g_lynq_apn_result, 1024);
+ strcpy(g_lynq_apn_result, urc_msg);
+ sendSignalApnChange();
+ }
+ break;
+ case LYNQ_URC_RESET_APNDB:
+ {
urc_msg = strdupReadString_p(p);
if (NULL == urc_msg)
{
@@ -485,56 +483,76 @@
sendSignalApnChange();
}
}
- default:
- break;
- }
- }
- delete p;
- p = NULL;
+ default:
+ break;
}
- close(socket_fd);
+
}
-int lynq_socket_urc_start()
+
+void cleanup_urc_vector_mutex(void *arg)
{
- int socket_fd=0;
- int rt=0;
- int len=0;
- int on=1;
- struct sockaddr_in urc_local_addr;
- pthread_attr_t attr;
- socket_fd = socket(AF_INET,SOCK_DGRAM,0);
- if(socket_fd < 0)
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+}
+
+void *thread_urc_vector()
+{
+ pthread_cleanup_push(cleanup_urc_vector_mutex, NULL);
+ while (data_urc_vector_status)
{
- perror("creaet socket for udp fail");
+ while (!s_data_urc_wait_list.empty())
+ {
+ sendSignalPdnChange();
+ usleep(10);
+ }
+ usleep(1);
+ }
+ pthread_cleanup_pop(0);
+}
+
+void cancel_urc_vector_signal_thread()
+{
+ int ret;
+
+ data_urc_vector_status = 0;
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ if (data_list_urc_vector_tid != -1)
+ {
+ ret = pthread_cancel(data_list_urc_vector_tid);
+ LYDBGLOG("pthread cancel ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+
+ if (data_list_urc_vector_tid != -1)
+ {
+ ret = pthread_join(data_list_urc_vector_tid,NULL);
+ LYDBGLOG("pthread join ret = %d",ret);
+ data_list_urc_vector_tid = -1;
+ }
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.clear();
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+}
+
+int create_urc_vector_signal_thread()
+{
+ int ret;
+
+ data_urc_vector_status = 1;
+ pthread_mutex_init(&s_lynq_urc_vector_mutex,NULL);
+ ret = pthread_create(&data_list_urc_vector_tid,NULL,thread_urc_vector,NULL);
+ if (ret < 0)
+ {
+ LYERRLOG("urc vector signal pthread create error");
+ lynq_deinit_data_urc_thread();
+ data_urc_vector_status = 0;
return -1;
}
- urc_local_addr.sin_family = AF_INET;
- urc_local_addr.sin_port = htons(LYNQ_URC_SERVICE_PORT);
- urc_local_addr.sin_addr.s_addr = htons(INADDR_ANY);
- /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
- rt = setsockopt(socket_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
- if(rt<0)
- {
- perror("SO_REUSEADDR fail\n");
- return -1;
- }
- rt = bind(socket_fd ,(struct sockaddr*)&urc_local_addr, sizeof(urc_local_addr));
- if (rt == -1)
- {
- perror("bind failed");
- return -1;
- }
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- rt = pthread_create(&lynq_data_tid,&attr,thread_urc_recv,(void *)socket_fd);
- if(rt < 0)
- {
- LYERRLOG("urc loop failure!!!\n");
- return -1;
- }
- LYDBGLOG("urc loop success!!!\n");
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.clear();
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
return 0;
}
+
int lynq_init_data(int uToken)
{
if (g_lynq_data_init_flag == 1)
@@ -545,7 +563,6 @@
g_lynq_data_init_flag = 1;
int result = 0;
Global_uToken = uToken;
- data_urc_recive_status = 1;
LYLOGSET(LOG_INFO);
LYLOGEINIT(USER_LOG_TAG);
result = lynq_socket_client_start();
@@ -555,7 +572,14 @@
LYERRLOG("init socket client fail!!!");
return -1;
}
- result = lynq_socket_urc_start();
+ result = lynq_init_data_urc_thread();
+ if(result!=0)
+ {
+ LYERRLOG("init socket urc fail!!!");
+ return -1;
+ }
+
+ result = create_urc_vector_signal_thread();
if(result!=0)
{
LYERRLOG("init socket urc fail!!!");
@@ -586,14 +610,13 @@
{
close(lynq_client_sockfd);
}
- data_urc_recive_status = 0;
- if (lynq_data_tid > 0)
+ ret = lynq_deinit_data_urc_thread();
+ if (ret != 0)
{
- ret = pthread_cancel(lynq_data_tid);
- LYDBGLOG("pthread cancel ret = %d",ret);
- ret = pthread_join(lynq_data_tid,NULL);
- LYDBGLOG("pthread join ret = %d",ret);
+ LYERRLOG("lynq_deinit_data_urc_thread fail");
+ return ret;
}
+ cancel_urc_vector_signal_thread();
return 0;
}
int lynq_setup_data_call(int *handle)
@@ -604,7 +627,6 @@
int request = -1;
int slot_id = -1;
int error = -1;
- char iface = NULL;
int lynq_data_call_id = 0;
if(handle==NULL)
{
@@ -642,6 +664,7 @@
}
return error;
}
+
int lynq_deactive_data_call(int *handle)
{
Parcel p;
@@ -700,7 +723,6 @@
int request = -1;
int slot_id = -1;
int error = -1;
- char iface = NULL;
int lynq_data_call_id = -1;
char *argv[10] = {};
if(handle==NULL||apn==NULL||apnType==NULL)
@@ -769,7 +791,7 @@
lynq_data_call = 1;
if(error==0)
{
- if(waitDataCallstateChange(20000)==ETIMEDOUT)//20s
+ if(waitDataCallstateChange(60000)==ETIMEDOUT)//60s
{
error = LYNQ_E_TIME_OUT;
LYERRLOG("timeout:wait data Call state fail!!!");
@@ -823,7 +845,6 @@
int error = -1;
int version =0;
int num = 0;
- int temp_int =0;
char *temp_char = NULL;
if(dataCallList==NULL)
{
@@ -924,8 +945,16 @@
}
int lynq_wait_data_call_state_change(int *handle)
{
+
+ std::vector<int>::iterator iter;
waitPdnChange();
- *handle = lynq_data_call_change_id;
+
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ iter = s_data_urc_wait_list.begin();
+ handle = (*iter);
+ s_data_urc_wait_list.erase(iter);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+
LYINFLOG("lynq data call id:%d",lynq_data_call_change_id);
return 0;
}
@@ -1214,7 +1243,6 @@
}
lynq_client_t client;
char argc[512];
- char recvline[LYNQ_REC_BUF];
int res = 0;
Parcel p;
if (cmd == 0) // insert apn db
diff --git a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
new file mode 100755
index 0000000..9f211eb
--- /dev/null
+++ b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
@@ -0,0 +1,331 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <unistd.h>
+#include <binder/Parcel.h>
+#include <log/log.h>
+#include <cutils/jstring.h>
+#include <pthread.h>
+#include <list>
+#include "lynq_data.h"
+#include "lynq_data_urc.h"
+#include "liblog/lynq_deflog.h"
+#include "lynq_shm.h"
+
+#define LYNQ_REC_BUF 8192
+
+static std::list<Parcel*> s_urc_recv_parcel_list;
+
+int lynq_len_urc_addr_serv;
+struct sockaddr_in urc_local_addr;
+static int lynq_urc_sockfd = -1;
+bool data_urc_recive_status = 1;
+static pthread_mutex_t s_lynq_urc_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_lynq_urc_cond = PTHREAD_COND_INITIALIZER;
+
+/*recv*/
+pthread_t data_urc_recv_tid = -1;
+static pthread_mutex_t s_lynq_urc_recv_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_lynq_urc_recv_cond = PTHREAD_COND_INITIALIZER;
+
+/*process*/
+pthread_t data_urc_process_tid = -1;
+bool data_urc_process_status = 1;
+static pthread_mutex_t s_lynq_urc_process_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_lynq_urc_process_cond = PTHREAD_COND_INITIALIZER;
+
+#define SHM_BUFFER_INDEX_OFFSET 1
+#define SHM_BUFFER_SIZE_OFFSET 16
+#define SHM_BUFFER_INDEX_MASK 0x0000007F
+#define SHM_BUFFER_SIZE_MASK 0x0000FFFF
+
+bool urc_data_is_in_shm_data(int responseType,int& level, int& index, int& size)
+{
+ int shm_index=((responseType>>SHM_BUFFER_INDEX_OFFSET)&SHM_BUFFER_INDEX_MASK);
+ if (shm_index>0)
+ {
+ index=shm_index-1;
+ size=((responseType>>SHM_BUFFER_SIZE_OFFSET)&SHM_BUFFER_SIZE_MASK);
+ if(size>=sizeof(int32_t)*3 && get_shem_buffer_level(size,&level))
+ {
+ LYINFLOG("urc_data_is_in_shm_data level is %d, index is %d size is %d",level,index,size);
+ return true;
+ }
+ }
+ LYINFLOG("urc_data_is_in_shm_data return false, responseType is %d",responseType);
+ return false;
+}
+
+void cleanup_urc_process_mutex(void *arg)
+{
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+}
+
+void *thread_urc_recv()
+{
+ Parcel *urc_p =NULL;
+ char urc_data[LYNQ_REC_BUF];
+ int res = 0;
+ lynq_head_t* phead;
+ int level,index,size;
+ uint8_t * shm_buffer;
+
+ LYINFLOG("urc recv thread is running");
+ while(data_urc_recive_status)
+ {
+ bzero(urc_data,LYNQ_REC_BUF);
+ res = recvfrom(lynq_urc_sockfd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&urc_local_addr,(socklen_t*)&lynq_len_urc_addr_serv);
+
+ if(res<sizeof(int32_t)*2)
+ {
+ LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
+ continue;
+ }
+
+ phead=(lynq_head_t*) urc_data;
+ if(is_support_urc(phead->urcid)==false)
+ {
+ continue;
+ }
+ urc_p = new Parcel();
+ if(urc_p == NULL)
+ {
+ LYERRLOG("new parcel failure!!!");
+ continue;
+ }
+ if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
+ {
+ shm_buffer = (uint8_t *)get_shem_buffer(level,index); // p.setData((uint8_t *) buffer, buflen);
+ LYINFLOG("shm pointer is %p", shm_buffer);
+ urc_p->setData(shm_buffer,size);
+ }
+ else if(res>=sizeof(int32_t)*3)
+ {
+ urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else
+ {
+ LYERRLOG("res %d error!!!", res);
+ delete urc_p;
+ urc_p = NULL;
+ continue;
+ }
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ s_urc_recv_parcel_list.push_back(urc_p);
+ pthread_cond_broadcast(&s_lynq_urc_process_cond);
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+ }
+ else
+ {
+ delete urc_p;
+ urc_p = NULL;
+ }
+ }
+ LYINFLOG("urc recv thread ended");
+ return NULL;
+}
+
+void *thread_urc_process()
+{
+ Parcel *urc_p =NULL;
+ std::list<Parcel*>::iterator iter;
+
+ LYINFLOG("urc process thread is running");
+ pthread_cleanup_push(cleanup_urc_process_mutex, NULL); // thread cleanup handler
+ while (data_urc_process_status)
+ {
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ while(s_urc_recv_parcel_list.empty())
+ {
+ pthread_cond_wait(&s_lynq_urc_process_cond,&s_lynq_urc_process_mutex);
+ }
+ iter=s_urc_recv_parcel_list.begin();
+ urc_p = (*iter);
+ s_urc_recv_parcel_list.erase(iter);
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ pthread_mutex_lock(&s_lynq_urc_mutex);
+ urc_msg_process(urc_p);
+ pthread_mutex_unlock(&s_lynq_urc_mutex);
+ }
+ delete urc_p;
+ urc_p = NULL;
+ }
+ pthread_cleanup_pop(0);
+ LYINFLOG("urc process thread ended");
+ return NULL;
+}
+
+int lynq_socket_recv_start()
+{
+ int rt=0;
+ int on=1;
+ struct sockaddr_in urc_local_addr;
+ pthread_attr_t attr;
+ lynq_urc_sockfd = socket(AF_INET,SOCK_DGRAM,0);
+ if(lynq_urc_sockfd < 0)
+ {
+ LYERRLOG("create socket for udp fail");
+ return -1;
+ }
+ urc_local_addr.sin_family = AF_INET;
+ urc_local_addr.sin_port = htons(LYNQ_URC_SERVICE_PORT);
+ urc_local_addr.sin_addr.s_addr = htons(INADDR_ANY);
+ /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
+ rt = setsockopt(lynq_urc_sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
+ if(rt<0)
+ {
+ LYERRLOG("SO_REUSEADDR fail");
+ close(lynq_urc_sockfd);
+ lynq_urc_sockfd = -1;
+ return -1;
+ }
+ rt = bind(lynq_urc_sockfd ,(struct sockaddr*)&urc_local_addr, sizeof(urc_local_addr));
+ if (rt == -1)
+ {
+ LYERRLOG("bind failed");
+ close(lynq_urc_sockfd);
+ lynq_urc_sockfd = -1;
+ return -1;
+ }
+ return 0;
+}
+
+int lynq_socket_recv_stop()
+{
+ if (lynq_urc_sockfd >=0)
+ {
+ close(lynq_urc_sockfd);
+ lynq_urc_sockfd = -1;
+ }
+ return 0;
+}
+
+void lynq_urc_recv_thread_stop()
+{
+ int ret;
+
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ data_urc_recive_status = 0;
+ if (data_urc_recv_tid != -1)
+ {
+ ret = pthread_cancel(data_urc_recv_tid);
+ LYDBGLOG("pthread cancel ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+
+ if (data_urc_recv_tid != -1)
+ {
+ ret = pthread_join(data_urc_recv_tid,NULL);
+ LYDBGLOG("pthread join ret = %d",ret);
+ data_urc_recv_tid = -1;
+ }
+}
+
+void lynq_urc_process_thread_stop()
+{
+ int ret;
+
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ pthread_mutex_lock(&s_lynq_urc_mutex);
+
+ data_urc_process_status = 0;
+ if (data_urc_process_tid != -1)
+ {
+ ret = pthread_cancel(data_urc_process_tid);
+ LYDBGLOG("pthread cancel ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_lynq_urc_mutex);
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+
+ if (data_urc_process_tid != -1)
+ {
+ ret = pthread_join(data_urc_process_tid,NULL);
+ LYDBGLOG("pthread join ret = %d",ret);
+ data_urc_process_tid = -1;
+ }
+}
+
+
+int lynq_init_data_urc_thread()
+{
+ int ret = 0;
+ if(ril_init_mem()!=0)
+ {
+ LYERRLOG("ril_init_mem fail");
+ return -1;
+ }
+
+ ret = lynq_socket_recv_start();
+ if (ret != 0)
+ {
+ LYERRLOG("lynq_socket_recv_start fail");
+ ril_deinit_mem();
+ return -1;
+ }
+
+ pthread_mutex_init(&s_lynq_urc_process_mutex,NULL);
+ pthread_mutex_init(&s_lynq_urc_recv_mutex,NULL);
+
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ std::list<Parcel*>::iterator iter;
+ for (iter=s_urc_recv_parcel_list.begin();iter!=s_urc_recv_parcel_list.end();++iter)
+ {
+ delete(*iter);
+ }
+ s_urc_recv_parcel_list.clear();
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+
+ pthread_mutex_init(&s_lynq_urc_mutex,NULL);
+ data_urc_recive_status = 1;
+
+ ret = pthread_create(&data_urc_recv_tid,NULL,thread_urc_recv,NULL);
+ if (ret < 0)
+ {
+ LYERRLOG("urc recv pthread create error");
+ data_urc_recive_status = 0;
+ lynq_socket_recv_stop();
+ ril_deinit_mem();
+ return -1;
+ }
+
+ data_urc_process_status = 1;
+ ret = pthread_create(&data_urc_process_tid,NULL,thread_urc_process,NULL);
+ if (ret < 0)
+ {
+ LYERRLOG("urc recv pthread create error");
+
+ data_urc_process_status = 0;
+ lynq_socket_recv_stop();
+ lynq_urc_recv_thread_stop();
+
+ return -1;
+ }
+ return 0;
+}
+
+int lynq_deinit_data_urc_thread()
+{
+ lynq_socket_recv_stop();
+ lynq_urc_recv_thread_stop();
+ lynq_urc_process_thread_stop();
+
+ pthread_mutex_lock(&s_lynq_urc_process_mutex);
+ std::list<Parcel*>::iterator iter;
+ for (iter=s_urc_recv_parcel_list.begin();iter!=s_urc_recv_parcel_list.end();++iter)
+ {
+ delete(*iter);
+ }
+ s_urc_recv_parcel_list.clear();
+ pthread_mutex_unlock(&s_lynq_urc_process_mutex);
+
+ ril_deinit_mem();
+ return 0;
+}
diff --git a/src/lynq/lib/liblynq-data/lynq_data_urc.h b/src/lynq/lib/liblynq-data/lynq_data_urc.h
new file mode 100755
index 0000000..7ac4f75
--- /dev/null
+++ b/src/lynq/lib/liblynq-data/lynq_data_urc.h
@@ -0,0 +1,30 @@
+#ifndef LYNQ_DATA_URC_H
+#define LYNQ_DATA_URC_H
+
+using ::android::Parcel;
+
+#define LYNQ_URC_SERVICE_PORT 8086
+
+/*the same with lynq_interface.h begin*/
+#define LYNQ_REQUEST_VENDOR_BASE 8000
+#define LYNQ_URC_VENDOR_BASE 9000
+#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
+#define LYNQ_URC_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+1)
+#define LYNQ_URC_DATA_STATUS_IND (LYNQ_URC_VENDOR_BASE+2)
+#define LYNQ_URC_DATA_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+3)
+#define LYNQ_AUTO_ANSWER_CALL (LYNQ_REQUEST_VENDOR_BASE +2)
+#define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
+#define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
+#define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
+
+typedef struct{
+ int resp_type;
+ int urcid;
+}lynq_head_t;
+
+int lynq_init_data_urc_thread();
+int lynq_deinit_data_urc_thread();
+bool is_support_urc(int urc_id);
+void urc_msg_process(Parcel *p);
+
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-data/makefile b/src/lynq/lib/liblynq-data/makefile
index 183ebaa..53ed1d4 100755
--- a/src/lynq/lib/liblynq-data/makefile
+++ b/src/lynq/lib/liblynq-data/makefile
@@ -20,6 +20,7 @@
LOCAL_C_INCLUDES = \
-I. \
-I$(LOCAL_PATH)/include/libdata \
+ -I$(ROOT)$(includedir)/lynq_shm \
-I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
@@ -35,6 +36,7 @@
-lpthread \
-llynq-log \
-llynq-uci \
+ -llynq-shm \
SOURCES = $(wildcard *.cpp)
diff --git a/src/lynq/lib/liblynq-fota/include/iot_rock.h b/src/lynq/lib/liblynq-fota/include/iot_rock.h
index b9915c1..36d37a8 100755
--- a/src/lynq/lib/liblynq-fota/include/iot_rock.h
+++ b/src/lynq/lib/liblynq-fota/include/iot_rock.h
@@ -26,6 +26,7 @@
#define PATCH_MD1IMG (4)
#define PATCH_MD1DSP (5)
#define PATCH_VBMETA (6)
+
#ifdef MOBILETEK_FOTA_CFG
#define PATCH_BL33 (7)
#define FULL_SYSTEM (8)
@@ -125,9 +126,10 @@
char fota_flag[32]; //fota 标志保留
int update_result; //升级结果
- int ota_run; //
- char cid[32];
- char did[32];
+ int ota_run; //
+ char cid[32];
+ char did[32];
+ char addr[64];
} UPDATE_INFO;
diff --git a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
index c68e9c2..8ef06e7 100755
--- a/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
+++ b/src/lynq/lib/liblynq-fota/rock_ua/rock_ua.c
@@ -9,7 +9,7 @@
#include "iot_rock.h"
#include "iot_rock_ipl.h"
#include "sha.h"
-
+#include <log/log.h>
#include <stdarg.h>
#include <errno.h>
#include <fcntl.h>
@@ -22,7 +22,6 @@
//#define off64_t __off64_t
-
#include <hardware/boot_control.h>
#include <hardware/hardware.h>
#include <sys/reboot.h>
@@ -36,8 +35,11 @@
#define ROCK_DEFAULT_BLOCK_SIZE 0x40000
#define ROCK_RAM_LEN (1024*1024)
-
+#define LOG_TAG "LYNQ_FOTA"
#define ROCK_BACKUP_LEN ROCK_DEFAULT_BLOCK_SIZE
+#ifdef GSW_FOTA_CFG
+#define READ_BLOCK_SIZE 0x40000
+#endif
#define DEV_SYSTEM_A "/dev/disk/by-partlabel/system_a"
@@ -115,6 +117,9 @@
OTA_STATUS fota_status;
+#ifdef MOBILETEK_FOTA_CFG
+UPDATE_INFO up_info;
+#endif
extern const hw_module_t HAL_MODULE_INFO_SYM;
boot_control_module_t* module;
@@ -123,6 +128,13 @@
static void lynq_fota_grab_artial_wake_lock(void);
static void lynq_fota_release_wake_lock(void);
+#ifdef MOBILETEK_FOTA_CFG
+int matchString(char* buf, char* sub);
+int reset_fota_flag(void);
+int get_fota_flag(void);
+void check_ril_service(void);
+#endif
+
int rock_mismatch(void* ctx, unsigned char* buf, unsigned int start, unsigned int size,
unsigned int source_hash,unsigned int target_hash) {
@@ -136,84 +148,71 @@
void rock_trace(void* ctx, const char* fmt, ...) {
va_list ap;
- memset(rock_debug_buffer,0x0,sizeof(rock_debug_buffer));
+ memset(rock_debug_buffer,0x0,sizeof(rock_debug_buffer));
va_start (ap, fmt);
-
-
vsnprintf(rock_debug_buffer,sizeof(rock_debug_buffer),fmt,ap);
- LYDBGLOG("+[UA]: %s",rock_debug_buffer);
-
-
+ LYDBGLOG("+[UA]: %s",rock_debug_buffer);
va_end (ap);
}
static int save_fota_status()
{
- int err;
+ int err;
fd_fota_status = open(FILE_FOTA_STATE,O_RDWR | O_CREAT,0777);
- //fd_update_status = open(FILE_UPDATE_STATE,O_RDWR);
if (fd_fota_status < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: save_fota_status: Error opening metadata file: %s\n",strerror(errno));
return -err;
}
-
- write(fd_fota_status, &fota_status,sizeof(fota_status));
- sync();
-
- close(fd_fota_status);
+
+ write(fd_fota_status, &fota_status,sizeof(fota_status));
+ sync();
+ close(fd_fota_status);
}
void rock_progress(void* ctx, int percent) {
- int i = 0;
+ int i = 0;
rock_trace(ctx, "rock update progress %d\n", percent);
- if (percent > 20) {
+ if (percent > 20) {
i = fota_status.ota_run;
- if (fota_status.update_status[i-1].check_delta != PASS) {
- fota_status.update_status[i-1].check_delta = PASS;
- fota_status.update_status[i-1].check_rom= PASS;
- save_fota_status();
- }
- }
+ if (fota_status.update_status[i-1].check_delta != PASS) {
+ fota_status.update_status[i-1].check_delta = PASS;
+ fota_status.update_status[i-1].check_rom= PASS;
+ save_fota_status();
+ }
+ }
}
int rock_process_block(void* ctx, unsigned char* data, unsigned int start, unsigned int size){
//rock_trace(ctx, "rock update progress block %d\n", size);
int writen = 0;
- int ret,err;
-
-
- if (start == BACKUP_ADDR_FLAG) {
- int fd_backup = open(FILE_BACKUP,O_RDWR | O_CREAT,0777);
- while (writen < size) {
- write(fd_backup,data,ROCK_DEFAULT_BLOCK_SIZE);
- sync();
- writen += ROCK_DEFAULT_BLOCK_SIZE;
- }
- close(fd_backup);
- return size;
- }
-
-
-
- writen = 0;
-
+ int err,ret;
+
+ if (start == BACKUP_ADDR_FLAG) {
+ int fd_backup = open(FILE_BACKUP,O_RDWR | O_CREAT,0777);
+ while (writen < size) {
+ write(fd_backup,data,ROCK_DEFAULT_BLOCK_SIZE);
+ sync();
+ writen += ROCK_DEFAULT_BLOCK_SIZE;
+ }
+ close(fd_backup);
+ return size;
+ }
+ writen = 0;
if (mtk_device_wrap_seek(fd_write, start, SEEK_SET) < 0) {
err = errno;
rock_trace(ctx, "mtk_device_wrap_seek write\n");
- return err;
- }
+ return err;
+ }
while (writen < size) {
ret = mtk_device_wrap_write(fd_write,data+writen, ROCK_DEFAULT_BLOCK_SIZE);
writen += ROCK_DEFAULT_BLOCK_SIZE;
- }
-
-
+ }
return size;
}
@@ -308,7 +307,7 @@
int rock_read_delta(void* ctx, unsigned char* dest, unsigned int offset, unsigned int size){
int ret = 0,err = 0;
-
+
if (lseek(fd_delta, offset + delta_offset, SEEK_SET) < 0) {
err = -errno;
@@ -351,7 +350,7 @@
/* ROCK IPL end */
-
+#ifdef GSW_FOTA_CFG
static int init_dev_fd()
{
@@ -361,77 +360,119 @@
{
return E_ROCK_FOTA_ADDR;
}
- LYERRLOG("+[UA]: get fota pack addr: %s\n",lynq_fota_addr);
- //fd_delta = mtk_device_wrap_open(DEV_DELTA,O_RDONLY);
+ RLOGD("+[UA]: get fota pack addr: %s\n", lynq_fota_addr);
fd_delta = open(lynq_fota_addr,O_RDWR);
if (fd_delta < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
return -err;
}
fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
- //fd_update_status = open(FILE_UPDATE_STATE,O_RDWR);
-
if (fd_update_status < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening fd_delta file: %s\n",strerror(errno));
return -err;
}
return 0;
}
+#endif
+#ifdef MOBILETEK_FOTA_CFG
+static int init_dev_fd()
+{
+
+ int err, result;
+ char lynq_fota_addr[35];
+ if(0 != lynq_fota_get_addr_value(lynq_fota_addr))
+ {
+ return E_ROCK_FOTA_ADDR;
+ }
+ RLOGD("lynq_fota_addr: %s\n", lynq_fota_addr);
+ if(!(strcmp(lynq_fota_addr, "/tmp/fota.delta")))
+ {
+ result = test_write_delta(lynq_fota_addr, DEV_DELTA);
+ if(result != 0)
+ {
+ RLOGD("fota.delta write into mtd fail !\n");
+ }
+ strcpy(lynq_fota_addr, DEV_DELTA);
+ }
+ if(lynq_fota_set_addr_value(lynq_fota_addr,strlen(lynq_fota_addr)))
+ {
+ RLOGD("set addr fail\n");
+ return 1;
+ }
+ RLOGD("+[UA]: get fota pack addr: %s\n", lynq_fota_addr);
+ fd_delta = open(lynq_fota_addr,O_RDWR);
+ if (fd_delta < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening fd_delta file: %s\n",strerror(errno));
+ return -err;
+ }
+ get_fota_flag();
+ return 0;
+}
+#endif
-
-
+#ifdef MOBILETEK_FOTA_CFG
+static int reboot_device()
+{
+ sleep(5);
+ sync();
+ sleep(5);
+ system("reboot");
+}
+#endif
+#ifdef GSW_FOTA_CFG
static int close_dev_fd(int fd)
{
close(fd);
}
-
static int reboot_device() {
reboot(RB_AUTOBOOT);
while (1) pause();
}
+#endif
int test_write_delta(char *source, char *target)
{
int fd_source,fd_target,size;
-
- char delta_data[ROCK_DEFAULT_BLOCK_SIZE];
-
+
+ char delta_data[ROCK_DEFAULT_BLOCK_SIZE];
fd_source = open(source,O_RDONLY);
-
+
if (fd_source < 0) {
- LYERRLOG("+[UA]: open source error\n");
+ RLOGD("+[UA]: open source error\n");
return 1;
}
fd_target = mtk_device_wrap_open(target,O_RDWR);
-
if (fd_target < 0) {
mtk_device_wrap_close(fd_target);
- close(fd_source);
- LYERRLOG("+[UA]: open target error\n");
+ close(fd_source);
+ RLOGD("+[UA]: open target error\n");
return 1;
- }
-
- while(( size = read(fd_source,delta_data,ROCK_DEFAULT_BLOCK_SIZE))>0) {
- mtk_device_wrap_write(fd_target,delta_data,ROCK_DEFAULT_BLOCK_SIZE);
}
-
- mtk_device_wrap_close(fd_target);
- close(fd_source);
- return 0;
+#ifdef MOBILETEK_FOTA_CFG
+ system("flash_eraseall /dev/mtd41");
+#endif
+ while(( size = read(fd_source,delta_data,ROCK_DEFAULT_BLOCK_SIZE))>0) {
+ mtk_device_wrap_write(fd_target,delta_data,ROCK_DEFAULT_BLOCK_SIZE);
+ }
+
+ mtk_device_wrap_close(fd_target);
+ close(fd_source);
+ return 0;
}
@@ -444,7 +485,7 @@
fd_source = mtk_device_wrap_open(source,O_RDONLY);
if (fd_source < 0) {
- LYERRLOG("+[UA]: open source error\n");
+ RLOGD("+[UA]: open source error\n");
return 1;
}
@@ -453,7 +494,7 @@
if (fd_target < 0) {
mtk_device_wrap_close(fd_target);
mtk_device_wrap_close(fd_source);
- LYERRLOG("+[UA]: open target error\n");
+ RLOGD("+[UA]: open target error\n");
return 1;
}
@@ -518,27 +559,35 @@
static int rock_update_main(unsigned int rom_base, unsigned int backup_base, unsigned int backup_len, int read_rom_directly, int first_run) {
- int status,err,start;
+ int status,err;
+#ifdef MOBILETEK_FOTA_CFG
+ int start;
+#endif
int ret = 0;
- int i = 0;
- int retry_cnt = 0;
-
- IOT_UPDATA_CONTEXT ctx;
+ int i = 0;
+ int retry_cnt = 0;
+
+ IOT_UPDATA_CONTEXT ctx;
+#ifdef GSW_FOTA_CFG
UPDATE_INFO up_info;
//OTA_STATUS fota_status;
-
+#endif
const hw_module_t* hw_module;
unsigned int slot;
+#ifdef MOBILETEK_FOTA_CFG
+ unsigned int update_mode = -1;
+#endif
+#ifdef GSW_FOTA_CFG
unsigned int update_mode = MODE_NORMAL;
- unsigned int delta_size;
+#endif
+ unsigned int delta_size;
unsigned char full_header[9];
-
- char digest_s[SHA_DIGEST_SIZE];
- char digest_t[SHA_DIGEST_SIZE];
-
+ char digest_s[SHA_DIGEST_SIZE];
+ char digest_t[SHA_DIGEST_SIZE];
+
hw_module = &HAL_MODULE_INFO_SYM;
if (!hw_module ||
@@ -546,7 +595,7 @@
ret = -EINVAL;
}
if (ret != 0) {
- LYERRLOG("+[UA]: Error loading boot_control HAL implementation.\n");
+ RLOGD("+[UA]: Error loading boot_control HAL implementation.\n");
return -1;
}
@@ -555,8 +604,8 @@
if (module == NULL) {
- LYERRLOG("+[UA]: Error getting bootctrl module.\n");
- return -1;
+ RLOGD("+[UA]: Error getting bootctrl module.\n");
+ return -1;
}
lynq_init_wake_lock_func();
@@ -567,60 +616,77 @@
int is_successful = module->isSlotMarkedSuccessful(module, current_slot);
- LYVERBLOG("Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
-
+ RLOGD("+[UA]: Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
- memset(&ctx, 0, sizeof(ctx));
- ctx.rom_base = 0;
- ctx.ram_base =(unsigned char *)&ram_buffer[0];
- ctx.ram_len = ROCK_RAM_LEN;
- ctx.backup_base = BACKUP_ADDR_FLAG;
- ctx.backup_len = ROCK_DEFAULT_BLOCK_SIZE;
- ctx.update_nvram = 0;
- ctx.read_rom_directly = read_rom_directly;
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.rom_base = 0;
+ ctx.ram_base =(unsigned char *)&ram_buffer[0];
+ ctx.ram_len = ROCK_RAM_LEN;
+ ctx.backup_base = BACKUP_ADDR_FLAG;
+ ctx.backup_len = ROCK_DEFAULT_BLOCK_SIZE;
+ ctx.update_nvram = 0;
+ ctx.read_rom_directly = read_rom_directly;
//ctx.first_run = first_run;
ctx.first_run = 1;
-
+#ifdef MOBILETEK_FOTA_CFG
+ get_fota_flag();
+#endif
if(0 != init_dev_fd())
{
- LYVERBLOG("+[UA]: get fota addr error\n");
+ RLOGD("+[UA]: get fota addr error\n");
lynq_fota_release_wake_lock();
return E_ROCK_FOTA_ADDR;
}
+
+#ifdef GSW_FOTA_CFG
memset(&up_info, 0, sizeof(up_info));
memset(&fota_status,0,sizeof(fota_status));
-
+#endif
+#ifdef MOBILETEK_FOTA_CFG
+ fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd_update_status < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening fd_update_status file: %s\n",strerror(errno));
+ return -err;
+ }
+#endif
lseek(fd_update_status,0,SEEK_SET);
+#ifdef MOBILETEK_FOTA_CFG
+ memset(&up_info, 0, sizeof(up_info));
+#endif
read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
- LYVERBLOG("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
-
-
- if ((up_info.ota_run>PATCH_BL33)||(up_info.ota_run<PATCH_SYSTEM))
- {
- up_info.ota_run = 0;
- }
-
- up_info.ota_run = 0;
-
- if((up_info.fota_flag[0]=='A')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='B')){
- update_mode = MODE_A2B;
- }else if((up_info.fota_flag[0]=='B')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='A')){
- update_mode = MODE_B2A;
- }else{
- update_mode = MODE_NORMAL;
- }
-
- LYVERBLOG("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
- LYVERBLOG("+[UA]: update_mode = %d\n",update_mode);
-
+ RLOGD("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
+#ifdef MOBILETEK_FOTA_CFG
+ RLOGD("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
+#endif
+ if ((up_info.ota_run>PATCH_BL33)||(up_info.ota_run<PATCH_SYSTEM))
+ {
+ up_info.ota_run = 0;
+ }
+ up_info.ota_run = 0;
+ if((up_info.fota_flag[0]=='A')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='B'))
+ {
+ update_mode = MODE_A2B;
+ }
+ else if((up_info.fota_flag[0]=='B')&&(up_info.fota_flag[1]=='-')&&(up_info.fota_flag[2]=='A'))
+ {
+ update_mode = MODE_B2A;
+ }
+ else
+ {
+ update_mode = MODE_NORMAL;
+ }
+#ifdef GSW_FOTA_CFG
+ RLOGD("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
+#endif
+ RLOGD("+[UA]: update_mode = %d\n",update_mode);
memset(&da_head, 0, sizeof(da_head));
-
- read(fd_delta, (unsigned char*)&da_head, sizeof(da_head));
+ read(fd_delta, (unsigned char*)&da_head, sizeof(da_head));
#ifdef GSW_FOTA_CFG
rock_trace(&ctx, "da_head.sys:%d,da_head.boot:%d,da_head.tee:%d,da_head.md1img=%d,da_head.md1dsp=%d,da_head.vbmeta=%d,da_head.oemapp=%d,da_head.oemapp2=%d,da_head.bl33=%d\n", da_head.sys, da_head.boot,da_head.tee,da_head.md1img,da_head.md1dsp,da_head.vbmeta,da_head.oemapp,da_head.oemapp2,da_head.bl33);
@@ -756,7 +822,7 @@
fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
if (fd_system_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening system file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -765,7 +831,7 @@
fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
if (fd_system_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening system file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -795,13 +861,10 @@
sync();
- LYVERBLOG("+[UA]: Start upgrading system.\n");
+ RLOGD("+[UA]: Start upgrading system.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: system upgrade result:%d\n",status);
+ RLOGD("+[UA]: system upgrade result:%d\n",status);
- //up_info.ota_run = 0;
-
- //fota_status.ota_run = 0;
fota_status.update_status[PATCH_SYSTEM -1].update_result= status;
fota_status.update_result= status;
@@ -810,6 +873,7 @@
fota_status.update_status[PATCH_SYSTEM -1].check_delta = PASS;
fota_status.update_status[PATCH_SYSTEM -1].check_rom = PASS;
+ RLOGD("system upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_SYSTEM -1].check_delta = ERROR;
@@ -881,7 +945,7 @@
fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
if (fd_boot_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening boot file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -890,7 +954,7 @@
fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
if (fd_boot_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening boot file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -922,9 +986,9 @@
- LYVERBLOG("+[UA]: Start upgrading boot.\n");
+ RLOGD("+[UA]: Start upgrading boot.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: boot upgrade result:%d\n",status);
+ RLOGD("+[UA]: boot upgrade result:%d\n",status);
//up_info.ota_run = 0;
//fota_status.ota_run = 0;
@@ -936,6 +1000,7 @@
fota_status.update_status[PATCH_BOOT-1].check_delta = PASS;
fota_status.update_status[PATCH_BOOT-1].check_rom = PASS;
+ RLOGD("boot upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_BOOT-1].check_delta = ERROR;
@@ -1007,7 +1072,7 @@
fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
if (fd_tee_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening tee file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1016,7 +1081,7 @@
fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
if (fd_tee_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening tee file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1046,9 +1111,9 @@
write(fd_update_status, &up_info,sizeof(up_info));
sync();
- LYVERBLOG("+[UA]: Start upgrading tee.\n");
+ RLOGD("+[UA]: Start upgrading tee.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: tee upgrade result:%d\n",status);
+ RLOGD("+[UA]: tee upgrade result:%d\n",status);
//up_info.ota_run = 0;
//fota_status.ota_run = 0;
fota_status.update_status[PATCH_TEE-1].update_result= status;
@@ -1059,6 +1124,7 @@
fota_status.update_status[PATCH_TEE-1].check_delta = PASS;
fota_status.update_status[PATCH_TEE-1].check_rom = PASS;
+ RLOGD("tee upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_TEE-1].check_delta = ERROR;
@@ -1127,7 +1193,7 @@
fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
if (fd_md1img_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening md1img file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1136,7 +1202,7 @@
fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
if (fd_md1img_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening md1img file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1166,9 +1232,9 @@
sync();
- LYVERBLOG("+[UA]: Start upgrading md1img.\n");
+ RLOGD("+[UA]: Start upgrading md1img.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: md1img upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1img upgrade result:%d\n",status);
//fota_status.ota_run = 0;
fota_status.update_status[PATCH_MD1IMG-1].update_result= status;
@@ -1179,6 +1245,7 @@
fota_status.update_status[PATCH_MD1IMG-1].check_delta = PASS;
fota_status.update_status[PATCH_MD1IMG-1].check_rom = PASS;
+ RLOGD("md1img upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_MD1IMG-1].check_delta = ERROR;
@@ -1247,7 +1314,7 @@
fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
if (fd_md1dsp_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening md1dsp file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1256,7 +1323,7 @@
fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
if (fd_md1dsp_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening md1dsp file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1288,9 +1355,9 @@
sync();
- LYVERBLOG("+[UA]: Start upgrading md1dsp.\n");
+ RLOGD("+[UA]: Start upgrading md1dsp.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: md1dsp upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
//fota_status.ota_run = 0;
fota_status.update_status[PATCH_MD1DSP-1].update_result= status;
@@ -1301,6 +1368,7 @@
fota_status.update_status[PATCH_MD1DSP-1].check_delta = PASS;
fota_status.update_status[PATCH_MD1DSP-1].check_rom = PASS;
+ RLOGD("md1dsp upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_MD1DSP-1].check_delta = ERROR;
@@ -1368,7 +1436,7 @@
fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
if (fd_vbmeta_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening vbmeta file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1377,7 +1445,7 @@
fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
if (fd_vbmeta_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening vbmeta file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1406,9 +1474,9 @@
write(fd_update_status, &up_info,sizeof(up_info));
sync();
- LYVERBLOG("+[UA]: Start upgrading vbmeta.\n");
+ RLOGD("+[UA]: Start upgrading vbmeta.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: vbmeta upgrade result:%d\n",status);
+ RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
up_info.ota_run = 0;
//fota_status.ota_run = 0;
@@ -1420,6 +1488,7 @@
fota_status.update_status[PATCH_VBMETA-1].check_delta = PASS;
fota_status.update_status[PATCH_VBMETA-1].check_rom = PASS;
+ RLOGD("vbmeta upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_VBMETA-1].check_delta = ERROR;
@@ -1720,7 +1789,7 @@
fd_bl33 = mtk_device_wrap_open(DEV_BL33,O_RDWR);
if (fd_bl33 < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1739,9 +1808,9 @@
write(fd_update_status, &up_info,sizeof(up_info));
sync();
- LYVERBLOG("+[UA]: Start upgrading bl33.\n");
+ RLOGD("+[UA]: Start upgrading bl33.\n");
status = iot_patch(&ctx);
- LYVERBLOG("+[UA]: bl33 upgrade result:%d\n",status);
+ RLOGD("+[UA]: bl33 upgrade result:%d\n",status);
up_info.ota_run = 0;
@@ -1753,6 +1822,7 @@
fota_status.update_status[PATCH_BL33-1].check_delta = PASS;
fota_status.update_status[PATCH_BL33-1].check_rom = PASS;
+ RLOGD("bl33 upgrade success!!!\n");
}else if(status == E_ROCK_INVALID_DELTA) {
fota_status.update_status[PATCH_BL33-1].check_delta = ERROR;
@@ -1812,7 +1882,7 @@
if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
err = errno;
- LYERRLOG("+[UA]: mtk_device_wrap_seek df_delta err\n");
+ RLOGD("+[UA]: mtk_device_wrap_seek df_delta err\n");
lynq_fota_release_wake_lock();
return -1;
}
@@ -1821,7 +1891,7 @@
if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
- LYERRLOG("+[UA]: invalid full delta header\r\n");
+ RLOGD("+[UA]: invalid full delta header\r\n");
up_info.fota_flag[0] = 'e';
up_info.fota_flag[1] = 'n';
up_info.fota_flag[2] = 'd';
@@ -1866,7 +1936,7 @@
fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
if (fd_system_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_sys file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1875,7 +1945,7 @@
fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
if (fd_system_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_sys file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1885,7 +1955,7 @@
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading system full.\n");
+ RLOGD("+[UA]: Start upgrading system full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_sys);
@@ -1896,7 +1966,7 @@
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: system full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: system full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
@@ -1910,7 +1980,7 @@
}
}
- LYVERBLOG("+[UA]: system full upgrade result:%d\n",status);
+ RLOGD("+[UA]: system full upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_SYSTEM-1].update_result = status;
@@ -1951,7 +2021,7 @@
fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
if (fd_boot_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1960,7 +2030,7 @@
fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
if (fd_boot_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_boot file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -1969,7 +2039,7 @@
fota_status.ota_run = FULL_BOOT;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading boot full.\n");
+ RLOGD("+[UA]: Start upgrading boot full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_boot);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_boot,digest_s);
@@ -1977,7 +2047,7 @@
retry_cnt++;
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
- LYVERBLOG("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
mtk_device_wrap_close(fd_curr);
if (retry_cnt>3) {
@@ -1993,7 +2063,7 @@
}
- LYVERBLOG("+[UA]: boot full upgrade result:%d\n",status);
+ RLOGD("+[UA]: boot full upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_BOOT-1].update_result = status;
save_fota_status();
@@ -2032,7 +2102,7 @@
fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
if (fd_tee_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_tee file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2041,7 +2111,7 @@
fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
if (fd_tee_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_tee file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2050,7 +2120,7 @@
fota_status.ota_run = FULL_TEE;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading tee full.\n");
+ RLOGD("+[UA]: Start upgrading tee full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_tee);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_tee,digest_s);
@@ -2058,7 +2128,7 @@
retry_cnt++;
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: tee full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: tee full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2110,7 +2180,7 @@
fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
if (fd_md1img_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_md1img file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2119,7 +2189,7 @@
fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
if (fd_md1img_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_md1img file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2128,7 +2198,7 @@
fota_status.ota_run = FULL_MD1IMG;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading md1img full.\n");
+ RLOGD("+[UA]: Start upgrading md1img full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_md1img);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1img,digest_s);
@@ -2137,7 +2207,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2150,7 +2220,7 @@
}
}
- LYVERBLOG("+[UA]: md1img upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1img upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_MD1IMG-1].update_result = status;
save_fota_status();
@@ -2189,7 +2259,7 @@
fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
if (fd_md1dsp_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_md1dsp file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2198,7 +2268,7 @@
fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
if (fd_md1dsp_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_md1dsp file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2207,7 +2277,7 @@
fota_status.ota_run = FULL_MD1DSP;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading md1dsp full.\n");
+ RLOGD("+[UA]: Start upgrading md1dsp full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_md1dsp);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1dsp,digest_s);
@@ -2216,7 +2286,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2229,7 +2299,7 @@
}
}
- LYVERBLOG("+[UA]: md1dsp upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_MD1DSP-1].update_result = status;
save_fota_status();
@@ -2268,7 +2338,7 @@
fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
if (fd_vbmeta_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_vbmeta file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2277,7 +2347,7 @@
fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
if (fd_vbmeta_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening full_vbmeta file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -2286,7 +2356,7 @@
fota_status.ota_run = FULL_VBMETA;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading vbmeta full.\n");
+ RLOGD("+[UA]: Start upgrading vbmeta full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_vbmeta);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_vbmeta,digest_s);
@@ -2295,7 +2365,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -2308,7 +2378,7 @@
}
}
- LYVERBLOG("+[UA]: vbmeta upgrade result:%d\n",status);
+ RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_VBMETA-1].update_result = status;
save_fota_status();
@@ -2496,132 +2566,284 @@
if(update_mode == MODE_NORMAL){ //need A VS B
if(current_slot == SLOT_A) {
+ up_info.fota_flag[0] = 'B';
+ up_info.fota_flag[1] = '-';
+ up_info.fota_flag[2] = 'A';
+
+ }
+ else
+ {
- up_info.fota_flag[0] = 'B';
- up_info.fota_flag[1] = '-';
- up_info.fota_flag[2] = 'A';
-
- }else{
-
up_info.fota_flag[0] = 'A';
up_info.fota_flag[1] = '-';
up_info.fota_flag[2] = 'B';
}
-
- }else{
- up_info.fota_flag[0] = 'e';
- up_info.fota_flag[1] = 'n';
- up_info.fota_flag[2] = 'd';
-
- }
-
-
- up_info.update_result = status;
+ }
+ else
+ {
+ up_info.fota_flag[0] = 'e';
+ up_info.fota_flag[1] = 'n';
+ up_info.fota_flag[2] = 'd';
+ }
+ up_info.update_result = status;
up_info.ota_run = 0;
- lseek(fd_update_status,0,SEEK_SET);
- write(fd_update_status, &up_info,sizeof(up_info));
+ lseek(fd_update_status,0,SEEK_SET);
+ RLOGD("up_info: fota_flag: %s\n",up_info.fota_flag);
+ write(fd_update_status, &up_info,sizeof(up_info));
sync();
-
+#ifdef MOBILETEK_FOTA_CFG
+ close(fd_delta);
+#endif
+#ifdef GSW_FOTA_CFG
close_dev_fd(fd_delta);
-
+#endif
//close_dev_fd(fd_curr);
close(fd_update_status);
- sync();
-
+ sync();
- slot = (current_slot == 0) ? 1 : 0;
-
- LYVERBLOG("+[UA]: slot SLOT = %d\n",slot);
-
- if(update_mode==MODE_NORMAL){
- module->setActiveBootSlot(module,slot);
- LYVERBLOG("+[UA]: upgrade is success!!!!\n");
- }
+ slot = (current_slot == 0) ? 1 : 0;
+ RLOGD("+[UA]: slot SLOT = %d\n",slot);
+#ifdef MOBILETEK_FOTA_CFG
+ if(update_mode==MODE_NORMAL)
+ {
+ module->setActiveBootSlot(module,slot);
+ RLOGD("+[UA]:slot %d upgrade is success!!!!\n", slot);
+ }
+#endif
+#ifdef GSW_FOTA_CFG
+ if(switch_slot_flag==1)
+ {
+ module->setActiveBootSlot(module,slot);
+ RLOGD("+[UA]: upgrade is success!!!!\n");
+ }
+#endif
fota_status.ota_run = 0;
- fota_status.switch_slot = PASS;
- fota_status.update_result = status;
+ fota_status.switch_slot = PASS;
+ fota_status.update_result = status;
save_fota_status();
-
lynq_fota_release_wake_lock();
-
- if(update_mode==MODE_NORMAL){
- reboot_device();
- }
-
- return status;
+
+ if(update_mode==MODE_NORMAL)
+ {
+ reboot_device();
+ }
+
+ return status;
}
-
-static void rock_fail_handler() {
-
+#ifdef GSW_FOTA_CFG
+static void rock_fail_handler()
+{
+ int ret = 0;
+ RLOGD("rock_fail_handler start\n");
+ ret = rock_update_main(0, 0, 0, 0, 1, 1);
+ if(ret)
+ {
+ RLOGD("fota update fail again!\n");
+ }
}
+#endif
/* main entrpoint */
-int lynq_rock_main(int first_run) {
+int lynq_rock_main(int first_run)
+{
+ int ret = 0;
- int ret = 0;
-
#if 0
-
- printf("-********copy delta ***-\n");
- test_write_delta("/data/delta",DEV_DELTA);
-
-#endif
-
+
+ printf("-********copy delta ***-\n");
+ test_write_delta("/data/delta",DEV_DELTA);
+#endif
+#ifdef MOBILETEK_FOTA_CFG
ret = rock_update_main(0, 0, 0, 0, first_run);
- if(ret) {
- rock_fail_handler();
- }
- return ret;
+#endif
+#ifdef GSW_FOTA_CFG
+ ret = rock_update_main(0, 0, 0, 0, first_run, 1);
+#endif
+ RLOGD("rock_update_main ret = %d\n", ret);
+ if(ret)
+ {
+ RLOGD("fota update fail!\n");
+ }
+ return ret;
}
#endif
//lt add @2021.9.23 for deal with power down \ backup or upgrade.
+#ifdef GSW_FOTA_CFG
int lynq_fota_func(void)
{
+ int fd;
+ int first_run = 1;
+ int ret = 0;
+ UPDATE_INFO lynq_up_info;
+ memset(&lynq_up_info, 0, sizeof(lynq_up_info));
+ fd = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd < 0)
+ {
+ return -1;
+ }
+ read(fd,(unsigned char *)&lynq_up_info,sizeof(lynq_up_info));
+ close(fd);
- int fd;
- int first_run = 1;
- UPDATE_INFO lynq_up_info;
-
- memset(&lynq_up_info, 0, sizeof(lynq_up_info));
-
- fd = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
-
- if (fd < 0) {
- return -1;
- }
-
- read(fd,(unsigned char *)&lynq_up_info,sizeof(lynq_up_info));
- close(fd);
-
- if(lynq_up_info.ota_run != 0) {
- //Power off, call UA
- LYVERBLOG("[+UP]: ***Power off, call UA***\n");
- lynq_rock_main(first_run);
- }else if (((lynq_up_info.fota_flag[0]=='A')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='B'))||((lynq_up_info.fota_flag[0]=='B')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='A'))){
- //Upgrade the other side and call UA
- LYVERBLOG("[+UP]: ***Upgrade the other side and call UA***\n");
- lynq_rock_main(first_run);
- }
-/*
- else{
- //Normal procedure before, to check the upgrade package
-// LYVERBLOG("[+UP]: ***Normal procedure before, to check the upgrade package***\n");
-// lynq_rock_main(first_run);
- }*/
- return 0;
+ if(lynq_up_info.ota_run != 0)
+ {
+ //Power off, call UA
+ RLOGD("[+UP]: ***Power off, call UA***\n");
+ ret = rock_update_main(0, 0, 0, 0, first_run, 1);
+ RLOGD("rock_update_main ret = %d\n", ret);
+ if(ret)
+ {
+ RLOGD("fota update fail!\n");
+ }
+ }
+ if(((lynq_up_info.fota_flag[0]=='A')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='B'))||
+ ((lynq_up_info.fota_flag[0]=='B')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='A')))
+ {
+ //Upgrade the other side and call UA
+ RLOGD("[+UP]: ***Upgrade the other side and call UA***\n");
+ ret = rock_update_main(0, 0, 0, 0, first_run, 0);
+ RLOGD("rock_update_main ret = %d\n", ret);
+ if(ret)
+ {
+ RLOGD("fota update fail!\n");
+ }
+ }
+ return 0;
}
+#endif
+#ifdef MOBILETEK_FOTA_CFG
+int lynq_fota_func(void)
+{
+ int fd;
+ int first_run = 1;
+ UPDATE_INFO lynq_up_info;
+ memset(&lynq_up_info, 0, sizeof(lynq_up_info));
+ fd = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd < 0)
+ {
+ return -1;
+ }
+ read(fd,(unsigned char *)&lynq_up_info,sizeof(lynq_up_info));
+ close(fd);
+ RLOGD("lynq_up_info: fota_flag: %s\n",lynq_up_info.fota_flag);
+ if(lynq_up_info.ota_run != 0)
+ {
+ //Power off, call UA
+ RLOGD("[+UP]: ***Power off, call UA***\n");
+ lynq_rock_main(first_run);
+ }
+ if (((lynq_up_info.fota_flag[0]=='A')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='B'))||
+ ((lynq_up_info.fota_flag[0]=='B')&&(lynq_up_info.fota_flag[1]=='-')&&(lynq_up_info.fota_flag[2]=='A')))
+ {
+ //Upgrade the other side and call UA
+ RLOGD("[+UP]: ***Upgrade the other side and call UA***\n");
+ lynq_rock_main(first_run);
+ if( 0 != reset_fota_flag())
+ {
+ RLOGD("reset_fota_flag fail\n");
+ }
+ }
+ sleep(120);
+ check_ril_service();
+ return 0;
+}
+
+int reset_fota_flag(void)
+{
+ int err = 0;
+ fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd_update_status < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ return err;
+ }
+ lseek(fd_update_status,0,SEEK_SET);
+ up_info.fota_flag[0] = 'e';
+ up_info.fota_flag[1] = 'n';
+ up_info.fota_flag[2] = 'd';
+ write(fd_update_status, &up_info,sizeof(up_info));
+ sync();
+ close(fd_update_status);
+ sync();
+ return err;
+
+}
+
+int get_fota_flag(void)
+{
+ int err = 0;
+ fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd_update_status < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ return err;
+ }
+ lseek(fd_update_status,0,SEEK_SET);
+ memset(&up_info, 0, sizeof(up_info));
+ read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
+ close(fd_update_status);
+ sync();
+ RLOGD("get_fota_flag: %s\n", up_info.fota_flag);
+ return err;
+}
+
+void check_ril_service(void)
+{
+ FILE *fp;
+ int ril_flag = 0;
+ char dtr_buffer[180];
+ char buffer[50] = "/usr/bin/lynq-ril-service";
+ fp = popen("ps -ef|grep lynq-ril","r");
+ fgets(dtr_buffer, sizeof(dtr_buffer), fp);
+ if(matchString(dtr_buffer, buffer) == 0)
+ {
+ ril_flag = 1;
+ }
+ pclose(fp);
+ if(ril_flag == 1)
+ {
+ reboot_device();
+ }
+}
+
+int matchString(char* buf, char* sub) {
+ char* tbuf = buf;
+ char* tsub = sub;
+ int i = 0;
+ int j = 0;
+ while (i <= strlen(tbuf ) - 1 && j <= strlen(tsub )-1)
+ {
+ if (tbuf [i] == tsub [j])
+ {
+ i++;
+ j++;
+ }
+ else
+ {
+ i = i - j + 1;
+ j = 0;
+ }
+ }
+
+ if (j == strlen(tsub))
+ {
+ return 1;
+ }
+
+ return 0;
+}
+#endif
int lynq_nand_open(const char *pathname, int flags)
{
@@ -2695,13 +2917,18 @@
*/
int lynq_fota_nrestart(void)
{
- int status,err,start;
+ int status,err;
+#ifdef GSW_FOTA_CFG
+ int start;
+#endif
int ret = 0;
int i = 0;
int retry_cnt = 0;
IOT_UPDATA_CONTEXT ctx;
+#ifdef GSW_FOTA_CFG
UPDATE_INFO up_info;
+#endif
//OTA_STATUS fota_status;
@@ -2723,7 +2950,7 @@
ret = -EINVAL;
}
if (ret != 0) {
- LYERRLOG("+[UA]: Error loading boot_control HAL implementation.\n");
+ RLOGD("+[UA]: Error loading boot_control HAL implementation.\n");
return -1;
}
@@ -2732,7 +2959,7 @@
if (module == NULL) {
- LYERRLOG("+[UA]: Error getting bootctrl module.\n");
+ RLOGD("+[UA]: Error getting bootctrl module.\n");
return -1;
}
@@ -2744,7 +2971,7 @@
int is_successful = module->isSlotMarkedSuccessful(module, current_slot);
- LYVERBLOG("Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
+ RLOGD("Booting slot = %d, : isSlotMarkedSuccessful= %d\n",current_slot,is_successful);
@@ -2761,20 +2988,21 @@
if(0 != init_dev_fd())
{
- LYVERBLOG("+[UA]: get fota addr error\n");
+ RLOGD("+[UA]: get fota addr error\n");
lynq_fota_release_wake_lock();
return E_ROCK_FOTA_ADDR;
}
- memset(&up_info, 0, sizeof(up_info));
-
+
+#ifdef GSW_FOTA_CFG
memset(&fota_status,0,sizeof(fota_status));
-
+#endif
lseek(fd_update_status,0,SEEK_SET);
+ memset(&up_info, 0, sizeof(up_info));
read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
- LYVERBLOG("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
+ RLOGD("+[UA]: up_info.ota_run = %d\n",up_info.ota_run);
if ((up_info.ota_run>PATCH_BL33)||(up_info.ota_run<PATCH_SYSTEM))
@@ -2792,8 +3020,8 @@
update_mode = MODE_NORMAL;
}
- LYVERBLOG("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
- LYVERBLOG("+[UA]: update_mode = %d\n",update_mode);
+ RLOGD("+[UA]: up_info.fota_flag = %s\n",up_info.fota_flag);
+ RLOGD("+[UA]: update_mode = %d\n",update_mode);
memset(&da_head, 0, sizeof(da_head));
@@ -3987,7 +4215,7 @@
if (lseek(fd_delta, DELTA_HEARD_SIZE + delta_size, SEEK_SET) < 0) {
err = errno;
- LYERRLOG("+[UA]: mtk_device_wrap_seek df_delta err\n");
+ RLOGD("+[UA]: mtk_device_wrap_seek df_delta err\n");
lynq_fota_release_wake_lock();
return -1;
}
@@ -3996,8 +4224,8 @@
if (memcmp(full_header, "full-ota", DELTA_FULL_HEARD_SIZE) != 0) {
- LYERRLOG("+[UA]: invalid full delta header\r\n");
- up_info.fota_flag[0] = 'e';
+ RLOGD("+[UA]: invalid full delta header\r\n");
+ up_info.fota_flag[0] = 'e';
up_info.fota_flag[1] = 'n';
up_info.fota_flag[2] = 'd';
up_info.update_result = -1;
@@ -4041,7 +4269,7 @@
fd_system_a = mtk_device_wrap_open(DEV_SYSTEM_A,O_RDWR);
if (fd_system_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4050,7 +4278,7 @@
fd_system_b = mtk_device_wrap_open(DEV_SYSTEM_B,O_RDWR);
if (fd_system_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4060,7 +4288,7 @@
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading system full.\n");
+ RLOGD("+[UA]: Start upgrading system full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_sys);
@@ -4071,7 +4299,7 @@
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: system full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: system full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
@@ -4085,7 +4313,7 @@
}
}
- LYVERBLOG("+[UA]: system full upgrade result:%d\n",status);
+ RLOGD("+[UA]: system full upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_SYSTEM-1].update_result = status;
@@ -4126,7 +4354,7 @@
fd_boot_a = mtk_device_wrap_open(DEV_BOOT_A,O_RDWR);
if (fd_boot_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4135,7 +4363,7 @@
fd_boot_b = mtk_device_wrap_open(DEV_BOOT_B,O_RDWR);
if (fd_boot_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4144,7 +4372,7 @@
fota_status.ota_run = FULL_BOOT;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading boot full.\n");
+ RLOGD("+[UA]: Start upgrading boot full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_boot);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_boot,digest_s);
@@ -4152,7 +4380,7 @@
retry_cnt++;
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
- LYVERBLOG("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: boot full retry_cnt = %d\n",retry_cnt);
mtk_device_wrap_close(fd_curr);
if (retry_cnt>3) {
@@ -4168,7 +4396,7 @@
}
- LYVERBLOG("+[UA]: boot full upgrade result:%d\n",status);
+ RLOGD("+[UA]: boot full upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_BOOT-1].update_result = status;
save_fota_status();
@@ -4207,7 +4435,7 @@
fd_tee_a = mtk_device_wrap_open(DEV_TEE_A,O_RDWR);
if (fd_tee_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4216,7 +4444,7 @@
fd_tee_b = mtk_device_wrap_open(DEV_TEE_B,O_RDWR);
if (fd_tee_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4225,7 +4453,7 @@
fota_status.ota_run = FULL_TEE;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading tee full.\n");
+ RLOGD("+[UA]: Start upgrading tee full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_tee);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_tee,digest_s);
@@ -4233,7 +4461,7 @@
retry_cnt++;
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: tee full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: tee full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4246,7 +4474,7 @@
}
}
- printf("+[UA] tee full upgrade result:%d\n",status);
+ RLOGD("+[UA] tee full upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_TEE-1].update_result = status;
save_fota_status();
@@ -4285,7 +4513,7 @@
fd_md1img_a = mtk_device_wrap_open(DEV_MD1IMG_A,O_RDWR);
if (fd_md1img_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4294,7 +4522,7 @@
fd_md1img_b = mtk_device_wrap_open(DEV_MD1IMG_B,O_RDWR);
if (fd_md1img_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4303,7 +4531,7 @@
fota_status.ota_run = FULL_MD1IMG;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading md1img full.\n");
+ RLOGD("+[UA]: Start upgrading md1img full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_md1img);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1img,digest_s);
@@ -4312,7 +4540,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: md1img full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4325,7 +4553,7 @@
}
}
- LYVERBLOG("+[UA]: md1img upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1img upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_MD1IMG-1].update_result = status;
save_fota_status();
@@ -4364,7 +4592,7 @@
fd_md1dsp_a = mtk_device_wrap_open(DEV_MD1DSP_A,O_RDWR);
if (fd_md1dsp_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4373,7 +4601,7 @@
fd_md1dsp_b = mtk_device_wrap_open(DEV_MD1DSP_B,O_RDWR);
if (fd_md1dsp_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4382,7 +4610,7 @@
fota_status.ota_run = FULL_MD1DSP;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading md1dsp full.\n");
+ RLOGD("+[UA]: Start upgrading md1dsp full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_md1dsp);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_md1dsp,digest_s);
@@ -4391,7 +4619,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: md1dsp full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4404,7 +4632,7 @@
}
}
- LYVERBLOG("+[UA]: md1dsp upgrade result:%d\n",status);
+ RLOGD("+[UA]: md1dsp upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_MD1DSP-1].update_result = status;
save_fota_status();
@@ -4447,7 +4675,7 @@
fd_vbmeta_a = mtk_device_wrap_open(DEV_VBMETA_A,O_RDWR);
if (fd_vbmeta_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4456,7 +4684,7 @@
fd_vbmeta_b = mtk_device_wrap_open(DEV_VBMETA_B,O_RDWR);
if (fd_vbmeta_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4465,7 +4693,7 @@
fota_status.ota_run = FULL_VBMETA;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading vbmeta full.\n");
+ RLOGD("+[UA]: Start upgrading vbmeta full.\n");
do{
status = delta_copyto_nand(delta_offset,da_head.full_vbmeta);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_vbmeta,digest_s);
@@ -4474,7 +4702,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: vbmeta full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4487,7 +4715,7 @@
}
}
- LYVERBLOG("+[UA]: vbmeta upgrade result:%d\n",status);
+ RLOGD("+[UA]: vbmeta upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_VBMETA-1].update_result = status;
save_fota_status();
@@ -4525,7 +4753,7 @@
fd_oemapp_a = mtk_device_wrap_open(DEV_OEMAPP_A,O_RDWR);
if (fd_oemapp_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4534,7 +4762,7 @@
fd_oemapp_b = mtk_device_wrap_open(DEV_OEMAPP_B,O_RDWR);
if (fd_oemapp_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4543,7 +4771,7 @@
fota_status.ota_run = FULL_OEMAPP;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading oemapp full.\n");
+ RLOGD("+[UA]: Start upgrading oemapp full.\n");
do {
status = delta_copyto_nand(delta_offset,da_head.full_oemapp);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp,digest_s);
@@ -4552,7 +4780,7 @@
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: oemapp full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4565,7 +4793,7 @@
}
}
- LYVERBLOG("+[UA]: oemapp upgrade result:%d\n",status);
+ RLOGD("+[UA]: oemapp upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_OEMAPP-1].update_result = status;
save_fota_status();
@@ -4602,7 +4830,7 @@
fd_oemapp2_a = mtk_device_wrap_open(DEV_OEMAPP2_A,O_RDWR);
if (fd_oemapp2_a < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4611,7 +4839,7 @@
fd_oemapp2_b = mtk_device_wrap_open(DEV_OEMAPP2_B,O_RDWR);
if (fd_oemapp2_b < 0) {
err = errno;
- LYERRLOG("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
lynq_fota_release_wake_lock();
return -err;
}
@@ -4620,7 +4848,7 @@
fota_status.ota_run = FULL_OEMAPP2;
save_fota_status();
retry_cnt = 0;
- LYVERBLOG("+[UA]: Start upgrading oemapp2 full.\n");
+ RLOGD("+[UA]: Start upgrading oemapp2 full.\n");
do {
status = delta_copyto_nand(delta_offset,da_head.full_oemapp2);
ROCK_SHA_FILE_COMMON(fd_delta,delta_offset,da_head.full_oemapp2,digest_s);
@@ -4628,7 +4856,7 @@
retry_cnt++;
}while((strncmp(digest_s,digest_t,SHA_DIGEST_SIZE)!=0)&&(retry_cnt <= 3));
mtk_device_wrap_close(fd_curr);
- LYVERBLOG("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
+ RLOGD("+[UA]: oemapp2 full retry_cnt = %d\n",retry_cnt);
if (retry_cnt>3) {
if (status == 0) {
status = retry_cnt;
@@ -4640,7 +4868,7 @@
nand_copyto_nand(DEV_OEMAPP2_A,DEV_OEMAPP2_B);
}
}
- LYVERBLOG("+[UA]: oemapp2 upgrade result:%d\n",status);
+ RLOGD("+[UA]: oemapp2 upgrade result:%d\n",status);
fota_status.update_result = status;
fota_status.update_status[FULL_OEMAPP2-1].update_result = status;
save_fota_status();
@@ -4691,34 +4919,42 @@
}
- up_info.update_result = status;
+ up_info.update_result = status;
up_info.ota_run = 0;
lseek(fd_update_status,0,SEEK_SET);
- write(fd_update_status, &up_info,sizeof(up_info));
+ write(fd_update_status, &up_info,sizeof(up_info));
sync();
-
+#ifdef GSW_FOTA_CFG
close_dev_fd(fd_delta);
+#endif
- //close_dev_fd(fd_curr);
+#ifdef MOBILETEK_FOTA_CFG
+ close(fd_delta);
+#endif
close(fd_update_status);
- sync();
-
+ sync();
- slot = (current_slot == 0) ? 1 : 0;
-
- LYVERBLOG("+[UA]: slot SLOT = %d\n",slot);
-
- if(update_mode==MODE_NORMAL){
- module->setActiveBootSlot(module,slot);
- LYVERBLOG("+[UA]: upgrade is success!!!!\n");
- }
+ slot = (current_slot == 0) ? 1 : 0;
+ RLOGD("+[UA]: slot SLOT = %d\n",slot);
+#ifdef MOBILETEK_FOTA_CFG
+ if(update_mode==MODE_NORMAL)
+ {
+ module->setActiveBootSlot(module,slot);
+ RLOGD("+[UA]: upgrade is success!!!!\n");
+ }
+#endif
+
+#ifdef GSW_FOTA_CFG
+ module->setActiveBootSlot(module,slot);
+ RLOGD("+[UA]: upgrade is success!!!!\n");
+#endif
fota_status.ota_run = 0;
- fota_status.switch_slot = PASS;
- fota_status.update_result = status;
+ fota_status.switch_slot = PASS;
+ fota_status.update_result = status;
save_fota_status();
lynq_fota_release_wake_lock();
@@ -4732,6 +4968,51 @@
* @param1 szie:fota addr length
* @return 0:set success other:set fail
*/
+#ifdef MOBILETEK_FOTA_CFG
+int lynq_fota_set_addr_value(char *value,int size)
+{
+ int err = 0;
+ fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd_update_status < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ return err;
+ }
+ lseek(fd_update_status,0,SEEK_SET);
+ strcpy(up_info.addr,value);
+ write(fd_update_status, &up_info,sizeof(up_info));
+ sync();
+ close(fd_update_status);
+ sync();
+ return err;
+}
+/**
+ * @brief get the upgrade package address
+ *
+ * @param1 value:fota addr
+ * @return 0:get success other:set fail
+ */
+int lynq_fota_get_addr_value(char *tmp)
+{
+ int err;
+ fd_update_status = open(FILE_UPDATE_STATE,O_RDWR | O_CREAT,0777);
+ if (fd_update_status < 0) {
+ err = errno;
+ RLOGD("+[UA]: Error opening metadata file: %s\n",strerror(errno));
+ return err;
+ }
+ lseek(fd_update_status,0,SEEK_SET);
+ memset(&up_info, 0, sizeof(up_info));
+ read(fd_update_status,(unsigned char *)&up_info,sizeof(up_info));
+ strcpy(tmp, up_info.addr);
+ sync();
+ close(fd_update_status);
+ sync();
+ return 0;
+}
+#endif
+
+#ifdef GSW_FOTA_CFG
int lynq_fota_set_addr_value(char *value,int size)
{
if(size < 64)
@@ -4740,6 +5021,7 @@
}
return -1;
}
+
/**
* @brief get the upgrade package address
*
@@ -4750,7 +5032,7 @@
{
return lynq_get_value(FOTA_UCI_FILE, FOTA_UCI_MODULE,FOTA_UCI_ADDR, tmp);
}
-
+#endif
/**
* @brief The following is the wake up
* start
diff --git a/src/lynq/lib/liblynq-gnss/include/lynq_gnss.h b/src/lynq/lib/liblynq-gnss/include/lynq_gnss.h
index e7e3816..362baaf 100755
--- a/src/lynq/lib/liblynq-gnss/include/lynq_gnss.h
+++ b/src/lynq/lib/liblynq-gnss/include/lynq_gnss.h
@@ -78,6 +78,10 @@
gnss_measurement_ext_callback lynq_measurement_callback;
}lynq_raw_gnss_cbs;
+typedef void ( *lynq_atsvc_incb )(const char *input,const int length);
+typedef void ( *lynq_atsvc_outcb )(char *output,int out_size,int type);
+lynq_atsvc_incb lynq_register_gnss(lynq_atsvc_outcb out_cb);
+lynq_atsvc_outcb atsvc_gnss_outcb;
int lynq_gnss_init(void);
@@ -107,6 +111,10 @@
int lynq_gnss_output_frequency_set(int frequency);
+int lynq_agps_set_enabled(LYNQ_CONF_SWITCH agps_status);
+
+int lynq_agps_get_enabled_status(int *status);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/lynq/lib/liblynq-gnss/makefile b/src/lynq/lib/liblynq-gnss/makefile
index 4d7cc72..f1ca7fc 100755
--- a/src/lynq/lib/liblynq-gnss/makefile
+++ b/src/lynq/lib/liblynq-gnss/makefile
@@ -15,7 +15,6 @@
-std=c++11 \
LOCAL_PATH = .
-$(warning ################# ZHOUQUNCHAO LOCAL_PATH:$(LOCAL_PATH),ROOT: $(ROOT),includedir:$(includedir),libdir:$(libdir))
LOCAL_C_INCLUDES = \
-I$(LOCAL_PATH)/include \
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_agps.c b/src/lynq/lib/liblynq-gnss/src/lynq_agps.c
new file mode 100644
index 0000000..762e36c
--- /dev/null
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_agps.c
@@ -0,0 +1,509 @@
+#include <stdio.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <sys/un.h>
+#include <log/log.h>
+
+
+#include "lynq_gnss.h"
+#include "lynq_agps.h"
+
+#define LOG_TAG "LYNQ_AGPS"
+
+
+// -1 means failure
+int do_socket_connect(const char* path)
+{
+ struct sockaddr_un addr;
+ int fd = socket(PF_LOCAL, SOCK_STREAM, 0);
+ if(fd < 0) {
+ RLOGD("socket() failed fd=%d\n", fd);
+ return -1;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_path[0] = 0;
+ memcpy(addr.sun_path + 1, path, strlen(path));
+ addr.sun_family = AF_UNIX;
+
+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ RLOGD("connect failed reason=[%s] path=[%s]\n", strerror(errno), path);
+ close(fd);
+ return -1;
+ }
+
+ return fd;
+}
+
+//get
+char get_byte(char* buff, int* offset)
+{
+ char ret = buff[*offset];
+ *offset += 1;
+ return ret;
+}
+
+short get_short(char* buff, int* offset)
+{
+ short ret = 0;
+ ret |= get_byte(buff, offset) & 0xff;
+ ret |= (get_byte(buff, offset) << 8);
+ return ret;
+}
+
+int get_int(char* buff, int* offset)
+{
+ int ret = 0;
+ ret |= get_short(buff, offset) & 0xffff;
+ ret |= (get_short(buff, offset) << 16);
+ return ret;
+}
+
+int socket_connect() {
+ return do_socket_connect("agpsd2");
+}
+
+//-1 means failure
+static int safe_write(int fd, void* buf, int len)
+{
+ int n, retry = 10;
+
+ if(fd < 0 || buf == NULL || len < 0) {
+ RLOGD("safe_write fd=%d buf=%p len=%d\n", fd, buf, len);
+ return -1;
+ }
+
+ while((n = write(fd, buf, len)) != len) {
+ if(errno == EINTR) continue;
+ if(errno == EAGAIN) {
+ if(retry-- > 0) {
+ usleep(100 * 1000);
+ continue;
+ }
+ goto exit;
+ }
+ goto exit;
+ }
+ return n;
+exit:
+ RLOGD("safe_write reason=[%s]%d\n", strerror(errno), errno);
+ return -1;
+}
+
+//-1 means failure
+static int safe_read(int fd, void* buf, int len)
+{
+ int n, retry = 10;
+
+ if(fd < 0 || buf == NULL || len < 0)
+ {
+ RLOGD("safe_read fd=%d buf=%p len=%d\n", fd, buf, len);
+ return -1;
+ }
+
+ if(len == 0)
+ {
+ return 0;
+ }
+
+ while((n = read(fd, buf, len)) < 0)
+ {
+ if(errno == EINTR)
+ {
+ RLOGD("safe read interrupt");
+ continue;
+ }
+ if(errno == EAGAIN)
+ {
+ if(retry-- > 0)
+ {
+ usleep(100 * 1000);
+ continue;
+ }
+ goto exit;
+ }
+ goto exit;
+ }
+ return n;
+
+exit:
+ if(errno != EAGAIN)
+ {
+ RLOGD("safe_read reason=[%s] fd=%d len=%d buf=%p\n",
+ strerror(errno), fd, len, buf);
+ }
+ return -1;
+}
+
+static char socket_get_byte(int fd)
+{
+ int read_len = 0;
+ char buff[1] = {0};
+ int offset = 0;
+
+ read_len = safe_read(fd, buff, sizeof(buff));
+ if(read_len != sizeof(buff))
+ {
+ RLOGD("socket_get_byte read_len=%d\n", read_len);
+ }
+ return get_byte(buff, &offset);
+}
+
+static int socket_get_int(int fd)
+{
+ int read_len = 0;
+ char buff[4] = {0};
+ int offset = 0;
+
+ read_len = safe_read(fd, buff, sizeof(buff));
+ if(read_len != sizeof(buff))
+ {
+ RLOGD("socket_get_int read_len=%d\n", read_len);
+ }
+ return get_int(buff, &offset);
+}
+
+static char* socket_get_string(int fd, char* buff, int buff_len)
+{
+ int read_len = 0;
+
+ char ret = socket_get_byte(fd);
+ if(ret == 0)
+ {
+ return NULL;
+ }
+ else
+ {
+ int len = socket_get_int(fd);
+ if(len > buff_len)
+ {
+ RLOGD("socket_get_string your buff len=%d is too small, need len=%d\n",
+ buff_len, len);
+ return NULL;
+ }
+
+ read_len = safe_read(fd, buff, len);
+ if(read_len != len)
+ {
+ RLOGD("socket_get_string read_len=%d len=%d\n", read_len, len);
+ return NULL;
+ }
+
+ return buff;
+ }
+}
+
+
+static int socket_get_binary(int fd, char* buff)
+{
+ int read_len = 0;
+
+ int len = socket_get_int(fd);
+ if(len > 0)
+ {
+ read_len = safe_read(fd, buff, len);
+ if(read_len != len)
+ {
+ RLOGD("socket_get_binary read_len=%d len=%d\n", read_len, len);
+ return 0;
+ }
+ }
+ return len;
+}
+
+void put_byte(char* buff, int* offset, const char input)
+{
+ *((char*)&buff[*offset]) = input;
+ *offset += 1;
+}
+
+void put_short(char* buff, int* offset, const short input)
+{
+ put_byte(buff, offset, input & 0xff);
+ put_byte(buff, offset, (input >> 8) & 0xff);
+}
+
+void put_int(char* buff, int* offset, const int input)
+{
+ put_short(buff, offset, input & 0xffff);
+ put_short(buff, offset, (input >> 16) & 0xffff);
+}
+
+int set_template_1(app_mgr_cmd_enum cmd,char data)
+{
+ char buff[MAX_BUFF_SIZE] = {0};
+ int offset = 0;
+ int fd = 0;
+
+ fd = socket_connect();
+ if(fd < 0)
+ {
+ RLOGD("Socket connect fail");
+ return -1;
+ }
+ RLOGD("Set template start fd:%d cmd:%d data:%d",fd,cmd,data);
+ // write
+ put_int(buff, &offset, cmd);
+ put_byte(buff, &offset, data);
+ if(safe_write(fd, buff, offset) == -1)
+ {
+ RLOGD("set_template_1 Safe write fail");
+ close(fd);
+ return -1;
+ }
+
+ // read ACK
+ socket_get_byte(fd);
+
+ close(fd);
+ return 0;
+}
+
+int get_template_agps_config(app_mgr_cmd_enum cmd,agps_intf_agps_config *config)
+{
+ char buff[MAX_BUFF_SIZE] = {0};
+ int offset = 0;
+ int fd = 0;
+
+ fd = socket_connect();
+ if(fd < 0)
+ {
+ RLOGD("Socket connect fail");
+ return -1;
+ }
+ RLOGD("get_template_agps_config start fd:%d cmd:%d",fd,cmd);
+
+ // write
+ put_int(buff, &offset, cmd);
+ if(safe_write(fd, buff, offset) == -1)
+ {
+ RLOGD("get_template_agps_config Safe write fail");
+ close(fd);
+ return -1;
+ }
+
+ // read
+ config->agps_setting.agps_enable = socket_get_byte(fd);
+ config->agps_setting.agps_protocol = socket_get_int(fd);
+ config->agps_setting.gpevt = socket_get_byte(fd);
+
+ config->cp_setting.molr_pos_method = socket_get_int(fd);
+ config->cp_setting.external_addr_enable = socket_get_byte(fd);
+ socket_get_string(fd, config->cp_setting.external_addr, sizeof(config->cp_setting.external_addr));
+ config->cp_setting.mlc_number_enable = socket_get_byte(fd);
+ socket_get_string(fd, config->cp_setting.mlc_number, sizeof(config->cp_setting.mlc_number));
+ config->cp_setting.cp_auto_reset = socket_get_byte(fd);
+ config->cp_setting.epc_molr_lpp_payload_enable = socket_get_byte(fd);
+ config->cp_setting.epc_molr_lpp_payload_len =
+ socket_get_binary(fd, config->cp_setting.epc_molr_lpp_payload);
+
+ config->up_setting.ca_enable = socket_get_byte(fd);
+ config->up_setting.ni_request = socket_get_byte(fd);
+ config->up_setting.roaming = socket_get_byte(fd);
+ config->up_setting.cdma_preferred = socket_get_int(fd);
+ config->up_setting.pref_method = socket_get_int(fd);
+ config->up_setting.supl_version = socket_get_int(fd);
+ config->up_setting.tls_version = socket_get_int(fd);
+ config->up_setting.supl_log = socket_get_byte(fd);
+ config->up_setting.msa_enable = socket_get_byte(fd);
+ config->up_setting.msb_enable = socket_get_byte(fd);
+ config->up_setting.ecid_enable = socket_get_byte(fd);
+ config->up_setting.otdoa_enable = socket_get_byte(fd);
+ config->up_setting.qop_hacc = socket_get_int(fd);
+ config->up_setting.qop_vacc = socket_get_int(fd);
+ config->up_setting.qop_loc_age = socket_get_int(fd);
+ config->up_setting.qop_delay = socket_get_int(fd);
+ config->up_setting.lpp_enable = socket_get_byte(fd);
+ config->up_setting.cert_from_sdcard = socket_get_byte(fd);
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V14)
+ {
+ config->up_setting.auto_profile_enable = socket_get_byte(fd);
+ config->up_setting.ut2 = socket_get_byte(fd);
+ config->up_setting.ut3 = socket_get_byte(fd);
+ config->up_setting.apn_enable = socket_get_byte(fd);
+ config->up_setting.sync_to_slp = socket_get_byte(fd);
+ config->up_setting.udp_enable = socket_get_byte(fd);
+ config->up_setting.autonomous_enable = socket_get_byte(fd);
+ config->up_setting.aflt_enable = socket_get_byte(fd);
+ config->up_setting.imsi_enable = socket_get_byte(fd);
+
+ config->gnss_setting.sib8_sib16_enable = socket_get_byte(fd);
+ config->gnss_setting.gps_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.glonass_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.beidou_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.galileo_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.gps_satellite_support = socket_get_byte(fd);
+ config->gnss_setting.glonass_satellite_support = socket_get_byte(fd);
+ config->gnss_setting.beidou_satellite_support = socket_get_byte(fd);
+ config->gnss_setting.galileo_satellite_support = socket_get_byte(fd);
+
+ config->up_setting.supl_ver_minor = socket_get_byte(fd);
+ config->up_setting.supl_ver_ser_ind = socket_get_byte(fd);
+
+ config->gnss_setting.a_glonass_satellite_enable = socket_get_byte(fd);
+ }
+
+ socket_get_string(fd, config->cur_supl_profile.name, sizeof(config->cur_supl_profile.name));
+ socket_get_string(fd, config->cur_supl_profile.addr, sizeof(config->cur_supl_profile.addr));
+ config->cur_supl_profile.port = socket_get_int(fd);
+ config->cur_supl_profile.tls = socket_get_byte(fd);
+ socket_get_string(fd, config->cur_supl_profile.mcc_mnc, sizeof(config->cur_supl_profile.mcc_mnc));
+ socket_get_string(fd, config->cur_supl_profile.app_id, sizeof(config->cur_supl_profile.app_id));
+ socket_get_string(fd, config->cur_supl_profile.provider_id, sizeof(config->cur_supl_profile.provider_id));
+ socket_get_string(fd, config->cur_supl_profile.default_apn, sizeof(config->cur_supl_profile.default_apn));
+ socket_get_string(fd, config->cur_supl_profile.optional_apn, sizeof(config->cur_supl_profile.optional_apn));
+ socket_get_string(fd, config->cur_supl_profile.optional_apn_2, sizeof(config->cur_supl_profile.optional_apn_2));
+ socket_get_string(fd, config->cur_supl_profile.address_type, sizeof(config->cur_supl_profile.address_type));
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V14)
+ {
+ socket_get_string(fd, config->cdma_profile.name, sizeof(config->cdma_profile.name));
+ config->cdma_profile.mcp_enable = socket_get_byte(fd);;
+ socket_get_string(fd, config->cdma_profile.mcp_addr, sizeof(config->cdma_profile.mcp_addr));
+ config->cdma_profile.mcp_port = socket_get_int(fd);;
+ config->cdma_profile.pde_addr_valid = socket_get_byte(fd);;
+ config->cdma_profile.pde_ip_type = socket_get_int(fd);;
+ socket_get_string(fd, config->cdma_profile.pde_addr, sizeof(config->cdma_profile.pde_addr));
+ config->cdma_profile.pde_port = socket_get_int(fd);;
+ config->cdma_profile.pde_url_valid = socket_get_byte(fd);;
+ socket_get_string(fd, config->cdma_profile.pde_url_addr, sizeof(config->cdma_profile.pde_url_addr));
+ }
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V20)
+ {
+ //V15
+ config->agps_setting.e911_gps_icon_enable = socket_get_byte(fd);
+ //V16
+ config->agps_setting.e911_open_gps = socket_get_byte(fd);
+ //V17
+ config->gnss_setting.a_gps_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.a_beidou_satellite_enable = socket_get_byte(fd);
+ config->gnss_setting.a_galileo_satellite_enable = socket_get_byte(fd);
+ //V18
+ config->up_setting.sha_version = socket_get_int(fd);
+ config->up_setting.preferred_2g3g_cell_age = socket_get_int(fd);
+ config->up_setting.ut1 = socket_get_byte(fd);
+ config->up_setting.no_sensitive_log = socket_get_byte(fd);
+ config->up_setting.tls_reuse_enable = socket_get_byte(fd);
+ config->up_setting.imsi_cache_enable = socket_get_byte(fd);
+ config->up_setting.supl_raw_data_enable = socket_get_byte(fd);
+ config->up_setting.tc10_enable = socket_get_byte(fd);
+ config->up_setting.tc10_use_apn = socket_get_byte(fd);
+ config->up_setting.tc10_use_fw_dns = socket_get_byte(fd);
+ config->up_setting.allow_ni_for_gps_off = socket_get_byte(fd);
+ config->up_setting.force_otdoa_assist_req = socket_get_byte(fd);
+ config->cp_setting.reject_non911_nilr_enable = socket_get_byte(fd);
+ config->cp_setting.cp_2g_disable = socket_get_byte(fd);
+ config->cp_setting.cp_3g_disable = socket_get_byte(fd);
+ config->cp_setting.cp_4g_disable = socket_get_byte(fd);
+ config->agps_setting.tc10_ignore_fw_config = socket_get_byte(fd);
+ config->agps_setting.lppe_hide_wifi_bt_status = socket_get_byte(fd);
+ //V19
+ config->agps_setting.lppe_network_location_disable = socket_get_byte(fd);
+ config->cp_setting.cp_lppe_enable = socket_get_byte(fd);
+ config->up_setting.up_lppe_enable = socket_get_byte(fd);
+ //V20
+ config->cp_setting.support_cp_lppe = socket_get_byte(fd);
+ config->gnss_setting.mnl_support_lppe = socket_get_byte(fd);
+ }
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V21)
+ {
+ config->agps_setting.agps_nvram_enable = socket_get_byte(fd);
+ config->agps_setting.lbs_log_enable = socket_get_byte(fd);
+ config->agps_setting.lppe_crowd_source_confident = socket_get_int(fd);
+
+ config->up_setting.esupl_apn_mode = socket_get_int(fd);
+ config->up_setting.tcp_keepalive = socket_get_int(fd);
+ config->up_setting.aosp_profile_enable = socket_get_byte(fd);
+ config->up_setting.bind_nlp_setting_to_supl = socket_get_byte(fd);
+ }
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V22)
+ {
+ config->agps_setting.ignore_si_for_e911 = socket_get_byte(fd);
+ config->cp_setting.cp_lppe_wlan_enable = socket_get_byte(fd);
+ config->cp_setting.cp_lppe_srn_enable = socket_get_byte(fd);
+ config->cp_setting.cp_lppe_sensor_enable = socket_get_byte(fd);
+ config->cp_setting.cp_lppe_dbh_enable = socket_get_byte(fd);
+
+ config->up_setting.up_lppe_wlan_enable = socket_get_byte(fd);
+ config->up_setting.up_lppe_srn_enable = socket_get_byte(fd);
+ config->up_setting.up_lppe_sensor_enable = socket_get_byte(fd);
+ config->up_setting.up_lppe_dbh_enable = socket_get_byte(fd);
+ config->up_setting.ip_version_prefer = socket_get_int(fd);
+ config->up_setting.up_lppe_in_2g3g_disable = socket_get_byte(fd);
+ config->up_setting.up_rrlp_in_4g_disable = socket_get_byte(fd);
+ config->up_setting.up_si_disable = socket_get_byte(fd);
+ }
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V23)
+ {
+ config->up_setting.use_ni_slp = socket_get_byte(fd);
+ config->agps_setting.use_tc10_config = socket_get_byte(fd);
+ config->agps_setting.lppe_def_nlp_enable = socket_get_byte(fd);
+ }
+
+ if(cmd >= APP_MGR_CMD_GET_CONFIG_V24)
+ {
+ config->agps_setting.emergency_ext_secs = socket_get_int(fd);
+ config->up_setting.aosp_pos_mode_enable = socket_get_byte(fd);
+ config->up_setting.privacy_override_mode = socket_get_int(fd);
+ }
+
+ config->valid = 1;
+ // read ACK
+ socket_get_byte(fd);
+ RLOGD("Socket read ACK sucess, close fd");
+ close(fd);
+ return 0;
+}
+
+int agps_get_total_status(agps_intf_agps_config *config)
+{
+ if (NULL == config)
+ {
+ RLOGD("agps_get_total_status incoming paramter error");
+ }
+ int res = 0;
+ res = get_template_agps_config(APP_MGR_CMD_GET_CONFIG_V24,config);
+ return res;
+}
+
+
+int lynq_agps_set_enabled(LYNQ_CONF_SWITCH agps_status)
+{
+ int ret = -1;
+
+ ret = set_template_1(APP_MGR_CMD_SET_AGPS_ENABLE,agps_status);
+ if (ret != 0)
+ {
+ RLOGD("set AGPS error ret = %d",ret);
+ return ret;
+ }
+ return ret;
+}
+
+int lynq_agps_get_enabled_status(int *status)
+{
+ int ret = 0;
+ if (NULL == status)
+ {
+ RLOGD("incoming paramter error");
+ return -1;
+ }
+
+ agps_intf_agps_config config;
+ memset(&config, 0, sizeof(config));
+ ret = agps_get_total_status(&config);
+ if (ret != 0)
+ {
+ RLOGD("agps get status fail");
+ return ret;
+ }
+ *status = config.agps_setting.agps_enable;
+ return ret;
+}
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_agps.h b/src/lynq/lib/liblynq-gnss/src/lynq_agps.h
new file mode 100644
index 0000000..f3da3d3
--- /dev/null
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_agps.h
@@ -0,0 +1,393 @@
+#ifndef LYNQ_AGPS_H
+#define LYNQ_AGPS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*Copy for agps_interface.h*/
+#define agps_bool char
+
+#define MAX_BUFF_SIZE 8192
+#define SUPL_PROFILES_NUM 30
+
+#define AGPS_INTF_STRING_LEN 64
+#define AGPS_SUPL_ADDR_LEN 128
+#define MNL_MCC_STRING_LEN 16
+#define EXTERNAL_ADD_LEN 20
+#define MLC_NUMBER_LEN 20
+#define EPC_MOLR_LPP_PAYLOAD_LEN 300
+#define SUPL_PROFILES_NUM 30
+#define PROFILING_MESSAGE_LEN 64
+#define PROFILING_ELEMENT_NUM 20
+
+typedef enum {
+ // Command Enum APP -> AGPSD
+ APP_MGR_CMD_CODER_TEST = 0,
+ APP_MGR_CMD_VERSION = 1,
+
+ APP_MGR_CMD_GET_CONFIG = 100, //AgpsConfig
+ APP_MGR_CMD_GET_OMA_CP_SUPL_PROFILE = 101,
+ APP_MGR_CMD_GET_SYSTEM_PROPERTY = 102,
+ APP_MGR_CMD_GET_AGPS_PROFILING = 103,
+ APP_MGR_CMD_GET_EMULATOR_MODE = 104,
+ APP_MGR_CMD_GET_CONFIG_V2 = 105,
+ APP_MGR_CMD_GET_CONFIG_V3 = 106, // add cert_from_sdcard
+ APP_MGR_CMD_GET_CONFIG_V14 = 117,
+ APP_MGR_CMD_GET_CONFIG_V20 = 123,
+ APP_MGR_CMD_GET_CONFIG_V21 = 124,
+ APP_MGR_CMD_GET_CONFIG_V22 = 125,
+ APP_MGR_CMD_GET_CONFIG_V23 = 126,
+ APP_MGR_CMD_GET_CONFIG_V24 = 127,
+
+ APP_MGR_CMD_SET_AGPS_ENABLE = 200,
+ APP_MGR_CMD_SET_PROTOCOL,
+ APP_MGR_CMD_SET_CDMA_PREF,
+ APP_MGR_CMD_SET_UP_PREF_METHOD,
+ APP_MGR_CMD_SET_POS_TECHNOLOGY_MSA,
+ APP_MGR_CMD_SET_POS_TECHNOLOGY_MSB,
+ APP_MGR_CMD_SET_POS_TECHNOLOGY_ECID,
+ APP_MGR_CMD_SET_POS_TECHNOLOGY_OTDOA,
+ APP_MGR_CMD_SET_SUPL_VERSION,
+ APP_MGR_CMD_SET_SUPL_PROFILE, //AgpsProfil
+ APP_MGR_CMD_SET_QOP = 210, //AgpsQoP
+ APP_MGR_CMD_SET_MOLR_POS_METHDO,
+ APP_MGR_CMD_SET_EXTERNAL_ADDR,
+ APP_MGR_CMD_SET_MLC_NUMBER,
+ APP_MGR_CMD_SET_CP_AUTO_RESET,
+ APP_MGR_CMD_SET_ALLOW_NI,
+ APP_MGR_CMD_SET_ALLOW_ROAMING,
+ APP_MGR_CMD_SET_SUPL_2_FILE,
+ APP_MGR_CMD_SET_RESET_TO_DEFAULT,
+ APP_MGR_CMD_SET_OMA_CP_SUPL_PROFILE,
+ APP_MGR_CMD_SET_NI_REQ = 220, //un-implemented for test
+ APP_MGR_CMD_SET_EPC_MOLR_PDU_ENABLE,
+ APP_MGR_CMD_SET_EPC_MOLR_PDU,
+ APP_MGR_CMD_SET_TLS_VERSION,
+ APP_MGR_CMD_SET_CA_ENABLE,
+ APP_MGR_CMD_SET_UDP_ENABLE,
+ APP_MGR_CMD_SET_LPP_ENABLE,
+ APP_MGR_CMD_SET_CERT_FROM_SDCARD_ENABLE,
+ APP_MGR_CMD_SET_AUTO_PROFILE_ENABLE,
+ APP_MGR_CMD_SET_UT2,
+ APP_MGR_CMD_SET_UT3 = 230,
+ APP_MGR_CMD_SET_SUPL_APN_ENABLE,
+ APP_MGR_CMD_SET_SYNC_TO_SLP,
+ APP_MGR_CMD_SET_UDP_ENABLE_V2,
+ APP_MGR_CMD_SET_AUTONOMOUS_ENABLE,
+ APP_MGR_CMD_SET_AFLT_ENABLE,
+ APP_MGR_CMD_SET_IMSI_ENABLE,
+ APP_MGR_CMD_SET_SIB8_16_ENABLE,
+ APP_MGR_CMD_SET_GPS_ENABLE,
+ APP_MGR_CMD_SET_GLONASS_ENABLE,
+ APP_MGR_CMD_SET_BEIDOU_ENABLE = 240,
+ APP_MGR_CMD_SET_GALILEO_ENABLE,
+ APP_MGR_CMD_SET_SUPL_SHA_VERSION,
+ APP_MGR_CMD_SET_SUPL_TLS_VERSION,
+ APP_MGR_CMD_SET_SUPL_VER_MINOR,
+ APP_MGR_CMD_SET_SUPL_VER_SER_IND,
+ APP_MGR_CMD_SET_A_GLONASS_ENABLE,
+ APP_MGR_CMD_SET_PDE_PROFILE,
+ APP_MGR_CMD_SET_E911_GPS_ICON_ENABLE,
+ APP_MGR_CMD_SET_E911_OPEN_GPS_ENABLE,
+ APP_MGR_CMD_SET_A_GPS_ENABLE = 250,
+ APP_MGR_CMD_SET_A_BEIDOU_ENABLE,
+ APP_MGR_CMD_SET_A_GALILEO_ENABLE,
+ APP_MGR_CMD_SET_PREF_2G3G_CELL_AGE,
+ APP_MGR_CMD_SET_UT1,
+ APP_MGR_CMD_SET_NO_SENSITIVE_LOG,
+ APP_MGR_CMD_SET_TLS_REUSE_ENABLE,
+ APP_MGR_CMD_SET_IMSI_CACHE_ENABLE,
+ APP_MGR_CMD_SET_SUPL_RAW_DATA_ENABLE,
+ APP_MGR_CMD_SET_TC10_ENABLE,
+ APP_MGR_CMD_SET_TC10_USE_APN = 260,
+ APP_MGR_CMD_SET_TC10_USE_FW_DNS,
+ APP_MGR_CMD_SET_ALLOW_NI_FOR_GPS_OFF,
+ APP_MGR_CMD_SET_FORCE_OTDOA_ASSIST_REQ,
+ APP_MGR_CMD_SET_REJECT_NON911_NILR_ENABLE,
+ APP_MGR_CMD_SET_CP_2G_DISABLE,
+ APP_MGR_CMD_SET_CP_3G_DISABLE,
+ APP_MGR_CMD_SET_CP_4G_DISABLE,
+ APP_MGR_CMD_SET_TC10_IGNORE_FW_CONFIG,
+ APP_MGR_CMD_SET_LPPE_HIDE_WIFI_BT_STATUS,
+ APP_MGR_CMD_SET_LPPE_NETWORK_LOCATION_DISABLE = 270,
+ APP_MGR_CMD_SET_LPPE_CP_ENABLE,
+ APP_MGR_CMD_SET_LPPE_UP_ENABLE,
+ APP_MGR_CMD_SET_VZW_DEBUG_SCREEN_ENABLE,
+ APP_MGR_CMD_SET_AOSP_PROFILE_ENABLE,
+ APP_MGR_CMD_SET_BIND_NLP_SETTING_TO_SUPL,
+ APP_MGR_CMD_SET_ESUPL_APN_MODE,
+ APP_MGR_CMD_SET_TCP_KEEPALIVE,
+ APP_MGR_CMD_SET_AGPS_NVRAM_ENABLE,
+ APP_MGR_CMD_SET_LBS_LOG_ENABLE,
+ APP_MGR_CMD_SET_LPPE_CROWD_SOURCE_CONFIDENT = 280,
+ APP_MGR_CMD_SET_IGNORE_SI_FOR_E911,
+ APP_MGR_CMD_SET_LPPE_CP_WLAN_ENABLE,
+ APP_MGR_CMD_SET_LPPE_CP_SRN_ENABLE,
+ APP_MGR_CMD_SET_LPPE_CP_SENSOR_ENABLE,
+ APP_MGR_CMD_SET_LPPE_CP_DBH_ENABLE,
+ APP_MGR_CMD_SET_LPPE_UP_WLAN_ENABLE,
+ APP_MGR_CMD_SET_LPPE_UP_SRN_ENABLE,
+ APP_MGR_CMD_SET_LPPE_UP_SENSOR_ENABLE,
+ APP_MGR_CMD_SET_LPPE_UP_DBH_ENABLE,
+ APP_MGR_CMD_SET_IP_VERSION_PREFER = 290,
+ APP_MGR_CMD_SET_UP_LPP_IN_2G3G_DISABLE,
+ APP_MGR_CMD_SET_UP_RRLP_IN_4G_DISABLE,
+ APP_MGR_CMD_UP_SI_DISABLE,
+
+ // To implement
+ APP_MGR_CMD_SET_USE_NI_SLP,
+ APP_MGR_CMD_SET_USE_TC10_CONFIG,
+ APP_MGR_CMD_SET_LPPE_DEF_NLP_ENABLE,
+ APP_MGR_CMD_SET_AOSP_POS_MODE_ENABLE,
+ APP_MGR_CMD_SET_PRIVACY_OVERRIDE_MODE,
+ APP_MGR_CMD_SET_EMERGENCY_EXT_SECS, // 299
+
+
+ APP_MGR_CMD_START_PERIODIC = 300,
+ APP_MGR_CMD_ABORT_PERIODIC,
+ APP_MGR_CMD_START_AREA_EVENT,
+ APP_MGR_CMD_ABORT_AREA_EVENT,
+
+ APP_MGR_CMD_START_TEST_CASE = 400,
+ APP_MGR_CMD_START_TEST_BUTTON,
+ APP_MGR_CMD_START_RESET_AGPSD,
+ APP_MGR_CMD_START_EMULATOR_MODE,
+
+
+ // To implement
+ APP_MGR_CMD_SET_TC10_SUPL_SSL_METHOD = 500,
+ APP_MGR_CMD_SET_TC10_AUTO_SUPL_VER_FOR_NI,
+ APP_MGR_CMD_SET_TC10_SUPL_VER_SKT_NI,
+ APP_MGR_CMD_SET_TC10_USE_APN_NI,
+ APP_MGR_CMD_SET_TC10_USE_APN_SI,
+ APP_MGR_CMD_SET_CP_PRIVACY_OVERRIDE,
+ APP_MGR_CMD_SET_SUPL_ADDR_NI,
+ APP_MGR_CMD_SET_RRLP_GOOGLE_SUPL,
+ APP_MGR_CMD_SET_SUPL2_CAP_EXT_DISABLE,
+ APP_MGR_CMD_SET_NI_STATISTIC_ENABLE,
+ APP_MGR_CMD_SET_UP_OPERATION_MODE, // 510
+ APP_MGR_CMD_SET_GLONASS_MSA_ENABLE,
+ APP_MGR_CMD_SET_GLONASS_MSB_ENABLE,
+ APP_MGR_CMD_SET_BEIDOU_MSA_ENABLE,
+ APP_MGR_CMD_SET_BEIDOU_MSB_ENABLE,
+ APP_MGR_CMD_SET_GALILEO_MSA_ENABLE,
+ APP_MGR_CMD_SET_GALILEO_MSB_ENABLE,
+ APP_MGR_CMD_SET_TC10_AUTO_SUPL_VER_FOR_ENI,
+ APP_MGR_CMD_SET_TC10_CP_LPP_GUARD_TIME_SEC,
+ APP_MGR_CMD_SET_TC10_CP_CAPABILITY_VALID_ENABLE,
+ APP_MGR_CMD_SET_TC10_CP_CAPABILITY_ENABLE, // 520
+ APP_MGR_CMD_SET_IGNORE_EMERGENCY_EXT_SECS_FROM_FRAMEWORK,
+ APP_MGR_CMD_GET_AGPSD_VERSION,
+ APP_MGR_CMD_GET_IMSI,
+} app_mgr_cmd_enum;
+
+typedef enum {
+ AGPS_INTF_PDE_IP_TYPE_IPV4 = 0,
+ AGPS_INTF_PDE_IP_TYPE_IPV6 = 1,
+} agps_intf_pde_ip_type;
+
+typedef enum {
+ AGPS_INTF_CDMA_PREFERRED_WCDMA = 0,
+ AGPS_INTF_CDMA_PREFERRED_CDMA = 1,
+ AGPS_INTF_CDMA_PREFERRED_CDMA_FORCE = 2,
+} agps_intf_cdma_preferred;
+
+typedef enum {
+ AGPS_INTF_PREF_METHOD_MSA = 0,
+ AGPS_INTF_PREF_METHOD_MSB = 1,
+ AGPS_INTF_PREF_METHOD_NO_PREF = 2,
+} agps_intf_pref_method;
+
+typedef enum {
+ AGPS_INTF_AGPS_PROTOCOL_UP = 0,
+ AGPS_INTF_AGPS_PROTOCOL_CP = 1,
+} agps_intf_agps_protocol;
+
+typedef enum {
+ AGPS_INTF_SUPL_VERSION_1 = 1,
+ AGPS_INTF_SUPL_VERSION_2 = 2,
+} agps_intf_supl_version;
+
+typedef enum {
+ AGPS_INTF_TLS_VERSION_1_0 = 0,
+ AGPS_INTF_TLS_VERSION_1_1 = 1,
+ AGPS_INTF_TLS_VERSION_1_2 = 2,
+} agps_intf_tls_version;
+
+typedef enum {
+ AGPS_INTF_ESUPL_APN_EIMS_IMS = 0,
+ AGPS_INTF_ESUPL_APN_EIMS = 1,
+ AGPS_INTF_ESUPL_APN_IMS = 2,
+ AGPS_INTF_ESUPL_APN_AS_NORMAL = 3,
+} agps_intf_esupl_apn;
+
+typedef enum {
+ AGPS_INTF_MOLR_POS_METHOD_LOC_EST = 0,
+ AGPS_INTF_MOLR_POS_METHOD_ASSIST_DATA = 1,
+} agps_intf_molr_pos_method;
+
+typedef struct {
+ char name[AGPS_INTF_STRING_LEN];
+ char addr[AGPS_SUPL_ADDR_LEN];
+ int port;
+ agps_bool tls;
+ char mcc_mnc[MNL_MCC_STRING_LEN];
+ char app_id[AGPS_INTF_STRING_LEN];
+ char provider_id[AGPS_INTF_STRING_LEN];
+ char default_apn[AGPS_INTF_STRING_LEN];
+ char optional_apn[AGPS_INTF_STRING_LEN];
+ char optional_apn_2[AGPS_INTF_STRING_LEN];
+ char address_type[AGPS_INTF_STRING_LEN];
+} agps_intf_supl_profile;
+
+typedef struct {
+ char name[AGPS_INTF_STRING_LEN];
+ agps_bool mcp_enable;
+ char mcp_addr[AGPS_INTF_STRING_LEN];
+ int mcp_port;
+ agps_bool pde_addr_valid;
+ agps_intf_pde_ip_type pde_ip_type; //0=IPV4 1=IPV6
+ char pde_addr[AGPS_INTF_STRING_LEN];
+ int pde_port;
+ agps_bool pde_url_valid;
+ char pde_url_addr[AGPS_INTF_STRING_LEN];
+} agps_intf_cdma_profile;
+
+typedef struct {
+ agps_bool agps_enable;
+ agps_intf_agps_protocol agps_protocol;
+ agps_bool gpevt;
+ agps_bool e911_gps_icon_enable;
+ agps_bool e911_open_gps;
+ agps_bool tc10_ignore_fw_config;
+ agps_bool lppe_hide_wifi_bt_status;
+ agps_bool lppe_network_location_disable;
+ agps_bool agps_nvram_enable;
+ agps_bool lbs_log_enable;
+ int lppe_crowd_source_confident;
+ agps_bool ignore_si_for_e911; // North America operator 'V' asks us to ignore SI triggered by GMS
+ agps_bool use_tc10_config;
+ agps_bool lppe_def_nlp_enable;
+ int emergency_ext_secs;
+} agps_intf_agps_setting;
+
+typedef struct {
+ agps_intf_molr_pos_method molr_pos_method;
+ agps_bool external_addr_enable;
+ char external_addr[EXTERNAL_ADD_LEN];
+ agps_bool mlc_number_enable;
+ char mlc_number[MLC_NUMBER_LEN];
+ agps_bool cp_auto_reset;
+ agps_bool epc_molr_lpp_payload_enable;
+ int epc_molr_lpp_payload_len;
+ char epc_molr_lpp_payload[EPC_MOLR_LPP_PAYLOAD_LEN];
+ agps_bool cp_lppe_enable;
+ agps_bool support_cp_lppe;
+ agps_bool reject_non911_nilr_enable;
+ agps_bool cp_2g_disable;
+ agps_bool cp_3g_disable;
+ agps_bool cp_4g_disable;
+ agps_bool cp_lppe_wlan_enable;
+ agps_bool cp_lppe_srn_enable;
+ agps_bool cp_lppe_sensor_enable;
+ agps_bool cp_lppe_dbh_enable;
+} agps_intf_cp_setting;
+
+typedef struct {
+ agps_bool ca_enable;
+ agps_bool ni_request;
+ agps_bool roaming;
+ agps_intf_cdma_preferred cdma_preferred;
+ agps_intf_pref_method pref_method;
+ agps_intf_supl_version supl_version;
+ agps_intf_tls_version tls_version;
+ agps_bool supl_log;
+ agps_bool msa_enable;
+ agps_bool msb_enable;
+ agps_bool ecid_enable;
+ agps_bool otdoa_enable;
+ int qop_hacc;
+ int qop_vacc;
+ int qop_loc_age;
+ int qop_delay;
+ agps_bool lpp_enable;
+ agps_bool cert_from_sdcard;
+ agps_bool auto_profile_enable;
+ char ut2;
+ char ut3;
+ agps_bool apn_enable;
+ agps_bool sync_to_slp;
+ agps_bool udp_enable;
+ agps_bool autonomous_enable;
+ agps_bool aflt_enable;
+ agps_bool imsi_enable;
+ char supl_ver_minor;
+ char supl_ver_ser_ind;
+ int sha_version; // 0: SHA1 for SUPL1.0 and SHA256 for SUPL2.0, 1: SHA1 for SUPL1.0 and SUPL2.0, 2: SHA256 for SUPL1.0 and SUPL2.0
+ int preferred_2g3g_cell_age;
+ char ut1;
+ agps_bool no_sensitive_log;
+ agps_bool tls_reuse_enable;
+ agps_bool imsi_cache_enable;
+ agps_bool supl_raw_data_enable;
+ agps_bool tc10_enable;
+ agps_bool tc10_use_apn;
+ agps_bool tc10_use_fw_dns;
+ agps_bool allow_ni_for_gps_off;
+ agps_bool force_otdoa_assist_req;
+ agps_bool up_lppe_enable;
+ agps_intf_esupl_apn esupl_apn_mode;
+ int tcp_keepalive;
+ agps_bool aosp_profile_enable;
+ agps_bool bind_nlp_setting_to_supl;
+ agps_bool up_lppe_wlan_enable;
+ agps_bool up_lppe_srn_enable;
+ agps_bool up_lppe_sensor_enable;
+ agps_bool up_lppe_dbh_enable;
+ int ip_version_prefer; //0=IPv6 prefer 1=IPv4 prefer
+ agps_bool up_lppe_in_2g3g_disable; // For ATT SUPL server
+ agps_bool up_rrlp_in_4g_disable; // For ATT SUPL server
+ agps_bool up_si_disable; // For Sprint
+ agps_bool use_ni_slp; // tc10 (ALPS04423530)
+ agps_bool aosp_pos_mode_enable;
+ int privacy_override_mode;
+} agps_intf_up_setting;
+
+typedef struct {
+ agps_bool sib8_sib16_enable;
+ agps_bool gps_satellite_enable;
+ agps_bool glonass_satellite_enable;
+ agps_bool beidou_satellite_enable;
+ agps_bool galileo_satellite_enable;
+ agps_bool a_glonass_satellite_enable;
+
+ agps_bool gps_satellite_support;
+ agps_bool glonass_satellite_support;
+ agps_bool beidou_satellite_support;
+ agps_bool galileo_satellite_support;
+
+ agps_bool a_gps_satellite_enable;
+ agps_bool a_beidou_satellite_enable;
+ agps_bool a_galileo_satellite_enable;
+
+ agps_bool mnl_support_lppe;
+} agps_intf_gnss_setting;
+
+typedef struct {
+ int supl_profiles_num;
+ agps_intf_supl_profile supl_profiles[SUPL_PROFILES_NUM];
+ agps_intf_supl_profile cur_supl_profile;
+ agps_intf_cdma_profile cdma_profile;
+ agps_intf_agps_setting agps_setting;
+ agps_intf_cp_setting cp_setting;
+ agps_intf_up_setting up_setting;
+ agps_intf_gnss_setting gnss_setting;
+ agps_bool valid;
+} agps_intf_agps_config;
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
index 09f6d2b..b8a402f 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_callback.c
@@ -141,3 +141,69 @@
{
return &lynq_test_raw_callbacks;
}
+
+
+void lynq_at_gps_location_callback(lynq_GpsLocation_ext* location)
+{
+
+}
+
+void lynq_at_gps_status_callback(GpsStatus* status)
+{
+
+}
+
+#define NMEA_ACC "ACCURACY"
+#define NMEA_GSA "GSA"
+#define NMEA_RMC "RMC"
+#define NMEA_GGA "GGA"
+#define NMEA_VTG "VTG"
+#define NMEA_GSV "GSV"
+
+void lynq_at_gps_nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)
+{
+ if (at_gpsnmea_status == 1)
+ {
+ if(strncmp(nmea+3,NMEA_GSA,strlen(NMEA_GSA))==0 || strncmp(nmea+3,NMEA_RMC,strlen(NMEA_RMC)) == 0 || \
+ strncmp(nmea+3,NMEA_GGA,strlen(NMEA_GGA)) == 0 || strncmp(nmea+3,NMEA_VTG,strlen(NMEA_VTG)) == 0|| \
+ strncmp(nmea+3,NMEA_GSV,strlen(NMEA_GSV)) == 0)
+ {
+ atsvc_gnss_outcb(nmea,strlen(nmea),1);
+ }
+ }
+}
+
+
+
+pthread_t lynq_at_gps_create_thread(const char* name, void (*start)(void *), void* arg)
+{
+ pthread_t at_ntid = 0;
+ int ret = 0;
+
+ ret = pthread_create(&at_ntid, NULL, (void *(*)(void *))start, arg);
+
+ if(ret != 0)
+ {
+ printf("thread %s create fail(%s)!\r\n", name, strerror(errno));
+ at_ntid = 0;
+ }
+ else
+ {
+ printf("tread %s create success!\r\n", name);
+ }
+
+ return at_ntid;
+}
+
+lynq_gnss_cb lynq_at_gnss_callbacks = {
+ .size = sizeof(lynq_gnss_cb),
+ .lynq_location_cb =lynq_at_gps_location_callback,
+ .lynq_status_cb = lynq_at_gps_status_callback,
+ .lynq_nmea_cb = lynq_at_gps_nmea_callback,
+ .lynq_create_thread_cb = lynq_at_gps_create_thread,
+};
+
+lynq_gnss_cb* lynq_at_get__gnss_callbacks(void)
+{
+ return &lynq_at_gnss_callbacks;
+}
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
index 12e717e..3565676 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
@@ -15,6 +15,7 @@
#include <semaphore.h>
#include <pthread.h>
#include <log/log.h>
+#include <stdlib.h>
#include "lynq_gnss.h"
#include "gpshal.h"
@@ -33,6 +34,7 @@
GpsCallbacks_ext* turn_cbs = NULL;
GpsMeasurementCallbacks_ext* raw_cbs = NULL;
+lynq_gnss_cb* lynq_at_callbacks = NULL ;
/**
* @brief mark gnss initialization state
* 0: deinit state
@@ -304,3 +306,274 @@
mnld_write_cfg(LYNQ_OUTPUT_FREQUENCY,freq);
return 0;
}
+
+lynq_atsvc_outcb atsvc_gnss_outcb;
+void atsvc_incb_entity(const char *input,const int length);
+int lynq_at_cgps(int at_type,char *at_paramter);
+int lynq_at_cgpsnmea(int at_type,char *at_paramter);
+
+int at_gps_status = 0;
+int at_gpsnmea_status = 0;
+
+int strUpper(char * str)
+{
+ int i=0;
+ while(1)
+ {
+ if(str[i]=='\0')
+ {
+ break;
+ }
+ if(str[i]>='a'&&str[i]<='z')
+ {
+ str[i]=str[i]-32;
+ }
+ i++;
+ }
+ return 0;
+}
+
+int gnss_at_cmd_parse(char *cmd,char *parse_cmd[],int* at_type)
+{
+ if (NULL == cmd || NULL == parse_cmd || NULL == at_type)
+ {
+ return -1;
+ }
+ int ret = 0;
+ int at_type_jug = 0;
+ int cmd_size;
+ char cmd_buf[128] = {0};
+ char buffer1[128] = {0};
+ char buffer2[128] = {0};
+ bzero(cmd_buf,128);
+ bzero(buffer1,128);
+ bzero(buffer2,128);
+ cmd_size = strlen(cmd);
+ memcpy(cmd_buf,cmd,cmd_size);
+ strUpper(cmd_buf);
+ ret = sscanf(cmd_buf, "%[^=]=%[^=]", buffer1,buffer2);
+ if (ret == 1)
+ {
+ *at_type = 1;
+ sscanf(buffer1, "%[^?]", buffer2);
+ strcpy(parse_cmd[0],buffer2);
+ return 0;
+ }
+ else if (ret == 2)
+ {
+ at_type_jug = strcmp(buffer2,"?");
+ RLOGD("at_type_jug :%d",at_type_jug);
+ if (at_type_jug == 0)
+ {
+ *at_type = 0;
+ strcpy(parse_cmd[0],buffer1);
+ return 0;
+ }
+ else
+ {
+ *at_type = 2;
+ RLOGD("Buffertest1:buffer1 :%s buffer2 :%s",buffer1,buffer2);
+ strcpy(parse_cmd[0],buffer1);
+ strcpy(parse_cmd[1],buffer2);
+ RLOGD("buffer1 :%s buffer2 :%s",parse_cmd[0],parse_cmd[1]);
+ return 0;
+ }
+ }
+ else
+ {
+ RLOGD("unknown paramters");
+ return -1;
+ }
+}
+
+lynq_atsvc_incb lynq_register_gnss(lynq_atsvc_outcb out_cb)
+{
+ char reg_return[100] = {0};
+ if(NULL == out_cb)
+ {
+ RLOGD("out cb is null");
+ return NULL;
+ }
+ atsvc_gnss_outcb=out_cb;
+ memcpy(reg_return,"gnss register success\r\n",24);
+ atsvc_gnss_outcb(reg_return,24,0);
+ return atsvc_incb_entity;
+}
+
+
+void atsvc_incb_entity(const char *input,const int length)
+{
+ int res = 0;
+ int income_at_type = 0;
+ char at_cmd[512]={0};
+ char gnss_at_cmd[100] = {0};
+ char *parse_atcmd[128]; //argv[0]:at cmd,argv[2]:at paramter
+ if(NULL == input)
+ {
+ RLOGD("input is null");
+ memcpy(gnss_at_cmd,"+CME ERROR: 100\r\n",strlen("+CME ERROR: 100\r\n"));
+ atsvc_gnss_outcb(gnss_at_cmd,strlen("+CME ERROR: 100\r\n"),0);
+ return -1;
+ }
+ if (strlen(input) >= 128)
+ {
+ RLOGD("input size more than 128");
+ memcpy(gnss_at_cmd,"+CME ERROR: 100\r\n",strlen("+CME ERROR: 100\r\n"));
+ atsvc_gnss_outcb(gnss_at_cmd,strlen("+CME ERROR: 100\r\n"),0);
+ return -1;
+ }
+ bzero(at_cmd,512);
+ memcpy(at_cmd,input,strlen(input));
+ res = gnss_at_cmd_parse(at_cmd,parse_atcmd,&income_at_type);
+ if (res != 0)
+ {
+ RLOGD("parse at cmd error");
+ return -1;
+ }
+
+ if (!strcmp(parse_atcmd[0], "AT+CGPS"))
+ {
+ res = lynq_at_cgps(income_at_type,parse_atcmd[1]);
+ if (res != 0)
+ {
+ RLOGD("cgps unknown error");
+ }
+ }
+ else if (!strcmp(parse_atcmd[0], "AT+CGPSNMEA"))
+ {
+ lynq_at_cgpsnmea(income_at_type,parse_atcmd[1]);
+ }
+ else
+ {
+ memcpy(gnss_at_cmd,"+CME ERROR: 100\r\n",strlen("+CME ERROR: 100\r\n"));
+ }
+ memcpy(gnss_at_cmd,"OK\r\n",4);
+ atsvc_gnss_outcb(gnss_at_cmd,4,0);
+}
+
+
+int lynq_at_cgps(int at_type,char *at_paramter)
+{
+ int ret = 0;
+ char cgps_at_res[512]={};
+
+ if (at_type == LYNQ_ATCMD_TEST)
+ {
+ bzero(cgps_at_res,512);
+ memcpy(cgps_at_res,"+CGPS:(0,1)\r\n",strlen("+CGPS:(0,1)"));
+ atsvc_gnss_outcb(cgps_at_res,strlen("+CGPS:(0,1)\r\n"),0);
+ return 0;
+ }
+ else if(at_type == LYNQ_ATCMD_READ)
+ {
+ bzero(cgps_at_res,512);
+ sprintf(cgps_at_res,"+CGPS:<%d>",at_gps_status);
+ atsvc_gnss_outcb(cgps_at_res,strlen(cgps_at_res),0);
+ return 0;
+ }
+ else if(at_type == LYNQ_ATCMD_WRITE)
+ {
+ if (at_gps_status != atoi(at_paramter))
+ {
+ at_gps_status = atoi(at_paramter);
+ }
+ else
+ {
+ bzero(cgps_at_res,512);
+ memcpy(cgps_at_res,"+CGPS ERROR: same status\r\n",strlen("+CGPS ERROR: same status\r\n"));
+ atsvc_gnss_outcb(cgps_at_res,strlen(cgps_at_res),0);
+ return -1;
+ }
+ if (at_gps_status == 0)
+ {
+ ret = lynq_gnss_stop();
+ if (ret != 0)
+ {
+ RLOGD("lynq gnss stop fail");
+ return -1;
+ }
+ ret = lynq_gnss_deinit();
+ if (ret != 0)
+ {
+ RLOGD("lynq gnss deinit fail");
+ return -1;
+ }
+ bzero(cgps_at_res,512);
+ memcpy(cgps_at_res,"+CGPS OK\r\n",strlen("+CGPS OK\r\n"));
+ atsvc_gnss_outcb(cgps_at_res,strlen(cgps_at_res),0);
+ }
+ else if(at_gps_status == 1)
+ {
+ lynq_at_callbacks = lynq_at_get__gnss_callbacks();
+ ret = lynq_gnss_callback_reg(lynq_at_callbacks);
+ if (ret != 0)
+ {
+ RLOGD("lynq gnss callback reg fail");
+ return -1;
+ }
+ ret = lynq_gnss_init();
+ if (ret != 0)
+ {
+ RLOGD("lynq gnss init fail");
+ return -1;
+ }
+ ret = lynq_gnss_start();
+ if (ret != 0)
+ {
+ RLOGD("lynq gnss init fail");
+ return -1;
+ }
+ bzero(cgps_at_res,512);
+ memcpy(cgps_at_res,"+CGPS OK\r\n",strlen("+CGPS OK\r\n"));
+ atsvc_gnss_outcb(cgps_at_res,strlen(cgps_at_res),0);
+ }
+ else
+ {
+ RLOGD("unknown at paramters");
+ bzero(cgps_at_res,512);
+ memcpy(cgps_at_res,"+CGPS ERROR: 100\r\n",strlen("+CGPS ERROR: 100\r\n"));
+ atsvc_gnss_outcb(cgps_at_res,strlen("+CGPS ERROR: 100\r\n"),0);
+ }
+ return 0;
+ }
+}
+
+
+int lynq_at_cgpsnmea(int at_type,char *at_paramter)
+{
+ int ret = 0;
+ char cgpsnmea_at_res[512]={};
+
+ if (at_type == LYNQ_ATCMD_TEST)
+ {
+ bzero(cgpsnmea_at_res,512);
+ memcpy(cgpsnmea_at_res,"+CGPSNMEA:(0,1)\r\n",strlen("+CGPSNMEA:(0,1)"));
+ atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
+ return 0;
+ }
+ else if(at_type == LYNQ_ATCMD_READ)
+ {
+ bzero(cgpsnmea_at_res,512);
+ sprintf(cgpsnmea_at_res,"+CGPSNMEA:<%d>",at_gpsnmea_status);
+ atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
+ return 0;
+ }
+ else if(at_type == LYNQ_ATCMD_WRITE)
+ {
+ if (at_gpsnmea_status != atoi(at_paramter))
+ {
+ at_gpsnmea_status = atoi(at_paramter);
+ bzero(cgpsnmea_at_res,512);
+ memcpy(cgpsnmea_at_res,"+CGPSNMEA OK\r\n",strlen("+CGPSNMEA OK\r\n"));
+ atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
+ }
+ else
+ {
+ RLOGD("unknown at paramters");
+ bzero(cgpsnmea_at_res,512);
+ memcpy(cgpsnmea_at_res,"+CGPSNMEA ERROR: 100\r\n",strlen("+CGPSNMEA ERROR: 100\r\n"));
+ atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
+ }
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h b/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
index a7687fe..04938c9 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnsshal.h
@@ -6,6 +6,7 @@
#endif
#include<pthread.h>
+#include "lynq_gnss.h"
#include "hardware/gps_mtk.h"
#include "hal2mnl_interface.h"
#include "gpshal.h"
@@ -37,6 +38,17 @@
GpsMeasurementCallbacks_ext* lynq_gnss_get_raw_callbacks(void);
+lynq_gnss_cb* lynq_at_get__gnss_callbacks(void);
+
+extern lynq_atsvc_outcb atsvc_gnss_outcb;
+extern int at_gpsnmea_status;
+
+typedef enum{
+ LYNQ_ATCMD_TEST = 0,
+ LYNQ_ATCMD_READ,
+ LYNQ_ATCMD_WRITE
+}LYNQ_ATCMD_TYPE;
+
#ifdef __cplusplus
}
#endif
diff --git a/src/lynq/lib/liblynq-network/LICENSE b/src/lynq/lib/liblynq-network/LICENSE
index 77f59ed..605b7ea 100755
--- a/src/lynq/lib/liblynq-network/LICENSE
+++ b/src/lynq/lib/liblynq-network/LICENSE
@@ -1,31 +1,31 @@
Copyright Statement:
-This software/firmware and related documentation ("MediaTek Software") are
+This software/firmware and related documentation ("MobileTek Software") are
protected under relevant copyright laws. The information contained herein is
-confidential and proprietary to MediaTek Inc. and/or its licensors. Without
-the prior written permission of MediaTek inc. and/or its licensors, any
-reproduction, modification, use or disclosure of MediaTek Software, and
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
information contained herein, in whole or in part, shall be strictly
prohibited.
-MediaTek Inc. (C) 2015. All rights reserved.
+MobileTek Inc. (C) 2015. All rights reserved.
BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
-THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
-RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
-ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
-NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
-INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
-OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
-SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
-STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
-ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
-RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
-MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
-CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/lib/liblynq-network/lynq_module_common.h b/src/lynq/lib/liblynq-network/lynq_module_common.h
index a582538..57ea5b2 100755
--- a/src/lynq/lib/liblynq-network/lynq_module_common.h
+++ b/src/lynq/lib/liblynq-network/lynq_module_common.h
@@ -28,6 +28,8 @@
#define LYNQ_REQUEST_RECORD (LYNQ_REQUEST_VENDOR_BASE +11)
#define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
#define LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +13)
+#define LYNQ_REQUEST_CHANGE_SCREEN_STATE (LYNQ_REQUEST_VENDOR_BASE + 14)/*jb.qi add for two sim suspend 2022/9/19*/
+#define LYNQ_REQUEST_CHANGE_RADIO (LYNQ_REQUEST_VENDOR_BASE + 15)
/*the same with lynq_interface.h end*/
typedef enum{
@@ -60,4 +62,7 @@
#define MODULE_CLOSED (0)
#define MODULE_SWITCHING (1)
#define MODULE_RUNNING (2)
+
+extern int g_module_init_flag;
+
#endif
diff --git a/src/lynq/lib/liblynq-network/lynq_module_socket.cpp b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
index fa71d82..c3f7334 100755
--- a/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_module_socket.cpp
@@ -15,6 +15,7 @@
#include "lynq_module_common.h"
#include "lynq_module_socket.h"
#include "liblog/lynq_deflog.h"
+#include "lynq_shm.h"
#define LYNQ_SERVICE_PORT 8088
#define LYNQ_ADDRESS "127.0.0.1"
@@ -40,6 +41,11 @@
int error;
}lynq_resp_t;
+typedef struct{
+ int resp_type;
+ int urcid;
+}lynq_head_t;
+
lynq_client_t client_t;
lynq_resp_t response;
@@ -67,6 +73,21 @@
const int waitResponse(int token,int time_out);
/*hq add for set waiting time 2022/09/13 end*/
+/*hq add for urc process asynchronous 2022/12/26 begin*/
+static pthread_mutex_t s_ProcessUrcMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_WaitProcessUrcMsgCond = PTHREAD_COND_INITIALIZER;
+
+#define BLOCK_PROCESS_URC_MSG_INIT() pthread_mutex_init(&s_ProcessUrcMsgBlockMutex,NULL)
+#define BLOCK_PROCESS_URC_MSG_LOCK() pthread_mutex_lock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_PROCESS_URC_MSG_UNLOCK() pthread_mutex_unlock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAIT_PROCESS_URC_MSG() pthread_cond_wait(&s_WaitProcessUrcMsgCond, &s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAKEUP_PROCESS_URC_MSG() pthread_cond_broadcast(&s_WaitProcessUrcMsgCond)
+static std::list<Parcel*> s_recv_urc_parcel_list;
+void *thread_urc_process(void *p);
+pthread_t module_urc_process_tid = -1;
+int module_urc_process_status = 1;
+/*hq add for urc process asynchronous 2022/12/26 end*/
+
int g_module_Global_uToken = 0;
int g_wait_time=5;
@@ -118,7 +139,7 @@
std::list<Parcel*>::iterator iter;
int cnt=0;
- gettimeofday(&now,NULL);
+ gettimeofday(&now,NULL);
timeout.tv_sec = now.tv_sec+time_out; //timeout is 1min
timeout.tv_nsec = now.tv_usec*1000;
@@ -268,6 +289,295 @@
return ret;
}
+/*hq add for urc broadcase optimisson 2023/01/03 begin*/
+#define SHM_BUFFER_INDEX_OFFSET 1
+#define SHM_BUFFER_SIZE_OFFSET 16
+#define SHM_BUFFER_INDEX_MASK 0x0000007F
+#define SHM_BUFFER_SIZE_MASK 0x0000FFFF
+
+bool urc_data_is_in_shm_data(int responseType,int& level, int& index, int& size)
+{
+ int shm_index=((responseType>>SHM_BUFFER_INDEX_OFFSET)&SHM_BUFFER_INDEX_MASK);
+ if (shm_index>0)
+ {
+ index=shm_index-1;
+ size=((responseType>>SHM_BUFFER_SIZE_OFFSET)&SHM_BUFFER_SIZE_MASK);
+ if(size>=sizeof(int32_t)*3 && get_shem_buffer_level(size,&level))
+ {
+ LYINFLOG("urc_data_is_in_shm_data level is %d, index is %d size is %d",level,index,size);
+ return true;
+ }
+ }
+ LYINFLOG("urc_data_is_in_shm_data return false, responseType is %d",responseType);
+ return false;
+}
+/*hq add for urc broadcase optimisson 2023/01/03 end*/
+
+void *thread_urc_recv(void *p)
+{
+ Parcel *urc_p =NULL;
+ char urc_data[LYNQ_REC_BUF];
+ int res = 0;
+ lynq_head_t* phead;
+ int level,index,size;
+ uint8_t * shm_buffer;
+
+ LYINFLOG("urc recv thread is running");
+ while(module_urc_status)
+ {
+ bzero(urc_data,LYNQ_REC_BUF);
+ res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
+ if(res<sizeof(int32_t)*2)
+ {
+ LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
+ continue;
+ }
+
+ phead=(lynq_head_t*) urc_data;
+ if(is_support_urc(phead->urcid)==false)
+ {
+ continue;
+ }
+ urc_p = new Parcel();
+ if(urc_p == NULL)
+ {
+ LYERRLOG("new parcel failure!!!");
+ continue;
+ }
+ if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
+ {
+ shm_buffer = (uint8_t *) get_shem_buffer(level,index);
+ LYINFLOG("shm pointer is %p", shm_buffer);
+ urc_p->setData(shm_buffer,size); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else if(res>=sizeof(int32_t)*3)
+ {
+ urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else
+ {
+ LYERRLOG("res %d error!!!", res);
+ delete urc_p;
+ urc_p = NULL;
+ continue;
+ }
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ s_recv_urc_parcel_list.push_back(urc_p);
+ BLOCK_WAKEUP_PROCESS_URC_MSG();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ }
+ else
+ {
+ delete urc_p;
+ urc_p = NULL;
+ }
+ }
+ LYINFLOG("urc recv thread ended");
+ return NULL;
+}
+
+void cleanup_urc_process_mutex(void *arg)
+{
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+}
+
+void *thread_urc_process(void *p)
+{
+ Parcel *urc_p =NULL;
+ std::list<Parcel*>::iterator iter;
+
+ LYINFLOG("urc process thread is running");
+ pthread_cleanup_push(cleanup_urc_process_mutex, NULL); // thread cleanup handler
+ while(module_urc_process_status)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ while(s_recv_urc_parcel_list.empty())
+ {
+ BLOCK_WAIT_PROCESS_URC_MSG();
+ }
+ iter=s_recv_urc_parcel_list.begin();
+ urc_p=(*iter);
+ s_recv_urc_parcel_list.erase(iter);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ pthread_mutex_lock(&s_urc_mutex);
+ urc_msg_process(urc_p);
+ pthread_mutex_unlock(&s_urc_mutex);
+ }
+ delete urc_p;
+ urc_p = NULL;
+ }
+ pthread_cleanup_pop(0);
+ LYINFLOG("urc process thread ended");
+ return NULL;
+}
+
+void lynq_close_urc_rev_thread()
+{
+ int ret;
+
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when recv from
+ module_urc_status = 0;
+ if(module_urc_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_tid);
+ LYINFLOG("pthread cancel urc rev ret = %d",ret);
+ }
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_tid != -1)
+ {
+ ret = pthread_join(module_urc_tid,NULL);
+ LYINFLOG("pthread join urc tid ret = %d",ret);
+ module_urc_tid =-1;
+ }
+}
+
+void lynq_close_urc_process_thread()
+{
+ int ret;
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when not process urc msg in list
+ pthread_mutex_lock(&s_urc_mutex); //just cancel urc process tid when not process urg msg avoid mutual lock for tid may call pthread_cond_wait
+ module_urc_process_status = 0;
+ if(module_urc_process_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_process_tid);
+ LYINFLOG("pthread cancel urc process ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_urc_mutex);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_process_tid != -1)
+ {
+ ret = pthread_join(module_urc_process_tid,NULL);
+ LYINFLOG("pthread join urc process tid ret = %d",ret);
+ module_urc_process_tid =-1;
+ }
+}
+
+int lynq_setup_urc_socket()
+{
+ int on = 1;
+ int ret = 0;
+ module_len_urc_addr_serv = sizeof(sockaddr_in);
+ module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (module_urc_sock_fd <0){
+ LYERRLOG("urc socket error");
+ return RESULT_ERROR;
+ }
+ module_urc_addr_serv.sin_family = AF_INET;
+ module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
+ module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
+ /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
+ ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
+ if(ret <0)
+ {
+ LYERRLOG("urc socket set error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));
+ if(ret <0)
+ {
+ LYERRLOG("urc socket bind error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
+}
+
+void lynq_close_urc_socket()
+{
+ if (module_urc_sock_fd >= 0)
+ {
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ }
+}
+
+int lynq_start_all_urc_socket_thread()
+{
+
+ if(ril_init_mem()!=0)
+ {
+ LYERRLOG("ril_init_mem fail");
+ return RESULT_ERROR;
+ }
+
+ int ret= lynq_setup_urc_socket();
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("call lynq_setup_urc_socket fail");
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ BLOCK_PROCESS_URC_MSG_INIT();
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ pthread_mutex_init(&s_urc_mutex, NULL);
+
+ module_urc_status = 1;
+ // pthread_attr_init(&attr);
+ // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc recv pthread create error");
+ module_urc_status = 0;
+ lynq_close_urc_socket();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ module_urc_process_status = 1;
+ ret = pthread_create(&module_urc_process_tid,/*&attr*/NULL,thread_urc_process,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc process pthread create error");
+ module_urc_process_status = 0;
+ lynq_close_urc_socket();
+ lynq_close_urc_rev_thread();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ LYINFLOG("urc start success");
+
+ return RESULT_OK;
+}
+
+void lynq_close_all_urc_socket_thread()
+{
+
+ lynq_close_urc_rev_thread();
+ lynq_close_urc_socket();
+ lynq_close_urc_process_thread();
+
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ ril_deinit_mem();
+}
+
/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread
* @param p [IN]: no meaning
* @return
@@ -347,44 +657,7 @@
return NULL;
}
-void *thread_urc_recv(void *p)
-{
- Parcel *urc_p =NULL;
- char urc_data[LYNQ_REC_BUF];
- int res = 0;
-
- LYINFLOG("urc thread is running");
- while(module_urc_status)
- {
- bzero(urc_data,LYNQ_REC_BUF);
- res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
- if(res<=0)
- {
- LYERRLOG("thread_urc_recv step2 fail:");
- break;
- }
- urc_p = new Parcel();
- if(urc_p == NULL)
- {
- LYERRLOG("new parcel failure!!!");
- break;
- }
- urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
- urc_p->setDataPosition(0);
- if(urc_p->dataAvail()>0)
- {
- pthread_mutex_lock(&s_urc_mutex);
- urc_msg_process(urc_p);
- pthread_mutex_unlock(&s_urc_mutex);
- }
- delete urc_p;
- urc_p = NULL;
- }
- LYINFLOG("urc thread ended");
- return NULL;
-}
-
-int lynq_server_socket_start()
+int lynq_start_all_rc_socket_thread()
{
module_rc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(module_rc_sock_fd < 0)
@@ -434,82 +707,7 @@
return RESULT_OK;
}
-int lynq_urc_socket_start()
-{
-// pthread_t tid;
-// pthread_attr_t attr;
- int on = 1;
- int ret = 0;
- module_len_urc_addr_serv = sizeof(sockaddr_in);
- module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (module_urc_sock_fd <0){
- LYERRLOG("urc socket error");
- return RESULT_ERROR;
- }
- module_urc_addr_serv.sin_family = AF_INET;
- module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
- module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
- /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
- ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
- if(ret <0)
- {
- LYERRLOG("urc socket set error");
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
- ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));
- if(ret <0)
- {
- LYERRLOG("urc socket bind error");
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
-
- module_urc_status = 1;
- // pthread_attr_init(&attr);
- // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);
- if(ret <0)
- {
- LYERRLOG("urc pthread create error");
- module_urc_status = 0;
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- return RESULT_ERROR;
- }
- LYINFLOG("urc start success");
-
- return RESULT_OK;
-}
-
-void lynq_close_urc_thread()
-{
- int ret;
-
- pthread_mutex_lock(&s_urc_mutex); //just cancel urc tid when recvfrom avoid mutual lock for tid may call pthread_cond_wait
- module_urc_status = 0;
- if(module_urc_tid!=-1)
- {
- ret = pthread_cancel(module_urc_tid);
- LYINFLOG("pthread cancel urc ret = %d",ret);
- }
- pthread_mutex_unlock(&s_urc_mutex);
- if(module_urc_tid != -1)
- {
- ret = pthread_join(module_urc_tid,NULL);
- LYINFLOG("pthread join urc tid ret = %d",ret);
- module_urc_tid =-1;
- }
- if (module_urc_sock_fd > 0)
- {
- close(module_urc_sock_fd);
- module_urc_sock_fd =-1;
- }
-}
-
-void lynq_close_rc_thread()
+void lynq_close_all_rc_socket_thread()
{
int ret;
BLOCK_RECV_MSG_LOCK();
@@ -545,3 +743,273 @@
BLOCK_RECV_MSG_UNLOCK();
}
+const char * requestToString(int request)
+{
+ /*
+ cat libs/telephony/ril_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
+
+
+ cat libs/telephony/ril_unsol_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),([^}]+).+/case RIL_\1: return "\1";/'
+
+ */
+ switch(request) {
+ case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
+ case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
+ case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
+ case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
+ case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
+ case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
+ case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
+ case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
+ case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
+ case RIL_REQUEST_DIAL: return "DIAL";
+ case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
+ case RIL_REQUEST_HANGUP: return "HANGUP";
+ case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
+ case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
+ case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
+ case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
+ case RIL_REQUEST_UDUB: return "UDUB";
+ case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
+ case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
+ case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
+ case RIL_REQUEST_OPERATOR: return "OPERATOR";
+ case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
+ case RIL_REQUEST_DTMF: return "DTMF";
+ case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
+ case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
+ case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
+ case RIL_REQUEST_SIM_IO: return "SIM_IO";
+ case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
+ case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
+ case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
+ case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
+ case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
+ case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
+ case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
+ case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
+ case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
+ case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
+ case RIL_REQUEST_ANSWER: return "ANSWER";
+ case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
+ case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
+ case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
+ case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
+ case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
+ case RIL_REQUEST_DTMF_START: return "DTMF_START";
+ case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
+ case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
+ case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
+ case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "SET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "GET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "GET_NEIGHBORING_CELL_IDS";
+ case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
+ case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
+ case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
+ case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
+ case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
+ case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
+ case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
+ case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
+ case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
+ case RIL_REQUEST_STK_GET_PROFILE: return "STK_GET_PROFILE";
+ case RIL_REQUEST_STK_SET_PROFILE: return "STK_SET_PROFILE";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "STK_SEND_ENVELOPE_COMMAND";
+ case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "STK_SEND_TERMINAL_RESPONSE";
+ case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
+ case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
+ case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "EXPLICIT_CALL_TRANSFER";
+ case RIL_REQUEST_SET_LOCATION_UPDATES: return "SET_LOCATION_UPDATES";
+ case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:return"CDMA_SET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:return"CDMA_SET_ROAMING_PREFERENCE";
+ case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:return"CDMA_QUERY_ROAMING_PREFERENCE";
+ case RIL_REQUEST_SET_TTY_MODE:return"SET_TTY_MODE";
+ case RIL_REQUEST_QUERY_TTY_MODE:return"QUERY_TTY_MODE";
+ case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_FLASH:return"CDMA_FLASH";
+ case RIL_REQUEST_CDMA_BURST_DTMF:return"CDMA_BURST_DTMF";
+ case RIL_REQUEST_CDMA_SEND_SMS:return"CDMA_SEND_SMS";
+ case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:return"CDMA_SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG:return"GSM_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG:return"GSM_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION:return "GSM_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG:return "CDMA_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG:return "CDMA_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION:return "CDMA_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return"CDMA_VALIDATE_AND_WRITE_AKEY";
+ case RIL_REQUEST_CDMA_SUBSCRIPTION: return"CDMA_SUBSCRIPTION";
+ case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "CDMA_WRITE_SMS_TO_RUIM";
+ case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "CDMA_DELETE_SMS_ON_RUIM";
+ case RIL_REQUEST_DEVICE_IDENTITY: return "DEVICE_IDENTITY";
+ case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_REQUEST_GET_SMSC_ADDRESS: return "GET_SMSC_ADDRESS";
+ case RIL_REQUEST_SET_SMSC_ADDRESS: return "SET_SMSC_ADDRESS";
+ case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "REPORT_SMS_MEMORY_STATUS";
+ case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "REPORT_STK_SERVICE_IS_RUNNING";
+ case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "CDMA_GET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_ISIM_AUTHENTICATION: return "ISIM_AUTHENTICATION";
+ case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
+ case RIL_REQUEST_VOICE_RADIO_TECH: return "VOICE_RADIO_TECH";
+ case RIL_REQUEST_GET_CELL_INFO_LIST: return"GET_CELL_INFO_LIST";
+ case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return"SET_UNSOL_CELL_INFO_LIST_RATE";
+ case RIL_REQUEST_SET_INITIAL_ATTACH_APN: return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
+ case RIL_REQUEST_IMS_REGISTRATION_STATE: return "IMS_REGISTRATION_STATE";
+ case RIL_REQUEST_IMS_SEND_SMS: return "IMS_SEND_SMS";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: return "SIM_TRANSMIT_APDU_BASIC";
+ case RIL_REQUEST_SIM_OPEN_CHANNEL: return "SIM_OPEN_CHANNEL";
+ case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "SIM_CLOSE_CHANNEL";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "SIM_TRANSMIT_APDU_CHANNEL";
+ case RIL_REQUEST_GET_RADIO_CAPABILITY: return "RIL_REQUEST_GET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_RADIO_CAPABILITY: return "RIL_REQUEST_SET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_UICC_SUBSCRIPTION: return "SET_UICC_SUBSCRIPTION";
+ case RIL_REQUEST_ALLOW_DATA: return "ALLOW_DATA";
+ case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG";
+ case RIL_REQUEST_SIM_AUTHENTICATION: return "SIM_AUTHENTICATION";
+ case RIL_REQUEST_GET_DC_RT_INFO: return "GET_DC_RT_INFO";
+ case RIL_REQUEST_SET_DC_RT_INFO_RATE: return "SET_DC_RT_INFO_RATE";
+ case RIL_REQUEST_SET_DATA_PROFILE: return "SET_DATA_PROFILE";
+ case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
+ case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
+ case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST(obsolete)";
+ case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
+ case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
+ case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
+ case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
+ case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
+ case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
+ case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FUL";
+ case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
+ case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
+ case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
+ case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
+ case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS";
+ case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
+ case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
+ case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
+ case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
+ case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
+ case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
+ case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
+ case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
+ case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED";
+ case RIL_UNSOL_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
+ case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
+ case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
+ case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST";
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: return "RESPONSE_IMS_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: return "UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
+ case RIL_UNSOL_SRVCC_STATE_NOTIFY: return "UNSOL_SRVCC_STATE_NOTIFY";
+ case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "HARDWARE_CONFIG_CHANGED";
+ case RIL_UNSOL_DC_RT_INFO_CHANGED: return "UNSOL_DC_RT_INFO_CHANGED";
+ case RIL_REQUEST_SHUTDOWN: return "SHUTDOWN";
+ case RIL_UNSOL_RADIO_CAPABILITY: return "RIL_UNSOL_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_TRM: return "RIL_REQUEST_SET_TRM";
+ case RIL_REQUEST_SET_IMS_ENABLE:return "RIL_REQUEST_SET_IMS_ENABLE";
+ case RIL_REQUEST_SET_AUDIO_PATH: return "SET_AUDIO_PATH";
+ case RIL_REQUEST_HANGUP_ALL: return "HANGUP_ALL";
+ case RIL_REQUEST_FORCE_RELEASE_CALL: return "FORCE_RELEASE_CALL";
+ case RIL_REQUEST_EMERGENCY_DIAL: return "RIL_REQUEST_EMERGENCY_DIAL";
+ case RIL_REQUEST_SET_ECC_SERVICE_CATEGORY: return "RIL_REQUEST_SET_ECC_SERVICE_CATEGORY";
+ case RIL_REQUEST_SET_ECC_LIST: return "RIL_REQUEST_SET_ECC_LIST";
+ case RIL_REQUEST_AT_COMMAND_WITH_PROXY: return "AT_COMMAND_WITH_PROXY";
+ case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION";
+ case RIL_REQUEST_SET_CLIP: return "RIL_REQUEST_SET_CLIP";
+ case RIL_REQUEST_GET_COLP: return "RIL_REQUEST_GET_COLP";
+ case RIL_REQUEST_SET_COLP: return "RIL_REQUEST_SET_COLP";
+ case RIL_REQUEST_GET_COLR: return "RIL_REQUEST_GET_COLR";
+ case RIL_REQUEST_ADD_IMS_CONFERENCE_CALL_MEMBER: return "ADD_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_REMOVE_IMS_CONFERENCE_CALL_MEMBER: return "REMOVE_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_CONFERENCE_DIAL: return "CONFERENCE_DIAL";
+ case RIL_REQUEST_DIAL_WITH_SIP_URI: return "DIAL_WITH_SIP_URI";
+ case RIL_REQUEST_HOLD_CALL: return "HOLD_CALL";
+ case RIL_REQUEST_RESUME_CALL: return "RESUME_CALL";
+ case RIL_UNSOL_ECONF_SRVCC_INDICATION : return "ECONF_SRVCC_INDICATION";
+ case RIL_UNSOL_ECONF_RESULT_INDICATION : return "ECONF_RESULT_INDICATION";
+ case RIL_UNSOL_MAL_AT_INFO : return "UNSOL_MAL_AT_INFO";
+ case RIL_REQUEST_MODEM_POWEROFF: return "MODEM_POWEROFF";
+ case RIL_REQUEST_MODEM_POWERON: return "MODEM_POWERON";
+ case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
+ case RIL_REQUEST_QUERY_ICCID: return "RIL_REQUEST_QUERY_ICCID";
+ case RIL_UNSOL_TX_POWER: return "RIL_UNSOL_TX_POWER";
+ case RIL_UNSOL_NETWORK_INFO: return "RIL_UNSOL_NETWORK_INFO";
+ case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
+ case RIL_REQUEST_SET_IMSCFG: return "RIL_REQUEST_SET_IMSCFG";
+#ifdef ECALL_SUPPORT
+ case RIL_REQUEST_ECALL_FAST_MAKE_ECALL: return "ECALL_FAST_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_SET_IVS: return "RIL_REQUEST_ECALL_SET_IVS";
+ case RIL_REQUEST_ECALL_SET_PSAP: return "RIL_REQUEST_ECALL_SET_PSAP";
+ case RIL_REQUEST_ECALL_MAKE_ECALL: return "RIL_REQUEST_ECALL_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_IVS_PUSH_MSD: return "RIL_REQUEST_ECALL_IVS_PUSH_MSD";
+ case RIL_REQUEST_ECALL_PSAP_PULL_MSD: return "RIL_REQUEST_ECALL_PSAP_PULL_MSD";
+ case RIL_UNSOL_ECALL_MSDHACK : return "ECALL_MSDHACK";
+ case RIL_REQUEST_ECALL_SET_MSD: return "RIL_REQUEST_ECALL_SET_MSD";
+ case RIL_REQUEST_ECALL_CTRL_SEQUENCE: return "ECALL_SET_CTRL_SEQUENCE";
+ case RIL_UNSOL_ECALL_INDICATIONS : return "ECALL_INDICATIONS";
+ case RIL_REQUEST_ECALL_RESET_IVS: return "RIL_REQUEST_ECALL_RESET_IVS";
+ case RIL_REQUEST_ECALL_SET_PRI: return "RIL_REQUEST_ECALL_SET_PRI";
+ case RIL_REQUEST_ECALL_SET_TEST_NUM: return "RIL_REQUEST_ECALL_SET_TEST_NUM";
+ case RIL_REQUEST_ECALL_SET_RECONF_NUM: return "RIL_REQUEST_ECALL_SET_RECONF_NUM";
+ case RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD: return "RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD";
+ case RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME: return "RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME";
+ case RIL_REQUEST_ECALL_SET_REGISTRATION_STATE: return "RIL_REQUEST_ECALL_SET_REGISTRATION_STATE";
+#endif /*ECALL_SUPPORT*/
+#ifdef KEEP_ALIVE
+ case RIL_REQUEST_START_KEEPALIVE_PRO: return "RIL_REQUEST_START_KEEPALIVE_PRO";
+ case RIL_REQUEST_STOP_KEEPALIVE_PRO: return "RIL_REQUEST_STOP_KEEPALIVE_PRO";
+ case RIL_UNSOL_KEEPALIVE_STATUS_PRO: return "RIL_UNSOL_KEEPALIVE_STATUS_PRO";
+#endif /*KEEP_ALIVE*/
+ case RIL_REQUEST_SEND_USSI: return "SEND_USSI";
+ case RIL_REQUEST_CANCEL_USSI: return "CANCEL_USSI";
+ case RIL_REQUEST_GET_SMS_SIM_MEM_STATUS: return "GET_SMS_SIM_MEM_STATUS";
+ case RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR: return "RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR";
+ case RIL_REQUEST_REPORT_AIRPLANE_MODE: return "RIL_REQUEST_REPORT_AIRPLANE_MODE";
+ case RIL_REQUEST_SET_ECC_NUM: return "RIL_REQUEST_SET_ECC_NUM";
+ case RIL_REQUEST_GET_ECC_NUM: return "RIL_REQUEST_GET_ECC_NUM";
+ case RIL_UNSOL_ECC_NUM: return "RIL_UNSOL_ECC_NUM";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT: return "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT";
+ case RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE";
+ case RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE";
+ case RIL_UNSOL_CALL_INFO_INDICATION: return "RIL_UNSOL_CALL_INFO_INDICATION";
+ case RIL_REQUEST_MODIFY_APN: return "RIL_REQUEST_MODIFY_APN";
+ case RIL_REQUEST_RESET_APN: return "RIL_REQUEST_RESET_APN";
+ case RIL_REQUEST_QUERY_SIM_RETRY_COUNT: return "RIL_REQUEST_QUERY_SIM_RETRY_COUNT";
+ case RIL_REQUEST_QUERY_EID: return "RIL_REQUEST_QUERY_EID";
+ case LYNQ_REQUEST_SET_DTMF_VOLUME: return "RIL_REQUEST_SET_DTMF_VOLUME";
+ case LYNQ_REQUEST_SET_SPEECH_VOLUME: return "RIL_REQUEST_SET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_GET_SPEECH_VOLUME: return "RIL_REQUEST_GET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_RECORD: return "RIL_REQUEST_RECORD";
+ /*warren add for t800 ril service 2022/1/22 start*/
+ case LYNQ_REQUEST_WRITE_SMS_TO_MEMORY: return "LYNQ_REQUEST_WRITE_SMS_TO_MEMORY";
+ case LYNQ_REQUEST_READ_SMS_FROM_MEMORY: return "LYNQ_REQUEST_READ_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY: return "LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY: return "LYNQ_REQUEST_LIST_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
+ case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
+ case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
+ /*warren add for t800 ril service 2022/1/22 end*/
+ default: return "<unknown request>";
+ }
+}
+
+
diff --git a/src/lynq/lib/liblynq-network/lynq_module_socket.h b/src/lynq/lib/liblynq-network/lynq_module_socket.h
index fb1785a..98f968e 100755
--- a/src/lynq/lib/liblynq-network/lynq_module_socket.h
+++ b/src/lynq/lib/liblynq-network/lynq_module_socket.h
@@ -4,15 +4,19 @@
using ::android::Parcel;
int lynq_set_test_network(const int test_mode);
-int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...);
-int lynq_server_socket_start();
-int lynq_urc_socket_start();
-void lynq_close_urc_thread();
-void lynq_close_rc_thread();
extern int g_module_Global_uToken;
extern int g_wait_time;
+int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...);
+
+int lynq_start_all_urc_socket_thread();
+void lynq_close_all_urc_socket_thread();
+int lynq_start_all_rc_socket_thread();
+void lynq_close_all_rc_socket_thread();
+
+const char * requestToString(int request);
void urc_msg_process(Parcel *p);
+bool is_support_urc(int urc_id);
#endif
diff --git a/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
index d7c9111..1d0b5af 100755
--- a/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_module_state_buffer.cpp
@@ -161,7 +161,7 @@
void deinit_network_timer_all()
{
for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){
- stop_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
+ stop_network_timer(s_state_buffer_timer[i],s_state_buffer_sig_value[i]);
s_state_buffer_valid[i] = false;
}
}
diff --git a/src/lynq/lib/liblynq-network/lynq_network.cpp b/src/lynq/lib/liblynq-network/lynq_network.cpp
index cca772f..98e33f6 100755
--- a/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -54,8 +54,8 @@
int ret;
init_network_timer_all();
-
- ret = lynq_urc_socket_start();
+
+ ret = lynq_start_all_urc_socket_thread();
if(ret != 0)
{
LYERRLOG("init socket urc fail!!!");
@@ -63,11 +63,11 @@
return LYNQ_E_INNER_ERROR;
}
- ret = lynq_server_socket_start();
+ ret = lynq_start_all_rc_socket_thread();
if(ret !=0)
{
LYERRLOG("init socket client fail!!!");
- lynq_close_urc_thread();
+ lynq_close_all_urc_socket_thread();
g_module_init_flag = MODULE_CLOSED;
return LYNQ_E_INNER_ERROR;
}
@@ -85,8 +85,8 @@
}
g_module_init_flag = MODULE_SWITCHING;
- lynq_close_urc_thread();
- lynq_close_rc_thread();
+ lynq_close_all_urc_socket_thread();
+ lynq_close_all_rc_socket_thread();
deinit_network_timer_all();
g_module_init_flag = MODULE_CLOSED;
@@ -1113,6 +1113,20 @@
return;
}
+bool is_support_urc(int urc_id)
+{
+ switch(urc_id)
+ {
+ case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:
+ case RIL_UNSOL_SIGNAL_STRENGTH:
+ return true;
+ default:
+ return false;
+ }
+}
+
void urc_msg_process(Parcel *p)
{
int resp_type;
@@ -1121,10 +1135,11 @@
int urc_LTE_signalstrength = 0;
int urc_WCDMA_signalstrength = 0;
+ int size=p->dataSize();
p->readInt32(&resp_type);
p->readInt32(&s_module_wait_urc_id);
p->readInt32(&s_module_urc_slot_id);
- LYINFLOG("urc id = %d, slot_id = %d",s_module_wait_urc_id,s_module_urc_slot_id);
+ LYINFLOG("%s urc id = %d, slot_id = %d, size is %d, msg is %s",__func__, s_module_wait_urc_id,s_module_urc_slot_id,size,requestToString(s_module_wait_urc_id));
switch(s_module_wait_urc_id)
{
case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:
diff --git a/src/lynq/lib/liblynq-network/makefile b/src/lynq/lib/liblynq-network/makefile
index 491d547..0ae6805 100755
--- a/src/lynq/lib/liblynq-network/makefile
+++ b/src/lynq/lib/liblynq-network/makefile
@@ -22,6 +22,7 @@
-I$(ROOT)$(includedir)/liblog \
-I$(ROOT)$(includedir)/vendor-ril \
-I$(ROOT)$(includedir)/include \
+ -I$(ROOT)$(includedir)/lynq_shm \
@@ -35,6 +36,7 @@
-llynq-log \
-lutils \
-lcutils \
+ -llynq-shm \
SOURCES = $(wildcard *.cpp)
diff --git a/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c b/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c
index 87220ee..10299d1 100644
--- a/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c
+++ b/src/lynq/lib/liblynq-protcl/ftp/lynq_ftpclient.c
@@ -250,13 +250,14 @@
}
-int lynq_ftp_download(lynq_ftp_socker_info* FTP)
+int lynq_ftp_download(lynq_ftp_socker_info* FTP, char *put_pach)
{
char catbuf[1024];
int data_sock;
int recvbytes, sendbytes;
char sendline[1024] = "", recvline[1024] = "";
- char getfilepath[FTP_MAX_ASCII_LEN+5] = "/tmp/";
+ char getfilepath[FTP_MAX_ASCII_LEN+5];
+ strcpy(getfilepath, put_pach);
#if 1
//type
diff --git a/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h b/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h
index 12e3f09..c0344bf 100644
--- a/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h
+++ b/src/lynq/lib/liblynq-protcl/include/ftp/lynq_ftp.h
@@ -153,7 +153,7 @@
extern void lynq_ftp_get(int sck, char *pDownloadFileName, int session);
extern void lynq_ftp_rest(int control_sockfd);
extern int cliopen(char *hoster, int port);
-extern int lynq_ftp_download(lynq_ftp_socker_info* FTP);
+extern int lynq_ftp_download(lynq_ftp_socker_info* FTP, char *put_pach);
extern int lynq_ftp_up(lynq_ftp_socker_info* FTP);
int lynq_ftp_ls(lynq_ftp_socker_info* FTP);
void lynq_ftp_cd(lynq_ftp_socker_info* FTP);
diff --git a/src/lynq/lib/liblynq-shm/LICENSE b/src/lynq/lib/liblynq-shm/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/src/lynq/lib/liblynq-shm/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/lib/liblynq-shm/include/lynq_shm.h b/src/lynq/lib/liblynq-shm/include/lynq_shm.h
new file mode 100755
index 0000000..bbac100
--- /dev/null
+++ b/src/lynq/lib/liblynq-shm/include/lynq_shm.h
@@ -0,0 +1,26 @@
+/**
+ * @file shm.h
+ * @author hq
+ * @brief
+ * @version 1.0
+ * @date 2022-12-16
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+#ifndef __LYNQ_SHM_H__
+#define __LYNQ_SHM_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+int ril_init_mem();
+void ril_deinit_mem();
+bool get_cur_shem_buffer_index(int size, int* level, int* index);
+bool get_shem_buffer_level(int size, int* level);
+char* get_shem_buffer(int level,int index);
+int get_max_shem_buffer_size();
+#ifdef __cplusplus
+}
+#endif
+#endif //#ifndef __TEST_SHARED_MEMORY_INCLUDE__
diff --git a/src/lynq/lib/liblynq-shm/lynq_shm.cpp b/src/lynq/lib/liblynq-shm/lynq_shm.cpp
new file mode 100755
index 0000000..e06ca96
--- /dev/null
+++ b/src/lynq/lib/liblynq-shm/lynq_shm.cpp
@@ -0,0 +1,194 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+//#include <binder/Parcel.h>
+//#include <sys/socket.h>
+#include <errno.h>
+#include <stdbool.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "lynq_shm.h"
+#include <sys/shm.h>
+#include "log/log.h"
+
+#undef LOG_TAG
+#define LOG_TAG "SHM"
+
+#define shm_key "shm_key"
+
+int shmid=-1;
+
+static int s_use_count=0;
+
+typedef struct{
+ int num_of_buffer;
+ int size_of_buffer;
+ int cur_index;
+}lynq_shm_type_config;
+
+typedef enum{
+ shm_buf_type_256,
+ shm_buf_type_1k,
+ shm_buf_type_max,
+}lynq_shm_buf_type;
+
+lynq_shm_type_config s_lynq_shm_config[shm_buf_type_max]={
+ {10,256,0},
+ {5,1024,0}
+};
+
+static void * s_ril_shm_buf=(void*) -1L;
+
+static pthread_mutex_t s_shm_mtx = PTHREAD_MUTEX_INITIALIZER;
+
+bool get_cur_shem_buffer_index(int size, int* level, int* index)
+{
+ pthread_mutex_lock(&s_shm_mtx);
+ for(int i=0;i<shm_buf_type_max;i++)
+ {
+ if(size<=s_lynq_shm_config[i].size_of_buffer)
+ {
+ (*level)=i;
+ (*index)=(s_lynq_shm_config[i].cur_index)%s_lynq_shm_config[i].num_of_buffer;
+ s_lynq_shm_config[i].cur_index++;
+ pthread_mutex_unlock(&s_shm_mtx);
+ return true;
+ }
+ }
+ pthread_mutex_unlock(&s_shm_mtx);
+ return false;
+}
+
+bool get_shem_buffer_level(int size, int* level)
+{
+ for(int i=0;i<shm_buf_type_max;i++)
+ {
+ if(size<=s_lynq_shm_config[i].size_of_buffer)
+ {
+ (*level)=i;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+char* get_shem_buffer(int level,int index)
+{
+ int offset=0;
+ for(int i=0;i<level;i++)
+ {
+ offset+=s_lynq_shm_config[i].num_of_buffer*s_lynq_shm_config[i].size_of_buffer;
+ }
+ offset+=s_lynq_shm_config[level].size_of_buffer*index;
+ return ((char*) s_ril_shm_buf)+offset;
+}
+
+int get_max_shem_buffer_size()
+{
+ return s_lynq_shm_config[shm_buf_type_max-1].size_of_buffer;
+}
+
+int get_total_shem_buffer_size()
+{
+ int total_size=0;
+ for(int i=0;i<shm_buf_type_max;i++)
+ {
+ total_size+=s_lynq_shm_config[i].num_of_buffer*s_lynq_shm_config[i].size_of_buffer;
+ }
+ return total_size;
+}
+
+static int create_shm_common(int size,int flags)
+{
+ RLOGD("create shared memory\n");
+
+// key_t key = ftok(shm_key, 's');
+ key_t key=0x123456;
+ if (key == -1)
+ {
+ RLOGE("ftok error.\n");
+ return -1;
+ }
+ RLOGD("key is 0x%x\n", key);
+
+ int shmid = shmget(key,size , flags);
+ if (shmid == -1)
+ {
+ RLOGE("shmget error.\n");
+ return -1;
+ }
+ RLOGD("shmid is %d\n", shmid);
+
+ return shmid;
+}
+
+int create_shm()
+{
+ shmid = create_shm_common(get_total_shem_buffer_size(),IPC_CREAT|0644);
+
+ if(shmid==-1)
+ {
+ return -1;
+ }
+ s_ril_shm_buf = shmat(shmid, NULL, 0);
+ if (s_ril_shm_buf == (void*) -1L)
+ {
+ RLOGE("shmat error.\n");
+ return -1;
+ }
+ return 0;
+}
+
+void remove_shm()
+{
+ if(shmid!=-1)
+ {
+ if (shmdt(s_ril_shm_buf) != 0)
+ {
+ RLOGE("shmdt error.\n");
+ }
+ shmid = -1;
+ }
+ s_ril_shm_buf = (void*) -1L;
+ return ;
+}
+
+int ril_init_mem()
+{
+ pthread_mutex_lock(&s_shm_mtx);
+ RLOGE("init begin, use count is %d.\n",s_use_count);
+ if(s_use_count==0)
+ {
+ if(create_shm()!=0)
+ {
+ RLOGE("init end, use count is %d.\n",s_use_count);
+ pthread_mutex_unlock(&s_shm_mtx);
+ return -1;
+ }
+ }
+ s_use_count++;
+ RLOGE("init end, use count is %d.\n",s_use_count);
+ pthread_mutex_unlock(&s_shm_mtx);
+ return 0;
+}
+
+void ril_deinit_mem()
+{
+ pthread_mutex_lock(&s_shm_mtx);
+
+ RLOGE("de-init begin, use count is %d.\n",s_use_count);
+ if(s_use_count==1)
+ {
+ remove_shm();
+ }
+
+ if(s_use_count>0)
+ {
+ s_use_count--;
+ }
+ RLOGE("de-init end, use count is %d.\n",s_use_count);
+ pthread_mutex_unlock(&s_shm_mtx);
+ return ;
+}
+
diff --git a/src/lynq/lib/liblynq-shm/makefile b/src/lynq/lib/liblynq-shm/makefile
new file mode 100755
index 0000000..806cc77
--- /dev/null
+++ b/src/lynq/lib/liblynq-shm/makefile
@@ -0,0 +1,62 @@
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+ -g -Os \
+ -flto \
+ -fPIC
+
+PWD := $(shell pwd)
+
+$(warning ################# lynq shm ROOT: $(ROOT),includedir:$(includedir), PWD :$(PWD))
+LOCAL_PATH = .
+
+LOCAL_C_INCLUDES = \
+ -I. \
+ -I$(LOCAL_PATH)/include \
+ -I$(ROOT)$(includedir) \
+
+LOCAL_LIBS := \
+ -L. \
+ -ldl \
+ -llog \
+# -lbinder \
+ -lpthread \
+# -lutils \
+# -lcutils \
+
+SOURCES = $(wildcard *.cpp)
+
+EXECUTABLE = liblynq-shm.so
+
+OBJECTS=$(SOURCES:.c=.o)
+all: $(EXECUTABLE)
+
+$(EXECUTABLE): $(OBJECTS)
+ $(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.c
+ $(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+build: $(EXECUTABLE)
+ $(warning ########## build $(EXECUTABLE) ##########)
+
+install:
+ $(warning ################# lynq shm EXECUTABLE: $(EXECUTABLE),base:$(base_libdir))
+ mkdir -p $(ROOT)$(base_libdir)/
+ install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+
+pack_rootfs:
+ $(warning ################# lynq shm PACK: $(PACK_INITRAMFS_TO),base:$(base_libdir))
+ mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)
+ mkdir -p $(PACK_TO)$(base_libdir)/
+ cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
+ $(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
+
+.PHONY: clean
+clean:
+ $(RM) $(OBJECTS) $(EXECUTABLE)
+
+
diff --git a/src/lynq/lib/liblynq-sms/LICENSE b/src/lynq/lib/liblynq-sms/LICENSE
index 77f59ed..605b7ea 100755
--- a/src/lynq/lib/liblynq-sms/LICENSE
+++ b/src/lynq/lib/liblynq-sms/LICENSE
@@ -1,31 +1,31 @@
Copyright Statement:
-This software/firmware and related documentation ("MediaTek Software") are
+This software/firmware and related documentation ("MobileTek Software") are
protected under relevant copyright laws. The information contained herein is
-confidential and proprietary to MediaTek Inc. and/or its licensors. Without
-the prior written permission of MediaTek inc. and/or its licensors, any
-reproduction, modification, use or disclosure of MediaTek Software, and
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
information contained herein, in whole or in part, shall be strictly
prohibited.
-MediaTek Inc. (C) 2015. All rights reserved.
+MobileTek Inc. (C) 2015. All rights reserved.
BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
-THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
-RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
-ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
-NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
-INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
-OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
-SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
-STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
-ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
-RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
-MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
-CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/lib/liblynq-sms/include/libsms/lynq_sms.h b/src/lynq/lib/liblynq-sms/include/libsms/lynq_sms.h
index 64547c9..0d346a6 100755
--- a/src/lynq/lib/liblynq-sms/include/libsms/lynq_sms.h
+++ b/src/lynq/lib/liblynq-sms/include/libsms/lynq_sms.h
@@ -1,9 +1,9 @@
-#ifndef YLNQ_SMS_H
-#define YLNQ_SMS_H 1
-#include <sys/types.h>
+#ifndef LYNQ_SMS_H
+#define LYNQ_SMS_H 1
#ifdef __cplusplus
extern "C" {
#endif
+
#define MIN_MSM_PARAM_NUM 4
#define MIN_IMS_MSM_PARAM_NUM 6
#define MIN_WRITE_MSM_PARAM_NUM 5
@@ -12,6 +12,7 @@
#define STORAGE_SMS_MAX_SIZE 128
#define SMSC_MAX_LEN 22
#define SMS_NUM_MAX 255
+
int lynq_sms_init(int uToken);
int lynq_sms_deinit(void);
int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg, int msglen);
@@ -21,9 +22,6 @@
int lynq_list_sms(char index_list[SMS_NUM_MAX]);
int lynq_delete_sms(int index);
int lynq_wait_receive_new_sms(int *handle);
-
-
-
#ifdef __cplusplus
}
#endif
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_common.h b/src/lynq/lib/liblynq-sms/lynq_module_common.h
new file mode 100755
index 0000000..590971a
--- /dev/null
+++ b/src/lynq/lib/liblynq-sms/lynq_module_common.h
@@ -0,0 +1,75 @@
+#ifndef LYNQ_MODULE_COMMON_H
+#define LYNQ_MODULE_COMMON_H
+
+#define RESULT_OK (0)
+#define RESULT_ERROR (-1)
+
+/*the same with lynq_interface.h begin*/
+#define LYNQ_REQUEST_VENDOR_BASE 8000
+#define LYNQ_URC_VENDOR_BASE 9000
+#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
+#define LYNQ_URC_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+1)
+#define LYNQ_URC_DATA_STATUS_IND (LYNQ_URC_VENDOR_BASE+2)
+#define LYNQ_URC_DATA_CALL_STATUS_IND (LYNQ_URC_VENDOR_BASE+3)
+#define LYNQ_AUTO_ANSWER_CALL (LYNQ_REQUEST_VENDOR_BASE +2)
+#define LYNQ_REQUEST_SET_DTMF_VOLUME (LYNQ_REQUEST_VENDOR_BASE +3)
+#define LYNQ_URC_MODIFY_APNDB (LYNQ_URC_VENDOR_BASE+4)
+#define LYNQ_URC_RESET_APNDB (LYNQ_URC_VENDOR_BASE+5)
+
+
+#define LYNQ_REQUEST_WRITE_SMS_TO_MEMORY (LYNQ_REQUEST_VENDOR_BASE +4)
+#define LYNQ_REQUEST_READ_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 5)
+#define LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 6)
+#define LYNQ_REQUEST_LIST_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 7)
+#define LYNQ_REQUEST_SET_DEFAULT_SIM_ALL (LYNQ_REQUEST_VENDOR_BASE + 8)
+
+#define LYNQ_REQUEST_SET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +9)
+#define LYNQ_REQUEST_GET_SPEECH_VOLUME (LYNQ_REQUEST_VENDOR_BASE +10)
+#define LYNQ_REQUEST_RECORD (LYNQ_REQUEST_VENDOR_BASE +11)
+#define LYNQ_REQUEST_OOS_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +12)
+#define LYNQ_REQUEST_OOS_DEEP_SLEEP_RECOVER_TIMER_INTERVAL (LYNQ_REQUEST_VENDOR_BASE +13)
+#define LYNQ_REQUEST_CHANGE_SCREEN_STATE (LYNQ_REQUEST_VENDOR_BASE + 14)/*jb.qi add for two sim suspend 2022/9/19*/
+#define LYNQ_REQUEST_CHANGE_RADIO (LYNQ_REQUEST_VENDOR_BASE + 15)
+/*the same with lynq_interface.h end*/
+
+typedef enum{
+ /*base abnormal*/
+ LYNQ_E_PARAMETER_ANONALY=7000,
+ LYNQ_E_SEND_REQUEST_FAIL=7001,
+ LYNQ_E_GET_HEAD_ERROR=7002,
+ LYNQ_E_INNER_ERROR=7100,
+ LYNQ_E_MALLOC_ERROR=7101,
+ /**/
+ LYNQ_E_CARDSTATE_ERROR=8000,
+ /* The voice service state is out of service*/
+ LYNQ_E_STATE_OUT_OF_SERVICE=8001,
+ /* The voice service state is EMERGENCY_ONLY*/
+ LYNQ_E_STATE_EMERGENCY_ONLY=8002,
+ /* The radio power is power off*/
+ LYNQ_E_STATE_POWER_OFF=8003,
+ LYNQ_E_TIME_OUT=8004,
+ /*create or open sms DB fail */
+ LYNQ_E_SMS_DB_FAIL=8005,
+ /*Failed to execute sql statement*/
+ LYNQ_E_SMS_SQL_FAIL = 8006,
+ LYNQ_E_SMS_NOT_FIND = 8007,
+ /* The logic conflict*/
+ LYNQ_E_CONFLICT=9000,
+ /*Null anomaly*/
+ LYNQ_E_NULL_ANONALY=9001,
+ /*Invalid id anomaly*/
+ LYNQ_E_INVALID_ID_ANONALY=9002,
+#ifdef ECALL_SUPPORT
+ LYNQ_E_ECALL_BEING_RUNNING =9003,
+ LYNQ_E_ECALL_MSD_LENGTH_ERROR =9004,
+ LYNQ_E_ECALL_DAILING_NO_ANSWER =9005,
+#endif
+}LYNQ_E;
+
+#define MODULE_CLOSED (0)
+#define MODULE_SWITCHING (1)
+#define MODULE_RUNNING (2)
+
+extern int g_module_init_flag;
+
+#endif
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
new file mode 100755
index 0000000..4b6f020
--- /dev/null
+++ b/src/lynq/lib/liblynq-sms/lynq_module_socket.cpp
@@ -0,0 +1,1041 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <unistd.h>
+#include <binder/Parcel.h>
+#include <log/log.h>
+#include <cutils/jstring.h>
+#include <pthread.h>
+#include <list>
+#include <vendor-ril/telephony/ril.h>
+#include <vendor-ril/telephony/mtk_ril_sp.h>
+#include "lynq_sms.h"
+#include "lynq_module_common.h"
+#include "lynq_module_socket.h"
+#include "liblog/lynq_deflog.h"
+#include "lynq_shm.h"
+
+#define LYNQ_SERVICE_PORT 8088
+#define LYNQ_ADDRESS "127.0.0.1"
+#define LYNQ_URC_SERVICE_PORT 8086
+#define LYNQ_URC_ADDRESS "0.0.0.0"
+#define LYNQ_REQUEST_PARAM_BUF 8192
+#define LYNQ_REC_BUF 8192
+
+#define USER_LOG_TAG "LYNQ_NETWORK"
+
+typedef struct{
+ int uToken;
+ int request;
+ int paramLen;
+ char param[LYNQ_REQUEST_PARAM_BUF];
+}lynq_client_t;
+
+typedef struct{
+ int resp_type;
+ int token;
+ int request;
+ int slot_id;
+ int error;
+}lynq_resp_t;
+
+typedef struct{
+ int resp_type;
+ int urcid;
+}lynq_head_t;
+
+lynq_client_t client_t;
+lynq_resp_t response;
+
+int module_len_rc_addr_serv;
+int module_len_urc_addr_serv;
+struct sockaddr_in module_rc_addr_serv;
+struct sockaddr_in module_urc_addr_serv;
+static int module_rc_sock_fd = -1;
+static int module_urc_sock_fd = -1;
+int module_urc_status = 1;
+int module_rc_status = 1;
+pthread_t module_urc_tid = -1;
+pthread_t module_rc_tid = -1;
+static pthread_mutex_t s_urc_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/*hq add for set waiting time 2022/09/13 begin*/
+static pthread_mutex_t s_sendto_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_RecvMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_WaitRecvMsgCond = PTHREAD_COND_INITIALIZER;
+#define BLOCK_RECV_MSG_LOCK() pthread_mutex_lock(&s_RecvMsgBlockMutex)
+#define BLOCK_RECV_MSG_UNLOCK() pthread_mutex_unlock(&s_RecvMsgBlockMutex)
+#define BLOCK_WAIT_RECV_MSG_TIME_OUT(a) pthread_cond_timedwait(&s_WaitRecvMsgCond, &s_RecvMsgBlockMutex,(a))
+#define BLOCK_WAKEUP_RECV_MSG() pthread_cond_broadcast(&s_WaitRecvMsgCond)
+static std::list<Parcel*> s_recv_parcel_list;
+const int waitResponse(int token,int time_out);
+/*hq add for set waiting time 2022/09/13 end*/
+
+/*hq add for urc process asynchronous 2022/12/26 begin*/
+static pthread_mutex_t s_ProcessUrcMsgBlockMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_WaitProcessUrcMsgCond = PTHREAD_COND_INITIALIZER;
+
+#define BLOCK_PROCESS_URC_MSG_INIT() pthread_mutex_init(&s_ProcessUrcMsgBlockMutex,NULL)
+#define BLOCK_PROCESS_URC_MSG_LOCK() pthread_mutex_lock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_PROCESS_URC_MSG_UNLOCK() pthread_mutex_unlock(&s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAIT_PROCESS_URC_MSG() pthread_cond_wait(&s_WaitProcessUrcMsgCond, &s_ProcessUrcMsgBlockMutex)
+#define BLOCK_WAKEUP_PROCESS_URC_MSG() pthread_cond_broadcast(&s_WaitProcessUrcMsgCond)
+static std::list<Parcel*> s_recv_urc_parcel_list;
+void *thread_urc_process(void *p);
+pthread_t module_urc_process_tid = -1;
+int module_urc_process_status = 1;
+/*hq add for urc process asynchronous 2022/12/26 end*/
+
+int g_module_Global_uToken = 0;
+int g_wait_time=5;
+
+/*inner test*/
+static int s_inner_test=0;
+
+/**@brief just for inner test
+* @param test_mode [IN]: test mode
+* 0:success
+* other:failure
+*/
+void lynq_set_test_mode(const int test_mode)
+{
+ if(test_mode<0)
+ {
+ g_wait_time = -test_mode;
+ }
+ else if(test_mode==9999)
+ {
+ LYERRLOG("%s inner test para %d %d",__FUNCTION__,s_inner_test,g_wait_time);
+ }
+ else
+ {
+ s_inner_test = test_mode;
+ }
+}
+
+void cleanup_RecvMsgBlock_mutex(void *arg)
+{
+ BLOCK_RECV_MSG_UNLOCK();
+}
+
+/**@brief wait response with expected token and write msg to parcel in some time
+* @param p [IN]: pointer the parcel
+* @param token [IN]: the expected token for the response msg
+* @param time_out [IN]: timeout.
+* @return
+* 0:success
+* other:failure
+*/
+const int waitResponse(Parcel*& p, int token,int time_out)
+{
+ int waitToken = token;
+ int wakeup_token=-1;
+ int resp_type;
+ struct timeval now;
+ struct timespec timeout;
+ int ret;
+ std::list<Parcel*>::iterator iter;
+ int cnt=0;
+
+ gettimeofday(&now,NULL);
+ timeout.tv_sec = now.tv_sec+time_out; //timeout is 1min
+ timeout.tv_nsec = now.tv_usec*1000;
+
+ LYINFLOG("%s wait token is %d, wait time is %d",__FUNCTION__,waitToken,time_out);
+
+ BLOCK_RECV_MSG_LOCK();
+ pthread_cleanup_push(cleanup_RecvMsgBlock_mutex, NULL); // thread cleanup handler
+ while(module_rc_status){
+ cnt++;
+ for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)
+ {
+ (*iter)->setDataPosition(0);
+ (*iter)->readInt32(&resp_type);
+ (*iter)->readInt32(&wakeup_token);
+ if(wakeup_token==waitToken)
+ {
+ LYINFLOG("%s get waitToken",__FUNCTION__);
+ p=(*iter);
+ p->setDataPosition(0);
+ s_recv_parcel_list.erase(iter);
+ goto waitResponse_end;
+ }
+ }
+ LYINFLOG("%s no wait Token in msg list, list size is %d",__FUNCTION__,s_recv_parcel_list.size());
+ ret=BLOCK_WAIT_RECV_MSG_TIME_OUT(&timeout);
+ if(ret!=0)
+ {
+ LYERRLOG("%s no expected token %d after %d second",__FUNCTION__,waitToken,time_out);
+ break;
+ }
+ }
+waitResponse_end:
+ LYINFLOG("%s wait token is %d wakeup_token is %d, cnt is %d",__FUNCTION__,waitToken,wakeup_token,cnt);
+ pthread_cleanup_pop(0);
+ BLOCK_RECV_MSG_UNLOCK();
+ return wakeup_token==waitToken ? 0:LYNQ_E_TIME_OUT;
+}
+
+/**@brief print solicied response msg's head information
+* @param head [IN]: head information
+* @return none
+*/
+void PrintHeader(lynq_resp_t& head)
+{
+ LYINFLOG("resp_type=%d,token=%d,request=%d,slot_id=%d,error_code=%d",head.resp_type,head.token,head.request,head.slot_id,head.error);
+}
+
+/**@brief get solicied response msg's head
+* @param head [OUT]: head information
+* @return
+* 0:success
+* other:failure
+*/
+int GetHeader(Parcel* &p, lynq_resp_t& head)
+{
+ LYINFLOG("get header");
+ if(p->dataAvail() > 0)
+ {
+ p->readInt32(&(head.resp_type));
+ p->readInt32(&(head.token));
+ p->readInt32(&(head.request));
+ p->readInt32(&(head.slot_id));
+ p->readInt32(&(head.error));
+ PrintHeader(head);
+ return RESULT_OK;
+ }
+ else
+ {
+ return RESULT_ERROR;
+ }
+}
+
+/**@brief send msg to service and get response from service
+* @param request_id [IN]: request id
+* @param time_out [IN]: wait time uplimit
+* @param p [IN]: point to response msg's parcel
+* @param argc [IN]: how many parameters in parameter string
+* @param format [IN]: parameter string's format
+* @param ... [IN]: the specific parameter
+* @return
+* 0:success
+* other:failure
+*/
+int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...)
+{
+ lynq_client_t client;
+ int ret;
+ int send_num;
+
+ client.uToken = g_module_Global_uToken;
+ g_module_Global_uToken=(g_module_Global_uToken+1)%10000;/*0-10000*/
+ client.request = request_id;
+ client.paramLen = argc;
+ bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+ if(argc!=0)
+ {
+ va_list args;
+ va_start(args, format);
+ vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);
+ va_end(args);
+ }
+ LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
+ pthread_mutex_lock(&s_sendto_mutex);
+ if(s_inner_test==1)
+ {
+ send_num = 1;
+ }
+ else
+ {
+ send_num = sendto(module_rc_sock_fd,&client,sizeof(client),0,(struct sockaddr *)&module_rc_addr_serv,module_len_rc_addr_serv);
+ }
+ if(s_inner_test>=1000)
+ {
+ time_out = s_inner_test-1000;
+ }
+ pthread_mutex_unlock(&s_sendto_mutex);
+
+ if(send_num <= 0)
+ {
+ LYERRLOG("send request fail, send num is %d", send_num);
+ return LYNQ_E_SEND_REQUEST_FAIL;
+ }
+ ret = waitResponse(p, client.uToken,time_out);
+
+ if(ret==0)
+ {
+ lynq_resp_t head;
+ ret=GetHeader(p,head);
+ if(ret!=0)
+ {
+ LYERRLOG("%s %d get head error %d",__FUNCTION__,client.uToken,ret);
+ delete p;
+ return LYNQ_E_GET_HEAD_ERROR;
+ }
+ if(head.error!=0)
+ {
+ LYERRLOG("%s %d mdm return head error %d",__FUNCTION__,client.uToken,head.error);
+ delete p;
+ return head.error;
+ }
+ LYERRLOG("%s %d suc",__FUNCTION__,client.uToken);
+ return RESULT_OK;
+ }
+
+ LYERRLOG("%s %d fail, ret is %d",__FUNCTION__,client.uToken,ret);
+
+ return ret;
+}
+
+/*hq add for urc broadcase optimisson 2023/01/03 begin*/
+#define SHM_BUFFER_INDEX_OFFSET 1
+#define SHM_BUFFER_SIZE_OFFSET 16
+#define SHM_BUFFER_INDEX_MASK 0x0000007F
+#define SHM_BUFFER_SIZE_MASK 0x0000FFFF
+
+bool urc_data_is_in_shm_data(int responseType,int& level, int& index, int& size)
+{
+ int shm_index=((responseType>>SHM_BUFFER_INDEX_OFFSET)&SHM_BUFFER_INDEX_MASK);
+ if (shm_index>0)
+ {
+ index=shm_index-1;
+ size=((responseType>>SHM_BUFFER_SIZE_OFFSET)&SHM_BUFFER_SIZE_MASK);
+ if(size>=sizeof(int32_t)*3 && get_shem_buffer_level(size,&level))
+ {
+ LYINFLOG("urc_data_is_in_shm_data level is %d, index is %d size is %d",level,index,size);
+ return true;
+ }
+ }
+ LYINFLOG("urc_data_is_in_shm_data return false, responseType is %d",responseType);
+ return false;
+}
+/*hq add for urc broadcase optimisson 2023/01/03 end*/
+
+void *thread_urc_recv(void *p)
+{
+ Parcel *urc_p =NULL;
+ char urc_data[LYNQ_REC_BUF];
+ int res = 0;
+ lynq_head_t* phead;
+
+ LYINFLOG("urc recv thread is running");
+ while(module_urc_status)
+ {
+ bzero(urc_data,LYNQ_REC_BUF);
+ res = recvfrom(module_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&module_urc_addr_serv,(socklen_t*)&module_len_urc_addr_serv);
+ if(res<sizeof(int32_t)*2)
+ {
+ LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
+ continue;
+ }
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ phead=(lynq_head_t*) urc_data;
+ if(is_support_urc(phead->urcid)==false)
+ {
+ continue;
+ }
+ urc_p = new Parcel();
+ if(urc_p == NULL)
+ {
+ LYERRLOG("new parcel failure!!!");
+ continue;
+ }
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ int level,index,size;
+ if(urc_data_is_in_shm_data(phead->resp_type,level,index,size))
+ {
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d,use share memory\n", __FUNCTION__, __LINE__);
+ urc_p->setData((uint8_t *)get_shem_buffer(level,index),size); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else if(res>=sizeof(int32_t)*3)
+ {
+ urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);
+ }
+ else
+ {
+ LYERRLOG("res %d error!!!", res);
+ delete urc_p;
+ urc_p = NULL;
+ continue;
+ }
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ s_recv_urc_parcel_list.push_back(urc_p);
+ BLOCK_WAKEUP_PROCESS_URC_MSG();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ }
+ else
+ {
+ delete urc_p;
+ urc_p = NULL;
+ }
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ }
+ LYINFLOG("urc recv thread ended");
+ return NULL;
+}
+
+void cleanup_urc_process_mutex(void *arg)
+{
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+}
+
+void *thread_urc_process(void *p)
+{
+ Parcel *urc_p =NULL;
+ std::list<Parcel*>::iterator iter;
+
+ LYINFLOG("urc process thread is running");
+ pthread_cleanup_push(cleanup_urc_process_mutex, NULL); // thread cleanup handler
+ while(module_urc_process_status)
+ {
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ while(s_recv_urc_parcel_list.empty())
+ {
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ BLOCK_WAIT_PROCESS_URC_MSG();
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ }
+ iter=s_recv_urc_parcel_list.begin();
+ urc_p=(*iter);
+ s_recv_urc_parcel_list.erase(iter);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ urc_p->setDataPosition(0);
+ if(urc_p->dataAvail()>0)
+ {
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ pthread_mutex_lock(&s_urc_mutex);
+ urc_msg_process(urc_p);
+ pthread_mutex_unlock(&s_urc_mutex);
+ LYINFLOG("__FUNCTION__ %s __LINE__ %d\n", __FUNCTION__, __LINE__);
+ }
+ delete urc_p;
+ urc_p = NULL;
+ }
+ pthread_cleanup_pop(0);
+ LYINFLOG("urc process thread ended");
+ return NULL;
+}
+
+void lynq_close_urc_rev_thread()
+{
+ int ret;
+
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when recv from
+ module_urc_status = 0;
+ if(module_urc_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_tid);
+ LYINFLOG("pthread cancel urc rev ret = %d",ret);
+ }
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_tid != -1)
+ {
+ ret = pthread_join(module_urc_tid,NULL);
+ LYINFLOG("pthread join urc tid ret = %d",ret);
+ module_urc_tid =-1;
+ }
+}
+
+void lynq_close_urc_process_thread()
+{
+ int ret;
+ BLOCK_PROCESS_URC_MSG_LOCK(); //just cancel urc process tid when not process urc msg in list
+ pthread_mutex_lock(&s_urc_mutex); //just cancel urc process tid when not process urg msg avoid mutual lock for tid may call pthread_cond_wait
+ module_urc_process_status = 0;
+ if(module_urc_process_tid!=-1)
+ {
+ ret = pthread_cancel(module_urc_process_tid);
+ LYINFLOG("pthread cancel urc process ret = %d",ret);
+ }
+ pthread_mutex_unlock(&s_urc_mutex);
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+ if(module_urc_process_tid != -1)
+ {
+ ret = pthread_join(module_urc_process_tid,NULL);
+ LYINFLOG("pthread join urc process tid ret = %d",ret);
+ module_urc_process_tid =-1;
+ }
+}
+
+int lynq_setup_urc_socket()
+{
+ int on = 1;
+ int ret = 0;
+ module_len_urc_addr_serv = sizeof(sockaddr_in);
+ module_urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (module_urc_sock_fd <0){
+ LYERRLOG("urc socket error");
+ return RESULT_ERROR;
+ }
+ module_urc_addr_serv.sin_family = AF_INET;
+ module_urc_addr_serv.sin_port = htons(LYNQ_URC_SERVICE_PORT);
+ module_urc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_URC_ADDRESS);
+ /* Set socket to allow reuse of address and port, SO_REUSEADDR value is 2*/
+ ret = setsockopt(module_urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof on);
+ if(ret <0)
+ {
+ LYERRLOG("urc socket set error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ ret = bind(module_urc_sock_fd ,(struct sockaddr*)&module_urc_addr_serv, sizeof(module_urc_addr_serv));
+ if(ret <0)
+ {
+ LYERRLOG("urc socket bind error");
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ return RESULT_ERROR;
+ }
+ return RESULT_OK;
+}
+
+void lynq_close_urc_socket()
+{
+ if (module_urc_sock_fd >= 0)
+ {
+ close(module_urc_sock_fd);
+ module_urc_sock_fd =-1;
+ }
+}
+
+int lynq_start_all_urc_socket_thread()
+{
+
+ if(ril_init_mem()!=0)
+ {
+ LYERRLOG("ril_init_mem fail");
+ return RESULT_ERROR;
+ }
+
+ int ret= lynq_setup_urc_socket();
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("sms lynq_setup_urc_socket fail");
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ BLOCK_PROCESS_URC_MSG_INIT();
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ pthread_mutex_init(&s_urc_mutex, NULL);
+
+ module_urc_status = 1;
+ // pthread_attr_init(&attr);
+ // pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ ret = pthread_create(&module_urc_tid,/*&attr*/NULL,thread_urc_recv,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc recv pthread create error");
+ module_urc_status = 0;
+ lynq_close_urc_socket();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ module_urc_process_status = 1;
+ ret = pthread_create(&module_urc_process_tid,/*&attr*/NULL,thread_urc_process,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("urc process pthread create error");
+ module_urc_process_status = 0;
+ lynq_close_urc_socket();
+ lynq_close_urc_rev_thread();
+ ril_deinit_mem();
+ return RESULT_ERROR;
+ }
+
+ LYINFLOG("urc start success");
+
+ return RESULT_OK;
+}
+
+void lynq_close_all_urc_socket_thread()
+{
+
+ lynq_close_urc_rev_thread();
+ lynq_close_urc_socket();
+ lynq_close_urc_process_thread();
+
+ BLOCK_PROCESS_URC_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_urc_parcel_list.begin();iter!=s_recv_urc_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_urc_parcel_list.clear();
+ BLOCK_PROCESS_URC_MSG_UNLOCK();
+
+ ril_deinit_mem();
+}
+
+bool is_support_request(int req_id)
+{
+ switch(req_id)
+ {
+ case RIL_REQUEST_SEND_SMS:
+ case RIL_REQUEST_SET_SMSC_ADDRESS:
+ case RIL_REQUEST_GET_SMSC_ADDRESS:
+ case LYNQ_REQUEST_READ_SMS_FROM_MEMORY:
+ case LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY:
+ case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread
+* @param p [IN]: no meaning
+* @return
+* always null
+*/
+void *thread_rc_recv(void *p)
+{
+ Parcel* rc_p;
+ std::list<Parcel*>::iterator iter;
+ int resp_type = -1;
+ char rc_data[LYNQ_REC_BUF];
+ int rc_len;
+ int null_cnt=0;
+ int wakeup_token;
+ int resquest;
+ LYINFLOG("rc thread is running");
+ while(module_rc_status)
+ {
+ bzero(rc_data,LYNQ_REC_BUF);
+ while(true)
+ {
+ rc_len = recvfrom(module_rc_sock_fd,rc_data,sizeof(rc_data),0,(struct sockaddr *)&module_rc_addr_serv,(socklen_t *)&module_len_rc_addr_serv);
+ if(rc_len<sizeof(int32_t)*2)
+ {
+ LYERRLOG("%s recv len %d less %d",__FUNCTION__, rc_len,sizeof(int)*2);
+ continue;
+ }
+ rc_p= new Parcel;
+ if(rc_p==NULL)
+ {
+ null_cnt++;
+ LYERRLOG("%s rc_p is NULL, cnt is %d",__FUNCTION__, null_cnt);
+ if(null_cnt>20)
+ {
+ goto rc_recv_end;
+ }
+ continue;
+ }
+ else
+ {
+ null_cnt=0;
+ }
+
+ rc_p->setData((uint8_t *)rc_data,rc_len); // p.setData((uint8_t *) buffer, buflen);
+ rc_p->setDataPosition(0);
+ if(rc_p->dataAvail()>0)
+ {
+ rc_p->readInt32(&resp_type);
+ rc_p->readInt32(&wakeup_token);
+ rc_p->readInt32(&resquest);
+ if(!is_support_request(resquest))
+ {
+ continue;
+ }
+ BLOCK_RECV_MSG_LOCK();
+ s_recv_parcel_list.push_back(rc_p);
+ LYINFLOG("%s wakeup token is %d, list size is %d!",__FUNCTION__,wakeup_token,s_recv_parcel_list.size());
+ if(s_recv_parcel_list.size()>20) //max 20
+ {
+ iter=s_recv_parcel_list.begin();
+ (*iter)->setDataPosition(0);
+ (*iter)->readInt32(&resp_type);
+ (*iter)->readInt32(&wakeup_token);
+ delete (*(s_recv_parcel_list.begin()));
+ LYERRLOG("%s wakeup token %d is deleted!",__FUNCTION__,wakeup_token);
+ s_recv_parcel_list.erase(iter);
+ }
+ BLOCK_WAKEUP_RECV_MSG();
+ BLOCK_RECV_MSG_UNLOCK();
+ break;
+ }
+ else
+ {
+ LYERRLOG("%s rc_p data Avail %d not greater than 0",__FUNCTION__, rc_p->dataAvail());
+ delete rc_p;
+ }
+ }
+ }
+
+rc_recv_end:
+ LYINFLOG("rc thread ended");
+ return NULL;
+}
+
+int lynq_start_all_rc_socket_thread()
+{
+ module_rc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if(module_rc_sock_fd < 0)
+ {
+ LYERRLOG("socket open error");
+ return -1;
+ }
+
+ LYINFLOG("module_rc_sock_fd = %d",module_rc_sock_fd);
+
+ memset(&module_rc_addr_serv, 0, sizeof(module_rc_addr_serv));
+ module_rc_addr_serv.sin_family = AF_INET;
+ module_rc_addr_serv.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
+ module_rc_addr_serv.sin_port = htons(LYNQ_SERVICE_PORT);
+ module_len_rc_addr_serv = sizeof(module_rc_addr_serv);
+
+ BLOCK_RECV_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_parcel_list.clear();
+ BLOCK_RECV_MSG_UNLOCK();
+
+// pthread_attr_t attr;
+ int ret;
+
+ pthread_mutex_init(&s_sendto_mutex, NULL);
+ pthread_mutex_init(&s_RecvMsgBlockMutex, NULL);
+
+ module_rc_status = 1;
+// pthread_attr_init(&attr);
+// pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ ret = pthread_create(&module_rc_tid,/*&attr*/NULL,thread_rc_recv,NULL);
+ if(ret <0)
+ {
+ LYERRLOG("rc pthread create error");
+ module_rc_status =0;
+ close(module_rc_sock_fd);
+ module_rc_sock_fd =-1;
+ return ret;
+ }
+
+ LYINFLOG("rc start success");
+
+ return RESULT_OK;
+}
+
+void lynq_close_all_rc_socket_thread()
+{
+ int ret;
+ BLOCK_RECV_MSG_LOCK();
+ module_rc_status = 0;
+ BLOCK_WAKEUP_RECV_MSG();
+ if(module_rc_tid != -1)
+ {
+ ret = pthread_cancel(module_rc_tid);
+ LYINFLOG("pthread cancel rc ret = %d",ret);
+ }
+ BLOCK_RECV_MSG_UNLOCK();
+ if(module_rc_tid != -1)
+ {
+ ret = pthread_join(module_rc_tid,NULL);
+ module_rc_tid =-1;
+ LYINFLOG("pthread join rc tid ret = %d",ret);
+
+ }
+
+ if (module_rc_sock_fd > 0)
+ {
+ close(module_rc_sock_fd);
+ module_rc_sock_fd =-1;
+ }
+
+ BLOCK_RECV_MSG_LOCK();
+ std::list<Parcel*>::iterator iter;
+ for(iter=s_recv_parcel_list.begin();iter!=s_recv_parcel_list.end();++iter)
+ {
+ delete (*iter);
+ }
+ s_recv_parcel_list.clear();
+ BLOCK_RECV_MSG_UNLOCK();
+}
+
+const char * requestToString(int request)
+{
+ /*
+ cat libs/telephony/ril_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),[^,]+,([^}]+).+/case RIL_\1: return "\1";/'
+
+
+ cat libs/telephony/ril_unsol_commands.h \
+ | egrep "^ *{RIL_" \
+ | sed -re 's/\{RIL_([^,]+),([^}]+).+/case RIL_\1: return "\1";/'
+
+ */
+ switch(request) {
+ case RIL_REQUEST_GET_SIM_STATUS: return "GET_SIM_STATUS";
+ case RIL_REQUEST_ENTER_SIM_PIN: return "ENTER_SIM_PIN";
+ case RIL_REQUEST_ENTER_SIM_PUK: return "ENTER_SIM_PUK";
+ case RIL_REQUEST_ENTER_SIM_PIN2: return "ENTER_SIM_PIN2";
+ case RIL_REQUEST_ENTER_SIM_PUK2: return "ENTER_SIM_PUK2";
+ case RIL_REQUEST_CHANGE_SIM_PIN: return "CHANGE_SIM_PIN";
+ case RIL_REQUEST_CHANGE_SIM_PIN2: return "CHANGE_SIM_PIN2";
+ case RIL_REQUEST_ENTER_NETWORK_DEPERSONALIZATION: return "ENTER_NETWORK_DEPERSONALIZATION";
+ case RIL_REQUEST_GET_CURRENT_CALLS: return "GET_CURRENT_CALLS";
+ case RIL_REQUEST_DIAL: return "DIAL";
+ case RIL_REQUEST_GET_IMSI: return "GET_IMSI";
+ case RIL_REQUEST_HANGUP: return "HANGUP";
+ case RIL_REQUEST_HANGUP_WAITING_OR_BACKGROUND: return "HANGUP_WAITING_OR_BACKGROUND";
+ case RIL_REQUEST_HANGUP_FOREGROUND_RESUME_BACKGROUND: return "HANGUP_FOREGROUND_RESUME_BACKGROUND";
+ case RIL_REQUEST_SWITCH_WAITING_OR_HOLDING_AND_ACTIVE: return "SWITCH_WAITING_OR_HOLDING_AND_ACTIVE";
+ case RIL_REQUEST_CONFERENCE: return "CONFERENCE";
+ case RIL_REQUEST_UDUB: return "UDUB";
+ case RIL_REQUEST_LAST_CALL_FAIL_CAUSE: return "LAST_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_SIGNAL_STRENGTH: return "SIGNAL_STRENGTH";
+ case RIL_REQUEST_VOICE_REGISTRATION_STATE: return "VOICE_REGISTRATION_STATE";
+ case RIL_REQUEST_DATA_REGISTRATION_STATE: return "DATA_REGISTRATION_STATE";
+ case RIL_REQUEST_OPERATOR: return "OPERATOR";
+ case RIL_REQUEST_RADIO_POWER: return "RADIO_POWER";
+ case RIL_REQUEST_DTMF: return "DTMF";
+ case RIL_REQUEST_SEND_SMS: return "SEND_SMS";
+ case RIL_REQUEST_SEND_SMS_EXPECT_MORE: return "SEND_SMS_EXPECT_MORE";
+ case RIL_REQUEST_SETUP_DATA_CALL: return "SETUP_DATA_CALL";
+ case RIL_REQUEST_SIM_IO: return "SIM_IO";
+ case RIL_REQUEST_SEND_USSD: return "SEND_USSD";
+ case RIL_REQUEST_CANCEL_USSD: return "CANCEL_USSD";
+ case RIL_REQUEST_GET_CLIR: return "GET_CLIR";
+ case RIL_REQUEST_SET_CLIR: return "SET_CLIR";
+ case RIL_REQUEST_QUERY_CALL_FORWARD_STATUS: return "QUERY_CALL_FORWARD_STATUS";
+ case RIL_REQUEST_SET_CALL_FORWARD: return "SET_CALL_FORWARD";
+ case RIL_REQUEST_QUERY_CALL_WAITING: return "QUERY_CALL_WAITING";
+ case RIL_REQUEST_SET_CALL_WAITING: return "SET_CALL_WAITING";
+ case RIL_REQUEST_SMS_ACKNOWLEDGE: return "SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GET_IMEI: return "GET_IMEI";
+ case RIL_REQUEST_GET_IMEISV: return "GET_IMEISV";
+ case RIL_REQUEST_ANSWER: return "ANSWER";
+ case RIL_REQUEST_DEACTIVATE_DATA_CALL: return "DEACTIVATE_DATA_CALL";
+ case RIL_REQUEST_QUERY_FACILITY_LOCK: return "QUERY_FACILITY_LOCK";
+ case RIL_REQUEST_SET_FACILITY_LOCK: return "SET_FACILITY_LOCK";
+ case RIL_REQUEST_CHANGE_BARRING_PASSWORD: return "CHANGE_BARRING_PASSWORD";
+ case RIL_REQUEST_QUERY_NETWORK_SELECTION_MODE: return "QUERY_NETWORK_SELECTION_MODE";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_AUTOMATIC: return "SET_NETWORK_SELECTION_AUTOMATIC";
+ case RIL_REQUEST_SET_NETWORK_SELECTION_MANUAL: return "SET_NETWORK_SELECTION_MANUAL";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS : return "QUERY_AVAILABLE_NETWORKS ";
+ case RIL_REQUEST_DTMF_START: return "DTMF_START";
+ case RIL_REQUEST_DTMF_STOP: return "DTMF_STOP";
+ case RIL_REQUEST_BASEBAND_VERSION: return "BASEBAND_VERSION";
+ case RIL_REQUEST_SEPARATE_CONNECTION: return "SEPARATE_CONNECTION";
+ case RIL_REQUEST_SET_PREFERRED_NETWORK_TYPE: return "SET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_PREFERRED_NETWORK_TYPE: return "GET_PREFERRED_NETWORK_TYPE";
+ case RIL_REQUEST_GET_NEIGHBORING_CELL_IDS: return "GET_NEIGHBORING_CELL_IDS";
+ case RIL_REQUEST_SET_MUTE: return "SET_MUTE";
+ case RIL_REQUEST_GET_MUTE: return "GET_MUTE";
+ case RIL_REQUEST_QUERY_CLIP: return "QUERY_CLIP";
+ case RIL_REQUEST_LAST_DATA_CALL_FAIL_CAUSE: return "LAST_DATA_CALL_FAIL_CAUSE";
+ case RIL_REQUEST_DATA_CALL_LIST: return "DATA_CALL_LIST";
+ case RIL_REQUEST_RESET_RADIO: return "RESET_RADIO";
+ case RIL_REQUEST_OEM_HOOK_RAW: return "OEM_HOOK_RAW";
+ case RIL_REQUEST_OEM_HOOK_STRINGS: return "OEM_HOOK_STRINGS";
+ case RIL_REQUEST_SET_BAND_MODE: return "SET_BAND_MODE";
+ case RIL_REQUEST_QUERY_AVAILABLE_BAND_MODE: return "QUERY_AVAILABLE_BAND_MODE";
+ case RIL_REQUEST_STK_GET_PROFILE: return "STK_GET_PROFILE";
+ case RIL_REQUEST_STK_SET_PROFILE: return "STK_SET_PROFILE";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_COMMAND: return "STK_SEND_ENVELOPE_COMMAND";
+ case RIL_REQUEST_STK_SEND_TERMINAL_RESPONSE: return "STK_SEND_TERMINAL_RESPONSE";
+ case RIL_REQUEST_STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM: return "STK_HANDLE_CALL_SETUP_REQUESTED_FROM_SIM";
+ case RIL_REQUEST_SCREEN_STATE: return "SCREEN_STATE";
+ case RIL_REQUEST_EXPLICIT_CALL_TRANSFER: return "EXPLICIT_CALL_TRANSFER";
+ case RIL_REQUEST_SET_LOCATION_UPDATES: return "SET_LOCATION_UPDATES";
+ case RIL_REQUEST_CDMA_SET_SUBSCRIPTION_SOURCE:return"CDMA_SET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_CDMA_SET_ROAMING_PREFERENCE:return"CDMA_SET_ROAMING_PREFERENCE";
+ case RIL_REQUEST_CDMA_QUERY_ROAMING_PREFERENCE:return"CDMA_QUERY_ROAMING_PREFERENCE";
+ case RIL_REQUEST_SET_TTY_MODE:return"SET_TTY_MODE";
+ case RIL_REQUEST_QUERY_TTY_MODE:return"QUERY_TTY_MODE";
+ case RIL_REQUEST_CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_SET_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE:return"CDMA_QUERY_PREFERRED_VOICE_PRIVACY_MODE";
+ case RIL_REQUEST_CDMA_FLASH:return"CDMA_FLASH";
+ case RIL_REQUEST_CDMA_BURST_DTMF:return"CDMA_BURST_DTMF";
+ case RIL_REQUEST_CDMA_SEND_SMS:return"CDMA_SEND_SMS";
+ case RIL_REQUEST_CDMA_SMS_ACKNOWLEDGE:return"CDMA_SMS_ACKNOWLEDGE";
+ case RIL_REQUEST_GSM_GET_BROADCAST_SMS_CONFIG:return"GSM_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SET_BROADCAST_SMS_CONFIG:return"GSM_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_GSM_SMS_BROADCAST_ACTIVATION:return "GSM_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_GET_BROADCAST_SMS_CONFIG:return "CDMA_GET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SET_BROADCAST_SMS_CONFIG:return "CDMA_SET_BROADCAST_SMS_CONFIG";
+ case RIL_REQUEST_CDMA_SMS_BROADCAST_ACTIVATION:return "CDMA_SMS_BROADCAST_ACTIVATION";
+ case RIL_REQUEST_CDMA_VALIDATE_AND_WRITE_AKEY: return"CDMA_VALIDATE_AND_WRITE_AKEY";
+ case RIL_REQUEST_CDMA_SUBSCRIPTION: return"CDMA_SUBSCRIPTION";
+ case RIL_REQUEST_CDMA_WRITE_SMS_TO_RUIM: return "CDMA_WRITE_SMS_TO_RUIM";
+ case RIL_REQUEST_CDMA_DELETE_SMS_ON_RUIM: return "CDMA_DELETE_SMS_ON_RUIM";
+ case RIL_REQUEST_DEVICE_IDENTITY: return "DEVICE_IDENTITY";
+ case RIL_REQUEST_EXIT_EMERGENCY_CALLBACK_MODE: return "EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_REQUEST_GET_SMSC_ADDRESS: return "GET_SMSC_ADDRESS";
+ case RIL_REQUEST_SET_SMSC_ADDRESS: return "SET_SMSC_ADDRESS";
+ case RIL_REQUEST_REPORT_SMS_MEMORY_STATUS: return "REPORT_SMS_MEMORY_STATUS";
+ case RIL_REQUEST_REPORT_STK_SERVICE_IS_RUNNING: return "REPORT_STK_SERVICE_IS_RUNNING";
+ case RIL_REQUEST_CDMA_GET_SUBSCRIPTION_SOURCE: return "CDMA_GET_SUBSCRIPTION_SOURCE";
+ case RIL_REQUEST_ISIM_AUTHENTICATION: return "ISIM_AUTHENTICATION";
+ case RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU: return "RIL_REQUEST_ACKNOWLEDGE_INCOMING_GSM_SMS_WITH_PDU";
+ case RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS: return "RIL_REQUEST_STK_SEND_ENVELOPE_WITH_STATUS";
+ case RIL_REQUEST_VOICE_RADIO_TECH: return "VOICE_RADIO_TECH";
+ case RIL_REQUEST_GET_CELL_INFO_LIST: return"GET_CELL_INFO_LIST";
+ case RIL_REQUEST_SET_UNSOL_CELL_INFO_LIST_RATE: return"SET_UNSOL_CELL_INFO_LIST_RATE";
+ case RIL_REQUEST_SET_INITIAL_ATTACH_APN: return "RIL_REQUEST_SET_INITIAL_ATTACH_APN";
+ case RIL_REQUEST_IMS_REGISTRATION_STATE: return "IMS_REGISTRATION_STATE";
+ case RIL_REQUEST_IMS_SEND_SMS: return "IMS_SEND_SMS";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_BASIC: return "SIM_TRANSMIT_APDU_BASIC";
+ case RIL_REQUEST_SIM_OPEN_CHANNEL: return "SIM_OPEN_CHANNEL";
+ case RIL_REQUEST_SIM_CLOSE_CHANNEL: return "SIM_CLOSE_CHANNEL";
+ case RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL: return "SIM_TRANSMIT_APDU_CHANNEL";
+ case RIL_REQUEST_GET_RADIO_CAPABILITY: return "RIL_REQUEST_GET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_RADIO_CAPABILITY: return "RIL_REQUEST_SET_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_UICC_SUBSCRIPTION: return "SET_UICC_SUBSCRIPTION";
+ case RIL_REQUEST_ALLOW_DATA: return "ALLOW_DATA";
+ case RIL_REQUEST_GET_HARDWARE_CONFIG: return "GET_HARDWARE_CONFIG";
+ case RIL_REQUEST_SIM_AUTHENTICATION: return "SIM_AUTHENTICATION";
+ case RIL_REQUEST_GET_DC_RT_INFO: return "GET_DC_RT_INFO";
+ case RIL_REQUEST_SET_DC_RT_INFO_RATE: return "SET_DC_RT_INFO_RATE";
+ case RIL_REQUEST_SET_DATA_PROFILE: return "SET_DATA_PROFILE";
+ case RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED: return "UNSOL_RESPONSE_RADIO_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: return "UNSOL_RESPONSE_CALL_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED: return "UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_RESPONSE_NEW_SMS: return "UNSOL_RESPONSE_NEW_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT: return "UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT";
+ case RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM: return "UNSOL_RESPONSE_NEW_SMS_ON_SIM";
+ case RIL_UNSOL_ON_USSD: return "UNSOL_ON_USSD";
+ case RIL_UNSOL_ON_USSD_REQUEST: return "UNSOL_ON_USSD_REQUEST(obsolete)";
+ case RIL_UNSOL_NITZ_TIME_RECEIVED: return "UNSOL_NITZ_TIME_RECEIVED";
+ case RIL_UNSOL_SIGNAL_STRENGTH: return "UNSOL_SIGNAL_STRENGTH";
+ case RIL_UNSOL_STK_SESSION_END: return "UNSOL_STK_SESSION_END";
+ case RIL_UNSOL_STK_PROACTIVE_COMMAND: return "UNSOL_STK_PROACTIVE_COMMAND";
+ case RIL_UNSOL_STK_EVENT_NOTIFY: return "UNSOL_STK_EVENT_NOTIFY";
+ case RIL_UNSOL_STK_CALL_SETUP: return "UNSOL_STK_CALL_SETUP";
+ case RIL_UNSOL_SIM_SMS_STORAGE_FULL: return "UNSOL_SIM_SMS_STORAGE_FUL";
+ case RIL_UNSOL_SIM_REFRESH: return "UNSOL_SIM_REFRESH";
+ case RIL_UNSOL_DATA_CALL_LIST_CHANGED: return "UNSOL_DATA_CALL_LIST_CHANGED";
+ case RIL_UNSOL_CALL_RING: return "UNSOL_CALL_RING";
+ case RIL_UNSOL_RESPONSE_SIM_STATUS_CHANGED: return "UNSOL_RESPONSE_SIM_STATUS_CHANGED";
+ case RIL_UNSOL_RESPONSE_CDMA_NEW_SMS: return "UNSOL_NEW_CDMA_SMS";
+ case RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS: return "UNSOL_NEW_BROADCAST_SMS";
+ case RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL: return "UNSOL_CDMA_RUIM_SMS_STORAGE_FULL";
+ case RIL_UNSOL_RESTRICTED_STATE_CHANGED: return "UNSOL_RESTRICTED_STATE_CHANGED";
+ case RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE: return "UNSOL_ENTER_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_CDMA_CALL_WAITING: return "UNSOL_CDMA_CALL_WAITING";
+ case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS";
+ case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC";
+ case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW";
+ case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONE";
+ case RIL_UNSOL_RESEND_INCALL_MUTE: return "UNSOL_RESEND_INCALL_MUTE";
+ case RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED: return "UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED";
+ case RIL_UNSOL_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED";
+ case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE";
+ case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED";
+ case RIL_UNSOL_VOICE_RADIO_TECH_CHANGED: return "UNSOL_VOICE_RADIO_TECH_CHANGED";
+ case RIL_UNSOL_CELL_INFO_LIST: return "UNSOL_CELL_INFO_LIST";
+ case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED: return "RESPONSE_IMS_NETWORK_STATE_CHANGED";
+ case RIL_UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED: return "UNSOL_UICC_SUBSCRIPTION_STATUS_CHANGED";
+ case RIL_UNSOL_SRVCC_STATE_NOTIFY: return "UNSOL_SRVCC_STATE_NOTIFY";
+ case RIL_UNSOL_HARDWARE_CONFIG_CHANGED: return "HARDWARE_CONFIG_CHANGED";
+ case RIL_UNSOL_DC_RT_INFO_CHANGED: return "UNSOL_DC_RT_INFO_CHANGED";
+ case RIL_REQUEST_SHUTDOWN: return "SHUTDOWN";
+ case RIL_UNSOL_RADIO_CAPABILITY: return "RIL_UNSOL_RADIO_CAPABILITY";
+ case RIL_REQUEST_SET_TRM: return "RIL_REQUEST_SET_TRM";
+ case RIL_REQUEST_SET_IMS_ENABLE:return "RIL_REQUEST_SET_IMS_ENABLE";
+ case RIL_REQUEST_SET_AUDIO_PATH: return "SET_AUDIO_PATH";
+ case RIL_REQUEST_HANGUP_ALL: return "HANGUP_ALL";
+ case RIL_REQUEST_FORCE_RELEASE_CALL: return "FORCE_RELEASE_CALL";
+ case RIL_REQUEST_EMERGENCY_DIAL: return "RIL_REQUEST_EMERGENCY_DIAL";
+ case RIL_REQUEST_SET_ECC_SERVICE_CATEGORY: return "RIL_REQUEST_SET_ECC_SERVICE_CATEGORY";
+ case RIL_REQUEST_SET_ECC_LIST: return "RIL_REQUEST_SET_ECC_LIST";
+ case RIL_REQUEST_AT_COMMAND_WITH_PROXY: return "AT_COMMAND_WITH_PROXY";
+ case RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION: return "RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION";
+ case RIL_REQUEST_SET_CLIP: return "RIL_REQUEST_SET_CLIP";
+ case RIL_REQUEST_GET_COLP: return "RIL_REQUEST_GET_COLP";
+ case RIL_REQUEST_SET_COLP: return "RIL_REQUEST_SET_COLP";
+ case RIL_REQUEST_GET_COLR: return "RIL_REQUEST_GET_COLR";
+ case RIL_REQUEST_ADD_IMS_CONFERENCE_CALL_MEMBER: return "ADD_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_REMOVE_IMS_CONFERENCE_CALL_MEMBER: return "REMOVE_IMS_CONFERENCE_CALL_MEMBER";
+ case RIL_REQUEST_CONFERENCE_DIAL: return "CONFERENCE_DIAL";
+ case RIL_REQUEST_DIAL_WITH_SIP_URI: return "DIAL_WITH_SIP_URI";
+ case RIL_REQUEST_HOLD_CALL: return "HOLD_CALL";
+ case RIL_REQUEST_RESUME_CALL: return "RESUME_CALL";
+ case RIL_UNSOL_ECONF_SRVCC_INDICATION : return "ECONF_SRVCC_INDICATION";
+ case RIL_UNSOL_ECONF_RESULT_INDICATION : return "ECONF_RESULT_INDICATION";
+ case RIL_UNSOL_MAL_AT_INFO : return "UNSOL_MAL_AT_INFO";
+ case RIL_REQUEST_MODEM_POWEROFF: return "MODEM_POWEROFF";
+ case RIL_REQUEST_MODEM_POWERON: return "MODEM_POWERON";
+ case RIL_REQUEST_WRITE_SMS_TO_SIM: return "WRITE_SMS_TO_SIM";
+ case RIL_REQUEST_QUERY_ICCID: return "RIL_REQUEST_QUERY_ICCID";
+ case RIL_UNSOL_TX_POWER: return "RIL_UNSOL_TX_POWER";
+ case RIL_UNSOL_NETWORK_INFO: return "RIL_UNSOL_NETWORK_INFO";
+ case RIL_REQUEST_DELETE_SMS_ON_SIM: return "DELETE_SMS_ON_SIM";
+ case RIL_REQUEST_SET_IMSCFG: return "RIL_REQUEST_SET_IMSCFG";
+#ifdef ECALL_SUPPORT
+ case RIL_REQUEST_ECALL_FAST_MAKE_ECALL: return "ECALL_FAST_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_SET_IVS: return "RIL_REQUEST_ECALL_SET_IVS";
+ case RIL_REQUEST_ECALL_SET_PSAP: return "RIL_REQUEST_ECALL_SET_PSAP";
+ case RIL_REQUEST_ECALL_MAKE_ECALL: return "RIL_REQUEST_ECALL_MAKE_ECALL";
+ case RIL_REQUEST_ECALL_IVS_PUSH_MSD: return "RIL_REQUEST_ECALL_IVS_PUSH_MSD";
+ case RIL_REQUEST_ECALL_PSAP_PULL_MSD: return "RIL_REQUEST_ECALL_PSAP_PULL_MSD";
+ case RIL_UNSOL_ECALL_MSDHACK : return "ECALL_MSDHACK";
+ case RIL_REQUEST_ECALL_SET_MSD: return "RIL_REQUEST_ECALL_SET_MSD";
+ case RIL_REQUEST_ECALL_CTRL_SEQUENCE: return "ECALL_SET_CTRL_SEQUENCE";
+ case RIL_UNSOL_ECALL_INDICATIONS : return "ECALL_INDICATIONS";
+ case RIL_REQUEST_ECALL_RESET_IVS: return "RIL_REQUEST_ECALL_RESET_IVS";
+ case RIL_REQUEST_ECALL_SET_PRI: return "RIL_REQUEST_ECALL_SET_PRI";
+ case RIL_REQUEST_ECALL_SET_TEST_NUM: return "RIL_REQUEST_ECALL_SET_TEST_NUM";
+ case RIL_REQUEST_ECALL_SET_RECONF_NUM: return "RIL_REQUEST_ECALL_SET_RECONF_NUM";
+ case RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD: return "RIL_REQUEST_SYNC_DATA_SETTINGS_TO_MD";
+ case RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME: return "RIL_REQUEST_ECALL_SET_NAD_DEREGISTRATION_TIME";
+ case RIL_REQUEST_ECALL_SET_REGISTRATION_STATE: return "RIL_REQUEST_ECALL_SET_REGISTRATION_STATE";
+#endif /*ECALL_SUPPORT*/
+#ifdef KEEP_ALIVE
+ case RIL_REQUEST_START_KEEPALIVE_PRO: return "RIL_REQUEST_START_KEEPALIVE_PRO";
+ case RIL_REQUEST_STOP_KEEPALIVE_PRO: return "RIL_REQUEST_STOP_KEEPALIVE_PRO";
+ case RIL_UNSOL_KEEPALIVE_STATUS_PRO: return "RIL_UNSOL_KEEPALIVE_STATUS_PRO";
+#endif /*KEEP_ALIVE*/
+ case RIL_REQUEST_SEND_USSI: return "SEND_USSI";
+ case RIL_REQUEST_CANCEL_USSI: return "CANCEL_USSI";
+ case RIL_REQUEST_GET_SMS_SIM_MEM_STATUS: return "GET_SMS_SIM_MEM_STATUS";
+ case RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR: return "RIL_UNSOL_SIP_CALL_PROGRESS_INDICATOR";
+ case RIL_REQUEST_REPORT_AIRPLANE_MODE: return "RIL_REQUEST_REPORT_AIRPLANE_MODE";
+ case RIL_REQUEST_SET_ECC_NUM: return "RIL_REQUEST_SET_ECC_NUM";
+ case RIL_REQUEST_GET_ECC_NUM: return "RIL_REQUEST_GET_ECC_NUM";
+ case RIL_UNSOL_ECC_NUM: return "RIL_UNSOL_ECC_NUM";
+ case RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT: return "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS_WITH_ACT";
+ case RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_GET_BROADCAST_LANGUAGE";
+ case RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE: return "RIL_REQUEST_GSM_SET_BROADCAST_LANGUAGE";
+ case RIL_UNSOL_CALL_INFO_INDICATION: return "RIL_UNSOL_CALL_INFO_INDICATION";
+ case RIL_REQUEST_MODIFY_APN: return "RIL_REQUEST_MODIFY_APN";
+ case RIL_REQUEST_RESET_APN: return "RIL_REQUEST_RESET_APN";
+ case RIL_REQUEST_QUERY_SIM_RETRY_COUNT: return "RIL_REQUEST_QUERY_SIM_RETRY_COUNT";
+ case RIL_REQUEST_QUERY_EID: return "RIL_REQUEST_QUERY_EID";
+ case LYNQ_REQUEST_SET_DTMF_VOLUME: return "RIL_REQUEST_SET_DTMF_VOLUME";
+ case LYNQ_REQUEST_SET_SPEECH_VOLUME: return "RIL_REQUEST_SET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_GET_SPEECH_VOLUME: return "RIL_REQUEST_GET_SPEECH_VOLUME";
+ case LYNQ_REQUEST_RECORD: return "RIL_REQUEST_RECORD";
+ /*warren add for t800 ril service 2022/1/22 start*/
+ case LYNQ_REQUEST_WRITE_SMS_TO_MEMORY: return "LYNQ_REQUEST_WRITE_SMS_TO_MEMORY";
+ case LYNQ_REQUEST_READ_SMS_FROM_MEMORY: return "LYNQ_REQUEST_READ_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY: return "LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY: return "LYNQ_REQUEST_LIST_SMS_FROM_MEMORY";
+ case LYNQ_REQUEST_SET_DEFAULT_SIM_ALL:return "SET_DEFAULT_SIM_ALL";
+ case LYNQ_REQUEST_CHANGE_SCREEN_STATE:return "LYNQ_REQUEST_CHANGE_SCREEN_STATE";/*jb.qi add for two sim sleep 2022/9/19*/
+ case LYNQ_REQUEST_CHANGE_RADIO:return "LYNQ_REQUEST_CHANGE_RADIO";/*lei add for factory test of sleep 2022/9/19*/
+ /*warren add for t800 ril service 2022/1/22 end*/
+ default: return "<unknown request>";
+ }
+}
+
+
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_socket.h b/src/lynq/lib/liblynq-sms/lynq_module_socket.h
new file mode 100755
index 0000000..aabac32
--- /dev/null
+++ b/src/lynq/lib/liblynq-sms/lynq_module_socket.h
@@ -0,0 +1,22 @@
+#ifndef LYNQ_MODULE_SOCKET_H
+#define LYNQ_MODULE_SOCKET_H
+
+using ::android::Parcel;
+
+int lynq_set_test_network(const int test_mode);
+
+extern int g_module_Global_uToken;
+extern int g_wait_time;
+int lynq_send_common_request(Parcel*& p, int time_out, int request_id, int argc, const char* format,...);
+int lynq_start_all_urc_socket_thread();
+void lynq_close_all_urc_socket_thread();
+int lynq_start_all_rc_socket_thread();
+void lynq_close_all_rc_socket_thread();
+
+const char * requestToString(int request);
+
+void urc_msg_process(Parcel *p);
+bool is_support_urc(int urc_id);
+bool is_support_request(int req_id);
+
+#endif
diff --git a/src/lynq/lib/liblynq-sms/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
new file mode 100755
index 0000000..46f2119
--- /dev/null
+++ b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
@@ -0,0 +1,364 @@
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <binder/Parcel.h>
+#include <log/log.h>
+#include <cutils/jstring.h>
+#include <pthread.h>
+#include "liblog/lynq_deflog.h"
+#include <sys/time.h>
+#include <string.h>
+#include <vendor-ril/telephony/ril.h>
+#include <vendor-ril/telephony/mtk_ril_sp.h>
+#include <vendor-ril/telephony/mtk_ril_ivt.h>
+#include "lynq_sms.h"
+#include "lynq_module_common.h"
+#include "lynq_module_socket.h"
+
+#define CALL_OFF (0)
+#define CALL_ON (1)
+#define USER_LOG_TAG "LYNQ_SMS"
+
+using ::android::Parcel;
+
+#define MAX_SMS_BUF 1024
+
+int sms_storage_index = 0;
+
+/**
+ * @brief mark call initialization state
+ * 0: deinit state
+ * 1: init state
+ */
+int g_module_init_flag = 0;
+
+//static lynq_call_list_e_t s_call_lists[LYNQ_CALL_MAX]={};
+//static bool s_call_list_loop = 0;
+//static pthread_t s_call_list_loop_tid = -1;
+static pthread_mutex_t s_notice_new_sms_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_notice_new_sms_cond = PTHREAD_COND_INITIALIZER;
+
+//static int s_module_isDial = 0;
+//static pthread_mutex_t call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+//static pthread_cond_t call_state_change_cond = PTHREAD_COND_INITIALIZER;
+//static int s_CallId = 0;
+//static pthread_mutex_t s_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
+//static pthread_cond_t s_call_state_change_cond = PTHREAD_COND_INITIALIZER;
+
+
+static char *strdupReadString(Parcel* &p) {
+ size_t stringlen;
+ const char16_t *s16;
+ s16 = p->readString16Inplace(&stringlen);
+ return strndup16to8(s16, stringlen);
+}
+
+void lynqNoticeGetModuleNewSms()
+{
+ pthread_mutex_lock(&s_notice_new_sms_mutex);
+ pthread_cond_signal(&s_notice_new_sms_cond);
+ pthread_mutex_unlock(&s_notice_new_sms_mutex);
+
+}
+
+void lynqNoticeWaitModuleNewSms()
+{
+ pthread_mutex_lock(&s_notice_new_sms_mutex);
+ pthread_cond_wait(&s_notice_new_sms_cond, &s_notice_new_sms_mutex);
+ pthread_mutex_unlock(&s_notice_new_sms_mutex);
+}
+
+int lynq_sms_init(int uToken)
+{
+ if(g_module_init_flag != MODULE_CLOSED)
+ {
+ LYERRLOG("module state is %d",g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ if(uToken <0){
+ LYERRLOG("uToken is less than 0",uToken);
+ return LYNQ_E_PARAMETER_ANONALY;
+ }
+ g_module_init_flag = MODULE_SWITCHING;
+
+ LYLOGSET(LOG_DEBUG);
+ LYLOGEINIT(USER_LOG_TAG);
+
+ g_module_Global_uToken = uToken;
+
+ int ret = lynq_start_all_urc_socket_thread();
+ if(ret != RESULT_OK)
+ {
+ LYERRLOG("init socket urc fail!!!");
+ g_module_init_flag = MODULE_CLOSED;
+ return LYNQ_E_INNER_ERROR;
+ }
+
+ ret = lynq_start_all_rc_socket_thread();
+ if(ret !=RESULT_OK)
+ {
+ LYERRLOG("init socket client fail!!!");
+ lynq_close_all_urc_socket_thread();
+ g_module_init_flag = MODULE_CLOSED;
+ return LYNQ_E_INNER_ERROR;
+ }
+ g_module_init_flag = MODULE_RUNNING;
+ return RESULT_OK;
+}
+
+/*
+Converts an array to a hexadecimal string
+*/
+void ArrayToStr(unsigned char *Buff, unsigned int BuffLen, char *OutputStr)
+{
+ int i = 0;
+ char TempBuff[MAX_SMS_BUF] = {0};
+ char strBuff[MAX_SMS_BUF] = {0};
+ if(sizeof(Buff) < BuffLen)
+ {
+ LYERRLOG("BuffLen is error\n");
+ return;
+ }
+ for(i = 0; i<BuffLen;i++)
+ {
+ sprintf(TempBuff,"%02x",(unsigned char)Buff[i]);
+ strncat(strBuff,TempBuff,BuffLen*2);
+ }
+ strncpy(OutputStr, strBuff, BuffLen*2);
+ return;
+}
+
+int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg, int msglen)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ if(charset == 1)//means 8 bit
+ {
+ char msg_e_b[msglen*2+1] = {0};// +1 for end of string.*2:A char array contains two elements of a string for each value
+ ArrayToStr(msg, msglen, msg_e_b);
+ int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg_e_b);
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
+ return ret;
+ }
+ delete p;
+ return RESULT_OK;
+ }
+ else//other bit
+ {
+ int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg);
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s 7bit send error %d",__func__,__LINE__);
+ return ret;
+ }
+ delete p;
+ return RESULT_OK;
+ }
+}
+
+int lynq_read_sms(int index,int *status,int *charset,char smsc[SMSC_MAX_LEN],int *smscLen,int *smslen,char message[MSG_MAX_LEN],char teleNum[TELEPHONE_NUM_LEN],int *numLen,int *current,int *total)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_READ_SMS_FROM_MEMORY,1,"%d",index);
+ if(ret!=0)
+ {
+ return ret;
+ }
+ LYDBGLOG("LYNQ_REQUEST_READ_SMS_FROM_MEMORY SUCCESS!");
+ p->readInt32(&index);
+ p->readInt32(status);
+ p->readInt32(charset);
+ /*lei add for gws 2022/5/12*/
+ p->readInt32(current);
+ p->readInt32(total);
+ /*lei add for gws 2022/5/12*/
+ char *phone_num = NULL;
+ phone_num = strdupReadString(p);
+ *numLen = strlen(phone_num);
+ strcpy(teleNum, phone_num);
+ char *smscenter = NULL;
+ smscenter = strdupReadString(p);
+ *smscLen = strlen(smscenter);
+ strcpy(smsc,smscenter);
+ char *msg = NULL;
+ msg = strdupReadString(p);
+ *smslen = strlen(msg);
+ strcpy(message,msg);
+ free(phone_num);
+ free(smscenter);
+ free(msg);
+ delete p;
+ return RESULT_OK;
+}
+
+int lynq_get_smsc_address(char service_num[SMSC_MAX_LEN])
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_SMSC_ADDRESS,0,"");
+ if(ret!=0)
+ {
+ return ret;
+ }
+ LYDBGLOG("lynq_get_smsc_address SUCCESS!");
+ char *temp = strdupReadString(p);
+ strcpy(service_num, temp);
+ free(temp);
+ delete p;
+ return RESULT_OK;
+}
+
+int lynq_wait_receive_new_sms(int *handle)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ if(handle==NULL)
+ {
+ LYERRLOG("handle is null!!!");
+ return LYNQ_E_NULL_ANONALY;
+ }
+ lynqNoticeWaitModuleNewSms();
+ *handle = sms_storage_index;
+ return RESULT_OK;
+}
+
+int lynq_set_smsc_address(const char* service_num)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_SMSC_ADDRESS,1,"%s", service_num);
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
+ return ret;
+ }
+ LYDBGLOG("lynq_set_smsc_address SUCCESS!");
+ delete p;
+ return RESULT_OK;
+}
+
+int lynq_list_sms(char index_list[SMS_NUM_MAX])
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_LIST_SMS_FROM_MEMORY,0,"");
+ if(ret!=0)
+ {
+ return ret;
+ }
+ LYDBGLOG("lynq_list_sms SUCCESS!");
+ char *temp = strdupReadString(p);
+ strcpy(index_list, temp);
+ free(temp);
+ delete p;
+ return RESULT_OK;
+}
+
+int lynq_delete_sms(int index)
+{
+ if(g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ Parcel* p=NULL;
+ int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY,1,"%d", index);
+
+ if(ret!=RESULT_OK)
+ {
+ LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
+ return ret;
+ }
+ LYDBGLOG("lynq_delete_sms SUCCESS!");
+ delete p;
+ return RESULT_OK;
+}
+
+bool is_support_urc(int urc_id)
+{
+ switch(urc_id)
+ {
+ case RIL_UNSOL_RESPONSE_NEW_SMS:
+ return true;
+ default:
+ return false;
+ }
+}
+
+int lynq_sms_deinit(void)
+{
+ if (g_module_init_flag != MODULE_RUNNING)
+ {
+ LYERRLOG("module state is %d",g_module_init_flag);
+ return LYNQ_E_CONFLICT;
+ }
+ g_module_init_flag = MODULE_SWITCHING;
+ lynq_close_all_urc_socket_thread();
+ lynq_close_all_rc_socket_thread();
+ g_module_init_flag = MODULE_CLOSED;
+ return RESULT_OK;
+}
+
+void urc_msg_process(Parcel *p)
+{
+ int resp_type;
+ int urcid;
+ int slot_id;
+
+ int size=p->dataSize();
+ p->readInt32(&resp_type);
+ p->readInt32(&urcid);
+ p->readInt32(&slot_id);
+ LYINFLOG("%s urc id = %d, slot_id = %d, size is %d, msg is %s",__func__, urcid,slot_id,size,requestToString(urcid));
+ switch (urcid)
+ {
+ case RIL_UNSOL_RESPONSE_NEW_SMS://new sms received
+ {
+ LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d",resp_type,urcid,slot_id);
+ char *msg = NULL;
+ int index = 0;
+ msg = strdupReadString(p);
+ p->readInt32(&index);
+ sms_storage_index = index;
+ lynqNoticeGetModuleNewSms();
+ free(msg);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
diff --git a/src/lynq/lib/liblynq-sms/makefile b/src/lynq/lib/liblynq-sms/makefile
index 9daf449..e5dedab 100755
--- a/src/lynq/lib/liblynq-sms/makefile
+++ b/src/lynq/lib/liblynq-sms/makefile
@@ -5,79 +5,60 @@
-std=gnu++14 \
-g -Os \
-flto \
+ -DRIL_SHLIB \
+ -DATCI_PARSE \
-fPIC \
+ -DKEEP_ALIVE \
+ -DECALL_SUPPORT \
-fpermissive \
-$(warning ################# C2K support: $(RAT_CONFIG_C2K_SUPPORT))
-ifeq ($(strip $(RAT_CONFIG_C2K_SUPPORT)), yes)
- LOCAL_CFLAGS += -DC2K_SUPPORT
-endif
-ifeq ($(strip $(MTK_MULTI_SIM_SUPPORT)), dsds)
- LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2 \
- -DANDROID_MULTI_SIM \
- -DMODE_DSDS
-endif
-
-ifeq ($(strip $(MTK_MULTI_SIM_SUPPORT)), dsss)
- LOCAL_CFLAGS += -DMODE_DSSS
-endif
-
-$(warning ################# TARGET_PLATFORM: $(TARGET_PLATFORM))
-ifeq ($(strip $(TARGET_PLATFORM)), mt2731)
-#$(warning #################add for debug $(ROOT), $(includedir))
-$(warning ################# TARGET_PLATFORM_MT2731)
- LOCAL_CFLAGS += -DTARGET_PLATFORM_MT2731 \
- -DMD_93_SUPPORT
-else ifeq ($(strip $(TARGET_PLATFORM)), mt2635)
-$(warning ################# TARGET_PLATFORM_MT2635)
- LOCAL_CFLAGS += -DTARGET_PLATFORM_MT2635 \
- -DMD_90_SUPPORT
-endif
-
-$(warning ################# RITA ROOT: $(ROOT),includedir:$(includedir))
+$(warning ################# lynq data demo ROOT: $(ROOT),includedir:$(includedir))
LOCAL_PATH = .
LOCAL_C_INCLUDES = \
-I. \
-I$(LOCAL_PATH)/include/libsms \
- -I$(ROOT)$(includedir)/vendor-ril \
+ -I$(ROOT)$(includedir)/logger \
-I$(ROOT)$(includedir)/liblog \
+ -I$(ROOT)$(includedir)/vendor-ril \
+ -I$(ROOT)$(includedir)/lynq_shm \
LOCAL_LIBS := \
-L. \
-ldl \
- -lpthread \
- -lbinder \
- -lutils \
+ -lstdc++ \
+ -llog \
-lcutils \
+ -lutils \
+ -lbinder \
+ -lpthread \
-llynq-log \
+ -llynq-shm \
-SOURCES = $(wildcard *.c wildcard *.h src/*.cpp)
+SOURCES = $(wildcard *.cpp)
EXECUTABLE = liblynq-sms.so
-OBJECTS=$(SOURCES:.c=.o)
+OBJECTS=$(SOURCES:.cpp=.o)
.PHONY: build clean install pack_rootfs
-
all: build
$(EXECUTABLE): $(OBJECTS)
$(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
-%.o : %.c
- $(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+%.o : %.cpp
+ $(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
build: $(EXECUTABLE)
$(warning ########## build $(EXECUTABLE) ##########)
-
install:
mkdir -p $(ROOT)$(base_libdir)/
install $(EXECUTABLE) $(ROOT)$(base_libdir)/
-
+ mkdir -p $(ROOT)$(includedir)/$(NAME)/sdk
pack_rootfs:
mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
@@ -85,7 +66,7 @@
mkdir -p $(PACK_TO)$(base_libdir)/
cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
$(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
-
.PHONY: clean
clean:
$(RM) $(OBJECTS) $(EXECUTABLE)
+ -find . -name "*.o" -delete
diff --git a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
deleted file mode 100755
index fbf1b64..0000000
--- a/src/lynq/lib/liblynq-sms/src/lynq_sms.cpp
+++ /dev/null
@@ -1,597 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <binder/Parcel.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <cutils/jstring.h>
-#include "lynq_sms.h"
-#include <vendor-ril/telephony/ril.h>
-#include <liblog/lynq_deflog.h>
-#include <sys/types.h>
-#define LYNQ_REQUEST_VENDOR_BASE 8000
-#define LYNQ_URC_VENDOR_BASE 9000
-#define LYNQ_AT_SNED (LYNQ_REQUEST_VENDOR_BASE +1)
-#define LYNQ_REQUEST_WRITE_SMS_TO_MEMORY (LYNQ_REQUEST_VENDOR_BASE +4)
-#define LYNQ_REQUEST_READ_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 5)
-#define LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 6)
-#define LYNQ_REQUEST_LIST_SMS_FROM_MEMORY (LYNQ_REQUEST_VENDOR_BASE + 7)
-using ::android::Parcel;
-
-
-#define MAX_SMS_BUF 5120
-#define SERVER_PORT 8088
-#define SERVER_URC_PORT 8086
-#define SERVER_IP "127.0.0.1"
-#define USER_LOG_TAG "LYNQ_SMS"
-typedef struct{
- int uToken;
- int request;
- int paramLen;
- char param[1024*8];
-}lynq_client_t;
-
-typedef struct {
- int sock_fd;
- struct sockaddr_in addrto;
- struct sockaddr_in addrfrom;
-}sms_instance_t;
-
-
-enum{
- SMS_OK = 0,
- SMS_FAIL,
- SMS_PARAM_ERR
-};
-
-typedef struct
-{
- int index; /*the index of sms in memory,0-255 */
- int status; /* 0:read, 1:unread */
- int charset; /* 0:7bit, 1:8bit, 2:16bit(chinese) */
- char smsc[SMSC_MAX_LEN]; /* smsc address */
- int smscLen; /* smsc string length */
- int smslen; /* the length of sms,the maximum length shall not exceed the length specified in 3GGP protocol(160/70) */
- char message[MSG_MAX_LEN]; /* sms content */
- char teleNum[TELEPHONE_NUM_LEN]; /* telephony number */
- int numLen; /* telephony number strings length */
- /*lei add for gsw 2022/5/12*/
- int current; /* Long and short letter after the split letter subscript */
- int total; /* The total number of short creeds after the separation of long and short letters */
- /*lei add for gsw 2022/5/12*/
-}lynq_sms_msg_info_t;
-
-typedef struct{
- int index; /*the index of sms in memory,0-255 */
- int status; /* 0:read, 1:unread */
- uint64_t timestamp; /* reciced message timestamp */
- char telephone_num[TELEPHONE_NUM_LEN]; /* sender telephone number */
-}lynq_sms_info_t;
-
-typedef struct{
- int num_msg; /* numbers of messsage */
- lynq_sms_info_t lynq_sms_info[STORAGE_SMS_MAX_SIZE]; /* message information */
-}lynq_sms_list_info_t;
-
-static sms_instance_t sms_instance;
-int urc_recive_status = 1;
-static pthread_mutex_t s_receive_sms_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t s_receive_sms_cond = PTHREAD_COND_INITIALIZER;
-pthread_t sms_recv_pid = 0;
-int GuToken = 0;
-int sms_storage_index = 0;
-int urc_sock_fd = -1;
-/**g_lynq_sms_init_flag
-* @brief mark sms initialization state
-* 0:Uninitialized
-* 1:initialized
-*/
-static int g_lynq_sms_init_flag = 0;
-/**g_lynq_sms_sendto_mutex
-* @brief mark sms send request mutex
-*/
-static pthread_mutex_t g_lynq_sms_sendto_mutex;
-
-static char *strdupReadString(Parcel &p) {
- size_t stringlen;
- const char16_t *s16;
-
- s16 = p.readString16Inplace(&stringlen);
-
- return strndup16to8(s16, stringlen);
-}
-
-static int sms_server_init(void)
-{
- int ret = SMS_OK;
-
- bzero(&sms_instance, sizeof(sms_instance));
- if ((sms_instance.sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
- LYERRLOG("socket error:%s\n", strerror(errno));
- ret = SMS_FAIL;
- }
- struct timeval timeOut;
- timeOut.tv_sec = 60;
- timeOut.tv_usec = 0;
- if (setsockopt(sms_instance.sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
- {
- LYERRLOG("time out setting failed\n");
- return -1;
- }
- sms_instance.addrto.sin_family=AF_INET;
- sms_instance.addrto.sin_addr.s_addr = inet_addr(SERVER_IP);
- sms_instance.addrto.sin_port=htons(SERVER_PORT);
- sms_instance.addrfrom.sin_family=AF_INET;
- sms_instance.addrfrom.sin_addr.s_addr = inet_addr(SERVER_IP);
- sms_instance.addrfrom.sin_port=htons(SERVER_PORT);
- pthread_mutex_init(&g_lynq_sms_sendto_mutex, NULL);
-
- return ret;
-}
-
-int send_buff_to_service(char *buff, int length)
-{
- int addr_len = sizeof(sms_instance.addrto);
- int ret = 0;
- ret = sendto(sms_instance.sock_fd, buff, length, 0, (struct sockaddr *)&sms_instance.addrto, addr_len);
-
- return ret;
-}
-int waitReceiveNewSms()
-{
- int ret = 0;
- pthread_mutex_lock(&s_receive_sms_mutex);
- ret = pthread_cond_wait(&s_receive_sms_cond,&s_receive_sms_mutex);
- pthread_mutex_unlock(&s_receive_sms_mutex);
- return ret;
-}
-void sendSignalNewSms()
-{
- pthread_mutex_lock(&s_receive_sms_mutex);
- pthread_cond_signal(&s_receive_sms_cond);
- pthread_mutex_unlock(&s_receive_sms_mutex);
- return;
-}
-int lynq_wait_receive_new_sms(int *handle)
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- if(handle==NULL)
- {
- LYERRLOG("handle is null!!!");
- return -1;
- }
- waitReceiveNewSms();
- *handle = sms_storage_index;
- return 0;
-}
-int recvfrom_server(void *resp, int id)
-{
- char recv_buf[4096] = {0};
- int recv_len = 0;
- int len = sizeof(struct sockaddr_in);
- Parcel resp_parcel; // = new Parcel();
- int32_t resp_type = 0;
- int32_t token = 0;
- int32_t request = 0;
- int32_t slot_id = 0;
- int32_t error = -1;
- while (request != id)
- {
- recv_len = recvfrom(sms_instance.sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&sms_instance.addrfrom, (socklen_t*)&len);
- LYDBGLOG("##################recv length:%d\n", recv_len);
- if(recv_len <= 0){
- LYERRLOG("recvform error: %s\n", strerror(errno));
- return SMS_FAIL;
- }
- resp_parcel.setData((uint8_t *)recv_buf,recv_len);
- resp_parcel.setDataPosition(0);
- if(resp_parcel.dataAvail() > 0)
- {
- resp_parcel.readInt32(&resp_type);
- resp_parcel.readInt32(&token);
- resp_parcel.readInt32(&request);
- resp_parcel.readInt32(&slot_id);
- resp_parcel.readInt32(&error);
- }
- }
- LYDBGLOG("resp data: %d,%d, %d,%d\n", resp_type, request, slot_id, error);
- switch(request)
- {
- case RIL_REQUEST_SEND_SMS:
- case RIL_REQUEST_SET_SMSC_ADDRESS:
- if(0 != error)
- {
- LYDBGLOG("request:%d failure,Error code:%d",request,error);
- }
- break;
-
- case RIL_REQUEST_GET_SMSC_ADDRESS:
- if(0 != error)
- {
- LYDBGLOG("request:%d failure,Error code:%d",request,error);
- }
- else
- {
- char *temp = strdupReadString(resp_parcel);
- memcpy(resp, temp, strlen(temp));
- free(temp);
- }
- break;
- case LYNQ_REQUEST_READ_SMS_FROM_MEMORY:
- if(0 != error)
- {
- LYDBGLOG("request:%d failure,Error code:%d",request,error);
- }
- else
- {
- LYDBGLOG("LYNQ_REQUEST_READ_SMS_FROM_MEMORY SUCCESS!");
- int index = 0;
- int status = 0;
- char *phone_num = NULL;
- char *smsc = NULL;
- char *msg = NULL;
- int charset = 0;
- lynq_sms_msg_info_t * sms_info = (lynq_sms_msg_info_t *)resp;
- resp_parcel.readInt32(&sms_info->index);
- resp_parcel.readInt32(&sms_info->status);
- resp_parcel.readInt32(&sms_info->charset);
- /*lei add for gws 2022/5/12*/
- resp_parcel.readInt32(&sms_info->current);
- resp_parcel.readInt32(&sms_info->total);
- /*lei add for gws 2022/5/12*/
- phone_num = strdupReadString(resp_parcel);
- smsc = strdupReadString(resp_parcel);
- msg = strdupReadString(resp_parcel);
- memcpy(sms_info->smsc, smsc, strlen(smsc));
- memcpy(sms_info->message, msg, strlen(msg));
- memcpy(sms_info->teleNum, phone_num, strlen(phone_num));
- sms_info->smscLen = strlen(smsc);
- sms_info->smslen = strlen(msg);
- sms_info->numLen = strlen(phone_num);
- free(phone_num);
- free(smsc);
- free(msg);
- }
- break;
-
- case LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY:
- if(0 != error)
- {
- LYDBGLOG("request:%d failure,Error code:%d",request,error);
- }
- break;
-
- case LYNQ_REQUEST_LIST_SMS_FROM_MEMORY:
- if(0 != error)
- {
- LYDBGLOG("request:%d failure,Error code:%d",request,error);
- }else{
- int temp = 0;
- char *chartemp = NULL;
- chartemp = strdupReadString(resp_parcel);
- temp = strlen(chartemp);
- if((temp > 0) && (temp <= SMS_NUM_MAX))
- {
- memcpy((char*)resp,chartemp,temp);
- }
- free(chartemp);
- }
- break;
-
- default:
- LYERRLOG("not support id: %d\n", request);
- break;
- }
-
- return error;
-}
-
-void * handle_urc(void *p)
-{
- int ret = SMS_OK;
- char recv_buf[8192] = {0};
- Parcel resp;
- int len = sizeof(struct sockaddr_in);
- if ((urc_sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
- LYERRLOG("socket error:%s\n", strerror(errno));
- ret = SMS_FAIL;
- }
- int opt = 1;
- ret = setsockopt(urc_sock_fd,SOL_SOCKET,SO_BROADCAST,&opt,sizeof(opt));
- ret = setsockopt(urc_sock_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
-
- struct sockaddr_in server;
- server.sin_family=AF_INET;
- server.sin_addr.s_addr = htonl(INADDR_ANY);
- server.sin_port=htons(SERVER_URC_PORT);
- ret = bind(urc_sock_fd ,(struct sockaddr*)&server, sizeof(server));
- while(urc_recive_status)
- {
- int slot_id = 0;
- char *phone_num = NULL;
- char *smsc = NULL;
- char *msg = NULL;
- int charset = 0;
- int resp_type = 0;
- int unsol = 0;
- int index = 0;
- ret = recvfrom(urc_sock_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&server, (socklen_t*)&len);
- LYDBGLOG("urc recv length: %d\n", ret);
- if(ret <= 0)
- {
- LYERRLOG("recvform error: %s\n", strerror(errno));
- continue;
- }
- resp.setData((uint8_t *)recv_buf,ret);
- resp.setDataPosition(0);
- if(resp.dataAvail() > 0) {
- resp.readInt32(&resp_type);
- resp.readInt32(&unsol);
- resp.readInt32(&slot_id);
- }
- LYERRLOG("resp_type%d,unsol=%d,slot_id=%d",resp_type,unsol,slot_id);
- if(RIL_UNSOL_RESPONSE_NEW_SMS == unsol)
- {
- msg = strdupReadString(resp);
- resp.readInt32(&index);
- sms_storage_index = index;
- //sms_urc_callback(slot_id, phone_num, smsc, msg, charset);
- sendSignalNewSms();
- free(msg);
- }
- }
-}
-
-int lynq_sms_init(int uToken)
-{
- //Check whether sms has been initialized,0:Uninitialized,1:initialized
- if(g_lynq_sms_init_flag == 1)
- {
- LYERRLOG("sms has init!!!");
- //return error code 9000 (LYNQ_E_CONFLICT)
- return 9000;
- }
- g_lynq_sms_init_flag = 1;
- int ret = sms_server_init();
- GuToken = uToken;
- LYLOGSET(LOG_INFO);
- LYLOGEINIT(USER_LOG_TAG);
- urc_recive_status = 1;
- pthread_create(&sms_recv_pid, NULL, handle_urc, NULL);
- LYERRLOG("lynq_sms_init ret: %d\n", ret);
- return ret;
-}
-
-int lynq_sms_deinit(void)
-{
- int ret = 0;
- //Check whether sms has been Uninitialized,0:Uninitialized,1:initialized
- if(g_lynq_sms_init_flag == 0)
- {
- LYERRLOG("sms has deinit!!!");
- //return error code 9000 (LYNQ_E_CONFLICT)
- return 9000;
- }
- urc_recive_status = 0;
- g_lynq_sms_init_flag = 0;
- if(sms_recv_pid > 0)
- {
- ret = pthread_cancel(sms_recv_pid);
- LYERRLOG("pthread cancel ret = %d",ret);
- ret = pthread_join(sms_recv_pid,NULL);
- LYERRLOG("pthread join ret = %d",ret);
- }
-
- if(sms_instance.sock_fd > 0)
- {
- close(sms_instance.sock_fd);
- LYERRLOG("sms_instance.sock_fd");
- close(urc_sock_fd);
- LYERRLOG("URC sock_fd close");
- }
- return 0;
-}
-
-void ArrayToStr(unsigned char *Buff, unsigned int BuffLen, char *OutputStr)
-{
- int i = 0;
- char TempBuff[MAX_SMS_BUF] = {0};
- char strBuff[MAX_SMS_BUF] = {0};
- if(sizeof(Buff) < BuffLen)
- {
- LYERRLOG("BuffLen is error\n");
- return;
- }
- for(i = 0; i<BuffLen;i++)
- {
- sprintf(TempBuff,"%02x",(unsigned char)Buff[i]);
- strncat(strBuff,TempBuff,BuffLen*2);
- }
- strncpy(OutputStr, strBuff, BuffLen*2);
- return;
-}
-
-int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg, int msglen)
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- lynq_client_t client;
- int ret = SMS_OK;
- if (NULL == msg)
- {
- LYERRLOG("input msg is null!!!");
- return -1;
- }
- if (strlen(msg) == 0)
- {
- LYERRLOG("msg is null,plz input msg");
- }
- client.request = RIL_REQUEST_SEND_SMS;
- client.uToken = GuToken;
- client.paramLen = 3;
- bzero(client.param, 8*1024);
- if(charset == 1)//means 8 bit
- {
- char msg_e_b[msglen*2+1] = {0};// +1 for end of string.*2:A char array contains two elements of a string for each value
- ArrayToStr(msg, msglen, msg_e_b);
- sprintf(client.param, "%s %d %s\n", telephony_num, charset, msg_e_b);
- }
- else
- {
- sprintf(client.param, "%s %d %s\n", telephony_num, charset, msg);
- }
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL, RIL_REQUEST_SEND_SMS);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
-
- return ret;
-}
-
-int lynq_read_sms(int index,int *status,int *charset,char smsc[SMSC_MAX_LEN],int *smscLen,int *smslen,char message[MSG_MAX_LEN],char teleNum[TELEPHONE_NUM_LEN],int *numLen,int *current,int *total)
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- lynq_client_t client;
- lynq_sms_msg_info_t sms_msg_info;
- int lenTemp = -1;
- int ret = SMS_OK;
- client.request = LYNQ_REQUEST_READ_SMS_FROM_MEMORY;
- client.uToken = GuToken;
- client.paramLen = 1;
- bzero(client.param, 8*1024);
- sprintf(client.param, "%d", index);
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server((void *)&sms_msg_info, LYNQ_REQUEST_READ_SMS_FROM_MEMORY);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
- if(ret == 0)
- {
- *charset = sms_msg_info.charset;
- *status = sms_msg_info.status;
- *smslen = sms_msg_info.smslen;
- *smscLen = sms_msg_info.smscLen;
- *numLen = sms_msg_info.numLen;
- *current = sms_msg_info.current;
- *total = sms_msg_info.total;
- if((*smscLen > 0) && (*smscLen < SMSC_MAX_LEN))
- {
- memcpy(smsc,sms_msg_info.smsc,*smscLen);
- smsc[*smscLen] = '\0';
- }
- if((*smslen > 0) && (*smslen < MSG_MAX_LEN))
- {
- memcpy(message,sms_msg_info.message,*smslen);
- message[*smslen] = '\0';
- }
- if((*numLen > 0) && (*numLen < TELEPHONE_NUM_LEN))
- {
- memcpy(teleNum,sms_msg_info.teleNum,*numLen);
- teleNum[*numLen] = '\0';
- }
- }
- return ret;
-}
-
-int lynq_get_smsc_address(char service_num[SMSC_MAX_LEN])
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- if(NULL == service_num)
- {
- return -1;
- }
- int ret = SMS_OK;
- lynq_client_t client;
-
- client.request = RIL_REQUEST_GET_SMSC_ADDRESS;
- client.uToken = GuToken;
- client.paramLen = 0;
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(service_num, RIL_REQUEST_GET_SMSC_ADDRESS);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
-
- return ret;
-}
-
-int lynq_set_smsc_address(const char* service_num)
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- if(NULL == service_num)
- {
- return -1;
- }
- if(strlen(service_num) == 0)
- {
- return -1;
- }
- lynq_client_t client;
- int ret = SMS_OK;
-
- client.request = RIL_REQUEST_SET_SMSC_ADDRESS;
- client.uToken = GuToken;
- client.paramLen = 1;
- bzero(client.param, 8*1024);
- sprintf(client.param, "%s", service_num);
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL, RIL_REQUEST_SET_SMSC_ADDRESS);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
-
- return ret;
-}
-
-int lynq_list_sms(char index_list[SMS_NUM_MAX])
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- lynq_client_t client;
- int ret = SMS_OK;
- client.request = LYNQ_REQUEST_LIST_SMS_FROM_MEMORY;
- client.uToken = GuToken;
- client.paramLen = 0;
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server((void *)index_list, LYNQ_REQUEST_LIST_SMS_FROM_MEMORY);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
- return ret;
-}
-
-int lynq_delete_sms(int index)
-{
- if(g_lynq_sms_init_flag == 0)
- {
- return -1;
- }
- lynq_client_t client;
- int ret = SMS_OK;
- client.request = LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY;
- client.uToken = GuToken;
- client.paramLen = 1;
- bzero(client.param, 8*1024);
- sprintf(client.param, "%d", index);
- pthread_mutex_lock(&g_lynq_sms_sendto_mutex);
- ret = send_buff_to_service((char *)&client, sizeof(client));
- ret = recvfrom_server(NULL, LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY);
- pthread_mutex_unlock(&g_lynq_sms_sendto_mutex);
- return ret;
-}
diff --git a/src/lynq/lib/liblynq-systime/src/lynq_systime.c b/src/lynq/lib/liblynq-systime/src/lynq_systime.c
index 29bf676..46ec442 100755
--- a/src/lynq/lib/liblynq-systime/src/lynq_systime.c
+++ b/src/lynq/lib/liblynq-systime/src/lynq_systime.c
@@ -66,7 +66,7 @@
system(date);
system(time);
-
+ system("hwclock -w -f /dev/rtc0");
return 0;
}
diff --git a/src/lynq/lib/liblynq-uci/lynq_uci.config b/src/lynq/lib/liblynq-uci/lynq_uci.config
index 86f578c..5b7c208 100755
--- a/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -26,3 +26,6 @@
config lynq_rndis 'lynq_rndis'
option initiate '0'
+
+config rndis_status 'rndis'
+ option status '0'
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 78c756e..d0c3c32 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -60,7 +60,14 @@
const char * state_scan_result = "CTRL-EVENT-SCAN-RESULTS";
const char * STATE_COMPLETED = "COMPLETED";
-static struct wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
+struct local_wpa_ctrl{
+ struct wpa_ctrl *ctrl;
+ pthread_mutex_t mutex;
+};
+
+static pthread_mutex_t s_check_wpa_ctrl_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static struct local_wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
//you.chen add for tv-box start
volatile int g_gbw_enabled = 0;
@@ -76,6 +83,50 @@
int net_no;
}curr_status_info;
+static int local_wpa_ctrl_request(struct local_wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
+ char *reply, size_t *reply_len,
+ void (*msg_cb)(char *msg, size_t len))
+{
+ int ret;
+ if (ctrl->ctrl == NULL) {
+ printf("local_wpa_ctrl_request ctrl is null\n");
+ return -1;
+ }
+ pthread_mutex_lock(&ctrl->mutex);
+ ret = wpa_ctrl_request(ctrl->ctrl, cmd, cmd_len, reply, reply_len, msg_cb);
+ pthread_mutex_unlock(&ctrl->mutex);
+ return ret;
+}
+
+static struct local_wpa_ctrl * inner_get_wpa_ctrl(int index) {
+ int repeat_cnt;
+ struct local_wpa_ctrl *lynq_wpa_ctrl = NULL;
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+ printf("inner_get_wpa_ctrl\n");
+ for (repeat_cnt = 0; repeat_cnt < 5 && NULL == g_lynq_wpa_ctrl[index]; repeat_cnt++) {
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+// printf("wait enable finish\n");
+ usleep(500 * 1000);
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+ }
+ if (NULL == g_lynq_wpa_ctrl[index]) {
+ printf("NULL == g_lynq_wpa_ctrl[index]\n");
+ goto out_addr;
+ }
+ if (NULL == g_lynq_wpa_ctrl[index]->ctrl) {
+ g_lynq_wpa_ctrl[index]->ctrl = wpa_ctrl_open(CTRL_PATH[index]);
+ if (NULL == g_lynq_wpa_ctrl[index]->ctrl) {
+ printf("wpa_ctrl_open fail\n");
+ goto out_addr;
+ }
+ pthread_mutex_init(&g_lynq_wpa_ctrl[index]->mutex, NULL);
+ }
+ lynq_wpa_ctrl = g_lynq_wpa_ctrl[index];
+out_addr:
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ return lynq_wpa_ctrl;
+}
+
#define PRINT_AND_RETURN_VALUE(str,value) \
{\
perror((str));\
@@ -93,23 +144,17 @@
#define CHECK_WPA_CTRL(index) int ret = 0;\
size_t reply_len = MAX_RET; \
char cmd_reply[MAX_RET]={0}; \
- struct wpa_ctrl *lynq_wpa_ctrl = NULL; \
+ struct local_wpa_ctrl *lynq_wpa_ctrl = NULL; \
do{ \
- if (NULL == g_lynq_wpa_ctrl[index]) { \
- g_lynq_wpa_ctrl[index] = wpa_ctrl_open(CTRL_PATH[index]); \
- if (NULL == g_lynq_wpa_ctrl[index]) { \
- printf("wpa_ctrl_open fail\n"); \
- return -1; \
- } \
- } \
- lynq_wpa_ctrl = g_lynq_wpa_ctrl[index]; \
+ lynq_wpa_ctrl = inner_get_wpa_ctrl(index); \
+ if (NULL == lynq_wpa_ctrl) return -1; \
}while(0)
#define DO_REQUEST(cmd_str) do { \
reply_len = MAX_RET;\
cmd_reply[0] = '\0'; \
printf("to call [%s]\n", cmd_str); \
- ret = wpa_ctrl_request(lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL); \
+ ret = local_wpa_ctrl_request(lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL); \
if (ret != 0) { \
printf("call "#cmd_str" fail %d\n", ret); \
return ret; \
@@ -130,6 +175,7 @@
}while (0)
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
static void APWatcherThreadProc() {
size_t len = MAX_RET;
@@ -264,6 +310,13 @@
{
int ret = 0;
int i;
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+
+ if (g_lynq_wpa_ctrl[0] != NULL && g_lynq_wpa_ctrl[1] != NULL) {
+ goto out_enable;
+ }
+
+ printf("lynq_wifi_enable1\n");
const char * cmd_check_service =
"state=`systemctl is-active wg870_drv_insmod.service`\n"
"[ \"\"$state == \"active\" ] && exit 0\n"
@@ -275,7 +328,8 @@
ret = system(cmd_check_service);
if (ret != 0) {
printf("service state %d\n", ret);
- return -1;
+ ret = -1;
+ goto out_enable;
}
for (i=0; i<10; i++) {
@@ -286,7 +340,8 @@
}
if (i >= 10) {
- return -1;
+ ret = -1;
+ goto out_enable;
}
//@todo delete add temp check for socket avilable start (20220606)
@@ -300,7 +355,8 @@
if (i >= 60)
{
- return -1;
+ ret = -1;
+ goto out_enable;
}
//@todo delete add temp check for socket avilable end (20220606)
@@ -318,14 +374,16 @@
if (g_ap_watcher_pid == 0 ) {
ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
if(ret<0){
- return -1;
+ ret = -1;
+ goto out_enable;
}
}
if (g_sta_watcher_pid == 0 ) {
ret=pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL);
if(ret<0){
- return -1;
+ ret = -1;
+ goto out_enable;
}
}
@@ -336,11 +394,18 @@
}
}
+ g_lynq_wpa_ctrl[0] = malloc(sizeof (struct local_wpa_ctrl));
+ g_lynq_wpa_ctrl[1] = malloc(sizeof (struct local_wpa_ctrl));
+ memset(g_lynq_wpa_ctrl[0], 0 , sizeof(struct local_wpa_ctrl));
+ memset(g_lynq_wpa_ctrl[1], 0 , sizeof(struct local_wpa_ctrl));
+out_enable:
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
return ret;
}
int lynq_wifi_disable(void)
{
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
g_ap_watcher_stop_flag = 1;
g_sta_watcher_stop_flag = 1;
if (g_ap_watcher_pid != 0)
@@ -356,11 +421,95 @@
g_lynq_wpa_ctrl[0] = NULL;
g_lynq_wpa_ctrl[1] = NULL;
system("systemctl stop wg870_drv_insmod.service");
- return 0;
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ return 0;
+}
+
+static inline char inner_convert_char(char in)
+{
+ if (in >= '0' && in <= '9')
+ {
+ return in - '0';
+ }
+ else if (in >= 'a' && in <= 'f')
+ {
+ return in - 'a' + 10;
+ }
+ else if (in >= 'A' && in <= 'F')
+ {
+ return in - 'A' + 10;
+ }
+ else
+ {
+ return '\xff';
+ }
+}
+
+static inline void inner_copy_ssid(char * out_ssid, const char * ssid, size_t out_ssid_len)
+{
+ char *p;
+ size_t pos = 0;
+ if (NULL == out_ssid)
+ return;
+ //printf("input ssid=[%s]\n", ssid);
+ memset(out_ssid, 0, out_ssid_len);
+ if (NULL == ssid)
+ return;
+ p = strchr(ssid, '\\');
+ if (NULL == p)
+ {
+ strncpy(out_ssid, ssid, out_ssid_len);
+ //printf(" first %s\n", out_ssid);
+ }
+ else
+ {
+ pos = p - ssid;
+ memcpy(out_ssid, ssid, pos);
+ //printf("pos %lu -- %s\n", pos, out_ssid);
+ for(; pos < out_ssid_len; pos ++)
+ {
+ if (p[0] == '\0')
+ {
+ //printf(" out %s\n", out_ssid);
+ return;
+ }
+ else if (p[0] != '\\')
+ {
+ out_ssid[pos] = p[0];
+ p += 1;
+ }
+ else if (p[1] == 'x' || p[1] == 'X')
+ {
+ out_ssid[pos] = inner_convert_char(p[2]) << 4 | inner_convert_char(p[3]);
+ p += 4;
+ }
+ else if (p[1] == '\\')
+ {
+ out_ssid[pos] = '\\';
+ p += 2;
+ }
+ else if (p[1] == 't')
+ {
+ out_ssid[pos] = '\t';
+ p += 2;
+ }
+ else if (p[1] == 'r')
+ {
+ out_ssid[pos] = '\r';
+ p += 2;
+ }
+ else if (p[1] == 'n')
+ {
+ out_ssid[pos] = '\n';
+ p += 2;
+ }//todo find a better way to convert?
+ }
+ }
+ //printf(" out %s\n", out_ssid);
}
static int inner_get_param(int interface, int net_no, char* param_name, char * out_put) {
-
+ int i, ssid_len;
char lynq_cmd_get[128]={0};
if (out_put == NULL) {
@@ -387,7 +536,33 @@
}
// printf("reply len %d, %08x\n", reply_len, (int)out_put);
- memcpy(out_put, cmd_reply, reply_len + 1);
+ if (strcmp(param_name, "ssid") == 0)
+ {
+ if (cmd_reply[0] == '\"') {
+ ssid_len = reply_len - 1;
+ memcpy(out_put, cmd_reply + 1, ssid_len);
+ if (out_put[ssid_len-1] == '\"')
+ {
+ out_put[ssid_len-1] = '\0';
+ }
+ else
+ {
+ out_put[ssid_len] = '\0';
+ }
+ }
+ else{
+ ssid_len = reply_len / 2;
+ for(i=0; i<ssid_len; i++)
+ {
+ out_put[i] = inner_convert_char(cmd_reply[i*2]) << 4 | inner_convert_char(cmd_reply[i*2 + 1]);
+ }
+ out_put[ssid_len] = '\0';
+ }
+ }
+ else
+ {
+ memcpy(out_put, cmd_reply, reply_len + 1);
+ }
return 0;
}
@@ -410,123 +585,26 @@
return ret;
}
-static void trim_space(char * p, int count) {
- char * begin = p;
- p += count;
- printf("%C-%C||\n", *begin, *p);
- while (p >= begin ) {
- if (*p == ' ') {
- *p-- = '\0';
- }
- else {
- break;
- }
- }
-}
-
-static int get_ip_mac_list(char * mac_list[128], char * ip_list[128]) {
- FILE * fp;
- int len, ret;
- int count, count_words, index;
- int mac_start, mac_end;
- int ip_start, ip_end;
- char *split_lines[128] = {0};
- char *buff;
- const char * ip_header = "IP address";
- const char * mac_header = "HW address";
- const char * zero_mac = "00:00:00:00:00:00";
-
- fp = fopen("/proc/net/arp", "rb");
- if (NULL == fp) {
- printf("open file fail\n");
- return -1;
- }
-
- buff = alloca(MAX_RET);
- fseek(fp, 0, SEEK_SET);
- len = fread(buff, 1, MAX_RET, fp);
- fclose(fp);
- if (len <= 0) {
- printf("read file fail\n");
+static int inner_get_ip_by_mac(const char * mac, char * ip, int ip_len)
+{
+ char * p;
+ int ret = 0;
+ char cmd[256]={0};
+ if (NULL == mac || NULL == ip)
return -1;
+ memset(ip, 0, ip_len);
+ sprintf(cmd, "ip neigh | grep \"lladdr\" | grep \"tether\" | grep \"%s\" | head -1 | awk '{print $1}'", mac);
+ ret = exec_cmd(cmd, ip, ip_len);
+ p = strchr(ip, '\n');
+ if (NULL != p)
+ {
+ *p = '\0';
}
- printf("file : %s\n", buff);
-
- count = lynq_split(buff, len, '\n', split_lines);
- printf("----- %s\n", split_lines[0]);
-
- mac_end = 0;
- count_words = strlen(split_lines[0]);
- if (strstr(split_lines[0], mac_header) != NULL) {
- mac_start = strstr(split_lines[0], mac_header) - split_lines[0];
- mac_end = mac_start + strlen(mac_header) + 1;
- while (mac_end < count_words) {
- if (split_lines[0][mac_end] != ' ') {
- break;
- }
- mac_end++;
- }
- }
-
- ip_end = 0;
- if (strstr(split_lines[0], ip_header) != NULL) {
- ip_start = strstr(split_lines[0], ip_header) - split_lines[0];
- ip_end = ip_start + strlen(ip_header) + 1;
- while (ip_end < count_words) {
- if (split_lines[0][ip_end] != ' ') {
- break;
- }
- ip_end++;
- }
- }
-
- if (mac_end == 0 || ip_end == 0) {
- return 0;
- }
-
- ret = 0;
- for(index = 1;index < count; index++) {
- if (memcmp(split_lines[index] + mac_start, zero_mac, strlen(zero_mac)) == 0) {
- continue;
- }
- mac_list[ret] = malloc(mac_end - mac_start + 1);
- ip_list[ret] = malloc(ip_end - ip_start + 1);
- memcpy(mac_list[ret], split_lines[index] + mac_start, mac_end - mac_start);
- memcpy(ip_list[ret], split_lines[index] + ip_start, ip_end - ip_start);
- trim_space(mac_list[ret], mac_end - mac_start - 1);
- trim_space(ip_list[ret], ip_end - ip_start - 1);
- ret++;
- }
-
+ printf("inner_get_ip_by_mac %s\n", ip);
return ret;
}
-static void free_ip_mac_list_mem(char ** mac_list, int mac_cnt, char ** ip_list, int ip_cnt)
-{
- int i;
- if (mac_list != NULL && mac_cnt > 0) {
- for(i = 0; i< mac_cnt; i++)
- {
- if (NULL != mac_list[i])
- {
- free(mac_list[i]);
- mac_list[i] = NULL;
- }
- }
- }
- if (ip_list != NULL && ip_cnt > 0) {
- for(i = 0; i< mac_cnt; i++)
- {
- if (NULL != ip_list[i])
- {
- free(ip_list[i]);
- ip_list[i] = NULL;
- }
- }
- }
-}
-
-static int get_hostname_by_ip(char *ip, char *hostname) {
+static int inner_get_hostname_by_ip(char *ip, char *hostname) {
struct in_addr addr ={0};
struct hostent *ht;
@@ -534,6 +612,7 @@
return -1;
}
+ *hostname = '\0';
if (inet_aton(ip, &addr) == 0) {
printf("---inet_aton fail\n");
return -1;
@@ -557,6 +636,7 @@
int count, index, words_count;
char * split_lines[128]= {0};
char * split_words[128] = {0};
+ char local_ssid[128] = {0};
const char *lynq_wifi_list_networks = "LIST_NETWORKS";
CHECK_WPA_CTRL(ap_sta);
@@ -571,7 +651,8 @@
for(index=1; index < count; index++) {
words_count = lynq_split(split_lines[index], strlen(split_lines[index]), '\t', split_words);
if (words_count > 2) {
- if (ssid == NULL || strcmp(split_words[1], ssid) == 0) {
+ inner_copy_ssid(local_ssid, split_words[1], sizeof (local_ssid));
+ if (ssid == NULL || strcmp(local_ssid, ssid) == 0) {
net_no_list[ret++] = atoi(split_words[0]);
}
}
@@ -677,6 +758,9 @@
else if (strstr( flag, "NONE") != NULL) {
return LYNQ_WIFI_AUTH_OPEN;
}
+ else if (strcmp( flag, "[ESS]") == 0) {
+ return LYNQ_WIFI_AUTH_OPEN;
+ }
}
return -1;
@@ -713,6 +797,7 @@
const char * FLAG_FREQ = "freq=";
const char * FLAG_STATE = "wpa_state=";
const char * FLAG_ID = "id=";
+ const char * FLAG_IPADDR = "ip_address=";
char *split_lines[128] = {0};
CHECK_WPA_CTRL(interface);
@@ -731,13 +816,13 @@
if (curr_state->ap != NULL) {
p = strstr(split_lines[i], FLAG_SBSID);
if (p != NULL) {
- strcpy(curr_state->ap->ap_mac, p + strlen(FLAG_SBSID));
+ strncpy(curr_state->ap->ap_mac, p + strlen(FLAG_SBSID), sizeof(curr_state->ap->ap_mac));
ret = 0;
continue;
}
p = strstr(split_lines[i], FLAG_SSID);
if (p != NULL) {
- strcpy(curr_state->ap->ap_ssid, p + strlen(FLAG_SSID));
+ inner_copy_ssid(curr_state->ap->ap_ssid, p + strlen(FLAG_SSID), sizeof (curr_state->ap->ap_ssid));
ret = 0;
continue;
}
@@ -754,6 +839,12 @@
ret = 0;
continue;
}
+ p = strstr(split_lines[i], FLAG_IPADDR);
+ if (p != NULL) {
+ strncpy(curr_state->ap->ap_ip, p + strlen(FLAG_IPADDR), sizeof(curr_state->ap->ap_ip));
+ ret = 0;
+ continue;
+ }
} // end if (ap != NULL)
if (curr_state->state != NULL) {
p = strstr(split_lines[i], FLAG_STATE);
@@ -806,19 +897,8 @@
int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx, char* ap_ssid)
{
- int len;
CHECK_IDX(idx, CTRL_AP);
- if (0 != inner_get_param(CTRL_AP, AP_NETWORK_0, "ssid", ap_ssid))
- return -1;
- len = strlen(ap_ssid);
- if (ap_ssid[0] == '\"') {
- memmove(ap_ssid, ap_ssid + 1, len - 1);
- len -= 1;
- }
- if (len > 0 && ap_ssid[len-1] == '\"') {
- ap_ssid[len-1] = '\0';
- }
- return 0;
+ return inner_get_param(CTRL_AP, AP_NETWORK_0, "ssid", ap_ssid);
}
/*****
@@ -832,34 +912,40 @@
*
* */
static int lynq_check_set_frequency(int input_frequency){
- static int legitimate_frequency[21]={2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,5180,5200,5220,5240,5745,5765,5785,5805,5825};
- int i = 0;
- int flag_check = 0;
- for(i=0 ;i<= 21; i++){
- if(input_frequency == legitimate_frequency[i]){
- flag_check = 1;
+ int legitimate_frequency[]={2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,5180,5200,5220,5240,5745,5765,5785,5805,5825};
+ int i;
+ int arr_len = sizeof(legitimate_frequency) / sizeof(int);
+
+ for(i = 0; i < arr_len; i++)
+ {
+ if(input_frequency == legitimate_frequency[i])
break;
- }
}
- if(flag_check == 1){
- printf("input frequency in range\n");
- }else{
- printf("input frequency is eero--->%d,please check it\n",input_frequency);
+
+ if(i == arr_len)
+ {
+ printf("input frequency is eero--->%d,please check it\n", input_frequency);
return -1;
}
+
return 0;
}
int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
{
+ int check;
char lynq_wifi_frequency_cmd[128]={0};
char lynq_cmd_mode[128]={0};
char lynq_cmd_slect[128]={0};
//@do check input frequency
- if((lynq_check_set_frequency(lynq_wifi_frequency)) != 0){
+ check = lynq_check_set_frequency(lynq_wifi_frequency);
+ if(check != 0)
+ {
+ printf("do check frequency error\n");
return -1;
}
- if (lynq_check_network_number(idx, CTRL_AP, AP_NETWORK_0) != 0) {
+ if (lynq_check_network_number(idx, CTRL_AP, AP_NETWORK_0) != 0)
+ {
return -1;
}
@@ -1425,10 +1511,11 @@
int lynq_sta_ssid_password_get(lynq_wifi_index_e idx, ap_info_s *ap, char *password) { // @todo
FILE * fp;
- int len, ret, network_len;
+ int len, ret, network_len, i, ssid_len;
int count, index;
char *split_lines[128] = {0};
- char *buff, *p;
+ char *buff, *p, *ssid, *ssid_end_flag;
+ char tmp_ssid[128]={0};
network_len = 0;
p = NULL;
@@ -1468,9 +1555,28 @@
break;
}
- if (strstr(p, ap->ap_ssid) != NULL) {
- break;
+ ssid = strstr(p, "ssid=");
+ if (ssid != NULL) {
+ ssid += strlen("ssid=");
+ if (ssid[0] == '\"') {
+ if (memcmp(ssid + 1, ap->ap_ssid, strlen(ap->ap_ssid)) == 0 && ssid[strlen(ap->ap_ssid) + 1] == '\"')
+ break;
+ }
+ else{
+ ssid_end_flag = strstr(ssid, "\n");
+ if (ssid_end_flag != NULL)
+ {
+ ssid_len = (ssid_end_flag - ssid) / 2;
+ for(i=0; i<ssid_len; i++)
+ {
+ tmp_ssid[i] = inner_convert_char(ssid[i*2]) << 4 | inner_convert_char(ssid[i*2 + 1]);
+ }
+ if (memcmp(tmp_ssid, ap->ap_ssid, ssid_len) == 0)
+ break;
+ }
+ }
}
+
}
if (index >= len || NULL == p || network_len <= 0) {
@@ -1577,7 +1683,7 @@
curr_state.state = NULL;
if (0 == inner_get_status_info(CTRL_STA, &curr_state)) {
- strcpy(sta_ssid, ap_info.ap_ssid);
+ strncpy(sta_ssid, ap_info.ap_ssid, sizeof (ap_info.ap_ssid));
return 0;
}
@@ -1662,6 +1768,7 @@
best_scan_index = j;
best_rssi = scan_list[j].rssi;
}
+ strncpy(save_list[i].base_info.ap_mac, scan_list[j].mac, sizeof (save_list[i].base_info.ap_mac));
break;
}
}
@@ -1669,6 +1776,7 @@
if (best_index >= 0) {
memcpy(&info->base_info, &save_list[best_index].base_info, sizeof (ap_info_s));
+ inner_get_ip_by_mac( info->base_info.ap_mac, info->base_info.ap_ip, sizeof (info->base_info.ap_ip));
info->status = LYNQ_WIFI_AP_STATUS_DISABLE;
info->rssi = best_rssi;
ret = 0;
@@ -1839,44 +1947,52 @@
int lynq_wifi_sta_start(lynq_wifi_index_e idx)
{
- const char *lynq_reconfigure_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 RECONFIGURE /data/wifi/wg870/wpa_supplicant.conf";
- const char *lynq_reconnect_cmd = "RECONNECT";
+// const char *lynq_reconfigure_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 RECONFIGURE /data/wifi/wg870/wpa_supplicant.conf";
+// const char *lynq_reconnect_cmd = "RECONNECT";
+ const char *lynq_enable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 enable_net all";
+ const char *lynq_reconnect_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 reconnect";
+// const char *lynq_first_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 remove_net all";
CHECK_IDX(idx, CTRL_STA);
CHECK_WPA_CTRL(CTRL_STA);
system("connmanctl enable wifi");
- if (system("ifconfig | grep -q wlan0") != 0) {
+ if (system("ifconfig | grep -q wlan0") != 0)
+ {
return -1;
}
- DO_OK_FAIL_REQUEST(cmd_remove_all);
- system(lynq_reconfigure_cmd);
- DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
-
+// DO_OK_FAIL_REQUEST(cmd_remove_all);
+// system(lynq_first_sta_cmd);
+// system(lynq_reconfigure_cmd);
+// DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
+ system(lynq_enable_sta_cmd);
+ system(lynq_reconnect_cmd);
+// DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
return 0;
}
int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
{
- char lynq_disable_network_cmd[MAX_CMD];
- curr_status_info curr_state;
- ap_info_s ap_info;
+// char lynq_disable_network_cmd[MAX_CMD];
+// curr_status_info curr_state;
+// ap_info_s ap_info;
+ const char * lynq_disable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disable_net all";
CHECK_IDX(idx, CTRL_STA);
CHECK_WPA_CTRL(CTRL_STA);
- curr_state.ap = &ap_info;
- curr_state.state = NULL;
+// curr_state.ap = &ap_info;
+// curr_state.state = NULL;
- if (0 != inner_get_status_info(CTRL_STA, &curr_state) || curr_state.net_no < 0) {
- return 0;
- }
+// if (0 != inner_get_status_info(CTRL_STA, &curr_state) || curr_state.net_no < 0) {
+// return 0;
+// }
- sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
- DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
-
+// sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
+// DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
+ system(lynq_disable_sta_cmd);
DO_OK_FAIL_REQUEST(cmd_save_config);
return 0;
@@ -1924,12 +2040,11 @@
int lynq_get_ap_device_list(lynq_wifi_index_e idx, ap_info_s **ap, device_info_s ** list,int * len)
{
- int ip_count, index, i, line_count;
+ int index, line_count;
+ device_info_s *dev_info;
const char *lynq_first_sta_cmd = "STA-FIRST";
char lynq_next_sta_cmd[MAX_CMD];
char *bssid[1024] = {0};
- char *mac_list[128] = {0};
- char *ip_list[128] = {0};
char *split_lines[128] = {0};
CHECK_IDX(idx, CTRL_AP);
@@ -1954,9 +2069,6 @@
lynq_get_interface_ip(idx, (*ap)->ap_ip);
lynq_ap_password_get(idx, (*ap)->psw);
- ip_count = get_ip_mac_list(mac_list, ip_list);
- printf("get count %d\n", ip_count);
-
DO_REQUEST(lynq_first_sta_cmd);
index = 0;
@@ -1971,7 +2083,7 @@
sprintf(lynq_next_sta_cmd, "STA-NEXT %s", split_lines[0]);
reply_len = MAX_RET;
cmd_reply[0] = '\0';
- ret = wpa_ctrl_request(lynq_wpa_ctrl, lynq_next_sta_cmd, strlen(lynq_next_sta_cmd), cmd_reply, &reply_len, NULL);
+ ret = local_wpa_ctrl_request(lynq_wpa_ctrl, lynq_next_sta_cmd, strlen(lynq_next_sta_cmd), cmd_reply, &reply_len, NULL);
if (ret != 0 || memcmp(cmd_reply, "FAIL", 4) == 0) {
printf("run %s fail \n", lynq_next_sta_cmd);
break;
@@ -1982,20 +2094,15 @@
*list = malloc(sizeof(device_info_s) * (*len));
for (index=0; index < *len; index++) {
- strcpy((*list)[index].sta_mac, bssid[index]);
- for(i=0;i < ip_count; i++ ) {
- if (strcmp(bssid[index], mac_list[i]) == 0) {
- strcpy((*list)[index].sta_ip, ip_list[i]);
- break;
- }
- }
- get_hostname_by_ip((*list)[index].sta_ip, list[index]->hostname);
- (*list)[index].status = LYNQ_WIFI_STATUS_CONNECT;
+ dev_info = &(*list)[index];
+ memset(dev_info, 0, sizeof(device_info_s));
+ strncpy(dev_info->sta_mac, bssid[index], sizeof (dev_info->sta_mac));
+ inner_get_ip_by_mac(dev_info->sta_mac, dev_info->sta_ip, sizeof (dev_info->sta_ip));
+ inner_get_hostname_by_ip(dev_info->sta_ip, dev_info->hostname);
+ dev_info->status = LYNQ_WIFI_STATUS_CONNECT;
free(bssid[index]);
}
- free_ip_mac_list_mem(mac_list, 128, ip_list, 128);
-
return 0;
}
@@ -2043,7 +2150,7 @@
p->band = convert_band_from_freq(atoi(split_words[1]));
p->rssi = -1 * atoi( split_words[2]);
p->auth = convert_max_auth_from_flag(split_words[3]);
- strcpy(p->ssid, split_words[4]);
+ inner_copy_ssid(p->ssid, split_words[4], sizeof (p->ssid));
}
return 0;
@@ -2090,10 +2197,9 @@
int lynq_get_sta_saved_ap(lynq_wifi_index_e idx, saved_ap_info_s ** list, int * len)
{
- int count, index, ssid_len;
+ int count, index;
int net_no_list[128];
char freq[16];
- char *ssid_ptr;
if (list == NULL || len == NULL) {
printf("bad param\n");
@@ -2114,17 +2220,6 @@
for (index=0; index < count; index++) {
printf("to get ssid %d\n", index);
inner_get_param(CTRL_STA, net_no_list[index], "ssid", (*list)[index].base_info.ap_ssid);
-
- ssid_ptr = (*list)[index].base_info.ap_ssid;
- ssid_len = strlen(ssid_ptr);
- if (ssid_ptr[0] == '\"') {
- memmove(ssid_ptr, ssid_ptr + 1, ssid_len - 1);
- ssid_len -= 1;
- }
- if (ssid_len > 0 && ssid_ptr[ssid_len - 1] == '\"') {
- ssid_ptr[ssid_len - 1] = '\0';
- }
-
inner_get_param(CTRL_STA, net_no_list[index], "bssid", (*list)[index].base_info.ap_mac);
inner_get_network_auth(CTRL_STA, net_no_list[index], &(*list)[index].base_info.auth);
if (inner_get_param(CTRL_STA, net_no_list[index], "frequency", freq) == 0) {
@@ -2262,7 +2357,7 @@
// reply_len = MAX_RET;
// cmd_reply[0] = '\0';
// printf("to call [%s]\n", cmd_str);
-// ret = wpa_ctrl_request(s_lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL);
+// ret = local_wpa_ctrl_request(s_lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL);
// if (ret != 0) {
// printf("call ##cmd_str fail %d\n", ret);
// return ret;
@@ -2390,6 +2485,7 @@
}
}
}
+ freeifaddrs(ifaddr_header);
return -1;
}
@@ -2503,11 +2599,7 @@
int lynq_get_connect_ap_ip(lynq_wifi_index_e idx, char *ip)
{
- int index;
- int ip_count = 0;
char bssid[1024] = {0};
- char *mac_list[128] = {0};
- char *ip_list[128] = {0};
if (ip == NULL)
{
@@ -2522,24 +2614,7 @@
return -1;
}
- ip_count = get_ip_mac_list(mac_list, ip_list);
-
- for (index=0; index < ip_count; index++)
- {
- if (strcmp(bssid, mac_list[index]) == 0)
- {
- strcpy(ip, ip_list[index]);
-
- free_ip_mac_list_mem(mac_list, 128, ip_list, 128);
-
- return 0;
- }
- }
-
- printf("not found\n");
- free_ip_mac_list_mem(mac_list, 128, ip_list, 128);
-
- return -1;
+ return inner_get_ip_by_mac(bssid, ip, 32); //better input by user
}
int lynq_ap_connect_num(int sta_number)
diff --git a/src/lynq/packages/apps/lynq-default/lynq_default.c b/src/lynq/packages/apps/lynq-default/lynq_default.c
index d32a4b2..ba3a4b4 100755
--- a/src/lynq/packages/apps/lynq-default/lynq_default.c
+++ b/src/lynq/packages/apps/lynq-default/lynq_default.c
@@ -9,8 +9,8 @@
//#define USER_LOG_TAG "lynq_default"
-#define LYNQ_SW_VERSION "T800v02.MP1_MR1.01b04.01"//needs to be modified if upgrade version
-#define LYNQ_SW_INSIDE_VERSION "T800v02.MP1_MR1.01b04.04"//only for insde check
+//#define LYNQ_SW_VERSION "T800v02.MP1_MR1.01b04.01"//needs to be modified if upgrade version
+//#define LYNQ_SW_INSIDE_VERSION "T800v02.MP1_MR1.01b04.04"//only for insde check
//#define GET_DATA_LEN 64
#define BUF_LEN 258
diff --git a/src/lynq/packages/apps/lynq-default/makefile b/src/lynq/packages/apps/lynq-default/makefile
index fbb54dd..e5e41eb 100644
--- a/src/lynq/packages/apps/lynq-default/makefile
+++ b/src/lynq/packages/apps/lynq-default/makefile
@@ -9,6 +9,8 @@
+LOCAL_CFLAGS += -DLYNQ_SW_INSIDE_VERSION=\"$(LYNQ_CONFIG_VERSION)\"
+LOCAL_CFLAGS += -DLYNQ_SW_VERSION=\"$(LYNQ_CONFIG_SW_VERSION)\"
LOCAL_PATH = .
diff --git a/src/lynq/packages/apps/lynq-gnss-test/lynq-gnss-test-cb.c b/src/lynq/packages/apps/lynq-gnss-test/lynq-gnss-test-cb.c
index 81720c7..9e409b0 100755
--- a/src/lynq/packages/apps/lynq-gnss-test/lynq-gnss-test-cb.c
+++ b/src/lynq/packages/apps/lynq-gnss-test/lynq-gnss-test-cb.c
@@ -110,8 +110,8 @@
strncmp(nmea+3,NMEA_GSV,strlen(NMEA_GSV)) == 0)
{
printf("%s\r\n",nmea);
- sprintf(gnss_ttyCmd,"echo -e \"\\%s\\r\\n\" > /dev/ttyGS0",nmea);
- system(gnss_ttyCmd);
+ //sprintf(gnss_ttyCmd,"echo -e \"\\%s\\r\\n\" > /dev/ttyGS0",nmea);
+ //system(gnss_ttyCmd);
}
}
diff --git a/src/telephonyware/3.0/atcid/atci/src/Makefile b/src/telephonyware/3.0/atcid/atci/src/Makefile
index 42c2169..77f997a 100755
--- a/src/telephonyware/3.0/atcid/atci/src/Makefile
+++ b/src/telephonyware/3.0/atcid/atci/src/Makefile
@@ -2,9 +2,15 @@
FLAGS += -DMTK_GPS_FEATURE
+$(warning ################# warren LYNQ_ATSVC_SUPPORT: $(LYNQ_ATSVC_SUPPORT))
+ifeq ($(strip $(LYNQ_ATSVC_SUPPORT)), yes)
+ FLAGS += -DLYNQ_ATSVC
+endif
+
INCLUDES := -I. \
-I./platform \
-
+ -I./lynq-private \
+ -I./lynq-private/pseudo_terminal \
SRCS := \
./at_tok.c \
@@ -18,6 +24,8 @@
./platform/atcid_common.c \
./atcid_sim_cmd.c\
./atcid_universal_ant_cmd.c\
+ ./lynq-private/lynq_atsvc_controller.c \
+ ./lynq-private/pseudo_terminal/transfer_controller.c \
CXXSRCS := \
@@ -30,7 +38,7 @@
CXXOBJS := ${CXXSRCS:%.cpp=%.o}
-#LDFLAGS = -L. -lz -ldl -lpthread -lstdc++
+LDFLAGS += -L. -lpthread -lxml2 -ldl
.PHONY: all
all : $(TARGET)
diff --git a/src/telephonyware/3.0/atcid/atci/src/atcid.c b/src/telephonyware/3.0/atcid/atci/src/atcid.c
index 0bb0641..0eaff4f 100755
--- a/src/telephonyware/3.0/atcid/atci/src/atcid.c
+++ b/src/telephonyware/3.0/atcid/atci/src/atcid.c
@@ -44,6 +44,7 @@
#include <netinet/in.h>
#include <sys/socket.h>
+#include "lynq_atsvc_controller.h" /*warren add for lynq atsvc on 2022/12/06*/
/*misc global vars */
Serial serial;
@@ -69,11 +70,19 @@
*/
int main() {
int i = 0;
+ int res = 0;
LOGATCI(LOG_INFO, "atcid-daemon start!!!");
//Initial the parameter for serial dervice
initSerialDevice(&serial);
-
+#ifdef LYNQ_ATSVC
+ res = lynq_atsvc_init(0,PLUGIN_CONF_PATH);
+ if(res!=0)
+ {
+ ALOGD("lynq_atsvc_init fail,result = %d",res);
+ ALOGD("lynq all at cmd can`t use");
+ }
+#endif
#ifdef MTK_DATACARD_ATCI
//AP AT port is GS3 in factory mode
snprintf(serial.devicename[0], strlen(TTY_GS3) + 1, "%s", TTY_GS3);
diff --git a/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.c b/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.c
index 08810de..6d9dc8a 100755
--- a/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.c
+++ b/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.c
@@ -292,6 +292,32 @@
free(line_cut);
return 0;
}
+/*warren add for lynq atsvc on 2022/12/06 start*/
+#ifdef LYNQ_ATSVC
+int lynq_command_hdlr(char *line)
+{
+ int i = 0;
+ int table_size = 0;
+ char* line_cut = cut_cmd_line(line);
+ if (line_cut == NULL)
+ {
+ return 0;
+ }
+ table_size = (sizeof(lynq_cmd_table)/sizeof(generic_cmd_type));
+
+ for (i = 0; i < table_size; i++)
+ {
+ if (strcmp(line_cut, lynq_cmd_table[i].cmdName) == 0)
+ {
+ free(line_cut);
+ return 1; //The command is handled here
+ }
+ }
+ free(line_cut);
+ return 0;
+}
+#endif
+/*warren add for lynq atsvc on 2022/12/06 end*/
int process_cmd_line(char* line) {
LOGATCI(LOG_DEBUG,"Enter");
@@ -311,6 +337,14 @@
if (generic_command_hdlr(line)) {
return GENERIC_TYPE;
}
+/*warren add for lynq atsvc on 2022/12/06 start*/
+#ifdef LYNQ_ATSVC
+ LOGATCI(LOG_DEBUG, "handle in lynq_command_hdlr");
+ if (lynq_command_hdlr(line)) {
+ return LYNQ_CMD_TYPE;
+ }
+#endif
+/*warren add for lynq atsvc on 2022/12/06 end*/
LOGATCI(LOG_DEBUG, "handle in audio_command_hdlr");
int audio_result = audio_command_hdlr(line);
diff --git a/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.h b/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.h
old mode 100644
new mode 100755
index 8f31e46..602c6ce
--- a/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.h
+++ b/src/telephonyware/3.0/atcid/atci/src/atcid_cmd_dispatch.h
@@ -178,6 +178,19 @@
{"AT+CMGC"}, // AT command to send command
{"AT+CNMA"},
};
+/*warren add for lynq atsvc on 2022/12/06 start*/
+#ifdef LYNQ_ATSVC
+static generic_cmd_type lynq_cmd_table[] = {
+ {"AT+LAPNACT"}, //AT command to enable defult PDP
+ {"AT+ELAPNACT"}, //AT command to enable PDP with APN
+ {"AT+LEAPNMOD"}, //AT command to modify apn info
+ {"AT+LCSUS"}, //AT command to dsds
+ {"AT+SCREEN"}, //AT command to off/on modem screen
+ {"ATD"},
+};
+char* cut_cmd_line(char* line);
+#endif
+/*warren add for lynq atsvc on 2022/12/06 end*/
int process_cmd_line(char* line);
char* cut_cmd_line(char* line);
diff --git a/src/telephonyware/3.0/atcid/atci/src/atcid_serial.c b/src/telephonyware/3.0/atcid/atci/src/atcid_serial.c
index 54be009..577b3c1 100755
--- a/src/telephonyware/3.0/atcid/atci/src/atcid_serial.c
+++ b/src/telephonyware/3.0/atcid/atci/src/atcid_serial.c
@@ -56,7 +56,9 @@
#else
#include <sys/un.h>
#endif
-
+#ifdef LYNQ_ATSVC
+#include "lynq_atsvc_controller.h"
+#endif
#define MAX_FAILURE_RETRY 3
#define BUILD_TYPE_PROP "ro.build.type"
#define BUILD_TYPE_PROP_ENG "eng"
@@ -66,7 +68,9 @@
/*misc global vars */
+#ifndef LYNQ_ATSVC
extern Serial serial;
+#endif
extern At_Ril_Mmi_t atRilMmi_info;
#define CONN_VCOM 1
@@ -542,7 +546,15 @@
}
#endif
- } else if (GENERIC_TYPE == dataType) {
+ }
+ /*warren add for lynq atsvc on 2022/12/06 start*/
+#ifdef LYNQ_ATSVC
+ else if ((GENERIC_TYPE == dataType)||(LYNQ_CMD_TYPE == dataType))
+#else
+ else if (GENERIC_TYPE == dataType)
+#endif
+ /*warren add for lynq atsvc on 2022/12/06 end*/
+ {
#ifdef ANDROID
if (s_fdService_command == INVALIDE_SOCKET_FD) {
s_fdService_command = connectToSystemAtciService();
@@ -1203,7 +1215,7 @@
Serial *p_serial = (Serial *)arg;
ATCI_DataType dataType = UNKNOWN_TYPE;
char operator[MTK_PROPERTY_VALUE_MAX] = {0};
-
+ int plugin_count = -1; /*warren add for lynq at svc on 2022/12/12*/
signal(SIGPIPE, sigpipe_handler);
LOGATCI(LOG_DEBUG,"Enter");
@@ -1257,7 +1269,29 @@
convertToUpperCase(line,'=');
trim_string(&line);
LOGATCI(LOG_INFO, "Command:%s",line);
-
+ /*warren add for lynq at svc on 2022/12/12 start*/
+ #ifdef LYNQ_ATSVC
+ if(has_registe_cmd == true)
+ {
+ if(lynq_check_extension_atcmd(line) == 0)
+ {
+ if(send_msg_to_at_extension(line,strlen(line))!=0)
+ {
+ ALOGD("send at fail,please try agin");
+ }
+ continue;
+ }
+ }
+ plugin_count = -1;
+ plugin_count = lynq_dispatch_atcmd(line);
+ ALOGD("plugin count:%d",plugin_count);
+ if(0 <= plugin_count)
+ {
+ plugin_msg_array[plugin_count].atsvc_incb(line,strlen(line));
+ continue;
+ }
+ #endif
+ /*warren add for lynq at svc on 2022/12/12 end*/
dataType = process_cmd_line(line);
LOGATCI(LOG_INFO, "The command type is belonged to :%d",dataType);
@@ -1358,7 +1392,21 @@
} else {
LOGATCI(LOG_INFO, "Generic AT COMMAND");
}
- } else if (dataType == AUDIO_TYPE) {
+ }
+ /*warren add for lynq atsvc on 2022/12/06 start*/
+ #ifdef LYNQ_ATSVC
+ else if(dataType == LYNQ_CMD_TYPE)
+ {
+ if (s_fdService_command < 0 || s_fdService_command_vendor < 0)
+ {
+ connectTarget(LYNQ_CMD_TYPE);
+ }
+ sendDataToGenericService(line);
+ LOGATCI(LOG_INFO, "LYNQ AT COMMAND");
+ }
+ #endif
+ /*warren add for lynq atsvc on 2022/12/06 end*/
+ else if (dataType == AUDIO_TYPE) {
LOGATCI(LOG_INFO, "AUDIO COMMAND");
if (dataType == AUDIO_TYPE && s_fdAudio_command < 0) {
connectTarget(dataType);
diff --git a/src/telephonyware/3.0/atcid/atci/src/atcid_serial.h b/src/telephonyware/3.0/atcid/atci/src/atcid_serial.h
index 1e0a923..3c0ed52 100755
--- a/src/telephonyware/3.0/atcid/atci/src/atcid_serial.h
+++ b/src/telephonyware/3.0/atcid/atci/src/atcid_serial.h
@@ -91,6 +91,9 @@
BATTERY_TYPE = 6,
AUDIO_EXTERNAL_TYPE =7,
META_TYPE = 8,
+#ifdef LYNQ_ATSVC
+ LYNQ_CMD_TYPE = 9, //warren add for lynq atsvc on 2022/12/06 start
+#endif
} ATCI_DataType;
typedef enum{
@@ -120,6 +123,9 @@
int currDevice;
} Serial;
+#ifdef LYNQ_ATSVC
+extern Serial serial;//warren add for atsvc on 20221214
+#endif
static const char *s_MsgResponses[] = {
"OK",
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
new file mode 100755
index 0000000..3cd6be5
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
@@ -0,0 +1,507 @@
+#include <stdio.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <dlfcn.h>
+#include <pthread.h>
+#include "lynq_atsvc_controller.h"
+#include "atcid.h"
+#include "atcid_serial.h"
+#include "atcid_cmd_dispatch.h"
+#include "transfer_controller.h"
+#define FUNC __FUNCTION__
+#define LINE __LINE__
+
+#define SOCKET_ZERO 0
+#define SOCKET_SUCC 1
+#define SOCKET_FAIL -1
+#define SOCKET_BUF_SIZE 512
+char register_atcmd_buff[SOCKET_BUF_SIZE] = {0};
+char *white_list[] = {"AT","ATD","ATV","ATA","ATE","ATH","ATL","ATI","ATP","ATO","ATQ",NULL};
+int g_atsvc_socket_fd = 0;
+int g_atsvc_client_connect = 0;
+//struct sockaddr_in server_addr;
+//struct sockaddr_in lynqClient_addr;
+static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;
+int has_registe_cmd = 0;
+struct sockaddr_un g_remote_addr = {0};
+struct sockaddr_un g_local_addr = {0};
+
+typedef enum
+{
+ INIT_SUCCESS=0,
+ INIT_PULGIN_FAIL,
+ INIT_SOCKET_FAIL,
+ INIT_THREAD_FAIL
+}init_reuslt_t;
+
+typedef struct
+{
+ xmlChar* name;
+ xmlChar* reg;
+ xmlChar* cmd;
+}plugin_conf_t;
+
+plugin_msg_t plugin_msg_array[PLUGINE_MAX_COUNT] = {0};
+void upper_string(char *org_string)
+{
+ int len = strlen(org_string);
+ for(int i=0;i<len;i++)
+ {
+ if(org_string[i]>=97 && org_string[i]<=122)
+ {
+ org_string[i]=org_string[i]-32;
+ }
+ }
+ return;
+}
+
+void lynq_atsvc_outcb_entity(char *output,int out_size,int type)
+{
+ if(NULL == output)
+ {
+ ALOGE("output is null");
+ }
+ int length = 0;
+ length = strlen(output);
+ if(length != out_size)
+ {
+ ALOGD("strlen length != output");
+ }
+ ALOGD("ouput:%s,len:%d",output,out_size);
+ lynq_write_data_to_serail(output,out_size,type);
+}
+
+
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog)
+{
+ ALOGD("[%d][%s]start create socket",LINE,FUNC);
+ ALOGD("domain:%d,type:%d,protocol:%d,port:%d,IP:%s,socket_name:%s,backlog:%d",domain,type,protocol,port,IP,socket_name,backlog);
+ int socket_fd = -1;
+ char acBuf[1024] = {0};
+ struct sockaddr_un *local_addr = NULL;
+ local_addr = (struct sockaddr_un *)addr;
+ socket_fd = socket(domain, type,protocol);
+ if(0 > socket_fd)
+ {
+ ALOGD("create socket fail:fd = %d",socket_fd);
+ return socket_fd;
+ }
+ switch (domain)
+ {
+ case AF_UNIX:
+ {
+ if (strlen(socket_name) > sizeof(local_addr->sun_path) - 1)
+ {
+ ALOGD("Server socket path too long: %s", socket_name);
+ return (-strlen(socket_name));
+ }
+ if (remove(socket_name) == -1 && errno != ENOENT)
+ {
+ ALOGD("remove-%s fail and errno:%d", socket_name,errno);
+ }
+ ALOGD("remove %s", socket_name);
+ local_addr->sun_family = AF_UNIX;
+ sprintf(local_addr->sun_path, socket_name);
+ if(bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_un)) == -1)
+ {
+ ALOGD("[%d][%s]bind fail and errno: %d",LINE,FUNC,errno);
+ return -1;
+ }
+ if(type == SOCK_STREAM)
+ {
+ if(listen(socket_fd,backlog) == -1)
+ {
+ ALOGD("[%d]listen fd: %dfail",LINE);
+ return -1;
+ }
+ }
+ break;
+ }
+ case AF_INET:
+ {
+ break;
+ }
+ default:
+ break;
+ }
+ return socket_fd;
+}
+
+int send_msg(int socket_fd,const struct sockaddr *dest_addr,const char *msg)
+{
+ ALOGD("[%d][%s] msg is:%s",LINE,FUNC,msg);
+ int ret = 0;
+ ret = sendto(socket_fd,msg, sizeof(msg), 0, dest_addr, sizeof(dest_addr));
+ if(0 > ret)
+ {
+ ALOGD("sendto fail,ret:%d,errno:%d",ret,errno);
+ return ret;
+ }
+ else
+ {
+ ALOGD("sendto msg len:%d",ret);
+ ALOGD("return %d",0);
+ return 0;
+ }
+}
+int lynq_dispatch_atcmd(char* atcmd)
+{
+ ALOGD("[%d][%s] enter",LINE,FUNC);
+ char *needleP = NULL;
+ if(NULL == atcmd)
+ {
+ ALOGD("[%d][%s] atcmd is null",LINE,FUNC);
+ return -1;
+ }
+ ALOGD("[%d][%s]atcmd:%s",LINE,FUNC,atcmd);
+ char* line_cut = cut_cmd_line(atcmd);
+ if (line_cut == NULL)
+ {
+ ALOGD("[%d][%s]line_cut is null",LINE,FUNC);
+ return -1;
+ }
+ for(int i = 0;white_list[i];i++)
+ {
+ if(strcmp(line_cut,white_list[i]) == 0)
+ {
+ ALOGD("[%d][%s]count %d,pass atcmd:%s",LINE,FUNC,i,line_cut);
+ return -1;
+ }
+ }
+ for(int i = 0;i < PLUGINE_MAX_COUNT;i++)
+ {
+ ALOGD("i:%d,state:%d,atcmd:%s",i,plugin_msg_array[i].state,plugin_msg_array[i].atcmd);
+ if((plugin_msg_array[i].state == 1) && (NULL != plugin_msg_array[i].atcmd))
+ {
+ needleP =strstr(plugin_msg_array[i].atcmd,line_cut);
+ if(NULL != needleP)
+ {
+ ALOGD("[%d][%s] find atcmd:%s",LINE,FUNC,line_cut);
+ free(line_cut);
+ return i;
+ }
+ }
+ }
+ free(line_cut);
+ return -1;
+}
+
+
+int load_pulgin(const char * plugin_conf_path)
+{
+ ALOGD("[%d][%s]load pulgin",LINE,FUNC);
+ int count = 0;
+ char *atcmd = NULL;
+ int atcmd_len = 0;
+ xmlDocPtr pdoc = NULL;
+ xmlNodePtr root = NULL;
+ plugin_conf_t plugin_conf;
+ memset(plugin_msg_array,0,sizeof(plugin_msg_array));
+ pdoc = xmlReadFile(plugin_conf_path ,"UTF-8",XML_PARSE_RECOVER);
+ if(NULL == pdoc)
+ {
+ ALOGD("[%d][%s]open file %s" ,LINE,FUNC, plugin_conf_path);
+ return -1;
+ }
+ root = xmlDocGetRootElement(pdoc);
+ if(NULL == root)
+ {
+ ALOGD("get xmlDocGetRootElement() empty document fail");
+ return -1;
+ }
+ ALOGD("root->name :%s",root->name);
+ root = root->xmlChildrenNode;
+ while (root != NULL)
+ {
+ ALOGD("count is:%d",count);
+ if(PLUGINE_MAX_COUNT <= count)
+ {
+ ALOGD("plugin too many!!!");
+ break;
+ }
+ if ((!xmlStrcmp(root->name, (const xmlChar *)"module")))
+ {
+ ALOGD("find module");
+ plugin_conf.name = xmlGetProp(root, "name");
+ plugin_conf.reg = xmlGetProp(root, "register");
+ plugin_conf.cmd = xmlGetProp(root, "cmd");
+ if((NULL == plugin_conf.name)||(NULL == plugin_conf.reg)||(NULL == plugin_conf.cmd))
+ {
+ ALOGE("get prop fail,name:%s,reg:%s,cmd=%s",plugin_conf.name,plugin_conf.reg,plugin_conf.cmd);
+ root = root->next;
+ continue;
+ }
+ ALOGE("[%d][%s]plugin_conf name:%s,reg:%s,cmd=%s",LINE,FUNC,plugin_conf.name,plugin_conf.reg,plugin_conf.cmd);
+ plugin_msg_array[count].dlHandle_plugin = dlopen(plugin_conf.name, RTLD_NOW);
+ if(NULL == plugin_msg_array[count].dlHandle_plugin)
+ {
+ ALOGE("open lib %s fail",plugin_conf.name);
+ root = root->next;
+ continue;
+ }
+ ALOGD("plugin_msg_array[%d].dlHandle_plugin :%p",count,plugin_msg_array[count].dlHandle_plugin);
+ plugin_msg_array[count].register_module = (lynq_atsvc_incb(*)(lynq_atsvc_outcb out_cb))dlsym(plugin_msg_array[count].dlHandle_plugin, plugin_conf.reg);
+ if(NULL == plugin_msg_array[count].register_module)
+ {
+ ALOGD("open plugin_msg_array[%d].%p fail",count,plugin_msg_array[count].register_module);
+ ALOGD("dlsym failed: %s", dlerror());
+ root = root->next;
+ continue;
+ }
+ plugin_msg_array[count].atsvc_incb = plugin_msg_array[count].register_module(lynq_atsvc_outcb_entity);
+ if(NULL == plugin_msg_array[count].atsvc_incb)
+ {
+ ALOGE("call %s fail",plugin_conf.reg);
+ root = root->next;
+ continue;
+ }
+ atcmd_len = strlen(plugin_conf.cmd);
+ atcmd = (char *)malloc(atcmd_len*(sizeof(char)+1));
+ if(NULL == atcmd)
+ {
+ ALOGE("count %d atcmd malloc fail",count);
+ root = root->next;
+ continue;
+ }
+ plugin_msg_array[count].state = 1;
+ memcpy(atcmd,plugin_conf.cmd,atcmd_len);
+ atcmd[atcmd_len] = '\0';
+ //plugin_msg_array[count].atcmd = atcmd;
+ upper_string(atcmd);
+ plugin_msg_array[count].atcmd = atcmd;
+ count++;
+ }
+ root = root->next;
+ }
+ ALOGD("pcurnode->name return");
+ xmlFreeDoc(pdoc);
+ xmlCleanupParser();
+ return 0;
+}
+
+
+int lynq_check_extension_atcmd(char * atcmd)
+{
+ ALOGD("[%d][%s] enter",LINE,FUNC);
+ char *needleP = NULL;
+ if(NULL == atcmd)
+ {
+ ALOGD("[%d][%s] atcmd is null",LINE,FUNC);
+ return -1;
+ }
+ ALOGD("[%d][%s]atcmd:%s",LINE,FUNC,atcmd);
+ char* line_cut = cut_cmd_line(atcmd);
+ if (line_cut == NULL)
+ {
+ ALOGD("[%d][%s]line_cut is null",LINE,FUNC);
+ return -1;
+ }
+ for(int i = 0;white_list[i];i++)
+ {
+ if(strcmp(line_cut,white_list[i]) == 0)
+ {
+ ALOGD("[%d][%s]count %d,pass atcmd:%s",LINE,FUNC,i,line_cut);
+ return -1;
+ }
+ }
+ needleP =strstr(register_atcmd_buff,line_cut);
+ if(NULL != needleP)
+ {
+ ALOGD("[%d][%s] find atcmd:%s",LINE,FUNC,line_cut);
+ free(line_cut);
+ return 0;
+ }
+ free(line_cut);
+ return -1;
+}
+int send_msg_to_at_extension(char *atcmd,int size)
+{
+ LOGATCI(LOG_ERR,"[%d][%s] enter",LINE,FUNC);
+ if (g_atsvc_client_connect < 0)
+ {
+ LOGATCI(LOG_ERR, "fd invalid when send to atci service. errno = %d", errno);
+ return -1;
+ }
+ if(NULL == atcmd)
+ {
+ LOGATCI(LOG_ERR, "atcmd is null.");
+ return -1;
+ }
+ int sendLen = send(g_atsvc_client_connect, atcmd, size, 0);
+ if (sendLen != size)
+ {
+ LOGATCI(LOG_ERR, "lose data when send to atci service. errno = %d", errno);
+ return -1;
+ }
+ LOGATCI(LOG_DEBUG, "send to app demo: %s", atcmd);
+ return 0;
+}
+int actsvc_cmd_recv(int fd, char *buf, int len)
+{
+ int ret = 0;
+ fd_set rfds;
+ //FD_CLR(fd, &rfds);
+ FD_SET(fd, &rfds);
+ ret = select(fd + 1, &rfds, NULL, NULL, NULL);
+ if (ret <= 0)
+ {
+ ALOGE("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_FAIL;
+ }
+ if (FD_ISSET(fd, &rfds))
+ {
+ ret = recv(fd, buf, len, 0);
+ if (ret < 0)
+ {
+ ALOGE("acti_cmd_recv select error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_FAIL;
+ }
+ else if(ret == 0)
+ {
+ ALOGE("acti_cmd_recv recv error, ret=%d, error=%s(%d),fd=%d", ret,strerror(errno), errno, fd);
+ return SOCKET_ZERO;
+ }
+ else
+ {
+ ALOGD("[%d][%s] buf is:%s",LINE,FUNC,buf);
+ }
+ }
+ return SOCKET_SUCC;
+}
+
+void *start_at_extension_Socket(void * param)
+{
+ ALOGD("[%d][%s]enter",LINE,FUNC);
+ socklen_t client_len;
+ int ret;
+ char parser_buf[SOCKET_BUF_SIZE];
+ g_atsvc_socket_fd = create_socket(AF_UNIX, SOCK_STREAM,0, 0, NULL,RIL_SOCKET_NAME, (void *)&g_local_addr, 2);
+ if(0 > g_atsvc_socket_fd)
+ {
+ ALOGD("init socket fail and fd:%d",g_atsvc_socket_fd);
+ return NULL;
+ }
+ TryNewLink:
+ client_len = sizeof(g_local_addr);
+ int conn = accept(g_atsvc_socket_fd,(struct sockaddr *) &g_local_addr, &client_len);
+ if (conn <= 0)
+ {
+ ALOGE("[%d][%s] accept error!",LINE,FUNC);
+ close(conn);
+ return NULL;
+ }
+ ALOGD("Accept a client , fd is %d", conn);
+ if(g_atsvc_client_connect >= 0)
+ {
+ ALOGE("g_atsvc_client_connect need close!");
+ close(g_atsvc_client_connect);
+ g_atsvc_client_connect = -1;
+ }
+ g_atsvc_client_connect = conn;
+ /* tranlate data */
+ while (true)
+ {
+ memset(parser_buf, 0, sizeof(parser_buf));
+ if(has_registe_cmd == 0)
+ {
+ memset(register_atcmd_buff, 0, sizeof(register_atcmd_buff));
+ ret = actsvc_cmd_recv(conn, register_atcmd_buff, SOCKET_BUF_SIZE);
+ upper_string(register_atcmd_buff);
+ if (ret < 0)
+ {
+ ALOGE("[%d][%s]receive CMD error",LINE,FUNC);
+ continue;
+ }
+ else if(ret == SOCKET_ZERO)
+ {
+ ALOGE("maybe client socket closed 1. retry new link!");
+ goto TryNewLink;
+ }
+ has_registe_cmd = 1;
+ }
+ else
+ {
+ ret = actsvc_cmd_recv(conn, parser_buf, SOCKET_BUF_SIZE);
+ if (ret < 0)
+ {
+ ALOGE("[%d][%s]receive CMD error",LINE,FUNC);
+ continue;
+ }
+ else if(ret == SOCKET_ZERO)
+ {
+ ALOGE("maybe client socket closed 1. retry new link!");
+ goto TryNewLink;
+ }
+ lynq_write_data_to_serail(parser_buf,strlen(parser_buf),0);
+ }
+ }
+ return NULL;
+}
+
+void start_at_extension_loop(void)
+{
+ pthread_t at_extension_socket_thread;
+ ALOGD("[%d][%s]enter",LINE,FUNC);
+ pthread_mutex_lock(&s_startupMutex);
+
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+
+ int result = pthread_create(&at_extension_socket_thread, &attr, start_at_extension_Socket, NULL);
+ if (result != 0)
+ {
+ ALOGE("Failed to create ATCI thread: %s", strerror(result));
+ goto done;
+ }
+done:
+ pthread_mutex_unlock(&s_startupMutex);
+}
+
+int lynq_atsvc_init(int count,const char * plugin_conf_path)
+{
+ ALOGD("start [%d][%s]",LINE,FUNC);
+ int res = 0;
+ /*
+ g_atsvc_socket_fd = create_socket(AF_UNIX, SOCK_STREAM,0, 0, NULL,RIL_SOCKET_NAME, (void *)&g_local_addr, 2);
+ if(0 > g_atsvc_socket_fd)
+ {
+ ALOGD("init socket fail and fd:%d",g_atsvc_socket_fd);
+ //return INIT_SOCKET_FAIL;
+ }
+ */
+ res = init_pseudo_terminal();
+ if(res != 0)
+ {
+ ALOGD("init pseudo terminal fail");
+ }
+ start_at_extension_loop();
+ res = load_pulgin(PLUGIN_CONF_PATH);
+ if(0 > res)
+ {
+ for(int i = 0;i < PLUGINE_MAX_COUNT; i++)
+ {
+ if(NULL != plugin_msg_array[i].atcmd)
+ {
+ free(plugin_msg_array[i].atcmd);
+ }
+ }
+ ALOGD("load_pulgin fail,code is %d",res);
+ return INIT_PULGIN_FAIL;
+ }
+ for(int i = 0;i < PLUGINE_MAX_COUNT; i++)
+ {
+ if(NULL != plugin_msg_array[i].atcmd)
+ {
+ ALOGD("atcmd:%s",plugin_msg_array[i].atcmd);
+ }
+ }
+ //todo at liblynq-at-extension
+ /*create thread for reacive ril msg*/
+ /*load pulgin from plugin config*/
+ return 0;
+}
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.h b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.h
new file mode 100755
index 0000000..549f6a7
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.h
@@ -0,0 +1,85 @@
+/**********************************************************************************************
+* @file lynq_atsvc_controller.h
+* @brief Control the initialization of lynq at, and dispacthing, etc.
+* @details None
+* @author Hong Liu。
+* @date 2022-11-24
+* @version V1.0
+* @copyright Copyright (c) MobileTek
+***********************************************************************************************/
+
+
+#ifndef LYNQ_ATSVC_COBTROLLER_H
+#define LYNQ_ATSVC_COBTROLLER_H 1
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <pthread.h>
+#define PLUGIN_CONF_PATH "/data/atsvc/lynq_atsvc_plugin.xml"
+#define RIL_SOCKET_NAME "/dev/socket/lynq_atsvc_socket_1"
+#define PLUGINE_MAX_COUNT 16
+
+
+
+/**********************************************************************************************
+* @brief this is a callback function,atsvc will call this function if the at command is this \
+**module command
+* @param input [IN] at command
+* @param length [IN] at command length
+* @return NULL
+************************************************************************************************/
+typedef void ( *lynq_atsvc_incb )(const char *input,const int length);
+
+/**********************************************************************************************
+* @brief this is a callback function,plugin will call this function when the plugin needs to \
+**return the response or urc
+* @param input [IN] response or urc
+* @param length [IN] response or urc length
+* @param type
+** 0:response
+** 1:unsolictedresponse
+* @return NULL
+************************************************************************************************/
+typedef void ( *lynq_atsvc_outcb )(char *output,int out_size,int type);
+
+/**********************************************************************************************
+* @brief this is a register function, atsvc will call this function when a plugin register in atsvc.
+* @param lynq_atsvc_outcb [IN]
+* @return lynq_atsvc_incb
+************************************************************************************************/
+typedef lynq_atsvc_incb (*lynq_register_module)(lynq_atsvc_outcb out_cb);
+
+
+typedef struct
+{
+ lynq_atsvc_incb atsvc_incb;
+ lynq_register_module register_module;
+ void *dlHandle_plugin;
+ char * atcmd;
+ int state;
+}plugin_msg_t;
+
+extern plugin_msg_t plugin_msg_array[PLUGINE_MAX_COUNT];
+extern int has_registe_cmd;
+/**********************************************************************************************
+* @brief initalize lynq atsvc,it will load plugin and create socket process
+* @param plugin_conf_path [IN] plugin config file path
+* @return
+* 0:success
+* 1:load pugin config file fail
+* 2:create socket fail
+* 3:create thread fail
+************************************************************************************************/
+int lynq_atsvc_init(int count,const char * plugin_conf_path);
+int lynq_check_extension_atcmd(char * atcmd);
+int send_msg_to_at_extension(char *atcmd,int size);
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog);
+int send_msg(int socket_fd,const struct sockaddr *dest_addr,const char *msg);
+int lynq_dispatch_atcmd(char* atcmd);
+
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_plugin.xml b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_plugin.xml
new file mode 100755
index 0000000..f4a3de8
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lynq_atsvc_plugin >
+ <module name="/lib64/liblynq-test-data.so"
+ register="lynq_register_test_data"
+ cmd="AT+LETEST;AT+LEABC;AT+LEDEF"
+ />
+ <module name="/lib64/liblynq-gnss.so"
+ register="lynq_register_gnss"
+ cmd="AT+CGPS;AT+CGPSNMEA"
+ />
+ <module name="/lib64/liblynq-at-common.so"
+ register="lynq_register_at_common"
+ cmd="AT+MNETCALL;AT+GTARNDIS;AT+CGIR;AT+LGMDS;AT+LRNDISHANDLE"
+ />
+ <module name="/lib64/liblynq-at-factory.so"
+ register="lynq_register_at_factory"
+ cmd="AT+LYNQFACTORY"
+ />
+ <module name="/lib64/liblynq-at-fota.so"
+ register="lynq_register_fota"
+ cmd="AT+FOTA;AT+LYNQFOTA"
+ />
+</lynq_atsvc_plugin>
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/terminal_controller.conf b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/terminal_controller.conf
new file mode 100755
index 0000000..c495c76
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/terminal_controller.conf
@@ -0,0 +1,6 @@
+#ttyGS0:0
+#ttyGS1:1
+#ttyGS3:2
+#ttyGS4:3
+CONF_PORT_ATIO:0
+CONF_PORT_ATURC:0
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c
new file mode 100755
index 0000000..4d5bd8f
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c
@@ -0,0 +1,330 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <termios.h>
+#include <sys/select.h>
+/* According to earlier standards */
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+
+#include "transfer_controller.h"
+#include "atcid_serial.h"
+typedef struct
+{
+ int serial_io_port;
+ int serial_urc_port;
+ int io_fd;
+ int urc_fd;
+}port_conf_t;
+
+port_conf_t port_config;
+
+static int conf_to_colon(char *p_cur)
+{
+ if (p_cur == NULL)
+ {
+ return -1;
+ }
+ p_cur = strchr(p_cur, ':');
+ if (p_cur == NULL)
+ {
+ return -1;
+ }
+ ALOGD("line:%s",p_cur+1);
+ return atoi(p_cur+1);
+}
+
+char* map_device(int device_id)
+{
+ switch (device_id)
+ {
+ case L_TTY_GS0:
+ return "/dev/ttyGS0";
+ case L_TTY_GS1:
+ return "/dev/ttyGS1";
+ case L_TTY_GS3:
+ return "/dev/ttyGS3";
+ case L_TTY_GS4:
+ return "/dev/ttyGS4";
+ default:
+ return "unkonw";
+ }
+ return NULL;
+}
+int parse_terminal_config(char *path, port_conf_t * port_conf)
+{
+ ALOGD("[%d][%s] enter",__LINE__,__FUNCTION__);
+ FILE *fp;
+ const char *at_io = "CONF_PORT_ATIO";
+ const char *at_urc = "CONF_PORT_ATURC";
+ char *needle = NULL;
+ int conut = 0;
+ int ret = 0;
+ char line[100] = {0};
+ fp=fopen(path,"r");
+ if(fp==NULL)
+ {
+ ALOGD("can not load file!");
+ return -1;
+ }
+ while(!feof(fp))
+ {
+ memset(line,0,100);
+ fgets(line,100,fp);
+ ALOGD("%d:%s",conut,line);
+ needle = NULL;
+ needle = strstr(line,at_io);
+ if(NULL != needle)
+ {
+ ret = conf_to_colon(line);
+ if(ret >= 0 && ret <= 3)
+ {
+ port_conf->serial_io_port = ret;
+ }
+ ALOGD("line:%s:ret:%d",line,ret);
+ }
+ needle = NULL;
+ needle = strstr(line,at_urc);
+ if(NULL != needle)
+ {
+ ret = conf_to_colon(line);
+ if(ret >= 0 && ret <= 3)
+ {
+ port_conf->serial_urc_port = ret;
+ }
+ ALOGD("urc line:%s:ret:%d",line,ret);
+ }
+ conut++;
+ }
+ fclose(fp);
+ return 0;
+}
+
+
+/*
+* Purpose: Open and initialize the serial device used.
+* Input: device_id - the serial port
+* Return: 0 if port successfully opened, else -1.
+*/
+int open_serial_device_with_id(int device_id,int type)
+{
+ LOGATCI(LOG_DEBUG, "Enter,device_id:%d,type=%d",device_id,type);
+ int fdflags;
+ struct termios deviceOptions;
+ int fd = INVALIDE_SOCKET_FD;
+ int ret = 0;
+ char *devicename = NULL;
+ devicename = map_device(device_id);
+ LOGATCI(LOG_INFO, "Opened serial port:%s", devicename);
+
+ do {
+ fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);
+ } while (fd < 0 && errno == EINTR);
+
+ if(fd < 0) {
+ LOGATCI(LOG_ERR, "Fail to open serial device(%s) with error code:%d", devicename, errno);
+ return INVALIDE_SOCKET_FD;
+ }
+
+ LOGATCI(LOG_DEBUG, "serial->fd is %d ", fd);
+
+ // Set FD to Sync IO
+ fdflags = fcntl(fd, F_GETFL);
+ ret = fcntl(fd, F_SETFL, fdflags & ~O_NONBLOCK);
+ if (ret < 0) {
+ LOGATCI(LOG_ERR, "Error clearing O_NONBLOCK errno: %d", errno);
+ }
+
+ // get the parameters
+ tcgetattr(fd,&deviceOptions);
+
+ // set raw input
+ //deviceOptions.c_lflag = ICANON | ECHO;
+ // set raw output
+ deviceOptions.c_oflag &= ~OPOST;
+ deviceOptions.c_oflag &= ~OLCUC;
+ deviceOptions.c_oflag &= ~ONLRET;
+ deviceOptions.c_oflag &= ~ONOCR;
+ deviceOptions.c_oflag &= ~OCRNL;
+
+ deviceOptions.c_cc[VEOL] = 0x1a; /*Ctrl+Z*/
+ deviceOptions.c_lflag = deviceOptions.c_lflag | IEXTEN;
+ deviceOptions.c_cc[VEOL2] = 0x1b; /*ESC*/
+
+ tcflush(fd, TCIFLUSH);
+ tcsetattr(fd,TCSANOW,&deviceOptions);
+ if(type == L_URC_TYPE)
+ {
+ port_config.urc_fd = fd;
+ }
+ else if(type == L_RESP_TYPE)
+ {
+ port_config.io_fd = fd;
+ }
+ else
+ {
+ LOGATCI(LOG_ERR, "type is invalid:%d",type);
+ }
+ return fd;
+}
+
+
+
+
+int init_pseudo_terminal()
+{
+ ALOGD("[%d][%s] enter",__LINE__,__FUNCTION__);
+ int ret = 0;
+ bool init_default = true;
+ port_config.io_fd = -1;
+ port_config.urc_fd = -1;
+ port_config.serial_io_port = -1;
+ port_config.serial_urc_port = -1;
+ ret = parse_terminal_config(TERMINAL_CONF_PATH, &port_config);
+ if(ret < 0)
+ {
+ ALOGD("parse terminal fail,init defualt prot");
+ init_default = false;
+ port_config.serial_io_port = L_TTY_GS0;
+ port_config.serial_urc_port = L_TTY_GS0;
+ }
+ //todo init device
+ //just init urc port,why not init io port?Because this function is executed earlier than [atcid.c line 112]open_serial_device(),
+ //it will cause logic confusion.
+ if(port_config.serial_urc_port != L_TTY_GS0)
+ {
+ ALOGD("[%d][%s] init urc port %d",__LINE__,__FUNCTION__,port_config.serial_urc_port);
+ if(open_serial_device_with_id(port_config.serial_urc_port,L_URC_TYPE)!=0)
+ {
+ ALOGD("[%d][%s] init urc port fail,serial_urc_port:%d,urc_fd:%d",__LINE__,__FUNCTION__,port_config.serial_urc_port,port_config.urc_fd);
+ }
+ }
+ return 0;
+}
+
+void write_data_to_serial_with_port(int serial_port,int type,char *output,int out_size)
+{
+ ALOGD("serial_io_port:%d,type%d,output:%s,out_size:%d",serial_port,type,output,out_size);
+ int write_len = 0;
+ char buffer[out_size+1];
+ int output_len = 0;
+ int count=0;
+ memset(buffer,0,out_size+1);
+ if(NULL == output)
+ {
+ ALOGE("output is null");
+ return;
+ }
+ output_len = strlen(output);
+ if(out_size != output_len)
+ {
+ ALOGD("output len not equal to out_size,and send output,output_len = %d",output_len);
+ if(out_size > output_len)
+ {
+ memcpy(buffer,output,output_len);
+ }
+ else
+ {
+ memcpy(buffer,output,out_size);
+ buffer[out_size] = '\0';
+ output_len = out_size+1;
+ }
+ }
+ else
+ {
+ memcpy(buffer,output,output_len);
+ }
+ ALOGD("output_len = %d",output_len);
+ if(strcmp(serial.devicename[0],map_device(serial_port)) == 0)
+ {
+ ALOGD("[%s] use writeDataToSerial",__FUNCTION__);
+ writeDataToSerial(buffer,output_len);
+ return;
+ }
+ if(type == L_RESP_TYPE)
+ {
+ if(port_config.io_fd < 0)
+ {
+ ALOGE("io fd don`t opened");
+ return;
+ }
+ resp_try_write:
+ write_len = write(port_config.io_fd, buffer,output_len);
+ if(write_len != output_len)
+ {
+ LOGATCI(LOG_DEBUG, "resp wirte_line=%d,output_len=%d,errno:%d!",write_len,output_len,errno);
+ if(write_len == -1)
+ {//meybe usb has change,eg.switch adb to rndis mode,or rndis to adb mode,so we need reopen,the reopen time is 5.
+ if(count < 5)
+ {
+ close(port_config.io_fd);
+ init_pseudo_terminal();
+ usleep(500*1000);
+ count++;
+ LOGATCI(LOG_DEBUG, "retry times = %d",count);
+ goto resp_try_write;
+ }
+ }
+ }
+ LOGATCI(LOG_DEBUG, "resp wirte_line=%d,output_len=%d!",write_len,output_len);
+ }
+ else if(type == L_URC_TYPE)
+ {
+ if(port_config.urc_fd < 0)
+ {
+ ALOGE("urc fd don`t opened");
+ return;
+ }
+ urc_try_write:
+ write_len = write(port_config.urc_fd, buffer,output_len);
+ if(write_len != output_len)
+ {
+ LOGATCI(LOG_DEBUG, "urc wirte_line=%d,output_len=%d,errno:%d!",write_len,output_len,errno);
+ if(write_len == -1)//meybe usb has change,eg.switch adb to rndis mode,or rndis to adb mode,so we need reopen,the reopen time is 5.
+ {
+ if(count < 5)
+ {
+ close(port_config.urc_fd);
+ init_pseudo_terminal();
+ usleep(100*1000);
+ count++;
+ LOGATCI(LOG_DEBUG, "retry times = %d",count);
+ goto urc_try_write;
+ }
+ }
+ }
+ LOGATCI(LOG_DEBUG, "urc wirte_line=%d,output_len=%d!",write_len,output_len);
+ }
+ else
+ {
+ ALOGE("the type is invalid");
+ }
+ LOGATCI(LOG_DEBUG, "end retry times = %d",count);
+ return;
+}
+
+
+void lynq_write_data_to_serail(char *output,int out_size,int type)
+{
+ if(type == L_RESP_TYPE)
+ {
+ ALOGD("device:%s,total:%d,current:%d",serial.devicename[0],serial.totalSize,serial.currDevice);
+ if(strcmp(serial.devicename[0],map_device(port_config.serial_io_port)) == 0)
+ {
+ ALOGD("use writeDataToSerial");
+ writeDataToSerial(output,out_size);
+ }
+ else
+ {
+ write_data_to_serial_with_port(port_config.serial_io_port,L_RESP_TYPE,output,out_size);
+ }
+ }
+ else if(type == L_URC_TYPE)
+ {
+ write_data_to_serial_with_port(port_config.serial_urc_port,L_URC_TYPE,output,out_size);
+ }
+ return;
+}
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.h b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.h
new file mode 100755
index 0000000..52c82cc
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.h
@@ -0,0 +1,18 @@
+/**********************************************************************************************
+* @file transfer_controller.h
+* @brief Control the data transfer to whicth serial,etc.
+* @details None
+* @author Hong Liu。
+* @date 2022-12-13
+* @version V1.0
+* @copyright Copyright (c) MobileTek
+***********************************************************************************************/
+#define L_TTY_GS0 0
+#define L_TTY_GS1 1
+#define L_TTY_GS3 2
+#define L_TTY_GS4 3
+#define L_RESP_TYPE 0
+#define L_URC_TYPE 1
+#define TERMINAL_CONF_PATH "/data/atsvc/terminal_controller.conf"
+void lynq_write_data_to_serail(char *output,int out_size,int type);
+
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.c
new file mode 100644
index 0000000..792d600
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.c
@@ -0,0 +1 @@
+#
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.h b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.h
new file mode 100644
index 0000000..792d600
--- /dev/null
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_queue.h
@@ -0,0 +1 @@
+#
diff --git a/src/telephonyware/3.0/atcid/atci/src/platform/atcid_adaptation.cpp b/src/telephonyware/3.0/atcid/atci/src/platform/atcid_adaptation.cpp
index 29d17da..8038fb8 100755
--- a/src/telephonyware/3.0/atcid/atci/src/platform/atcid_adaptation.cpp
+++ b/src/telephonyware/3.0/atcid/atci/src/platform/atcid_adaptation.cpp
@@ -259,7 +259,7 @@
#include <unistd.h>
#include <sys/un.h>
-#define ATCI_SERVICE_SOCKET "atci_server_socket"
+#define ATCI_SERVICE_SOCKET "/dev/socket/atci_server_socket"
int socket_local_client (char* name) {
struct sockaddr_un server;
diff --git a/src/telephonyware/3.0/atcid/atci_service/src/atci_service.h b/src/telephonyware/3.0/atcid/atci_service/src/atci_service.h
index b4b1029..788905f 100755
--- a/src/telephonyware/3.0/atcid/atci_service/src/atci_service.h
+++ b/src/telephonyware/3.0/atcid/atci_service/src/atci_service.h
@@ -47,13 +47,42 @@
#ifdef ANDROID
#include <utils/Log.h>
#endif
+//just dummy defines since were not including syslog.h.
+#define LOG_EMERG 0
+#define LOG_ALERT 1
+#define LOG_CRIT 2
+#define LOG_ERR 3
+#define LOG_WARNING 4
+#define LOG_NOTICE 5
+#define LOG_INFO 6
+#define LOG_DEBUG 7
-#define UNUSED(x) do { (void)(x); } while (0)
+#define syslog_level LOG_DEBUG
+#ifdef TELEMATICS
+#define ALOGD(...) {\
+ syslog(LOG_DEBUG, ## __VA_ARGS__);}
+#define ALOGE(...) {\
+ syslog(LOG_ERR, ## __VA_ARGS__);}
+#define ALOGW(...) {\
+ syslog(LOG_WARNING, ## __VA_ARGS__);}
+#define ALOGI(...) {\
+ syslog(LOG_INFO, ## __VA_ARGS__);}
+#else
#define ALOGD printf
#define ALOGE printf
#define ALOGW printf
#define ALOGI printf
+#endif
+
+#define LOGATCI(lvl, f, ...) do { \
+ if (lvl <= LOG_ERR) {ALOGE("[ATCI] %d:%s(): " f "\n", __LINE__, __FUNCTION__, ##__VA_ARGS__);} \
+ else if (lvl == LOG_WARNING) {ALOGW("[ATCI] %d:%s(): " f "\n", __LINE__, __FUNCTION__, ##__VA_ARGS__);} \
+ else if (lvl <= LOG_INFO) {ALOGI("[ATCI] %d:%s(): " f "\n", __LINE__, __FUNCTION__, ##__VA_ARGS__);} \
+ else if (lvl == LOG_DEBUG) {ALOGD("[ATCI] %d:%s(): " f "\n", __LINE__, __FUNCTION__, ##__VA_ARGS__);} \
+ } while (0)
+
+#define UNUSED(x) do { (void)(x); } while (0)
extern void process_mmi_response(char* data, int dataLen);
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ims/RpImsController.h b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ims/RpImsController.h
index 97efabc..5b081b9 100644
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ims/RpImsController.h
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/ims/RpImsController.h
@@ -43,7 +43,11 @@
#include "RfxTimer.h"
#include <utils/Vector.h>
-
+/*jb.qi change for channel 228 resume on 2022.11.18 start*/
+#include "mipc_msg_host.h"
+#include "mipc_msg_tlv_const.h"
+#include "mipc_msg_tlv_api.h"
+/*jb.qi change for channel 228 resume on 2022.11.18 end */
/*****************************************************************************
* Class RpDataController
*****************************************************************************/
@@ -67,5 +71,6 @@
virtual void handleImsRegistrationState(const sp<RfxMessage>& request);
};
+void mipc_ims_state_ind_cb(mipc_msg_t *msg_ptr, void *priv_ptr); //jb.qi change for channel 228 resume on 2022.11.18
#endif /* __RP_SYS_CONTROLLER_H__ */
diff --git a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
index 0d02dd2..2f39946 100755
--- a/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
+++ b/src/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/network/RpNwController.cpp
@@ -39,7 +39,7 @@
*****************************************************************************/
#include "RpNwController.h"
-
+#include "../ims/RpImsController.h"
#include <sys/un.h>
#include <errno.h>
#include <unistd.h>
@@ -663,6 +663,11 @@
uint32_t count = 0;
uint32_t gsm_cell_count, utms_cell_count,lte_cell_count,nr_cell_count;
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ int INVALID = INT_MAX; // 0x7FFFFFFF;
+ int INVALID_IE = 0XFF;
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
gsm_cell_count = mipc_nw_ecell_ind_get_gsm_cell_count(msg_ptr,0);
utms_cell_count = mipc_nw_ecell_ind_get_umts_cell_count(msg_ptr,0);
lte_cell_count = mipc_nw_ecell_ind_get_lte_cell_count(msg_ptr,0);
@@ -734,6 +739,41 @@
mipc_nw_lte_cell_struct4* lte_cell = mipc_nw_ecell_ind_get_lte_cell_list(msg_ptr,NULL);
if(lte_cell != NULL) {
for(uint32_t i = 0; i < lte_cell_count; i++) {
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+#if 0
+ int aosp_rsrp =
+ lte_cell->rsrp_in_qdbm != INVALID ? -lte_cell->rsrp_in_qdbm / 4 : INVALID;
+ if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
+ else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+
+ int aosp_rsrq =
+ lte_cell->rsrq_in_qdbm != INVALID ? -lte_cell->rsrq_in_qdbm / 4 : INVALID;
+ if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
+ else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
+#else
+ int aosp_rsrp =
+ lte_cell->rsrp != INVALID ? (141 - lte_cell->rsrp) : INVALID;
+ if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
+ else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+
+ int aosp_rsrq =
+ lte_cell->rsrq != INVALID ? ((40 - lte_cell->rsrq) >> 1) : INVALID;
+ if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
+ else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
+#endif
+ int aosp_cqi = lte_cell->cqi;
+ if (aosp_cqi < 0 && aosp_cqi != INVALID) aosp_cqi = 0;
+ else if (aosp_cqi > 15 && aosp_cqi != INVALID) aosp_cqi = 15;
+
+ int aosp_ta = lte_cell->ta != INVALID ? (int)(lte_cell->ta) : INVALID;
+ if (aosp_ta < 0 && aosp_ta != INVALID) aosp_ta = 0;
+ else if (aosp_ta > 0x7FFFFFFE && aosp_ta != INVALID) aosp_ta = 0x7FFFFFFE;
+
+ RFX_LOG_D(RFX_LOG_TAG,"lte_cell_count: aosp_rsrp:%d, aosp_rsrq:%d, aosp_cqi:%d, aosp_ta:%d",
+ aosp_rsrp, aosp_rsrq, aosp_cqi, aosp_ta);
+ RFX_LOG_D(RFX_LOG_TAG,"lte_cell_count: rsrp:%d, rsrq:%d, rsrp_in_qdbm:%d, rsrq_in_qdbm:%d, rssnr:%d, cqi:%d, ta:%d",
+ lte_cell->rsrp, lte_cell->rsrq, lte_cell->rsrp_in_qdbm, lte_cell->rsrq_in_qdbm, lte_cell->rssnr, lte_cell->cqi, lte_cell->ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
p->writeInt32(RIL_CELL_INFO_TYPE_LTE);
p->writeInt32(lte_cell->state);
p->writeInt32(0);
@@ -746,12 +786,16 @@
p->writeInt32(lte_cell->physical_cell_id);
p->writeInt32(lte_cell->tac);
p->writeInt32(lte_cell->earfcn);
- p->writeInt32(lte_cell->rsrp);//signalStrength not in mipc // parameter
- p->writeInt32(lte_cell->rsrp);
- p->writeInt32(lte_cell->rsrq);
- p->writeInt32(lte_cell->rssnr);//rssnr not in mipc // parameter
- p->writeInt32(lte_cell->cqi);//cqi not in mipc // parameter
- p->writeInt32(lte_cell->ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ /* For LTE, the ext1((rssnr)) in +ECELL is rssi, and format follows 27.007 +CSQ. alps05878992 */
+ p->writeInt32(lte_cell->rssnr); //signalStrength
+ p->writeInt32(aosp_rsrp);
+ p->writeInt32(aosp_rsrq);
+ /*For LTE, rssnr is not reported. alps05878992 */
+ p->writeInt32(0); //rssnr
+ p->writeInt32(aosp_cqi); //cqi
+ p->writeInt32(aosp_ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
}
}
}
@@ -760,6 +804,44 @@
mipc_nw_nr_cell_struct4* nr_cell = mipc_nw_ecell_ind_get_nr_cell_list(msg_ptr,NULL);
if(nr_cell != NULL) {
for(uint32_t i = 0; i < nr_cell_count; i++) {
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ int aosp_nr_ssrsrp =
+ nr_cell->rsrp != INVALID_IE ? (157 - nr_cell->rsrp) : INVALID;
+ if (aosp_nr_ssrsrp > 140 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 140;
+ else if (aosp_nr_ssrsrp < 44 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 44;
+
+ int aosp_nr_ssrsrq =
+ nr_cell->rsrq != INVALID_IE ? ((87 - nr_cell->rsrq) >> 1) : INVALID;
+ if (aosp_nr_ssrsrq > 20 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 20;
+ else if (aosp_nr_ssrsrq < 3 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 3;
+
+ int aosp_nr_sssinr =
+ nr_cell->sinr != INVALID_IE ? ((nr_cell->sinr - 47) >> 1) : INVALID;
+ if (aosp_nr_sssinr > 40 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = 40;
+ else if (aosp_nr_sssinr < -23 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = -23;
+
+ int aosp_nr_csirsrp =
+ nr_cell->csirsrp != INVALID_IE ? (157 - nr_cell->csirsrp) : INVALID;
+ if (aosp_nr_csirsrp > 140 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 140;
+ else if (aosp_nr_csirsrp < 44 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 44;
+
+ int aosp_nr_csirsrq =
+ nr_cell->csirsrq != INVALID_IE ? ((87 - nr_cell->csirsrq) >> 1) : INVALID;
+ if (aosp_nr_csirsrq > 20 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 20;
+ else if (aosp_nr_csirsrq < 3 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 3;
+
+ int aosp_nr_csisinr =
+ nr_cell->csisinr != INVALID_IE ? ((nr_cell->csisinr - 47) >> 1) : INVALID;
+ if (aosp_nr_csisinr > 40 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = 40;
+ else if (aosp_nr_csisinr < -23 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = -23;
+
+ RFX_LOG_D(RFX_LOG_TAG,"nr_cell_count: aosp_nr_ssrsrp:%d, aosp_nr_ssrsrq:%d, aosp_nr_sssinr:%d, \
+ aosp_nr_csirsrp:%d, aosp_nr_csirsrq:%d, aosp_nr_csisinr:%d",
+ aosp_nr_ssrsrp, aosp_nr_ssrsrq, aosp_nr_sssinr, aosp_nr_csirsrp, aosp_nr_csirsrq, aosp_nr_csisinr);
+
+ RFX_LOG_D(RFX_LOG_TAG,"nr_cell_count: nr_cell->rsrp:%d, nr_cell->rsrq:%d, nr_cell->sinr:%d, nr_cell->csirsrp:%d, nr_cell->csirsrq:%d, nr_cell->csisinr:%d",
+ nr_cell->rsrp, nr_cell->rsrq, nr_cell->sinr, nr_cell->csirsrp, nr_cell->csirsrq, nr_cell->csisinr);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
p->writeInt32(RIL_CELL_INFO_TYPE_NR);
p->writeInt32(nr_cell->state);
p->writeInt32(0);
@@ -773,12 +855,14 @@
p->writeInt32(nr_cell->physical_cell_id);
p->writeInt32(nr_cell->tac);
p->writeInt32(nr_cell->nr_arfcn);
- p->writeInt32(nr_cell->rsrp);
- p->writeInt32(nr_cell->rsrq);
- p->writeInt32(nr_cell->sinr);
- p->writeInt32(nr_cell->csirsrp); //csirsrp
- p->writeInt32(nr_cell->csirsrq); //csirsrq
- p->writeInt32(nr_cell->csisinr); //csisinr
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ p->writeInt32(aosp_nr_ssrsrp);
+ p->writeInt32(aosp_nr_ssrsrq);
+ p->writeInt32(aosp_nr_sssinr);
+ p->writeInt32(aosp_nr_csirsrp); //csirsrp
+ p->writeInt32(aosp_nr_csirsrq); //csirsrq
+ p->writeInt32(aosp_nr_csisinr); //csisinr
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
}
}
}
@@ -1249,7 +1333,10 @@
{
RFX_LOG_D(RFX_LOG_TAG,"mipc_get_cell_info_cb result_code %d\n",result_ptr->result_code);
RFX_LOG_D(RFX_LOG_TAG,"result_code:%d,cell_list_count:%d\n", result_ptr->result_code, result_ptr->cell_list_count);
-
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ int INVALID = INT_MAX; // 0x7FFFFFFF;
+ int INVALID_IE = 0XFF;
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
if(result_ptr->result_code != MIPC_RESULT_SUCCESS) {
//result code to ril error transfer
rfx_enqueue_response_message(NULL,cb_priv_ptr,mipc_sim_id_to_slot_id(sim_ps_id),result_ptr->result_code);
@@ -1299,6 +1386,47 @@
break;
}
case RIL_CELL_INFO_TYPE_LTE: {
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+#if 0
+ int aosp_rsrp =
+ result_ptr->cell_list[i].u.lte_cell.rsrp_in_qdbm != INVALID ? -result_ptr->cell_list[i].u.lte_cell.rsrp_in_qdbm / 4 : INVALID;
+ if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
+ else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+
+ int aosp_rsrq =
+ result_ptr->cell_list[i].u.lte_cell.rsrq_in_qdbm != INVALID_IE ? -result_ptr->cell_list[i].u.lte_cell.rsrq_in_qdbm / 4 : INVALID;
+ if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
+ else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
+#else
+ int aosp_rsrp =
+ result_ptr->cell_list[i].u.lte_cell.rsrp != INVALID ? (141 - result_ptr->cell_list[i].u.lte_cell.rsrp) : INVALID;
+ if (aosp_rsrp > 140 && aosp_rsrp != INVALID) aosp_rsrp = 140;
+ else if (aosp_rsrp < 44 && aosp_rsrp != INVALID) aosp_rsrp = 44;
+
+ int aosp_rsrq =
+ result_ptr->cell_list[i].u.lte_cell.rsrq != INVALID_IE ? ((40 - result_ptr->cell_list[i].u.lte_cell.rsrq) >> 1) : INVALID;
+ if (aosp_rsrq > 20 && aosp_rsrq != INVALID) aosp_rsrq = 20;
+ else if (aosp_rsrq < 3 && aosp_rsrq != INVALID) aosp_rsrq = 3;
+#endif
+ int aosp_cqi = result_ptr->cell_list[i].u.lte_cell.cqi;
+ if (aosp_cqi < 0 && aosp_cqi != INVALID) aosp_cqi = 0;
+ else if (aosp_cqi > 15 && aosp_cqi != INVALID) aosp_cqi = 15;
+
+ int aosp_ta = result_ptr->cell_list[i].u.lte_cell.ta != INVALID ? (int)(result_ptr->cell_list[i].u.lte_cell.ta) : INVALID;
+ if (aosp_ta < 0 && aosp_ta != INVALID) aosp_ta = 0;
+ else if (aosp_ta > 0x7FFFFFFE && aosp_ta != INVALID) aosp_ta = 0x7FFFFFFE;
+
+ RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_LTE: aosp_rsrp:%d, aosp_rsrq:%d, aosp_cqi:%d, aosp_ta:%d",
+ aosp_rsrp, aosp_rsrq, aosp_cqi, aosp_ta);
+ RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_LTE: rsrp:%d, rsrq:%d, rsrp_in_qdbm:%d, rsrq_in_qdbm:%d, rssnr:%d, cqi:%d, ta:%d",
+ result_ptr->cell_list[i].u.lte_cell.rsrp,
+ result_ptr->cell_list[i].u.lte_cell.rsrq,
+ result_ptr->cell_list[i].u.lte_cell.rsrp_in_qdbm,
+ result_ptr->cell_list[i].u.lte_cell.rsrq_in_qdbm,
+ result_ptr->cell_list[i].u.lte_cell.rssnr,
+ result_ptr->cell_list[i].u.lte_cell.cqi,
+ result_ptr->cell_list[i].u.lte_cell.ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
p->writeInt32(result_ptr->cell_list[i].u.lte_cell.state);
p->writeInt32(0);
p->writeInt64(0);
@@ -1311,15 +1439,59 @@
p->writeInt32(result_ptr->cell_list[i].u.lte_cell.physical_cell_id);
p->writeInt32(result_ptr->cell_list[i].u.lte_cell.tac);
p->writeInt32(result_ptr->cell_list[i].u.lte_cell.earfcn);
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rsrp);//signalStrength not in mipc // parameter
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rsrp);
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rsrq);
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rssnr);//rssnr not in mipc // parameter
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.cqi);//cqi not in mipc // parameter
- p->writeInt32(result_ptr->cell_list[i].u.lte_cell.ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ /* For LTE, the ext1((rssnr)) in +ECELL is rssi, and format follows 27.007 +CSQ. alps05878992 */
+ p->writeInt32(result_ptr->cell_list[i].u.lte_cell.rssnr); //signalStrength
+ p->writeInt32(aosp_rsrp);
+ p->writeInt32(aosp_rsrq);
+ /*For LTE, rssnr is not reported. alps05878992 */
+ p->writeInt32(0); //rssnr
+ p->writeInt32(aosp_cqi); //cqi
+ p->writeInt32(aosp_ta);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
break;
}
case RIL_CELL_INFO_TYPE_NR: {
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ int aosp_nr_ssrsrp =
+ result_ptr->cell_list[i].u.nr_cell.rsrp != INVALID_IE ? (157 - result_ptr->cell_list[i].u.nr_cell.rsrp) : INVALID;
+ if (aosp_nr_ssrsrp > 140 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 140;
+ else if (aosp_nr_ssrsrp < 44 && aosp_nr_ssrsrp != INVALID) aosp_nr_ssrsrp = 44;
+
+ int aosp_nr_ssrsrq =
+ result_ptr->cell_list[i].u.nr_cell.rsrq != INVALID_IE ? ((87 - result_ptr->cell_list[i].u.nr_cell.rsrq) >> 1) : INVALID;
+ if (aosp_nr_ssrsrq > 20 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 20;
+ else if (aosp_nr_ssrsrq < 3 && aosp_nr_ssrsrq != INVALID) aosp_nr_ssrsrq = 3;
+
+ int aosp_nr_sssinr =
+ result_ptr->cell_list[i].u.nr_cell.sinr != INVALID_IE ? ((result_ptr->cell_list[i].u.nr_cell.sinr - 47) >> 1) : INVALID;
+ if (aosp_nr_sssinr > 40 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = 40;
+ else if (aosp_nr_sssinr < -23 && aosp_nr_sssinr != INVALID) aosp_nr_sssinr = -23;
+
+ int aosp_nr_csirsrp =
+ result_ptr->cell_list[i].u.nr_cell.csirsrp != INVALID_IE ? (157 - result_ptr->cell_list[i].u.nr_cell.csirsrp) : INVALID;
+ if (aosp_nr_csirsrp > 140 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 140;
+ else if (aosp_nr_csirsrp < 44 && aosp_nr_csirsrp != INVALID) aosp_nr_csirsrp = 44;
+
+ int aosp_nr_csirsrq =
+ result_ptr->cell_list[i].u.nr_cell.csirsrq != INVALID_IE ? ((87 - result_ptr->cell_list[i].u.nr_cell.csirsrq) >> 1) : INVALID;
+ if (aosp_nr_csirsrq > 20 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 20;
+ else if (aosp_nr_csirsrq < 3 && aosp_nr_csirsrq != INVALID) aosp_nr_csirsrq = 3;
+
+ int aosp_nr_csisinr =
+ result_ptr->cell_list[i].u.nr_cell.csisinr != INVALID_IE ? ((result_ptr->cell_list[i].u.nr_cell.csisinr - 47) >> 1) : INVALID;
+ if (aosp_nr_csisinr > 40 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = 40;
+ else if (aosp_nr_csisinr < -23 && aosp_nr_csisinr != INVALID) aosp_nr_csisinr = -23;
+
+ RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_NR: aosp_nr_ssrsrp:%d, aosp_nr_ssrsrq:%d, aosp_nr_sssinr:%d, \
+ aosp_nr_csirsrp:%d, aosp_nr_csirsrq:%d, aosp_nr_csisinr:%d",
+ aosp_nr_ssrsrp, aosp_nr_ssrsrq, aosp_nr_sssinr, aosp_nr_csirsrp, aosp_nr_csirsrq, aosp_nr_csisinr);
+
+ RFX_LOG_D(RFX_LOG_TAG,"RIL_CELL_INFO_TYPE_NR: rsrp:%d, rsrq:%d, sinr:%d, csirsrp:%d, csirsrq:%d, csisinr:%d",
+ result_ptr->cell_list[i].u.nr_cell.rsrp, result_ptr->cell_list[i].u.nr_cell.rsrq, result_ptr->cell_list[i].u.nr_cell.sinr,
+ result_ptr->cell_list[i].u.nr_cell.csirsrp, result_ptr->cell_list[i].u.nr_cell.csirsrq, result_ptr->cell_list[i].u.nr_cell.csisinr);
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
+
p->writeInt32(result_ptr->cell_list[i].u.nr_cell.state);
p->writeInt32(0);
p->writeInt64(0);
@@ -1332,12 +1504,14 @@
p->writeUint32(result_ptr->cell_list[i].u.nr_cell.physical_cell_id);
p->writeInt32(result_ptr->cell_list[i].u.nr_cell.tac);
p->writeInt32(result_ptr->cell_list[i].u.nr_cell.nr_arfcn);
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.rsrp);
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.rsrq);
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.sinr);
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.csirsrp); //csirsrp
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.csirsrq); //csirsrq
- p->writeInt32(result_ptr->cell_list[i].u.nr_cell.csisinr); //csisinr
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 start*/
+ p->writeInt32(aosp_nr_ssrsrp);
+ p->writeInt32(aosp_nr_ssrsrq);
+ p->writeInt32(aosp_nr_sssinr);
+ p->writeInt32(aosp_nr_csirsrp); //csirsrp
+ p->writeInt32(aosp_nr_csirsrq); //csirsrq
+ p->writeInt32(aosp_nr_csisinr); //csisinr
+/*Typethree merge MTK patch to fixed signal define difference 2023/01/18 end*/
break;
}
default: {
@@ -2111,7 +2285,7 @@
void RpNwController::handleScreenStateRequest(const sp<RfxMessage>& request)
{
Parcel* p = request->getParcel();
-
+ int ret; //jb.qi change for channel 228 resume on 2022.11.18
int32_t count = 0;
android::status_t status = android::NO_ERROR;
int32_t screen_state = -1;
@@ -2135,12 +2309,18 @@
mipc_nw_ps_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_ps_ind_cb,NULL);
mipc_nw_cs_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_cs_ind_cb,NULL);
mipc_nw_psbearer_ind_register(slot_id_to_mipc_sim_id(getSlotId()),mipc_unsol_nw_psbearer_ind_cb,NULL);
+ /*jb.qi change for channel 228 resume on 2022.11.18 start*/
+ ret = mipc_msg_register_ind_api((mipc_msg_sim_ps_id_enum)slot_id_to_mipc_sim_id(getSlotId()), MIPC_IMS_STATE_IND, (void*)mipc_ims_state_ind_cb, NULL, NULL);
+ /*jb.qi change for channel 228 resume on 2022.11.18 end*/
}else {
mipc_nw_nitz_register(slot_id_to_mipc_sim_id(getSlotId()),NULL,NULL);
mipc_nw_signal_state_register(slot_id_to_mipc_sim_id(getSlotId()),NULL,NULL);
mipc_nw_ps_register(slot_id_to_mipc_sim_id(getSlotId()),NULL,NULL);
mipc_nw_cs_register(slot_id_to_mipc_sim_id(getSlotId()),NULL,NULL);
mipc_nw_psbearer_ind_register(slot_id_to_mipc_sim_id(getSlotId()),NULL,NULL);
+ /*jb.qi change for channel 228 resume on 2022.11.18 start*/
+ ret = mipc_msg_register_ind_api((mipc_msg_sim_ps_id_enum)slot_id_to_mipc_sim_id(getSlotId()), MIPC_IMS_STATE_IND, NULL, NULL, NULL);
+ /*jb.qi change for channel 228 resume on 2022.11.18 end*/
}
rfx_enqueue_response_message(NULL,request->getRilToken(),(RIL_SOCKET_ID)request->getSlotId(),RIL_E_SUCCESS);
return;
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
old mode 100644
new mode 100755
index d5475d4..f7e89b1
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/apn/RpApnController.cpp
@@ -735,21 +735,23 @@
if(strncmp(apn_db_ready, "true", 4) == 0)
{
- if(APNDB_READY == gApnDoneCond_flag){
- apn_destroy();
- }
+ /*lei modify because recover /etc/config/radio_property*/
+ // if(APNDB_READY == gApnDoneCond_flag){
+ // apn_destroy();
+ // }
- if(access(DB_FILE_NAME, R_OK)==0)
- {
- logD(RFX_LOG_TAG," generateApnDB delete file=%s, start", DB_FILE_NAME);
- unlink(DB_FILE_NAME); //how to detele the file.
- while(access(DB_FILE_NAME, R_OK)==0)
- {
- logD(RFX_LOG_TAG," generateApnDB file=%s still exist", DB_FILE_NAME);
- usleep(10);
- }
- logD(RFX_LOG_TAG," generateApnDB delete file=%s, done", DB_FILE_NAME);
- }
+ // if(access(DB_FILE_NAME, R_OK)==0)
+ // {
+ // logD(RFX_LOG_TAG," generateApnDB delete file=%s, start", DB_FILE_NAME);
+ // unlink(DB_FILE_NAME); //how to detele the file.
+ // while(access(DB_FILE_NAME, R_OK)==0)
+ // {
+ // logD(RFX_LOG_TAG," generateApnDB file=%s still exist", DB_FILE_NAME);
+ // usleep(10);
+ // }
+ // logD(RFX_LOG_TAG," generateApnDB delete file=%s, done", DB_FILE_NAME);
+ // }
+ /*lei modify because recover /etc/config/radio_property*/
}
if(APNDB_NOTREADY == gApnDoneCond_flag)