- PR -

人体感知センサによるスクリーン復帰

1
投稿者投稿内容
kimi
会議室デビュー日: 2005/03/15
投稿数: 15
投稿日時: 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


 以上、宜しくお願い致します。

Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2005-12-22 17:09
まったくの門外漢なので、予め検討はずれのことを書いているかもしれないということをお断りしておきます(_ _)

スクリーンがブランクになった直後では動作するという点から、画面復帰コードおよび OS 設定には問題がないように見えます。
復帰するように見えないのは、おそらくタッチパネルのデバイスドライバを直接駆動するファームウェアが、パネルを省電力モードもしくはそれに類する状態に設定してしまうためと考えました。

以上の推測が正しければですが、問題の解決方法としては、

  • 原因が省電力モードへの移行だけであるか切り分ける
  • (省電力モードが原因とわかったならば)移行を防ぐ設定にする、もしくは省電力モードから復帰するコードを追加する

という手順ではないかと考えます。

まず ESS-3610 のメーカ(書かれていませんが、ハイテックシステム社でしょうか)に問い合わせ、上述の省電力モード移行防止方法もしくはモードからの復帰方法を尋ねるのがよろしいと思います。

蛇足ですが、おそらく X 上では制御が難しいデバイス依存レイヤの設定(∵xset q の結果に省電力モードに関する情報がない)ということで ioctl() システムコールを使うような気がします。
# 気がするだけなので気にしないでください←混乱気味
kimi
会議室デビュー日: 2005/03/15
投稿数: 15
投稿日時: 2005-12-23 08:26
Gio様 貴重なご意見をありがとうございました。

 自己レスです。

1. xset q の結果から20分でスタンバイ,30分でサスペンド,40分で
  オフの状態をデフォルトで指定していること解かります。
2. xset コマンドのオプションを細かく調べると、-dpms オプションで1.
  の DPMS(エナジースター,省電力)機能を無効にできることが解かります。

 そこで xset -dpms 状態でこのプログラムを動作させると、一晩経った後でも
旨く動作することが解かりました。

 時間に追われて慌てて愚問したことを恥じています。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)