- - PR -
人体感知センサによるスクリーン復帰
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-22 16:36
ご無沙汰しています。
現在ESS-3610と言う小型PCを組み込みGUIマシンとし、 WideStudioを利用したアプリケーション開発を行ってい ます。OSはRedHatLinux 9を使用しています。 今回壁にぶつかっているのは、掲題の人体感知センサ を利用してブランク画面から自動復帰しようとするもの です。タッチパネルを利用したキーボードとマウスは無 しのシステムです。勿論画面にタッチすれば復帰します がシステム用件に人感センサにて復帰することが盛り込 まれております。 現状では、画面復帰のコードとしてxsetのsパラメータ を用いて下記のように行っています。 system("xset s reset"); // スクリーンセーバ強制非アクティブ usleep(300*1000); system("xset s default"); // デフォルト設定 usleep(300*1000); system("xset s on"); // スクリーンセーバ機能オン これは、キーボードとマウスを触らなくなってから10 分後にスクリーンがブランクになった直後は旨く動作しま す。ところがブランクになってから30分ほどすると旨く 機能しません。 プログラムは動作しているのですが画面は復帰しません。 どうやらハード的に(?)RGB出力をしなくなるモード(S3 ?) に落ち込んでいるのではないかと言う方も居られました。 BIOSを触ってACPIをDisabledにしたりしてみましたが、こ のコードでは旨く行かない模様でした。 こう言ったやり方よりも、直接マウス動作やキーボード 押下をエミュレートする(/dev/psauxに何かコードをリダ イレクト)するやり方を考えたほうが良いのでしょうか? ただ、闇雲に system("echo 1 >/dev/psaux"); とかする にしてもマジックナンバーの 1 がすごく気になります。 もっともこれでは復帰しませんでしたが... 年内にけりを付けるよう指示されています。こう言った ご経験のある方のご教授をお待ちしています。 因みに、xset qした結果は下記のようなものです。 Keyboard Control: auto repeat: on key click percent: 0 LED mask: 00000002 auto repeat delay: 500 repeat rate: 30 auto repeating keys: 00ffffffdffffbbf fa9fffffffdffdff ffffffffffffffff ffffffffffffffff bell percent: 50 bell pitch: 400 bell duration: 100 Pointer Control: acceleration: 2/1 threshold: 4 Screen Saver: prefer blanking: yes allow exposures: yes timeout: 600 cycle: 600 Colors: default colormap: 0x20 BlackPixel: 0 WhitePixel: 16777215 Font Path: /root/.gnome2/share/cursor-fonts,unix/:7100,/root/.gnome2/share/fonts Bug Mode: compatibility mode is disabled DPMS (Energy Star): Standby: 1200 Suspend: 1800 Off: 2400 DPMS is Enabled Monitor is On Font cache: hi-mark (KB): 5120 low-mark (KB): 3840 balance (%): 70 File paths: Config file: /etc/X11/XF86Config Modules path: /usr/X11R6/lib/modules Log file: /var/log/XFree86.0.log 以上、宜しくお願い致します。 |
|
投稿日時: 2005-12-22 17:09
まったくの門外漢なので、予め検討はずれのことを書いているかもしれないということをお断りしておきます(_ _)
スクリーンがブランクになった直後では動作するという点から、画面復帰コードおよび OS 設定には問題がないように見えます。 復帰するように見えないのは、おそらくタッチパネルのデバイスドライバを直接駆動するファームウェアが、パネルを省電力モードもしくはそれに類する状態に設定してしまうためと考えました。 以上の推測が正しければですが、問題の解決方法としては、
という手順ではないかと考えます。 まず ESS-3610 のメーカ(書かれていませんが、ハイテックシステム社でしょうか)に問い合わせ、上述の省電力モード移行防止方法もしくはモードからの復帰方法を尋ねるのがよろしいと思います。 蛇足ですが、おそらく X 上では制御が難しいデバイス依存レイヤの設定(∵xset q の結果に省電力モードに関する情報がない)ということで ioctl() システムコールを使うような気がします。 # 気がするだけなので気にしないでください←混乱気味 |
|
投稿日時: 2005-12-23 08:26
Gio様 貴重なご意見をありがとうございました。
自己レスです。 1. xset q の結果から20分でスタンバイ,30分でサスペンド,40分で オフの状態をデフォルトで指定していること解かります。 2. xset コマンドのオプションを細かく調べると、-dpms オプションで1. の DPMS(エナジースター,省電力)機能を無効にできることが解かります。 そこで xset -dpms 状態でこのプログラムを動作させると、一晩経った後でも 旨く動作することが解かりました。 時間に追われて慌てて愚問したことを恥じています。ありがとうございました。 |
1