diff src/aci2/mfw/mfw_bta.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/mfw/mfw_bta.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,2719 @@
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         $Workfile:: mfw_bta.c       $|
+| $Author:: Rm                          $Revision::  1              $|
+| CREATED: 04.01.01                     $Modtime:: 4.01.01 15:14    $|
+| STATE  : code                                                      |
++--------------------------------------------------------------------+
+
+   MODULE  : MFW_BTA
+
+   PURPOSE : This modul contains the additional functions for BT management.
+
+*/
+#define ENTITY_MFW
+
+#include "mfw_sys.h"
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "custom.h"
+#include "gsm.h"
+
+#include "prim.h"
+#include "p_btp.h"
+
+#include "Bti.h"
+#include "bti_btp.h"
+#include "mfw_mfw.h"
+#include "mfw_acie.h"
+#include "mfw_bt.h"
+#include "mfw_bta.h"
+
+#include <string.h>
+
+/* TI BT header */
+#ifdef BT_INTERFACE
+#include "rv_general.h"
+#include "hsg_general.h"
+#include "hsg_messages.h"
+#include "rvm_api.h"
+#include "bmi_api.h"
+
+/*#ifdef PCA_6350*/
+#include "pca_gw_mmi.h"
+/*#endif*/
+#endif /* BT_INTERFACE */
+
+#ifdef _SIMULATION_
+#include "bti_win.h"
+#endif
+
+/* global used structures */
+T_MFW_BT_SERVICE_LST found_headset;        /* list with found devices (headset) */
+T_MFW_BT_DEVICE_LST service_list;          /* list with service id's related to a bd_addr */
+T_MFW_BT_SERVICE_LST found_dial_up;        /* list with found services (dial_up) */
+T_MFW_BT_SERVICE_LST found_fax;            /* list with found services (fax) */
+T_MFW_BT_SERVICE_LST found_opp;            /* list with found services (OPP) */
+T_MFW_BT_SERVICE_LST found_sync;           /* list with found services (SYNC) */
+T_MFW_BT_SERVICE_LST found_sync_cmd;       /* list with found services (SYNC_CMD) */
+T_MFW_BT_AUTHORIZATION_LIST authorized_devices_list; /* list of authorized devices */
+
+char receiv_object_name[MFW_BT_OPP_OBJECT_NAME_MAX_LEN];/* static buffer for object name: limited with 256 characters */
+char receiv_object_mime_type[MFW_BT_OPP_OBJECT_MIME_MAX_LEN];/* static buffer for MIME type of object: limited with 256 characters */
+char receiv_sync_object_mime_type[MFW_BT_OPP_OBJECT_MIME_MAX_LEN];/* static buffer for MIME type of object: limited with 256 characters */
+char sync_object_name[MFW_BT_OPP_OBJECT_NAME_MAX_LEN];/* static buffer for object name: limited with 256 characters */
+char sync_object_location_id[MFW_BT_SYNC_OBJECT_IDENTIFIER];/* static buffer for sync object path on server: limited with 256 characters */
+
+#ifdef _SIMULATION_
+#define MFW_BT_OPP_BUFFER_LENGTH 10
+static unsigned char server_syn_object[MFW_BT_OPP_BUFFER_LENGTH];
+static  char mfw_test_syn_obj[] = {'v', 'C', 'a', 'l', '\0'};
+static  char mfw_test_opp_obj_name[] = {'v', 'C', 'a', 'r', 'd', '\0'};
+static  char hsg_default_name [] ={'H', 'S', 'G', '1', '\0'};
+static  char client_obj_name [] ={'C', 'l', 'i', 'e', 'n', 't', '\0'};
+static unsigned char server_business_card[MFW_BT_OPP_BUFFER_LENGTH];/* temporary field for the pulled server card */
+static  char server_default_name [] ={'S', 'e', 'r', 'v', 'e', 'r', '\0'};
+static unsigned char server_buffer[MFW_BT_OPP_BUFFER_LENGTH];/* temporary field for received client objects at the server  */
+static unsigned char client_buffer[MFW_BT_OPP_BUFFER_LENGTH];/* temporary field for pushed client objects  */
+static unsigned char client_business_card[MFW_BT_OPP_BUFFER_LENGTH];/* temporary field for his own client card */
+#endif
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8445)         MODULE: MFW_BTA              |
+| STATE  : code                         ROUTINE: bta_response_cb     |
++--------------------------------------------------------------------+
+
+   PURPOSE : Response Callback Handler (receive bt primitive directly)
+             Note that the input paramter opc will be casted to USHORT
+             as Bluetooth is currently still using 16bit opcodes.
+
+*/
+GLOBAL BOOL bta_response_cb (ULONG opc, void * data)
+{
+  T_MFW_BT_PROFILE_CREATE_CNF *profile_create_cnf;
+  T_MFW_BT_PROFILE_DELETE_CNF *profile_delete_cnf;
+  T_MFW_BT_SERVICE_LST *id_ptr;
+  T_MFW_BT_DEVICE_LST *idd_ptr;
+  T_MFW_BT_SERVICE_ID *service_id;
+  T_MFW_BT_DEVICE_ID *dev_id;
+  T_MFW_BT_SERVICE_ID *help_id;
+  T_MFW_BT_DEVICE_ID *help_serv_id;
+  T_MFW_BT_PROFILE_CNF *profile_cnf_data;
+  T_MFW_BT_PIN_IND *pin_indication;
+  T_MFW_BT_DEV_PAIR_IND *pair_indication;
+  T_MFW_BT_DEVICE_IND *device_indication;
+  T_MFW_BT_SERVICE_IND *service_indication;
+  T_MFW_BT_REST_CONFIG *restore_configuration;
+  T_MFW_BT_DISCON_DUN_FAX_IND *disc_dun_fax_ind;
+  T_MFW_BT_CALL_STATUS_DUN_FAX *dun_call_state;
+  T_MFW_BT_AUTHORIZATION_IND *authorization_ind;
+  T_MFW_BT_OPP_PUT_CNF *opp_put_cnf;
+  T_MFW_BT_OPP_PUSH_CNF *opp_obj_push_cnf;
+  T_MFW_BT_OPP_PULL_CNF *opp_obj_pull_cnf;
+  T_MFW_BT_SERVICE_SEARCH_CNF *search_conf;
+  T_MFW_BT_DEVICE_SEARCH_CNF *dev_search_conf;
+  T_MFW_BT_CONNECT_IND *connect_ind;
+  T_MFW_BT_CONNECT_INF *connect_inf;
+  T_MFW_BT_CONNECT_CNF *connect_cnf;
+  T_MFW_BT_DISCONNECT_CNF *disconnect_cnf;
+  T_MFW_BT_DISCON_DUN_FAX_CNF *discon_dun_fax_cnf;
+  T_MFW_BT_DISCONNECT_IND *disconnect_ind;
+  T_MFW_BT_TRANSFER_AUDIO_OUT_CNF *audio_out_cnf;
+  T_MFW_BT_TRANSFER_AUDIO_IN_CNF *audio_in_cnf;
+  T_MFW_BT_OPP_PUT_IND *opp_put_ind;
+  T_MFW_BT_SRV_SYNC_CNF *srv_sync_cnf;
+  T_MFW_BT_SRV_SYNC_AUTH_IND * srv_sync_auth;
+  T_MFW_BT_SRV_SYNC_PULL_IND * srv_sync_pull_ind;
+  T_MFW_BT_SRV_SYNC_PUSH_IND * srv_sync_push_ind;
+  T_MFW_BT_SRV_SYNC_PUSH_CNF * srv_sync_push_cnf;
+  U8 len;
+  T_MFW_BT_CHNG_LOCAL_NAME *c_loc_name;
+  T_MFW_BT_READ_LOCAL_NAME *r_loc_name;
+  T_MFW_BT_REMOTE_DEV_INFO_RES *rem_dev_info;
+  T_MFW_BT_CHNG_CONNECTABLE_MODE *chng_cmode;
+  T_MFW_BT_CHNG_DISCOVERABLE_MODE *chng_dmode;
+  T_MFW_BT_READ_BD_ADDR *r_bd_addr;
+/*#ifdef PCA_6350*/
+  T_MFW_BT_PCA_GW_STATUS_CFM *pca_gw_status;
+  T_MFW_BT_PCA_GW_LINK_MONITORING *pca_link_mon;
+  T_MFW_BT_PCA_GW_CALL_MONITORING *pca_call_mon;
+  T_MFW_BT_PCA_GW_HANGUP_CFM *pca_hangup;
+/*#endif*/ /*PCA_6350*/
+
+/* Cartman added begin */
+  T_MFW_BT_HSG_HEADSET_CONNECTION_IND *hsg_headset_connection_ind;
+  T_MFW_BT_HSG_SPECIFIC_CMD_CFM *hsg_specific_cmd_cfm;
+  T_MFW_BT_HSG_SAVE_LIST_CNF *hsg_save_list_cnf;
+/* Cartman added end */
+
+#ifdef _SIMULATION_
+
+  T_MFW_BT_SUBTYPE_DEV subtyp;
+  T_MFW_BT_SERVICE_TYPE service;
+  T_MFW_BT_SYNC_OBJECT syn_pull_obj, syn_push_obj;
+  T_MFW_BT_SYN_PASSWD mfw_sync_password[MFW_BT_PIN_MAX_LEN];
+  char * mfw_sync_password_ptr;
+  char j;
+  U8 headset_id, default_security;
+  T_MFW_BT_BD_ADDR client_address[MFW_BT_ADDR_MAX_LEN];
+  T_MFW_BT_BD_ADDR hsg_address[MFW_BT_ADDR_MAX_LEN];
+  T_MFW_BT_BD_ADDR server_address[MFW_BT_ADDR_MAX_LEN];
+  T_MFW_BT_BD_ADDR remote_address[MFW_BT_ADDR_MAX_LEN];
+  T_MFW_BT_SYN_OBJECT_STORE mfw_obj;
+  T_MFW_BT_SYNC_COMMAND mfw_syn_action;
+  T_MFW_BT_SYNC_SERVER_CONFIG syn_serv_config;
+  T_MFW_BT_SYN_OBJECT_STORE_ITEM mfw_obj_list, mfw_obj_list1;
+  T_MFW_BT_SYN_OBJECT_STORE_LIST mfw_obj_list_ptr, mfw_obj_list_ptr1;
+  T_MFW_BT_HSG_CLIENT_CONFIG client_config;
+  T_MFW_BT_HSG_SERVER_CONFIG server_conf;
+  T_MFW_BT_HSG_PHONE_NUMBER test_mfw_phone_list[4][30];
+  T_MFW_BT_HSG_KEY_LIST test_mfw_key_list[1];
+  T_MFW_BT_HSG_NAME hsg_name[MFW_BT_HSG_NAME_MAX_LEN];
+  T_MFW_BT_PRIORITY priority;
+  T_MFW_BT_CNF_ID headset_cnf_id;
+  BOOL rem_audio_ctr_supp_hsg;
+  BOOL mfw_keep_connection_opp;
+  T_MFW_BT_HEADSET_INFO hs_info;
+  U16 new_value;
+  T_MFW_BT_PARAM_NUMBER nb;
+  T_MFW_BT_CHANGE_PARA type;
+  T_MFW_BT_DUN_CONFIG dun_filter;
+  T_MFW_BT_FAX_CONFIG fax_filter;
+  T_MFW_BT_OPP_SERVER_CONFIG serv_config;
+  T_MFW_BT_OPP_PUT_RES opp_put_res;
+  T_MFW_BT_OPP_OBJECT receiv_obj, opp_push_obj, opp_pull_obj;
+  T_MFW_BT_PIN pin_code[MFW_BT_PIN_MAX_LEN];
+  T_MFW_BT_PIN_MODE pin_mode;
+  T_MFW_BT_RESULT_BT result_bt;
+  T_MFW_BT_PAIRABLE_MODE pair_mode;
+  T_MFW_BT_DEV_PAIR_LIST pairing_list;
+  T_MFW_BT_AUTHORIZATION_MASK auth_mask;
+  T_MFW_BT_AUTHORIZATION_MODE auth_mode;
+  T_MFW_BT_SECURITY_MODE sec_mode;
+
+#endif
+
+  TRACE_FUNCTION ("mfw_bta:bta_response_cb()");
+
+  switch ((USHORT) opc)
+  {
+    case BTP_PROFILE_CREATE_CNF:
+      MALLOC(profile_create_cnf, sizeof(T_MFW_BT_PROFILE_CREATE_CNF));
+      profile_create_cnf->profile = ((T_BTP_PROFILE_CREATE_CNF *)data)->device;
+      bt_signal(BT_CREATE_PROFILE_CNF, profile_create_cnf);
+      MFREE(profile_create_cnf);
+      return TRUE;
+
+    case BTP_PROFILE_DELETE_CNF:
+      MALLOC(profile_delete_cnf, sizeof(T_MFW_BT_PROFILE_DELETE_CNF));
+      profile_delete_cnf->profile = ((T_BTP_PROFILE_DELETE_CNF *)data)->device;
+      bt_signal(BT_DELETE_PROFILE_CNF, profile_delete_cnf);
+      MFREE(profile_delete_cnf);
+      return TRUE;
+
+    case BTP_INIT_PROFILE_CNF:
+      /* BTI confirms initialization of profile */
+      MALLOC(profile_cnf_data, sizeof(T_MFW_BT_PROFILE_CNF));
+      memset(profile_cnf_data, 0, sizeof(T_MFW_BT_PROFILE_CNF));
+      profile_cnf_data->service = ((T_BTP_INIT_PROFILE_CNF *)data)->device;
+      profile_cnf_data->result_bd = ((T_BTP_INIT_PROFILE_CNF *)data)->result;
+      profile_cnf_data->action = ((T_BTP_INIT_PROFILE_CNF *)data)->action;
+      profile_cnf_data->subtype = ((T_BTP_INIT_PROFILE_CNF *)data)->subtype;
+      profile_cnf_data->mfw_opp_mode = ((T_BTP_INIT_PROFILE_CNF *)data)->opp_mode;
+      profile_cnf_data->mfw_sync_mode = ((T_BTP_INIT_PROFILE_CNF *)data)->sync_serv_mode;
+      profile_cnf_data->mfw_syn_aut_mode = ((T_BTP_INIT_PROFILE_CNF *)data)->sync_init_auth;
+      bt_signal(BT_INIT_PROFILE_CNF, profile_cnf_data);
+#ifdef _SIMULATION_
+      if(profile_cnf_data->service EQ MFW_BT_SYNC)
+      {
+        TRACE_EVENT_P4("init cnf = %d, %d, %d, %d", profile_cnf_data->service, profile_cnf_data->subtype, profile_cnf_data->mfw_sync_mode, profile_cnf_data->mfw_syn_aut_mode);
+      }
+      else
+      {
+        TRACE_EVENT_P2("init cnf = %d, %d", profile_cnf_data->service, profile_cnf_data->subtype);
+      }
+#endif
+      MFREE(profile_cnf_data);
+      return TRUE;
+
+    case BTP_DEINIT_PROFILE_CNF:
+      /* BTI confirms deinitialization of profile */
+      MALLOC(profile_cnf_data, sizeof(T_MFW_BT_PROFILE_CNF));
+      memset(profile_cnf_data, 0, sizeof(T_MFW_BT_PROFILE_CNF));
+      profile_cnf_data->service = ((T_BTP_DEINIT_PROFILE_CNF *)data)->device;
+      profile_cnf_data->result_bd = ((T_BTP_DEINIT_PROFILE_CNF *)data)->result;
+      profile_cnf_data->subtype = ((T_BTP_DEINIT_PROFILE_CNF *)data)->subtype;
+      profile_cnf_data->mfw_opp_mode = ((T_BTP_DEINIT_PROFILE_CNF *)data)->opp_mode;
+      profile_cnf_data->mfw_sync_mode = ((T_BTP_DEINIT_PROFILE_CNF *)data)->sync_serv_mode;
+      profile_cnf_data->mfw_syn_aut_mode = ((T_BTP_DEINIT_PROFILE_CNF *)data)->sync_init_auth;
+      bt_signal(BT_DEINIT_PROFILE_CNF, profile_cnf_data);
+#ifdef _SIMULATION_
+      if(profile_cnf_data->service EQ MFW_BT_SYNC)
+      {
+        TRACE_EVENT_P4("deinit cnf = %d, %d, %d, %d", profile_cnf_data->service, profile_cnf_data->subtype, profile_cnf_data->mfw_sync_mode, profile_cnf_data->mfw_syn_aut_mode);
+      }
+      else
+      {
+        TRACE_EVENT_P2("deinit cnf = %d, %d", profile_cnf_data->service, profile_cnf_data->subtype);
+      }
+#endif
+      MFREE(profile_cnf_data);
+      return TRUE;
+  }
+
+  switch ((USHORT) opc)
+  {
+    case BTP_RECONFIG_PROFILE_CNF:
+      /* BTI confirms reconfiguration of profile */
+      MALLOC(profile_cnf_data, sizeof(T_MFW_BT_PROFILE_CNF));
+      memset(profile_cnf_data, 0, sizeof(T_MFW_BT_PROFILE_CNF));
+      profile_cnf_data->service = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->device;
+      profile_cnf_data->result_bd = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->result;
+      profile_cnf_data->subtype = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->subtype;
+      profile_cnf_data->mfw_opp_mode = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->opp_mode;
+      profile_cnf_data->mfw_sync_mode = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->sync_serv_mode;
+      profile_cnf_data->mfw_syn_aut_mode = ((T_BTP_RECONFIG_PROFILE_CNF *)data)->sync_init_auth;
+      bt_signal(BT_RECONFIG_PROFILE_CNF, profile_cnf_data);
+#ifdef _SIMULATION_
+      if(profile_cnf_data->service EQ MFW_BT_SYNC)
+      {
+        TRACE_EVENT_P4("reconf cnf = %d, %d, %d, %d", profile_cnf_data->service, profile_cnf_data->subtype, profile_cnf_data->mfw_sync_mode, profile_cnf_data->mfw_syn_aut_mode);
+      }
+      else
+      {
+        TRACE_EVENT_P2("reconf cnf = %d, %d", profile_cnf_data->service, profile_cnf_data->subtype);
+      }
+#endif
+      MFREE(profile_cnf_data);
+      return TRUE;
+
+    case BTP_RESTORE_LIST_RESULT:
+      /* BTI confirms restoring of default device list */
+      MALLOC(restore_configuration, sizeof(T_MFW_BT_REST_CONFIG));
+      memset(restore_configuration, 0, sizeof(T_MFW_BT_REST_CONFIG));
+      restore_configuration->service = ((T_BTP_RESTORE_LIST_RESULT *)data)->device;
+      restore_configuration->cause = ((T_BTP_RESTORE_LIST_RESULT *)data)->cause;
+      bt_signal(BT_RESTORE_LIST_RESULT, restore_configuration);
+#ifdef _SIMULATION_
+      if(restore_configuration->cause EQ MFW_BT_REST_LIST_ERR)
+      {
+          TRACE_EVENT("restore list err");
+      }
+      else if(restore_configuration->cause EQ MFW_BT_REST_CONFIG_ERR)
+      {
+          TRACE_EVENT("restore conf err");
+      }
+      else
+      {
+          TRACE_EVENT("restore conf no err");
+      }
+#endif
+      MFREE(restore_configuration);
+      return TRUE;
+
+    case BTP_RESTORE_CONF_RESULT:
+      /* BTI confirms restoring of configuration parameters */
+      MALLOC(restore_configuration, sizeof(T_MFW_BT_REST_CONFIG));
+      memset(restore_configuration, 0, sizeof(T_MFW_BT_REST_CONFIG));
+      restore_configuration->service = ((T_BTP_RESTORE_CONF_RESULT *)data)->device;
+      restore_configuration->cause = ((T_BTP_RESTORE_CONF_RESULT *)data)->cause;
+      bt_signal(BT_RESTORE_CONF_RESULT, restore_configuration);
+#ifdef _SIMULATION_
+      if(restore_configuration->cause EQ MFW_BT_REST_LIST_ERR)
+      {
+          TRACE_EVENT("restore list err");
+      }
+      else if(restore_configuration->cause EQ MFW_BT_REST_CONFIG_ERR)
+      {
+          TRACE_EVENT("restore conf err");
+      }
+      else
+      {
+          TRACE_EVENT("restore conf no err");
+      }
+#endif
+      MFREE(restore_configuration);
+      return TRUE;
+
+     case BTP_DEVICE_FOUND_IND:
+      /* BTI confirms finding of bluetooth device with bd_addr and service id's)*/
+      MALLOC(device_indication, sizeof(T_MFW_BT_DEVICE_IND));
+      memset(device_indication, 0, sizeof(T_MFW_BT_DEVICE_IND));
+
+      memcpy(device_indication->bd_addr, ((T_BTP_DEVICE_FOUND_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(device_indication->bd_name, ((T_BTP_DEVICE_FOUND_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      memcpy(device_indication->cod, ((T_BTP_DEVICE_FOUND_IND *)data)->cod, MFW_BT_DEVICE_CLASS_LEN);
+      device_indication->num_services = ((T_BTP_DEVICE_FOUND_IND *)data)->num_services;
+      device_indication->services = ((T_BTP_DEVICE_FOUND_IND *)data)->services;
+
+      MALLOC(dev_id, sizeof(T_MFW_BT_DEVICE_ID));/* allocate memory for new device id */
+      if(!dev_id)
+        return FALSE; /* no more memory */
+
+      memset(dev_id, 0, sizeof(T_MFW_BT_DEVICE_ID));
+      idd_ptr = &service_list;    /* pointer to list of services */
+      if(!idd_ptr->device_id)      /* test if any device id exist */
+      {
+        idd_ptr->device_id = dev_id; /* append new device_id */
+        memcpy(idd_ptr->device_id->bd_addr, device_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+        memcpy(idd_ptr->device_id->bd_name, device_indication->bd_name, MFW_BT_NAME_MAX_LEN);/* new name */
+        memcpy(idd_ptr->device_id->cod, device_indication->cod, MFW_BT_DEVICE_CLASS_LEN);/* new cod */
+        idd_ptr->device_id->num_services = device_indication->num_services;
+        idd_ptr->device_id->services = device_indication->services;
+        idd_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P2("dev found ind = %x %s", service_list.device_id->services, service_list.device_id->bd_addr);
+#endif
+      }
+      else
+      {
+        help_serv_id = idd_ptr->device_id;/* first element */
+        while(help_serv_id->next)        /* look for next device_id                 */
+        {
+          help_serv_id = help_serv_id->next;
+        }
+        help_serv_id->next = dev_id;/* append new device_id */
+        memcpy(help_serv_id->next->bd_addr, device_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+        memcpy(help_serv_id->next->bd_name, device_indication->bd_name, MFW_BT_NAME_MAX_LEN);/* new name */
+        memcpy(help_serv_id->next->cod, device_indication->cod, MFW_BT_DEVICE_CLASS_LEN);/* new cod */
+        help_serv_id->next->num_services = device_indication->num_services;/* number of services */
+        help_serv_id->next->services = device_indication->services;/* service id bitmap */
+        help_serv_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P2("dev found ind = %x %s ", help_serv_id->next->services, help_serv_id->next->bd_addr);
+#endif
+      }
+      bt_signal(BT_DEVICE_FOUND_IND, device_indication);
+      MFREE(device_indication);
+      return TRUE;
+
+    case BTP_SERVICE_FOUND_IND:
+      /* BTI confirms finding of service names and bd_addr to the desired device typ (service id)*/
+      MALLOC(service_indication, sizeof(T_MFW_BT_SERVICE_IND));
+      memset(service_indication, 0, sizeof(T_MFW_BT_SERVICE_IND));
+
+      service_indication->service = ((T_BTP_SERVICE_FOUND_IND *)data)->device;
+      memcpy(service_indication->bd_addr, ((T_BTP_SERVICE_FOUND_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(service_indication->bd_name, ((T_BTP_SERVICE_FOUND_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      memcpy(service_indication->cod, ((T_BTP_SERVICE_FOUND_IND *)data)->cod, MFW_BT_DEVICE_CLASS_LEN);
+      memcpy(service_indication->service_name, ((T_BTP_SERVICE_FOUND_IND *)data)->serv_name, MFW_BT_SERVICE_NAME_MAX_LEN);
+/* information of new device(service) will be collected in list of found devices, but only after BT_SERVICE_SEARCH_CNF */
+/* the list will be sent to MMI */
+      if(service_indication->service EQ MFW_BT_HEADSET)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_headset;    /* pointer to list of founded headset devices */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          id_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("hsg found ind =  %s", found_headset.device_id->bd_name);
+#endif
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("hsg found ind =  %s", help_id->next->bd_name);
+#endif
+        }
+      }
+      else if(service_indication->service EQ MFW_BT_DIAL_UP)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_dial_up;    /* pointer to list of detected dial up network services */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+          id_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("dun found ind =  %s", found_dial_up.device_id->bd_name);
+#endif
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("dun found ind =  %s", help_id->next->bd_name);
+#endif
+        }
+      }
+      else if(service_indication->service EQ MFW_BT_FAX_GW)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_fax;    /* pointer to list of detected fax services */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+          id_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("fax found ind =  %s", found_fax.device_id->bd_name);
+#endif
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("fax found ind =  %s", help_id->next->bd_name);
+#endif
+        }
+      }
+      else if(service_indication->service EQ MFW_BT_OPP)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_opp;    /* pointer to list of detected opp services */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+          id_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("opp found ind =  %s", found_opp.device_id->bd_name);
+#endif
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("opp found ind =  %s", help_id->next->bd_name);
+#endif
+        }
+      }
+      else if(service_indication->service EQ MFW_BT_SYNC)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_sync;    /* pointer to list of detected SYNC services */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+          id_ptr->device_id->next = NULL; /* finish chain */
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+        }
+      }
+      else if(service_indication->service EQ MFW_BT_SYNC_CMD)
+      {
+        MALLOC(service_id, sizeof(T_MFW_BT_SERVICE_ID));/* allocate memory for new device id */
+        if(!service_id)
+          return FALSE;
+        memset(service_id, 0, sizeof(T_MFW_BT_SERVICE_ID));
+        len = sizeof(service_indication->service_name);
+        id_ptr = &found_sync_cmd;    /* pointer to list of detected SYNC services with SYN commands support */
+        if(!id_ptr->device_id)      /* test if does any device id exist */
+        {
+
+          id_ptr->device_id = service_id; /* append new device_id */
+          memcpy(id_ptr->device_id->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+          id_ptr->device_id->next = NULL; /* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("sync found ind =  %s", found_sync_cmd.device_id->bd_name);
+#endif
+        }
+        else
+        {
+          help_id = id_ptr->device_id;/* first element */
+          while(help_id->next)        /* look for next device_id                 */
+          {
+            help_id = help_id->next;
+          }
+
+          help_id->next = service_id;/* append new device_id */
+          memcpy(help_id->next->bd_addr, service_indication->bd_addr, MFW_BT_ADDR_MAX_LEN);/* new address */
+          memcpy(id_ptr->device_id->bd_name, service_indication->bd_name, MFW_BT_NAME_MAX_LEN);
+          memcpy(id_ptr->device_id->cod, service_indication->cod, MFW_BT_DEVICE_CLASS_LEN);
+          memcpy(id_ptr->device_id->service_name, service_indication->service_name, MFW_BT_SERVICE_NAME_MAX_LEN);/* new name */
+
+          help_id->next->next = NULL;/* finish chain */
+#ifdef _SIMULATION_
+          TRACE_EVENT_P1("sync found ind =  %s", help_id->next->bd_name);
+#endif
+        }
+      }
+      bt_signal(BT_SERVICE_FOUND_IND, service_indication);
+      MFREE(service_indication);
+      return TRUE;
+
+    case BTP_SERVICE_SEARCH_CNF:
+    /* BTI confirms finish of search of services */
+      MALLOC(search_conf, sizeof(T_MFW_BT_SERVICE_SEARCH_CNF));
+      memset(search_conf, 0, sizeof(T_MFW_BT_SERVICE_SEARCH_CNF));
+      search_conf->service = ((T_BTP_SERVICE_SEARCH_CNF *)data)->device;
+      bt_signal(BT_SERVICE_SEARCH_CNF, search_conf);
+#ifdef _SIMULATION_
+        TRACE_EVENT("sync search cnf");
+#endif
+      MFREE(search_conf);
+      return TRUE;
+
+    case BTP_DEVICE_SEARCH_CNF:
+    /* BTI confirms finish of search of devices */
+      MALLOC(dev_search_conf, sizeof(T_MFW_BT_DEVICE_SEARCH_CNF));
+      memset(dev_search_conf, 0, sizeof(T_MFW_BT_DEVICE_SEARCH_CNF));
+      dev_search_conf->result = ((T_BTP_DEVICE_SEARCH_CNF *)data)->result;
+      bt_signal(BT_DEVICE_SEARCH_CNF, dev_search_conf);
+      MFREE(dev_search_conf);
+      return TRUE;
+
+    case BTP_CONNECT_DEVICE_CNF:
+      /* BTI confirms connection */
+      MALLOC(connect_cnf, sizeof(T_MFW_BT_CONNECT_CNF));
+      memset(connect_cnf, 0, sizeof(T_MFW_BT_CONNECT_CNF));
+      connect_cnf->service = ((T_BTP_CONNECT_DEVICE_CNF *)data)->device;
+      memcpy(connect_cnf->bd_addr, ((T_BTP_CONNECT_DEVICE_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      connect_cnf->result_bd = ((T_BTP_CONNECT_DEVICE_CNF *)data)->result;
+      connect_cnf->cnf_id = ((T_BTP_CONNECT_DEVICE_CNF *)data)->cnf_id;
+      connect_cnf->cause = ((T_BTP_CONNECT_DEVICE_CNF *)data)->cause;
+      bt_signal(BT_CONNECT_DEVICE_CNF, connect_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P4("conn cnf = %d, %d, %d, %s", connect_cnf->service, connect_cnf->result_bd, connect_cnf->cause, connect_cnf->bd_addr);
+#endif
+      MFREE(connect_cnf);
+      return TRUE;
+
+    case BTP_CONNECT_DEVICE_IND:
+      /* BTI indicates that a remote device wants to establish a connection */
+      MALLOC(connect_ind, sizeof(T_MFW_BT_CONNECT_IND));
+      memset(connect_ind, 0, sizeof(T_MFW_BT_CONNECT_IND));
+      connect_ind->service = ((T_BTP_CONNECT_DEVICE_IND *)data)->device;
+      connect_ind->mfw_src_id = ((T_BTP_CONNECT_DEVICE_IND *)data)->src_id;
+      switch(connect_ind->service)
+      {
+        case MFW_BT_SYNC_CMD:
+          memcpy(connect_ind->bd_addr, ((T_BTP_CONNECT_DEVICE_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+          memcpy(connect_ind->bd_name, ((T_BTP_CONNECT_DEVICE_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+          connect_ind->ind_id = ((T_BTP_CONNECT_DEVICE_IND *)data)->ind_id;
+          break;
+        case MFW_BT_HEADSET:
+          if(connect_ind->mfw_src_id NEQ MFW_BT_GSM_NETWORK) /* indication from remote headset */
+          {
+            connect_ind->ind_id = ((T_BTP_CONNECT_DEVICE_IND *)data)->ind_id;
+            memcpy(connect_ind->bd_addr, ((T_BTP_CONNECT_DEVICE_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+          }
+          break;
+        default:
+          break;
+      }
+      bt_signal(BT_CONNECT_DEVICE_IND, connect_ind);
+#ifdef _SIMULATION_
+      if((connect_ind->service EQ MFW_BT_SYNC_CMD) OR (connect_ind->service EQ MFW_BT_HEADSET))
+      {
+        TRACE_EVENT_P3("conn ind = %d %d %s", connect_ind->service, connect_ind->mfw_src_id, connect_ind->bd_addr);
+      }
+      else
+        TRACE_EVENT_P2("conn ind = %d %d", connect_ind->service, connect_ind->mfw_src_id);
+#endif
+      MFREE(connect_ind);
+      return TRUE;
+
+    case BTP_PIN_IND:
+      /* BTI indicates that a pin code is needed */
+      MALLOC(pin_indication, sizeof(T_MFW_BT_PIN_IND));
+      memset(pin_indication, 0, sizeof(T_MFW_BT_PIN_IND));
+      memcpy(pin_indication->bd_addr, ((T_BTP_PIN_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(pin_indication->bd_name, ((T_BTP_PIN_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      bt_signal(BT_PIN_IND, pin_indication);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("pin = %s %s", pin_indication->bd_name, pin_indication->bd_addr);
+#endif
+      MFREE(pin_indication);
+      return TRUE;
+
+    case BTP_AUTHORIZATION_IND:
+      /* BTI indicates that a authorization reply is needed */
+      MALLOC(authorization_ind, sizeof(T_MFW_BT_AUTHORIZATION_IND));
+      memset(authorization_ind, 0, sizeof(T_MFW_BT_AUTHORIZATION_IND));
+      memcpy(authorization_ind->bd_addr, ((T_BTP_AUTHORIZATION_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(authorization_ind->bd_name, ((T_BTP_AUTHORIZATION_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      memcpy(authorization_ind->appli_name, ((T_BTP_AUTHORIZATION_IND *)data)->appli_name, MFW_BT_APPL_NAME_MAX_LEN);
+      authorization_ind->auth_mask_mfw = ((T_BTP_AUTHORIZATION_IND *)data)->authorization_mask_serv;
+      authorization_ind->connection_dir = ((T_BTP_AUTHORIZATION_IND *)data)->incom_conn;
+      bt_signal(BT_AUTHORIZATION_IND, authorization_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P4("author ind = %x %d %s %s", authorization_ind->auth_mask_mfw, authorization_ind->connection_dir, authorization_ind->bd_name, authorization_ind->appli_name);
+#endif
+      MFREE(authorization_ind);
+      return TRUE;
+
+    case BTP_TRANSFER_AUDIO_OUT_CNF:
+      /* BTI confirms audio connection to device */
+      MALLOC(audio_out_cnf, sizeof(T_MFW_BT_TRANSFER_AUDIO_OUT_CNF));
+      memset(audio_out_cnf, 0, sizeof(T_MFW_BT_TRANSFER_AUDIO_OUT_CNF));
+      audio_out_cnf->service = ((T_BTP_TRANSFER_AUDIO_OUT_CNF *)data)->device;
+      audio_out_cnf->result_bd = ((T_BTP_TRANSFER_AUDIO_OUT_CNF *)data)->result;
+      memcpy(audio_out_cnf->bd_addr, ((T_BTP_TRANSFER_AUDIO_OUT_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      audio_out_cnf->cnf_id = ((T_BTP_TRANSFER_AUDIO_OUT_CNF *)data)->cnf_id;
+      bt_signal(BT_TRANSFER_AUDIO_OUT_CNF, audio_out_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("audio out cnf = %d, %s", audio_out_cnf->service, audio_out_cnf->bd_addr);
+#endif
+      MFREE(audio_out_cnf);
+      return TRUE;
+
+    case BTP_TRANSFER_AUDIO_IN_CNF:
+      /* BTI confirms audio connection from headset */
+      MALLOC(audio_in_cnf, sizeof(T_MFW_BT_TRANSFER_AUDIO_IN_CNF));
+      memset(audio_in_cnf, 0, sizeof(T_MFW_BT_TRANSFER_AUDIO_IN_CNF));
+      audio_in_cnf->service = ((T_BTP_TRANSFER_AUDIO_IN_CNF *)data)->device;
+      audio_in_cnf->result_bd = ((T_BTP_TRANSFER_AUDIO_IN_CNF *)data)->result;
+      memcpy(audio_in_cnf->bd_addr, ((T_BTP_TRANSFER_AUDIO_IN_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      bt_signal(BT_TRANSFER_AUDIO_IN_CNF, audio_in_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("audio in cnf = %d, %s", audio_in_cnf->service, audio_in_cnf->bd_addr);
+#endif
+      MFREE(audio_in_cnf);
+      return TRUE;
+
+    case BTP_DISCONNECT_DEVICE_CNF:
+      /* BTI confirms disconnection for profile hsg */
+      MALLOC(disconnect_cnf, sizeof(T_MFW_BT_DISCONNECT_CNF));
+      memset(disconnect_cnf, 0, sizeof(T_MFW_BT_DISCONNECT_CNF));
+      disconnect_cnf->service = ((T_BTP_DISCONNECT_DEVICE_CNF *)data)->device;
+      disconnect_cnf->cnf_id = ((T_BTP_DISCONNECT_DEVICE_CNF *)data)->cnf_id;
+      memcpy(disconnect_cnf->bd_addr, ((T_BTP_DISCONNECT_DEVICE_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      bt_signal(BT_DISCONNECT_DEVICE_CNF, disconnect_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("disconn cnf = %d, %d, %s", disconnect_cnf->service, disconnect_cnf->cnf_id, disconnect_cnf->bd_addr);
+#endif
+      MFREE(disconnect_cnf);
+      return TRUE;
+
+    case BTP_DISCON_DUN_FAX_CNF:
+      /* BTI confirms disconnection for profile dun/fax */
+      MALLOC(discon_dun_fax_cnf, sizeof(T_MFW_BT_DISCON_DUN_FAX_CNF));
+      memset(discon_dun_fax_cnf, 0, sizeof(T_MFW_BT_DISCON_DUN_FAX_CNF));
+      discon_dun_fax_cnf->service = ((T_BTP_DISCON_DUN_FAX_CNF *)data)->device;
+      discon_dun_fax_cnf->result_bd = ((T_BTP_DISCON_DUN_FAX_CNF *)data)->cause;
+      bt_signal(BT_DISCON_DUN_FAX_CNF, discon_dun_fax_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("disconn cnf = %d, %d", discon_dun_fax_cnf->service, discon_dun_fax_cnf->result_bd);
+#endif
+      MFREE(discon_dun_fax_cnf);
+      return TRUE;
+
+    case BTP_DISCONNECT_DEVICE_IND:
+      /* BTI indicats disconnection from headset*/
+      MALLOC(disconnect_ind, sizeof(T_MFW_BT_DISCONNECT_IND));
+      memset(disconnect_ind, 0, sizeof(T_MFW_BT_DISCONNECT_IND));
+      disconnect_ind->service = ((T_BTP_DISCONNECT_DEVICE_IND *)data)->device;
+      disconnect_ind->ind_id = ((T_BTP_DISCONNECT_DEVICE_IND *)data)->ind_id;
+      memcpy(disconnect_ind->bd_addr, ((T_BTP_DISCONNECT_DEVICE_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      bt_signal(BT_DISCONNECT_DEVICE_IND, disconnect_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("disconn ind hsg = %d, %d, %s", disconnect_ind->service, disconnect_ind->ind_id, disconnect_ind->bd_addr);
+#endif
+      MFREE(disconnect_ind);
+      return TRUE;
+
+    case BTP_DISCON_DUN_FAX_IND:
+      /* BTI indicates disconnection from remote dun/fax */
+      MALLOC(disc_dun_fax_ind, sizeof(T_MFW_BT_DISCON_DUN_FAX_IND));
+      memset(disc_dun_fax_ind, 0, sizeof(T_MFW_BT_DISCON_DUN_FAX_IND));
+      disc_dun_fax_ind->service = ((T_BTP_DISCON_DUN_FAX_IND *)data)->device;
+      bt_signal(BT_DISCON_DUN_FAX_IND, disc_dun_fax_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P1("disconn ind dun = %d", disc_dun_fax_ind->service);
+#endif
+      MFREE(disc_dun_fax_ind);
+      return TRUE;
+
+    case BTP_DEVICE_PAIRED_IND:
+      /* BTI indicates that a pin code is needed */
+      MALLOC(pair_indication, sizeof(T_MFW_BT_DEV_PAIR_IND));
+      memset(pair_indication, 0, sizeof(T_MFW_BT_DEV_PAIR_IND));
+      memcpy(pair_indication->rem_bd_addr, ((T_BTP_DEVICE_PAIRED_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(pair_indication->rem_bd_name, ((T_BTP_DEVICE_PAIRED_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      pair_indication->pair_res = ((T_BTP_DEVICE_PAIRED_IND *)data)->pair_result;
+      bt_signal(BT_DEVICE_PAIRED_IND, pair_indication);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("pair ind = %d %s", pair_indication->pair_res, pair_indication->rem_bd_name);
+#endif
+      MFREE(pair_indication);
+      return TRUE;
+
+    case BTP_TRUSTED_DEV_LIST_FULL:
+      /* BTI indicates that list of trusted devices is full */
+      bt_signal(BT_TRUSTED_DEV_LIST_FULL, NULL);
+#ifdef _SIMULATION_
+      TRACE_EVENT("TRUSTED_DEV_LIST_FULL");
+#endif
+      return TRUE;
+
+    case BTP_CALL_MONITORING_STATUS:
+      /* BTI indicates call monitoring messages by dun/fax */
+      MALLOC(dun_call_state, sizeof(T_MFW_BT_CALL_STATUS_DUN_FAX));
+      memset(dun_call_state, 0, sizeof(T_MFW_BT_CALL_STATUS_DUN_FAX));
+      dun_call_state->service = ((T_BTP_CALL_MONITORING_STATUS *)data)->device;
+      switch(((T_BTP_CALL_MONITORING_STATUS *)data)->call_status)
+      {
+        case BTI_DUN_CALL_IN_PRO:
+          dun_call_state->call_state = MFW_BT_CALL_IN_PROGRESS;
+          break;
+        case BTI_DUN_CALL_ESTABLISHED:
+          dun_call_state->call_state = MFW_BT_CALL_ESTABLISHED;
+          break;
+        case BTI_DUN_CALL_PAUSED:
+          dun_call_state->call_state = MFW_BT_CALL_PAUSED;
+          break;
+        case BTI_DUN_CALL_RESUMED:
+          dun_call_state->call_state = MFW_BT_CALL_RESUMED;
+          break;
+        case BTI_DUN_CALL_HANGUP_IN_PR:
+          dun_call_state->call_state = MFW_BT_HANGUP_IN_PROGRESS;
+          break;
+        case BTI_DUN_CALL_RELEASED:
+          dun_call_state->call_state = MFW_BT_CALL_RELEASED;
+          break;
+        case BTI_FAX_CALL_IN_PRO:
+          dun_call_state->call_state = MFW_BT_CALL_IN_PROGRESS;
+          break;
+        case BTI_FAX_CALL_ESTABLISHED:
+          dun_call_state->call_state = MFW_BT_CALL_ESTABLISHED;
+          break;
+        case BTI_FAX_CALL_HANGUP_IN_PR:
+          dun_call_state->call_state = MFW_BT_HANGUP_IN_PROGRESS;
+          break;
+        case BTI_FAX_CALL_RELEASED:
+          dun_call_state->call_state = MFW_BT_CALL_RELEASED;
+          break;
+        default:
+          break;
+      }
+      bt_signal(BT_CALL_MONITORING_STATUS, dun_call_state);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P2("dun call monit = %d %d", dun_call_state->service, dun_call_state->call_state);
+#endif
+      MFREE(dun_call_state);
+      return TRUE;
+    case BTP_OPP_SERV_PUT_IND:
+      /* BTI indicates that a put response is needed (OPP server) */
+      MALLOC(opp_put_ind, sizeof(T_MFW_BT_OPP_PUT_IND));
+      memset(opp_put_ind, 0, sizeof(T_MFW_BT_OPP_PUT_IND));
+      opp_put_ind->service = ((T_BTP_OPP_SERV_PUT_IND *)data)->device;
+      opp_put_ind->subtype = ((T_BTP_OPP_SERV_PUT_IND *)data)->subtype;
+      memcpy(opp_put_ind->bd_addr, ((T_BTP_OPP_SERV_PUT_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memset(&receiv_object_name, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_name, &((T_BTP_OPP_SERV_PUT_IND *)data)->object_name, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);
+      /* from string in Primitive to static buffer in MFW, pointer to MMI */
+      opp_put_ind->mfw_opp_object.mfw_object_name = receiv_object_name;
+      opp_put_ind->mfw_opp_object.mfw_object_length = ((T_BTP_OPP_SERV_PUT_IND *)data)->object_length;
+      bt_signal(BT_OPP_SERV_PUT_IND, opp_put_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("opp put ind = %d, %d, %s", opp_put_ind->service, opp_put_ind->subtype, receiv_object_name);
+#endif
+      MFREE(opp_put_ind);
+      return TRUE;
+    case BTP_OPP_SERV_PUT_CNF:
+      /* BTI indicates that an object push procedure is finished or cancelled */
+      MALLOC(opp_put_cnf, sizeof(T_MFW_BT_OPP_PUT_CNF));
+      memset(opp_put_cnf, 0, sizeof(T_MFW_BT_OPP_PUT_CNF));
+      opp_put_cnf->service = ((T_BTP_OPP_SERV_PUT_CNF *)data)->device;
+      opp_put_cnf->subtype = ((T_BTP_OPP_SERV_PUT_CNF *)data)->subtype;
+      memcpy(opp_put_cnf->bd_addr, ((T_BTP_OPP_SERV_PUT_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      opp_put_cnf->mfw_opp_object.mfw_object_type = ((T_BTP_OPP_SERV_PUT_CNF *)data)->object_type;
+      memset(&receiv_object_name, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_name, &((T_BTP_OPP_SERV_PUT_CNF *)data)->object_name, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);
+      opp_put_cnf->mfw_opp_object.mfw_object_name = receiv_object_name;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      opp_put_cnf->mfw_opp_object.mfw_object_length = ((T_BTP_OPP_SERV_PUT_CNF *)data)->object_length;
+      opp_put_cnf->error_cause = ((T_BTP_OPP_SERV_PUT_CNF *)data)->cause;
+      bt_signal(BT_OPP_SERV_PUT_CNF, opp_put_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("opp put cnf = %d, %d, %s", opp_put_cnf->service, opp_put_cnf->subtype, receiv_object_name);
+#endif
+      MFREE(opp_put_cnf);
+      return TRUE;
+    case BTP_OPP_OBJECT_PUSH_CNF:
+      /* BTI indicates that an object push procedure is finished or cancelled */
+      MALLOC(opp_obj_push_cnf, sizeof(T_MFW_BT_OPP_PUSH_CNF));
+      memset(opp_obj_push_cnf, 0, sizeof(T_MFW_BT_OPP_PUSH_CNF));
+      opp_obj_push_cnf->service = ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->device;
+      opp_obj_push_cnf->subtype = ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->subtype;
+      memcpy(opp_obj_push_cnf->bd_addr, ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      opp_obj_push_cnf->mfw_opp_object.mfw_object_type = ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->object_type;
+      memset(&receiv_object_name, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_name, &((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->object_name, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);
+      opp_obj_push_cnf->mfw_opp_object.mfw_object_name = receiv_object_name;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      memset(&receiv_object_mime_type, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_mime_type, &((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->object_m_t, MFW_BT_OPP_OBJECT_MIME_MAX_LEN);
+      opp_obj_push_cnf->mfw_opp_object.mfw_object_mime_type = receiv_object_mime_type;/* same comment like for ...object_name */
+      opp_obj_push_cnf->mfw_opp_object.mfw_object_length = ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->object_length;
+      opp_obj_push_cnf->error_cause = ((T_BTP_OPP_OBJECT_PUSH_CNF *)data)->cause;
+      bt_signal(BT_OPP_OBJECT_PUSH_CNF, opp_obj_push_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("opp push cnf = %d, %d, %s", opp_obj_push_cnf->service, opp_obj_push_cnf->subtype, receiv_object_name);
+#endif
+      MFREE(opp_obj_push_cnf);
+      return TRUE;
+    case BTP_OPP_OBJECT_PULL_CNF:
+      /* BTI indicates that an object push procedure is finished or cancelled */
+      MALLOC(opp_obj_pull_cnf, sizeof(T_MFW_BT_OPP_PULL_CNF));
+      memset(opp_obj_pull_cnf, 0, sizeof(T_MFW_BT_OPP_PULL_CNF));
+      opp_obj_pull_cnf->service = ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->device;
+      opp_obj_pull_cnf->subtype = ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->subtype;
+      memcpy(opp_obj_pull_cnf->bd_addr, ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      opp_obj_pull_cnf->mfw_opp_object.mfw_object_type = ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->object_type;
+      memset(&receiv_object_name, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_name, &((T_BTP_OPP_OBJECT_PULL_CNF *)data)->object_name, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);
+      opp_obj_pull_cnf->mfw_opp_object.mfw_object_name = receiv_object_name;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      memset(&receiv_object_mime_type, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_object_mime_type, &((T_BTP_OPP_OBJECT_PULL_CNF *)data)->object_m_t, MFW_BT_OPP_OBJECT_MIME_MAX_LEN);
+      opp_obj_pull_cnf->mfw_opp_object.mfw_object_mime_type = receiv_object_mime_type;/* same comment like for ...object_name */
+      opp_obj_pull_cnf->mfw_opp_object.mfw_object_length = ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->object_length;
+      opp_obj_pull_cnf->error_cause = ((T_BTP_OPP_OBJECT_PULL_CNF *)data)->cause;
+      bt_signal(BT_OPP_OBJECT_PULL_CNF, opp_obj_pull_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("opp pull cnf = %d, %d, %s", opp_obj_pull_cnf->service, opp_obj_pull_cnf->subtype, receiv_object_name);
+#endif
+      MFREE(opp_obj_pull_cnf);
+      return TRUE;
+    case BTP_SRV_SYNC_CNF:
+      /* BTI indicates that synchronization operation completes (initiated by client or server) */
+      MALLOC(srv_sync_cnf, sizeof(T_MFW_BT_SRV_SYNC_CNF));
+      memset(srv_sync_cnf, 0, sizeof(T_MFW_BT_SRV_SYNC_CNF));
+      srv_sync_cnf->service = ((T_BTP_SRV_SYNC_CNF *)data)->device;
+      srv_sync_cnf->subtype = ((T_BTP_SRV_SYNC_CNF *)data)->subtype;
+      memcpy(srv_sync_cnf->mfw_client_bd_addr, ((T_BTP_SRV_SYNC_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(srv_sync_cnf->mfw_client_name, ((T_BTP_SRV_SYNC_CNF *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      srv_sync_cnf->mfw_error_state = ((T_BTP_SRV_SYNC_CNF *)data)->cause;
+      bt_signal(BT_SRV_SYNC_CNF, srv_sync_cnf);
+      MFREE(srv_sync_cnf);
+      return TRUE;
+    case BTP_SRV_SYNC_AUTH_IND:
+      /* BTI indicates that synchronization operation completes (initiated by client or server) */
+      MALLOC(srv_sync_auth, sizeof(T_MFW_BT_SRV_SYNC_AUTH_IND));
+      memset(srv_sync_auth, 0, sizeof(T_MFW_BT_SRV_SYNC_AUTH_IND));
+      srv_sync_auth->service = ((T_BTP_SRV_SYNC_AUTH_IND *)data)->device;
+      srv_sync_auth->subtype = ((T_BTP_SRV_SYNC_AUTH_IND *)data)->subtype;
+      memcpy(srv_sync_auth->mfw_client_bd_addr, ((T_BTP_SRV_SYNC_AUTH_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(srv_sync_auth->mfw_client_name, ((T_BTP_SRV_SYNC_AUTH_IND *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      bt_signal(BT_SRV_SYNC_AUTH_IND, srv_sync_auth);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("sync auth ind = %d, %d, %s", srv_sync_auth->service, srv_sync_auth->subtype, srv_sync_auth->mfw_client_bd_addr);
+#endif
+      MFREE(srv_sync_auth);
+      return TRUE;
+    case BTP_SRV_SYNC_PULL_IND:
+      /* BTI indicates that the client requests to pull an object from the sync server */
+      MALLOC(srv_sync_pull_ind, sizeof(T_MFW_BT_SRV_SYNC_PULL_IND));
+      memset(srv_sync_pull_ind, 0, sizeof(T_MFW_BT_SRV_SYNC_PULL_IND));
+      srv_sync_pull_ind->service = ((T_BTP_SRV_SYNC_PULL_IND *)data)->device;
+      srv_sync_pull_ind->subtype = ((T_BTP_SRV_SYNC_PULL_IND *)data)->subtype;
+      memcpy(srv_sync_pull_ind->mfw_client_bd_addr, ((T_BTP_SRV_SYNC_PULL_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      srv_sync_pull_ind->mfw_object_id.mfw_object_size = ((T_BTP_SRV_SYNC_PULL_IND *)data)->object_id_size;
+      memset(&sync_object_location_id, 0, MFW_BT_SYNC_OBJECT_IDENTIFIER);/* limited with 256 characters */
+      memcpy(&sync_object_location_id, &((T_BTP_SRV_SYNC_PULL_IND *)data)->object_id_loc, MFW_BT_SYNC_OBJECT_IDENTIFIER);
+      srv_sync_pull_ind->mfw_object_id.mfw_location = sync_object_location_id;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      bt_signal(BT_SRV_SYNC_PULL_IND, srv_sync_pull_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("sync pull ind = %d, %d, %d", srv_sync_pull_ind->service, srv_sync_pull_ind->subtype, srv_sync_pull_ind->mfw_object_id.mfw_object_size);
+#endif
+      MFREE(srv_sync_pull_ind);
+      return TRUE;
+    case BTP_SRV_SYNC_PUSH_IND:
+      /* BTI indicates that the client requests to pull an object from the sync server */
+      MALLOC(srv_sync_push_ind, sizeof(T_MFW_BT_SRV_SYNC_PUSH_IND));
+      memset(srv_sync_push_ind, 0, sizeof(T_MFW_BT_SRV_SYNC_PUSH_IND));
+      srv_sync_push_ind->service = ((T_BTP_SRV_SYNC_PUSH_IND *)data)->device;
+      srv_sync_push_ind->subtype = ((T_BTP_SRV_SYNC_PUSH_IND *)data)->subtype;
+      memcpy(srv_sync_push_ind->mfw_client_bd_addr, ((T_BTP_SRV_SYNC_PUSH_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      srv_sync_push_ind->mfw_object_id.mfw_object_size = ((T_BTP_SRV_SYNC_PUSH_IND *)data)->object_id_size;
+      memset(&sync_object_location_id, 0, MFW_BT_SYNC_OBJECT_IDENTIFIER);/* limited with 256 characters */
+      memcpy(&sync_object_location_id, &((T_BTP_SRV_SYNC_PUSH_IND *)data)->object_id_loc, MFW_BT_SYNC_OBJECT_IDENTIFIER);
+      srv_sync_push_ind->mfw_object_id.mfw_location = sync_object_location_id;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      bt_signal(BT_SRV_SYNC_PUSH_IND, srv_sync_push_ind);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("sync push ind = %d, %d, %d", srv_sync_push_ind->service, srv_sync_push_ind->subtype, srv_sync_push_ind->mfw_object_id.mfw_object_size);
+#endif
+      MFREE(srv_sync_push_ind);
+      return TRUE;
+    case BTP_SRV_SYNC_PUSH_CNF:
+      /* BTI indicates that the client requests to pull an object from the sync server */
+      MALLOC(srv_sync_push_cnf, sizeof(T_MFW_BT_SRV_SYNC_PUSH_CNF));
+      memset(srv_sync_push_cnf, 0, sizeof(T_MFW_BT_SRV_SYNC_PUSH_CNF));
+      srv_sync_push_cnf->service = ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->device;
+      srv_sync_push_cnf->subtype = ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->subtype;
+      memcpy(srv_sync_push_cnf->mfw_client_bd_addr, ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      srv_sync_push_cnf->mfw_object.mfw_object_type = ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_type;
+      memset(&sync_object_name, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&sync_object_name, &((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_name, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);
+      srv_sync_push_cnf->mfw_object.mfw_object_name = sync_object_name;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      memset(&receiv_sync_object_mime_type, 0, MFW_BT_OPP_OBJECT_NAME_MAX_LEN);/* limited with 256 characters */
+      memcpy(&receiv_sync_object_mime_type, &((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_m_t, MFW_BT_OPP_OBJECT_MIME_MAX_LEN);
+      srv_sync_push_cnf->mfw_object.mfw_object_mime_type = receiv_sync_object_mime_type;/* same comment like for ...object_name */
+      srv_sync_push_cnf->mfw_object.mfw_object_length = ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_length;
+      srv_sync_push_cnf->mfw_object_id.mfw_object_size = ((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_id_size;
+      memset(&sync_object_location_id, 0, MFW_BT_SYNC_OBJECT_IDENTIFIER);/* limited with 256 characters */
+      memcpy(&sync_object_location_id, &((T_BTP_SRV_SYNC_PUSH_CNF *)data)->object_id_loc, MFW_BT_SYNC_OBJECT_IDENTIFIER);
+      srv_sync_push_cnf->mfw_object_id.mfw_location = sync_object_location_id;/* from string in Primitive to static buffer in MFW (pointer is not possible in Primitive), pointer of buffer */
+      bt_signal(BT_SRV_SYNC_PUSH_CNF, srv_sync_push_cnf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("sync push cnf = %d, %d, %s", srv_sync_push_cnf->service, srv_sync_push_cnf->subtype, srv_sync_push_cnf->mfw_client_bd_addr);
+#endif
+      MFREE(srv_sync_push_cnf);
+      return TRUE;
+
+    case BTP_CONNECT_DEVICE_INF:
+      /* BTI indicates that hsg manages a connection on RFCOMM level */
+      MALLOC(connect_inf, sizeof(T_MFW_BT_CONNECT_INF));
+      memset(connect_inf, 0, sizeof(T_MFW_BT_CONNECT_INF));
+      connect_inf->service = ((T_BTP_CONNECT_DEVICE_INF *)data)->device;
+      connect_inf->ind_id = ((T_BTP_CONNECT_DEVICE_INF *)data)->ind_id;
+
+      if(connect_inf->ind_id EQ MFW_BT_INVALID_HEADSET_ID)
+      {
+        memcpy(connect_inf->bd_addr, ((T_BTP_CONNECT_DEVICE_INF *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      }
+      bt_signal(BT_CONNECT_DEVICE_INF, connect_inf);
+#ifdef _SIMULATION_
+      TRACE_EVENT_P3("conn inf = %d %d %s", connect_inf->service, connect_inf->ind_id, connect_inf->bd_addr);
+#endif
+      MFREE(connect_inf);
+      return TRUE;
+
+  /* BT CTRL */
+    case BTP_CHNG_LOCAL_NAME:
+      MALLOC(c_loc_name, sizeof(T_MFW_BT_CHNG_LOCAL_NAME));
+      c_loc_name->success = ((T_BTP_CHNG_LOCAL_NAME *)data)->success;
+      bt_signal(BT_CHNG_LOCAL_NAME, c_loc_name);
+      MFREE(c_loc_name);
+      return TRUE;
+
+    case BTP_READ_LOCAL_NAME:
+      MALLOC(r_loc_name, sizeof(T_MFW_BT_READ_LOCAL_NAME));
+      r_loc_name->success = ((T_BTP_READ_LOCAL_NAME *)data)->success;
+      memcpy(r_loc_name->bd_name, ((T_BTP_READ_LOCAL_NAME *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      bt_signal(BT_READ_LOCAL_NAME, r_loc_name);
+      MFREE(r_loc_name);
+      return TRUE;
+
+    case BTP_REMOTE_DEV_INFO_RES:
+      MALLOC(rem_dev_info, sizeof(T_MFW_BT_REMOTE_DEV_INFO_RES));
+      rem_dev_info->success = ((T_BTP_REMOTE_DEV_INFO_RES *)data)->success;
+      memcpy(rem_dev_info->bd_addr, ((T_BTP_REMOTE_DEV_INFO_RES *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      memcpy(rem_dev_info->bd_name, ((T_BTP_REMOTE_DEV_INFO_RES *)data)->bd_name, MFW_BT_NAME_MAX_LEN);
+      memcpy(rem_dev_info->cod, ((T_BTP_REMOTE_DEV_INFO_RES *)data)->cod, MFW_BT_DEVICE_CLASS_LEN);
+
+      bt_signal(BT_REMOTE_DEV_INFO_RES, rem_dev_info);
+      MFREE(rem_dev_info);
+      return TRUE;
+
+    case BTP_CHNG_CONNECTABLE_MODE:
+      MALLOC(chng_cmode, sizeof(T_MFW_BT_CHNG_CONNECTABLE_MODE));
+      chng_cmode->success = ((T_BTP_CHNG_CONNECTABLE_MODE *)data)->success;
+      chng_cmode->mode = (T_MFW_BT_CONNECTABLE_MODE)((T_BTP_CHNG_CONNECTABLE_MODE *)data)->mode;
+      chng_cmode->scan_interval = ((T_BTP_CHNG_CONNECTABLE_MODE *)data)->scan_interval;
+      chng_cmode->scan_window = ((T_BTP_CHNG_CONNECTABLE_MODE *)data)->scan_window;
+
+      bt_signal(BT_CHNG_CONNECTABLE_MODE, chng_cmode);
+      MFREE(chng_cmode);
+      return TRUE;
+
+    case BTP_CHNG_DISCOVERABLE_MODE:
+      MALLOC(chng_dmode, sizeof(T_MFW_BT_CHNG_DISCOVERABLE_MODE));
+      chng_dmode->success = ((T_BTP_CHNG_DISCOVERABLE_MODE *)data)->success;
+      chng_dmode->mode = (T_MFW_BT_DISCOVERABLE_MODE)((T_BTP_CHNG_DISCOVERABLE_MODE *)data)->mode;
+      chng_dmode->scan_interval = ((T_BTP_CHNG_DISCOVERABLE_MODE *)data)->scan_interval;
+      chng_dmode->scan_window = ((T_BTP_CHNG_DISCOVERABLE_MODE *)data)->scan_window;
+
+      bt_signal(BT_CHNG_DISCOVERABLE_MODE, chng_dmode);
+      MFREE(chng_dmode);
+      return TRUE;
+
+    case BTP_READ_BD_ADDR:
+      MALLOC(r_bd_addr, sizeof(T_MFW_BT_READ_BD_ADDR));
+      r_bd_addr->success = ((T_BTP_READ_BD_ADDR *)data)->success;
+      memcpy(r_bd_addr->bd_addr, ((T_BTP_READ_BD_ADDR *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+      bt_signal(BT_READ_BD_ADDR, r_bd_addr);
+      MFREE(r_bd_addr);
+      return TRUE;
+
+/*#ifdef PCA_6350*/
+    case BTP_PCA_EVENT:
+      if (((T_BTP_PCA_EVENT*)data)->pca_event == BTI_PCA_GW_STATUS_CFM)
+      {
+        MALLOC(pca_gw_status, sizeof(T_MFW_BT_PCA_GW_STATUS_CFM));
+        pca_gw_status->status = ((T_BTP_PCA_EVENT*)data)->pca_gw_status;
+        bt_signal(BT_PCA_GW_STATUS_CFM, pca_gw_status);
+        return TRUE;
+      }
+
+      if (((T_BTP_PCA_EVENT*)data)->pca_event == BTI_PCA_GW_LINK_MONITORING)
+      {
+        MALLOC(pca_link_mon, sizeof(T_MFW_BT_PCA_GW_LINK_MONITORING));
+        pca_link_mon->link_status = ((T_BTP_PCA_EVENT*)data)->pca_link_status;
+        memcpy(pca_link_mon->bd_addr, ((T_BTP_PCA_EVENT *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+        bt_signal(BT_PCA_GW_LINK_MONITORING, pca_link_mon);
+        return TRUE;
+      }
+
+      if (((T_BTP_PCA_EVENT*)data)->pca_event == BTI_PCA_GW_CALL_MONITORING)
+      {
+        MALLOC(pca_call_mon, sizeof(T_MFW_BT_PCA_GW_CALL_MONITORING));
+        pca_call_mon->call_status = ((T_BTP_PCA_EVENT*)data)->pca_call_status;
+        bt_signal(BT_PCA_GW_CALL_MONITORING, pca_call_mon);
+        return TRUE;
+      }
+
+      if (((T_BTP_PCA_EVENT*)data)->pca_event == BTI_PCA_GW_HANGUP_CFM)
+      {
+        MALLOC(pca_hangup, sizeof(T_MFW_BT_PCA_GW_HANGUP_CFM));
+        pca_hangup->hangup = ((T_BTP_PCA_EVENT*)data)->pca_hangup;
+        bt_signal(BT_PCA_GW_HANGUP_CFM, pca_hangup);
+        return TRUE;
+      }
+
+    /* Cartman added begin */
+    
+    case BTP_HSG_HEADSET_CONNECTION_IND:
+        MALLOC(hsg_headset_connection_ind, sizeof(T_MFW_BT_HSG_HEADSET_CONNECTION_IND));
+        memset(hsg_headset_connection_ind, 0, sizeof(T_MFW_BT_HSG_HEADSET_CONNECTION_IND));
+        
+        hsg_headset_connection_ind->service = ((T_BTP_HSG_HEADSET_CONNECTION_IND *)data)->device;
+        hsg_headset_connection_ind->ind_id = ((T_BTP_HSG_HEADSET_CONNECTION_IND *)data)->ind_id;
+        memcpy(hsg_headset_connection_ind->bd_addr, ((T_BTP_HSG_HEADSET_CONNECTION_IND *)data)->bd_addr, MFW_BT_ADDR_MAX_LEN);
+
+        bt_signal(BT_HSG_HEADSET_CONNECTION_IND, hsg_headset_connection_ind);    	
+    	return TRUE;
+
+    case BTP_HSG_SPECIFIC_CMD_RDY:
+		MALLOC(hsg_specific_cmd_cfm, sizeof(T_MFW_BT_HSG_SPECIFIC_CMD_CFM));
+
+		memcpy(hsg_specific_cmd_cfm->cmd,((T_BTP_HSG_SPECIFIC_CMD_RDY *)data)->cmd,100);
+        
+        bt_signal(BT_HSG_SPECIFIC_CMD_CFM,hsg_specific_cmd_cfm);
+    	return TRUE;
+
+    case BTP_HSG_SAVE_LIST_CNF:
+        MALLOC(hsg_save_list_cnf, sizeof(T_MFW_BT_HSG_SAVE_LIST_CNF));
+        hsg_save_list_cnf->result=((T_BTP_HSG_SAVE_LIST_CNF *)data)->result;
+        
+        bt_signal(BT_HSG_SAVE_LIST_CNF,hsg_save_list_cnf);
+    	return TRUE;    	
+
+    /* Cartman added end */
+      
+/*#endif*/ /* PCA_6350 */
+  }
+
+#ifdef _SIMULATION_
+/*
+ * kk 12.01.01
+ * these primitives are available only for testing. they describe
+ * function calls (loopbacked to ACI/MFW) made from MFW
+ */
+
+    switch ((USHORT) opc)
+    {
+        case BTP_INIT_PROFILE_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_INIT_PROFILE_REQ");
+        return TRUE;
+
+        case BTP_DEINIT_PROFILE_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_DEINIT_PROFILE_REQ");
+        return TRUE;
+
+        case BTP_DEVICE_SEARCH_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_DEVICE_SEARCH_REQ");
+        return TRUE;
+
+        case BTP_CONNECT_DEVICE_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_CONNECT_DEVICE_REQ");
+        return TRUE;
+
+        case BTP_CONNECT_DEVICE_RES:
+        TRACE_EVENT("bta_response_cb:BTP_CONNECT_DEVICE_RES");
+        return TRUE;
+
+        case BTP_DISCONNECT_DEVICE_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_DISCONNECT_DEVICE_REQ");
+        return TRUE;
+
+        case BTP_TRANSFER_AUDIO_IN_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_TRANSFER_AUDIO_IN_REQ");
+        return TRUE;
+
+        case BTP_TRANSFER_AUDIO_OUT_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_TRANSFER_AUDIO_OUT_REQ");
+        return TRUE;
+
+        case BTP_RECONFIG_PROFILE_REQ:
+        TRACE_EVENT("bta_response_cb:BTP_RECONFIG_PROFILE_REQ");
+        return TRUE;
+
+        case BTI_SEND_DATA_TEST:
+        TRACE_EVENT("BTI_SEND_DATA_TEST");
+        {
+            UBYTE buf[2048];
+            memset(buf, 0, 2048);
+            memcpy(buf, ((T_BTI_SEND_DATA_TEST *)data)->ind_data, ((T_BTI_SEND_DATA_TEST *)data)->len);
+
+            bti_simulate_dti_data_ind(((T_BTI_SEND_DATA_TEST *)data)->port_nb, ((T_BTI_SEND_DATA_TEST *)data)->len, buf);
+        }
+        return TRUE;
+
+        case BTI_GET_DATA_TEST:
+        TRACE_EVENT("BTI_GET_DATA_TEST");
+        {
+            UBYTE buf[2048];
+            memset(buf, 0, 2048);
+            memcpy(buf, ((T_BTI_GET_DATA_TEST *)data)->ind_data, ((T_BTI_GET_DATA_TEST *)data)->len);
+
+            bti_simulate_data_bt_to_gsm(((T_BTI_GET_DATA_TEST *)data)->port_nb, ((T_BTI_GET_DATA_TEST *)data)->len, buf);
+        }
+        return TRUE;
+/* for test bluetooth without BMI/MMI ******************************************/
+        case BTP_SRV_SYNC_TEST:/* test SYNC profile */
+        TRACE_EVENT("bta_response_cb:BTP_SRV_SYNC_TEST");
+        switch(((T_BTP_SRV_SYNC_TEST *)data)->func_id)
+        {
+          case 1:/* start bluetooth primitive SYN_SERVER_SYNC_COMPLETE */
+            bti_syn_server_sync_compl();
+            break;
+          case 2: /* start bluetooth function syn_server_sync_termination() */
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            if(bt_syn_s_sync_terminate(service, subtyp) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:sync termination Failure");
+            }
+            else
+              TRACE_EVENT("sync termination ok");
+            break;
+          case 3: /* start bluetooth function syn_server_get_response() */
+            memset(&syn_pull_obj, 0, sizeof(syn_pull_obj));
+            memset(&server_syn_object, 0, MFW_BT_OPP_BUFFER_LENGTH);
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            syn_pull_obj.mfw_buffer_start = server_syn_object;
+            syn_pull_obj.mfw_buffer_size = sizeof(&server_syn_object);
+            syn_pull_obj.mfw_object_type = MFW_BT_BUFFER;/* store pulled object in buffer */
+            syn_pull_obj.mfw_path = NULL;
+            syn_pull_obj.mfw_object_length =  sizeof(&server_syn_object);
+            syn_pull_obj.mfw_object_mime_type = NULL;/* MIME directory information only for object_type: MFW_BT_PATH */
+
+            if(bt_syn_s_pull_resp(service, subtyp, syn_pull_obj) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:sync pull response Failure");
+            }
+            else
+              TRACE_EVENT("sync pull response ok");
+            break;
+          case 4:/* start bluetooth primitive SYN_SERVER_PUT_REQUEST with TRACE_EVENT in mfw_bta */
+            bti_sync_put_req();
+            break;
+          case 5:/* start bluetooth primitive SYN_SERVER_PUT_CFM with TRACE_EVENT in mfw_bta */
+            bti_syn_server_put_confirm();
+            break;
+          case 6:/* start bluetooth primitive SYN_SERVER_GET_REQUEST with TRACE_EVENT in mfw_bta */
+            bti_sync_get_req();
+            break;
+          case 7:/* start bluetooth primitive SYN_SERVER_AUTHENTICATION_REQUEST with TRACE_EVENT in mfw_bta */
+            bti_sync_auth_req();
+            break;
+          case 8:/* start bluetooth primitive SYN_SERVER_CLIENT_IS_CONNECTED with TRACE_EVENT in mfw_bta */
+            bti_sync_client_con_ind();
+            break;
+          case 9: /* start bluetooth function syn_server_put_response() */
+            memset(&syn_push_obj, 0, sizeof(syn_push_obj));
+            memset(&server_syn_object, 0, MFW_BT_OPP_BUFFER_LENGTH);
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            syn_push_obj.mfw_buffer_start = server_syn_object;
+            syn_push_obj.mfw_buffer_size = sizeof(&server_syn_object);
+            syn_push_obj.mfw_object_type = MFW_BT_BUFFER;/* store pushed object in buffer */
+            syn_push_obj.mfw_path = NULL;
+            syn_push_obj.mfw_object_length =  sizeof(&server_syn_object);
+            syn_push_obj.mfw_object_mime_type = NULL;/* MIME directory information only for object_type: MFW_BT_PATH */
+
+            if(bt_syn_s_push_resp(service, subtyp, syn_push_obj) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync push response Failure");
+            }
+            else
+              TRACE_EVENT("sync push response ok");
+            break;
+          case 10: /* start bluetooth function syn_server_authentication_response() */
+            memset(mfw_sync_password, 0, MFW_BT_PIN_MAX_LEN);
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            for(j=0;j<10;j++)
+              mfw_sync_password[j] = j | 0x30;
+            mfw_sync_password_ptr = &mfw_sync_password[0];
+            if(bt_syn_s_auth_res(service, subtyp, mfw_sync_password_ptr) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:sync authentication response Failure");
+            }
+            else
+              TRACE_EVENT("sync authentication response ok");
+            break;
+          case 11: /* start bluetooth function syn_server_send_sync_command() */
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            mfw_obj = mfw_test_syn_obj;/* object which will be supposed to be synchronized  */
+            mfw_syn_action = MFW_BT_SYNC_CO_SYNC; /* request synchronization by specified SYNC client */
+            /* specified client address by browsing SYNC Server with SYNC command support */
+            memset(&client_address, 0xdd, MFW_BT_ADDR_MAX_LEN);/* example */
+            if(bt_syn_s_send_com(service, subtyp, mfw_syn_action, mfw_obj, client_address) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync server send command Failure");
+            }
+            else
+              TRACE_EVENT("sync server send command ok");
+            break;
+          case 12: /* start bluetooth function syn_server_enable() */
+                   /* receive bluetooth primitive BTP_INIT_PROFILE_CNF in BTI */
+            memset(&syn_serv_config, 0, sizeof(syn_serv_config));
+            service = MFW_BT_SYNC;
+            mfw_obj_list.object_store = mfw_test_syn_obj;
+            mfw_obj_list.next_object = NULL;
+            mfw_obj_list_ptr = &mfw_obj_list;
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            /* default value SYNC server mode */
+            syn_serv_config.mfw_syn_srv_mode = MFW_BT_SYNC_GEN_MODE;
+            /* default value SYNC server authentication mode */
+            syn_serv_config.mfw_syn_srv_auth_mode = MFW_BT_SYNC_INIT_AUTH_MODE;
+            if(bt_init_profile_syn_s(service, subtyp, mfw_obj_list_ptr, syn_serv_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync server enable Failure");
+            }
+            else
+              TRACE_EVENT("sync server enable ok");
+            break;
+          case 13: /* start bluetooth SYNC server application function rvm_start_application() and syn_server_enable() */
+            /* receive bluetooth primitive SYN_SERVER_CFM in BTI */
+            service = MFW_BT_SYNC;
+            if(bt_start_profile_application((T_BTI_DEVICE_TYPE)service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:sync server start and enable Failure");
+            }
+            else
+              TRACE_EVENT("sync server start and enable ok");
+            break;
+          case 14: /* start bluetooth function syn_server_disable() */
+            /* receive bluetooth primitive SYN_SERVER_CFM in BTI */
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync server disable Failure");
+            }
+            else
+              TRACE_EVENT("sync server disable ok");
+            break;
+          case 15: /* start bluetooth function syn_server_enable() */
+            /* receive bluetooth primitive SYN_SERVER_CFM in BTI */
+            memset(&syn_serv_config, 0, sizeof(syn_serv_config));
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            mfw_obj_list.object_store = mfw_test_syn_obj;
+            mfw_obj_list1.object_store = mfw_test_syn_obj;
+            mfw_obj_list_ptr1 = &mfw_obj_list1;
+            mfw_obj_list.next_object = mfw_obj_list_ptr1;
+            mfw_obj_list1.next_object = NULL;
+            mfw_obj_list_ptr = &mfw_obj_list;
+            syn_serv_config.mfw_syn_srv_mode = MFW_BT_SYNC_INIT_MODE;/* change in test is not possible that means it is not changed in call back func */
+            syn_serv_config.mfw_syn_srv_auth_mode = MFW_BT_SYNC_NO_INIT_AUTH_MODE;/* change in test is not possible that means it is not changed in call back func */
+            if(bt_reconf_profile_syn_s(service, subtyp, mfw_obj_list_ptr1, syn_serv_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync server reconfiguration Failure");
+            }
+            else
+              TRACE_EVENT("sync server reconfiguration ok");
+            break;
+          case 16: /* start bluetooth SYNC server application function syn_server_disable() and rvm_stop_application()*/
+            service = MFW_BT_SYNC;
+            subtyp = MFW_BT_SERVER;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync server disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("sync server disable and stop application ok");
+            break;
+          case 17: /* start bluetooth function bmi_service_browse() for sync client with SYNC command support*/
+            service = MFW_BT_SYNC_CMD;
+            if(bt_service_search(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:sync search sync client Failure");
+            }
+            else
+              TRACE_EVENT("sync search sync client ok");
+            break;
+          case 18: /* start mfw function bt_clear_list_found_serv() of found sync */
+            service = MFW_BT_SYNC_CMD;
+            if(bt_clear_list_found_serv(service) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:sync list del Failure");
+            }
+            else
+              TRACE_EVENT("sync list del ok");
+            break;
+        }
+        return TRUE;
+        case BTP_SRV_OPP_TEST:/* test OPP profile, server */
+        TRACE_EVENT("bta_response_cb:BTP_SRV_OPP_TEST");
+        switch(((T_BTP_SRV_OPP_TEST *)data)->func_id)
+        {
+          case 1: /* start bluetooth OPP server and client application function
+             rvm_start_application() and opp_server_enable() and opp_client_enable() */
+            /* receive bluetooth primitive OPP_SERVER_CFM/OPP_CLIENT_CFM in BTI*/
+            service = MFW_BT_OPP;
+            if(bt_start_profile_application((T_BTI_DEVICE_TYPE)service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:opp client + server start and enable Failure");
+            }
+            else
+              TRACE_EVENT("opp client + server start and enable ok");
+            break;
+          case 2: /* start bluetooth OPP server application function opp_server_enable()*/
+            /* receive bluetooth primitive OPP_SERVER_CFM in BTI */
+            /* initialize opp server */
+            memset(&serv_config, 0, sizeof(serv_config));
+            subtyp = MFW_BT_SERVER;
+            service = MFW_BT_OPP;
+            /* example for default business card;mfw_path and mime_type parameters are NULL because
+            mode MFW_BT_OPP_BUFFER_MODE */
+            serv_config.mfw_opp_mode = MFW_BT_OPP_BUFFER_MODE;/* OPP server mode */
+            serv_config.mfw_inbox_path = NULL;/* not use file system currently */
+            serv_config.mfw_opp_object.mfw_object_type = MFW_BT_BUFFER;/* server_business_card in buffer */
+            serv_config.mfw_opp_object.mfw_buffer_start = server_business_card;
+            serv_config.mfw_opp_object.mfw_buffer_size = sizeof(&server_business_card);
+            serv_config.mfw_opp_object.mfw_object_name = server_default_name;
+            serv_config.mfw_opp_object.mfw_object_length = sizeof(server_business_card);
+            serv_config.mfw_opp_object.mfw_path = NULL;
+            serv_config.mfw_opp_object.mfw_object_mime_type = NULL;/* MIME directory information only for object_type: MFW_BT_PATH */
+
+            if(bt_init_profile_opp(service, subtyp, serv_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp server initialize Failure");
+            }
+            else
+              TRACE_EVENT("opp server initialize ok");
+            break;
+          case 3: /* start bluetooth function opp_server_disable() */
+            /* receive bluetooth primitive OPP_SERVER_CFM in BTI */
+            subtyp = MFW_BT_SERVER;
+            service = MFW_BT_OPP;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp server disable Failure");
+            }
+            else
+              TRACE_EVENT("opp server disable ok");
+            break;
+          case 4: /* start bluetooth OPP server application function opp_server_enable()*/
+            /* receive bluetooth primitive OPP_SERVER_CFM in BTI */
+            /* reconfigure opp server */
+            memset(&serv_config, 0, sizeof(serv_config));
+            subtyp = MFW_BT_SERVER;
+            service = MFW_BT_OPP;
+            /* example for default business card;mfw_path and mime_type parameters are NULL because
+            mode MFW_BT_OPP_BUFFER_MODE */
+            serv_config.mfw_opp_mode = MFW_BT_OPP_BUFFER_MODE;/* OPP server mode */
+            serv_config.mfw_inbox_path = NULL;/* not use file system currently */
+            serv_config.mfw_opp_object.mfw_object_type = MFW_BT_BUFFER;/* bmi_server_business_card in buffer */
+            serv_config.mfw_opp_object.mfw_buffer_start = server_business_card;
+            serv_config.mfw_opp_object.mfw_buffer_size = sizeof(&server_business_card);
+            serv_config.mfw_opp_object.mfw_object_name = server_default_name;
+            serv_config.mfw_opp_object.mfw_path = NULL;
+            serv_config.mfw_opp_object.mfw_object_mime_type = NULL;/* MIME directory information only for object_type: MFW_BT_PATH */
+            serv_config.mfw_opp_object.mfw_object_length = sizeof(server_business_card);
+
+            if(bt_reconf_profile_opp(service, subtyp, serv_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp server reconfigure Failure");
+            }
+            else
+              TRACE_EVENT("opp server reconfigure ok");
+            break;
+          case 5: /* start bluetooth OPP server application function opp_server_disable() and rvm_stop_application()*/
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_SERVER;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp server disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("opp server disable and stop application ok");
+            break;
+          case 6: /* start bluetooth OPP server application function opp_server_put_response()*/
+            /* reply to OPP_SERVER_PUT_REQUEST of remote opp client(about server)*/
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_SERVER;
+            memset(&receiv_obj, 0, sizeof(receiv_obj));
+            opp_put_res = MFW_BT_OPP_CONTINUE;/* positive response */
+            receiv_obj.mfw_object_type = MFW_BT_BUFFER;
+            /*  requested location for store of objects*/
+            receiv_obj.mfw_buffer_start = server_buffer;
+             /* with respect to object length delivered in BTP_OPP_SERV_PUT_IND;it can be bigger or smaller (loss data) - MMI decision */
+            receiv_obj.mfw_buffer_size = sizeof(&server_buffer);
+            receiv_obj.mfw_path = NULL;
+            /* with respect to delivered object name in BTP_OPP_SERV_PUT_IND */
+            receiv_obj.mfw_object_name = mfw_test_opp_obj_name;
+            /* with respect to delivered object length in BTP_OPP_SERV_PUT_IND */
+            receiv_obj.mfw_object_length = sizeof(&server_buffer);
+            if(bt_opp_put_reply(service, subtyp, opp_put_res, receiv_obj) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:opp response to put request Failure");
+            }
+            else
+              TRACE_EVENT("opp response to put request ok");
+            break;
+          case 7: /* start bluetooth primitive OPP_SERVER_PUT_REQUEST with TRACE_EVENT in mfw_bta */
+            bti_opp_s_put_req();
+            break;
+          case 8: /* start bluetooth primitive OPP_SERVER_PUT_CFM with TRACE_EVENT in mfw_bta */
+            bti_opp_server_put_cnf();
+            break;
+
+        }
+        return TRUE;
+        case BTP_CL_OPP_TEST:/* test OPP profile, client */
+        TRACE_EVENT("bta_response_cb:BTP_CL_OPP_TEST");
+        switch(((T_BTP_CL_OPP_TEST *)data)->func_id)
+        {
+          case 1: /* start bluetooth OPP client application function opp_client_enable()*/
+            /* receive bluetooth primitive OPP_CLIENT_CFM in BTI */
+            /* initialize opp client */
+            memset(&serv_config, 0, sizeof(serv_config));
+            subtyp = MFW_BT_CLIENT;
+            service = MFW_BT_OPP;
+            if(bt_init_profile_opp(service, subtyp, serv_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client initialize Failure");
+            }
+            else
+              TRACE_EVENT("opp client initialize ok");
+            break;
+          case 2: /* start bluetooth function opp_client_disable() */
+            /* receive bluetooth primitive OPP_CLIENT_CFM in BTI */
+            subtyp = MFW_BT_CLIENT;
+            service = MFW_BT_OPP;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client disable Failure");
+            }
+            else
+              TRACE_EVENT("opp client disable ok");
+            break;
+          case 3: /* start bluetooth function bmi_service_browse() for OPP server
+                   because only servers are registered in data base and clients
+                   has to look for remote OPP server */
+            service = MFW_BT_OPP;
+            if(bt_service_search(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp search Failure");
+            }
+            else
+              TRACE_EVENT("opp search client ok");
+            break;
+          case 4: /* start mfw function bt_clear_list_found_serv() of found opp */
+            service = MFW_BT_OPP;
+            if(bt_clear_list_found_serv(service) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:opp list del Failure");
+            }
+            else
+              TRACE_EVENT("opp list del ok");
+            break;
+          case 5: /* start bluetooth OPP client application function opp_client_disable() and rvm_stop_application()*/
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_CLIENT;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("opp client disable and stop application ok");
+            break;
+          case 6: /* start bluetooth OPP client application function opp_push_object() */
+            /* push object to a specific server */
+            memset(&opp_push_obj, 0, sizeof(opp_push_obj));
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_CLIENT;
+            memset(&server_address, 0xaa, MFW_BT_ADDR_MAX_LEN);/* OPP address with help of browsing procedure */
+            mfw_keep_connection_opp = FALSE; /* first block is also last block */
+            /*  mfw_keep_connection_opp = TRUE;  further blocks will follow */
+            opp_push_obj.mfw_buffer_start = client_buffer;/* content: client object which is desired to push */
+            opp_push_obj.mfw_buffer_size = sizeof(&client_buffer);
+            opp_push_obj.mfw_object_type = MFW_BT_BUFFER;
+            opp_push_obj.mfw_path = NULL;
+            opp_push_obj.mfw_object_name = client_obj_name;
+            opp_push_obj.mfw_object_length =  sizeof(&client_buffer);
+            opp_push_obj.mfw_object_mime_type = NULL;/* MMI must know the mime_type of pushed object */
+            if(bt_opp_push_object(service, subtyp, server_address, mfw_keep_connection_opp, opp_push_obj) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client pushs an object Failure");
+            }
+            else
+              TRACE_EVENT("opp client pushs an object ok");
+            break;
+          case 7: /* start bluetooth primitive OPP_OBJECT_PUSH_CFM with TRACE_EVENT in mfw_bta */
+            bti_opp_client_push_cnf();
+            break;
+          case 8: /* start bluetooth OPP client application function opp_pull_object() */
+            /* pull object from a specific server */
+            memset(&opp_pull_obj, 0, sizeof(opp_pull_obj));
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_CLIENT;
+            memset(&server_address, 0xaa, MFW_BT_ADDR_MAX_LEN);
+            /* the specific server address can received
+             with help of function bt_service_search(service) and  BT_SERVICE_SEARCH_CNF */
+            mfw_keep_connection_opp = FALSE; /* first block is also last block */
+          /*  mfw_keep_connection_opp = TRUE;  further pull procedures will follow; MMI decision */
+            opp_pull_obj.mfw_buffer_start = server_business_card;
+            opp_pull_obj.mfw_buffer_size = sizeof(&server_business_card);
+            opp_pull_obj.mfw_object_type = MFW_BT_BUFFER;/* store pulled object in buffer */
+            opp_pull_obj.mfw_path = NULL;
+            opp_pull_obj.mfw_object_length =  sizeof(&server_business_card);
+            opp_pull_obj.mfw_object_mime_type = NULL;/* MMI must know the mime_type of pulled object; it is only a test value */
+            if(bt_opp_pull_object(service, subtyp, server_address, mfw_keep_connection_opp, opp_pull_obj) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client pulls an object Failure");
+            }
+            else
+              TRACE_EVENT("opp client pulls an object ok");
+            break;
+          case 9: /* start bluetooth primitive OPP_OBJECT_PULL_CFM with TRACE_EVENT in mfw_bta */
+            bti_opp_client_pull_cnf();
+            break;
+          case 10: /* start bluetooth OPP client application function opp_exchange_card() */
+            /* push an object to a specific server and pull object from a specific server */
+            memset(&opp_push_obj, 0, sizeof(opp_push_obj));
+            memset(&opp_pull_obj, 0, sizeof(opp_pull_obj));
+            service = MFW_BT_OPP;
+            subtyp = MFW_BT_CLIENT;
+            memset(&server_address, 0xaa, MFW_BT_ADDR_MAX_LEN);
+            /* the specific server address can received
+             with help of function bt_service_search(service) and  BT_SERVICE_SEARCH_CNF */
+            mfw_keep_connection_opp = FALSE; /* first block is also last block */
+          /*  mfw_keep_connection_opp = TRUE;  further blocks will follow */
+            opp_push_obj.mfw_buffer_start = client_business_card;
+            opp_push_obj.mfw_buffer_size = sizeof(&client_business_card);
+            opp_push_obj.mfw_object_type = MFW_BT_BUFFER;
+            opp_push_obj.mfw_path = NULL;
+            opp_push_obj.mfw_object_name = client_obj_name;
+            opp_push_obj.mfw_object_length =  sizeof(&client_buffer);
+            opp_push_obj.mfw_object_mime_type = NULL;
+
+            opp_pull_obj.mfw_buffer_start = server_business_card;
+            opp_pull_obj.mfw_buffer_size = sizeof(&server_business_card);
+            opp_pull_obj.mfw_object_type = MFW_BT_BUFFER;
+            opp_pull_obj.mfw_path = NULL;
+            opp_pull_obj.mfw_object_length =  sizeof(&server_business_card);
+            opp_pull_obj.mfw_object_mime_type = NULL;
+
+            if(bt_opp_exch_objects(service, subtyp, opp_push_obj, opp_pull_obj, server_address, mfw_keep_connection_opp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:opp client and server exchange object Failure");
+            }
+            else
+              TRACE_EVENT("opp client and server exchange an object ok");
+            break;
+        }
+        return TRUE;
+
+        case BTP_CL_HSG_TEST:/* test HSG profile, client and common hsg features */
+        TRACE_EVENT("bta_response_cb:BTP_CL_HSG_TEST");
+        switch(((T_BTP_CL_HSG_TEST *)data)->func_id)
+        {
+          case 1: /* start bluetooth HSG server and client application function rvm_start_application()
+                  and hsg_client_enable() and hsg_server_enable() */
+            /* receive bluetooth primitive HSG_CLIENT_ENABLE_CFM/HSG_SERVER_ENABLE_CFM in BTI */
+            service = MFW_BT_HEADSET;
+            if(bt_start_profile_application((T_BTI_DEVICE_TYPE)service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg client + server start and enable Failure");
+            }
+            else
+              TRACE_EVENT("hsg client + server start and enable ok");
+            break;
+          case 2: /* start bluetooth HSG client application function hsg_client_enable()*/
+            /* receive bluetooth primitive HSG_CLIENT_ENABLE_CFM in BTI */
+            /* initialize headset client */
+            memset(&client_config, 0, sizeof(client_config));
+            service = MFW_BT_HEADSET;
+            client_config.config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_ON;
+            if(bt_init_profile_hsg_cl(service, client_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg client initialize Failure");
+            }
+            else
+              TRACE_EVENT("hsg client initialize ok");
+            break;
+          case 3: /* start bluetooth HSG client application function hsg_client_enable()*/
+            /* receive bluetooth primitive HSG_CLIENT_ENABLE_CFM in BTI */
+            /* reconfigure headset client */
+            memset(&client_config, 0, sizeof(client_config));
+            service = MFW_BT_HEADSET;
+            client_config.config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_OFF;
+            if(bt_reconfig_profile_hsg_cl(service, client_config) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg client reconfigure Failure");
+            }
+            else
+              TRACE_EVENT("hsg client reconfigure ok");
+            break;
+          case 4: /* start bluetooth HSG client application function hsg_get_configs()*/
+            /* get state of connection mode for headset client */
+            memset(&client_config, 0, sizeof(client_config));
+            service = MFW_BT_HEADSET;
+            if(bt_get_auto_connect(service, &client_config) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg client connection mode Failure");
+            }
+            else
+            {
+              TRACE_EVENT_P1("connect mode = %d", client_config.config_mode);
+            }
+            break;
+          case 5: /* start bluetooth HSG client application function hsg_get_configs()*/
+            /* get headset client and server configuration */
+            memset(&server_conf, 0, sizeof(server_conf));
+            memset(&client_config, 0, sizeof(client_config));
+            service = MFW_BT_HEADSET;
+            if(bt_get_config(service, &client_config, &server_conf) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg client and server configuration failure");
+            }
+            else
+            {
+              TRACE_EVENT_P1("client connect mode = %d", client_config.config_mode);
+              TRACE_EVENT_P1("server number phone list = %d", server_conf.nb_phone);
+            }
+            break;
+          case 6: /* start bluetooth HSG client application function hsg_client_enable()*/
+            /* set state of connection mode for headset client */
+            service = MFW_BT_HEADSET;
+            if(bt_auto_connect(service, MFW_BT_AUTO_CONNECT_ON) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg client set connection mode failure");
+            }
+            else
+              TRACE_EVENT("hsg client set connection mode ok");
+            break;
+          case 7: /* start bluetooth function hsg_client_disable() */
+            /* receive bluetooth primitive HSG_CLIENT_ENABLE_CFM in BTI */
+            service = MFW_BT_HEADSET;
+            subtyp = MFW_BT_CLIENT;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg client disable Failure");
+            }
+            else
+              TRACE_EVENT("hsg client disable ok");
+            break;
+          case 8: /* start bluetooth HSG client application function hsg_client_disable() and rvm_stop_application()*/
+            service = MFW_BT_HEADSET;
+            subtyp = MFW_BT_CLIENT;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg client disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("hsg client disable and stop application ok");
+            break;
+          case 9: /* start bluetooth HSG client application function hsg_out_connection_transfer()*/
+            service = MFW_BT_HEADSET;
+            for(j =0;j<MFW_BT_ADDR_MAX_LEN;j++)
+              hsg_address[j] = 0xbb;
+            headset_id = MFW_BT_INVALID_HEADSET_ID;
+            if(bt_transfer_audio_out(service, headset_id, hsg_address) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:transfer audio out Failure");
+            }
+            else
+              TRACE_EVENT("transfer audio out ok");
+            break;
+          case 10: /* start bluetooth HSG client application function hsg_in_connection_transfer()*/
+            service = MFW_BT_HEADSET;
+            if(bt_transfer_audio_in(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:transfer audio in Failure");
+            }
+            else
+              TRACE_EVENT("transfer audio in ok");
+            break;
+          case 11: /* start bluetooth HSG client application function hsg_save_config()*/
+            /* not supported TI 5.3.0 BT */
+            service = MFW_BT_HEADSET;
+            if(bt_save_config(service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:save hsg config Failure");
+            }
+            else
+              TRACE_EVENT("save hsg config ok");
+            break;
+          case 12: /* start bluetooth HSG client application function hsg_restore_config()*/
+            /* not supported TI 5.3.0 BT */
+            service = MFW_BT_HEADSET;
+            if(bt_restore_config(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:restore hsg config Failure");
+            }
+            else
+              TRACE_EVENT("restore hsg config ok");
+            break;
+          case 13: /* start bluetooth HSG client application function hsg_save_default_list()*/
+            /*  save in non-volatile memory, not supported TI 5.3.0 BT */
+            service = MFW_BT_HEADSET;
+            if(bt_save_default_list(service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:save hsg def list Failure");
+            }
+            else
+              TRACE_EVENT("save hsg def list ok");
+            break;
+          case 14: /* start bluetooth HSG client application function hsg_restore_default_list()*/
+            /*  save in non-volatile memory, not supported TI 5.3.0 BT */
+            service = MFW_BT_HEADSET;
+            if( bt_restore_default_list(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:restore hsg def list Failure");
+            }
+            else
+              TRACE_EVENT("restore hsg def list ok");
+            break;
+          case 15: /* start bluetooth primitive HSG_DEVICE_CONNECTION_IND */
+            bti_conn_ind_hsg();
+            break;
+          case 16: /* start bluetooth primitive HSG_HEADSET_CONNECTION_CLOSED */
+            bti_hsg_disconnect();
+            break;
+          case 17: /* start bluetooth primitive HSG_CONNECTION_FAILED */
+            bti_hsg_connect_failed();
+            break;
+          case 18: /* start bluetooth primitive HSG_GSM_CONNECTION_IND */
+            bti_hsg_gsm_connect_ind();
+            break;
+        }
+        return TRUE;
+        case BTP_SRV_HSG_TEST:/* test HSG profile, server and common hsg functions */
+        TRACE_EVENT("bta_response_cb:BTP_SRV_HSG_TEST");
+        switch(((T_BTP_SRV_HSG_TEST *)data)->func_id)
+        {
+          case 1: /* start bluetooth HSG server application function hsg_server_enable()*/
+            /* receive bluetooth primitive HSG_SERVER_ENABLE_CFM in BTI */
+            /* initialize headset server */
+            memset(&server_conf, 0, sizeof(server_conf));
+            memset(test_mfw_key_list, 0, sizeof(test_mfw_key_list));
+            test_mfw_key_list[0] =  0xFE;   /* f.e.KEY_F1 */
+            memset(test_mfw_phone_list, 0, sizeof(test_mfw_phone_list));
+            for(j=0;j<4;j++)
+                        test_mfw_phone_list[1][j] = j | 0x30;
+            service = MFW_BT_HEADSET;
+            server_conf.serv_con_conf = 0;  /* TI not used */
+            server_conf.conn_break = MFW_BT_CONN_SCAN_BREAK_DEFAULT_VALUE;
+            server_conf.conn_time = MFW_BT_CONN_SCAN_TIME_DEFAULT_VALUE;
+            server_conf.nb_phone = 1;/* currently only one number from remote headset is supported */
+            memcpy(server_conf.mfw_phone_list, test_mfw_phone_list, sizeof(test_mfw_phone_list));
+            memcpy(server_conf.mfw_key_list, test_mfw_key_list, sizeof(test_mfw_key_list));
+            if(bt_init_profile_hsg_serv(service, server_conf) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg server initialize Failure");
+            }
+            else
+              TRACE_EVENT("hsg server initialize ok");
+            break;
+          case 2: /* start bluetooth HSG server application function hsg_server_enable()*/
+            /* receive bluetooth primitive HSG_SERVER_ENABLE_CFM in BTI */
+            /* reconfigure headset server */
+            memset(&server_conf, 0, sizeof(server_conf));
+            memset(test_mfw_key_list, 0, sizeof(test_mfw_key_list));
+            test_mfw_key_list[0] =  0xFE;   /* f.e. KEY_F1 */
+            memset(test_mfw_phone_list, 0, sizeof(test_mfw_phone_list));
+            for(j=0;j<4;j++)
+                        test_mfw_phone_list[1][j] = j | 0x30;
+            service = MFW_BT_HEADSET;
+            server_conf.serv_con_conf = 0;  /* TI not used */
+            server_conf.conn_break = MFW_BT_CONN_SCAN_BREAK_DEFAULT_VALUE;
+            server_conf.conn_time = MFW_BT_CONN_SCAN_TIME_DEFAULT_VALUE;
+            server_conf.nb_phone = 1;/* currently only one number from remote headset is supported */
+            memcpy(server_conf.mfw_phone_list, test_mfw_phone_list, sizeof(test_mfw_phone_list));
+            memcpy(server_conf.mfw_key_list, test_mfw_key_list, sizeof(test_mfw_key_list));
+            if(bt_reconfig_profile_hsg_serv(service, server_conf) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg server reconfigure Failure");
+            }
+            else
+              TRACE_EVENT("hsg server reconfigure ok");
+            break;
+          case 3: /* start bluetooth function hsg_server_disable() */
+            /* receive bluetooth primitive HSG_SERVER_ENABLE_CFM in BTI */
+            service = MFW_BT_HEADSET;
+            subtyp = MFW_BT_SERVER;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg server disable Failure");
+            }
+            else
+              TRACE_EVENT("hsg server disable ok");
+            break;
+          case 4: /* start bluetooth HSG client application function hsg_server_disable() and rvm_stop_application()*/
+            service = MFW_BT_HEADSET;
+            subtyp = MFW_BT_SERVER;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:hsg server disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("hsg server disable and stop application ok");
+            break;
+          case 5: /* start bluetooth HSG client application function hsg_add_default_headset()*/
+            memset(&hsg_name, 0, sizeof(hsg_name));
+            service = MFW_BT_HEADSET;
+            for(j =0;j<MFW_BT_ADDR_MAX_LEN;j++)
+              hsg_address[j] = 0xbb;/* address of new add headset */
+            strcpy(hsg_name, hsg_default_name);/* name of new add headset */
+            priority = 2;/* desired priority of new add headset in list */
+            rem_audio_ctr_supp_hsg = TRUE;/* headset supports remote audio control */
+            if(bt_set_pref_headset(service, hsg_address, hsg_name, priority, rem_audio_ctr_supp_hsg, &headset_cnf_id) NEQ MFW_BT_OK)
+            /* get id in default headset list */
+            {
+              TRACE_EVENT("mfw_bta:hsg add default headset Failure");
+            }
+            else
+              TRACE_EVENT_P1("add hsg: id = %d", headset_cnf_id);
+            break;
+          case 6: /* start bluetooth function bmi_service_browse() for headset */
+            service = MFW_BT_HEADSET;
+            if(bt_service_search(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:headset search Failure");
+            }
+            else
+              TRACE_EVENT("headset search ok");
+            break;
+          case 7: /* start bluetooth function hsg_remove_default_headset() */
+            headset_id = 1;
+            service = MFW_BT_HEADSET;
+            if(bt_reset_pref_hsg(service, headset_id) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:remove headset Failure");
+            }
+            else
+              TRACE_EVENT("remove headset ok");
+            break;
+          case 8: /* start bluetooth function hsg_get_default_headset_info() */
+            memset(&hs_info, 0, sizeof(hs_info));
+            headset_id  = 3;
+            service = MFW_BT_HEADSET;
+            if(bt_get_default_service_info(service, headset_id, &hs_info) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:get headset info Failure");
+            }
+            else
+              TRACE_EVENT_P4("hsg info: %d %d %s %s", hs_info.priority, hs_info.mfw_remote_audio_control_support, hs_info.hsg_name, hs_info.bd_addr);
+            break;
+          case 9: /* start bluetooth function hsg_change_default_headset_info() */
+            service = MFW_BT_HEADSET;
+            headset_id = 3;
+            priority = 4;
+            if(bt_set_prio_default_service(service, headset_id, priority) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:change headset info Failure");
+            }
+            else
+              TRACE_EVENT("change headset info ok");
+            break;
+          case 10: /* start bluetooth function hsg_connect() */
+            service = MFW_BT_HEADSET;
+            for(j =0;j<MFW_BT_ADDR_MAX_LEN;j++)
+              hsg_address[j] = 0xbb;
+            headset_id = MFW_BT_INVALID_HEADSET_ID;
+            if(bt_connect_hsg(service, headset_id, hsg_address, 0) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:connect headset Failure");
+            }
+            else
+              TRACE_EVENT("connect headset ok");
+            break;
+          case 11: /* start bluetooth function hsg_disconnect() */
+            service = MFW_BT_HEADSET;
+            if(bt_disconnect_service(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:disconnect headset Failure");
+            }
+            else
+              TRACE_EVENT("disconnect headset ok");
+            break;
+          case 12: /* start bluetooth function hsg_update_params() */
+            service = MFW_BT_HEADSET;
+            nb = MFW_BT_SPEAKER_GAIN;/* MFW_BT_MIC_GAIN */
+            type = MFW_BT_PARA_INC; /* MFW_BT_PARA_SET */
+            new_value = 0;
+            if(bt_set_param_headset(service, nb, type, new_value) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set params headset Failure");
+            }
+            else
+              TRACE_EVENT("set params headset ok");
+            break;
+          case 13: /* start mfw function bt_clear_list_found_serv() of found hsg */
+            service = MFW_BT_HEADSET;
+            if(bt_clear_list_found_serv(service) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg list del Failure");
+            }
+            else
+              TRACE_EVENT("hsg list del ok");
+            break;
+          case 14: /* start bluetooth primitive HSG_DEVICE_CONNECTION_PERFORMED */
+            bti_hsg_dev_connect_inf();
+            break;
+          case 15: /* start mfw function hsg_is_default_headset()*/
+            service = MFW_BT_HEADSET;
+            for(j =0;j<MFW_BT_ADDR_MAX_LEN;j++)
+              hsg_address[j] = 0xbb;
+            if(bt_is_pref_headset(service, hsg_address, &headset_cnf_id) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:hsg list del Failure");
+            }
+            else
+            {
+              if(headset_cnf_id EQ MFW_BT_INVALID_HEADSET_ID)
+              {
+                TRACE_EVENT("hsg not in default list");
+              }
+              else
+              {
+                TRACE_EVENT_P1("hsg id in default list:%d", headset_cnf_id);
+              }
+            }
+            break;
+        }
+        return TRUE;
+        case BTP_FAX_TEST:/* test FAX profile */
+        TRACE_EVENT("bta_response_cb:BTP_FAX_TEST");
+        switch(((T_BTP_FAX_TEST *)data)->func_id)
+        {
+            case 1:/*start bluetooth function fax_gw_config()*/
+            service = MFW_BT_FAX_GW;
+            fax_filter.link_event = MFW_BT_LINK_MONIT_ON;
+            fax_filter.call_event = MFW_BT_CALL_MONIT_ON;
+            if(bt_init_profile_fax(service, fax_filter) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:init fax Failure");
+            }
+            else
+              TRACE_EVENT("init fax ok");
+            break;
+          case 2: /* start bluetooth fax application function
+             rvm_start_application(), fax_gw_enable(), fax_gw_config() */
+            /* receive bluetooth primitive FAX_GW_STATUS_CFM in BTI */
+            service = MFW_BT_FAX_GW;
+            if(bt_start_profile_application((T_BTI_DEVICE_TYPE)service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:fax server start and enable Failure");
+            }
+            else
+              TRACE_EVENT("fax start and enable ok");
+            break;
+          case 3:/* start bluetooth function fax_gw_config()*/
+            service = MFW_BT_FAX_GW;
+            fax_filter.link_event = MFW_BT_LINK_MONIT_OFF;
+            fax_filter.call_event = MFW_BT_CALL_MONIT_OFF;
+            if(bt_reconfig_profile_fax(service, fax_filter) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:reconfig fax Failure");
+            }
+            else
+              TRACE_EVENT("reconfig fax ok");
+            break;
+          case 4: /* start bluetooth FAX application function fax_gw_disable() and rvm_stop_application()*/
+            service = MFW_BT_FAX_GW;
+            subtyp = MFW_BT_NO_SUBTYPE;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:fax disable and stop application Failure");
+            }
+            else
+              TRACE_EVENT("fax disable and stop application ok");
+            break;
+          case 5: /* start bluetooth function fax_gw_disable() */
+            service = MFW_BT_FAX_GW;
+            subtyp = MFW_BT_NO_SUBTYPE;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:deinit fax Failure");
+            }
+            else
+              TRACE_EVENT("deinit fax ok");
+            break;
+          case 6: /* start bluetooth function bmi_service_browse() for FAX */
+            service = MFW_BT_FAX_GW;
+            if(bt_service_search(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:search fax Failure");
+            }
+            else
+              TRACE_EVENT("search fax ok");
+            break;
+          case 7: /* start bluetooth function bmi_service_browse() for FAX and delete list of found fax*/
+            service = MFW_BT_FAX_GW;
+            if(bt_clear_list_found_serv(service) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:search/delete fax Failure");
+            }
+            else
+              TRACE_EVENT("search/delete fax ok");
+            break;
+          case 8: /* start bluetooth function fax_gw_hangup() */
+            service = MFW_BT_FAX_GW;
+            if(bt_disconnect_service(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:disconn req fax Failure");
+            }
+            else
+              TRACE_EVENT("disconn req fax ok");
+            break;
+          case 9: /* start bluetooth primitive FAX_GW_LINK_MONITORING:FAX_GW_CONNECTED */
+            bti_conn_ind_fax();
+            break;
+          case 10: /* start bluetooth primitive FAX_GW_LINK_MONITORING:FAX_GW_NOT_CONNECTED */
+            bti_fax_disconnect();
+            break;
+          case 11: /* start bluetooth primitive FAX_GW_CALL_MONITORING:FAX_GW_CALL_IN_PROGRESS */
+            bti_fax_call_mon();
+            break;
+        }
+        return TRUE;
+        case BTP_DUN_TEST:/* test DUN profile */
+        TRACE_EVENT("bta_response_cb:BTP_DUN_TEST");
+        switch(((T_BTP_DUN_TEST *)data)->func_id)
+        {
+          case 1: /* start bluetooth function dun_gw_config() */
+            service = MFW_BT_DIAL_UP;
+            dun_filter.link_event = MFW_BT_LINK_MONIT_ON;
+            dun_filter.call_event = MFW_BT_CALL_MONIT_ON;
+            if(bt_init_profile_dun(service, dun_filter) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:init dun Failure");
+            }
+            else
+              TRACE_EVENT("init dun ok");
+            break;
+          case 2: /* start bluetooth dial up application function
+             rvm_start_application(), dun_gw_enable(), dun_gw_config() */
+            /* receive bluetooth primitive DUN_GW_STATUS_CFM in BTI */
+            service = MFW_BT_DIAL_UP;
+            if(bt_start_profile_application((T_BTI_DEVICE_TYPE)service) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:dun server start and enable Failure");
+            }
+            else
+              TRACE_EVENT("dun start and enable ok");
+            break;
+          case 3: /* start bluetooth function dun_gw_config() */
+            service = MFW_BT_DIAL_UP;
+            dun_filter.link_event = MFW_BT_LINK_MONIT_ON;
+            dun_filter.call_event = MFW_BT_CALL_MONIT_ON;
+            if(bt_reconfig_profile_dun(service, dun_filter) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:reconf dun Failure");
+            }
+            else
+              TRACE_EVENT("reconf dun ok");
+            break;
+          case 4: /* start bluetooth function dun_gw_disable() */
+            service = MFW_BT_DIAL_UP;
+            subtyp = MFW_BT_NO_SUBTYPE;
+            if(bt_deinit_profile(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:deinit dun Failure");
+            }
+            else
+              TRACE_EVENT("deinit dun ok");
+            break;
+          case 5: /* start bluetooth DUN application function dun_gw_disable() and rvm_stop_application()*/
+            service = MFW_BT_DIAL_UP;
+            subtyp = MFW_BT_NO_SUBTYPE;
+            if(bt_stop_profile_application(service, subtyp) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:stop dun Failure");
+            }
+            else
+              TRACE_EVENT("stop dun ok");
+            break;
+          case 6: /* start bluetooth function bmi_service_browse() for DUN */
+            service = MFW_BT_DIAL_UP;
+              if(bt_service_search(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:search dun Failure");
+            }
+            else
+              TRACE_EVENT("search dun ok");
+            break;
+          case 7: /* start bluetooth function bmi_service_browse() for DUN and delete list of found dun*/
+            service = MFW_BT_DIAL_UP;
+            if(bt_clear_list_found_serv(service) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:search/delete dun Failure");
+            }
+            else
+              TRACE_EVENT("search/delete dun ok");
+            break;
+          case 8: /* start bluetooth function dun_gw_hangup() */
+            service = MFW_BT_DIAL_UP;
+            if(bt_disconnect_service(service) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:disconn req dun Failure");
+            }
+            else
+              TRACE_EVENT("disconn req dun ok");
+            break;
+          case 9: /* start bluetooth primitive DUN_GW_LINK_MONITORING:DUN_GW_NOT_CONNECTED */
+            bti_dun_disconnect();
+            break;
+          case 10: /* start bluetooth primitive DUN_GW_LINK_MONITORING:DUN_GW_CONNECTED */
+            bti_conn_ind_dun();
+            break;
+          case 11: /* start bluetooth primitive DUN_GW_CALL_MONITORING:DUN_GW_CALL_IN_PROGRESS ... */
+            bti_dun_call_mon();
+            break;
+        }
+        return TRUE;
+        case BTP_SEC_BROWS_TEST:/* test browsing and security bluetooth function  */
+        TRACE_EVENT("bta_response_cb:BTP_SEC_BROWS_TEST");
+        switch(((T_BTP_SEC_BROWS_TEST *)data)->func_id)
+        {
+          case 1:/* register in security managment of bluetooth */
+            if(bt_register_sm() NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:SCM register Failure");
+            }
+            else
+              TRACE_EVENT("SCM register ok");
+            break;
+          case 2:/* set general security mode of bluetooth device with default value */
+            if(bt_set_security_mode(MFW_BT_SECURITY_MODE_2) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:SCM sec mode Failure");
+            }
+            else
+              TRACE_EVENT("SCM sec mode ok");
+            break;
+          case 3:/*  set bluetooth device in pairable mode */
+            if(bt_set_pair_mode (MFW_BT_PAIRABLE) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:SCM pair mode Failure");
+            }
+            else
+              TRACE_EVENT("SCM pair mode ok");
+            break;
+          case 4:/*  search bluetooth devices with their services */
+            if(bt_device_search() NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:search devices Failure");
+            }
+            else
+              TRACE_EVENT("search devices ok");
+            break;
+          case 5:/*  terminate browsing procedure */
+            if(bt_search_abort() NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:search abort Failure");
+            }
+            else
+              TRACE_EVENT("search abort ok");
+            break;
+          case 6: /* start bluetooth primitive SCM_PIN_CODE_REQUEST */
+            bti_send_pin_request();
+            break;
+          case 7: /* start bluetooth function scm_pin_code_reply() */
+            memset(&hsg_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            memset(&pin_code, 0x35, MFW_BT_PIN_MAX_LEN);
+            pin_mode = PIN_PROVIDED;
+            result_bt = bt_send_pin(hsg_address, pin_code, pin_mode);
+            if(result_bt EQ MFW_BT_INVALID_PARA)
+            {
+              TRACE_EVENT("mfw_bta:Wrong Pin");
+            }
+            else if(result_bt NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:pin Failure");
+            }
+            else
+              TRACE_EVENT("pin ok");
+            break;
+          case 8: /* start bluetooth primitive SCM_DEVICE_PAIRED_RESULT */
+            bti_pin_code_cnf();
+            break;
+          case 9: /* start bluetooth function scm_get_next_authorized_device() for sync */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            auth_mask = MFW_SERVICE_SYNC_C;
+            if(bt_authorized_devices(&authorized_devices_list, auth_mask) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P3("auth sync:%d %x %s", authorized_devices_list.count, authorized_devices_list.auth_devices[1].mask_authorization, authorized_devices_list.auth_devices[1].remote_bd_addr);
+            break;
+          case 10: /* start bluetooth function scm_get_next_authorized_device() for opp */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            auth_mask = MFW_SERVICE_OPP;
+            if(bt_authorized_devices(&authorized_devices_list, auth_mask) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P3("auth opp:%d %x %s", authorized_devices_list.count, authorized_devices_list.auth_devices[1].mask_authorization, authorized_devices_list.auth_devices[1].remote_bd_addr);
+            break;
+          case 11: /* start bluetooth function scm_get_next_authorized_device() for fax */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            auth_mask = MFW_SERVICE_FAX;
+            if(bt_authorized_devices(&authorized_devices_list, auth_mask) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P3("auth fax:%d %x %s", authorized_devices_list.count, authorized_devices_list.auth_devices[1].mask_authorization, authorized_devices_list.auth_devices[1].remote_bd_addr);
+            break;
+          case 12: /* start bluetooth function scm_get_next_authorized_device() for hsg */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            auth_mask = MFW_SERVICE_HSG;
+            if(bt_authorized_devices(&authorized_devices_list, auth_mask) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P3("auth hsg:%d %x %s", authorized_devices_list.count, authorized_devices_list.auth_devices[1].mask_authorization, authorized_devices_list.auth_devices[1].remote_bd_addr);
+            break;
+          case 13: /* start bluetooth function scm_get_next_authorized_device() for dun */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            auth_mask = MFW_SERVICE_DUN;
+            if(bt_authorized_devices(&authorized_devices_list, auth_mask) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P3("auth dun:%d %x %s", authorized_devices_list.count, authorized_devices_list.auth_devices[1].mask_authorization, authorized_devices_list.auth_devices[1].remote_bd_addr);
+            break;
+          case 14: /* start bluetooth function scm_get_next_authorized_device() for all existing services */
+            memset(&authorized_devices_list, 0, sizeof(authorized_devices_list));
+            if(bt_list_auth_dev(&authorized_devices_list) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth list Failure");
+            }
+            else
+              TRACE_EVENT_P1("auth list:%d", authorized_devices_list.count);
+            break;
+          case 15: /* start bluetooth function scm_set_device_authorization() for sync */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_SYNC_C;
+            if(bt_del_authorization(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del auth Failure");
+            }
+            else
+              TRACE_EVENT("del auth ok");
+            break;
+          case 16: /* start bluetooth function scm_set_device_authorization() for dun */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_DUN;
+            if(bt_del_authorization(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del auth Failure");
+            }
+            else
+              TRACE_EVENT("del auth ok");
+            break;
+          case 17: /* start bluetooth function scm_set_device_authorization() for fax */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_FAX;
+            if(bt_del_authorization(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del auth Failure");
+            }
+            else
+              TRACE_EVENT("del auth ok");
+            break;
+          case 18: /* start bluetooth function scm_set_device_authorization() for opp */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_OPP;
+            if(bt_del_authorization(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del auth Failure");
+            }
+            else
+              TRACE_EVENT("del auth ok");
+            break;
+          case 19: /* start bluetooth function scm_set_device_authorization() for hsg */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_HSG;
+            if(bt_del_authorization(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del auth Failure");
+            }
+            else
+              TRACE_EVENT("del auth ok");
+            break;
+          case 20: /* start bluetooth function scm_set_device_authorization() for hsg */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            if(bt_del_authorizations_device(remote_address) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:del authorization device Failure");
+            }
+            else
+              TRACE_EVENT("del authorization device auth ok");
+            break;
+          case 21: /* start bluetooth function scm_set_security_mode() */
+            sec_mode = MFW_BT_SECURITY_MODE_3;
+            if(bt_set_security_mode(sec_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set common security level Failure");
+            }
+            else
+              TRACE_EVENT("set common security level ok");
+            break;
+          case 22: /* start bluetooth function scm_set_default_security_requirements() */
+            default_security = MFW_BT_INCOM_AUTHENTICATION | MFW_BT_INCOM_AUTHORIZATION |MFW_BT_OUTGO_ENCRYPTION;
+            if(bt_set_default_security(default_security) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set default security values Failure");
+            }
+            else
+              TRACE_EVENT("set default security values ok");
+            break;
+          case 23:/* deregister in security managment of bluetooth */
+            if(bt_deregister_sm() NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:SCM deregister Failure");
+            }
+            else
+              TRACE_EVENT("SCM deregister ok");
+            break;
+        }
+        return TRUE;
+        case BTP_OTHER_TEST:/* test common bluetooth function (lists) */
+        TRACE_EVENT("bta_response_cb:BTP_OTHER_TEST");
+        switch(((T_BTP_OTHER_TEST *)data)->func_id)
+        {
+          case 1:/*  delete list of found bluetooth devices */
+            if(bt_clear_list_found_dev() NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:clear device list Failure");
+            }
+            else
+              TRACE_EVENT("clear device list ok");
+            break;
+          case 2:/*  delete lists of found bluetooth services */
+            if(bt_clear_all_lists_found_serv() NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:clear service lists Failure");
+            }
+            else
+              TRACE_EVENT("clear service lists ok");
+            break;
+          case 3:/* start bluetooth function scm_set_pairable_mode() */
+            pair_mode = MFW_BT_PAIRABLE;
+            if(bt_set_pair_mode(pair_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set pair mode Failure");
+            }
+            else
+              TRACE_EVENT("set pair mode on ok");
+            break;
+          case 4:/* start bluetooth function scm_set_pairable_mode() */
+            pair_mode = MFW_BT_NON_PAIRABLE;
+            if(bt_set_pair_mode(pair_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set pair mode Failure");
+            }
+            else
+              TRACE_EVENT("set pair mode off ok");
+            break;
+          case 5:/* start bluetooth function scm_start_pairing() */
+            memset(&hsg_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            memset(&pin_code, 0x35, MFW_BT_PIN_MAX_LEN);
+            pin_mode = PIN_PROVIDED;
+            if(bt_start_pairing(hsg_address, pin_code, pin_mode) NEQ MFW_BT_EXECUTE)
+            {
+              TRACE_EVENT("mfw_bta:start pairing mode Failure");
+            }
+            else
+              TRACE_EVENT("start pairing ok");
+            break;
+          case 6: /* start bluetooth primitive SCM_DEVICE_PAIRED_RESULT */
+            bti_pairing_cnf();
+            break;
+          case 7:/* start bluetooth function scm_is_device_paired() */
+            memset(&hsg_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            if(bt_check_pair(hsg_address) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:check pairing Failure");
+            }
+            else
+              TRACE_EVENT("check pairing ok");
+            break;
+          case 8:/* start bluetooth function scm_get_next_paired_device() */
+            memset(&pairing_list, 0, sizeof(T_MFW_BT_DEV_PAIR_LIST));
+           if(bt_list_paired_dev(&pairing_list) NEQ MFW_BT_RET_OK)
+            {
+              TRACE_EVENT("mfw_bta:pairing list Failure");
+            }
+            else
+              TRACE_EVENT("pairing list ok");
+            break;
+          case 9:/* start bluetooth function scm_delete_paired_device() */
+            memset(&hsg_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            if(bt_delete_paired_device(hsg_address) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:delete paired device Failure");
+            }
+            else
+              TRACE_EVENT("delete paired devicet ok");
+            break;
+          case 10: /* start bluetooth primitive SCM_AUTHORIZATION_REQUEST for profile sync */
+            bti_send_sync_authorization_request();
+            break;
+          case 11: /* start bluetooth primitive SCM_AUTHORIZATION_REQUEST for profile hsg */
+            bti_send_hsg_authorization_request();
+            break;
+          case 12: /* start bluetooth primitive SCM_AUTHORIZATION_REQUEST for profile fsx */
+            bti_send_fax_authorization_request();
+            break;
+          case 13: /* start bluetooth primitive SCM_AUTHORIZATION_REQUEST for profile dun */
+            bti_send_dun_authorization_request();
+            break;
+          case 14: /* start bluetooth primitive SCM_AUTHORIZATION_REQUEST for profile opp */
+            bti_send_opp_authorization_request();
+            break;
+          case 15: /* start bluetooth function scm_authorization_reply() for sync */
+            auth_mode = MFW_BT_AUTHORIZED_ONCE;
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_SYNC_C;
+            if(bt_authorization_reply(remote_address, auth_mask, auth_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth reply sync Failure");
+            }
+            else
+              TRACE_EVENT("auth reply sync ok");
+            break;
+          case 16: /* start bluetooth function scm_authorization_reply() for hsg */
+            auth_mode = MFW_BT_AUTHORIZED_ONCE;
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_HSG;
+            if(bt_authorization_reply(remote_address, auth_mask, auth_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth reply hsg Failure");
+            }
+            else
+              TRACE_EVENT("auth reply hsg ok");
+            break;
+          case 17: /* start bluetooth function scm_authorization_reply() for dun */
+            auth_mode = MFW_BT_AUTHORIZED_ONCE;
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_DUN;
+            if(bt_authorization_reply(remote_address, auth_mask, auth_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth reply dun Failure");
+            }
+            else
+              TRACE_EVENT("auth reply dun ok");
+            break;
+          case 18: /* start bluetooth function scm_authorization_reply() for fax */
+            auth_mode = MFW_BT_AUTHORIZED_ONCE;
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_FAX;
+            if(bt_authorization_reply(remote_address, auth_mask, auth_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth reply fax Failure");
+            }
+            else
+              TRACE_EVENT("auth reply fax ok");
+            break;
+          case 19: /* start bluetooth function scm_authorization_reply() for opp */
+            auth_mode = MFW_BT_AUTHORIZED_ONCE;
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_OPP;
+            if(bt_authorization_reply(remote_address, auth_mask, auth_mode) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:auth reply opp Failure");
+            }
+            else
+              TRACE_EVENT("auth reply opp ok");
+            break;
+          case 20: /* start bluetooth function scm_get_device_authorization() */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            if(bt_get_authorization_device(remote_address, &auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:get device authorizations Failure");
+            }
+            else
+            {
+              TRACE_EVENT_P1("get authorizations:%x", auth_mask);
+            }
+            break;
+          case 21: /* start bluetooth function scm_set_device_authorization() for fax */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_FAX;
+            if(bt_set_authorization_device(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set device authorization Failure");
+            }
+            else
+              TRACE_EVENT("set authorization ok");
+            break;
+          case 22: /* start bluetooth function scm_set_device_authorization() for dun */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_DUN;
+            if(bt_set_authorization_device(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set device authorization Failure");
+            }
+            else
+              TRACE_EVENT("set authorization ok");
+            break;
+          case 23: /* start bluetooth function scm_set_device_authorization() for hsg */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_HSG;
+            if(bt_set_authorization_device(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set device authorization Failure");
+            }
+            else
+              TRACE_EVENT("set authorization ok");
+            break;
+          case 24: /* start bluetooth function scm_set_device_authorization() for opp */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_OPP;
+            if(bt_set_authorization_device(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set device authorization Failure");
+            }
+            else
+              TRACE_EVENT("set authorization ok");
+            break;
+          case 25: /* start bluetooth function scm_set_device_authorization() for sync */
+            memset(&remote_address, 0xcc, MFW_BT_ADDR_MAX_LEN);
+            auth_mask = MFW_SERVICE_SYNC_C;
+            if(bt_set_authorization_device(remote_address, auth_mask) NEQ MFW_BT_OK)
+            {
+              TRACE_EVENT("mfw_bta:set device authorization Failure");
+            }
+            else
+              TRACE_EVENT("set authorization ok");
+            break;
+        }
+        return TRUE;
+
+/* end for test bluetooth without BMI/MMI ******************************************/
+    }
+#endif
+
+  return FALSE;       /* not processed by extension */
+}
+