Xwork's Blog

The lord is waiting to take your hand.

Vamos a programar #86 - Reasignando teclas del teclado.

No hay comentarios.
Hola de nuevo a todos, el día de hoy vamos a ver cómo reasignar algunas botones de nuestro teclado para que hagan otra cosa.

Hace unos días en la eterna lucha del hombre contra la máquina, mi teclado simplemente decidió que 15 años de uso eran suficientes y simplemente ya no quiso funcionar. Mi teclado compaq 5185 fue el primero que tuve y lo use de forma bastante extenuante.
Algo paso que simplemente ya no quiso reconocer las pulsaciones. Cómo siempre que "reparo" algo hay una enorme tendencia a que me "sobren" piezas, simplemente decidí guardarlo. Para su reemplazo, saque un teclado que un amigo me regaló hace mucho (cómo el de la primer imagen), es más compacto y mas viejo que el mio pero totalmente funcional salvo por unos cuantos botones.

Mi primer teclado tenía la ventaja que tenia varios botones adicionales; los mas importantes (para mi) eran: volumen arriba, volumen abajo, silencio y calculadora. El reemplazo también tiene unos botones extra (seis para ser exacto), pero al conectarlo y presionarlos, ninguna hizo nada. Busqué los controladores pero no encontré ninguno para mi sistema operativo. Las teclas "normales" funcionan cómo deben, pero las "especiales" no.

Para solucionar mi problema busque en internet y encontré que todas las pulsaciones del teclado son gestionadas por el sistema operativo, es decir, si presionamos una tecla, está genera un código pero nuestro amigo Windows es el responsable de que pasa después y no solo eso, posee la capacidad de reasignar las pulsaciones.

Tomando en cuenta lo anterior, vamos a buscar una forma de re-asignar una tecla, pero hay una advertencia, vamos a modificar el registro de Windows (el registro prácticamente es un lugar donde se guardan las configuraciones de una computadora con ese sistema operativo), si sigues los pasos que voy a mostrar no habrá ningún problema, pero si mueves más "cosillas" puedes hacer que el PC no inicie correctamente.

Antes que nada veamos unos cuantos códigos para algunas teclas.

   
US   key assignment   
   
Base   Make   
   
Insert   
   
E0   52   
   
Delete   
   
E0   53   
   
Left   Arrow   
   
E0   4B   
   
Home   
   
E0   47   
   
End   
   
E0   4F   
   
Up   Arrow   
   
E0   48   
   
Dn   Arrow   
   
E0   50   
   
Page   Up   
   
E0   49   
   
Page   Down   
   
E0   51   
   
Right   Arrow   
   
E0   4D   

Para nuestra demostración vamos a usar la tecla "Page Up" y la vamos a reasignar para silenciar el volumen del sistema. La siguiente tabla muestra  algunos de los códigos de teclas multimedia.

CODEALIAS
E0 6AVK_BROWSER_BACK
E0 69VK_BROWSER_FORWARD
E0 67VK_BROWSER_REFRESH
E0 68VK_BROWSER_STOP
E0 65VK_BROWSER_SEARCH
E0 66VK_BROWSER_FAVORITES
E0 32VK_BROWSER_HOME
E0 20VK_VOLUME_MUTE
E0 2EVK_VOLUME_DOWN
E0 30VK_VOLUME_UP
E0 19VK_MEDIA_NEXT_TRACK
E0 10VK_MEDIA_PREV_TRACK
E0 24VK_MEDIA_STOP
E0 22VK_MEDIA_PLAY_PAUSE
E0 6CVK_LAUNCH_MAIL
E0 6DVK_LAUNCH_MEDIA_SELECT
E0 6BVK_LAUNCH_APP1
E0 21VK_LAUNCH_APP2

El código de la tecla que queremos usar es "E0 20" y el código de la tecla "Page UP" es "E0 49" pero ¿y después? Cómo ya mencione antes, Windows es el encargado de gestionar las pulsaciones y guarda esta configuración en el registro. Para acceder a ella, necesitamos encontrar la siguiente clave:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]

Ahí crearemos un nuevo valor binario.


La estructura que debe de tener el valor es de la siguiente forma:

  • 00,00,00,00 > encabezado
  • 00,00,00,00 > flags
  • 02,00,00,00 > número de entradas más uno
  • xx,xx,xx,xx > el código de las teclas a reasignar empezando por el código que queremos que se aplique seguido por el código de la tecla
  • 00,00,00,00 > terminación.
Entonces si sustituimos los valores de nuestras teclas, tenemos algo cómo de la imagen:


Hay que notar que cada código tiene los valores "invertidos", es decir, la tecla de silencio tiene el código "E0 20" pero al momento de escribir el valor en el registro, lo ponemos cómo "20 E0" y lo mismo va para todas las teclas, la tecla "Page Up" tiene el codigo "E0 49" pero lo escribimos cómo "49 E0". Al reiniciar la computadora y presionamos la tecla "Page Up", el sistema se debería de silenciar (en caso contrario algo salio mal). Si quieres hacer el proceso de forma automática, puedes copiar el siguiente texto y guardarlo cómo "key.reg" usando el bloc de notas.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,20,E0,49,E0,00,00,00,00

Cada vez que hagas un cambio se debe de reiniciar la computadora.
Finalmente y a manera de ejemplo, supongamos que queremos cambiar las teclas que ya cambiamos, pero ademas queremos que la tecla numérica 7 suba el volumen, tendríamos algo cómo lo que sigue:

  • 00,00,00,00 > encabezado
  • 00,00,00,00 > flags
  • 03,00,00,00 > número de entradas más uno
  • 20,e0,49,e0 > el código del primer juego de teclas
  • 30,e0,47,00 > el código del segundo juego de teclas
  • 00,00,00,00 > terminación.
Cómo podrás ver, hay una gama amplia de posibilidades, solo ten en cuenta que los cambios son solo validos para teclas simples, si intentas crear combinaciones de teclas (ctrl + shift +supr) estas no funcionaran. En el siguiente post continuaremos con mas de esto y aprenderemos a detectar cuales son los códigos de cualquiera de las teclas de nuestro teclado.

Los leo luego.

No hay comentarios. :

Publicar un comentario

Cumplimos 4 Años!!!!!!

No hay comentarios.
Hola de nuevo a todos, el día de hoy solo escribo para recordar que un día cómo hoy pero de hace cuatro años, surgió el blog de Xwork.


Si bien ha sido una historia de sube y bajas, actualmente la cosa se ha mantenido por el piso. Al inicio del año supuse que al menos iba a publicar un par de entradas al mes, pero entre batallas de diferentes índoles y me puesta de atención a unas cosas que me la exigen, poco a poco el contenido a ido disminuyendo. Cómo político en campaña prometo hacer post, pero no especificaré el número para no quedar mal así que siempre te puedes dar una vuelta para ver si hay algo nuevo.

Al igual que el tema anterior, este se va a mantener un buen rato, aún me quedan algunos detalles por arreglar para que este listo totalmente.

Cómo los músicos del Titanic me despido por ahora mientras el blog se hunde, pero no lo dejaré hundir totalmente, pues me lo debo (e indirectamente a la persona que fue la que me dio la idea) y les recuerdo que si alguien quiere colaborar a crear contenido acorde a lo que trata el blog, con gusto acepto.

Nos seguimos leyendo.

No hay comentarios. :

Publicar un comentario

Learning machine #15 - Operaciones a nivel del bits.

No hay comentarios.
Hola de nuevo a todos, el día de hoy vamos a ver cómo es que se realizan las operaciones a nivel de bit usando cómo referencia a los operadores de C#. Hay que tener en cuenta que dependiendo de la plataforma y del lenguaje que se use, las operaciones pueden variar un poco, pero el concepto sigue siendo el mismo.



Para empezar, hay que tomar en cuenta que este tipo de operador solo se aplica a los números enteros "int", por lo que podemos decir que aplicar cierta operación puede producir un resultado no esperado si no tomamos en consideración lo anterior.

Operadores de desplazamiento (<< y >>)

El operador "<<" o "operador de desplazamiento a la izquierda" (Left shift para los cuates). Sirve para desplazar los bits a la izquierda, es decir mueve el valor de un bit. Para poder observar un poco mejor a lo que me refiero, tomemos el número 101 en base dos, si desplazamos un bit a la izquierda, tendremos el número 1010. Hay que tener en cuenta lo que mencione al inicio, las operaciones se hacen en número enteros, si el número está definido cómo "int" tendríamos en memoria algo cómo la imagen que sigue:


Si lo desplazamos un lugar a la izquierda tendremos:


En c# podemos indicar cuantos "lugares" queremos desplazar nuestro número. Si por ejemplo desplazamos nuestro número ocho lugares, tendremos:


Nuestro número original era 5, cuando lo desplazamos un lugar obtuvimos 10 y cuando lo desplazamos 8 obtuvimos 1280.

¿Pero que pasa si lo desplazamos 29 lugares? Simple, obtenemos lo siguiente:


Y no parece nada del otro mundo, pero que pasa si le pedimos a c# que nos diga cual es el valor de este número, nos dirá que es ‭-1610612736‬ que está bien pero si no esperamos un número negativo podría sorprendernos un poco (hace un tiempo en un post, mas o menos expliqué por que pasa, sientete libre de revisarlo).

Si desplazamos el número 30 lugares tendremos:



El desplazamiento es realmente intuitivo, solo hay que tener las consideraciones necesarias.

El operador ">>" o "operador de desplazamiento hacia la derecha" (right shift) sirve para desplazar los bits a la derecha. Al igual que el operador "<<" se aplica a los números enteros y sirve para "mover" los números. Tomemos cómo ejemplo el mismo número; es decir 5 o 101 en base dos; tendremos:


Si desplazamos un lugar a la derecha tendremos:

Es muy fácil ver que en efecto se "movió" a la derecha y ahora en lugar de ser el número cinco, es el número dos. Si al número cinco lo desplazamos tres lugares a la derecha, tendremos;

Por lo que la variable si es que le asignamos el mismo valor pero con el desplazamiento habremos perdido nuestro valor y si aplicamos el desplazamiento contrario no lo podemos recuperar. Por eso lo que yo hago es siempre asignar una variable auxiliar para solo modificar el valor en ella y dejar intacta la variable original.

Operador Not (~).

Dependiendo del lenguaje que se use varia un poco cómo se especifica este operador. En C# el operador "not" se escribe usando "~". Su función es la de invertir los bits de un número. Para demostrar con mayor claridad tomemos de nueva cuenta al número cinco;



Si usamos el operador "~" obtenemos:

Ahora tenemos que si le aplicamos el operador "~" al número 5 nos resulta el valor de -6 (recordatorio amable, el tipo "int" usa un bit para indicar el signo).

Operador AND (&).

El operador "and" aplica la operación and a dos números. Hay que recordar  que "and" solo produce un uno cuando ambas valores son uno, en cualquier otro caso devuelve cero. Cómo ejemplo tomemos el número diez decimal o 1010 en binario y el número dos o 10 en binario.



Cómo podrás observar, al aplicar la operación al número diez junto con el número dos obtenemos el número dos.

Operador Or (|).

El operador " Or" aplica la operación or a dos números. Tomemos cómo ejemplo los números cinco decimal o 101 en binario y el número diez decimal o 1010 en binario, tendremos lo siguiente.

Recordemos que la operación or devuelve un uno cuando cualquiera de los dos valores es uno, por lo que al aplicar la operación or al número cinco y diez en decimal, nos resulta quince.

Y bien, por ahora es todo, en el siguiente post veremos unos ejemplos en c# donde haremos uso de los operadores para agilizar nuestro trabajo. Recuerda que en este mes cumplimos años por lo que espero publicar unos cuantos post mas para "celebrar".

Los leo luego.

No hay comentarios. :

Publicar un comentario

Back to basics #10 - Reguladores de voltaje

No hay comentarios.
Hola de nuevo a todos, el día de hoy vamos a ver el uso del regulador de voltaje.



A veces cuando trabajamos con algunos componentes, es necesario tener una fuelte de voltaje que nos suministre un voltaje constante. Por lo regular, la mayoria de las aplicaciones del blog necesitan un voltaje de 5v. Si trabajamos con una fuente de voltaje de laboratorio, podemos confiar que tendremos siempre disponible "la energia necearia", pero que pasa si queremos usar un eliminador y solo tenemos uno de 12v? Simple, no podremos usarlo o no de forma directa (al menos que nos guste ver el mundo arder).

Este tipo de eliminador es bastante barato.

En la medida de lo posible deberíamos de usar componentes que soporten un rango amplio de operación, pero el caso de que queramos  combinar componentes que usen 5v y 12v es donde surgirá un problema.

El circuito LM7805 (o simplemente 7805) sirve para regular un voltaje, éste modelo en especifico sirve para regularizar el voltaje a un nivel de 5v. Existen mas variantes del integrado; el 7809 y el 7812 y el voltaje de regulación de cada uno es 9v y 12v respectivamente. Su uso es realmente sencillo y si miramos la siguiente imagen, veremos el diagrama de conexión.

Físicamente el regulador puede tener alguno de los siguientes aspectos:
Y nosotros por ahora usaremos el T0-220.  La pata uno será por donde conectaremos el voltaje a regular; 12V en este caso. La para 2 es tierra y la pata 3 es por donde saldrá el voltaje ya regulado.Si observamos bien el diagrama, solamente necesitaremos un capacitor a la entrada y uno más a la salida y obtendremos un voltaje. Los valores de estos dependerán en gran medida de la corriente que el regulador deberá suministrar. En la hoja de datos para el integrado LM7805 se indica que dependiendo de la lejanía de la entrada con respecto a la fuente de alimentación, el capacitor C1 puede ser omitido, mientras que el capacitor C2 ayuda a mantener un valor estable. Cómo recomendación puedes probar con distintos valores o solo usar los valores recomendados en la hoja de datos que son: C1 = 0.22µf y C2= 0.1µf. Personalmente he probado con valores de 2µf en la entrada y salida para cuando uso una carga de 400mA.

Una de las consideraciones que debemos de tomar en cuenta, es que el regulador va a disipar todo el exceso de voltaje en calor por lo que si queremos hacer uso de este y le vamos a exigir corrientes superiores a 500mA, debemos de utilizar un disipador de calor.(aunque se supone que tiene protección contra sobre-corriente y sobre-calentamiento probablemente los vecinos sufran si no hay una buena disipación)

Las cosas se pueden poner "calientes" si la disipacion adecuda

Para recapitular. El integrado lm7805 (y todos sus amigos) pueden ser una alternativa realmente rápida y sencilla para obtener un voltaje regulado, pero está por demás decir que debido a que todo el "voltaje extra" se convierte en calor, no es la manera más eficiente para hacerlo pero si la corriente que usamos no es tan alta sin duda es una buena alternativa , para corrientes mayores existen otro tipo de reguladores (que eventualmente veremos) pero si no queremos complicarnos, está sin duda es una buena alternativa.

Y bien, por ahora es todo. La cuarentena lejos de permitirme crear cosas para el blog, me alejo de él, pero aprovechando que en este mes cumplimos un año más, trataré de subir algunos post útiles

No hay comentarios. :

Publicar un comentario