Community

[Bluetooth 2.1 모듈의 빠른 데이터 송수신을 위한 전략] “Bluetooth 모듈과 Native Android Application 사이에 10ms 내외의 지속적인 데이터 통신을 하려면

[Bluetooth 2.1 모듈의 빠른 데이터 송수신을 위한 전략] “Bluetooth 모듈과 Native Android Application 사이에 10ms 내외의 지속적인 데이터 통신을 하려면 어떻게 해야할까?” 지금 학부생인 입장에서 굉장히 흥미로운 주제였습니다. Google에 업로드 되어 있는 “Bluetooth classic module data transfer example”은 지속적으로 빠른 지연시간에 대응하는 방법은 나와있지 않았습니다. 위 챌린지를 가지고 약 3개월 간 학업과 병행하며 프로젝트를 진행해보았습니다. 결론은 Thread와 Queue를 사용하여 해결했습니다. JSON 형태로 되어 있는 하나의 Packet을 Bluetooth module로 보내고, Android Application에서 수신하였을 때 데이터를 바로 처리하지 않고, Queue에 바로 집어넣는 겁니다. Bluetooth로 첫 데이터가 수신 되었을 때 Queue에 쌓이는 데이터를 내가 원하는 데이터로 변환시키는 Thread를 실행시키고, Handler를 이용해서 변환된 데이터를 표시하고 싶은 Activity랑 연결하였을 때 10ms 내외의 지속적인 빠른 통신이 가능했습니다. Q. Queue에 Enqueue 하는 시점에 Dequeue를 하면 Lock이 걸려서, 데이터가 유실될 수 있지 않나요? A. Android에서 Thead safe queue를 담당하는 ConcurrentQueue라는 자료구조가 있었습니다. 이 자료구조는 Dequeue를 하는 시점에서 Enqueue가 진행되고 있는지 알 수 있어서, Enqueue가 진행되고 있을 때 기다리다가, Dequeue를 할 수 있습니다! 두서 없는 글이였지만, Google에 이와 관련된 Example이 나오지 않아 공유해드립니다!

알림

알림이 없습니다