123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- #pragma once
- // 标准库头文件
- #include <cstdint>
- #include <cstdio>
- #include <string>
- #include <vector>
- #include <poll.h>
- #include "Definitions.h"
- #include "ResDataObject.h"
- #include "DevTree.h"
- #include "LinuxEvent.h"
- // 跨平台类型定义
- typedef void* HANDLE; // 通用句柄类型
- typedef void* PVOID; // 通用指针类型
- typedef int INT;
- #define DPC_API
- #define DPC_DriverClient "{79A59B8E-310D-4CD4-98AD-F69054A9530A}"
- #define DPC_UnitClient "{34DD498F-43BB-4DC6-BD2D-9FADEA1C0B4F}"
- /*
- 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;
- DevTree* m_pDriverTree;//for static
- DevTree* m_pDeviceTree;//for dyn
- PVOID m_pCircleBuff;//for MDPCs notification
- ResDataObject *m_pDriverConfigFilepath;
- public:
- DriverDPC();
- virtual ~DriverDPC();
- // 配置文件路径操作
- const char *GetDriverConfigFilePath();
- void SetDriverConfigFilePath(const char *pfilepath);
- // 树结构访问
- 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 Connect();
- virtual void 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 OnNotify(std::vector<std::shared_ptr<LinuxEvent>> evtList, DWORD count);
- virtual DPCDRIVERTYPE SYSTEM_CALL GetDPCType();
- virtual void FirstAction();
- };
- //typedef DriverDPC* (*GetDriverDPC)();
- //typedef void(*ReleaseDriverDPC)(DriverDPC *p);
|