Marco Zecchini
/
Example_RTOS
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Sun Jul 17 2022 08:25:26 by 1.7.2