63
63
/* Load hpmud manually with symbols exported. Otherwise the plugin will not find it. */
64
64
if ((ps->hpmud_handle = dlopen("libhpmud.so", RTLD_LAZY|RTLD_GLOBAL)) == NULL)
66
BUG("unable to load restricted library: %s\n", dlerror());
66
if ((ps->hpmud_handle = dlopen("libhpmud.so.0", RTLD_LAZY|RTLD_GLOBAL)) == NULL)
68
BUG("unable to load restricted library: %s\n", dlerror());
70
73
/* Load math library manually with symbols exported (Ubuntu 8.04). Otherwise the plugin will not find it. */
371
static void set_supported_resolutions(struct marvell_session *ps)
374
if(ps->scansrc & HPMUD_SCANSRC_ADF)
377
ps->adf_resolution_list[i++] = 5; /*Number of supported resolutions*/
378
ps->adf_resolution_list[i++] = 75;
379
ps->adf_resolution_list[i++] = 100;
380
ps->adf_resolution_list[i++] = 150;
381
ps->adf_resolution_list[i++] = 200;
382
ps->adf_resolution_list[i++] = 300;
384
if(ps->scansrc & HPMUD_SCANSRC_FLATBED)
387
ps->platen_resolution_list[i++] = 7; /*Number of supported resolutions*/
388
ps->platen_resolution_list[i++] = 75;
389
ps->platen_resolution_list[i++] = 100;
390
ps->platen_resolution_list[i++] = 150;
391
ps->platen_resolution_list[i++] = 200;
392
ps->platen_resolution_list[i++] = 300;
393
ps->platen_resolution_list[i++] = 600;
394
ps->platen_resolution_list[i++] = 1200;
397
if(ps->scansrc & HPMUD_SCANSRC_FLATBED)
399
ps->resolution_list[0] = ps->platen_resolution_list[0];
400
i = ps->platen_resolution_list[0] + 1;
403
ps->resolution_list[i] = ps->platen_resolution_list[i];
408
ps->resolution_list[0] = ps->adf_resolution_list[0];
409
i = ps->adf_resolution_list[0] + 1;
412
ps->resolution_list[i] = ps->adf_resolution_list[i];
454
503
/* Some of the marvell devices supports both flatbed and ADF, No command to get the src types supported */
455
504
/* Getting from the model file */
456
if ( session->scansrc == HPMUD_SCANSRC_BOTH)
458
session->input_source_list[i] = STR_ADF_MODE_ADF;
459
session->input_source_map[i++] = IS_ADF;
460
session->input_source_list[i] = STR_ADF_MODE_FLATBED;
461
session->input_source_map[i++] = IS_PLATEN;
462
DBG8("scan src HPMUD_SCANSRC_BOTH \n");
464
else if ( session->scansrc == HPMUD_SCANSRC_ADF)
505
if ( session->scansrc & HPMUD_SCANSRC_ADF)
466
507
session->input_source_list[i] = STR_ADF_MODE_ADF;
467
508
session->input_source_map[i++] = IS_ADF;
468
509
DBG8("scan src HPMUD_SCANSRC_ADF \n");
470
else if ( session->scansrc == HPMUD_SCANSRC_FLATBED)
511
if ( session->scansrc & HPMUD_SCANSRC_FLATBED)
472
513
session->input_source_list[i] = STR_ADF_MODE_FLATBED;
473
session->input_source_map[i++] = IS_PLATEN;
474
DBG8("scan src HPMUD_SCANSRC_FLATBED \n");
514
session->input_source_map[i++] = IS_PLATEN;
515
DBG8("scan src HPMUD_SCANSRC_FLATBED \n");
476
517
/* Values if un specified in the, value is 0, get ADF state from the printer */
477
else if (session->bb_is_paper_in_adf(session) == 2)
479
session->input_source_list[i] = STR_ADF_MODE_FLATBED;
480
session->input_source_map[i++] = IS_PLATEN;
481
DBG8("scan src b_is_paper_in_adf value 2 \n");
485
session->input_source_list[i] = STR_ADF_MODE_ADF;
486
session->input_source_map[i++] = IS_ADF;
487
DBG8("scan src b_is_paper_in_adf value not 2 \n");
518
if (session->scansrc == HPMUD_SCANSRC_NA)
520
if (session->bb_is_paper_in_adf(session) == 2)
522
session->input_source_list[i] = STR_ADF_MODE_FLATBED;
523
session->input_source_map[i++] = IS_PLATEN;
524
DBG8("scan src b_is_paper_in_adf value 2 \n");
528
session->input_source_list[i] = STR_ADF_MODE_ADF;
529
session->input_source_map[i++] = IS_ADF;
530
DBG8("scan src b_is_paper_in_adf value not 2 \n");
491
534
marvell_control_option(session, MARVELL_OPTION_INPUT_SOURCE, SANE_ACTION_SET_AUTO, NULL, NULL); /* set default option */
493
536
/* Set supported resolutions. */
495
session->resolution_list[i++] = 75;
496
session->resolution_list[i++] = 100;
497
session->resolution_list[i++] = 150;
498
session->resolution_list[i++] = 200;
499
session->resolution_list[i++] = 300;
500
session->resolution_list[i++] = 600;
501
session->resolution_list[i++] = 1200;
502
session->resolution_list[0] = i-1; /* length of word_list */
537
set_supported_resolutions(session);
503
538
marvell_control_option(session, MARVELL_OPTION_SCAN_RESOLUTION, SANE_ACTION_SET_AUTO, NULL, NULL); /* set default option */
505
540
/* Set supported contrast. */
642
677
ps->current_input_source = ps->input_source_map[i];
643
678
stat = SANE_STATUS_GOOD;
679
if(ps->current_input_source == IS_PLATEN)
681
i = ps->platen_resolution_list[0] + 1;
682
while(i--) ps->resolution_list[i] = ps->platen_resolution_list[i];
686
i = ps->adf_resolution_list[0] + 1;
687
while(i--) ps->resolution_list[i] = ps->adf_resolution_list[i];
689
ps->current_resolution = ps->resolution_list[1];
690
mset_result |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS;
691
stat = SANE_STATUS_GOOD;
968
1029
ipClose(ps->ip_handle);
969
1030
ps->ip_handle = 0;
971
ps->bb_end_page(ps, stat == SANE_STATUS_IO_ERROR ? 1: 0);
1032
//If user has cancelled scan from device
1033
if (ps->is_user_cancel)
1035
//Don't do anything. sane_hpaio_cancel() will be invoked automatically
1036
SendScanEvent(ps->uri, EVENT_SCAN_CANCEL);
1037
return SANE_STATUS_CANCELLED;
1042
ps->bb_end_page(ps, stat == SANE_STATUS_IO_ERROR ? 1: 0);
974
1046
DBG8("-sane_hpaio_read() output=%p bytes_read=%d maxLength=%d status=%d\n", data, *length, maxLength, stat);