Lines Matching full:dev
172 do_cancel(struct device_s *dev);
211 struct device_s *dev; in attach() local
213 dev = malloc (sizeof (struct device_s)); in attach()
214 if (!dev) in attach()
216 memset (dev, 0, sizeof (struct device_s)); in attach()
218 dev->devname = devname; in attach()
219 DBG(1,"New device found: %s\n",dev->devname); in attach()
223 dev->optiond[0].name = ""; in attach()
224 dev->optiond[0].title = NULL; in attach()
225 dev->optiond[0].desc = NULL; in attach()
226 dev->optiond[0].type = SANE_TYPE_INT; in attach()
227 dev->optiond[0].unit = SANE_UNIT_NONE; in attach()
228 dev->optiond[0].size = sizeof (SANE_Word); in attach()
229 dev->optionw[0] = OPTION_MAX; in attach()
232 dev->optiond[RES_OFFSET].name = "resolution"; in attach()
233 dev->optiond[RES_OFFSET].title = "resolution"; in attach()
234 dev->optiond[RES_OFFSET].desc = "resolution"; in attach()
235 dev->optiond[RES_OFFSET].type = SANE_TYPE_INT; in attach()
236 dev->optiond[RES_OFFSET].unit = SANE_UNIT_DPI; in attach()
237 dev->optiond[RES_OFFSET].type = SANE_TYPE_INT; in attach()
238 dev->optiond[RES_OFFSET].size = sizeof (SANE_Word); in attach()
239 dev->optiond[RES_OFFSET].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in attach()
240 dev->optiond[RES_OFFSET].constraint_type = SANE_CONSTRAINT_WORD_LIST; in attach()
241 dev->optiond[RES_OFFSET].constraint.word_list = resolution_list; in attach()
242 dev->optionw[RES_OFFSET] = 75; in attach()
245 dev->optiond[X1_OFFSET].name = "tl-x"; in attach()
246 dev->optiond[X1_OFFSET].title = "tl-x"; in attach()
247 dev->optiond[X1_OFFSET].desc = "tl-x"; in attach()
248 dev->optiond[X1_OFFSET].type = SANE_TYPE_INT; in attach()
249 dev->optiond[X1_OFFSET].unit = SANE_UNIT_MM; in attach()
250 dev->optiond[X1_OFFSET].size = sizeof (SANE_Word); in attach()
251 dev->optiond[X1_OFFSET].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in attach()
252 dev->optiond[X1_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
253 dev->optiond[X1_OFFSET].constraint.range = &range_x; in attach()
254 dev->optionw[X1_OFFSET] = 0; in attach()
256 dev->optiond[Y1_OFFSET].name = "tl-y"; in attach()
257 dev->optiond[Y1_OFFSET].title = "tl-y"; in attach()
258 dev->optiond[Y1_OFFSET].desc = "tl-y"; in attach()
259 dev->optiond[Y1_OFFSET].type = SANE_TYPE_INT; in attach()
260 dev->optiond[Y1_OFFSET].unit = SANE_UNIT_MM; in attach()
261 dev->optiond[Y1_OFFSET].size = sizeof (SANE_Word); in attach()
262 dev->optiond[Y1_OFFSET].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in attach()
263 dev->optiond[Y1_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
264 dev->optiond[Y1_OFFSET].constraint.range = &range_y; in attach()
265 dev->optionw[Y1_OFFSET] = 0; in attach()
267 dev->optiond[X2_OFFSET].name = "br-x"; in attach()
268 dev->optiond[X2_OFFSET].title = "br-x"; in attach()
269 dev->optiond[X2_OFFSET].desc = "br-x"; in attach()
270 dev->optiond[X2_OFFSET].type = SANE_TYPE_INT; in attach()
271 dev->optiond[X2_OFFSET].unit = SANE_UNIT_MM; in attach()
272 dev->optiond[X2_OFFSET].size = sizeof (SANE_Word); in attach()
273 dev->optiond[X2_OFFSET].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in attach()
274 dev->optiond[X2_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
275 dev->optiond[X2_OFFSET].constraint.range = &range_x; in attach()
276 dev->optionw[X2_OFFSET] = MAX_X_S; in attach()
278 dev->optiond[Y2_OFFSET].name = "br-y"; in attach()
279 dev->optiond[Y2_OFFSET].title = "br-y"; in attach()
280 dev->optiond[Y2_OFFSET].desc = "br-y"; in attach()
281 dev->optiond[Y2_OFFSET].type = SANE_TYPE_INT; in attach()
282 dev->optiond[Y2_OFFSET].unit = SANE_UNIT_MM; in attach()
283 dev->optiond[Y2_OFFSET].size = sizeof (SANE_Word); in attach()
284 dev->optiond[Y2_OFFSET].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; in attach()
285 dev->optiond[Y2_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
286 dev->optiond[Y2_OFFSET].constraint.range = &range_y; in attach()
287 dev->optionw[Y2_OFFSET] = MAX_Y_S; in attach()
290 dev->optiond[BRIGH_OFFSET].name = "brightness"; in attach()
291 dev->optiond[BRIGH_OFFSET].title = "Brightness"; in attach()
292 dev->optiond[BRIGH_OFFSET].desc = "Set the brightness"; in attach()
293 dev->optiond[BRIGH_OFFSET].type = SANE_TYPE_INT; in attach()
294 dev->optiond[BRIGH_OFFSET].unit = SANE_UNIT_NONE; in attach()
295 dev->optiond[BRIGH_OFFSET].size = sizeof (SANE_Word); in attach()
296 dev->optiond[BRIGH_OFFSET].cap = in attach()
298 dev->optiond[BRIGH_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
299 dev->optiond[BRIGH_OFFSET].constraint.range = &range_br_cont; in attach()
300 dev->optionw[BRIGH_OFFSET] = 0x6; in attach()
303 dev->optiond[CONTR_OFFSET].name = "contrast"; in attach()
304 dev->optiond[CONTR_OFFSET].title = "Contrast"; in attach()
305 dev->optiond[CONTR_OFFSET].desc = "Set the contrast"; in attach()
306 dev->optiond[CONTR_OFFSET].type = SANE_TYPE_INT; in attach()
307 dev->optiond[CONTR_OFFSET].unit = SANE_UNIT_NONE; in attach()
308 dev->optiond[CONTR_OFFSET].size = sizeof (SANE_Word); in attach()
309 dev->optiond[CONTR_OFFSET].cap = in attach()
311 dev->optiond[CONTR_OFFSET].constraint_type = SANE_CONSTRAINT_RANGE; in attach()
312 dev->optiond[CONTR_OFFSET].constraint.range = &range_br_cont; in attach()
313 dev->optionw[CONTR_OFFSET] = 0x6; in attach()
316 dev->optiond[COLOR_OFFSET].name = SANE_NAME_SCAN_MODE; in attach()
317 dev->optiond[COLOR_OFFSET].title = SANE_TITLE_SCAN_MODE; in attach()
318 dev->optiond[COLOR_OFFSET].desc = SANE_DESC_SCAN_MODE; in attach()
319 dev->optiond[COLOR_OFFSET].type = SANE_TYPE_STRING; in attach()
320 dev->optiond[COLOR_OFFSET].size = max_string_size (mode_list); in attach()
321 dev->optiond[COLOR_OFFSET].cap = in attach()
323 dev->optiond[COLOR_OFFSET].constraint_type = SANE_CONSTRAINT_STRING_LIST; in attach()
324 dev->optiond[COLOR_OFFSET].constraint.string_list = mode_list; in attach()
325 dev->optionw[COLOR_OFFSET] = RGB; in attach()
326 dev->dn = 0; in attach()
327 dev->idx = cur_idx; in attach()
328 dev->status = STATUS_IDLE; in attach()
330 dev->next = devlist_head; in attach()
331 devlist_head = dev; in attach()
449 struct device_s *dev; in sane_open() local
455 dev = devlist_head; in sane_open()
458 for (; dev; dev = dev->next) in sane_open()
459 if (!strcmp (name, dev->devname)) in sane_open()
462 if (!dev) { in sane_open()
470 ret = sanei_usb_open (name, &(dev->dn)); in sane_open()
477 ret = sanei_usb_claim_interface (dev->dn, 0); in sane_open()
480 sanei_usb_close (dev->dn); in sane_open()
490 *h = dev; in sane_open()
498 struct device_s *dev = (struct device_s *) h; in sane_close() local
503 if (dev->status == STATUS_CANCELING) in sane_close()
505 do_cancel(dev); in sane_close()
508 sanei_usb_release_interface (dev->dn, 0); in sane_close()
509 sanei_usb_close (dev->dn); in sane_close()
516 struct device_s *dev = (struct device_s *) h; in sane_get_option_descriptor() local
520 return &(dev->optiond[option]); in sane_get_option_descriptor()
526 struct device_s *dev = (struct device_s *) h; in getvalue() local
529 *((SANE_Word *) v) = dev->optionw[option]; in getvalue()
533 dev->optiond[option].constraint.string_list[dev-> in getvalue()
542 struct device_s *dev = (struct device_s *) h; in setvalue() local
551 status = sanei_constrain_value (&(dev->optiond[option]), value, info); in setvalue()
563 dev->optionw[option] = *((SANE_Word *) value); in setvalue()
564 s_unit = (int) round2 ((dev->optionw[option] / ((double) MAX_X_S)) in setvalue()
566 s_unit_2 = (int) round2 ((dev->optionw[X2_OFFSET] / ((double) MAX_X_S)) in setvalue()
570 dev->optionw[option] = round2 ((s_unit / ((double) MAX_X_H)) * MAX_X_S); in setvalue()
578 dev->optionw[option] = *((SANE_Word *) value); in setvalue()
580 s_unit = (int) round2 ((dev->optionw[option] / ((double) MAX_X_S)) in setvalue()
582 s_unit_2 = (int) round2 ((dev->optionw[X1_OFFSET] / ((double) MAX_X_S)) in setvalue()
586 dev->optionw[option] = round2 ((s_unit / ((double) MAX_X_H)) * MAX_X_S); in setvalue()
592 dev->optionw[option] = *((SANE_Word *) value); in setvalue()
594 s_unit = (int) round2 ((dev->optionw[option] / ((double) MAX_Y_S)) in setvalue()
597 s_unit_2 = (int) round2 ((dev->optionw[Y2_OFFSET] / ((double) MAX_Y_S)) in setvalue()
602 dev->optionw[option] = round2 ((s_unit / ((double) MAX_Y_H)) * MAX_Y_S); in setvalue()
608 dev->optionw[option] = *((SANE_Word *) value); in setvalue()
610 s_unit = (int) round2 ((dev->optionw[option] / ((double) MAX_Y_S)) in setvalue()
613 s_unit_2 = (int) round2 ((dev->optionw[Y1_OFFSET] / ((double) MAX_Y_S)) in setvalue()
618 dev->optionw[option] = round2 ((s_unit / ((double) MAX_Y_H)) * MAX_Y_S); in setvalue()
624 dev->optionw[option] = GRAY; /* Gray */ in setvalue()
626 dev->optionw[option] = RGB; /* RGB */ in setvalue()
631 dev->optionw[option] = *((SANE_Word *) value); in setvalue()
664 struct device_s *dev = (struct device_s *) h; in sane_get_parameters() local
670 dev->optionw[COLOR_OFFSET] == RGB ? SANE_FRAME_RGB : SANE_FRAME_GRAY; in sane_get_parameters()
674 p->pixels_per_line = dev->width; in sane_get_parameters()
675 p->lines = dev->height; in sane_get_parameters()
684 send_pkt (int command, int data_size, struct device_s *dev) in send_pkt() argument
688 DBG(100,"Sending packet %d, next data size %d, device %s\n", command, data_size, dev->devname); in send_pkt()
690 memset (dev->packet_data, 0, size); in send_pkt()
691 dev->packet_data[0] = htonl (MAGIC_NUMBER); in send_pkt()
692 dev->packet_data[1] = htonl (command); in send_pkt()
693 dev->packet_data[5] = htonl (data_size); in send_pkt()
694 sanei_usb_write_bulk (dev->dn, (unsigned char *) dev->packet_data, &size); in send_pkt()
701 wait_ack (struct device_s *dev, int *s) in wait_ack() argument
705 DBG(100, "Waiting scanner answer on device %s\n",dev->devname); in wait_ack()
710 sanei_usb_read_bulk (dev->dn, (unsigned char *) dev->packet_data, in wait_ack()
715 *s = ntohl (dev->packet_data[4]); in wait_ack()
716 return ntohl (dev->packet_data[5]); in wait_ack()
720 send_conf (struct device_s *dev) in send_conf() argument
724 DBG(100,"Sending configuration packet on device %s\n",dev->devname); in send_conf()
725 y1 = (int) round2 ((dev->optionw[Y1_OFFSET] / ((double) MAX_Y_S)) * MAX_Y_H); in send_conf()
726 y2 = (int) round2 ((dev->optionw[Y2_OFFSET] / ((double) MAX_Y_S)) * MAX_Y_H); in send_conf()
727 x1 = (int) round2 ((dev->optionw[X1_OFFSET] / ((double) MAX_X_S)) * MAX_X_H); in send_conf()
728 x2 = (int) round2 ((dev->optionw[X2_OFFSET] / ((double) MAX_X_S)) * MAX_X_H); in send_conf()
731 …DBG(100,"\t brightness: %d, contrast: %d\n", dev->optionw[BRIGH_OFFSET], dev->optionw[CONTR_OFFSET… in send_conf()
732 DBG(100,"\t resolution: %d\n",dev->optionw[RES_OFFSET]); in send_conf()
734 dev->conf_data[0] = htonl (0x15); in send_conf()
735 dev->conf_data[1] = htonl (dev->optionw[BRIGH_OFFSET]); in send_conf()
736 dev->conf_data[2] = htonl (dev->optionw[CONTR_OFFSET]); in send_conf()
737 dev->conf_data[3] = htonl (dev->optionw[RES_OFFSET]); in send_conf()
738 dev->conf_data[4] = htonl (0x1); in send_conf()
739 dev->conf_data[5] = htonl (0x1); in send_conf()
740 dev->conf_data[6] = htonl (0x1); in send_conf()
741 dev->conf_data[7] = htonl (0x1); in send_conf()
742 dev->conf_data[8] = 0; in send_conf()
743 dev->conf_data[9] = 0; in send_conf()
744 dev->conf_data[10] = htonl (0x8); in send_conf()
745 dev->conf_data[11] = 0; in send_conf()
746 dev->conf_data[12] = 0; in send_conf()
747 dev->conf_data[13] = 0; in send_conf()
748 dev->conf_data[14] = 0; in send_conf()
749 dev->conf_data[16] = htonl (y1); in send_conf()
750 dev->conf_data[17] = htonl (x1); in send_conf()
751 dev->conf_data[18] = htonl (y2); in send_conf()
752 dev->conf_data[19] = htonl (x2); in send_conf()
753 dev->conf_data[20] = 0; in send_conf()
754 dev->conf_data[21] = 0; in send_conf()
755 dev->conf_data[22] = htonl (0x491); in send_conf()
756 dev->conf_data[23] = htonl (0x352); in send_conf()
757 dev->height_h = y2 - y1; in send_conf()
758 if (dev->optionw[COLOR_OFFSET] == RGB) in send_conf()
760 dev->conf_data[15] = htonl (0x2); in send_conf()
761 dev->conf_data[24] = htonl (0x1); in send_conf()
766 dev->conf_data[15] = htonl (0x6); in send_conf()
767 dev->conf_data[24] = htonl (0x0); in send_conf()
770 sanei_usb_write_bulk (dev->dn, (unsigned char *) dev->conf_data, &size); in send_conf()
787 static SANE_Status create_buffers(struct device_s *dev, int buf_size) { in create_buffers() argument
788 if (create_buffer(&dev->buf_r, buf_size) != SANE_STATUS_GOOD) in create_buffers()
790 if (dev->optionw[COLOR_OFFSET] == RGB) in create_buffers()
792 if (create_buffer(&dev->buf_g, buf_size) != SANE_STATUS_GOOD) in create_buffers()
794 if (create_buffer(&dev->buf_b, buf_size) != SANE_STATUS_GOOD) in create_buffers()
800 static SANE_Status remove_buffers(struct device_s *dev) { in remove_buffers() argument
801 if (dev->buf_r.buffer) in remove_buffers()
802 free(dev->buf_r.buffer); in remove_buffers()
803 if (dev->buf_g.buffer) in remove_buffers()
804 free(dev->buf_g.buffer); in remove_buffers()
805 if (dev->buf_b.buffer) in remove_buffers()
806 free(dev->buf_b.buffer); in remove_buffers()
807 dev->buf_r.w_offset = dev->buf_g.w_offset = dev->buf_b.w_offset = 0; in remove_buffers()
808 dev->buf_r.size = dev->buf_g.size = dev->buf_b.size = 0; in remove_buffers()
809 dev->buf_r.buffer = dev->buf_g.buffer = dev->buf_b.buffer = NULL; in remove_buffers()
810 dev->read_offset = 0; in remove_buffers()
814 static SANE_Status get_data (struct device_s *dev) in get_data() argument
819 unsigned char *buffer = (unsigned char *) dev->packet_data; in get_data()
820 if (dev->status == STATUS_IDLE) in get_data()
829 sanei_usb_read_bulk (dev->dn, buffer, &size); in get_data()
832 if (ntohl (dev->packet_data[0]) == MAGIC_NUMBER) in get_data()
834 if (ntohl (dev->packet_data[1]) == PKT_DATA) in get_data()
836 if (ntohl (dev->packet_data[1]) == PKT_END_DATA) in get_data()
838 dev->status = STATUS_IDLE; in get_data()
839 DBG(100,"End of scan encountered on device %s\n",dev->devname); in get_data()
840 send_pkt (PKT_GO_IDLE, 0, dev); in get_data()
841 wait_ack (dev, NULL); in get_data()
842 wait_ack (dev, NULL); in get_data()
843 send_pkt (PKT_UNKNOW_1, 0, dev); in get_data()
844 wait_ack (dev, NULL); in get_data()
845 send_pkt (PKT_RESET, 0, dev); in get_data()
852 packet_size = ntohl (dev->packet_data[5]); in get_data()
853 if (! dev->buf_r.buffer) in get_data()
861 if (create_buffers(dev, buf_size) != SANE_STATUS_GOOD) in get_data()
868 sanei_usb_read_bulk (dev->dn, buffer, &size); in get_data()
870 color = ntohl (dev->packet_data[0]); in get_data()
872 dev->width = ntohl (dev->packet_data[4]); in get_data()
873 dev->height = dev->height_h * dev->optionw[RES_OFFSET] / 100; in get_data()
874 dev->data_width = ntohl (dev->packet_data[5]); in get_data()
875 … on device %s. Scan width: %d, data width: %d\n",packet_size, dev->devname, dev->width, dev->data_… in get_data()
883 ret = sanei_usb_read_bulk (dev->dn, buffer, &size); in get_data()
892 current_buf = &dev->buf_r; in get_data()
896 current_buf = &dev->buf_r; in get_data()
900 current_buf = &dev->buf_g; in get_data()
904 current_buf = &dev->buf_b; in get_data()
910 DBG(101,"Got %c layer data on device %s\n", color_char, dev->devname); in get_data()
925 struct device_s *dev = (struct device_s *) h; in sane_start() local
929 dev->read_offset = 0; in sane_start()
930 dev->scanned_pixels = 0; in sane_start()
931 remove_buffers(dev); in sane_start()
933 send_pkt (PKT_RESET, 0, dev); in sane_start()
934 send_pkt (PKT_READ_STATUS, 0, dev); in sane_start()
935 wait_ack (dev, &status); in sane_start()
939 send_pkt (PKT_READCONF, 0, dev); in sane_start()
941 if ((size = wait_ack (dev, NULL))) in sane_start()
943 sanei_usb_read_bulk (dev->dn, (unsigned char *) dev->conf_data, &size); in sane_start()
945 send_pkt (PKT_SETCONF, 100, dev); in sane_start()
946 send_conf (dev); in sane_start()
947 wait_ack (dev, NULL); in sane_start()
949 send_pkt (PKT_START_SCAN, 0, dev); in sane_start()
950 wait_ack (dev, NULL); in sane_start()
951 if ((size = wait_ack (dev, NULL))) in sane_start()
953 sanei_usb_read_bulk (dev->dn, (unsigned char *) dev->conf_data, &size); in sane_start()
955 if ((size = wait_ack (dev, NULL))) in sane_start()
957 sanei_usb_read_bulk (dev->dn, (unsigned char *) dev->conf_data, &size); in sane_start()
959 if ((size = wait_ack (dev, NULL))) in sane_start()
961 sanei_usb_read_bulk (dev->dn, (unsigned char *) dev->conf_data, &size); in sane_start()
964 dev->status = STATUS_SCANNING; in sane_start()
966 return get_data (dev); in sane_start()
971 do_cancel(struct device_s *dev) in do_cancel() argument
973 while (get_data (dev) == SANE_STATUS_GOOD); in do_cancel()
974 remove_buffers(dev); in do_cancel()
988 min_buf_w_offset (struct device_s * dev) in min_buf_w_offset() argument
990 if (dev->optionw[COLOR_OFFSET] == RGB) in min_buf_w_offset()
991 return min3 (dev->buf_r.w_offset, dev->buf_g.w_offset, dev->buf_b.w_offset); in min_buf_w_offset()
992 return dev->buf_r.w_offset; in min_buf_w_offset()
995 static int is_buf_synchronized(struct device_s * dev) { in is_buf_synchronized() argument
996 if (dev->optionw[COLOR_OFFSET] == RGB) in is_buf_synchronized()
997 return dev->buf_r.w_offset == dev->buf_g.w_offset in is_buf_synchronized()
998 && dev->buf_r.w_offset == dev->buf_b.w_offset; in is_buf_synchronized()
1005 struct device_s *dev = (struct device_s *) h; in sane_read() local
1008 if (dev->optionw[COLOR_OFFSET] == RGB) { in sane_read()
1012 if (dev->status == STATUS_IDLE) in sane_read()
1017 while (min_buf_w_offset(dev) <= dev->read_offset) in sane_read()
1019 ret = get_data (dev); in sane_read()
1022 if (min_buf_w_offset(dev) <= dev->read_offset) { in sane_read()
1027 available = min_buf_w_offset(dev); in sane_read()
1028 int pixel_len = available - dev->read_offset; in sane_read()
1031 int img_size = dev->width * dev->height; in sane_read()
1034 int pos = dev->read_offset+i; in sane_read()
1035 if (pos % dev->data_width >= dev->width) in sane_read()
1037 if (dev->scanned_pixels >= img_size) in sane_read()
1042 dev->scanned_pixels++; in sane_read()
1043 buf[(*len)++] = dev->buf_r.buffer[pos]; in sane_read()
1044 if (dev->optionw[COLOR_OFFSET] == RGB) in sane_read()
1046 buf[(*len)++] = dev->buf_g.buffer[pos]; in sane_read()
1047 buf[(*len)++] = dev->buf_b.buffer[pos]; in sane_read()
1050 DBG(101, "Moved %d pixels to buffer. Total pixel scanned: %d \n", *len, dev->scanned_pixels); in sane_read()
1051 if (dev->scanned_pixels == img_size) in sane_read()
1053 dev->read_offset += pixel_len; in sane_read()
1060 if (is_buf_synchronized(dev) && available == dev->read_offset) in sane_read()
1062 remove_buffers(dev); in sane_read()
1066 if (dev->status == STATUS_CANCELING) in sane_read()
1068 do_cancel(dev); in sane_read()
1077 struct device_s *dev = (struct device_s *) h; in sane_cancel() local
1080 if (dev->status == STATUS_SCANNING) in sane_cancel()
1082 dev->status = STATUS_CANCELING; in sane_cancel()
1086 remove_buffers(dev); in sane_cancel()