ユーザー名:

パスワード:


パスワード紛失

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

アドバンスの件、解決しました。

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

アドバンスの件、解決しました。

msg# 1.8
depth:
1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-11-8 21:34 | 最終変更
disklessfu  <EXPERT>   投稿数: 198
warpさん、いろいろありがとうございます。


急転ですが、全て解決しました。


まず、先日から私が「当方手持ちのバージョンでは送信に問題がある」と騒いでいましたが、
これは、全くの勘違い、というか、検証作業のミスでした。表計算シートの計算式のミスでした。
どのツールを使っても送信に問題はありませんでした。


次に、warpさんから指摘の、ダイキンエアコンだと bto_advanced_USBIR_cmd での受信に問題が発生する件ですが、

やはりmsg# 1.3.1.1.1に書いた
>でも同じファームウェアバージョンであっても、Windows用の最新ツールから使えば、その症状は出ないという
>ことなので、もしかすると、まだ使ったことのない関数なんかがあって、それを使ってファームウェアの
>設定を調整してやれば、解消する問題なのかもしれません。
>でもライブラリの取扱説明書r03にそのような記述はありません。
このような線の問題でした。


症状は正確には、「先頭以外で30msを越えるON、もしくはOFFがあると、そこで受信が終了する」
というものでした。

これは、bto_advanced_USBIR_cmd のポーティング元ソース、USB_IR_Library_v4.1.0 の時点で既に、
読み込める最長のON時間もしくはOFF時間を“わざわざ”30msに制限していたためでした。

bto_advanced_USBIR_cmdはUSB_IR_Library_v4.1.0を機械的にポーティングしたものなので、その制限も受け継いでいたわけです。


bto_advanced_USBIR_cmdの方で制限を解くためには、

bto_advanced_USBIR_cmd.c:1196行目からの、
const uint ir_read_stop_on_time = 0x0008; // 読み込み停止 ON時間
const uint ir_read_stop_off_time = 0x0474; // 読み込み停止 OFF時間 30ms = 30ms / 38kHz = 1140 =0x474

// パラメータチェック
if (devh != NULL && IR_FREQ_MIN <= freq && freq <= IR_FREQ_MAX)
{
// データセット
outbuffer[0] = 0x31;
outbuffer[1] = (byte)((freq >> 8) & 0xFF);
outbuffer[2] = (byte)(freq & 0xFF);
outbuffer[3] = 1; // 読み込み停止フラグ 停止あり
outbuffer[4] = (byte)((ir_read_stop_on_time >> 8) & 0xFF); // 読み込み停止ON時間MSB
outbuffer[5] = (byte)(ir_read_stop_on_time & 0xFF); // 読み込み停止ON時間LSB
outbuffer[6] = (byte)((ir_read_stop_off_time >> 8) & 0xFF); // 読み込み停止OFF時間MSB
outbuffer[7] = (byte)(ir_read_stop_off_time & 0xFF); // 読み込み停止OFF時間LSB

を、

//const uint ir_read_stop_on_time = 0x0008; // 読み込み停止 ON時間
//const uint ir_read_stop_off_time = 0x0474; // 読み込み停止 OFF時間 30ms = 30ms / 38kHz = 1140 =0x474

// パラメータチェック
if (devh != NULL && IR_FREQ_MIN <= freq && freq <= IR_FREQ_MAX)
{
// データセット
outbuffer[0] = 0x31;
outbuffer[1] = (byte)((freq >> 8) & 0xFF);
outbuffer[2] = (byte)(freq & 0xFF);
outbuffer[3] = 0; // 読み込み停止フラグ 停止あり
outbuffer[4] = 0; // 読み込み停止ON時間MSB
outbuffer[5] = 0; // 読み込み停止ON時間LSB
outbuffer[6] = 0; // 読み込み停止OFF時間MSB

に修正すればOKです。
lircで実際の波形を送信しての受信テストもおこなっています。


近いうちに、正式な修正版をアップしたいと思います。

あと、先日 https://pastebin.com/TEeQt7p5https://pastebin.com/3F1w2Fue がデジタル的に同一と書きましたが、
正しくは、後半が微妙に違う命令でした。
イイね!の数:0
返信する

この投稿に返信する

題名
投稿本文

投稿ツリー

  条件検索へ