kopia lustrzana https://gitlab.com/sane-project/website
542 wiersze
22 KiB
HTML
542 wiersze
22 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
|
|
<html>
|
|
<head>
|
|
<title>SANE - TODO List for Standard Version 2</title>
|
|
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
|
<meta name="author" content="Henning Meier-Geinitz">
|
|
<meta name="keywords" content="sane, standard, 2, sane2, documentation">
|
|
<meta name="description" content="Development of the SANE2 standard">
|
|
<link href="mailto:hmg-guest@users.alioth.debian.org" rev="made">
|
|
<link href="/favicon.ico" type="image/x-icon" rel="icon">
|
|
<link href="/favicon.ico" type="image/x-icon" rel="shortcut icon">
|
|
<link href="todo.css" rel="stylesheet" rev="text/css">
|
|
</head>
|
|
|
|
<body bgcolor="#FFFFFF" text="#000000">
|
|
<center>
|
|
<a href="http://www.sane-project.org" target="_top"><img
|
|
src="../images/sane.png" alt="SANE" height="117" width="346" border="0"></a>
|
|
</center>
|
|
|
|
<center>
|
|
<h1>SANE - TODO list for standard version 2</h1>
|
|
</center>
|
|
|
|
<p class="noindent">
|
|
This list intends to show the items which need to be finished before the
|
|
SANE2 standard can be published. It's based on Oliver Rauch's
|
|
sane2-api-todo.txt document. The headlines show the status of the change
|
|
as shown below. Keep in mind that this status is just the opinion of the
|
|
author of this page (hmg). If you think that anything is wrong or missing,
|
|
contact sane-standard.
|
|
</p>
|
|
<h4 class="accepted">Accepted: The change is in the latest standard</h4>
|
|
<h4 class="discussed">Further discussion: The change is in the standard but
|
|
there are still problems</h4>
|
|
<h4 class="rejected">Rejected: the change won't be included in the
|
|
standard</h4>
|
|
<h4>(no status): neither included nor rejected yet</h4>
|
|
|
|
<h2>Naming and versioning</h2>
|
|
<h4>Archive/CVS name</h4>
|
|
<p>
|
|
"sane-backends2" (-->sane-backends2-2.x.y) or sane2-backends
|
|
(-->sane2backends-2.x.y)?
|
|
</p>
|
|
<h4>Header file</h4>
|
|
<p>
|
|
"sane/sane2.h", "sane/sane-2.h", "sane2/sane.h" or "sane/sane."?
|
|
</p>
|
|
<h4>Libraries</h4>
|
|
<p>
|
|
"libsane2-dll.so" or "libsane-dll2.so"?
|
|
</p>
|
|
<h4>Standard</h4>
|
|
<p>
|
|
Use 3 versions for the standard (major, minor, revision)? The major number
|
|
would be 2 and means "binary incompatible changes". The minor number
|
|
means: additions to the standard (e.g. using of reserved values). The
|
|
revision is for changes that don't change the interface at all
|
|
(clarifications, more return values for a function).
|
|
</p>
|
|
<h4>Config file names</h4>
|
|
<p>
|
|
"/etc/sane2.d/dll.conf"? "/etc/sane.d/dll2.conf" doesn't work because
|
|
there are already backends with numbers (microtek2.conf).
|
|
</p>
|
|
<h2>SANE data types</h2>
|
|
<h3>SANE_Char</h3>
|
|
<h4>UTF-8 format</h4>
|
|
<p>
|
|
All texts and translations: UTF-8 format (this is used in KDE and
|
|
gtk+-2.x) may be UTF-8 should be forced as SANE_Char format. Currently
|
|
ISO-8859-1 is used as encoding.
|
|
</p>
|
|
|
|
<h3>SANE_Parameters</h3>
|
|
<h4>Move SANE_Parameters to data type section</h4>
|
|
<p>
|
|
I don't see any reason to keep SANE_Parameters in the "Operations" section
|
|
as all the other data types are in "Data Types".
|
|
</p>
|
|
<h4 class="accepted">Changes to frames (SANE_Parameters.format) (accepted)</h4>
|
|
<p>
|
|
Use SANE_FRAME_RAW, formatdesc="red:8,green:8,blue:8" instead of old
|
|
SANE_FRAME_* types. Add SANE_FRAME_MIME, formatdesc=MIME-descriptor, only
|
|
one frame/image, arbitrary data. This allows transmission of e.g. jpeg,
|
|
tiff and any other data format. SANE_FRAME_GRAY/RGB/RED/GREEN/BLUE are
|
|
obsolete.
|
|
</p>
|
|
<h4 class="accepted">define bit order of 1 bit modes (accepted)</h4>
|
|
<p>
|
|
Lineart: 1 = black, other modes: 0 = black. Reason: History.
|
|
<p>
|
|
<h4>Remove multi-frame paradigm at all</h4>
|
|
<p>
|
|
More than one frame is used e.g. for 3-pass scanners. Maybe also film
|
|
scanners use a separate frame for IR data?
|
|
</p>
|
|
<h4 class="accepted">Remove multi-channel 1 bit mode (accepted)</h4>
|
|
<p>
|
|
Some old Mustek scanners support this mode (color 1 bit). But it's not
|
|
really useful. So 1 bit color is not allowed anymore.
|
|
</p>
|
|
<h4 class="accepted">Add flags to SANE_Parameters.flags (accepted)</h4>
|
|
<p>
|
|
Make it compatible to SANE 1. Adds more_images, new_page, front/backside
|
|
info, 28 more flags available.
|
|
</p>
|
|
<h4 class="accepted">More informational values (accepted)</h4>
|
|
<p>
|
|
Add dpi_x, dpi_y, proposed_filename, formatdesc, channels_per_image.
|
|
</p>
|
|
<h4 class="discussed">32 bytes for future extension (set to 0) (further discussion)</h4>
|
|
<p>
|
|
Check how to do this without creating portability nightmares. The current
|
|
implementation just won't work as sizeof(SANE_Int) = 4 is not true
|
|
everywhere. Keep in mind that the size of SANE_Int is unknown, same is
|
|
true for SANE_String and even char. maybe just use SANE_Int reserved[10]?
|
|
</p>
|
|
|
|
<h3>SANE_Device</h3>
|
|
<h4 class="accepted">Add informational and reserved members (accepted)</h4>
|
|
<p>
|
|
These members have been added:
|
|
</p>
|
|
<ul>
|
|
<li>email_backend_author (string)
|
|
<li>device_location (string)
|
|
<li>comment (string)
|
|
<li>reserved_string (string)
|
|
<li>version_code (integer)
|
|
<li>backend_capability_flags (integer)
|
|
<li>reserved_int (integer)
|
|
</ul>
|
|
|
|
<h4 class="rejected">Next pointer (rejected)</h4>
|
|
<p>
|
|
Add a pointer "next" to the device handle to make linked lists instead of
|
|
arrays. Is this incompatible change really useful?
|
|
</p>
|
|
|
|
<h3>SANE_Status</h3>
|
|
<h4>Add more errors</h4>
|
|
<p>E.g. out of memory in scanner, file not found, firmware not found, some
|
|
kind of error concerning options, power failure of scanner,...</p>
|
|
<h4>Change SANE_Status to (also) contain textual error messages</h4>
|
|
<p>
|
|
The fixed error messages are sometimes not enough to find out what's wrong
|
|
exactly. E.g. which file is not found exactly or which option can't be
|
|
set?
|
|
</p>
|
|
|
|
<p>
|
|
One proposal is:
|
|
</p>
|
|
<pre>
|
|
typedef struct {
|
|
int code;
|
|
char *msg;
|
|
} SANE_Status;
|
|
</pre>
|
|
<p>
|
|
SANE_Status.code is always a standard SANE status code. If SANE_Status.msg
|
|
is NULL, then the standard SANE status message is printed, end of the
|
|
story. Otherwise, the custom SANE_Status.msg is printed, and the caller
|
|
must free SANE_Status.msg.
|
|
</p>
|
|
<p>
|
|
The good thing about that proposal is that the error message comes with
|
|
the error code. That way we don't need a new API function to get the
|
|
verbose error message. The bad thing is that the caller has to care about
|
|
freeing msg. Also check if this works with saned.
|
|
</p>
|
|
<p>
|
|
Another proposal: Slightly redefine SANE_Status, as a 32bit integer where
|
|
the 2 MSB are a backend-specific error code and the 2 LSB are a standard
|
|
SANE status code.
|
|
</p>
|
|
<p>
|
|
The 2 LSB will always correspond to a SANE status.
|
|
</p>
|
|
<p>
|
|
If the 2 MSB are non-zero, they are passed to a sane_backend_status()
|
|
routine inside the backend that returns a proper status message that is
|
|
then echoed to the user. (depending on what we want to achieve, we'd
|
|
require the caller to free the message after use, think sprintf(),
|
|
etc...). Otherwise, the standard SANE status message is echoed.
|
|
</p>
|
|
<p>
|
|
Problems with this proposal: How does the dll backend know which backend
|
|
to ask for the error code? The usual problems: thread safety, who frees
|
|
the message.
|
|
</p>
|
|
|
|
|
|
<h3>SANE_Option_Descriptor</h3>
|
|
<h4 class="accepted">SANE_CAP_ADVANCED for a group (accepted)</h4>
|
|
<h4 class="accepted">SANE_CAP_ALWAYS_SETTABLE (accepted)</h4>
|
|
<h4 class="accepted">SANE_CAP_HIDDEN (accepted)</h4>
|
|
<h4>SANE_CAP_AUTO_POLL</h4>
|
|
<p>
|
|
One of the problems with the options system in SANE is that a backend
|
|
can't tell the frontend that something has changed. Such a feature would
|
|
be useful if a button is pressed on the scanner or some other status in
|
|
the scanner changes. As callbacks are not available over the network,
|
|
polling of options can be used a a workaround. An option with the
|
|
capability SANE_CAP_AUTO_POLL should be read by the frontend each
|
|
[interval] milliseconds. The interval should be defined. (e.g. min 100
|
|
msecs, max 1 sec?)
|
|
</p>
|
|
|
|
<h2>SANE API functions</h2>
|
|
<h3>sane_open</h3>
|
|
<h4 class="accepted">New parameter: sane_device (accepted)</h4>
|
|
<p>
|
|
sane_open does return sane_device: A frontend may decide not to call
|
|
sane_get_devices because it already knows which device shall be opened. In
|
|
this case it does not get any information about the device (vendor, model,
|
|
...). So it makes sense to return the SANE_Device in sane_open.
|
|
</p>
|
|
|
|
<h3>sane_get_parameters</h3>
|
|
<h4>Define error codes for sane_get_parameters</h4>
|
|
<p>
|
|
Currently there are no error codes.
|
|
</p>
|
|
<h4>Move SANE_Parameters to data type section</h4>
|
|
<p>
|
|
All the other structs are defined in the data type sections. I don't see
|
|
any reason to not move SANE_Parameters to that section.
|
|
</p>
|
|
|
|
<h3>sane_init</h3>
|
|
<h4>Define return value of sane_init</h4>
|
|
|
|
<h3>sane_get_select_fd</h3>
|
|
<h4>Implementation note for select_fd</h4>
|
|
<p>
|
|
If the select_fd is a pipe, it's not enough to close "the other side" of
|
|
that pipe. The select_fd must be closed itself. The frontend shouldn't
|
|
assume that the fd is a pipe.
|
|
</p>
|
|
|
|
<h3>sane_control_option</h3>
|
|
<h4 class="accepted">Which parts of an option descriptor can be changed at
|
|
run-time?</h4>
|
|
<p>
|
|
Define what parts in a option_descriptor may be changed after it has been
|
|
set up and passed to the frontend.
|
|
<p>
|
|
<h4>More members of option descriptor that should be changeable</h4>
|
|
<p>
|
|
Maybe add size to list of members that can be changed?
|
|
</p>
|
|
|
|
<h4 class="accepted">SANE_INFO_INVALIDATE_PREVIEW (accepted)</h4>
|
|
<p>
|
|
When an option is set with sane_control_option that changes the image
|
|
significantly (e.g. exposure) invalidate the preview by setting
|
|
SANE_INFO_INVALIDATE_PREVIEW.
|
|
</p>
|
|
|
|
<h3>sane_strstatus</h3>
|
|
<h4 class="accepted">Remove "const" (accepted)</h4>
|
|
|
|
<h3>New SANE API functions</h3>
|
|
|
|
<h4>sane_verbose_error</h4>
|
|
<p>
|
|
Add SANE_String sane_verbose_error(Sane_Handle h), to show
|
|
backend-specific error messages. The error string always refers to the
|
|
last error reported by the backend. So the frontend would call this when
|
|
a SANE API call returned with an error status. E.g. out-of-memory in
|
|
scanner hardware or "Couldn't open file foo". Check for thread-safety
|
|
problems. If the handle parameter is used, no errors can be printed
|
|
before sane_open has succeeded.
|
|
</p>
|
|
<p>
|
|
If we use SANE_String sane_verbose_error() (no handle parameter), we could
|
|
ask for error messages even in sane_open. However, SANE allows to open
|
|
several scanners at the same time so this could lead to confusion. Also,
|
|
how does the dll backend know which backend to ask for the error message
|
|
if no handle is given?
|
|
</p>
|
|
<p>
|
|
How to translate individual error messages?
|
|
</p>
|
|
<p>
|
|
See also SANE_Status.
|
|
</p>
|
|
|
|
<h4>sane_download_translation, sane_download_backend_file</h4>
|
|
<p>
|
|
The idea of using a SANE API function to download backend translations and
|
|
backend documentation is that the frontend doesn't need to care about
|
|
paths to these files. Also it works over the network. So the client only
|
|
has the net backend (and no documentation/translation for other backends)
|
|
and all the data is on the server. On the other hand the current
|
|
implementation works quite well (translations are installed by
|
|
sane-backends). 95 % of the backends don't have HTML documentation so we
|
|
had to move from man page to HTML if we wanted to use that approach.
|
|
</p>
|
|
<p>
|
|
My proposal is to keep the current situation concerning translations (and
|
|
only define formats and filenames in the standard). Concerning
|
|
documentation, maybe just add a member "doc_path" to SANE_Device so the
|
|
frontend can use any browser it likes? However, this means that we have to place
|
|
the docs and translations on the client as it's the case now.
|
|
</p>
|
|
<p>
|
|
In the following paragraphs some other approaches to download
|
|
translations/documentation are explained.
|
|
</p>
|
|
<p>
|
|
Download backend translation and documentation: The Download function does
|
|
not care about the file format, this probably also has to be defined in
|
|
the sane standard. E.g.: sane_download_backend_file(filename). The backend
|
|
has to load the file from a fixed directory. The path to the directory has
|
|
to contain the backend name, e.g: /usr/local/share/sane/sane-umax/ The
|
|
frontend can not change the directory due to security! That may cause
|
|
trouble with network scanning!
|
|
</p>
|
|
<p>
|
|
Rethink the whole idea of downloading. Maybe there should just be a
|
|
function to get the .gmo file for a specific language. E.g. sane_read_gmo
|
|
(SANE_String language, SANE_Byte * buffer, SANE_Int * size) or even
|
|
SANE_Byte * sane_get_translation (SANE_String language). Does the latter
|
|
work over the net (local copy needed)?
|
|
</p>
|
|
<p>
|
|
Or use a more general approach: SANE_Status sane_get_aux_info (SANE_String
|
|
* aux_info, SANE_String_Const lang, SANE_Int info_type). info_type defines
|
|
if a translation or backend documentation is selected. Format for
|
|
documentation is HTML without images? However, this way only one html file
|
|
per backend can be transmitted.
|
|
</p>
|
|
<h4 class="rejected">sane_get_device_info (rejected)</h4>
|
|
<p>
|
|
Add sane_get_device_info function that allows the frontend to ask for
|
|
information about all involved backends and meta backends that are used.
|
|
Is this still needed with version_code in sane_device and the new
|
|
parameter in sane_open?
|
|
</p>
|
|
|
|
<h4 class="rejected">sane_extended_call / sane_extended_callback
|
|
(rejected)</h4>
|
|
<p>
|
|
I don`t like this because it makes it too simple to add proprietary
|
|
functions that are not defined in the sane standard.
|
|
</p>
|
|
|
|
<h4>Split sane_cancel and add sane_end</h4>
|
|
<p>
|
|
Currently sane_cancel has two meanings: "The scan is now finished" and
|
|
"Stop the scan immediately". It would be much cleaner if these functions
|
|
were separate.
|
|
</p>
|
|
|
|
<h2>Well-known options</h2>
|
|
<h4 class="accepted">resolution, x-resolution, y-resolution (accepted)</h4>
|
|
<h4 class="accepted">preview, new frame types (accepted)</h4>
|
|
<h4 class="accepted">geometry, temporarily wrong (accepted)</h4>
|
|
<h4 class="accepted">new: depth (accepted)</h4>
|
|
<h4 class="accepted">new: mode (accepted)</h4>
|
|
<h4 class="accepted">new: source (accepted)</h4>
|
|
<h4 class="accepted">new: threshold (accepted)</h4>
|
|
<h4 class="accepted">new: gamma-table (accepted)</h4>
|
|
<h4 class="accepted">new: analog-gamma (accepted)</h4>
|
|
<h4 class="accepted">new: shadow (accepted)</h4>
|
|
<h4 class="accepted">new: highlight (accepted)</h4>
|
|
<h4 class="accepted">new: lamp-on, lamp-off (accepted)</h4>
|
|
<h4 class="discussed">new: scanner-buttons-* (further discussion)</h4>
|
|
<h4 class="discussed">new: batch-scan (further discussion)</h4>
|
|
<p>
|
|
Option "batch-scan" should be of type SANE_Int. Define SANE_BATCH_* values
|
|
in sane_opt.h: 0 = no batch, 1 = ... . Strings shouldn't be used for such
|
|
switches.
|
|
</p>
|
|
<h4>focus-position-x, -y</h4>
|
|
<p>
|
|
Set focus position. I don't know what's meant by this. Details please!
|
|
</p>
|
|
|
|
<h4>Manual focussing</h4>
|
|
<p>
|
|
An option to use manual focus on film scanners was proposed. Details?
|
|
</p>
|
|
|
|
<h4>multi-pass</h4>
|
|
<p>
|
|
Multi pass for film scanners. number of passes (either native or
|
|
EMULATED) SANE_TYPE_INT, word_list or range.
|
|
</p>
|
|
|
|
<h4>image-number</h4>
|
|
<p>
|
|
Direct selection of image number, e.g. for film scanners -> SANE_TYPE_INT
|
|
</p>
|
|
|
|
<h4>total-images</h4>
|
|
<p>
|
|
Number of images to be scanned, e.g. for film scanners. Read-only? Do we
|
|
need this option with SANE_PFLAG_MORE_IMAGES?
|
|
</p>
|
|
|
|
<h4>exposure-time</h4>
|
|
|
|
<h4>Image type/compression type</h4>
|
|
<p>
|
|
Many scanners are able to generate scan data in different formats,
|
|
e.g. raw and jpeg. There should be a well-known option to select which
|
|
kind of image data is used. E.g. a string list with well known values for
|
|
"Raw", "JPEG", "TIFF", whatever.
|
|
</p>
|
|
|
|
<h2>Miscellaneous</h2>
|
|
<h4">Message callbacks</h4>
|
|
<p>
|
|
Let backend display a frontend-info or -selection (ok/cancel) dialog-box
|
|
(e.g. "Calibration in progress: wait 10/9/8/... seconds") this has to be
|
|
done with a callback, e.g.: sane_frontend_dialog_display(**window, text,
|
|
ok_text, cancel_text, backend_dialog_callback_function)
|
|
sane_frontend_dialog_close(window) the frontend function has to be
|
|
implemented in a way that the backend can change the text. A good place
|
|
to define the callback functions could be sane_init, where already the
|
|
authorization_callback is defined.
|
|
<p>
|
|
<p>
|
|
Callbacks don't work with the SANE network protocol. At least you can't
|
|
call the callback if no SANE function is currently running. An exception
|
|
is the authorization callback as that's only needed before calling some
|
|
specific functions. So those functions return "authorization needed" over
|
|
the net. It's not clear yet if it's possible to implement message
|
|
callbacks over the net at all. Even if it is, the code will be complicated
|
|
and bloated because we need to return an error for the RPC and then
|
|
restart the currently running code at the same position where the callback
|
|
occurred.
|
|
<p>
|
|
|
|
<h4 class="rejected">Flag to reload options after scan (rejected)</h4>
|
|
<p>
|
|
Give backend the chance to tell the frontend while/after scan that the
|
|
options have changed (e.g. film scanner reduces number of available
|
|
images): may be a flag (comparable to int *i in sane_control_option).
|
|
</p>
|
|
<p>
|
|
If such a feature is really necessary and SANE_CAP_AUTO_POLL is not
|
|
enough, we could force the frontend to reload the descriptors after every
|
|
scan. Otherwise we had to add a flag to sane_cancel which I think is
|
|
really unclean.
|
|
</p>
|
|
<h4>Implementation notes</h4>
|
|
<p>
|
|
The idea is to add a section with implementation notes like the text that
|
|
is currently in backend-writing.txt. My personal view is that everything a
|
|
backend programmer needs to know should go into the standard. Everything
|
|
that concerns the sane-backends distribution, coding style, general coding
|
|
tips etc. should go int backend-writing.txt.
|
|
</p>
|
|
|
|
<h3>Internationalization/documentation</h3>
|
|
<h4 class="discussed">Marking of translatable texts (further
|
|
discussion)</h4>
|
|
<p>
|
|
See section 4.2.10 ff for details. I don't think that the details of the
|
|
marking should be mentioned in the standard as they are backend-dependant
|
|
and not part of the API. Only mention that options are in English and that
|
|
option names must not be translated.
|
|
</p>
|
|
<h4 class="discussed">Recommended file formats for internationalization
|
|
(further discussion)</h4>
|
|
<p>
|
|
In sane_i18n definition files: *.po, default translation tables: *.(g)mo.
|
|
(section 4.2.10.3). It's ok to define the formats but the way how to use
|
|
these files needn't be defined (maybe a gettext to something else
|
|
converter is used).
|
|
</p>
|
|
|
|
<h3>Network protocol</h3>
|
|
<h4>Update from API changes</h4>
|
|
<p>
|
|
The network protocol must be updated to reflect the changes to the SANE
|
|
standard.
|
|
</p>
|
|
<h4>Use UDP instead of TCP?</h4>
|
|
<h4>port number selection</h4>
|
|
<p>
|
|
Let the server define a port number for the data port to avoid firewall
|
|
problems?
|
|
</p>
|
|
<h4>Avoid data port</h4>
|
|
<p>
|
|
Maybe it's possible to avoid the data port at all?
|
|
</p>
|
|
<h4>Document RPCs</h4>
|
|
<p>
|
|
Add the numbers of the RPCs to the standard, Maybe the standard needs some
|
|
more details of the network interface, too.
|
|
</p>
|
|
<h4>Callbacks</h4>
|
|
<p>
|
|
Check if the callbacks are implemented according to the standard.
|
|
</p>
|
|
|
|
<h4 class="rejected">Lamp shut off (rejected)</h4>
|
|
<p>
|
|
Saned or a stand alone "turn lamp off daemon" should get an internal timer
|
|
to turn off the lamp of some scanners. This has to be defined closer.
|
|
May be it is necessary to find out how long a scanner has not been
|
|
used. For this saned needs a function like sane_get_offline_time()...
|
|
<p>
|
|
<p>
|
|
This should be done in the backend.
|
|
</p>
|
|
|
|
<h2>Grammar/spelling/formalities</h2>
|
|
<h4>Update contact information</h4>
|
|
<h4>Add clear preliminary marker</h4>
|
|
<h4>Set change markers of INVALIDATE_PREVIEW</h4>
|
|
<h4>Check grammar & spelling</h4>
|
|
<h4>Check too long lines</h4>
|
|
<h4>Check defective references</h4>
|
|
<h4>Update index</h4>
|
|
<h4>Check that all headlines are in capital letters</h4>
|
|
|
|
|
|
</pre>
|
|
<hr>
|
|
|
|
<p>
|
|
<a href="index.html">SANE 2 standard page</a><br>
|
|
<a href="/docs.html">Documentation page</a><br>
|
|
<a href="/">SANE homepage</a>
|
|
</p>
|
|
<p>
|
|
<font size="-1">$Date$ $Author$</font>
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|