DriverDefine.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. #ifndef CCOS_DRIVER_H
  2. #define CCOS_DRIVER_H
  3. #include <string>
  4. #include <map>
  5. #include <vector>
  6. #include "ResDataObject.h"
  7. #define CCOS_DRIVER_API
  8. #define CCOS_DRIVER_C_API extern "C"
  9. //////////////////////////////////////////////////////////////////
  10. /// C版本驱动框架接口
  11. /// 分为驱动接口篇、设备接口篇
  12. /// 驱动接口为标准驱动接口,所有驱动均有相同接口,各自实现
  13. /// 设备接口分为若干章节
  14. /// 包括基本篇,所有设备均有的接口
  15. /// 设备模型篇,不同的设备类型,有不同的接口
  16. ///
  17. //////////////////////////////////////////////////////////////////
  18. //#define SYSTEM_CALL
  19. #define SYSTEM_CALL
  20. #define DEVICE_HANDLE void*
  21. #pragma warning(disable : 4190) //C接口形式导出的函数使用了C++的string
  22. //typedef void(* SystemLogCallback)(DEVICE_HANDLE,int, string, string, string); //产生系统日志的通知回调函数
  23. //typedef void(* NotifyCallBack)(DEVICE_HANDLE, int, string, string); //普通通知回调函数
  24. //typedef void(* RawDataNotifyCallBack)(DEVICE_HANDLE, int, string, string, string, char*, int); //原始数据的回调函数
  25. //typedef void(* NotifyCallBackSetBlockSize)(DEVICE_HANDLE, string, unsigned int, unsigned int, unsigned int, unsigned int); //设置回调块大小回调函数
  26. typedef void(* VoidCall)(void);
  27. typedef bool(* BoolCall)(void);
  28. typedef bool(* BoolCallString)(std::string);
  29. typedef std::string(* StringCall)(void);
  30. typedef int(* IntCall)(void);
  31. typedef void* (* VoindPointerCallInt)(int);
  32. typedef bool(* BoolCallStringRef)(std::string&);
  33. typedef int(* StdGetCall)(const std::string, std::string&);
  34. typedef int(* TmplGetCall)(std::string&);
  35. typedef std::string(* GetDevCall)(void*);
  36. typedef void(* VoidDevCall)(void*);
  37. typedef void(* VoidDevMqttCall)(void*, std::vector<string>& );
  38. typedef bool(* BoolDevCall)(void*);
  39. //typedef void(* DevSetSystemLogCallback)(DEVICE_HANDLE, SystemLogCallback);
  40. //typedef void(* DevSetNotifyCallBack)(DEVICE_HANDLE, NotifyCallBack);
  41. //typedef void(* DevSetRawDataNotifyCallBack)(DEVICE_HANDLE, RawDataNotifyCallBack);
  42. //typedef void(* DevSetBlockSizeNotifyCallBack)(DEVICE_HANDLE, NotifyCallBackSetBlockSize);
  43. typedef int(* DevAddCall)(void*, const std::string, std::string, std::string&);
  44. typedef int(* DevDeleteCall)(void*, const std::string, std::string, std::string&);
  45. typedef int(* DevUpdateCall)(void*, const std::string, std::string, std::string&);
  46. typedef int(* DevActionCall)(void*, const std::string, std::string, std::string&);
  47. typedef int(* DevGetCall)(void*, const std::string, std::string&);
  48. typedef int(* DevSetCall)(void*, const std::string, std::string);
  49. typedef int(* DevPathAddCall)(std::string, const std::string, std::string, std::string&);
  50. typedef int(* DevPathDeleteCall)(std::string, const std::string, std::string, std::string&);
  51. typedef int(* DevPathUpdateCall)(std::string, const std::string, std::string, std::string&);
  52. typedef int(* DevPathActionCall)(std::string, const std::string, std::string, std::string&);
  53. typedef int(* DevPathGetCall)(std::string, const std::string, std::string&);
  54. typedef int(* DevPathSetCall)(std::string, const std::string, std::string);
  55. typedef int(* DevAddTmplCall)(void*, std::string, std::string&);
  56. typedef int(* DevDeleteTmplCall)(void*, std::string, std::string&);
  57. typedef int(* DevUpdateTmplCall)(void*, std::string, std::string&);
  58. typedef int(* DevActionTmplCall)(void*, std::string, std::string&);
  59. typedef int(* DevGetTmplCall)(void*, std::string&);
  60. typedef int(* DevSetTmplCall)(void*, std::string);
  61. typedef int(* DevPathAddTmplCall)(std::string, std::string, std::string&);
  62. typedef int(* DevPathDeleteTmplCall)(std::string, std::string, std::string&);
  63. typedef int(* DevPathUpdateTmplCall)(std::string, std::string, std::string&);
  64. typedef int(* DevPathActionTmplCall)(std::string, std::string, std::string&);//设备路径为第一个参数,操作在函数名称中
  65. typedef int(* DevPathGetTmplCall)(std::string, std::string&);
  66. typedef int(* DevPathSetTmplCall)(std::string, std::string);
  67. typedef int(* DevTemplPathActionTmplCall)(std::string, std::string&); //操作在函数名中,设备路径也在函数名中
  68. typedef int(* DevTemplPathGetTmplCall)(std::string&);//属性在函数名中,设备路径也在函数名中
  69. typedef int(* DevTemplPathSetTmplCall)(std::string);//属性在函数名中,设备路径也在函数名中
  70. typedef std::map<std::string, TmplGetCall> DrvTemplGetCallMap;
  71. typedef struct __CCOS_DRIVER_OBJ{
  72. VoidCall DRV_Prepare;
  73. BoolCallString DRV_DriverEntry;
  74. StringCall DRV_DriverProbe;
  75. StringCall DRV_GetGUID;
  76. StringCall DRV_GetResource;
  77. StringCall DRV_DeviceProbe;
  78. BoolCall DRV_OnHeartBeat;
  79. BoolCall DRV_ReLoadConfig; //重新加载配置
  80. //IntCall DRV_Connect;
  81. //VoidCall DRV_Disconnect;
  82. VoindPointerCallInt DRV_CreateDevice;
  83. VoidDevCall DRV_FreeDevice;
  84. BoolCallString DRV_GetDeviceConfig;
  85. BoolCallStringRef DRV_SetDeviceConfig;
  86. StdGetCall DRV_Get;
  87. StdGetCall DRV_Set;
  88. TmplGetCall DRV_Get_XXX;
  89. TmplGetCall DRV_Set_XXX; //设置类,返回设置结果
  90. DrvTemplGetCallMap GetCallTmplMap; //属性名与函数指针映射表
  91. DrvTemplGetCallMap SetCallTmplMap; //属性名与函数指针映射表
  92. } CCOS_DRIVER_OBJ;
  93. //////////////////////////////////////////////////////////////////
  94. ///
  95. /// 驱动接口,必须实现
  96. ///
  97. //////////////////////////////////////////////////////////////////
  98. CCOS_DRIVER_C_API void DRV_Prepare();
  99. CCOS_DRIVER_C_API bool DRV_DriverEntry(std::string CfgFileName);
  100. CCOS_DRIVER_C_API std::string DRV_DriverProbe(); //返回驱动静态资源,如厂商/序列号/等不会变化的常量信息,包括不限于字典等
  101. CCOS_DRIVER_C_API std::string DRV_GetGUID(); //为了保持的一定的兼容性,GUID保留,每个公开的值 参考相关文档
  102. CCOS_DRIVER_C_API std::string DRV_GetResource(); //返回驱动资源,包括各种可能变更的属性、方法等等
  103. CCOS_DRIVER_C_API std::string DRV_DeviceProbe(); //返回该驱动下所有设备的静态资源,如序列号、字典等信息
  104. CCOS_DRIVER_C_API bool DRV_OnHeartBeat();
  105. CCOS_DRIVER_C_API bool DRV_ReLoadConfig();
  106. //CCOS_DRIVER_C_API int DRV_Connect();
  107. //CCOS_DRIVER_C_API void DRV_Disconnect();
  108. //CCOS_DRIVER_C_API bool DRV_isConnected();
  109. CCOS_DRIVER_C_API DEVICE_HANDLE DRV_CreateDevice(int index);
  110. CCOS_DRIVER_C_API void DRV_FreeDevice(DEVICE_HANDLE);
  111. CCOS_DRIVER_C_API bool DRV_GetDeviceConfig(std::string& Cfg);
  112. CCOS_DRIVER_C_API bool DRV_SetDeviceConfig(std::string Cfg);
  113. CCOS_DRIVER_C_API int DRV_Get(const std::string attrName, std::string& Out);
  114. CCOS_DRIVER_C_API int DRV_Set(const std::string attrName, std::string& Out);
  115. /// XXX 为属性名,可以定义任意多个,每次取一个属性值,等同 DRV_GET(XXX,Out)
  116. CCOS_DRIVER_C_API int DRV_Get_XXX(std::string& Out);
  117. /// XXX 为属性名,可以定义任意多个,每次取一个属性值,等同 DRV_GET(XXX,Out)
  118. CCOS_DRIVER_C_API int DRV_Set_XXX(std::string& InOut);
  119. //////////////////////////////////////////////////////////////////
  120. ///
  121. /// 通用设备接口 Part1,必须实现
  122. ///
  123. //////////////////////////////////////////////////////////////////
  124. typedef std::map<std::string, DevActionTmplCall> DevActionCallMap; //设备对象 Action映射: Action名称->Action函数指针(设备对象)
  125. typedef std::map<std::string, DevGetTmplCall> DevGetCallMap; //设备对象 Get属性映射
  126. typedef std::map<std::string, DevSetTmplCall> DevSetCallMap; //设备对象 Set属性映射
  127. typedef std::map<std::string, DevPathActionTmplCall> DevPathActionCallMap; //设备路径 Action映射:Action名称->Action函数指针(设备路径)
  128. typedef std::map<std::string, DevPathGetTmplCall> DevPathGetCallMap; //设备路径 Get属性映射
  129. typedef std::map<std::string, DevPathSetTmplCall> DevPathSetCallMap; //设备路径 Set属性映射
  130. typedef std::map<std::string, DevTemplPathActionTmplCall> DevTmplPathActionCallMap;//逻辑设备路径-> 逻辑设备Action映射表
  131. typedef std::map<std::string, DevTemplPathGetTmplCall> DevTemplPathGetCallMap;
  132. typedef std::map<std::string, DevTemplPathSetTmplCall> DevTemplPathSetCallMap;
  133. typedef struct __CCOS_DEVICE_OBJ {
  134. GetDevCall DEV_GetGUID;
  135. GetDevCall DEV_GetResource;
  136. VoidDevCall DEV_CompleteInit;
  137. BoolDevCall DEV_Prepare;
  138. VoidDevCall DEV_CompleteUnInit;
  139. VoidDevMqttCall DEV_SubscribeSelf;
  140. DevAddCall DEV_Add;
  141. DevDeleteCall Dev_Delete;
  142. DevUpdateCall Dev_Update;
  143. DevActionCall Dev_Action;
  144. DevGetCall Dev_Get;
  145. DevSetCall Dev_Set;
  146. DevPathAddCall DevPath_Add;
  147. DevPathDeleteCall DevPath_Delete;
  148. DevPathUpdateCall DevPath_Update;
  149. DevPathActionCall DevPath_Action;
  150. DevPathGetCall DevPath_Get;
  151. DevPathSetCall DevPath_Set;
  152. DevActionCallMap DevAddTmplMap;
  153. DevActionCallMap DevDeleteTmplMap;
  154. DevActionCallMap DevUpdateTmplMap;
  155. DevActionCallMap DevActionTmplMap;
  156. DevGetCallMap DevGetTmplMap;
  157. DevSetCallMap DevSetTmplMap;
  158. //所有路径访问模板方法映射
  159. DevPathActionCallMap DevPathAddTmplMap; //路径设备 Add方法映射,key: XXX,设备路径为输入参数
  160. DevPathActionCallMap DevPathDeleteTmplMap; //路径设备 Delete方法映射,key: XXX,设备路径为输入参数
  161. DevPathActionCallMap DevPathUpdateTmplMap;//路径设备 Update方法映射,key: XXX,设备路径为输入参数
  162. DevPathActionCallMap DevPathActionTmplMap;//路径设备 Action方法映射,key: XXX,设备路径为输入参数
  163. DevPathGetCallMap DevPathGetTmplMap;//路径设备 Get方法映射,key: XXX,设备路径为输入参数
  164. DevPathSetCallMap DevPathSetTmplMap;//路径设备 Set方法映射,key: XXX,设备路径为输入参数
  165. DevTmplPathActionCallMap LogicDevAddTmpMap; //逻辑设备Add方法映射,key: XXX_/XXX_Devpath
  166. DevTmplPathActionCallMap LogicDevDeleteTmpMap;//逻辑设备Delete方法映射,key: XXX_/XXX_Devpath
  167. DevTmplPathActionCallMap LogicDevUpdateTmpMap;//逻辑设备Update方法映射,key: XXX_/XXX_Devpath
  168. DevTmplPathActionCallMap LogicDevActionTmpMap;//逻辑设备Action方法映射,key: XXX_/XXX_Devpath
  169. DevTemplPathGetCallMap LogicDevGetTmpMap;//逻辑设备Get方法映射,key: XXX_/XXX_Devpath
  170. DevTemplPathSetCallMap LogicDevSetTmpMap;//逻辑设备Set方法映射,key: XXX_/XXX_Devpath
  171. }CCOS_DEVICE_OBJ;
  172. CCOS_DRIVER_C_API std::string DEV_GetGUID(DEVICE_HANDLE hDev) ;
  173. CCOS_DRIVER_C_API std::string DEV_GetPath(DEVICE_HANDLE hDev);
  174. CCOS_DRIVER_C_API std::string DEV_GetResource(DEVICE_HANDLE hDev) ; //这里定义了该设备的模型资源,含属性、方法
  175. CCOS_DRIVER_C_API void DEV_CompleteInit(DEVICE_HANDLE hDev) ;
  176. CCOS_DRIVER_C_API bool DEV_Prepare(DEVICE_HANDLE hDev);
  177. CCOS_DRIVER_C_API void DEV_CompleteUnInit(DEVICE_HANDLE hDev) ;
  178. CCOS_DRIVER_C_API void DEV_GetSubscribeTopicList(DEVICE_HANDLE hDev, std::vector<string> &TopicList) ;
  179. //////////////////////////////////////////////////////////////////
  180. ///
  181. /// 通用设备接口 Part2,通用模型化原始接口实现,ADD/DELETE/UPDATE/ACTION/GET/SET
  182. /// 参考 HTTP RESTFULL,
  183. /// 驱动可以直接实现此接口,无需额外创建接口,适用任意设备
  184. /// DEVPath 为设备路径访问接口,直接访问对应设备路径的方法
  185. /// 各驱动可以根据自己特点,实现一套或者2套,不实现的方法需要返回-2
  186. //////////////////////////////////////////////////////////////////
  187. CCOS_DRIVER_C_API int DEV_Add(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
  188. CCOS_DRIVER_C_API int DEV_Delete(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
  189. CCOS_DRIVER_C_API int DEV_Update(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
  190. CCOS_DRIVER_C_API int DEV_Action(DEVICE_HANDLE hDev, const std::string funcName, std::string In, std::string& Out);
  191. CCOS_DRIVER_C_API int DEV_Get(DEVICE_HANDLE hDev, const std::string funcName, std::string& Out);
  192. CCOS_DRIVER_C_API int DEV_Set(DEVICE_HANDLE hDev, const std::string funcName, std::string In);
  193. CCOS_DRIVER_C_API int DEVPath_Add(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
  194. CCOS_DRIVER_C_API int DEVPath_Delete(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
  195. CCOS_DRIVER_C_API int DEVPath_Update(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
  196. CCOS_DRIVER_C_API int DEVPath_Action(const std::string devPath, const std::string funcName, std::string In, std::string& Out);
  197. CCOS_DRIVER_C_API int DEVPath_Get(const std::string devPath, const std::string funcName, std::string& Out);
  198. CCOS_DRIVER_C_API int DEVPath_Set(const std::string devPath, const std::string funcName, std::string In);
  199. //////////////////////////////////////////////////////////////////
  200. ///
  201. /// 设备模型接口 Part3,各中设备的标准方法
  202. /// XXX为属性名或者方法名,用于区分行为的Key
  203. /// 各驱动可以根据自己特点,定义标准方法集合
  204. //////////////////////////////////////////////////////////////////
  205. //实现者需要为每一个创建的设备对象定义模型实现,入口参数为设备时创建的对象句柄,需要自行区分对象与方法的对应
  206. CCOS_DRIVER_C_API int DEV_Add_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
  207. CCOS_DRIVER_C_API int DEV_Delete_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
  208. CCOS_DRIVER_C_API int DEV_Update_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
  209. CCOS_DRIVER_C_API int DEV_Action_XXX(DEVICE_HANDLE hDev, std::string In, std::string& Out);
  210. CCOS_DRIVER_C_API int DEV_Get_XXX(DEVICE_HANDLE hDev, std::string& Out);
  211. CCOS_DRIVER_C_API int DEV_Set_XXX(DEVICE_HANDLE hDev, std::string In);
  212. //实现者需要为每一个逻辑对象的设备路径 定义模型实现,需要自行根据设备路径和 方法进行区分
  213. CCOS_DRIVER_C_API int DEVPath_Add_XXX(const std::string devPath, std::string In, std::string& Out);
  214. CCOS_DRIVER_C_API int DEVPath_Delete_XXX(const std::string devPath, std::string In, std::string& Out);
  215. CCOS_DRIVER_C_API int DEVPath_Update_XXX(const std::string devPath, std::string In, std::string& Out);
  216. CCOS_DRIVER_C_API int DEVPath_Action_XXX(const std::string devPath, std::string In, std::string& Out);
  217. CCOS_DRIVER_C_API int DEVPath_Get_XXX(const std::string devPath, std::string& Out);
  218. CCOS_DRIVER_C_API int DEVPath_Set_XXX(const std::string devPath, std::string In);
  219. //设备树的模型实现
  220. //根设备的模型方法一套
  221. CCOS_DRIVER_C_API int DEVPath_Add_XXX_(std::string In, std::string& Out);
  222. CCOS_DRIVER_C_API int DEVPath_Delete_XXX_(std::string In, std::string& Out);
  223. CCOS_DRIVER_C_API int DEVPath_Update_XXX_(std::string In, std::string& Out);
  224. CCOS_DRIVER_C_API int DEVPath_Action_XXX_(std::string In, std::string& Out);
  225. CCOS_DRIVER_C_API int DEVPath_Get_XXX_(std::string& Out);
  226. CCOS_DRIVER_C_API int DEVPath_Set_XXX_(std::string In);
  227. //每一个逻辑设备路径一套,如下 /Dev01/SubDev的
  228. CCOS_DRIVER_C_API int DEVPath_Add_XXX_Dev01_SubDev(std::string In, std::string& Out);
  229. CCOS_DRIVER_C_API int DEVPath_Delete_XXX_Dev01_SubDev(std::string In, std::string& Out);
  230. CCOS_DRIVER_C_API int DEVPath_Update_XXX_Dev01_SubDev(std::string In, std::string& Out);
  231. CCOS_DRIVER_C_API int DEVPath_Action_XXX_Dev01_SubDev(std::string In, std::string& Out);
  232. CCOS_DRIVER_C_API int DEVPath_Get_XXX_Dev01_SubDev(std::string& Out);
  233. CCOS_DRIVER_C_API int DEVPath_Set_XXX_Dev01_SubDev(std::string In);
  234. #endif