#include "ordevicecamera_hardware.h"
#include <math.h>
#if defined( KARCH_ENV_WIN )
#include <winsock2.h>
#endif
#if defined( KARCH_ENV_UNIX )
#include <netinet/in.h>
#endif
ORDeviceCamera_Template_Hardware::ORDeviceCamera_Template_Hardware()
{
mSerialPort = 1;
mSerialBaudRate = 38400;
mNetworkAddress = "127.0.0.1";
mNetworkPort = 3001;
mAmplitude = 1.0;
mFrequency = 1.0;
mFocus = 0.0;
mZoom = 0.0;
#ifdef KARCH_ENV_UNIX
mHandleName = "/usr/tmp/camera.arena";
mHandleAddress = 0x910000;
#else
mHandleName = "HMC_SHM_V1";
mHandleAddress = 0x000000;
#endif
mCounter = 0;
mHardwareSetting = 0.0;
}
ORDeviceCamera_Template_Hardware::~ORDeviceCamera_Template_Hardware()
{
}
bool ORDeviceCamera_Template_Hardware::Init()
{
return true;
}
bool ORDeviceCamera_Template_Hardware::Open()
{
bool lSuccess = false;
{
mCommPort.PortNumber = mSerialPort;
mCommPort.BaudRate = mSerialBaudRate;
mCommPort.ByteSize = 8;
mCommPort.StopBits = 1;
mCommPort.Active = true;
if( mCommPort.Active )
{
lSuccess = true;
}
}
{
#ifdef KARCH_ENV_WIN
mShmHandle = OpenFileMapping( FILE_MAP_READ, FALSE, mHandleName );
if( mShmHandle )
{
}
#elif defined(KARCH_ENV_UNIX)
#endif
}
{
mCounter = 0;
lSuccess = true;
}
{
mTCPIP.Bind ( mNetworkSocket, INADDR_ANY, mNetworkPort );
if( mTCPIP.Select( mNetworkSocket, true, false, false, 1000 ) )
{
lSuccess = true;
}
else
{
mTCPIP.CloseSocket( mNetworkSocket );
}
}
{
mTCPIP.Connect( mNetworkSocket, mNetworkAddress, mNetworkPort );
if( mTCPIP.Select( mNetworkSocket, true, false, false, 1000 ) )
{
lSuccess = true;
}
else
{
mTCPIP.CloseSocket( mNetworkSocket );
}
}
else
{
}
return lSuccess;
}
bool ORDeviceCamera_Template_Hardware::GetSetupInfo()
{
return true;
}
bool ORDeviceCamera_Template_Hardware::StartDataStream()
{
mCounter = 0;
return true;
}
bool ORDeviceCamera_Template_Hardware::FetchDataPacket()
{
bool lSuccess = false;
{
lSuccess = RealTimeUpdate();
}
{
}
{
}
{
}
{
}
return lSuccess;
}
bool ORDeviceCamera_Template_Hardware::StopDataStream()
{
return true;
}
bool ORDeviceCamera_Template_Hardware::Close()
{
{
}
{
mCommPort.Active = false;
}
{
#ifdef KARCH_ENV_WIN
if( mShmHandle )
{
CloseHandle( mShmHandle );
}
#elif defined(KARCH_ENV_UNIX)
#endif
}
{
mTCPIP.CloseSocket( mNetworkSocket );
}
return true;
}
bool ORDeviceCamera_Template_Hardware::Done()
{
return true;
}
bool ORDeviceCamera_Template_Hardware::RealTimeUpdate()
{
FBTime lTime = mSystem.SystemTime;
double lVal = lTime.GetSecondDouble();
double a = mAmplitude;
double w = mFrequency;
double lSin = a*sin( w*lVal + p );
double lCos = a*cos( w*lVal + p );
double lFocus;
double lZoom;
double lData;
lFocus = mFocus;
lZoom = mZoom;
lData = lCos;
mDefaultPacket.Position =
FBVector3d ( 40*lSin+20*lCos, 40*lSin+20*lCos, 40*lSin+20*lCos );
mDefaultPacket.Rotation =
FBVector3d ( 4*lSin+4*lCos, 4*lSin+4*lCos, 4*lSin+4*lCos );
mDefaultPacket.Focus = lFocus;
mDefaultPacket.Zoom = lZoom;
mDefaultPacket.Time = lTime;
mDefaultPacket.Data = lData;
mCounter++;
if( mCounter % 2 == 0 )
{
return false;
}
return true;
}