[짧은글] 블루투스 페어링 : sspmode 0
뻘짓

[짧은글] 블루투스 페어링 : sspmode 0

이상한 버그를 발견하여, 긴급하게 작성하는 글이라 다듬어지지 않고, 정제되지 않은 표현이 나올 수 있음을 미리 양해를 구합니다.

 

 

내가 페어링을 "하는 쪽" 이 아니라, 페어링 요청을 "받는 쪽" 이야기이다.

외부 기기에서 페어링이 붙기 위해서는 Discoverable 모드가 활성화 되어있어야 한다. 

자기 자신의 존재를 외부에 알려서 나한테 붙으시오~ 하는거다.

휴대폰에서 스캔된 장치를 눌러서 내 PC로 (또는 개발중인 임베디드 리눅스 장치로) 페어링 시도를 위해 PIN 입력 창을 띄우려면, sspmode 가 0으로 비활성화 되어야 한다.

현재 상태는 sspmode가 Enabled 상태. 그러니까 1 로 셋팅 되어있다는거다.

그런데 이놈을 끄려고 하면 안된다.

IO에 에러가 있다면서 불만을 토로한다. 당연히, sspmode가 꺼지지도 않는다.

그럼 이걸 어떻게 끄느냐...

 

우선 Discoverable 상태로 전환한다. piscan 옵션이다. 그리고 sspmode 를 설정 하는데, 이때 주의해야 할 것은 1로 셋팅한다.

Discoverable 상태에서는 sspmode 셋팅에 문제가 발생하게된다. 그러니까 지금 상황은, "키려고 했는데 에러를 고의로 낸 상황" 인것이다. 이렇게되면 sspmode가 켜지지 않은 상태가 되어버린다.

이후 장치를 리셋 해주면 sspmode는 Disabled 상태가 되어있다.

이후 noauth 설정도 먹이면 휴대폰에서 페어링을 시도할때 PIN 번호 입력 창까지 뜨게된다. (PIN 설정 방법은 이제 알아내야한다...)

 

결론 :

# hciconfig hci0 piscan

# hciconfig hci0 sspmode 1

# hciconfig hci0 reset

순서로 명령을 먹여주면 sspmode 설정에 버그인지 뭔지 확실하진 않지만, 어떤 사이드 이펙트 때문에 sspmode가 꺼지게된다.

 

+ 2021.12.16 : 그냥 dbus 쓰는게 나을것 같다. 조만간 dbus 를 통한 블루투스 페어링에 대해 포스팅 하겠다.