Dec 05

Introduïnt el PIN a la VRA de forma automàtica

Reading time: 3 – 5 minutes

Aquest és un d’aquells posts que podria tenir 40 títols diferents. De fet, només vull passar-vos un parell de trossos de codi un en C i l’altre en perl, que el que fan és obrir el port serie virtual que crea el modem UMTS/GPRS PCMCIA de Vodafone després l’hi envia la comanda AT corresponent per introduir el PIN del SIM que porta la targeta i llestos.

Abans de passar als temes de codis un petit resum d’ordres AT útils per temes de PIN:

AT+CPIN=1234 -> Introduim el PIN a la SIM del mòdem.
AT+CPIN? -> preguntem al mòdem si ja hem introduit la SIM.
AT+CPWD="SC",old_pin,new_pin -> canviem el PIN de la SIM.

De fet, si no voleu fer un codi tan bonic com el que jo uso, també podeu fer una cosa tan senzilla com aquesta:

# echo AT+CPIN=1234 > /dev/tts/USB0

Sent 1234 el codi PIN i /dev/tts/USB0 el dispositiu serie que crea el modem PCMCIA de vodafone.

Anant a codis una miqueta més interessants aquí teniu un trosset de codi C per fer el mateix que em fet en l’ordre anterior:

#include <stdio.h>   /* Standard input/output definitions */
#include <string.h>  /* String function definitions */
#include <unistd.h>  /* UNIX standard function definitions */
#include <fcntl.h>   /* File control definitions */
#include <errno.h>   /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
main() {
	int fd;
	fd = open_port();
	init_modem(fd);
	close(fd);
}
int open_port(void) {
	int fd; /* File descriptor for the port */
	struct termios options;
	fd = open("/dev/tts/USB0", O_RDWR | O_NOCTTY | O_NDELAY);
	if (fd == -1) {
		/*
		* Could not open the port.
		*/
		perror("open_port: Unable to open /dev/tts/USB0 - ");
	}
	else fcntl(fd, F_SETFL, 0);
	/* get the current options */
	tcgetattr(fd, &options);
	cfsetispeed(&options, B19200);
	cfsetospeed(&options, B19200);
	/* set raw input, 1 second timeout */
	options.c_cflag &= ~PARENB;
	options.c_cflag &= ~CSTOPB;
	options.c_cflag &= ~CSIZE;
	options.c_cflag |= CS8;
	options.c_cflag     |= (CLOCAL | CREAD);
	options.c_cflag	    &= ~CNEW_RTSCTS;
	/* set the options */
	tcsetattr(fd, TCSANOW, &options);
	return (fd);
}
int                  /* O - 0 = MODEM ok, -1 = MODEM bad */
init_modem(int fd)   /* I - Serial port file */
{
	char buffer[255];  /* Input buffer */
	char *bufptr;      /* Current char in buffer */
	int  nbytes;       /* Number of bytes read */
	int  tries;        /* Number of tries so far */
	for (tries = 0; tries < 3; tries ++) {
		/* send an AT command followed by a CR */
		if (write(fd, "AT+CPIN=1234\r", 13) < 13) continue;
			/* read characters into our string buffer until we get a CR or NL */
			bufptr = buffer;
			while ((nbytes = read(fd, bufptr, buffer + sizeof(buffer) - bufptr - 1)) > 0) {
				bufptr += nbytes;
				if (bufptr[-1] == '\n' || bufptr[-1] == '\r') break;
			}
		/* nul terminate the string and see if we got an OK response */
		*bufptr = '\0';
		if (strncmp(buffer, "OK", 2) == 0) return (0);
	}
	return (-1);
}

Com en l’exemple anterior el dispositiu serie és /dev/tts/USB0 i el codi PIN 1234. Aquest codi és un copy/paste de la part d’un serial howto que ja no recordo ni d’on el vaig treure. Només m’he quedat amb el codi que em calia i hi he afegit algunes otpions que hi havia al howto però no als exemples de codi.

A continuació penjo un codi equivalent fet en perl. Com podeu veure aquest codi en perl té una dependència de la llibreria CPAN: Device::Gsm. Amb aquest llibreria també és molt senzill enviar SMS i descobrir algunes informacions del telèfon, com el fabricant o l’imei.

use Device::Gsm;
my $gsm = new Device::Gsm( port => '/dev/tts/USB0', pin => '4466' );
if( $gsm->connect() ) {
  print "connected!\n";
} else {
  print "sorry, no connection with gsm phone on serial port!\n";
}
# Register to GSM network (you must supply PIN number in above new() call)
print $gsm->register();
Sep 25

VRA de Vodafone (GPRS/UMTS) amb linux

Reading time: 6 – 10 minutes

Com ja heu anat podent llegir en els últims posts estic provant la targeta 3G de Vodafone. Per poder iniciar un desenvolupament per un tema de feina. Així doncs després de comprobar com funciona amb windows tan amb el software de comunicacions de vodafone (VMC) com a través de l’acceso telefonico a redes del win. M’he decidit a donar-hi un cop d’ull amb Linux. La veritat és que sorprenenment la cosa ha estat molt més senzilla del que em pensava. Fins hi tot he trovat molta més documentació de la que vaig trobar fa més d’1any quan vaig provar la targeta que llavors només era GPRS.

Malgrat tota la documentació que he trobat per internet parlava de la targeta Option model 5000 us puc confirmar que aquesta també aplica al model 6300. Com podreu veure amb les fotos que us penjo a continuació jo he provat les dues la 5000 i la 6300 ja que una la tinc de fa força temps però no tenia targeta per provar-la i l’altre és la que hem comprat pel projecte.

VRA model 5000:

vra5000.jpg

VRA model 6300:

vra6300.jpg

Configurant el sistema

Tornant al tema linux, doncs bé ambdues targetes disposen d’un bridge intern entre un bus PCMCIA i un HUB USB de 3 ports. Així doncs, per tal de que funcionin heu de tenir el vostre sistema PCMCIA configurat i us heu d’assegurar que es llença el modul usbserial i ohci_hcd que seran els que faran carregar el HUB USB que hi ha dins la PCMCIA i fer apareixer els corresponents ports serie per poder accedir al modem. Si mireu els missatges del kernel podreu veure algo semblant a això (dmesg):

usb 5-1: new full speed USB device using ohci_hcd and address 2
usbcore: registered new driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic
usbcore: registered new driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core v2.0
drivers/usb/serial/usb-serial.c: USB Serial support registered for Option 3G data card
option 5-1:1.0: Option 3G data card converter detected
usb 5-1: Option 3G data card converter now attached to ttyUSB0
option 5-1:1.1: Option 3G data card converter detected
usb 5-1: Option 3G data card converter now attached to ttyUSB1
option 5-1:1.2: Option 3G data card converter detected
usb 5-1: Option 3G data card converter now attached to ttyUSB2
usbcore: registered new driver option
drivers/usb/serial/option.c: Option Card (PC-Card to) USB to Serial Driver: v0.4

El que us pot portar a confusió és quan mireu els dispositius USB que teniu connectats al sistema (lsmod):

# lsusb
Bus 005 Device 002: ID 0af0:5000
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 003: ID 413c:8000 Dell Computer Corp.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 004: ID 0d3d:0001 Tangtop Technology Co., Ltd
Bus 001 Device 001: ID 0000:0000

Podeu veure que a la primera línia malgrat no hi ha cap descripció té un dispositiu connectat del venedor amb el codi: 0x0af0 (idVendor, o sigui, Option) i el model del dispositiu: 0x5000 (idProduct). Com podeu veure ara mateix el que tinc connectat és la targeta model 5000 la 6300 simplement apareix aquest número enlloc de l’altre.

Jo he fet les proves amb un kernel 2.6.13.2 (amb udev, devfs ja no es suporta a la v.2.6.13). Si el que vull és verificar que se m’han creat els ports serie amb els que accediré al modem puc fer algo tan senzill com:

$ ls -l /dev/tts
total 0
crw-rw----  1 oriol tty   4, 64 Sep 25  2005 0
crw-rw----  1 oriol tty   4, 65 Sep 25  2005 1
crw-rw----  1 oriol tty   4, 66 Sep 25  2005 2
crw-rw----  1 oriol tty   4, 67 Sep 25  2005 3
crw-rw----  1 root  tty 188,  0 Sep 25 17:29 USB0
crw-rw----  1 root  tty 188,  1 Sep 25 17:28 USB1
crw-rw----  1 root  tty 188,  2 Sep 25 17:28 USB2

Notes sobre el kernel

Aneu en compte perquè no es configura igual la targeta per kernels >2.6 i <2.6.13 que pels >2.6.12. Més informació al link [2] de la secció de links. Els primers només necessiten el mòdul usbserial i ohci_hcd. Els més nous porten un mòdul dins la secció USB Serial del kernel especific pels mòdems GPRS/UMTS de la marca Option (CONFIG_USB_SERIAL_OPTION=m). Per tant, heu d’usar els dos mòduls anteriors més el modul específic.

Accedint al modem amb el minicom per introduir el PIN

El primer que hem de fer és introduir el codi PIN de la targeta SIM, notareu que quan la targeta esta configurada i encara no em entrat el PIN els dos LEDs que porta un fa pampallugues de color verd i l’altre de color vermell després d’entrar el PIN la vermella hauria de desapareixer.

Per posar el PIN de moment no he buscat cap sistema que ho fassi automàticament. Així doncs ho he fet a mà. Amb el minicom la configuració que he usat per entrar-hi és la següent: (minicom -s)

minicom.png

Per introduir el PIN només em d’entrar al minicom i escriure: AT+CPIN=”1234″, sent 1234 el nostre PIN. Si el PIN és correcte el modem ens tornarà un OK i al cap d’uns 30s el llumet vermell s’apagarà.

Aprofitant que estem al minicom podem aprofitar per llençar algunes ordres més a través de les comandes AT:

  • AT+CSQ torna el nivell de senyal que estem revent. Per tenir una connexió acceptable en GRPS/UMTS hem de rebre almenys un nivell 12. Jo a casa només rebo entre un 5 i un 9 per això em falla tan l’enllaç.
  • AT&V ens permet consultar les configuracions que porta la targeta de serie.
  • AT_OPSYS=”0,2″ només acceptem enllaços per GPRS
  • AT_OPSYS=”1,2″ només UMTS.
  • AT_OPSYS=”2,2″ preferiblement GPRS.
  • AT_OPSYS=”3,2″ preferiblement UMTS.

Configurant el dial-up

Com a programa per gestionar les connexions a internet he usat el gnome-ppp. Recordeu que l’usuari que llenci aquest aplicatiu ha de tenir permisos (amb read+write n’hi ha prou) sobre el dispositiu de modem (en el meu cas /dev/tts/USB0). La configuració del dia-up és molt simple us la poso en aquestes captures:

screen1.png
screen2.png
screen3.png
screen4.png

Conclusió

Bé doncs, amb tot això n’haurieu de tenir prou per poder configurar les VRA 5000 o 6300 de Vodafone. No oblideu que per molt Vodafone que posi, l’empresa que realment fabrica les targetes és OPTION. Per aconseguir ajuda per internet sempre pot ser útil. Tot el que he explicat aquí ho he extret els links que us engaxo a continuació.

Links