SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Penguin-man en Lunes 8 de Enero de 2007, 21:27
-
Bueno,Pues tengo que hacer un programa que controle el puerto paralelo en c, pero al parecer los puertos en xp estan cerrados, lo hice en win9x y ahi se deja sacar informacion por el puerto paralelo, mi pregunta es, como se controla el puerto paralelo en xp, se usa alguna libreria diferente, o como puedo compilar un programa que controle el puerto paralelo en xp
-
En la gama NT no se pueden acceder a los puertos ya que es un S.O. de verdad, no como 9x. A menos que uses algun "hack" horrendo tenes la API de Windows disponible para cualquier cosa, busca CreateFile en la MSDN.
-
Uno de esos hacks "horrendos" que menciona Eternal es este:
http://www.geekhideout.com/iodll.shtml (http://www.geekhideout.com/iodll.shtml)
Funciona bastante bien, la razón del "horrendo" Eternal la comentó en un post anterior del foro :).
Saludos,
JJ (Geo).
-
hola a todos
Eternal Idol
como me anudaría el CreateFile para poder usar el puerto. en cuanto lei tu post me puse a investigar aunque me tardare el triple de lo normal porque desgraciadamente no se ingles aunque me las arreglo como puedo.
si puedes podrías darnos una pista mas ya que no me gusta mucho usar esos hacks "horrendos"
salu2 y a investigar
-
Una pequeña duda, perdon por desvirtuar el tema central. Porque un "SO de verdad" no se puede acceder a esos puertos? Que tiene de bueno eso?. Y como hacen a funcionar las impresoras que se conectan por el puerto paralelo en XP? O lo que estan tratando de de decir es que en la gama NT se accede a estos puertos de una manera diferente que en 9x?
-
hola a todos
Eternal Idol
como me anudaría el CreateFile para poder usar el puerto. en cuanto lei tu post me puse a investigar aunque me tardare el triple de lo normal porque desgraciadamente no se ingles aunque me las arreglo como puedo.
si puedes podrías darnos una pista mas ya que no me gusta mucho usar esos hacks "horrendos"
salu2 y a investigar
Te dejo un recorrido por la MSDN, con documentacion y codigo de ejemplo.
Empezamos por CreateFile que es la funcion fundamental:
http://msdn.microsoft.com/library/default..../createfile.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp)
Leela toda para entender los parametros necesarios y posibles a la hora de abrir. En el primer parametro ya vas a ver que se indica como abrir un puerto com (\\\\.\\COM1). Segui leyendo y en la parte de aclaraciones (Remarks) vas a encontrar el titulo Communications Resources donde te cuenta que tenes que usar el parametro OPEN_EXISTING siempre para dwCreationDisposition y NULL para hTemplateFile y como no nos deja un enlace para mucha mas informacion especifica:
http://msdn2.microsoft.com/en-us/library/aa363196.aspx (http://msdn2.microsoft.com/en-us/library/aa363196.aspx)
En este ultimo enlace tenes 3 partes bien diferencidas, el About es pura y exclusivamente explicativo (teorico) mientras que el Using es totalmente practico e incluye ejemplos (codigo) utiles. Por ultimo el Reference es como su nombre lo indica una referencia con las funciones, codigos de control y estructuras usadas.
Seguramente despues necesites ReadFile y WriteFile, estas estan enlazadas en el About.
-
::.."] Una pequeña duda, perdon por desvirtuar el tema central. Porque un "SO de verdad" no se puede acceder a esos puertos? Que tiene de bueno eso?. Y como hacen a funcionar las impresoras que se conectan por el puerto paralelo en XP? O lo que estan tratando de de decir es que en la gama NT se accede a estos puertos de una manera diferente que en 9x?
En esa direccion esta explicado:
http://www.geekhideout.com/iodll.shtml (http://www.geekhideout.com/iodll.shtml)
Es por seguridad, asi como se separan los espacios de memoria, no se permite el acceso directo al hardware ya que se considera una accion privilegiada y peligrosa. Ademas de el problema que acarrea el acceso simultaneo por diferentes procesos que no se sincronizan entre si en lo mas minimo. Las impresoras en NT funcionan mediante un par de pasos, primero los procesos usando la API de Windows encolan sus trabajos en un servicio (el spooler) y este se encarga de pasar estos trabajos a los drivers del subsystem de impresion cuyo trabajo es traducir los comandos "universales" que se pasan con la API de Windows a los especificos que aceptan las impresoras (PCL, PostScript, etc) y finalmente estos pasan esos datos a los drivers de modo Kernel que se comunican con el puerto de la impresora, ya sea USB (Usbprint) o paralelo (Parport), que al ser codigo privilegiado si tiene acceso al hardware directamente. Dificilmente usen IN e OUT directamente ya que los drivers en NT tienen el objetivo de ser portables entonces se usan funciones o macros del HAL para este tipo de acceso.
-
hola a todos
baya trabajito de encontrar el post
les cuento que después de intentar muchas veces ejecutar el código el programa termina colgandose y tengo que reiniciar
me leí todo lo que pude entender de los links pero no me resulto, y como nesecitaba urgentemente los programas termine usando la libreria
también en otro programa intente escribir en memoria en un sector que reserve con la función globalallok paso lo mismo
mañana pongo el codigo para que me digan que estoy haciendo mal que ya estoy cansado de usar esa libreria.
como soy electrónico me es muy útil el puerto para probar muuuuchos circuitos.
salu2(:
-
les cuento que después de intentar muchas veces ejecutar el código el programa termina colgandose y tengo que reiniciar
¿Que codigo? ¿Que programa?
también en otro programa intente escribir en memoria en un sector que reserve con la función globalallok paso lo mismo
Depuralo.
mañana pongo el codigo para que me digan que estoy haciendo mal que ya estoy cansado de usar esa libreria.
como soy electrónico me es muy útil el puerto para probar muuuuchos circuitos.
No podes decir que no te avise.