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) {
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) {
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);
};
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);
}
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;
}
}
<< 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;
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);
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);
}
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);
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);
}
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;
}
*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) {
*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) {
*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) {
*err = errno;
std::cerr << "ERROR: BaseSerial::clrRTS could not clr RTS pin" << std::endl;
}
- else {
- serial_delay(switchdelay);
- }
return r;
}
}
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() {
class TelosBSerial : public BaseSerial {
protected:
virtual int resetPins(int *err);
+ virtual int setPins(int *err);
int telosSetSCL(int *err) {
return clrRTS(err);