XDF_SET_CONF(3)

NAME
xdf_set_conf, xdf_get_conf - set or get the configuration of xDF file

SYNOPSIS

#include <xdfio.h>

int xdf_set_conf(struct xdf* xdf, enum xdffield field, ...);
int xdf_get_conf(const struct xdf* xdf, enum xdffield field, ...);

DESCRIPTION

xdf_set_conf() sets the configuration (usually one of the field file header) of a xDF file referenced by xdf according to the variable list of arguments. This list is composed of successive couple grouping one variable of type enum xdffield defining the feature to be set and a value whose type depends on the previous field type. The list must finish by XDF_NOF.

xdf_get_conf() gets the configuration of the channel referenced by xdf according to the variable list of argument. The variable list is the same list terminated by XDF_NOF as for xdf_set_conf() excepting that the second part of the couple is not that value but a pointer to the value.

Both functions process the argument list from left to right. This means that if a particular field request provokes an error, none of the field requests on its right will be processed. The order of processing is also important for field requests that influences the value of other fields (like XDF_F_REC_NSAMPLE or XDF_F_SAMPLING_FREQ).

The functions accepts two types of field value. The first one are file configuration field (XDF_F_*) which set different aspects of the general configuration of the file. The second type are the channel configuration fields (XDF_CF_*). When used in xdf_set_conf(), those fields set the default values that will be used for the creation of the next channel (see xdf_add_channel(3)). The list of channel configuration fields and their meaning are specified in the documentation of xdf_set_chconf(3).

If the file is opened for writing, each field is initialized to sensible or non-informative values in case of optional field or incorrect values in the case of "must be set" field (only XDF_F_REC_NSAMPLE or XDF_F_SAMPLING_FREQ). The default value are specified in squared bracked in the list.

Here is the list of file configuration field value. The type of value expected is provided in the parenthesis (the expected type of the value for xdf_set_conf(), or a pointer to this type for xdf_get_conf()). If a list of data formats is specified in curl brackets, it means that the field is supported only in those formats (no list means that all formats support the field):

XDF_F_REC_DURATION (double) [1]
    Specify the duration of one record. The value should be positive.

XDF_F_REC_NSAMPLE (int) [0]
    Specify the number of time points contained in each record. The value should be positive. Setting the number of sample per record modifies the sampling frequency (field XDF_SAMPLING_FREQ).

XDF_F_SAMPLING_FREQ (int) [0]
    Get or set the sampling frequency of the recording. Setting the sampling frequency modifies the number of sample per record (field XDF_F_REC_NSAMPLE).

XDF_F_NCHANNEL (int)  (get function only)
    Get the number of channel in the file.

XDF_F_NEVTTYPE (int)  (get function only)
    Get the number of different event types.

XDF_F_NEVENT (int)  (get function only)
    Get the number of events.

XDF_F_FILEFMT (int)  (get function only)
    Get the file format type (one of the value defined by the enumeration xdffiletype other than XDF_ANY)

XDF_F_RECTIME (double) [current time] {EDF BDF GDF}
    Date and time of recording. It is expressed as number of seconds elapsed since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). This number is the convertion to double of the value returned by the function time(3) of the standard C library. On file creation, this field is initialized to the current time.

XDF_F_SUBJ_DESC (const char*) [""] {EDF BDF GDF}
    Specify the string describing the subject.

XDF_F_SESS_DESC (const char*) [""] {EDF BDF GDF}
    Specify the string describing the session of recording.

XDF_F_ADDICTION (unsigned int) [0] {GDF}

XDF_F_BIRTHDAY (double) [0] {GDF}
    Birthday of the patient using the same format as specified for field XDF_F_RECTIME.

XDF_F_HEIGHT (double) [0] {GDF}
    Height of the subject in centimeters.

XDF_F_WEIGHT (double) [0] {GDF}
    Weight of the subject in kilograms.

XDF_F_GENDER (unsigned int) [0] {GDF}
    Sex of the subject. Use 1 for male, 2 for female and 0 if unknown.

XDF_F_HANDNESS (unsigned int) [0] {GDF}
    Handness of the subject. Use 0 if unknown, 1 if right, 2 if left and 3 if ambidextrious.

XDF_F_VISUAL_IMP (unsigned int) [0] {GDF}
    Visual impairment. Use 0 if unknown, 1 if no impairment, 2 if impaired and 3 if impaired but corrected.

XDF_F_HEART_IMP (unsigned int) [0] {GDF}
    Heart impairment. Use 0 if unknown, 1 if no impairment, 2 if impaired and 3 if the subject wear a pacemaker.

XDF_F_LOCATION (double[3]) [0,0,0] {GDF}
    Location of the recording. The first 2 component specify the latitude and longitude in degrees, the third specifies the altitude in meters.

XDF_F_ICD_CLASS (char[6]) [0x000000000000] {GDF}
    Patient classification according to the International Statistical Classification of Diseases and Related Health Problems (ICD).

XDF_F_HEADSIZE (double[3]) [0,0,0] {GDF}
    Size of the subject's head (circumference, distance nasion – inion, left to right mastoid) expressed in millimeters.

XDF_F_REF_POS (double[3]) [0,0,0] {GDF}
    X, Y, Z coordinates of the reference electrode.

XDF_F_GND_POS (double[3]) [0,0,0] {GDF}
    X, Y, Z coordinates of the ground electrode.

RETURN VALUE

The two functions returns 0 in case of success. Otherwise -1 is returned and errno is set appropriately.

ERROR

EINVAL
    xdf is NULL or field is not a proper value of the enumeration xdffield accepted by the function (for example XDF_F_NCHANNEL and xdf_set_conf() )

EPERM
    The request submitted to xdf_set_conf() is not allowed for this type of xDF file or is not supported with the mode XDF_READ.

EXAMPLES

Example of usage of xdf_set_conf() and xdf_get_conf():

    /* Assume xdfr and xdfw reference 2 XDF files opened respectively
     * for reading and for writing */
    const char *subjstr, *sessstr;

    xdf_get_conf(xdfr, XDF_F_SUBJ_DESC, &subjstr,
                       XDF_F_SESS_DESC, &sessstr,
                       XDF_NOF);

    printf("subject: %s\nrecording: %s\n", subjstr, sessstr);

    xdf_set_conf(xdfw, XDF_F_SUBJ_DESC, subjstr,
                       XDF_F_SESS_DESC, sessstr,
                       XDF_NOF);

SEE ALSO
xdf_copy_conf(3), xdf_set_chconf(3), xdf_add_channel(3)