Programming

Bluetooth LE Example 이해하기

 2016. 7. 5. 22:41
반응형

Bluetooth LE Example 이해하기


안드로이드 BLE 기본 샘플

https://developer.android.com/samples/BluetoothLeGatt/index.html

 

1.     scanning

2.     connect to GATT server

3.     Attempting to start service discovery

4.     BluetoothLeService.java에서 만약 Bluetooth servicediscovered되면 sendBroadcast(ACTION_GATT_SERVICES_DISCOVERED)를 실행한다
DeviceControlActivity.java
BroadcastReceiver에서 이것의 callback 메세지를 받는다. displayGattServices(mBluetoothLeService.getSupportedGattServices())라는 말은 연결된 블루투스 기기의 제공해주는 서비스들의 정보를 받아와서 UI로 보여준다는 뜻이다.

5.     검색된 characteristic 중 하나를 클릭하면
READ, NOTIFY
에 따라 함수를 호출한다
if(( charaProp | characteristic.getProperties().PROPERTY_READ) >0)
BluetoothLeService
readCharacteristic(characteristic)을 호출한다
if(( charaProp | characteristic.getProperties().PROPERTY_NOTIFY) >0)
BluetoothLeService
setCharacteristicNotification(characteristic, true)를 호출한다

6.     readCharacteristic에서는 Bluetooth Adapter 유무를 확인한 뒤
다시한번 BluetoothGattreadCharacteristic(characteristic)을 호출한다
onCharacteristicRead
callback으로 받아준다. 여기에서 ACTION_DATA_AVAILABLEaction으로하고 characteristic를 담아서broadcastUpdate를 호출한다

7.     broadcastUpdate에서 목표로 하는 UUID가 맞는지 확인한다
별다른 설정이 없다면 else로 빠져서 HEX로 자료를 표시해주게 된다
EXTRA_DATA
라는 이름으로 HEXintent에 담아준다
sendBroadcast
intent를 전송한다

8.     전송된 intentDeviceControlActivitybroadcastReceiver가 받아준다
action
이 어떤 것과 일치하는지 확인한다 ACTION_DATA_AVAILABLEaction으로 받았기 때문에 dispalyData(intent.getStringEXtra(BluetoothLeService.EXTRA_DATA))를 호출하게 된다. intent에서 EXTRA_DATA에 해당하는 변수를 가져온다는 뜻이다. displayDataTextView에 설정되어 화면에 나타난다.

9.     setCharacteristicNotification에서는 readCharacteristic과 동일하게 Bluetooth 어뎁터가 정상적인지 확인하는 과정을 거치고 BluetoothGattsetCharacteristicNotification(characteristic, enabled)로 정보를 설정해준다.

10.  넘어온 characteristicUUID가 심박동 체크에 쓰이는 UUID 인 경우
descriptor
를 설정하고 writeDescriptor를 호출한다
예제코드에서는 심박동 체크에 대해서만 정보를 송신하기 때문에 이부분을 바꾸어주면 데이터를 전송할 수 있다

11.  아직 이유는 알 수 없지만 APP에서 정보를 읽을 때는 characteristic에서 getValue해서 그것을 HEX로 바꾸어 읽는다. 아마 getValuedescriptor를 읽어오는 과정으로 보인다

12.  그리고 정보를 보낼 때는 descriptor를 만들어서 그곳에 내용을 설정하고 characteristic에 올려서 전송한다


반응형