CSubJogSupportの使い方

ジョグタイプの識別とアシストのマスク方法

HPのTOPに戻る
NSBで使えるライブラリのTOPに戻る

CSubJogSupportライブラリを利用する為には
CSubJogSupport.prcとCSubFtrGet.prcをインストールする必要があります。

このライブラリを利用する事でClieのジョグダイヤル情報の取得と
ジョグアシスト機能のマスク(Type2)が可能となります。

LibManについてはいなあもさんのHP、Palmスタヂオ いなあも屋
CSub部品庫の中に詳しい解説があるのでそちらを参照して下さい。


■ジョグアシストについて
ジョグアシストとは本来ジョグダイヤルに対応していないアプリケーションに対して
基本的な動作をジョグダイヤルで行えるようにするものです。

ジョグアシストと一言でいってもその内容は細かく分けると以下のようになります。

・vchrJogBackアシスト
これはバックボタンを押した時に行われるアシストです。
主に前画面への復帰や、処理のキャンセル等を行うようアシストします。
・vchrJogUp/Downアシスト
ジョグを上下に回した時に行われるアシストです。
一般的にリストのカーソルの移動、テキストのスクロール等を行うようアシストします。
・vchrJogPushedUp/Downアシスト
ジョグを押しながら上下に回した時に行われるアシストです。
スクロールバーのページアップ/ダウンを行うようアシストします。
・vchrJogPush/PushRepeat/Releaseアシスト
これはジョグを押した時/押し続けたとき/離された時に行われるアシストです。
一般的にアプリケーション毎に機能が割り振られるのでアシストでは特別な処理は行いません。
例外的にポップアップリストの選択項目の決定を行うようアシストします。
ただし実際の決定はRelease時のみ行い、Push時には何も行いません。
・vchrJogLeft/Rightアシスト
これは現在はTJ25の左右ボタンを押した時に行われるアシストです。
左ボタンを上ボタン、右ボタンを下ボタンとしてアシストを行います。

アプリケーションが固有にジョグダイヤルに対応する為にはこのジョグアシスト機能を停止(マスク)する必要があります。
しかしNsBasicではこのジョグアシストのマスクを行うことが出来ません。
その為NsBasicでジョグダイヤル対応のアプリケーションを作る場合には、常にこのジョグアシストを意識して作る必要がありました。
それは、NsBasicが順調にバージョンアップされてもサポートされることは無く作り手側としては不便をしいられる事がありました。

しかしこのCSubJogSupportライブラリを利用すると、ジョグアシストの呪縛からやっと逃れることが出来ます。
これからは自由にジョグダイヤルのイベントを作る事ができます。

ただし、自由にイベントを作れるとは言ってもできうる限りはジョグアシストでの動きに準拠した方がユーザーには優しいでしょう。
その為にも、ClieSDKに付いてくるPDFのドキュメントに一度目を通されると良いでしょう。
#NsBasicのユーザーでも参考になりそうな事がありますよ。


■SonySysFtrNumSysInfoP Feature情報の存在チェック

まずSnoySysFtrNumSysInfo Feature情報がデバイスに存在しているかをチェックします。
その存在チェックにCSubFtrGetライブラリが必要となります。

※CSubFtrGetライブラリについては、こちらをご覧下さい。

※SonySysFtrNumSysInfoP Featureとは?
使用できる機能やハードウェアの状態などのシステム情報が格納された
SonySysFtrSysInfoType構造体へのポインタの取得を行うものです。
'---- SonySysFtrNumSysInfo Featureの存在チェック
parm="SoNy"+"1"
Res=AppLaunch(0,"CSubFtrGet",32769,parm)

戻り値Resの内容が0であればSonySysFtrNumSysInfo Featureが存在する事になります。

ただし、S300/S500等の古いタイプのデバイスは必要なパッチが当てられていないと
SonySysFtrNumSysInfoPが設定されていないので、判別する場合には注意が必要です。


■デバイスのジョグダイヤルのタイプを調べる

現状ではJogTypeとして以下の4種類があるようです。
JogType
0ジョグ無し
1ジョグ有りバックボタン無し(S300/S500)
2ジョグ有りバックボタン有り
3ジョグ有りバックボタン無しLRボタン有り(TJ25)
4ジョグ有りバックボタン有りLRボタン有り(TH55)

CSubJogSupportを使ってJogTypeを調査するにはコマンド「32769」を使用します。
パラメータは0を設定します。
戻り値にJogTypeを戻します。

AppLaunchの書式は
戻り値=AppLaunch(CardNo(通常0),実行するプログラム,コマンド,パラメータ)
なので以下のような書き方になります。

Dim JogType As Integer
JogType=AppLaunch(0,"CSubJogSupport",32769,0)

これでJogTypeが識別できます。


■ジョグアシストマスクの設定
ジョグアシストマスクを設定するにはコマンド「32770」を使用します。
パラメータはマスクするアシスト機能の値を足したものになります。

マスク退避のバッファーが確保できなかった時には、戻り値に0以外を返します。
0が返した場合にはマスクが成功です。
マスクの設定が成功した場合、そのマスクのオーナーは NSBasicのランタイムまたは自分自身のどちらかになります。
(ランタイムを使っている場合はランタイムに、使っていない場合は自分自身です)

この場合には、アプリケーション終了までに必ずマスクの解除を行って下さい。
※ジョグダイヤルの無い機種でも0を返します。

ジョグアシストマスクの各値
JogUp1
JogDown2
JogPushedUp4
JogPushedDown8
JogPush16
JogRelease32
JogPushRepeat64
BackButtonPush128
LeftButtonPush256
RightButtonPush512

パラメータの設定がちょっと判り辛いかも知れないので例を幾つか書き出してみます。
★JogUpとJogDownをマスク
1+2=3

★JogUpとJogDownとBackButtonPushをマスク
1+2+128=131

★全てのアシストを停止
1+2+4+8+16+32+64+128+256+512=1023

Dim parm as String
parm="マスクする機能の値の合計"
Res=AppLaunch(0,"CSubJogSupport",32770,parm)


■ジョグダイヤルのイベントコード
参考までに、ジョグダイヤルのイベントコードを載せておきます。
この値はGetKey()で取得した値をAscファンクションでASCII文字コードを整数値に変換したものです。
イベントイベントコード
JogUp0
JogDown1
JogPressRepeat2
JogPageUp3
JogPageDown4
JogPress5
JogRelease6
BackButtonPush7
JogLeft8
JogRight9

■ジョグアシストマスクの解除
ジョグアシストを解除するにはコマンド「32771」を使用します。
パラメータは0を設定します。

事前にマスクが設定されていた場合には、戻り値に0を返します。
マスクがされていなかった場合には戻り値に0以外を返します。

以下のように書きます。
Res=AppLaunch(0,"CSubJogSupport",32771,0)

これでそのアプリケーションで定義していたジョグアシストマスクが解除されます。


■CSubJogSupportとサンプルプログラムのダウンロード

CSubJogSupportライブラリとサンプルプログラムがダウンロード出来ます。

ダウンロード
※サンプルプログラムは、起動時にJogTypeを判別します。
起動後はマスクを押すと全てのアシスト機能がマスクされます。
もう一度マスク押すとアシスト機能のマスクが解除されます。

■ご注意
このパッケージ内のプログラムを使用した、または、使用しなかったことによる
全ての損害について作者はその責を負いませんし、
また不具合等に対処する義務も一切負わない事をここで明らかにしておきます。

■ご注意とお願い

今回のドキュメントは、短い時間で書き上げましたのでもしかしたら記述ミス等があるかも知れません。
その時には、申し訳ありませんがご連絡を頂けるとありがたいです。


■感謝の言葉

最後に、CSubJogSupportライブラリを作成しNSBユーザーが自由に使う事を快諾して下さった今関さん
ライブラリの管理ツールLibManを公開して下さっているいなあもさん

本当にありがとうございます。


2003/11/21 作成

- Page End -