aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2013-06-12 13:28:24 +0200
committerCristian Maglie <c.maglie@bug.st>2013-06-12 13:28:24 +0200
commit406c20222affa4940c4b90b42e8cc22cbe10c5e2 (patch)
tree92c5a774c82fb8e8e86040610cbdf517881eb804
parent8674a1b9e9da542b729d660d8f996f0e58008dbd (diff)
Added Process.runShellCommand*() methods.
-rw-r--r--libraries/Bridge/Process.cpp14
-rw-r--r--libraries/Bridge/Process.h3
-rw-r--r--libraries/Bridge/examples/ShellCommands/ShellCommands.ino26
3 files changed, 43 insertions, 0 deletions
diff --git a/libraries/Bridge/Process.cpp b/libraries/Bridge/Process.cpp
index 78f168f..219922a 100644
--- a/libraries/Bridge/Process.cpp
+++ b/libraries/Bridge/Process.cpp
@@ -118,6 +118,20 @@ void Process::close() {
started = false;
}
+unsigned int Process::runShellCommand(const String &command) {
+ runShellCommandAsynchronously(command);
+ while (running())
+ delay(100);
+ return exitValue();
+}
+
+void Process::runShellCommandAsynchronously(const String &command) {
+ begin("/bin/ash");
+ addParameter("-c");
+ addParameter(command);
+ runAsynchronously();
+}
+
// This method is currently unused
//static unsigned int __commandOutputAvailable(uint8_t handle) {
// uint8_t cmd[] = {'o', handle};
diff --git a/libraries/Bridge/Process.h b/libraries/Bridge/Process.h
index cf950d4..cacf516 100644
--- a/libraries/Bridge/Process.h
+++ b/libraries/Bridge/Process.h
@@ -36,6 +36,9 @@ public:
unsigned int exitValue();
void close();
+ unsigned int runShellCommand(const String &command);
+ void runShellCommandAsynchronously(const String &command);
+
operator bool () { return started; }
// Stream methods
diff --git a/libraries/Bridge/examples/ShellCommands/ShellCommands.ino b/libraries/Bridge/examples/ShellCommands/ShellCommands.ino
new file mode 100644
index 0000000..a362ed8
--- /dev/null
+++ b/libraries/Bridge/examples/ShellCommands/ShellCommands.ino
@@ -0,0 +1,26 @@
+
+/* Demonstrate shell commands */
+
+#include <Process.h>
+
+void setup() {
+ Bridge.begin();
+ Console.begin();
+ Console.buffer(64);
+}
+
+void loop() {
+ Process p;
+ // This command line prints the number of bytes received and transmitted from WLAN
+ p.runShellCommand(F("ifconfig wlan0 | grep \"RX bytes\" | tr ':' ' ' | awk \"{ print \\$3 \\\" \\\" \\$8 }\"\n"));
+
+ // Read command output
+ while (p.available()) {
+ char c = p.read();
+ Console.print(c);
+ }
+ Console.flush();
+
+ delay(5000);
+}
+