From 58b50067ade0849fc1d306460e5c26d96023f0f4 Mon Sep 17 00:00:00 2001 From: Eric Johnston Date: Thu, 11 Jul 2013 16:06:31 -0700 Subject: [PATCH] Some Leap finger fixes, but also temporarily disable Leap data sending, due to a crash. Will resolve the crash before re-enabling. --- interface/src/Hand.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/interface/src/Hand.cpp b/interface/src/Hand.cpp index 950a5fe556..29a2c32bf1 100755 --- a/interface/src/Hand.cpp +++ b/interface/src/Hand.cpp @@ -54,7 +54,7 @@ void Hand::calculateGeometry() { _position = head.getPosition() + head.getOrientation() * offset; _orientation = head.getOrientation(); - int numLeapBalls = _fingerTips.size() + _fingerRoots.size(); + int numLeapBalls = _fingerTips.size(); _leapBalls.resize(numLeapBalls); for (int i = 0; i < _fingerTips.size(); ++i) { diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 2c941be9be..27a755e03f 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -137,6 +137,11 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { if (numFingerVectors > 255) numFingerVectors = 0; // safety. We shouldn't ever get over 255, so consider that invalid. + ///////////////////////////////// + // Temporarily disable Leap finger sending, as it's causing a crash whenever someone's got a Leap connected + numFingerVectors = 0; + ///////////////////////////////// + *destinationBuffer++ = (unsigned char)numFingerVectors; if (numFingerVectors > 0) { @@ -255,8 +260,8 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { // leap hand data if (sourceBuffer - startPosition < numBytes) // safety check { - std::vector fingerTips = _handData->getFingerTips(); - std::vector fingerRoots = _handData->getFingerRoots(); + std::vector fingerTips; + std::vector fingerRoots; unsigned int numFingerVectors = *sourceBuffer++; unsigned int numFingerTips = numFingerVectors / 2; unsigned int numFingerRoots = numFingerVectors - numFingerTips; @@ -267,6 +272,11 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { sourceBuffer += unpackFloatScalarFromSignedTwoByteFixed((int16_t*) sourceBuffer, &(fingerTips[i].y), 4); sourceBuffer += unpackFloatScalarFromSignedTwoByteFixed((int16_t*) sourceBuffer, &(fingerTips[i].z), 4); } + for (size_t i = 0; i < numFingerRoots; ++i) { + sourceBuffer += unpackFloatScalarFromSignedTwoByteFixed((int16_t*) sourceBuffer, &(fingerRoots[i].x), 4); + sourceBuffer += unpackFloatScalarFromSignedTwoByteFixed((int16_t*) sourceBuffer, &(fingerRoots[i].y), 4); + sourceBuffer += unpackFloatScalarFromSignedTwoByteFixed((int16_t*) sourceBuffer, &(fingerRoots[i].z), 4); + } _handData->setFingerTips(fingerTips); _handData->setFingerRoots(fingerRoots); }