[Feature][T108][task-view-1499][ril]Modify return value GSW_HAL_FAIL to GSW_HAL_NORMAL_FAIL and rename file name
Only Configure: No
Affected branch: GSW_V1453
Affected module: ril
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no
Change-Id: Icc373f650a429298d4fcf34677d87ac674ae796e
diff --git a/mbtk/libgsw_lib/gsw_voice_interface.c b/mbtk/libgsw_lib/gsw_voice_interface.c
new file mode 100755
index 0000000..1063c79
--- /dev/null
+++ b/mbtk/libgsw_lib/gsw_voice_interface.c
@@ -0,0 +1,1012 @@
+#include "gsw_voice_interface.h"
+#include <dlfcn.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+// mbtk includes
+
+typedef unsigned int uint32;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef void (*mbtk_info_callback_func)(const void* data, int data_len);
+
+typedef struct
+{
+ int client_fd;
+ pthread_t read_thread_id;
+ int exit_fd[2];
+ bool is_waitting;
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+
+ pthread_mutex_t send_mutex;
+
+ // Temp response data.
+ uint16 info_err;
+ uint16 data_len;
+ void *data;
+
+ //mbtk wyq for server_ready_status add start
+ char server_ready_status;
+ //mbtk wyq for server_ready_status add end
+
+ mbtk_info_callback_func net_state_cb;
+ mbtk_info_callback_func call_state_cb;
+ mbtk_info_callback_func sms_state_cb;
+ mbtk_info_callback_func radio_state_cb;
+ mbtk_info_callback_func sim_state_cb;
+ mbtk_info_callback_func pdp_state_cb;
+ //add signal by xr
+ mbtk_info_callback_func signal_state_cb;
+} mbtk_info_handle_t;
+
+typedef struct
+{
+ uint8 call_wait;
+ uint8 dir1;
+ uint8 dir;
+ uint8 state;
+ uint8 mode;
+ uint8 mpty;
+ char phone_number[100];
+ uint8 type;
+ uint8 pas;
+ uint8 disconnected_id;
+ uint8 end_reason[128];
+} __attribute__((packed)) mbtk_call_info_t;
+
+typedef enum {
+ MBTK_CLCC = 1,
+ MBTK_CPAS,
+ MBTK_DISCONNECTED,
+} mbtk_call_enum;
+
+typedef enum {
+ MBTK_CALL_RADY, //MT allows commands from TA/TE
+ MBTK_CALL_UNAVAILABLE, //MT does not allow commands from TA/TE
+ MBTK_CALL_UNKNOWN, //MT is not guaranteed to respond to instructions
+ MBTK_CALL_RINGING, //MT is ready for commands from TA/TE, but the ringer is active
+ MBTK_CALL_PROGRESS, //MT is ready for commands from TA/TE, but a call is in progress
+ MBTK_CALL_ASLEEP, //MT is unable to process commands from TA/TE because it is in a low functionality state
+ MBTK_CALL_ACTIVE,
+} mbtk_call_pas_enum;
+
+
+//----------------end_reason start------------
+//mbtk end_reason define
+#define MBTK_VOICE_END_REASON_UNKNOWN "0 "
+#define MBTK_VOICE_END_REASON_UNASSIGNED_NUMBER "1 "
+#define MBTK_VOICE_END_REASON_NO_ROUTE_DES "3 "
+#define MBTK_VOICE_END_REASON_CHANNEL_UNACCEPTABLE "6 "
+#define MBTK_VOICE_END_REASON_OPERATOR_DETERMINED_BARRING "8 "
+#define MBTK_VOICE_END_REASON_NORMAL_CALL_CLEARING "16 "
+#define MBTK_VOICE_END_REASON_USER_BUSY "17 "
+#define MBTK_VOICE_END_REASON_NO_USER_RESPONDING "18 "
+#define MBTK_VOICE_END_REASON_USER_ALERTING_NO_ANSWER "19 "
+#define MBTK_VOICE_END_REASON_CALL_REJECTED "21 "
+#define MBTK_VOICE_END_REASON_NUMBER_CHANGED "22 "
+#define MBTK_VOICE_END_REASON_PREEMPTION "25 "
+#define MBTK_VOICE_END_REASON_NON_SELECTED_USER_CLEARING "26 "
+#define MBTK_VOICE_END_REASON_DESTINATION_OUT_OF_ORDER "27 "
+#define MBTK_VOICE_END_REASON_INVALID_NUMBER_FORMAT "28 "
+#define MBTK_VOICE_END_REASON_FACILITY_REJECTED "29 "
+#define MBTK_VOICE_END_REASON_STATUS_ENQUIRY "30 "
+#define MBTK_VOICE_END_REASON_NORMAL_UNSPECIFIED "31 "
+#define MBTK_VOICE_END_REASON_NO_CIRCUIT_AVAILABLE "34 "
+#define MBTK_VOICE_END_REASON_NETWORK_OUT_OF_ORDER "38 "
+#define MBTK_VOICE_END_REASON_TEMPORARY_FAILURE "41 "
+#define MBTK_VOICE_END_REASON_SWITCHING_EQUIPMENT_CONGESTION "42 "
+#define MBTK_VOICE_END_REASON_ACCESS_INFORMATION_DISCARDED "43 "
+#define MBTK_VOICE_END_REASON_REQUESTED_CIRCUIT_UNAVAILABLE "44 "
+#define MBTK_VOICE_END_REASON_RESOURCE_UNAVAILABLE "47 "
+#define MBTK_VOICE_END_REASON_QOS_UNAVAILABLE "49 "
+#define MBTK_VOICE_END_REASON_REQUESTED_FACILITY_NOT_SUBSCRIBED "50 "
+#define MBTK_VOICE_END_REASON_INCOMING_CALLS_BARRED_WITHIN_CUG "55 "
+#define MBTK_VOICE_END_REASON_BEARER_CAPABILITY_NOT_AUTHORIZED "57 "
+#define MBTK_VOICE_END_REASON_BEARER_CAPABILITY_NOT_AVAILABLE "58 "
+#define MBTK_VOICE_END_REASON_SERVICE_NOT_AVAILABLE "63 "
+#define MBTK_VOICE_END_REASON_BEARER_SERVICE_NOT_IMPLEMENTED "65 "
+#define MBTK_VOICE_END_REASON_ACM_MAX_REACHED "68 "
+#define MBTK_VOICE_END_REASON_FACILITY_NOT_IMPLEMENTED "69 "
+#define MBTK_VOICE_END_REASON_ONLY_RDI_BEARER_CAPABILITY_AVAILABLE "70 "
+#define MBTK_VOICE_END_REASON_SERVICE_NOT_IMPLEMENTED "79 "
+#define MBTK_VOICE_END_REASON_INVALID_TRANSACTION_ID "81 "
+#define MBTK_VOICE_END_REASON_USER_NOT_MEMBER_OF_CUG "87 "
+#define MBTK_VOICE_END_REASON_INCOMPATIBLE_DESTINATION "88 "
+#define MBTK_VOICE_END_REASON_INVALID_TRANSIT_NETWORK_SELECTION "91 "
+#define MBTK_VOICE_END_REASON_INCORRECT_MESSAGE "95 "
+#define MBTK_VOICE_END_REASON_INVALID_MANDATORY_INFORMATION "96 "
+#define MBTK_VOICE_END_REASON_MESSAGE_TYPE_NON_EXISTENT "97 "
+#define MBTK_VOICE_END_REASON_MESSAGE_TYPE_WRONG_STATE "98 "
+#define MBTK_VOICE_END_REASON_INFORMATION_ELEMENT_NOT_EXISTENT "99 "
+#define MBTK_VOICE_END_REASON_CONDITIONAL_IE_ERROR "100 "
+#define MBTK_VOICE_END_REASON_MESSAGE_WRONG_STATE "101 "
+#define MBTK_VOICE_END_REASON_RECOVERY_AFTER_TIMER_EXPIRY "102 "
+#define MBTK_VOICE_END_REASON_PROTOCOL_ERROR_UNSPECIFIED "111 "
+#define MBTK_VOICE_END_REASON_INERWORKING_UNSPECIFIED "127 "
+#define MBTK_VOICE_END_REASON_CALL_BARRING "224 "
+#define MBTK_VOICE_END_REASON_FDN_BLOCKED "241 "
+#define MBTK_VOICE_END_REASON_END "end"
+
+typedef enum{
+ GSW_LOCAL_END_NORMAL = 0,
+ GSW_PEER_END_NORMAL,
+ GSW_OTHER_END_NORMAL,
+ GSW_END_ABNORMAL,
+} gsw_call_end_reason_enum;
+
+//mbtk end_reason enum define
+typedef struct {
+ char mbtk_end_reason[128];
+ gsw_call_end_reason_enum end_reason;
+}end_reason_t;
+
+end_reason_t g_end_reason[] = {
+{MBTK_VOICE_END_REASON_UNASSIGNED_NUMBER, GSW_PEER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NO_ROUTE_DES, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_CHANNEL_UNACCEPTABLE, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_OPERATOR_DETERMINED_BARRING, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_NORMAL_CALL_CLEARING, GSW_LOCAL_END_NORMAL},
+{MBTK_VOICE_END_REASON_USER_BUSY, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NO_USER_RESPONDING, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_USER_ALERTING_NO_ANSWER, GSW_LOCAL_END_NORMAL},
+{MBTK_VOICE_END_REASON_CALL_REJECTED, GSW_LOCAL_END_NORMAL},
+{MBTK_VOICE_END_REASON_NUMBER_CHANGED, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_PREEMPTION, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NON_SELECTED_USER_CLEARING, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_DESTINATION_OUT_OF_ORDER, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_INVALID_NUMBER_FORMAT, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_FACILITY_REJECTED, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_STATUS_ENQUIRY, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NORMAL_UNSPECIFIED, GSW_PEER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NO_CIRCUIT_AVAILABLE, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_NETWORK_OUT_OF_ORDER, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_TEMPORARY_FAILURE, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_SWITCHING_EQUIPMENT_CONGESTION, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_ACCESS_INFORMATION_DISCARDED, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_REQUESTED_CIRCUIT_UNAVAILABLE, GSW_OTHER_END_NORMAL},
+{MBTK_VOICE_END_REASON_SERVICE_NOT_AVAILABLE, GSW_END_ABNORMAL},
+{MBTK_VOICE_END_REASON_END, GSW_OTHER_END_NORMAL}
+
+};
+
+int gsw_global_end_reason = GSW_OTHER_END_NORMAL;
+
+//----------------end_reason end------------
+
+
+typedef uint32_t voice_client_handle_type;
+
+
+
+static mbtk_info_handle_t* call_info_handle = NULL;
+static int level_call = 0;
+int gsw_voice_init_flag = 0;
+int auto_answer_flag = 0;
+voice_client_handle_type g_call_val = -1;
+CallStateInd gsw_voice_callback = NULL;
+
+
+int state_t = 0;
+char* phone_num_t = NULL;
+char* phone_num_t2 = NULL;
+int call_id_t = 0;
+int call_id_t2 = 0;
+
+#define lib_mbtk_path "/lib/libmbtk_lib.so"
+static void *dlHandle_mbtk;
+
+static mbtk_info_handle_t* (*mbtk_info_handle_get)(void);
+int (*mbtk_call_state_change_cb_reg)(mbtk_info_handle_t* handle, mbtk_info_callback_func cb);
+int (*mbtk_call_start)(mbtk_info_handle_t* handle, char* phone_number);
+int (*mbtk_call_hang)(mbtk_info_handle_t* handle);
+int (*mbtk_a_call_hang)(mbtk_info_handle_t* handle, int phone_id);
+int (*mbtk_call_answer)(mbtk_info_handle_t* handle);
+int (*mbtk_call_reg_get)(mbtk_info_handle_t* handle, mbtk_call_info_t *reg);
+static void (*mbtk_log)(int level, const char *format, ...);
+static void (*mbtk_log_init)(char *path, char *tag);
+
+/*rtp begin*/
+int (*mbtk_rtp_init)();
+int (*mbtk_rtp_deinit)();
+int (*mbtk_rtp_enable)(bool enable);
+int (*mbtk_rtp_remote_ip_set)(const char *ipv4);
+int (*mbtk_rtp_server_port_set)(int port);
+int (*mbtk_rtp_client_port_set)(int port);
+int (*mbtk_rtp_sample_rate_set)(int sample_rate);
+int (*mbtk_rtp_channel_set)(int channel);
+/*rtp end*/
+
+
+#ifndef LOG_ERR_LEVEL
+#define LOG_ERR_LEVEL 3 /* error conditions */
+#endif
+#ifndef LOG_WARN_LEVEL
+#define LOG_WARN_LEVEL 4 /* warning conditions */
+#endif
+#ifndef LOG_INFO_LEVEL
+#define LOG_INFO_LEVEL 6 /* informational */
+#endif
+#ifndef LOG_DEBUG_LEVEL
+#define LOG_DEBUG_LEVEL 7 /* debug-level messages */
+#endif
+#ifndef LOG_VERBOSE_LEVEL
+#define LOG_VERBOSE_LEVEL 8
+#endif
+
+#define GSW_VOICE "[HAL][GSW_VOICE]"
+
+#define LOGV(fmt, args ...) \
+ do{ \
+ char *file_ptr_1001 = __FILE__; \
+ char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
+ char line_1001[10] = {0}; \
+ sprintf(line_1001, "%d", __LINE__); \
+ while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+ if(*ptr_1001 == '/') \
+ break; \
+ ptr_1001--; \
+ } \
+ mbtk_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_VOICE"" fmt, ptr_1001 + 1, line_1001, ##args); \
+ } while(0)
+
+#define LOGI(fmt, args...) \
+ do{ \
+ char *file_ptr_1001 = __FILE__; \
+ char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
+ char line_1001[10] = {0}; \
+ sprintf(line_1001, "%d", __LINE__); \
+ while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+ if(*ptr_1001 == '/') \
+ break; \
+ ptr_1001--; \
+ } \
+ mbtk_log(LOG_INFO_LEVEL, "%s#%s: "GSW_VOICE"" fmt, ptr_1001 + 1, line_1001, ##args); \
+ } while(0)
+
+#define LOGD(fmt, args...) \
+ do{ \
+ char *file_ptr_1001 = __FILE__; \
+ char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
+ char line_1001[10] = {0}; \
+ sprintf(line_1001, "%d", __LINE__); \
+ while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+ if(*ptr_1001 == '/') \
+ break; \
+ ptr_1001--; \
+ } \
+ mbtk_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_VOICE"" fmt, ptr_1001 + 1, line_1001, ##args); \
+ } while(0)
+
+#define LOGW(fmt, args...) \
+ do{ \
+ char *file_ptr_1001 = __FILE__; \
+ char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
+ char line_1001[10] = {0}; \
+ sprintf(line_1001, "%d", __LINE__); \
+ while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+ if(*ptr_1001 == '/') \
+ break; \
+ ptr_1001--; \
+ } \
+ mbtk_log(LOG_WARN_LEVEL, "%s#%s: "GSW_VOICE"" fmt, ptr_1001 + 1, line_1001, ##args); \
+ } while(0)
+
+#define LOGE(fmt, args...) \
+ do{ \
+ char *file_ptr_1001 = __FILE__; \
+ char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1; \
+ char line_1001[10] = {0}; \
+ sprintf(line_1001, "%d", __LINE__); \
+ while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+ if(*ptr_1001 == '/') \
+ break; \
+ ptr_1001--; \
+ } \
+ mbtk_log(LOG_ERR_LEVEL, "%s#%s: "GSW_VOICE"" fmt, ptr_1001 + 1, line_1001, ##args); \
+ } while(0)
+
+static int mbtk_rtp_api_import()
+{
+ mbtk_rtp_init = (int (*)(void))dlsym(dlHandle_mbtk, "mbtk_rtp_init");
+ if (mbtk_rtp_init == NULL)
+ {
+ LOGE("mbtk_rtp_init dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_deinit = (int (*)(void))dlsym(dlHandle_mbtk, "mbtk_rtp_deinit");
+ if (mbtk_rtp_deinit == NULL)
+ {
+ LOGE("mbtk_rtp_deinit dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_enable = (int (*)(bool enable))dlsym(dlHandle_mbtk, "mbtk_rtp_enable");
+ if (mbtk_rtp_enable == NULL)
+ {
+ LOGE("mbtk_rtp_enable dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_remote_ip_set = (int (*)(const char *ipv4))dlsym(dlHandle_mbtk, "mbtk_rtp_remote_ip_set");
+ if (mbtk_rtp_remote_ip_set == NULL)
+ {
+ LOGE("mbtk_rtp_remote_ip_set dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_server_port_set = (int (*)(int port))dlsym(dlHandle_mbtk, "mbtk_rtp_server_port_set");
+ if (mbtk_rtp_server_port_set == NULL)
+ {
+ LOGE("mbtk_rtp_server_port_set dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_client_port_set = (int (*)(int port))dlsym(dlHandle_mbtk, "mbtk_rtp_client_port_set");
+ if (mbtk_rtp_client_port_set == NULL)
+ {
+ LOGE("mbtk_rtp_client_port_set dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_sample_rate_set = (int (*)(int sample_rate))dlsym(dlHandle_mbtk, "mbtk_rtp_sample_rate_set");
+ if (mbtk_rtp_sample_rate_set == NULL)
+ {
+ LOGE("mbtk_rtp_sample_rate_set dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_rtp_channel_set = (int (*)(int channel))dlsym(dlHandle_mbtk, "mbtk_rtp_channel_set");
+ if (mbtk_rtp_channel_set == NULL)
+ {
+ LOGE("mbtk_rtp_channel_set dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+
+
+static int mbtk_call_api_import()
+{
+ dlHandle_mbtk = dlopen(lib_mbtk_path, RTLD_NOW);
+ if (dlHandle_mbtk == NULL)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");
+ if (mbtk_log_init == NULL)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");
+ if (mbtk_log == NULL)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_info_handle_get = (mbtk_info_handle_t* (*)(void))dlsym(dlHandle_mbtk, "mbtk_info_handle_get");
+ if (mbtk_info_handle_get == NULL)
+ {
+ LOGE("mbtk_info_handle_get dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_state_change_cb_reg = (int (*)(mbtk_info_handle_t* handle, mbtk_info_callback_func cb))dlsym(dlHandle_mbtk, "mbtk_call_state_change_cb_reg");
+ if(mbtk_call_state_change_cb_reg == NULL)
+ {
+ LOGE("mbtk_call_state_change_cb_reg dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_start = (int (*)(mbtk_info_handle_t* handle, char* phone_number))dlsym(dlHandle_mbtk, "mbtk_call_start");
+ if(mbtk_call_start == NULL)
+ {
+ LOGE("mbtk_call_start dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_answer = (int (*)(mbtk_info_handle_t* handle))dlsym(dlHandle_mbtk, "mbtk_call_answer");
+ if(mbtk_call_answer == NULL)
+ {
+ LOGE("mbtk_call_answer dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_hang = (int (*)(mbtk_info_handle_t* handle))dlsym(dlHandle_mbtk, "mbtk_call_hang");
+ if(mbtk_call_hang == NULL)
+ {
+ LOGE("mbtk_call_hang dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_a_call_hang = (int (*)(mbtk_info_handle_t* handle, int phone_id))dlsym(dlHandle_mbtk, "mbtk_a_call_hang");
+ if(mbtk_a_call_hang == NULL)
+ {
+ LOGE("mbtk_a_call_hang dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_reg_get = (int (*)(mbtk_info_handle_t* handle, mbtk_call_info_t *reg))dlsym(dlHandle_mbtk, "mbtk_call_reg_get");
+ if(mbtk_call_reg_get == NULL)
+ {
+ LOGE("mbtk_call_reg_get dlsym fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ return mbtk_rtp_api_import();
+}
+
+static int end_reason_mbtk_to_gsw(char* mbtk_reason)
+{
+ LOGE("mbtk_reason:%s\n", mbtk_reason);
+ gsw_global_end_reason = GSW_OTHER_END_NORMAL;
+ for(int i = 0; 0 != strncmp(g_end_reason[i].mbtk_end_reason, MBTK_VOICE_END_REASON_END, strlen(MBTK_VOICE_END_REASON_END)); i++)
+ {
+ if(0 == strncmp(mbtk_reason, g_end_reason[i].mbtk_end_reason, strlen(g_end_reason[i].mbtk_end_reason)))
+ {
+ gsw_global_end_reason = g_end_reason[i].end_reason;
+ LOGE("gsw_global_end_reason:%d\n", gsw_global_end_reason);
+ break;
+ }
+ }
+
+ return 0;
+}
+
+void gsw_call_state_change_cb(const void *data, int data_len)
+{
+ mbtk_call_info_t *reg = (mbtk_call_info_t *)data;
+ switch (reg->call_wait)
+ {
+ case MBTK_CLCC:
+ {
+ LOGD("RING : %d, %d, %d, %d, %d, %s, %d, %d, end_reason:%s", reg->dir1, reg->dir, reg->state, reg->mode, reg->mpty, reg->phone_number, reg->type, reg->disconnected_id, reg->end_reason);
+ switch(reg->state)
+ {
+ case 0:
+ state_t = GSW_VOICE_CALL_CONNECTED;
+ break;
+ case 1:
+ state_t = GSW_VOICE_CALL_HOLDING;
+ break;
+ case 2:
+ state_t = GSW_VOICE_CALL_DIALING;
+ break;
+ case 3:
+ state_t = GSW_VOICE_CALL_ALERTING;
+ break;
+ case 4:
+ state_t = GSW_VOICE_CALL_INCOMING;
+ break;
+ case 5:
+ state_t = GSW_VOICE_CALL_WAITING;
+ break;
+ case 6:
+ {
+ state_t = GSW_VOICE_CALL_END;
+ call_id_t = reg->dir1;
+ end_reason_mbtk_to_gsw((char *)reg->end_reason);
+ break;
+ }
+
+ }
+
+ if(gsw_voice_callback)
+ {
+ gsw_voice_callback(reg->dir1, state_t);
+ }
+
+ }
+ break;
+ case MBTK_DISCONNECTED:
+ {
+ LOGD("RING : call dis connected!");
+ LOGD("RING : %d, %d, %d, %d, %d, %s, %d, %d, end_reason:%s", reg->dir1, reg->dir, reg->state, reg->mode, reg->mpty, reg->phone_number, reg->type, reg->disconnected_id, reg->end_reason);
+ state_t = GSW_VOICE_CALL_END;
+ call_id_t = reg->dir1;
+ end_reason_mbtk_to_gsw((char *)reg->end_reason);
+ if(gsw_voice_callback)
+ {
+ gsw_voice_callback(reg->disconnected_id, state_t);
+ }
+ }
+ break;
+ case MBTK_CPAS:
+ LOGD("CALL : Call state = %d", reg->pas);
+ switch (reg->pas)
+ {
+ case MBTK_CALL_RADY:
+ LOGD("CALL: call READY");
+ break;
+ case MBTK_CALL_UNAVAILABLE:
+ LOGD("CALL: call unavaliable");
+ break;
+ case MBTK_CALL_UNKNOWN:
+ LOGD("CALL: call unknown");
+ break;
+ case MBTK_CALL_RINGING:
+ LOGD("CALL: call ringing");
+ break;
+ case MBTK_CALL_PROGRESS:
+ LOGD("CALL: call progress");
+ break;
+ case MBTK_CALL_ASLEEP:
+ LOGD("CALL: call asleep");
+ break;
+ case MBTK_CALL_ACTIVE:
+ LOGD("CALL: call active");
+ break;
+ default:
+ //LOGE("\r\n");
+ break;
+ }
+ break;
+ default:
+ LOGE("RING : None call_wait = %d", reg->call_wait);
+ break;
+ }
+}
+
+
+/**
+* @brief init voice sdk,and register the status indicated callback function
+* @param [in] CallStateInd ind: status indicated callback function
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_sdk_init(CallStateInd ind)
+{
+ int ret;
+
+ if (gsw_voice_init_flag == 1 && call_info_handle != NULL)
+ {
+ return GSW_HAL_SUCCESS;
+ }
+
+ if(ind == NULL)
+ {
+ LOGE("parameter is null\n");
+ return GSW_HAL_ARG_INVALID;
+ }
+
+ ret = mbtk_call_api_import();
+ if(ret != 0)
+ {
+ if(mbtk_log != NULL)
+ {
+ LOGE("[gsw_voice_sdk_init]mbtk_call_api_import fail\n");
+ }
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_log_init("syslog", "MBTK_RIL");
+
+
+ if(ret < 0)
+ {
+ LOGE("mbtk_call_api_import fail,ret = %d\n",ret);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ ret=mbtk_rtp_init();
+
+ if(ret!=0)
+ {
+ LOGE("[gsw_voice_sdk_init]mbtk_rtp_init fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ if(call_info_handle == NULL)
+ {
+ call_info_handle = mbtk_info_handle_get();
+ if(call_info_handle != NULL)
+ {
+ LOGE("create gsw_voice_sdk_init success\n");
+
+ ret = mbtk_call_state_change_cb_reg(call_info_handle, gsw_call_state_change_cb);
+ if(ret)
+ {
+ LOGE("mbtk_call_state_change_cb_reg fail,ret = %d\n",ret);
+ (void) mbtk_rtp_deinit();
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ else
+ {
+ gsw_voice_init_flag = 1;
+ gsw_voice_callback = ind;
+ LOGE("create gsw_voice_sdk_init success\n");
+ return GSW_HAL_SUCCESS;
+ }
+
+ }
+
+ else
+ {
+ (void) mbtk_rtp_deinit();
+ LOGE("create gsw_voice_sdk_init fail\n");
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief set speaker_volume
+* @param [in] int32_t volume:1(Min)-7(Max)
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_speaker_volume(int32_t volume)
+{
+ //UNUSED(volume);
+
+#if 0
+
+ if(volume < 0 || volume > 5)
+ {
+ level_call = 0;
+ }
+ else
+ {
+ //支持-36~12
+ switch(volume)
+ {
+ case 0 :
+ level_call = -20;
+ break;
+ case 1 :
+ level_call = -14;
+ break;
+ case 2 :
+ level_call = -8;
+ break;
+ case 3 :
+ level_call = 0;
+ break;
+ case 4 :
+ level_call = 5;
+ break;
+ case 5 :
+ level_call = 12;
+ break;
+ default:
+ break;
+ }
+ }
+
+ mbtk_audio_dsp_set(1, level_call);
+ if(err)
+ {
+ LOGE("Error : %d\n", err);
+ return -1;
+ }
+ else
+ {
+ LOGE("Set success.\n");
+ }
+#endif
+
+ char cmd[128] = {0};
+ int lv = 0;
+
+ memset(cmd ,0x00, sizeof(cmd));
+
+ if(volume < 1 || volume > 7)
+ {
+ LOGE("Error volume : %d", volume);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ else
+ {
+ switch(volume)
+ {
+ case 1 :
+ lv = -36;
+ break;
+ case 2 :
+ lv = -36;
+ break;
+ case 3 :
+ lv = -27;
+ break;
+ case 4 :
+ lv = -18;
+ break;
+ case 5 :
+ lv = -9;
+ break;
+ case 6 :
+ lv = 0;
+ break;
+ case 7:
+ lv = 12;
+ break;
+ default:
+ break;
+ }
+ }
+
+ sprintf(cmd, "ubus call audio_if config_dspgain \"{\'type\':%d,\'gain\':%d}\"", 1, lv);
+// sLOGE(cmd, "ubus call audio_if volume_set \'{\"param0\":%d}\'", lv);
+ int err = system(cmd);
+ if ((err != -1) && (err != 127))
+ {
+ LOGE("Set success.");
+ level_call = volume;
+ }
+ else
+ {
+ LOGE("Error : %d", err);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief start a voice call
+* @param [in] char *callNumber
+* @param [out] CallHandle *handle
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_normal_voice_start(CallHandle *handle, const char *callNumber)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ mbtk_call_info_t reg = {0};
+ int ret = -1;
+
+
+ if(handle == NULL)
+ {
+ LOGE("handle is null\n");
+ return GSW_HAL_ARG_INVALID;
+ }
+
+ if(callNumber == NULL)
+ {
+ LOGE("callNumber is null\n");
+ return GSW_HAL_ARG_INVALID;
+ }
+
+
+ ret = mbtk_call_start(call_info_handle, (char *)callNumber);
+
+ if(ret != 0)
+ {
+ LOGE("mbtk_call_start fail,ret = %d\n",ret);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ //get call id
+ mbtk_call_reg_get(call_info_handle, ®);
+ LOGE("call id = %d\n",reg.dir1);
+ *handle = reg.dir1;
+ LOGE("gsw_voice_normal_voice_start id = %d\n", (int)*handle);
+
+
+ return GSW_HAL_SUCCESS;
+
+}
+
+/**
+* @brief answer a voice call
+* @param [in] CallHandle handle
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_answer(CallHandle handle)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret = -1;
+
+
+ ret = mbtk_call_answer(call_info_handle);
+
+ if(ret != 0)
+ {
+ LOGE("mbtk_call_answer fail,ret = %d\n", ret);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ else
+ {
+ LOGE("mbtk_call_answer success\n");
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+
+/**
+* @brief hangup a voice call
+* @param [in] CallHandle handle
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_hangup(CallHandle handle)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret = -1;
+
+ ret = mbtk_a_call_hang(call_info_handle,handle);
+
+ if(ret != 0)
+ {
+ LOGE("mbtk_a_call_hang fail,ret = %d\n", ret);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ else
+ {
+ LOGE("mbtk_a_call_hang success\n");
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief set auto answer mode
+* @param [in] int32_t mode:0-1, 0:NO(close auto answer), 1:YES(auto answer)
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_auto_answer_mode(int32_t mode)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ if(mode == 1)
+ {
+ int ret = -1;
+
+ ret = mbtk_call_answer(call_info_handle);
+ if(ret != 0)
+ {
+ LOGE("mbtk_call_answer fail,ret = %d\n", ret);
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ else
+ {
+ LOGE("mbtk_call_answer success\n");
+ }
+ }
+
+ return GSW_HAL_SUCCESS;
+}
+
+int32_t gsw_voice_get_current_call_end_reason(CallHandle handle)
+{
+ if(gsw_voice_init_flag == 0 || call_info_handle == NULL)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int reason = gsw_global_end_reason;
+
+ return reason;
+}
+
+
+
+/*##########################################rtp begin*/
+/**
+* @brief set audio mode
+* @param [in] AudioMode audioMode
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_audio_mode(AudioMode audioMode)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret=mbtk_rtp_enable(audioMode);
+ if(ret !=0 )
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief set rtp ip address of remote
+* @param [in] char *ip :ip address
+* @param [in] int32_t len: length
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_remote_rtp_ip(const char *ip, int32_t len)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret=mbtk_rtp_remote_ip_set(ip);
+ if(ret !=0 )
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief set rtp mode and port
+* @param [in] RTPMode rtpMode: rtp mode
+* @param [in] int32_t port:rtp port
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_rtp_port(RTPMode rtpMode, int32_t port)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret;
+ if(rtpMode==GSW_RTP_CLIENT)
+ {
+ ret = mbtk_rtp_client_port_set(port);
+ }
+ else
+ {
+ ret = mbtk_rtp_server_port_set(port);
+ }
+ if(ret !=0 )
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ return GSW_HAL_SUCCESS;
+}
+
+/**
+* @brief set rtp mode and port
+* @param [in] int32_t clockRate: clock rate
+* @param [in] int32_t channel:channel
+* @param [in] int32_t latency:latency
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_NORMAL_FAIL
+*/
+int32_t gsw_voice_set_rtp_param(int32_t clockRate, int32_t channel, int32_t latency)
+{
+ if(gsw_voice_init_flag == 0)
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+
+ int ret=mbtk_rtp_channel_set(channel);
+ if(ret==0)
+ {
+ ret=mbtk_rtp_sample_rate_set(clockRate);
+ }
+ if(ret !=0 )
+ {
+ return GSW_HAL_NORMAL_FAIL;
+ }
+ return GSW_HAL_SUCCESS;
+}
+/*##########################################rtp end*/
+