Add basic change for v1453
Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/test/libql_lib_v2/ql_ecall_test.c b/mbtk/test/libql_lib_v2/ql_ecall_test.c
new file mode 100755
index 0000000..0ad1113
--- /dev/null
+++ b/mbtk/test/libql_lib_v2/ql_ecall_test.c
@@ -0,0 +1,1025 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <ctype.h>
+
+#include "ql_type.h"
+#include "ql_ms_voice.h"
+#include "ql_ecall.h"
+#include "mbtk_utils.h"
+
+typedef void (*item_handler_f)(void);
+
+typedef struct
+{
+ const char *name;
+ item_handler_f handle;
+} t_item_t;
+
+void item_ql_ecall_set_test_number(void)
+{
+ int ret = 0;
+ int sim_id;
+
+ char test_number[QL_VOICE_MAX_PHONE_NUMBER];
+
+ printf("test ql_voice_ecall_set_test_number: ");
+
+ printf("please enter test number: ");
+ char* find = NULL;
+
+ if(NULL == fgets(test_number, QL_VOICE_MAX_PHONE_NUMBER-1, stdin))
+ return;
+ find = strchr(test_number, '\n');
+ if(find)
+ {
+ *find = '\0';
+ }
+
+ printf("please enter the sim_id: ");
+
+ if(1 != scanf("%u", &sim_id))
+ return;
+ getchar();
+ printf("sim_id is %u\n", sim_id);
+
+ ret = ql_ecall_set_test_number(sim_id, test_number);
+
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_reset_ivs(void)
+{
+ int ret = 0;
+ int sim_id;
+
+ printf("please enter the sim_id: ");
+
+ if(1 != scanf("%u", &sim_id))
+ return;
+ getchar();
+ printf("sim_id is %u\n", sim_id);
+
+ ret = ql_ecall_reset_ivs(sim_id);
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void fast_ecall_dial(void){
+ int ret = 0, v = 0;
+ ql_voice_ecall_info_t *p_info = NULL;
+ char *find = NULL;
+ uint32_t id;
+ int sim_id;
+
+ p_info = (ql_voice_ecall_info_t *)calloc(1, sizeof(*p_info));
+ if (NULL == p_info)
+ {
+ printf("run out of memory\n");
+ return;
+ }
+
+ printf("please enter the sim_id: ");
+ if(1 != scanf("%d", &sim_id))
+ return;
+ getchar();
+
+ if(!QL_IS_SIM_VALID(sim_id))
+ {
+ printf("invalid sim_id\n");
+ free(p_info);
+ p_info = NULL;
+ return;
+ }
+
+ printf("sim_id is %d\n", sim_id);
+
+ printf("example MSD: 01 04 a9 81 d5 49 70 d6 5c 35 97 ca 04 20 c4 14 60 "
+ "0b be 5f 7e b1 4b a6 ee 10 4f c5 27 03 c1 80 q\n");
+ printf("please enter MSD(at most 140 hex), end with 'q': ");
+ while (1 == scanf("%x", &v))
+ {
+ p_info->msd[p_info->msd_len++] = v;
+ }
+ getchar(); // read `q'
+ getchar(); // read '\n'
+
+ printf("MSD ========[");
+ for(v = 0; v < p_info->msd_len; v ++)
+ {
+ printf("%02x ", p_info->msd[v]);
+ }
+ printf("]\n");
+
+ if (p_info->msd_len > QL_VOICE_MAX_ECALL_MSD)
+ {
+ printf("MSD too long\n");
+ free(p_info);
+ p_info = NULL;
+ return;
+ }
+
+ printf("please enter eCall type(1 - test, 2 - emergency, 3 - reconfig): ");
+ if(1 != scanf("%d", (int *)&p_info->type))
+ return;
+ getchar();
+
+ printf("please enter test number(emergency ecall should be empty): ");
+ find = NULL;
+ if(NULL == fgets(p_info->test_number, sizeof(p_info->test_number)-1, stdin))
+ return;
+ find = strchr(p_info->test_number, '\n');
+ if(find)
+ {
+ *find = '\0';
+ }
+
+ printf("how to trigger eCall(0 - manual, 1 - auto): ");
+ if(1 != scanf("%d", &p_info->auto_trigger))
+ return;
+ getchar();
+
+ ret = ql_ecall_dial(sim_id, p_info, &id);
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok, call_id is %u\n", id);
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+
+ free(p_info);
+ p_info = NULL;
+}
+
+void item_ql_ecall_dial(void)
+{
+ printf("test ql_voice_ecall_dial: \n");
+ printf("Is fast ecall? (1 - yes, other - wrong): ");
+ int is_fast;
+ scanf("%d", &is_fast);
+ getchar();
+
+ if(is_fast == 1){
+ printf("Dialling fast ecall\n");
+ fast_ecall_dial();
+ }else{
+ printf("Wrong arguments\n");
+ }
+}
+
+void item_ql_ecall_hangup(void)
+{
+ int ret = 0;
+// int sim_id;
+
+ printf("test ql_voice_ecall_hangup: \n");
+ ret = ql_ecall_hangup();
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_update_msd_raw(void)
+{
+ int ret = 0, v = 0;
+ uint32_t msd_len = 0;
+ char msd[QL_VOICE_MAX_ECALL_MSD] = {0};
+
+ printf("test ql_voice_ecall_update_msd: \n");
+ printf("example MSD: 01 04 a9 81 d5 49 70 d6 5c 35 97 ca 04 20 c4 14 60 "
+ "0b be 5f 7e b1 4b a6 ee 10 4f c5 27 03 c1 80 q\n");
+ printf("please enter MSD(at most 140 hex), end with 'q': ");
+ while (1 == scanf("%x", &v))
+ {
+ if(msd_len >= QL_VOICE_MAX_ECALL_MSD)
+ {
+ printf("MSD too long\n");
+ int c;
+ while ((c = getchar()) != '\n' && c != EOF) { }
+ return;
+ }
+ else
+ {
+ msd[msd_len++] = v;
+ }
+ }
+ getchar(); // read `q'
+ getchar(); // read '\n'
+
+ ret = ql_ecall_update_msd_raw((uint8_t *)msd, msd_len);
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_push_msd(void)
+{
+ int ret = 0;
+
+ printf("test ql_voice_ecall_push_msd: \n");
+ ret = ql_ecall_push_msd();
+ if (ret == QL_ERR_OK)
+ {
+ printf("sql_ecall_push_msd OK\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+static void ecall_user_ind_callback(int ind, void *userdata)
+{
+ printf("\n****** eCall indication Received ******\n");
+ printf("ecall_indication: %d - ", ind);
+
+ switch(ind){
+ case QL_ECALL_EVENT_SENDING_START:
+ printf("QL_ECALL_EVENT_SENDING_START\n");
+ break;
+ case QL_ECALL_EVENT_SENDING_MSD:
+ printf("QL_ECALL_EVENT_SENDING_MSD\n");
+ break;
+ case QL_ECALL_EVENT_LLACK_RECEIVED:
+ printf("QL_ECALL_EVENT_LLACK_RECEIVED\n");
+ break;
+ case QL_ECALL_EVENT_ALLACK_POSITIVE_RECEIVED:
+ printf("QL_ECALL_EVENT_ALLACK_POSITIVE_RECEIVED\n");
+ break;
+ case QL_ECALL_EVENT_ALLACK_CLEARDOWN_RECEIVED:
+ printf("QL_ECALL_EVENT_ALLACK_CLEARDOWN_RECEIVED\n");
+ break;
+ case QL_ECALL_EVENT_ACTIVE:
+ printf("QL_ECALL_EVENT_ACTIVE\n");
+ break;
+ case QL_ECALL_EVENT_DISCONNECTED:
+ printf("QL_ECALL_EVENT_DISCONNECTED\n");
+ break;
+ case QL_ECALL_EVENT_ABNORMAL_HANGUP:
+ printf("QL_ECALL_EVENT_ABNORMAL_HANGUP\n");
+ break;
+ case QL_ECALL_EVENT_ONLY_DEREGISTRATION:
+ printf("QL_ECALL_EVENT_ONLY_DEREGISTRATION\n");
+ break;
+ case QL_ECALL_EVENT_MAY_DEREGISTRATION:
+ printf("QL_ECALL_EVENT_MAY_DEREGISTRATION\n");
+ break;
+ case QL_ECALL_EVENT_PSAP_CALLBACK_START:
+ printf("QL_ECALL_EVENT_PSAP_CALLBACK_START\n");
+ break;
+ case QL_ECALL_EVENT_T2_TIMEOUT:
+ printf("QL_ECALL_EVENT_T2_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_T5_TIMEOUT:
+ printf("QL_ECALL_EVENT_T5_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_T6_TIMEOUT:
+ printf("QL_ECALL_EVENT_T6_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_T7_TIMEOUT:
+ printf("QL_ECALL_EVENT_T7_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_ECALL_STARTED:
+ printf("QL_ECALL_EVENT_ECALL_STARTED\n");
+ break;
+ case QL_ECALL_EVENT_INCOMING_CALL:
+ printf("QL_ECALL_EVENT_INCOMING_CALL\n");
+ break;
+ case QL_ECALL_EVENT_DIAL_DURATION_TIMEOUT:
+ printf("QL_ECALL_EVENT_DIAL_DURATION_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_INTERVAL_TIMEOUT:
+ printf("QL_ECALL_EVENT_INTERVAL_TIMEOUT\n");
+ break;
+ case QL_ECALL_EVENT_AUTO_ANSWER_TIMEOUT:
+ printf("QL_ECALL_EVENT_AUTO_ANSWER_TIMEOUT\n");
+ break;
+ default:
+ printf("UNKNOWN\n");
+ break;
+ }
+}
+
+void item_ql_ecall_init(void)
+{
+ int ret = 0;
+
+ printf("test ql_ecall_init: ");
+ ret = ql_ecall_init();
+ if(ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_deinit(void)
+{
+ int ret = 0;
+
+ printf("test ql_ecall_deinit: ");
+ ret = ql_ecall_deinit();
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_set_user_ind_cb(void)
+{
+ ql_ecall_set_user_ind_cb(ecall_user_ind_callback, NULL);
+}
+
+void item_ql_ecall_set_msd_version(void)
+{
+ int ret = 0;
+ uint8_t index=0;
+
+ printf("ecall MSD version(1-ASN1_ECALL_MSD_VERSION_1; 2-ASN1_ECALL_MSD_VERSION_2): \n");
+ scanf("%hhd", &index);
+ getchar();
+
+ if (1 == index)
+ {
+ ret = ql_ecall_set_msd_version(ASN1_ECALL_MSD_VERSION_1);
+ printf(" ql_ecall_get_msd_version ret = %d\n", ret);
+ }
+ else if(2 == index)
+ {
+ ret = ql_ecall_set_msd_version(ASN1_ECALL_MSD_VERSION_2);
+ printf(" ql_ecall_get_msd_version ret = %d\n", ret);
+ }
+ else
+ {
+ printf(" This version is not surport.\n");
+ }
+
+}
+
+void item_ql_ecall_get_msd_version(void)
+{
+ uint8_t msdVersion = 0;
+
+ ql_ecall_get_msd_version(&msdVersion);
+
+ if(msdVersion == ASN1_ECALL_MSD_VERSION_1)//unsupported
+ {
+ printf("MSD version is set to ASN1_ECALL_MSD_VERSION_1.\n");
+ }
+ else if (msdVersion == ASN1_ECALL_MSD_VERSION_2)//supported
+ {
+ printf("MSD version is set to ASN1_ECALL_MSD_VERSION_2.\n");
+ }
+ else
+ {
+ printf(" This version is not surport.\n");
+ }
+
+}
+
+void item_ql_ecall_set_system_type(void)
+{
+ int ret = 0;
+ uint8_t index=0;
+
+ printf("ecall system type(0-ECALL_SYSTEM_STD_PAN_EUROPEAN; 1-ECALL_SYSTEM_STD_ERA_GLONASS): \n");
+ scanf("%hhd", &index);
+ getchar();
+
+ if (0 == index)
+ {
+ ret = ql_ecall_set_system_std(ECALL_SYSTEM_STD_PAN_EUROPEAN);
+ printf(" ql_ecall_set_system_std ret = %d\n", ret);
+ }
+ else if(1 == index)
+ {
+ ret = ql_ecall_set_system_std(ECALL_SYSTEM_STD_ERA_GLONASS);
+ printf(" ql_ecall_set_system_std ret = %d\n", ret);
+ }
+ else
+ {
+ printf(" This version is not surport.\n");
+ }
+}
+
+void item_ql_ecall_get_system_type(void)
+{
+ ECALL_SYSTEM_STD_E system_std;
+ ql_ecall_get_system_std(&system_std);
+ if(system_std == ECALL_SYSTEM_STD_PAN_EUROPEAN)
+ {
+ printf("Ecall system type set to ECALL_SYSTEM_STD_PAN_EUROPEAN.\n");
+ }
+ else if (system_std == ECALL_SYSTEM_STD_ERA_GLONASS)
+ {
+ printf("Ecall system type set to ECALL_SYSTEM_STD_ERA_GLONASS.\n");
+ }
+ else
+ {
+ printf("Ecall system type set to unsupported value.\n");
+ }
+}
+
+void item_ql_ecall_set_msd_vehicle_type(void)
+{
+ int ret = 0;
+ uint8_t index=0;
+
+ printf("Please input VehicleType:\n");
+ printf("MSD_VEHICLE_PASSENGER_M1=1\n");
+ printf("MSD_VEHICLE_BUS_M2=2\n");
+ printf("MSD_VEHICLE_BUS_M3=3\n");
+ printf("MSD_VEHICLE_COMMERCIAL_N1=4\n");
+ printf("MSD_VEHICLE_HEAVY_N2=5\n");
+ printf("MSD_VEHICLE_HEAVY_N3=6\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L1E=7\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L2E=8\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L3E=9\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L4E=10\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L5E=11\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L6E=12\n");
+ printf("MSD_VEHICLE_MOTORCYCLE_L7E=13\n");
+
+ scanf("%hhd", &index);
+ getchar();
+
+ ret = ql_ecall_set_msd_vehicle_type(index);
+ printf(" ql_ecall_set_msd_vehicle_type ret = %d\n", ret);
+
+}
+
+void item_ql_ecall_get_msd_vehicle_type(void)
+{
+ uint8_t vehicleType = 0;
+ ql_ecall_get_msd_vehicle_type(&vehicleType);
+ printf("VehicalType is set to: %u\n", vehicleType);
+
+}
+
+void item_ql_ecall_set_msd_position(void)
+{
+ int ret = 0;
+ int32_t latitude, longitude, direction = 0;
+
+ printf("Please input latitude(example:+48898064):\n");
+ scanf("%d", &latitude);
+ getchar();
+
+ printf("Please input longitude(example:+2218092):\n");
+ scanf("%d", &longitude);
+ getchar();
+
+ printf("Please input direction(example:0):\n");
+ scanf("%d", &direction);
+ getchar();
+
+ ret = ql_ecall_set_msd_position(true, latitude, longitude, direction);
+ printf(" ql_ecall_set_msd_position ret = %d\n", ret);
+}
+
+void item_ql_ecall_set_msd_position1(void)
+{
+ int ret = 0;
+ int32_t latitudeDeltaN1, longitudeDeltaN1 = 0;
+
+ printf("Please input latitudeDeltaN1(-512 ~ 511):\n");
+ scanf("%d", &latitudeDeltaN1);
+ getchar();
+
+ printf("Please input longitudeDeltaN1(-512 ~ 511):\n");
+ scanf("%d", &longitudeDeltaN1);
+ getchar();
+
+ ret = ql_ecall_set_msd_position_n1(latitudeDeltaN1, longitudeDeltaN1);
+ printf(" ql_ecall_set_msd_position_n1 ret = %d\n", ret);
+}
+
+void item_ql_ecall_set_msd_position2(void)
+{
+ int ret = 0;
+ int32_t latitudeDeltaN2, longitudeDeltaN2 = 0;
+
+ printf("Please input latitudeDeltaN2(-512 ~ 511):\n");
+ scanf("%d", &latitudeDeltaN2);
+ getchar();
+
+ printf("Please input longitudeDeltaN2(-512 ~ 511):\n");
+ scanf("%d", &longitudeDeltaN2);
+ getchar();
+
+ ret = ql_ecall_set_msd_position_n2(latitudeDeltaN2, longitudeDeltaN2);
+ printf(" ql_ecall_set_msd_position_n2 ret = %d\n", ret);
+}
+
+void item_ql_ecall_set_number_of_passengers(void)
+{
+// int ret = 0;
+ uint8_t numberOfPassengers=0;
+
+ printf("Please input msd numberOfPassengers:\n");
+ if(1 != scanf("%hhd", &numberOfPassengers))
+ return;
+ getchar();
+
+ ql_ecall_set_msd_passengers_count(numberOfPassengers);
+}
+
+void item_ql_ecall_set_msd_propulsion_type(void)
+{
+// int ret = 0;
+ uint8_t propulsionType = 0;
+
+ printf("Please input vehicle propulsion type:\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_GASOLINE=0x1\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_DIESEL=0x2\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_NATURALGAS=0x4\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_PROPANE=0x8\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_ELECTRIC=0x10\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_HYDROGEN=0x20\n");
+ printf("ECALL_MSD_PROPULSION_TYPE_OTHER=0x40\n");
+
+ scanf("%hhx", &propulsionType);
+ getchar();
+
+ ql_ecall_set_msd_propulsion_type(propulsionType);
+}
+
+void item_ql_ecall_get_msd_propulsion_type(void)
+{
+ uint8_t propulsionType = 0;
+
+ ql_ecall_get_msd_propulsion_type(&propulsionType);
+
+ printf("PropulsionType set to: 0x%x\n", propulsionType);
+
+}
+
+void item_ql_ecall_get_msd_call_type(void)
+{
+
+ bool type;
+ ql_ecall_get_msd_call_type(&type);
+
+ printf(" item_ql_ecall_get_msd_call_type type = %s\n", type ? "Test" : "Emergency" );
+}
+
+void item_ql_ecall_set_msd_call_type(void)
+{
+ uint8_t index = 0;
+ printf("Input call type: Test(0) Emergency(1)\n");
+ scanf("%hhd", &index);
+ getchar();
+
+ ql_ecall_set_msd_call_type(index == 0);
+
+ printf(" ql_ecall_set_msd_call_type type = %d\n", index);
+}
+
+
+void item_ql_ecall_set_msd_vin(void)
+{
+ int ret = 0;
+ uint8_t index = 0;
+ msd_Vin_t vin = {0};
+ char* find = NULL;
+ char vin_str[QL_ECALL_MAX_VIN];
+
+ printf("Input: default(0) other(1)\n");
+ scanf("%hhd", &index);
+ getchar();
+ if(index)
+ {
+ printf("Please insert VIN:\n");
+ fgets(vin_str, QL_ECALL_MAX_VIN-1, stdin);
+ find = strchr(vin_str, '\n');
+ if(find)
+ {
+ *find = '\0';
+ }
+ // example 1: WM9VDSVDSYA123456
+ // example 2: 4Y1SL65848Z411439
+ // example 3: VF37BRFVE12345678
+ memcpy(&vin.isowmi, vin_str,3);
+ memcpy(&vin.isovds, (vin_str+3),6);
+ memcpy(&vin.isovisModelyear, (vin_str+9) ,1);
+ memcpy(&vin.isovisSeqPlant, (vin_str+10) ,7);
+ printf("isowmi:%s isovds:%s isovisModelyear:%s,isovisSeqPlant:%s\n",vin.isowmi,vin.isovds,vin.isovisModelyear,vin.isovisSeqPlant);
+ }
+ else
+ {
+ memcpy(&vin.isowmi,"WM9",3);
+ memcpy(&vin.isovds,"VDSVDS",6);
+ memcpy(&vin.isovisModelyear,"Y",1);
+ memcpy(&vin.isovisSeqPlant,"A123456",7);
+ printf("isowmi:%s isovds:%s isovisModelyear:%s,isovisSeqPlant:%s\n",vin.isowmi,vin.isovds,vin.isovisModelyear,vin.isovisSeqPlant);
+ }
+
+ ret = ql_ecall_set_msd_vin(vin);
+ printf(" ql_ecall_set_msd_vin ret = %d\n", ret);
+}
+
+void item_ql_ecall_get_msd_vin(void)
+{
+ int ret = 0;
+ msd_Vin_t vin;
+ char vin_str[QL_ECALL_MAX_VIN];
+
+ ret = ql_ecall_get_msd_vin(&vin);
+ if(0<strlen(vin.isowmi)&&0<strlen(vin.isovds)&&0<strlen(vin.isovisModelyear)&&0<strlen(vin.isovisSeqPlant))
+ {
+ sprintf(vin_str,"%s%s%s%s",vin.isowmi,vin.isovds,vin.isovisModelyear,vin.isovisSeqPlant);
+ }
+ else
+ {
+ printf(" vin is NULL\n");
+ return;
+ }
+ printf(" ql_ecall_get_msd_vin ret = %d\n", ret);
+
+ printf("VIN=%s\n",vin_str);
+}
+
+void item_ql_ecall_set_msd_tx_mode(void)
+{
+ int ret = 0;
+ uint8_t index = 0;
+
+ printf("Please choose MSD Tx Mode: PULL(0) PUSH(1)\n");
+ scanf("%hhd", &index);
+ getchar();
+
+ if(index == 0)
+ {
+ ret = ql_ecall_set_msd_tx_mode(QL_ECALL_TX_MODE_PULL);
+ printf(" ql_ecall_set_msd_tx_mode ret = %d\n", ret);
+ }
+ else if(index == 1)
+ {
+ ret = ql_ecall_set_msd_tx_mode(QL_ECALL_TX_MODE_PUSH);
+ printf(" ql_ecall_set_msd_tx_mode ret = %d\n", ret);
+ }
+ else
+ {
+ printf("Unsupported MSD transmission mode.\n");
+ }
+}
+
+void item_ql_ecall_get_msd_tx_mode(void)
+{
+ QL_ECALL_MSD_TX_MODE_E tx_mode;
+
+ ql_ecall_get_msd_tx_mode(&tx_mode);
+ if(tx_mode == QL_ECALL_TX_MODE_PULL)
+ {
+ printf("MSD Transmission mode is set to QL_ECALL_TX_MODE_PULL\n");
+ }
+ else if (tx_mode == QL_ECALL_TX_MODE_PUSH)
+ {
+ printf("MSD Transmission mode is set to QL_ECALL_TX_MODE_PUSH\n");
+ }
+}
+
+void item_ql_ecall_start_test(void)
+{
+ int ret = 0;
+ int sim_id;
+
+ printf("please enter the sim_id: ");
+ ret = scanf("%d", &sim_id);
+ getchar();
+
+ if(!QL_IS_SIM_VALID(sim_id))
+ {
+ printf("invalid sim_id\n");
+ return;
+ }
+
+ ret = ql_ecall_start_test(sim_id);
+ printf(" ql_ecall_start_test ret = %d\n", ret);
+}
+
+void item_ql_ecall_start_manual(void)
+{
+ int ret = 0;
+ int sim_id;
+
+ printf("please enter the sim_id: ");
+ ret = scanf("%d", &sim_id);
+ getchar();
+
+ if(!QL_IS_SIM_VALID(sim_id))
+ {
+ printf("invalid sim_id\n");
+ return;
+ }
+
+ ret = ql_ecall_start_manual(sim_id);
+ printf(" ql_ecall_start_manual ret = %d\n", ret);
+}
+
+void item_ql_ecall_start_automatic(void)
+{
+ int ret = 0;
+ int sim_id;
+
+ printf("please enter the sim_id: ");
+ ret = scanf("%d", &sim_id);
+ getchar();
+
+ if(!QL_IS_SIM_VALID(sim_id))
+ {
+ printf("invalid sim_id\n");
+ return;
+ }
+
+ ret = ql_ecall_start_automatic(sim_id);
+ printf(" ql_ecall_start_automatic ret = %d\n", ret);
+}
+
+void item_ql_ecall_terminate_nw_registration(void)
+{
+ int ret;
+
+ ret = ql_ecall_terminate_nw_registration();
+ if(ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_set_interval_between_attempts(void)
+{
+ uint16_t interval = 0;
+
+ printf("Please input interval between attempts in seconds:\n");
+ scanf("%hd", &interval);
+ getchar();
+
+ ql_ecall_set_interval_between_dial_attempts(interval);
+}
+
+void item_ql_ecall_get_interval_between_attempts(void)
+{
+ uint16_t interval = 0;
+ ql_ecall_get_interval_between_dial_attempts(&interval);
+
+ printf("Interval between attempts is set to %hd seconds:\n", interval);
+
+}
+
+void item_ql_ecall_update_msd (void)
+{
+ int ret = 0;
+ ret = ql_ecall_update_msd();
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_ecall_set_config_info(void)
+{
+ ql_ecall_config_t ecall_context_info;
+
+ printf("Whether the time of T5 timer is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.t5_timeout_ms_valid);
+ getchar();
+ if(ecall_context_info.t5_timeout_ms_valid)
+ {
+ printf("please input the time of T5 timer(example:5000ms):\n");
+ scanf("%hd", &ecall_context_info.t5_timeout_ms);
+ getchar();
+ }
+
+ printf("Whether the time of T6 timer is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.t6_timeout_ms_valid);
+ getchar();
+ if(ecall_context_info.t6_timeout_ms_valid)
+ {
+ printf("please input the time of T6 timer(example:5000ms):\n");
+ scanf("%hd", &ecall_context_info.t6_timeout_ms);
+ getchar();
+ }
+
+ printf("Whether the time of T7 timer is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.t7_timeout_ms_valid);
+ getchar();
+ if(ecall_context_info.t7_timeout_ms_valid)
+ {
+ printf("please input the time of T7 timer(example:20000ms):\n");
+ scanf("%hd", &ecall_context_info.t7_timeout_ms);
+ getchar();
+ }
+
+ printf("Whether the time of auto answer timer is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.autoAnswer_timeout_ms_valid);
+ getchar();
+ if(ecall_context_info.autoAnswer_timeout_ms_valid)
+ {
+ printf("please input the time of auto answer timer(example:3600000ms):\n");
+ scanf("%d", &ecall_context_info.autoAnswer_timeout_ms);
+ getchar();
+ }
+
+ printf("Whether the time of dialDurationTimer is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.dialDurationTimer_timout_ms_valid);
+ getchar();
+ if(ecall_context_info.dialDurationTimer_timout_ms_valid)
+ {
+ printf("please input the time of dialDurationTimer(example:120000ms):\n");
+ scanf("%d", &ecall_context_info.dialDurationTimer_timout_ms);
+ getchar();
+ }
+
+ printf("(Not supported)Whether the maxDialAttempts is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.maxDialAttempts_valid);
+ getchar();
+ if(ecall_context_info.maxDialAttempts_valid)
+ {
+ printf("please input maxDialAttempts:\n");
+ scanf("%d", &ecall_context_info.maxDialAttempts);
+ getchar();
+ }
+
+ printf("(Not supported)Whether the intervalBetweenAttempts is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.intervalBetweenAttempts_valid);
+ getchar();
+ if(ecall_context_info.intervalBetweenAttempts_valid)
+ {
+ printf("please input intervalBetweenAttempts(example:30s):\n");
+ scanf("%hd", &ecall_context_info.intervalBetweenAttempts);
+ getchar();
+ }
+
+ printf("(Not supported)Whether the resetEcallSessionMode is valid(0:no, 1:yes):\n");
+ scanf("%hhd", &ecall_context_info.resetEcallSessionMode_valid);
+ getchar();
+ if(ecall_context_info.resetEcallSessionMode_valid)
+ {
+ printf("please input resetEcallSessionMode(example: 1,autoanswer):\n");
+ scanf("%hhd", &ecall_context_info.resetEcallSessionMode);
+ getchar();
+ }
+
+ ql_ecall_set_config_info(ecall_context_info);
+ printf("ok!\n");
+}
+
+void item_ql_ecall_get_config_info(void)
+{
+ ql_ecall_config_t ecall_context_info;
+
+ ql_ecall_get_config_info(&ecall_context_info);
+
+ printf("ok!\n");
+ printf("the time of T5 timer is %hd\n", ecall_context_info.t5_timeout_ms);
+ printf("the time of T6 timer is %hd\n", ecall_context_info.t6_timeout_ms);
+ printf("the time of T7 timer is %hd\n", ecall_context_info.t7_timeout_ms);
+ printf("the time of dialDurationTimer is %d\n", ecall_context_info.dialDurationTimer_timout_ms);
+ printf("the maximum redial attempts is %d\n", ecall_context_info.maxDialAttempts);
+ //printf("the interval value between dial attempts is %hd\n", ecall_context_info.intervalBetweenAttempts);
+}
+
+void item_ql_ecall_set_ecall_only_mode(void)
+{
+ int ret = 0;
+ int ecall_only_value = 0;
+
+ printf("ecall set ecall only mode(0:disable,1:enable): \n");
+ scanf("%d", &ecall_only_value);
+ getchar();
+
+ ret = ql_ecall_set_ecall_only_mode(ecall_only_value);
+ printf(" ql_ecall_set_ecall_only_mode ret = %d\n", ret);
+}
+
+static t_item_t ql_ecall_items[] =
+{
+ {"ql_ecall_init", item_ql_ecall_init},
+ {"ql_ecall_dial", item_ql_ecall_dial},
+ {"ql_ecall_start_test", item_ql_ecall_start_test},
+ {"ql_ecall_start_manual", item_ql_ecall_start_manual},
+ {"ql_ecall_start_automatic", item_ql_ecall_start_automatic},
+ {"ql_ecall_hangup", item_ql_ecall_hangup},
+ {"ql_ecall_set_user_ind_cb", item_ql_ecall_set_user_ind_cb},
+ {"ql_voice_ecall_set_test_number", item_ql_ecall_set_test_number},
+ {"ql_ecall_set_system_type", item_ql_ecall_set_system_type},
+ {"ql_ecall_get_system_type", item_ql_ecall_get_system_type},
+ {"ql_ecall_update_msd_raw", item_ql_ecall_update_msd_raw},
+ {"ql_ecall_push_msd", item_ql_ecall_push_msd},
+ {"ql_voice_ecall_reset_ivs", item_ql_ecall_reset_ivs},
+ {"ql_ecall_set_msd_call_type", item_ql_ecall_set_msd_call_type},
+ {"ql_ecall_get_msd_call_type", item_ql_ecall_get_msd_call_type},
+ {"ql_ecall_set_msd_vin", item_ql_ecall_set_msd_vin},
+ {"ql_ecall_get_msd_vin", item_ql_ecall_get_msd_vin},
+ {"ql_ecall_set_msd_version", item_ql_ecall_set_msd_version},
+ {"ql_ecall_get_msd_version", item_ql_ecall_get_msd_version},
+ {"ql_ecall_set_msd_tx_mode", item_ql_ecall_set_msd_tx_mode},
+ {"ql_ecall_get_msd_tx_mode", item_ql_ecall_get_msd_tx_mode},
+ {"ql_ecall_set_msd_position", item_ql_ecall_set_msd_position},
+ {"ql_ecall_set_msd_position1", item_ql_ecall_set_msd_position1},
+ {"ql_ecall_set_msd_position2", item_ql_ecall_set_msd_position2},
+ {"ql_ecall_set_msd_vehicle_type", item_ql_ecall_set_msd_vehicle_type},
+ {"ql_ecall_get_msd_vehicle_type", item_ql_ecall_get_msd_vehicle_type},
+ {"ql_ecall_set_number_of_passengers", item_ql_ecall_set_number_of_passengers},
+ {"ql_ecall_set_msd_propulsion_type", item_ql_ecall_set_msd_propulsion_type},
+ {"ql_ecall_get_msd_propulsion_type", item_ql_ecall_get_msd_propulsion_type},
+ {"ql_ecall_terminate_nw_registration", item_ql_ecall_terminate_nw_registration},
+ {"ql_ecall_set_interval_between_attempts", item_ql_ecall_set_interval_between_attempts},
+ {"ql_ecall_get_interval_between_attempts", item_ql_ecall_get_interval_between_attempts},
+ {"ql_ecall_update_msd", item_ql_ecall_update_msd},
+ {"ql_ecall_set_config_info", item_ql_ecall_set_config_info},
+ {"ql_ecall_get_config_info", item_ql_ecall_get_config_info},
+ {"ql_ecall_set_ecall_only_mode", item_ql_ecall_set_ecall_only_mode},
+ {"ql_ecall_deinit", item_ql_ecall_deinit}
+};
+
+static void help()
+{
+ int i = 0;
+ printf("Test Items:\n");
+ while(i < ARRAY_SIZE(ql_ecall_items)) {
+ printf("%d : %s\n", i, ql_ecall_items[i].name);
+ i++;
+ }
+ printf(":");
+}
+
+int main(int argc, char *argv[])
+{
+ char cmd[1024];
+ help();
+ while(1)
+ {
+ memset(cmd, 0, sizeof(cmd));
+ if(fgets(cmd, sizeof(cmd), stdin))
+ {
+ char *ptr = cmd + strlen(cmd) - 1;
+ while(ptr >= cmd && (*ptr == '\r' || *ptr == '\n'))
+ {
+ *ptr-- = '\0';
+ }
+
+ if(strlen(cmd) > 0) {
+ if(isdigit(cmd[0])) {
+ int item = atoi(cmd);
+ if(item >= 0 && item < ARRAY_SIZE(ql_ecall_items)) {
+ ql_ecall_items[item].handle();
+ }
+ }
+ else if(!strcasecmp(cmd, "h")) {
+ help();
+ }
+ else if(!strcasecmp(cmd, "q")) {
+ break;
+ }
+ }
+ else {
+ printf("\n");
+ }
+ }
+ }
+ return 0;
+}
+