概要

HIPC(Heterogeneous Inter-Process Communication)プロトコルは、HTTPやFTP等と同じくアプリケーション層に属するプロトコルです。特定の下位プロトコルに依存していないため、HIPCはUARTやTCPなど様々な通信路で利用可能です。HIPCプロトコルではマイコンがサーバー、パソコンがクライアントなり、メッセージが送受信されます。メッセージの種類にはGET、PUT、CASTなどが有り、メッセージに乗せて構造体データを送受信することが出来ます。例えばPUTメッセージのボディとして複数の整数値型をメンバに持つ構造体データをパソコンからマイコンに送ることが出来ます。このボディはバイナリデータであり、printfやscanfといった関数を使っての文字列と整数値の変換処理は必要ありません。その代わり、エンディアンや各メンバのオフセットを調整が必要となり、これらの処理はパソコン側のHIPCライブラリが受け持ちます。

HIPCの実装自由度は高く、サーバーは一部のメッセージタイプを利用しなくても構いません。また、各メッセージをどう使うかもユーザー次第となります。例えばPUTメッセージは、パラメータの書き換え、イベントの投入、ボディの構造体データを引数とした関数の呼び出しといった用途に使われることを想定しています。

HIPCは限られたリソース(特にメモリ)しかないマイコンやリアルタイムシステムでも利用できることを目指して設計されています。リアルタイムシステム向けには、HIPCの通信タスクとリアルタイムタスク間でデータをやり取りするための仕組み(pbankとqueue)も用意されています。

HIPC概念図
HIPC概念図
< HELLO[07 ff 00 05] 43 46 47 49 44
> SYS[02 6c 00 01] 01
> SYS[02 00 01 01] 00
> SYS[02 00 02 01] 01
< GET[04 00 00 01]
> SUCCESS[01 00 00 01] 00
< PUT[05 00 00 01] 01
> SUCCESS[01 ff 00 00]
< BYE[06 ff 00 00]
> QUIT[00 ff 00 00]

HIPC通信の例 (詳細はプロトコル仕様参照)

HIPCの利用例

なお、ここではパソコンとしていますが、HIPCとしてはLinuxやWindowsといった汎用OSとその機能全体を動かせるデバイスが広くクライアントとして利用できると考えています。よって、パソコンの代わりにRaspberry Piやタブレット型端末を利用することも可能です。また、一台のパソコンで(複数のブラウザ、つまり複数のHTTPセッション)複数の異なるサーバーにそれぞれFTPセッションが開けるように、一台のパソコンから複数のHIPCセッションを使って複数のマイコンに接続することも可能です。

構成(コンフィギュレーション)

HIPCを利用するには、まず構成を作成します。HIPCの構成で最も重要なことは、通信に使う構造体型を定義することです。HIPCではこの事前に定められた構造体型を基礎に、サーバーとクライアントが構造体データを送受信します。

構造体型は、配列や他の構造体型をメンバーに持つことが出来ます。また、1つの構成に複数の構造体型を定義することも出来ます。

サーバーが複数の構成に対応することは出来ますが、1セッションで使える構成は1つだけです。構成IDは構成を識別するために利用されます。

構成は、書式に従ってコンフィギュレーションファイルに記述します。

データの送受信の種類

HIPCプロトコルで構造体データを送受信する方法は、PUT、GET、CASTの3種類があります。

PUTはクライアントによるデータの送付です。まず、クライアントが構造体データを乗せたPUTメッセージを送ります。処理に成功するとサーバーはSUCCESSメッセージを返します。

GETはクライアントによるデータの取得です。まず、クライアントが取得したいデータを指定したGETメッセージを送ります。処理に成功するとサーバーは対応する構造体データを乗せたSUCCESSメッセージを返します。

CASTはサーバーからのデータの送付です。サーバーは随時CASTメッセージに乗せて構造体データを送ることが認められています。これにより、クライアントからの要求がなくてもサーバーはデータを送ることが出来ます。

PUT・GET・CASTの利用例

HIPC利用の流れ

  1. 構成を決め、コンフィグレーションファイルを作成する。このファイルにはYAML形式で構造体型の定義などを記述する。
  2. このコンフィグレーションファイルを引数にhipcconfigを実行する。hipcconfigはサーバー用とクライアント用それぞれのC言語ソースコードを出力する。
  3. 出力されたソースコードを使いサーバープログラムとクライアントプログラムを作成する。
  4. サーバープログラムを起動した後、クライアントプログラムを実行する。

なお、サーバー・クライアント間でやり取りされているメッセージを確認するにはhipcdumpを利用します。


TOPページ

Last modified: 2015/07/27 08:00:59 +09:00