summaryrefslogtreecommitdiff
path: root/backend/mustek_pp.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/mustek_pp.c')
-rw-r--r--backend/mustek_pp.c160
1 files changed, 60 insertions, 100 deletions
diff --git a/backend/mustek_pp.c b/backend/mustek_pp.c
index 9c9a533..bb97f86 100644
--- a/backend/mustek_pp.c
+++ b/backend/mustek_pp.c
@@ -86,7 +86,7 @@
#include "mustek_pp_drivers.h"
#define MIN(a,b) ((a) < (b) ? (a) : (b))
-
+
/* converts millimeter to pixels at a given resolution */
#define MM_TO_PIXEL(mm, dpi) (((float )mm * 5.0 / 127.0) * (float)dpi)
/* and back */
@@ -120,27 +120,27 @@ static Mustek_pp_Handle *first_hndl = NULL;
static SANE_String_Const mustek_pp_modes[4] = {SANE_VALUE_SCAN_MODE_LINEART, SANE_VALUE_SCAN_MODE_GRAY, SANE_VALUE_SCAN_MODE_COLOR, NULL};
static SANE_Word mustek_pp_modes_size = 10;
-
+
static SANE_String_Const mustek_pp_speeds[6] = {"Slowest", "Slower", "Normal", "Faster", "Fastest", NULL};
static SANE_Word mustek_pp_speeds_size = 8;
-static SANE_Word mustek_pp_depths[5] = {4, 8, 10, 12, 16};
+static SANE_Word mustek_pp_depths[5] = {4, 8, 10, 12, 16};
/* prototypes */
static void free_cfg_options(int *numoptions, Mustek_pp_config_option** options);
static SANE_Status do_eof(Mustek_pp_Handle *hndl);
static SANE_Status do_stop(Mustek_pp_Handle *hndl);
static int reader_process (Mustek_pp_Handle * hndl, int pipe);
-static SANE_Status sane_attach(SANE_String_Const port, SANE_String_Const name,
+static SANE_Status sane_attach(SANE_String_Const port, SANE_String_Const name,
SANE_Int driver, SANE_Int info);
static void init_options(Mustek_pp_Handle *hndl);
-static void attach_device(SANE_String *driver, SANE_String *name,
+static void attach_device(SANE_String *driver, SANE_String *name,
SANE_String *port, SANE_String *option_ta);
/*
- * Auxiliary function for freeing arrays of configuration options,
+ * Auxiliary function for freeing arrays of configuration options,
*/
-static void
+static void
free_cfg_options(int *numoptions, Mustek_pp_config_option** options)
{
int i;
@@ -160,8 +160,6 @@ free_cfg_options(int *numoptions, Mustek_pp_config_option** options)
/* do_eof:
* closes the pipeline
*
- * ChangeLog:
- *
* Description:
* closes the pipe (read-only end)
*/
@@ -180,8 +178,6 @@ do_eof (Mustek_pp_Handle *hndl)
/* do_stop:
* ends the reader_process and stops the scanner
*
- * ChangeLog:
- *
* Description:
* kills the reader process with a SIGTERM and cancels the scanner
*/
@@ -218,14 +214,12 @@ do_stop(Mustek_pp_Handle *hndl)
/* sigterm_handler:
* cancel scanner when receiving a SIGTERM
*
- * ChangeLog:
- *
* Description:
* just exit... reader_process takes care that nothing bad will happen
*
* EDG - Jan 14, 2004:
* Make sure that the parport is released again by the child process
- * under all circumstances, because otherwise the parent process may no
+ * under all circumstances, because otherwise the parent process may no
* longer be able to claim it (they share the same file descriptor, and
* the kernel doesn't release the child's claim because the file
* descriptor isn't cleaned up). If that would happen, the lamp may stay
@@ -247,8 +241,6 @@ sigterm_handler (int signal __UNUSED__)
/* reader_process:
* receives data from the scanner and stuff it into the pipeline
*
- * ChangeLog:
- *
* Description:
* The signal handle for SIGTERM is initialized.
*
@@ -267,13 +259,13 @@ reader_process (Mustek_pp_Handle * hndl, int pipe)
sigemptyset (&sigterm_set);
sigaddset (&sigterm_set, SIGTERM);
-
+
if (!(buffer = malloc (hndl->params.bytes_per_line)))
return SANE_STATUS_NO_MEM;
-
+
if (!(fp = fdopen(pipe, "w")))
return SANE_STATUS_IO_ERROR;
-
+
fd_to_release = hndl->fd;
memset (&act, 0, sizeof(act));
act.sa_handler = sigterm_handler;
@@ -290,11 +282,11 @@ reader_process (Mustek_pp_Handle * hndl, int pipe)
sigprocmask (SIG_BLOCK, &sigterm_set, NULL);
hndl->dev->func->read (hndl, buffer);
-
+
if (getppid() == 1) {
/* The parent process has died. Stop the scan (to make
sure that the lamp is off and returns home). This is
- a safety measure to make sure that we don't break
+ a safety measure to make sure that we don't break
the scanner in case the frontend crashes. */
DBG (1, "reader_process: front-end died; aborting.\n");
hndl->dev->func->stop (hndl);
@@ -312,14 +304,12 @@ reader_process (Mustek_pp_Handle * hndl, int pipe)
return SANE_STATUS_GOOD;
}
-
+
/* sane_attach:
* adds a new entry to the Mustek_pp_Device *devlist list
*
- * ChangeLog:
- *
* Description:
* After memory for a new device entry is allocated, the
* parameters for the device are determined by a call to
@@ -334,7 +324,7 @@ sane_attach (SANE_String_Const port, SANE_String_Const name, SANE_Int driver, SA
{
Mustek_pp_Device *dev;
- DBG (3, "sane_attach: attaching device ``%s'' to port %s (driver %s v%s by %s)\n",
+ DBG (3, "sane_attach: attaching device ``%s'' to port %s (driver %s v%s by %s)\n",
name, port, Mustek_pp_Drivers[driver].driver,
Mustek_pp_Drivers[driver].version,
Mustek_pp_Drivers[driver].author);
@@ -355,7 +345,7 @@ sane_attach (SANE_String_Const port, SANE_String_Const name, SANE_Int driver, SA
dev->sane.name = dev->name = strdup (name);
dev->port = strdup (port);
dev->info = info; /* Modified by EDG */
-
+
/* Transfer the options parsed from the configuration file */
dev->numcfgoptions = numcfgoptions;
dev->cfgoptions = cfgoptions;
@@ -382,8 +372,6 @@ sane_attach (SANE_String_Const port, SANE_String_Const name, SANE_Int driver, SA
/* init_options:
* Sets up the option descriptors for a device
*
- * ChangeLog:
- *
* Description:
*/
static void
@@ -469,7 +457,7 @@ init_options(Mustek_pp_Handle *hndl)
/* color dept */
hndl->opt[OPT_DEPTH].name = SANE_NAME_BIT_DEPTH;
hndl->opt[OPT_DEPTH].title = SANE_TITLE_BIT_DEPTH;
- hndl->opt[OPT_DEPTH].desc =
+ hndl->opt[OPT_DEPTH].desc =
"Number of bits per sample for color scans, typical values are 8 for truecolor (24bpp)"
"up to 16 for far-to-many-color (48bpp).";
hndl->opt[OPT_DEPTH].type = SANE_TYPE_INT;
@@ -626,15 +614,13 @@ init_options(Mustek_pp_Handle *hndl)
* Attempts to attach a device to the list after parsing of a section
* of the configuration file.
*
- * ChangeLog:
- *
* Description:
* After parsing a scanner section of the config file, this function
* is called to look for a driver with a matching name. When found,
* this driver is called to initialize the device.
*/
static void
-attach_device(SANE_String *driver, SANE_String *name,
+attach_device(SANE_String *driver, SANE_String *name,
SANE_String *port, SANE_String *option_ta)
{
int found = 0, driver_no, port_no;
@@ -681,17 +667,15 @@ attach_device(SANE_String *driver, SANE_String *name,
if (*option_ta)
free (*option_ta);
*name = *port = *driver = *option_ta = 0;
-
+
/* In case of a successful initialization, the configuration options
should have been transfered to the device, but this function can
deal with that. */
free_cfg_options(&numcfgoptions, &cfgoptions);
}
-
+
/* sane_init:
- * Reads configuration file and registers hardware driver
- *
- * ChangeLog:
+ * Reads configuration file and registers hardware driver
*
* Description:
* in *version_code the SANE version this backend was compiled with and the
@@ -711,7 +695,7 @@ attach_device(SANE_String *driver, SANE_String *name,
*
* if the optional argument "option_ta" is present the driver uses special
* parameters fitting for a trasparency adapter.
- */
+ */
SANE_Status
sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
@@ -740,9 +724,9 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
char driver_name[64];
const char **devices = sanei_pa4s2_devices();
int device_no;
-
+
DBG (2, "sane_init: could not open configuration file\n");
-
+
for (device_no = 0; devices[device_no] != NULL; device_no++)
{
DBG (3, "sane_init: trying ``%s''\n", devices[device_no]);
@@ -774,14 +758,14 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
if (strncmp(config_line_ptr, "scanner", 7) == 0)
{
config_line_ptr += 7;
-
+
if (name)
{
/* Parsing of previous scanner + options is finished. Attach
the device before we parse the next section. */
attach_device(&driver, &name, &port, &option_ta);
}
-
+
config_line_ptr = sanei_config_skip_whitespace (config_line_ptr);
if (!*config_line_ptr)
{
@@ -858,7 +842,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
config_line_ptr = sanei_config_get_string (config_line_ptr,
&option_ta);
- if ((option_ta == NULL) || (!*option_ta) ||
+ if ((option_ta == NULL) || (!*option_ta) ||
(strcasecmp (option_ta, "use_ta") != 0))
{
DBG (1, "sane_init: parse error in line %d after "
@@ -889,12 +873,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
}
else if (strncmp(config_line_ptr, "option", 6) == 0)
{
- /* Format for options: option <name> [<value>]
- Note that the value is optional. */
+ /* Format for options: option <name> [<value>]
+ Note that the value is optional. */
char *optname, *optval = 0;
Mustek_pp_config_option *tmpoptions;
- config_line_ptr += 6;
+ config_line_ptr += 6;
config_line_ptr = sanei_config_skip_whitespace (config_line_ptr);
if (!*config_line_ptr)
{
@@ -918,7 +902,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
{
/* The option has a value.
No need to check the value; that's up to the backend */
- config_line_ptr = sanei_config_get_string (config_line_ptr,
+ config_line_ptr = sanei_config_get_string (config_line_ptr,
&optval);
config_line_ptr = sanei_config_skip_whitespace (config_line_ptr);
@@ -927,10 +911,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
if (*config_line_ptr)
{
DBG (1, "sane_init: parse error in line %d after "
- "``option %s %s''\n", line, optname,
+ "``option %s %s''\n", line, optname,
(optval == 0 ? "" : optval));
free (optname);
- if (optval)
+ if (optval)
free (optval);
continue;
}
@@ -959,14 +943,14 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (1, "sane_init: parse error in line %d: unexpected "
" ``option''\n", line);
free (optname);
- if (optval)
+ if (optval)
free (optval);
continue;
}
/* Extend the (global) array of options */
- tmpoptions = realloc(cfgoptions,
+ tmpoptions = realloc(cfgoptions,
(numcfgoptions+1)*sizeof(cfgoptions[0]));
if (!tmpoptions)
{
@@ -987,7 +971,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
}
}
-
+
/* If we hit the end of the file, we still may have to process the
last driver */
if (name)
@@ -996,13 +980,11 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
fclose(fp);
return SANE_STATUS_GOOD;
-}
+}
/* sane_exit:
* Unloads all drivers and frees allocated memory
*
- * ChangeLog:
- *
* Description:
* All open devices are closed first. Then all registered devices
* are removed.
@@ -1051,8 +1033,6 @@ sane_exit (void)
/* sane_get_devices:
* Returns a list of registered devices
*
- * ChangeLog:
- *
* Description:
* A possible present old device_list is removed first. A new
* devarray is allocated and filled with pointers to the
@@ -1060,7 +1040,7 @@ sane_exit (void)
*/
/*ARGSUSED*/
SANE_Status
-sane_get_devices (const SANE_Device *** device_list,
+sane_get_devices (const SANE_Device *** device_list,
SANE_Bool local_only __UNUSED__)
{
int ctr;
@@ -1078,7 +1058,7 @@ sane_get_devices (const SANE_Device *** device_list,
}
dev = devlist;
-
+
for (ctr=0 ; ctr<num_devices ; ctr++) {
devarray[ctr] = &dev->sane;
dev = dev->next;
@@ -1093,8 +1073,6 @@ sane_get_devices (const SANE_Device *** device_list,
/* sane_open:
* opens a device and prepares it for operation
*
- * ChangeLog:
- *
* Description:
* The device identified by ``devicename'' is looked
* up in the list, or if devicename is zero, the
@@ -1142,7 +1120,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle)
return SANE_STATUS_INVAL;
}
- DBG (3, "sane_open: Using device ``%s'' (driver %s v%s by %s)\n",
+ DBG (3, "sane_open: Using device ``%s'' (driver %s v%s by %s)\n",
dev->name, dev->func->driver, dev->func->version, dev->func->author);
if ((hndl = malloc (sizeof (Mustek_pp_Handle))) == NULL) {
@@ -1151,7 +1129,7 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle)
return SANE_STATUS_NO_MEM;
}
-
+
if ((status = dev->func->open (dev->port, dev->caps, &fd)) != SANE_STATUS_GOOD) {
DBG (1, "sane_open: could not open device (%s)\n",
@@ -1167,32 +1145,32 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle)
hndl->pipe = -1;
init_options (hndl);
-
+
dev->func->setup (hndl);
-
+
/* Initialize driver-specific configuration options. This must be
done after calling the setup() function because only then the
driver is guaranteed to be fully initialized */
for (i = 0; i<dev->numcfgoptions; ++i)
{
- status = dev->func->config (hndl,
+ status = dev->func->config (hndl,
dev->cfgoptions[i].name,
dev->cfgoptions[i].value);
if (status != SANE_STATUS_GOOD)
{
DBG (1, "sane_open: could not set option %s for device (%s)\n",
dev->cfgoptions[i].name, sane_strstatus (status));
-
- /* Question: should the initialization be aborted when an
- option cannot be handled ?
- The driver should have reasonable built-in defaults, so
- an illegal option value or an unknown option should not
+
+ /* Question: should the initialization be aborted when an
+ option cannot be handled ?
+ The driver should have reasonable built-in defaults, so
+ an illegal option value or an unknown option should not
be fatal. Therefore, it's probably ok to ignore the error. */
}
}
first_hndl = hndl;
-
+
*handle = hndl;
return SANE_STATUS_GOOD;
@@ -1201,8 +1179,6 @@ sane_open (SANE_String_Const devicename, SANE_Handle * handle)
/* sane_close:
* closes a given device and frees all resources
*
- * ChangeLog:
- *
* Description:
* The handle is searched in the list of active handles.
* If it's found, the handle is removed.
@@ -1261,8 +1237,6 @@ sane_close (SANE_Handle handle)
/* sane_get_option_descriptor:
* does what it says
*
- * ChangeLog:
- *
* Description:
*
*/
@@ -1285,8 +1259,6 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
/* sane_control_option:
* Reads or writes an option
*
- * ChangeLog:
- *
* Desription:
* If a pointer to info is given, the value is initialized to zero
* while scanning options cannot be read or written. next a basic
@@ -1297,7 +1269,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
* values aren't supported.
*
* before a value is written, some checks are performed. Depending
- * on the option, that is written, other options also change
+ * on the option, that is written, other options also change
*
*/
SANE_Status
@@ -1487,7 +1459,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
hndl->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE;
hndl->opt[OPT_DEPTH].cap |= SANE_CAP_INACTIVE;
-
+
if ((hndl->dev->caps & CAP_DEPTH) && (strcmp(val, SANE_VALUE_SCAN_MODE_COLOR) == 0))
hndl->opt[OPT_DEPTH].cap &= ~SANE_CAP_INACTIVE;
@@ -1523,8 +1495,6 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
/* sane_get_parameters:
* returns the set of parameters, that is used for the next scan
*
- * ChangeLog:
- *
* Description:
*
* First of all it is impossible to change the parameter set
@@ -1543,7 +1513,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
* supported) or 24bit by default
* (ignored in bw/grayscale or if not
* supported)
- * dpi: resolution
+ * dpi: resolution
* invert: if supported else defaults to false
* gamma: if supported and selected
* ta: if supported by the device
@@ -1577,9 +1547,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
hndl->depth = hndl->val[OPT_DEPTH].w;
else
hndl->depth = 8;
-
+
dpi = (int) (SANE_UNFIX (hndl->val[OPT_RESOLUTION].w) + 0.5);
-
+
hndl->res = dpi;
if (hndl->dev->caps & CAP_INVERT)
@@ -1603,11 +1573,11 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
if (strcmp(mustek_pp_speeds[ctr], hndl->val[OPT_SPEED].s) == 0)
hndl->speed = ctr;
-
+
} else
hndl->speed = SPEED_NORMAL;
-
+
mode = hndl->val[OPT_MODE].s;
if (strcmp (mode, SANE_VALUE_SCAN_MODE_LINEART) == 0)
@@ -1651,7 +1621,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
MIN ((int)
(MM_TO_PIXEL (SANE_UNFIX(hndl->val[OPT_BR_Y].w), hndl->dev->maxres) +
0.5), hndl->dev->maxvsize);
-
+
/* If necessary, swap the upper and lower boundaries to avoid negative
distances. */
if (hndl->topX > hndl->bottomX) {
@@ -1716,8 +1686,6 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
/* sane_start:
* starts the scan. data aquisition will start immedially
*
- * ChangeLog:
- *
* Description:
*
*/
@@ -1775,8 +1743,6 @@ sane_start (SANE_Handle handle)
/* sane_read:
* receives data from pipeline and passes it to the caller
*
- * ChangeLog:
- *
* Description:
* ditto
*/
@@ -1877,8 +1843,6 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
/* sane_cancel:
* stops a scan and ends the reader process
*
- * ChangeLog:
- *
* Description:
*
*/
@@ -1900,8 +1864,6 @@ sane_cancel (SANE_Handle handle)
/* sane_set_io_mode:
* toggles between blocking and non-blocking reading
*
- * ChangeLog:
- *
* Description:
*
*/
@@ -1913,7 +1875,7 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking)
if (hndl->state != STATE_SCANNING)
return SANE_STATUS_INVAL;
-
+
if (fcntl (hndl->pipe, F_SETFL, non_blocking ? O_NONBLOCK : 0) < 0) {
@@ -1930,8 +1892,6 @@ sane_set_io_mode (SANE_Handle handle, SANE_Bool non_blocking)
/* sane_get_select_fd:
* returns the pipeline fd for direct reading
*
- * ChangeLog:
- *
* Description:
* to allow the frontend to receive the data directly it
* can read from the pipeline itself
@@ -1943,7 +1903,7 @@ sane_get_select_fd (SANE_Handle handle, SANE_Int * fd)
if (hndl->state != STATE_SCANNING)
return SANE_STATUS_INVAL;
-
+
*fd = hndl->pipe;
return SANE_STATUS_GOOD;