Watch 应用中一般会使用到的经典蓝牙 profile 包括 A2DP,AVRCP,HFP,PBAP,SPP 等。上层应用 一般需要处理的电话状态,耳机播放控制命令,电话簿查询等。 各 Profile 初始化时,会注册对应的回调接口,当相关 profile 有事件返回时,通过对应的回调接口通知 上层 APP。
bt_mgr_cback_register(app_hfp_bt_cback);
bt_mgr_cback_register(app_pbap_bt_cback);
bt_mgr_cback_register(app_avrcp_bt_cback);
……
1,HFP
static void app_hfp_bt_cback(T_BT_EVENT event_type, void *event_buf, uint16_t buf_len)
{
switch (event_type)
{
case BT_EVENT_HFP_CALL_STATUS:
case BT_EVENT_HFP_CALLER_ID_IND:
}
}
BT_EVENT_HFP_CALL_STATUS:通话状态上报
typedef enum t_bt_hfp_call_status
{
BT_HFP_CALL_IDLE = 0x00,
BT_HFP_VOICE_ACTIVATION_ONGOING = 0x01,
BT_HFP_INCOMING_CALL_ONGOING = 0x02,
BT_HFP_OUTGOING_CALL_ONGOING = 0x03,
BT_HFP_CALL_ACTIVE = 0x04,
BT_HFP_CALL_ACTIVE_WITH_CALL_WAITING = 0x05,
BT_HFP_CALL_ACTIVE_WITH_CALL_HOLD = 0x06,
BT_HFP_MULTILINK_CALL_ACTIVE_WITH_CALL_WAIT = 0x07,
BT_HFP_MULTILINK_CALL_ACTIVE_WITH_CALL_HOLD = 0x08,
} T_BT_HFP_CALL_STATUS;
BT_EVENT_HFP_CALLER_ID_IND:电话号码上报 来电时,HFP 通过该消息上报电话号码信息给上层。若要通过 PBAP 查询该电话号码对应的联系人名 称,则可以使用 bt_pbap_vcard_listing_by_number_pull 接口。
/**
* bt_pbap.h
*
* \brief Send a request to pull the vCard listing in current phonebook by phone number.
*
* \param[in] bd_addr Remote BT address.
* \param[in] phone_number The start address of string buffer that stores phone number.
*
* \return The status of sending pull_vCard_listing message.
* \retval true Request was sent successfully.
* \retval false Request was failed to send.
*
* \ingroup BT_PBAP
*/
bool bt_pbap_vcard_listing_by_number_pull(uint8_t *bd_addr, char *phone_number);
2,PBAP
static void app_pbap_bt_cback (T_BT_EVENT event_type, void *event_buf, uint16_t buf_len)
{
switch (event_type)
{
case BT_EVENT_PBAP_CALLER_ID_NAME:
}
}
BT_EVENT_PBAP_CALLER_ID_NAME :HFP中通过bt_pbap_vcard_listing_by_number_pull查询号码后,通该消息返回结果。
另外PBAP也支持从手机电话簿中拉取联系人信息,来电信息等资料。相关接口在bt_pbap.h中有提供,可阅读相关接口注释参考。
3,AVRCP
static void app_avrcp_bt_cback (T_BT_EVENT event_type, void *event_buf, uint16_t buf_len)
{
switch (event_type)
{
case BT_EVENT_AVRCP_PLAY:
case BT_EVENT_AVRCP_PAUSE:
case BT_EVENT_AVRCP_STOP:
case BT_EVENT_AVRCP_FORWARD:
case BT_EVENT_AVRCP_BACKWARD:
}
}
主要的播放控制命令包括上述这些,APP层可对应实现相应的功能。