#include "ordeviceskeleton_hardware.h"
ORDeviceSkeletonHardware::ORDeviceSkeletonHardware() :
mChannelCount( 0 ),
mPassCount( 0 ),
mNetworkPort( sSKDataBuffer::PORTNUMBER ),
mSocket( 0 )
{
mNetworkAddress = "127.0.0.1";
}
ORDeviceSkeletonHardware::~ORDeviceSkeletonHardware()
{
}
bool ORDeviceSkeletonHardware::Open()
{
return true;
}
bool ORDeviceSkeletonHardware::GetSetupInfo()
{
mChannelCount = 30;
mChannel[0].mName = "Hips";
mChannel[0].mParentChannel = -1;
mChannel[0].mT[0] = 5.52507944791e-15;
mChannel[0].mT[1] = 90.2313919067;
mChannel[0].mT[2] = 0.0;
mChannel[0].mR[0] = 0.0;
mChannel[0].mR[1] = 0.0;
mChannel[0].mR[2] = 0.0;
mChannel[1].mName = "LeftUpLeg";
mChannel[1].mParentChannel = 0;
mChannel[1].mT[0] = 10.8919000626;
mChannel[1].mT[1] = 90.2313919067;
mChannel[1].mT[2] = 0.0;
mChannel[1].mR[0] = 0.0;
mChannel[1].mR[1] = 0.0;
mChannel[1].mR[2] = 0.0;
mChannel[2].mName = "LeftLeg";
mChannel[2].mParentChannel = 1;
mChannel[2].mT[0] = 10.8919000626;
mChannel[2].mT[1] = 46.1967926025;
mChannel[2].mT[2] = 0.0;
mChannel[2].mR[0] = 0.0;
mChannel[2].mR[1] = 0.0;
mChannel[2].mR[2] = 0.0;
mChannel[3].mName = "LeftFoot";
mChannel[3].mParentChannel = 2;
mChannel[3].mT[0] = 10.8919000626;
mChannel[3].mT[1] = 4.74909210205;
mChannel[3].mT[2] = 0.0;
mChannel[3].mR[0] = 14.9999777807;
mChannel[3].mR[1] = 0.0;
mChannel[3].mR[2] = 0.0;
mChannel[4].mName = "LeftToeBase";
mChannel[4].mParentChannel = 3;
mChannel[4].mT[0] = 10.8919000626;
mChannel[4].mT[1] = 1.05947666894;
mChannel[4].mT[2] = 13.7698536165;
mChannel[4].mR[0] = 0.0;
mChannel[4].mR[1] = 0.0;
mChannel[4].mR[2] = 0.0;
mChannel[5].mName = "L_Toe_End";
mChannel[5].mParentChannel = 4;
mChannel[5].mT[0] = 10.8919000626;
mChannel[5].mT[1] = 1.05947666894;
mChannel[5].mT[2] = 21.2698536165;
mChannel[5].mR[0] = 0.0;
mChannel[5].mR[1] = 0.0;
mChannel[5].mR[2] = 0.0;
mChannel[6].mName = "RightUpLeg";
mChannel[6].mParentChannel = 0;
mChannel[6].mT[0] = -10.8919000626;
mChannel[6].mT[1] = 90.2313919067;
mChannel[6].mT[2] = 0.0;
mChannel[6].mR[0] = 0.0;
mChannel[6].mR[1] = 0.0;
mChannel[6].mR[2] = 0.0;
mChannel[7].mName = "RightLeg";
mChannel[7].mParentChannel = 6;
mChannel[7].mT[0] = -10.8919000626;
mChannel[7].mT[1] = 46.1967926025;
mChannel[7].mT[2] = 0.0;
mChannel[7].mR[0] = 0.0;
mChannel[7].mR[1] = 0.0;
mChannel[7].mR[2] = 0.0;
mChannel[8].mName = "RightFoot";
mChannel[8].mParentChannel = 7;
mChannel[8].mT[0] = -10.8919000626;
mChannel[8].mT[1] = 4.74909210205;
mChannel[8].mT[2] = 0.0;
mChannel[8].mR[0] = 14.9999777807;
mChannel[8].mR[1] = 0.0;
mChannel[8].mR[2] = 0.0;
mChannel[9].mName = "RightToeBase";
mChannel[9].mParentChannel = 8;
mChannel[9].mT[0] = -10.8919000626;
mChannel[9].mT[1] = 1.05947666894;
mChannel[9].mT[2] = 13.7698536165;
mChannel[9].mR[0] = 0.0;
mChannel[9].mR[1] = 0.0;
mChannel[9].mR[2] = 0.0;
mChannel[10].mName = "R_Toe_End";
mChannel[10].mParentChannel = 9;
mChannel[10].mT[0] = -10.8919000626;
mChannel[10].mT[1] = 1.05947666894;
mChannel[10].mT[2] = 21.2698536165;
mChannel[10].mR[0] = 0.0;
mChannel[10].mR[1] = 0.0;
mChannel[10].mR[2] = 0.0;
mChannel[11].mName = "Spine";
mChannel[11].mParentChannel = 0;
mChannel[11].mT[0] = 5.52507944791e-15;
mChannel[11].mT[1] = 90.3313919082;
mChannel[11].mT[2] = 0.0;
mChannel[11].mR[0] = 0.0;
mChannel[11].mR[1] = 0.0;
mChannel[11].mR[2] = 0.0;
mChannel[12].mName = "Spine1";
mChannel[12].mParentChannel = 11;
mChannel[12].mT[0] = 5.52507944791e-15;
mChannel[12].mT[1] = 109.028892137;
mChannel[12].mT[2] = 0.0;
mChannel[12].mR[0] = 0.0;
mChannel[12].mR[1] = 0.0;
mChannel[12].mR[2] = 0.0;
mChannel[13].mName = "Neck";
mChannel[13].mParentChannel = 12;
mChannel[13].mT[0] = 5.52507944791e-15;
mChannel[13].mT[1] = 133.325692751;
mChannel[13].mT[2] = 0.0;
mChannel[13].mR[0] = 0.0;
mChannel[13].mR[1] = 0.0;
mChannel[13].mR[2] = 0.0;
mChannel[14].mName = "Head";
mChannel[14].mParentChannel = 13;
mChannel[14].mT[0] = 5.52507944791e-15;
mChannel[14].mT[1] = 145.887693025;
mChannel[14].mT[2] = 0.0;
mChannel[14].mR[0] = 0.0;
mChannel[14].mR[1] = 0.0;
mChannel[14].mR[2] = 0.0;
mChannel[15].mName = "Head_End";
mChannel[15].mParentChannel = 14;
mChannel[15].mT[0] = 5.52507944791e-15;
mChannel[15].mT[1] = 157.387693025;
mChannel[15].mT[2] = 0.0;
mChannel[15].mR[0] = 0.0;
mChannel[15].mR[1] = 0.0;
mChannel[15].mR[2] = 0.0;
mChannel[16].mName = "LeftShoulder";
mChannel[16].mParentChannel = 12;
mChannel[16].mT[0] = 5.52507944791e-15;
mChannel[16].mT[1] = 133.325692751;
mChannel[16].mT[2] = 0.0;
mChannel[16].mR[0] = 0.0;
mChannel[16].mR[1] = 0.0;
mChannel[16].mR[2] = -90.0002104591;
mChannel[17].mName = "LeftArm";
mChannel[17].mParentChannel = 16;
mChannel[17].mT[0] = 21.7077007292;
mChannel[17].mT[1] = 133.325613014;
mChannel[17].mT[2] = 0.0;
mChannel[17].mR[0] = 0.0;
mChannel[17].mR[1] = 0.0;
mChannel[17].mR[2] = -90.0002104591;
mChannel[18].mName = "LeftForeArm";
mChannel[18].mParentChannel = 17;
mChannel[18].mT[0] = 48.0103015896;
mChannel[18].mT[1] = 133.325516399;
mChannel[18].mT[2] = 0.0;
mChannel[18].mR[0] = 0.0;
mChannel[18].mR[1] = 0.0;
mChannel[18].mR[2] = -90.0002104591;
mChannel[19].mName = "LeftHand";
mChannel[19].mParentChannel = 18;
mChannel[19].mT[0] = 75.5387020106;
mChannel[19].mT[1] = 133.325415281;
mChannel[19].mT[2] = 0.0;
mChannel[19].mR[0] = 0.0;
mChannel[19].mR[1] = 0.0;
mChannel[19].mR[2] = -90.0002104591;
mChannel[20].mName = "LeftHandThumb";
mChannel[20].mParentChannel = 19;
mChannel[20].mT[0] = 75.5387020106;
mChannel[20].mT[1] = 133.325415281;
mChannel[20].mT[2] = 0.0;
mChannel[20].mR[0] = 0.0;
mChannel[20].mR[1] = 0.0;
mChannel[20].mR[2] = -90.0002104591;
mChannel[21].mName = "L_Thumb_End";
mChannel[21].mParentChannel = 20;
mChannel[21].mT[0] = 75.5387020106;
mChannel[21].mT[1] = 133.325415281;
mChannel[21].mT[2] = 10.0;
mChannel[21].mR[0] = 0.0;
mChannel[21].mR[1] = 0.0;
mChannel[21].mR[2] = -90.0002104591;
mChannel[22].mName = "L_Wrist_End";
mChannel[22].mParentChannel = 19;
mChannel[22].mT[0] = 85.5387020105;
mChannel[22].mT[1] = 133.325378549;
mChannel[22].mT[2] = 0.0;
mChannel[22].mR[0] = 0.0;
mChannel[22].mR[1] = 0.0;
mChannel[22].mR[2] = -90.0002104591;
mChannel[23].mName = "RightShoulder";
mChannel[23].mParentChannel = 12;
mChannel[23].mT[0] = 5.52507944791e-15;
mChannel[23].mT[1] = 133.325692751;
mChannel[23].mT[2] = 0.0;
mChannel[23].mR[0] = 0.0;
mChannel[23].mR[1] = 0.0;
mChannel[23].mR[2] = 90.0002104591;
mChannel[24].mName = "RightArm";
mChannel[24].mParentChannel = 23;
mChannel[24].mT[0] = -21.7077007292;
mChannel[24].mT[1] = 133.325613014;
mChannel[24].mT[2] = 0.0;
mChannel[24].mR[0] = 0.0;
mChannel[24].mR[1] = 0.0;
mChannel[24].mR[2] = 90.0002104591;
mChannel[25].mName = "RightForeArm";
mChannel[25].mParentChannel = 24;
mChannel[25].mT[0] = -48.0103015896;
mChannel[25].mT[1] = 133.325516399;
mChannel[25].mT[2] = 0.0;
mChannel[25].mR[0] = 0.0;
mChannel[25].mR[1] = 0.0;
mChannel[25].mR[2] = 90.0002104591;
mChannel[26].mName = "RightHand";
mChannel[26].mParentChannel = 25;
mChannel[26].mT[0] = -75.5387020106;
mChannel[26].mT[1] = 133.325415281;
mChannel[26].mT[2] = 0.0;
mChannel[26].mR[0] = 0.0;
mChannel[26].mR[1] = 0.0;
mChannel[26].mR[2] = 90.0002104591;
mChannel[27].mName = "RightHandThumb";
mChannel[27].mParentChannel = 26;
mChannel[27].mT[0] = -75.5387020106;
mChannel[27].mT[1] = 133.325415281;
mChannel[27].mT[2] = 0.0;
mChannel[27].mR[0] = 0.0;
mChannel[27].mR[1] = 0.0;
mChannel[27].mR[2] = 90.0002104591;
mChannel[28].mName = "R_Thumb_End";
mChannel[28].mParentChannel = 27;
mChannel[28].mT[0] = -75.5387020106;
mChannel[28].mT[1] = 133.325415281;
mChannel[28].mT[2] = 10.0;
mChannel[28].mR[0] = 0.0;
mChannel[28].mR[1] = 0.0;
mChannel[28].mR[2] = 90.0002104591;
mChannel[29].mName = "R_Wrist_End";
mChannel[29].mParentChannel = 26;
mChannel[29].mT[0] = -89.2387018198;
mChannel[29].mT[1] = 133.325364958;
mChannel[29].mT[2] = 0.0;
mChannel[29].mR[0] = 0.0;
mChannel[29].mR[1] = 0.0;
mChannel[29].mR[2] = 90.0002104591;
for(
int i = 0;
i < mChannelCount;
i++)
{
memcpy(mChannel[
i].mDefaultT,mChannel[
i].mT,
sizeof(
double)*3);
memcpy(mChannel[
i].mDefaultR,mChannel[
i].mR,
sizeof(
double)*3);
}
mSkDataBuffer.SetupBuffer();
return true;
}
bool ORDeviceSkeletonHardware::Close()
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
return true;
}
void ORDeviceSkeletonHardware::ResetPacketTimeOffset(FBTime &pTime)
{
mPacketTimeOffset = mSkDataBuffer.mTime;
mStartRecordingTime = pTime;
}
bool ORDeviceSkeletonHardware::FetchDataPacket(FBTime &pTime)
{
if (mSocket)
{
int tmpByteCount = 0;
if (mTCP.Read(mSocket, (char*)&mSkDataBuffer,sizeof(mSkDataBuffer), &tmpByteCount))
{
if (tmpByteCount!=sizeof(mSkDataBuffer))
{
return false;
}
} else
{
return false;
}
} else
{
mPassCount++;
if(mPassCount % 2==0)
{
mLastSimulationTime = mSystem.SystemTime;
return false;
}
mLastSimulationTime.SetMilliSeconds(mLastSimulationTime.GetMilliSeconds()+(1000/sSKDataBuffer::SIM_FPS));
mSkDataBuffer.Simulate((mLastSimulationTime.GetMilliSeconds())*1000000);
SkeletonNodeInfo* lIter;
for(
int i = 0;
i < GetChannelCount();
i++)
{
memcpy(lIter->mT,mSkDataBuffer.mChannel[
i].mT,
sizeof(lIter->mT));
memcpy(lIter->mR,mSkDataBuffer.mChannel[
i].mR,
sizeof(lIter->mR));
}
}
pTime.SetMilliSeconds((mSkDataBuffer.mTime-mPacketTimeOffset)/1000000);
pTime += mStartRecordingTime;
return true;
}
bool ORDeviceSkeletonHardware::StartDataStream()
{
if (mNetworkUse)
{
{
if (!mTCP.Connect(mSocket, mNetworkAddress, mNetworkPort))
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
}
}
return mSocket!=0;
}
return true;
}
bool ORDeviceSkeletonHardware::StopDataStream()
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
return true;
}