I would suggest that you NOT start with making options and such.
Instead, just hard-code the call to set the data in the scanner,
whenever the tpu is enabled/disabled. Once you have that working, then
try to make it user selectable.

allan

On Tue, Nov 29, 2011 at 11:14 AM, Martin Zackrisson
<martin.zackrisson at cmb.gu.se> wrote:
>
> On 11/24/2011 12:27 AM, Olaf Meeuwissen wrote:
>>
>> Martin Zackrisson<martin.zackrisson at cmb.gu.se> ?writes:
>>
>>> I've dug through the code and made copy/paste/rename adjustments
>>> everywhere it seemed reasonable (first day with c-code...). This will
>>> probably more show how lost I am than anything else, but below are the
>>> diffs for all files I've been poking around (don't think I forgot
>>> any). I think my main issue is that I have no clue how to connect the
>>> static that I made (SANE_EPSON_CAP_FULL_SENSOR_IN_TPU) to what is
>>> being sent in the scanner in "define esci_set_full_sensor(s,v)
>>> e2_esc_cmd( s,(s)->hw->cmd->set_full_sensor, v)". That is to give
>>> set_full_sensor the value of SANE_EPSON_CAP_FULL_SENSOR_IN_TPU.
>>
>> Your SANE_EPSON_CAP_FULL_SENSOR_IN_TPU defines a two byte value but
>> s->hw->cmd->set_full_sensor is only a single byte. ?The e2_esc_cmd()
>> route will not work as it was written for scanner commands that all
>> start with an ESC (0x1b).
>>
>> You have to write your own esci_set_full_sensor() (see esci_set_zoom()
>> in epson2-cmd.c for inspiration) and make that send the two bytes of
>> SANE_EPSON_CAP_FULL_SENSOR_IN_TPU as well as the 0 or 1 value you want
>> to set. ?BTW, I have no clue as to the command handshake but expect it
>> to be similar to that of esci_set_zoom().
>>
> Here's my new take on the code, it compiles and everything but scanimage
> --all-options doesn't report my feature. I really don't get where that
> happens so it's hard to know if what I've done makes any sense or not to the
> scanner... (sorry for all the code, renamed everything to match the name of
> the capability description from Epson)
>
> diff ./epson2.c ../../sane-backends-1.0.22/backend//epson2.c
> 1340a1341,1354
>
>> ? ? /* full sensor in TPU */
>> ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].name = "undefinedimagesize";
>> ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].title = SANE_I18N("Undefined Image
>> Size");
>> ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].desc = SANE_I18N("In TPU mode some
>> scanners (e.g. V700) apply auto size dropping for the scanning area. This
>> option by-passes that 'functionality'");
>> ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].type = SANE_TYPE_BOOL;
>> ? ? s->val[OPT_UNDEFINEDIMAGESIZE].w = SANE_FALSE;
>>
>> ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].cap |= SANE_CAP_ADVANCED;
>>
>> ? ? if (s->hw->undefinedimagesize == SANE_TRUE)
>> ? ? ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].cap &= ~SANE_CAP_INACTIVE;
>> ? ? else
>> ? ? ? ? s->opt[OPT_UNDEFINEDIMAGESIZE].cap |= SANE_CAP_INACTIVE;
>>
> 1622a1637
>> ? ? case OPT_UNDEFINEDIMAGESIZE:
> 1715a1731
>
>> ? ? /*s->fullSensor = SANE_FALSE; ? ? since this option isn't documented
>> best not always activate */
> 1734a1751,1752
>> ? ? ? ? deactivateOption(s, OPT_UNDEFINEDIMAGESIZE, &dummy);
>>
> 1746a1765,1772
>
>> ? ? ? ? /* enable full size scanning */
>> ? ? ? ? if (s->hw->cmd->set_undefinedimagesize != 0) {
>> ? ? ? ? ? ? /*s->hw->x_range = &s->hw->x_range;
>> ? ? ? ? ? ? s->hw->y_range = &s->hw->y_range;*/
>> ? ? ? ? ? ? activateOption(s, OPT_UNDEFINEDIMAGESIZE, &dummy);
>> ? ? ? ? } else {
>> ? ? ? ? ? ? deactivateOption(s, OPT_UNDEFINEDIMAGESIZE, &dummy);
>> ? ? ? ? }
> 1772a1799
>> ? ? ? ? deactivateOption(s, OPT_UNDEFINEDIMAGESIZE, &dummy);
> 1958a1986
>> ? ? case OPT_UNDEFINEDIMAGESIZE:
> 2059a2088,2089
>> ? ? s->hw->cmd->set_undefinedimagesize[0] = 0x80;
>> ? ? s->hw->cmd->set_undefinedimagesize[1] = 0x3D;
> diff ./epson2-commands.c
> ../../sane-backends-1.0.22/backend//epson2-commands.c
> 56a57,84
>> /* Test implementation of ICAP_UNDEFINEDIMAGESIZE */
>> SANE_Status
>> esci_set_undefinedimagesize(Epson_Scanner * s, SANE_Bool x)
>> {
>> ? ? SANE_Status status;
>>
>> ? ? unsigned char handshake[2];
>> ? ? SANE_Bool params[1];
>>
>> ? ? DBG(8, "%s: undefinedimagesize = %d\n", __func__, x);
>>
>> ? ? if (!s->hw->cmd->set_undefinedimagesize) {
>> ? ? ? ? DBG(1, "%s: not supported\n", __func__);
>> ? ? ? ? return SANE_STATUS_GOOD;
>> ? ? }
>>
>> ? ? handshake[0] = s->hw->cmd->set_undefinedimagesize[0];
>> ? ? handshake[1] = s->hw->cmd->set_undefinedimagesize[1];
>>
>> ? ? status = e2_cmd_simple(s, handshake, 2);
>
>> ? ? if (status != SANE_STATUS_GOOD)
>> ? ? ? ? return status;
>>
>> ? ? params[0] = x;
>> ? ? return e2_cmd_simple(s, params, 1);
>>
>> }
>>
> diff ./epson2-commands.h
> ../../sane-backends-1.0.22/backend//epson2-commands.h
> 31a32
>> /*#define esci_set_undefinedimagesize(s,v) ? ? ? ? ? ?e2_esc_cmd(
>> s,(s)->hw->cmd->set_undefinedimagesize, v)*/
> 38a40
>> SANE_Status esci_set_undefinedimagesize(Epson_Scanner * s, SANE_Bool x);
> diff ./epson2.h ../../sane-backends-1.0.22/backend//epson2.h
> 99a100,102
>
>> /* undocumented sensor feature for V700 */
>> #define SANE_EPSON_CAP_UNDEFINEDIMAGESIZE ? 0x803D
>>
> 220a224
>> ? ? unsigned char set_undefinedimagesize[2]; /* For scanning the full area
>> in TPU on V700*/
> 262a267
>> ? ? OPT_UNDEFINEDIMAGESIZE,
> 340a346
>> ? ? SANE_Bool undefinedimagesize; /* does the scanner have support for
>> full sensor mode when TPU is source? */
> 393a400
>> ? ? SANE_Bool undefinedimagesize;
> diff ./epson2-ops.c ../../sane-backends-1.0.22/backend//epson2-ops.c
> 152a153,155
>> ? ? dev->cmd->set_undefinedimagesize[0] = 0x80;
>> ? ? dev->cmd->set_undefinedimagesize[1] = 0x3D;
>>
> 182a186
>>
> 473a478,480
>> ? ? s->hw->cmd->set_undefinedimagesize[0] = 0x80;
>> ? ? s->hw->cmd->set_undefinedimagesize[1] = 0x3D;
>>
> 761a769,773
>
>> ? ? /* There should be a proper way to test if scanner supports
>> ? ? ? ?full sensor mode */
>>
>> ? ? dev->undefinedimagesize = SANE_TRUE;
>>
> 768a781
>>
> 994a1008,1016
>> ? ? ? ? if (s->hw->undefinedimagesize == SANE_TRUE) {
>> ? ? ? ? ? ? if (s->val[OPT_UNDEFINEDIMAGESIZE].w == SANE_FALSE) {
>> ? ? ? ? ? ? ? ? DBG(1, "setting capability 'Undefined Image Size'");
>> ? ? ? ? ? ? ? ? esci_set_undefinedimagesize(s, SANE_TRUE);
>> ? ? ? ? ? ? } else {
>> ? ? ? ? ? ? ? ? DBG(1, "deselecting capability 'Undefined Image Size'");
>> ? ? ? ? ? ? ? ? esci_set_undefinedimagesize(s, SANE_FALSE);
>> ? ? ? ? ? ? }
>> ? ? ? ? }
> 1065a1088,1094
>
>> ? ? ? ? if (status != SANE_STATUS_GOOD)
>> ? ? ? ? ? ? return status;
>> ? ? }
>>
>> ? ? if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_UNDEFINEDIMAGESIZE].cap)) {
>> ? ? ? ? status = esci_set_undefinedimagesize(s,
>> s->val[OPT_UNDEFINEDIMAGESIZE].w);
>
>>
>
>
> --
> sane-devel mailing list: sane-devel at lists.alioth.debian.org
> http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/sane-devel
> Unsubscribe: Send mail with subject "unsubscribe your_password"
> ? ? ? ? ? ?to sane-devel-request at lists.alioth.debian.org



-- 
"The truth is an offense, but not a sin"

Reply via email to