役割 | 論理ID | 周波数チャンネル | UARTモード | オプションビット |
---|---|---|---|---|
バス部 | 1 = 0x01 | 21,22,23 | B | 00001000(応答メッセージ無し) |
ミッション部 | 2 = 0x02 | 21,22,23 | B | 00001000(応答メッセージ無し) |
地上局 | 0 = 0x00(親機) | 21,22,23 | B | 00000000(オプション無し) |
- ハウスキーピング(HK)データ: ロケットの状態を示すデータ
- シーケンス進行状況
- エラー回数
- ミッションデータ: 観測したデータ
- GPS
- 3軸加速度
- 3軸角速度
- 気温
- 気圧
-
書式モードには簡易形式と拡張形式がある
-
簡易形式で受信できるパラメータ
- コマンド種別(0x80未満)
- バイト列
-
拡張形式で受信できるパラメータ
- 応答ID
- 送信元拡張アドレス
- 自拡張アドレス(論理IDのみの時は0xFFFFFFFF)
- 通信品質
- バイト列
現在のライブラリの実装では簡易形式,拡張形式の両方で送受信できる. まあ自明に簡易形式の方が楽だが,LQIを取りたいので定期的に拡張形式も使いたい.
現在のライブラリの実装では,
- 指定した構造体を受信する
- とりあえずバッファに受信する
の2種類の受信方法がある. が,ガンガン複数種類のパケットを送ってガンガン受信したいし,少なくとも地上局では応答メッセージも見たい. なので,
- とりあえずパケットが来たらバッファに溜め込む
- なんらかの方法で受信データ種類を判別
- それぞれの種類のデータを読む というのを無限ループの中でやっていく.
ここで問題になるのがどうやってデータ種別を判別するか->簡易形式のコマンド種別と拡張形式の応答IDでいいじゃん
応答ID | 型 | 種類 |
---|---|---|
0x00 | uint8_t | シーケンス進行状況(バス部) |
0x01 | uint8_t | シーケンス進行状況(ミッション部 |
0x02 | uint8_t | 縦解放機構ロック解除 |
0x03 | uint8_t | 縦解放機構ロック |
0x04 | uint8_t | フライトモードON |
- フライトモード移行コマンドASCII版 :01A002FF00X
- コマンド種別は0x80未満なことに注意
- 最初にuint32_tがついている場合はタイムスタンプ付き
コマンド種別 | バイト数 | データ構造 | データ種類 |
---|---|---|---|
0x00 | N | char * N | 困った時の文字列 |
0x01 | 10 | uint32_t + uint16_t * 3 | 3軸加速度 |
0x02 | 10 | uint32_t + uint16_t * 3 | 3軸角速度 |
0x03 | 6 | uint32_t + uint16_t | 水密部温度 |
0x04 | 8 | uint32_t + float(4) | 気温 |
0x05 | 8 | uint32_t + float(4) | 気圧 |
0x06 | 8 | uint32_t + float(4) | 高度 |
0x07 | 5 | uint32_t + uint8_t | GPSフラグ |
0x08 | 10 | uint32_t + (uint32_t + uint16_t) | GPS測位時刻(UTC) |
0x09 | 16 | uint32_t + (uint32_t + uint16_t) * 2 | GPS緯度経度 |
0x0a | 16 | uint32_t + (uint32_t + uint16_t) * 2 | GPS高度(海抜高度, ジオイド高度) |
0x7f | ? | ? | reserved |