SapManager.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. #ifndef _SAPMANAGER_H_
  2. #define _SAPMANAGER_H_
  3. // SapManager.h : header file
  4. //
  5. #include "SapClassBasicDef.h"
  6. //
  7. // SapLocation class declaration
  8. //
  9. class SAPCLASSBASIC_CLASS SapLocation
  10. {
  11. public:
  12. // Common server indices
  13. enum ServerIndex
  14. {
  15. ServerUnknown = -1,
  16. ServerSystem = 0
  17. };
  18. // Common resource indices
  19. enum ResourceIndex
  20. {
  21. ResourceUnknown = -1
  22. };
  23. public:
  24. // Constructor/Destructor
  25. SapLocation();
  26. SapLocation(int serverIndex, int resourceIndex = 0);
  27. SapLocation(const char *serverName, int resourceIndex = 0);
  28. SapLocation(int serverIndex, const char *serverName, int resourceIndex);
  29. SapLocation(const SapLocation &loc);
  30. SapLocation(const SapLocation &loc, int resourceIndex);
  31. virtual ~SapLocation() {}
  32. int GetServerIndex() const { return m_ServerIndex; }
  33. const char *GetServerName() const { return m_ServerName; }
  34. int GetResourceIndex() const { return m_ResourceIndex; }
  35. BOOL IsUnknown() const { return m_ServerIndex < 0 && !strlen(m_ServerName); }
  36. // Obsolete method
  37. BOOL IsNull() const { return IsUnknown(); }
  38. protected:
  39. int m_ServerIndex;
  40. char m_ServerName[CORSERVER_MAX_STRLEN];
  41. int m_ResourceIndex;
  42. };
  43. // Set current function name for error messages
  44. #define SAP_FUNCNAME(funcName) \
  45. static const char *sapFuncName = funcName;
  46. // Check for an error condition with possible arguments for formatting the error message
  47. #define SAP_CHECK(errorCondition, errorMsg, statement) \
  48. { \
  49. if ((errorCondition)) \
  50. { \
  51. if (strlen(errorMsg) != 0) \
  52. SapManager::DisplayMessageAndSave(sapFuncName, errorMsg, __FILE__, __LINE__); \
  53. statement; \
  54. } \
  55. }
  56. // Signal an error condition
  57. #define SAP_ERROR(errorMsg, statement) \
  58. { \
  59. if (strlen(errorMsg) != 0) \
  60. SapManager::DisplayMessageAndSave(sapFuncName, errorMsg, __FILE__, __LINE__); \
  61. statement; \
  62. }
  63. #define SAP_ERROR_SHORT(errorMsg) \
  64. { \
  65. if (strlen(errorMsg) != 0) \
  66. SapManager::DisplayMessageAndSave(sapFuncName, errorMsg, __FILE__, __LINE__); \
  67. }
  68. #define SAP_ERROR_NOSAVE(errorMsg, statement) \
  69. { \
  70. if (strlen(errorMsg) != 0) \
  71. SapManager::DisplayMessage(sapFuncName, errorMsg, __FILE__, __LINE__); \
  72. statement; \
  73. }
  74. // Valid only for classes that implement the Destroy() method
  75. #define SAP_DESTROY(errorMsg, statement) \
  76. { \
  77. if (strlen(errorMsg) != 0) \
  78. SapManager::DisplayMessageAndSave(sapFuncName, errorMsg, __FILE__, __LINE__); \
  79. Destroy(); \
  80. statement; \
  81. }
  82. #define SAP_DESTROY_NOSAVE(errorMsg, statement) \
  83. { \
  84. if (strlen(errorMsg) != 0) \
  85. SapManager::DisplayMessage(sapFuncName, errorMsg, __FILE__, __LINE__); \
  86. Destroy(); \
  87. statement; \
  88. }
  89. // Show a message for the current function with one possible arguments for formatting
  90. #define SAP_MESSAGE(message) \
  91. { \
  92. if (strlen(message) != 0) \
  93. SapManager::DisplayMessage(sapFuncName, message, __FILE__, __LINE__); \
  94. }
  95. // Forward declarations
  96. class SAPCLASSBASIC_CLASS SapManCallbackInfo;
  97. class SAPCLASSBASIC_CLASS SapManVersionInfo;
  98. class SAPCLASSBASIC_CLASS SapInterface;
  99. class SAPCLASSBASIC_CLASS SapResourceInfo;
  100. typedef void (*SapManCallback)(SapManCallbackInfo *);
  101. //
  102. // SapManager class declaration
  103. //
  104. class SAPCLASSBASIC_CLASS SapManager
  105. {
  106. public:
  107. // Server types
  108. typedef int ServerType; // For compatibility with old Sapera++ application code
  109. enum _ServerType
  110. {
  111. ServerNone = 0,
  112. ServerSystem = CORPORT_SYSTEM,
  113. ServerCobra = CORPORT_COBRA, // No longer officially supported
  114. ServerViperRgb = CORPORT_VIPERRGB,
  115. ServerViperDigital = CORPORT_VIPERDIG,
  116. ServerViperQuad = CORPORT_VIPERQUAD,
  117. ServerViperCamLink = CORPORT_VIPERCAMLINK,
  118. ServerBanditII = CORPORT_BANDITII,
  119. ServerBandit3MV = CORPORT_NEXUS,
  120. ServerBandit3CV = CORPORT_NEXUSCV,
  121. ServerX64CL = CORPORT_X64,
  122. ServerX64LVDS = CORPORT_X64LVDS,
  123. ServerX64NS = CORPORT_X64NS,
  124. ServerX64Analog = CORPORT_X64AN, // Obsolete, use ServerX64ANQuad instead
  125. ServerX64ANQuad = CORPORT_X64AN,
  126. ServerX64AN2 = CORPORT_X64AN2,
  127. ServerX64ANLX1 = CORPORT_X64ANLX1,
  128. ServerX64CLiPRO = CORPORT_X64IPRO,
  129. ServerX64CLiPROe = CORPORT_X64IPROE, // Obsolete, use ServerX64CLExpress instead
  130. ServerX64CLExpress = CORPORT_X64IPROE,
  131. ServerX64CLGigE = CORPORT_X64INET,
  132. ServerX64CLLX4 = CORPORT_XCELERAL4X,
  133. ServerX64CLPX4 = CORPORT_X64IPROE4X,
  134. ServerX64CLVX4 = CORPORT_XCELERAV4XCL,
  135. ServerX64LVDSPX4 = CORPORT_XCELERAPX4LVDS,
  136. ServerX64LVDSVX4 = CORPORT_XCELERAV4XLVDS,
  137. ServerX64XRICL = CORPORT_XCELERAXRICL,
  138. ServerX64XRILVDS = CORPORT_XCELERAXRILVDS,
  139. ServerPC2Vision = CORPORT_PC2V,
  140. ServerPC2Comp = CORPORT_PC2COMP,
  141. ServerPC2CamLink = CORPORT_PC2C,
  142. ServerGenie = CORPORT_CAM_GIGE,
  143. ServerMamba = CORPORT_MAMBA, // No longer officially supported
  144. ServerAnaconda = CORPORT_ANACONDA, // Obsolete, use ServerAnacondaCL instead
  145. ServerAnacondaCL = CORPORT_ANACONDA,
  146. ServerAnacondaLVDS = CORPORT_ANACONDALVDS,
  147. ServerXriCL = CORPORT_XRICL,
  148. ServerXriLVDS = CORPORT_XRILVDS,
  149. };
  150. // Resource types
  151. typedef int ResType; // For compatibility with old Sapera++ application code
  152. enum _ResType
  153. {
  154. ResourceAcq = 0,
  155. ResourceDisplay,
  156. ResourceCab,
  157. ResourcePixPro,
  158. ResourceRtPro = ResourcePixPro,
  159. ResourceObsolete1,
  160. ResourceGraphic,
  161. ResourceGio,
  162. ResourceCounter,
  163. ResourceAcqDevice,
  164. ResourceLast = ResourceAcqDevice
  165. };
  166. // detection server types
  167. typedef int DetectServerType;
  168. enum _DetectServerType
  169. {
  170. DetectServerGenCP = CORMAN_VAL_DETECTION_SERVER_TYPE_GENCP,
  171. DetectServerAll = CORMAN_VAL_DETECTION_SERVER_TYPE_ALL
  172. };
  173. // Sapera error return codes
  174. // To be completed later if necessary
  175. enum StatusCode
  176. {
  177. StatusOk = CORSTATUS_OK,
  178. StatusInvalidHandle = CORSTATUS_INVALID_HANDLE,
  179. StatusIncompatibleAcq = CORSTATUS_INCOMPATIBLE_ACQ ,
  180. StatusIncompatibleBuffer = CORSTATUS_INCOMPATIBLE_BUFFER,
  181. StatusIncompatibleCab = CORSTATUS_INCOMPATIBLE_CAB ,
  182. StatusIncompatibleCam = CORSTATUS_INCOMPATIBLE_CAM,
  183. StatusIncompatibleDisplay = CORSTATUS_INCOMPATIBLE_DISPLAY,
  184. StatusIncompatibleGraphic = CORSTATUS_INCOMPATIBLE_GRAPHIC,
  185. StatusIncompatibleKernel = CORSTATUS_INCOMPATIBLE_KERNEL ,
  186. StatusIncompatibleLut = CORSTATUS_INCOMPATIBLE_LUT ,
  187. StatusIncompatibleManager = CORSTATUS_INCOMPATIBLE_MANAGER ,
  188. StatusIncompatiblePro = CORSTATUS_INCOMPATIBLE_PRO ,
  189. StatusIncompatibleVic = CORSTATUS_INCOMPATIBLE_VIC ,
  190. StatusIncompatibleView = CORSTATUS_INCOMPATIBLE_VIEW,
  191. StatusIncompatibleXfer = CORSTATUS_INCOMPATIBLE_XFER,
  192. StatusIncompatibleString = CORSTATUS_INCOMPATIBLE_STRING ,
  193. StatusIncompatibleObject = CORSTATUS_INCOMPATIBLE_OBJECT ,
  194. StatusIncompatibleArray = CORSTATUS_INCOMPATIBLE_ARRAY ,
  195. StatusIncompatibleStream = CORSTATUS_INCOMPATIBLE_STREAM ,
  196. StatusIncompatibleFile = CORSTATUS_INCOMPATIBLE_FILE ,
  197. StatusCapInvalid = CORSTATUS_CAP_INVALID ,
  198. StatusCapNotAvailable = CORSTATUS_CAP_NOT_AVAILABLE,
  199. StatusPrmInvalid = CORSTATUS_PRM_INVALID ,
  200. StatusPrmNotAvailable = CORSTATUS_PRM_NOT_AVAILABLE,
  201. StatusPrmOutOfRange = CORSTATUS_PRM_OUT_OF_RANGE ,
  202. StatusPrmInvalidValue = CORSTATUS_PRM_INVALID_VALUE,
  203. StatusPrmReadOnly = CORSTATUS_PRM_READ_ONLY ,
  204. StatusPrmMutuallyExclusive = CORSTATUS_PRM_MUTUALLY_EXCLUSIVE ,
  205. StatusArgInvalid = CORSTATUS_ARG_INVALID ,
  206. StatusArgOutOfRange = CORSTATUS_ARG_OUT_OF_RANGE ,
  207. StatusArgIncompatible = CORSTATUS_ARG_INCOMPATIBLE ,
  208. StatusArgInvalidValue = CORSTATUS_ARG_INVALID_VALUE,
  209. StatusArgNull = CORSTATUS_ARG_NULL ,
  210. StatusFileOptionsError = CORSTATUS_FILE_OPTIONS_ERROR,
  211. StatusFileOpenModeInvalid = CORSTATUS_FILE_OPEN_MODE_INVALID ,
  212. StatusFileSeekError = CORSTATUS_FILE_SEEK_ERROR ,
  213. StatusFileCreateError = CORSTATUS_FILE_CREATE_ERROR ,
  214. StatusFileOpenError = CORSTATUS_FILE_OPEN_ERROR ,
  215. StatusFileReadError = CORSTATUS_FILE_READ_ERROR ,
  216. StatusFileWriteError = CORSTATUS_FILE_WRITE_ERROR ,
  217. StatusFileCloseError = CORSTATUS_FILE_CLOSE_ERROR ,
  218. StatusFileFormatUnkown = CORSTATUS_FILE_FORMAT_UNKNOWN ,
  219. StatusFileFieldValueNotSupported = CORSTATUS_FILE_FIELD_VALUE_NOT_SUPPORTED ,
  220. StatusFileGetFieldError = CORSTATUS_FILE_GET_FIELD_ERROR ,
  221. StatusFileReadOnly = CORSTATUS_FILE_READ_ONLY ,
  222. StatusFileWriteOnly = CORSTATUS_FILE_WRITE_ONLY ,
  223. StatusNotImplemented = CORSTATUS_NOT_IMPLEMENTED ,
  224. StatusNoMemory = CORSTATUS_NO_MEMORY ,
  225. StatusClippingOccurred = CORSTATUS_CLIPPING_OCCURED,
  226. StatusHardwareError = CORSTATUS_HARDWARE_ERROR ,
  227. StatusServiceNotAvailable = CORSTATUS_SERVICE_NOT_AVAILABLE ,
  228. StatusNotAccessible = CORSTATUS_NOT_ACCESSIBLE ,
  229. StatusNotAvailable = CORSTATUS_NOT_AVAILABLE ,
  230. StatusRoutingNotImplemented = CORSTATUS_ROUTING_NOT_IMPLEMENTED,
  231. StatusRoutingNotAvailable = CORSTATUS_ROUTING_NOT_AVAILABLE ,
  232. StatusRoutingInUse = CORSTATUS_ROUTING_IN_USE ,
  233. StatusIncompatibleSize = CORSTATUS_INCOMPATIBLE_SIZE ,
  234. StatusIncompatibleFormat = CORSTATUS_INCOMPATIBLE_FORMAT ,
  235. StatusIncompatibleLocation = CORSTATUS_INCOMPATIBLE_LOCATION,
  236. StatusResourceInUse = CORSTATUS_RESOURCE_IN_USE ,
  237. StatusResourceLinked = CORSTATUS_RESOURCE_LINKED ,
  238. StatusSoftwareError = CORSTATUS_SOFTWARE_ERROR ,
  239. StatusParametersLocked = CORSTATUS_PARAMETERS_LOCKED ,
  240. StatusXferNotConnected = CORSTATUS_XFER_NOT_CONNECTED ,
  241. StatusXferEmptyList = CORSTATUS_XFER_EMPTY_LIST ,
  242. StatusXferCantCycle = CORSTATUS_XFER_CANT_CYCLE ,
  243. StatusRoutingNotSpecified = CORSTATUS_ROUTING_NOT_SPECIFIED ,
  244. StatusTransferInProgress = CORSTATUS_TRANSFER_IN_PROGRESS ,
  245. StatusApiNotLocked = CORSTATUS_API_NOT_LOCKED ,
  246. StatusServerNotFound = CORSTATUS_SERVER_NOT_FOUND ,
  247. StatusCannotSignalEvent = CORSTATUS_CANNOT_SIGNAL_EVENT,
  248. StatusNoMessage = CORSTATUS_NO_MESSAGE ,
  249. StatusTimeOut = CORSTATUS_TIMEOUT ,
  250. StatusInvalidAlignment = CORSTATUS_INVALID_ALIGNMENT,
  251. StatusDdraw256Colors = CORSTATUS_DDRAW_256_COLORS ,
  252. StatusPciIoError = CORSTATUS_PCI_IO_ERROR ,
  253. StatusPciCannotAccessDevice = CORSTATUS_PCI_CANNOT_ACCESS_DEVICE,
  254. StatusEventCreateError = CORSTATUS_EVENT_CREATE_ERROR ,
  255. StatusBoardNotReady = CORSTATUS_BOARD_NOT_READY ,
  256. StatusXferMaxSize = CORSTATUS_XFER_MAX_SIZE ,
  257. StatusProcessingError = CORSTATUS_PROCESSING_ERROR ,
  258. StatusResourceLocked = CORSTATUS_RESOURCE_LOCKED ,
  259. StatusNoMessagingMemory = CORSTATUS_NO_MESSAGING_MEMORY ,
  260. StatusDdrawNotAvailable = CORSTATUS_DDRAW_NOT_AVAILABLE ,
  261. StatusDdrawError = CORSTATUS_DDRAW_ERROR ,
  262. StatusResourceNotLocked = CORSTATUS_RESOURCE_NOT_LOCKED,
  263. StatusDiskOnChipError = CORSTATUS_DISK_ON_CHIP_ERROR ,
  264. StatusAuthentificationFailed = CORSTATUS_AUTHENTIFICATION_FAILED ,
  265. StatusInsufficientBandwidth = CORSTATUS_INSUFFICIENT_BANDWIDTH ,
  266. StatusFileTellError = CORSTATUS_FILE_TELL_ERROR ,
  267. StatusMaxProcessExceeded = CORSTATUS_MAX_PROCESS_EXCEEDED ,
  268. StatusXferCountMultSrcFrameCount = CORSTATUS_XFER_COUNT_MULT_SRC_FRAME_COUNT ,
  269. StatusAcqConnectedToXfer = CORSTATUS_ACQ_CONNECTED_TO_XFER ,
  270. StatusInsufficientBoardMemory = CORSTATUS_INSUFFICIENT_BOARD_MEMORY ,
  271. StatusInsufficientResources = CORSTATUS_INSUFFICIENT_RESOURCES,
  272. StatusMissingResource = CORSTATUS_MISSING_RESOURCE,
  273. StatusNoDeviceFound = CORSTATUS_NO_DEVICE_FOUND,
  274. StatusResourceNotConnected = CORSTATUS_RESOURCE_NOT_CONNECTED,
  275. StatusServerDatabaseFull = CORSTATUS_SERVER_DATABASE_FULL,
  276. StatusDeviceNotConnected = CORSTATUS_DEVICE_NOT_CONNECTED,
  277. StatusResourceAccess = CORSTATUS_RESOURCE_ACCESS,
  278. StatusDeviceNotResponding = CORSTATUS_DEVICE_NOT_RESPONDING,
  279. StatusDataInvalid = CORSTATUS_DATA_INVALID,
  280. StatusResourceRead = CORSTATUS_RESOURCE_READ,
  281. StatusResourceWrite = CORSTATUS_RESOURCE_WRITE,
  282. StatusConnectionDropped = CORSTATUS_CONNECTION_DROPPED,
  283. StatusEvaluationPeriodExpired = CORSTATUS_EVALUATION_PERIOD_EXPIRED,
  284. StatusExternalPowerNoPresent = CORSTATUS_EXTERNAL_POWER_NO_PRESENT,
  285. StatusCameraPowerError = CORSTATUS_CAMERA_POWER_ERROR,
  286. StatusRebootRequired = CORSTATUS_REBOOT_REQUIRED,
  287. StatusIncompatibleFirmware = CORSTATUS_INCOMPATIBLE_FIRMWARE,
  288. StatusIncompatibleServer = CORSTATUS_INCOMPATIBLE_SERVER,
  289. StatusDeviceContextualError = CORSTATUS_DEVICE_CONTEXTUAL_ERROR
  290. };
  291. // Status reporting modes
  292. typedef int StatusMode; // For compatibility with old Sapera++ application code
  293. enum _StatusMode
  294. {
  295. StatusNotify = 0,
  296. StatusLog,
  297. StatusDebug,
  298. StatusCustom,
  299. StatusCallback
  300. };
  301. // Manager event types
  302. typedef int EventType;
  303. enum _EventType
  304. {
  305. EventNone = 0,
  306. EventServerNew = CORMAN_VAL_EVENT_TYPE_SERVER_NEW,
  307. EventServerDisconnected = CORMAN_VAL_EVENT_TYPE_SERVER_DISCONNECTED,
  308. EventServerConnected = CORMAN_VAL_EVENT_TYPE_SERVER_CONNECTED,
  309. EventServerDatabaseFull = CORMAN_VAL_EVENT_TYPE_SERVER_DATABASE_FULL,
  310. EventResourceInfoChanged = CORMAN_VAL_EVENT_TYPE_RESOURCE_INFO_CHANGED,
  311. EventServerFile = CORMAN_VAL_EVENT_TYPE_SERVER_FILE,
  312. // obsolete, use EventServerDisconnected instead
  313. EventServerNotAccessible = CORMAN_VAL_EVENT_TYPE_SERVER_NOT_ACCESSIBLE,
  314. // obsolete, use EventServerConnected instead
  315. EventServerAccessible = CORMAN_VAL_EVENT_TYPE_SERVER_ACCESSIBLE,
  316. };
  317. // Various maximum values
  318. enum MiscValues
  319. {
  320. #ifdef __BORLANDC__
  321. MaxServers = 40,
  322. #else
  323. MaxServers = CORSERVER_MAX_NUMBER,
  324. #endif
  325. MaxResourceTypes = ResourceLast + 1,
  326. MaxResources = 8,
  327. MaxLabelSize = 128,
  328. LockTimeout = 5000,
  329. };
  330. public:
  331. // Constructor/Destructor
  332. SapManager();
  333. virtual ~SapManager();
  334. // Explicitly initialize and terminate access to Sapera LT libraries
  335. static BOOL Open();
  336. static BOOL Close();
  337. // Version and licensing information
  338. static BOOL GetVersionInfo(SapManVersionInfo *pVersionInfo);
  339. // Server-access methods
  340. static int GetServerCount();
  341. static int GetServerCount(ResType resourceType);
  342. static int GetServerIndex(const char *serverName);
  343. static int GetServerIndex(SapLocation loc);
  344. // Note: nameSize argument (formerly bufSize) is now obsolete
  345. static BOOL GetServerName(int serverIndex, char *serverName, int nameSize = CORSERVER_MAX_STRLEN);
  346. static BOOL GetServerName(SapLocation loc, char *serverName, int nameSize = CORSERVER_MAX_STRLEN);
  347. static BOOL GetServerName(int serverIndex, ResType resourceType, char *serverName);
  348. static BOOL GetServerHandle(int serverIndex, PCORSERVER pServer);
  349. static BOOL GetServerHandle(const char *serverName, PCORSERVER pServer);
  350. static BOOL GetServerHandle(SapLocation loc, PCORSERVER pServer);
  351. static ServerType GetServerType(int serverIndex);
  352. static ServerType GetServerType(const char *serverName);
  353. static ServerType GetServerType(SapLocation loc);
  354. static BOOL IsServerAccessible(int serverIndex);
  355. static BOOL IsServerAccessible(const char *serverName);
  356. static BOOL IsServerAccessible(SapLocation loc);
  357. static BOOL WriteFile(int serverIndex, const char *localFilePath, int deviceFileIndex);
  358. static BOOL WriteFile(const char* serverName, const char *localFilePath, int deviceFileIndex);
  359. static BOOL WriteFile(SapLocation loc, const char *localFilePath, int deviceFileIndex);
  360. static BOOL GetServerSerialNumber(int serverIndex, char *serialNumber);
  361. static BOOL GetServerSerialNumber(const char *serverName, char *serialNumber);
  362. static BOOL GetServerSerialNumber(SapLocation loc, char *serialNumber);
  363. static BOOL ResetServer(int serverIndex, BOOL wait = TRUE, SapManCallback pCallback = NULL, void *pContext = NULL);
  364. static BOOL ResetServer(const char *serverName, BOOL wait = TRUE, SapManCallback pCallback = NULL, void *pContext = NULL);
  365. static BOOL ResetServer(SapLocation loc, BOOL wait = TRUE, SapManCallback pCallback = NULL, void *pContext = NULL);
  366. static BOOL DetectAllServers(DetectServerType type = DetectServerAll);
  367. // Resource-access methods
  368. static int GetResourceCount(int serverIndex, ResType resourceType);
  369. static int GetResourceCount(const char *serverName, ResType resourceType);
  370. static int GetResourceCount(SapLocation loc, ResType resourceType);
  371. // Note: nameSize argument (formerly bufSize) is now obsolete
  372. static BOOL GetResourceName(int serverIndex, ResType resourceType, int resourceIndex, char *resourceName, int nameSize = MaxLabelSize);
  373. static BOOL GetResourceName(const char *serverName, ResType resourceType, int resourceIndex, char *resourceName, int nameSize = MaxLabelSize);
  374. static BOOL GetResourceName(SapLocation loc, ResType resourceType, char *resourceName, int nameSize = MaxLabelSize);
  375. static int GetResourceIndex(int serverIndex, ResType resourceType, const char *resourceName);
  376. static int GetResourceIndex(const char *serverName, ResType resourceType, const char *resourceName);
  377. static BOOL IsResourceAvailable(int serverIndex, ResType resourceType, int resourceIndex);
  378. static BOOL IsResourceAvailable(const char *serverName, ResType resourceType, int resourceIndex);
  379. static BOOL IsResourceAvailable(SapLocation loc, ResType resourceType);
  380. static BOOL GetInstallDirectory(int serverIndex, char *installDir);
  381. static BOOL GetInstallDirectory(const char *serverName, char *installDir);
  382. static BOOL GetInstallDirectory(SapLocation loc, char *installDir);
  383. // Server callback functionality
  384. static BOOL RegisterServerCallback(EventType eventType, SapManCallback callback, void *context = NULL);
  385. static BOOL UnregisterServerCallback(void);
  386. static EventType GetServerEventType() { return m_ServerEventType; }
  387. // Utility methods
  388. #if COR_LINUX
  389. static BOOL IsSystemLocation() { return TRUE; }
  390. #else
  391. static BOOL IsSystemLocation() { return CorManIsSystemHandle(CorManGetLocalServer()); }
  392. #endif
  393. static BOOL IsSystemLocation(SapLocation loc);
  394. static BOOL IsSameServer(SapLocation loc1, SapLocation loc2);
  395. static BOOL IsSameLocation(SapLocation loc1, SapLocation loc2);
  396. static int GetPixelDepthMin(SapFormat format);
  397. static int GetPixelDepthMax(SapFormat format);
  398. static SapFormatType GetFormatType(SapFormat format);
  399. static BOOL GetStringFromFormat( SapFormat format, char* txtFormat);
  400. static int GetCommandTimeout();
  401. static void SetCommandTimeout(int commandTimeout);
  402. static int GetResetTimeout() { return m_ResetTimeout; }
  403. static void SetResetTimeout(int resetTimeout) { m_ResetTimeout = resetTimeout; }
  404. // Status reporting methods
  405. static StatusMode GetDisplayStatusMode() { return m_DisplayStatusMode; }
  406. static BOOL SetDisplayStatusMode(StatusMode mode, SapManCallback pCallback = NULL, void *pContext = NULL);
  407. static SAPSTATUS DisplayStatus(const char *functionName, SAPSTATUS status);
  408. static void DisplayMessage(const char *message, const char *fileName = NULL, int lineNumber = 0, ...);
  409. static void DisplayMessageAndSave(const char *funcName, const char *message, const char *fileName, int lineNumber);
  410. static void GetLastStatus(SAPSTATUS *pLastStatus);
  411. static const char *GetLastStatus();
  412. static BOOL IsStatusOk(const char *funcName, SAPSTATUS status) { return DisplayStatus(funcName, status) == StatusOk; }
  413. // Check if all handles were created successfully (derived classes only)
  414. operator BOOL() const {return m_bInitOK;}
  415. // Internal usage only
  416. static BOOL InternalCommand(int serverIndex, int command, void *inData, int inDataSize, void *outData, int outDataSize);
  417. static BOOL InternalCommand(const char* serverName, int command, void *inData, int inDataSize, void *outData, int outDataSize);
  418. protected:
  419. BOOL m_bInitOK; // TRUE if all handles were created successfully (derived classes only)
  420. protected:
  421. static BOOL Open(BOOL isUserCall);
  422. static BOOL Close(BOOL isUserCall);
  423. static ServerType GetServerType(CORSERVER hServer);
  424. static BOOL GetServerSerialNumber(CORSERVER hServer, char *serialNumber);
  425. static BOOL SetResourceCount(int serverIndex, ResType resourceType);
  426. static BOOL SetResourceName(int serverIndex, ResType resourceType, int resourceIndex);
  427. static BOOL SetResourceName(SapLocation loc, ResType resourceType, CORHANDLE handle);
  428. static void DisplayMessage(const char *funcName, const char *message, const char *fileName, int lineNumber);
  429. static void DisplayMessageAndSave(char *message, const char *fileName, int lineNumber);
  430. static const char *FormatMessage(const char *formatStr, ...);
  431. static UINT WINAPI ResetThreadProc(LPVOID lpParameter);
  432. static BOOL GetInstallDirectory(CORSERVER hServer, char *installDir);
  433. static SAPSTATUS CCONV OnServerCallback(void *context, COREVENTINFO eventInfo);
  434. protected:
  435. static SapInterface m_Interface;
  436. static SapResourceInfo m_ResourceInfo[MaxResourceTypes];
  437. static StatusMode m_DisplayStatusMode;
  438. static int m_ResetIndex;
  439. static int m_ResetTimeout;
  440. static SapManCallback m_ResetCallback;
  441. static void *m_ResetContext;
  442. static SapManCallback m_ErrorCallback;
  443. static void *m_ErrorContext;
  444. static EventType m_ServerEventType;
  445. static SapManCallback m_ServerCallback;
  446. static void *m_ServerContext;
  447. // Tracks usage of Open and Close methods from application code
  448. static BOOL m_UserOpenDone;
  449. // Tracks automatic usage of Open and Close through the SapManager constructor
  450. static int m_InternalOpenCount;
  451. };
  452. //
  453. // SapManVersionInfo class declaration
  454. //
  455. class SAPCLASSBASIC_CLASS SapManVersionInfo
  456. {
  457. public:
  458. enum LicenseType
  459. {
  460. Runtime = CORMAN_VAL_SAPERA_LICENSE_RUNTIME,
  461. Evaluation = CORMAN_VAL_SAPERA_LICENSE_EVAL,
  462. FullSDK = CORMAN_VAL_SAPERA_LICENSE_SDK
  463. };
  464. public:
  465. SapManVersionInfo()
  466. {
  467. m_Major = 0;
  468. m_Minor = 0;
  469. m_Revision = 0;
  470. m_Build = 0;
  471. m_LicenseType = Runtime;
  472. m_EvalDaysRemaining = 0;
  473. }
  474. int GetMajor() const { return m_Major; }
  475. int GetMinor() const { return m_Minor; }
  476. int GetRevision() const { return m_Revision; }
  477. int GetBuild() const { return m_Build; }
  478. LicenseType GetLicenseType() const { return m_LicenseType; }
  479. int GetEvalDaysRemaining() const { return m_EvalDaysRemaining; }
  480. void SetMajor(int major) { m_Major = major; }
  481. void SetMinor(int minor) { m_Minor = minor; }
  482. void SetRevision(int revision) { m_Revision = revision; }
  483. void SetBuild(int build) { m_Build = build; }
  484. void SetLicenseType(LicenseType licenseType) { m_LicenseType = licenseType; }
  485. void SetEvalDaysRemaining(int evalDaysRemaining) { m_EvalDaysRemaining = evalDaysRemaining; }
  486. protected:
  487. int m_Major;
  488. int m_Minor;
  489. int m_Revision;
  490. int m_Build;
  491. LicenseType m_LicenseType;
  492. int m_EvalDaysRemaining;
  493. };
  494. //
  495. // SapManCallbackInfo class declaration
  496. //
  497. class SAPCLASSBASIC_CLASS SapManCallbackInfo
  498. {
  499. public:
  500. enum MaxValues
  501. {
  502. MaxMessageSize = 255
  503. };
  504. public:
  505. SapManCallbackInfo(int serverIndex, void *context)
  506. {
  507. Construct(SapManager::EventNone, serverIndex, 0, context, SapManager::StatusOk, NULL,0);
  508. }
  509. SapManCallbackInfo(SapManager::EventType eventType, int serverIndex, void *context)
  510. {
  511. Construct(eventType, serverIndex, 0, context, SapManager::StatusOk, NULL,0);
  512. }
  513. SapManCallbackInfo(SapManager::EventType eventType, int serverIndex, int resourceIndex, void *context)
  514. {
  515. Construct(eventType, serverIndex, resourceIndex, context, SapManager::StatusOk, NULL,0);
  516. }
  517. SapManCallbackInfo(SAPSTATUS errorValue, const char *errorMessage, void *context)
  518. {
  519. Construct(SapManager::EventNone, 0, 0, context, errorValue, errorMessage,0);
  520. }
  521. SapManCallbackInfo(SapManager::EventType eventType, int serverIndex, void *context, int filePercentProgress)
  522. {
  523. Construct(eventType, serverIndex, 0, context, SapManager::StatusOk, NULL, filePercentProgress);
  524. }
  525. ~SapManCallbackInfo() {}
  526. SapManager::EventType GetEventType() const { return m_EventType; }
  527. int GetServerIndex() const { return m_ServerIndex; }
  528. int GetResourceIndex() const { return m_ResourceIndex; }
  529. void *GetContext() const { return m_Context; }
  530. SAPSTATUS GetErrorValue() const { return m_ErrorValue; }
  531. const char *GetErrorMessage() const { return m_ErrorMessage; }
  532. int GetFilePercentProgress() const { return m_FilePercentProgress; }
  533. protected:
  534. void Construct(SapManager::EventType eventType, int serverIndex, int resourceIndex, void *context, SAPSTATUS errorValue, const char *errorMessage, int percentProgress);
  535. protected:
  536. SapManager::EventType m_EventType;
  537. int m_ServerIndex;
  538. int m_ResourceIndex;
  539. void *m_Context;
  540. SAPSTATUS m_ErrorValue;
  541. char m_ErrorMessage[MaxMessageSize + 1];
  542. int m_FilePercentProgress;
  543. };
  544. //
  545. // SapInterface class declaration
  546. //
  547. typedef SAPSTATUS (__stdcall *PGETCOUNT)( CORSERVER server, PUINT32 count);
  548. typedef SAPSTATUS (__stdcall *PGETHANDLE)( CORSERVER server, UINT32 instance, CORHANDLE *pHandle);
  549. typedef SAPSTATUS (__stdcall *PGETHANDLEREADONLY)( CORSERVER server, UINT32 instance, CORHANDLE *pHandle);
  550. typedef SAPSTATUS (__stdcall *PRELEASE)( CORHANDLE handle);
  551. typedef SAPSTATUS (__stdcall *PGETPRM)( CORHANDLE handle, UINT32 param, void *value);
  552. class SAPCLASSBASIC_CLASS SapInterface
  553. {
  554. public:
  555. static PGETCOUNT m_GetCount[SapManager::MaxResourceTypes];
  556. static PGETHANDLE m_GetHandle[SapManager::MaxResourceTypes];
  557. static PGETHANDLEREADONLY m_GetHandleReadOnly[SapManager::MaxResourceTypes];
  558. static PRELEASE m_Release[SapManager::MaxResourceTypes];
  559. static PGETPRM m_GetPrm[SapManager::MaxResourceTypes];
  560. static int m_LabelPrm[SapManager::MaxResourceTypes];
  561. };
  562. //
  563. // SapResourceInfo class declaration
  564. //
  565. class SAPCLASSBASIC_CLASS SapResourceInfo
  566. {
  567. public:
  568. SapResourceInfo();
  569. int m_Counts[SapManager::MaxServers];
  570. char m_Labels[SapManager::MaxServers][SapManager::MaxResources][SapManager::MaxLabelSize];
  571. BOOL m_IsLabelInitOk[SapManager::MaxServers][SapManager::MaxResources];
  572. };
  573. #endif // _SAPMANAGER_H_