Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Analyza kompresneho algoritmu laserovej tlaciarne

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Software
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
rnbw



Založen: Mar 21, 2006
Příspěvky: 33979
Bydliště: Bratislava

PříspěvekZaslal: po září 17 2012, 13:31    Předmět: Analyza kompresneho algoritmu laserovej tlaciarne Citovat

Pokusam sa analyzovat datovy format CARPS (Canon Advanced Raster Printing System) pouzity napr. u LaserBase MF5730. Nazbieral som si nejake tlacove data z driveru pre Windows a chcel by som urobit open-source filter pre CUPS, aby sa dalo tlacit z Linuxu (pripadne dalsich OS).
Blokovu strukturu aj strukturu dokumentu mam uz rozlustenu celkom dobre - vsetko sice nepoznam, ale vedel by som vyrobit platny dokument:

kód:
CANON CARPS (Canon Advanced Raster Printing System) print format
================================================================
(reverse-engineered from LaserBase MF5730)

Data is organized into blocks, each with 20-byte header:
0: 0xCD - magic value
1: 0xCA - magic value
2: 0x10 - magic value
3: data type (0x00 = control data, 0x02 = print data)
4: 0x00
5: block type (0x11, 0x12, 0x13, 0x14, 0x16, 0x17, 0x18, 0x19, 0x1a)
6: 0x00
7: 0x01
8: length (high byte) of data following the header (number of bytes)
9: length (low byte)
10-19: padding (zeros)

maximum block (URB?) size is 4KB (4096B)

DOCUMENT structure:
-------------------
0x11: ???: 13 bytes: \x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00
0x12: document name: \x00\x04\x00\x11 + character count + name
0x12: user name: \x00\x06\x00\x11 + character count + name
0x12: ???: 10 bytes: \x00\x09\x00\x00\x07\x00\x00\x00\x00\x00
0x14: ???: 4 zero bytes
0x17: ???: 4 zero bytes
0x18: ???: 5 bytes: \x00\x2e\x82\x00\x00
0x18: image refinement: 3 bytes: \x08\x2d + \x01 (off) or \x02 (on)
0x18: toner save: 3 bytes: \x08\x5a + \x01 (off) or \x02 (on), if this block is not present, "printer default" is used
PRINT DATA
0x1a: end of print data: 1 byte: \x01
0x19: 0 bytes
0x16: 0 bytes
0x13: end of document: 1 zero byte


PRINT DATA structure:
---------------------
all print data is in blocks with data type 0x02, block type 0x1a

each page begins with a header (first page has header in separate block, others don't (?)), such as:
\x01.%@.P42;600;1J;ImgColor.\.[11h.[?7;600 I.[20't.[14;;;;;;p.[?2h.[1v.[600;1;0;32;;64;0'c
P42: ???
600: 600dpi (300 = 300dpi)
1J: ???
ImgColor: ???
20't = Plain paper (15't = Plain L, 20't = Plain, 30't = Heavy, 35't = Heavy H, 40't = Transparencies, 55't = Envelope)
14 = A4, 16 = A5, 30 = letter (??????????????), 60 = envelope monarch
1v: 1 copy (2v = 2 copies, 99v = 99 copies)

then page data follows in STRIPs, each STRIP in a block
each STRIP includes a header, such as:
\x01.[;4724;110;15.P
4724: strip witdh (in dots) for A4 (letter = 4863), 2362 (A4 300dpi)
110: strip height (in dots) (minimum is 1, maximum 110)
15: ???

then COMPRESSED DATA follows

strip can span multiple blocks
strip ends with 0x80 byte

each page ends with a 2-byte block containing \x01\x0c

print data ends with a 7-byte block containing \x01\x1b\x50\x30\x4a\x1b\x5c


Problem mam vsak so samotnymi tlacovymi datami, resp. ich kompresnym algoritmom. Predpokladam, ze to bude cierno-biela bitmapa. Je to rozdelene do pasov, maximalne 110 bodov na vysku a na sirku podla rozmeru papiera a rozlisenia.

Tu su nejake jednoduche kusy dat, ale ani tie sa mi nepodarilo rozlusknut. Zistil som akurat to, ze prvych 14 B je nejaka hlavicka, na ofsete 0xA ma 2-bajtovu dlzku nasledujucich dat, ktore su ukoncene bajtom 0x80 (ten sa do dlzky nepocita).

5 rozne dlhych prazdnych riadkov (bloky s vyskou 1, sirka je v zatvorke). Rozdiel je vzdy len v 4 bajtoch, ale neviem, co znamenaju.

kód:

COMPRESSED DATA format:
-----------------------
single empty line:
A4:
300dpi (2362): 50 01 02 04 08 00 00 50 00 00 0C 00 00 00 BE BF 3E AF 3C 5C BC BC BD 3C BC BC 80
600dpi (4724): 50 01 02 04 08 00 00 50 00 00 0C 00 00 00 BE BF FD B8 4C A0 BC BC BD 3C BC BC 80
                                                               ^^^^^^^^^^^                       
A5:
300dpi (1629): 50 01 02 04 08 00 00 50 00 00 0C 00 00 00 BE BF 78 AE 7C CC BC BC BD 3C BC BC 80
600dpi (3259): 50 01 02 04 08 00 00 50 00 00 0C 00 00 00 BE BF 1E 92 BF 3C BC BC BD 3C BC BC 80
                                                               ^^^^^^^^^^^
envelope monarch:
300dpi (1045): 50 01 02 04 08 00 00 50 00 00 0C 00 00 00 BE BF 7A 3C 5C BC BC BC BD 3C BC BC 80
                                     length  ^^^^^   of  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

A dva bloky 4724x110 bodov - prvy plny (cierny) a druhy prazdny (biely). Rozdelil som ich na riadky tak, aby bolo vidiet, ze maju vacsinu dat rovnaku.
kód:

4724;110;15
full:          50 01 02 04 08 00 00 50 00 01 68 01 00 00
        9C BC 88 AC F1 9C 4C 98 3C 6C FD 89 98 2E BF FD B8 68 2E F4 B1 B8 AF EE F4 B1 9C 1C BA 2C

        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C              (13x)
        EC BD 7C BC BC 80

empty:         50 01 02 04 08 00 00 50 00 01 5C 01 00 00
        BE BF FD B8 4C 88 AC EC BF FD B9 BC 88 AC

        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C
        EC BF F4 94 BD 18 A8 BC 6E B6 BC D5 B9 BC 88 3E 3C A6 FD FC B1 9C 1C BA 2C              (13x)
        EC BF F4 94 BD 18 A8 BC CC 80



Ak vidite nejaky system v tych datach, velmi by mi to pomohlo.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Habesan



Založen: Jan 12, 2009
Příspěvky: 7096
Bydliště: Plzeňsko

PříspěvekZaslal: čt září 20 2012, 8:17    Předmět: Citovat

Tak, když se toho nikdo neujal...

Možná by pomohlo více vzorků.
Například bílý řádek končící černým bodem, končící dvěma, končící třemi, nebo různé vzorce 0101, 1010, 00110011, 00001111 atd.

Ty předpokládáš, že je to bitmapa z černých a bílých bodů, laserovka ale používá polotóny (nevím přesně kterou metodu, možná to závisí na výrobci a modelu). Vstupní data by tedy mohla být i odstíny šedi, pro začítek bys mohl vyzkoušet 256 stupňů. Pokud některé z nich dají stejná výstupní data, tak ty drivery/tiskárna používají hrubší škálu.

Ještě mě napadají takové metody, které zřejmě nebudou fungovat a možná jsi je už vyzkoušel:
Pokusil jsi se požádat samotnou Canon Incorporation o specifikaci CARPS ???
Možná by jim nevadilo, že vytvoříš driver pro Linux, snad by se jim trochu zvýšil odbyt. Navíc jim musí být jasné, že na to nakonec přijdeš.

Disassemblovat, případně odkrokovat, ty drivery pro Windows, v oblasti, kde provádějí tu kompresi, jsi zkusil???

_________________
Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
rnbw



Založen: Mar 21, 2006
Příspěvky: 33979
Bydliště: Bratislava

PříspěvekZaslal: čt září 20 2012, 8:54    Předmět: Citovat

Laserovka nevie tlacit odtiene, ale len cierne bodky. Tym, ze ma 600dpi, tak sa odtiene urobia ditheringom z nich (v tomto pripade softwarovo).

Uz som zacal generovat testovacie data - v GIMPe nastavit tlac bez okrajov, do laveho horneho rohu, rozlisenie obrazka 600dpi (aby 1 pixel obrazka bol 1 bod na stranke). Potom 1 pixel do laveho horneho rohu a vytlacit do suboru. Nasledne ten pixel posuvat, pridava dalsie a pod. Uz sa v tom zacinam vidiet nejaku logiku, ale este to potrva chvilu. Vyzera to byt dost humus. Skutocne je to ciernobiela bitmapa, po riadkoch.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rnbw



Založen: Mar 21, 2006
Příspěvky: 33979
Bydliště: Bratislava

PříspěvekZaslal: čt leden 30 2014, 9:38    Předmět: Citovat

Tak pred casom sa mi to podarilo rozlusknut a az teraz som si spomenul, ze som sem o tom pisal.
Funguje to po riadkoch, pracuje na urovni bajtov obrazka a obsahuje rozne kompresne metody. Kodovanie vystupnych dat je na urovni bitov a este je to XORovane konstantou - chutovka...

Slubovany driver pre CUPS je tu: https://github.com/ondrej-zary/carps-cups
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Software Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund