2006/01/26
PC a móvil a PC
Hace un tiempo desarrollé un gateway sms/mail/sms donde además del software, la pieza clave era esta:

El gateway esta dado de baja (tuvo demasiado éxito), sin embargo el móvil que aparece en la imágen lo sigo usando en algunos de mis proyectos (pronto sabreis por qué estoy escribiendo artículos sobre aparatos). Se trata de un siemens m35i que en su día me cargué la pantalla y lo destiné como modem gsm para poder enviar y recibir sms. Este se comunica con un cable de datos por el puerto serie con el ordenador. Como el cable tiene que usar el mismo compartimento que la fuente de alimentación del móvil y necesitaba tener los dos al mismo tiempo, conecté los pines donde se conecta la batería del móvil a un pequeño circuito con un L7805C y dos condensadores, funcionando todo ello con una fuente de alimentación de 12 voltios.
En este caso el móvil al ser un modem gsm (como la inmensa mayoría) se puede manejar con comandos AT, aunque algunos son característicos de los móviles (como el de mandar sms).
Para trabajar con el, en mi caso, tengo que abrir el puerto serie a 19200 baudios, 8 bits, ninguna paridad y un bit de stop.

En mi caso, siempre me interesa usarlo como transmisor/receptor de sms, por lo que leyendo un poco la documentación del móvil veo que para enviar sms se usa el comando AT+CMGS. Sin embargo mi móvil no permite mensajes de texto de forma directa, sino que necesita enviarlos en formato estandar PDU (también cuando muestra los recibidos). Buscando por ahí no he encontrado mucho código fuente (en java smstools) por lo que me hice una rutina en C para pasar de texto a PDU y viceversa:

El gateway esta dado de baja (tuvo demasiado éxito), sin embargo el móvil que aparece en la imágen lo sigo usando en algunos de mis proyectos (pronto sabreis por qué estoy escribiendo artículos sobre aparatos). Se trata de un siemens m35i que en su día me cargué la pantalla y lo destiné como modem gsm para poder enviar y recibir sms. Este se comunica con un cable de datos por el puerto serie con el ordenador. Como el cable tiene que usar el mismo compartimento que la fuente de alimentación del móvil y necesitaba tener los dos al mismo tiempo, conecté los pines donde se conecta la batería del móvil a un pequeño circuito con un L7805C y dos condensadores, funcionando todo ello con una fuente de alimentación de 12 voltios.
En este caso el móvil al ser un modem gsm (como la inmensa mayoría) se puede manejar con comandos AT, aunque algunos son característicos de los móviles (como el de mandar sms).
Para trabajar con el, en mi caso, tengo que abrir el puerto serie a 19200 baudios, 8 bits, ninguna paridad y un bit de stop.

En mi caso, siempre me interesa usarlo como transmisor/receptor de sms, por lo que leyendo un poco la documentación del móvil veo que para enviar sms se usa el comando AT+CMGS. Sin embargo mi móvil no permite mensajes de texto de forma directa, sino que necesita enviarlos en formato estandar PDU (también cuando muestra los recibidos). Buscando por ahí no he encontrado mucho código fuente (en java smstools) por lo que me hice una rutina en C para pasar de texto a PDU y viceversa:
/* Transforma un texto normal (pchOriginal) en PDU (pchTransformado) devolviendo pchTransformado*/
char *formatoMensaje(char *pchOriginal, char *pchTransformado)
{
char pchTablaHex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned char chrCaracter;
int intContador;
int intIndice;
int intTamano;
int intMascara;
int intDesplaza;
intTamano = strlen(pchOriginal);
intMascara = 1;
intContador = 0;
intIndice = 2;
strcpy(pchTransformado,"00");
intDesplaza = 7;
while(intContador < intTamano)
{
chrCaracter = ((*(pchOriginal + intContador + 1) & intMascara) << intDesplaza) + (*(pchOriginal + intContador) >> (7 - intDesplaza));
pchTransformado[intIndice] = pchTablaHex[(chrCaracter & 0xF0) >> 4];
intIndice++;
pchTransformado[intIndice] = pchTablaHex[chrCaracter & 0x0F];
intIndice++;
intContador++;
intMascara <<= 1;
intMascara++ ;
intDesplaza--;
if(intDesplaza == -1)
{
intMascara = 1;
intDesplaza = 7;
intIndice -= 2;
}
}
pchTransformado[intIndice] = '\0';
chrCaracter=(char)intTamano;
pchTransformado[0] = pchTablaHex[(chrCaracter & 0xF0) >> 4];
pchTransformado[1] = pchTablaHex[chrCaracter & 0x0F];
return pchTransformado;
}
/* Transforma un texto PDU (pchOriginal) en texto normal (pchTransformado) devolviendo pchTransformado*/
char *decodificaMensaje(char *pchOriginal, char *pchTransformado)
{
char pchLetras[5];
unsigned char chrCaracter;
int intTamano;
int intContador;
int intArrastre;
int intDesplaza;
int intIndice;
int intMascara;
intMascara = 128;
intIndice = intContador = intArrastre = intDesplaza = 0;
strcpy(pchLetras, "0x");
strncat(pchLetras, pchOriginal + intIndice, 2);
sscanf(pchLetras, "%x", &intTamano);
intIndice += 2;
while(intContador < intTamano)
{
strcpy(pchLetras, "0x");
strncat(pchLetras, pchOriginal + intIndice, 2);
sscanf(pchLetras, "%x", &chrCaracter);
pchTransformado[intContador] = ((chrCaracter & ~intMascara) << intDesplaza) + intArrastre;
intArrastre=(chrCaracter & intMascara) >> (7 - intDesplaza);
intIndice += 2;
intMascara >>= 1;
intMascara += 128;
intDesplaza++;
if(intMascara == 255)
{
intContador++;
pchTransformado[intContador] = chrCaracter >> 1;
intMascara = 128;
intDesplaza = intArrastre = 0;
}
++intContador;
}
pchTransformado[intContador] = '\0';
return pchTransformado;
}
Comentarios:
No se como contactar contigo para que me ayudes con una cosa, mandame un mail a hugone+eadp@gmail.com y te cuento mi duda, vale? GRACIAS!
Muy buenos tus post sobre las cosillas que haces. Una machine.
Muy buenos tus post sobre las cosillas que haces. Una machine.
Pues si, pero en mi movil al menos no me lo permite, puesto que lanza un mensaje de ERROR. Es por ello que como el formato PDU es un estandar para todos los móviles lo use en el código.
actualmente me encuentro probando con un celular sony ericcson t226.
yo le mando los comandos at del hiper terminal y no me contesta nada. puede ser que lo tenga que mandar en pdu? como lo hago?
mi mail es ignacio.gming@gmail.com
saludos ignacio
yo le mando los comandos at del hiper terminal y no me contesta nada. puede ser que lo tenga que mandar en pdu? como lo hago?
mi mail es ignacio.gming@gmail.com
saludos ignacio
buenas tardes, estoy intentando capturar un sms de un movil motorola desde una aplicación en C# y convertirlo a texto pero no s ehacerlo, pueden ayudarme?
gracias un saludo, Ramiro
mi mail es capueroorelha@gmail.com
gracias un saludo, Ramiro
mi mail es capueroorelha@gmail.com
Perdona Pinda, no había leido tu mensaje. ¿Es posible que no hayas abierto el puerto serie correctamente?. En mi caso (y en muchos) debes abrirlo a 19200 8N1.
Ramiro, ¿podrías ser más específico?, ¿Que es lo que no llegas a hacer?
Ramiro, ¿podrías ser más específico?, ¿Que es lo que no llegas a hacer?
ola a todos tengo un problema al comunicarme con un sonyericsson t230 consigo comunicarme mediante hyperterminal pero el movil entra en un bucle intentando chequear algo que desconozco y no para quieto para poder asi introducir los comandos at.
sabe alguien algo al respecto?
sabe alguien algo al respecto?
HOLA
yo lo e estado intentando con un panasonic vs3 y no me acepta los comandos para mandar sms
de hecho nisiquiera me reconoce algunos de los comandos que listas
tienes alguna idea de por que razon sea
mi correo es ciberbuster59@yahoo.com.mx
yo lo e estado intentando con un panasonic vs3 y no me acepta los comandos para mandar sms
de hecho nisiquiera me reconoce algunos de los comandos que listas
tienes alguna idea de por que razon sea
mi correo es ciberbuster59@yahoo.com.mx
Muy buenas, necesito hacer un programa en gcc para el envio de sms a traves de un movil conectado a un servidor.Alguien podria enviarme scripts o ayuda a mi dire?? malavida22@hotmail.com
Muchisimas gracias de antemano.
Muchisimas gracias de antemano.
Muchas gracias por tu ayuda,pero la verdad es k no esty muy fino en linux.
Me podrias facilitar alguna direccion donde descargarlo??
Me seria de muchisima ayuda.Gracias
Me podrias facilitar alguna direccion donde descargarlo??
Me seria de muchisima ayuda.Gracias
Muchisimas gracias pero yo lo k kiero es poder programar el puerto serie y luegio configurarlo para que envie un sms desde un movi conectado a este.
Gracias.
Gracias.
Hola, estoy intentando enviar un sms a un puerto diferente del que esta por defecto en el telefono receptor, la idea es levantar una aplicacion midlet (j2me) y no encuentro la forma de hacerlo con los comandos at, Les agradeceria muchisimo su ayuda
Sos un groso, muy bueno esto. Pero mira yo tengo un problemita, yo quiero con comandos AT enviar un sms a un midlet que escucha en un puerto, como especifico el puerto con los comandos AT o como puedo solucionar esto? hace dias que estoy y no me doy cuenta...
El midlet esta dormido y se despierta con en mensaje,esta metido en la push registry.
mi mail: ema_kuroas@hotmail.com
mi nombre: Emmanuel Kurpas
El midlet esta dormido y se despierta con en mensaje,esta metido en la push registry.
mi mail: ema_kuroas@hotmail.com
mi nombre: Emmanuel Kurpas
Hola a todos, me gustaría saber si con estas herramientas puedo recibir sms mediante un módem gsm para depués cargar los datos recibidos en un archivo .csv o interpetarlos y publicarlos en una web, no tengo mucha idea de esto, alguien me puede decir qué es lo que necesitaría?
Mi email es rafa5ma@hotmail.com por si alguien puede mandarme algo q me sirva.
Saludos y gracias.
Publicar un comentario en la entrada
Mi email es rafa5ma@hotmail.com por si alguien puede mandarme algo q me sirva.
Saludos y gracias.
El arte de programar
