コード例 #1
0
/*
 * no attach function
 */
static void
null_attach (void)
{
    SANE_Status status;

    status = sanei_configure_attach (CONFIG_PATH
                                     "/data/umax_pp.conf", NULL, NULL);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
}
コード例 #2
0
/*
 * string option
 */
static void
string_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Char modelname[128];
    SANE_Char vendor[128];
    SANE_Option_Descriptor *options[2];
    void *values[2];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "modelname";
    options[i]->title = "model name";
    options[i]->desc = "user provided scanner's model name";
    options[i]->type = SANE_TYPE_STRING;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = 128;
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = modelname;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "vendor";
    options[i]->title = "vendor name";
    options[i]->desc = "user provided scanner's vendor name";
    options[i]->type = SANE_TYPE_STRING;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = 128;
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = vendor;
    i++;

    config.count = i;
    config.descriptors = options;
    config.values = values;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/string.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
    assert (strcmp (modelname, "my model") == 0);
    assert (strcmp (vendor, "my vendor") == 0);
}
コード例 #3
0
/*
 * non-existent config file
 */
static void
inexistent_config (void)
{
    SANE_Status status;
    SANEI_Config config;

    config.count = 0;
    config.descriptors = NULL;
    config.values = NULL;
    status = sanei_configure_attach (CONFIG_PATH
                                     "/data/inexistent.conf", &config, NULL);

    /* check results */
    assert (status != SANE_STATUS_GOOD);
}
コード例 #4
0
/*
 * boolean option
 */
static void
wrong_bool_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Option_Descriptor *options[2];
    void *values[2];
    SANE_Bool booltrue, boolfalse;
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "booltrue";
    options[i]->title = "boolean true";
    options[i]->type = SANE_TYPE_BOOL;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Bool);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = &booltrue;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "boolfalse";
    options[i]->title = "boolean false";
    options[i]->type = SANE_TYPE_BOOL;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Bool);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = &boolfalse;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/wrong-boolean.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_INVAL);
    assert (booltrue == SANE_TRUE);
}
コード例 #5
0
/*
 * empty config : backend has no configuration option
 */
static void
empty_config (void)
{
    SANE_Status status;
    SANEI_Config config;

    config.count = 0;
    config.descriptors = NULL;
    config.values = NULL;
    status =
        sanei_configure_attach (CONFIG_PATH "/data/empty.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
}
コード例 #6
0
/*
 * string option with string list constraint
 */
static void
wrong_string_list_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Char choice[128];
    SANE_Option_Descriptor *options[1];
    void *values[1];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "string-choice";
    options[i]->title = "string choice";
    options[i]->desc = "one string among a fixed list";
    options[i]->type = SANE_TYPE_STRING;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = 128;
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_STRING_LIST;
    options[i]->constraint.string_list = string_list;
    values[i] = choice;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    choice[0] = 0;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH
                                "/data/wrong-string-list.conf", &config,
                                check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_INVAL);
    assert (strcmp (choice, "") == 0);
}
コード例 #7
0
/*
 * word array
 */
static void
word_array_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Word numbers[7];
    SANE_Option_Descriptor *options[1];
    void *values[1];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "numbers";
    options[i]->title = "some numbers";
    options[i]->desc = "an array of numbers";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word) * 7;
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &model_range;
    values[i] = numbers;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/word-array.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
    for (i = 0; i < 7; i++)
    {
        assert (numbers[i] == 1000 + 100 * i);
    }
}
コード例 #8
0
ファイル: xerox_mfp.c プロジェクト: DspaceSPI/SPIScan
SANE_Status
sane_get_devices (const SANE_Device *** device_list, SANE_Bool local)
{
  SANEI_Config config;
  struct device *dev;
  int dev_count;
  int i;

  DBG (3, "%s: %p, %d\n", __FUNCTION__, (const void *)device_list, local);

  if (devlist) {
    if (device_list)
      *device_list = devlist;
    return SANE_STATUS_GOOD;
  }

  free_devices ();

  config.count = 0;
  config.descriptors = NULL;
  config.values = NULL;
  sanei_configure_attach (XEROX_CONFIG_FILE, &config, list_conf_devices);

  for (dev_count = 0, dev = devices_head; dev; dev = dev->next)
    dev_count++;

  devlist = malloc ((dev_count + 1) * sizeof (*devlist));
  if (!devlist)
    {
      DBG (1, "%s: malloc: no memory\n", __FUNCTION__);
      return SANE_STATUS_NO_MEM;
    }

  for (i = 0, dev = devices_head; dev; dev = dev->next)
    devlist[i++] = &dev->sane;
  devlist[i++] = NULL;

  if (device_list)
    *device_list = devlist;
  return SANE_STATUS_GOOD;
}
コード例 #9
0
static void
snapscan (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Char firmware[128];
    SANE_Option_Descriptor *options[1];
    void *values[1];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "firmware";
    options[i]->title = "scanner's firmware path";
    options[i]->desc = "user provided scanner's full path";
    options[i]->type = SANE_TYPE_STRING;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (firmware);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = firmware;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/snapscan.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
    assert (strcmp (firmware, "/usr/share/sane/snapscan/your-firmwarefile.bin")
            == 0);
    /* TODO must test attach() done */
}
コード例 #10
0
/*
 * int option out of range
 */
static void
wrong_range_int_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Word modelnumber = -1;
    SANE_Option_Descriptor *options[1];
    void *values[1];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "modelnumber";
    options[i]->title = "model number";
    options[i]->desc = "user provided scanner's model number";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &model_range;
    values[i] = &modelnumber;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/wrong-range.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_INVAL);
    assert (modelnumber == -1);
}
コード例 #11
0
/*
 * fixed option with value out of range
 */
static void
wrong_fixed_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Word height;
    SANE_Option_Descriptor *options[1];
    void *values[1];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "height";
    options[i]->title = "height";
    options[i]->type = SANE_TYPE_FIXED;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &height_range;
    values[i] = &height;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/wrong-fixed.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_INVAL);
}
コード例 #12
0
/*
 * fixed option
 */
static void
fixed_option (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Word width, height, fixedarray[7];
    SANE_Option_Descriptor *options[3];
    void *values[3];
    int i;

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "width";
    options[i]->title = "width";
    options[i]->type = SANE_TYPE_FIXED;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = &width;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "height";
    options[i]->title = "height";
    options[i]->type = SANE_TYPE_FIXED;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_NONE;
    values[i] = &height;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "array-of-fixed";
    options[i]->title = "array of fixed";
    options[i]->type = SANE_TYPE_FIXED;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (fixedarray);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &height_range;
    values[i] = fixedarray;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/fixed.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
    assert (width == SANE_FIX (21.0));
    assert (height == SANE_FIX (29.7));
    for (i = 0; i < 7; i++)
    {
        assert (fixedarray[i] == SANE_FIX (2.0 + 0.1 * ((float) i)));
    }
}
コード例 #13
0
/*
 * real umax_pp confiugration file parsing
 */
static void
umax_pp (void)
{
    SANE_Status status;
    SANEI_Config config;
    SANE_Option_Descriptor *options[9];
    void *values[9];
    int i = 0;
    /* placeholders for options */
    SANE_Word buffersize = -1;
    SANE_Word redgain = -1;
    SANE_Word greengain = -1;
    SANE_Word bluegain = -1;
    SANE_Word redoffset = -1;
    SANE_Word greenoffset = -1;
    SANE_Word blueoffset = -1;
    SANE_Char model[128];

    i = 0;
    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "buffer";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &buffer_range;
    values[i] = &buffersize;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "red-gain";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &redgain;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "green-gain";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &greengain;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "blue-gain";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &bluegain;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "red-offset";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &redoffset;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "green-offset";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &greenoffset;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "blue-offset";
    options[i]->type = SANE_TYPE_INT;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = sizeof (SANE_Word);
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_RANGE;
    options[i]->constraint.range = &value16_range;
    values[i] = &blueoffset;
    i++;

    options[i] =
        (SANE_Option_Descriptor *) malloc (sizeof (SANE_Option_Descriptor));
    options[i]->name = "astra";
    options[i]->type = SANE_TYPE_STRING;
    options[i]->unit = SANE_UNIT_NONE;
    options[i]->size = 128;
    options[i]->cap = SANE_CAP_SOFT_SELECT;
    options[i]->constraint_type = SANE_CONSTRAINT_STRING_LIST;
    options[i]->constraint.string_list = astra_models;
    values[i] = &model;
    i++;

    config.descriptors = options;
    config.values = values;
    config.count = i;

    model[0] = 0;

    /* configure and attach */
    status =
        sanei_configure_attach (CONFIG_PATH "/data/umax_pp.conf",
                                &config, check_config_attach);

    /* check results */
    assert (status == SANE_STATUS_GOOD);
    assert (buffersize == 1048576);
    assert (redgain == 1);
    assert (greengain == 2);
    assert (bluegain == 3);
    assert (redoffset == 4);
    assert (greenoffset == 5);
    assert (blueoffset == 6);
    assert (strcmp (model, "1600") == 0);
    assert (strcmp (lastdevname, "port safe-auto") == 0);

    /* free memory */
    while (i > 0)
    {
        i--;
        free (options[i]);
    }
}