Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume II/5-6
5-6 シリアルリンクプロトコル
シリアルリンクプロトコル( SLP )は、Palm デスクトップソフトウェアやデバッガで利用される有用なパケット送受信メカニズムを提供します。SLP は CRC-16 による強力なエラー検知を提供します。SLP はベストエフォートプロトコルです。つまり、パケットの配達は保証されません(パケットの配達は高レベルプロトコルに任されます)。強化されたエラー検知と高レベルプロトコルの実装の便利さのために、SLP は、データパケット構造の欠くことのできない部分として、パケット種類・送信元・受信先・トランザクション ID 情報を指定します。
SLP パケット構造
以下のセクションについて説明します。
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 パケットの転送に含まれる手順の概要について提示します。次のセクションでは、その実装について説明します。
- パケットヘッダを埋めてそのチェックサムを計算します。
- パケットヘッダとクライアントデータの CRC-16 を計算します。
- パケットヘッダ・クライアントデータ・パケットフッタを転送します。
- クライアントにエラーコードを戻します。
SLP パケットの受信
SLP パケットの受信は、以下の手順を含みます。
- パケットヘッダ署名が一致するまでシリアル入力をスキャンします。
- パケットヘッダの残りを読み取り、チェックサムが有効かどうか検証します。
- クライアントデータを読み取ります。
- パケットフッタを読み取り、パケットの CRC が有効かどうか検証します。
- エラーコードやパケットを(もし成功したなら)クライアントにディスパッチまたは戻します。