mbed-os
Fork of mbed-os by
Diff: features/unsupported/tests/mbed/rpc/main.cpp
- Revision:
- 0:f269e3021894
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/features/unsupported/tests/mbed/rpc/main.cpp Sun Oct 23 15:10:02 2016 +0000 @@ -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; +}