From 8dfa8775e56d922d40efa8d0250fc3ef0165c11d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 7 Jun 2013 17:40:10 +0200 Subject: [PATCH] Bridge: now processes start can be checked for errors --- hardware/arduino/avr/libraries/Bridge/Bridge.cpp | 9 +++++---- hardware/arduino/avr/libraries/Bridge/Bridge.h | 2 +- hardware/arduino/avr/libraries/Bridge/Process.cpp | 6 ++++-- hardware/arduino/avr/libraries/Bridge/Process.h | 2 ++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hardware/arduino/avr/libraries/Bridge/Bridge.cpp b/hardware/arduino/avr/libraries/Bridge/Bridge.cpp index a653b1260..928479c60 100644 --- a/hardware/arduino/avr/libraries/Bridge/Bridge.cpp +++ b/hardware/arduino/avr/libraries/Bridge/Bridge.cpp @@ -55,11 +55,12 @@ void BridgeClass::begin() { transfer(cmd, 2); } -uint8_t BridgeClass::runCommand(String &command) { +uint8_t BridgeClass::runCommand(String &command, uint8_t &err) { uint8_t cmd[] = {'R'}; - uint8_t res[1]; - transfer(cmd, 1, (uint8_t*)command.c_str(), command.length(), res, 1); - return res[0]; + uint8_t res[2]; + transfer(cmd, 1, (uint8_t*)command.c_str(), command.length(), res, 2); + err = res[0]; + return res[1]; } bool BridgeClass::commandIsRunning(uint8_t handle) { diff --git a/hardware/arduino/avr/libraries/Bridge/Bridge.h b/hardware/arduino/avr/libraries/Bridge/Bridge.h index 6043e15d1..6e54bbd64 100644 --- a/hardware/arduino/avr/libraries/Bridge/Bridge.h +++ b/hardware/arduino/avr/libraries/Bridge/Bridge.h @@ -28,7 +28,7 @@ public: void begin(); // Methods to handle processes on the linux side - uint8_t runCommand(String &command); + uint8_t runCommand(String &command, uint8_t &err); bool commandIsRunning(uint8_t handle); unsigned int commandExitValue(uint8_t handle); void cleanCommand(uint8_t handle); diff --git a/hardware/arduino/avr/libraries/Bridge/Process.cpp b/hardware/arduino/avr/libraries/Bridge/Process.cpp index 7265119d5..59fe2b734 100644 --- a/hardware/arduino/avr/libraries/Bridge/Process.cpp +++ b/hardware/arduino/avr/libraries/Bridge/Process.cpp @@ -85,11 +85,13 @@ void Process::addParameter(String ¶m) { } void Process::runAsynchronously() { - handle = bridge.runCommand(*cmdline); + uint8_t err; + handle = bridge.runCommand(*cmdline, err); delete cmdline; cmdline = NULL; - started = true; + if (err==0) + started = true; } boolean Process::running() { diff --git a/hardware/arduino/avr/libraries/Bridge/Process.h b/hardware/arduino/avr/libraries/Bridge/Process.h index b48e04651..ac22b157a 100644 --- a/hardware/arduino/avr/libraries/Bridge/Process.h +++ b/hardware/arduino/avr/libraries/Bridge/Process.h @@ -39,6 +39,8 @@ public: unsigned int exitValue(); void close(); + operator bool () { return started; } + // Stream methods // (read from process stdout) int available();