Rtos API example

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "test_env.h"
00003 #include "mbed_rpc.h"
00004 
00005 void foo(Arguments *args, Reply *reply) {
00006     reply->putData<float>(args->getArg<float>() * 3.3);
00007 }
00008 
00009 bool rpc_test(const char *input, const char *expected) {
00010     char outbuf[RPC_MAX_STRING] = {0};
00011     bool result = RPC::call(input, outbuf);
00012     printf("RPC: %s -> ", input);
00013 
00014     if (result == false) {
00015         printf("Procedure call ... [FAIL]\r\n");
00016     } else if (strncmp(outbuf, expected, RPC_MAX_STRING) != 0) {
00017         printf("'%s' != '%s' ... [FAIL]\r\n", outbuf, expected);
00018         result = false;
00019     } else {
00020         printf("'%s' ... [OK]\r\n", outbuf);
00021     }
00022     return result;
00023 }
00024 
00025 #define RPC_TEST(INPUT,EXPECTED) result = result && rpc_test(INPUT,EXPECTED); if (result == false) { notify_completion(result); exit(1); }
00026 
00027 int main() {
00028     float f = 0;
00029     bool result = true;
00030     // Variable
00031     RPCVariable<float> rpc_f(&f, "f");
00032     RPC_TEST("/f/write 1", "");
00033     RPC_TEST("/f/read", "1");
00034 
00035     // Function
00036     RPCFunction rpc_foo(&foo, "foo");
00037 #if defined(TOOLCHAIN_ARM_MICRO)
00038     RPC_TEST("/foo/run 1", "3.299999952316284");
00039 #else
00040     RPC_TEST("/foo/run 1", "3.2999999523162842");
00041 #endif
00042 
00043     // Class
00044     RPC::add_rpc_class<RpcDigitalOut>();
00045     RPC_TEST("/DigitalOut/new LED2 led2", "led2");
00046     RPC_TEST("/led2/write 1", "");
00047     RPC_TEST("/led2/read", "1");
00048 
00049     // Instance
00050     RpcDigitalOut rpc_led(LED1, "led1");
00051     RPC_TEST("/led1/write 1", "");
00052     RPC_TEST("/led1/read", "1");
00053 
00054     // Introspection
00055     RPC_TEST("/", "led1 led2 foo f DigitalOut RPC");
00056     RPC_TEST("/f", "read write delete");
00057     RPC_TEST("/foo", "run delete");
00058     RPC_TEST("/DigitalOut", "new");
00059     RPC_TEST("/led1", "write read delete");
00060 
00061     // Delete instance
00062     RPC_TEST("/led2/delete", "");
00063     RPC_TEST("/", "led1 foo f DigitalOut RPC");
00064 
00065     notify_completion(result);
00066     return 0;
00067 }