PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/06190_Dialog_Scan_Image_Sane.t (06190_Dialog_Scan_Image_Sane.t:57304): dbind-WARNING **: 19:11:43.478: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files 2020/01/22 19:11:44 Set logger in Gscan2pdf::Dialog::Scan::Image_Sane 2020/01/22 19:11:44 Set logger in Gscan2pdf::Dialog::Scan 2020/01/22 19:11:44 Started setting device_list from undef to $VAR1 = [ { 'name' => 'test:0' }, { 'name' => 'test:1' } ]; 2020/01/22 19:11:44 Started setting device from to test:0 2020/01/22 19:11:44 Started setting cursor from default to wait 2020/01/22 19:11:44 Finished setting cursor from default to wait 2020/01/22 19:11:44 opened device 'test:0' 2020/01/22 19:11:44 Finished setting device from to test:0 2020/01/22 19:11:44 Finished setting device_list from undef to $VAR1 = [ { 'name' => 'test:0' }, { 'name' => 'test:1' } ]; 2020/01/22 19:11:44 Backend reports 52 options 2020/01/22 19:11:44 Sane->get_option_descriptor returned: $VAR1 = bless( { 'array' => [ { 'index' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 1, 'max_values' => 0, 'name' => '', 'title' => 'Scan Mode', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => [ 'Gray', 'Color' ], 'constraint_type' => 3, 'desc' => 'Selects the scan mode (e.g., lineart, monochrome, or color).', 'index' => 2, 'max_values' => 1, 'name' => 'mode', 'title' => 'Scan mode', 'type' => 3, 'unit' => 0, 'val' => 'Gray' }, { 'cap' => 5, 'constraint' => [ 1, 8, 16 ], 'constraint_type' => 2, 'desc' => 'Number of bits per sample, typical values are 1 for "line-art" and 8 for multibit scans.', 'index' => 3, 'max_values' => 1, 'name' => 'depth', 'title' => 'Bit depth', 'type' => 1, 'unit' => 0, 'val' => 8 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Simulate a hand-scanner. Hand-scanners do not know the image height a priori. Instead, they return a height of -1. Setting this option allows one to test whether a frontend can handle this correctly. This option also enables a fixed width of 11 cm.', 'index' => 4, 'max_values' => 1, 'name' => 'hand-scanner', 'title' => 'Hand-scanner simulation', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => 'Simulate a three-pass scanner. In color mode, three frames are transmitted.', 'index' => 5, 'max_values' => 1, 'name' => 'three-pass', 'title' => 'Three-pass simulation', 'type' => 0, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'RGB', 'RBG', 'GBR', 'GRB', 'BRG', 'BGR' ], 'constraint_type' => 3, 'desc' => 'Set the order of frames in three-pass color mode.', 'index' => 6, 'max_values' => 1, 'name' => 'three-pass-order', 'title' => 'Set the order of frames', 'type' => 3, 'unit' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 1200, 'min' => 1, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Sets the resolution of the scanned image.', 'index' => 7, 'max_values' => 1, 'name' => 'resolution', 'title' => 'Scan resolution', 'type' => 2, 'unit' => 4, 'val' => 50 }, { 'cap' => 5, 'constraint' => [ 'Flatbed', 'Automatic Document Feeder' ], 'constraint_type' => 3, 'desc' => 'If Automatic Document Feeder is selected, the feeder will be \'empty\' after 10 scans.', 'index' => 8, 'max_values' => 1, 'name' => 'source', 'title' => 'Scan source', 'type' => 3, 'unit' => 0, 'val' => 'Flatbed' }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 9, 'max_values' => 0, 'name' => '', 'title' => 'Special Options', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => [ 'Solid black', 'Solid white', 'Color pattern', 'Grid' ], 'constraint_type' => 3, 'desc' => 'Select the kind of test picture. Available options: Solid black: fills the whole scan with black. Solid white: fills the whole scan with white. Color pattern: draws various color test patterns depending on the mode. Grid: draws a black/white grid with a width and height of 10 mm per square.', 'index' => 10, 'max_values' => 1, 'name' => 'test-picture', 'title' => 'Select the test picture', 'type' => 3, 'unit' => 0, 'val' => 'Solid black' }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => 'Exchange upper and lower byte of image data in 16 bit modes. This option can be used to test the 16 bit modes of frontends, e.g. if the frontend uses the correct endianness.', 'index' => 11, 'max_values' => 1, 'name' => 'invert-endianess', 'title' => 'Invert endianness', 'type' => 0, 'unit' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Limit the amount of data transferred with each call to sane_read().', 'index' => 12, 'max_values' => 1, 'name' => 'read-limit', 'title' => 'Read limit', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint' => { 'max' => 65536, 'min' => 1, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'The (maximum) amount of data transferred with each call to sane_read().', 'index' => 13, 'max_values' => 1, 'name' => 'read-limit-size', 'title' => 'Size of read-limit', 'type' => 1, 'unit' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Delay the transfer of data to the pipe.', 'index' => 14, 'max_values' => 1, 'name' => 'read-delay', 'title' => 'Read delay', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint' => { 'max' => 200000, 'min' => 1000, 'quant' => 1000 }, 'constraint_type' => 1, 'desc' => 'How long to wait after transferring each buffer of data through the pipe.', 'index' => 15, 'max_values' => 1, 'name' => 'read-delay-duration', 'title' => 'Duration of read-delay', 'type' => 1, 'unit' => 6 }, { 'cap' => 5, 'constraint' => [ 'Default', 'SANE_STATUS_UNSUPPORTED', 'SANE_STATUS_CANCELLED', 'SANE_STATUS_DEVICE_BUSY', 'SANE_STATUS_INVAL', 'SANE_STATUS_EOF', 'SANE_STATUS_JAMMED', 'SANE_STATUS_NO_DOCS', 'SANE_STATUS_COVER_OPEN', 'SANE_STATUS_IO_ERROR', 'SANE_STATUS_NO_MEM', 'SANE_STATUS_ACCESS_DENIED' ], 'constraint_type' => 3, 'desc' => 'Select the return-value of sane_read(). "Default" is the normal handling for scanning. All other status codes are for testing how the frontend handles them.', 'index' => 16, 'max_values' => 1, 'name' => 'read-return-value', 'title' => 'Return-value of sane_read', 'type' => 3, 'unit' => 0, 'val' => 'Default' }, { 'cap' => 5, 'constraint' => { 'max' => 128, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'The number of pixels that are wasted at the end of each line.', 'index' => 17, 'max_values' => 1, 'name' => 'ppl-loss', 'title' => 'Loss of pixels per line', 'type' => 1, 'unit' => 1, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Return fuzzy lines and bytes per line when sane_parameters() is called before sane_start().', 'index' => 18, 'max_values' => 1, 'name' => 'fuzzy-parameters', 'title' => 'Fuzzy parameters', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Use non-blocking IO for sane_read() if supported by the frontend.', 'index' => 19, 'max_values' => 1, 'name' => 'non-blocking', 'title' => 'Use non-blocking IO', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Offer a select filedescriptor for detecting if sane_read() will return data.', 'index' => 20, 'max_values' => 1, 'name' => 'select-fd', 'title' => 'Offer select file descriptor', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Enable various test options. This is for testing the ability of frontends to view and modify all the different SANE option types.', 'index' => 21, 'max_values' => 1, 'name' => 'enable-test-options', 'title' => 'Enable test options', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Print a list of all options.', 'index' => 22, 'max_values' => 0, 'name' => 'print-options', 'title' => 'Print options', 'type' => 4, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 23, 'max_values' => 0, 'name' => '', 'title' => 'Geometry', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Top-left x position of scan area.', 'index' => 24, 'max_values' => 1, 'name' => 'tl-x', 'title' => 'Top-left x', 'type' => 2, 'unit' => 3, 'val' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Top-left y position of scan area.', 'index' => 25, 'max_values' => 1, 'name' => 'tl-y', 'title' => 'Top-left y', 'type' => 2, 'unit' => 3, 'val' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Bottom-right x position of scan area.', 'index' => 26, 'max_values' => 1, 'name' => 'br-x', 'title' => 'Bottom-right x', 'type' => 2, 'unit' => 3, 'val' => 80 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Bottom-right y position of scan area.', 'index' => 27, 'max_values' => 1, 'name' => 'br-y', 'title' => 'Bottom-right y', 'type' => 2, 'unit' => 3, 'val' => 100 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 28, 'max_values' => 0, 'name' => '', 'title' => 'Bool test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/6) Bool test option that has soft select and soft detect (and advanced) capabilities. That\'s just a normal bool option.', 'index' => 29, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect', 'title' => '(1/6) Bool soft select soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 102, 'constraint_type' => 0, 'desc' => '(2/6) Bool test option that has hard select and soft detect (and advanced) capabilities. That means the option can\'t be set by the frontend but by the user (e.g. by pressing a button at the device).', 'index' => 30, 'max_values' => 1, 'name' => 'bool-hard-select-soft-detect', 'title' => '(2/6) Bool hard select soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 98, 'constraint_type' => 0, 'desc' => '(3/6) Bool test option that has hard select (and advanced) capabilities. That means the option can\'t be set by the frontend but by the user (e.g. by pressing a button at the device) and can\'t be read by the frontend.', 'index' => 31, 'max_values' => 1, 'name' => 'bool-hard-select', 'title' => '(3/6) Bool hard select', 'type' => 0, 'unit' => 0 }, { 'cap' => 100, 'constraint_type' => 0, 'desc' => '(4/6) Bool test option that has soft detect (and advanced) capabilities. That means the option is read-only.', 'index' => 32, 'max_values' => 1, 'name' => 'bool-soft-detect', 'title' => '(4/6) Bool soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 109, 'constraint_type' => 0, 'desc' => '(5/6) Bool test option that has soft select, soft detect, and emulated (and advanced) capabilities.', 'index' => 33, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect-emulated', 'title' => '(5/6) Bool soft select soft detect emulated', 'type' => 0, 'unit' => 0 }, { 'cap' => 117, 'constraint_type' => 0, 'desc' => '(6/6) Bool test option that has soft select, soft detect, and automatic (and advanced) capabilities. This option can be automatically set by the backend.', 'index' => 34, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect-auto', 'title' => '(6/6) Bool soft select soft detect auto', 'type' => 0, 'unit' => 0 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 35, 'max_values' => 0, 'name' => '', 'title' => 'Int test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/6) Int test option with no unit and no constraint set.', 'index' => 36, 'max_values' => 1, 'name' => 'int', 'title' => '(1/6) Int', 'type' => 1, 'unit' => 0 }, { 'cap' => 101, 'constraint' => { 'max' => 192, 'min' => 4, 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(2/6) Int test option with unit pixel and constraint range set. Minimum is 4, maximum 192, and quant is 2.', 'index' => 37, 'max_values' => 1, 'name' => 'int-constraint-range', 'title' => '(2/6) Int constraint range', 'type' => 1, 'unit' => 1 }, { 'cap' => 101, 'constraint' => [ -42, -8, 0, 17, 42, 256, 65536, 16777216, 1073741824 ], 'constraint_type' => 2, 'desc' => '(3/6) Int test option with unit bits and constraint word list set.', 'index' => 38, 'max_values' => 1, 'name' => 'int-constraint-word-list', 'title' => '(3/6) Int constraint word list', 'type' => 1, 'unit' => 2 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(4/6) Int test option with unit mm and using an array without constraints.', 'index' => 39, 'max_values' => 6, 'name' => 'int-constraint-array', 'title' => '(4/6) Int array', 'type' => 1, 'unit' => 3 }, { 'cap' => 101, 'constraint' => { 'max' => 192, 'min' => 4, 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(5/6) Int test option with unit dpi and using an array with a range constraint. Minimum is 4, maximum 192, and quant is 2.', 'index' => 40, 'max_values' => 6, 'name' => 'int-constraint-array-constraint-range', 'title' => '(5/6) Int array constraint range', 'type' => 1, 'unit' => 4 }, { 'cap' => 101, 'constraint' => [ -42, -8, 0, 17, 42, 256, 65536, 16777216, 1073741824 ], 'constraint_type' => 2, 'desc' => '(6/6) Int test option with unit percent and using an array with a word list constraint.', 'index' => 41, 'max_values' => 6, 'name' => 'int-constraint-array-constraint-word-list', 'title' => '(6/6) Int array constraint word list', 'type' => 1, 'unit' => 5 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 42, 'max_values' => 0, 'name' => '', 'title' => 'Fixed test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/3) Fixed test option with no unit and no constraint set.', 'index' => 43, 'max_values' => 1, 'name' => 'fixed', 'title' => '(1/3) Fixed', 'type' => 2, 'unit' => 0 }, { 'cap' => 101, 'constraint' => { 'max' => '32767.9998931885', 'min' => '-42.1699981689453', 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(2/3) Fixed test option with unit microsecond and constraint range set. Minimum is -42.17, maximum 32767.9999, and quant is 2.0.', 'index' => 44, 'max_values' => 1, 'name' => 'fixed-constraint-range', 'title' => '(2/3) Fixed constraint range', 'type' => 2, 'unit' => 6 }, { 'cap' => 101, 'constraint' => [ '-32.6999969482422', '12.0999908447266', 42, '129.5' ], 'constraint_type' => 2, 'desc' => '(3/3) Fixed test option with no unit and constraint word list set.', 'index' => 45, 'max_values' => 1, 'name' => 'fixed-constraint-word-list', 'title' => '(3/3) Fixed constraint word list', 'type' => 2, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 46, 'max_values' => 0, 'name' => '', 'title' => 'String test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => '(1/3) String test option without constraint.', 'index' => 47, 'max_values' => 1, 'name' => 'string', 'title' => '(1/3) String', 'type' => 3, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'First entry', 'Second entry', 'This is the very long third entry. Maybe the frontend has an idea how to display it' ], 'constraint_type' => 3, 'desc' => '(2/3) String test option with string list constraint.', 'index' => 48, 'max_values' => 1, 'name' => 'string-constraint-string-list', 'title' => '(2/3) String constraint string list', 'type' => 3, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'First entry', 'Second entry', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46' ], 'constraint_type' => 3, 'desc' => '(3/3) String test option with string list constraint. Contains some more entries...', 'index' => 49, 'max_values' => 1, 'name' => 'string-constraint-long-string-list', 'title' => '(3/3) String constraint long string list', 'type' => 3, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 50, 'max_values' => 0, 'name' => '', 'title' => 'Button test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => '(1/1) Button test option. Prints some text...', 'index' => 51, 'max_values' => 0, 'name' => 'button', 'title' => '(1/1) Button', 'type' => 4, 'unit' => 0 } ], 'geometry' => { 'l' => 0, 't' => 0, 'x' => 200, 'y' => 200 }, 'hash' => { 'bool-hard-select' => $VAR1->{'array'}[31], 'bool-hard-select-soft-detect' => $VAR1->{'array'}[30], 'bool-soft-detect' => $VAR1->{'array'}[32], 'bool-soft-select-soft-detect' => $VAR1->{'array'}[29], 'bool-soft-select-soft-detect-auto' => $VAR1->{'array'}[34], 'bool-soft-select-soft-detect-emulated' => $VAR1->{'array'}[33], 'br-x' => $VAR1->{'array'}[26], 'br-y' => $VAR1->{'array'}[27], 'button' => $VAR1->{'array'}[51], 'depth' => $VAR1->{'array'}[3], 'enable-test-options' => $VAR1->{'array'}[21], 'fixed' => $VAR1->{'array'}[43], 'fixed-constraint-range' => $VAR1->{'array'}[44], 'fixed-constraint-word-list' => $VAR1->{'array'}[45], 'fuzzy-parameters' => $VAR1->{'array'}[18], 'hand-scanner' => $VAR1->{'array'}[4], 'int' => $VAR1->{'array'}[36], 'int-constraint-array' => $VAR1->{'array'}[39], 'int-constraint-array-constraint-range' => $VAR1->{'array'}[40], 'int-constraint-array-constraint-word-list' => $VAR1->{'array'}[41], 'int-constraint-range' => $VAR1->{'array'}[37], 'int-constraint-word-list' => $VAR1->{'array'}[38], 'invert-endianess' => $VAR1->{'array'}[11], 'mode' => $VAR1->{'array'}[2], 'non-blocking' => $VAR1->{'array'}[19], 'ppl-loss' => $VAR1->{'array'}[17], 'print-options' => $VAR1->{'array'}[22], 'read-delay' => $VAR1->{'array'}[14], 'read-delay-duration' => $VAR1->{'array'}[15], 'read-limit' => $VAR1->{'array'}[12], 'read-limit-size' => $VAR1->{'array'}[13], 'read-return-value' => $VAR1->{'array'}[16], 'resolution' => $VAR1->{'array'}[7], 'select-fd' => $VAR1->{'array'}[20], 'source' => $VAR1->{'array'}[8], 'string' => $VAR1->{'array'}[47], 'string-constraint-long-string-list' => $VAR1->{'array'}[49], 'string-constraint-string-list' => $VAR1->{'array'}[48], 'test-picture' => $VAR1->{'array'}[10], 'three-pass' => $VAR1->{'array'}[5], 'three-pass-order' => $VAR1->{'array'}[6], 'tl-x' => $VAR1->{'array'}[24], 'tl-y' => $VAR1->{'array'}[25] }, 'source' => $VAR1->{'array'}[8] }, 'Gscan2pdf::Scanner::Options' ); 2020/01/22 19:11:44 Started setting available_scan_options from undef to $VAR1 = bless( { 'array' => [ { 'index' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 1, 'max_values' => 0, 'name' => '', 'title' => 'Scan Mode', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => [ 'Gray', 'Color' ], 'constraint_type' => 3, 'desc' => 'Selects the scan mode (e.g., lineart, monochrome, or color).', 'index' => 2, 'max_values' => 1, 'name' => 'mode', 'title' => 'Scan mode', 'type' => 3, 'unit' => 0, 'val' => 'Gray' }, { 'cap' => 5, 'constraint' => [ 1, 8, 16 ], 'constraint_type' => 2, 'desc' => 'Number of bits per sample, typical values are 1 for "line-art" and 8 for multibit scans.', 'index' => 3, 'max_values' => 1, 'name' => 'depth', 'title' => 'Bit depth', 'type' => 1, 'unit' => 0, 'val' => 8 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Simulate a hand-scanner. Hand-scanners do not know the image height a priori. Instead, they return a height of -1. Setting this option allows one to test whether a frontend can handle this correctly. This option also enables a fixed width of 11 cm.', 'index' => 4, 'max_values' => 1, 'name' => 'hand-scanner', 'title' => 'Hand-scanner simulation', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => 'Simulate a three-pass scanner. In color mode, three frames are transmitted.', 'index' => 5, 'max_values' => 1, 'name' => 'three-pass', 'title' => 'Three-pass simulation', 'type' => 0, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'RGB', 'RBG', 'GBR', 'GRB', 'BRG', 'BGR' ], 'constraint_type' => 3, 'desc' => 'Set the order of frames in three-pass color mode.', 'index' => 6, 'max_values' => 1, 'name' => 'three-pass-order', 'title' => 'Set the order of frames', 'type' => 3, 'unit' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 1200, 'min' => 1, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Sets the resolution of the scanned image.', 'index' => 7, 'max_values' => 1, 'name' => 'resolution', 'title' => 'Scan resolution', 'type' => 2, 'unit' => 4, 'val' => 50 }, { 'cap' => 5, 'constraint' => [ 'Flatbed', 'Automatic Document Feeder' ], 'constraint_type' => 3, 'desc' => 'If Automatic Document Feeder is selected, the feeder will be \'empty\' after 10 scans.', 'index' => 8, 'max_values' => 1, 'name' => 'source', 'title' => 'Scan source', 'type' => 3, 'unit' => 0, 'val' => 'Flatbed' }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 9, 'max_values' => 0, 'name' => '', 'title' => 'Special Options', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => [ 'Solid black', 'Solid white', 'Color pattern', 'Grid' ], 'constraint_type' => 3, 'desc' => 'Select the kind of test picture. Available options: Solid black: fills the whole scan with black. Solid white: fills the whole scan with white. Color pattern: draws various color test patterns depending on the mode. Grid: draws a black/white grid with a width and height of 10 mm per square.', 'index' => 10, 'max_values' => 1, 'name' => 'test-picture', 'title' => 'Select the test picture', 'type' => 3, 'unit' => 0, 'val' => 'Solid black' }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => 'Exchange upper and lower byte of image data in 16 bit modes. This option can be used to test the 16 bit modes of frontends, e.g. if the frontend uses the correct endianness.', 'index' => 11, 'max_values' => 1, 'name' => 'invert-endianess', 'title' => 'Invert endianness', 'type' => 0, 'unit' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Limit the amount of data transferred with each call to sane_read().', 'index' => 12, 'max_values' => 1, 'name' => 'read-limit', 'title' => 'Read limit', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint' => { 'max' => 65536, 'min' => 1, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'The (maximum) amount of data transferred with each call to sane_read().', 'index' => 13, 'max_values' => 1, 'name' => 'read-limit-size', 'title' => 'Size of read-limit', 'type' => 1, 'unit' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Delay the transfer of data to the pipe.', 'index' => 14, 'max_values' => 1, 'name' => 'read-delay', 'title' => 'Read delay', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 37, 'constraint' => { 'max' => 200000, 'min' => 1000, 'quant' => 1000 }, 'constraint_type' => 1, 'desc' => 'How long to wait after transferring each buffer of data through the pipe.', 'index' => 15, 'max_values' => 1, 'name' => 'read-delay-duration', 'title' => 'Duration of read-delay', 'type' => 1, 'unit' => 6 }, { 'cap' => 5, 'constraint' => [ 'Default', 'SANE_STATUS_UNSUPPORTED', 'SANE_STATUS_CANCELLED', 'SANE_STATUS_DEVICE_BUSY', 'SANE_STATUS_INVAL', 'SANE_STATUS_EOF', 'SANE_STATUS_JAMMED', 'SANE_STATUS_NO_DOCS', 'SANE_STATUS_COVER_OPEN', 'SANE_STATUS_IO_ERROR', 'SANE_STATUS_NO_MEM', 'SANE_STATUS_ACCESS_DENIED' ], 'constraint_type' => 3, 'desc' => 'Select the return-value of sane_read(). "Default" is the normal handling for scanning. All other status codes are for testing how the frontend handles them.', 'index' => 16, 'max_values' => 1, 'name' => 'read-return-value', 'title' => 'Return-value of sane_read', 'type' => 3, 'unit' => 0, 'val' => 'Default' }, { 'cap' => 5, 'constraint' => { 'max' => 128, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'The number of pixels that are wasted at the end of each line.', 'index' => 17, 'max_values' => 1, 'name' => 'ppl-loss', 'title' => 'Loss of pixels per line', 'type' => 1, 'unit' => 1, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Return fuzzy lines and bytes per line when sane_parameters() is called before sane_start().', 'index' => 18, 'max_values' => 1, 'name' => 'fuzzy-parameters', 'title' => 'Fuzzy parameters', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Use non-blocking IO for sane_read() if supported by the frontend.', 'index' => 19, 'max_values' => 1, 'name' => 'non-blocking', 'title' => 'Use non-blocking IO', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Offer a select filedescriptor for detecting if sane_read() will return data.', 'index' => 20, 'max_values' => 1, 'name' => 'select-fd', 'title' => 'Offer select file descriptor', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Enable various test options. This is for testing the ability of frontends to view and modify all the different SANE option types.', 'index' => 21, 'max_values' => 1, 'name' => 'enable-test-options', 'title' => 'Enable test options', 'type' => 0, 'unit' => 0, 'val' => 0 }, { 'cap' => 5, 'constraint_type' => 0, 'desc' => 'Print a list of all options.', 'index' => 22, 'max_values' => 0, 'name' => 'print-options', 'title' => 'Print options', 'type' => 4, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 23, 'max_values' => 0, 'name' => '', 'title' => 'Geometry', 'type' => 5, 'unit' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Top-left x position of scan area.', 'index' => 24, 'max_values' => 1, 'name' => 'tl-x', 'title' => 'Top-left x', 'type' => 2, 'unit' => 3, 'val' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Top-left y position of scan area.', 'index' => 25, 'max_values' => 1, 'name' => 'tl-y', 'title' => 'Top-left y', 'type' => 2, 'unit' => 3, 'val' => 0 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Bottom-right x position of scan area.', 'index' => 26, 'max_values' => 1, 'name' => 'br-x', 'title' => 'Bottom-right x', 'type' => 2, 'unit' => 3, 'val' => 80 }, { 'cap' => 5, 'constraint' => { 'max' => 200, 'min' => 0, 'quant' => 1 }, 'constraint_type' => 1, 'desc' => 'Bottom-right y position of scan area.', 'index' => 27, 'max_values' => 1, 'name' => 'br-y', 'title' => 'Bottom-right y', 'type' => 2, 'unit' => 3, 'val' => 100 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 28, 'max_values' => 0, 'name' => '', 'title' => 'Bool test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/6) Bool test option that has soft select and soft detect (and advanced) capabilities. That\'s just a normal bool option.', 'index' => 29, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect', 'title' => '(1/6) Bool soft select soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 102, 'constraint_type' => 0, 'desc' => '(2/6) Bool test option that has hard select and soft detect (and advanced) capabilities. That means the option can\'t be set by the frontend but by the user (e.g. by pressing a button at the device).', 'index' => 30, 'max_values' => 1, 'name' => 'bool-hard-select-soft-detect', 'title' => '(2/6) Bool hard select soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 98, 'constraint_type' => 0, 'desc' => '(3/6) Bool test option that has hard select (and advanced) capabilities. That means the option can\'t be set by the frontend but by the user (e.g. by pressing a button at the device) and can\'t be read by the frontend.', 'index' => 31, 'max_values' => 1, 'name' => 'bool-hard-select', 'title' => '(3/6) Bool hard select', 'type' => 0, 'unit' => 0 }, { 'cap' => 100, 'constraint_type' => 0, 'desc' => '(4/6) Bool test option that has soft detect (and advanced) capabilities. That means the option is read-only.', 'index' => 32, 'max_values' => 1, 'name' => 'bool-soft-detect', 'title' => '(4/6) Bool soft detect', 'type' => 0, 'unit' => 0 }, { 'cap' => 109, 'constraint_type' => 0, 'desc' => '(5/6) Bool test option that has soft select, soft detect, and emulated (and advanced) capabilities.', 'index' => 33, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect-emulated', 'title' => '(5/6) Bool soft select soft detect emulated', 'type' => 0, 'unit' => 0 }, { 'cap' => 117, 'constraint_type' => 0, 'desc' => '(6/6) Bool test option that has soft select, soft detect, and automatic (and advanced) capabilities. This option can be automatically set by the backend.', 'index' => 34, 'max_values' => 1, 'name' => 'bool-soft-select-soft-detect-auto', 'title' => '(6/6) Bool soft select soft detect auto', 'type' => 0, 'unit' => 0 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 35, 'max_values' => 0, 'name' => '', 'title' => 'Int test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/6) Int test option with no unit and no constraint set.', 'index' => 36, 'max_values' => 1, 'name' => 'int', 'title' => '(1/6) Int', 'type' => 1, 'unit' => 0 }, { 'cap' => 101, 'constraint' => { 'max' => 192, 'min' => 4, 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(2/6) Int test option with unit pixel and constraint range set. Minimum is 4, maximum 192, and quant is 2.', 'index' => 37, 'max_values' => 1, 'name' => 'int-constraint-range', 'title' => '(2/6) Int constraint range', 'type' => 1, 'unit' => 1 }, { 'cap' => 101, 'constraint' => [ -42, -8, 0, 17, 42, 256, 65536, 16777216, 1073741824 ], 'constraint_type' => 2, 'desc' => '(3/6) Int test option with unit bits and constraint word list set.', 'index' => 38, 'max_values' => 1, 'name' => 'int-constraint-word-list', 'title' => '(3/6) Int constraint word list', 'type' => 1, 'unit' => 2 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(4/6) Int test option with unit mm and using an array without constraints.', 'index' => 39, 'max_values' => 6, 'name' => 'int-constraint-array', 'title' => '(4/6) Int array', 'type' => 1, 'unit' => 3 }, { 'cap' => 101, 'constraint' => { 'max' => 192, 'min' => 4, 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(5/6) Int test option with unit dpi and using an array with a range constraint. Minimum is 4, maximum 192, and quant is 2.', 'index' => 40, 'max_values' => 6, 'name' => 'int-constraint-array-constraint-range', 'title' => '(5/6) Int array constraint range', 'type' => 1, 'unit' => 4 }, { 'cap' => 101, 'constraint' => [ -42, -8, 0, 17, 42, 256, 65536, 16777216, 1073741824 ], 'constraint_type' => 2, 'desc' => '(6/6) Int test option with unit percent and using an array with a word list constraint.', 'index' => 41, 'max_values' => 6, 'name' => 'int-constraint-array-constraint-word-list', 'title' => '(6/6) Int array constraint word list', 'type' => 1, 'unit' => 5 }, { 'cap' => 64, 'constraint_type' => 0, 'desc' => '', 'index' => 42, 'max_values' => 0, 'name' => '', 'title' => 'Fixed test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 101, 'constraint_type' => 0, 'desc' => '(1/3) Fixed test option with no unit and no constraint set.', 'index' => 43, 'max_values' => 1, 'name' => 'fixed', 'title' => '(1/3) Fixed', 'type' => 2, 'unit' => 0 }, { 'cap' => 101, 'constraint' => { 'max' => '32767.9998931885', 'min' => '-42.1699981689453', 'quant' => 2 }, 'constraint_type' => 1, 'desc' => '(2/3) Fixed test option with unit microsecond and constraint range set. Minimum is -42.17, maximum 32767.9999, and quant is 2.0.', 'index' => 44, 'max_values' => 1, 'name' => 'fixed-constraint-range', 'title' => '(2/3) Fixed constraint range', 'type' => 2, 'unit' => 6 }, { 'cap' => 101, 'constraint' => [ '-32.6999969482422', '12.0999908447266', 42, '129.5' ], 'constraint_type' => 2, 'desc' => '(3/3) Fixed test option with no unit and constraint word list set.', 'index' => 45, 'max_values' => 1, 'name' => 'fixed-constraint-word-list', 'title' => '(3/3) Fixed constraint word list', 'type' => 2, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 46, 'max_values' => 0, 'name' => '', 'title' => 'String test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => '(1/3) String test option without constraint.', 'index' => 47, 'max_values' => 1, 'name' => 'string', 'title' => '(1/3) String', 'type' => 3, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'First entry', 'Second entry', 'This is the very long third entry. Maybe the frontend has an idea how to display it' ], 'constraint_type' => 3, 'desc' => '(2/3) String test option with string list constraint.', 'index' => 48, 'max_values' => 1, 'name' => 'string-constraint-string-list', 'title' => '(2/3) String constraint string list', 'type' => 3, 'unit' => 0 }, { 'cap' => 37, 'constraint' => [ 'First entry', 'Second entry', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46' ], 'constraint_type' => 3, 'desc' => '(3/3) String test option with string list constraint. Contains some more entries...', 'index' => 49, 'max_values' => 1, 'name' => 'string-constraint-long-string-list', 'title' => '(3/3) String constraint long string list', 'type' => 3, 'unit' => 0 }, { 'cap' => 0, 'constraint_type' => 0, 'desc' => '', 'index' => 50, 'max_values' => 0, 'name' => '', 'title' => 'Button test options', 'type' => 5, 'unit' => 0 }, { 'cap' => 37, 'constraint_type' => 0, 'desc' => '(1/1) Button test option. Prints some text...', 'index' => 51, 'max_values' => 0, 'name' => 'button', 'title' => '(1/1) Button', 'type' => 4, 'unit' => 0 } ], 'geometry' => { 'l' => 0, 't' => 0, 'x' => 200, 'y' => 200 }, 'hash' => { 'bool-hard-select' => $VAR1->{'array'}[31], 'bool-hard-select-soft-detect' => $VAR1->{'array'}[30], 'bool-soft-detect' => $VAR1->{'array'}[32], 'bool-soft-select-soft-detect' => $VAR1->{'array'}[29], 'bool-soft-select-soft-detect-auto' => $VAR1->{'array'}[34], 'bool-soft-select-soft-detect-emulated' => $VAR1->{'array'}[33], 'br-x' => $VAR1->{'array'}[26], 'br-y' => $VAR1->{'array'}[27], 'button' => $VAR1->{'array'}[51], 'depth' => $VAR1->{'array'}[3], 'enable-test-options' => $VAR1->{'array'}[21], 'fixed' => $VAR1->{'array'}[43], 'fixed-constraint-range' => $VAR1->{'array'}[44], 'fixed-constraint-word-list' => $VAR1->{'array'}[45], 'fuzzy-parameters' => $VAR1->{'array'}[18], 'hand-scanner' => $VAR1->{'array'}[4], 'int' => $VAR1->{'array'}[36], 'int-constraint-array' => $VAR1->{'array'}[39], 'int-constraint-array-constraint-range' => $VAR1->{'array'}[40], 'int-constraint-array-constraint-word-list' => $VAR1->{'array'}[41], 'int-constraint-range' => $VAR1->{'array'}[37], 'int-constraint-word-list' => $VAR1->{'array'}[38], 'invert-endianess' => $VAR1->{'array'}[11], 'mode' => $VAR1->{'array'}[2], 'non-blocking' => $VAR1->{'array'}[19], 'ppl-loss' => $VAR1->{'array'}[17], 'print-options' => $VAR1->{'array'}[22], 'read-delay' => $VAR1->{'array'}[14], 'read-delay-duration' => $VAR1->{'array'}[15], 'read-limit' => $VAR1->{'array'}[12], 'read-limit-size' => $VAR1->{'array'}[13], 'read-return-value' => $VAR1->{'array'}[16], 'resolution' => $VAR1->{'array'}[7], 'select-fd' => $VAR1->{'array'}[20], 'source' => $VAR1->{'array'}[8], 'string' => $VAR1->{'array'}[47], 'string-constraint-long-string-list' => $VAR1->{'array'}[49], 'string-constraint-string-list' => $VAR1->{'array'}[48], 'test-picture' => $VAR1->{'array'}[10], 'three-pass' => $VAR1->{'array'}[5], 'three-pass-order' => $VAR1->{'array'}[6], 'tl-x' => $VAR1->{'array'}[24], 'tl-y' => $VAR1->{'array'}[25] }, 'source' => $VAR1->{'array'}[8] }, 'Gscan2pdf::Scanner::Options' ); 2020/01/22 19:11:44 Started setting num_pages from 1 to 2 2020/01/22 19:11:44 Finished setting num_pages from 1 to 2 2020/01/22 19:11:44 Started setting cursor from wait to progress 2020/01/22 19:11:44 Finished setting cursor from wait to progress 2020/01/22 19:11:44 06190_Dialog_Scan_Image_Sane.t: scanning image of size 157x196 pixels at 8 bits/pixel 2020/01/22 19:11:44 06190_Dialog_Scan_Image_Sane.t: acquiring gray frame 2020/01/22 19:11:44 Emptying process queue 2020/01/22 19:11:44 Requesting cancel 2020/01/22 19:11:44 Cancelled scan 2020/01/22 19:11:44 Scan cancelled 2020/01/22 19:11:44 Scanned page /tmp/Yu7KmmmAVm.pnm. (scanner status = 2) 2020/01/22 19:11:44 Scanning 1 pages from 1 with step 1 2020/01/22 19:11:44 Started setting cursor from progress to default 2020/01/22 19:11:44 Finished setting cursor from progress to default make: *** wait: No child processes. Stop. make: *** Waiting for unfinished jobs.... make: *** wait: No child processes. Stop.