![]() |
Oyranos Color Management System API |
Color device meta data and profile handling. More...
![]() |
Functions | |
OYAPI int OYEXPORT | oyDevicesGet (const char *device_type, const char *device_class, oyOptions_s *options, oyConfigs_s **devices) |
get all devices matching to a device class and type More... | |
OYAPI int OYEXPORT | oyDeviceGet (const char *device_type, const char *device_class, const char *device_name, oyOptions_s *options, oyConfig_s **device) |
ask a module for device informations or other direct calls More... | |
OYAPI int OYEXPORT | oyDeviceBackendCall (oyConfig_s *device, oyOptions_s *options) |
get device answere from options More... | |
OYAPI int OYEXPORT | oyDeviceSetup (oyConfig_s *device) |
activate the device using the stored configuration More... | |
int | oyDeviceUnset (oyConfig_s *device) |
unset the device profile More... | |
OYAPI int OYEXPORT | oyDeviceGetInfo (oyConfig_s *device, oyNAME_e type, oyOptions_s *options, char **info_text, oyAlloc_f allocateFunc) |
get all devices matching to a device class and type More... | |
OYAPI int OYEXPORT | oyDeviceGetProfile (oyConfig_s *device, oyOptions_s *options, oyProfile_s **profile) |
order a device profile More... | |
OYAPI int OYEXPORT | oyDeviceAskProfile2 (oyConfig_s *device, oyOptions_s *options, oyProfile_s **profile) |
ask for the device profile More... | |
int | oyDeviceSetProfile (oyConfig_s *device, const char *profile_name) |
set the device profile More... | |
OYAPI int OYEXPORT | oyDeviceProfileFromDB (oyConfig_s *device, char **profile_name, oyAlloc_f allocateFunc) |
look up a profile of a device from DB More... | |
OYAPI int OYEXPORT | oyDeviceSelectSimiliar (oyConfig_s *pattern, oyConfigs_s *heap, uint32_t flags, oyConfigs_s **matched_devices) |
get similiar devices by a pattern from a list More... | |
OYAPI int OYEXPORT | oyDeviceFromJSON (const char *json_text, oyOptions_s *options, oyConfig_s **device) |
generate a device from a JSON device calibration More... | |
OYAPI int OYEXPORT | oyDeviceToJSON (oyConfig_s *device, oyOptions_s *options, char **json_text, oyAlloc_f allocateFunc) |
get JSON format device calibration text from a device More... | |
OYAPI int OYEXPORT | oyDevicesFromTaxiDB (oyConfig_s *device, oyOptions_s *options, oyConfigs_s **devices, oyObject_s obj) |
search a calibration state in the taxi DB for a device More... | |
Color device meta data and profile handling.
Include the oyranos_devices.h header file to use the interfaces.
Devices are a special form of configurations. Their access is grouped for effective performance. Known devices are queried with oyDevicesGet(). oyConfigDomainList() provides a list of known device modules. A single device can be obtained by oyDeviceGet(). The device_type argument defaults to OY_TYPE_STD and can be omitted for this group. The device_class argument specifies a subgroup, e.g. "monitor".
All other functions return a handle to the device. With this handle it is possible to get informations (oyDeviceGetInfo()), query it's current, possibly remote profile (oyDeviceAskProfile2()) or typical used get a profile with fallbacks including the DB through (oyDeviceGetProfile()), set the profile persistent (oyDeviceSetProfile()) or query the persistent stored profile (oyDeviceProfileFromDB()).
OYAPI int OYEXPORT oyDeviceAskProfile2 | ( | oyConfig_s * | device, |
oyOptions_s * | options, | ||
oyProfile_s ** | profile | ||
) |
ask for the device profile
Function oyDeviceAskProfile2 Ask for a profile associated with the device. A device capable to hold a profile. Only the held profile will be checked and returned. In case this profile is not found a "icc_profile" of oyVAL_STRUCT should be included.
The device might not be able to hold a profile, then just the DB profile will be returned from here without an issue. For interessted users, the source of the profile keeps transparent, as it can be checked if the device contains a "icc_profile" option which contains a oyProfile_s object.
[in] | device | the device |
[in] | options | additional options |
[out] | profile | the device's ICC profile |
References oyConfig_s::oyConfig_Find(), oyDeviceBackendCall(), oyDeviceProfileFromDB(), oyOBJECT_CONFIG_S, oyOBJECT_PROFILE_S, oyOption_s::oyOption_GetStruct(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_New(), oyOptions_s::oyOptions_Release(), oyProfile_s::oyProfile_FromFile(), oyProfile_s::oyProfile_GetSignature(), and oySIGNATURE_MAGIC.
Referenced by oyDeviceGetProfile(), and oyDeviceSetup().
OYAPI int OYEXPORT oyDeviceBackendCall | ( | oyConfig_s * | device, |
oyOptions_s * | options | ||
) |
get device answere from options
Function oyDeviceBackendCall
[in] | device | the device |
[in] | options | options for the device |
1.1 add "properties" call to module arguments
References oyConfig_s::oyConfig_Copy(), oyConfigs_s::oyConfigs_Modify(), oyConfigs_s::oyConfigs_MoveIn(), oyConfigs_s::oyConfigs_New(), oyConfigs_s::oyConfigs_Release(), oyOBJECT_CONFIG_S, oyOptions_s::oyOptions_New(), and oyOptions_s::oyOptions_Release().
Referenced by oyDeviceAskProfile2(), oyDeviceGetInfo(), oyDeviceProfileFromDB(), oyDeviceSelectSimiliar(), oyDeviceSetProfile(), oyDeviceSetup(), and oyDeviceUnset().
OYAPI int OYEXPORT oyDeviceFromJSON | ( | const char * | json_text, |
oyOptions_s * | options, | ||
oyConfig_s ** | device | ||
) |
generate a device from a JSON device calibration
Function oyDeviceFromJSON
[in] | json_text | the device calibration |
[in] | options | optional
|
[out] | config | the device |
References OY_TYPE_STD, oyConfig_s::oyConfig_AddDBData(), oyConfig_s::oyConfig_FromRegistration(), oyOptions_s::oyOptions_FindInt(), and oyOptions_s::oyOptions_FindString().
Referenced by oyDevicesFromTaxiDB().
OYAPI int OYEXPORT oyDeviceGet | ( | const char * | device_type, |
const char * | device_class, | ||
const char * | device_name, | ||
oyOptions_s * | options, | ||
oyConfig_s ** | device | ||
) |
ask a module for device informations or other direct calls
Function oyDeviceGet
oyConfig_s * device = 0; int error = oyDeviceGet( 0, "monitor", ":0.0", 0, &device ); oyConfig_Release( &device );
// pass empty options to the module to get a usage message oyOptions_s * options = oyOptions_New( 0 ); oyDeviceGet( OY_TYPE_STD, "monitor", ":0.0", options, 0 );
[in] | device_type | the device type, e.g. OY_TYPE_STD, defaults to OY_TYPE_STD (optional) |
[in] | device_class | registration oyFILTER_REG_APPLICATION part, e.g. "monitor", mandatory |
[in] | device_name | the device name as returned by oyConfigs_FromPattern_f, mandatory, oyFILTER_REG_OPTION |
[in] | options | options to pass to the module, for zero the verbose and expensive "properties" call is assumed |
[out] | device | the returned device |
1.1 add "list" call to module arguments
1.1.2 set device filter
References oyConfig_s::oyConfig_Release(), oyConfigs_s::oyConfigs_FromDeviceClass(), oyConfigs_s::oyConfigs_Get(), oyConfigs_s::oyConfigs_Release(), and oyOptions_s::oyOptions_New().
OYAPI int OYEXPORT oyDeviceGetInfo | ( | oyConfig_s * | device, |
oyNAME_e | type, | ||
oyOptions_s * | options, | ||
char ** | info_text, | ||
oyAlloc_f | allocateFunc | ||
) |
get all devices matching to a device class and type
Function oyDeviceGetInfo
// print all properties int error = oyDeviceGetInfo( device, oyNAME_DESCRIPTION, 0, &text, malloc ); char * list = text, * tmp = 0, * line = malloc(128); int even = 1; tmp = list; while(list && list[0]) { snprintf( line, 128, "%s", list ); if(strchr( line, '\n' )) { tmp = strchr( line, '\n' ); tmp[0] = 0; } if(even) printf( "%s\n", line ); else printf( " %s\n", line ); list = strchr( list, '\n' ); if(list) ++list; even = !even; } if(line) free(line); if(text) free(text);
To obtain a certain single pice of information you do not need oyDeviceGetInfo. See the following example:
char * device_name = ":0.0"; // a typical device char * text = 0; oyConfig_s * device = 0; oyOptions_s * options = 0; int error = 0; // tell the module with the "properties" call to add all informations error = oyOptions_SetFromText( &options, "//" OY_TYPE_STD "/config/command", "properties", OY_CREATE_NEW ); oyDeviceGet( OY_TYPE_STD, "monitor", device_name, options, &device ); text = oyConfig_FindString( device, "manufacturer", 0 );
[in] | device | the device |
[in] | type | influences the info_text output
|
[in] | options | defaults to command=properties |
[out] | info_text | the text |
[in] | allocateFunc | the user allocator for info_text |
1.2 ask each module
1.2.1 add device_name to the string list
References OY_SLASH_C, OY_TYPE_STD, oyConfig_s::oyConfig_Release(), oyDeviceBackendCall(), oyNAME_DESCRIPTION, oyNAME_NAME, oyNAME_NICK, oyOBJECT_CONFIG_S, oyOption_s::oyOption_GetRegistration(), oyOption_s::oyOption_GetValueText(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_Count(), oyOptions_s::oyOptions_FindString(), oyOptions_s::oyOptions_Get(), oyOptions_s::oyOptions_New(), oyOptions_s::oyOptions_Release(), and oyOptions_s::oyOptions_SetFromText().
OYAPI int OYEXPORT oyDeviceGetProfile | ( | oyConfig_s * | device, |
oyOptions_s * | options, | ||
oyProfile_s ** | profile | ||
) |
order a device profile
Function oyDeviceGetProfile This function is designed to satisfy most users as it tries to deliver a profile all the time. Following code can almost allways expect some profile to go with. It tries hard to get a current profile or set the system up and retry or get at least one basic profile.
For a basic and thus weaker call to the device use oyDeviceAskProfile2() instead.
device | the device |
options | options passed to the backend |
profile | the device's ICC profile |
This function does a device setup in case no profile is delivered by the according module.
As a last means oyASSUMED_WEB is delivered.
References oyASSUMED_WEB, oyDeviceAskProfile2(), oyDeviceSetup(), oyOBJECT_CONFIG_S, and oyProfile_s::oyProfile_FromStd().
OYAPI int OYEXPORT oyDeviceProfileFromDB | ( | oyConfig_s * | device, |
char ** | profile_name, | ||
oyAlloc_f | allocateFunc | ||
) |
look up a profile of a device from DB
Function oyDeviceProfileFromDB The function asks the module for a detailed and possible expensive list of device information and tries to find a matching configuration in the DB. The device informations are the same as for saving to DB.
[in] | device | a device |
[in] | profile_name | profile's name in DB |
[in] | allocateFunc | user allocator |
References OY_SLASH_C, OY_TYPE_STD, oyConfig_s::oyConfig_Find(), oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_GetDB(), oyDeviceBackendCall(), oyOBJECT_CONFIG_S, oyOption_s::oyOption_GetRegistration(), oyOption_s::oyOption_GetValueString(), oyOption_s::oyOption_GetValueText(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_Get(), oyOptions_s::oyOptions_Release(), and oyOptions_s::oyOptions_SetFromText().
Referenced by oyDeviceAskProfile2(), oyDeviceSetup(), and oyDeviceUnset().
OYAPI int OYEXPORT oyDeviceSelectSimiliar | ( | oyConfig_s * | pattern, |
oyConfigs_s * | heap, | ||
uint32_t | flags, | ||
oyConfigs_s ** | matched_devices | ||
) |
get similiar devices by a pattern from a list
Function oyDeviceSelectSimiliar The function takes a device and tries to find exact matches, which can be considered as belonging to the same device. The comparision can be influenced by the flags. The option "profile_name" is ignored during the comparision.
[in] | pattern | Pass a device used as reference. String options of this object are compared to the objects in the heap argument depending on the flags argument. "profile_name" and other options from heap objects are ignored. |
[in] | heap | a list of device objects |
[in] | flags | - 0 yields exact match
|
[out] | matched_devices | the devices selected from heap |
References OY_TYPE_STD, oyConfig_s::oyConfig_Count(), oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_Get(), oyConfig_s::oyConfig_Release(), oyConfigs_s::oyConfigs_Count(), oyConfigs_s::oyConfigs_Get(), oyConfigs_s::oyConfigs_MoveIn(), oyConfigs_s::oyConfigs_New(), oyConfigs_s::oyConfigs_Release(), oyDeviceBackendCall(), oyFilterRegistrationToText(), oyOBJECT_CONFIG_S, oyOption_s::oyOption_GetRegistration(), oyOption_s::oyOption_GetValueString(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_Find(), oyOptions_s::oyOptions_Release(), and oyOptions_s::oyOptions_SetFromText().
int oyDeviceSetProfile | ( | oyConfig_s * | device, |
const char * | profile_name | ||
) |
set the device profile
Function oyDeviceSetProfile The function will lookup the device in the Oyranos device database and stores the given profile there.
To set a new profile und update the device please call the following sequence:
// store new settings in the Oyranos data base oyDeviceSetProfile( device, profile ); // remove any device entries oyDeviceUnset( device ); // update the device from the newly added Oyranos data base settings oyDeviceSetup( device );
device | the device |
profile_name | the device's ICC profile or zero to unset |
1.1 add "properties" call to module arguments
1.2 call the device module
3 load profile from file name argument
3.1 check for success of profile loading
4.1 get stored DB's configurations
4.1.1 compare if each device key matches to one configuration key
4.1.2 if the 4.1.1 condition is true remove the configuration
5.2 save the configuration to DB (Elektra)
5.3 reload the DB part
References OY_TYPE_STD, oyConfig_s::oyConfig_AddDBData(), oyConfig_s::oyConfig_ClearDBData(), oyConfig_s::oyConfig_EraseFromDB(), oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_GetDB(), oyConfig_s::oyConfig_Release(), oyConfig_s::oyConfig_SaveToDB(), oyConfigs_s::oyConfigs_Count(), oyConfigs_s::oyConfigs_FromDB(), oyConfigs_s::oyConfigs_Get(), oyConfigs_s::oyConfigs_Release(), oyDeviceBackendCall(), oyFilterRegistrationToText(), oyOBJECT_CONFIG_S, oyOption_s::oyOption_GetRegistration(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_Count(), oyOptions_s::oyOptions_Get(), oyOptions_s::oyOptions_Release(), oyOptions_s::oyOptions_SetFromText(), and oyProfile_s::oyProfile_FromFile().
OYAPI int OYEXPORT oyDeviceSetup | ( | oyConfig_s * | device | ) |
activate the device using the stored configuration
Function oyDeviceSetup
[in] | device | the device |
We ignore a device, which already has its profile setup.
Warn on not found profile.
References oy_debug, OY_SLASH, OY_TYPE_STD, oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_Has(), oyDeviceAskProfile2(), oyDeviceBackendCall(), oyDeviceProfileFromDB(), oyOBJECT_CONFIG_S, oyOption_s::oyOption_FromRegistration(), oyOption_s::oyOption_MoveInStruct(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_New(), oyOptions_s::oyOptions_Release(), oyOptions_s::oyOptions_Set(), oyOptions_s::oyOptions_SetFromText(), oyProfile_s::oyProfile_FromFile(), oyProfile_s::oyProfile_FromSignature(), oyProfile_s::oyProfile_GetFileName(), oyProfile_s::oyProfile_GetMem(), oyProfile_Install(), oyProfile_s::oyProfile_Release(), oyProfiles_s::oyProfiles_Count(), oyProfiles_s::oyProfiles_Create(), oyProfiles_s::oyProfiles_DeviceRank(), oyProfiles_s::oyProfiles_Get(), oyProfiles_s::oyProfiles_MoveIn(), oyProfiles_s::oyProfiles_New(), oyProfiles_s::oyProfiles_Release(), and oySIGNATURE_CLASS.
Referenced by oyDeviceGetProfile().
OYAPI int OYEXPORT oyDevicesFromTaxiDB | ( | oyConfig_s * | device, |
oyOptions_s * | options, | ||
oyConfigs_s ** | devices, | ||
oyObject_s | obj | ||
) |
search a calibration state in the taxi DB for a device
Function oyDevicesFromTaxiDB oyDevicesFromTaxiDB() needs a device containing the calibration state and gives you a list of found devices in Taxi DB. You can extract the device ID inside the "TAXI_id" string from the returned devices "db" options sets. Typical you want one entry in the profiles list assigned with that device. oyProfile_FromTaxiDB() can be used to download that and oyProfile_Install() helps installing it, while doing some consistency checks.
// get a device oyConfig_s * device = 0; oyDeviceGet( 0, "monitor", ":0.0", 0, &device ); // get all Taxi DB entries for a device oyConfigs_s * taxi_devices = 0; int error; error = oyDevicesFromTaxiDB( device, 0, &taxi_devices, 0 ); // see how many are included int n = oyConfigs_Count( taxi_devices ), i; char * id = calloc( sizeof(char), 1024 ); for(i = 0; i < n; ++i) { int32_t rank = 0; oyOptions_s * options = 0; oyProfile_s * ip; oyConfig_s * taxi_device = oyConfigs_Get( taxi_devices, i ); error = oyConfig_Compare( device, taxi_device, &rank ); // get first profile from Taxi DB if(i == 0) { // select the first assigned profile in position zero snprintf( id, 1024, "%s/0", oyOptions_FindString( *oyConfig_GetOptions(taxi_device,"db"), "TAXI_id", 0 )); error = oyOptions_SetFromText( &options, "//" OY_TYPE_STD "/db/TAXI_id", id, OY_CREATE_NEW ); ip = oyProfile_FromTaxiDB( options, NULL ); oyOptions_Release( &options ); if(rank > 0) { error = oyOptions_SetFromText( &options, "////device", "1", OY_CREATE_NEW ); error = oyProfile_Install( ip, options ); oyOptions_Release( &options ); if(!ip) printf( "No valid Profile obtained: %s\n", id ); if(error == oyERROR_DATA_AMBIGUITY) printf( "Profile already installed: %s\n", oyProfile_GetText( ip, oyNAME_DESCRIPTION )); else if(error == oyERROR_DATA_WRITE) printf( "User Path can not be written\n" ); else if(error == oyCORRUPTED) printf( "Profile not useable: %s\n", oyProfile_GetText( ip, oyNAME_DESCRIPTION ) ); else if(error > 0) printf( "%s - %d","Internal Error", error ); else { const char * filename = oyProfile_GetFileName( ip, -1 ); printf( "installed -> %s\n", filename ); // store new settings in the Oyranos data base oyDeviceSetProfile( device, strrchr( filename, OY_SLASH_C ) + 1 ); // remove any device entries oyDeviceUnset( device ); // update the device from the newly added Oyranos data base settings oyDeviceSetup( device ); printf( "assigned -> %s\n", strrchr( filename, OY_SLASH_C ) + 1 ); } } } if(rank > 0) { printf( "rank[%d]\n", rank ); } } // release data oyConfigs_Release( &taxi_devices );
[in] | device | the device |
[in] | options | not used |
[out] | devices | the obtained device calibrations |
References oy_debug, OY_TYPE_STD, oyConfig_s::oyConfig_AddDBData(), oyConfig_s::oyConfig_Compare(), oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_Release(), oyConfigs_s::oyConfigs_Count(), oyConfigs_s::oyConfigs_Get(), oyConfigs_s::oyConfigs_MoveIn(), oyConfigs_s::oyConfigs_New(), oyConfigs_s::oyConfigs_Release(), oyDeviceFromJSON(), oyDeviceToJSON(), oyOBJECT_CONFIG_S, oyOptions_s::oyOptions_Release(), oyOptions_s::oyOptions_SetFromInt(), and oyOptions_s::oyOptions_SetFromText().
Referenced by oyConfig_s::oyConfig_GetBestMatchFromTaxiDB().
OYAPI int OYEXPORT oyDevicesGet | ( | const char * | device_type, |
const char * | device_class, | ||
oyOptions_s * | options, | ||
oyConfigs_s ** | devices | ||
) |
get all devices matching to a device class and type
Function oyDevicesGet
// "list" all monitors oyConfigs_s * monitors = 0; int error = oyDevicesGet( 0, "monitor", 0, &monitors ); // see how many are included int n = oyConfigs_Count( monitors ); // release them oyConfigs_Release( &monitors );
For obtaining expensive "properties" informations at once, add the according option.
// get all monitors the expensive way oyConfigs_s * monitors = 0; oyOptions_s * options = oyOptions_New( 0 ); int error = 0; error = oyOptions_SetFromText( &options, "//" OY_TYPE_STD "/config/command", "properties", OY_CREATE_NEW ); error = oyDevicesGet( 0, "monitor", 0, &monitors ); oyOptions_Release( &options ); // see how many are included int n = oyConfigs_Count( monitors ); // release them oyConfigs_Release( &monitors );
[in] | device_type | the device type oyFILTER_REG_TYPE, defaults to OY_TYPE_STD (optional) |
[in] | device_class | the device class, e.g. "monitor", oyFILTER_REG_APPLICATION |
[in] | options | options for the device |
[out] | devices | the found devices |
1.1 add "list" call to module arguments
1.2 ask each module
References oyConfigs_s::oyConfigs_FromDeviceClass(), and oyOptions_s::oyOptions_New().
OYAPI int OYEXPORT oyDeviceToJSON | ( | oyConfig_s * | device, |
oyOptions_s * | options, | ||
char ** | json_text, | ||
oyAlloc_f | allocateFunc | ||
) |
get JSON format device calibration text from a device
Function oyDeviceToJSON
[in] | config | the device |
[in] | options | "source" value is used for oyConfig_GetOptions() |
[out] | json_text | the device calibration |
[in] | allocateFunc | user allocator |
References oyConfDomain_s::oyConfDomain_FromReg(), oyConfDomain_s::oyConfDomain_GetText(), oyConfDomain_s::oyConfDomain_Release(), oyConfig_s::oyConfig_Count(), oyConfig_s::oyConfig_FindString(), oyConfig_s::oyConfig_Get(), oyConfig_s::oyConfig_GetOptions(), oyFilterRegistrationToText(), oyNAME_NICK, oyOption_s::oyOption_GetRegistration(), oyOption_s::oyOption_GetValueText(), oyOption_s::oyOption_Release(), oyOptions_s::oyOptions_Count(), oyOptions_s::oyOptions_FindString(), and oyOptions_s::oyOptions_Get().
Referenced by oyDevicesFromTaxiDB().
int oyDeviceUnset | ( | oyConfig_s * | device | ) |
unset the device profile
Function oyDeviceUnset The function solely calls unset in the module, e.g. unset graphic card luts and server stored profile. So pretty all device/server side informatin should go away.
device | the device |
2.1 set a general request
2.2 send the query to a module
References OY_TYPE_STD, oyConfig_s::oyConfig_FindString(), oyConfigs_s::oyConfigs_FromDomain(), oyDeviceBackendCall(), oyDeviceProfileFromDB(), oyOBJECT_CONFIG_S, oyOptions_s::oyOptions_Release(), and oyOptions_s::oyOptions_SetFromText().