123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- #ifndef CCOS_DRIVER_H
- #define CCOS_DRIVER_H
- #include <string>
- #include <map>
- #include <vector>
- #include "ResDataObject.h"
- #define CCOS_DRIVER_API
- #define CCOS_DRIVER_C_API extern "C"
- //////////////////////////////////////////////////////////////////
- /// C版本驱动框架接口
- /// 分为驱动接口篇、设备接口篇
- /// 驱动接口为标准驱动接口,所有驱动均有相同接口,各自实现
- /// 设备接口分为若干章节
- /// 包括基本篇,所有设备均有的接口
- /// 设备模型篇,不同的设备类型,有不同的接口
- ///
- //////////////////////////////////////////////////////////////////
- //#define SYSTEM_CALL
- #define SYSTEM_CALL
- #define DEVICE_HANDLE void*
- #pragma warning(disable : 4190) //C接口形式导出的函数使用了C++的string
- //typedef void(* SystemLogCallback)(DEVICE_HANDLE,int, string, string, string); //产生系统日志的通知回调函数
- //typedef void(* NotifyCallBack)(DEVICE_HANDLE, int, string, string); //普通通知回调函数
- //typedef void(* RawDataNotifyCallBack)(DEVICE_HANDLE, int, string, string, string, char*, int); //原始数据的回调函数
- //typedef void(* NotifyCallBackSetBlockSize)(DEVICE_HANDLE, string, unsigned int, unsigned int, unsigned int, unsigned int); //设置回调块大小回调函数
- typedef void(* VoidCall)(void);
- typedef bool(* BoolCall)(void);
- typedef bool(* BoolCallString)(std::string);
- typedef std::string(* StringCall)(void);
- typedef int(* IntCall)(void);
- typedef void* (* VoindPointerCallInt)(int);
- typedef bool(* BoolCallStringRef)(std::string&);
- typedef int(* StdGetCall)(const std::string, std::string&);
- typedef int(* TmplGetCall)(std::string&);
- typedef std::string(* GetDevCall)(void*);
- typedef void(* VoidDevCall)(void*);
- typedef void(* VoidDevMqttCall)(void*, std::vector<string>& );
- typedef bool(* BoolDevCall)(void*);
- //typedef void(* DevSetSystemLogCallback)(DEVICE_HANDLE, SystemLogCallback);
- //typedef void(* DevSetNotifyCallBack)(DEVICE_HANDLE, NotifyCallBack);
- //typedef void(* DevSetRawDataNotifyCallBack)(DEVICE_HANDLE, RawDataNotifyCallBack);
- //typedef void(* DevSetBlockSizeNotifyCallBack)(DEVICE_HANDLE, NotifyCallBackSetBlockSize);
- typedef int(* DevAddCall)(void*, const std::string, std::string, std::string&);
- typedef int(* DevDeleteCall)(void*, const std::string, std::string, std::string&);
- typedef int(* DevUpdateCall)(void*, const std::string, std::string, std::string&);
- typedef int(* DevActionCall)(void*, const std::string, std::string, std::string&);
- typedef int(* DevGetCall)(void*, const std::string, std::string&);
- typedef int(* DevSetCall)(void*, const std::string, std::string);
- typedef int(* DevPathAddCall)(std::string, const std::string, std::string, std::string&);
- typedef int(* DevPathDeleteCall)(std::string, const std::string, std::string, std::string&);
- typedef int(* DevPathUpdateCall)(std::string, const std::string, std::string, std::string&);
- typedef int(* DevPathActionCall)(std::string, const std::string, std::string, std::string&);
- typedef int(* DevPathGetCall)(std::string, const std::string, std::string&);
- typedef int(* DevPathSetCall)(std::string, const std::string, std::string);
- typedef int(* DevAddTmplCall)(void*, std::string, std::string&);
- typedef int(* DevDeleteTmplCall)(void*, std::string, std::string&);
- typedef int(* DevUpdateTmplCall)(void*, std::string, std::string&);
- typedef int(* DevActionTmplCall)(void*, std::string, std::string&);
- typedef int(* DevGetTmplCall)(void*, std::string&);
- typedef int(* DevSetTmplCall)(void*, std::string);
- typedef int(* DevPathAddTmplCall)(std::string, std::string, std::string&);
- typedef int(* DevPathDeleteTmplCall)(std::string, std::string, std::string&);
- typedef int(* DevPathUpdateTmplCall)(std::string, std::string, std::string&);
- typedef int(* DevPathActionTmplCall)(std::string, std::string, std::string&);//设备路径为第一个参数,操作在函数名称中
- typedef int(* DevPathGetTmplCall)(std::string, std::string&);
- typedef int(* DevPathSetTmplCall)(std::string, std::string);
- typedef int(* DevTemplPathActionTmplCall)(std::string, std::string&); //操作在函数名中,设备路径也在函数名中
- typedef int(* DevTemplPathGetTmplCall)(std::string&);//属性在函数名中,设备路径也在函数名中
- typedef int(* DevTemplPathSetTmplCall)(std::string);//属性在函数名中,设备路径也在函数名中
- typedef std::map<std::string, TmplGetCall> DrvTemplGetCallMap;
- typedef struct __CCOS_DRIVER_OBJ{
- VoidCall DRV_Prepare;
- BoolCallString DRV_DriverEntry;
- StringCall DRV_DriverProbe;
- StringCall DRV_GetGUID;
- StringCall DRV_GetResource;
- StringCall DRV_DeviceProbe;
- BoolCall DRV_OnHeartBeat;
- BoolCall DRV_ReLoadConfig; //重新加载配置
- //IntCall DRV_Connect;
- //VoidCall DRV_Disconnect;
- VoindPointerCallInt DRV_CreateDevice;
- VoidDevCall DRV_FreeDevice;
- BoolCallString DRV_GetDeviceConfig;
- BoolCallStringRef DRV_SetDeviceConfig;
- StdGetCall DRV_Get;
- StdGetCall DRV_Set;
- TmplGetCall DRV_Get_XXX;
- TmplGetCall DRV_Set_XXX; //设置类,返回设置结果
- DrvTemplGetCallMap GetCallTmplMap; //属性名与函数指针映射表
- DrvTemplGetCallMap SetCallTmplMap; //属性名与函数指针映射表
- } CCOS_DRIVER_OBJ;
- //////////////////////////////////////////////////////////////////
- ///
- /// 驱动接口,必须实现
- ///
- //////////////////////////////////////////////////////////////////
- CCOS_DRIVER_C_API void DRV_Prepare();
- CCOS_DRIVER_C_API bool DRV_DriverEntry(std::string CfgFileName);
- CCOS_DRIVER_C_API std::string DRV_DriverProbe(); //返回驱动静态资源,如厂商/序列号/等不会变化的常量信息,包括不限于字典等
- CCOS_DRIVER_C_API std::string DRV_GetGUID(); //为了保持的一定的兼容性,GUID保留,每个公开的值 参考相关文档
- CCOS_DRIVER_C_API std::string DRV_GetResource(); //返回驱动资源,包括各种可能变更的属性、方法等等
- CCOS_DRIVER_C_API std::string DRV_DeviceProbe(); //返回该驱动下所有设备的静态资源,如序列号、字典等信息
- CCOS_DRIVER_C_API bool DRV_OnHeartBeat();
- CCOS_DRIVER_C_API bool DRV_ReLoadConfig();
- //CCOS_DRIVER_C_API int DRV_Connect();
- //CCOS_DRIVER_C_API void DRV_Disconnect();
- //CCOS_DRIVER_C_API bool DRV_isConnected();
- CCOS_DRIVER_C_API DEVICE_HANDLE DRV_CreateDevice(int index);
- CCOS_DRIVER_C_API void DRV_FreeDevice(DEVICE_HANDLE);
- CCOS_DRIVER_C_API bool DRV_GetDeviceConfig(std::string& Cfg);
- CCOS_DRIVER_C_API bool DRV_SetDeviceConfig(std::string Cfg);
- CCOS_DRIVER_C_API int DRV_Get(const std::string attrName, std::string& Out);
- CCOS_DRIVER_C_API int DRV_Set(const std::string attrName, std::string& Out);
- /// XXX 为属性名,可以定义任意多个,每次取一个属性值,等同 DRV_GET(XXX,Out)
- CCOS_DRIVER_C_API int DRV_Get_XXX(std::string& Out);
- /// XXX 为属性名,可以定义任意多个,每次取一个属性值,等同 DRV_GET(XXX,Out)
- CCOS_DRIVER_C_API int DRV_Set_XXX(std::string& InOut);
- //////////////////////////////////////////////////////////////////
- ///
- /// 通用设备接口 Part1,必须实现
- ///
- //////////////////////////////////////////////////////////////////
- typedef std::map<std::string, DevActionTmplCall> DevActionCallMap; //设备对象 Action映射: Action名称->Action函数指针(设备对象)
- typedef std::map<std::string, DevGetTmplCall> DevGetCallMap; //设备对象 Get属性映射
- typedef std::map<std::string, DevSetTmplCall> DevSetCallMap; //设备对象 Set属性映射
- typedef std::map<std::string, DevPathActionTmplCall> DevPathActionCallMap; //设备路径 Action映射:Action名称->Action函数指针(设备路径)
- typedef std::map<std::string, DevPathGetTmplCall> DevPathGetCallMap; //设备路径 Get属性映射
- typedef std::map<std::string, DevPathSetTmplCall> DevPathSetCallMap; //设备路径 Set属性映射
- typedef std::map<std::string, DevTemplPathActionTmplCall> DevTmplPathActionCallMap;//逻辑设备路径-> 逻辑设备Action映射表
- typedef std::map<std::string, DevTemplPathGetTmplCall> DevTemplPathGetCallMap;
- typedef std::map<std::string, DevTemplPathSetTmplCall> DevTemplPathSetCallMap;
- typedef struct __CCOS_DEVICE_OBJ {
- GetDevCall DEV_GetGUID;
- GetDevCall DEV_GetResource;
- VoidDevCall DEV_CompleteInit;
- BoolDevCall DEV_Prepare;
- VoidDevCall DEV_CompleteUnInit;
- VoidDevMqttCall DEV_SubscribeSelf;
- DevAddCall DEV_Add;
- DevDeleteCall Dev_Delete;
- DevUpdateCall Dev_Update;
- DevActionCall Dev_Action;
- DevGetCall Dev_Get;
- DevSetCall Dev_Set;
- DevPathAddCall DevPath_Add;
- DevPathDeleteCall DevPath_Delete;
- DevPathUpdateCall DevPath_Update;
- DevPathActionCall DevPath_Action;
- DevPathGetCall DevPath_Get;
- DevPathSetCall DevPath_Set;
- DevActionCallMap DevAddTmplMap;
- DevActionCallMap DevDeleteTmplMap;
- DevActionCallMap DevUpdateTmplMap;
- DevActionCallMap DevActionTmplMap;
- DevGetCallMap DevGetTmplMap;
- DevSetCallMap DevSetTmplMap;
- //所有路径访问模板方法映射
- DevPathActionCallMap DevPathAddTmplMap; //路径设备 Add方法映射,key: XXX,设备路径为输入参数
- DevPathActionCallMap DevPathDeleteTmplMap; //路径设备 Delete方法映射,key: XXX,设备路径为输入参数
- DevPathActionCallMap DevPathUpdateTmplMap;//路径设备 Update方法映射,key: XXX,设备路径为输入参数
- DevPathActionCallMap DevPathActionTmplMap;//路径设备 Action方法映射,key: XXX,设备路径为输入参数
- DevPathGetCallMap DevPathGetTmplMap;//路径设备 Get方法映射,key: XXX,设备路径为输入参数
- DevPathSetCallMap DevPathSetTmplMap;//路径设备 Set方法映射,key: XXX,设备路径为输入参数
- DevTmplPathActionCallMap LogicDevAddTmpMap; //逻辑设备Add方法映射,key: XXX_/XXX_Devpath
- DevTmplPathActionCallMap LogicDevDeleteTmpMap;//逻辑设备Delete方法映射,key: XXX_/XXX_Devpath
- DevTmplPathActionCallMap LogicDevUpdateTmpMap;//逻辑设备Update方法映射,key: XXX_/XXX_Devpath
- DevTmplPathActionCallMap LogicDevActionTmpMap;//逻辑设备Action方法映射,key: XXX_/XXX_Devpath
- DevTemplPathGetCallMap LogicDevGetTmpMap;//逻辑设备Get方法映射,key: XXX_/XXX_Devpath
- DevTemplPathSetCallMap LogicDevSetTmpMap;//逻辑设备Set方法映射,key: XXX_/XXX_Devpath
- }CCOS_DEVICE_OBJ;
- CCOS_DRIVER_C_API std::string DEV_GetGUID(DEVICE_HANDLE hDev) ;
- CCOS_DRIVER_C_API std::string DEV_GetPath(DEVICE_HANDLE hDev);
- CCOS_DRIVER_C_API std::string DEV_GetResource(DEVICE_HANDLE hDev) ; //这里定义了该设备的模型资源,含属性、方法
- CCOS_DRIVER_C_API void DEV_CompleteInit(DEVICE_HANDLE hDev) ;
- CCOS_DRIVER_C_API bool DEV_Prepare(DEVICE_HANDLE hDev);
- CCOS_DRIVER_C_API void DEV_CompleteUnInit(DEVICE_HANDLE hDev) ;
- CCOS_DRIVER_C_API void DEV_GetSubscribeTopicList(DEVICE_HANDLE hDev, std::vector<string> &TopicList) ;
- //////////////////////////////////////////////////////////////////
- ///
- /// 通用设备接口 Part2,通用模型化原始接口实现,ADD/DELETE/UPDATE/ACTION/GET/SET
- /// 参考 HTTP RESTFULL,
- /// 驱动可以直接实现此接口,无需额外创建接口,适用任意设备
- /// DEVPath 为设备路径访问接口,直接访问对应设备路径的方法
- /// 各驱动可以根据自己特点,实现一套或者2套,不实现的方法需要返回-2
- //////////////////////////////////////////////////////////////////
- CCOS_DRIVER_C_API int DEV_Add(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Delete(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Update(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Action(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Get(DEVICE_HANDLE hDev, const std::string funcName, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Set(DEVICE_HANDLE hDev, const std::string funcName, std::string In);
- CCOS_DRIVER_C_API int DEVPath_Add(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Delete(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Update(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Action(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Get(const std::string devPath, const std::string funcName, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Set(const std::string devPath, const std::string funcName, std::string In);
- //////////////////////////////////////////////////////////////////
- ///
- /// 设备模型接口 Part3,各中设备的标准方法
- /// XXX为属性名或者方法名,用于区分行为的Key
- /// 各驱动可以根据自己特点,定义标准方法集合
- //////////////////////////////////////////////////////////////////
- //实现者需要为每一个创建的设备对象定义模型实现,入口参数为设备时创建的对象句柄,需要自行区分对象与方法的对应
- CCOS_DRIVER_C_API int DEV_Add_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Delete_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Update_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Action_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Get_XXX(DEVICE_HANDLE hDev, std::string& Out);
- CCOS_DRIVER_C_API int DEV_Set_XXX(DEVICE_HANDLE hDev, std::string In);
- //实现者需要为每一个逻辑对象的设备路径 定义模型实现,需要自行根据设备路径和 方法进行区分
- CCOS_DRIVER_C_API int DEVPath_Add_XXX(const std::string devPath, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Delete_XXX(const std::string devPath, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Update_XXX(const std::string devPath, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Action_XXX(const std::string devPath, std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Get_XXX(const std::string devPath, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Set_XXX(const std::string devPath, std::string In);
- //设备树的模型实现
- //根设备的模型方法一套
- CCOS_DRIVER_C_API int DEVPath_Add_XXX_(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Delete_XXX_(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Update_XXX_(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Action_XXX_(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Get_XXX_(std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Set_XXX_(std::string In);
- //每一个逻辑设备路径一套,如下 /Dev01/SubDev的
- CCOS_DRIVER_C_API int DEVPath_Add_XXX_Dev01_SubDev(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Delete_XXX_Dev01_SubDev(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Update_XXX_Dev01_SubDev(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Action_XXX_Dev01_SubDev(std::string In, std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Get_XXX_Dev01_SubDev(std::string& Out);
- CCOS_DRIVER_C_API int DEVPath_Set_XXX_Dev01_SubDev(std::string In);
- #endif
|