ラベル RPC の投稿を表示しています。 すべての投稿を表示
ラベル RPC の投稿を表示しています。 すべての投稿を表示

2013年2月16日土曜日

mbed-rpcを修正してみた。

mbed-rpcをforkしたら修正箇所がファイル全体になってしまって解りづらいので少し説明。

forkしたmbed-rpc:
mbed-rpc

クラスのメンバー関数でもRPCFunctionの(Arguments*, Reply*)タイプの関数を使えるように、rpc.h に以下の関数を追加。
template<class T, void(T::*member)(Arguments*, Reply*)>
void rpc_method_caller(RPC *this_ptr, Arguments *arguments, Reply *result) {
    (static_cast<T*>(this_ptr)->*member)(arguments, result);

使用例:
ExtensionUnitのテスト

RpcClasses.hのRpcAnalogInクラス、RpcAnalogOutクラスがRPC::add_rpc_classで登録出来るように、Arguments.cppに以下の関数を追加。
template<> unsigned short Arguments::getArg<unsigned short>(void) {
    index++;
    char *pEnd;
    return strtol(argv[index], &pEnd, 10);
}

template<> void Reply::putData<unsigned short>(unsigned short v) {
    separator();
    reply += sprintf(reply, "%u", v);
}

(2013/2/16)
---

2013年2月13日水曜日

mbed-rpcを読んでみた。

カメラのパン・チルト・フォーカス等の操作をRPCで出来ればテストに便利かなと使い方を理解するためにmbed-rpcを読んでみた。

RPC対応のクラスを作るには RpcClasses.h が参考になりそう。

変数への代入・読み出しだけなら RPCVariable を使えば1行追加するだけです。
簡単な関数を呼び出すだけなら RPCFunction が使えます。もちろん、引数を渡したり返り値を得ることが出来ます。可変長引数も可能です。

その他に RPC::construct で クラスではなくて インスタンスを作成して登録できるらしい。これはまだ試してない。

使用例:
RPC_Serial/main.cpp

(2013/2/13)

RPC::constructを試してみた。
RPC::construct<クラス名, 引数1の型, 引数2の型, ...>(引数1, 引数2,...)のように呼びます。
使用例ではRpcLEDクラスをRPC::constructでインスタンス化(オブジェクト化)しています。
クラスのメンバ関数にget_rpc_class()関数を書く必要はありません。

使用例:

RPC_Serial/main.cpp

RPC::call() からのリストではインスタンスとクラスの区別がつかないが、
/RPC/objects でインスタンス(オブジェクト)だけを表示出来ます。
/RPC/clear でインスタンスを全て削除します。

(2013/2/14追加)
---

2012年7月17日火曜日

mbedでRPC over Bluetoothのテスト


BTstackのSPPの動作テストのループバックではローカルエコーと区別がつきにくいので間にRPCを入れてみた。
上の動画ではパソコンからmbedのLEDを操作しています。

spp_rpc.cpp

TeraTermの場合は次のように設定してからmbedに接続します。


(2012/7/17)
---