Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как отключить лампу на сканере во время сканирования? UMAX Astra 3400 РЕШЕНО  (Прочитано 3158 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xintrea

  • Автор темы
  • Новичок
  • *
  • Сообщений: 38
    • Просмотр профиля
Здравствуйте господа!


Задавал свой вопрос на ЛОР-е, ответов небыло. Может здесь кто-нить поможет. Система - Kubuntu 7.04.

Вопрос у меня есть несколько неожиданный... Дело в том, что мой сканер UMAX Astra 3400 несколько глючно работает под Linuxом. А точнее, сразу после включения, при первом сканировании, забывает включить лампу. А потом как повезет - или не будет при последущих сканированиях включать, или будет.

Это навело меня на мысль, что данный глюк можно использовать. А именно - для оцифровки диафильмов, засунув сканер в фотоувеличитель, и сосканировав белую бумагу, на которой проецируется изображение. Естественно, такое сканирование должно происходить с отключенной лампой.

Так вот, как только я до этого додумался, собрал увеличитель, засунул в него сканер - глюк исчез! Теперь я не могу вообще добиться того, чтоб сканирование шло без включенной лампы.

Ранее, чтобы гарантированно включить лампу, я пользовался командой

scanbuttond -r 100000

Совершенно непонятно, как эта команда влияет на включение лампы (ведь это запуск демона следилки за нажатыми клавишами на сканере), но лампа включается, и обычное сканирование (с включенной лампой) идет нормально.


Теперь мне нужно сделать обратное действие - отключать лампу при сканировании. КАК ЖЕ ОТКЛЮЧАТЬ ЛАМПУ?

Я пробовал сканировать напрямую через scanimage (а не через XSANE) командой

scanimage --mode Color --depth 8 --resolution 200 --lamp-switch=yes --format tiff > file_01.tif

(Да, тут ошибки нет, параметр lamp-switch надо указывать со знаком равно). Пробовал этот параметр выставить в no. В любом случае лампа включается перед сканированием. Пробовал добавить опцию --lampoff-time 0, (и 1 и даже -1 пробовал..) лампа все равно горит при сканировании, в общем игрался с опциями как мог, лампа всеравно включается.

Заглядывал в /etc/sane.d/pulstek.conf (сканер определяется как plustek:libusb:001:003) и в umax.conf. Впринципе, все опции что там прописаны, можно выставлять как параметры scanimage. Так что эти файлы неинтересны.


ВОПРОС. Что еще можно сделать, чтобы сканировать с отключенной лампой? Сканер это может делать (когда что-то глючит), но мне нужно гарантировано управлять включением-выключением лампы. Залезать в сканер и отключить лампу - не предлагать, там все очень хрупкое, остаться без сканера не хочу. Кто в теме, хелп ми пожалусто.

Вот что рассказывает про себя сканер

# scanimage -L -v
device `plustek:libusb:001:003' is a UMAX 3400 USB flatbed scanner

Вот какие опции доступны

# scanimage --help -d plustek:libusb:001:003
Options specific to device `plustek:libusb:001:003':
  Scan Mode:
    --mode Lineart|Gray|Color [Color]
        Selects the scan mode (e.g., lineart, monochrome, or color).
    --depth 8|14 [8]
        Number of bits per sample, typical values are 1 for "line-art" and 8
        for multibit scans.
    --source Normal|Transparency|Negative [inactive]
        Selects the scan source (such as a document-feeder).
    --resolution 50..1200dpi [50]
        Sets the resolution of the scanned image.
    --preview[=(yes|no)] [no]
        Request a preview-quality scan.
  Geometry:
    -l 0..215mm [0]
        Top-left x position of scan area.
    -t 0..297mm [0]
        Top-left y position of scan area.
    -x 0..215mm [103]
        Width of scan-area.
    -y 0..297mm [76.21]
        Height of scan-area.
  Enhancement:
    --brightness -100..100% (in steps of 1) [0]
        Controls the brightness of the acquired image.
    --contrast -100..100% (in steps of 1) [0]
        Controls the contrast of the acquired image.
    --custom-gamma[=(yes|no)] [no]
        Determines whether a builtin or a custom gamma-table should be used.
    --gamma-table 0..255,... [inactive]
        Gamma-correction table.  In color mode this option equally affects the
        red, green, and blue channels simultaneously (i.e., it is an intensity
        gamma table).
    --red-gamma-table 0..255,... [inactive]
        Gamma-correction table for the red band.
    --green-gamma-table 0..255,... [inactive]
        Gamma-correction table for the green band.
    --blue-gamma-table 0..255,... [inactive]
        Gamma-correction table for the blue band.
  Device-Settings:
    --lamp-switch[=(yes|no)] [no]
        Manually switching the lamp(s).
    --lampoff-time 0..999 (in steps of 1) [300]
        Lampoff-time in seconds.
    --lamp-off-at-exit[=(yes|no)] [yes]
        Turn off lamp when program exits
    --warmup-time -1..999 (in steps of 1) [-1]
        Warmup-time in seconds.
    --calibration-cache[=(yes|no)] [no]
        Enables or disables calibration data cache.
    --speedup-switch[=(yes|no)] [yes]
        Enables or disables speeding up sensor movement.
    --calibrate [inactive]
        Performs calibration
  Analog frontend:
    --red-gain -1..63 (in steps of 1) [-1]
        Red gain value of the AFE
    --green-gain -1..63 (in steps of 1) [-1]
        Green gain value of the AFE
    --blue-gain -1..63 (in steps of 1) [-1]
        Blue gain value of the AFE
    --red-offset -1..63 (in steps of 1) [-1]
        Red offset value of the AFE
    --green-offset -1..63 (in steps of 1) [-1]
        Green offset value of the AFE
    --blue-offset -1..63 (in steps of 1) [-1]
        Blue offset value of the AFE
    --redlamp-off -1..16363 (in steps of 1) [inactive]
        Defines red lamp off parameter
    --greenlamp-off -1..16363 (in steps of 1) [inactive]
        Defines green lamp off parameter
    --bluelamp-off -1..16363 (in steps of 1) [inactive]
        Defines blue lamp off parameter
  Buttons:

Type ``scanimage --help -d DEVICE'' to get list of all options for DEVICE.

List of available devices:
    plustek:libusb:001:003


Кто что может сказать?
« Последнее редактирование: 03 Апреля 2008, 14:32:20 от xintrea »

Оффлайн chain

  • Старожил
  • *
  • Сообщений: 1263
    • Просмотр профиля
Цитировать
Это навело меня на мысль, что данный глюк можно использовать. А именно - для оцифровки диафильмов, засунув сканер в фотоувеличитель, и сосканировав белую бумагу, на которой проецируется изображение. Естественно, такое сканирование должно происходить с отключенной лампой.
да:))) не оскудела земля русская:)))
извини, что не по теме, просто полет фантазии порадовал)

а по теме, посмотри про конфиг umax
http://www.mcs.vuw.ac.nz/cgi-bin/man2html?sane-umax(5)
там есть параметр по контролю лампы, но поддерживается не всеми моделями
может после его активации, станет возможно лампой командовать?
-вечный чайник-

Оффлайн xintrea

  • Автор темы
  • Новичок
  • *
  • Сообщений: 38
    • Просмотр профиля
Цитировать
а по теме, посмотри про конфиг umax

Да, я смотрел уже этот конфиг. Там параметры включения лампы имеют такой смысл

- Включить ручное управление лампой
- Включить ручное управление лампой, если драйвер это позволяет.


Я тему на ixbt поднял, посмотрим что там ответят спецы.
http://forum.ixbt.com/topic.cgi?id=13:39975

Пока что я так понял, никто не знает, как управляется лампа на сканере - драйвером компа, или логикой сканера при начале сканирования. Есть подозрение, что именно компом, потому что в винде лампа горит всегда, а в Linuxе через sane - подглючивает как было написано выше.

Оффлайн Undo

  • Любитель
  • *
  • Сообщений: 73
    • Просмотр профиля
заклейте лампу чёрным скотчем :)

Оффлайн xintrea

  • Автор темы
  • Новичок
  • *
  • Сообщений: 38
    • Просмотр профиля
Ну вот, я сделал то что хотел. Сканер не разбирал. Разобрался в драйвере, сделал модификацию. Кратко по пунктам, что пришлось сделать. Записываю больше для себя чтоб не забыть.


1. Надо выяснить текущую весию SANE-бакэнда, который установленн в системе. Для этого заходим в /usr/lib/sane и смотрим, какие версии у большинства libsane-* so-файлов. В моем случае (Kubuntu 7.04) это 1.0.18.

2. Идем на сайт http://www.sane-project.org на страницу Download, потом переходим на зеркало, например http://alioth.debian.org/frs/?group_id=30186. Скачиваем исходники бакэнда нужной версии. В моем случае это sane-backends-1.0.18.tar.gz

3. Распаковываем исходники в отдельный каталог. В этом каталоге даем команды configure и make. Make install не делаем! Убеждаемся что все компилируется, компиляция не вываливается с ошибкой.

4. Находим в исходниках файлы бакэнда для своей модели сканера. У меня сканер UMAX, определяется как plustek (можно увидеть это через команду scanimage -L -v), так что искал именно файлы для plustek.

5. Исходные файлы с бакэндом для plustek находятся в подкаталоге /backend, и называются

-rw-r--r-- 1 xi xi 82148 2006-07-03 01:32 c.c
-rw-r--r-- 1 xi xi 13459 2006-05-31 20:31 plustek.h
-rw-r--r-- 1 xi xi 41413 2008-04-03 01:33 plustek-usb.c
-rw-r--r-- 1 xi xi 39846 2006-06-11 15:10 plustek-usbcal.c
-rw-r--r-- 1 xi xi 22154 2006-06-11 15:10 plustek-usbcalfile.c
-rw-r--r-- 1 xi xi 97690 2006-05-31 20:31 plustek-usbdevs.c
-rw-r--r-- 1 xi xi 23277 2006-05-31 20:31 plustek-usb.h
-rw-r--r-- 1 xi xi 46310 2008-04-03 02:02 plustek-usbhw.c
-rw-r--r-- 1 xi xi 48229 2006-05-31 20:31 plustek-usbimg.c
-rw-r--r-- 1 xi xi 8764 2006-05-31 20:31 plustek-usbio.c
-rw-r--r-- 1 xi xi 6351 2006-05-31 20:31 plustek-usbmap.c
-rw-r--r-- 1 xi xi 47590 2006-05-31 20:31 plustek-usbscan.c
-rw-r--r-- 1 xi xi 92572 2006-05-31 20:31 plustek-usbshading.c

Там же еще будут конфигурационные файлы и файлы для осуществления автоматической сборки, но они нам неинтересны, нам нужны только исходники *.h и *.c. Там же будут файлы с названием plustek-pp.*, эти файлы тоже рассматривать не стоит, они нужны для сканеров, подключаемых по LPT порту, а у нас USB сканер.

6. Делаем пробное сканирование с получением полного дампа отладки, чтобы знать что примерно искать, и есть ли в этом дампе хоть какие упоминания о включении/выключении лампы. Пробное сканирование делается в моем случае двумя командами

export SANE_DEBUG_PLUSTEK=255
scanimage --mode Color --depth 8 --resolution 300 --format tiff >scanfile01.tif 2>dbg.log

После их выполнения, получим в текущем каталоге кучу *.raw файлов, файлов результатов калибровки сканера, и среди этой кучи будет текстовый файл полного лога сканирования dbg.log

7. Делаем поиск по логу по подстроке "lamp" чтобы понять если там какие-то упоминания о управлении лампы. Видим, что есть нечто

[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] LAMP-STATUS: 0x00000000
...
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000
...
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000
[plustek] Switching Lamp on
[plustek] usb_switchLampX(ON=0,TPA=1)
[plustek] Switch Lamp: 0, regs[0x5b] = 0x74
[plustek] usb_switchLampX(ON=1,TPA=0)
[plustek] Switch Lamp: 1, regs[0x5a] = 0x4d
[plustek] REG[0x5a] = 0x4d (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000001
...
[plustek] usb_switchLampX(ON=0,TPA=0)
[plustek] Switch Lamp: 0, regs[0x5a] = 0x45
...
[plustek] usb_switchLampX(ON=1,TPA=0)
[plustek] Switch Lamp: 1, regs[0x5a] = 0x4d
...
[plustek] sane_close
[plustek] sane_exit
[plustek] Shutdown called (dev->fd=-1, libusb:001:003)
[plustek] Waiting for scanner-ready...
[plustek] Switching lamp off...
[plustek] REG[0x5a] = 0x4d (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000001
[plustek] Switching Lamp off
[plustek] usb_switchLampX(ON=0,TPA=0)
[plustek] Switch Lamp: 0, regs[0x5a] = 0x45
[plustek] REG[0x5a] = 0x45 (msk=0x08)
[plustek] REG[0x5b] = 0x74 (msk=0x80)
[plustek] LAMP-STATUS: 0x00000000

8. Начинаем изучать исходники, чтобы понять как там все устроено. Быстро выясняем, что записи в логе вида usb_switchLampX(...) - это вызов функции с таким именем. Эта функция лежит в файле plustek-usbhw.c. Она вызывается только из функции usb_switchLamp(). Смотрим логику, как usb_switchLampX() вызывается из usb_switchLamp(). Понимаем, что usb_switchLamp() - это основная функция, используемая в коде, и она принимает два значения - идентификатор девайса, и булевое значение - включить или выключить лампу. А функция usb_switchLampX() выбирает внутри себя, какую конкретно лампу включать - обычную или лампу слайдадаптера (которого у меня нет).

9. Нам нужно сделать по-быстрому библиотеку, которая бы тупо не включала ни одну лампу вообще. Для этого, в начале функции usb_switchLamp() принудительно изменяем принятый ею параметр на "выключено"

on=SANE_FALSE;

10. Пробегаем исходники на предмет обнаружения прочих функций, работающих с лампой. В том же файле plustek-usbhw.c находим функцию usb_LampOn(...), которая включает-выключает лампу, вызывая внутри себя usb_switchLampX(...), но помимо этого что-то пишет в какие-то управляющие регистры сканера. С этой функцией поступаем точно так же, в начале функции принудительно изменив принимаемый ею параметр

fOn=SANE_FALSE;

11. Возвращаемся в корневой каталог, куда были размещены исходники, и снова даем команду make. Будет пересобран только файл libsane-plustek.so.1.0.18, который лежит в подкаталоге /backend/.libs

12. Сохраняем файл библиотеки

/usr/lib/sane/libsane-plustek.so.1.0.18

в укромное место, и под правами рута заменяем его на файл

каталог_с_исходниками/backend/.libs/libsane-plustek.so.1.0.18


Все! Теперь, если начать сканирование, лампа включаться не будет.


О результатах сканирования проецируемого изображения напишу пожже, пока скажу что они неудовлетворительные. А если на стекло сканера положить пленку, сверху прижать матовым стеклом, и светить яркой лампой, то качество гораздо лучше. Этакий бесплатный слайдадаптер получается. Но разрешение полученного изображения не то, какое бы хотелось. Да и полюбому готовый слайдадаптер дает более хорошую картинку. А картинка, снятая с настоящего слайд адаптера, меня тоже не удовлетворяет. Так что надо делать как-то по-другому.
« Последнее редактирование: 03 Апреля 2008, 14:29:55 от xintrea »

Оффлайн chain

  • Старожил
  • *
  • Сообщений: 1263
    • Просмотр профиля
<applause>
будем считать, что это смайл с аплодисментами)
-вечный чайник-

 

Страница сгенерирована за 0.21 секунд. Запросов: 24.