OKDCC
開発メモ
code:図
タイムスタンプ列
│
〈ストリーミングパース〉
↓
ビット列
│
〈ストリーミングパース〉
↓
バイト
│
〈パース〉
↓
パケット
done dcc_decodeSignals dcc_writesSignalBuffer dcc_readsSignalBuffer 要らない
done |= にできる
code:dcc.c
parser->inByte.byte = parser->inByte.byte | (bit << (7 - parser->inByte.bitCount));
DCC_BITS32_C DCC_BIT_C 使ってるところほとんど使わなくていいかも
演算子使うと int 昇格されるので
int が 16 ビットの環境かもしれんな(int は少なくとも 16 ビット)
done DCC_BIT_C は要らないでしょ
done dcc_validatePacket も dcc_Result を返そう
done ドキュメントコメントをヘッダーファイルに
マイコンに電気信号を取り込むために降圧回路を考える
ツェナーダイオードとトランジスターを使ったシリーズレギュレーター
done dcc_minOneHalfBitSentPeriod など dcc.c でしか使わないものは宣言に static を付ける
done ブロックで囲う
decode や feed_* のテストを書く
テストケース作るのがわりと大変
TEA 類似のフレームワークで UI 作る
X11 のときボタンのラベルをクリックするか、何かキーでそれ相当の入力にしたい
doneディレクトリー分け変えたい
UI といっても、モニター、デコーダー、コマンドステーション、それぞれある
ロジックのほんまのコア
code:deps.mmd
graph TB
ui/monitor --> ui
ui/command-station --> ui
mock/x11/monitor --> ui/monitor
mock/m5stack/monitor --> ui/monitor
app/m5stack/monitor --> ui/monitor
app/m5stack/monitor --> logic
app/m5stack/monitor --> electric?
test/unit --> logic
test/m5stack/voltage --> electric?
ui 汎用 UI ライブラリー
logic DCC 処理
electric? 電気関係?
ui/monitor モニター画面
ui/command-station コマンドステーション画面
mock/x11/monitor X11 で動くモニターモック
mock/m5stack/monitor M5Stack で動くモニターモック
app/m5stack/monitor ホンチャンのモニター
test/unit logic の単体テスト
test/m5stack/voltage M5Stack で電圧変化を見たりするやつ
技術検証
割り込み
時刻(クロック数)取得
DCC 信号入力
なんかどっかの段階で arduino の board 情報が M5Stack-Core-ESP32(esp32:esp32:m5stack-core-esp32)から M5Core(esp32:esp32:m5stack_core)に変わった?
GPIO 入力電圧 ハイは VDD が 3.3 V として 2.48 V ~ 3.6 V。
線路電圧 12V 時に 2.48 V にするには 3.8:1 の分圧、このとき線路電圧が 16V なら 3.3V。17V まではいける計算。
線路電圧 16V 時に 3.6V にするには 3.5:1 の分圧、このとき線路電圧が 12V なら 2.7V。
線路電圧 18V 時に 3.6V にするには 4:1 の分圧、このとき線路電圧が 12V なら 2.4V。
done DCC 機能を抜きにしてログだけでメモリー例外になるかためす
done 「ずらしてためす」のは decode じゃなくて feedSignal でした方がいいかも
done 上に関連して feedBit も自前で状態リセットした方が統一感がある
done 内部向けヘッダーと外部向けヘッダーを分けよう
done BUILD_DIR を絶対パスにしよう
table:パケット
タグ 構造体 共用体 パーサー 文字化
基本パケット
機関車デコーダー用速度・方向 ✔️ ✔️ ✔️ ✔️ ✔️
全デコーダー用リセット ✔️ ➖ ➖ ✔️ ✔️
全デコーダー用アイドル ✔️ ➖ ➖ ✔️ ✔️
全デコーダー用ブロードキャスト停止 ✔️ ✔️ ✔️ ✔️ ✔️
拡張パケット
多機能デジタルデコーダー用命令パケット
デコーダー制御命令と編成制御命令
デコーダー制御
デジタルデコーダーリセット ✔️ ✔️ ✔️ ✔️ ✔️
強制リセット ✔️ ✔️ ✔️ ✔️ ✔️
工場試験命令 ✔️ ✔️ ✔️ ✔️ ✔️
デコーダーフラグの設定 ✔️ ✔️ ✔️ ❌ ❌
拡張アドレスの設定 ✔️ ✔️ ✔️ ❌ ❌
デコーダー応答要求 ✔️ ✔️ ✔️ ✔️ ❌
編成制御 ✔️ ✔️ ✔️ ✔️ ✔️
発展的制御命令
128段階速度制御 ✔️ ✔️ ✔️ ✔️ ✔️
制限された速度制御命令 ✔️ ✔️ ❌ ❌ ❌
アナログ機能群 ✔️ ✔️ ❌ ❌ ❌
速度方向命令 ✔️ ✔️ ❌ ❌ ❌
第1機能群命令 ✔️ ✔️ ❌ ❌ ❌
第2機能群命令 ✔️ ✔️ ❌ ❌ ❌
機能拡張命令
2値状態制御命令(長形式) ✔️ ✔️ ❌ ❌ ❌
2値状態制御命令(短形式) ✔️ ✔️ ❌ ❌ ❌
F13~F20 機能制御 ✔️ ✔️ ❌ ❌ ❌
F21~F28 機能制御 ✔️ ✔️ ❌ ❌ ❌
CV 読み書き命令
CV 読み書き手順(短式)
CV 読み書き手順(長式)
アクセサリーデジタルデコーダーパケット形式
基本アクセサリーデコーダーパケット
拡張アクセサリーデコーダー制御パケット
table:パケット ドキュメント
タグ 構造体 パーサー 文字化
基本パケット
機関車デコーダー用速度・方向
全デコーダー用リセット ➖
全デコーダー用アイドル ➖
全デコーダー用ブロードキャスト停止
拡張パケット
多機能デジタルデコーダー用命令パケット
デコーダー制御命令と編成制御命令
デコーダー制御
デジタルデコーダーリセット
強制リセット
工場試験命令
デコーダーフラグの設定
拡張アドレスの設定
デコーダー応答要求
編成制御
発展的制御命令
128段階速度制御
制限された速度制御命令
アナログ機能群
速度方向命令
第1機能群命令
第2機能群命令
機能拡張命令
2値状態制御命令(長形式)
2値状態制御命令(短形式)
F13~F20 機能制御
F21~F28 機能制御
CV 読み書き命令
CV 読み書き手順(短式)
CV 読み書き手順(長式)
アクセサリーデジタルデコーダーパケット形式
基本アクセサリーデコーダーパケット
拡張アクセサリーデコーダー制御パケット
table:パケット テスト
parse show
基本パケット
機関車デコーダー用速度・方向 ✔️
全デコーダー用リセット ✔️
全デコーダー用アイドル ✔️
全デコーダー用ブロードキャスト停止
拡張パケット
多機能デジタルデコーダー用命令パケット
デコーダー制御命令と編成制御命令
デコーダー制御
デジタルデコーダーリセット
強制リセット
工場試験命令
デコーダーフラグの設定
拡張アドレスの設定
デコーダー応答要求
編成制御
発展的制御命令
128段階速度制御
制限された速度制御命令
アナログ機能群
速度方向命令
第1機能群命令
第2機能群命令
機能拡張命令
2値状態制御命令(長形式)
2値状態制御命令(短形式)
F13~F20 機能制御
F21~F28 機能制御
CV 読み書き命令
CV 読み書き手順(短式)
CV 読み書き手順(長式)
アクセサリーデジタルデコーダーパケット形式
基本アクセサリーデコーダーパケット
拡張アクセサリーデコーダー制御パケット