WBPBP/preshoes-shoes

프로토콜을 바꾸고자 합니다.

potados99 opened this issue · 0 comments

배경

기존의 프로토콜

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);
}