2008-01-13-01-CLIE のジョグについて知らなかったこと - project-enigma

2008-01-13-01-CLIE のジョグについて知らなかったこと

>> Site top >> weblog >> 月別アーカイブ >> 2008年01月のlog >> 2008-01-13-01-CLIE のジョグについて知らなかったこと

最終更新日付:2014/01/02 00:00:00


CLIE のジョグについて知らなかったこと

2008 年 01 月 13 日

はい、今夜は Japonica 新バージョンリリースもありましたし、Inside Japonica はお休みです。今夜は、Japonica で CLIE 対応をしていて気がついたことについて少し。

CLIE といえば、陰郎の手元には TJ25 が2台と、鶴丸さんからお借りしている TH55があります。他のデバイスについては良く知らないのですが、TJ25 には、ジョグダイヤルの両側に左右の矢印のついたボタンがあります。

TH55 にもありますね。

CLIE のホーム画面(標準の方)でこれらのボタンを押すと、選択されているアプリアイコンが左右に動きます。この辺の動作は設定でイジれるようなのですが、陰郎はてっきりこれらのボタンを、「ジョグ機構の一部」だと思っておりました。ところが、Japonicaでこれらのボタンを押すと、PageUp & PageDown キーとして認識されるではありませんか。この2つのボタンは PageUp & PageDown なわけ? 違うのかもしれませんが、ひとまず Japonica にはそれらのキーコードが届くようです。

陰郎はこれまで、ジョグダイヤルを回すと PageUp および PageDown のいずれかのイベントが発生するものだとばかり思っていました。実際そう動いているように見えますし。しかし、というかしかも、それすらどうやら誤りのようで、ジョグを回転させた際に発生するのはまず JogUp と JogDown で、それがアプリケーションで処理されなかった場合に改めて PageUp、PageDown が発行される、という仕組みになっているようなのです。この挙動は、CLIE Simulator でイベントの発生を見ていて気がついたのですが。

ということは、です。Japonica で JogPush や JogBack と同じように JogUp や JogDown を独立したキーとして処理すれば、PageUp や PageDown と区別して処理できるようになりますよね。そうすれば、CLIE ユーザーはもっと便利に Japonica を使えるのでは...?

ということを考えたのですが、陰郎はキーマップのプリファレンスを保存方法でマズいしくじり方をしたため、いまひとつ上手にこれを取り込めないんですよね...上手くやらないと、設定済みの内容が狂うようなことになってしまうので、ちょっと悩ましいところではあります。うむむ...

── 追記 ──

CLIE のジョグダイヤル操作は、Version 1.30 にて設定が拡充されています。

 

コメント

一匹の黄色い猿 - 01/13/2008 01:08:48 AM

> この2つのボタンは PageUp & PageDown なわけ?

つ[微妙に違うかも@TJ25で検証]
つ[ハードリセット時には左ボタンを要求する]
つ[右ボタン+リセットは何故か画面がオフのままになる]
つ[本来なら上ボタン+リセットになるはずだが…]
つ[と思ったら左ボタン+リセットで拡張停止]
つ[何じゃこりゃ…orz]
つ[拡張は赤外線通信とhome画面のアイコン(小)表示で検証]
_
っ[ちなみにJOG Push+リセットという動作もある模様]
っ[音出しを全部オフにしても起動時にPiと鳴く]
っ[今更だけど何か隠し機能でもあんのか?@TJ25]

陰郎 - 01/13/2008 02:09:27 PM

> 一匹の黄色い猿さん

実は、SONY CLIE の SDK には、JogRight と JogLeft というキーコードがあります。ジョグダイヤルの左右についているボタン、最初はこれかな? と思ったんですが、このキーイベントが引っかからないので、はてな...という状態です。あ、キーイベントを調べるアプリを使えばいいのか。(汗

#最近、やっと CLIE に抵抗がなくなってきました。(笑

陰郎 - 01/14/2008 12:19:36 AM

> 一匹の黄色い猿さん

キーイベントを調べる Palmware を使って試してみたところ、やはり JogRight やJogLeft が発行されていました。以前試して「引っかからない」と思ったのは、何かやり方を間違えていたのかもしれません。

しかし、そうなるといよいよ CLIE 用にボタン操作設定を拡充する必要がありますね...問題は、設定済みの内容を壊さずにどうやって実現するかです...うむむ。

大野 一樹 - 01/14/2008 09:18:16 PM

陰郎さん

私は、前の主力機がTJ-25だったので、JOGLeft/Rightに関しては、できるだけ対応するようにPalmwareを作っていました。

既に調査されたとおり、実際にJogLeft/Rightが発行されますが、注意しなければならないのは、Jogアシスト機能が働いてしまう場合があり、それぞれ、PageUp/Downに変わってしまい、JogLeft/Rightイベントが取れないとあわてないことです。

Left/Rightボタンのイベントをきちんと取得するには、Jogアシストをマスクする必要があります。私は、これに気づかず、相当苦労しました。

陰郎 - 01/14/2008 09:54:16 PM

> 大野さん

お久し振りです。

>> Jogアシストをマスクする必要があります。

Jogアシスト? というのをマスクすれば普通にイベントを拾えるんですか。実は、別の方法(?)を使ってしまいまして...なんというんでしょうか。PageUp/Down に変換される前の、イベントループの先頭の段階で横取りして FrmHandleEvent に渡すようなバイパス手術をしてしまいました。言語が C++ で、Codewarrior に付属の POL というフレームワークライブラリを使用しているので、そのようなオペが簡単にできるようになってしまっていたのが返ってマズかったかもしれません。

CLIE は難しいですねぇ...ちゃんと CLIE SDK( じゃなくて SONY SDK か)を読まないと。(汗

youichi - 01/15/2008 01:01:35 PM

とりあえず、JOGアシストなしでどんな挙動なのか確認するには、

環境設定のジョグでジョグアシスト切っとけばよいです。

ソフト単位で設定できるので、ユーザに強要すればほっといてもいいといううわさがあります。

陰郎 - 01/15/2008 01:06:04 PM

> youichi さん

>> 環境設定のジョグでジョグアシスト切っとけばよいです。

あ、ユーザーレベルで無効化できるようなものなんですか。知りませんでした。ちゃんとCLIEを使えるようにならないと...(汗

>> ソフト単位で設定できるので、ユーザに強要すればほっといてもいいといううわさがあります

しかもアプリ単位で設定可能ですか。いやはや、でも強要はちとマズいかと。(笑

大野 一樹 - 01/15/2008 11:14:04 PM

陰郎さん、ご挨拶が遅くなり申し訳ありません。

以下、少し長文になります。

JOGアシストマスクには、2通りの方法があったと思います。私は、Type1方式でアプリを作っています。

これは、フォーム毎にどのJOGイベントをマスクするかどうか設定できるものです。StartApp()とかで、マスクを設定し、StopApp()で解除するという感じです。

Programmer's Companion for Sony CLIEのジョグアシストの項を読んで頂ければ、陰郎さんならすぐにお分かりになると思います。P.32〜33に書かれているジョグアシストマスクポインタという項に書かれている例を参考に私は作りました。ポインタのポインタの使い方に苦労しましたが。

次の項のジョグアシストマスクオーナーのところも設定しておいた方が良いようです。

今、更新中のMemoViewerから、以下を抜き出して記載します。ここのコメントは陰郎さんがチェックしてからアップするみたいなので、以下は削ってしまって構いません。

では。

//Jogアシストを解除するフォームをここに記載
//Bit9/8=JogRight/Left、Bit7=JogBack、Bit4=JogPush、Bit1/0=JogDown/Up
UInt16 gMASK[] = {
    sonyJogAstMaskType1, 2,	//=フォーム数
    ListView,			0x0393,
    EditView,			0x0393,
};

このgMASKを使って、以下のJogAssistMask()で設定、JogAssistResume()で解除させます。

/*-------------------------------------------------------------------------
  ジョグアシストのマスク設定
  Type1方式で、フォーム毎にマスク
  -------------------------------------------------------------------------*/
static void JogAssistMask()
{
  UInt16 **maskPP;
 
  if (!FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMaskP, (UInt32 *)&maskPP)) {
    oldmaskP = *maskPP;  // save the old mask to restore later
    *maskPP = gMASK;  // Mask can be set

    // set JogAssist mask owner
    if (!FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMOCardNoP, (UInt32*)&ftrCardNoP)
      && !FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMODbIDP, (UInt32*)&ftrDbIDP)) {
      // save the old mask owner to restore later
      oldftrCardNo = *ftrCardNoP;
      oldftrDbID = *ftrDbIDP;
      // set the mask owner;
      SysCurAppDatabase(ftrCardNoP, ftrDbIDP);
    }
  }
}
 
 
/*-------------------------------------------------------------------------
  ジョグアシストのマスクを元に戻す
  -------------------------------------------------------------------------*/
static void JogAssistResume()
{
  UInt16 **maskPP;
 
  if (!FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMaskP, (UInt32*)&maskPP)) {
    if (oldmaskP) {  //設定されていない場合を排除
      // restore original JogAssist mask
      *maskPP = oldmaskP;
    }
  }
 
  if (!FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMOCardNoP, (UInt32*) &ftrCardNoP)
    && !FtrGet(sonySysFtrCreator, sonySysFtrNumJogAstMODbIDP, (UInt32*) &ftrDbIDP)) {
    // restore original JogAssist mask owner
    *ftrCardNoP = oldftrCardNo;
    *ftrDbIDP = oldftrDbID;
  }
}

陰郎 - 01/15/2008 11:33:38 PM

> 大野さん

詳細情報、ありがとうございます。SONY CLIE の Companion、おそまきながら引っ張り出して読んでみました(就寝前なのでさらっとですが)。ひとまずのキモは P30 のJogAssist Mask Specification のところですね...うーん、まだ CLIE について理解していない部分がありそうです。じっくり読まないとダメかも。

それにしても、自分のやったバイパス手術、あれはあれでいいのだろうか...やっぱりダメな気がしてきた...(汗

一匹の黄色い猿 - 01/16/2008 02:35:38 AM
つ[環境設定にJogアシストがあったのはOS4まで]
つ[OS5ではシステムに取り込まれてユーザーはお手上げw]
_
つ[OS4の環境設定にはハイレゾアシスト(?)もあった]
つ[高速化したかも知れないが、自由度は下がった気がする]
_
っ[つか、猿みたいなのがコメントしてもいいのかと…]
っ[凄く専門的な記述にビビりまくる猿w]

陰郎 - 01/16/2008 04:39:19 PM

> 一匹の黄色い猿さん

>>つ[環境設定にJogアシストがあったのはOS4まで]
>>つ[OS5ではシステムに取り込まれてユーザーはお手上げw]

そうでしたか...昨夜、TH55 の環境設定を探し回っておりました。(汗

>>っ[つか、猿みたいなのがコメントしてもいいのかと…]
>>っ[凄く専門的な記述にビビりまくる猿w]

誰でもコメントできるようになっている以上、天下の往来です。気兼ねなしでお願いします。それに、専門的といってもそこは所詮プログラミング。業界知識の域を出ませんから、中に入ってやってみればわかるようなことだと思いますよ。仕事柄、いわゆる「研究者」さんと会話をすることもありますが、そっちはそれこそちんぷんかんぷんですよ。(笑

このページにコメントする

 

このページのタグ

Page tag : Palm

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.