if we fail to open SerialInterface twice then don't keep trying

This commit is contained in:
Stephen Birarda 2013-05-06 13:08:45 -07:00
parent 69734f41fc
commit 0b810fa4c2
2 changed files with 28 additions and 17 deletions

View file

@ -34,6 +34,11 @@ const int GRAVITY_SAMPLES = 200; // Use the first samples to
const bool USING_INVENSENSE_MPU9150 = 1;
SerialInterface::SerialInterface() :
active(false),
_failedOpenAttempts(0) {
}
void SerialInterface::pair() {
#ifdef __APPLE__
@ -43,25 +48,29 @@ void SerialInterface::pair() {
int matchStatus;
regex_t regex;
// for now this only works on OS X, where the usb serial shows up as /dev/tty.usb*
if((devDir = opendir("/dev"))) {
while((entry = readdir(devDir))) {
regcomp(&regex, "tty\\.usb", REG_EXTENDED|REG_NOSUB);
matchStatus = regexec(&regex, entry->d_name, (size_t) 0, NULL, 0);
if (matchStatus == 0) {
char *serialPortname = new char[100];
sprintf(serialPortname, "/dev/%s", entry->d_name);
initializePort(serialPortname, 115200);
delete [] serialPortname;
if (_failedOpenAttempts < 2) {
// if we've already failed to open the detected interface twice then don't try again
// for now this only works on OS X, where the usb serial shows up as /dev/tty.usb*
if((devDir = opendir("/dev"))) {
while((entry = readdir(devDir))) {
regcomp(&regex, "tty\\.usb", REG_EXTENDED|REG_NOSUB);
matchStatus = regexec(&regex, entry->d_name, (size_t) 0, NULL, 0);
if (matchStatus == 0) {
char *serialPortname = new char[100];
sprintf(serialPortname, "/dev/%s", entry->d_name);
initializePort(serialPortname, 115200);
delete [] serialPortname;
}
regfree(&regex);
}
regfree(&regex);
closedir(devDir);
}
closedir(devDir);
}
#endif
#endif
}
// connect to the serial port
@ -73,6 +82,7 @@ int SerialInterface::initializePort(char* portname, int baud) {
if (serialFd == -1) {
printLog("Failed.\n");
_failedOpenAttempts++;
return -1; // Failed to open port
}
struct termios options;

View file

@ -36,7 +36,7 @@ extern const bool USING_INVENSENSE_MPU9150;
class SerialInterface {
public:
SerialInterface() { active = false; };
SerialInterface();
void pair();
void readData();
@ -56,7 +56,7 @@ public:
glm::vec3 getGravity() {return gravity;};
private:
int initializePort(char * portname, int baud);
int initializePort(char* portname, int baud);
void resetSerial();
int lastMeasured[NUM_CHANNELS];
float trailingAverage[NUM_CHANNELS];
@ -68,6 +68,7 @@ private:
int _lastYaw;
int _lastPitch;
int _lastRoll;
int _failedOpenAttempts;
};
#endif