特集
Raspberry PiにAllJoynフレームワーク「Standard Core」を移植する(6/6 ページ)
AllJoynは「家電を中心にさまざまな機器を接続し、情報交換を可能としたフレームワーク」です。さまざまな機器を対象としており、それにはRaspberry Piも含まれます。ルーター機能などを実装可能な「Standard Core」をRaspberry Piに移植します。
では、クライアント側にはどのような記述がされているのでしょうか。基本的な流れは前回と大きく変わりませんが、若干異なる部分もあります。
if (!g_msgBus) { status = ER_OUT_OF_MEMORY; } if (ER_OK == status) { status = CreateInterface(); } if (ER_OK == status) { status = StartMessageBus(); } if (ER_OK == status) { status = ConnectToBus(); } if (ER_OK == status) { RegisterBusListener(); status = FindAdvertisedName(); /サーバがバス上に公開した名称を探すサブルーティン/ } if (ER_OK == status) { status = WaitForJoinSessionCompletion(); } if (ER_OK == status) { status = MakeMethodCall(); /サーバに文字列をメッセージとして渡すサブルーティン/ } /* Deallocate bus */ delete g_msgBus; g_msgBus = NULL; printf("Basic client exiting with status 0x%04x (%s).\n", status, QCC_StatusText(status));
文字列をメッセージとして渡すサブルーティンも見てみましょう。
QStatus MakeMethodCall(void) { ProxyBusObject remoteObj(*g_msgBus, SERVICE_NAME, SERVICE_PATH, s_sessionId); const InterfaceDescription* alljoynTestIntf = g_msgBus->GetInterface(INTERFACE_NAME); assert(alljoynTestIntf); remoteObj.AddInterface(*alljoynTestIntf); Message reply(*g_msgBus); MsgArg inputs[2]; inputs[0].Set("s", "Hello "); 文字列1を設定 inputs[1].Set("s", "World!"); 文字列2を設定 QStatus status = remoteObj.MethodCall(INTERFACE_NAME, "cat", inputs, 2, reply, 5000); /サーバを呼び出します/ if (ER_OK == status) { printf("'%s.%s' (path='%s') returned '%s'.\n", SERVICE_NAME, "cat", SERVICE_PATH, reply->GetArg(0)->v_string.str); } else { printf("MethodCall on '%s.%s' failed.", SERVICE_NAME, "cat"); } return status; }
サーバ側の呼ばれる関数とクライアント側の呼び出す関数を見ると、次のことが分かります。
サーバ/クライアント | 関数 |
---|---|
Server側 | void Cat(const InterfaceDescription::Member* member, Message& msg) |
Client側 | QStatus status = remoteObj.MethodCall(INTERFACE_NAME, "cat", inputs, 2, reply, 5000) |
バスを通した関数呼び出しの形になっていることが分かります。複雑な前処理がありますが、基本部分はこの考え方に沿って進みます。APIの詳しい説明は、以下のURLにあります。また、今回のサンプル以外にも、同じディレクトリに幾つかのサンプルプログラムがあるので参照してください。
・Running Sample Applications(サンプルプログラムの解説とビルド)
・AllJoyn Java API Reference Manual
・AllJoyn C API Reference Manual
・AllJoyn C++ API Reference Manual
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Raspberry PiにAllJoynを移植して、IoTを自作する
「いろいろなデバイスがシームレスにつながり、簡単に操作できる」――IoTが目指すその姿を、Raspberry Piと機器相互接続フレームワーク「Alljoyn」で自作してみましょう。 - 「Alljoyn」のいまをクアルコムブースで見る
ET2015のクアルコムブースにて大きく展示されていたのは、機器相互接続フレームワーク「Alljoyn」のデモだ。機器連携シナリオ“ストーリー”の様子も紹介されている。 - 激化する“IoTの陣取り合戦”欠けているのは「共通言語」
IoTの未来像として、「いろいろなデバイスがシームレスにつながり、簡単に操作できる」様子が挙げられるが、AllSeen Allianceのディレクターはそのために必要なのは「共通言語だ」という。 - Allseen Allianceの中核技術「Alljoyn」とは何か
Linux Foundationが設立した非営利団体「Allseen Alliance」のキモとなるのが「Alljoyn」だ。IoTについて“現状の使いにくさ”の打破を目指す、この団体の中核技術を解説する。 - IoT団体によるUPnP(Universal Plug and Play)吸収を読み解く
インテルやサムスンらが主導するIoT標準化団体「OIC」が、UPnP(Universal Plug and Play)Forumを吸収した。UPnPの推進する“挿すだけで使える”をIoTに持ち込むことは理にかなっているように思えるが、AppleのHomeKitや、GoogleのProject Brilloに対する競争力はあるだろうか。