Scanner-logiscan

Andreas Beck

becka@sunserver1.rz.uni-duesseldorf.de

ݗǎ - {

kawagisi@yk.rim.or.jp

Revision History                                                       
Revision v0.0.4j                      1997N1115                   
̖|̃[X                                                     
Revision v0.0.4                       1995N214                    
logiscan-0.0.4 pbP[W̃[X                                    

LOGITECH SCANMAN+ 400dpi nhwhXLiphCo "logiscan
v0.0.4" ɕt̃hLg



Table of Contents
̕ɂ
1. README
   
    1.1. Copyright
    1.2. ͂߂
    1.3. CXg[̕@
    1.4. [h̃p[^̕ύX@
    1.5. vO}̂߂̒ӎ
    1.6. oO񍐂̒ӓ_
    1.7. ȂwvƏ
   
2. README.ioctl
   
    2.1. ͂߂
    2.2. T|[gĂ ioctl @\
    2.3. t^
   
3. demo/README
   
    3.1. Copyright
    3.2. fvOɂ
    3.3. TODO
   


̕ɂ

    LOGITECH SCANMAN+ 400 dpi handheld scanner driver version 0.0.4
   
̃hLǵA LOGITECH SCANMAN+ 400 dpi nhwhXLiph
Co Version 0.0.4 ɕt̃hLg Andreas Beck
<becka@sunserver1.rz.uni-duesseldorf.de> ̋𓾂Ė|󂵂̂łB

  P  ̃t@CF README
          t@C̓tF Feb 14  1995
                    F Andreas Beck
  Q  ̃t@CF README.ioctl
          t@C̓tF Dec 24  1994
                    F Andreas Beck
  R  demo fBNg̒ README
          t@C̓tF Nov 21  1994
                    F Andreas Beck

  쐬 F 1997N1115
  | F  ǎ  <kawagisi@yk.rim.or.jp>

y1zt@C̓ƓWJ

̃\tg(logiscan0.0.4) ͉Lł܂B

 E ftp://tsx-11.mit.edu/pub/linux/ALPHA/scanner/
   
_E[h玟̂悤ɂ /usr/src/ fBNgɓWJ
B

 

  # cd  /usr/src                                                    
  # tar xvfz ~/logiscan-x.x.tar.gz                                  

 

(L logiscan-x.x.tar.gz A~/ fBNgɂꍇłA
O̎͂̃fBNgɍ킹ĕςĉ) /usr/src/logiscan-x.x/
fBNgAɃt@CWJ܂B
logiscan-0.0.4.tar.gz ɂ͉L̂悤ȃhLgt@CĂ
B


    (1) README                                                                
    (2) README.ioctl (logi32.o ɂĒ񋟂 ioctl C^tF[Xg  
                      AvP[VJ҂̃KChC)                   
    (3) CHANGELOG    (ύX)                                               
    (4) CREDITS      (̃vO̍쐬ɋ͂l̈ꗗ)                 
    (5) COPYING      (GNU GENERAL PUBLIC LICENSE  Version 2, June 1991)       
    (6) demo fBNg̒ README                                        


̕ Scanner-HOWTO-logiscan ́AL̂ (1) (2) (6) 󂵂
łB (3) (4) (5) ͌B

y2zŐVłƃ[AhX

ŐVł́Alogiscan0.0.5 ŉL_E[hł܂B

 E http://sunserver1.rz.uni-duesseldorf.de/~becka
   
҂ւ̃[̓AhXύXĂ܂̂ŒӂĉB

  ()  becka@hp.rz.uni-duesseldorf.de                              
  (V)  becka@sunserver1.rz.uni-duesseldorf.de                      

Ŗ󂵂RhLĝ 0.0.4  0.0.5 ŕύXAS
̂悤łB҂̃[AhX́A0.0.5 łÂ܂܂Ȃ̂ŗvӂ
B



Chapter 1. README

1.1. Copyright

Copyright (C) 1994  Andreas Beck <becka@hp.rz.uni-duesseldorf.de>
y󒍁z݂̃AhX́Abecka@sunserver1.rz.uni-duesseldorf.de

 

̃vO̓t[\tgEFAłBȂ́A Free Software
Foundation sĂ GNU General Public License ̃CZX̃o[
WQA܂(Ȃ̃IvV)ȍ~̏ɏ]čĔzz
ύX邱Ƃł܂B

̃vÓAɗƂ҂ĔzzĂ܂BA
ۏ؂܂Biprւ̓KɂĂ̈Öق̕ۏ؂
܂Bڂ́AGNU  General Public License B

Ȃ́ÃvOƈꏏ GNU General Public License ̃Rs[
󂯎ׂłBłȂȂ΁A Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA Ɏ莆ĉB



1.2. ͂߂

Hi folks!

 LOGITECH SCANMAN+ XLip̃hCoŁAp̃C^tF[X{
[hʂăhCu܂B̃XLiɂ͂̃o[W
܂ÃhCo͏ȂƂ̂T|[g܂B

 1. Â Logitech Scanman : 200dpi Œ̔XLi (ǂȂ
    łH̓fBUł܂ĤƂ낱͉𑜓x
     Scanman32 ƂĈ܂)
   
 2. V Logitech Scanman32 (aka Scanman+) :  100`400 dpi
    ̃XLiŁA 6x6 fBU(𑜓x 1/6 ɉ 37Fɂ)
    \B
   
 3. Logitech Scanman256 :
   
    100`400 dpi ̃OCXP[EXLiŁAfBU 1bit(
    Ql), 4bit(16K), 6bit(64K), 8bit(256K)̉𑜓x
    B̃^CṽXLiɂ͒ӂĉɏqׂ悤ɂ
    ͂̃o[W܂(قȂn[hEFAgpĂ
    )Blɂ Rev-03 {[ḧĂꂽ̂ŁA
    ݂͌ł̓tBbNXĂƎv̂łAđ̂
    ̂Ƃ... ]ăhCo "incompatible
    scanner-interface " ƕ񍐂Ă炻͕ʂ̖̌݊{[h
    邩A邢̓x[X I^O AhX̐ݒ肪ԈĂ܂B̂
    Ȏ́AȂ̃XLiE\tgEFAEfBXNɓĂ
    HHSCAND.SYS ɑĉB
   
    hCo insmod gă[h鎞ɃXLĩ^Cvo
    ܂B
   
    hCo "Unknown" ƃ|[g邪XLi͓삷Ƃꍇ
    ( code-tweaking Kvł...)AȂ̃n[hEFAǂ
    悤ɂČo邩悤āAǂ̂悤ȕύXKv
    ɋĉB́AȂ̃pb`̃[Xɓ悤
    ɂ܂BSĂύX悤ȃpb`ɑȂŉBA
    ݂͌̂̂{ɈقȂ̂悤ȃXLi̓T|[g
    ܂B
   
    ̃hCo̓XLiɕt MS-LOSS pXLihCo [1] t
    AZuďW߂ɂĂ܂BȊO̒ǉAv]
    AāAoO񍐂΁AɌĉB(L̃oO
    ) ͓ɁÃXLiEfoCXhCol
    ̃tB[hobN𓾂邱Ƃɋ܂B
   
     Linux ̑SẴXLihCoɎgC^tF[X
    ɂ܂Ƃ߂邱Ƃł邩܂BȂΑ̐lB
    ł낤AJt X x[X̃XLivOÃXLi
    ŃT|[gꓮ삷悤ɂȂł傤B
   
    ͊ M105  A4-tech hCo̍҂Ƃ͘Aς݂ŁA̓XL
    iIvVp ioctl "\"Zbg̐ݒɃgCĂ܂B
    Ȃ̍ƂɎQ邱ƂɋȂ(Ȃ͂̂悤 API
    ̌o邩Ȃ) README.ioctl ǂ݁A(܂ Thomas 
     Michael LQ)ɑĉB
   
    ܂AȂfGȃXLivO玄ɑĉB
   


1.3. CXg[̕@

 

 1. hCóAJ[lE[_uEW[Ȃ̂ŁA炩ɍŏ
    ׂƂ `modutils' pbP[WĂȂꍇ͂
    CXg[邱ƂłB
   
 2. src fBNgɈڂ logi32.h ̐擪ĉBKvɉ
    A܂n[hEFAݒɉĒ`ҏW܂B IOBASE ̓fB
    bvXCb`̐ݒɍ킹Ȃ΂܂񂪁A IRQ  DMA ̓\t
    gEFAőI\łB IRQ  DMA ͑̃n[hEFAɂĎg
    ĂȂ̂gĉB(SoundBlaster CXg[Ă
    Ȃ DMA 1 ͎gĂƎv܂)
   
    ݒł̂ IRQ  2(9),3,4,5,7,9(2),11,12 ŁADMA  1 ܂
    3 łBŐṼJ[l(X^bNhW[T|[gĂ)ƁA
    Ή modutils ł́AW[̃[hɂ̒l(ƁAW
    [foCXԍB4)Q )ύX邱Ƃł܂Bǂ̂悤
    ɂ̂́A"man insmod" ŒׂĉB֌Ŵϐ
    logi32.c ̐擪A܂̓hCo풓 ksyms ̏o͂̒
    ܂B
   
 3. scanner.h ǂKȏꏊ( usr/local/include )Ɉڂĉ
    Bscanner.h ͂Ȃ̃VXe "̃o[W" Œ
    Ă̂ƂƂ悭oĂĉB́AhCo
    XLi\tgEFAł͂Ȃ scanner.h ƃRpCꂽ
    guRĂ܂B
   
    PINT (UNIX p̋ʃXLiC^tF[XBCopyright (C) 1994
    Kenneth Stailey ken@spacenet.com)̃T|[gŃRpCȂ
    Makefile  -D ɑ邱ƂCl[uɂA<scanio.h> t@C
    𑼂̓K؂ȏꏊɈڂĉB(͑̃VXe /usr/
    [local]/include/sys ɂ悤ɌƂ_ɒӂĉB
    AɒuƂ̂͗ǂlł)
   
    hCoRpCɂ́A
    
      make                                                  
    
    Ɠ͂ĉBW[gݍނɂ́A
    
      insmod logi32.o                                       
    
    Ɠ͂ĉB
   
    V{ƃ[_ẮA kernel/
    ksyms.c ɉĉB (܂́AƗǂ̂́ÃhCoɂ
    Ă͖{ɌÂJ[lAbvf[g邱Ƃł...)
   
    kernel/ksyms.c ύXׂȂAJ[lăRpCA
    ̕ύX𔽉f邽߂Ƀu[gKv܂B
   
 4. foCX̃XyVt@C쐬܂B
    
      mknod -m 444 /dev/logiscan c 26 0                     
    
    /dev/scan ɃV{N𒣂܂B
    
      ln -s /dev/logiscan /dev/scan                         
    
    MAKEDEV ̍ŐVo[ẂAK؂ȃfoCX𐶐邱Ƃł
    łBuMAKEDEV gOɁv logi32.o [hĂȂ΂
    ȂƂɒӂĉB MAKEDEV ́Alogitech XLihCo
    oAɑ݂郁W[foCX邽߂ /proc/
    devices ̏głBɏڂƂ́A֌WhL
    gB
   
        (): L `26' ̓W[foCXԍłBꂪɎg
        Ăꍇ([h悤ƂہAhCóucannot
        register major numberFW[ԍo^ł܂vƕ
        )́A̎gĂȂԍI `logi32.h' 
        LOGI32_SCANNER_MAJOR ̒`ɕύXĉB
       
        VJ[lł́AW[𓮓IɊt邱Ƃł܂B
        ̂悤ɂ́A` 0 ɁuZbgĉBAA
        ƁAhCo[hxɃW[ς̂ŁAfo
        CX̃XyVt@C쐬KvƂƂɒӂ
        ĉB
       
 5. `logi32.o' J[lW[L[v邽߂̂ǂɃRs[
    B
   
 6. mF
   
    (s)vgalib 삵ĂȂA ./demo fBNg gifscan r
    hĉBsvgalib ȂÃpbP[WɓĂXN
    vg scan.sh ͕svłBꂩAȂ̂߂ɏȃXLvO
    Ă邢l܂ł́Acat </dev/scan > t@C
    ̂悤ȂŖ鑼܂B(܂́AGIF t@C
    "blind-scan" ł悤ɂ邽߂ gifscan SĂ vga Ɋւ
    ̂菜Kv܂) pbm t@CɒڃXL̂
    i[ pbmscan ƂVpbP[W܂B svgalib
    svŁAGIF ɏނ肩Ȃ荂łB PINT C^tF[
    Xpɉ邩m܂BgǂAvP[V
    ĉB (\Ȃ)̃hCoœȂ
   


1.4. [h̃p[^̕ύX@

V modutils (ƃX^bNhW[T|[g)ŁA[hɉL̃p
[^̒l^邱Ƃł܂B]ĐݒςꍇłAh
CoăRpCKv͂܂B

"insmod logi32.o LOGI_FOOBAR=%d" ŃhCo[h܂B%d p
[^ݒ肷邽߂̒lłB̋@\ɊւڂƂ insmod 
hLgB

gpłp[^͈ȉ̂ƂłB


  LOGI_DEBUG     0 ȊO̒lɂāAfobO[hŃRpCƁA         
                hCo̓fobOo͂܂BłȂƂ͂̕ϐ      
                ܂B                                                        
                                                                                    
  LOGI_MAJOR    W[ԍB0 ́uJ[lɃt[Ȃ̂IvƂ      
                Ӗ܂B                                                        
                                                                                    
  LOGI_IOBASE   XLĩx[XAhXłB͐Ȃ΂Ȃ܂B      
                łȂƃhCo͏ƃ{[ȟoɎs܂B            
                                                                                    
  LOGI_IRQ      XLigp IRQ łB                                       
                                                                                    
  LOGI_DMA      DMA `lłB                                                




1.5. vO}̂߂̒ӎ

hCo̓XLiƂ̒ʐM̂߂ DMA ]IRQgp܂B
`l\tgEFAŐݒł܂B(ڂ logi32.h )
XLi͂PCXLxɊ荞ݗv𔭍ŝŁALȃf
[^𓾂邽߂ busy-wait Kv͂܂B

hCo͓(_Ci~bNAP[g)obt@L[v܂B
obt@̃ftHg̃TCÝA50 XLC (logi32.h Q)
 ioctl R[ʂĒ\łB(LQ) /dev/scan gĂ
vZXݎsĂĂȂĂAXLĩf[^]̓o
bt@tɂȂ܂ŗLł邱ƂɒӂĉB́AvZX
~XbvAEgĂAobt@Xy[X̂Ńf[^
͖ƂƂӖ܂B

hCóA read(2) R[ŔCӂ̃oCgǂݍނƂł
悤ɂȂĂ܂Aobt@͈ read(2) R[Ńobt@Ƀt
Bbgȏ̃oCgvꍇ͂܂ȂƂ_ɒӂ
ĉBʏAb/w [hŃXLꍇ͈ɂPXLC
ǂݍ݁An[tg[[h̏ꍇ͂Ԃ񐔃XLCǂݍ
ނł傤B read(2) R[VOiɂĊ荞܂ƁAread(2) 
ǂݍ񂾃oCgԂ܂B͂ꂪ EINTR ̖߂ `WI' U
Ƃ͈قȂ邱ƂmĂ܂AXLił͂̕@ɂȂ
̂łB(ʂ̕@ł͓obt@̊̃f[^炩Ă
) XLifoCX select(2) ƁAobt@̒ɍŒłPX
LC̃f[^΁AfoCX `ready' ƂĔF܂B
ύXł܂B(LQ)

T|[gꂽ ioctl @\̂߂ɁA README.ioctl ǂ݉B
A ioctl C^tF[X͂܂JłA]ĕύX肻łB



1.6. oO񍐂̒ӓ_

oOoꂽ玄ɋĉBȂ̃oO񍐂ɂ͂Č
@A܂͏ȂƂ悤ɐmȏ󋵂̂Yt
ĉBbZ[W̒̃oOʁAႦ

 

  general protection: xxxx                                          
  EIP:    0010:xxxxxxxx                                             
  EFLAGS: xxxxxxxx                                                  
  eax: xxxxxxxx   ebx: xxxxxxxx   ecx: xxxxxxxx   edx: xxxxxxxx     
  esi: xxxxxxxx   edi: xxxxxxxx   ebp: xxxxxxxx                     
  ds: xxxx  es: xxxx  fs: xxxx  gs: xxxx                            
  Pid: xx, process nr: xx                                           
  xx xx xx xx xx xx xx xx xx xx                                     


Aʂ邢̓VXeOɂ΁A𐳊mɃRs[AXLih
Co[hĂ郍P[VƔrāA͈͓̔ǂ
ĉB insmod sƕ\܂B

 

  module `Logi32' (2 pages @ 0x0080c000) created                    
                             ^^^^^^^^^^ m肽̂͂ł... 

 

ꂪ͈͓̔ł͂Ȃ(J[l̂ǂ̏)ꍇAzSystem.map 
EIP ̒l (`0010:'ɑ̂ł͂Ȃ) {A zSystem.map ̊֌W
܂߂ĉB

Ȃ 'nm -n logi32.o >logi32.map' R}hgăhCo
}bvAȂ̃|[gɂ܂߂ĉBȂ̃oO񍐂
AQ̂̕ǂ炩ĂȂAɂƂĈӖƂ
ƂɒӂĉB



1.7. ȂwvƏ

hCop̃[OXgAɂ͍ŐV̏t@C
B


  >>>> info logiscan                                                
  [Last updated on: Wed Aug 10 10:41:58 1994]                       
                             LOGISCAN MILINGLIST                    
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~                



                         !!! dvȒ !!!                         

̃[OXǵALOGITECH ̌ȃXgł͂܂ !!!   

 


 .---------------------------------------------------------------------------.  
 |  ̃[OXǵA Linux p Logitech XLihCo̊J    |  
 |  ( Andreas Beck ) Ƃ̃[UԂ    |                                  
 |  R~jP[VeՂɂ邽߂ɃZbgĂ܂B                 |  
 |   Andreas ́A܂ ̑ Linux p Logitech XLihCo  |  
 |  ̐Vo[Wƃpb`zz邽߂ɂgĂ܂B             |  
 |                                                                           |  
 |  Linux ł͂Ȃ̃Iy[eBOVXe Logitech XLi̖肪   |  
 |  Ƃ͂̃XgwǂȂŉBł̓wv𓾂܂   |  
 `---------------------------------------------------------------------------'  

 

Xgwǂɂ́AbZ[W{fBɉL̂悤ɏ[
majordomo@venture.net ɑĉB

 

  subscribe logiscan [return mail address, optional]                


Ɉӌ͉LɑĉB

 

  logiscan@venture.net                                              

 

wǂ߂Ƃ́AbZ[W{fBɉL̂悤ɏ[
majordomo@venture.net ɑĉB

  unsubscribe logiscan                                              

 

̏̃eLXg~Ƃ́AL̂悤ɏ[
majordomo@venture.net ɑĉB

 

  info logiscan                                                     

 

  Bye, Andreas.

  Andreas Beck becka@hp.rz.uni-duesseldorf.de
  Germany

y󒍁z݂̃AhX́Abecka@sunserver1.rz.uni-duesseldorf.de

 

  **************************************************************************  
  M105 XLihCoAȂx[XƂȂ                           
  Thomas Faehnle     Thomas.Faehnle@student.uni-ulm.de   ɑϊӂ܂B   
  **************************************************************************  
  ɁA ioctl C^tF[Xg A4Tech J[XLihCo   
   Michael Beck       beck@hp832.informatik.hu-berlin.de ɂB         
  **************************************************************************  
  ɁA ioctl C^tF[Xg GS4500 XLihCo   
  Jan Willamowius    jan@janhh.sh.sub.de  ɂB                              
  **************************************************************************  




Chapter 2. README.ioctl

2.1. ͂߂

Hi folks!

͐p̃C^tF[X{[hʂăhCu LOGITECH
SCANMAN+ XLip̃hCołB

 logi32.o ɂĒ񋟂 ioctl C^tF[XgAvP[
VJ҂̃KChCłB

ǂȒĂ}܂AĎ͑̃XLipfoCXhCo̍
̃tB[hobNAʂ̃C^tF[X쐬邱Ƃo悤
ɁAɕ]܂B

͍܂ł Kenneth Stailey ken@spacenet.com tB[hobN
Ă܂Bނ́AIvVƂăT|[g\ PINT 
Ă΂ UNIX p̃XLiC^tF[XɎĂ܂B

̃pbP[W pint TufBNgɂhLgQƂĉ
B̓o[W 0.0.3 Ȃ̂ŁAŏqׂ`̓hCo̊Jɉ
ĕpɂɕύX邩ȂƂɒӂĉB

͂܂ŃXLiA܂͓l̃foCX ioctl C^tF[X݌v
ƂȂƂƂ𔒏󂵂Ȃ΂Ȃ܂BŎ̃Av[
`ɉԈĂ_A܂Aǂ΂Ƃ悭Ȃ邩
ĉB

܂AȂ ioctl API gđf炵XLjOEvO
ꂽAɑĉB



2.2. T|[gĂ ioctl @\

ȉɁAT|[gĂ ioctl @\܂B


  **********************************************************************  
  #define HSIOCGSCC               0x73e8  /* Get Scanner Capabilities */  
  **********************************************************************  


(ioctls  MAGIC NUMBERS ́A߂ ioctl ̎dlɂȂ"W
[N[Abv"NɁAύX邾낤Ǝv܂) ̓XL
ĩVXeER[̒ōłdvłBƂ̂́AXLiɂǂ̂
ɃANZXAT|[gĂ̂ƂKvȏ̂قƂǑS
Ă񋟂邩łB

̊֐͉L̍\̂Ԃ܂B

 

  struct scanner_capabilities {                                             
                                                                            
          int o_scm_mono;         /* Options for monochrome mode */         
          int o_scm_grey;         /* Options for greyscale  mode */         
          int o_scm_true;         /* Options for true-color mode */         
                                                                            
          int o_xdpi;             /* Options for x resolution */            
          int o_ydpi;             /* Options for y resolution */            
                                                                            
          int o_bright;           /* Options for brightness */              
          struct minmax bright;                                             
          int o_contrast;         /* Options for contrast */                
          struct minmax contrast;                                           
          int o_hue;              /* Options for hue */                     
          struct minmax hue;                                                
          int o_sat;              /* Options for saturation */              
          struct minmax sat;                                                
                                                                            
          int phys_width;         /* Width in mm */                         
          int phys_length;        /* Length in mm */                        
                                                                            
          int av_options;         /* Number of available Options (0-32) */  
                                                                            
  };                                                                        


 'o_' ttB[h͑S "IvVEtB[h" ŉL̃t
OƑgݍ킹邱Ƃł܂B(܂A̓rbgtB[hł)

 

  #define SCC_SOFTSELECT  0x0001  /* IvV\tgEFAőI\ */        
  #define SCC_SOFTDETECT  0x0002  /* IvV\tgEFAŌo\ */        
  #define SCC_HARDSWITCH  0x0004  /* IvV̓n[hEFAXCb`   */        
                                  /* ([Ů֗^Kv) */                      
  #define SCC_EMULATE     0x0008  /* IvV̓hCoŃG~[g */  
  #define SCC_CANDO       0x000f  /* L̉ZbgꂽhCo */      
                                  /* T|[gIvV */                    


̃IvVǂ̂悤Ɏg̗܂B

n[hEFAXCb`găXLi dpi IłāA̐ݒh
CoǂݍނƂłȂÂ悤ɏ܂F

 

  SCC_SOFTDETECT|SCC_HARDSWITCH                                     

 

XLiP dpi ݒɌŒ肳ĂȂ"n[hEFAXCb`" 
܂񂪁AӂhCo͌Œ背[g "o\" łƂӂ
܂B ([g͌ŒȂ̂Ŗ{ɌoKv͂܂)F

 

  SCC_SOFTDETECT                                                    

 

XCb` dpi ݒIł邪AhCo̐ݒǂݍޕ@
 (͎ۂɂ͂͂ȂA̒ɂ͊ȃn[hEFA
܂) Ƃꍇ́ASCC_HARDSWITCH ZbgȂ΂Ȃ܂B

̃AvP[VɂƂĂ̈Ӗ

SCC_SOFTDETECT w肳ĂȂꍇAp[^̒lmȂ̂łȂ
肻͂悤ׂłB( SCC_SOFTSELECT 
SCC_SOFTDETECT ܂܂ȂƂ悤ȃP[Xzł܂...) 
lhCoɋ邽߂ɖI SMOD-call ɂăZbgȂ΂
܂B

SCC_HARDSWITCH ́AAvP[V[UɃn[hEFA𐳂ݒ肷
悤ɑKv邱ƂӖł傤B(ꂪɍsĂ邱
ƂĂAႦ SOFTDETECT ...ꍇ)

SCC_EMULATE IvV́AꂪIꂽƂAn[hEFÃ[
hłĂA܂͂̃[hT|[gĂȂĂhCo͂̃
[hG~[g邾낤ƂƂӖ܂B (Ⴆ΁ASẴ
mNXLi͒ʏAmNf[^SĂ̂R RGB lɊg邱Ƃɂ
gD[J[[hG~[g܂)

phys_* tB[h́AőXLEBhE̕ITCY mm ŕ\
B

minmax-structs ́Ap[^͈̔́AL̂悤ɒ`ꂽ\̂łB

 

  struct minmax {int min,max;};                                     

 

av_options tB[hɂ́A̓ʂȃXLi̎gp\ȃIvV̔
܂B̒ĺA 0-32 (inclusive) ͈̔͂ŁA HSIOCGOPT R[
̃f[^̐mȕϊKvłB

 

  ********************************************************************* 
  #define HSIOCGOPT               0x73e7  /* Get option descriptions */ 
  ********************************************************************* 

 

̃R[́ALtH[}bg32܂ł̃IvVfXNv^(
av_options Gg\񂷂ɂ͏\ł傤)̃tB[hԂ܂B

 

  struct scanner_option {int  options;    /* Option availability */ 
                          char name[20];};                          

 

'IvV'tO͏L 'o_'̒l̈Ƃ(Ȃ킿An[hEFA
܂̓\tgEFAɂăIvVIꂽAĂꂪ\tg
Ōo\A邢̓hCo@\G~[g悤Ȃ̂Ȃ) 
܂B

IvVƂāA[UIvVI^I^\邽߂̃Iv
V[U_CAOĂ܂B

ꂪoȂA邢͂Ȃ(Ⴆ OCR ̂悤ȃobNOh
)ꍇA̖OIvV̈Ӗo悤ɂׂłB

݊ۏ؂邽߂ɁAfoCXhCo̍쐬҂́A̋@\̖t
̔ނ̃ACfAɊmF邱Ƃコ܂B́AIvV
ɑ΂ĕ̖O邽߂ɁAĂ̕XV邱Ƃ
ł悤ɂ邽߂łB

݁AhCoɂĎgIvV͂P܂B

 

  IvV: "Dithering"                                           
  @\F     : dithered greyscale [h on/off                
  hCo  : logi32.o                                              
        : becka@hp.rz.uni-duesseldorf.de                        

 

 

  **************************************************************    
  #define HSIOCGSCT               0x73e9  /* Get Scanner Type */    
  **************************************************************    

 

̃R[́Aʏ ioctl C^tF[Xł̓ANZXłȂȃXL
i̓ʂ̋@\AvP[Vg悤ɂ邽߂ɁAXLin
[hEFAʂ܂BL̍\̂Ԃ܂B

 

  struct scanner_type {                                             
    char manufacturer[20],model[20];                                
  };                                                                

 

 

  **********************************************************        
  #define HSIOCGMOD               0x73ea  /* Get modeinfo */        
  **********************************************************        

 

̃R[́AXLǐ݂̃[h𓾂܂B

 

  struct modeinfo_struct {                                              
    int xdpi,ydpi;                /* resolution */                      
    int sc_mode;                                                        
    int depth;                    /* number of different colors (-1) */ 
    int bpl;                      /* bytes per scanline */              
    int left,right;               /* margins in Pixels */               
    int top,bottom;               /* margins in Lines */                
    int bright;                   /* brightness */                      
    int contrast;                 /* contrast */                        
    int hue;                      /* hue */                             
    int sat;                      /* saturation */                      
    int options;                  /* enabled options */                 
  };                                                                    

 

sc_mode ́AL̂ꂩ̒lƂ܂B

 

  #define SCM_UNKNOWN 0           /* Scanner modes : */             
  #define SCM_MONO 1              /* 1 BitPerPixel   */             
  #define SCM_GREY 2              /* 8 BitsPerPixel  */             
  #define SCM_TRUE 3              /* 24 Bit RGB      */             

 

ȌꍇAXLi͖`̏ԂłB(Nׂł͂Ȃ) V[h
Zbg邱Ƃł܂AނA{[gׂł...B

XL[h͓]ꂽf[^̃tH[}bgƈقȂ܂F

MONO [h̓oCiGR[hꂽƔ̒l̃rbg𑗂܂B
A0x83 0x10 ǂݍ񂾏ꍇAXLiwbh̉̃p^[́A

 

  * . . . . . * *  . . . * . . . . ;                                

 

܂APoCgɂɂW̃sNZ(f)Asɂ͏ɕ
̂WsNZ܂B(͍EʂčČ锤ł...)

O[[h́A0`255 ܂ł͈̔͂ő肳ꂽDF̒l̃oCg𑗂
Bۂ̃fvX́Adepth tB[hgƂɂČ邱Ƃ
܂AƂ depth  0 (AXLiۂɍ[hł)
A1 sNZɂ 0 ܂ 255 𑗂܂BAPsNZɂ
PoCgȂ̂łB

gD[[h́AoCg RGB l𑗂܂B]āA1 sNZɕt3
oCg܂Bۂ̃fvX̉𑜓x 0xrrggbb ŁArr ̓XLi
łԐF̔ԍłBA24rbgf 0xffffff ƃ|[g
ׂƂ 4096F̃XLi (4rbg̐ԁA΁A)ł 0x0f0f0f ƃ|
[g킯łB

bpl ́Aread R[ŃAvP[Vɑ bytes per line (1C
̃oCg) ̐łB

Left, right, top, bottom ́A}[WZbg܂B

Bright, Contrast, Hue, Saturation ́A摜̂ꂼ̓lłB

IvV́AIꂽIvṼrbgtB[hƂĂ݂Ȃ܂
B

 

  **********************************************************        
  #define HSIOCSMOD               0x73eb  /* Set modeinfo */        
  **********************************************************        

 

̃R[́AXLi[hZbg邽߂Ɏg܂BȂ^
\̂̓XLi܂̓hCoƂ̏o{̒l𔽉f邽
"ύX"Ƃ_ɒӂĉB

Ⴆ΁A400dpi(X), 600dpi (y), tEfvX 24rbg[hA
}[W 5-1003 (x),13-4000 (y) ƂŃXL
ꍇL̂悤ɂ SMOD R[܂B

 

  { 400,600,                                                        
    SCM_TRUE,                                                       
    0xffffff,                                                       
    0,/* bpl doesn't matter */                                      
    5,1003,13,4000,                                                 
    ...                                                             
  }                                                                 

 

XLi̎ 300dpi T|[głȂꍇAn[hEFAXC
b`oR SCM_MONO ɃZbg܂B(ăhCo̓f[^ϊ
Ȃ [!]) W̔{łPOC`܂ł̃y[W̐̋Ê݃T|
[gA\͎̂̂悤ɕύXł傤B

 

  { 300,300,                                                        
    SCM_MONO,                                                       
    0,                                                              
    126,/* Bytes per line filled in */                              
    0,1008,13,3000                                                  
  }                                                                 

 

hCo TRUE-MOD G~[głKvƂ_ɒӂĉ
Bӂ̂̃\tgEFAĂɂ邩܂񂩂...

 

  ************************************************************************* 
  #define HSIOCGREG               0x73ec  /* play with strange registers */ 
  #define HSIOCSREG               0x73ef                                    
  ************************************************************************* 

 

̓hCo̊JɎgpAʏ̓[Ux̃AvP[Vɂ
ANZXo܂B̃R[̋@\́AXLiXLiցA邢
̓hCohCoցAƂ͈Ⴂ܂B

 

  ************************************************************************* 
  #define HSIOCGBUF               0x73f0  /* get/set current buffer size */ 
  #define HSIOCSBUF               0x73f1                                    
  ************************************************************************* 

 

XL郉Č݂̃obt@TCY擾^ݒ肵܂B

 

  ************************************************************************* 
  #define HSIOCSSTH               0x73f2  /* get/set select(2) threshold */ 
  #define HSIOCGSTH               0x73f3                                    
  ************************************************************************* 

 

XbVz[h̑Il擾^ݒ肵܂B

 

  ********************************************************************* 
  #define HSIOCGSIB               0x73f4  /* get scanlines in buffer */ 
  ********************************************************************* 

 

̓XLi̓obt@ fill-gauge ̈ƂĎgł傤
B͓T^Iɂ̓f[^t[̗ʂ[U䂷XLi(Ⴆ΃n
hXLi)ɂĎgAobt@tɂȂƂɃ[Uɂƒx
XL悤`邱Ƃo悤ɂ܂B

 Bye, Andreas. 



2.3. t^

̎dlgXLihCo̊J

 

  Andreas Beck            becka@hp.rz.uni-duesseldorf.de          (logi32)      
  y󒍁z݂̃AhX́Abecka@sunserver1.rz.uni-duesseldorf.de              
  Thomas Faehnle          Thomas.Faehnle@student.uni-ulm.de       (m105)        
  Jan Willamowius         jan@janhh.sh.sub.de                     (GS4500)      
  Michael Beck            beck@hp832.informatik.hu-berlin.de      (A4Tec)       
  Willem Dantum           willemd@knoware.nl                      (Genius B105G)

 

̎dl𗘗płXLivO

 

  gifscan :     Thomas Faehnle ɂĂ Andreas Beck ɂĕύXꂽ 
                IWi svgalib x[X̃fAvP[V             
  pbmscan :     Andreas Matthias  ɂďꂽ                            
                pbm t@CɃXL(ʂi[)R}hCc[    




Chapter 3. demo/README

    LOGITECH SCANMAN 400 dpi nhwhEXLihCop GIFSCAN
    version 0.0.3
   


3.1. Copyright

Copyright (C) 1994  Andreas Beck <becka@hp.rz.uni-duesseldorf.de>
y󒍁z݂̃AhX́Abecka@sunserver1.rz.uni-duesseldorf.de

̃vO̓t[\tgEFAłBȂ́A Free Software
Foundation sĂ GNU General Public License ̃CZX̃o[
WQA܂(Ȃ̃IvV)ȍ~̏ɏ]čĔzz
ύX邱Ƃł܂B

̃vÓAɗƂ҂ĔzzĂ܂BA
ۏ؂܂Biprւ̓KɂĂ̈Öق̕ۏ؂
܂Bڂ́AGNU  General Public License B

Ȃ́ÃvOƈꏏ GNU General Public License ̃Rs[
󂯎ׂłBłȂȂ΁A Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA Ɏ莆ĉB



3.2. fvOɂ

Hi folks!

 LOGITECH SCANMAN+ XLiphCô߂̏ȃfXg[
VvOłB

̃vÖꕔ́AThomas Faehnle
<Thomas.Faehnle@student.uni-ulm.de> ɂďꂽ̂ŁA͔ނ̓w
͂ɊӂƎv܂B

̓IWi 'scandemo'  LOGI32 hCo^XLi̊gꂽ\
(XLi̎ʁASIB-ioctl,fBUԒ)ɍ킹AXL
ʂ̃tH[}bgɊi[邽߂̐Mł@񋟂邽߂ɂ
ȂύX܂B

scandemo ̂̃o[W gifscan Ƀl[ÃpbP[W̑
o[WŒ񋟂ĂXNvgu܂B

XNvǵAXLiĂ郉C𐳂肷邽߂̉\
A]ĈقȂXLiԈp[^ŎgAԈ
ʂ̂ŃXNvĝ͎Ă܂B

͎ɉL̗R GIF tH[}bg( (c) by Compuserve Ǝv
)I܂B

 E قƂǂ̃OtBbNXpbP[WĂB
   
 E ͊ Gif ւ̊i[ C ̃\[X(MessOS)Ă
   
 E kɂ߂Ă悢
   
    y󒍁z: MessOS Ƃ̂ MS-DOS ̂Ƃ𒃉Ă̂łB
   
 

GIF k͒x PBM tH[}bg͋Lq̂ϗeՂł邱ƂɋCt
Ă̂ŁA͂̔\͂ǉ܂B\ȂǒNIWi
 PPM (P4)R[h gifscan ɒǉvo܂B(ނɊӂ
) ͂ Greyscale (P5) 摜ɏ߂̕ύXƂłB

vOrh邽߂ "make" ܂B #include <scanner.h> 
AXLihCoRpC邽߂ɎĝƓł邱Ƃ
ӂĉB̃t@C͕pɂɕύX̂ŁAɍŐVł /usr/
local/include ɓ悤ɂĉB ioctl C^tF[X͂܂܂
H̍ŒłAÂ gifscan ̃oCi͂VhCoƋ
gƒʏ̓u[N܂B

Logitech XLiɂ͍[hƃO[XP[[h܂B
sKɂ\tgEFAŌos\łB(Ƃꂩ̕@mĂ
H)

Ŏ -g x ƂXCb`(x ̓O[XP[E}gNX̃TCY)
ǉ܂B(nȃIvVł邱Ƃ͕Ă܂A
̃XCb`̂߂ getopt CN[hȂ̂ł...)

 

  **************************************************************************  
  o[Wł̃XCb`͎g܂AVX^C̃XLihCo  
  ̓IvVƂăfBU񋟂(Logi32 )Ȃ̂ŁA͎gׂł   
  ܂B                                                                
  **************************************************************************  

 

[hɂ͂P(ftHg)ɁAO[XP[[hɂ͂UZb
gȂ΂Ȃ܂B(̓XLi}gNX̃TCYȂ̂) P
PU܂ł͈̔͂̒ĺÃXLił͗L܂񂪁A
LOGITECH ł͋AʂoĂ܂܂B

    y󒍁z: AʂƂ̂́A摜ɂ͖͗l錻ۂ
    B
   
 

xT|[gꂽ Scanman256 ɂ͐^̃O[XP[[h܂B
̃[h̑S(A4,6,8 bit)AT|[gׂłB

XL͉L̃L[g܂B(rW[҂A͂XLf[
^̑IȂ̂ŃL[́AXLi܂ł͔F܂)

 

  ,q,x,Q,X   : gifscan I܂B                                       
  i,I             : (I)nverse [hؑւ܂B                          
  w,W             : XLx[jO[hؑւ܂B              
                    (obt@tɋ߂ȂƁAʂԁ^ɂȂ܂)    
  f               : GIF t@Cւ̊i[Jn܂B                      
                    (炩̃L[ƒ~܂)                        
  p               : ppm t@Cւ̊i[Jn܂B                      
  0-9             : IvVԍؑւ܂B                            
  b/B,c/C,h/H,s/S : Brightness(Px)AContrast(RgXg)AHue(F)A   
                    Saturation(ʓx)𒲐܂B                          
  'm'             : I SCM_MONO (mN[h)ɂ܂B        
  'g'             : force SCM_GREY-operation                                
                    I SCM_GREY (O[XP[[h)ɂ܂B  
  'a'             : SCM (XLi[h)̎o܂B            

 

IvV͋Nɕ\܂B̃L[̓t@CXL(Z[
u[h)͖ł邱ƂɒӂĉB́A(ǂݎ蕝 bpp
̂悤) XL摜̊{p[^ύXAZ[uR[h
܂ɂ邩ȂłB(GIF ł͈قȂ郉CgƂ͂ł
܂)

܂AGIF k͔\IłxA 1rbg GIF ŃGR[hƃZ
[u[hgꍇAXLiȂx삷Kv܂B

̃IvV͂ɏ邾낤A "bit-count-code" (
ȑÕo[WłƂق̂߂)Kv͂܂B

Bye, Andreas.



3.3. TODO

 

  ǂ[UC^tF[XAt@C̃l[~OAႦ΃_C 
  AO{bNXƂ...                                          
F                                                                     
BTW     svgalib OtBbNXĂȂ^~Ȃ^KvłȂl 
(H)F  ̂߂ PBMSCAN ƌĂ΂VR}hC̃XLc[
        ܂B                                                   

 

Andreas Beck becka@hp.rz.uni-duesseldorf.de
Germany

 

y󒍁z݂̃AhX́Abecka@sunserver1.rz.uni-duesseldorf.de

 

  **************************************************************************  
  Thomas Faehnle                Thomas.Faehnle@student.uni-ulm.de             
  ɂ͐[ӂ܂B                                                        
  **************************************************************************  



=====================================================               
 Ryoji Kawagishi   E-Mail: kawagisi@yk.rim.or.jp                    
                           KFA02544@niftyserve.or.jp                
=====================================================               


(sgml conversion, y.senda, ysenda@pop01.odn.ne.jp, 2001/09)

Notes

[1] y󒍁z MS-LOSS Ƃ̂́A^Cv~Xł͂ȂƎv܂B(^_^)   

