view src/aci2/mfw/mfw_bt.c @ 662:8cd8fd15a095

SIM speed enhancement re-enabled and made configurable TI's original code supported SIM speed enhancement, but Openmoko had it disabled, and OM's disabling of speed enhancement somehow caused certain SIM cards to start working which didn't work before (OM's bug #666). Because our FC community is much smaller in year 2020 than OM's community was in their day, we are not able to find one of those #666-affected SIMs, thus the real issue they had encountered remains elusive. Thus our solution is to re-enable SIM speed enhancement and simply wait for if and when someone runs into a #666-affected SIM once again. We provide a SIM_allow_speed_enhancement global variable that allows SIM speed enhancement to be enabled or disabled per session, and an /etc/SIM_spenh file in FFS that allows it to enabled or disabled on a non-volatile basis. SIM speed enhancement is now enabled by default.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 24 May 2020 05:02:28 +0000
parents 93999a60b835
children
line wrap: on
line source

/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8445)         $Workfile:: mfw_bt.c        $|
| $Author:: Rm                          $Revision::  1              $|
| CREATED: 03.01.01                     $Modtime:: 03.01.01 17:21   $|
| STATE  : code                                                      |
+--------------------------------------------------------------------+


   MODULE  : MFW_BT

   PURPOSE : This modul contains the functions for MFW-BT management.


*/
#define ENTITY_MFW

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"

#include "p_btp.h"
#include "Bti.h"
#include "bti_btp.h"
#include "bti_cb.h"

#include "mfw_mfw.h"
#include "mfw_bt.h"
#include "mfw_bta.h"
#include "mfw_acie.h"
#include "mfw_win.h"

/* static used structures/variables */
EXTERN MfwHdr * current_mfw_elem;

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_init            |
+--------------------------------------------------------------------+

  PURPOSE : initialize BT manager

*/
int bt_init (void)
{
  TRACE_FUNCTION("mfw_bt:bt_init()");
  /*
   * install prim handler (primitives directly to MFW)
   */
  pSlotBt = aci_create(bta_response_cb,NULL);
  /*
  * initialize internal lists for found services
  */
  found_headset.service = MFW_BT_HEADSET;
  found_headset.device_id = NULL;
  found_dial_up.service = MFW_BT_DIAL_UP;
  found_dial_up.device_id = NULL;
  found_fax.service = MFW_BT_FAX_GW;
  found_fax.device_id = NULL;
  found_opp.service = MFW_BT_OPP;
  found_opp.device_id = NULL;
  found_sync.service = MFW_BT_SYNC;
  found_sync.device_id = NULL;
  found_sync_cmd.service = MFW_BT_SYNC_CMD;
  found_sync_cmd.device_id = NULL;
  return TRUE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_exit            |
+--------------------------------------------------------------------+

  PURPOSE : finalize BT manager

*/
void bt_exit (void)
{
  TRACE_FUNCTION("bt_exit()");
  /*
   * remove prim handler
   */
  aci_delete(pSlotBt);
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_create          |
+--------------------------------------------------------------------+

  PURPOSE : create BT event handler and control block

*/
T_MFW_HND bt_create (MfwHnd hWin, MfwEvt event, MfwCb cbfunc)
{
  MfwHdr *hdr;
  T_MFW_BT *bt_para;
  MfwHdr *insert_status =0;

  TRACE_FUNCTION("bt_create()");

  hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr));
  bt_para = (T_MFW_BT *) mfwAlloc(sizeof(T_MFW_BT));

  if (!hdr || !bt_para)
  	{
    	TRACE_ERROR("ERROR: bt_create() Mem Alloc Failed.");
			
	   	if(hdr)
   			mfwFree((U8*)hdr,sizeof(MfwHdr));

   		if(bt_para)
   			mfwFree((U8*)bt_para,sizeof(T_MFW_BT));
   		
	   	return 0;
  	}

  bt_para->emask = event;
  bt_para->handler = cbfunc;            /* event callback function */

  hdr->data = bt_para;
  hdr->type = MfwTypBt;

  insert_status= mfwInsert((MfwHdr *) hWin,hdr); /* handle is brought in chain */
  if(!insert_status)
	{
  		TRACE_ERROR("ERROR: bt_create() Failed to Install Handler. ");
   		mfwFree((U8*)hdr,sizeof(MfwHdr));
   		mfwFree((U8*)bt_para,sizeof(T_MFW_BT));
		return 0;
  	}
    return insert_status;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_delete          |
+--------------------------------------------------------------------+

  PURPOSE : delete BT event handler and control block, free Memory

*/
MfwRes bt_delete (MfwHnd h)
{
  TRACE_FUNCTION("bt_delete()");

  if (!h || !((MfwHdr *) h)->data)
    return MfwResIllHnd;

  if (!mfwRemove((MfwHdr *) h))
  return MfwResIllHnd;

  mfwFree((U8 *) ((MfwHdr *) h)->data,sizeof(T_MFW_BT));
  mfwFree((U8 *) h,sizeof(MfwHdr));

  return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_signal          |
+--------------------------------------------------------------------+

  PURPOSE : Send a signal to MMI

*/
void bt_signal (MfwEvt event, void *para)
{	/*MC, SPR 1389, we have to enable the display whenever 
	we send an event up to the MMI*/
	UBYTE temp = dspl_Enable(0);

  	TRACE_FUNCTION ("bt_signal()");

	  if (mfwSignallingMethod EQ 0) /* default search method (old bmi design) */
	  {
	    if (mfwFocus)               /* look for element in focussed chain */
	      if (bt_sign_exec(mfwFocus,event,para))
	      { dspl_Enable(temp);/*MC, SPR 1389*/
	        return;
	      }
	    if (mfwRoot)                /* look for element in root */
	      bt_sign_exec(mfwRoot,event,para);
	  }
	  else /* new bmi design */
	  {
	    MfwHdr * h = 0;
	    /*
	     * Focus set, then start here
	     */
	    if (mfwFocus)
	      h = mfwFocus;
	      /*
	       * Focus not set, then start root
	       */
	    if (!h)
	      h = mfwRoot;
	    /*
	     * No elements available, return
	     */
	    while (h)
	    {
	      /*
	       * Signal consumed, then return
	       */
	      if (bt_sign_exec (h, event, para))
	      { dspl_Enable(temp);/*MC, SPR 1389*/
	        return;
	      }
	      /*
	       * All windows tried inclusive root
	       */
	      if (h == mfwRoot)
	      { dspl_Enable(temp);/*MC, SPR 1389*/
	        return;
	      }
	      /*
	       * get parent window
	       */
	      h = mfwParent(mfwParent(h));
	      if(h)
	        h = ((MfwWin * )(h->data))->elems;
	    }
	    bt_sign_exec (mfwRoot, event, para);
	  }
	  dspl_Enable(temp);/*MC, SPR 1389*/
	
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_sign_exec       |
+--------------------------------------------------------------------+

  PURPOSE : Send a signal if BT management handler

*/
int bt_sign_exec (MfwHdr *cur_elem, MfwEvt event, T_MFW_BT_PARA *para)
{
  T_MFW_BT_SERVICE_SEARCH_CNF * search_confirmation_ptr;
  T_MFW_BT_DEVICE_SEARCH_CNF * dev_search_conf_ptr;
  T_MFW_BT_DISCONNECT_CNF * discon_ptr;
  T_MFW_BT_DISCON_DUN_FAX_CNF * discon_dun_fax_ptr;
  T_MFW_BT_DISCON_DUN_FAX_IND * discon_dun_fax_ind_ptr;
  T_MFW_BT_DISCONNECT_IND * discon_i_ptr;
  T_MFW_BT_CONNECT_CNF * connect_ptr;
  T_MFW_BT_SRV_SYNC_CNF * srv_sync_complete;
  T_MFW_BT_SRV_SYNC_AUTH_IND * srv_sync_auth_ind;
  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;
  T_MFW_BT_BD_ADDR dummy_address[MFW_BT_ADDR_MAX_LEN];

  memset(&dummy_address,0,sizeof(dummy_address));

  TRACE_FUNCTION("bt_sign_exec()");

  while (cur_elem)
  {
    if (cur_elem->type EQ MfwTypBt)
    {
      T_MFW_BT *bt_data;
      bt_data = (T_MFW_BT *) cur_elem->data;
      if (bt_data->emask & event)
      {
        bt_data->event = event;
        switch (event)
        {

          case BT_CREATE_PROFILE_CNF:
            memcpy(&bt_data->para.prof_create_cnf, para,sizeof(T_MFW_BT_PROFILE_CREATE_CNF));
            break;

          case BT_DELETE_PROFILE_CNF:
            memcpy(&bt_data->para.prof_delete_cnf, para,sizeof(T_MFW_BT_PROFILE_DELETE_CNF));
            break;

          case BT_INIT_PROFILE_CNF:   /* confirms initialize/reconfiguration of service profile  */
            memcpy(&bt_data->para.profile,
                   para,sizeof(T_MFW_BT_PROFILE_CNF));
            /* service,result_bd,subtype(,mfw_opp_mode,mfw_sync_mode,mfw_syn_aut_mode) with event BT_INIT_PROFILE_CNF to MMI */
            break;

          case BT_DEINIT_PROFILE_CNF:/* confirms deinitialize profile  */
            memcpy(&bt_data->para.profile,
                   para,sizeof(T_MFW_BT_PROFILE_CNF));
            /* service,result_bd,subtype(,mfw_opp_mode,mfw_sync_mode,mfw_syn_aut_mode) with event BT_DEINIT_PROFILE_CNF to MMI */
            break;
        }

        switch (event)
        {
          case BT_RESTORE_LIST_RESULT:/* result restoring default service list  */
            memcpy(&bt_data->para.restore_conf,
                   para,sizeof(T_MFW_BT_REST_CONFIG));
            /* service and cause with event BT_RESTORE_LIST_RESULT to MMI */
            break;

          case BT_RESTORE_CONF_RESULT:/* result restoring configuration parameter  */
            memcpy(&bt_data->para.restore_conf,
                   para,sizeof(T_MFW_BT_REST_CONFIG));
            /* service and cause with event BT_RESTORE_CONF_RESULT to MMI */
            break;

          case BT_SERVICE_SEARCH_CNF:
            search_confirmation_ptr = (T_MFW_BT_SERVICE_SEARCH_CNF *)para;
            if(search_confirmation_ptr->service EQ MFW_BT_HEADSET)
            {
              /* pointer of list of detected hs to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_headset;
            }
            else if(search_confirmation_ptr->service EQ MFW_BT_DIAL_UP)
            {
              /* pointer of list of detected dial up  to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_dial_up;
            }
            else if(search_confirmation_ptr->service EQ MFW_BT_FAX_GW)
            {
              /* pointer of list of detected fax  to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_fax;
            }
            else if(search_confirmation_ptr->service EQ MFW_BT_OPP)
            {
              /* pointer of list of detected opp  to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_opp;
            }
            else if(search_confirmation_ptr->service EQ MFW_BT_SYNC)
            {
              /* pointer of list of detected sync  server  to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_sync;
            }
            else if(search_confirmation_ptr->service EQ MFW_BT_SYNC_CMD)
            {
              /* pointer of list of detected sync server with command support  to mmi */
              bt_data->para.service_lst_p.list_ptr = &found_sync_cmd;
            }
            break;

          case BT_DEVICE_SEARCH_CNF:
            dev_search_conf_ptr = (T_MFW_BT_DEVICE_SEARCH_CNF *)para;
            if(dev_search_conf_ptr->result EQ BTI_OK)
            {/* pointer of list of found services to mmi */
              bt_data->para.device_lst_p.list_ptr = &service_list;
            }
            break;

          case BT_DEVICE_FOUND_IND: /* new device was found */
            memcpy(&bt_data->para.device_ind, para, sizeof(T_MFW_BT_DEVICE_IND));
            break;

          case BT_SERVICE_FOUND_IND: /* new service was found */
            memcpy(&bt_data->para.service_ind, para, sizeof(T_MFW_BT_SERVICE_IND));
            break;

          case BT_CONNECT_DEVICE_CNF:
            connect_ptr = (T_MFW_BT_CONNECT_CNF *)para;
            if(connect_ptr->service EQ MFW_BT_HEADSET)
            {
              memcpy(&bt_data->para.connect_cnf,
                     para,sizeof(T_MFW_BT_CONNECT_CNF));
            }
            else
              return FALSE;
            break;

          case BT_SRV_SYNC_CNF:
            srv_sync_complete = (T_MFW_BT_SRV_SYNC_CNF *)para;
            if(srv_sync_complete->service EQ MFW_BT_SYNC)
            {
              memcpy(&bt_data->para.srv_sync_cnf,
                     para,sizeof(T_MFW_BT_SRV_SYNC_CNF));
            }
            else
              return FALSE;
            break;

          case BT_SRV_SYNC_AUTH_IND:
            srv_sync_auth_ind = (T_MFW_BT_SRV_SYNC_AUTH_IND *)para;
            if(srv_sync_auth_ind->service EQ MFW_BT_SYNC)
            {
              memcpy(&bt_data->para.srv_sync_auth,
                     para,sizeof(T_MFW_BT_SRV_SYNC_AUTH_IND));
            }
            else
              return FALSE;
            break;

          case BT_SRV_SYNC_PULL_IND:
            srv_sync_pull_ind = (T_MFW_BT_SRV_SYNC_PULL_IND *)para;
            if(srv_sync_pull_ind->service EQ MFW_BT_SYNC)
            {
              memcpy(&bt_data->para.sync_pull_ind,
                     para,sizeof(T_MFW_BT_SRV_SYNC_PULL_IND));
            }
            else
              return FALSE;
            break;

          case BT_SRV_SYNC_PUSH_IND:
            srv_sync_push_ind = (T_MFW_BT_SRV_SYNC_PUSH_IND *)para;
            if(srv_sync_push_ind->service EQ MFW_BT_SYNC)
            {
              memcpy(&bt_data->para.sync_push_ind,
                     para,sizeof(T_MFW_BT_SRV_SYNC_PUSH_IND));
            }
            else
              return FALSE;
            break;

          case BT_SRV_SYNC_PUSH_CNF:
            srv_sync_push_cnf = (T_MFW_BT_SRV_SYNC_PUSH_CNF *)para;
            if(srv_sync_push_cnf->service EQ MFW_BT_SYNC)
            {
              memcpy(&bt_data->para.sync_push_cnf,
                     para,sizeof(T_MFW_BT_SRV_SYNC_PUSH_CNF));
            }
            else
              return FALSE;
            break;
        }

        switch (event)
        {

          case BT_HSG_SPECIFIC_CMD_CFM:
            memcpy(&bt_data->para.hsg_specific_cmd_cfm, para,sizeof(T_MFW_BT_HSG_SPECIFIC_CMD_CFM));
            break;

          case BT_HSG_HEADSET_CONNECTION_IND:
            memcpy(&bt_data->para.hsg_headset_connection_ind, para,sizeof(T_MFW_BT_HSG_HEADSET_CONNECTION_IND));
            break;

          case BT_HSG_SAVE_LIST_CNF:
            memcpy(&bt_data->para.hsg_save_list_cnf, para,sizeof(T_MFW_BT_HSG_SAVE_LIST_CNF));
            break;
        }

        switch (event)
        {
          case BT_CONNECT_DEVICE_IND:
             memcpy(&bt_data->para.connect_indication,
                   para,sizeof(T_MFW_BT_CONNECT_IND));
            /* service with event BT_CONNECT_DEVICE_IND to MMI */
              break;

          case BT_CONNECT_DEVICE_INF:
             memcpy(&bt_data->para.connect_information,
                   para,sizeof(T_MFW_BT_CONNECT_INF));
            /* service with event BT_CONNECT_DEVICE_INF to MMI */
              break;


          case BT_DISCONNECT_DEVICE_CNF:
            discon_ptr = (T_MFW_BT_DISCONNECT_CNF *)para;
            if(discon_ptr->service EQ MFW_BT_HEADSET)
            {
              /* confirms disconnection */
              memcpy(&bt_data->para.disconnect_cnf,
                     para,sizeof(T_MFW_BT_DISCONNECT_CNF));
              /* service, addr with event BT_DISCONNECT_DEVICE_CNF to MMI */
              break;
            }
            else
              return FALSE;

          case BT_DISCON_DUN_FAX_CNF:
            discon_dun_fax_ptr = (T_MFW_BT_DISCON_DUN_FAX_CNF *)para;
            if((discon_dun_fax_ptr->service EQ MFW_BT_DIAL_UP) OR
               (discon_dun_fax_ptr->service EQ MFW_BT_FAX_GW))
            {
              /* confirms disconnection by remote dial up/fax */
              memcpy(&bt_data->para.disc_dun_fax_cnf,
                     para,sizeof(T_MFW_BT_DISCON_DUN_FAX_CNF));
              /* device, result with event BT_DISCON_DUN_FAX_CNF to MMI */
              break;
            }
            else
              return FALSE;

          case BT_DISCONNECT_DEVICE_IND:
            discon_i_ptr = (T_MFW_BT_DISCONNECT_IND *)para;
            if(discon_i_ptr->service EQ MFW_BT_HEADSET)
            {
              /* confirms indication */
              memcpy(&bt_data->para.disconnect_ind,
                     para,sizeof(T_MFW_BT_DISCONNECT_IND));
              /* service, addr, error_cause with event BT_DISCONNECT_DEVICE_IND to MMI */
              break;
            }
            else
              return FALSE;

          case BT_DISCON_DUN_FAX_IND:
            discon_dun_fax_ind_ptr = (T_MFW_BT_DISCON_DUN_FAX_IND *)para;
            if((discon_dun_fax_ind_ptr->service EQ MFW_BT_DIAL_UP) OR
              (discon_dun_fax_ind_ptr->service EQ MFW_BT_FAX_GW))
            {
              /* indicats disconnection by remote dial up */
              memcpy(&bt_data->para.con_dun_fax_ind,
                     para,sizeof(T_MFW_BT_DISCON_DUN_FAX_IND));
              /* device, result with event BT_DISCON_DUN_FAX_IND to MMI */
              break;
            }
            else
              return FALSE;
        }

        switch (event) /* BT CTRL */
        {
          case BT_CHNG_LOCAL_NAME:
            memcpy(&bt_data->para.chng_local_name, para, sizeof(T_MFW_BT_CHNG_LOCAL_NAME));
            break;

          case BT_READ_LOCAL_NAME:
            memcpy(&bt_data->para.read_local_name, para, sizeof(T_MFW_BT_READ_LOCAL_NAME));
            break;

          case BT_REMOTE_DEV_INFO_RES:
            memcpy(&bt_data->para.remote_dev_info, para, sizeof(T_MFW_BT_REMOTE_DEV_INFO_RES));
            break;

          case BT_CHNG_CONNECTABLE_MODE:
            memcpy(&bt_data->para.chng_conn_mode, para, sizeof(T_MFW_BT_CHNG_CONNECTABLE_MODE));
            break;

          case BT_CHNG_DISCOVERABLE_MODE:
            memcpy(&bt_data->para.chng_disc_mode, para, sizeof(T_MFW_BT_CHNG_DISCOVERABLE_MODE));
            break;

          case BT_READ_BD_ADDR:
            memcpy(&bt_data->para.read_bd_addr, para, sizeof(T_MFW_BT_READ_BD_ADDR));
            break;

          case BT_TRUSTED_DEV_LIST_FULL:
            break;

        }

        switch (event)
        {

          case BT_TRANSFER_AUDIO_IN_CNF:
            /* confirms transfer audio out */
            memcpy(&bt_data->para.audio_in_cnf,
                   para,sizeof(T_MFW_BT_TRANSFER_AUDIO_IN_CNF));
            /* service, addr with event BT_TRANSFER_AUDIO_IN_CNF to MMI */
            break;

          case BT_TRANSFER_AUDIO_OUT_CNF:
            /* confirms transfer audio in */
            memcpy(&bt_data->para.audio_out_cnf,
                   para,sizeof(T_MFW_BT_TRANSFER_AUDIO_OUT_CNF));
            /* service, addr with event BT_TRANSFER_AUDIO_OUT_CNF to MMI */
            break;

          case BT_AUTHORIZATION_IND:
            /* indicats remote device authorization request */
            memcpy(&bt_data->para.authoriz_ind,
                   para,sizeof(T_MFW_BT_AUTHORIZATION_IND));
            /* addr,remote name,service name, authorization_mask,connection_dir with event BT_AUTHORIZATION_IND to MMI */
            break;

          case BT_PIN_IND:
            /* indicats remote pin request */
            memcpy(&bt_data->para.pin_ind,
                   para,sizeof(T_MFW_BT_PIN_IND));
            /* addr,name with event BT_PIN_IND to MMI */
            break;

          case BT_RECONFIG_PROFILE_CNF:
            /* confirm reconfiguration profile  */
            memcpy(&bt_data->para.profile,
                   para,sizeof(T_MFW_BT_PROFILE_CNF));
            /* service, result_bd(,mfw_opp_mode,mfw_sync_mode,mfw_syn_aut_mode) with event BT_RECONFIG_PROFILE_CNF to MMI */
            break;

          case BT_DEVICE_PAIRED_IND:
            /* confirm pairing procedure  */
            memcpy(&bt_data->para.pair_ind,
                   para,sizeof(T_MFW_BT_DEV_PAIR_IND));
            /* remote addr, remote name and pair_res with event BT_DEVICE_PAIRED_IND to MMI */
            break;

          case BT_CALL_MONITORING_STATUS:
            /* indicats call monitoring events by dun/fax */
            memcpy(&bt_data->para.call_status,
                   para,sizeof(T_MFW_BT_CALL_STATUS_DUN_FAX));
            /* device and call status with event BT_CALL_MONITORING_STATUS to MMI */
            break;

          case BT_OPP_SERV_PUT_IND:
            /* indicats put request by opp server */
            memcpy(&bt_data->para.opp_s_obj,
                   para,sizeof(T_MFW_BT_OPP_PUT_IND));
            /* device,subtype,client_addr,object with event BT_OPP_SERV_PUT_IND to MMI */
            break;

          case BT_OPP_SERV_PUT_CNF:
            /* indicats put request by opp server (server side) */
            memcpy(&bt_data->para.opp_s_obj_cnf,
                   para,sizeof(T_MFW_BT_OPP_PUT_CNF));
            /* device,subtype,client_addr,object,error with event BT_OPP_SERV_PUT_CNF to MMI */
            break;

          case BT_OPP_OBJECT_PUSH_CNF:
            /* indicats push object to opp server (client side)*/
            memcpy(&bt_data->para.opp_cl_push_ob_cnf,
                   para,sizeof(T_MFW_BT_OPP_PUSH_CNF));
            /* device,subtype,server_addr,object,error with event BT_OPP_OBJECT_PUSH_CNF to MMI */
            break;

          case BT_OPP_OBJECT_PULL_CNF:
            /* indicats push object from opp server (client side)*/
            memcpy(&bt_data->para.opp_cl_pull_ob_cnf,
                   para,sizeof(T_MFW_BT_OPP_PULL_CNF));
            /* device,subtype,server_addr,object,error with event BT_OPP_OBJECT_PULL_CNF to MMI */
            break;
          }

/*#ifdef PCA_6350*/
        switch (event)
        {
          case BT_PCA_GW_STATUS_CFM:
            memcpy(&bt_data->para.pca_gw_status, para, sizeof(T_MFW_BT_PCA_GW_STATUS_CFM));
            break;
          case BT_PCA_GW_LINK_MONITORING:
            memcpy(&bt_data->para.pca_link_mon, para, sizeof(T_MFW_BT_PCA_GW_LINK_MONITORING));
            break;
          case BT_PCA_GW_CALL_MONITORING:
            memcpy(&bt_data->para.pca_call_mon, para, sizeof(T_MFW_BT_PCA_GW_CALL_MONITORING));
            break;
          case BT_PCA_GW_HANGUP_CFM:
            memcpy(&bt_data->para.pca_hangup, para, sizeof(T_MFW_BT_PCA_GW_HANGUP_CFM));
            break;
        }
/*#endif*/ /* PCA_6350 */
        if (bt_data->handler)
        {
          current_mfw_elem = cur_elem;
          /* to call back function in mmi  */
          if ((*(bt_data->handler))(bt_data->event,
              (void *) &bt_data->para))
          return TRUE;
        }
      }
    }/* next element for look for type of handle */
    cur_elem = cur_elem->next;
  }
  return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE : bt_init_profile_hsg_cl|
+--------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT headset profile in client mode

*/
T_MFW_BT_RESULT_BT bt_init_profile_hsg_cl (T_MFW_BT_SERVICE_TYPE service,
                                  T_MFW_BT_HSG_CLIENT_CONFIG mfw_config)
{
  T_BTI_HSG_CLIENT_CONF bt_config;

  TRACE_FUNCTION ("bt_init_profile_hsg_cl()");

  memset(&bt_config,0,sizeof(bt_config));

  if(service EQ MFW_BT_HEADSET)
  {
    /* type of connection:
    ***  MFW_BT_AUTO_OUTG_DEF_CONN_OFF or
         MFW_BT_AUTO_OUTG_DEF_CONN_ON
        (connection with default pre-defined headset as soon as it receives a
        RING command from GSM)
    ***
    */
    switch(mfw_config.config_mode)
    {
        case MFW_BT_AUTO_OUTG_DEF_CONN_OFF:
          bt_config.config_mode = BTI_AUTO_OUTG_DEF_CONN_OFF;
          break;
        case MFW_BT_AUTO_OUTG_DEF_CONN_ON:
          bt_config.config_mode = BTI_AUTO_OUTG_DEF_CONN_ON;
          break;
    }

    bt_config.security = mfw_config.security;

    switch(btibtp_init_profile_hsg_req_cl((T_BTI_DEVICE_TYPE)service,bt_config))
    {/* BTP_INIT_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_init_profile_hsg_serv|
+----------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT headset profile in server mode

*/
T_MFW_BT_RESULT_BT bt_init_profile_hsg_serv (T_MFW_BT_SERVICE_TYPE service,
                                  T_MFW_BT_HSG_SERVER_CONFIG mfw_config)
{
  T_BTI_HSG_SERVER_CONF bt_config;

  TRACE_FUNCTION ("bt_init_profile_hsg_serv()");

  memset(&bt_config,0,sizeof(bt_config));

  if(service EQ MFW_BT_HEADSET)
  {
    bt_config.conn_config = mfw_config.serv_con_conf;
    /* length scan of connection requests of remote headsets *
    /* default value: MFW_BT_CONN_SCAN_TIME_DEFAULT_VALUE */
    bt_config.conn_time = mfw_config.conn_time;
    /* period between 2 scans of connection of remote headsets */
    /* default value: MFW_BT_CONN_SCAN_BREAK_DEFAULT_VALUE */
    bt_config.conn_break= mfw_config.conn_break;
    /* number of phone number in phone list */
    bt_config.nb_phone = mfw_config.nb_phone;
    /* phone number list of remote headset */
    memcpy(bt_config.phon_list,mfw_config.mfw_phone_list,sizeof(mfw_config.mfw_phone_list));
    /* associatd key list of  remote headset */
    memcpy(bt_config.key_list,mfw_config.mfw_key_list,sizeof(mfw_config.mfw_key_list));

    bt_config.security = mfw_config.security;

    switch(btibtp_init_profile_hsg_req_serv((T_BTI_DEVICE_TYPE)service,bt_config))
    {/* BTP_INIT_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_init_profile_dun|
+--------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT dialup profile

*/
T_MFW_BT_RESULT_BT bt_init_profile_dun (T_MFW_BT_SERVICE_TYPE service,
                                     T_MFW_BT_DUN_CONFIG dun_filter)
{
  T_BTI_DUN_CONF dun_config;

  TRACE_FUNCTION ("bt_init_profile_dun()");

  memset(&dun_config,0,sizeof(dun_config));

  if(service EQ MFW_BT_DIAL_UP)
  {/* show status of BT link - informs if a serial port is opened between DUN-DT and DUN-GW */
    if((dun_filter.link_event EQ BTI_DUN_LINK_MONIT_ON) OR
       (dun_filter.link_event EQ BTI_DUN_LINK_MONIT_OFF))
    {
      dun_config.link_filter = dun_filter.link_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_init_profile_dun()");
        return MFW_BT_FAIL;
    }
    /* show status of data call */
    if((dun_filter.call_event EQ BTI_DUN_CALL_MONIT_ON) OR
       (dun_filter.call_event EQ BTI_DUN_CALL_MONIT_OFF))
    {
      dun_config.call_filter = dun_filter.call_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_init_profile_dun()");
        return MFW_BT_FAIL;
    }

    switch(btibtp_init_profile_dun_req((T_BTI_DEVICE_TYPE)service,dun_config))
    {/* BTP_INIT_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_init_profile_fax|
+--------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT fax gateway profile

*/
T_MFW_BT_RESULT_BT bt_init_profile_fax (T_MFW_BT_SERVICE_TYPE service,
                                     T_MFW_BT_FAX_CONFIG fax_filter)
{
  T_BTI_FAX_CONF fax_config;

  TRACE_FUNCTION ("bt_init_profile_fax()");

  memset(&fax_config,0,sizeof(fax_config));

  if(service EQ MFW_BT_FAX_GW)
  {/* show status of BT link - informs if a serial port is opened between FAX-DT and FAX-GW */
    if((fax_filter.link_event EQ BTI_FAX_LINK_MONIT_ON) OR
       (fax_filter.link_event EQ BTI_FAX_LINK_MONIT_OFF))
    {
      fax_config.link_filter = fax_filter.link_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_init_profile_fax()");
        return MFW_BT_FAIL;
    }
    /* show status of data call */
    if((fax_filter.call_event EQ BTI_FAX_CALL_MONIT_ON) OR
       (fax_filter.call_event EQ BTI_FAX_CALL_MONIT_OFF))
    {
      fax_config.call_filter = fax_filter.call_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_init_profile_fax()");
        return MFW_BT_FAIL;
    }

    switch(btibtp_init_profile_fax_req((T_BTI_DEVICE_TYPE)service,fax_config))
    {/* BTP_INIT_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_init_profile_opp|
+--------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT OPP client or server
*/
T_MFW_BT_RESULT_BT bt_init_profile_opp (T_MFW_BT_SERVICE_TYPE service,
                                        T_MFW_BT_SUBTYPE_DEV subtype,
                                        T_MFW_BT_OPP_SERVER_CONFIG serv_config)
{
  T_BTI_OPP_SERVER_CONFIG bt_opp_s_conf;

  TRACE_FUNCTION ("bt_init_profile_opp()");

  memset(&bt_opp_s_conf,0,sizeof(bt_opp_s_conf));

  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_CLIENT)
    {
      switch(btibtp_init_profile_opp_cl())
      {/* BTP_INIT_PROFILE_REQ to BT */
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else if(subtype EQ MFW_BT_SERVER)
    {
      /* mode of OPP server:
         MFW_BT_OPP_NO_MODE: no OPP server mode
         MFW_BT_OPP_SILENT_MODE: OPP server stores objects as files without alerting the user
         MFW_BT_OPP_FILE_MODE: OPP server stores objects as files with alerting user
         MFW_BT_OPP_BUFFER_MODE: OPP server asks for a buffer to store the each object
      */

      switch(serv_config.mfw_opp_mode)
      {
        case MFW_BT_OPP_NO_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_NO_OPP_MODE;
          break;
        case MFW_BT_OPP_BUFFER_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_EVENT_BUFFER_MODE;
          break;
        case MFW_BT_OPP_FILE_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_EVENT_FILE_MODE;
          break;
        case MFW_BT_OPP_SILENT_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_SILENT_FILE_MODE;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* this function change the parameter of the existing OPP server */
      /* initalizing of an OBEX server and service, registration in SDP and enabling of OPP server took place
      after switching power on */
      switch(serv_config.mfw_opp_object.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object is stored in buffer */
          bt_opp_s_conf.bt_object.bt_object_type = BTI_TYPE_BUFFER;
          bt_opp_s_conf.bt_object.bt_buffer_start = serv_config.mfw_opp_object.mfw_buffer_start;
          bt_opp_s_conf.bt_object.bt_buffer_size = serv_config.mfw_opp_object.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object is stored in file system */
          bt_opp_s_conf.bt_object.bt_object_type = BTI_TYPE_PATH;
          /* path of default_business_card of server */
          bt_opp_s_conf.bt_object.bt_path = serv_config.mfw_opp_object.mfw_path;
          /* path of inbox folder in file system of OPP server */
          bt_opp_s_conf.bt_inbox_path = serv_config.mfw_inbox_path;
          break;
        default:
          return MFW_BT_FAIL;

      }
      /* MIME type of object, null-terminated string */
      bt_opp_s_conf.bt_object.bt_object_mime_type = serv_config.mfw_opp_object.mfw_object_mime_type;
      /* name of default_business_card of server */
      bt_opp_s_conf.bt_object.bt_object_name = serv_config.mfw_opp_object.mfw_object_name;
      /* length of default_business_card of server */
      bt_opp_s_conf.bt_object.bt_object_length = serv_config.mfw_opp_object.mfw_object_length;

      switch(btibtp_init_profile_opp_s(bt_opp_s_conf))
      {/* BTP_INIT_PROFILE_REQ to BT */
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_init_profile_syn_s   |
+----------------------------------------------------------------------+

  PURPOSE : configure and initialize a BT SYNC profile in server mode

*/
T_MFW_BT_RESULT_BT bt_init_profile_syn_s (T_MFW_BT_SERVICE_TYPE service,
                                          T_MFW_BT_SUBTYPE_DEV subtype,
                                  T_MFW_BT_SYN_OBJECT_STORE_LIST list_availabe_objects,
                                  T_MFW_BT_SYNC_SERVER_CONFIG mfw_config)
{
  T_BTI_SYNC_SERVER_CONFIG bt_config;
  T_BTI_SYN_OBJECT_STORE_LIST bt_list_sync_objects;
  TRACE_FUNCTION ("bt_init_profile_syn_s()");

  memset(&bt_config,0,sizeof(bt_config));
  bt_list_sync_objects = (T_BTI_SYN_OBJECT_STORE_LIST)list_availabe_objects;

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      switch(mfw_config.mfw_syn_srv_mode)
      {
        case MFW_BT_SYNC_GEN_MODE:
          /* general SYNC server mode, for devices
          which are made discoverable continuously or for no
          specific conditions, the server is in connectable mode; the Sync
          client connects the server and starts the synchronization */
          bt_config.bt_sync_srv_mode = mfw_config.mfw_syn_srv_mode;
          break;
        case MFW_BT_SYNC_INIT_MODE:
          /* limited inquiry scan for devices which
          are made discoverable only for a limited period of time or
          for specific conditions; the server is in connectable and pairable mode */
          bt_config.bt_sync_srv_mode = mfw_config.mfw_syn_srv_mode;
          break;
        default:
          return MFW_BT_FAIL;
      }
      switch(mfw_config.mfw_syn_srv_auth_mode)
      {
        case MFW_BT_SYNC_INIT_AUTH_MODE:
          /* server initiates authentication */
          bt_config.bt_sync_aut_mode = mfw_config.mfw_syn_srv_auth_mode;
          break;
        case MFW_BT_SYNC_NO_INIT_AUTH_MODE:
          /* server does not initiate authentication*/
          bt_config.bt_sync_aut_mode = mfw_config.mfw_syn_srv_auth_mode;
          break;
        default:
          return MFW_BT_FAIL;
      }

      switch(btibtp_init_profile_sync_req_serv(bt_list_sync_objects,bt_config))
      { /* BTP_INIT_PROFILE_REQ to BT */
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)      MODULE  : MFW_BT               |
| STATE   : code                      ROUTINE : bt_reconf_profile_opp|
+--------------------------------------------------------------------+

  PURPOSE : reconfigure a BT OPP in server mode
*/
T_MFW_BT_RESULT_BT bt_reconf_profile_opp (T_MFW_BT_SERVICE_TYPE service,
                                        T_MFW_BT_SUBTYPE_DEV subtype,
                                        T_MFW_BT_OPP_SERVER_CONFIG serv_config)
{
  T_BTI_OPP_SERVER_CONFIG bt_opp_s_conf;

  TRACE_FUNCTION ("bt_init_profile_opp()");

  memset(&bt_opp_s_conf,0,sizeof(bt_opp_s_conf));
  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      /* mode of OPP server:
         MFW_BT_OPP_NO_MODE: no OPP server mode
         MFW_BT_OPP_SILENT_MODE: OPP server stores objects as fileswithout alerting the user
         MFW_BT_OPP_FILE_MODE: OPP server stores objects as fileswith alerting user
         MFW_BT_OPP_BUFFER_MODE: OPP server asks for a buffer to store the each object
      */
      switch(serv_config.mfw_opp_mode)
      {
        case MFW_BT_OPP_NO_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_NO_OPP_MODE;
          break;
        case MFW_BT_OPP_BUFFER_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_EVENT_BUFFER_MODE;
          break;
        case MFW_BT_OPP_FILE_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_EVENT_FILE_MODE;
          break;
        case MFW_BT_OPP_SILENT_MODE:
          bt_opp_s_conf.bt_opp_mode = BTI_OPP_SILENT_FILE_MODE;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* this function change the parameter of the existing OPP server */
      switch(serv_config.mfw_opp_object.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object is stored in buffer */
          bt_opp_s_conf.bt_object.bt_object_type = BTI_TYPE_BUFFER;
          bt_opp_s_conf.bt_object.bt_buffer_start = serv_config.mfw_opp_object.mfw_buffer_start;
          bt_opp_s_conf.bt_object.bt_buffer_size = serv_config.mfw_opp_object.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object is stored in file system */
          bt_opp_s_conf.bt_object.bt_object_type = BTI_TYPE_PATH;
          /* path of default_business_card of server */
          bt_opp_s_conf.bt_object.bt_path = serv_config.mfw_opp_object.mfw_path;
          /* path of inbox folder in file system of OPP server */
          bt_opp_s_conf.bt_inbox_path = serv_config.mfw_inbox_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object, null-terminated string */
      bt_opp_s_conf.bt_object.bt_object_mime_type = serv_config.mfw_opp_object.mfw_object_mime_type;
      /* name of default_business_card of server */
      bt_opp_s_conf.bt_object.bt_object_name = serv_config.mfw_opp_object.mfw_object_name;
      /* length of default_business_card of server */
      bt_opp_s_conf.bt_object.bt_object_length = serv_config.mfw_opp_object.mfw_object_length;

      switch(btibtp_reconf_profile_opp_s(bt_opp_s_conf))
      {/* BTP_RECONFIG_PROFILE_REQ to BT */
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_reconf_profile_syn_s   |
+----------------------------------------------------------------------+

  PURPOSE : reconfigure a BT SYNC profile in server mode

*/
T_MFW_BT_RESULT_BT bt_reconf_profile_syn_s (T_MFW_BT_SERVICE_TYPE service,
                                          T_MFW_BT_SUBTYPE_DEV subtype,
                                  T_MFW_BT_SYN_OBJECT_STORE_LIST list_availabe_objects,
                                  T_MFW_BT_SYNC_SERVER_CONFIG mfw_config)
{
  T_BTI_SYNC_SERVER_CONFIG bt_config;
  T_BTI_SYN_OBJECT_STORE_LIST bt_list_sync_objects;
  TRACE_FUNCTION ("bt_reconf_profile_syn_s()");

  memset(&bt_config,0,sizeof(bt_config));
  bt_list_sync_objects = (T_BTI_SYN_OBJECT_STORE_LIST)list_availabe_objects;

  if(service EQ MFW_BT_SYNC)
  {
    switch(mfw_config.mfw_syn_srv_mode)
    {
      case MFW_BT_SYNC_GEN_MODE:
        /* general SYNC server mode, for devices
        which are made discoverable continuously or for no
        specific conditions */
        bt_config.bt_sync_srv_mode = mfw_config.mfw_syn_srv_mode;
        break;
      case MFW_BT_SYNC_INIT_MODE:
        /* limited inquiry scan for devices which
        are made discoverable only for a limited period of time or
        for specific conditions */
        bt_config.bt_sync_srv_mode = mfw_config.mfw_syn_srv_mode;
        break;
      default:
        return MFW_BT_FAIL;
    }
    switch(mfw_config.mfw_syn_srv_auth_mode)
    {
      case MFW_BT_SYNC_INIT_AUTH_MODE:
        /* server initiates authentication */
        bt_config.bt_sync_aut_mode = mfw_config.mfw_syn_srv_auth_mode;
        break;
      case MFW_BT_SYNC_NO_INIT_AUTH_MODE:
        /* server does not initiate authentication*/
        bt_config.bt_sync_aut_mode = mfw_config.mfw_syn_srv_auth_mode;
        break;
      default:
        return MFW_BT_FAIL;
    }

    switch(btibtp_reconf_profile_sync_req_serv(bt_list_sync_objects,bt_config))
    { /* BTP_RECONFIG_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE : bt_deinit_profile  |
+--------------------------------------------------------------------+

  PURPOSE : deinitialize a BT profile, not stop of profile application

*/
T_MFW_BT_RESULT_BT bt_deinit_profile (T_MFW_BT_SERVICE_TYPE service,T_MFW_BT_SUBTYPE_DEV subtype)
{
  TRACE_FUNCTION ("bt_deinit_profile()");

  if((service EQ MFW_BT_HEADSET) OR
     (service EQ MFW_BT_DIAL_UP) OR
     (service EQ MFW_BT_FAX_GW)  OR
     (service EQ MFW_BT_OPP)  OR
     (service EQ MFW_BT_SYNC))
  {
    if((subtype EQ MFW_BT_CLIENT) OR
       (subtype EQ MFW_BT_SERVER) OR
       (subtype EQ MFW_BT_NO_SUBTYPE))
    {
      switch(btibtp_deinit_profile_req((T_BTI_DEVICE_TYPE)service,(T_BTI_DEVICE_SUBTYP)subtype))
      { /* BTP_DEINIT_PROFILE_REQ to BT */
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
  }
  return MFW_BT_FAIL;
}

/*
+-----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)    MODULE  : MFW_BT                    |
| STATE   : code                    ROUTINE : bt_reconfig_profile_hsg_cl|
+-----------------------------------------------------------------------+

  PURPOSE : reconfigure a BT profile headset in client mode

*/
T_MFW_BT_RESULT_BT bt_reconfig_profile_hsg_cl (T_MFW_BT_SERVICE_TYPE service,
                                     T_MFW_BT_HSG_CLIENT_CONFIG config)
{
  T_BTI_HSG_CLIENT_CONF bt_config;

  TRACE_FUNCTION ("bt_reconfig_profile_hsg_cl()");

  memset(&bt_config,0,sizeof(bt_config));

  if(service EQ MFW_BT_HEADSET)
  {/* reconfiguration is only accepted when no outgoing call is in processing */
    switch(config.config_mode)
    {
      case MFW_BT_AUTO_OUTG_DEF_CONN_OFF:
        bt_config.config_mode = BTI_AUTO_OUTG_DEF_CONN_OFF;
        break;
      case MFW_BT_AUTO_OUTG_DEF_CONN_ON:
        bt_config.config_mode = BTI_AUTO_OUTG_DEF_CONN_ON;
        break;
    }

    bt_config.security = config.security;

    switch(btibtp_reconfig_profile_req_cl((T_BTI_DEVICE_TYPE)service,bt_config))
    { /* BTP_RECONF_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                      |
| STATE   : code                     ROUTINE : bt_reconfig_profile_hsg_serv|
+--------------------------------------------------------------------------+

  PURPOSE : reconfigure a BT headset profile in server mode

*/
T_MFW_BT_RESULT_BT bt_reconfig_profile_hsg_serv (T_MFW_BT_SERVICE_TYPE service,
                                  T_MFW_BT_HSG_SERVER_CONFIG mfw_config)
{
  T_BTI_HSG_SERVER_CONF bt_config;

  TRACE_FUNCTION ("bt_reconfig_profile_hsg_serv()");

  memset(&bt_config,0,sizeof(bt_config));

  if(service EQ MFW_BT_HEADSET)
  {
    bt_config.conn_config = mfw_config.serv_con_conf;
    /* length scan of connection requests of remote headsets *
    /* default value: MFW_BT_CONN_SCAN_TIME_DEFAULT_VALUE */
    bt_config.conn_time = mfw_config.conn_time;
    /* period between 2 scans of connection of remote headsets */
    /* default value: MFW_BT_CONN_SCAN_BREAK_DEFAULT_VALUE */
    bt_config.conn_break= mfw_config.conn_break;
    /* number of phone number in phone list */
    bt_config.nb_phone = mfw_config.nb_phone;
    /* phone number list of remote headset */
    memcpy(bt_config.phon_list,mfw_config.mfw_phone_list,sizeof(mfw_config.mfw_phone_list));
    /* associatd key list of  remote headset */
    memcpy(bt_config.key_list,mfw_config.mfw_key_list,sizeof(mfw_config.mfw_key_list));

    bt_config.security = mfw_config.security;

    switch(btibtp_reconfig_profile_req_serv((T_BTI_DEVICE_TYPE)service,bt_config))
    {/* BTP_INIT_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)    MODULE  : MFW_BT                 |
| STATE   : code                    ROUTINE : bt_reconfig_profile_dun|
+--------------------------------------------------------------------+

  PURPOSE : reconfigure a BT profile

*/
T_MFW_BT_RESULT_BT bt_reconfig_profile_dun (T_MFW_BT_SERVICE_TYPE service,
                                     T_MFW_BT_DUN_CONFIG dun_filter)
{
  T_BTI_DUN_CONF dun_config;

  TRACE_FUNCTION ("bt_reconfig_profile_dun()");

  memset(&dun_config,0,sizeof(dun_config));

  if(service EQ MFW_BT_DIAL_UP )
  {/* show status of BT link - informs if a serial port is opened between DUN-DT and DUN-GW */
    if((dun_filter.link_event EQ BTI_DUN_LINK_MONIT_ON) OR
       (dun_filter.link_event EQ BTI_DUN_LINK_MONIT_OFF))
    {
      dun_config.link_filter = dun_filter.link_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_reconfig_profile_dun()");
        return MFW_BT_FAIL;
    }
    /* show status of data call */
    if((dun_filter.call_event EQ BTI_DUN_CALL_MONIT_ON) OR
       (dun_filter.call_event EQ BTI_DUN_CALL_MONIT_OFF))
    {
      dun_config.call_filter = dun_filter.call_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_reconfig_profile_dun()");
        return MFW_BT_FAIL;
    }

    switch(btibtp_reconf_profile_dun_req((T_BTI_DEVICE_TYPE)service,dun_config))
    { /* BTP_RECONF_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)    MODULE  : MFW_BT                 |
| STATE   : code                    ROUTINE : bt_reconfig_profile_fax|
+--------------------------------------------------------------------+

  PURPOSE : reconfigure a BT profile

*/
T_MFW_BT_RESULT_BT bt_reconfig_profile_fax (T_MFW_BT_SERVICE_TYPE service,
                                     T_MFW_BT_FAX_CONFIG fax_filter)
{
  T_BTI_FAX_CONF fax_config;

  TRACE_FUNCTION ("bt_reconfig_profile_fax()");

  memset(&fax_config,0,sizeof(fax_config));

  if(service EQ MFW_BT_FAX_GW )
  {/* show status of BT link - informs if a serial port is opened between FAX-DT and FAX-GW */
    if((fax_filter.link_event EQ BTI_FAX_LINK_MONIT_ON) OR
       (fax_filter.link_event EQ BTI_FAX_LINK_MONIT_OFF))
    {
      fax_config.link_filter = fax_filter.link_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_reconfig_profile_fax()");
        return MFW_BT_FAIL;
    }
    /* show status of data call */
    if((fax_filter.call_event EQ BTI_FAX_CALL_MONIT_ON) OR
       (fax_filter.call_event EQ BTI_FAX_CALL_MONIT_OFF))
    {
      fax_config.call_filter = fax_filter.call_event;
    }
    else
    {
        TRACE_EVENT ("Error:bt_reconfig_profile_fax()");
        return MFW_BT_FAIL;
    }

    switch(btibtp_reconf_profile_fax_req((T_BTI_DEVICE_TYPE)service,fax_config))
    { /* BTP_RECONF_PROFILE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_service_search|
+--------------------------------------------------------------------+

  PURPOSE : request search of services and their service names

*/
T_MFW_BT_RESULT_BT  bt_service_search(T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_service_search()");

  if((service EQ MFW_BT_HEADSET) OR
     (service EQ MFW_BT_DIAL_UP) OR
     (service EQ MFW_BT_FAX_GW) OR
     (service EQ MFW_BT_OPP) OR
     (service EQ MFW_BT_SYNC_CMD))
  {/* start browsing procedure */
    switch(btibtp_service_search_req((T_BTI_DEVICE_TYPE)service, SERVICE_SEARCH))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_device_search |
+--------------------------------------------------------------------+

  PURPOSE : request search of devices and their service id's

*/
T_MFW_BT_RESULT_BT  bt_device_search(void)
{

  TRACE_FUNCTION ("bt_device_search()");

  /* start browsing procedure */
  switch(btibtp_device_search_req(DEVICE_SEARCH))
  {
    case BTP_OK:
      return MFW_BT_EXECUTE;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_extended_search |
+--------------------------------------------------------------------+

  PURPOSE : request search of devices and their service id's

*/
T_MFW_BT_RESULT_BT  bt_extended_search(UINT8 inq_length,
                     UINT8                  max_num_of_responses,
                     T_MFW_DEVICE_CLASS     class_of_device[],
                     BOOLEAN                need_device_name,
                     BOOLEAN                need_services,
                     T_MFW_SERVICE_ID       service_id)
{

  TRACE_FUNCTION ("bt_extended_search()");

  /* start browsing procedure */
  switch(btibtp_extended_search_req(inq_length, max_num_of_responses,
                                    class_of_device, need_device_name,
                                    need_services, service_id))
  {
    case BTP_OK:
      return MFW_BT_EXECUTE;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_search_abort  |
+--------------------------------------------------------------------+

  PURPOSE : start abort of browsing procedure

*/
T_MFW_BT_RESULT_BT bt_search_abort(void)
{
  TRACE_FUNCTION ("bt_search_abort()");

  switch(btibtp_search_abort())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE : bt_connect_hsg        |
+--------------------------------------------------------------------+

  PURPOSE : request connection with the service headset

*/
T_MFW_BT_RESULT_BT  bt_connect_hsg (T_MFW_BT_SERVICE_TYPE service,
                                    T_MFW_BT_REQ_ID req_id,
                                    T_MFW_BT_BD_ADDR bd_addr[], UINT8 mode)
{
  TRACE_FUNCTION ("bt_connect_hsg()");

  /*
  *** if req_id equal MFW_BT_DEFAULT_HEADSET_ID: headset gateway will
                      automatically select a headset from the default headset list
      if req_id equal MFW_BT_INVALID_HEADSET_ID: headset gateway will try to
                      connect to the headset whose BT headset address is in bd_addr
      otherwise headset gateway will call the headset related to headset_id
                      in the default headset list
  ***
  */
   /* BTP_CONNECT_DEVICE_REQ to BT */
  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_connect_hsg_req(req_id, bd_addr, mode))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT            |
| STATE   : code                         ROUTINE :bt_get_auto_connect|
+--------------------------------------------------------------------+

  PURPOSE : get state automatic connection on/off for headset gateway
*/

T_MFW_BT_RESULT_BT bt_get_auto_connect(T_MFW_BT_SERVICE_TYPE service,
                                    T_MFW_BT_HSG_CLIENT_CONFIG *conf)
{
  T_MFW_BT_HSG_CLIENT_CONFIG client_conf;
  T_MFW_BT_HSG_SERVER_CONFIG server_conf;
  T_MFW_BT_RESULT_BT result;

  TRACE_FUNCTION ("bt_get_auto_connect()");

  memset(&client_conf,0,sizeof(client_conf));
  memset(&server_conf,0,sizeof(server_conf));

  result = bt_get_config((T_BTI_DEVICE_TYPE)service,&client_conf,&server_conf);

  if(result EQ MFW_BT_OK)
  {
    conf->config_mode = (T_MFW_BT_CONFIG_MODE)client_conf.config_mode;
  }
  return result;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)            MODULE  : MFW_BT         |
| STATE   : code                            ROUTINE :bt_auto_connect |
+--------------------------------------------------------------------+

  PURPOSE : set feature automatic connection on/off for headset gateway
*/

T_MFW_BT_RESULT_BT bt_auto_connect(T_MFW_BT_SERVICE_TYPE service,
                                T_MFW_BT_AUTO_CONNECT_STATE set_state)
{
  T_MFW_BT_HSG_CLIENT_CONFIG client_conf;
  T_MFW_BT_HSG_SERVER_CONFIG server_conf;
  T_MFW_BT_RESULT_BT result;

  TRACE_FUNCTION ("bt_auto_connect()");

  memset(&client_conf,0,sizeof(client_conf));
  memset(&server_conf,0,sizeof(server_conf));

  if(set_state EQ MFW_BT_AUTO_CONNECT_ON OR
     set_state EQ MFW_BT_AUTO_CONNECT_OFF)
  {/* read state of config_mode */
    result = bt_get_config((T_BTI_DEVICE_TYPE)service,&client_conf,&server_conf);
    if(result NEQ MFW_BT_OK)
    {
      return result;
    }
    else
    {
      if(set_state EQ MFW_BT_AUTO_CONNECT_ON)
      {
        if(client_conf.config_mode NEQ MFW_BT_AUTO_OUTG_DEF_CONN_ON)
        {/*  connection with default pre-defined headset as soon as it receives a
             RING command from GSM)*/
          client_conf.config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_ON;
          return (bt_reconfig_profile_hsg_cl(service,client_conf));
        }
      }
      else
      {
        if(client_conf.config_mode EQ MFW_BT_AUTO_OUTG_DEF_CONN_ON)
        {
          client_conf.config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_OFF;
          return (bt_reconfig_profile_hsg_cl(service,client_conf));
        }
      }
    }
  }
  else
    return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT            |
| STATE   : code                        ROUTINE :bt_set_pref_headset |
+--------------------------------------------------------------------+

  PURPOSE : add preferred headset in default headset list
*/

T_MFW_BT_RESULT_BT bt_set_pref_headset(T_MFW_BT_SERVICE_TYPE service,
                                       T_MFW_BT_BD_ADDR bd_addr[],
                                       T_MFW_BT_HSG_NAME hsg_name[],
                                       T_MFW_BT_PRIORITY priority,
                                       BOOL rem_audio_ctr_supp_hsg,
                                       T_MFW_BT_CNF_ID * headset_cnf_id)
{
  T_MFW_BT_CNF_ID cnf_id = 0;

  TRACE_FUNCTION ("bt_set_pref_service()");

  if(service EQ MFW_BT_HEADSET)
  {
    if(priority <= MFW_HSG_HEADSET_MAX_PRIORITY)
    {
      switch(btibtp_set_default_headset(bd_addr,hsg_name,priority,rem_audio_ctr_supp_hsg,&cnf_id))
      /* add headset in default headset list */
      {
        case BTP_OK:
          *headset_cnf_id = cnf_id;
          return MFW_BT_OK;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_HSG_ALREADY_STOR:
          return MFW_BT_HSG_ALREADY_STORED;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_INVALID_PARA;
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT            |
| STATE   : code                         ROUTINE :bt_is_pref_headset |
+--------------------------------------------------------------------+

  PURPOSE : check if preferred headset is in default headset list
*/

T_MFW_BT_RESULT_BT bt_is_pref_headset(T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_BD_ADDR bd_addr[],
                                      T_MFW_BT_CNF_ID * headset_cnf_id)
{
  T_MFW_BT_CNF_ID cnf_id = 0;

  TRACE_FUNCTION ("bt_is_pref_headset()");

  if(service EQ MFW_BT_HEADSET)
  {
      switch(btibtp_query_default_headset(bd_addr,&cnf_id))
      /* add headset in default headset list */
      {
        case BTP_OK:
          *headset_cnf_id = cnf_id;
          return MFW_BT_OK;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_HSG_ALREADY_STOR:
          return MFW_BT_HSG_ALREADY_STORED;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
  }
  else
    return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE :bt_reset_pref_hsg |
+--------------------------------------------------------------------+

  PURPOSE : delete current entry of a preferred headset
*/

T_MFW_BT_RESULT_BT  bt_reset_pref_hsg(T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_DEV_ID dev_id)
{
  TRACE_FUNCTION ("bt_reset_pref_hsg()");
  if(service EQ MFW_BT_HEADSET)
  {
    /* parameter: dev_id equal headset_id in default headset list */
    switch(btibtp_delete_default_headset(dev_id))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)       MODULE  : MFW_BT              |
| STATE   : code                       ROUTINE :bt_disconnect_service|
+--------------------------------------------------------------------+

  PURPOSE : request disconnect of service

*/
T_MFW_BT_RESULT_BT bt_disconnect_service (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_disconnect_service()");

  if((service EQ MFW_BT_HEADSET) OR
     (service EQ MFW_BT_DIAL_UP) OR
     (service EQ MFW_BT_FAX_GW))
  {
    switch(btibtp_disconnect_service_req((T_BTI_DEVICE_TYPE)service))
    { /* BTP_DISCONNECT_DEVICE_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)                MODULE  : MFW_BT     |
| STATE   : code                                ROUTINE :bt_send_pin |
+--------------------------------------------------------------------+

  PURPOSE : send the pin requesting by bt (for authorization)

*/
T_MFW_BT_RESULT_BT bt_send_pin (T_MFW_BT_BD_ADDR bd_addr[],
                             T_MFW_BT_PIN pin_code[],
                             T_MFW_BT_PIN_MODE pin_mode)
{
  UBYTE user_pin_code_length=4;

  TRACE_FUNCTION ("bt_send_pin()");

  if(pin_mode EQ PIN_PROVIDED)
  {     /* BTP_PIN_RES to BT */
    user_pin_code_length = strlen((const char *)pin_code);

    switch(btibtp_pin_res(user_pin_code_length, pin_code, bd_addr))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
  {/* if device isn't able to provide a PIN code */
    /* BTP_PIN_RES to BT */
    switch(btibtp_pin_res(0,0,bd_addr))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_authorization_reply |
+--------------------------------------------------------------------+

  PURPOSE : reply the authorization requesting by bt

*/
T_MFW_BT_RESULT_BT bt_authorization_reply (T_MFW_BT_BD_ADDR bd_addr[],
                                           T_MFW_BT_AUTHORIZATION_MASK mfw_auth_mask,
                                           T_MFW_BT_AUTHORIZATION_MODE auth_mode)
{
  T_BTI_AUTHORIZATION_MASK author_mask = 0;
  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];
  U8 len;

  TRACE_FUNCTION ("bt_authorization_reply()");

  memset(service_name,0,BTI_APPLI_NAME_LENGTH);
  /*
  *** MFW_BT_AUTHORIZED_ONCE : remote device is granted access to the service once time
      MFW_BT_AUTHORIZED_ALWAYS:remote device is granted access to the service always
      MFW_BT_UNAUTHORIZED: local device does not give access to the service
  ***
  */
  if((auth_mode EQ MFW_BT_AUTHORIZED_ONCE) OR
     (auth_mode EQ MFW_BT_AUTHORIZED_ALWAYS) OR
     (auth_mode EQ MFW_BT_UNAUTHORIZED))
  {
    switch(mfw_auth_mask)
    {/* mask refer to the service (mask about BT_AUTHORIZATION_IND in MMI) */
      case MFW_SERVICE_HSG:
        memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
        len = sizeof(MFW_BT_SERV_HSG);
        break;
      case MFW_SERVICE_DUN:
        memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
        len = sizeof(MFW_BT_SERV_DUN);
        break;
      case MFW_SERVICE_FAX:
        memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
        len = sizeof(MFW_BT_SERV_FAX);
        break;
      case MFW_SERVICE_OPP:
        memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
        len = sizeof(MFW_BT_SERV_OPP);
        break;
      case MFW_SERVICE_SYNC_C:
        memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
        len = sizeof(MFW_BT_SERV_SYNC_C);
        break;
      default:
        return MFW_BT_NOK;
    }
    /* because authorization mask is SCM-depend MFW requests specify mask */
    if(btibtp_get_authorization_mask(service_name,len,&author_mask) NEQ BTP_OK)
    {
      TRACE_EVENT ("Error:bt_authorization_reply()");
      return MFW_BT_NOK;
    }
    else
    {
      switch(btibtp_authorization_reply(bd_addr,author_mask,auth_mode))
      {
        case BTP_OK:
          return MFW_BT_OK;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE  : MFW_BT                    |
| STATE   : code                 ROUTINE :bt_get_authorization_device|
+--------------------------------------------------------------------+

  PURPOSE:get authorizations to access available services on local device
*/
T_MFW_BT_RESULT_BT bt_get_authorization_device (T_MFW_BT_BD_ADDR bd_addr[],
                                            T_MFW_BT_AUTHORIZATION_MASK * mask)
{
  T_BTI_AUTHORIZATION_MASK author_mask,mask_hsg,mask_dun,mask_fax,mask_sync_cmd,mask_opp,auth_mask;

  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];

  TRACE_FUNCTION ("bt_get_authorization_device()");

  memset(service_name,0,BTI_APPLI_NAME_LENGTH);
  author_mask = mask_hsg = mask_dun = mask_fax = mask_sync_cmd = mask_opp = auth_mask =0;

  switch(btibtp_get_authorization(bd_addr,&auth_mask))
  {/* auth_mask contains bits for several services, bits are SCM dependent */
    case BTP_OK:
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }

  memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
  switch(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_DUN),&author_mask))
  {/* get mask for service dial-up */
    case BTP_OK:
      mask_dun =  author_mask;
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
  memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
  switch(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_HSG),&author_mask))
  {/* get mask for service headset gateway */
    case BTP_OK:
      mask_hsg =  author_mask;
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
  memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
  switch(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_FAX),&author_mask))
  {/* get mask for service fax gateway */
    case BTP_OK:
      mask_fax =  author_mask;
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }

  memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
  switch(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_OPP),&author_mask))
  {/* get mask for service opp object push profile */
    case BTP_OK:
      mask_opp =  author_mask;
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }

  memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
  switch(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_SYNC_C),&author_mask))
  {/* get mask for service SYNC server with SYNC command support */
    case BTP_OK:
      mask_sync_cmd =  author_mask;
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
  *mask = 0;
  /* assemble mask for MMI */
  if((auth_mask & mask_hsg) EQ mask_hsg)
  {
    *mask = *mask | MFW_SERVICE_HSG;
  }
  if((auth_mask & mask_dun) EQ mask_dun)
  {
    *mask = *mask | MFW_SERVICE_DUN;
  }
  if((auth_mask & mask_fax) EQ mask_fax)
  {
    *mask = *mask | MFW_SERVICE_FAX;
  }
  if((auth_mask & mask_opp) EQ mask_opp)
  {
    *mask = *mask | MFW_SERVICE_OPP;
  }
  if((auth_mask & mask_sync_cmd) EQ mask_sync_cmd)
  {
    *mask = *mask | MFW_SERVICE_SYNC_C;
  }
  return MFW_BT_OK;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE  : MFW_BT                    |
| STATE   : code                 ROUTINE :bt_set_authorization_device|
+--------------------------------------------------------------------+

  PURPOSE:set authorization mask to access available service on local device
*/
T_MFW_BT_RESULT_BT bt_set_authorization_device (T_MFW_BT_BD_ADDR bd_addr[],
                                            T_MFW_BT_AUTHORIZATION_MASK mask)
{
  T_BTI_AUTHORIZATION_MASK author_mask = 0;
  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];
  U8 len;

  TRACE_FUNCTION ("bt_set_authorization_device()");

  memset(service_name,0,BTI_APPLI_NAME_LENGTH);

  switch(mask)
  {
    case MFW_SERVICE_DUN:
      memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
      len = sizeof(MFW_BT_SERV_DUN);
      break;
    case MFW_SERVICE_HSG:
      memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
      len = sizeof(MFW_BT_SERV_HSG);
      break;
    case MFW_SERVICE_FAX:
      memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
      len = sizeof(MFW_BT_SERV_FAX);
      break;
    case MFW_SERVICE_OPP:
      memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
      len = sizeof(MFW_BT_SERV_OPP);
      break;
    case MFW_SERVICE_SYNC_C:
      memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
      len = sizeof(MFW_BT_SERV_SYNC_C);
      break;
    default:
      return MFW_BT_NOK;
  }

  if(btibtp_get_authorization_mask(service_name,len,&author_mask) NEQ BTP_OK)
  {/* get SCM dependent mask for specified service */
    TRACE_EVENT ("Error:bt_list_auth_dev()");
    return MFW_BT_RET_FAIL;
  }

  switch(btibtp_set_authorization(bd_addr,author_mask))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+---------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE  : MFW_BT                     |
| STATE   : code                 ROUTINE :bt_del_authorizations_device|
+---------------------------------------------------------------------+

  PURPOSE:delete all authorizations to access available services on local device
*/
T_MFW_BT_RESULT_BT bt_del_authorizations_device (T_MFW_BT_BD_ADDR bd_addr[])
{
  TRACE_FUNCTION ("bt_del_authorizations_device()");

  switch(btibtp_set_authorization(bd_addr,0))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)       MODULE  : MFW_BT              |
| STATE   : code                       ROUTINE :bt_del_authorization |
+--------------------------------------------------------------------+

  PURPOSE:delete an authorization to access available service on local device
*/
T_MFW_BT_RESULT_BT bt_del_authorization (T_MFW_BT_BD_ADDR bd_addr[],T_MFW_BT_AUTHORIZATION_MASK service_mask)
{
  T_BTI_AUTHORIZATION_MASK auth_mask,author_mask = 0;
  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];
  U8 len;

  TRACE_EVENT ("bt_del_authorization()");

  memset(service_name,0,BTI_APPLI_NAME_LENGTH);

  switch(btibtp_get_authorization(bd_addr,&auth_mask))
  {/* give authorization mask with all authorizations of remote device */
    case BTP_OK:
      break;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }

  switch(service_mask)
  {
    case MFW_SERVICE_DUN:
      memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
      len = sizeof(MFW_BT_SERV_DUN);
      break;
    case MFW_SERVICE_HSG:
      memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
      len = sizeof(MFW_BT_SERV_HSG);
      break;
    case MFW_SERVICE_FAX:
      memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
      len = sizeof(MFW_BT_SERV_FAX);
      break;
    case MFW_SERVICE_OPP:
      memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
      len = sizeof(MFW_BT_SERV_OPP);
      break;
    case MFW_SERVICE_SYNC_C:
      memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
      len = sizeof(MFW_BT_SERV_SYNC_C);
      break;
    default:
      return MFW_BT_NOK;
  }

  if(btibtp_get_authorization_mask(service_name,len,&author_mask) NEQ BTP_OK)
  {/* give SCM dependent authorization mask for specified service */
    TRACE_EVENT ("Error:bt_list_auth_dev()");
    return MFW_BT_RET_FAIL;
  }
  else
  {
    if((auth_mask & author_mask) EQ author_mask)
    {
      auth_mask= auth_mask & ~author_mask;/* delete the specified authorization in mask*/
    }
    else
      return MFW_BT_INVALID_PARA;
  }

  switch(btibtp_set_authorization(bd_addr,auth_mask))
  {/* set authorization mask for remote device again */
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)           MODULE  : MFW_BT          |
| STATE   : code                           ROUTINE :bt_start_pairing |
+--------------------------------------------------------------------+

  PURPOSE : start pairing procedure

*/
T_MFW_BT_RESULT_BT bt_start_pairing (T_MFW_BT_BD_ADDR bd_addr[],
                                  T_MFW_BT_PIN pin_code[],
                                  T_MFW_BT_PIN_MODE pin_mode)
{
  UBYTE user_pin_code_length=4;

  TRACE_FUNCTION ("bt_start_pairing()");

  if(pin_mode EQ PIN_PROVIDED)
  {/* pairing provides to a link key between the gateway and the remote device */

    user_pin_code_length = strlen((const char *)pin_code);

    switch(btibtp_start_pairing(user_pin_code_length, pin_code, bd_addr))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;/* wrong pin */
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
  {/* if device isn't able to provide a PIN code */
    switch(btibtp_start_pairing(0,0,bd_addr))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)    MODULE  : MFW_BT                 |
| STATE   : code                    ROUTINE :bt_delete_paired_device |
+--------------------------------------------------------------------+

  PURPOSE : delete paired device from the paired devices database

*/
T_MFW_BT_RESULT_BT bt_delete_paired_device (T_MFW_BT_BD_ADDR bd_addr[])
{
  TRACE_FUNCTION ("bt_delete_paired_device()");

  switch(btibtp_delete_paired_device(bd_addr))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)              MODULE  : MFW_BT       |
| STATE   : code                              ROUTINE :bt_check_pair |
+--------------------------------------------------------------------+

  PURPOSE : check whether the device in the data base exists

*/
T_MFW_BT_RESULT_BT bt_check_pair (T_MFW_BT_BD_ADDR bd_addr[])
{
  TRACE_FUNCTION ("bt_check_pair()");

  switch(btibtp_check_pairing_state(bd_addr))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}
#ifdef _SIMULATION_
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)       MODULE  : MFW_BT              |
| STATE   : code                       ROUTINE :bt_transfer_audio_in |
+--------------------------------------------------------------------+

  PURPOSE : request transfer audio from headset to phone(headset gateway)

*/
T_MFW_BT_RESULT_BT bt_transfer_audio_in (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_transfer_audio_in()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_transfer_audio_in_req((T_BTI_DEVICE_TYPE)service))
    {  /* BTP_TRANSFER_AUDIO_IN_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)       MODULE  : MFW_BT              |
| STATE   : code                       ROUTINE :bt_transfer_audio_out|
+--------------------------------------------------------------------+

  PURPOSE : request transfer audio from headset gateway(phone)to the
            remote headset
*/

T_MFW_BT_RESULT_BT bt_transfer_audio_out(T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_REQ_ID req_id,
                                      T_MFW_BT_BD_ADDR bd_addr[])
{
  TRACE_FUNCTION ("bt_transfer_audio_out()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_transfer_audio_out_req((T_BTI_DEVICE_TYPE)service,req_id,bd_addr))
    { /* BTP_TRANSFER_AUDIO_OUT_REQ to BT */
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  return MFW_BT_FAIL;
}
#endif

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)       MODULE  : MFW_BT              |
| STATE   : code                       ROUTINE :bt_list_paired_dev   |
+--------------------------------------------------------------------+

  PURPOSE : list all paired devices

*/
T_MFW_BT_RETURN  bt_list_paired_dev(T_MFW_BT_DEV_PAIR_LIST * pair_list)
{
  T_BT_DEV_PAIR_LIST paired_dev_list;
  U8 i;

  TRACE_FUNCTION ("bt_list_paired_dev()");

  memset(&paired_dev_list,0,sizeof(paired_dev_list));
   /* get list of devices of paired database */
  if(btibtp_list_paired_dev(&paired_dev_list) NEQ BTP_OK)
  {
    TRACE_EVENT ("Error:bt_list_paired_dev()");
    return MFW_BT_RET_FAIL;
  }
  else
  {
    pair_list->count = paired_dev_list.pair_counter;/* number of devices */
    for(i = 0;i<paired_dev_list.pair_counter; i++)
      memcpy(pair_list->paired_bd_addr[i],paired_dev_list.paired_addr[i],MFW_BT_ADDR_MAX_LEN);

    return MFW_BT_RET_OK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT            |
| STATE   : code                         ROUTINE :bt_list_auth_dev   |
+--------------------------------------------------------------------+

  PURPOSE : list all devices of authorization database with their
            masks of available services on the local device

*/
T_MFW_BT_RETURN  bt_list_auth_dev(T_MFW_BT_AUTHORIZATION_LIST * authorization_list)
{
  T_BT_DEV_AUTHORIZATION_LIST auth_dev_list;
  U8 i;
  T_BTI_AUTHORIZATION_MASK mask_hsg,mask_dun,mask_fax,author_mask = 0;
  T_BTI_AUTHORIZATION_MASK mask_opp,mask_sync_cmd = 0;
  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];

  TRACE_FUNCTION ("bt_list_auth_dev()");

  memset(&auth_dev_list,0,sizeof(auth_dev_list));
  memset(service_name,0,BTI_APPLI_NAME_LENGTH);
   /* get list of devices of authorization database */
  if(btibtp_list_auth_dev(&auth_dev_list) NEQ BTP_OK)
  {
    TRACE_EVENT ("Error:bt_list_auth_dev()");
    return MFW_BT_RET_FAIL;
  }
  else
  {
    memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_DUN),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service DUN */
      TRACE_EVENT ("Error:bt_list_auth_dev()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_dun = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_HSG),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service HSG */
      TRACE_EVENT ("Error:bt_list_auth_dev()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_hsg = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_FAX),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service FAX */
      TRACE_EVENT ("Error:bt_list_auth_dev()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_fax = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_OPP),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service OPP */
      TRACE_EVENT ("Error:bt_list_auth_dev()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_opp = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_SYNC_C),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service SYNC server with SYNC command support */
      TRACE_EVENT ("Error:bt_list_auth_dev()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_sync_cmd = author_mask;
    }

    authorization_list->count = auth_dev_list.auth_counter;
    for(i = 0;i<auth_dev_list.auth_counter; i++)
    {
      memcpy(authorization_list->auth_devices[i].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
      /* assemble mask for each device */
      if((auth_dev_list.auth_el[i].mask_auth & mask_hsg) EQ mask_hsg)
      {
        authorization_list->auth_devices[i].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_HSG;
      }

      if((auth_dev_list.auth_el[i].mask_auth & mask_dun) EQ mask_dun)
      {
        authorization_list->auth_devices[i].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_DUN;
      }

      if((auth_dev_list.auth_el[i].mask_auth & mask_fax) EQ mask_fax)
      {
        authorization_list->auth_devices[i].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_FAX;
      }

      if((auth_dev_list.auth_el[i].mask_auth & mask_opp) EQ mask_opp)
      {
        authorization_list->auth_devices[i].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_OPP;
      }

      if((auth_dev_list.auth_el[i].mask_auth & mask_sync_cmd) EQ mask_sync_cmd)
      {
        authorization_list->auth_devices[i].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_SYNC_C;
      }
    }
    return MFW_BT_RET_OK;
  }
}

/*
+-------------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT                 |
| STATE   : code                         ROUTINE :bt_authorized_devices   |
+-------------------------------------------------------------------------+

  PURPOSE : list all devices of authorization database with desired
            authorization (service_mask)
*/
T_MFW_BT_RETURN  bt_authorized_devices(T_MFW_BT_AUTHORIZATION_LIST * authorization_list,T_MFW_BT_AUTHORIZATION_MASK service_mask )
{
  T_BT_DEV_AUTHORIZATION_LIST auth_dev_list;
  U8 i,j;
  T_BTI_AUTHORIZATION_MASK author_mask,mask_hsg,mask_dun,mask_fax,mask_opp = 0;
  T_BTI_AUTHORIZATION_MASK mask_sync_cmd = 0;
  T_BTI_APPLI_NAME service_name[BTI_APPLI_NAME_LENGTH];

  TRACE_EVENT ("bt_authorized_devices()");

  memset(&auth_dev_list,0,sizeof(auth_dev_list));
  memset(service_name,0,BTI_APPLI_NAME_LENGTH);
   /* get list of devices of authorization database */
  if(btibtp_list_auth_dev(&auth_dev_list) NEQ BTP_OK)
  {
    TRACE_EVENT ("Error:bt_authorized_devices()");
    return MFW_BT_RET_FAIL;
  }
  else
  {
    memcpy(service_name,MFW_BT_SERV_DUN,sizeof(MFW_BT_SERV_DUN));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_DUN),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service DUN */
      TRACE_EVENT ("Error:bt_authorized_devices()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_dun = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_HSG,sizeof(MFW_BT_SERV_HSG));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_HSG),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service HSG */
      TRACE_EVENT ("Error:bt_authorized_devices()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_hsg = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_FAX,sizeof(MFW_BT_SERV_FAX));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_FAX),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service FAX */
      TRACE_EVENT ("Error:bt_authorized_devices()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_fax = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_OPP,sizeof(MFW_BT_SERV_OPP));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_OPP),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service OPP */
      TRACE_EVENT ("Error:bt_authorized_devices()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_opp = author_mask;
    }
    memcpy(service_name,MFW_BT_SERV_SYNC_C,sizeof(MFW_BT_SERV_SYNC_C));
    if(btibtp_get_authorization_mask(service_name,sizeof(MFW_BT_SERV_SYNC_C),&author_mask) NEQ BTP_OK)
    {/* get SCM-dependent authorization mask of service SYNC server with SYN command support */
      TRACE_EVENT ("Error:bt_authorized_devices()");
      return MFW_BT_RET_FAIL;
    }
    else
    {
      mask_sync_cmd = author_mask;
    }

    for(i=0,j=0;i<auth_dev_list.auth_counter; i++)
    {
      switch(service_mask)
      {
        case MFW_SERVICE_HSG:
          if((auth_dev_list.auth_el[i].mask_auth & mask_hsg) EQ mask_hsg)
          {
            authorization_list->auth_devices[j].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_HSG;
            memcpy(authorization_list->auth_devices[j].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
            authorization_list->count++;
            j++;
          }
          break;
        case MFW_SERVICE_DUN:
          if((auth_dev_list.auth_el[i].mask_auth & mask_dun) EQ mask_dun)
          {
            authorization_list->auth_devices[j].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_DUN;
            memcpy(authorization_list->auth_devices[j].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
            authorization_list->count++;
            j++;
          }
          break;
        case MFW_SERVICE_FAX:
          if((auth_dev_list.auth_el[i].mask_auth & mask_fax) EQ mask_fax)
          {
            authorization_list->auth_devices[j].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_FAX;
            memcpy(authorization_list->auth_devices[j].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
            authorization_list->count++;
            j++;
          }
          break;
        case MFW_SERVICE_OPP:
          if((auth_dev_list.auth_el[i].mask_auth & mask_opp) EQ mask_opp)
          {
            authorization_list->auth_devices[j].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_OPP;
            memcpy(authorization_list->auth_devices[j].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
            authorization_list->count++;
            j++;
          }
          break;
        case MFW_SERVICE_SYNC_C:
          if((auth_dev_list.auth_el[i].mask_auth & mask_sync_cmd) EQ mask_sync_cmd)
          {
            authorization_list->auth_devices[j].mask_authorization = authorization_list->auth_devices[i].mask_authorization | MFW_SERVICE_SYNC_C;
            memcpy(authorization_list->auth_devices[j].remote_bd_addr,auth_dev_list.auth_el[i].remote_addr,MFW_BT_ADDR_MAX_LEN);
            authorization_list->count++;
            j++;
          }
          break;
        default:
          return MFW_BT_RET_FAIL;
      }
    }
    return MFW_BT_RET_OK;
  }
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_clear_list_found_dev|
+--------------------------------------------------------------------+

  PURPOSE : clear list of found devices with theirs service id's

*/
T_MFW_BT_RETURN bt_clear_list_found_dev (void)
{
  T_MFW_BT_DEVICE_ID *help_ptr;
  T_MFW_BT_DEVICE_ID *help_h_ptr;

  TRACE_FUNCTION ("bt_clear_list_found_dev()");

  if(service_list.device_id) /* check:is list of found hs empty ?*/
  {
    help_ptr = service_list.device_id->next;
    MFREE(service_list.device_id);   /* free memory first element */
    service_list.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr);               /* free next elements */
      help_ptr = help_h_ptr;
      service_list.device_id = help_ptr;
    }
  }
  return MFW_BT_RET_OK;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)MODULE  : MFW_BT                     |
| STATE   : code               ROUTINE :bt_clear_all_lists_found_serv|
+--------------------------------------------------------------------+

  PURPOSE : clear all list of found  services

*/
T_MFW_BT_RETURN bt_clear_all_lists_found_serv (void)
{
  T_MFW_BT_SERVICE_ID *help_ptr;
  T_MFW_BT_SERVICE_ID *help_h_ptr;

  TRACE_FUNCTION ("bt_clear_all_lists_found_serv()");

  if(found_headset.device_id)  /* check: is list of found hs empty ? */
  {
    help_ptr = found_headset.device_id->next;
    MFREE(found_headset.device_id->bd_name);/* free name of first element */
    MFREE(found_headset.device_id);         /* free memory first element */
    found_headset.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_headset.device_id = help_ptr;
    }
  }
  if(found_dial_up.device_id)/* check: is list of found dun empty ? */
  {
    help_ptr = found_dial_up.device_id->next;
    MFREE(found_dial_up.device_id->bd_name);/* free name of first element */
    MFREE(found_dial_up.device_id);       /* free memory first element */
    found_dial_up.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_dial_up.device_id = help_ptr;
    }
  }
  if(found_fax.device_id)/* check: is list of found fax empty ? */
  {
    help_ptr = found_fax.device_id->next;
    MFREE(found_fax.device_id->bd_name);/* free name of first element */
    MFREE(found_fax.device_id);       /* free memory first element */
    found_fax.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_fax.device_id = help_ptr;
    }
  }
  if(found_opp.device_id)/* check: is list of found OPP  empty ? */
  {
    help_ptr = found_opp.device_id->next;
    MFREE(found_opp.device_id->bd_name);/* free name of first element */
    MFREE(found_opp.device_id);       /* free memory first element */
    found_opp.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_opp.device_id = help_ptr;
    }
  }
  if(found_sync.device_id)/* check: is list of found SYNC server empty ? */
  {
    help_ptr = found_sync.device_id->next;
    MFREE(found_sync.device_id->bd_name);/* free name of first element */
    MFREE(found_sync.device_id);       /* free memory first element */
    found_sync.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_sync.device_id = help_ptr;
    }
  }
  if(found_sync_cmd.device_id)/* check: is list of found SYNC_CMD server  empty ? */
  {
    help_ptr = found_sync_cmd.device_id->next;
    MFREE(found_sync_cmd.device_id->bd_name);/* free name of first element */
    MFREE(found_sync_cmd.device_id);       /* free memory first element */
    found_sync_cmd.device_id = help_ptr;
    while(help_ptr)
    {
      help_h_ptr = help_ptr->next;
      MFREE(help_ptr->bd_name);          /* free name of next elements */
      MFREE(help_ptr);                   /* free next elements */
      help_ptr = help_h_ptr;
      found_sync_cmd.device_id = help_ptr;
    }
  }
  return MFW_BT_RET_OK;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)    MODULE  : MFW_BT                 |
| STATE   : code                    ROUTINE :bt_clear_list_found_serv|
+--------------------------------------------------------------------+

  PURPOSE : clear list of specific found service

*/
T_MFW_BT_RETURN bt_clear_list_found_serv (T_MFW_BT_SERVICE_TYPE service)
{
  T_MFW_BT_SERVICE_ID *help_ptr;
  T_MFW_BT_SERVICE_ID *help_h_ptr;

  TRACE_FUNCTION ("bt_clear_list_found_serv()");

  if(service EQ MFW_BT_HEADSET)
  {
    if(found_headset.device_id)  /* check: is list of found hs  empty ? */
    {
      help_ptr = found_headset.device_id->next;
      MFREE(found_headset.device_id->bd_name);/* free name of first element */
      MFREE(found_headset.device_id);   /* free memory first element */
      found_headset.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);         /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_headset.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else if(service EQ MFW_BT_DIAL_UP)
  {/* check: is list of found dun   empty ? */
    if(found_dial_up.device_id)
    {
      help_ptr = found_dial_up.device_id->next;
      MFREE(found_dial_up.device_id->bd_name);/* free name of first element */
      MFREE(found_dial_up.device_id);   /* free memory first element */
      found_dial_up.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);      /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_dial_up.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else if(service EQ MFW_BT_FAX_GW)
  {/* check: is list of found fax empty ? */
    if(found_fax.device_id)
    {
      help_ptr = found_fax.device_id->next;
      MFREE(found_fax.device_id->bd_name);/* free name of first element */
      MFREE(found_fax.device_id);   /* free memory first element */
      found_fax.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);      /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_fax.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else if(service EQ MFW_BT_OPP)
  {/* check: is list of found OPP  empty ? */
    if(found_opp.device_id)
    {
      help_ptr = found_opp.device_id->next;
      MFREE(found_opp.device_id->bd_name);/* free name of first element */
      MFREE(found_opp.device_id);   /* free memory first element */
      found_opp.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);      /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_opp.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else if(service EQ MFW_BT_SYNC)
  {/* check: is list of found SYNC server  empty ? */
    if(found_sync.device_id)
    {
      help_ptr = found_sync.device_id->next;
      MFREE(found_sync.device_id->bd_name);/* free name of first element */
      MFREE(found_sync.device_id);   /* free memory first element */
      found_sync.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);      /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_sync.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else if(service EQ MFW_BT_SYNC_CMD)
  {/* check:is list of found SYNC server with support SYN commands  empty ? */
    if(found_sync_cmd.device_id)
    {
      help_ptr = found_sync_cmd.device_id->next;
      MFREE(found_sync_cmd.device_id->bd_name);/* free name of first element */
      MFREE(found_sync_cmd.device_id);   /* free memory first element */
      found_sync_cmd.device_id = help_ptr;
      while(help_ptr)
      {
        help_h_ptr = help_ptr->next;
        MFREE(help_ptr->bd_name);      /* free name of next elements */
        MFREE(help_ptr);               /* free next elements */
        help_ptr = help_h_ptr;
        found_sync_cmd.device_id = help_ptr;
      }
    }
    return MFW_BT_RET_OK;
  }
  else
    return MFW_BT_RET_FAIL;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE :bt_set_param_headset|
+--------------------------------------------------------------------+

  PURPOSE:remote control of speaker or microphone gain (profile headset)
*/

T_MFW_BT_RESULT_BT bt_set_param_headset (T_MFW_BT_SERVICE_TYPE service,
                                         T_MFW_BT_PARAM_NUMBER nb,
                                         T_MFW_BT_CHANGE_PARA type,
                                         U16 new_value)
{
  TRACE_FUNCTION ("bt_set_param_headset()");
  if(service EQ MFW_BT_HEADSET)
  {
    /* update parameter speaker or microphone */
    if((nb EQ MFW_BT_MIC_GAIN) OR
       (nb EQ MFW_BT_SPEAKER_GAIN))
    {/* increase or decrease (+1/-1) or set new value */
      if((type EQ MFW_BT_PARA_INC) OR
         (type EQ MFW_BT_PARA_DEC) OR
         (type EQ MFW_BT_PARA_SET))
      {
        if(type EQ MFW_BT_PARA_SET)
        {/* for set value valid value is needed */
          if(!new_value)
          {
            return MFW_BT_NOK;
          }
        }

        switch(btibtp_set_param_headset(nb,type,new_value))
        {
          case BTP_OK:
            return MFW_BT_OK;
          case BTP_INVALID_PARAMETER:
            return MFW_BT_INVALID_PARA;
          case BTP_NOT_SUPP:
            return MFW_BT_NO_SUPP;
          case BTP_NOT_READY:
            return MFW_BT_NOT_READY;
          case BTP_INT_ERR:
            return MFW_BT_INT_ERR;
          case BTP_MEMORY_ERR:
            return MFW_BT_MEM_ERR;
          case BTP_NOK:
            return MFW_BT_NOK;
        }
      }
      else
        return MFW_BT_NOK;
    }
    else
       return MFW_BT_FAIL;
  }
  else
     return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE  : MFW_BT                    |
| STATE   : code                 ROUTINE :bt_get_default_service_info|
+--------------------------------------------------------------------+

  PURPOSE:get device info from default headset list
*/
T_MFW_BT_RESULT_BT bt_get_default_service_info (T_MFW_BT_SERVICE_TYPE service,
                                            T_MFW_BT_DEV_ID dev_id,
                                            T_MFW_BT_HEADSET_INFO *hs_info)
{
  T_BTI_HSG_DEFAULT_INFO headset_info;

  TRACE_FUNCTION ("bt_get_default_service_info()");

  memset(&headset_info,0,sizeof(headset_info));

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_get_headset_info(dev_id,&headset_info))
    {
      case BTP_OK:
        hs_info->priority = headset_info.priority;
        memcpy(hs_info->bd_addr,headset_info.bd_addr,sizeof(headset_info.bd_addr));
        memcpy(hs_info->hsg_name,headset_info.name,MFW_BT_HSG_NAME_MAX_LEN);
        hs_info->mfw_remote_audio_control_support = headset_info.bt_remote_audio_control_support;
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE  : MFW_BT                    |
| STATE   : code                 ROUTINE :bt_set_prio_default_service|
+--------------------------------------------------------------------+

  PURPOSE:set priority in default headset list
*/
T_MFW_BT_RESULT_BT bt_set_prio_default_service (T_MFW_BT_SERVICE_TYPE service,
                                  T_MFW_BT_DEV_ID dev_id,
                                  T_MFW_BT_PRIORITY priority)
{
  TRACE_FUNCTION ("bt_set_prio_default_service()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_set_prio_default_headset(dev_id,priority))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
  {
    TRACE_EVENT ("bt_set_prio_default_service:Error");
    return MFW_BT_FAIL;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)            MODULE  : MFW_BT         |
| STATE   : code                            ROUTINE :bt_get_config   |
+--------------------------------------------------------------------+

  PURPOSE:get configuration parameters of bluetooth profile headset
*/
T_MFW_BT_RESULT_BT  bt_get_config (T_MFW_BT_SERVICE_TYPE service,
                                T_MFW_BT_HSG_CLIENT_CONFIG *client_conf,
                                T_MFW_BT_HSG_SERVER_CONFIG *server_conf)
{
  T_BTI_HSG_CLIENT_CONF bt_client_conf;
  T_BTI_HSG_SERVER_CONF bt_server_conf;

  TRACE_FUNCTION ("bt_get_config()");

  memset(&bt_client_conf,0,sizeof(bt_client_conf));
  memset(&bt_server_conf,0,sizeof(bt_server_conf));

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_get_config((T_BTI_DEVICE_TYPE)service,&bt_client_conf,&bt_server_conf))
    {
      case BTP_OK:
        switch(bt_client_conf.config_mode)
        {
          case BTI_AUTO_OUTG_DEF_CONN_OFF:
            client_conf->config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_OFF;
            break;
          case BTI_AUTO_OUTG_DEF_CONN_ON:
            client_conf->config_mode = MFW_BT_AUTO_OUTG_DEF_CONN_ON;
            break;
          default:
            return MFW_BT_INVALID_PARA;
        }
        client_conf->security = bt_client_conf.security;

        server_conf->security = bt_server_conf.security;
        server_conf->serv_con_conf = bt_server_conf.conn_config;
        server_conf->conn_break = bt_server_conf.conn_break;
        server_conf->conn_time = bt_server_conf.conn_time;
        server_conf->nb_phone = bt_server_conf.nb_phone;
        memcpy(server_conf->mfw_phone_list,bt_server_conf.phon_list,sizeof(bt_server_conf.phon_list));
        memcpy(server_conf->mfw_key_list,bt_server_conf.key_list,sizeof(bt_server_conf.key_list));
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}
#ifdef _SIMULATION_
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)            MODULE  : MFW_BT         |
| STATE   : code                            ROUTINE :bt_save_config  |
+--------------------------------------------------------------------+

  PURPOSE:save configuration parameters of bluetooth profile headset
*/
T_MFW_BT_RESULT_BT  bt_save_config (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_save_config()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_save_config((T_BTI_DEVICE_TYPE)service))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)           MODULE  : MFW_BT          |
| STATE   : code                           ROUTINE :bt_restore_config|
+--------------------------------------------------------------------+

  PURPOSE:restore configuration parameters of bluetooth profile headset
*/
T_MFW_BT_RESULT_BT  bt_restore_config (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_restore_config()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_restore_config((T_BTI_DEVICE_TYPE)service))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)        MODULE  : MFW_BT             |
| STATE   : code                        ROUTINE :bt_save_default_list|
+--------------------------------------------------------------------+

  PURPOSE: save default headset list in non-volatile memory
*/
T_MFW_BT_RESULT_BT  bt_save_default_list (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_save_default_list()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_save_def_list((T_BTI_DEVICE_TYPE)service))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_restore_default_list|
+--------------------------------------------------------------------+

  PURPOSE: restore default headset list from non-volatile memory
*/
T_MFW_BT_RESULT_BT bt_restore_default_list (T_MFW_BT_SERVICE_TYPE service)
{
  TRACE_FUNCTION ("bt_restore_default_list()");

  if(service EQ MFW_BT_HEADSET)
  {
    switch(btibtp_restore_def_list((T_BTI_DEVICE_TYPE)service))
    {
      case BTP_OK:
        return MFW_BT_EXECUTE;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}
#endif
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE : bt_set_security_mode  |
+--------------------------------------------------------------------+

  PURPOSE: set common security mode
*/
T_MFW_BT_RESULT_BT  bt_set_security_mode (T_MFW_BT_SECURITY_MODE sec_mode)
{
  TRACE_FUNCTION ("bt_set_security_mode()");

  /* security mode 1: local device will never initiate any security procedure,
                      only services which registered their security requirements
                      as no-security, will be usable
     security mode 2: local device shall initiate security procedure
                      according to the requirements of the requested service
     security mode 3: local device will initiate security procedures
                      before setting up the link and informing the host,
                      some services with no security requirements may be unusable */
  if((sec_mode EQ MFW_BT_SECURITY_MODE_1) OR
     (sec_mode EQ MFW_BT_SECURITY_MODE_2) OR
     (sec_mode EQ MFW_BT_SECURITY_MODE_3))
  {
    switch(btibtp_set_sec_mode((T_BTI_SM_SECURITY_MODE)sec_mode))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)         MODULE  : MFW_BT            |
| STATE   : code                         ROUTINE : bt_set_pair_mode  |
+--------------------------------------------------------------------+

  PURPOSE: set pairing mode
*/
T_MFW_BT_RESULT_BT  bt_set_pair_mode (T_MFW_BT_PAIRABLE_MODE pair_mode)
{
  TRACE_FUNCTION ("bt_set_pair_mode()");

  if((pair_mode EQ MFW_BT_PAIRABLE) OR
     (pair_mode EQ MFW_BT_NON_PAIRABLE))
  {
    switch(btibtp_set_pair_mode((T_BTI_SM_PAIRABLE_MODE)pair_mode))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;
      case BTP_NOT_SUPP:
        return MFW_BT_NO_SUPP;
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;
      case BTP_NOK:
        return MFW_BT_NOK;
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+------------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)      MODULE  : MFW_BT                   |
| STATE   : code                      ROUTINE : bt_set_default_security  |
+------------------------------------------------------------------------+

  PURPOSE: set default security requirements
*/
T_MFW_BT_RESULT_BT  bt_set_default_security (U8 security_level)
{
  TRACE_FUNCTION ("bt_set_default_security()");

  /* set security level of BT protocol stack for incoming and outgoing
     connections - this determines the security level needed to access
     any unregistered services */

  switch(btibtp_set_default_security(security_level))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE : MFW_BT                     |
| STATE   : code                 ROUTINE:bt_start_profile_application|
+--------------------------------------------------------------------+

  PURPOSE : start bluetooth application

*/
T_MFW_BT_RESULT_BT  bt_start_profile_application (T_MFW_BT_SERVICE_TYPE service)
{
  /* start to activate bluetooth profiles, create resources and the profile
     instance */

  TRACE_FUNCTION ("bt_start_profile_application()");

  if((service EQ MFW_BT_HEADSET) OR
     (service EQ MFW_BT_DIAL_UP) OR
     (service EQ MFW_BT_FAX_GW) OR
     (service EQ MFW_BT_OPP) OR
     (service EQ MFW_BT_SYNC) OR
     (service EQ MFW_BT_PCA_GW))
  {
    switch(btibtp_start((T_BTI_DEVICE_TYPE) service))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;/* appli_name is not known by BTE */
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;/* appli_name is already running */
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;/* appli_name does not have a get_info function */
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;/* problem of memory in BTE */
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445) MODULE : MFW_BT                     |
| STATE   : code                 ROUTINE:bt_stop_profile_application |
+--------------------------------------------------------------------+

  PURPOSE : start bluetooth application

*/
T_MFW_BT_RESULT_BT  bt_stop_profile_application (T_MFW_BT_SERVICE_TYPE service)
{
  /* start to activate bluetooth profiles, create resources and the profile
     instance */

  TRACE_FUNCTION ("bt_stop_profile_application()");

  if((service EQ MFW_BT_HEADSET) OR
     (service EQ MFW_BT_DIAL_UP) OR
     (service EQ MFW_BT_FAX_GW) OR
     (service EQ MFW_BT_OPP) OR
     (service EQ MFW_BT_SYNC) OR
     (service EQ MFW_BT_PCA_GW))
  {
    switch(btibtp_stop((T_BTI_DEVICE_TYPE) service))
    {
      case BTP_OK:
        return MFW_BT_OK;
      case BTP_INVALID_PARAMETER:
        return MFW_BT_INVALID_PARA;/* appli_name is not known by BTE */
      case BTP_NOT_READY:
        return MFW_BT_NOT_READY;/* appli_name is already running */
      case BTP_INT_ERR:
        return MFW_BT_INT_ERR;/* appli_name does not have a get_info function */
      case BTP_MEMORY_ERR:
        return MFW_BT_MEM_ERR;/* problem of memory in BTE */
    }
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_register_sm   |
+--------------------------------------------------------------------+

  PURPOSE : start bluetooth security manager

*/
T_MFW_BT_RESULT_BT bt_register_sm (void)
{
  TRACE_FUNCTION ("bt_register_sm()");

  /* mandatory registration in order to handle requests from SCM -
     Security Manager - authentication and authorization */

  switch(btibtp_register_sm())/* set callback function */
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      TRACE_EVENT ("Error:bt_register_sm()");
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)          MODULE  : MFW_BT           |
| STATE   : code                          ROUTINE : bt_deregister_sm |
+--------------------------------------------------------------------+

  PURPOSE : stop bluetooth security manager

*/
T_MFW_BT_RESULT_BT bt_deregister_sm(void)
{
  TRACE_EVENT ("bt_deregister_sm()");

  /* mandatory deregistration  */

  switch(btibtp_deregister_sm())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      TRACE_EVENT ("Error:bt_deregister_sm()");
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_opp_put_reply       |
+--------------------------------------------------------------------+

  PURPOSE : reply the put requesting by opp client (about server)
*/
T_MFW_BT_RESULT_BT bt_opp_put_reply ( T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_OPP_PUT_RES opp_put_res,
                                      T_MFW_BT_OPP_OBJECT received_obj)
{
  T_BTI_OPP_OBJECT bti_opp_object;
  T_BTI_OPP_PUT_RES bti_opp_put_res;

  TRACE_EVENT ("bt_opp_put_reply()");

  memset(&bti_opp_object,0,sizeof(T_BTI_OPP_OBJECT));

  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      /*
      *** MFW_BT_OPP_CONTINUE : positive response
          MFW_BT_OPP_R_ENTITY_TOO_L:negative response,the request is too big
          MFW_BT_OPP_FORBIDDEN: negative response, put is rejected
      ***
      */
      if(opp_put_res EQ MFW_BT_OPP_CONTINUE)
      {
        switch(received_obj.mfw_object_type)
        {
          case MFW_BT_BUFFER:/* object will be supposed to be stored in buffer */
            bti_opp_object.bt_object_type = BTI_TYPE_BUFFER;
            bti_opp_object.bt_buffer_start = received_obj.mfw_buffer_start;
            bti_opp_object.bt_buffer_size = received_obj.mfw_buffer_size;
            break;
          case MFW_BT_PATH:/* object will be supposed to be stored in file system */
            bti_opp_object.bt_object_type = BTI_TYPE_PATH;
            bti_opp_object.bt_path = received_obj.mfw_path;
            break;
          default:
            return MFW_BT_FAIL;
        }
        bti_opp_object.bt_object_name = received_obj.mfw_object_name;
        bti_opp_object.bt_object_length = received_obj.mfw_object_length;

        switch(btibtp_opp_put_resp((T_BTI_OPP_PUT_RES)opp_put_res,bti_opp_object))
        {
          case BTP_OK:
            return MFW_BT_OK;
          case BTP_INVALID_PARAMETER:
            return MFW_BT_INVALID_PARA;
          case BTP_NOT_SUPP:
            return MFW_BT_NO_SUPP;
          case BTP_NOT_READY:
            return MFW_BT_NOT_READY;
          case BTP_INT_ERR:
            return MFW_BT_INT_ERR;
          case BTP_MEMORY_ERR:
            return MFW_BT_MEM_ERR;
          case BTP_NOK:
            return MFW_BT_NOK;
        }
      }
      else if((opp_put_res EQ MFW_BT_OPP_R_ENTITY_TOO_L) OR
              (opp_put_res EQ MFW_BT_OPP_FORBIDDEN))
      {
        switch(opp_put_res)
        {
          case MFW_BT_OPP_R_ENTITY_TOO_L:
            bti_opp_put_res = BTI_OPP_TOO_LARGE;
            break;
          case MFW_BT_OPP_FORBIDDEN:
            bti_opp_put_res = BTI_OPP_FORBIDDEN;
            break;
          default:
            return MFW_BT_FAIL;
        }
        switch(btibtp_opp_put_resp(bti_opp_put_res,bti_opp_object))
        {
          case BTP_OK:
            return MFW_BT_OK;
          case BTP_INVALID_PARAMETER:
            return MFW_BT_INVALID_PARA;
          case BTP_NOT_SUPP:
            return MFW_BT_NO_SUPP;
          case BTP_NOT_READY:
            return MFW_BT_NOT_READY;
          case BTP_INT_ERR:
            return MFW_BT_INT_ERR;
          case BTP_MEMORY_ERR:
            return MFW_BT_MEM_ERR;
          case BTP_NOK:
            return MFW_BT_NOK;
        }
      }
      else
        return MFW_BT_FAIL;
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_opp_push_object     |
+--------------------------------------------------------------------+

  PURPOSE : push an object to OPP server

*/
T_MFW_BT_RESULT_BT bt_opp_push_object (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_BD_ADDR server_address[],
                                      BOOL mfw_keep_connection,
                                      T_MFW_BT_OPP_OBJECT mfw_obj_to_push)
{
  T_BTI_OPP_OBJECT bti_opp_object_to_push;

  TRACE_FUNCTION ("bt_opp_push_object()");

  memset(&bti_opp_object_to_push,0,sizeof(T_BTI_OPP_OBJECT));

  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_CLIENT)
    {
      switch(mfw_obj_to_push.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be sent is stored in buffer */
          bti_opp_object_to_push.bt_object_type = BTI_TYPE_BUFFER;
          bti_opp_object_to_push.bt_buffer_start = mfw_obj_to_push.mfw_buffer_start;
          bti_opp_object_to_push.bt_buffer_size = mfw_obj_to_push.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be sent is stored in file system */
          bti_opp_object_to_push.bt_object_type = BTI_TYPE_PATH;
          bti_opp_object_to_push.bt_path = mfw_obj_to_push.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object to be sent */
      bti_opp_object_to_push.bt_object_mime_type = mfw_obj_to_push.mfw_object_mime_type;
      /* name of object to be sent */
      bti_opp_object_to_push.bt_object_name = mfw_obj_to_push.mfw_object_name;
      /* length of object to be sent */
      bti_opp_object_to_push.bt_object_length = mfw_obj_to_push.mfw_object_length;

      switch(btibtp_opp_push_object(bti_opp_object_to_push,server_address,mfw_keep_connection))
      {
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_opp_pull_object     |
+--------------------------------------------------------------------+

  PURPOSE : pull an default server object from OPP server

*/
T_MFW_BT_RESULT_BT bt_opp_pull_object (T_MFW_BT_SERVICE_TYPE service,
                                       T_MFW_BT_SUBTYPE_DEV subtype,
                                       T_MFW_BT_BD_ADDR server_address[],
                                       BOOL mfw_keep_connection,
                                       T_MFW_BT_OPP_OBJECT mfw_obj_to_pull)
{
  T_BTI_OPP_OBJECT bti_opp_object_to_pull;

  TRACE_FUNCTION ("bt_opp_pull_object()");

  memset(&bti_opp_object_to_pull,0,sizeof(T_BTI_OPP_OBJECT));

  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_CLIENT)
    {
      switch(mfw_obj_to_pull.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be pulled will be supposed to be stored in buffer */
          bti_opp_object_to_pull.bt_object_type = BTI_TYPE_BUFFER;
          bti_opp_object_to_pull.bt_buffer_start = mfw_obj_to_pull.mfw_buffer_start;
          bti_opp_object_to_pull.bt_buffer_size = mfw_obj_to_pull.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be pulled will be supposed to be stored in file system */
          bti_opp_object_to_pull.bt_object_type = BTI_TYPE_PATH;
          bti_opp_object_to_pull.bt_path = mfw_obj_to_pull.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object to be pulled */
      bti_opp_object_to_pull.bt_object_mime_type = mfw_obj_to_pull.mfw_object_mime_type;
      /* name of object to be pulled */
      bti_opp_object_to_pull.bt_object_length = mfw_obj_to_pull.mfw_object_length;
      /* length of object to be pulled */
      bti_opp_object_to_pull.bt_object_name = mfw_obj_to_pull.mfw_object_name;
      switch(btibtp_opp_pull_object(bti_opp_object_to_pull,server_address,mfw_keep_connection))
      {
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                |
| STATE   : code                     ROUTINE :bt_opp_exch_objects    |
+--------------------------------------------------------------------+

  PURPOSE : exchange business cards with OPP server

*/
T_MFW_BT_RESULT_BT bt_opp_exch_objects (T_MFW_BT_SERVICE_TYPE service,
                                        T_MFW_BT_SUBTYPE_DEV subtype,
                                        T_MFW_BT_OPP_OBJECT obj_to_push,
                                        T_MFW_BT_OPP_OBJECT obj_to_pull,
                                        T_MFW_BT_BD_ADDR server_address[],
                                        BOOL mfw_keep_connection)
{
  T_BTI_OPP_OBJECT bti_opp_object_to_pull;
  T_BTI_OPP_OBJECT bti_opp_object_to_push;

  TRACE_FUNCTION ("bt_opp_exch_objects()");

  memset(&bti_opp_object_to_push,0,sizeof(T_BTI_OPP_OBJECT));
  memset(&bti_opp_object_to_pull,0,sizeof(T_BTI_OPP_OBJECT));

  if(service EQ MFW_BT_OPP)
  {
    if(subtype EQ MFW_BT_CLIENT)
    {
      switch(obj_to_push.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be pushed is stored in buffer */
          bti_opp_object_to_push.bt_object_type = BTI_TYPE_BUFFER;
          bti_opp_object_to_push.bt_buffer_start = obj_to_push.mfw_buffer_start;
          bti_opp_object_to_push.bt_buffer_size = obj_to_push.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be pushed is stored in file system */
          bti_opp_object_to_push.bt_object_type = BTI_TYPE_PATH;
          bti_opp_object_to_push.bt_path = obj_to_push.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object to be pushed */
      bti_opp_object_to_push.bt_object_mime_type = obj_to_push.mfw_object_mime_type;
      /* name of object to be pushed */
      bti_opp_object_to_push.bt_object_name = obj_to_push.mfw_object_name;
      /* length of object to be pushed */
      bti_opp_object_to_push.bt_object_length = obj_to_push.mfw_object_length;

      switch(obj_to_pull.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be pulled will be supposed to be stored in buffer */
          bti_opp_object_to_pull.bt_object_type = BTI_TYPE_BUFFER;
          bti_opp_object_to_pull.bt_buffer_start = obj_to_pull.mfw_buffer_start;
          bti_opp_object_to_pull.bt_buffer_size = obj_to_pull.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be pulled will be supposed to be stored in file system */
          bti_opp_object_to_pull.bt_object_type = BTI_TYPE_PATH;
          bti_opp_object_to_pull.bt_path = obj_to_pull.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /*  MIME type of object to be pulled */
      bti_opp_object_to_pull.bt_object_mime_type = obj_to_pull.mfw_object_mime_type;
      /*  length of object to be pulled */
      bti_opp_object_to_pull.bt_object_length = obj_to_pull.mfw_object_length;
      /*  name of object to be pulled */
      bti_opp_object_to_pull.bt_object_name = obj_to_pull.mfw_object_name;

      switch(btibtp_opp_exch_objects(bti_opp_object_to_push,bti_opp_object_to_pull,
                                     server_address,mfw_keep_connection))
      {
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_syn_s_send_com       |
+----------------------------------------------------------------------+

  PURPOSE : SYNC server send SYN command to SYNC client with
            SYNC command support

*/
T_MFW_BT_RESULT_BT bt_syn_s_send_com (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_SYNC_COMMAND sync_comm,
                                      T_MFW_BT_SYN_OBJECT_STORE sync_object,
                                      T_MFW_BT_BD_ADDR sync_client_address[])
{
  T_BTI_SYNC_COMMAND bt_sync_com;
  T_BTI_SYN_OBJECT_STORE bt_sync_object;

  TRACE_FUNCTION ("bt_syn_s_send_com()");

  bt_sync_object = (T_BTI_SYN_OBJECT_STORE)sync_object;

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      switch(sync_comm)
      {
        case MFW_BT_SYNC_CO_SYNC:
          /* SYNC server push command: SYNC synchronization initiated by Server */
          bt_sync_com = sync_comm;
          break;
        case MFW_BT_SYNC_CO_PUT:
          /* SYNC server push command: PUT */
          bt_sync_com = sync_comm;
          break;
        default:
          return MFW_BT_FAIL;
      }

      switch(btibtp_sync_ser_send_com(bt_sync_com,bt_sync_object,sync_client_address))
      {
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_syn_s_auth_res       |
+----------------------------------------------------------------------+

  PURPOSE : SYNC server sends authentication response

*/
T_MFW_BT_RESULT_BT bt_syn_s_auth_res (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_SYN_PASSWD * mfw_sync_password)
{
  TRACE_FUNCTION ("bt_syn_s_auth_res()");

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      if(mfw_sync_password)
      {
        switch(btibtp_sync_ser_auth_res(mfw_sync_password))
        {
          case BTP_OK:
            return MFW_BT_OK;
          case BTP_INVALID_PARAMETER:
            return MFW_BT_INVALID_PARA;
          case BTP_NOT_SUPP:
            return MFW_BT_NO_SUPP;
          case BTP_NOT_READY:
            return MFW_BT_NOT_READY;
          case BTP_INT_ERR:
            return MFW_BT_INT_ERR;
          case BTP_MEMORY_ERR:
            return MFW_BT_MEM_ERR;
          case BTP_NOK:
            return MFW_BT_NOK;
        }
      }
      else
        return MFW_BT_INVALID_PARA;
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_syn_s_sync_terminate |
+----------------------------------------------------------------------+

  PURPOSE : SYNC server terminates synchronization

*/
T_MFW_BT_RESULT_BT bt_syn_s_sync_terminate (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype)
{
  TRACE_FUNCTION ("bt_syn_s_sync_terminate()");

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      switch(btibtp_sync_syn_terminate())
      {
        case BTP_OK:
          return MFW_BT_OK;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_syn_s_pull_resp      |
+----------------------------------------------------------------------+

  PURPOSE : SYNC server sends pull request response

*/
T_MFW_BT_RESULT_BT bt_syn_s_pull_resp (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_SYNC_OBJECT mfw_syn_pull_obj)
{
  T_BTI_SYNC_OBJECT syn_pull_object;

  TRACE_FUNCTION ("bt_syn_s_pull_resp()");

  memset(&syn_pull_object,0,sizeof(syn_pull_object));

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      switch(mfw_syn_pull_obj.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be pulled will be supposed to be stored in buffer */
          syn_pull_object.bt_object_type = BTI_TYPE_BUFFER;
          syn_pull_object.bt_buffer_start = mfw_syn_pull_obj.mfw_buffer_start;
          syn_pull_object.bt_buffer_size = mfw_syn_pull_obj.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be pulled will be supposed to be stored in file system */
          syn_pull_object.bt_object_type = BTI_TYPE_PATH;
          syn_pull_object.bt_path = mfw_syn_pull_obj.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object to be pulled */
      syn_pull_object.bt_object_mime_type = mfw_syn_pull_obj.mfw_object_mime_type;
      /* name of object to be pulled */
      syn_pull_object.bt_object_length = mfw_syn_pull_obj.mfw_object_length;
      /* length of object to be pulled */
      syn_pull_object.bt_object_name = mfw_syn_pull_obj.mfw_object_name;

      switch(btibtp_sync_ser_pull_res(syn_pull_object))
      {
        case BTP_OK:
          return MFW_BT_OK;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE : bt_syn_s_push_resp      |
+----------------------------------------------------------------------+

  PURPOSE : SYNC server sends push request response

*/
T_MFW_BT_RESULT_BT bt_syn_s_push_resp (T_MFW_BT_SERVICE_TYPE service,
                                      T_MFW_BT_SUBTYPE_DEV subtype,
                                      T_MFW_BT_SYNC_OBJECT mfw_syn_push_obj)
{
  T_BTI_SYNC_OBJECT syn_push_object;

  TRACE_FUNCTION ("bt_syn_s_push_resp()");

  memset(&syn_push_object,0,sizeof(syn_push_object));

  if(service EQ MFW_BT_SYNC)
  {
    if(subtype EQ MFW_BT_SERVER)
    {
      switch(mfw_syn_push_obj.mfw_object_type)
      {
        case MFW_BT_BUFFER:/* object to be pulled will be supposed to be stored in buffer */
          syn_push_object.bt_object_type = BTI_TYPE_BUFFER;
          syn_push_object.bt_buffer_start = mfw_syn_push_obj.mfw_buffer_start;
          syn_push_object.bt_buffer_size = mfw_syn_push_obj.mfw_buffer_size;
          break;
        case MFW_BT_PATH:/* object to be pulled will be supposed to be stored in file system */
          syn_push_object.bt_object_type = BTI_TYPE_PATH;
          syn_push_object.bt_path = mfw_syn_push_obj.mfw_path;
          break;
        default:
          return MFW_BT_FAIL;
      }
      /* MIME type of object to be pulled */
      syn_push_object.bt_object_mime_type = mfw_syn_push_obj.mfw_object_mime_type;
      /* name of object to be pulled */
      syn_push_object.bt_object_length = mfw_syn_push_obj.mfw_object_length;
      /* length of object to be pulled */
      syn_push_object.bt_object_name = mfw_syn_push_obj.mfw_object_name;

      switch(btibtp_sync_ser_push_res(syn_push_object))
      {
        case BTP_OK:
          return MFW_BT_EXECUTE;
        case BTP_INVALID_PARAMETER:
          return MFW_BT_INVALID_PARA;
        case BTP_NOT_SUPP:
          return MFW_BT_NO_SUPP;
        case BTP_NOT_READY:
          return MFW_BT_NOT_READY;
        case BTP_INT_ERR:
          return MFW_BT_INT_ERR;
        case BTP_MEMORY_ERR:
          return MFW_BT_MEM_ERR;
        case BTP_NOK:
          return MFW_BT_NOK;
      }
    }
    else
      return MFW_BT_FAIL;
  }
  else
    return MFW_BT_FAIL;
}

/* BT CTRL */

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_set_conn_mode(T_MFW_BT_CONNECTABLE_MODE cmode,
                           UINT16 scan_interval,
                           UINT16 scan_window)
{
  TRACE_FUNCTION ("bt_set_conn_mode()");

  switch(btibtp_set_conn_mode(cmode, scan_interval, scan_window))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }

}


/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_set_disc_mode(T_MFW_BT_DISCOVERABLE_MODE dmode,
                           UINT16 scan_interval,
                           UINT16 scan_window)
{
  TRACE_FUNCTION ("bt_set_disc_mode()");

  switch(btibtp_set_disc_mode(dmode, scan_interval, scan_window))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_get_local_name(void)
{
  TRACE_FUNCTION ("bt_get_local_name()");

  switch(btibtp_get_local_name())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_set_local_name(T_MFW_BT_BD_NAME name[])
{
  TRACE_FUNCTION ("bt_set_local_name()");

  switch(btibtp_set_local_name(name))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_get_bd_addr(void)
{
  TRACE_FUNCTION ("bt_get_bd_addr()");

  switch(btibtp_get_bd_addr())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_get_remote_dev_info(T_MFW_BT_BD_ADDR bd_addr[])
{
  TRACE_FUNCTION ("bt_get_remote_dev_info()");

  switch(btibtp_get_remote_dev_info(bd_addr))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_start_btctrl(void)
{
  TRACE_FUNCTION ("bt_start_btctrl()");

  switch(btibtp_start_btctrl())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_stop_btctrl(void)
{
  TRACE_FUNCTION ("bt_stop_btctrl()");

  switch(btibtp_stop_btctrl())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/* enable profiles */
/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_enable_hsg_profile(void)
{
  TRACE_FUNCTION ("bt_enable_hsg_profile()");
  switch(btibtp_enable_hsg_profile())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_enable_dun_profile(void)
{
  TRACE_FUNCTION ("bt_enable_dun_profile()");
  switch(btibtp_enable_dun_profile())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_enable_fax_profile(void)
{
  TRACE_FUNCTION ("bt_enable_fax_profile()");
  switch(btibtp_enable_fax_profile())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_hsg_client_disable(void)
{
  TRACE_FUNCTION ("bt_hsg_client_disable()");
  switch(btibtp_hsg_client_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_hsg_server_disable(void)
{
  TRACE_FUNCTION ("bt_hsg_server_disable()");
  switch(btibtp_hsg_server_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_dun_gw_disable(void)
{
  TRACE_FUNCTION ("bt_dun_gw_disable()");
  switch(btibtp_dun_gw_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_fax_gw_disable(void)
{
  TRACE_FUNCTION ("bt_fax_gw_disable()");
  switch(btibtp_fax_gw_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_opp_client_disable(void)
{
  TRACE_FUNCTION ("bt_opp_client_disable()");
  switch(btibtp_opp_client_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_opp_server_disable(void)
{
  TRACE_FUNCTION ("bt_opp_server_disable()");
  switch(btibtp_opp_server_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*
+----------------------------------------------------------------------+
| PROJECT : MMI-Framework (8445)     MODULE  : MFW_BT                  |
| STATE   : code                     ROUTINE :                         |
+----------------------------------------------------------------------+

  PURPOSE :
*/
T_MFW_BT_RESULT_BT bt_syn_server_disable(void)
{
  TRACE_FUNCTION ("bt_syn_server_disable()");
  switch(btibtp_syn_server_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

/*#ifdef PCA_6350*/
T_MFW_BT_RESULT_BT bt_pca_gw_enable (void)
{
  TRACE_FUNCTION ("bt_pca_gw_enable()");
  switch(btibtp_pca_gw_enable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

T_MFW_BT_RESULT_BT bt_pca_gw_config (T_MFW_BT_PCA_CONFIG event_filters)
{
  T_BTI_PCA_CONF events;
  TRACE_FUNCTION ("bt_pca_gw_config()");

  events.link_filter = (T_BTI_PCA_LINK_EVENT)event_filters.link_event;
  events.call_filter = (T_BTI_PCA_CALL_EVENT)event_filters.call_event;

  switch(btibtp_pca_gw_config (events))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

T_MFW_BT_RESULT_BT bt_pca_gw_security (UINT8  security_level)
{
  TRACE_FUNCTION ("bt_pca_gw_security()");
  switch(btibtp_pca_gw_security (security_level))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

T_MFW_BT_RESULT_BT bt_pca_gw_hangup (void)
{
  TRACE_FUNCTION ("bt_pca_gw_hangup()");
  switch(btibtp_pca_gw_hangup())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}

T_MFW_BT_RESULT_BT bt_pca_gw_disable (void)
{
  TRACE_FUNCTION ("bt_pca_gw_disable()");
  switch(btibtp_pca_gw_disable())
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


/*#endif*/ /* PCA_6350 */


/* Cartman added begin */

T_MFW_BT_RESULT_BT bt_hsg_connect_network (T_MFW_BT_HSG_CONNECT_NETWORK_ANSWER network_answer,
                                                  T_MFW_BT_HSG_CONNECT_NETWORK_TYPE network_type,
                                                  T_MFW_BT_HSG_PHONE_NUMBER phone_nb[])
{
  TRACE_FUNCTION ("bt_hsg_connect_network()");
  switch(btibtp_hsg_connect_network(network_answer,network_type,phone_nb))
  {
    case BTP_OK:
      return MFW_BT_EXECUTE;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


T_MFW_BT_RESULT_BT bt_hsg_send_specific_cmd_to_hs (T_MFW_BT_HSG_SPECIFIC_CMD_TYPE command_type,
                                                  T_MFW_BT_HSG_CMD_TO_HS cmd[])
{
  TRACE_FUNCTION ("bt_hsg_send_specific_cmd_to_hs()");
  switch(btibtp_hsg_send_specific_cmd_to_hs(command_type,cmd))
  {
    case BTP_OK:
      return MFW_BT_EXECUTE;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


T_MFW_BT_RESULT_BT bt_dun_gw_security (UINT8  security_level)
{
  TRACE_FUNCTION ("bt_dun_gw_security()");
  switch(btibtp_dun_gw_security (security_level))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


T_MFW_BT_RESULT_BT bt_opp_client_security (UINT8  security_level)
{
  TRACE_FUNCTION ("bt_opp_client_security()");
  switch(btibtp_opp_client_security (security_level))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


T_MFW_BT_RESULT_BT bt_opp_server_security (UINT8  security_level)
{
  TRACE_FUNCTION ("bt_opp_server_security()");
  switch(btibtp_opp_server_security (security_level))
  {
    case BTP_OK:
      return MFW_BT_OK;
    case BTP_INVALID_PARAMETER:
      return MFW_BT_INVALID_PARA;
    case BTP_NOT_SUPP:
      return MFW_BT_NO_SUPP;
    case BTP_NOT_READY:
      return MFW_BT_NOT_READY;
    case BTP_INT_ERR:
      return MFW_BT_INT_ERR;
    case BTP_MEMORY_ERR:
      return MFW_BT_MEM_ERR;
    case BTP_NOK:
      return MFW_BT_NOK;
  }
}


/* Cartman added end */