Printer driver nasil yazilir?

Başlatan bunalmis, 31 Ocak 2012, 22:02:49

z

Printer driver nasil calisir? Bugune kadar boyle bir calisma yapan varmi?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#1
USB printer dan bahsettiğinizi varsayıyorum Ben driver yapmadım. Fakat windows içinde  USB yazdırma desteği gibi bir şey var. sürücü yapacaksak önce bunu tetiklemek gerekiyor. windows bunu kendi içinden kurduktansonra bizim yazıcı buradan haberleşiyor. Yazıcı dosyalarına baktığımda  klasör içinde *.sys dosya olmadığını görüyorum.  Bunun anlamı bence şudur: Yazıcı klasöründeki dosyalar aslında sürücü değil, yazıcı ayar sayfası logo vs içeren ve yazıcıyı tanıtan dosyalardır.  gpd dosyalar var bu işe yarıyor olsa gerek.
Şu dosyalar aslında hep windowsun kendi içinden kullanılıyor:

Include=NTPRINT.INF
Needs=UNIDRV.OEM

inf dosya ise şu:
;
; Copyright (c) 2006 OKI DATA 
;
; OKI MICROLINE SIDM PRINTER
;	Windows2000/XP/Server2003 Printer Driver Installation Infomation File
;

[Version]
Signature="$Windows NT$"
Provider=%PROV%
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
Class=Printer
DriverVer=12/07/2006,01.00
CatalogFile=OK432W2K.cat

;
; Manufacturer section.
;
; This section lists all of the manufacturers
; that we will display in the Dialog box
;

[Manufacturer]
%OKI% = OKI

;
; Model Specifications Section
;

[OKI]
"OKI ML1120"	= ML1120E.GPD,LPTENUM\OKI_DATA_CORPML1120A866,OKI_DATA_CORPML1120A866,OKI_MICROLINE_1120

;
; Installer section(s) referenced above.
;

[ML1120E.GPD]
CopyFiles=@1120E.Dll,@1120E.GPD,@1120VE.GPD
DataFile=1120E.GPD
DataSection=UNIDRV_DATA
Include=NTPRINT.INF
Needs=UNIDRV.OEM

[DestinationDirs]
DefaultDestDir=66000

[SourceDisksNames.x86]
1 = %disk1%,,,

[SourceDisksFiles]
1120E.Dll = 1
1120E.GPD = 1
1120VE.GPD = 1

[Strings]
PrinterClassName="Printers"
PROV="OKI"
OKI="OKI"
disk1="OKI MICROLINE Printer Driver Setup Disk"


EFESU

yazıcıların içindeki yazılıma müdahale edip arıza gideriyolar bunu nasıl yada veya yazılımda değişiklik yapıp  bazı  özelliklerini değiştiriyolar ... nasıl oluyor bu olaylar ...

iyildirim

Yıllar önce NT4'ün ilk zamanlarında müşteriye tavsiye edip aldırdığımız oldukça pahalı, barkod da basabilen 24 pin dot matrix yazıcılar, NT4'de, draft modda,  ne Türkçe yazmıştı, ne de barkod basabilmişti. Grafik modda da çok yavaş çalışıyorlardı.

NT4, SDK'yı yükleyip,  24pin bir IBM yazıcının sürücüsünden kotarıp, draft modda Türkçe ve barkod desteği eklemiştim. Derleyici olarak ozaman ki visual studio'dan çıkan C derleyicisini kullanmıştım.

Yöntem pek fazla değişmemiştir sanıyorum.
Öncelikle SDK yı kurup, örnek olarak sizinkine benzer sürücüleri incelemenizi önerebilirim.

z

Asil sorumu sorayim o zaman.

Kendi yazicimi yapmakla mesgulum. Bu yazicidan ancak kendi yazilimimla  cikti alabilirim cunku hem iletisim sekli hemde komut seti bana ozel. Fakat isterimki word, paint, excel vs herhangi bir yazilim benim yazicimdan cikti alabilsin.

Bu durumda;

Yazicimi illaki Postscript, HPGL gibi standartlara uydurmak zorundamiyim?

PC deki driver tam olarak ne yapiyor neyi neye donusturuyor?

Wordden cikti almaya kalktigimda word drivera ne yolluyor? Driver yaziciya ne yolluyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

#5
Dediğim gibi uzun zaman oldu. Sanırım 96-97 lerdi. Üstelik konu hakkında bilgim de kısıtlı.
Draft sürücü için çalıştığımdan basit bir şekilde çözümleyebilmiştim.

Grafik modda çalışacaksanız, hatırladığım kadarıyla driver üzerinden bir şekilde win api çağrılarak render edilmesi gibi işlemler, karakter conversion table gibi şeyler vardı.
Basite indirgersek yazıcının raster veya vektör desteklediğine göre doğru fonksiyonları çağırmak gerekiyor diyebilirim. Belki biraz da özel kod.. 

Geçenlerde bir yazının dot veya vektör olarak NC kodlarına çevrilmesi gibi bir şeyle uğraşmıştım. Basitçe GDI32 kullanıp beginpath, endpath, getpath gibi fonksiyonlarla  yazının kontur vektörleri alınabiliyor. Geriye HPGL veya NC 'ye çevirmek kaliyor. Driver'ın da yaptığı tam olarak bu olmasada buna benzer şekilde diye düşünüyorum.  Tabii birde bu tip işlemleri de yapabilen internal fontları vs. olan modern yazıcılar da var ama sanırım konumuz dışıdır.

Standart konusunda da bence HPGL, Postscipt gibi standartlara uymaya çalışmakta fayda var. 

Postscript hakkında detayda bilgim yok. HPGL'e göre çok daha kompleks olduğunu biliyorum. Nette aramak lazım. Muhtelemen çalışmaya başlayabilecek kadar örnek projeler vardır. SDK da da..
HPGL-2 destekli bir yazıcıya sürücüsünü kullanmadan direkt kendi programımla yazdırma işleri gibi birşeyler yapmıştım. Yazıcınız vektör destekli ise HPGL(2) yazıcı tarafında kolay yorumlanabilecek bir standart. Bilgiğim kadarıyla NC G-code gibi şeylere de yabancı değilsiniz. Benzer şeyler..
Bu durumda hazır bir yazıcının sürücüsünü de kullanabilirsiniz. SDK üzerindeki bir template'i kullanarak yeni bir sürücü de derleyebilirsiniz.

z

Sıfırdan yapılmış printer projesine rastlayan varmı?

Mesela hazır inkjet yazıcı mekaniğini kullanıp buna devre ve yazılım geliştirmiş bir zâtın linkini gören varmı?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

justice_for_all

sanırım microchip application libraries de usb host printer vardı diye hatırlıyorum işinize yararmı bilmiyorum kodları vardı
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

z

Printer tasarimi ile ilgili hic bir sey bulamadim. Ne bir site ne bir kitap...

Printer tasariminda elektronik kisim isin fasofiso kismi. Asil is yazilim muhendislerinin tekelinde gibi gorunuyor.

Simdi soyle bir calisma yapmak istesem;

Ortada yazici namina bir sey olmasa ama bir driver olsa ve ornegin wordde print dendiginde benim yazacagim software calismaya baslasa ve print edilecek veriler bu yazilima akmaya baslasa ben de yazilim icinde sanki kagida baski aliyormusum gibi ekrana basmaya calissam.

Bu calismayi yapabilmek icin ne yapmam gerekir? Bir suru konuda bilgi sahibi olmak gerekiyor. Ne zor seymis bu konu.

Yaniliyormuyum?

Kim bana ogretir bu isi? 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Word yada PDF bir dokumanimiz olsun. Print tusuna bastigimiz andan itibaren ne gibi olaylar olur?





Bana e^st de diyebilirsiniz.   www.cncdesigner.com

justice_for_all

#10
Alıntı yapılan: bunalmis - 15 Şubat 2012, 00:11:46
Word yada PDF bir dokumanimiz olsun. Print tusuna bastigimiz andan itibaren ne gibi olaylar olur?

peki hocam kendi yaziciniza ait bir arayuz vardir o zaman?


yazdirmak istediginiz dokumani o arayuzun icinde actirsaniz olmazmi?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

ilhan_mkp

Alıntı yapılan: bunalmis - 15 Şubat 2012, 00:11:46
Word yada PDF bir dokumanimiz olsun. Print tusuna bastigimiz andan itibaren ne gibi olaylar olur?

hocam belki saçma bir fikir olacak ama

delta hmi ile seriporttan yacıya çıktı vermiştim barkod yazıcı için.
beni baya zorlamıştı.
bu sizlerin sürekli kullandığınız seri iletişimdi.
birde sayfada ne görüyorsa onu yazan bir türü var hmi'ye bir ekmodül takılıp paralel yazdırma olayıyla.
uzakdoğu menşeli hmilerde neredeyse kaynak koda ulaşılacak kadar kurcalanmaya açıklar.
belki buradan bir ip ucu yakalarsınız.

z

Alıntı yapılan: justice_for_all - 15 Şubat 2012, 00:33:35
peki hocam kendi yaziciniza ait bir arayuz vardir o zaman?


yazdirmak istediginiz dokumani o arayuzun icinde actirsaniz olmazmi?

Mantigim diyorki printer tasarimcisi elalemin dosya formatiyla ilgilenmez. Ortak bir format vardir (bu HPGL, Postscript galiba) yazdirmak isteyen yazilim verileri bu formata cevirir yaziciya driver araciligiyla yollar. Yazici da gelen verilerin formatini bildigi icin baskiya gecer.

Boylece mesela 10 yil sonra cikacak .zxz uzantili bir dosyayi acan program dahi 10 yil onceki yazicidan cikti alabilir.

Aksi takdirde benim arayuzum, pdfi de wordu de exeli de gerberi de yani herseyi okuyabilmeli ki bu cok sacma olur.

Bu mantigimin soyledikleri. Fakat gercek dunyada durum ne bilmiyorum.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Bu işlerle hiç ilgilenmedim. sorunuzu görünce biraz dolaştım. Araştırma sürecinde belki görmüşsünüzdür belki de gözünüzden kaçmıştır.

http://www.colorpilot.com/emfprinterpilot.html

buradaki örnek uygulama tam sizin istediğiniz şeyi yapıyor. bu amcalar bir sdk yapmış. ama biraz pahalı.

kısa araştırmamdan şu sonucu çıkardım.
windows apisinde unidrv.dll isimli bir printer sürücüsü mevcut. unidrv'nin içindeki fonksiyonları bulamadım henüz.
herhangi bir programdan print işlemi bu dll içindeki bir fonksiyonu çağırıyor. bu fonksiyon  size EMF formatında çıktı veriyor. siz de alıp bunu printerinize aktarıyorsunuz.

yazarken çok basit oluyor tabi. hemen fonksiyonu çağırdık , emf formatında çıktıyı aldık. ama nasıl?

Sanırım delphinin veya 3. parti bir üreticinin bir toolu vardı. dll  hangi fonksiyonları ihraç ediyor görebiliyordunuz. onu bulabilirsem belki nasıl çalıştığını anlayabilirim. şimdilik bulabildiklerim bunlar.

z

EMF diye bir format oldugundan bile simdi haberim oldu.

Fakat bu formatla ilgilenmem gerekiyormu anlamadim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com