diff --git a/interface/src/SerialInterface.cpp b/interface/src/SerialInterface.cpp index 3e906552b3..c7d539935f 100644 --- a/interface/src/SerialInterface.cpp +++ b/interface/src/SerialInterface.cpp @@ -22,7 +22,6 @@ #include #endif -int serialFd; const int MAX_BUFFER = 255; char serialBuffer[MAX_BUFFER]; int serialBufferPos = 0; @@ -34,6 +33,10 @@ const int GRAVITY_SAMPLES = 200; // Use the first samples to const bool USING_INVENSENSE_MPU9150 = 1; +SerialInterface::~SerialInterface() { + close(_serialDescriptor); +} + void SerialInterface::pair() { #ifdef __APPLE__ @@ -69,19 +72,19 @@ void SerialInterface::pair() { } // connect to the serial port -int SerialInterface::initializePort(char* portname, int baud) { +void SerialInterface::initializePort(char* portname, int baud) { #ifdef __APPLE__ - serialFd = open(portname, O_RDWR | O_NOCTTY | O_NDELAY); + _serialDescriptor = open(portname, O_RDWR | O_NOCTTY | O_NDELAY); printLog("Opening SerialUSB %s: ", portname); - if (serialFd == -1) { + if (_serialDescriptor == -1) { printLog("Failed.\n"); _failedOpenAttempts++; - return -1; // Failed to open port + return; } struct termios options; - tcgetattr(serialFd,&options); + tcgetattr(_serialDescriptor, &options); switch(baud) { case 9600: cfsetispeed(&options,B9600); @@ -106,26 +109,26 @@ int SerialInterface::initializePort(char* portname, int baud) { options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; - tcsetattr(serialFd,TCSANOW,&options); + tcsetattr(_serialDescriptor, TCSANOW, &options); if (USING_INVENSENSE_MPU9150) { // block on invensense reads until there is data to read - int currentFlags = fcntl(serialFd, F_GETFL); - fcntl(serialFd, F_SETFL, currentFlags & ~O_NONBLOCK); + int currentFlags = fcntl(_serialDescriptor, F_GETFL); + fcntl(_serialDescriptor, F_SETFL, currentFlags & ~O_NONBLOCK); // there are extra commands to send to the invensense when it fires up // this takes it out of SLEEP - write(serialFd, "WR686B01\n", 9); + write(_serialDescriptor, "WR686B01\n", 9); // delay after the wakeup usleep(10000); // this disables streaming so there's no garbage data on reads - write(serialFd, "SD\n", 3); + write(_serialDescriptor, "SD\n", 3); // flush whatever was produced by the last two commands - tcflush(serialFd, TCIOFLUSH); + tcflush(_serialDescriptor, TCIOFLUSH); } printLog("Connected.\n"); @@ -133,8 +136,6 @@ int SerialInterface::initializePort(char* portname, int baud) { active = true; #endif - - return 0; } // Reset Trailing averages to the current measurement @@ -148,9 +149,7 @@ void SerialInterface::renderLevels(int width, int height) { int disp_x = 10; const int GAP = 16; char val[10]; - for(i = 0; i < NUM_CHANNELS; i++) - { - + for(i = 0; i < NUM_CHANNELS; i++) { // Actual value glLineWidth(2.0); glColor4f(1, 1, 1, 1); @@ -207,8 +206,8 @@ void SerialInterface::readData() { unsigned char gyroBuffer[20]; // ask the invensense for raw gyro data - write(serialFd, "RD684306\n", 9); - read(serialFd, gyroBuffer, 20); + write(_serialDescriptor, "RD684306\n", 9); + read(_serialDescriptor, gyroBuffer, 20); convertHexToInt(gyroBuffer + 6, _lastYaw); convertHexToInt(gyroBuffer + 10, _lastRoll); @@ -221,7 +220,7 @@ void SerialInterface::readData() { const float AVG_RATE[] = {0.002, 0.002, 0.002, 0.002, 0.002, 0.002}; char bufchar[1]; - while (read(serialFd, &bufchar, 1) > 0) { + while (read(_serialDescriptor, &bufchar, 1) > 0) { serialBuffer[serialBufferPos] = bufchar[0]; serialBufferPos++; // Have we reached end of a line of input? diff --git a/interface/src/SerialInterface.h b/interface/src/SerialInterface.h index 7677562c53..4aafb46994 100644 --- a/interface/src/SerialInterface.h +++ b/interface/src/SerialInterface.h @@ -38,6 +38,8 @@ class SerialInterface { public: SerialInterface() : active(false), _failedOpenAttempts(0) {} + ~SerialInterface(); + void pair(); void readData(); @@ -57,8 +59,10 @@ public: glm::vec3 getGravity() {return gravity;}; private: - int initializePort(char* portname, int baud); + void initializePort(char* portname, int baud); void resetSerial(); + + int _serialDescriptor; int lastMeasured[NUM_CHANNELS]; float trailingAverage[NUM_CHANNELS]; int samplesAveraged;