市販の多機能リモコンには、メーカやAV機器の選択で、あらかじめ準備さ れたプリセット信号を使用することができます。そして、高性能なリモコンに は、学習機能を持つリモコンもあります。
しかし、あんまり複雑な機能は面倒ですし、サンプルとしては適当でないの で xwireless では、あらかじめ登録されている各社のリモコンのプリセット 信号を出力するプログラムとします。
また、リモコンのプリセット信号は、TV・VTR用のみみたいなので、 xwireless では、VTR用とします。
なお以後は、VTR用の xwireless は、vwireless という名称にします。
必要な機能 | 実現方法 |
---|---|
リモコンの赤外線信号の送信 | コールバック関数に赤外線信号の送信部分のコードを追加する |
リモコンの信号を使っているビデオのメーカーに合わせて選択できるようにする | プリセット信号の選択機能をコードに追加する |
使用するポートの変更を可能にする | デバイスの変更の可能にする |
ここでは、この『再コンパイルなしに設定を変更』を可能にする方法として、 アプリケーション・リソースを使用する方法を説明する。
vwireless.h には、以下の部分が新設されています。
リソースの設定のために必要となるリソース名/クラス名です。
リソース名/クラス名は、命名について『名付けかた』があります。
-
- /*****************************************************
* アプリケーション・リソースのリソース名/クラス名
*****************************************************/
#define XtNvideoMaker "videoMaker"
#define XtCVideoMaker "VideoMaker"
#define XtNrmcDevice "rmcDevice"
#define XtCRmcDevice "RmcDevice"
-
- /* data structure for application resources */
typedef struct {
int video_maker;
String rmc_device;
} AppData, *AppDataPtr;
wireless.c → vwireless.c においての主な変更をまとめます。
ここで、前述のリソース名,クラス名などを使用します。 設定する内容は、以下の通り。
メーカー名の初期値"MAKER"は、Imakefile に定義されています |
---|
- 1
- #include "vwireless.h"
- 2
- AppData app_data;
- 3
- /* resource list */
static XtResource resources[] = {
{
XtNvideoMaker,
XtCVideoMaker,
XtRInt,
sizeof(int),
XtOffsetOf(AppData, video_maker),
XtRImmediate,
(XtPointer) MAKER
},
{
XtNrmcDevice,
XtCRmcDevice,
XtRString,
sizeof(String),
XtOffsetOf(AppData, rmc_device),
XtRImmediate,
(XtPointer) "/dev/rmc0"
},
};
- 4
- /* Command-line options table */
static XrmOptionDescRec options[] = {
{"-rmc", "*rmcDevice", XrmoptionSepArg, NULL},
{"-maker", "*vidoeMaker", XrmoptionSepArg, NULL},
};
int main(int argc, char **argv)
{
XtAppContext app_context;
Widget topLevel;
・
・
・
topLevel = XtVaAppInitialize(
&app_context, /* Application context */
"VWireless", /* Application class */
options, XtNumber(options), /* command line */5
&argc, argv, /* command line args */
NULL,
NULL);
- 6
- XtGetApplicationResources(topLevel,
&app_data,
resources,
XtNumber(resources),
NULL,
0);
・
・
・
}
設定する値は、"/usr/include/linux/rmc.h"で定義されるメーカー識別子 を利用することができます。この例では、松下です。
DEFINES = -g -Wall -DMAKER=RMC_MATUSHITA
! VTRのメーカーを選ぶ(クラス名での選択)
!*xwireless*VideoMaker: 32768! VTRのメーカーを選ぶ
!*xwireless*videoMaker: 32768
これらの設定を行った、アプリケーション・デフォルト・ファイルは、 XawTownsDocSample/sample2/Vwireless.ad と言う名前で収録しています。
プログラムを解凍する位置を変えた場合や使っている機種にあわせて、 再編集が必要です。
実際のリモコンの信号を出す部分については、本ドキュメントと目的が 異なりますので記述しません。
マシーンMさんが作られたプログラムは、わかりやすく作られているの で、こちらと比較してもらうと良いと思います。
◇◇ 注意 for FM TOWNS ◇◇ ワイヤレス・コマンダ・ドライバは loadable module になっています。 使用法は、ドライバ付属のドキュメントをご覧下さい。
/etc/rc.d/rc.local に登録すると起動時に自動的に組み込まれます。
また、kerneld を使用して、必要な時に自動的にドライバを組み込むこともできます。