- 2022-04-24 (Sun) 13:36
- 一般
Raspberry Pi でエアコンの操作をしようと思って色々と準備したらエアコンのリモコンの信号が長すぎてうまくいかないという……
とりあえず,信号の立ち上がり/立ち下がりの回数が 512回までとかいう制限に引っかかった.これについては ここら を見つつ v4l を自前でビルドして ir-ctl を新しくしたら解決.
これで問題解決したかなと思ったら,次に信号全体の長さ(pulse/space の長さの和)が 0.5秒(500,000us)を超えると Invalid argument で落ちるという罠が…… これの解決はカーネルモジュールをイジらないとダメそう.
エラーを返しているのは ir-ctl.c の関数 lirc_send が送信用デバイスに波形情報を書き込んでるところ(ret = TEMP_FAILURE_RETRY(write(fd, f->buf, size));)で,たぶんこの write から drivers/media/rc/lirc_dev.c の lirc_transmit が呼ばれることになってその中のチェックで落ちてる気がする.そのチェックは信号の長さの和を IR_MAX_DURATION と比較してて,その IR_MAX_DURATION は include/media/rc-core.h で 500ms にされている.これを大きくすれば通りそうな気もするのだけど…… そもそもこの 0.5秒制限は何のためにあるんだろう?
ということで,なんとなく原因は見えたのでまたそのうち修正版のカーネルかモジュールを作って差し替えて試してみよう.
- Newer: ことはじめ