From 1c32cd8a6893ab5590014fca855db76bc8e019fd Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 16:16:16 -0700 Subject: [PATCH 01/26] accept a script filename in the send assignment packet --- assignment-server/src/main.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 6cf7ddc952..b828b9749a 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -10,13 +10,17 @@ #include #include +#include + #include #include #include const int MAX_PACKET_SIZE_BYTES = 1400; -struct Assignment {}; +struct Assignment { + QString scriptFilename; +}; int main(int argc, const char* argv[]) { @@ -35,13 +39,16 @@ int main(int argc, const char* argv[]) { while (true) { if (serverSocket.receive((sockaddr*) &senderSocket, &senderData, &receivedBytes)) { - // int numHeaderBytes = numBytesForPacketHeader(senderData); + int numHeaderBytes = numBytesForPacketHeader(senderData); if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { // grab the FI assignment in the queue, if it exists if (assignmentQueue.size() > 0) { - // Assignment firstAssignment = assignmentQueue.front(); + Assignment firstAssignment = assignmentQueue.front(); assignmentQueue.pop(); + + QString scriptURL = QString("http://base8-compute.s3.amazonaws.com/%1").arg(firstAssignment.scriptFilename); + memcpy(assignmentPacket + numHeaderBytes, scriptURL.toLocal8Bit().constData(), scriptURL.size()); // send the assignment serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); @@ -49,6 +56,11 @@ int main(int argc, const char* argv[]) { } else if (senderData[0] == PACKET_TYPE_SEND_ASSIGNMENT) { Assignment newAssignment; + senderData[receivedBytes] = '\0'; + newAssignment.scriptFilename = QString((const char*)senderData + numHeaderBytes); + + qDebug() << "Added an assignment with script with filename" << newAssignment.scriptFilename << "\n"; + // add this assignment to the queue assignmentQueue.push(newAssignment); } From 51f978196b70d509ffe54fb5574f702a7349b87c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 17:21:06 -0700 Subject: [PATCH 02/26] add back node type unassigned, fix sending of script URL --- assignment-server/src/main.cpp | 5 +++-- libraries/shared/src/Node.cpp | 2 ++ libraries/shared/src/NodeTypes.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index b828b9749a..a878e644c0 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -48,10 +48,11 @@ int main(int argc, const char* argv[]) { assignmentQueue.pop(); QString scriptURL = QString("http://base8-compute.s3.amazonaws.com/%1").arg(firstAssignment.scriptFilename); - memcpy(assignmentPacket + numHeaderBytes, scriptURL.toLocal8Bit().constData(), scriptURL.size()); + int scriptURLBytes = scriptURL.size(); + memcpy(assignmentPacket + numHeaderBytes, scriptURL.toLocal8Bit().constData(), scriptURLBytes); // send the assignment - serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, sizeof(assignmentPacket)); + serverSocket.send((sockaddr*) &senderSocket, assignmentPacket, numHeaderBytes + scriptURLBytes); } } else if (senderData[0] == PACKET_TYPE_SEND_ASSIGNMENT) { Assignment newAssignment; diff --git a/libraries/shared/src/Node.cpp b/libraries/shared/src/Node.cpp index 7aebb0c022..c91626d99d 100644 --- a/libraries/shared/src/Node.cpp +++ b/libraries/shared/src/Node.cpp @@ -94,6 +94,8 @@ const char* Node::getTypeName() const { return NODE_TYPE_NAME_AUDIO_INJECTOR; case NODE_TYPE_ANIMATION_SERVER: return NODE_TYPE_NAME_ANIMATION_SERVER; + case NODE_TYPE_UNASSIGNED: + return NODE_TYPE_NAME_UNASSIGNED; default: return NODE_TYPE_NAME_UNKNOWN; } diff --git a/libraries/shared/src/NodeTypes.h b/libraries/shared/src/NodeTypes.h index aa4ae51ec5..a9deebf333 100644 --- a/libraries/shared/src/NodeTypes.h +++ b/libraries/shared/src/NodeTypes.h @@ -24,5 +24,6 @@ const NODE_TYPE NODE_TYPE_AUDIO_MIXER = 'M'; const NODE_TYPE NODE_TYPE_AVATAR_MIXER = 'W'; const NODE_TYPE NODE_TYPE_AUDIO_INJECTOR = 'A'; const NODE_TYPE NODE_TYPE_ANIMATION_SERVER = 'a'; +const NODE_TYPE NODE_TYPE_UNASSIGNED = 1; #endif From ed5c9f617d4bd6ae9b11b8800a318d335fbf1f52 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 17:38:47 -0700 Subject: [PATCH 03/26] add the voxels library to the hifi podspec --- hifi.podspec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hifi.podspec b/hifi.podspec index a14381ffb4..e721ada8f9 100644 --- a/hifi.podspec +++ b/hifi.podspec @@ -51,6 +51,11 @@ Pod::Spec.new do |s| sp.dependency 'glm' end + s.subspec "voxels" do |sp| + sp.source_files = 'libraries/voxels/src', 'libraries/voxels/moc_*' + sp.dependency 'glm' + end + s.xcconfig = { 'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/../../qt5-device/qtbase/include' } s.libraries = 'libQtCoreCombined', 'libQt5Network', 'libQt5Script' From d1aad8c387bfff6af9963dc370fc74eff1295f86 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 17:39:23 -0700 Subject: [PATCH 04/26] fix sleep interval in Agent.cpp so it isn't 0 --- libraries/avatars/src/Agent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index 156499430d..f1495ee082 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -55,7 +55,7 @@ void Agent::run(QUrl scriptURL) { timeval lastDomainServerCheckIn = {}; int numMicrosecondsSleep = 0; - const float DATA_SEND_INTERVAL_USECS = (1 / 60) * 1000 * 1000; + const float DATA_SEND_INTERVAL_USECS = (1 / 60.0f) * 1000 * 1000; sockaddr_in senderAddress; unsigned char receivedData[MAX_PACKET_SIZE]; From d3b2ba107072c0b7100690521f6fffbdaa1d6cc3 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 5 Aug 2013 17:40:01 -0700 Subject: [PATCH 05/26] fix QtCore includes in voxels library --- libraries/voxels/src/CoverageMap.cpp | 2 +- libraries/voxels/src/CoverageMapV2.cpp | 2 +- libraries/voxels/src/GeometryUtil.cpp | 2 +- libraries/voxels/src/JurisdictionMap.cpp | 6 +++--- libraries/voxels/src/JurisdictionMap.h | 2 +- libraries/voxels/src/ViewFrustum.cpp | 2 +- libraries/voxels/src/VoxelNode.cpp | 2 +- libraries/voxels/src/VoxelProjectedPolygon.cpp | 2 +- libraries/voxels/src/VoxelTree.cpp | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/libraries/voxels/src/CoverageMap.cpp b/libraries/voxels/src/CoverageMap.cpp index 634c67a71c..530581e5f5 100644 --- a/libraries/voxels/src/CoverageMap.cpp +++ b/libraries/voxels/src/CoverageMap.cpp @@ -8,7 +8,7 @@ #include -#include +#include #include diff --git a/libraries/voxels/src/CoverageMapV2.cpp b/libraries/voxels/src/CoverageMapV2.cpp index 0e382d7f12..1404dc5d15 100644 --- a/libraries/voxels/src/CoverageMapV2.cpp +++ b/libraries/voxels/src/CoverageMapV2.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include diff --git a/libraries/voxels/src/GeometryUtil.cpp b/libraries/voxels/src/GeometryUtil.cpp index 894f43ee3c..3360f68cfa 100644 --- a/libraries/voxels/src/GeometryUtil.cpp +++ b/libraries/voxels/src/GeometryUtil.cpp @@ -7,7 +7,7 @@ #include -#include +#include #include diff --git a/libraries/voxels/src/JurisdictionMap.cpp b/libraries/voxels/src/JurisdictionMap.cpp index f67bbbabf7..b452c12d14 100644 --- a/libraries/voxels/src/JurisdictionMap.cpp +++ b/libraries/voxels/src/JurisdictionMap.cpp @@ -6,9 +6,9 @@ // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. // -#include -#include -#include +#include +#include +#include #include "JurisdictionMap.h" #include "VoxelNode.h" diff --git a/libraries/voxels/src/JurisdictionMap.h b/libraries/voxels/src/JurisdictionMap.h index 6c7cc4f0ca..5caec75b39 100644 --- a/libraries/voxels/src/JurisdictionMap.h +++ b/libraries/voxels/src/JurisdictionMap.h @@ -10,7 +10,7 @@ #define __hifi__JurisdictionMap__ #include -#include +#include class JurisdictionMap { public: diff --git a/libraries/voxels/src/ViewFrustum.cpp b/libraries/voxels/src/ViewFrustum.cpp index ae48dbbe7d..f12608f5dd 100644 --- a/libraries/voxels/src/ViewFrustum.cpp +++ b/libraries/voxels/src/ViewFrustum.cpp @@ -12,7 +12,7 @@ #include -#include +#include #include "CoverageMap.h" #include "GeometryUtil.h" diff --git a/libraries/voxels/src/VoxelNode.cpp b/libraries/voxels/src/VoxelNode.cpp index 42b34dd542..7355e91243 100644 --- a/libraries/voxels/src/VoxelNode.cpp +++ b/libraries/voxels/src/VoxelNode.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include diff --git a/libraries/voxels/src/VoxelProjectedPolygon.cpp b/libraries/voxels/src/VoxelProjectedPolygon.cpp index 8a39d7f358..a6336665ad 100644 --- a/libraries/voxels/src/VoxelProjectedPolygon.cpp +++ b/libraries/voxels/src/VoxelProjectedPolygon.cpp @@ -7,7 +7,7 @@ #include -#include +#include #include "GeometryUtil.h" #include "SharedUtil.h" diff --git a/libraries/voxels/src/VoxelTree.cpp b/libraries/voxels/src/VoxelTree.cpp index a327b561bb..c0fcee02dd 100644 --- a/libraries/voxels/src/VoxelTree.cpp +++ b/libraries/voxels/src/VoxelTree.cpp @@ -17,7 +17,7 @@ #include -#include +#include #include "CoverageMap.h" #include "GeometryUtil.h" From f3d6f1edd8d059201ec9c2fcff629baa87d03494 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 6 Aug 2013 11:04:13 -0700 Subject: [PATCH 06/26] add Q_PROPERTY hooks for yaw, pitch, roll, chatMessage --- libraries/avatars/src/AvatarData.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index a9e14caaa6..2978d54f3e 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -41,7 +41,12 @@ enum KeyState class JointData; class AvatarData : public NodeData { - Q_OBJECT + Q_OBJECT + + Q_PROPERTY(float bodyYaw READ getBodyYaw WRITE setBodyYaw) + Q_PROPERTY(float bodyPitch READ getBodyPitch WRITE setBodyPitch) + Q_PROPERTY(float bodyRoll READ getBodyRoll WRITE setBodyRoll) + Q_PROPERTY(QString chatMessage READ getQStringChatMessage WRITE setChatMessage) public: AvatarData(Node* owningNode = NULL); ~AvatarData(); @@ -56,10 +61,12 @@ public: // Body Rotation float getBodyYaw() const { return _bodyYaw; } + void setBodyYaw(float bodyYaw) { _bodyYaw = bodyYaw; } float getBodyPitch() const { return _bodyPitch; } void setBodyPitch(float bodyPitch) { _bodyPitch = bodyPitch; } float getBodyRoll() const {return _bodyRoll; } void setBodyRoll(float bodyRoll) { _bodyRoll = bodyRoll; } + // Hand State void setHandState(char s) { _handState = s; }; @@ -89,7 +96,9 @@ public: // chat message void setChatMessage(const std::string& msg) { _chatMessage = msg; } - const std::string& chatMessage () const { return _chatMessage; } + void setChatMessage(const QString& string) { _chatMessage = string.toLocal8Bit().constData(); } + const std::string& setChatMessage() const { return _chatMessage; } + QString getQStringChatMessage() { return QString(_chatMessage.data()); } // related to Voxel Sending strategies bool getWantColor() const { return _wantColor; } @@ -107,7 +116,7 @@ public: public slots: void setPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } - void setBodyYaw(float bodyYaw) { _bodyYaw = bodyYaw; } + void setHandPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } void sendData(); protected: From b0783e4cce707ac639b76de63d954d165d5caf8e Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 6 Aug 2013 11:25:29 -0700 Subject: [PATCH 07/26] add Q_PROPERTY macro for position QVariantMap --- libraries/avatars/src/AvatarData.cpp | 14 ++++++++++++++ libraries/avatars/src/AvatarData.h | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 1dd6a0787b..4df93de340 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -51,6 +51,20 @@ AvatarData::~AvatarData() { delete _handData; } +void AvatarData::setPositionFromVariantMap(QVariantMap positionMap) { + _position = glm::vec3(positionMap.value("x"), positionMap.value("y"), positionMap.value("z")); +} + +QVariantMap AvatarData::getPositionVariantMap() { + QVariantMap positionMap; + + positionMap.insert("x", _position.x); + positionMap.insert("y", _position.y); + positionMap.insert("z", _position.z); + + return positionMap; +} + void AvatarData::sendData() { // called from Agent visual loop to send data diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 2978d54f3e..90a01954ad 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -43,6 +43,7 @@ class JointData; class AvatarData : public NodeData { Q_OBJECT + Q_PROPERTY(QVariantMap position READ getPositionVariantMap WRITE setPositionFromVariantMap) Q_PROPERTY(float bodyYaw READ getBodyYaw WRITE setBodyYaw) Q_PROPERTY(float bodyPitch READ getBodyPitch WRITE setBodyPitch) Q_PROPERTY(float bodyRoll READ getBodyRoll WRITE setBodyRoll) @@ -56,6 +57,9 @@ public: void setPosition (const glm::vec3 position ) { _position = position; } void setHandPosition (const glm::vec3 handPosition ) { _handPosition = handPosition; } + void setPositionFromVariantMap(QVariantMap positionMap); + QVariantMap getPositionVariantMap(); + int getBroadcastData(unsigned char* destinationBuffer); int parseData(unsigned char* sourceBuffer, int numBytes); @@ -115,7 +119,6 @@ public: void setHandData(HandData* handData) { _handData = handData; } public slots: - void setPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } void setHandPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } void sendData(); From d0330b0a28de7f19ca4a4fc0d9a22c7ebaa04286 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 6 Aug 2013 11:56:54 -0700 Subject: [PATCH 08/26] include QVariantMap in AvatarData, map values to floats for glm::vec3 --- libraries/avatars/src/AvatarData.cpp | 4 +++- libraries/avatars/src/AvatarData.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 4df93de340..f4a3ab8067 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -52,7 +52,9 @@ AvatarData::~AvatarData() { } void AvatarData::setPositionFromVariantMap(QVariantMap positionMap) { - _position = glm::vec3(positionMap.value("x"), positionMap.value("y"), positionMap.value("z")); + _position = glm::vec3(positionMap.value("x").toFloat(), + positionMap.value("y").toFloat(), + positionMap.value("z").toFloat()); } QVariantMap AvatarData::getPositionVariantMap() { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 90a01954ad..5d8b022e34 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -17,6 +17,7 @@ #include #include +#include #include #include "HeadData.h" From c0793146bdcfb5d387222f69dcef6dd850c9c1b1 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 7 Aug 2013 10:41:17 -0700 Subject: [PATCH 09/26] Avatar instance in JS should be referenced as Avatar --- libraries/avatars/src/Agent.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars/src/Agent.cpp b/libraries/avatars/src/Agent.cpp index f1495ee082..25a0a21d68 100644 --- a/libraries/avatars/src/Agent.cpp +++ b/libraries/avatars/src/Agent.cpp @@ -42,7 +42,7 @@ void Agent::run(QUrl scriptURL) { AvatarData *testAvatarData = new AvatarData; QScriptValue avatarDataValue = engine.newQObject(testAvatarData); - engine.globalObject().setProperty("AvatarData", avatarDataValue); + engine.globalObject().setProperty("Avatar", avatarDataValue); QScriptValue agentValue = engine.newQObject(this); engine.globalObject().setProperty("Agent", agentValue); From 72b53ea089a55791f1fadbf603f8ed81b6029236 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 7 Aug 2013 10:41:32 -0700 Subject: [PATCH 10/26] add Q_PROPERTY for handPosition --- libraries/avatars/src/AvatarData.cpp | 18 +++++++++++++++++- libraries/avatars/src/AvatarData.h | 5 ++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 821cedb507..58e42ccfb7 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1,4 +1,4 @@ -// +=// // AvatarData.cpp // hifi // @@ -68,6 +68,22 @@ QVariantMap AvatarData::getPositionVariantMap() { return positionMap; } +void AvatarData::setHandPositionFromVariantMap(QVariantMap handPositionMap) { + _handPosition = glm::vec3(handPositionMap.value("x").toFloat(), + handPositionMap.value("y").toFloat(), + handPositionMap.value("z").toFloat()); +} + +QVariantMap AvatarData::getHandPositionVariantMap() { + QVariantMap positionMap; + + positionMap.insert("x", _handPosition.x); + positionMap.insert("y", _handPosition.y); + positionMap.insert("z", _handPosition.z); + + return positionMap; +} + void AvatarData::sendData() { // called from Agent visual loop to send data diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 2510260147..c3def00140 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -45,6 +45,7 @@ class AvatarData : public NodeData { Q_OBJECT Q_PROPERTY(QVariantMap position READ getPositionVariantMap WRITE setPositionFromVariantMap) + Q_PROPERTY(QVariantMap handPosition READ getHandPositionVariantMap WRITE setHandPositionFromVariantMap) Q_PROPERTY(float bodyYaw READ getBodyYaw WRITE setBodyYaw) Q_PROPERTY(float bodyPitch READ getBodyPitch WRITE setBodyPitch) Q_PROPERTY(float bodyRoll READ getBodyRoll WRITE setBodyRoll) @@ -61,6 +62,9 @@ public: void setPositionFromVariantMap(QVariantMap positionMap); QVariantMap getPositionVariantMap(); + void setHandPositionFromVariantMap(QVariantMap handPositionMap); + QVariantMap getHandPositionVariantMap(); + int getBroadcastData(unsigned char* destinationBuffer); int parseData(unsigned char* sourceBuffer, int numBytes); @@ -121,7 +125,6 @@ public: void setHandData(HandData* handData) { _handData = handData; } public slots: - void setHandPosition(float x, float y, float z) { _position = glm::vec3(x, y, z); } void sendData(); protected: From a6cf3be4c4e8b0dca31c9e4a857b3401d0f6900a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 7 Aug 2013 15:52:04 -0700 Subject: [PATCH 11/26] only keep one assignment in assignment-server for demo --- assignment-server/src/main.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index a878e644c0..ad6d3b9391 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -63,6 +63,12 @@ int main(int argc, const char* argv[]) { qDebug() << "Added an assignment with script with filename" << newAssignment.scriptFilename << "\n"; // add this assignment to the queue + + // we're not a queue right now, only keep one assignment + if (assignmentQueue.size() > 0) { + assignmentQueue.pop(); + } + assignmentQueue.push(newAssignment); } } From f171b76f6917c64ae22d37f3c526568ba96733cc Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 7 Aug 2013 17:54:02 -0700 Subject: [PATCH 12/26] Fix for gyros' freaking out when disconnected. --- .../MotionDriver/lib/UNIX/libMotionDriver.a | Bin 61894 -> 62086 bytes interface/external/MotionDriver/src/inv_tty.c | 69 ++++++++++++------ interface/src/SerialInterface.cpp | 5 +- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/interface/external/MotionDriver/lib/UNIX/libMotionDriver.a b/interface/external/MotionDriver/lib/UNIX/libMotionDriver.a index c29bf3ef8ec5645ce6c8962daa20bcad16293b0a..82ca139b508839f9a7f2efba4610ef1ba522f72e 100644 GIT binary patch delta 1581 zcmc&!ZD>y#s0bFz9o%bzt8_`&Bgc|fY?V|Uw-)E7+#_zj|q3moZLPdtyRf= zZO<51hN^=M z-B~^)0Km%zDMcSiBWX>~uQm)ryY~ANhm@lK@KUp37)NG{Y9Afzbq@gmsEJG+hC<8Z zrijZFd43rHq!i6*dj8pehH)Tm1IIWprs?^c9I%f4MW+QO_wtKAT2N1_A{~`dAf=d( zb5lAy6SN>mDSB@yEyVxsD`Tu-0q|jHhF48Y3bx|s98!<0nHa8MMzvd-p68Y)EBG*Q z!KQh$+O^xNwq_{UyC)m$?HTQ*8Qd0HxUM+Q3vN5B>G^yA7U#Lcfl*D*U!4N5*+?mx z(e(V;DZm*3z}um!t;Jq<7kPD-dUe`~qB_l)GgA6!&YaPZs_FSdT;Cd`H$ii3Jej35 z7k|L6*Y)o5Szes;bq3`{wdf3QT>lNz`)Y>!AXzcpNg|cy6#xnVoMLqV=wdG$U!M@k zYO@7C1%Nbffm!Ukv3tbn0_$M-Biwyve)4g+LLe>&4xVozyDG7^BS1n9?5L4(_hkVmF6>8d=l9iSWB^zR00acMWX0%0y?H)vtZ`tgZzax& zw$Gf+f`Jtf0OA;KsjBH`6%b${;b_?EI&IZ^M7$EMCrL3m9t{X&7;tcvOl|_Em&qg` zuwA2Saa;iAvL9QENlO6m*5J=yoOZv2CR)6lRWGHzGHHYm^K6A+Kb1*4F)hR_`?dx1 zcLV_6S@lw_KR7L0LbEO0eGl!KNh7bhg@9-dqeCsVA*^*N;DK*uJBuesg_ygQ6(P;wC@)Qx*L_ N|Is#2@`qUL#Q%+y(Aoe1 delta 1451 zcmc&!YiJZ#6h3n&YeIZXDl*wWbZQ5mJxfgSJwzVFf8Gn=EMzF(tuKStNp#&_;-;Fr^z)D1tvEx7<6kB@G1p=fKR| z^PT&B=ey_5+;cD0d(YLbW%<79^_5kA|F_!4+SAVBd7qR405hnCKZi;pTAB_RrqwVlo%9)|MeSjaVOkreIiI7D4YLcOiT-&~ z?~&ucq#3!0(m2hqE6f;X>b^vufUKHn&SPqnX2ddjHquPwkDC8nvTda2G zTOvIlamgjJ=*aH2efZms40c{G!+YWVk&uwzyr}3L*}8BZVGHsL07?PiJAng0y?EsE zd!p*01^ERcKVYXpI?m;ZDfu1%7Zb;mLTXj)==PJo`S_wS zKw>I3dUZV6U4(T_ZV{fUw8Qgu81(6QGEsyNo7|*J#bi~0+;KRGBCKn67Y?a*`JjTy z#7B6(*-e6r@J4fhfD4np07(?!%AJ8itI(d80ZiUJi+}GtP$C-w0NVh7fC4|-GoT*L z>gBlKn}>C4x8d(C4IfN88QB5=h+x=X?Ck=8#h}11;`;)y8vp>`JNRvaM|PEyDU!Oe zE1-~DfXP~&+yxxkq?2MrL{%Rg0tj^=g)s{AB>(^&C>AL>m88ICD%3<2eUw9DKHMpQMpmB3IvOM;Gj< zn@B@{5}dfBlL8eRdUf=+b}Y^9$dFx2iVERLz)_|*UN%c08<{g-<#7SBH*$ ecCh1U`4{D1S9m-gPo;02b0mv1ZFSq;%l`rav4CO# diff --git a/interface/external/MotionDriver/src/inv_tty.c b/interface/external/MotionDriver/src/inv_tty.c index 3fa2bbe17e..30a3fceb55 100644 --- a/interface/external/MotionDriver/src/inv_tty.c +++ b/interface/external/MotionDriver/src/inv_tty.c @@ -26,51 +26,74 @@ static unsigned char from_hex_digit(char digit) { return (digit < 'A') ? digit - '0' : (digit - 'A') + 10; } -static void write_byte(unsigned char value) { +static int write_byte(unsigned char value) { char chars[] = { to_hex_digit(value / 16), to_hex_digit(value % 16) }; - write(ttyFileDescriptor, chars, 2); + return write(ttyFileDescriptor, chars, 2) != 2; } -static unsigned char read_byte() { +static int read_byte(unsigned char* value) { char chars[2]; - read(ttyFileDescriptor, chars, 2); - return from_hex_digit(chars[0]) * 16 + from_hex_digit(chars[1]); + if (read(ttyFileDescriptor, chars, 2) != 2) { + return 1; + } + *value = from_hex_digit(chars[0]) * 16 + from_hex_digit(chars[1]); + return 0; } int tty_i2c_write(unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char const *data) { - write(ttyFileDescriptor, "WR", 2); - write_byte(slave_addr); - write_byte(reg_addr); + if (write(ttyFileDescriptor, "WR", 2) != 2) { + return 1; + } + if (write_byte(slave_addr)) { + return 1; + } + if (write_byte(reg_addr)) { + return 1; + } int i; for (i = 0; i < length; i++) { - write_byte(data[i]); + if (write_byte(data[i])) { + return 1; + } + } + if (write(ttyFileDescriptor, "\n", 1) != 1) { + return 1; } - write(ttyFileDescriptor, "\n", 1); char response[8]; - read(ttyFileDescriptor, response, 8); - - return 0; + return read(ttyFileDescriptor, response, 8) != 8; } int tty_i2c_read(unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char *data) { - write(ttyFileDescriptor, "RD", 2); - write_byte(slave_addr); - write_byte(reg_addr); - write_byte(length); - write(ttyFileDescriptor, "\n", 1); + if (write(ttyFileDescriptor, "RD", 2) != 2) { + return 1; + } + if (write_byte(slave_addr)) { + return 1; + } + if (write_byte(reg_addr)) { + return 1; + } + if (write_byte(length)) { + return 1; + } + if (write(ttyFileDescriptor, "\n", 1) != 1) { + return 1; + } char prefix[6]; - read(ttyFileDescriptor, prefix, 6); + if (read(ttyFileDescriptor, prefix, 6) != 6) { + return 1; + } int i; for (i = 0; i < length; i++) { - data[i] = read_byte(); + if (read_byte(data + i)) { + return 1; + } } char suffix[2]; - read(ttyFileDescriptor, suffix, 2); - - return 0; + return read(ttyFileDescriptor, suffix, 2) != 2; } void tty_delay_ms(unsigned long num_ms) { diff --git a/interface/src/SerialInterface.cpp b/interface/src/SerialInterface.cpp index 0f90ee8dd7..20db2c09da 100644 --- a/interface/src/SerialInterface.cpp +++ b/interface/src/SerialInterface.cpp @@ -225,7 +225,10 @@ void SerialInterface::readData(float deltaTime) { // ask the invensense for raw gyro data short accelData[3]; - mpu_get_accel_reg(accelData, 0); + if (mpu_get_accel_reg(accelData, 0)) { + _active = false; + return; // disconnected + } const float LSB_TO_METERS_PER_SECOND2 = 1.f / 16384.f * GRAVITY_EARTH; // From MPU-9150 register map, with setting on From 55a010a1a001b45901d0cc4c94c110025f78920a Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 7 Aug 2013 18:02:38 -0700 Subject: [PATCH 13/26] And also, close the file descriptor and print a message. --- interface/src/SerialInterface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/SerialInterface.cpp b/interface/src/SerialInterface.cpp index 20db2c09da..d9c1bd928f 100644 --- a/interface/src/SerialInterface.cpp +++ b/interface/src/SerialInterface.cpp @@ -226,6 +226,8 @@ void SerialInterface::readData(float deltaTime) { // ask the invensense for raw gyro data short accelData[3]; if (mpu_get_accel_reg(accelData, 0)) { + close(_serialDescriptor); + qDebug("Disconnected SerialUSB.\n"); _active = false; return; // disconnected } From 97d1c5bcbf9c48c99182fefd8e687d10df363c76 Mon Sep 17 00:00:00 2001 From: Eric Johnston Date: Wed, 7 Aug 2013 18:03:59 -0700 Subject: [PATCH 14/26] =?UTF-8?q?Rave=20tweak:=20noise=20reduction=20?= =?UTF-8?q?=E2=80=A6by=20putting=20a=20smart=20cap=20on=20particle=20chain?= =?UTF-8?q?=20distances?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/src/ParticleSystem.cpp | 16 ++++++++++++---- interface/src/ParticleSystem.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/interface/src/ParticleSystem.cpp b/interface/src/ParticleSystem.cpp index 5aed606191..48a27c4fd1 100644 --- a/interface/src/ParticleSystem.cpp +++ b/interface/src/ParticleSystem.cpp @@ -17,6 +17,7 @@ const float DEFAULT_PARTICLE_AIR_FRICTION = 2.0f; const float DEFAULT_PARTICLE_LIFESPAN = 1.0f; const int DEFAULT_PARTICLE_SPHERE_RESOLUTION = 6; const float DEFAULT_EMITTER_RENDER_LENGTH = 0.2f; +const float DEFAULT_PARTICLE_CONNECT_DISTANCE = 0.03f; ParticleSystem::ParticleSystem() { @@ -41,7 +42,8 @@ ParticleSystem::ParticleSystem() { e->currentParticle = 0; e->particleRenderStyle = PARTICLE_RENDER_STYLE_SPHERE; e->numParticlesEmittedThisTime = 0; - + e->maxParticleConnectDistance = DEFAULT_PARTICLE_CONNECT_DISTANCE; + for (int lifeStage = 0; lifeStage < NUM_PARTICLE_LIFE_STAGES; lifeStage++) { setParticleAttributesToDefault(&_emitter[emitterIndex].particleAttributes[lifeStage]); } @@ -110,6 +112,7 @@ void ParticleSystem::updateEmitter(int emitterIndex, float deltaTime) { void ParticleSystem::createParticle(int e, float timeFraction) { + float maxConnectDistSqr = _emitter[e].maxParticleConnectDistance * _emitter[e].maxParticleConnectDistance; for (unsigned int p = 0; p < MAX_PARTICLES; p++) { if (!_particle[p].alive) { @@ -122,9 +125,14 @@ void ParticleSystem::createParticle(int e, float timeFraction) { _particle[p].color = _emitter[e].particleAttributes[PARTICLE_LIFESTAGE_0].color; _particle[p].previousParticle = NULL_PARTICLE; - if (_particle[_emitter[e].currentParticle].alive) { - if (_particle[_emitter[e].currentParticle].emitterIndex == e) { - _particle[p].previousParticle = _emitter[e].currentParticle; + Particle& prev = _particle[_emitter[e].currentParticle]; + if (prev.alive) { + if (prev.emitterIndex == e) { + glm::vec3 diff = prev.position - _particle[p].position; + float sqrDist = glm::dot(diff, diff); + if (sqrDist < maxConnectDistSqr) { + _particle[p].previousParticle = _emitter[e].currentParticle; + } } } diff --git a/interface/src/ParticleSystem.h b/interface/src/ParticleSystem.h index 60bd0f91d4..8b83d6606a 100644 --- a/interface/src/ParticleSystem.h +++ b/interface/src/ParticleSystem.h @@ -122,6 +122,7 @@ private: int currentParticle; // the index of the most recently-emitted particle ParticleAttributes particleAttributes[NUM_PARTICLE_LIFE_STAGES]; // the attributes of particles emitted from this emitter ParticleRenderStyle particleRenderStyle; + float maxParticleConnectDistance; // past this, don't connect the particles. }; glm::vec3 _upDirection; From 9d7b22e065cb809a0608ac1421d69ae9e63cd845 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 7 Aug 2013 18:40:52 -0700 Subject: [PATCH 15/26] Recompiled OS X driver. --- .../MotionDriver/lib/MacOS/libMotionDriver.a | Bin 58976 -> 59312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/interface/external/MotionDriver/lib/MacOS/libMotionDriver.a b/interface/external/MotionDriver/lib/MacOS/libMotionDriver.a index 9b2eb2f00a84f95f26bc0c1df9c5b5df5790e8c1..5911eb9f9994aa7b4da6b094995ef41ff39a4910 100644 GIT binary patch delta 1838 zcmah}ZA@EL7=F$zg_e(9!lK}y;o{=Q+^)IfGep@s<&x{Nnz&@i{2)RGQbDdd`!4iQr!JKp6f;A?dA3c5E z=ly=qeN)#wLo=R%>Y}FB`lgnq*5OA#^wIyu3*Y*Fh;4$ypMTX+r?eUkqsiK97)HHi z7>2RevYHzk4Wps8wV9VDU#n>JL7py6-IkAkl-yTw*1IJx05DL@uOyo_%g41}U)*HL z7QYwqk>Y)U&&bGN%6PFz-P0w2pO=+1R16g=Nt86o{rqsrNTA=xb@ zBT_#tT*U3Po(SD*o!0w>U+0*ecH*Ioo_LlC{c5TIo^VXsULkSq^qn91Gqc8XZ35+6k_j&aE!<9+>Q@_k6>GVxnofERW;{*Kr*+Vs| zNU|7r`XiF#feJu2+8_u{hB%6+hGi)XpTXo_`mSWnJomCHoBI>p608K0C z^xGMy|76l}!>hdJ<`CcW+hul|&yQ95zY)a(=;DJvRr#p0K}ijH6m^Psk5&1^7YN`0 zXXBgT4c0ctML!uykfE~gi-{`6HTWcHgRB(2=*8e1-(|oYEy6gmi=(^&&cz3GS zKT2qj5BApjgIUF$;=`$0|2aYj_)ERj-ckl!;@49d9cc26%zMZKfP8sE!A&GKjTiCg}c}0hNIHJ_D+NwoaxJIZFC_$o>h!l}sff z)`^A^nBU1iFwgRL79tUg7Qr?KZ1VuQZTgVF49E?>j(C^mwu|`O99xKw6ThGM-0L_< zIQI%(5!j0ea(lK%2~b6w_+7$p68@NQitrbNeN@0(;#**VMbB(jU@tI0`e%rb5`S0n z5nz-QUL^%FE^)4qgCOxch&L3CQR0_qzleT|1ajv*@zcb=07#wO*(LCWx6>=^Z(Smz AN&o-= delta 1574 zcmY*ZZ)jUp6#w0%Nt3kQ)5u(08~UOkOn4<(>yzSEBkql>60w60Q3LJ%wCX2O233iv zR^dIupmIeR44M0;pY})M9NMO~XdSwCU!*Q`)-J=U6+&feskV{(?s>7^54q=ee&^i$ z&b{ZIGqe7M@BCw}jh$WHsm?C*?7gprq@6UAsq?2pAKP_s;Jp+36DlgD>klSVx~}g| z>bkC{l1a0xOV>M1Gbx(qpO038a96)i?F&Ki`g~8+Z1~SD&2(5?nm2t5LE-!HsX7}{ zLHHmj&P96SJ(Q#~<^Pb*9*zKE(bCiz?GGqsgd$3f;y}~=kx~SR0~l)-yRYV0TAaE1 zz`*K0+q!LAx44s8D(sbcOY%o6=2p35&3WLqYkXr>Bw4U3S}}90dqz8+0KgAh6<)|J zX~jLv4J%lcfc$I6s{A%5PLy?VrF@sc9c#v=d11Reg%_f{aBPituW-jIY40`xxZo0_ z(`ixuq*a*LdfFVT%15W~$W9Foc4+PINFIIMxyeVD(_-ven_1guTbs7E!JSO?{{_^z zW6gU7YW^Y9Qg5LzpLDO%~Yxst;*ey-J=gDiY;#MrHlEw$j#VYyYm>h=Xycih zlUsIX$v0ETEwkCQy`~jQd~{mRP7QX5mw&#@*2Ta?EJUy0C)i{ith#^%J}L&rcZBB% z4Y?@ocdr-+1uMlu1opdBwT?cTh>6;fM0jMq=B}t$bPc_QISKEYiVY{9C;3k-o>H(n|`1XFkYfP>jzo^;~AwV ze!~ac0~nwBfSrJG$fx+MDlFdN1A>5|kv~ZO6$Z2c#-Hk<;y*FK55#|9fDbUfS9{)= zCdX%#aE=lL0|G#Ni2R4h|0IL_oDGxqyBV+pFjfG>fW3b}30zcH9ls1E{&B#K@zySh&wqLIFZM6F C3}y!a From 647c176631b689f3bc662828289e5b485a7e1247 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 8 Aug 2013 09:57:48 -0700 Subject: [PATCH 16/26] make voxel server fades slightly smaller than bounds to prevent z-fighting --- interface/src/Application.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6d272b757c..5f682ec027 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3950,6 +3950,8 @@ void Application::nodeKilled(Node* node) { // Add the jurisditionDetails object to the list of "fade outs" VoxelFade fade(VoxelFade::FADE_OUT, NODE_KILLED_RED, NODE_KILLED_GREEN, NODE_KILLED_BLUE); fade.voxelDetails = jurisditionDetails; + const float slightly_smaller = 0.99; + fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; _voxelFades.push_back(fade); } } @@ -3979,6 +3981,8 @@ int Application::parseVoxelStats(unsigned char* messageData, ssize_t messageLeng // Add the jurisditionDetails object to the list of "fade outs" VoxelFade fade(VoxelFade::FADE_OUT, NODE_ADDED_RED, NODE_ADDED_GREEN, NODE_ADDED_BLUE); fade.voxelDetails = jurisditionDetails; + const float slightly_smaller = 0.99; + fade.voxelDetails.s = fade.voxelDetails.s * slightly_smaller; _voxelFades.push_back(fade); } // store jurisdiction details for later use From aca15d4aefef5877fcf0ca9c2bd1a78eb5f6f0f1 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 8 Aug 2013 10:59:01 -0700 Subject: [PATCH 17/26] Disable specular highlights for ground and voxels. --- interface/src/Application.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6d272b757c..e5f28f914b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2929,6 +2929,9 @@ void Application::displayOculus(Camera& whichCamera) { glPopMatrix(); } +const GLfloat WHITE_SPECULAR_COLOR[] = { 1.0f, 1.0f, 1.0f, 1.0f }; +const GLfloat NO_SPECULAR_COLOR[] = { 0.0f, 0.0f, 0.0f, 1.0f }; + void Application::setupWorldLight(Camera& whichCamera) { // Setup 3D lights (after the camera transform, so that they are positioned in world space) @@ -2943,10 +2946,9 @@ void Application::setupWorldLight(Camera& whichCamera) { glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_color); GLfloat diffuse_color[] = { 0.8, 0.7, 0.7 }; glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse_color); - GLfloat specular_color[] = { 1.0, 1.0, 1.0, 1.0}; - glLightfv(GL_LIGHT0, GL_SPECULAR, specular_color); - glMaterialfv(GL_FRONT, GL_SPECULAR, specular_color); + glLightfv(GL_LIGHT0, GL_SPECULAR, WHITE_SPECULAR_COLOR); + glMaterialfv(GL_FRONT, GL_SPECULAR, WHITE_SPECULAR_COLOR); glMateriali(GL_FRONT, GL_SHININESS, 96); } @@ -3024,6 +3026,9 @@ void Application::displaySide(Camera& whichCamera) { glutSolidSphere(sphereRadius, 15, 15); glPopMatrix(); + // disable specular lighting for ground and voxels + glMaterialfv(GL_FRONT, GL_SPECULAR, NO_SPECULAR_COLOR); + //draw a grid ground plane.... if (_renderGroundPlaneOn->isChecked()) { // draw grass plane with fog @@ -3052,6 +3057,9 @@ void Application::displaySide(Camera& whichCamera) { _voxels.render(_renderVoxelTextures->isChecked()); } + // restore default, white specular + glMaterialfv(GL_FRONT, GL_SPECULAR, WHITE_SPECULAR_COLOR); + // indicate what we'll be adding/removing in mouse mode, if anything if (_mouseVoxel.s != 0) { glDisable(GL_LIGHTING); From 94d270b3d5123cbf14cc47d9d545ef22828c1bb0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 8 Aug 2013 11:21:39 -0700 Subject: [PATCH 18/26] remove equals at beginning of AvatarData --- libraries/avatars/src/AvatarData.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 58e42ccfb7..796e5e5884 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1,4 +1,4 @@ -=// +// // AvatarData.cpp // hifi // From 287bead0b7c3fbde2f1c84b4ca81809a30dd9a91 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 8 Aug 2013 11:22:02 -0700 Subject: [PATCH 19/26] add extra debugging to assignment server --- assignment-server/src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index ad6d3b9391..0cb0eb84db 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -41,13 +41,17 @@ int main(int argc, const char* argv[]) { int numHeaderBytes = numBytesForPacketHeader(senderData); - if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { + if (senderData[0] == PACKET_TYPE_REQUEST_ASSIGNMENT) { + qDebug() << "Assignment request received.\n"; // grab the FI assignment in the queue, if it exists if (assignmentQueue.size() > 0) { Assignment firstAssignment = assignmentQueue.front(); assignmentQueue.pop(); QString scriptURL = QString("http://base8-compute.s3.amazonaws.com/%1").arg(firstAssignment.scriptFilename); + + qDebug() << "Sending assignment with URL" << scriptURL << "\n"; + int scriptURLBytes = scriptURL.size(); memcpy(assignmentPacket + numHeaderBytes, scriptURL.toLocal8Bit().constData(), scriptURLBytes); From f60cbed7095438c0997c46e52fdc782c8c2911fe Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 8 Aug 2013 12:09:59 -0700 Subject: [PATCH 20/26] fix packet size of assignment packet --- assignment-server/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-server/src/main.cpp b/assignment-server/src/main.cpp index 0cb0eb84db..374009b917 100644 --- a/assignment-server/src/main.cpp +++ b/assignment-server/src/main.cpp @@ -33,7 +33,7 @@ int main(int argc, const char* argv[]) { UDPSocket serverSocket(ASSIGNMENT_SERVER_PORT); int numHeaderBytes = numBytesForPacketHeader((unsigned char*) &PACKET_TYPE_SEND_ASSIGNMENT); - unsigned char assignmentPacket[numHeaderBytes + sizeof(char)]; + unsigned char assignmentPacket[MAX_PACKET_SIZE_BYTES]; populateTypeAndVersion(assignmentPacket, PACKET_TYPE_SEND_ASSIGNMENT); while (true) { From 957549ddd6b6ff8927221a0cf133f8af6262e7aa Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 8 Aug 2013 12:14:03 -0700 Subject: [PATCH 21/26] add a job to build and deploy the assignment server --- jenkins/jobs.groovy | 1 + 1 file changed, 1 insertion(+) diff --git a/jenkins/jobs.groovy b/jenkins/jobs.groovy index a7be662df6..ac78cd9e8c 100644 --- a/jenkins/jobs.groovy +++ b/jenkins/jobs.groovy @@ -100,6 +100,7 @@ static Closure cmakeBuild(srcDir, instCommand) { def targets = [ 'animation-server':true, + 'assignment-server':true, 'audio-mixer':true, 'avatar-mixer':true, 'domain-server':true, From c929f67cc4fdb7b83dc33ed4cf13f15a4e2485ec Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 8 Aug 2013 12:33:31 -0700 Subject: [PATCH 22/26] Update the *other* avatar mixer bandwidth stats. --- interface/src/Application.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 04546b8672..b9ac953767 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1181,6 +1181,13 @@ void Application::sendAvatarVoxelURLMessage(const QUrl& url) { } static Avatar* processAvatarMessageHeader(unsigned char*& packetData, size_t& dataBytes) { + // record the packet for stats-tracking + Application::getInstance()->getBandwidthMeter()->inputStream(BandwidthMeter::AVATARS).updateValue(dataBytes); + Node* avatarMixerNode = NodeList::getInstance()->soloNodeOfType(NODE_TYPE_AVATAR_MIXER); + if (avatarMixerNode) { + avatarMixerNode->recordBytesReceived(dataBytes); + } + // skip the header int numBytesPacketHeader = numBytesForPacketHeader(packetData); packetData += numBytesPacketHeader; @@ -4079,11 +4086,9 @@ void* Application::networkReceive(void* args) { break; case PACKET_TYPE_AVATAR_VOXEL_URL: processAvatarVoxelURLMessage(app->_incomingPacket, bytesReceived); - getInstance()->_bandwidthMeter.inputStream(BandwidthMeter::AVATARS).updateValue(bytesReceived); break; case PACKET_TYPE_AVATAR_FACE_VIDEO: processAvatarFaceVideoMessage(app->_incomingPacket, bytesReceived); - getInstance()->_bandwidthMeter.inputStream(BandwidthMeter::AVATARS).updateValue(bytesReceived); break; default: NodeList::getInstance()->processNodeData(&senderAddress, app->_incomingPacket, bytesReceived); From 8addfdc433c453925a9f68dda9df2cfeb39f5c71 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 8 Aug 2013 12:54:34 -0700 Subject: [PATCH 23/26] add --domain and --MinimalEnvironment to voxel-server --- voxel-server/src/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index c6a8a61ca1..f5b0eca825 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -66,6 +66,7 @@ bool shouldShowAnimationDebug = false; bool displayVoxelStats = false; bool debugVoxelReceiving = false; bool sendEnvironments = true; +bool sendMinimalEnvironment = false; EnvironmentData environmentData[3]; @@ -325,8 +326,9 @@ void deepestLevelVoxelDistributor(NodeList* nodeList, if (shouldSendEnvironments) { int numBytesPacketHeader = populateTypeAndVersion(tempOutputBuffer, PACKET_TYPE_ENVIRONMENT_DATA); int envPacketLength = numBytesPacketHeader; + int environmentsToSend = ::sendMinimalEnvironment ? 1 : sizeof(environmentData) / sizeof(EnvironmentData); - for (int i = 0; i < sizeof(environmentData) / sizeof(EnvironmentData); i++) { + for (int i = 0; i < environmentsToSend; i++) { envPacketLength += environmentData[i].getBroadcastData(tempOutputBuffer + envPacketLength); } @@ -482,6 +484,11 @@ int main(int argc, const char * argv[]) { if (dontSendEnvironments) { printf("Sending environments suppressed...\n"); ::sendEnvironments = false; + } else { + // should we send environments? Default is yes, but this command line suppresses sending + const char* MINIMAL_ENVIRONMENT = "--MinimalEnvironment"; + ::sendMinimalEnvironment = cmdOptionExists(argc, argv, MINIMAL_ENVIRONMENT); + printf("Using Minimal Environment=%s\n", debug::valueOf(::sendMinimalEnvironment)); } printf("Sending environments=%s\n", debug::valueOf(::sendEnvironments)); @@ -494,6 +501,11 @@ int main(int argc, const char * argv[]) { if (::wantLocalDomain) { printf("Local Domain MODE!\n"); nodeList->setDomainIPToLocalhost(); + } else { + const char* domainIP = getCmdOption(argc, argv, "--domain"); + if (domainIP) { + NodeList::getInstance()->setDomainHostname(domainIP); + } } nodeList->linkedDataCreateCallback = &attachVoxelNodeDataToNode; From 48e35ec6cb2010f388ed553125ec470b65cfbd1f Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 8 Aug 2013 14:29:58 -0700 Subject: [PATCH 24/26] fix delete local voxels in case of last voxel server going away --- interface/src/VoxelSystem.cpp | 22 +++++++++++++++++----- interface/src/VoxelSystem.h | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index bc9502b0ee..1e3c47b8ba 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -63,6 +63,7 @@ VoxelSystem::VoxelSystem(float treeScale, int maxVoxels) : _abandonedVBOSlots = 0; _falseColorizeBySource = false; _dataSourceID = UNKNOWN_NODE_ID; + _voxelServerCount = 0; } void VoxelSystem::nodeDeleted(VoxelNode* node) { @@ -1538,6 +1539,7 @@ void VoxelSystem::nodeAdded(Node* node) { if (node->getType() == NODE_TYPE_VOXEL_SERVER) { uint16_t nodeID = node->getNodeID(); printf("VoxelSystem... voxel server %u added...\n", nodeID); + _voxelServerCount++; } } @@ -1545,8 +1547,11 @@ bool VoxelSystem::killSourceVoxelsOperation(VoxelNode* node, void* extraData) { uint16_t killedNodeID = *(uint16_t*)extraData; for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { VoxelNode* childNode = node->getChildAtIndex(i); - if (childNode && childNode->getSourceID()== killedNodeID) { - node->safeDeepDeleteChildAtIndex(i); + if (childNode) { + uint16_t childNodeID = childNodeID = childNode->getSourceID(); + if (childNodeID == killedNodeID) { + node->safeDeepDeleteChildAtIndex(i); + } } } return true; @@ -1554,12 +1559,19 @@ bool VoxelSystem::killSourceVoxelsOperation(VoxelNode* node, void* extraData) { void VoxelSystem::nodeKilled(Node* node) { if (node->getType() == NODE_TYPE_VOXEL_SERVER) { + _voxelServerCount--; uint16_t nodeID = node->getNodeID(); printf("VoxelSystem... voxel server %u removed...\n", nodeID); - // Kill any voxels from the local tree - _tree->recurseTreeWithOperation(killSourceVoxelsOperation, &nodeID); - _tree->setDirtyBit(); + if (_voxelServerCount > 0) { + // Kill any voxels from the local tree that match this nodeID + _tree->recurseTreeWithOperation(killSourceVoxelsOperation, &nodeID); + _tree->setDirtyBit(); + } else { + // Last server, take the easy way and kill all the local voxels! + _tree->eraseAllVoxels(); + _voxelsInWriteArrays = _voxelsInReadArrays = 0; // better way to do this?? + } setupNewVoxelsForDrawing(); } } diff --git a/interface/src/VoxelSystem.h b/interface/src/VoxelSystem.h index 60396adcb0..94e2d42e5e 100644 --- a/interface/src/VoxelSystem.h +++ b/interface/src/VoxelSystem.h @@ -206,6 +206,8 @@ private: bool _falseColorizeBySource; int _dataSourceID; + + int _voxelServerCount; }; #endif From 6d4ebda1ffe43f3fa633c53dcbe0861ba697fdba Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 8 Aug 2013 14:30:46 -0700 Subject: [PATCH 25/26] fix delete local voxels in case of last voxel server going away --- interface/src/VoxelSystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 1e3c47b8ba..2197b1b1bb 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -1548,7 +1548,7 @@ bool VoxelSystem::killSourceVoxelsOperation(VoxelNode* node, void* extraData) { for (int i = 0; i < NUMBER_OF_CHILDREN; i++) { VoxelNode* childNode = node->getChildAtIndex(i); if (childNode) { - uint16_t childNodeID = childNodeID = childNode->getSourceID(); + uint16_t childNodeID = childNode->getSourceID(); if (childNodeID == killedNodeID) { node->safeDeepDeleteChildAtIndex(i); } From 1eff6e94cee420b291838423cf376c100149191f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 8 Aug 2013 14:46:56 -0700 Subject: [PATCH 26/26] tone down voxel server sending --- voxel-server/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/voxel-server/src/main.cpp b/voxel-server/src/main.cpp index f5b0eca825..84304fa127 100644 --- a/voxel-server/src/main.cpp +++ b/voxel-server/src/main.cpp @@ -47,7 +47,7 @@ const float DEATH_STAR_RADIUS = 4.0; const float MAX_CUBE = 0.05f; const int VOXEL_SEND_INTERVAL_USECS = 17 * 1000; // approximately 60fps -int PACKETS_PER_CLIENT_PER_INTERVAL = 20; +int PACKETS_PER_CLIENT_PER_INTERVAL = 10; const int SENDING_TIME_TO_SPARE = 5 * 1000; // usec of sending interval to spare for calculating voxels const int INTERVALS_PER_SECOND = 1000 * 1000 / VOXEL_SEND_INTERVAL_USECS;