parallel port driver
Hello! I wanted to play a bit with driver coding in userspace, and understood that we don't have any working parallel port driver (was the lpr in mach ever working?). So just wrote a simple parallel port driver for the Hurd that works on userspace. It has some deficiences (see the TODO), but you can safely print through it. (and if we had a printer daemon, we could even print sanely with Chair Returns ;)) Please take a look at it. If it looks fine, i can write a patch to integrate it in Hurd's source. oh, and thanks Wolfgang for your nice Hurd Hacking guide! -- Robert Millan "Omnis enim res, quad dando non deficit, dum habetur et non datur, nondum habetur, quomodo habenda est." "For if a thing is not diminished by being shared with others, it is not rightly owned if it is only owned and not shared." Aurelius Augustinus (354-430) /* parport.c - simple parallel port driver TODO: - select devices properly depending on the node name (parport0...) - use ioperm (when available) - get it working on oskit-mach (need ioperm) - use interrupts not polling (when available) - get a replacement for those printf's - argp support - implement reading (this thing can read can't it?) - implement enhanced modes - port CUPS, so we can actualy use this crap ;) Written by Robert Millan <[EMAIL PROTECTED]>, 2003 This is based on hurd-one.c. The hurd-one.c source says: Written by Wolfgang Jaehrling <[EMAIL PROTECTED]>, 2001 This is based on hurd/trans/hello.c. The hello.c source says: Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. Gordon Matzigkeit <[EMAIL PROTECTED]>, 1999 It also uses parts of hurd/trans/null.c. The null.c source says: Copyright (C) 1995,96,97,98,99,2001 Free Software Foundation, Inc. Written by Miles Bader <[EMAIL PROTECTED]> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define _GNU_SOURCE 1 #include #include/* I/O */ #include/* exit () */ #include /* Error numers */ #include /* O_READ etc. */ #include #include /* we need ioperm working on Mach, for now we have this ugly hack */ //define USE_IOPERM static unsigned short probe_port (unsigned short p); static void send_char (char c); static unsigned short base; #define Rdat base+0x00 #define Rsta base+0x01 #define Rcon base+0x02 /* Trivfs hooks. */ int trivfs_fstype = FSTYPE_MISC; /* Generic trivfs server */ int trivfs_fsid = 0; /* Should always be 0 on startup */ int trivfs_allow_open = O_READ | O_WRITE; /* Actual supported modes: */ int trivfs_support_read = 0; int trivfs_support_write = 1; int trivfs_support_exec = 0; /* May do nothing... */ void trivfs_modify_stat (struct trivfs_protid *cred, io_statbuf_t *st) { /* .. and we do nothing */ } error_t trivfs_goaway (struct trivfs_control *cntl, int flags) { exit (EXIT_SUCCESS); } error_t trivfs_S_io_read (trivfs_protid_t cred, mach_port_t reply, mach_msg_type_name_t replyPoly, data_t *data, mach_msg_type_number_t *data_len, loff_t offset, vm_size_t amount) { /* Deny access if they have bad credentials. */ if (!cred) return EOPNOTSUPP; else if (!(cred->po->openmodes & O_READ)) return EBADF; /* Nothing to read yet */ *data_len = amount; return 0; } kern_return_t trivfs_S_io_write (trivfs_protid_t cred, mach_port_t reply, mach_msg_type_name_t replyPoly, data_t data, mach_msg_type_number_t datalen, loff_t offset, vm_size_t *amount) { if (!cred) return EOPNOTSUPP; else if (!(cred->po->openmodes & O_WRITE)) return EBADF; int i; if (probe_port (0x0378)) base = 0x0378; else if (probe_port (0x0278)) base = 0x0278; else if (probe_port (0x03bc)) base = 0x03bc; else { printf ("No printers found\n"); exit (1); } printf ("Found printer at port 0x%03x\n", base); #ifdef USE_IOPERM if (ioperm(base, 3, 1)) { printf("Could not access %03x-%03x: %s.\n", base, base+3, strerror(errno)); exit(1); } #endif /* Initialise printer: strobe = 0 autofeed = 0 initialise = 1 selected = 1 interrupt = 0 that makes it xxx0 0110b == 0x0C
Penting !! Penawaran kerjasama bisnis.
Dear Netter, Terima kasih atas waktu yang anda luangkan untuk membaca e-mail ini, maaf bila mengganggu waktu anda, dan apabila anda tidak berkenan silahkan di delete saja. Saya sedang mencari partner bisnis yang serius, yang mau meluangkan waktu 1 - 2 jam / harinya untuk mengembangkan bisnis ini, mudah-mudahan andalah orang yang saya cari. Bisnis yang saya kembangkan ini sangat mudah, dan tidak membutuhkan modal besar. Namun, jika anda memiliki kemauan keras untuk sukses, saya yakin anda akan bisa mendapatkannya bersama bisnis ini dalam waktu relatif singkat ( +/- 12 bulan ) Silakan pelajari profile bisnis saya di : http://adin.biz-page.com Best regards dan mohon maaf bila mengganggu, Adi Nugroho ___ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd
$BL$>5Bz9-9p"(!Z#1#0#5L>MM(B$B$K%W%l%<%s%H![!!%m!<%:%R%C(B$B%WB>%@%$%(%C%H>&IJ$r(B $B$I(B$B$I!A$s$HAm@*(B105$BL>MM$K!*(B
<$B;v6H $BM-8B2q http://www.rakuten.co.jp/vivian/ (B<$B;v6H [EMAIL PROTECTED] (B (B<$BAw?. $B%"%j%i%C%/%9%"%/%;%9%"%C%W%5%]!<%HG[?.Be9T([EMAIL PROTECTED] $B"(FCDj>&$7$J$$>l9g$NO"MmJ}K!(B> $BEvJ}$+$i$N9-9pG[?.Dd;_$r4uK>$5$l$kJ}$O!"$3$N%a!<%k$K$=$N$^$^JV?.$$(B $B$?$@$/$+!"$r!VG[?.Dd;_!W$H=q$-49$(JV?.$7$F$/$@$5$$!#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B (B (B $B!y!y!z!!%@%$%(%C%H$H$-$l$$$r!"$i$/$i$/!"$?$N$7$/"v(B $B!y!z(B $B!zH~!9(Ban $B%&%'%V%7%g%C%W$+$i!"%W%l%<%s%H$N$40FFb"v(B $B!y!z(B $B!y!y!z!!CjA*$G#1#0#5L>MM$K!*%m!<%:%R%C%W$d7r9/?)IJ$,Ev$?$k!*!"(B (B (B $B!!"#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!y(B $B!!!!(B $B!!H~!9(Ban $B$O!&!&!&(B $B!!""(B (B $B0&MQQIJ$J$I!"%-%l%$$K$J$j$?$$=w@-$r(B $B1~1g$9$k>&IJ$r$*5a$a$d$9$$2A3J$GDs6!$7$F$$$k%M%C%H%7%g%C%W$G$9!#(B (B $B!!"'(B $BH~!9(Ban WebShop $B$O$3$A$i(B $B"'(B $B!!(Bhttp://www.rakuten.co.jp/vivian/ (B $B:#!"H~!9(Ban$B$G$O!"%m!<%:%R%C%W$d%@%$%(%C%H?)IJ$J$I!"EvE9$G?M5$$N(B $B>&IJ$r%W%l%<%s%H$9$k!X%?%@%W%l#1#1!Y$r3+:ECf$G$9!*(B (B (B $B"#""!z1~Jg$N(BURL$B$O$3$N%a!<%k$N2<$N$[$&$K$"$j$^$9"-!z"""#(B (B (B $B!!"#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!y(B $B!!!!(B $B!!%W%l%<%s%H>&IJ%i%$%s%J%C%W(B $B!!""(B $B!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2(B $B!z(B $B%S%?%_%s#P!C!E$NAj>h8z2L$GLS7j$,%-%e%C!*(B $B!!H)$D$d$D$d!*$40&MQMM$X!*(B $B!!!!!J(B30g$BF~$j!&Dj2A(B300$B1_!K(B (B $B!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2(B $B!z(B $B%@%$%(%C%H$K!*$*DL$8$N2~A1$K!*%A%g%3L#$N%?%V%l%C%H!#(B $B!!%]%j%]%j$+$8$C$FD6%9%C%-%j!*(B $B!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1(B $B!!"""#!!%N%s%U%!%C%H%l%G%#!<%9!&%A%g%&2w$A$g$&!&!&!L>MM$X!*(B $B!!!!!J(B45$BN3F~$j!&Dj2A(B8,800$B1_!K(B (B $B!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2(B $B!z(B $B?)$Y2a$.$kJ}!"4E$$J*!"L}$C$3$$J*$,9%$-$JJ}$K!#(B $B!!IaCJ$HJQ$o$i$J$$?);v$G7r9/%@%$%(%C%H!#(B $B!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1(B $B!!"""#!!%9!<%Q!<%W%l%_%"%`%(%9%F#Z!]#3!!!&!&!&!!#1L>MM$X!*(B $B!!!!!J(B120$BN3F~$j!&Dj2A(B15,000$B1_!K(B (B $B!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2!2(B $B!z(B $B%&%(%9%H!&%R%C%W!&Fs$NOS!&Hh$l$?B-$N$`$/$_$K$b!#(B $B!!%H%j!<%H%a%s%H!u%9%j%`%5%]!<%H!*(B $B!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1!1(B $B!!"""#!!%Q%C%A%a!<%0%k!!!&!&!&!!#1L>MM$X!*(B $B!!!!!J(B30$BKgF~$j!&Dj2A(B9,800$B1_!K(B (B (B (B $B!!"#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!y(B $B!!!!(B $B!!%W%l%<%s%H1~JgMW9`(B $B!!""(B (B $B!|1~Jg4|4V!'(B2003$BG/(B1$B7n(B23$BF|!!!A!!(B2003$BG/(B2$B7n(B26$BF|(B (B $B!|1~Jg;q3J!'EvMn$N$*CN$i$;$r$40FFb$9$k$?$a!"(B $B!!%a!<%k%"%I%l%9$r$*;}$A$NJ}$K8B$i$;$FD:$-$^$9!#(B (B $B!|1~JgJ}K!!'%[!<%`%Z!<%8>e$N1~Jg%U%)!<%`$+$i$41~Jg2<$5$$!#(B $B(B (B $B!|EvA*7hDjJ}K!!'1~JgB??t$N>l9g$OCjA*$H$J$j$^$9!#(B (B $B!|EvA*H/I=!'(B2003$BG/(B3$B7n(B2$BF|!JM=Dj!K(B $B%[!<%`%Z!<%8>e5Z$S%a!<%k$K$FEvMn$r$*CN$i$;$7$^$9!#(B (B $B!|H/Aw!'EvA*H/I=8e!"#31D6HF|$^$G$KA4$F=P2Y$$$?$7$^$9!#(B (B $B!|Cm0U;v9`!'(B $B!!!&$41~Jg$O$*0l?MMM$K$D$-!"#1>&IJ$N$_$H$5$;$F$$$?$@$$$F$*$j$^(B (B$B$9!##2>&IJ0J>e$41~JgD:$$$?>l9g!"CjA*$NBP>]$H$J$j$^$;$s$N$G(B (B$B$4Cm0U$/$@$5$$!#(B $B!!!&%W%l%<%s%H$K4X$9$k$*Ld$$9g$o$;$d!">&IJ$N8r49!"G[C#F|;~$J$I(B (B$B$N%j%/%(%9%H$K$O$*1~$($G$-$^$;$s$N$GM=$a$4N;>52<$5$$!#(B (B $B!|%W%i%$%P%7!<%]%j%7!A0!&$4=;=j!&$*EEOCHV9f(B (B$B$J$I$N8D?M>pJs$O!"%W%l%<%s%H$NDLCN!&H/Aw5Z$S!"EvE9$NH/9T$9(B (B$B$k%a!<%k%^%,%8%s$NG[?.0J30$NL\E*$G;HMQ$9$k$3$H$O$"$j$^$;$s!#(B (B (B $B!!"#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!y(B $B!!!!(B $B!!$41~Jg$N&IJ$r$R$H$D$@$1A*$S!"(B $B!V%W%l%<%s%H1~Jg!W%\%?%s$r%/%j%C%/$9$k!#(B (B $B#3!%$*L>A0!"$4=;=j$J$I4pK\;v9`$r5-F~$$$?$@$-http://www.rakuten.co.jp/vivian/468274/472362/486997/ $B!!"#(B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!y(B (B (B $B!!!y!!$?$/$5$s$N$41~Jg!"$*BT$A$7$F$*$j$^$9"v(B (B $B!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=(B $B!!H~!9(Ban $BF@!9;v6HIt(B (B $BM-8B2qhttp://www.rakuten.co.jp/vivian/ $B!!(B(E-mail)[EMAIL PROTECTED] (B (B== $B$3$N9-9p$O!"%"%j%i%C%/%9!!%"%/%;%9%"%C%W%5%]!<%H!!([EMAIL PROTECTED] $B$,Aw?.Be9T$7$F$*$j$^$9!#(B $B9-9p$B$G$9!#9-9p$NFbMF$K4X$9$k$*Ld$$9g$o$;$O!"(B (B<$B;v6H[EMAIL PROTECTED]$B$X$*4j$$CW$7$^$9!#(B $BG[?.Dd;_$O!"([EMAIL PROTECTED]$B!!$X(B (B $BEvJ}$G$O!"FCDj>&$$E,@5$J>&6H9-9p%a!<%kG[?.