ユーザー名:

パスワード:


パスワード紛失

新規登録
ビートス オンラインショップへ
アブソリュート株式会社様へ

赤外線送信がドロップされる不具合

このトピックの投稿一覧へ

赤外線送信がドロップされる不具合

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2017-3-31 21:26
ryahp  <ROOKIE>   投稿数: 2
PCから赤外線命令を送信するときに一定の確率で送信に失敗し、データ無しのIRコードを送信する現象が起きていました。そのため、単発の命令を送っても何も起こらないことがよくありました。

打開策として自作のコマンドラインツールで命令を連続で二重に送ることにしてきましたが、最近コードを読み直していたところ単純なミスに気づきましたので報告いたします。

送信を実施するタイマー駆動の割込み式ルーチンでは送信データの有無を出力バッファ(uc_out_buff)の0番目のバイトにデータが書き込まれているかで判断し0以外の場合に送信を開始する。
しかしUSBから送信データが受信された場合(ReceivedDataBuffer)、出力バッファには0バイト目から順にデータがコピーされます。(2.1.0ソースでは1206行目付近)

> for(fi = 0; fi < OUTBUFFER_SIZE; fi++){
> uc_out_buff[fi] = ReceivedDataBuffer[fi+1];
> }

そのため、出力バッファの書き込みが終了する前に割込み式ルーチンが送信を開始し、フォーマット用のデータが不正だった場合、送信を中断してしまうことが起こりうる。

0バイト目のデータを最後に書き込むようにすると(たとえば次のように後ろから順にコピーする等)、この中断は起こらなくなります。

> for(fi = OUTBUFFER_SIZE-1; 0 <= fi; fi--){
> uc_out_buff[fi] = ReceivedDataBuffer[fi+1];
> }

というわけで、この部分を修正するとますます便利になると思いますので、ご検討よろしくお願いします。




以前からリモコン無しで入手したアンプ等をPCから連携制御するためとても重宝しています。

トップページのFWでは最近入手したONKYOのアンプが反応しなかったため、赤外線信号をUSBオーディオ入力で解析してみたときに実際に空のIR命令が出ることがあることに気付きました。
また、2.1.6でも対応しているそうですが(こちらでは未確認)全体的にタイミングが遅かったためTimer0の初期値を0xff79に調整しています(2.1.0では0xff6A)。
イイね!の数:0
返信する

この投稿に返信する

題名
投稿本文

投稿ツリー

  条件検索へ