Printer driver nasil calisir? Bugune kadar boyle bir calisma yapan varmi?
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"
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 ...
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.
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?
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.
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ı?
sanırım microchip application libraries de usb host printer vardı diye hatırlıyorum işinize yararmı bilmiyorum kodları vardı
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?
Word yada PDF bir dokumanimiz olsun. Print tusuna bastigimiz andan itibaren ne gibi olaylar olur?
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?
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.
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.
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.
EMF diye bir format oldugundan bile simdi haberim oldu.
Fakat bu formatla ilgilenmem gerekiyormu anlamadim.
gördüğüm tüm dokümanlar PostScript ve EMF formatına çevirdiğini söylüyor. Bu durumda ya PostScript ya da EMF dönüşümü ile ilgilenmeniz gerekebilir. Sizin elinizde gelecek veri bu iki formattan biri.
Ayrıca @Klein in verdiği linkin "Tutorials " sekmesinde Print Previev de dahil yazıcı ile ilgili bazı işlerin örnek kodları da var .
EMF format ile ilgili MSDN de
http://msdn.microsoft.com/en-us/library/cc230515(v=prot.10).aspx
bunlar var (Introduction kısmı)
Belki faydası olabilir
Bu durumda soyle diyebilirmiyiz?
Ornegin word, sayfadaki text yada grafik verileri isleyerek postscript yada EMF formatina cevirir bunun icin windowsun dll lerinden yararlanir.
EMF formatina cevrilmis veriler drivera yollanir. Driver, bu verileri yaziciya gonderir.
Bu durumda win driverin word ile yazici arasindaki haberlesme amaci disinda herhangi bir gorevi yoktur.
@Klein
Linkini verdigin EMFprinter tam olarak isin neresinde kullaniliyor?
Bana, sanki word benzeri bir program yazilacaksa bu yazilimin print le ilgili rutinlerinde ise yarayacak gibi geldi yaniliyormuyum?
Bahsettiğiniz , EMF virtual printer example ise:
kurduğunuzda sanal bir yazıcı oluşturuyor. herhangi bir programdan çıktı alırken bu yazıcıyı seçerseniz , programdan aldığı veriyi (EMF) bmp olarak programın konumunda bir klasöre atıyor.
SDK'sı da bu işe yarıyor. ama bunun yanında bahsettiğiniz gibi print manager de vardır belki içinde. dikkatli incelemedim.
Peki delphide print dialog diye bir komponent var. Bunu hic kullanmadim. Bu ne is yapiyor?
Tüm programların kullandığı , bildiğimiz print ekranı hocam.
Anlamadim. Kafam durdu. Ne yapiyoruz ne isimize yariyor? Bunu kullanarak mesela bmp formatindaki bir cizimi print ettirebilirmiyim?
Yok hocam. O sadece printer seçimi, printer ayarı yapmayı sağlayan diyalog.
Yazdırma için birazcık kod yazmak gerekiyor.
procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
begin
printer.BeginDoc;
printer.Canvas.Draw(0,0,image1.Picture.Graphic);
printer.EndDoc;
end;
end;
Delphi kurulu ise, DLLin olduğu klasöre komut penceresini açalım
tdump sizin.dll >detay.txt
Şeklinde çalıştıralım. detay.txt içerisinde DLL fonksiyonları (import, export) ve diğer bazı detaylar bulunur.
Kosakoca picprojede printer tasarlayıp ardından da bunu PC ye tanıtacak yokmu?
Tühhh size.
Bana önümüzdeki 50 yıl içinde gerekmez.
Bu işin Bir dosya formatıyla yapılmadığını düşünmekteyim. Bence tamamen görüntü işleme ile alakalı. Driver ile sadece iletişim portu üzerinden yazıcının anlayacağı şekilde dosya iletilir. Yani nasıl bir kodlama ile veri göndereceksen onu göndereceksin bu tamamen tasarımcıya ait. Resim ise resim, yazı ise yazı, koordinat verisi ve noozle püskürtme şekili vs şeklinde de olabilir. Basma işleminde ne yapacağı yazıcının kendi içerisindeki devre ile ilgili. Bir dosyanın nokta vuruşluya da mürekep püskürtmeliye de uyacağı düşünülemez. Bu nedenle driver bir nevi dönüştürme işlemi de yapar.
Daha önce böyle birşey tasarlamadım, kod yazmada ise oldukça yeniyim ancak paralel poru kullanmanız kolaylık sağlayacaktır, çünkü tam manası ile paralel port yazıcılarında driver testi uygulanmıyor bu sayede başka yazıcının sürücüsü ile çalışmalar yapabilirsiniz.
Bu işin denemesini paralel portta başka bir yazıcı driverı yükleyerek yaptım HP 610C'yi bilmeyen yoktur herhalde. Bazıları siyah beyaz bazıları çıktıyı bile bozmuş karkacık kurgacık metinler çıkartmıştı.
Driver yazmak için Windows Driver Kit'e ihtiyacınız varmış hocam
aşağıda birkaç örnek buldum, ayrıca linux driver'ı içinse son pdf güzel bir kaynağa benziyor
https://www.haiku-os.org/documents/dev/how_to_write_a_printer_driver (https://www.haiku-os.org/documents/dev/how_to_write_a_printer_driver)
http://stackoverflow.com/questions/649490/writing-a-windows-printer-driver (http://stackoverflow.com/questions/649490/writing-a-windows-printer-driver)
http://en.wikipedia.org/wiki/Printer_driver (http://en.wikipedia.org/wiki/Printer_driver)
http://en.wikipedia.org/wiki/PostScript_Printer_Description (http://en.wikipedia.org/wiki/PostScript_Printer_Description)
http://www.stat.tamu.edu/~henrik/GSPSprinter/GSPSprinter.html (http://www.stat.tamu.edu/~henrik/GSPSprinter/GSPSprinter.html)
http://courses.engr.illinois.edu/ece391/references/linux_dev_drivers.pdf (http://courses.engr.illinois.edu/ece391/references/linux_dev_drivers.pdf)