⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfw_bt.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8445)         $Workfile:: mfw_bt.c        $|
| $Author: root $Revision: 1.1.1.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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -