]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
sleep better -- more in line with FTDI timeouts etc.
authorandreaskoepke <andreaskoepke>
Thu, 1 Nov 2007 19:20:37 +0000 (19:20 +0000)
committerandreaskoepke <andreaskoepke>
Thu, 1 Nov 2007 19:20:37 +0000 (19:20 +0000)
adjust compromise between speed and reliability

tools/platforms/msp430/cppbsl/src/Serial.cc
tools/platforms/msp430/cppbsl/src/Serial.h

index 0db3890c18644ca53860942b1ab75958f8957015..119323033990563b77443abddf2053929966c863 100644 (file)
@@ -45,7 +45,7 @@ int serial_connect(int* err, const char* dev, int* readFD, int* writeFD, termios
     int r = 0;
     *readFD = -1;
     *writeFD = -1;
-    for(int i = 0; i < 3; i++) {
+    for(int i = 0; i < 2; i++) {
         *readFD = open(dev, O_RDONLY | O_NOCTTY | O_NONBLOCK);
         *err = errno;
         if(*readFD != -1) {
@@ -146,11 +146,14 @@ int serial_connect(int* err, const char* dev, int* readFD, int* writeFD, termios
     return r;
 };
 
+int BaseSerial::setPins(int *err) {
+    setRST(err);
+    return setTEST(err);
+}
+
 int BaseSerial::resetPins(int *err) {
-    int r = 0;
-    r = setRST(err);
-    r = clrTEST(err);
-    return r;
+    setRST(err);
+    return clrTEST(err);
 }
 
 int BaseSerial::disconnect(int *err) {
@@ -185,13 +188,13 @@ int BaseSerial::reset(int *err) {
     if(r == -1) return -1;
     r = setTEST(err);
     if(r == -1) return -1;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     r = clrRST(err);
     if(r == -1) return -1;
-    serial_delay(10);
+    serial_delay(switchdelay);
     r = setRST(err);
     if(r == -1) return -1;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     cout << "Reset device ..." << endl;
     return clearBuffers(err);
 };
@@ -202,27 +205,22 @@ int BaseSerial::invokeBsl(int *err) {
     if(r == -1) return -1;
     r = setTEST(err);
     if(r == -1) return -1;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     r = clrRST(err);
     if(r == -1) return -1;
     r = setTEST(err);
     if(r == -1) return -1;
-    serial_delay(10);
     r = clrTEST(err);
     if(r == -1) return -1;
-    serial_delay(10);
     r = setTEST(err);
     if(r == -1) return -1;
-    serial_delay(10);
     r = clrTEST(err);
     if(r == -1) return -1;
-    serial_delay(10);
     r = setRST(err);
     if(r == -1) return -1;
-    serial_delay(10);
     r = setTEST(err);
     if(r == -1) return -1;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     cout << "Invoking BSL..." << endl;
     return clearBuffers(err);
 }
@@ -243,8 +241,8 @@ int BaseSerial::readFD(int *err, char *buffer, int count, int maxCount) {
                 return -1;
             }
             FD_CLR(serialReadFD, &rfds);
-            if(retries++ >= 3) {
-                cerr << "FATAL: BaseSerial::readFD no data available after 3s" << endl;
+            if(retries++ >= 2) {
+                cerr << "FATAL: BaseSerial::readFD no data available after 1s" << endl;
                 return -1;
             }
         }
@@ -270,7 +268,7 @@ int BaseSerial::txrx(int *err, frame_t *txframe, frame_t *rxframe) {
              << endl;
         return -1;
     }
-    for(unsigned i = 0; i < 3; i++) {
+    for(unsigned i = 0; i < 2; i++) {
         r = write(serialWriteFD,&sync, 1);
         if(r == -1) {
             *err = errno;
@@ -368,7 +366,7 @@ int TelosBSerial::reset(int *err) {
     int r;
     r = telosI2CWriteCmd(err, 0, 0);
     if(r == -1) return r;
-    serial_delay(10000);
+    serial_delay(switchdelay);
     r = telosI2CWriteCmd(err, 0, 3);
     if(r == -1) return r;
     r = telosI2CWriteCmd(err, 0, 2);
@@ -377,7 +375,7 @@ int TelosBSerial::reset(int *err) {
     if(r == -1) return r;
     r = telosI2CWriteCmd(err, 0, 0);
     if(r == -1) return r;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     cout << "Reset device ..." << endl;
     return clearBuffers(err);
 }
@@ -386,7 +384,7 @@ int TelosBSerial::invokeBsl(int *err) {
     int r;
     r = telosI2CWriteCmd(err, 0, 0);
     if(r == -1) return r;
-    serial_delay(10000);
+    serial_delay(switchdelay);
     r = telosI2CWriteCmd(err, 0, 1);
     if(r == -1) return r;
     r = telosI2CWriteCmd(err, 0, 3);
@@ -401,7 +399,7 @@ int TelosBSerial::invokeBsl(int *err) {
     if(r == -1) return r;
     r = telosI2CWriteCmd(err, 0, 0);
     if(r == -1) return r;
-    serial_delay(2500);
+    serial_delay(switchdelay);
     cout << "Invoking BSL..." << endl;
     return clearBuffers(err);
 }
@@ -471,12 +469,15 @@ int TelosBSerial::telosI2CWriteCmd(int *err, uint8_t addr, uint8_t cmdbyte) {
     if(r == -1) return r;
     r = telosI2CWriteByte(err,  cmdbyte );
     if(r == -1) return r;
-    return telosI2CStop(err);
+    r = telosI2CStop(err);
+    if(r == -1) return r;
+    return clearBuffers(err);
+}
+
+int TelosBSerial::setPins(int *err) {
+    return 0;
 }
 
 int TelosBSerial::resetPins(int *err) {
-    int r = 0;
-    r = setRTS(err);
-    r = clrDTR(err);
-    return r;
+    return 0;
 }
index 597534d14299d6b77169c4f52ad4b841d520f02e..feca96c2d606e6534c7f0ee24769b3e21f46d41f 100644 (file)
@@ -103,9 +103,6 @@ protected:
             *err = errno;
             std::cerr << "ERROR: BaseSerial::setDTR could not set DTR pin" << std::endl;
         }
-        else {
-            serial_delay(switchdelay);
-        }
         return r;
     }
     inline int clrDTR(int *err) {
@@ -115,9 +112,6 @@ protected:
             *err = errno;
             std::cerr << "ERROR: BaseSerial::clrDTR could not clr DTR pin" << std::endl;
         }
-        else {
-            serial_delay(switchdelay);
-        }
         return r;
     }
     inline int setRTS(int *err) {
@@ -127,9 +121,6 @@ protected:
             *err = errno;
             std::cerr << "ERROR: BaseSerial::setRTS could not set RTS pin" << std::endl;
         }
-        else {
-            serial_delay(switchdelay);
-        }
         return r;
     }
     inline int clrRTS(int *err) {
@@ -139,9 +130,6 @@ protected:
             *err = errno;
             std::cerr << "ERROR: BaseSerial::clrRTS could not clr RTS pin" << std::endl;
         }
-        else {
-            serial_delay(switchdelay);
-        }
         return r;
     }
     
@@ -181,18 +169,18 @@ protected:
     }
     
     int readFD(int *err, char *buffer, int count, int maxCount);
+    virtual int setPins(int *err);
     virtual int resetPins(int *err);
     
 public:
     BaseSerial(const termios& term, int rFD, int wFD, bool T=false, bool R=false) :
-        switchdelay(10),
+        switchdelay(30000),
         oldtermios(term),
         serialReadFD(rFD), serialWriteFD(wFD),
         invertTest(T), invertReset(R) {
         int err;
         FD_ZERO(&rfds);
-        setRST(&err);
-        setTEST(&err);
+        setPins(&err);
     }
     
     virtual ~BaseSerial() {
@@ -235,6 +223,7 @@ public:
 class TelosBSerial : public BaseSerial {    
 protected:
     virtual int resetPins(int *err);
+    virtual int setPins(int *err);
         
     int telosSetSCL(int *err) {
         return clrRTS(err);