Enhanced version of Simon Ford's RPC demo program allowing command-line editing and providing interactive help. Includes Stream (Serial, etc.) line editing routine in separate files.

Dependencies:   mbed

Revision:
0:ec7de5c0199f
diff -r 000000000000 -r ec7de5c0199f main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Feb 10 15:34:58 2010 +0000
@@ -0,0 +1,73 @@
+// Derived from Simon Ford's RPC demo program,
+// this adds line editing and help to the RPC over serial over USB operation.
+#include "mbed.h"
+#include "rpc.h"
+#include "getline.h"
+
+Serial pc(USBTX, USBRX);    // 9600/n/8/1
+
+char command[256] = {0};
+char response[256] = {0};
+
+// print a summary of classes and objects and their methods
+void usage()
+{
+    pc.puts("/<class>/new pin [pin [...]] [objname] => objname\n\r");
+    pc.puts("/<objname>/<method> [arg [arg ...]]\n\r");
+    char resp2[256];
+    rpc("/", resp2);
+    char *p = strtok(resp2, " ");
+    while (*p)
+    {
+        command[0] = '/';
+        strcpy(command+1, p);
+        strcat(command, "/");
+        rpc(command, response);
+        pc.puts(command);
+        pc.puts(" : ");
+        pc.puts(response);
+        pc.puts("\n\r");
+        p = strtok(NULL, " ");
+    }
+}
+
+int main()
+{
+    // setup the classes that can be created dynamically
+    Base::add_rpc_class<AnalogIn>();
+    Base::add_rpc_class<AnalogOut>();
+    Base::add_rpc_class<DigitalIn>();
+    Base::add_rpc_class<DigitalOut>();
+    Base::add_rpc_class<PwmOut>();
+    Base::add_rpc_class<Timer>();
+    Base::add_rpc_class<SPI>();
+    Base::add_rpc_class<BusOut>();
+    Base::add_rpc_class<BusIn>();
+
+    pc.puts("type help for help\n\r");
+   
+    // receive commands, and send back the responses
+    for (;;)
+    {
+        if (getline(pc, command, 256) > 0)
+        {
+            if (!strcmp(command, "help"))
+                usage();
+            else
+            {
+                rpc(command, response);
+                if (strlen(response) > 0)
+                {
+                    pc.putc('[');
+                    pc.puts(response);
+                    pc.puts("]\n\r");
+                }
+            }
+            pc.puts("> ");
+        }
+        else
+        {
+            pc.puts("?\n\r> ");
+        }
+    }
+}