sane.ds: Add support for CAP_FEEDERENABLED.
This commit is contained in:
parent
513b2b54a4
commit
28b708ca9e
|
@ -166,7 +166,7 @@ static TW_UINT16 TWAIN_GetSupportedCaps(pTW_CAPABILITY pCapability)
|
|||
{
|
||||
TW_ARRAY *a;
|
||||
static const UINT16 supported_caps[] = { CAP_SUPPORTEDCAPS, CAP_XFERCOUNT, CAP_UICONTROLLABLE,
|
||||
CAP_AUTOFEED,
|
||||
CAP_AUTOFEED, CAP_FEEDERENABLED,
|
||||
ICAP_XFERMECH, ICAP_PIXELTYPE, ICAP_UNITS, ICAP_BITDEPTH, ICAP_COMPRESSION, ICAP_PIXELFLAVOR,
|
||||
ICAP_XRESOLUTION, ICAP_YRESOLUTION, ICAP_PHYSICALHEIGHT, ICAP_PHYSICALWIDTH };
|
||||
|
||||
|
@ -881,6 +881,80 @@ static TW_UINT16 SANE_CAPAutofeed (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
|||
return twCC;
|
||||
}
|
||||
|
||||
/* CAP_FEEDERENABLED */
|
||||
static TW_UINT16 SANE_CAPFeederEnabled (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
||||
{
|
||||
TW_UINT16 twCC = TWCC_BADCAP;
|
||||
#ifdef SONAME_LIBSANE
|
||||
TW_UINT32 val;
|
||||
TW_BOOL enabled;
|
||||
SANE_Status status;
|
||||
SANE_Char source[64];
|
||||
|
||||
TRACE("CAP_FEEDERENABLED\n");
|
||||
|
||||
if (sane_option_get_str(activeDS.deviceHandle, SANE_NAME_SCAN_SOURCE, source, sizeof(source), NULL) != SANE_STATUS_GOOD)
|
||||
return TWCC_BADCAP;
|
||||
|
||||
if (strcmp(source, "Auto") == 0 || strcmp(source, "ADF") == 0)
|
||||
enabled = TRUE;
|
||||
else
|
||||
enabled = FALSE;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case MSG_QUERYSUPPORT:
|
||||
twCC = set_onevalue(pCapability, TWTY_INT32,
|
||||
TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET );
|
||||
break;
|
||||
|
||||
case MSG_GET:
|
||||
twCC = set_onevalue(pCapability, TWTY_BOOL, enabled);
|
||||
break;
|
||||
|
||||
case MSG_SET:
|
||||
twCC = msg_set(pCapability, &val);
|
||||
if (twCC == TWCC_SUCCESS)
|
||||
{
|
||||
if (val)
|
||||
enabled = TRUE;
|
||||
else
|
||||
enabled = FALSE;
|
||||
|
||||
strcpy(source, "ADF");
|
||||
status = sane_option_set_str(activeDS.deviceHandle, SANE_NAME_SCAN_SOURCE, source, NULL);
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
strcpy(source, "Auto");
|
||||
status = sane_option_set_str(activeDS.deviceHandle, SANE_NAME_SCAN_SOURCE, source, NULL);
|
||||
}
|
||||
if (status != SANE_STATUS_GOOD)
|
||||
{
|
||||
ERR("Error %s: Could not set source to either ADF or Auto\n", psane_strstatus(status));
|
||||
return sane_status_to_twcc(status);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MSG_GETDEFAULT:
|
||||
twCC = set_onevalue(pCapability, TWTY_BOOL, TRUE);
|
||||
break;
|
||||
|
||||
case MSG_RESET:
|
||||
strcpy(source, "Auto");
|
||||
if (sane_option_set_str(activeDS.deviceHandle, SANE_NAME_SCAN_SOURCE, source, NULL) == SANE_STATUS_GOOD)
|
||||
enabled = TRUE;
|
||||
twCC = TWCC_SUCCESS;
|
||||
/* .. fall through intentional .. */
|
||||
|
||||
case MSG_GETCURRENT:
|
||||
twCC = set_onevalue(pCapability, TWTY_BOOL, enabled);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
return twCC;
|
||||
}
|
||||
|
||||
|
||||
|
||||
TW_UINT16 SANE_SaneCapability (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
||||
|
@ -910,6 +984,10 @@ TW_UINT16 SANE_SaneCapability (pTW_CAPABILITY pCapability, TW_UINT16 action)
|
|||
twCC = SANE_CAPAutofeed (pCapability, action);
|
||||
break;
|
||||
|
||||
case CAP_FEEDERENABLED:
|
||||
twCC = SANE_CAPFeederEnabled (pCapability, action);
|
||||
break;
|
||||
|
||||
case ICAP_PIXELTYPE:
|
||||
twCC = SANE_ICAPPixelType (pCapability, action);
|
||||
break;
|
||||
|
@ -974,5 +1052,12 @@ TW_UINT16 SANE_SaneSetDefaults (void)
|
|||
if (SANE_SaneCapability(&cap, MSG_RESET) == TWCC_SUCCESS)
|
||||
GlobalFree(cap.hContainer);
|
||||
|
||||
memset(&cap, 0, sizeof(cap));
|
||||
cap.Cap = CAP_FEEDERENABLED;
|
||||
cap.ConType = TWON_DONTCARE16;
|
||||
|
||||
if (SANE_SaneCapability(&cap, MSG_RESET) == TWCC_SUCCESS)
|
||||
GlobalFree(cap.hContainer);
|
||||
|
||||
return TWCC_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -111,6 +111,21 @@ SANE_Status sane_option_set_bool(SANE_Handle h, const char *option_name, SANE_Bo
|
|||
return psane_control_option(h, optno, SANE_ACTION_SET_VALUE, (void *) &val, status);
|
||||
}
|
||||
|
||||
SANE_Status sane_option_get_str(SANE_Handle h, const char *option_name, SANE_String val, size_t len, SANE_Int *status)
|
||||
{
|
||||
SANE_Status rc;
|
||||
int optno;
|
||||
const SANE_Option_Descriptor *opt;
|
||||
|
||||
rc = sane_find_option(h, option_name, &opt, &optno, SANE_TYPE_STRING);
|
||||
if (rc != SANE_STATUS_GOOD)
|
||||
return rc;
|
||||
|
||||
if (opt->size < len)
|
||||
return psane_control_option(h, optno, SANE_ACTION_GET_VALUE, (void *) val, status);
|
||||
else
|
||||
return SANE_STATUS_NO_MEM;
|
||||
}
|
||||
|
||||
/* Important: SANE has the side effect of of overwriting val with the returned value */
|
||||
SANE_Status sane_option_set_str(SANE_Handle h, const char *option_name, SANE_String val, SANE_Int *status)
|
||||
|
|
|
@ -224,6 +224,7 @@ HWND ScanningDialogBox(HWND dialog, LONG progress);
|
|||
#ifdef SONAME_LIBSANE
|
||||
SANE_Status sane_option_get_int(SANE_Handle h, const char *option_name, SANE_Int *val);
|
||||
SANE_Status sane_option_set_int(SANE_Handle h, const char *option_name, SANE_Int val, SANE_Int *status);
|
||||
SANE_Status sane_option_get_str(SANE_Handle h, const char *option_name, SANE_String val, size_t len, SANE_Int *status);
|
||||
SANE_Status sane_option_set_str(SANE_Handle h, const char *option_name, SANE_String val, SANE_Int *status);
|
||||
SANE_Status sane_option_probe_resolution(SANE_Handle h, const char *option_name, SANE_Int *minval, SANE_Int *maxval, SANE_Int *quant);
|
||||
SANE_Status sane_option_probe_mode(SANE_Handle h, SANE_String_Const **choices, char *current, int current_size);
|
||||
|
|
|
@ -583,6 +583,9 @@ static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
|
|||
if (capabilities[CAP_AUTOFEED])
|
||||
test_onevalue_cap(appid, source, CAP_AUTOFEED, TWTY_BOOL,
|
||||
TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
|
||||
if (capabilities[CAP_FEEDERENABLED])
|
||||
test_onevalue_cap(appid, source, CAP_FEEDERENABLED, TWTY_BOOL,
|
||||
TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue