Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sane.Option doesn't properly handle buttons named "scan" #71

Open
BonkaBonka opened this issue Sep 9, 2021 · 1 comment
Open

sane.Option doesn't properly handle buttons named "scan" #71

BonkaBonka opened this issue Sep 9, 2021 · 1 comment

Comments

@BonkaBonka
Copy link

I have a couple of scanners (a Fujitsu SnapScan 1500 and a Canon CanoScan LiDE 210) that have front-panel buttons that can initiate scans. Unfortunately, the primary scan buttons are named "scan" and that collides with the bound method to ask the scanner to begin scanning.

>>> import sane
>>>
>>> sane.init()
(16777247, 1, 0, 31)
>>> sane.get_devices()
[('genesys:libusb:001:008', 'Canon', 'LiDE 210', 'flatbed scanner'), ('fujitsu:ScanSnap S1500:56050', 'FUJITSU', 'ScanSnap S1500', 'scanner')]
>>>
>>> scanner = sane.open('fujitsu:ScanSnap S1500:56050')
>>> scanner.opt['scan']

Name:      scan
Cur value: <bound method SaneDev.scan of <sane.SaneDev object at 0x7f8567e60f40>>
Index:     91
Title:     Scan button
Desc:      Scan button
Type:      TYPE_BOOL
Unit:      UNIT_NONE
Constr:    None
active:    yes
settable:  no

Modifying sane.py on line 307 to change the method name from scan to, say, doscan "fixes" the issue for me:

>>> scanner.opt['scan']

Name:      scan
Cur value: 0
Index:     91
Title:     Scan button
Desc:      Scan button
Type:      TYPE_BOOL
Unit:      UNIT_NONE
Constr:    None
active:    yes
settable:  no

I'm not sure what the proper way to fix this for real. :/

@olethanh
Copy link
Contributor

olethanh commented Jul 25, 2023

For future readers, I managed to get around it this way (by poking at the code), which return the current value of the button (1 or 0 if pressed or not respectively) with a bit of a delay

scanner.dev.get_option(scanner['scan'].index)

Not sure how I would get that to launch a scan action, apart from polling it constantly. Not an expert in sane.

Complete polling example

import sane
sane.init()
scanner = sane.open(sane.get_devices()[0][0])
import datetime
from datetime import datetime
while True:
    print(datetime.now().isoformat(), 'pressed?', scanner.dev.get_option(scanner['scan'].index))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants