Android Make a Bluetooth Low Energy(BLE) GATT server 3

사용 언어: Kotlin 1.6.10
사용 버전: Android Studio 2020.3.1 Patch 4

안드로이드 Make a Bluetooth Low Energy(BLE) GATT server 3을 알아보겠습니다.


저번 시간 연결까지 해봤는데요. 이번에는 Characteristic 읽고 쓰기 응답을 해보겠습니다.

GATT Client에서 읽기 요청을 보내면 적절한 응답을 해줘야 합니다.

읽기 응답을 해보겠습니다.
저번 시간에 만든 BluetoothGattServerCallback()에 onCharacteristicReadRequest()를 override 합니다.






device는 client의 device 정보, requestId는 요청 순서, offset은 데이터를 읽는 시작 위치, characteristic은 읽기를 요청한 characteristic 정보가 들어가 있습니다.


sendResponse로 Client에게 요청에 대한 응답을 보냅니다. 이 응답 과정이 없으면 Client는 응답 대기 상태로 멈추거나 BLE 연결이 끊깁니다. characteristic의 value를 확인해서 null이 아니면 BluetoothGatt.GATT_SUCCESS를 보내고, 값을 보냅니다.

만약, characteristic이 null이라면 BluetoothGatt.GATT_FAILURE를 반환합니다.






이번에는 쓰기 요청 응답을 해보겠습니다.

onCharacteristicWriteRequest()를 override 합니다.

여기도 Read와 똑같습니다.

device는 Client 장치의 정보, requestId는 순서, characteristic은 어떤 characteristic에 Write 요청을 한 건지, preparedWrite는 모르겠네요, responseNeeded는 true 면 response가 필요하고, false 면 no response입니다. offset은 읽을 시작 위치, value는 쓰기 값입니다.





여기에 값에 따라 characteristic 값을 변경하는 코드를 넣어보겠습니다.

value를 읽어서 특정 값이면 readCharacteristic의 값을 setValue로 바꾸는 코드입니다.

여기서는 푸른을 넣으면 읽기 Characteristic에 별이 들어가고, 따뜻한을 넣으면 다른 읽기 Characteristic에 사람이 들어갑니다.

그리고 응답이 필요하면 sendResponse를 해줍니다. 보통 Write는 No Response를 많이 해줘서 없어도 되긴 합니다.






다음 시간에는 Notification을 하는 법을 알아보겠습니다.



끝.


카테고리: Android


댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)