Lines Matching refs:dev
64 * @param dev Pointer to the device object (GT68xx_Device).
67 #define CHECK_DEV_NOT_NULL(dev, func_name) \
70 if (!(dev)) \
80 * @param dev Pointer to the device object (GT68xx_Device).
83 #define CHECK_DEV_OPEN(dev, func_name) \
86 CHECK_DEV_NOT_NULL ((dev), (func_name)); \
87 if ((dev)->fd == -1) \
90 ((void *) dev)); \
98 * @param dev Pointer to the device (GT68xx_Device).
101 #define CHECK_DEV_ACTIVE(dev, func_name) \
104 CHECK_DEV_OPEN ((dev), (func_name)); \
105 if (!(dev)->active) \
108 ((void *) dev)); \
147 GT68xx_Device *dev;
153 dev = (GT68xx_Device *) malloc (sizeof (GT68xx_Device));
155 if (!dev)
162 *dev_return = dev;
164 memset (dev, 0, sizeof (GT68xx_Device));
166 dev->fd = -1;
167 dev->active = SANE_FALSE;
169 dev->model = NULL;
170 dev->command_set_private = NULL;
172 dev->read_buffer = NULL;
173 dev->read_buffer_size = 32768;
175 dev->manual_selection = SANE_FALSE;
177 dev->scan_started = SANE_FALSE;
180 dev->shm_channel = NULL;
188 gt68xx_device_free (GT68xx_Device * dev)
190 DBG (7, "gt68xx_device_free: enter: dev=%p\n", (void *) dev);
191 if (dev)
193 if (dev->active)
194 gt68xx_device_deactivate (dev);
196 if (dev->fd != -1)
197 gt68xx_device_close (dev);
199 if (dev->model && dev->model->allocated)
202 (void *) dev->model);
203 free (dev->model);
206 DBG (7, "gt68xx_device_free: freeing dev\n");
207 free (dev);
228 gt68xx_device_identify (GT68xx_Device * dev)
234 CHECK_DEV_OPEN (dev, "gt68xx_device_identify");
236 status = sanei_usb_get_vendor_product (dev->fd, &vendor, &product);
248 dev->model = entry->model;
252 dev->model = NULL;
262 gt68xx_device_open (GT68xx_Device * dev, const char *dev_name)
267 DBG (7, "gt68xx_device_open: enter: dev=%p\n", (void *) dev);
269 CHECK_DEV_NOT_NULL (dev, "gt68xx_device_open");
271 if (dev->fd != -1)
285 dev->fd = fd;
287 if (!dev->model)
288 gt68xx_device_identify (dev);
295 gt68xx_device_close (GT68xx_Device * dev)
297 DBG (7, "gt68xx_device_close: enter: dev=%p\n", (void *) dev);
299 CHECK_DEV_OPEN (dev, "gt68xx_device_close");
301 if (dev->active)
302 gt68xx_device_deactivate (dev);
304 sanei_usb_close (dev->fd);
305 dev->fd = -1;
312 gt68xx_device_is_configured (GT68xx_Device * dev)
314 if (dev && dev->model && dev->model->command_set)
321 gt68xx_device_set_model (GT68xx_Device * dev, GT68xx_Model * model)
323 if (dev->active)
329 if (dev->model && dev->model->allocated)
330 free (dev->model);
332 dev->model = model;
355 gt68xx_device_activate (GT68xx_Device * dev)
358 CHECK_DEV_OPEN (dev, "gt68xx_device_activate");
359 if (dev->active)
365 if (!gt68xx_device_is_configured (dev))
371 DBG (7, "gt68xx_device_activate: model \"%s\"\n", dev->model->name);
372 if (dev->model->command_set->activate)
374 status = (*dev->model->command_set->activate) (dev);
382 dev->afe = malloc (sizeof (*dev->afe));
383 dev->exposure = malloc (sizeof (*dev->exposure));
384 if (!dev->afe || !dev->exposure)
386 memcpy (dev->afe, &dev->model->afe_params, sizeof (*dev->afe));
387 memcpy (dev->exposure, &dev->model->exposure, sizeof (*dev->exposure));
388 dev->gamma_value = dev->model->default_gamma_value;
389 dev->active = SANE_TRUE;
394 gt68xx_device_deactivate (GT68xx_Device * dev)
397 CHECK_DEV_ACTIVE (dev, "gt68xx_device_deactivate");
398 if (dev->read_active)
399 gt68xx_device_read_finish (dev);
400 if (dev->model->command_set->deactivate)
402 status = (*dev->model->command_set->deactivate) (dev);
411 if (dev->afe)
412 free (dev->afe);
413 dev->afe = 0;
414 if (dev->exposure)
415 free (dev->exposure);
416 dev->exposure = 0;
417 dev->active = SANE_FALSE;
422 gt68xx_device_memory_write (GT68xx_Device * dev,
427 "gt68xx_device_memory_write: dev=%p, addr=0x%x, size=0x%x, data=%p\n",
428 (void *) dev, addr, size, (void *) data);
429 CHECK_DEV_ACTIVE (dev, "gt68xx_device_memory_write");
431 sanei_usb_control_msg (dev->fd, 0x40,
432 dev->model->command_set->request,
433 dev->model->command_set->memory_write_value,
445 gt68xx_device_memory_read (GT68xx_Device * dev,
450 "gt68xx_device_memory_read: dev=%p, addr=0x%x, size=0x%x, data=%p\n",
451 (void *) dev, addr, size, (void *) data);
452 CHECK_DEV_ACTIVE (dev, "gt68xx_device_memory_read");
454 sanei_usb_control_msg (dev->fd, 0xc0,
455 dev->model->command_set->request,
456 dev->model->command_set->memory_read_value,
469 gt68xx_device_generic_req (GT68xx_Device * dev,
479 CHECK_DEV_ACTIVE (dev, "gt68xx_device_generic_req");
480 status = sanei_usb_control_msg (dev->fd,
491 status = sanei_usb_control_msg (dev->fd,
506 gt68xx_device_req (GT68xx_Device * dev, GT68xx_Packet cmd, GT68xx_Packet res)
508 GT68xx_Command_Set *command_set = dev->model->command_set;
509 return gt68xx_device_generic_req (dev,
520 gt68xx_device_small_req (GT68xx_Device * dev, GT68xx_Packet cmd,
523 GT68xx_Command_Set *command_set = dev->model->command_set;
528 return gt68xx_device_generic_req (dev,
540 gt68xx_device_download_firmware (GT68xx_Device * dev,
543 CHECK_DEV_ACTIVE (dev, "gt68xx_device_download_firmware");
544 if (dev->model->command_set->download_firmware)
545 return (*dev->model->command_set->download_firmware) (dev, data, size);
551 gt68xx_device_get_power_status (GT68xx_Device * dev, SANE_Bool * power_ok)
553 CHECK_DEV_ACTIVE (dev, "gt68xx_device_get_power_status");
554 if (dev->model->command_set->get_power_status)
555 return (*dev->model->command_set->get_power_status) (dev, power_ok);
561 gt68xx_device_get_ta_status (GT68xx_Device * dev, SANE_Bool * ta_attached)
563 CHECK_DEV_ACTIVE (dev, "gt68xx_device_get_ta_status");
564 if (dev->model->command_set->get_ta_status)
565 return (*dev->model->command_set->get_ta_status) (dev, ta_attached);
571 gt68xx_device_lamp_control (GT68xx_Device * dev, SANE_Bool fb_lamp,
574 CHECK_DEV_ACTIVE (dev, "gt68xx_device_lamp_control");
575 if (dev->model->command_set->lamp_control)
576 return (*dev->model->command_set->lamp_control) (dev, fb_lamp, ta_lamp);
582 gt68xx_device_is_moving (GT68xx_Device * dev, SANE_Bool * moving)
584 CHECK_DEV_ACTIVE (dev, "gt68xx_device_is_moving");
585 if (dev->model->command_set->is_moving)
586 return (*dev->model->command_set->is_moving) (dev, moving);
594 gt68xx_device_move_relative (GT68xx_Device * dev, SANE_Int distance)
596 CHECK_DEV_ACTIVE (dev, "gt68xx_device_move_relative");
597 if (dev->model->command_set->move_relative)
598 return (*dev->model->command_set->move_relative) (dev, distance);
605 gt68xx_device_carriage_home (GT68xx_Device * dev)
607 CHECK_DEV_ACTIVE (dev, "gt68xx_device_carriage_home");
608 if (dev->model->command_set->carriage_home)
609 return (*dev->model->command_set->carriage_home) (dev);
615 gt68xx_device_paperfeed (GT68xx_Device * dev)
617 CHECK_DEV_ACTIVE (dev, "gt68xx_device_paperfeed");
618 if (dev->model->command_set->paperfeed)
619 return (*dev->model->command_set->paperfeed) (dev);
625 gt68xx_device_start_scan (GT68xx_Device * dev)
627 CHECK_DEV_ACTIVE (dev, "gt68xx_device_start_scan");
628 if (dev->model->command_set->start_scan)
630 if (!dev->scan_started)
632 dev->scan_started = SANE_TRUE;
633 return (*dev->model->command_set->start_scan) (dev);
642 gt68xx_device_read_scanned_data (GT68xx_Device * dev, SANE_Bool * ready)
644 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read_scanned_data");
645 if (dev->model->command_set->read_scanned_data)
646 return (*dev->model->command_set->read_scanned_data) (dev, ready);
652 gt68xx_device_setup_scan (GT68xx_Device * dev,
657 CHECK_DEV_ACTIVE (dev, "gt68xx_device_setup_scan");
658 if (dev->model->command_set->setup_scan)
659 return (*dev->model->command_set->setup_scan) (dev, request, action,
666 gt68xx_device_set_afe (GT68xx_Device * dev, GT68xx_AFE_Parameters * params)
668 CHECK_DEV_ACTIVE (dev, "gt68xx_device_set_afe");
669 if (dev->model->command_set->set_afe)
670 return (*dev->model->command_set->set_afe) (dev, params);
676 gt68xx_device_set_exposure_time (GT68xx_Device * dev,
679 CHECK_DEV_ACTIVE (dev, "gt68xx_device_set_exposure_time");
680 if (dev->model->command_set->set_exposure_time)
681 return (*dev->model->command_set->set_exposure_time) (dev, params);
687 gt68xx_device_stop_scan (GT68xx_Device * dev)
689 CHECK_DEV_ACTIVE (dev, "gt68xx_device_stop_scan");
690 if (dev->model->command_set->stop_scan)
692 if (dev->scan_started)
694 dev->scan_started = SANE_FALSE;
695 return (*dev->model->command_set->stop_scan) (dev);
704 gt68xx_device_read_raw (GT68xx_Device * dev, SANE_Byte * buffer,
708 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read_raw");
710 status = sanei_usb_read_bulk (dev->fd, buffer, size);
722 gt68xx_device_set_read_buffer_size (GT68xx_Device * dev, size_t buffer_size)
724 CHECK_DEV_NOT_NULL (dev, "gt68xx_device_set_read_buffer_size");
725 if (dev->read_active)
735 dev->requested_buffer_size = buffer_size;
744 gt68xx_device_read_prepare (GT68xx_Device * dev,
748 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read_prepare");
749 if (dev->read_active)
756 buffer_size = dev->requested_buffer_size;
765 dev->read_buffer_size = buffer_size;
766 dev->read_buffer = (SANE_Byte *) malloc (buffer_size);
767 if (!dev->read_buffer)
775 dev->read_active = SANE_TRUE;
776 dev->final_scan = final_scan;
777 dev->read_pos = dev->read_bytes_in_buffer = 0;
778 dev->read_bytes_left = expected_count;
785 gt68xx_reader_process (GT68xx_Device * dev)
792 size_t read_bytes_left = dev->read_bytes_left;
793 shm_channel_writer_init (dev->shm_channel);
796 status = shm_channel_writer_get_buffer (dev->shm_channel,
801 size = dev->read_buffer_size;
805 status = gt68xx_device_read_raw (dev, buffer_addr, &size);
812 shm_channel_writer_put_buffer (dev->shm_channel, buffer_id, size);
823 shm_channel_writer_close (dev->shm_channel);
828 gt68xx_device_read_start_fork (GT68xx_Device * dev)
832 if (dev->shm_channel)
840 shm_channel_new (dev->read_buffer_size, SHM_BUFFERS, &dev->shm_channel);
846 dev->shm_channel = NULL;
855 shm_channel_free (dev->shm_channel);
856 dev->shm_channel = NULL;
863 status = gt68xx_reader_process (dev);
869 dev->reader_pid = pid;
870 shm_channel_reader_init (dev->shm_channel);
871 shm_channel_reader_start (dev->shm_channel);
880 gt68xx_device_read_start (GT68xx_Device * dev)
882 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read_start");
885 if (dev->final_scan)
886 return gt68xx_device_read_start_fork (dev);
892 gt68xx_device_read (GT68xx_Device * dev, SANE_Byte * buffer, size_t * size)
903 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read");
904 if (!dev->read_active)
912 if (dev->read_bytes_in_buffer == 0)
914 block_size = dev->read_buffer_size;
915 if (block_size > dev->read_bytes_left)
916 block_size = dev->read_bytes_left;
923 if (dev->shm_channel)
925 status = shm_channel_reader_get_buffer (dev->shm_channel,
932 memcpy (dev->read_buffer, buffer_addr, buffer_bytes);
933 shm_channel_reader_put_buffer (dev->shm_channel, buffer_id);
939 status = gt68xx_device_read_raw (dev, dev->read_buffer,
946 dev->read_pos = 0;
947 dev->read_bytes_in_buffer = block_size;
948 dev->read_bytes_left -= block_size;
952 if (transfer_size > dev->read_bytes_in_buffer)
953 transfer_size = dev->read_bytes_in_buffer;
956 memcpy (buffer, dev->read_buffer + dev->read_pos, transfer_size);
957 dev->read_pos += transfer_size;
958 dev->read_bytes_in_buffer -= transfer_size;
973 gt68xx_device_read_finish (GT68xx_Device * dev)
976 CHECK_DEV_ACTIVE (dev, "gt68xx_device_read_finish");
977 if (!dev->read_active)
984 (long) dev->read_bytes_left);
986 if (dev->reader_pid != 0)
991 kill (dev->reader_pid, SIGKILL);
992 waitpid (dev->reader_pid, &pid_status, 0);
996 dev->reader_pid = 0;
998 if (dev->shm_channel)
1000 shm_channel_free (dev->shm_channel);
1001 dev->shm_channel = NULL;
1006 free (dev->read_buffer);
1007 dev->read_buffer = NULL;
1008 dev->read_active = SANE_FALSE;
1031 gt68xx_device_get_id (GT68xx_Device * dev)
1033 CHECK_DEV_ACTIVE (dev, "gt68xx_device_get_id");
1034 if (dev->model->command_set->get_id)
1035 return (*dev->model->command_set->get_id) (dev);
1041 gt68xx_device_fix_descriptor (GT68xx_Device * dev)
1044 sanei_usb_control_msg (dev->fd, 0x80, 0x06, 0x01 << 8, 0, 8, data);