Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

GDPS-Protokoll

Home Treibertypen Treibertypen Beispiele

3.1.1 Treibergruppe Scanner

Festlegung: Bei Bi-Level-Daten entspricht ein gesetztes Bit einem 'vorhandenen' Pixel. Bei Multivalue-Daten entspricht 0 'nichts', mit steigendem Wert nimmt die betreffende Farbintensität bzw. Helligkeit zu.

ACHTUNG: Beim Kommandos aus der 10xH-Gruppe werden Graustufenbilder invertiert!

14H W Scannerbeschreibung
Enthält dieses Word den Wert 0, so ist der Scanner/Treiber noch nicht initialisiert, Kommando 105H ausführen
Bit 0: Bi-Level möglich
1: Dithern möglich
2: Multivalue möglich
3: Multivalue und Dithern möglich
4: Bi-Level Farbe möglich
5: Dithern Farbe möglich
6: Multivalue in Farbe möglich
7: Multivalue in Farbe und Dithern möglich
8: Komprimierung der Daten (siehe unten) möglich
9: Blockweise Rückgabe möglich
10: Einzelblatteinzug per separatel Kommando
11: Einzelblatteinzug automatisch
12: Prescan möglich
13: virtuelle Speicherverwaltung möglich (GDPS-Version >= 1.10)
14: reserviert (0)
15: reserviert (0)

Multivalue und Dithern: Sondermodus, immer 2 Bit/Pixel
16H W Zahl der Farben
18H W Mögliche Multi-Value-Bittiefen. Aufbau:
Bit 0 gesetzt: monochrom möglich
Bit 1 gesetzt: 2 Graustufen möglich
Bit 2 gesetzt: 4 Graustufen möglich
Bit 3 gesetzt: 8 Graustufen möglich
etc...
1AH W Scanner reservieren
1CH W Kommando an Scanner (0=Ready, 1-FFH reserviert!!!)
1EH L Pointer auf Kommandostruktur

Es wird von einem Scannertreiber mit eigener Bedienoberfläche ausgegangen. Will ein Programm den Scannertreiber ansprechen, so geschieht dies folgendermaßen:

  1. Warten, bis Word 1AH = 0 (Scanner frei)
  2. Scanner reservieren durch Eintrag eines Wortes in 1AH
  3. Erstellen der Kommandostruktur
  4. Eintragen des pointers auf die Kommandostruktur nach 1EH
  5. Eintragen des Kommandos in 1CH
  6. in einer EVENT-Schleife (!!!) (Timer- oder Multi-Event) warten, bis Kommando-Word vom Scannertreiber wieder auf 0 gesetzt ist.
  7. Schritte ab 'Erstellen der Kommandostruktur' beliebig oft wiederholen
  8. Scanner freigeben (0 in 1AH eintragen)

Die vom vom aufrufenden Programm zur Verfügung zu stellende Kommandostruktur hat drei Aufgaben:

  1. Übergabe der kommandostruktur
  2. Rückgabe einer Erfolgs- bzw. Fehlermeldung
  3. Rückgabe der verwendeten Parameter

Aufbau der Kommandostruktur:

00H W Rückgabewert, wird vom aufrufenden Programm auf 0 initialisiert. Der Scannertreiber trägt hier nach Abarbeitung des Kommandos $FFFF (=OK) oder eine positive Fehlernummer ein. Arbeitet der Scanner im Blockmodus, wird nach den Blöcken ein $FFFE eingetragen, nach dem letzten Block ein $FFFF. Arbeitet im Blockmodus UND in Farbe, so gibt es zwei Möglichkeiten:
  1. der Scanner scannt die Farbauszüge einzeln, dann erfolgt die übergabe wie oben, aber entsprechend der Zahl der Farben mehrfach.
  2. der Scanner scannt alle Farben gleichzeitig, dann wird nach den Blöcken $FFFD eingetragen. Der zurückgegebene Block besteht dann aus 'Anzahl der Farben' gleichgroßen Bereichen.
02H W Erlaubte Scanmodi. Der Aufbau dieses Wortes ist wie 14H, ein gesetztes Bit besagt, daß der Scannertreiber den entsprechenden Modus benutzen darf.
04H W Erlaubte Bittiefen (Aufbau wie oben 18H).
06H L Pointer auf Speicher
0AH L Anzahl der Bytes in Speicher (Rückgabe: Anzahl der verwendeten Bytes)
0EH W Bytes pro Scanline oder 0 (immer mod 2!)
10H W Anzahl Scanlines oder 0
12H W Breite des Image in 1/10 mm oder 0
14H W Höhe des Image in 1/10 mm oder 0
16H W Auflösung in Main-Scan-Richtung (x) in dpi oder 0
18H W Auflösung in Sub-Scan-Richtung (y) in dpi oder 0 (Bei Rückgabe: Auflösung = Auflösung * Zoomfaktor!)
1AH W Modulo-Wert für Scanlines (in Bytes, z.B. 2 = 2*n Bytes pro Scanline)
1CH W x-Position des Image in 1/10 mm
1EH W y-Position des Image in 1/10 mm

Seit GDPS-Version >= 1.10:

20H L Seriennummer des aufrufenden Programms
24H W ADD-Bits: Zusätzlich vom Programm benötigter Speicher (in Bits pro Pixel)
26H L Pointer auf 'Dchange_pointer' (Funktion der vS)
2AH L Pointer auf Dupdate (Funktion der vS)
2EH W v_handle LESEN (vS)
30H W v_handle SCHREIBEN (vS)
32H W virt_flag (1 = vS wird benutzt)

vS = virtuelle Speicherverwaltung (mehr Information siehe beiliegende SCANNER.TXT)

Nach Abarbeitung eines Kommandos trägt der Scannertreiber die TATSÄCHLICH BENUTZTEN WERTE in diese Datenstruktur ein.

Soll die Bildgröße fest sein, so kann dies entweder mit den Worten 0EH, 10H oder 12H, 14H, 1CH, 1EH definiert werden. Sind beide Wertepaare vorbesetzt, wird die Vorgabe in Bytes benutzt. Falls der Scanner nicht in der Lage ist, dieses Format einzuscannen, wird gegebenenfalls auf passenden Werte verändert; Daher bei Rückgabe prüfen!!

Komprimierung:

Bi-level und Dither-Daten sind IMMER so gepackt, daß 8 Pixel in einem Byte vorliegen. Dabei wird das erste Pixel ins MSBit eingetragen!

Multivalue-Daten liegen entweder unkomprimiert vor, dann belegt ein Pixel genau ein Byte. Dabei sind die Daten (bei weniger als 256 Graustufen) immer zum MSBit hin formatiert, die LSBits sind ggf. aufgefüllt (je nach Scanner mit 0 oder 1).
In komprimierter Form werden die Multivalue-Daten so gepackt, daß Byte-Grenzen nicht überschritten werden, ggf. auftretende Leerbits sind (je nach Scanner) mit 0 oder 1 gefüllt:

                 +--+--+--+--+--+--+--+--+
   2 Bit/ Pixel  |B1|B0|B1|B0|B1|B0|B1|B0|   -> 4 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   3 Bit/ Pixel  |B2|B1|B0|--|B2|B1|B0|--|   -> 2 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   4 Bit/ Pixel  |B3|B2|B1|B0|B3|B2|B1|B0|   -> 2 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   5 Bit/ Pixel  |B4|B3|B2|B1|B0|--|--|--|   -> 1 Pixel/Byte
                 +--+--+--+--+--+--+--+--+

                 +--+--+--+--+--+--+--+--+
   6 Bit/ Pixel  |B5|B4|B3|B2|B1|B0|--|--|   -> 1 Pixel/Byte
                 +--+--+--+--+--+--+--+--+
   etc.

Wird in der Kommandostruktur das Komprimierungsbit nicht gesetzt, so werden die ggf. vom Scannertreiber entkomprimiert. Ist das Bit jedoch gesetzt, muß es nach Abarbeitung des Kommandos getestet werden, ob die Daten wirklich komprimiert sind.

Festgelegte Kommandos:

100H: Scan
Der Benutzerdialog wird aufgerufen, ggf. wird ein Scanvorgang vorgenommen.
101H: Continue
Dieses Kommando setzt im Blockmodus das Scannen fort.
102H: Scan without Dialog
Es wird ein Scanvorgang ohne weitere Benutzerintervention veranlaßt. Es werden die gleichen vom Benutzer einstellbaren Parameter benutzt wie beim vorhergehenden Scanvorgang.
103H: Next Sheet
Der Einzelblatteinzug zieht das nächste Blatt ein.
104H: Prescan
Führt einen Prescan mit fest eingestellten Parametern durch.
105H: Scanner/Treiber initialisieren
Holt Gerätebeschreibung vom Scanner

Die Kommandos 102H und 103H sind speziell für eine automatisierte Schrifterkennung gedacht.

Seit GDPS-Version 1.10 existieren neue Kommandos (wie oben, aber statt 10xH wird 20xh benutzt). Werden diese Kommandos benutzt, kann virtuell gearbeitet werden, falls virt_flag=1. Weiterhin werden Graustufenbilder bei diesen Kommandos wie folgt geliefert:

0 = schwarz
255 = weiß

ACHTUNG: bei 20xH-Kommandos muß vom aufrufenden Programm die erweiterte Kommandostruktur nach GDPS 1.10 übergeben werden!!!

Fehlermeldungen im Rückgabe-Wert:

FFFEH: Block bereit, weitere Blöcke folgen.
FFFFH: Scanvorgang (ggf. für eine Farbe) abgeschlossen, letzter (bzw. einziger) Datenblock liegt vor.
0H: Abwarten und Tee trinken (bzw. mittels EVENT-Schleife warten)
1H: Unbekanntes Kommando
2H: Scannerfehler
3H: Abbruch durch Benutzer
4H: Out of Paper (nur bei Einzelblatteinzug)
5H: Out of Memory: Der Benutzer hat ein zu großes Papierformat benutzt.
6H: Scanner noch nicht initialisiert.

Die Fehlermeldungen werden dem Benutzer vom Treiber angezeigt. Sie dienen dem aufrufenden Programm nur als Information.


Home Treibertypen Treibertypen Beispiele


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum