Las HP-48 son una serie de calculadoras electrónicas muy popular entre estudiantes de ingenierías o carreras técnicas a lo largo de todo el mundo. Una de sus peculiares características es que usan notación polaca inversa, pero probablemente su éxito se deba a que, gracias a que son programables, existe gran cantidad de programas hechos por los usuarios que abarcan todas las materias.
Una tarea habitual es transferir datos desde el ordenador hacia la calculadora, por ejemplo, transferir los programas o los datos para dichos programas. Para ello existen distintas formas de comunicarse con la calculadora, por ejemplo a través del puerto serie (usando los protocolos Kermit o Xmodem) o a través de un puerto de infrarrojos.
En esta entrada explico como hacer esta tarea desde Linux utilizando el puerto serie y el protocolo Kermit.
Acceso al puerto serie
En muchas distribuciones el puerto serie tiene permisos restringidos por motivos de segurdad, por eso, antes de poder usarlo tendremos que modificar sus permisos. Si tu usuario ya tiene permisos suficientes sobre el puerto serie, simplemente ignora esta sección.
Para poder enviar datos por el puerto serie, necesitamos tener permiso de escritura en /dev/tts/0 para el COM1 o en /dev/tts/0 para el COM2. Los permisos por defecto de dicho dispositivo son los siguientes:
(Si no aparecen dicho dispositivo, recuerda cargar el modulo del kernel del puerto serie # modprobe -v 8250).
Por tanto, para poder usar el puerto para transferir a la calculadora tenemos que añadir a nuestro usuario al grupo tty:
Así mismo, al igual que Unix, GNU/Linux permite que un dispositivo u otro fichero cualquiera, sea abierto por más de un proceso de forma simultánea. Para evitar los problemas que se producen cuando varios procesos acceden simultáneamente a un mismo dispositivo, existe un mecanismo que usa lo que se denomina ficheros de bloqueo. Los ficheros de bloqueo se almacenan en el directorio /var/lock, el cual tiene los siguientes permisos:
Como el programa para conectarnos a la HP va a usar el puerto serie, necesitara acceder a /var/lock para crear un fichero de bloqueo. Por tanto, tendremos que añadir nuestro usuario al grupo uucp para tener permiso de escritura en este directorio.
Por supuesto, una alternativa a estos cambios es usar una regla de UDEV. Si sabes lo que es una regla UDEV, entonces no necesitas que te explique como crear una para cambiar los permisos del dispositivo del puerto serie ;-).
Usando el protocolo Kermit
Existen varios programas que soportan este protocolo en Linux. Por simplicidad yo he elegido cKermit. Para instalarlo en Gentoo, como siempre, lo tenemos fácil:
Para configurarlo con los valores que requiere la HP-48 creamos el fichero ~/.kermrc con el siguiente contenido:
;Tipo set modem type direct ;Puerto donde se conecta set port /dev/ttyS0 ;Velocidad set speed 9600 ;Control de flujo set carrier-watch off set flow none ;Valores de conexión set parity none set block 3 set protocol kermit set control prefix all robust
Para enviar ficheros a la HP48 ejecutaremos:
Previamente tenemos que tener activado el servidor de la HP48 pulsando la tecla "cambio derecho" y la tecla "R/SWAP".
Para recibir ficheros desde la HP48 ejecutaremos:
Puesto que los retornos de carro de ficheros producidos desde Linux pueden verse mal en la HP48 he creado un script (ver los adjuntos en esta entrada) para enviar ficheros de texto a la HP con los retornos de carro corregidos, pero conservando el archivo original.
| Adjunto | Tamaño |
|---|---|
| ScriptHP48 | 228 bytes |
