Lines Matching refs:md

231     Microtek2_Device *md;
270 md = md_first_dev;
271 while ( md )
273 status = attach(md);
278 md = md->next;
283 status = scsi_test_unit_ready(md);
288 md = md->next;
292 sd_list[index] = &md->sane;
295 md = md->next;
309 Microtek2_Device *md;
329 md = ms->dev;
330 mi = &md->info[md->scan_source];
450 Microtek2_Device *md;
492 add_device_list("/dev/scanner", &md);
493 if ( md )
494 attach(md);
507 Microtek2_Device *md;
517 md = md_first_dev;
524 status = add_device_list(name, &md);
529 if ( ! md )
536 status = attach(md);
550 ms->dev = md;
583 status = do_authorization(md->name);
688 Microtek2_Device *md;
706 md = md_first_dev;
707 while ( md )
709 if ( strcmp(hdev, md->name) == 0 )
713 *mdev = md;
716 md = md->next;
719 md = (Microtek2_Device *) malloc(sizeof(Microtek2_Device));
720 DBG(100, "add_device_list: md=%p, malloc'd %lu bytes\n",
721 (void *) md, (u_long) sizeof(Microtek2_Device));
722 if ( md == NULL )
724 DBG(1, "add_device_list: malloc() for md failed\n");
729 memset(md, 0, sizeof(Microtek2_Device));
730 md->next = md_first_dev;
731 md_first_dev = md;
732 md->sane.name = NULL;
733 md->sane.vendor = NULL;
734 md->sane.model = NULL;
735 md->sane.type = NULL;
736 md->scan_source = MD_SOURCE_FLATBED;
737 md->shading_table_w = NULL;
738 md->shading_table_d = NULL;
739 strncpy(md->name, hdev, PATH_MAX - 1);
741 md->opts = md_config_temp->opts;
743 md->opts = md_options;
745 *mdev = md;
755 attach(Microtek2_Device *md)
767 DBG(30, "attach: device='%s'\n", md->name);
769 status = scsi_inquiry( &md->info[MD_SOURCE_FLATBED], md->name );
780 memcpy( &md->info[source_info],
781 &md->info[MD_SOURCE_FLATBED],
788 status = check_inquiry(md, &model_string);
792 md->sane.name = md->name;
793 md->sane.vendor = "Microtek";
794 md->sane.model = strdup(model_string);
795 if ( md->sane.model == NULL )
797 md->sane.type = "flatbed scanner";
798 md->revision = strtod(md->info[MD_SOURCE_FLATBED].revision, NULL);
800 status = scsi_read_attributes(&md->info[0],
801 md->name, MD_SOURCE_FLATBED);
808 if ( MI_LUTCAP_NONE( md->info[MD_SOURCE_FLATBED].lut_cap) )
810 md->model_flags |= MD_NO_GAMMA;
813 if ( md->info[MD_SOURCE_FLATBED].option_device & MI_OPTDEV_TMA )
815 status = scsi_read_attributes(&md->info[0],
816 md->name, MD_SOURCE_TMA);
822 if ( md->info[MD_SOURCE_FLATBED].option_device & MI_OPTDEV_ADF )
824 status = scsi_read_attributes(&md->info[0],
825 md->name, MD_SOURCE_ADF);
831 if ( md->info[MD_SOURCE_FLATBED].option_device & MI_OPTDEV_STRIPE )
833 status = scsi_read_attributes(&md->info[0],
834 md->name, MD_SOURCE_STRIPE);
840 if ( md->info[MD_SOURCE_FLATBED].option_device & MI_OPTDEV_SLIDE )
845 if ( ! (md->model_flags & MD_NO_SLIDE_MODE) )
847 status = scsi_read_attributes(&md->info[0],
848 md->name, MD_SOURCE_SLIDE);
854 status = scsi_read_system_status(md, -1);
867 Microtek2_Device *md;
876 add_device_list(name, &md);
878 attach(md);
1132 check_inquiry(Microtek2_Device *md, SANE_String *model_string)
1136 DBG(30, "check_inquiry: md=%p\n", (void *) md);
1138 md->n_control_bytes = 0;
1139 md->shading_length = 0;
1140 md->shading_table_contents = 0;
1142 mi = &md->info[MD_SOURCE_FLATBED];
1167 md->shading_depth = 16;
1169 md->shading_depth = 14;
1171 md->shading_depth = 12;
1173 md->shading_depth = 10;
1175 md->shading_depth = 8;
1188 md->model_flags |= MD_NO_RIS_COMMAND;
1189 if ( md->revision < 2.70 )
1190 md->model_flags |= MD_RII_TWO_BYTES;
1194 md->model_flags |= MD_NO_GAMMA;
1216 md->model_flags |= MD_DATA_FORMAT_WRONG;
1217 if ( md->revision == 1.00 )
1218 md->model_flags |= MD_OFFSET_2;
1231 md->model_flags |= MD_NO_SLIDE_MODE
1238 md->opt_backend_calib_default = SANE_TRUE;
1239 md->opt_no_backtrack_default = SANE_TRUE;
1240 md->n_control_bytes = 320;
1241 md->shading_length = 18;
1242 md->shading_depth = 10;
1243 md->controlbit_offset = 7;
1253 if ( md->revision == 1.00 )
1254 md->model_flags |= MD_OFFSET_2;
1258 if ( md->revision == 1.00 )
1259 md->model_flags |= MD_OFFSET_2;
1260 md->model_flags |= MD_X6_SHORT_TRANSFER;
1268 md->model_flags |= MD_NO_SLIDE_MODE
1272 md->opt_backend_calib_default = SANE_TRUE;
1273 md->opt_no_backtrack_default = SANE_TRUE;
1274 md->n_control_bytes = 647;
1275 /* md->shading_length = 18; firmware values seem to work better */
1276 md->shading_depth = 12;
1277 md->controlbit_offset = 18;
1285 md->model_flags |= MD_NO_GAMMA;
1293 md->model_flags |= MD_NO_GAMMA;
1297 md->model_flags |= MD_NO_SLIDE_MODE
1301 md->opt_backend_calib_default = SANE_TRUE;
1302 md->opt_no_backtrack_default = SANE_TRUE;
1303 md->n_control_bytes = 320;
1304 md->controlbit_offset = 7;
1308 md->opt_backend_calib_default = SANE_TRUE;
1309 md->model_flags |= MD_16BIT_TRANSFER
1321 md->model_flags |= MD_NO_GAMMA;
1328 md->model_flags |= MD_NO_GAMMA
1330 md->opt_backend_calib_default = SANE_TRUE;
1331 md->opt_no_backtrack_default = SANE_TRUE;
2013 Microtek2_Device *md;
2029 md = ms->dev;
2030 mi = &md->info[current_scan_source];
2033 get_lut_size(mi, &md->max_lut_size, &md->lut_entry_size);
2041 md->scansource_list[i] = (SANE_String) MD_SOURCESTRING_FLATBED;
2043 val[OPT_SOURCE].s = (SANE_String) strdup(md->scansource_list[i]);
2044 if ( md->status.adfcnt )
2046 md->scansource_list[++i] = (SANE_String) MD_SOURCESTRING_ADF;
2048 val[OPT_SOURCE].s = (SANE_String) strdup(md->scansource_list[i]);
2050 if ( md->status.tmacnt )
2052 md->scansource_list[++i] = (SANE_String) MD_SOURCESTRING_TMA;
2054 val[OPT_SOURCE].s = (SANE_String) strdup(md->scansource_list[i]);
2058 md->scansource_list[++i] = (SANE_String) MD_SOURCESTRING_STRIPE;
2060 val[OPT_SOURCE].s = (SANE_String) strdup(md->scansource_list[i]);
2068 md->scansource_list[++i] = (SANE_String) MD_SOURCESTRING_SLIDE;
2070 val[OPT_SOURCE].s = (SANE_String) strdup(md->scansource_list[i]);
2074 md->scansource_list[++i] = NULL;
2083 md->scanmode_list[i] = (SANE_String) MD_MODESTRING_COLOR;
2084 val[OPT_MODE].s = strdup(md->scanmode_list[i]);
2090 md->scanmode_list[i] = (SANE_String) MD_MODESTRING_GRAY;
2092 val[OPT_MODE].s = strdup(md->scanmode_list[i]);
2098 md->scanmode_list[i] = (SANE_String) MD_MODESTRING_HALFTONE;
2101 val[OPT_MODE].s = strdup(md->scanmode_list[i]);
2108 md->scanmode_list[i] = (SANE_String) MD_MODESTRING_LINEART;
2112 val[OPT_MODE].s = strdup(md->scanmode_list[i]);
2114 md->scanmode_list[i] = NULL;
2121 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_4;
2124 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_8;
2126 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_10;
2128 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_12;
2130 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_14;
2132 md->bitdepth_list[++i] = (SANE_Int) MD_DEPTHVAL_16;
2134 md->bitdepth_list[0] = i;
2135 if ( md->bitdepth_list[1] == (SANE_Int) MD_DEPTHVAL_8 )
2136 val[OPT_BITDEPTH].w = md->bitdepth_list[1];
2138 val[OPT_BITDEPTH].w = md->bitdepth_list[2];
2141 md->halftone_mode_list[0] = (SANE_String) MD_HALFTONE0;
2142 md->halftone_mode_list[1] = (SANE_String) MD_HALFTONE1;
2143 md->halftone_mode_list[2] = (SANE_String) MD_HALFTONE2;
2144 md->halftone_mode_list[3] = (SANE_String) MD_HALFTONE3;
2145 md->halftone_mode_list[4] = (SANE_String) MD_HALFTONE4;
2146 md->halftone_mode_list[5] = (SANE_String) MD_HALFTONE5;
2147 md->halftone_mode_list[6] = (SANE_String) MD_HALFTONE6;
2148 md->halftone_mode_list[7] = (SANE_String) MD_HALFTONE7;
2149 md->halftone_mode_list[8] = (SANE_String) MD_HALFTONE8;
2150 md->halftone_mode_list[9] = (SANE_String) MD_HALFTONE9;
2151 md->halftone_mode_list[10] = (SANE_String) MD_HALFTONE10;
2152 md->halftone_mode_list[11] = (SANE_String) MD_HALFTONE11;
2153 md->halftone_mode_list[12] = NULL;
2156 val[OPT_HALFTONE].s = strdup(md->halftone_mode_list[0]);
2159 md->x_res_range_dpi.min = SANE_FIX(10.0);
2160 md->x_res_range_dpi.max = SANE_FIX(mi->max_xresolution);
2161 md->x_res_range_dpi.quant = SANE_FIX(1.0);
2162 val[OPT_RESOLUTION].w = MIN(MD_RESOLUTION_DEFAULT, md->x_res_range_dpi.max);
2164 md->y_res_range_dpi.min = SANE_FIX(10.0);
2165 md->y_res_range_dpi.max = SANE_FIX(mi->max_yresolution);
2166 md->y_res_range_dpi.quant = SANE_FIX(1.0);
2173 md->x_range_mm.min = SANE_FIX(0.0);
2174 md->x_range_mm.max = SANE_FIX((double) mi->geo_width
2177 md->x_range_mm.quant = SANE_FIX(0.0);
2178 md->y_range_mm.min = SANE_FIX(0.0);
2179 md->y_range_mm.max = SANE_FIX((double) mi->geo_height
2182 md->y_range_mm.quant = SANE_FIX(0.0);
2185 val[OPT_BR_X].w = md->x_range_mm.max;
2186 val[OPT_BR_Y].w = md->y_range_mm.max;
2196 md->gammamode_list[i++] = (SANE_String) MD_GAMMAMODE_LINEAR;
2197 md->gammamode_list[i++] = (SANE_String) MD_GAMMAMODE_SCALAR;
2198 md->gammamode_list[i++] = (SANE_String) MD_GAMMAMODE_CUSTOM;
2201 val[OPT_GAMMA_MODE].s = strdup(md->gammamode_list[0]);
2203 md->gammamode_list[i] = NULL;
2219 if ( md->model_flags & MD_NO_GAMMA )
2227 tablesize = md->max_lut_size;
2229 max_gamma_value = md->max_lut_size - 1;
2236 if ( md->custom_gamma_table[color] )
2237 free((void *) md->custom_gamma_table[color]);
2238 md->custom_gamma_table[color] =
2240 DBG(100, "init_options: md->custom_gamma_table[%d]=%p, malloc'd %lu bytes\n",
2241 color, (void *) md->custom_gamma_table[color], (u_long) (tablesize * sizeof(SANE_Int)));
2242 if ( md->custom_gamma_table[color] == NULL )
2249 md->custom_gamma_table[color][i] = i;
2252 md->custom_gamma_range.min = 0;
2253 md->custom_gamma_range.max = max_gamma_value;
2254 md->custom_gamma_range.quant = 1;
2261 val[OPT_GAMMA_CUSTOM].wa = &md->custom_gamma_table[0][0];
2262 val[OPT_GAMMA_CUSTOM_R].wa = &md->custom_gamma_table[1][0];
2263 val[OPT_GAMMA_CUSTOM_G].wa = &md->custom_gamma_table[2][0];
2264 val[OPT_GAMMA_CUSTOM_B].wa = &md->custom_gamma_table[3][0];
2267 md->channel_list[0] = (SANE_String) MD_CHANNEL_MASTER;
2268 md->channel_list[1] = (SANE_String) MD_CHANNEL_RED;
2269 md->channel_list[2] = (SANE_String) MD_CHANNEL_GREEN;
2270 md->channel_list[3] = (SANE_String) MD_CHANNEL_BLUE;
2271 md->channel_list[4] = NULL;
2274 val[OPT_CHANNEL].s = strdup(md->channel_list[0]);
2296 val[OPT_DISABLE_BACKTRACK].w = md->opt_no_backtrack_default;
2299 val[OPT_CALIB_BACKEND].w = md->opt_backend_calib_default;
2317 md->percentage_range.min = 0 << SANE_FIXED_SCALE_SHIFT;
2318 md->percentage_range.max = 200 << SANE_FIXED_SCALE_SHIFT;
2319 md->percentage_range.quant = 1 << SANE_FIXED_SCALE_SHIFT;
2321 md->threshold_range.min = 1;
2322 md->threshold_range.max = 255;
2323 md->threshold_range.quant = 1;
2325 md->scalar_gamma_range.min = SANE_FIX(0.1);
2326 md->scalar_gamma_range.max = SANE_FIX(4.0);
2327 md->scalar_gamma_range.quant = SANE_FIX(0.1);
2329 md->shadow_range.min = 0;
2330 md->shadow_range.max = 253;
2331 md->shadow_range.quant = 1;
2333 md->midtone_range.min = 1;
2334 md->midtone_range.max = 254;
2335 md->midtone_range.quant = 1;
2337 md->highlight_range.min = 2;
2338 md->highlight_range.max = 255;
2339 md->highlight_range.quant = 1;
2341 md->exposure_range.min = 0;
2342 md->exposure_range.max = 510;
2343 md->exposure_range.quant = 2;
2345 md->balance_range.min = 0;
2346 md->balance_range.max = 200 << SANE_FIXED_SCALE_SHIFT;
2347 md->balance_range.quant = 1 << SANE_FIXED_SCALE_SHIFT;
2385 sod[OPT_SOURCE].size = max_string_size(md->scansource_list);
2387 if ( md->scansource_list[1] == NULL )
2390 sod[OPT_SOURCE].constraint.string_list = md->scansource_list;
2397 sod[OPT_MODE].size = max_string_size(md->scanmode_list);
2399 sod[OPT_MODE].constraint.string_list = md->scanmode_list;
2409 if ( md->bitdepth_list[0] == 1 )
2412 sod[OPT_BITDEPTH].constraint.word_list = md->bitdepth_list;
2419 sod[OPT_HALFTONE].size = max_string_size(md->halftone_mode_list);
2422 sod[OPT_HALFTONE].constraint.string_list = md->halftone_mode_list;
2429 sod[OPT_RESOLUTION].constraint.range = &md->x_res_range_dpi;
2436 sod[OPT_Y_RESOLUTION].constraint.range = &md->y_res_range_dpi;
2458 sod[OPT_TL_X].constraint.range = &md->x_range_mm;
2464 sod[OPT_TL_Y].constraint.range = &md->y_range_mm;
2470 sod[OPT_BR_X].constraint.range = &md->x_range_mm;
2476 sod[OPT_BR_Y].constraint.range = &md->y_range_mm;
2490 sod[OPT_BRIGHTNESS].constraint.range = &md->percentage_range;
2496 sod[OPT_CONTRAST].constraint.range = &md->percentage_range;
2504 sod[OPT_THRESHOLD].constraint.range = &md->threshold_range;
2513 if ( strncmp(md->opts.auto_adjust, "off", 3) == 0 )
2528 sod[OPT_GAMMA_MODE].size = max_string_size(md->gammamode_list);
2530 sod[OPT_GAMMA_MODE].constraint.string_list = md->gammamode_list;
2544 sod[OPT_GAMMA_SCALAR].constraint.range = &md->scalar_gamma_range;
2550 sod[OPT_GAMMA_SCALAR_R].constraint.range = &md->scalar_gamma_range;
2556 sod[OPT_GAMMA_SCALAR_G].constraint.range = &md->scalar_gamma_range;
2562 sod[OPT_GAMMA_SCALAR_B].constraint.range = &md->scalar_gamma_range;
2570 sod[OPT_GAMMA_CUSTOM].constraint.range = &md->custom_gamma_range;
2578 sod[OPT_GAMMA_CUSTOM_R].constraint.range = &md->custom_gamma_range;
2586 sod[OPT_GAMMA_CUSTOM_G].constraint.range = &md->custom_gamma_range;
2594 sod[OPT_GAMMA_CUSTOM_B].constraint.range = &md->custom_gamma_range;
2608 sod[OPT_CHANNEL].size = max_string_size(md->channel_list);
2610 sod[OPT_CHANNEL].constraint.string_list = md->channel_list;
2617 sod[OPT_SHADOW].constraint.range = &md->shadow_range;
2624 sod[OPT_SHADOW_R].constraint.range = &md->shadow_range;
2631 sod[OPT_SHADOW_G].constraint.range = &md->shadow_range;
2638 sod[OPT_SHADOW_B].constraint.range = &md->shadow_range;
2645 sod[OPT_MIDTONE].constraint.range = &md->midtone_range;
2652 sod[OPT_MIDTONE_R].constraint.range = &md->midtone_range;
2659 sod[OPT_MIDTONE_G].constraint.range = &md->midtone_range;
2666 sod[OPT_MIDTONE_B].constraint.range = &md->midtone_range;
2673 sod[OPT_HIGHLIGHT].constraint.range = &md->highlight_range;
2680 sod[OPT_HIGHLIGHT_R].constraint.range = &md->highlight_range;
2687 sod[OPT_HIGHLIGHT_G].constraint.range = &md->highlight_range;
2694 sod[OPT_HIGHLIGHT_B].constraint.range = &md->highlight_range;
2702 sod[OPT_EXPOSURE].constraint.range = &md->exposure_range;
2710 sod[OPT_EXPOSURE_R].constraint.range = &md->exposure_range;
2718 sod[OPT_EXPOSURE_G].constraint.range = &md->exposure_range;
2726 sod[OPT_EXPOSURE_B].constraint.range = &md->exposure_range;
2752 if ( strncmp(md->opts.no_backtracking, "off", 3) == 0 )
2763 if ( strncmp(md->opts.backend_calibration, "off", 3) == 0 )
2774 if ( strncmp(md->opts.lightlid35, "off", 3) == 0 )
2785 if ( strncmp(md->opts.toggle_lamp, "off", 3) == 0 )
2801 sod[OPT_BALANCE_R].constraint.range = &md->balance_range;
2802 if ( strncmp(md->opts.colorbalance_adjust, "off", 3) == 0 )
2810 sod[OPT_BALANCE_G].constraint.range = &md->balance_range;
2811 if ( strncmp(md->opts.colorbalance_adjust, "off", 3) == 0 )
2819 sod[OPT_BALANCE_B].constraint.range = &md->balance_range;
2820 if ( strncmp(md->opts.colorbalance_adjust, "off", 3) == 0 )
2830 if ( strncmp(md->opts.colorbalance_adjust, "off", 3) == 0 )
2848 Microtek2_Device *md;
2849 md = ms->dev;
2867 if ( md->bitdepth_list[0] != 1 )
2872 if ( ! ( strncmp(md->opts.colorbalance_adjust, "off", 3) == 0 ) )
2894 if ( md->bitdepth_list[0] != 1 )
3020 Microtek2_Device *md;
3026 md = ms->dev;
3029 mi = &md->info[md->scan_source];
3278 if ( md->model_flags & MD_NO_GAMMA )
3290 md->custom_gamma_table[color][i] = (SANE_Int) i;
3292 md->custom_gamma_range.max = (SANE_Int) max_gamma_value;
3311 md->scan_source = MD_SOURCE_FLATBED;
3313 md->scan_source = MD_SOURCE_TMA;
3315 md->scan_source = MD_SOURCE_ADF;
3317 md->scan_source = MD_SOURCE_STRIPE;
3319 md->scan_source = MD_SOURCE_SLIDE;
3327 init_options(ms, md->scan_source);
3340 if ( md->bitdepth_list[0] == 1 )
3342 if ( strncmp(md->opts.auto_adjust, "off", 3) == 0 )
3506 status = scsi_read_system_status(md, -1);
3510 md->status.flamp ^= 1;
3511 status = scsi_send_system_status(md, -1);
3706 Microtek2_Device *md;
3712 md = ms->dev;
3713 mi = &md->info[md->scan_source];
3753 Microtek2_Device *md;
3759 md = ms->dev;
3760 mi = &md->info[md->scan_source];
3762 if ( md->model_flags & MD_CALIB_DIVISOR_600 )
3777 if ( md->shading_length != 0 )
3778 ms->height_dots = md->shading_length;
3801 /* ms->scan_source = md->scan_source; */
3820 Microtek2_Device *md;
3830 md = ms->dev;
3831 mi = &md->info[md->scan_source];
3876 while ( strcmp(md->halftone_mode_list[i], ms->val[OPT_HALFTONE].s) )
3908 if ( md->model_flags & MD_OFFSET_2 ) /* this firmware has problems with */
3964 / SANE_UNFIX(md->percentage_range.max) * 254.0) + 1;
3968 / SANE_UNFIX(md->percentage_range.max) * 254.0) + 1;
4020 Microtek2_Device *md;
4025 md = ms->dev;
4026 mi = &md->info[md->scan_source];
4038 || md->model_flags & MD_READ_CONTROL_BIT)
4615 Microtek2_Device *md;
4617 md = ms->dev;
4638 if ( !(md->revision==2.70) && (md->model_flags & MD_RII_TWO_BYTES) )
4723 Microtek2_Device *md;
4731 md = ms->dev;
4732 mi = &md->info[md->scan_source];
4888 scsi_read_system_status(Microtek2_Device *md, int fd)
4896 DBG(30, "scsi_read_system_status: md=%p, fd=%d\n", (void *) md, fd);
4900 status = sanei_scsi_open(md->name, &sfd, scsi_sense_handler, 0);
4932 md->status.sskip = RSS_SSKIP(result);
4933 md->status.ntrack = RSS_NTRACK(result);
4934 md->status.ncalib = RSS_NCALIB(result);
4935 md->status.tlamp = RSS_TLAMP(result);
4936 md->status.flamp = RSS_FLAMP(result);
4937 md->status.rdyman= RSS_RDYMAN(result);
4938 md->status.trdy = RSS_TRDY(result);
4939 md->status.frdy = RSS_FRDY(result);
4940 md->status.adp = RSS_RDYMAN(result);
4941 md->status.detect = RSS_DETECT(result);
4942 md->status.adptime = RSS_ADPTIME(result);
4943 md->status.lensstatus = RSS_LENSSTATUS(result);
4944 md->status.aloff = RSS_ALOFF(result);
4945 md->status.timeremain = RSS_TIMEREMAIN(result);
4946 md->status.tmacnt = RSS_TMACNT(result);
4947 md->status.paper = RSS_PAPER(result);
4948 md->status.adfcnt = RSS_ADFCNT(result);
4949 md->status.currentmode = RSS_CURRENTMODE(result);
4950 md->status.buttoncount = RSS_BUTTONCOUNT(result);
5004 scsi_send_system_status(Microtek2_Device *md, int fd)
5012 DBG(30, "scsi_send_system_status: md=%p, fd=%d\n", (void *) md, fd);
5017 status = sanei_scsi_open(md->name, &sfd, scsi_sense_handler, 0);
5030 SSS_STICK(pos, md->status.stick);
5031 SSS_NTRACK(pos, md->status.ntrack);
5032 SSS_NCALIB(pos, md->status.ncalib);
5033 SSS_TLAMP(pos, md->status.tlamp);
5034 SSS_FLAMP(pos, md->status.flamp);
5035 SSS_RESERVED17(pos, md->status.reserved17);
5036 SSS_RDYMAN(pos, md->status.rdyman);
5037 SSS_TRDY(pos, md->status.trdy);
5038 SSS_FRDY(pos, md->status.frdy);
5039 SSS_ADP(pos, md->status.adp);
5040 SSS_DETECT(pos, md->status.detect);
5041 SSS_ADPTIME(pos, md->status.adptime);
5042 SSS_LENSSTATUS(pos, md->status.lensstatus);
5043 SSS_ALOFF(pos, md->status.aloff);
5044 SSS_TIMEREMAIN(pos, md->status.timeremain);
5045 SSS_TMACNT(pos, md->status.tmacnt);
5046 SSS_PAPER(pos, md->status.paper);
5047 SSS_ADFCNT(pos, md->status.adfcnt);
5048 SSS_CURRENTMODE(pos, md->status.currentmode);
5049 SSS_BUTTONCOUNT(pos, md->status.buttoncount);
5222 scsi_test_unit_ready(Microtek2_Device *md)
5229 DBG(30, "scsi_test_unit_ready: md=%s\n", md->name);
5232 status = sanei_scsi_open(md->name, &sfd, scsi_sense_handler, 0);
5258 Microtek2_Device *md;
5265 md = ms->dev;
5266 mi = &md->info[md->scan_source];
5267 ms->n_control_bytes = md->n_control_bytes;
5269 if ( md->model_flags & MD_READ_CONTROL_BIT )
5288 status = sanei_scsi_open (md->sane.name, &ms->sfd,
5301 status = scsi_read_system_status(md, ms->sfd);
5311 && !( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING ) )
5315 if ( ( md->shading_table_w == NULL )
5316 || !( md->model_flags & MD_READ_CONTROL_BIT ) )
5332 status = scsi_read_system_status(md, ms->sfd);
5336 md->status.aloff |= 128;
5337 md->status.timeremain = 10;
5342 md->status.flamp |= MD_FLAMP_ON;
5343 md->status.tlamp &= ~MD_TLAMP_ON;
5347 md->status.flamp &= ~MD_FLAMP_ON;
5348 md->status.tlamp |= MD_TLAMP_ON;
5353 md->status.flamp &= ~MD_FLAMP_ON;
5354 /* md->status.tlamp |= MD_TLAMP_ON;*/
5359 md->status.ntrack |= MD_NTRACK_ON;
5361 md->status.ntrack &= ~MD_NTRACK_ON;
5363 status = scsi_send_system_status(md, ms->sfd);
5369 if ( md->model_flags & MD_NO_GAMMA )
5403 if ( ! (md->model_flags & MD_NO_GAMMA) )
5432 if ( !( md->model_flags & MD_NO_RIS_COMMAND ) )
5445 && ( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING )
5446 && ( ( md->shading_table_w == NULL )
5447 || ( ms->mode != md->shading_table_contents )
5459 status = scsi_read_system_status(md, ms->sfd);
5463 md->status.flamp &= ~MD_FLAMP_ON;
5464 md->status.tlamp &= ~MD_TLAMP_ON;
5466 status = scsi_send_system_status(md, ms->sfd);
5471 if ( md->model_flags & MD_READ_CONTROL_BIT )
5519 Microtek2_Device *md;
5527 md = ms->dev;
5528 mi = &md->info[md->scan_source];
5531 strip_lines = (int) ((double) ms->y_resolution_dpi * md->opts.strip_height);
5647 Microtek2_Device *md;
5650 md = ms->dev;
5651 mi = &md->info[md->scan_source];
5663 if ( md->model_flags & MD_16BIT_TRANSFER )
5687 if ( md->shading_depth > 8)
5728 Microtek2_Device *md;
5732 md = ms->dev;
5733 mi = &md->info[md->scan_source];
5747 if ( md->model_flags & MD_16BIT_TRANSFER )
5750 if ( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING )
5754 if ( md->shading_table_w != NULL )
5760 if ( md->shading_table_d != NULL )
5775 if ( md->shading_table_w != NULL )
5779 img_val = *((uint16_t *) md->shading_table_w + offset );
5783 img_val = *((uint8_t *) md->shading_table_w + offset );
5787 if ( md->shading_table_d != NULL )
5791 img_val = *((uint16_t *) md->shading_table_d + offset );
5795 img_val = *((uint8_t *) md->shading_table_d + offset );
5801 if ( md->shading_table_w != NULL )
5803 if ( md->shading_table_d != NULL )
5813 Microtek2_Device *md;
5817 md = ms->dev;
5818 mi = &md->info[md->scan_source];
5830 if ( md->model_flags & MD_16BIT_TRANSFER )
5880 Microtek2_Device *md;
5890 md = ms->dev;
5891 mi = &md->info[md->scan_source];
5894 if ( md->shading_table_w == NULL )
5902 if ( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING )
5914 dump_area2(md->shading_table_w, shad_bplc * 3, "shading_table_w");
5915 if ( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING )
5936 if ( md->shading_table_d != NULL )
5939 dump_area2(md->shading_table_d, shad_bplc * 3,
5958 DBG(128, "controlbit offset=%d\n", md->controlbit_offset);
5965 byte = ( lfd_bit + md->controlbit_offset ) / 8;
5966 bit = ( lfd_bit + md->controlbit_offset ) % 8;
5985 if ( md->model_flags & MD_PHANTOM336CX_TYPE_SHADING )
5986 sh_offset += md->controlbit_offset;
6003 *((uint16_t *)md->shading_table_w
6007 *((uint16_t *)md->shading_table_d
6013 *((uint8_t *)md->shading_table_w
6017 *((uint8_t *)md->shading_table_d
6046 Microtek2_Device *md;
6055 md = ms->dev;
6056 mi = &md->info[md->scan_source];
6060 || ( md->model_flags & MD_PHANTOM_C6 ) )
6066 md->status.ntrack |= MD_NTRACK_ON;
6067 md->status.ncalib &= ~MD_NCALIB_ON;
6068 md->status.flamp |= MD_FLAMP_ON;
6069 if ( md->model_flags & MD_PHANTOM_C6 )
6071 md->status.stick |= MD_STICK_ON;
6072 md->status.reserved17 |= MD_RESERVED17_ON;
6076 if ( md->model_flags & MD_PHANTOM_C6 )
6079 status = scsi_send_system_status(md, ms->sfd);
6099 status = scsi_read_system_status(md, ms->sfd);
6103 md->status.flamp &= ~MD_FLAMP_ON;
6105 status = scsi_send_system_status(md, ms->sfd);
6141 status = scsi_read_image(ms, buf, md->shading_depth>8 ? 2 : 1);
6154 status = prepare_shading_data(ms, lines, &md->shading_table_d);
6161 if ( ! (md->model_flags & MD_READ_CONTROL_BIT) )
6163 status = shading_function(ms, md->shading_table_d);
6170 md->shading_table_d,
6192 || ( md->model_flags & MD_PHANTOM_C6 ) )
6193 md->status.ncalib |= MD_NCALIB_ON;
6195 md->status.ncalib &= ~MD_NCALIB_ON;
6197 md->status.flamp |= MD_FLAMP_ON;
6198 /* md->status.tlamp &= ~MD_TLAMP_ON; */
6199 md->status.ntrack |= MD_NTRACK_ON;
6201 if ( md->model_flags & MD_PHANTOM_C6 )
6203 md->status.stick &= ~MD_STICK_ON;
6204 md->status.reserved17 |= MD_RESERVED17_ON;
6210 /* md->status.stick &= ~MD_STICK_ON; */
6211 /* md->status.ncalib &= ~MD_NCALIB_ON; */
6212 /* md->status.reserved17 &= ~MD_RESERVED17_ON; */
6216 status = scsi_send_system_status(md, ms->sfd);
6237 if ( !( md->model_flags & MD_READ_CONTROL_BIT ) )
6240 status = scsi_read_system_status(md, ms->sfd);
6282 status = scsi_read_image(ms, buf, md->shading_depth>8 ? 2 : 1);
6291 status = prepare_shading_data(ms, lines, &md->shading_table_w);
6304 if ( ! (md->model_flags & MD_READ_CONTROL_BIT) )
6306 status = shading_function(ms, md->shading_table_w);
6313 md->shading_table_w,
6323 md->status.ncalib |= MD_NCALIB_ON;
6325 if ( md->model_flags & MD_PHANTOM_C6 )
6327 md->status.stick &= ~MD_STICK_ON;
6328 md->status.reserved17 &= ~MD_RESERVED17_ON;
6333 md->status.ncalib &= ~MD_NCALIB_ON;
6336 status = scsi_send_system_status(md, ms->sfd);
6360 Microtek2_Device *md;
6375 md = ms->dev;
6376 mi = &md->info[md->scan_source];
6551 Microtek2_Device *md;
6552 md = ms->dev;
6556 md->shading_table_contents = ms->mode;
6590 Microtek2_Device *md;
6595 md = ms->dev;
6597 shading_bytes = ms->n_control_bytes * 8 * md->shading_length;
6622 linesize = shading_bytes / md->shading_length;
6629 remaining_lines = md->shading_length;
6671 Microtek2_Device *md;
6679 md = ms->dev;
6682 sortbuf = malloc( md->shading_length * sizeof(float) );
6684 (void *) sortbuf, (u_long) (md->shading_length * sizeof(float)));
6703 if ( md->shading_table_w )
6704 free( (void *)md->shading_table_w );
6705 md->shading_table_w = (uint8_t *) malloc(shading_line_bytes);
6706 DBG(100, "calc_cx_shading: md->shading_table_w=%p, malloc'd %d bytes\n",
6707 (void *) md->shading_table_w, shading_line_bytes);
6708 if ( md->shading_table_w == NULL )
6715 shading_table_pointer = md->shading_table_w;
6720 if ( md->shading_table_d )
6721 free( (void *)md->shading_table_d);
6722 md->shading_table_d = (uint8_t *) malloc(shading_line_bytes);
6723 DBG(100, "calc_cx_shading: md->shading_table_d=%p, malloc'd %d bytes\n",
6724 (void *) md->shading_table_d, shading_line_bytes);
6726 if ( md->shading_table_d == NULL )
6733 shading_table_pointer = md->shading_table_d;
6737 "md->shading_table_w=%p\n"
6738 "md->shading_table_d=%p\n"
6742 (void *) ms, (void *) md->shading_table_w,
6743 (void *) md->shading_table_d, shading_line_bytes,
6757 for (line = 0; line < md->shading_length; line++)
6777 qsort(sortbuf, md->shading_length, sizeof(float),
6779 value = *( sortbuf + ( md->shading_length - 1 ) / 2 );
6861 Microtek2_Device *md;
6878 md = ms->dev;
6879 mi = &md->info[md->scan_source];
6882 if ( md->model_flags & MD_NO_GAMMA )
6987 Microtek2_Device *md;
6996 md = ms->dev;
6997 mi = &md->info[md->scan_source];
6998 /* mi = &md->info[MD_SOURCE_FLATBED]; */
7067 Microtek2_Device *md;
7082 md = ms->dev;
7083 mi = &md->info[md->scan_source];
7150 Microtek2_Device *md;
7157 md = ms->dev;
7158 mi = &md->info[md->scan_source];
7277 Microtek2_Device *md;
7289 md = ms->dev;
7303 if ( (md->model_flags & MD_OFFSET_2) && pad == 1 )
7309 if ( md->revision == 1.00 && mi->model_code != 0x81 )
7314 if ( md->revision > 1.00 )
7343 Microtek2_Device *md;
7350 md = ms->dev;
7353 if ( !( md->model_flags & MD_16BIT_TRANSFER ) )
7395 Microtek2_Device *md;
7410 md = ms->dev;
7411 mi = &md->info[md->scan_source];
7537 Microtek2_Device *md;
7549 md = ms->dev;
7550 mi = &md->info[md->scan_source];
7551 gamma_by_backend = md->model_flags & MD_NO_GAMMA ? 1 : 0;
7557 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend)
7562 shading_factor = (float) pow(2.0, (double) (md->shading_depth
7605 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend
7625 if ( md->model_flags & MD_NO_ENHANCEMENTS )
7676 Microtek2_Device *md;
7691 md = ms->dev;
7692 mi = &md->info[md->scan_source];
7696 gamma_by_backend = md->model_flags & MD_NO_GAMMA ? 1 : 0;
7740 Microtek2_Device *md;
7759 md = ms->dev;
7760 mi = &md->info[md->scan_source];
7762 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend)
7764 shading_factor = (float) pow(2.0,(double)(md->shading_depth - ms->depth));
7803 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend
7822 if ( md->model_flags & MD_NO_ENHANCEMENTS )
7952 Microtek2_Device *md;
7962 md = ms->dev;
7963 mi = &md->info[md->scan_source];
7965 gamma_by_backend = md->model_flags & MD_NO_GAMMA ? 1 : 0;
7999 Microtek2_Device *md;
8010 md = ms->dev;
8017 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend)
8022 shading_factor = (float) pow(2.0, (double) (md->shading_depth - ms->depth) );
8034 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend
8057 if ( !( md->model_flags & MD_16BIT_TRANSFER ) )
8099 Microtek2_Device *md;
8114 md = ms->dev;
8115 mi = &md->info[md->scan_source];
8186 Microtek2_Device *md;
8196 md = ms->dev;
8197 mi = &md->info[md->scan_source];
8233 Microtek2_Device *md;
8244 md = ms->dev;
8251 shading_factor = (float) pow(2.0, (double) (md->shading_depth - 8) );
8255 if ((md->model_flags & MD_READ_CONTROL_BIT) && ms->calib_backend
8305 Microtek2_Device *md;
8319 md = ms->dev;
8320 mi = &md->info[md->scan_source];
8364 Microtek2_Device *md;
8367 md = ms->dev;
8374 if ( ( md->shading_depth > 8 ) && ( ms->lut_entry_size == 2) )