Android 4.2.2 설정 페이지에서 HID 장치를(키보드, 마우스등)을 패어링 및 연결한 후,
연결을 해제 하고 호스트에서 다시 연결요청하는 경우에 발생하는 Bluedroid에서 출력하는 에러 메시지 이다.
Bluetooth HID SpecV1.1 을 보면 장치가 가지는 Attribute에 대한 내용이 있다. 위 에러와 관련된 것은
HIDReconnectInitiate(5.3.4.6) 과 HIDNormallyConnectable(5.3.4.14) 이다.
HIDReconnectInitiate(5.3.4.6) 값은 HID 장비(호스트 아님)가 reconnection process를 초기화 할것인지에 대한
Boolean 값이다. 이 값이 True이면 연결이 끊어지게 되면 자동으로 호스트에 연결이 가능하도록 page mode로
들어간다고 되어 있다. 재연결은 HID 장비(호스트 아님)가 새로운 데이터를 보내는 경우에 발생한다.(유저가
키를 누르는 행위 같은). 즉, 연결이 끊어진 경우 바로 재 연결이 이루어 지는 것이 아니다.
HIDNormallyConnectable(5.3.4.14) 값은 연결이 비활성화 된 상태인 경우 Page Scan Mode에 있을지를 결정하는
Boolean 값이다. 이 값이 TRUE 이면, 호스트의 연결 요청에 응답가능한 상태로 유지된다. FALSE인 경우는 활성화된
연결이 없는 경우 Bluetooth의 radio를 완전히 꺼버릴 수 있다. 따라서 이 값을 이용해 전력 소모를 줄일 수 있는 것이다.
Bluedroid의 경우 이 스펙에 맞도록 작성되어 있다. 따라서 HIDNormallyConnectable 값이 FALSE이고 HIDReconnectInitiate
값이 TRUE인 장비는 호스트에서 연결 요청을 할 수 없다.
코드
#define HID_NORMALLY_CONNECTABLE 0x0002 // HIDNormallyConnectable
#define HID_RECONN_INIT 0x0004 // HIDReconnectInitiate
로그
attr_mask = 0x81f5
attr_mask 값을 보면 HIDNormallyConnectable 값이 FALSE이고 HIDReconnectInitiate TRUE 임을 알 수 있다.
로그(logcat)
D/BluetoothAdapterService(1110102304)( 3685): getState(): mAdapterProperties: com.android.bluetooth.btservice.AdapterProperties@422ad4d0
[ 4135.690000] tcc-wm8524 tcc-wm8524: dapm: unknown pin Headset Jack
[ 4135.700000] [set_dma_outbuffer], original len[32768]
E/audio_hw_primary( 1024): start_output_stream() persist.sys.spdif_setting=0
D/BluetoothAdapterService(1110102304)( 3685): getState(): mAdapterProperties: com.android.bluetooth.btservice.AdapterProperties@422ad4d0
D/BluetoothInputDevice(11871): connect(20:12:12:07:DA:77)
D/BluetoothAdapterService(1110102304)( 3685): getState(): mAdapterProperties: com.android.bluetooth.btservice.AdapterProperties@422ad4d0
W/bt-btif ( 3685): btif_hh_connect: Device 20:12:12:07:DA:77 already added, attr_mask = 0x81f5
E/bt-btif ( 3685): btif_hh_connect: Error, device 20:12:12:07:DA:77 can only be reconnected from device side
W/HidService( 3685): no state change: 0
D/CachedBluetoothDevice(11871): Command sent successfully:CONNECT Address:20:12:12:07:DA:77 Profile:HID
E/audio_hw_primary( 1024): Device Name Normal Play