📄 mfw_bt.c
字号:
/*
+--------------------------------------------------------------------+
| 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -