浅谈一下车载蓝牙日志、车载蓝牙日志虽然对于普通车主来说可能不太关注,但它在保障车载蓝牙功能的正常运行、提升用户体验以及涉及隐私安全等多方面都有着重要的意义,并且随着蓝牙技术在车辆领域应用的不断拓展,其重要性也会日益凸显。
1、基础蓝牙
1.1蓝牙状态说明
OFF 蓝牙关闭
BLE_TURNING_OFF 低功耗蓝牙正在关闭
BLE_ON 低功耗蓝牙打开
TURNING_OFF 蓝牙正在关闭
BLE_TURNING_ON 蓝牙正在打开
ON 蓝牙打开
1.2、AdapterProperties 蓝牙连接状态
连接协议列表中的profile
profile 连接协议
BluetoothHeadsetClient =17 /单独通话协议,还包括通讯录协议PBAP (电话)
a2dp_sink=16 //单独音频协议,还包括音频控制协议AVRCP(媒体)
device= 连接设备mac地址
device=C4:C1:7D:0A:BC:74
1->3 = 状态列表
0 //关闭
1 //正在打开
2 //打开成功
3 //正在关闭
log示例:
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: profile=16, device=C4:C1:7D:0A:BC:74, 0 -> 1
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: profile=17, device=C4:C1:7D:0A:BC:74, 0 -> 1
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: profile=17, device=C4:C1:7D:0A:BC:74, 1 -> 3
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: unexpected transition for profile=17, device=C4:C1:7D:0A:BC:74, 1 -> 3
AdapterProperties: ADAPTER_CONNECTION_STATE_CHANGE: unexpected transition for profile=17, device=C4:C1:7D:0A:BC:74, 1 -> 3
自动连接
BluetoothAutoConnect
BluetoothCallback onConnectionStateChanged
1.3、通讯录协议
log
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: profile=17, device=C4:C1:7D:0A:BC:74, 0 -> 1
Profile = 17 表明此为电话协议, 最后的0 > 1表示协议连接状态从已断开变为正在连接
连接状态列表:
STATE_DISCONNECTED = 0 //已断开
STATE_CONNECTING = 1 //正在连接
STATE_CONNECTED = 2 //已连接
STATE_DISCONNECTING = 3 //正在断开
正常连接状态: 0 > 1 > 2
主机发起的断开状态 2 > 3 > 0
苹果手机未授权连接状态0 > 1 > 3 > 0 (安卓手机有相同的也有0 > 1 > 2 > 3 >0)
有的时候我们会直接收到断开信息,这样状态变化就是 2 > 0 没有3的步骤,这也是正常的。
1.4、音频协议
示例log
AdapterProperties: PROFILE_CONNECTION_STATE_CHANGE: profile=16, device=C4:C1:7D:0A:BC:74, 1 -> 2
Profile = 16 表明此为音频协议, 最后的1 > 2表示协议连接状态从正在连接变为已连接
连接状态列表:
STATE_DISCONNECTED = 0 //已断开
STATE_CONNECTING = 1 //正在连接
STATE_CONNECTED = 2 //已连接
STATE_DISCONNECTING = 3 //正在断开
2、蓝牙连接断开原因
log:
bt_btm_sec: btm_sec_disconnected clearing pending flag handle:2 reason:22
22为断开原因,22为10进制数,原因列表为16进制,所以22对应列表中0x16 HCI_ERR_CONN_CAUSE_LOCAL_HOST 为车机端主动断开
原因列表:
#define HCI_SUCCESS 0x00
#define HCI_PENDING 0x00
#define HCI_ERR_ILLEGAL_COMMAND 0x01
#define HCI_ERR_NO_CONNECTION 0x02
#define HCI_ERR_HW_FAILURE 0x03
#define HCI_ERR_PAGE_TIMEOUT 0x04
#define HCI_ERR_AUTH_FAILURE 0x05
#define HCI_ERR_KEY_MISSING 0x06
#define HCI_ERR_MEMORY_FULL 0x07
#define HCI_ERR_CONNECTION_TOUT 0x08
#define HCI_ERR_MAX_NUM_OF_CONNECTIONS 0x09
#define HCI_ERR_MAX_NUM_OF_SCOS 0x0A
#define HCI_ERR_CONNECTION_EXISTS 0x0B
#define HCI_ERR_COMMAND_DISALLOWED 0x0C
#define HCI_ERR_HOST_REJECT_RESOURCES 0x0D
#define HCI_ERR_HOST_REJECT_SECURITY 0x0E
#define HCI_ERR_HOST_REJECT_DEVICE 0x0F
#define HCI_ERR_HOST_TIMEOUT 0x10
#define HCI_ERR_UNSUPPORTED_VALUE 0x11
#define HCI_ERR_ILLEGAL_PARAMETER_FMT 0x12
#define HCI_ERR_PEER_USER 0x13
#define HCI_ERR_PEER_LOW_RESOURCES 0x14
#define HCI_ERR_PEER_POWER_OFF 0x15
#define HCI_ERR_CONN_CAUSE_LOCAL_HOST 0x16
#define HCI_ERR_REPEATED_ATTEMPTS 0x17
#define HCI_ERR_PAIRING_NOT_ALLOWED 0x18
#define HCI_ERR_UNKNOWN_LMP_PDU 0x19
#define HCI_ERR_UNSUPPORTED_REM_FEATURE 0x1A
#define HCI_ERR_SCO_OFFSET_REJECTED 0x1B
#define HCI_ERR_SCO_INTERVAL_REJECTED 0x1C
#define HCI_ERR_SCO_AIR_MODE 0x1D
#define HCI_ERR_INVALID_LMP_PARAM 0x1E
#define HCI_ERR_UNSPECIFIED 0x1F
#define HCI_ERR_UNSUPPORTED_LMP_FEATURE 0x20
#define HCI_ERR_ROLE_CHANGE_NOT_ALLOWED 0x21
#define HCI_ERR_LMP_RESPONSE_TIMEOUT 0x22
#define HCI_ERR_LMP_ERR_TRANS_COLLISION 0x23
#define HCI_ERR_LMP_PDU_NOT_ALLOWED 0x24
#define HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE 0x25
#define HCI_ERR_UNIT_KEY_USED 0x26
#define HCI_ERR_QOS_NOT_SUPPORTED 0x27
#define HCI_ERR_INSTANT_PASSED 0x28
#define HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
#define HCI_ERR_DIFF_TRANSACTION_COLLISION 0x2A
#define HCI_ERR_UNDEFINED_0x2B 0x2B
#define HCI_ERR_QOS_UNACCEPTABLE_PARAM 0x2C
#define HCI_ERR_QOS_REJECTED 0x2D
#define HCI_ERR_CHAN_CLASSIF_NOT_SUPPORTED 0x2E
#define HCI_ERR_INSUFFCIENT_SECURITY 0x2F
#define HCI_ERR_PARAM_OUT_OF_RANGE 0x30
#define HCI_ERR_UNDEFINED_0x31 0x31
#define HCI_ERR_ROLE_SWITCH_PENDING 0x32
#define HCI_ERR_UNDEFINED_0x33 0x33
#define HCI_ERR_RESERVED_SLOT_VIOLATION 0x34
#define HCI_ERR_ROLE_SWITCH_FAILED 0x35
#define HCI_ERR_INQ_RSP_DATA_TOO_LARGE 0x36
#define HCI_ERR_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
#define HCI_ERR_HOST_BUSY_PAIRING 0x38
#define HCI_ERR_REJ_NO_SUITABLE_CHANNEL 0x39
#define HCI_ERR_CONTROLLER_BUSY 0x3A
#define HCI_ERR_UNACCEPT_CONN_INTERVAL 0x3B
#define HCI_ERR_ADVERTISING_TIMEOUT 0x3C
#define HCI_ERR_CONN_TOUT_DUE_TO_MIC_FAILURE 0x3D
#define HCI_ERR_CONN_FAILED_ESTABLISHMENT 0x3E
#define HCI_ERR_LIMIT_REACHED 0x43
#define HCI_ERR_MAC_CONNECTION_FAILED 0x3F
比较常见的原因有:
HCI_ERR_CONNECTION_TOUT 0x08 //连接超时,造成原因一般为手机距离过远或者环境干扰,短时间内无法通讯成功。需要询问用户手机位置和当时环境状态,如果都以上没有问题,可能是其他问题,需要研发分析;
HCI_ERR_HOST_REJECT_SECURITY 0x0E //因为安全原因被拒绝
HCI_ERR_PEER_USER 0x13 //手机侧主动断开,这个原因可能是用户主动在手机侧点击发起断开或者手机侧遇到问题调用了手机侧断开接口,导致连接断开,此原因需要先问清用户当时情况是否有主动操作;
HCI_ERR_CONN_CAUSE_LOCAL_HOST 0x16 //车机侧主动断开,这个原因可能是用户操作车机断开,或者车机侧有其他情况导致连接断开,需要先问清用户当时是否操作;
《勿吝赞》
佳作处处现,
点赞莫嫌烦。
拇指轻一动,
善意心中传。
此篇博客如对您有帮助,请 “点赞” “评论”“收藏”一键三连 哦!