aboutsummaryrefslogtreecommitdiff
path: root/tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp
diff options
context:
space:
mode:
authorJun Wako <wakojun@gmail.com>2015-04-24 16:26:14 +0900
committerJun Wako <wakojun@gmail.com>2015-04-24 16:26:14 +0900
commit1fe4406f374291ab2e86e95a97341fd9c475fcb8 (patch)
tree1be0e16b4b07b5a31ea97ec50a9eb13a288c3d27 /tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp
parenta20ef7052c6e937d2f7672dd59456e55a5c08296 (diff)
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
b9e0ea0 Merge commit '7fa9d8bdea3773d1195b04d98fcf27cf48ddd81d' as 'tool/mbed/mbed-sdk' 7fa9d8b Squashed 'tool/mbed/mbed-sdk/' content from commit 7c21ce5 git-subtree-dir: tmk_core git-subtree-split: b9e0ea08cb940de20b3610ecdda18e9d8cd7c552
Diffstat (limited to 'tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp')
-rw-r--r--tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp b/tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp
new file mode 100644
index 0000000000..9912c671b6
--- /dev/null
+++ b/tool/mbed/mbed-sdk/libraries/tests/mbed/rpc/main.cpp
@@ -0,0 +1,67 @@
+#include "mbed.h"
+#include "test_env.h"
+#include "mbed_rpc.h"
+
+void foo(Arguments *args, Reply *reply) {
+ reply->putData<float>(args->getArg<float>() * 3.3);
+}
+
+bool rpc_test(const char *input, const char *expected) {
+ char outbuf[RPC_MAX_STRING] = {0};
+ bool result = RPC::call(input, outbuf);
+ printf("RPC: %s -> ", input);
+
+ if (result == false) {
+ printf("Procedure call ... [FAIL]\r\n");
+ } else if (strncmp(outbuf, expected, RPC_MAX_STRING) != 0) {
+ printf("'%s' != '%s' ... [FAIL]\r\n", outbuf, expected);
+ result = false;
+ } else {
+ printf("'%s' ... [OK]\r\n", outbuf);
+ }
+ return result;
+}
+
+#define RPC_TEST(INPUT,EXPECTED) result = result && rpc_test(INPUT,EXPECTED); if (result == false) { notify_completion(result); exit(1); }
+
+int main() {
+ float f = 0;
+ bool result = true;
+ // Variable
+ RPCVariable<float> rpc_f(&f, "f");
+ RPC_TEST("/f/write 1", "");
+ RPC_TEST("/f/read", "1");
+
+ // Function
+ RPCFunction rpc_foo(&foo, "foo");
+#if defined(TOOLCHAIN_ARM_MICRO)
+ RPC_TEST("/foo/run 1", "3.299999952316284");
+#else
+ RPC_TEST("/foo/run 1", "3.2999999523162842");
+#endif
+
+ // Class
+ RPC::add_rpc_class<RpcDigitalOut>();
+ RPC_TEST("/DigitalOut/new LED2 led2", "led2");
+ RPC_TEST("/led2/write 1", "");
+ RPC_TEST("/led2/read", "1");
+
+ // Instance
+ RpcDigitalOut rpc_led(LED1, "led1");
+ RPC_TEST("/led1/write 1", "");
+ RPC_TEST("/led1/read", "1");
+
+ // Introspection
+ RPC_TEST("/", "led1 led2 foo f DigitalOut RPC");
+ RPC_TEST("/f", "read write delete");
+ RPC_TEST("/foo", "run delete");
+ RPC_TEST("/DigitalOut", "new");
+ RPC_TEST("/led1", "write read delete");
+
+ // Delete instance
+ RPC_TEST("/led2/delete", "");
+ RPC_TEST("/", "led1 foo f DigitalOut RPC");
+
+ notify_completion(result);
+ return 0;
+}