#include "ordeviceoutput_device.h"
#define ORDEVICEOUTPUT__CLASS ORDEVICEOUTPUT__CLASSNAME
#define ORDEVICEOUTPUT__NAME ORDEVICEOUTPUT__CLASSSTR
#define ORDEVICEOUTPUT__LABEL "OR - Output Device"
#define ORDEVICEOUTPUT__DESC "OR - Output Device: Light Controller"
#define ORDEVICEOUTPUT__PREFIX "LightController"
ORDEVICEOUTPUT__CLASS,
ORDEVICEOUTPUT__LABEL,
ORDEVICEOUTPUT__DESC,
bool ORDeviceOutput::FBCreate()
{
ModelTemplate.Children.Add(mRootTemplate);
mRootTemplate->Children.Add(mLightTemplate);
mLightTemplate->Bindings.Add( mLightTFBNode );
mLightTemplate->Bindings.Add( mLightRFBNode );
mExportRate = 10.0;
return true;
}
void ORDeviceOutput::FBDestroy()
{
}
bool ORDeviceOutput::DeviceOperation( kDeviceOperations pOperation )
{
switch (pOperation)
{
case kOpInit: return Init();
case kOpStart: return Start();
case kOpStop: return Stop();
case kOpReset: return Reset();
case kOpDone: return Done();
}
return FBDevice::DeviceOperation( pOperation );
}
bool ORDeviceOutput::Init()
{
return true;
}
bool ORDeviceOutput::Start()
{
FBProgress lProgress;
lProgress.Caption = "Setting up device";
lProgress.Text = "Opening communication to device";
Information = "Opening device";
if(!mHardware.Open())
{
Information = "Could not open device";
return false;
}
lProgress.Text = "Device found, scanning for channel information...";
Information = "Retrieving channel information";
if(!mHardware.GetSetupInfo())
{
Information = "Could not get channel information from device.";
return false;
}
lProgress.Text = "Setting sampling rate";
Information = "Setting sampling rate";
FBTime lTime;
lTime.SetSecondDouble( 1.0 / mExportRate );
SamplingPeriod = lTime;
return true;
}
bool ORDeviceOutput::Stop()
{
FBProgress lProgress;
lProgress.Caption = "Shutting down device";
lProgress.Text = "Closing communication to device";
Information = "Closing device";
if(! mHardware.Close() )
{
Information = "Could not close device";
}
return false;
}
bool ORDeviceOutput::Done()
{
return false;
}
bool ORDeviceOutput::Reset()
{
Stop();
return Start();
}
bool ORDeviceOutput::AnimationNodeNotify(FBAnimationNode* pAnimationNode ,FBEvaluateInfo* pEvaluateInfo)
{
double lPos[3];
double lRot[3];
mLightTFBNode->ReadData( lPos, pEvaluateInfo );
mLightRFBNode->ReadData( lRot, pEvaluateInfo );
mLightTNode->WriteData( lPos, pEvaluateInfo );
mLightRNode->WriteData( lRot, pEvaluateInfo );
return true;
}
bool ORDeviceOutput::DeviceEvaluationNotify(kTransportMode pMode, FBEvaluateInfo* pEvaluateInfo)
{
switch(pMode)
{
case kPreparePlay:
case kPlayReady:
case kPlayStop:
case kJog:
{
}
break;
case kStop:
case kPlay:
{
double lPos[3];
double lRot[3];
mLightTNode->ReadData( lPos, pEvaluateInfo );
mLightRNode->ReadData( lRot, pEvaluateInfo );
mHardware.WritePos( lPos );
mHardware.WriteRot( lRot );
AckOneSampleReceived();
}
break;
}
return true;
}
void ORDeviceOutput::DeviceIONotify( kDeviceIOs pAction,FBDeviceNotifyInfo &pDeviceNotifyInfo)
{
FBTime lEvalTime;
switch (pAction)
{
case kIOPlayModeWrite:
case kIOStopModeWrite:
{
lEvalTime = pDeviceNotifyInfo.GetSystemTime();
mHardware.SendDataPacket( lEvalTime );
}
break;
case kIOStopModeRead:
case kIOPlayModeRead:
{
}
break;
}
}
#define FBX_TAG_SECTION ORDEVICEOUTPUT__CLASSSTR
#define FBX_TAG_SERIALPORT "SerialPort"
bool ORDeviceOutput::FbxStore(FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat)
{
{
}
return true;
}
bool ORDeviceOutput::FbxRetrieve(FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat)
{
{
}
return true;
}