Palm Programmer's Laboratory
Introduction to Conduit Development601/3
この章では、HotSync マネージャ バージョン 6.0 以降と Palm OS Cobalt で使用可能な HotSync 交換機能を紹介します。HotSync 交換は、ハンドヘルドとデスクトップ コンピュータが Palm OS 標準インターフェイスを使用してファイルをそれらのネイティブ フォーマットで交換することを可能にします。
- 重要
- あなたのコンジット設計がハンドヘルド データ フォーマットとデスクトップ データ フォーマットを変換するだけのものである場合、あなたは HotSync 交換を使用することができ、コンジットを開発する必要はまったくありません。
この章には以下の節があります。
概要 ^TOP^
HotSync 交換は、ハンドヘルドとデスクトップ コンピュータが Palm OS 標準インターフェイスを使ってファイルをそれらのネイティブ フォーマットで交換することを可能にします。例えば、HotSync 交換は、ユーザがビットマップ(BMP)ファイルを標準 Palm OS Desktop ソフトウェアのインストール ツール アプリケーション経由でハンドヘルドのイメージ ビューアにインストールすることを可能にします - ビューアが BMP 拡張子のためにハンドヘルドの交換マネージャに登録されている場合。この機能は、単純にビットマップ データを Palm OS データベース(PDB)フォーマットに変換するカスタム コンジットの必要性を無くします。ビットマップのインストールが行われる HotSync 実施時に、ハンドヘルドのビューアは Palm OS 標準交換マネージャインターフェイスを使用している HotSync 交換からビットマップ データを受け取ります - 無線通信されたデータを受け取るために同じインターフェイスが使用されます。これは、アプリケーションがビットマップを保持している PDB ファイルを発見してそれを再変換する必要を無くします。さらに、ハンドヘルドのビューアは交換マネージャ経由で直接デスクトップにファイルを送ることができます - デスクトップでは HotSync 交換がそのファイルを標準ビットマップ(BMP)フォーマットで保存します。
HotSync 交換は 3 つのコンポーネントからなります:
- HotSync マネージャ バージョン 6.0 以降と共に出荷されるインストール コンジット。このインストール コンジットは HotSync マネージャの Custom ダイアログ ボックスの中では "HotSync Exchange" という名前です。
- Palm OS Cobalt と共に出荷されるハンドヘルドの交換ライブラリ。このライブラリはこの章の残りの部分では「HotSync 交換ライブラリ」と呼ばれます。
- Palm OS Cobalt の HotSync クライアントの File Exchange > Edit Queue メニュー アイテム。ユーザはハンドヘルド上のファイル交換キューを閲覧して、ハンドヘルド上のどのファイルが次の HotSync 実施時に転送されるか調べることができます。さらに、ユーザはファイルを選択されたデスクトップに行くようにセットすることができます。
HotSync 交換は開発者にカスタム コンジットの開発を越える以下の利点を提供します:
- Palm OS ファイル フォーマットとデスクトップ ファイル フォーマット間の変換の必要を無くします。
- ファイル フォーマットを変換するだけのコンジットの必要性を無くします。
- ハンドヘルド上に存在している交換マネージャ インターフェイスを当てにすることができます。
- 以下の標準データ フォーマットを扱います:
- Palm OS アプリケーションはExgRegisterDataType() を使用して MIME-タイプ/ファイル拡張子を登録します。
- デスクトップ ファイル タイプは ExgPut() に渡される URL の中で指定されるファイル拡張子によって決定されます - 例えば、URL: _desktop://HSuser/images/flowers.jpg は JPEG ファイルを指定します。
HotSync 交換時のデータのフロー ^TOP^
この節では、HotSync 交換が行われる HotSync の前、最中、後のデータのフローを説明する例を提供します。この例では、ハンドヘルド アプリケーションはデスクトップに転送される todesktop.id という名前のファイルをキューに追加し、ユーザはハンドヘルドに転送される todevice.jpg という名前のファイルをキューに追加します。ハンドヘルド上のアプリケーションは JPG ファイル タイプのために交換マネージャに登録されていると仮定します。図 3.1 は以下で示す例の中でのデータのフローを描いています。
デスクトップ上で、ユーザは次の HotSync の最中にインストールするためにインストール ツールを使って todevice.jpg をキューに追加します。次にインストール ツールがインストール援助機能関数 PltInstallFile() を呼び出します。この関数はファイルをデスクトップ上のダウンロード フォルダに置くことによってそのファイルを HotSync 交換インストール コンジットに向かわせます。
ハンドヘルド上では (図 3.1 の番号 1, 2, 3 の黒線で描写されています)、アプリケーションは標準 Palm OS 交換マネージャ API を使って以下のステップを実行します:
- ファイル名 todesktop.id で ExgSocketType 構造体を初期化します。
- ExgPut() を呼び出します。
この呼び出しは HotSync 交換ライブラリにクリエイタ ID 'hsxc'、タイプ 'SEND'、固有の名前の新しいデータベースを作成させます。ライブラリはデータベース名、ファイル名、デフォルトの行き先 (<Any Desktop>) を保留中のデスクトップ交換のカタログに保存します。 - データベースにデータを埋め込むために ExgSend() を呼び出します。
- データベースをクローズするために ExgDisconnect() を呼び出します。新しいデータベースは、そのデータベースの中のデータが HotSync 中にデスクトップに送られるまでキューに追加されています。
図 3.1 の番号 4, 5, 6, 7 の赤線で示されているように、HotSync 交換インストール コンジットは最初に上記で言及されているハンドヘルド交換カタログを検証することによってローカル デスクトップに対していずれかの「ハンドヘルドからデスクトップへの」転送リクエストが保留されているかどうかをチェックします。HotSync 交換コンジットは行き先が "<Any Desktop>" であるカタログの中のエントリを見つけ出すため、HotSync ユーザのデータ ディレクトリのサブディレクトリ Exchange\From の中に指定されたファイル名 (todesktop.id) を持つデスクトップ ファイルを作成します。HotSync 交換コンジットは一時ハンドヘルド データベースの内容をヘッダを除いてこのファイルの中に転送し、それからハンドヘルド上のカタログ エントリと一時データベースを削除します。
最後に、HotSync 交換インストール コンジットはいずれかのファイルがハンドヘルドに転送される必要があるかどうかをチェックします。この例では、HotSync 交換コンジットはデスクトップ上でキューに追加されているファイル todevice.jpg を見つけ出します。HotSync 交換コンジットはハンドヘルド上にクリエイタ ID 'hsxc'、タイプ 'RECV'、名前 todevice.jpg のデータベースを作成します。
図 3.1 の番号 8, 9, 10 の青線で示されているように、Palm OS は新たにインストールされたアプリケーションと HotSync によってデータが変更されたアプリケーションを副起動します。この時点で、新たにインストールされたアプリケーションはそれらがサポートするファイル タイプを交換マネージャに登録することができます。
- NOTE
- ユーザがファイルをハンドヘルドの主記憶装置と拡張カードのどちらにでもインストールできるようにするため、あなたのハンドヘルド アプリケーションはファイル タイプを交換マネージャ (主記憶装置にインストールするため) と VFS マネージャ (拡張カードにインストールするため) の両方に登録しなければなりません。VFS マネージャはそれ自体でいくつかの共通デスクトップ ファイル タイプを登録して、それらをそれらのタイプのファイルが HotSync 中にインストールされるカード上の特定のデフォルト ディレクトリに関連付けます。あなたのファイル タイプがそれらのファイル タイプの 1 つではない場合、あなたのアプリケーションはそのファイル タイプを登録して、カード上の新しいデフォルト ディレクトリを指定しなければなりません。拡張カード上の新しいデフォルト ディレクトリを登録する際の詳細については、Palm OS SDK の Exploring Palm OS: Memory, Databases, and Files を参照してください。
例えば、JPG ビューア アプリケーションが HotSync 中にインストールされた場合、この時点でそのアプリケーションは JPG ファイル タイプのための登録を行う必要があります。HotSync 交換ライブラリが sysNotifySyncFinishEvent 通知を受けとったとき、それはクリエイタ ID 'hsxc'、タイプ 'RECV' のデータベースを探します。todevice.jpg を見つけ出すと、それはこのデータベースをオープンし、ExgNotifyReceive() を呼び出します。この呼び出しは交換マネージャに関連付けられたアプリケーション (JPG ビューア) を起動させ、todevice.jpg をそのアプリケーションに向けて転送させます。この時点で、そのアプリケーションはそのデータをネイティブ Palm OS データベースに保存するかどうかを選択することができます (訳者: 原文は "At this time, the application can choose whether to the data in a native Palm OS database."。"to the data in a 〜" では文章にならないので "to store the data in a 〜" だと推測しました)。そのアプリケーションが ExgDisconnect() を呼び出したとき、HotSync 交換ライブラリは HotSync 交換コンジットによって作成された一時データベースを削除します。
デスクトップからハンドヘルドへの HotSync 交換 ^TOP^
HotSync 交換を使ってファイルをデスクトップからハンドヘルドに転送することは Palm OS ファイル タイプ (PRC, PDB など) をハンドヘルドにインストールすることに似ています。以下の節では、デスクトップ アプリケーションやコンジットがファイルを HotSync 交換経由で転送することを可能にするユーザ インターフェイスと API について説明します。
デスクトップ ユーザ インターフェイス ^TOP^
インストール ツール (図 3.2) はデスクトップ上の HotSync 交換のための主要ユーザ インターフェイスです。ユーザはインストール ツールを起動して、次の HotSync の最中にインストールするファイルを追加することができます。ファイル拡張子がハンドヘルド上の HotSync 交換ライブラリによって認識される場合、ハンドヘルドはそのファイルを受け入れ、次に関連付けされたハンドヘルド アプリケーションが実行されたときユーザはそのファイルの情報を利用することができます。拡張子が認識されない場合、ファイルはハンドヘルドにインストールされず、メッセージがハンドヘルド上の HotSync ログに書き込まれます。ただし、デスクトップ上の HotSync ログには書き込まれません。
インストール ツール アプリケーションに加えて、ユーザは Windows Explorer コンテクスト メニュの「送る」アイテム経由で HotSync 交換とやりとりすることができます。このアイテムは「Palm OS Handheld」という名前が付けられています (図 3.3)。ファイルを右クリックしてこのメニュー アイテムを選ぶと、そのファイルはインストール ツールに渡され、インストール ツールはそのファイルをどの HotSync ユーザのためにインストールするかを問い合わせてきます。
図 3.3 HotSync 交換とインストール ツールのためのコンテクスト メニュー
いずれかのインストール コンジットに対してと同様に、ユーザは 図 3.4 で示されている HotSync マネージャの Custom ダイアログ ボックス経由で HotSync 交換インストール コンジットを使用可能、使用不可にすることができます。
図 3.4 HotSync 交換インストール コンジットのコンフィグレーション
HotSync 交換ライブラリは通常はデータが交換マネージャ経由で送られたときに表示される受領確認ダイアログを使用不可にします。そのため、「デスクトップからハンドヘルドへの交換」が成功してもハンドヘルド上では何のユーザ インターフェイスも表示されません。
デスクトップ HotSync 交換 API ^TOP^
HotSync 交換のための新しい API はありません。ハンドヘルドの主記憶装置にハンドヘルド上の交換マネージャに登録されたタイプのファイルを転送するには、あなたはいずれかの Palm OS ファイル タイプ (PRC, PDB など) のファイルをハンドヘルドにインストールするために呼び出す API と同じ API を呼び出します:
- C/C++ Sync Suite: インストール援助機能 PltInstallFile()
- COM Sync Suite: PDInstall|COM Sync Suite Reference601/3.InstallFileToHH()|COM Sync Suite Reference601/4
ハンドヘルドが Palm OS Cobalt を実行している場合、インストールするファイルが他のインストール コンジットによって登録されていないのなら HotSync 交換インストール コンジットがそのファイルをインストールします。一方、拡張カードが存在している場合、カードへのインストール コンジットがそのファイルを拡張カードにインストールしようとします。
ハンドヘルドの拡張カードへハンドヘルド上の VFS マネージャに登録されたタイプのファイルを転送するには、以下の API の 1 つを呼び出します:
- C/C++ Sync Suite: インストール援助機能 PltSlotInstallFile()
- COM Sync Suite: PDInstall|COM Sync Suite Reference601/3.InstallFileToSlot()|COM Sync Suite Reference601/4
これらの API についての更なる情報は、以下の 1 つを参照してください:
- C/C++ Sync Suite Companion の 「インストール援助機能 API の使用」
- COM Sync Suite Companion の 「PDInstall でのハンドヘルドへのファイルのインストール」|COM Sync Suite Companion601/4
アプリケーションとファイルのバンドル インストール ^TOP^
バンドル インストールはアプリケーションとそれのデータベースの両方 - 例えば、画像ビューア アプリケーションとサンプル JPG 画像 - を 1 回の HotSync でハンドヘルドへ転送します。以下のステップはバンドル インストールがどのように処理を進めていくのかの概要です:
- HotSync が開始されます。
- インストール コンジットが PRC ファイルと PDB ファイル -例えば JPG ビューア アプリケーション - をインストールします。
- HotSync 交換インストール コンジットが JPG ファイルのような他のファイルをハンドヘルド上の交換ライブラリへ転送します。
- すべてのアプリケーション (ステップ 2 でインストールされたビューア アプリケーションを含む) が sysAppLaunchCmdSyncNotify 起動コードを受け取ります。
- 副起動の最中に、ステップ 2 でインストールされたビューア アプリケーションは JPF ファイル タイプのための登録を交換マネージャに対して行わなければなりません。
- HotSync 交換ライブラリが sysNotifySyncFinishEvent 通知を受け取ります。
- HotSync 交換ライブラリがビューア アプリケーションを起動し、JPG ファイルをそのアプリケーションへ転送します。
ハンドヘルドからデスクトップへの HotSync 交換 ^TOP^
HotSync 交換を使ってファイルをハンドヘルドからデスクトップへ転送することは交換マネージャを使ってハンドヘルド アプリケーション間でデータを転送することに似ています。主な違いは、デスクトップ コンピュータとの HotSync の最中にデータがキューに追加され、転送されることです。
HotSync 交換をサポートするアプリケーションは、ユーザがあるアイテムを選択してそれを HotSync 交換経由でデスクトップへ「送る」ことを可能にします。そのアプリケーションは交換マネージャを呼び出し、送る情報とデスクトップ上のユーザの Exchange\From ディレクトリの中に作成するファイルを指定します。ハンドヘルド上の HotSync 交換ライブラリはこの情報を保持している新しいデータベースを作成し、そのデータベースが HotSync 中にデスクトップに転送されるまでそのデータベースをキューに追加します。
以下の節では、ハンドヘルド アプリケーションが HotSync 交換経由でファイルを転送することを可能にするユーザ インターフェイスと API について説明します。
ハンドヘルド ユーザ インターフェイス ^TOP^
ハンドヘルド上で、HotSync 交換をサポートする各アプリケーションはユーザがデスクトップに送る情報を選択するためのインターフェイスを提供しなければなりません。例えば、メモ帳は メモの送信メニュー アイテムを提供します。メモ帳は接続方法のリストを表示する交換マネージャを呼び出します (図 3.5)。HotSync を選択すると、そのメモは HotSync 中に HotSync 交換経由で転送されます。
ハンドヘルド上の HotSync クライアントはユーザに対してデスクトップに転送するためにキューに追加されているアイテムを削除する手段を提供します (図 3.6)。さらに、これはユーザがターゲット デスクトップを選択することを可能にします。その後、ファイルは次の HotSync の最中に選択されたデスクトップに転送されます。
図 3.6 HotSync クライアントのファイル交換キュー
ハンドヘルド HotSync 交換 API ^TOP^
アプリケーションはファイルを HotSync 交換経由でデスクトップに送るために標準 Palm OS 交換マネージャ API を使用します。HotSync 交換は 2 つの交換マネージャ スキーマをサポートします:
- デスクトップ スキーマ (_desktop)。このスキーマは HotSync マネージャ バージョン 6.0 以降を実行しているデスクトップへのファイルの直接交換をサポートします。
- 送信スキーマ (_send)。このスキーマは、ユーザが使用可能な転送手段のいずれかを使ってデータを送ることを可能にします。Palm OS Cobalt は転送手段の 1 つとして HotSync テクノロジを含みます。他の転送手段にはハンドヘルドの能力しだいで SMS や Bluetooth が含まれるかもしれません。
どちらのスキーマも交換マネージャ URL でのターゲット デスクトップの指定をサポートしないため、デフォルトでファイルは次の HotSync の最中にいずれかのデスクトップに送られます。しかしながら、ユーザは望むならば HotSync クライアント経由の HotSync 交換を保留している各ファイルに対してある特定のターゲット デスクトップを選択するかもしれません (図 3.6)。
HotSync 交換経由でデスクトップへ転送されるファイルは HotSync ユーザの Exchange\From サブディレクトリの中に置かれます。ターゲット URL がディレクトリを指定している場合、そのターゲット ファイルは Exchange\From の対応するサブディレクトリの中に置かれます。このサブディレクトリは存在しない場合は作成されます。ターゲット ファイル名と拡張子は URL からとられます。例えば、URL:
_desktop:///portraits/Jennifer Connelly/jcoscar12.bmp
は、ビットマップ画像がハンドヘルドからハンドヘルドが次に同期を行うデスクトップ上のファイル:
...Exchange\From\portraits\Jennifer Connelly\jcoscar12.bmp
への転送を指定しています。
ハンドヘルド上の交換マネージャについての更なる情報は、Palm OS SDK の Exploring Palm OS: High-Level Communications を参照してください。
ハンドヘルドから転送されるファイルの配置 ^TOP^
あなたがハンドヘルドからデスクトップへの HotSync 交換を通知される必要のあるデスクトップ アプリケーションを開発している場合、あなたはカスタム 通知機能 を作成する必要があります。あなたの通知機能は HotSync の終了時にハンドヘルドからユーザの Exchange\From ディレクトリに置かれた新しいファイルの存在を検知することができます。通知機能についての更なる情報は、「デスクトップ通知機能」 を参照してください。
HotSync ユーザの Exchange\From ディレクトリへのパスを取得するには、以下の関数の 1 つを呼び出します:
- C/C++ Sync Suite: ユーザ データ API UmGetUserDirectory()
- COM Sync Suite: PDUserData|COM Sync Suite Reference601/3.GetUserDirectory()|COM Sync Suite Reference601/4
これらの API についての更なる情報は、以下の 1 つを参照してください。
- C/C++ Sync Suite Companion の 「ユーザ データ API の使用」
- COM Sync Suite Companion の 「PDUserData でのユーザ データへのアクセス」|COM Sync Suite Companion601/4