Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 31 Ocak 2012, 22:02:49

Başlık: Printer driver nasil yazilir?
Gönderen: z - 31 Ocak 2012, 22:02:49
Printer driver nasil calisir? Bugune kadar boyle bir calisma yapan varmi?


Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: t2 - 31 Ocak 2012, 22:17:09
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"


Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: EFESU - 31 Ocak 2012, 23:00:59
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 ...
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: iyildirim - 01 Şubat 2012, 01:25:15
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 01 Şubat 2012, 01:38:37
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?
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: iyildirim - 01 Şubat 2012, 02:16:15
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 09 Şubat 2012, 12:59:50
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ı?

Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: justice_for_all - 09 Şubat 2012, 13:34:06
sanırım microchip application libraries de usb host printer vardı diye hatırlıyorum işinize yararmı bilmiyorum kodları vardı
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 14 Şubat 2012, 23:28:41
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? 
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 00:11:46
Word yada PDF bir dokumanimiz olsun. Print tusuna bastigimiz andan itibaren ne gibi olaylar olur?





Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: justice_for_all - 15 Şubat 2012, 00:33:35
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?
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: ilhan_mkp - 15 Şubat 2012, 00:39:35
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 00:56:10
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.

Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: Klein - 15 Şubat 2012, 01:03:28
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 01:36:47
EMF diye bir format oldugundan bile simdi haberim oldu.

Fakat bu formatla ilgilenmem gerekiyormu anlamadim.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: Klein - 15 Şubat 2012, 01:53:46
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: The Gariban - 15 Şubat 2012, 02:03:05
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

Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 02:12:15
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.

Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 02:20:24
@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?




Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: Klein - 15 Şubat 2012, 02:28:55
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 02:31:19
Peki delphide print dialog diye bir komponent var. Bunu hic kullanmadim. Bu ne is yapiyor?
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: Klein - 15 Şubat 2012, 02:39:51
Tüm programların kullandığı , bildiğimiz print ekranı hocam.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 15 Şubat 2012, 02:44:58
Anlamadim. Kafam durdu. Ne yapiyoruz ne isimize yariyor? Bunu kullanarak mesela bmp formatindaki bir cizimi print ettirebilirmiyim?
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: Klein - 15 Şubat 2012, 04:03:53
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;
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: t2 - 15 Şubat 2012, 09:26:35
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.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: z - 07 Mart 2012, 19:57:35
Kosakoca picprojede  printer tasarlayıp ardından da bunu PC ye tanıtacak yokmu?

Tühhh size.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: t2 - 07 Mart 2012, 21:46:58
Bana önümüzdeki 50 yıl içinde gerekmez. 
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: muhendisbey - 07 Mart 2012, 22:31:55
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ı.
Başlık: Ynt: Printer driver nasil yazilir?
Gönderen: ErsinErce - 07 Mart 2012, 23:34:31
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)