elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Informática
| |-+  Hardware
| | |-+  Programar el puerto paralelo en Windows con inpout32.dll y hwinterface.sys
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programar el puerto paralelo en Windows con inpout32.dll y hwinterface.sys  (Leído 4,961 veces)
~

Desconectado Desconectado

Mensajes: 85


Ver Perfil WWW
Programar el puerto paralelo en Windows con inpout32.dll y hwinterface.sys
« en: 9 Abril 2016, 04:06 am »

Programar el puerto paralelo en Windows

Descargar lpthandler.tar

Solo necesitamos conectar un LED entre el pin 9 y el 22 del paralelo.

O como muestra el esquema, entre cualquiera de los pines anaranjados (los pines de datos) y cualquiera de los pines grises (pines de polo a Tierra, GND). Tenemos un total de 16 de esos pines, 2 pines por bit de datos para poder conectar las 2 patas de un LED u otro dispositivo.

Asegurarse de poner el LED en la polaridad correcta, o darle vuelta, o simplemente no va a dejar pasar la electricidad y no va a encender.


Uso de este programa para encender todos los 8 LEDS:
Código:
lpthandler.exe 3bc 11111111

   o sino el puerto 378
lpthandler.exe 378 11111111

   o sino el puerto 278
lpthandler.exe 278 11111111

Uso de este programa para apagar todos los 8 LEDS:
Código:
lpthandler.exe 3bc 00000000

   o sino el puerto 378
lpthandler.exe 378 00000000

   o sino el puerto 278
lpthandler.exe 278 00000000

Cada uno de los 8 bits a escribir debe ser un 1 o 0.
Un 0 apaga y un 1 enciende.


Código
  1. /*
  2.  En resumen solo necesitamos:
  3.  
  4.   Out32(Direccion_Base_Puerto_Paralelo+2, 0);          //Resetear Puerto de Control
  5.   Out32(Direccion_Base_Puerto_Paralelo,   0xFF-0x00);  //Escribir el Puerto de Datos
  6. */
  7.  
  8.  
  9.  
  10. //Aquí, la Direccion_Base_Puerto_Paralelo
  11. //puede ser:
  12. //          0x3BC -- LPT1
  13. //          0x378 -- LPT1
  14. //          0x278 -- LPT2
  15. ///
  16.  
  17. //Necesitamos resetear el Puerto de Control escribiéndole un 0
  18. //para configurar sus opciones, controladas por cada uno de
  19. //sus bits:
  20. ///
  21.  Out32(Direccion_Base_Puerto_Paralelo+2, 0);
  22.  
  23. //Enviamos un valor entre 0 y 255 al puerto de Datos:
  24. ///
  25.  Out32(Direccion_Base_Puerto_Paralelo,   0xFF-0x00);
  26.  

Por si no se entiende el código, se puede ver cómo se escribió en tiempo real, carácter por carácter como en la programación original:

>> Ver Tutorial Animado de Código de lpthandler.c <<





Lo primero son los binarios y el código fuente del driver de acceso general a bajo nivel:

inpout32_source_and_bins.zip [Mirror 1]

inpout32_source_and_bins.zip [Mirror 2]


Después necesitamos saber qué direcciones de I/O tiene el puerto paralelo. Los puertos de I/O son como direcciones de memoria que van desde 0 hasta 65535. Cada una de esas posiciones podemos enviar 1, 2 o 4 bytes, o nosotros podemos recibir 1, 2 o 4 bytes. Por ahora solo vamos a enviar 1 byte a la vez.



El LPT1 está en el puerto (0x378, 378h)(888 decimal) o (0x3BC, 3BCh)(956 decimal).

El LPT2 está en el puerto (0x278, 278h)(632 decimal).

El LPT3 está en el puerto (0x3BC, 3BCh)(956 decimal).

El puerto paralelo es un periférico de 8 bits, así que usa 8 pines de datos para representar los 8 bits de cada byte (ya que usa datos y señales en paralelo, simultáneos), y esos son los pines que manipulamos con encendido o apagado cada vez que escribimos, por ejemplo, al puerto 0x378 (Los Pines Anaranjados, del 2 al 9):





Conector Hembra, en la Tarjeta Madre:





Ahora necesitamos usar void _stdcall Out32(short PortAddress, short data), que viene del driver inpout32.dll y hwinterface.sys.

Algo como esto:
Código:
Out32(378h, 255-0);




El código completo es el siguiente:
Código
  1. //NOTE: Compile with GCC under MinGW.
  2. //
  3. // gcc lpthandler.c -o lpthandler.exe
  4. //
  5. //Usage:
  6. // lpthandler.exe LPT_Port Byte_Bit_Data
  7. //
  8. // LPT_Port:
  9. //  - can be 3bc, 378 or 278
  10. //
  11. // Byte_Bit_Data:
  12. //  - can range from 00000000 to 11111111 (written like that, in binary).
  13. //    Every bit controls one of 8 LEDs.
  14. //
  15. // LEDs are connected between DATA and GROUND lines.
  16. // DATA to GROUND lines are connected like this, for pins:
  17. //
  18. // DATA is + and GROUND is -
  19. //
  20. //  2-18
  21. //  3-19
  22. //  4-20
  23. //  5-21
  24. //  6-22
  25. //  7-23
  26. //  8-24
  27. //  9-25
  28. //
  29. // Remember to set the parallel ports as Standard/Normal in the BIOS
  30. // to ensure proper working of the basics with this program.
  31. ///
  32.  
  33. #include <stdio.h>
  34. #include <windows.h>
  35.  
  36. typedef short _stdcall (*_Out32)(short portaddr, short value);
  37. typedef short _stdcall (*_Inp32)(short portaddr);
  38.  
  39. int main(int argc, char *argv[])
  40. {
  41. HINSTANCE INPOUT32_DLL_Handle;
  42. _Inp32 Inp32;
  43. _Out32 Out32;
  44.  
  45.  
  46. //Load the inpout32.dll library. It's also associated
  47. //with hwinterface.sys, but it should open it by itself:
  48. ///
  49.  INPOUT32_DLL_Handle=LoadLibrary("inpout32.dll");
  50.  if(INPOUT32_DLL_Handle == NULL)
  51.  {
  52.   printf("LoadLibrary failed for inpout32.dll...\n\n");
  53.   return -1;
  54.  }
  55.  
  56.  
  57. //Get access to the Out32/Inp32 functions from inpout32.dll:
  58. ///
  59.  Out32 = (_Out32)GetProcAddress(INPOUT32_DLL_Handle, "Out32");
  60.  Inp32 = (_Inp32)GetProcAddress(INPOUT32_DLL_Handle, "Inp32");
  61.  
  62. //NOTE: The following two lines are the actual logic of the program
  63. //      and are at the top of importance and the program's key logic.
  64. //      Everything else could be considered API noise:
  65.  
  66. //Configure the CONTROL Port with a 0 to sanitize the port state:
  67. ///
  68.  Out32(strtol(argv[1],NULL,16)+2, 0);  //Bit 0: Strobe
  69.                                        //Bit 1: Auto Line Feed
  70.                                        //Bit 2: Initialize Printer
  71.                                        //Bit 3: Select Printer
  72.                                        //Bit 4: Enable IRQ Via Ack Line
  73.                                        //Bit 5: Enable Bi-Directional Port
  74.                                        //Bit 6: Unused
  75.                                        //Bit 7: Unused
  76.  
  77.  
  78.  
  79. //Write the Data port with the desired 8-bit value:
  80. ///
  81.  Out32(strtol(argv[1],NULL,16), strtol(argv[2],NULL,2));
  82.  
  83.  
  84. //Unload our inpout32.dll library:
  85. ///
  86.  FreeLibrary(INPOUT32_DLL_Handle);
  87.  
  88. return 0;
  89. }
  90.  
  91.  


« Última modificación: 9 Abril 2016, 04:13 am por ~ » En línea

Donar con PayPal para que siga trabajando:
https://www.ebay.com/usr/udocproject3

Streams en vivo de programación:
PC 1 - PC 2

http://www.youtube.com/@AltComp126/streams
~

Desconectado Desconectado

Mensajes: 85


Ver Perfil WWW
Re: Programar el puerto paralelo en Windows con inpout32.dll y hwinterface.sys
« Respuesta #1 en: 9 Abril 2016, 04:13 am »

Programar el Puerto Paralelo en Windows, Parte 2

Este simplemente es la grabación en video de la grabación de texto para conveniencia y para anidar aquí mismo en los mensajes del foro la grabación, además de también mostrar unos pocos detalles extra durante y fuera de la grabación de texto:

Basics of Parallel Port Programming Under Windows, Part 2 of 2


« Última modificación: 9 Abril 2016, 04:26 am por ~ » En línea

Donar con PayPal para que siga trabajando:
https://www.ebay.com/usr/udocproject3

Streams en vivo de programación:
PC 1 - PC 2

http://www.youtube.com/@AltComp126/streams
Hason


Desconectado Desconectado

Mensajes: 787


Keep calm and use the spiritual force


Ver Perfil WWW
Re: Programar el puerto paralelo en Windows con inpout32.dll y hwinterface.sys
« Respuesta #2 en: 20 Abril 2016, 14:26 pm »

Hola , saludos, estoy mirando esto, y no me queda claro , que puedo hacer con esto.

Haber, ¿con el puerto paralelo podria reflasear los drivers de la placa base  si no tengo acceso normalmente?

Agradeceria mayor información.

Un saludo.
En línea

Verse constantemente expuesto al peligro puede generar desprecio hacia él.
El que resiste, gana
Aníbal sabía como conseguir la victoria, pero no cómo utilizarla
"Houston, tenemos un problema": los detalles y curiosidades tras uno de los mensajes de alarma más famosos de la historia
https://amaltea.wordpress.com/2008/03/06/proverbios-y-refranes-grecolatinos/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
puerto paralelo
Programación Visual Basic
pepetrueno 1 2,207 Último mensaje 2 Junio 2005, 05:25 am
por Slasher-K
Puerto de control en puerto paralelo
Electrónica
c_tarnoski 0 2,731 Último mensaje 19 Septiembre 2005, 05:46 am
por c_tarnoski
Funcion Inp(&H379) del puerto paralelo de la inpout32.dll
Electrónica
rene1988 0 5,477 Último mensaje 23 Abril 2007, 18:09 pm
por rene1988
Programar PIC con puerto paralelo « 1 2 »
Electrónica
dac 12 12,255 Último mensaje 27 Noviembre 2012, 19:21 pm
por adgellida
[AYUDA] Como Programar el puerto paralelo (placa pci) para mandar datos
Programación Visual Basic
davitox11 1 2,225 Último mensaje 11 Marzo 2013, 15:04 pm
por pcr314
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines