0.1.0 • Published 2 years ago

@fujiy/wccp v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

WASA Common Command&Telemetry Protocol

コマンドおよびテレメトリに用いる,統一されたシリアライズフォーマット.

目的

コマンドやテレメトリのフォーマットを規定する. バイナリ形式でデータを表現することで,テキストフォーマットと比べてデータサイズを削減する.

パケットの内容についてはスキーマレス,すなわちパケットの定義を知らなくてもある程度はデコード可能とする.これにより各所でスキーマ定義を共有する手間を削減し,迅速な開発を可能にする.

CANやUARTを用いた有線通信,LoRa等による無線通信,SDカードへの記録等に用いる. バスによって接続された同一システム内におけるのローカルな情報のやり取りに加えて, 無線等により連携した複数の独立したシステム間の通信にも用いる.

パケットフォーマット

パケットを情報の単位とする.パケットはヘッダ部と,0以上32未満のエントリからなる. エントリの順序は保持されなければならない.

項目サイズ
ヘッダ4 byte
エントリ*N1N ~ 5N byte
CRC81 byte

ヘッダ

項目サイズ備考
種別1 bit0:コマンド,1:テレメトリ
パケット種別ID7 bit0x7F以外の値.基本的にASCIIコードにおける英数字
送信元システムID3 bit0: ローカル
送信元ノードID5 bitバス内におけるノードID(後述)
送信先システムID3 bit0:リモートに送信しない,0b111:ブロードキャスト
エントリ数5 bitエントリの数.パケットのバイト数ではない
シーケンス番号8 bit送信元ノード毎にインクリメントされる値

エントリ

エントリはデータの種類を表すタイプと,データ自体であるペイロード部からなる. 一つのパケットの中に同じタイプのエントリが含まれていてもよく, その場合は配列のように解釈すると便利である.

項目サイズ
タイプ1 byte
ペイロード0~4 byte

タイプ

ユーザーが指定するタイプは64~127の範囲の値,ASCIIコードでA~Z, a~zを基本とし, その下位6bitを用いる.上位2bitはペイロードのサイズ(バイト数)を表す.

上位2bitとペイロードのサイズの対応は

  • 11: 4 byte
  • 10: 2 byte
  • 01: 1 byte
  • 00: 0 byte

である.

ペイロード

ペイロードは0~4byteのリトルエンディアンのバイト列である. バイト列をどのデータ型として解釈するかは自由である. 言い換えると,パケットのデータのみを見てデータ型を判別することはできず, 別途スキーマを知っている必要がある.

データ型が何であるかにかかわらず,ペイロードの上位2あるいは3あるいは4 byteが0x00である場合には, そのバイトを省略してサイズを決定する.

データ型

標準でサポートする,ペイロードのデータ型を解釈する方法を以下に示す.

データ型サイズ (byte)
bytes4
uint324
uint162
uint81
int324
int162
int81
float324
float162
void0

符号付き整数は2の補数,浮動小数点数はIEEE 754で定められた表現である. float16は半精度浮動小数点数(10進で約3桁の精度)である.

バス

上述のパケットプロトコルを用いたバスについて規定する.

共通規定

ノードID

ハートビート

CAN バス

拡張ID (29 bit)

項目サイズ
種別1 bit
パケット種別ID7 bit
送信元システムID3 bit
送信元ノードID5 bit
IDフィールド8 bit
フレーム番号5 bit

UART バス

モジュール間をUARTでデイジーチェーン接続する. モジュールあたり2つのUARTを使用する. 両端同士を接続してリング状にすることで信頼性を向上させる.

Node ID

フォーマット

項目サイズ
Node ID1 byte
シーケンス番号1 byte
パケット3~ byte

上位レイヤー

共有変数

0.1.0

2 years ago