#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DPC_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // DPC_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef DPC_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "DPCX64D.lib") #else #pragma comment(lib, "DPCX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "DPCD.lib") #else #pragma comment(lib, "DPC.lib") #endif #endif #endif #ifdef DPC_EXPORTS #define DPC_API __declspec(dllexport) #else #define DPC_API __declspec(dllimport) #endif #define DPC_DriverClient "{79A59B8E-310D-4CD4-98AD-F69054A9530A}" #define DPC_UnitClient "{34DD498F-43BB-4DC6-BD2D-9FADEA1C0B4F}" #include "logger.h" #include "definitions.h" #include "ResDataObject.h" class DPC_API DPC { protected: Logger *m_pLog; public: DPC(); virtual ~DPC(); //DPC入口,根据配置进行初始化 //配置的格式要复合JSON规则,具体内容由各个驱动执行定义 //配置内容是加载前驱动所需要的配置内容 virtual bool SYSTEM_CALL DpcEntry(ResDataObject& PARAM_IN Configuration); //获取连接属性 //多个SCF的情况下,将会有多个连接属性 virtual ResDataObject SYSTEM_CALL GetConnectionType(); //进行跟设备连接 virtual bool SYSTEM_CALL Connect(ResDataObject& PARAM_IN Connection); //判断设备的存在性. //检索成功后,返回【硬件信息资源】 virtual bool SYSTEM_CALL Probe(ResDataObject& PARAM_OUT HardwareInfo); //读取事件用的接口 //功能上和顺序上有如下过程 //1. 读取packet from SCF //2. 解析packet //3. dispatch packet to logicdevice virtual bool SYSTEM_CALL OnNotify(HANDLE ExitNotify); //给硬件驱动设置Unique工作路径 //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的. //连接后,单一硬件相关的数据要保存在此. virtual bool SYSTEM_CALL SetWorkPath(const char * PARAM_IN pWorkPath); //逻辑设备树的加载和卸载 virtual PVOID SYSTEM_CALL LoadLogicDevices(); virtual void SYSTEM_CALL UnloadLogicDevices(PVOID PARAM_IN p); virtual bool SYSTEM_CALL DisConnect(); void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger); }; //必须配置2套接口, //一个接口用于处理Driver对象,另一个接口用于处理Devices对象 typedef enum _DPCDriverType { DPCDRIVER_NORMAL, DPCDRIVER_MDPC, DPCDRIVER_MAX }DPCDRIVERTYPE; class DPC_API DriverDPC { protected: Logger *m_pLog; Logger *m_pDynLog; PVOID m_pDriverTree;//for static PVOID m_pDeviceTree;//for dyn PVOID m_pCircleBuff;//for MDPCs notification public: DriverDPC(); virtual ~DriverDPC(); PVOID GetDriverTree(); PVOID GetDeviceTree(); bool BuffSetNotifyBuffSize(DWORD newSize,DWORD Limit); DWORD BuffQueNotify(const char *pBuff, DWORD Size); INT BuffDequeNotify(char *pBuff, DWORD Size); HANDLE GetBuffNotifyHandle(); //DPC入口,根据配置进行初始化 //配置的格式要复合JSON规则,具体内容由各个驱动执行定义 //配置内容是加载前驱动所需要的配置内容 virtual bool SYSTEM_CALL DriverEntry(ResDataObject& PARAM_IN Configuration); //进行跟设备连接,断开 virtual bool DATA_ACTION Connect(); virtual void DATA_ACTION DisConnect(); //返回【驱动信息资源】 virtual bool SYSTEM_CALL Driver_Probe(ResDataObject& PARAM_OUT DriverInfo); virtual RET_STATUS SYSTEM_CALL GetDriverDictionary(ResDataObject& PARAM_OUT DriverInfo); //给驱动设置Unique工作路径 virtual bool SYSTEM_CALL SetDriverWorkPath(const char * PARAM_IN pWorkPath); //逻辑驱动树的加载和卸载 virtual PVOID SYSTEM_CALL LoadDriver();//无根节点 virtual void SYSTEM_CALL UnloadDriver(); //判断设备的存在性. //检索成功后,返回【硬件信息资源】 virtual bool SYSTEM_CALL Device_Probe(ResDataObject& PARAM_OUT HardwareInfo); //给硬件驱动设置Unique工作路径 //如果是同一设备同一连接情况下,硬件多次接入,系统会保证工作路径是一样的. //连接后,单一硬件相关的数据要保存在此. virtual bool SYSTEM_CALL SetDeviceWorkPath(const char * PARAM_IN pWorkPath); //逻辑设备树的加载和卸载 virtual PVOID SYSTEM_CALL LoadLogicDevices(); virtual void SYSTEM_CALL UnloadLogicDevices(); void SYSTEM_CALL SetLogHandle(Logger PARAM_IN *pLogger); void SYSTEM_CALL SetDynLogHandle(Logger PARAM_IN *pLogger); //读取事件用的接口 //功能上和顺序上有如下过程 //1. 读取packet from SCF //2. 解析packet //3. dispatch packet to logicdevice //Ex:OnNotify有2个工作,一个是驱动实体的OnNotify,另一个是逻辑单元实体的OnNotify virtual DWORD SYSTEM_CALL OnNotify(HANDLE evtList[], DWORD count); virtual DPCDRIVERTYPE SYSTEM_CALL GetDPCType(); virtual void DATA_ACTION FirstAction(); }; //typedef DriverDPC* (*GetDriverDPC)(); //typedef void(*ReleaseDriverDPC)(DriverDPC *p);