프로토콜을 바꾸고자 합니다.
potados99 opened this issue · 0 comments
potados99 commented
배경
기존의 프로토콜
4비트에 센서 인덱스, 4비트에 센서 값, 총 1바이트씩 12번 전송. 총 12byte
2020년 4월 13일 오전 4시 5분 새로운 제안
4비트에 센서 값을 담아 총 12개, 즉 48bit = 6byte
문제점
애플리케이션 관점에서
모바일 앱에서는 12개의 샘플을 하나의 단위로 취급합니다. 따라서 12개의 데이터가 모였을 때에 이를 알고 처리해야 합니다.
해결 방안
이를 위해서 다음 두 가지 방법을 생각할 수 있습니다:
- 데이터 유닛의 길이 고정하기
- 데이터 유닛의 끝에 delimiter 추가하기
전자는 이 데이터 길이가 일정한 현재 상황에 적합한 듯 보입니다. 하지만 도중 연결에 변화가 생겨 샘플 순서가 교란되었을 때에 이를 해결하기 힘들다는 단점이 있습니다.
두 번째 방법은 패킷의 길이가 늘어난다는 단점이 있습니다. 하지만 통신 장애가 발생하더라도 delimiter의 존재로 인해 12개 이상의 샘플 손실은 발생하지 않습니다. 따라서 delimiter를 사용한 새 프로토콜을 제안합니다.
새로운 제안
센서 값 하나당 1바이트. 인덱스는 따로 표기하지 않음. Delimiter는 0xFFFFFFFF(-1). 전체 길이 13byte.
예제 코드:
int delimiter = -1;
void dumpInput(void) {
int value = 0;
for (int i = 0; i < 12; i++) {
value = analogRead(pin[i]) << 8;
SerialBT.write(value);
}
SerialBT.write(delimiter);
}