Closed akif999 closed 1 year ago
Configure()
の引数に machine.PinMode を渡してるけど、 out / out / in にしか設定予定はないと思うので引数にする理由はないかな、と思います。
一方で SetMode(Mode0) にしているけど、その部分こそ引数にすべきなのでは?
SetMode するごとに 30ms 待ってしまうので。
↑ https://github.com/akif999/drivers/pull/5#issuecomment-1423455735
c816575b309c6b0462a5f4465bdc3e5fb223ac05 にて対応しました。
Configure() の引数に machine.PinMode を渡してるけど、 out / out / in にしか設定予定はないと思うので引数にする理由> はないかな、と思います。
どこかで Pulldown するか否かをユーザーで決めれられた方がよい、みたいなコメントをいただいて変えた記憶なのですが、どんな話だったか忘れてしまいました。 再考すると ↑ の通り out / out / in しかないと考えられるため、固定に変更しました。
一方で SetMode(Mode0) にしているけど、その部分こそ引数にすべきなのでは? SetMode するごとに 30ms 待ってしまうので。
起動時の Mode を引数とするように変更しました。
Makefile の smoke-test に ./examples/e220 以下を追加してください。 現状、 rx 側のビルドが通らないはず。
Makefile の smoke-test に ./examples/e220 以下を追加してください。 現状、 rx 側のビルドが通らないはず。
一旦 a445b1a839dfdb8182c5e42350e1c2b6c38e5dbe へ commit できていなかった変更を push しました。 続けて 39e9f5f7b50d38e979eb3f21ba3a809637c94b79 にて smoketest を追加しました。
https://github.com/akif999/drivers/pull/5#discussion_r1100962681 に関連して。 return を入れるように修正したことで以下がわかったので対応しました。
Device.Configure()
にてE220 の起動時の Mode を設定するよう c816575b309c6b0462a5f4465bdc3e5fb223ac05 にて変更していましたが、Configure の中で SetMode すると、その後すぐに E220 へ UART 送信するとギリギリ E220 の起動時のシーケンス完了より早くなってしまい、examples の ReadConfig の処理が失敗していることがわかりました(下図参照)。
よって対策として以下の commit で Device.Write()
同様にAUX Pin を監視してデバイス送受信可能になってから UART.Write()
するように変更しました。
162b07fac227c9752d3dca1af9a6754e1a5936e8
(これで SetMode の 30ms 待ちも特に意味はなくなるので、削除してもよいかもしれません)
Aux ピンで見れるならそれで OK ですね。 その場合、いったんは Aux ピン必須、としておくのがよさそう。 ※ Aux を machine.NoPin にするアイディアがあったが、いったん取りやめたほうがよさそう
Aux ピンで見れるならそれで OK ですね。 その場合、いったんは Aux ピン必須、としておくのがよさそう。 ※ Aux を machine.NoPin にするアイディアがあったが、いったん取りやめたほうがよさそう
Aux Pin 必須は、example のコメントとして足す、という対応で良さそうでしょうか。 (Device.New をする時点の引数 aux は nullable な値でなく、あり/なしのチェックができないためこの対応くらいかなと考えました)
e14f7eebcbc1cd413bcbf40ad630b4a3a507fbff にて buildtag を足しました。 これで machine package がないことによる fail はしなくなりましたが、unittest でこけている状態です。 まだ以下のメッセージで何がこけているかが理解できていないのでもう少し確認します。
ok tinygo.org/x/drivers/tester 0.003s
FAIL
make: *** [Makefile:270: unit-test] Error 1
Error: Process completed with exit code 2.
Aux ピンで見れるならそれで OK ですね。 その場合、いったんは Aux ピン必須、としておくのがよさそう。 ※ Aux を machine.NoPin にするアイディアがあったが、いったん取りやめたほうがよさそう
Aux Pin 必須は、example のコメントとして足す、という対応で良さそうでしょうか。 (Device.New をする時点の引数 aux は nullable な値でなく、あり/なしのチェックができないためこの対応くらいかなと考えました)
試しに各処理の wait 処理をすべて削除してみたところ、E220 起動時前の AUX Pin の状態を読んですぐに送信を開始してしまっている。 よって、Configure の際に起動時間 + 10ms 程度待ってから処理を開始するようにした方が良さそう。 (これでもリセットスタート後の「プログラム実行開始」よりも「3v Pin からの電流出力開始」が極端に遅い、というようなマイコンが存在しない限りは問題ないと考られる)
↑ の考えに沿って wait 処理を最適化した commit を以下で積みました。 52265ee16b7aaf5ba97ee35bb545f365351a6ccb
上記以外は良さそう。
追加で不要な buildtag の削除を commit した。 それ以外は解決済みのため merge する。
https://github.com/akif999/drivers/issues/2#issuecomment-1414572421 より、要件は以下の引用の通り。
Write()
にて addr 、 ch、送信方式(Transparent mode or fixed mode)に従って送信するように変更 (8def5b19fcfa1ca12ee301c552b48b8f73834da7 )Device
へ設定できるように変更Write()
にて送信方式に従って、addr、 ch の設定を する/しないを 分岐するように変更WriteMsg()
を削除 (89ec889b309725da74f57746afd80a340ae4e2f8)examples/e220/tx_writer
を更新 (89ec889b309725da74f57746afd80a340ae4e2f8)examples/e220/rx_reader
、examples/e220/tx_writer
をexamples/e220/rx
、examples/e220/tx
へ merge (2b28abb6f74a5eae41daaeb07e3ed495ece9a887)Write()
) 内の E220 が送信な可能状態になることを待つ処理へタイムアウトを追加 (b4cd3cd2c99427fa94a538b34710276a70c568b4)