#include "ordeviceoptical_hardware.h"
ORDeviceOptical_Template_Hardware::ORDeviceOptical_Template_Hardware() :
mMarkerCount( 0 ),
mPassCount( 0 ),
mNetworkPort( PORTNUMBER ),
mSocket( 0 )
{
mNetworkAddress = "127.0.0.1";
}
ORDeviceOptical_Template_Hardware::~ORDeviceOptical_Template_Hardware()
{
}
bool ORDeviceOptical_Template_Hardware::Open()
{
return true;
}
bool ORDeviceOptical_Template_Hardware::GetSetupInfo()
{
mMarkerCount = 4;
mMarkerName[0] = "1";
mMarkerName[1] = "2";
mMarkerName[2] = "3";
mMarkerName[3] = "4";
return true;
}
bool ORDeviceOptical_Template_Hardware::StartDataStream()
{
if (mNetworkUse)
{
{
if (!mTCP.Connect(mSocket, mNetworkAddress, mNetworkPort))
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
}
}
return mSocket!=0;
}
return true;
}
bool ORDeviceOptical_Template_Hardware::StopDataStream()
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
return true;
}
bool ORDeviceOptical_Template_Hardware::Close()
{
if (mSocket) mTCP.CloseSocket(mSocket);
mSocket = 0;
return true;
}
void ORDeviceOptical_Template_Hardware::ResetPacketTimeOffset(FBTime &pTime)
{
mPacketTimeOffset = mDataBuffer.mTime;
mStartRecordingTime = pTime;
}
bool ORDeviceOptical_Template_Hardware::FetchDataPacket(FBTime &pTime)
{
if (mSocket)
{
int tmpByteCount = 0;
if (mTCP.Read(mSocket, (char*)&mDataBuffer,sizeof(mDataBuffer), &tmpByteCount))
{
if (tmpByteCount!=sizeof(mDataBuffer))
{
return false;
}
} else
{
return false;
}
} else
{
mPassCount++;
if(mPassCount % 2==0)
{
mLastSimulationTime = mSystem.SystemTime;
return false;
}
mDataBuffer.Simulate((mLastSimulationTime.GetMilliSeconds())*1000000);
mLastSimulationTime.SetMilliSeconds(mLastSimulationTime.GetMilliSeconds()+(1000/SIM_FPS));
}
pTime.SetMilliSeconds((mDataBuffer.mTime-mPacketTimeOffset)/1000000);
pTime += mStartRecordingTime;
return true;
}