Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Philip Rosedale 2013-05-06 13:42:23 -07:00
commit 3b3e6ae075
4 changed files with 27 additions and 20 deletions

View file

@ -100,7 +100,7 @@ int main(int argc, const char * argv[])
std::map<char, Agent *> newestSoloAgents;
agentType = packetData[1];
unpackSocket(&packetData[2], (sockaddr*) g&agentLocalAddress);
unpackSocket(&packetData[2], (sockaddr*) &agentLocalAddress);
// check the agent public address
// if it matches our local address we're on the same box

View file

@ -49,7 +49,7 @@ void *receiveAgentData(void *args) {
avatarMixer = agentList->soloAgentOfType(AGENT_TYPE_AVATAR_MIXER);
if (avatarMixer != NULL) {
avatarMixer->setLastRecvTimeUsecs(usecTimestampNow());
avatarMixer->setLastHeardMicrostamp(usecTimestampNow());
}
break;

View file

@ -22,7 +22,6 @@
#include <string>
#endif
int serialFd;
const int MAX_BUFFER = 255;
char serialBuffer[MAX_BUFFER];
int serialBufferPos = 0;
@ -34,6 +33,12 @@ const int GRAVITY_SAMPLES = 200; // Use the first samples to
const bool USING_INVENSENSE_MPU9150 = 1;
SerialInterface::~SerialInterface() {
#ifdef __APPLE__
close(_serialDescriptor);
#endif
}
void SerialInterface::pair() {
#ifdef __APPLE__
@ -69,19 +74,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 +111,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 +138,6 @@ int SerialInterface::initializePort(char* portname, int baud) {
active = true;
#endif
return 0;
}
// Reset Trailing averages to the current measurement
@ -241,8 +244,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);
@ -255,7 +258,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?

View file

@ -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;