#include "stdafx.h" #include "LogicDriverDPCProxy.h" #include "PacketAnalizer.h" using namespace DIOS::Dev::Detail::MachineryECOM; #define MACHINERY_TID "DetectorToTableDistance" #define MACHINERY_SID "DistanceSourcetoDetector" #define MACHINERY_ENTRANCE "DistanceSourcetoEntrance" #define MACHINERY_PROJECTIONNUM "ProjectionNum" #define MACHINERY_MAXANGLE "ProjectionMaxAngle" #define MACHINERY_DIRECTION "ProjectionDirection" #define MACHINERY_GEOMETRY "GeometryKeyword" LogicDriverDPCProxy *LogicDriverDPCProxy::m_instance = nullptr; LogicDriverDPCProxy::LogicDriverDPCProxy() :m_logicDriver(nullptr) { m_resources.add(MACHINERY_TID, (FLOAT)0.0); m_resources.add(MACHINERY_SID, (FLOAT)1.0); m_resources.add(MACHINERY_ENTRANCE, (FLOAT)15.0); m_resources.add(MACHINERY_PROJECTIONNUM, (INT)15); m_resources.add(MACHINERY_MAXANGLE, (FLOAT)15.0); m_resources.add(MACHINERY_DIRECTION, (INT)-1); m_resources.add(MACHINERY_GEOMETRY, "linear"); } LogicDriverDPCProxy::~LogicDriverDPCProxy() { } LogicDriverDPCProxy *LogicDriverDPCProxy::Instance() { if (m_instance == nullptr) { m_instance = new LogicDriverDPCProxy(); } return m_instance; } void LogicDriverDPCProxy::Initialize(LogicDriver *logicDriver) { m_logicDriver = logicDriver; } LogicDriver *LogicDriverDPCProxy::Get() { return m_logicDriver; } RET_STATUS LogicDriverDPCProxy::GetDeviceResource(ResDataObject *pDeviceResource) { bool ret = true; ResDataObject val = (*pDeviceResource)["Attribute"]; val.add(MACHINERY_TID, m_resources[MACHINERY_TID]); val.add(MACHINERY_SID, m_resources[MACHINERY_SID]); val.add(MACHINERY_ENTRANCE, m_resources[MACHINERY_ENTRANCE]); val.add(MACHINERY_PROJECTIONNUM, m_resources[MACHINERY_PROJECTIONNUM]); val.add(MACHINERY_MAXANGLE, m_resources[MACHINERY_MAXANGLE]); val.add(MACHINERY_DIRECTION, m_resources[MACHINERY_DIRECTION]); val.add(MACHINERY_GEOMETRY, m_resources[MACHINERY_GEOMETRY]); ret &= pDeviceResource->update("Attribute", val); if(gbusinessLog) gbusinessLog->Info("[LogicDriverDPCProxy][GetDeviceResource]->[{$}]", val.encode()); if (ret) { return RET_STATUS::RET_SUCCEED; } return RET_STATUS::RET_FAILED; } bool LogicDriverDPCProxy::UpdateDriverResource(const std::string &resourceType, float tid, float sid, int project, float angle, int direction, std::string geometry) { if (!m_logicDriver) { return false; } if(gbusinessLog) gbusinessLog->Info("[LogicDriverDPCProxy][UpdateDriverResource]->[{$:d}]", project); if (resourceType == DRIVER_RESOURCE_TOMO) { m_resources[MACHINERY_TID] = tid * 100; m_resources[MACHINERY_SID] = sid * 100; m_resources[MACHINERY_MAXANGLE] = angle; m_resources[MACHINERY_PROJECTIONNUM] = project; m_resources[MACHINERY_DIRECTION] = direction; m_resources[MACHINERY_GEOMETRY] = geometry.c_str(); //ResDataObject NotifyData; //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_TID, (const char *)m_resources[MACHINERY_TID]); //m_logicDriver->CmdFromLogicDev(&NotifyData); //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_SID, (const char *)m_resources[MACHINERY_SID]); //m_logicDriver->CmdFromLogicDev(&NotifyData); //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_MAXANGLE, (const char *)m_resources[MACHINERY_MAXANGLE]); //m_logicDriver->CmdFromLogicDev(&NotifyData); //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_PROJECTIONNUM, (const char *)m_resources[MACHINERY_PROJECTIONNUM]); //m_logicDriver->CmdFromLogicDev(&NotifyData); //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_DIRECTION, (const char *)m_resources[MACHINERY_DIRECTION]); //m_logicDriver->CmdFromLogicDev(&NotifyData); //PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, MACHINERY_GEOMETRY, (const char *)m_resources[MACHINERY_GEOMETRY]); //m_logicDriver->CmdFromLogicDev(&NotifyData); } return true; }