Lines Matching refs:session

303  * Called to establish connection with the session. This function will
323 struct P5_Session *session = NULL;
402 session = (P5_Session *) malloc (sizeof (P5_Session));
403 if (session == NULL)
409 /* initialize session */
410 session->dev = device;
411 session->scanning = SANE_FALSE;
412 session->non_blocking = SANE_FALSE;
414 /* initialize SANE options for this session */
415 init_options (session);
418 session->next = sessions;
419 sessions = session;
422 *handle = session;
437 P5_Session *session = (P5_Session *) handle;
440 if (session->scanning != SANE_TRUE)
445 session->non_blocking = non_blocking;
488 struct P5_Session *session = handle;
496 session->options[option].descriptor.name);
499 return &(session->options[option].descriptor);
810 * @param handle opaque handle to a frontend session
812 * in use by another session or SANE_STATUS_WARMING_UP if the device is
819 struct P5_Session *session = handle;
821 P5_Device *dev = session->dev;
826 if (session->scanning == SANE_TRUE)
849 compute_parameters (session);
891 session->scanning = SANE_TRUE;
892 session->sent = 0;
894 DBG (DBG_io, "sane_start: to_send=%d\n", session->to_send);
908 * @param session fronted session to compute final scan parameters
912 compute_parameters (P5_Session * session)
914 P5_Device *dev = session->dev;
921 mode = session->options[OPT_MODE].value.s;
922 dpi = session->options[OPT_RESOLUTION].value.w;
925 tl_x = SANE_UNFIX (session->options[OPT_TL_X].value.w);
926 tl_y = SANE_UNFIX (session->options[OPT_TL_Y].value.w);
927 br_x = SANE_UNFIX (session->options[OPT_BR_X].value.w);
928 br_y = SANE_UNFIX (session->options[OPT_BR_Y].value.w);
931 session->params.last_frame = SANE_TRUE;
936 session->params.format = SANE_FRAME_GRAY;
942 session->params.format = SANE_FRAME_GRAY;
949 session->params.format = SANE_FRAME_RGB;
955 session->params.lines = ((br_y - tl_y) * dpi) / MM_PER_INCH;
956 if (session->params.lines == 0)
957 session->params.lines = 1;
958 session->params.pixels_per_line = ((br_x - tl_x) * dpi) / MM_PER_INCH;
959 if (session->params.pixels_per_line == 0)
960 session->params.pixels_per_line = 1;
963 session->params.pixels_per_line);
967 session->params.depth = 1;
971 session->params.pixels_per_line =
972 ((session->params.pixels_per_line + 7) / 8) * 8;
975 session->params.depth = 8;
978 if (session->params.pixels_per_line & 1)
979 session->params.pixels_per_line++;
984 dev->lines = session->params.lines;
985 dev->pixels = session->params.pixels_per_line;
1000 session->params.lines =
1001 (session->params.lines / dev->lines) * dev->lines;
1002 if (session->params.lines == 0)
1003 session->params.lines = 1;
1023 session->params.bytes_per_line = session->params.pixels_per_line;
1025 if (session->params.format == SANE_FRAME_RGB)
1033 if (session->params.depth == 1)
1035 session->params.bytes_per_line =
1036 (session->params.bytes_per_line + 7) / 8;
1039 session->params.bytes_per_line = dev->bytes_per_line;
1040 session->to_send = session->params.bytes_per_line * session->params.lines;
1041 session->params.bytes_per_line = dev->bytes_per_line;
1044 session->params.bytes_per_line);
1046 session->params.depth);
1048 session->params.lines);
1050 session->to_send);
1086 struct P5_Session *session = (struct P5_Session *) handle;
1091 status = compute_parameters (session);
1093 *params = session->params;
1120 struct P5_Session *session = (struct P5_Session *) handle;
1121 struct P5_Device *dev = session->dev;
1132 if (!session)
1153 /* check if session is scanning */
1154 if (!session->scanning)
1162 if (session->sent >= session->to_send)
1178 if (count < dev->bytes_per_line && session->non_blocking == SANE_TRUE)
1192 session->to_send = session->sent;
1207 if (session->to_send - session->sent < size)
1210 size = session->to_send - session->sent;
1300 session->sent += *len;
1353 P5_Session *session = handle;
1358 if (session->scanning == SANE_TRUE)
1362 if (session->sent < session->to_send)
1372 session->scanning = SANE_FALSE;
1374 eject (session->dev->fd);
1381 * Ends use of the session.
1396 P5_Session *prev, *session;
1402 for (session = sessions; session; session = session->next)
1404 if (session == handle)
1406 prev = session;
1408 if (!session)
1415 if (session->scanning == SANE_TRUE)
1421 prev->next = session->next;
1423 sessions = session->next;
1426 if (session->dev->initialized == SANE_TRUE)
1428 if (session->dev->calibrated == SANE_TRUE)
1430 save_calibration (session->dev);
1432 disconnect (session->dev->fd);
1433 close_pp (session->dev->fd);
1434 session->dev->fd = -1;
1435 session->dev->initialized = SANE_FALSE;
1438 if (session->dev->buffer != NULL)
1440 free (session->dev->buffer);
1442 if (session->dev->buffer != NULL)
1444 free (session->dev->gain);
1445 free (session->dev->offset);
1447 if (session->dev->calibrated == SANE_TRUE)
1449 cleanup_calibration (session->dev);
1453 /* free per session data */
1454 free (session->options[OPT_MODE].value.s);
1455 free ((void *)session->options[OPT_RESOLUTION].descriptor.constraint.word_list);
1457 free (session);
1480 struct P5_Session *session, *next;
1495 /* free session structs */
1496 for (session = sessions; session; session = next)
1498 next = session->next;
1499 sane_close ((SANE_Handle *) session);
1500 free (session);
1683 /* with the new session struct */
1699 * @param session scanner session to initialize options
1703 init_options (struct P5_Session *session)
1707 P5_Model *model = session->dev->model;
1712 memset (session->options, 0, sizeof (session->options[OPT_NUM_OPTS]));
1715 session->options[option].descriptor.size = sizeof (SANE_Word);
1716 session->options[option].descriptor.cap =
1723 session->options[OPT_NUM_OPTS].descriptor.name = SANE_NAME_NUM_OPTIONS;
1724 session->options[OPT_NUM_OPTS].descriptor.title = SANE_TITLE_NUM_OPTIONS;
1725 session->options[OPT_NUM_OPTS].descriptor.desc = SANE_DESC_NUM_OPTIONS;
1726 session->options[OPT_NUM_OPTS].descriptor.type = SANE_TYPE_INT;
1727 session->options[OPT_NUM_OPTS].descriptor.cap = SANE_CAP_SOFT_DETECT;
1728 session->options[OPT_NUM_OPTS].value.w = NUM_OPTIONS;
1731 session->options[OPT_STANDARD_GROUP].descriptor.title = SANE_TITLE_STANDARD;
1732 session->options[OPT_STANDARD_GROUP].descriptor.name = SANE_NAME_STANDARD;
1733 session->options[OPT_STANDARD_GROUP].descriptor.desc = SANE_DESC_STANDARD;
1734 session->options[OPT_STANDARD_GROUP].descriptor.type = SANE_TYPE_GROUP;
1735 session->options[OPT_STANDARD_GROUP].descriptor.size = 0;
1736 session->options[OPT_STANDARD_GROUP].descriptor.cap = 0;
1737 session->options[OPT_STANDARD_GROUP].descriptor.constraint_type =
1741 session->options[OPT_MODE].descriptor.name = SANE_NAME_SCAN_MODE;
1742 session->options[OPT_MODE].descriptor.title = SANE_TITLE_SCAN_MODE;
1743 session->options[OPT_MODE].descriptor.desc = SANE_DESC_SCAN_MODE;
1744 session->options[OPT_MODE].descriptor.type = SANE_TYPE_STRING;
1745 session->options[OPT_MODE].descriptor.cap |= SANE_CAP_AUTOMATIC;
1746 session->options[OPT_MODE].descriptor.constraint_type =
1748 session->options[OPT_MODE].descriptor.size = max_string_size (mode_list);
1749 session->options[OPT_MODE].descriptor.constraint.string_list = mode_list;
1750 session->options[OPT_MODE].value.s = strdup (mode_list[0]);
1753 session->options[OPT_PREVIEW].descriptor.name = SANE_NAME_PREVIEW;
1754 session->options[OPT_PREVIEW].descriptor.title = SANE_TITLE_PREVIEW;
1755 session->options[OPT_PREVIEW].descriptor.desc = SANE_DESC_PREVIEW;
1756 session->options[OPT_PREVIEW].descriptor.type = SANE_TYPE_BOOL;
1757 session->options[OPT_PREVIEW].descriptor.cap |= SANE_CAP_AUTOMATIC;
1758 session->options[OPT_PREVIEW].descriptor.unit = SANE_UNIT_NONE;
1759 session->options[OPT_PREVIEW].descriptor.constraint_type =
1761 session->options[OPT_PREVIEW].value.w = SANE_FALSE;
1823 session->options[OPT_RESOLUTION].descriptor.name =
1825 session->options[OPT_RESOLUTION].descriptor.title =
1827 session->options[OPT_RESOLUTION].descriptor.desc =
1829 session->options[OPT_RESOLUTION].descriptor.type = SANE_TYPE_INT;
1830 session->options[OPT_RESOLUTION].descriptor.cap |= SANE_CAP_AUTOMATIC;
1831 session->options[OPT_RESOLUTION].descriptor.unit = SANE_UNIT_DPI;
1832 session->options[OPT_RESOLUTION].descriptor.constraint_type =
1834 session->options[OPT_RESOLUTION].descriptor.constraint.word_list = dpi_list;
1837 session->options[OPT_RESOLUTION].value.w = min;
1840 session->options[OPT_GEOMETRY_GROUP].descriptor.title = SANE_TITLE_GEOMETRY;
1841 session->options[OPT_GEOMETRY_GROUP].descriptor.name = SANE_NAME_GEOMETRY;
1842 session->options[OPT_GEOMETRY_GROUP].descriptor.desc = SANE_DESC_GEOMETRY;
1843 session->options[OPT_GEOMETRY_GROUP].descriptor.type = SANE_TYPE_GROUP;
1844 session->options[OPT_GEOMETRY_GROUP].descriptor.cap = SANE_CAP_ADVANCED;
1845 session->options[OPT_GEOMETRY_GROUP].descriptor.size = 0;
1846 session->options[OPT_GEOMETRY_GROUP].descriptor.constraint_type =
1854 session->options[OPT_TL_X].descriptor.name = SANE_NAME_SCAN_TL_X;
1855 session->options[OPT_TL_X].descriptor.title = SANE_TITLE_SCAN_TL_X;
1856 session->options[OPT_TL_X].descriptor.desc = SANE_DESC_SCAN_TL_X;
1857 session->options[OPT_TL_X].descriptor.type = SANE_TYPE_FIXED;
1858 session->options[OPT_TL_X].descriptor.cap |= SANE_CAP_AUTOMATIC;
1859 session->options[OPT_TL_X].descriptor.unit = SANE_UNIT_MM;
1860 session->options[OPT_TL_X].descriptor.constraint_type =
1862 session->options[OPT_TL_X].descriptor.constraint.range = &x_range;
1863 session->options[OPT_TL_X].value.w = 0;
1866 session->options[OPT_TL_Y].descriptor.name = SANE_NAME_SCAN_TL_Y;
1867 session->options[OPT_TL_Y].descriptor.title = SANE_TITLE_SCAN_TL_Y;
1868 session->options[OPT_TL_Y].descriptor.desc = SANE_DESC_SCAN_TL_Y;
1869 session->options[OPT_TL_Y].descriptor.type = SANE_TYPE_FIXED;
1870 session->options[OPT_TL_Y].descriptor.cap |= SANE_CAP_AUTOMATIC;
1871 session->options[OPT_TL_Y].descriptor.unit = SANE_UNIT_MM;
1872 session->options[OPT_TL_Y].descriptor.constraint_type =
1874 session->options[OPT_TL_Y].descriptor.constraint.range = &y_range;
1875 session->options[OPT_TL_Y].value.w = 0;
1878 session->options[OPT_BR_X].descriptor.name = SANE_NAME_SCAN_BR_X;
1879 session->options[OPT_BR_X].descriptor.title = SANE_TITLE_SCAN_BR_X;
1880 session->options[OPT_BR_X].descriptor.desc = SANE_DESC_SCAN_BR_X;
1881 session->options[OPT_BR_X].descriptor.type = SANE_TYPE_FIXED;
1882 session->options[OPT_BR_X].descriptor.cap |= SANE_CAP_AUTOMATIC;
1883 session->options[OPT_BR_X].descriptor.unit = SANE_UNIT_MM;
1884 session->options[OPT_BR_X].descriptor.constraint_type =
1886 session->options[OPT_BR_X].descriptor.constraint.range = &x_range;
1887 session->options[OPT_BR_X].value.w = x_range.max;
1890 session->options[OPT_BR_Y].descriptor.name = SANE_NAME_SCAN_BR_Y;
1891 session->options[OPT_BR_Y].descriptor.title = SANE_TITLE_SCAN_BR_Y;
1892 session->options[OPT_BR_Y].descriptor.desc = SANE_DESC_SCAN_BR_Y;
1893 session->options[OPT_BR_Y].descriptor.type = SANE_TYPE_FIXED;
1894 session->options[OPT_BR_Y].descriptor.cap |= SANE_CAP_AUTOMATIC;
1895 session->options[OPT_BR_Y].descriptor.unit = SANE_UNIT_MM;
1896 session->options[OPT_BR_Y].descriptor.constraint_type =
1898 session->options[OPT_BR_Y].descriptor.constraint.range = &y_range;
1899 session->options[OPT_BR_Y].value.w = y_range.max;
1902 session->options[OPT_SENSOR_GROUP].descriptor.name = SANE_NAME_SENSORS;
1903 session->options[OPT_SENSOR_GROUP].descriptor.title = SANE_TITLE_SENSORS;
1904 session->options[OPT_SENSOR_GROUP].descriptor.desc = SANE_DESC_SENSORS;
1905 session->options[OPT_SENSOR_GROUP].descriptor.type = SANE_TYPE_GROUP;
1906 session->options[OPT_SENSOR_GROUP].descriptor.constraint_type =
1910 session->options[OPT_PAGE_LOADED_SW].descriptor.name =
1912 session->options[OPT_PAGE_LOADED_SW].descriptor.title =
1914 session->options[OPT_PAGE_LOADED_SW].descriptor.desc =
1916 session->options[OPT_PAGE_LOADED_SW].descriptor.type = SANE_TYPE_BOOL;
1917 session->options[OPT_PAGE_LOADED_SW].descriptor.unit = SANE_UNIT_NONE;
1918 session->options[OPT_PAGE_LOADED_SW].descriptor.cap =
1920 session->options[OPT_PAGE_LOADED_SW].value.b = 0;
1923 session->options[OPT_NEED_CALIBRATION_SW].descriptor.name =
1925 session->options[OPT_NEED_CALIBRATION_SW].descriptor.title =
1927 session->options[OPT_NEED_CALIBRATION_SW].descriptor.desc =
1929 session->options[OPT_NEED_CALIBRATION_SW].descriptor.type = SANE_TYPE_BOOL;
1930 session->options[OPT_NEED_CALIBRATION_SW].descriptor.unit = SANE_UNIT_NONE;
1931 session->options[OPT_NEED_CALIBRATION_SW].descriptor.cap =
1933 session->options[OPT_NEED_CALIBRATION_SW].value.b = 0;
1936 session->options[OPT_BUTTON_GROUP].descriptor.name = "Buttons";
1937 session->options[OPT_BUTTON_GROUP].descriptor.title = SANE_I18N ("Buttons");
1938 session->options[OPT_BUTTON_GROUP].descriptor.desc = SANE_I18N ("Buttons");
1939 session->options[OPT_BUTTON_GROUP].descriptor.type = SANE_TYPE_GROUP;
1940 session->options[OPT_BUTTON_GROUP].descriptor.constraint_type =
1944 session->options[OPT_CALIBRATE].descriptor.name = "calibrate";
1945 session->options[OPT_CALIBRATE].descriptor.title = SANE_I18N ("Calibrate");
1946 session->options[OPT_CALIBRATE].descriptor.desc =
1948 session->options[OPT_CALIBRATE].descriptor.type = SANE_TYPE_BUTTON;
1949 session->options[OPT_CALIBRATE].descriptor.unit = SANE_UNIT_NONE;
1950 session->options[OPT_CALIBRATE].descriptor.cap =
1953 session->options[OPT_CALIBRATE].value.b = 0;
1956 session->options[OPT_CLEAR_CALIBRATION].descriptor.name = "clear";
1957 session->options[OPT_CLEAR_CALIBRATION].descriptor.title =
1959 session->options[OPT_CLEAR_CALIBRATION].descriptor.desc =
1961 session->options[OPT_CLEAR_CALIBRATION].descriptor.type = SANE_TYPE_BUTTON;
1962 session->options[OPT_CLEAR_CALIBRATION].descriptor.unit = SANE_UNIT_NONE;
1963 session->options[OPT_CLEAR_CALIBRATION].descriptor.cap =
1966 session->options[OPT_CLEAR_CALIBRATION].value.b = 0;