Open-smartwatch protocol 분석 및 연구개발
Need a deep night and a smile.현재 개발하고 있는 스마트워치를 살펴보면 UI 적으로나 기능적으로 끌어올리고 있다. 센서 데이터를 통해서 가공하여 여러 앱으로 정보를 표현하는 Fitness App 을 만들었다. 그때 이러한 데이터와 동시에 모바일 데이터를 조합해 연동하여 더 기능을 확장하고 많은 API 와 데이터를 가공하려고 한다.
먼저 연동 시 사용하는 프로토콜에 대해서 알아봐야 하는데 시중에 기성 앱으로 사용되는 앱들의 프로토콜 데이터를 확인해볼 수 있다. 개발 시 기성 앱에 디바이스를 연결하여 오고가는 데이터를 역공학으로 캡쳐하고 해당 포로토콜 기반으로 Open-smartwatch 역시 그 기준을 맞춰가고자 한다. 본문에서는 Open-smartwatch 에서 개발된 프로토콜에 대한 spec 과 BLE 앱에서 송수신 되는 데이터에 대한 style 을 다룰 것이다.
OSW 프로토콜을 통한 클라이언트로 데이터 전송 규격
BLE 프로토콜을 후킹하여 read 와 write 할 때 송수신 데이터 확인
위는 BLE protocol 에서 송수신하는 부분을 확인하여 데이터를 확인하는 부분이다. 디바이스에서 전송되는 데이터에 대해서 어플리케이션에서 확인하는 것을 볼 수 있고 여러 차례 시도 시 실시간으로 반영되는 값을 볼 수 있다.
이에 대한 데이터 전송 포멧은 아래와 같다.
OSW 에서 전송하는 uint32_t
에 대한 전송 규격
위는 단일 데이터에 대한 전송 규격에 대한 설계이다.
디바이스의 데이터는 16진수 형태로 변환되며 디바이스에서 전송하는 표준 데이터는 4바이트 크기의 uint32
데이터이다. BLE 디바이스에서 지원하는 데이터 송신 규격은 1바이트이며 이를 보내기 위해 16진수 형태에서 1바이트로 쪼개기 위해 시프트 연산으로 8비트씩 나누어 진행하고 1바이트의 배열 형식으로 담는다.
OSW 에서 전송하는 uint32_t[]
에 대한 전송 규격
위는 멀티 데이터에 대한 전송 규격에 대한 설계이다.
디바이스의 데이터는 16진수 형태로 변환되며 디바이스에서 전송하는 표준 데이터는 4바이트 크기의 uint32
데이터이다. BLE 디바이스에서 지원하는 데이터 송신 규격은 1바이트이며 이를 보내기 위해 16진수 형태에서 1바이트로 쪼개기 위해 시프트 연산으로 8비트씩 나누어 진행하고 1바이트의 배열 형식으로 담는다.
멀티 데이터 경우 전송할 배열 크기만큼 추가적으로 갯수를 필요로한다.
uint32
경우 uint8
로 전송하기 위해 uint8_t[4]
이 필요하다. 만약 uint32_t[7]
배열 형식의 데이터를 보내야 한다면 uint8_t[4 * 7]
, 그러니까 uint8_t[28]
이 필요하다.
모바일 연결 연동
위는 프로토타입으로 구현된 기능으로 모바일 어플리케이션에서 디바이스를 연결시도한 케이스이다.
현재 부분으로 서버 부분을 구현하고 클라이언트 부분을 연동하도록 개발하려고 한다.
다음에는 본격적으로 클라이언트를 개발하고자 한다. 가능하면 모든 모바일을 통용하는 SDK 형태로 개발하는 방향을 생각하고 있으나 먼저 기성 플랫폼으로 개발된 어플리케이션에 포팅하여 테스트를 진행하고 후후 계획에서 개발을 진행하고자 한다.
If you find any errors, please let me know by comment or email. Thank you.