Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

551 lines
15 KiB

  1. /*
  2. File: CMDeviceIntegration.h
  3. Contains: Color Management Device Interfaces
  4. Version: QuickTime 7.3
  5. Copyright: (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved.
  6. Bugs?: For bug reports, consult the following page on
  7. the World Wide Web:
  8. http://developer.apple.com/bugreporter/
  9. */
  10. #ifndef __CMDEVICEINTEGRATION__
  11. #define __CMDEVICEINTEGRATION__
  12. #ifndef __MACTYPES__
  13. #include <MacTypes.h>
  14. #endif
  15. #ifndef __CFSTRING__
  16. #include <CFString.h>
  17. #endif
  18. #ifndef __CMAPPLICATION__
  19. #include <CMApplication.h>
  20. #endif
  21. #ifndef __CMICCPROFILE__
  22. #include <CMICCProfile.h>
  23. #endif
  24. #if PRAGMA_ONCE
  25. #pragma once
  26. #endif
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. #if PRAGMA_IMPORT
  31. #pragma import on
  32. #endif
  33. #if PRAGMA_STRUCT_ALIGN
  34. #pragma options align=mac68k
  35. #elif PRAGMA_STRUCT_PACKPUSH
  36. #pragma pack(push, 2)
  37. #elif PRAGMA_STRUCT_PACK
  38. #pragma pack(2)
  39. #endif
  40. /*
  41. The current versions of the data structure
  42. containing information on registered devices.
  43. */
  44. enum {
  45. cmDeviceInfoVersion1 = 0x00010000,
  46. cmDeviceProfileInfoVersion1 = 0x00010000,
  47. cmDeviceProfileInfoVersion2 = 0x00020000
  48. };
  49. enum {
  50. cmCurrentDeviceInfoVersion = cmDeviceInfoVersion1,
  51. cmCurrentProfileInfoVersion = cmDeviceProfileInfoVersion1
  52. };
  53. /*
  54. Certain APIs require a device ID or profile ID.
  55. In some cases, a "default ID" can be used.
  56. */
  57. enum {
  58. cmDefaultDeviceID = 0,
  59. cmDefaultProfileID = 0
  60. };
  61. /*
  62. Possible values for device states accessible by the
  63. CMGetDeviceState() and CMSetDeviceState() APIs.
  64. */
  65. enum {
  66. cmDeviceStateDefault = 0x00000000,
  67. cmDeviceStateOffline = 0x00000001,
  68. cmDeviceStateBusy = 0x00000002,
  69. cmDeviceStateForceNotify = (long)0x80000000,
  70. cmDeviceStateDeviceRsvdBits = 0x00FF0000,
  71. cmDeviceStateAppleRsvdBits = (long)0xFF00FFFF
  72. };
  73. /*
  74. Possible values for flags passed to the
  75. CMIterateDeviceProfiles() API.
  76. "Factory" profiles are registered via the
  77. CMSetDeviceFactoryProfiles() API.
  78. "Custom" profiles are those which are meant to take
  79. the place of the factory profiles, as a result of
  80. customization or calibration. These profiles are
  81. registered via the CMSetDeviceProfiles() API.
  82. To retrieve all of the the former for all devices,
  83. use cmIterateFactoryDeviceProfiles as the flags
  84. value when calling CMIterateDeviceProfiles().
  85. To retrieve only the latter for all devices, use
  86. the cmIterateCustomDeviceProfiles, as the flags
  87. value when calling CMIterateDeviceProfiles().
  88. To get the profiles in use for all devices, use
  89. cmIterateCurrentDeviceProfiles as the flags value.
  90. This will replace the factory profiles with any
  91. overrides, yielding the currently used set.
  92. To get all profiles, without replacement, use
  93. cmIterateAllDeviceProfiles.
  94. */
  95. enum {
  96. cmIterateFactoryDeviceProfiles = 0x00000001,
  97. cmIterateCustomDeviceProfiles = 0x00000002,
  98. cmIterateCurrentDeviceProfiles = 0x00000003,
  99. cmIterateAllDeviceProfiles = 0x00000004,
  100. cmIterateDeviceProfilesMask = 0x0000000F
  101. };
  102. /*
  103. Errors returned by CMDeviceIntegration APIs
  104. */
  105. enum {
  106. cmDeviceDBNotFoundErr = -4227, /* Prefs not found/loaded */
  107. cmDeviceAlreadyRegistered = -4228, /* Re-registration of device */
  108. cmDeviceNotRegistered = -4229, /* Device not found */
  109. cmDeviceProfilesNotFound = -4230, /* Profiles not found */
  110. cmInternalCFErr = -4231 /* CoreFoundation failure */
  111. };
  112. /*
  113. Clients can register for notifications of device evolutions:
  114. DeviceRegistered A new device was registered
  115. DeviceUnregistered A device was unregistered
  116. DeviceOnline Change to Online as a result of CMSetDeviceState
  117. DeviceOffline Change to Offline as a result of CMSetDeviceState
  118. DeviceState Any change to a device state
  119. DefaultDevice A default device for any device class changed
  120. DeviceProfiles Any change to any device's profiles
  121. DefaultDeviceProfile The default profile for any device changed
  122. */
  123. #define kCMDeviceRegisteredNotification CFSTR("CMDeviceRegisteredNotification")
  124. #define kCMDeviceUnregisteredNotification CFSTR("CMDeviceUnregisteredNotification")
  125. #define kCMDeviceOnlineNotification CFSTR("CMDeviceOnlineNotification")
  126. #define kCMDeviceOfflineNotification CFSTR("CMDeviceOfflineNotification")
  127. #define kCMDeviceStateNotification CFSTR("CMDeviceStateNotification")
  128. #define kCMDefaultDeviceNotification CFSTR("CMDefaultDeviceNotification")
  129. #define kCMDeviceProfilesNotification CFSTR("CMDeviceProfilesNotification")
  130. #define kCMDefaultDeviceProfileNotification CFSTR("CMDefaultDeviceProfileNotification")
  131. /*
  132. Device state data.
  133. */
  134. typedef UInt32 CMDeviceState;
  135. /*
  136. A CMDeviceID must be unique within a device's class.
  137. */
  138. typedef UInt32 CMDeviceID;
  139. /*
  140. A CMDeviceProfileID must only be unique per device.
  141. */
  142. typedef UInt32 CMDeviceProfileID;
  143. /*
  144. DeviceClass type.
  145. */
  146. enum {
  147. cmScannerDeviceClass = FOUR_CHAR_CODE('scnr'),
  148. cmCameraDeviceClass = FOUR_CHAR_CODE('cmra'),
  149. cmDisplayDeviceClass = FOUR_CHAR_CODE('mntr'),
  150. cmPrinterDeviceClass = FOUR_CHAR_CODE('prtr'),
  151. cmProofDeviceClass = FOUR_CHAR_CODE('pruf')
  152. };
  153. typedef OSType CMDeviceClass;
  154. /*
  155. CMDeviceScope
  156. Structure specifying a device's or a device setting's scope.
  157. */
  158. struct CMDeviceScope {
  159. CFStringRef deviceUser; /* kCFPreferencesCurrentUser | _AnyUser */
  160. CFStringRef deviceHost; /* kCFPreferencesCurrentHost | _AnyHost */
  161. };
  162. typedef struct CMDeviceScope CMDeviceScope;
  163. typedef CMDeviceScope CMDeviceProfileScope;
  164. /*
  165. CMDeviceInfo
  166. Structure containing information on a given device.
  167. */
  168. struct CMDeviceInfo {
  169. UInt32 dataVersion; /* cmDeviceInfoVersion1 */
  170. CMDeviceClass deviceClass; /* device class */
  171. CMDeviceID deviceID; /* device ID */
  172. CMDeviceScope deviceScope; /* device's scope */
  173. CMDeviceState deviceState; /* Device State flags */
  174. CMDeviceProfileID defaultProfileID; /* Can change */
  175. CFDictionaryRef * deviceName; /* Ptr to storage for CFDictionary of */
  176. /* localized device names (could be nil) */
  177. UInt32 profileCount; /* Count of registered profiles */
  178. UInt32 reserved; /* Reserved for use by ColorSync */
  179. };
  180. typedef struct CMDeviceInfo CMDeviceInfo;
  181. typedef CMDeviceInfo * CMDeviceInfoPtr;
  182. /*
  183. CMDeviceProfileInfo
  184. Structure containing information on a device profile.
  185. */
  186. struct CMDeviceProfileInfo {
  187. UInt32 dataVersion; /* cmDeviceProfileInfoVersion1 */
  188. CMDeviceProfileID profileID; /* The identifier for this profile */
  189. CMProfileLocation profileLoc; /* The profile's location */
  190. CFDictionaryRef profileName; /* CFDictionary of localized profile names */
  191. UInt32 reserved; /* Reserved for use by ColorSync */
  192. };
  193. typedef struct CMDeviceProfileInfo CMDeviceProfileInfo;
  194. struct NCMDeviceProfileInfo {
  195. UInt32 dataVersion; /* cmDeviceProfileInfoVersion2 */
  196. CMDeviceProfileID profileID; /* The identifier for this profile */
  197. CMProfileLocation profileLoc; /* The profile's location */
  198. CFDictionaryRef profileName; /* CFDictionary of localized profile names */
  199. CMDeviceProfileScope profileScope; /* The scope this profile applies to */
  200. UInt32 reserved; /* Reserved for use by ColorSync */
  201. };
  202. typedef struct NCMDeviceProfileInfo NCMDeviceProfileInfo;
  203. /*
  204. CMDeviceProfileArray
  205. Structure containing the profiles for a device.
  206. */
  207. struct CMDeviceProfileArray {
  208. UInt32 profileCount; /* Count of profiles in array */
  209. CMDeviceProfileInfo profiles[1]; /* The profile info records */
  210. };
  211. typedef struct CMDeviceProfileArray CMDeviceProfileArray;
  212. typedef CMDeviceProfileArray * CMDeviceProfileArrayPtr;
  213. /*
  214. Caller-supplied iterator functions
  215. */
  216. typedef CALLBACK_API_C( OSErr , CMIterateDeviceInfoProcPtr )(const CMDeviceInfo *deviceInfo, void *refCon);
  217. typedef CALLBACK_API_C( OSErr , CMIterateDeviceProfileProcPtr )(const CMDeviceInfo *deviceInfo, const NCMDeviceProfileInfo *profileInfo, void *refCon);
  218. /*
  219. Device Registration
  220. */
  221. /*
  222. * CMRegisterColorDevice()
  223. *
  224. * Availability:
  225. * Non-Carbon CFM: not available
  226. * CarbonLib: not available
  227. * Mac OS X: in version 10.1 and later
  228. */
  229. EXTERN_API( CMError )
  230. CMRegisterColorDevice(
  231. CMDeviceClass deviceClass,
  232. CMDeviceID deviceID,
  233. CFDictionaryRef deviceName,
  234. const CMDeviceScope * deviceScope);
  235. /*
  236. * CMUnregisterColorDevice()
  237. *
  238. * Availability:
  239. * Non-Carbon CFM: not available
  240. * CarbonLib: not available
  241. * Mac OS X: in version 10.1 and later
  242. */
  243. EXTERN_API( CMError )
  244. CMUnregisterColorDevice(
  245. CMDeviceClass deviceClass,
  246. CMDeviceID deviceID);
  247. /*
  248. Default Device accessors
  249. */
  250. /*
  251. * CMSetDefaultDevice()
  252. *
  253. * Availability:
  254. * Non-Carbon CFM: not available
  255. * CarbonLib: not available
  256. * Mac OS X: in version 10.1 and later
  257. */
  258. EXTERN_API( CMError )
  259. CMSetDefaultDevice(
  260. CMDeviceClass deviceClass,
  261. CMDeviceID deviceID);
  262. /*
  263. * CMGetDefaultDevice()
  264. *
  265. * Availability:
  266. * Non-Carbon CFM: not available
  267. * CarbonLib: not available
  268. * Mac OS X: in version 10.1 and later
  269. */
  270. EXTERN_API( CMError )
  271. CMGetDefaultDevice(
  272. CMDeviceClass deviceClass,
  273. CMDeviceID * deviceID);
  274. /*
  275. Device Profile Registration & Access
  276. */
  277. /*
  278. * CMSetDeviceFactoryProfiles()
  279. *
  280. * Availability:
  281. * Non-Carbon CFM: not available
  282. * CarbonLib: not available
  283. * Mac OS X: in version 10.1 and later
  284. */
  285. EXTERN_API( CMError )
  286. CMSetDeviceFactoryProfiles(
  287. CMDeviceClass deviceClass,
  288. CMDeviceID deviceID,
  289. CMDeviceProfileID defaultProfID,
  290. const CMDeviceProfileArray * deviceProfiles);
  291. /*
  292. * CMGetDeviceFactoryProfiles()
  293. *
  294. * Availability:
  295. * Non-Carbon CFM: not available
  296. * CarbonLib: not available
  297. * Mac OS X: in version 10.1 and later
  298. */
  299. EXTERN_API( CMError )
  300. CMGetDeviceFactoryProfiles(
  301. CMDeviceClass deviceClass,
  302. CMDeviceID deviceID,
  303. CMDeviceProfileID * defaultProfID,
  304. UInt32 * arraySize,
  305. CMDeviceProfileArray * deviceProfiles);
  306. /*
  307. * CMSetDeviceProfiles()
  308. *
  309. * Availability:
  310. * Non-Carbon CFM: not available
  311. * CarbonLib: not available
  312. * Mac OS X: in version 10.1 and later
  313. */
  314. EXTERN_API( CMError )
  315. CMSetDeviceProfiles(
  316. CMDeviceClass deviceClass,
  317. CMDeviceID deviceID,
  318. const CMDeviceProfileScope * profileScope,
  319. const CMDeviceProfileArray * deviceProfiles);
  320. /*
  321. * CMGetDeviceProfiles()
  322. *
  323. * Availability:
  324. * Non-Carbon CFM: not available
  325. * CarbonLib: not available
  326. * Mac OS X: in version 10.1 and later
  327. */
  328. EXTERN_API( CMError )
  329. CMGetDeviceProfiles(
  330. CMDeviceClass deviceClass,
  331. CMDeviceID deviceID,
  332. UInt32 * arraySize,
  333. CMDeviceProfileArray * deviceProfiles);
  334. /*
  335. * CMSetDeviceDefaultProfileID()
  336. *
  337. * Availability:
  338. * Non-Carbon CFM: not available
  339. * CarbonLib: not available
  340. * Mac OS X: in version 10.1 and later
  341. */
  342. EXTERN_API( CMError )
  343. CMSetDeviceDefaultProfileID(
  344. CMDeviceClass deviceClass,
  345. CMDeviceID deviceID,
  346. CMDeviceProfileID defaultProfID);
  347. /*
  348. * CMGetDeviceDefaultProfileID()
  349. *
  350. * Availability:
  351. * Non-Carbon CFM: not available
  352. * CarbonLib: not available
  353. * Mac OS X: in version 10.1 and later
  354. */
  355. EXTERN_API( CMError )
  356. CMGetDeviceDefaultProfileID(
  357. CMDeviceClass deviceClass,
  358. CMDeviceID deviceID,
  359. CMDeviceProfileID * defaultProfID);
  360. /*
  361. * CMGetDeviceProfile()
  362. *
  363. * Availability:
  364. * Non-Carbon CFM: not available
  365. * CarbonLib: not available
  366. * Mac OS X: in version 10.1 and later
  367. */
  368. EXTERN_API( CMError )
  369. CMGetDeviceProfile(
  370. CMDeviceClass deviceClass,
  371. CMDeviceID deviceID,
  372. CMDeviceProfileID profileID,
  373. CMProfileLocation * deviceProfLoc);
  374. /*
  375. * CMSetDeviceProfile()
  376. *
  377. * Availability:
  378. * Non-Carbon CFM: not available
  379. * CarbonLib: not available
  380. * Mac OS X: in version 10.1 and later
  381. */
  382. EXTERN_API( CMError )
  383. CMSetDeviceProfile(
  384. CMDeviceClass deviceClass,
  385. CMDeviceID deviceID,
  386. const CMDeviceProfileScope * profileScope,
  387. CMDeviceProfileID profileID,
  388. const CMProfileLocation * deviceProfLoc);
  389. /*
  390. Other Device State/Info accessors
  391. */
  392. /*
  393. * CMSetDeviceState()
  394. *
  395. * Availability:
  396. * Non-Carbon CFM: not available
  397. * CarbonLib: not available
  398. * Mac OS X: in version 10.1 and later
  399. */
  400. EXTERN_API( CMError )
  401. CMSetDeviceState(
  402. CMDeviceClass deviceClass,
  403. CMDeviceID deviceID,
  404. CMDeviceState deviceState);
  405. /*
  406. * CMGetDeviceState()
  407. *
  408. * Availability:
  409. * Non-Carbon CFM: not available
  410. * CarbonLib: not available
  411. * Mac OS X: in version 10.1 and later
  412. */
  413. EXTERN_API( CMError )
  414. CMGetDeviceState(
  415. CMDeviceClass deviceClass,
  416. CMDeviceID deviceID,
  417. CMDeviceState * deviceState);
  418. /*
  419. * CMGetDeviceInfo()
  420. *
  421. * Availability:
  422. * Non-Carbon CFM: not available
  423. * CarbonLib: not available
  424. * Mac OS X: in version 10.1 and later
  425. */
  426. EXTERN_API( CMError )
  427. CMGetDeviceInfo(
  428. CMDeviceClass deviceClass,
  429. CMDeviceID deviceID,
  430. CMDeviceInfo * deviceInfo);
  431. /*
  432. Device Info & Profile Iterators
  433. */
  434. /*
  435. * CMIterateColorDevices()
  436. *
  437. * Availability:
  438. * Non-Carbon CFM: not available
  439. * CarbonLib: not available
  440. * Mac OS X: in version 10.1 and later
  441. */
  442. EXTERN_API( CMError )
  443. CMIterateColorDevices(
  444. CMIterateDeviceInfoProcPtr proc,
  445. UInt32 * seed,
  446. UInt32 * count,
  447. void * refCon);
  448. /*
  449. * CMIterateDeviceProfiles()
  450. *
  451. * Availability:
  452. * Non-Carbon CFM: not available
  453. * CarbonLib: not available
  454. * Mac OS X: in version 10.1 and later
  455. */
  456. EXTERN_API( CMError )
  457. CMIterateDeviceProfiles(
  458. CMIterateDeviceProfileProcPtr proc,
  459. UInt32 * seed,
  460. UInt32 * count,
  461. UInt32 flags,
  462. void * refCon);
  463. #if PRAGMA_STRUCT_ALIGN
  464. #pragma options align=reset
  465. #elif PRAGMA_STRUCT_PACKPUSH
  466. #pragma pack(pop)
  467. #elif PRAGMA_STRUCT_PACK
  468. #pragma pack()
  469. #endif
  470. #ifdef PRAGMA_IMPORT_OFF
  471. #pragma import off
  472. #elif PRAGMA_IMPORT
  473. #pragma import reset
  474. #endif
  475. #ifdef __cplusplus
  476. }
  477. #endif
  478. #endif /* __CMDEVICEINTEGRATION__ */