#pragma once #include "ICommunicateEntity.h" #include "IDIOSBoardController.h" namespace DIOS::Dev::Detail::MachineryECOM { //class IDIOSBoardController; class DIOSBoardCommunicateEntity : public ICommunicateEntity { public: DIOSBoardCommunicateEntity(); ~DIOSBoardCommunicateEntity(); public: virtual bool Initialize(IDIOSBoardPacketRecevier *packetReceiver) override; virtual bool Connect(SCF* pSCF, ResDataObject& Connection,HANDLE disconnectListenerhandle, const std::string &ioboardName) override; virtual bool Disonnect() override; public: //protocol wrapper virtual int GPIO_DO_Ctrl(DIOSBOARD_OP op, GPIO_DO_ID id, GPIO_DO_ATTRIBUTE attr, GPIO_DO_PARAM ¶ms) override; virtual int GPIO_DI_Ctrl(DIOSBOARD_OP op, GPIO_DI_ID id, GPIO_DI_ATTRIBUTE attr, GPIO_DI_PARAM ¶ms) override; virtual int AD_Ctrl(DIOSBOARD_OP op, AD_ID id, AD_ATTRIBUTE attr, AD_PARAM ¶ms) override; virtual int RS232_Ctrl(DIOSBOARD_OP op, RS232_ID id, RS232_ATTRIBUTE attr, RS232_PARAM ¶ms) override; virtual int SEC_Ctrl(DIOSBOARD_OP op, SEC_ID id, SEC_ATTRIBUTE attr, SEC_PARAM ¶ms) override; virtual int SCL_Ctrl(DIOSBOARD_OP op, SCL_ID id, SCL_ATTRIBUTE attr, SCL_PARAM ¶ms) override; virtual int ExposureCtrl(DIOSBOARD_OP op, EXPOSURE_ID id, EXPOSURE_PARAM ¶ms) override; virtual int MCU_Ctrl(DIOSBOARD_OP op, MCU_ID id, MCU_ATTRIBUTE attr, MCU_PARAM ¶ms) override; virtual int CAN_Ctrl(DIOSBOARD_OP op, CAN_ID id, CAN_ATTRIBUTE attr, CAN_PARAM ¶ms) override; protected: virtual void OnReceivedPacketNotMatched(SCFPacket *RecvPacket); virtual void OnReceiveFrameNotMatched(char *packet,int length); private: bool SendInitDiosBoardCommands(); int Read(FUNCTIONID Id, char *pszContext, unsigned int PacketLen); int ReadEx(FUNCTIONID Id, char *pszRes, unsigned int ResLen, char *pszContext, unsigned int PacketLen); int ReadFrame(FUNCTIONID Id, char *pszContext, unsigned int PacketLen, unsigned char FrameCmd); int ReadCanData(CAN_ID Id, unsigned short stdid,SCFPacket *sendPacket, SCFPacket *RecvPacket, CAN_PARAM ¶ms); bool ReceiveACK(SCFPacket *sendPacket, SCFPacket *RecvPacket, DWORD timeout = DIOSCTRLCPU_COM_TIMEOUT); bool ReceiveFrame(FUNCTIONID Id, unsigned char FrameCmd, char *pszContext, unsigned int PacketLen, unsigned int& nDataLen, DWORD Timeout = DIOSCTRLCPU_COM_TIMEOUT); bool ReceiveCanFream(CAN_ID Id, unsigned short stdid, CAN_PARAM ¶ms, DWORD timeout = DIOSCTRLCPU_COM_TIMEOUT); private: IDIOSBoardController *m_DiosBoard; SCFPacket *m_SendPacket; SCFPacket *m_ReceivePacket; }; }