クロッサム2+などのプログラマブルな学習リモコンの信号データを、リモコン同士ツノつき合わせて学習させるのではなく、PC上で理想的な波形に合成するためのノウハウです。
信号データが合成できると、以下のようなメリットが期待できます。
・ なまっていない、きれいな信号が出せるようになるので、機器の反応が良くなる。
・ いつでも欲しいときにデータが合成できるので、学習したデータの保存に気を使わなくてもよくなる。
・ 機器付属のリモコンでは送れない、未知のコマンドを探求できる(笑)。
本稿では、東芝製 DVD/HDDレコーダーのリモコンを取り上げます。
(動作確認は RD-XS30 で行ないました)
リモコン信号の詳細
クロッサム2+用信号定義データへの変換方法
N504iS用データへの変換方法(調査中)
東芝製DVD/HDDレコーダーのリモコンコード
「NECフォーマット」と呼ばれているもの。
┌─────┬────────┬──────┬───────┬── │リーダー部│ データ部 │トレーラー部│リピートコード│… └─────┴────────┴──────┴───────┴──
・ リーダー部
ON(16T)→OFF(8T)
Tは(9/16)ms。
・ データ部
4バイト(32 bit)の送信データ。
データ「0」は ON(1T)→OFF(1T)
データ「1」は ON(1T)→OFF(3T)
なお、データの内容は
・ 最初の2バイトがカスタムコード(ベンダー/機器の識別)
・ 3バイト目がデータコード(コマンド等)
・ 4バイト目が3バイト目の補数(チェック用)
である(LSB first)。コードの具体的な値は後述。
・ トレーラー部
ON(1T)→OFF(nnT)
nnは、リーダー+データ+トレーラーの合計が192T (108ms)になるように決める。
・ リピートコード
リモコンのボタンを押している間、出続けるコード。
ON(16T)→OFF(4T)→ON(1T)→OFF(171T)
赤外線LEDの発光時(ON時)の点滅周波数。38kHz。
NECフォーマットのクロッサム2+用信号定義データは以下のようになる。
00 ; おまじない。
06 ; 信号波形定義の数。
ひと組の波形定義で「ON→OFF→」の一周期分を定義する。
21 ; キャリア周波数を決める分周比
[2.5MHz/38kHz/2=32.9≒0x21]。
; --- ここから信号波形定義 ---
7e0500 7e0500 ; データ「0」の波形。ON(1T)→ON(1T)、すなわち
ONが0x00057eクロック継続したあとOFFが0x00057eクロック継続
[1T=(9/16)ms*2.5MHz=1406.25=0x57e]。
7e0500 7a1000 ; データ「1」の波形。ON(1T)→OFF(3T)。
e45700 f22b00 ; リーダーの波形。ON(16T)→OFF(8T)。
7e0500 038601 ; トレーラーの波形。ON(1T)→OFF(nnT)。
e45700 f91500 ; リピートコードの波形その1。ON(16T)→OFF(4T)。
7e0500 54ab03 ; リピートコードの波形その1。ON(1T)→OFF(171T)。
; --- ここから送信信号の定義 ---
2 ; リーダー(波形「2」)
10100010 ; データ1バイト目(0=波形「0」/1=波形「1」)
00111101 ; データ2バイト目
01001000 ; データ3バイト目
10110111 ; データ4バイト目 (3バイト目の補数)
3 ; トレーラー(波形「3」)
45 ; リピートコード(波形「45」)
fe02 ; 直前の2波形を永久に繰り返す、という制御コード。
これにより、ボタンを押している間リピートコードの信号が出続ける。
上記変換を実現する perl スクリプト
#! /usr/bin/perl
sub b8 {
local($_) = shift;
return join("", reverse(split("", sprintf("%08b", $_))));
}
sub hh3 {
local($_) = shift;
return join("", (split("", sprintf("%06x", $_)))[4,5,2,3,0,1]);
}
# データはコマンド行引数に16進数×3バイトで与える
@data = map { hex($_) & 0xff } @ARGV[0..2];
$data[3] = 0xff - $data[2]; # 4バイト目は3バイト目の補数
# データを0/1列に変換
@data = map { b8($_) } @data;
# データ中の「0」「1」の数をかぞえる
$_ = join("", @data);
$n0 = tr/0/0/;
$n1 = tr/1/1/;
# 出力の作成
$t = 9 / 16 * 2500; # T=(9/16)ms
$f = int (2500 / 38 / 2 + 0.5); # キャリア周波数=38kHz
$nn = 192 - 24 - $n0 * 2 - $n1 * 4 - 1; # トレーラー長の計算
$out = "00\n";
$out .= "06\n";
$out .= sprintf ("%02x\n", $f);
$out .= hh3( 1*$t)." ".hh3( 1*$t)."\n";
$out .= hh3( 1*$t)." ".hh3( 3*$t)."\n";
$out .= hh3( 16*$t)." ".hh3( 8*$t)."\n";
$out .= hh3( 1*$t)." ".hh3($nn*$t)."\n";
$out .= hh3( 16*$t)." ".hh3( 4*$t)."\n";
$out .= hh3( 1*$t)." ".hh3(171*$t)."\n";
$out .= "2\n";
foreach (@data) {
$out .= $_."\n";
}
$out .= "3\n";
$out .= "45\n";
$out .= "fe02\n";
# ベタ書きにしたいとき (クロッサム・エクスプローラ風)
#$out =~ s/[^0-9a-f]//g;
#$out .= "\n";
# バイトごとに分かち書きしたいとき (Sweet Memories風)
#$out =~ s/[^0-9a-f]//g;
#$out =~ s/(..)/$&,/g;
#$out =~ s/.*/"$&"\n/;
print $out;
以上のようにして作成したデータを Sweet Memories 等によりクロッサム2+に転送する。
45 bc
| コード | ボタン |
| 00 | 0 |
| 01 | 1 |
| 02 | 2 |
| 03 | 3 |
| 04 | 4 |
| 05 | 5 |
| 06 | 6 |
| 07 | 7 |
| 08 | 8 |
| 09 | 9 |
| 0d | +10 |
| 0e | サーチ/転送 |
| 0f | 入力切替 |
| 11 | オープン/クローズ |
| 12 | 電源 |
| 13 | 再生 |
| 15 | 録画 |
| 16 | 停止 |
| 17 | 一時停止 |
| 18 | DVD |
| 19 | HDD |
| 1a | タイムスリップ |
| 1e | チャンネル↑ |
| 1f | チャンネル↓ |
| 40 | 録るナビ |
| 41 | 編集ナビ |
| 42 | 見るナビ |
| 44 | 決定 |
| 45 | クイックメニュー |
| 46 | V-リモート |
| 47 | ライブラリ |
| 4a | A |
| 4b | B |
| コード | ボタン |
| 52 | 初期設定 |
| 53 | クリア |
| 55 | ワンタッチリプレイ |
| 56 | ダビング |
| 57 | 修正/削除 |
| 5a | 表示 |
| 5b | ワンタッチスキップ |
| 5c | 残量表示 |
| 5e | ズーム |
| 80 | スキップ >>| |
| 84 | スキップ |<< |
| 88 | スロー |> |
| 8c | スロー <| |
| 98 | ピクチャーサーチ/頁 << |
| 9a | ピクチャーサーチ/頁 >> |
| 9d | フレーム/値編集 >|| |
| 9e | フレーム/値編集 ||< |
| a3 | 延長 |
| a7 | 録画モード |
| b1 | 表示窓切替 |
| c0 | カーソル ↑ |
| c4 | カーソル → |
| c8 | カーソル ↓ |
| cc | カーソル ← |
| d0 | トップメニュー |
| d1 | メニュー |
| d2 | リターン |
| d3 | 音声/音多 |
| d4 | アングル |
| d5 | 字幕 |
| d7 | P in P |
| d9 | チャプター分割 |
| da | タイムバー |
・ 8単位のNECフォーマットのデータを連続的に送信(リピートコードなし)。
・ カスタムコード「45 b1」のヘッダのあとに、「45 b2」のデータ列が続く。詳細は以下の例を参照。
45 b1 08 f7 ; ヘッダ 45 b2 99 66 ; Gコード「99502」 45 b2 50 af ; ・8桁のGコードを左詰めで2桁ずつ 45 b2 2f d0 ; ・余分な桁には「f」を詰める 45 b2 ff 00 ; 45 b2 fc 03 ; 録画先。DVDのとき「fc」、HDDのとき「fe」 45 b2 00 ff ; いつも「00」 45 b2 00 ff ; 録画モード。SPのとき「00」、LPのとき「02」
以上は独自の調査・解析の結果にもとづくものであり、内容の正確性については保証いたしません。自己責任にてご利用ください。
(最終更新: 2004年1月24日)