Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Palm OS Programmer's Companion Volume II/5-6

← 5 節に戻る ↑5 章トップへ 7 節に進む →


5-6 シリアルリンクプロトコル

 
シリアルリンクプロトコル( SLP )は、Palm デスクトップソフトウェアやデバッガで利用される有用なパケット送受信メカニズムを提供します。SLP は CRC-16 による強力なエラー検知を提供します。SLP はベストエフォートプロトコルです。つまり、パケットの配達は保証されません(パケットの配達は高レベルプロトコルに任されます)。強化されたエラー検知と高レベルプロトコルの実装の便利さのために、SLP は、データパケット構造の欠くことのできない部分として、パケット種類・送信元・受信先・トランザクション ID 情報を指定します。

SLP パケット構造

以下のセクションについて説明します。

  • SLP パケットフォーマット?
  • パケットタイプの割り当て?
  • ソケット ID の割り当て?
  • トランザクション ID の割り当て?

SLP パケットフォーマット

各 SLP パケットは、図5.3 に示すように、パケットヘッダ・可変長のクライアントデータ・パケットフッタから構成されます。
図5.3 シリアルリンクプロトコルの構造

  • パケットヘッダは、パケット署名、受信先のソケット ID 、送信元のソケット ID 、パケット種類、クライアントデータサイズ、トランザクション ID 、ヘッダチェックサム、を含みます。パケット署名は、0xBE、0xEF、0xEDの3バイトがこの順序で並んで構成されています。ヘッダチェックサムはパケットヘッダ全体の 8 ビットの算術的チェックサムであり、それ自身のチェックサムフィールドを含みません。
  • クライアントデータはユーザによって指定される可変長のバイナリデータブロックで、シリアルリンクプロトコでは解釈されません。
  • パケットフッタは、パケットヘッダとクライアントデータをまたいで計算される CRC-16 値で構成されます。

パケットタイプの割り当て

0x00 〜 0x7F のパケットタイプ値は、システムソフトウェアが利用するために予約されています。以下のパケットタイプ割り当てが現在実装されています。
種類
0x00 リモートデバッガ、リモートコンソール、システムリモートプロシージャコールパケット
0x02 PADP パケット
0x03 ループバックテストパケット

ソケット ID の割り当て

ソケット ID は静的・動的の2つのカテゴリに分けられます。静的ソケット ID はシステムソフトウェアのコンポーネントによって予約された「有名な」ソケット ID 値です。動的ソケットIDは SLP のクライアントによって要求されたときに割り当てられます。0x00〜0x03 および 0xE0 〜 0xFF の範囲の静的ソケットID値は、システムソフトウェアが利用するために予約されています。以下の静的ソケットIDは現在実装または予約されているものです。
種類
0x00 リモートデバッガソケット
0x01 リモートコンソールソケット
0x02 リモート UI ソケット
0x03 デスクトップリンクサーバソケット
0x04 -0xCF 動的割り当てのために予約されています
0xD0 - 0xDF テストのために予約されています

トランザクション ID の割り当て

トランザクション ID 値はシリアルリンクプロトコルには解釈されず、高レベルプロトコルの唯一の利点です。以下のトランザクション ID 値は現在予約されています。
種類
0x00 と 0xFF システムソフトウェアの利用のために予約されています。
0x00 トランザクション ID 自動生成のために SLP の Palm OS 実装によって予約されています。
0xFF 接続マネージャのウェイクアップパケットのために予約されています。

SLP パケットの転送

このセクションでは、SLP パケットの転送に含まれる手順の概要について提示します。次のセクションでは、その実装について説明します。

  1. パケットヘッダを埋めてそのチェックサムを計算します。
  2. パケットヘッダとクライアントデータの CRC-16 を計算します。
  3. パケットヘッダ・クライアントデータ・パケットフッタを転送します。
  4. クライアントにエラーコードを戻します。

SLP パケットの受信

SLP パケットの受信は、以下の手順を含みます。

  1. パケットヘッダ署名が一致するまでシリアル入力をスキャンします。
  2. パケットヘッダの残りを読み取り、チェックサムが有効かどうか検証します。
  3. クライアントデータを読み取ります。
  4. パケットフッタを読み取り、パケットの CRC が有効かどうか検証します。
  5. エラーコードやパケットを(もし成功したなら)クライアントにディスパッチまたは戻します。

 


← 5 節に戻る ↑5 章トップへ 7 節に進む →