Ir al contenido


Foto

Convertir al Formato PDU y enviar SMS en formato PDU


  • Por favor identifícate para responder
12 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 junio 2011 - 01:02

He estado probando algunos celulares como modem gsm y estoy esperando que me llegue un celular sencillo, pero que me va a permitir enviar mensajes por medio de el.  Mientras tengo un modem de la empresa claro, que me sirve para conectarme a internet por medio del chip de mi celular.
Este modem trae un programita que me permite enviar mensajes de texto. Lo que quiero hacer es enviar mensajes de texto con este modem, pero desde delphi.  He visto que trae varias DLL :


SMSPlugin.dll
SMSUIPlugin.dll




He llamado a la telefonica y nadie sabe decirme nada.  Es Posible Utilizar Estas DLL.


El modem no acepta los comandos At,  pero me crea dos puertos seriales.




[img height=272 width=400]http://img6.imageshack.us/img6/7484/smsclaro.jpg[/img]
  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 junio 2011 - 05:53

con la ayuda de Fredycc he descubierto que este modem solo envia en formato PDU. Asi que por eso es que debo comenzar a revisar. Espero que alguien sepa como convertir de ascii  a  PDU para  poder crear una funcion que resuelva esto.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 23 junio 2011 - 08:22

googleando un poco, encontre el foro delphi praxis de alemania y he encontrado este programita. Con el puedo enviar mensajes desde este modem y el software lo convierte de cadena normal a pdu.  Aqui esta el programa con sus fuentes, la cual he traducido en su mayor parte.

El utiliza el componente APRO  o ASYNCPRO  que es el que utilizo para conectarme a los puertos seriales.

Imagen Enviada

Archivos adjuntos


  • 0

#4 ELKurgan

ELKurgan

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 566 mensajes
  • LocationEspaña

Escrito 23 junio 2011 - 11:10

Gracias por el aporte, compañero

Saludos
  • 0

#5 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 25 junio 2011 - 01:44

...Tienez  razon en que puedo ir trabajando con el programita que encontre.  Por  otro lado, segun indica la pagina que te puse, la version para delphi  depende de los componentes CPORT. 


La idea era crear una funcion que convierta los mensajes de PDU a Ascii sin tener que estar amarrado a ningun componente...


El enlace que me proporcionaste tiene el código necesario para pasar de ascii a pdu y al contrario, pero está escrito en C ^o|. Hoy tenía un rato libre y me dediqué a husmear ese código y finalmente me decidí a traducirlo a delphi.  :)

Como es una cuestión que puede interesar a mas de uno he decidido publicar dicha traducción en una unit que he denominado PDUConv.pas. La subo en este mensaje.

Haz tus pruebas, espero que te sirva de algo y que sea lo que buscabas.  ;)


Saludos.

  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 26 junio 2011 - 02:20

Subo la traducción del ejemplo que aparece en el este enlace, antes mencionado. Se trata de un simple programa de consola con varios ejemplos de codificación ascii - pdu en ambos sentidos.

Saludos.

  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 26 junio 2011 - 06:26

Cuando tenga un rato trato de realizar un interface mas cercano al delphi, con String, pues las funciones usan PCHAR.

Lo prometido es deuda:



delphi
  1. function Ascii2Pdu(ascii: String): String;
  2. var
  3.   _pdu: PCHAR;
  4.   i: integer;
  5. begin
  6.   i:= ascii_to_pdu(PCHAR(ascii), @_pdu);
  7.   Result:= Copy(_pdu, 1, i);
  8.   FreeMem(_pdu);
  9. end;
  10.  
  11. function Pdu2Ascii(pdu: String): String;
  12. var
  13.   _ascii: PCHAR;
  14.   i: integer;
  15. begin
  16.   i:= pdu_to_ascii(PCHAR(pdu), Length(pdu), @_ascii);
  17.   Result:= Copy(_ascii, 1, i);
  18.   FreeMem(_ascii);
  19. end



Subo los cambios en el archivo PDUConv.pas y una aplicación delphi de ejemplo. 


Saludos.
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 26 junio 2011 - 01:17

Gracias por toda tu ayuda.    (y)   




Cuando sea un viejito como caral y egostar, espero haber alcanzado tu sabiduria :D :D :D :D
  • 0

#9 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 26 junio 2011 - 03:52

Amigo, yo también soy tan viejito o mas que Caral o egostar y todavía no he alcanzado la sabiduría :) .


Saludos.
  • 0

#10 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 27 junio 2011 - 06:54

Escafandra no me salgas ahora con que no sabes nada, porque eso no se en que lugar me deja.  :p :D :D

y sobre lo de viejitos era por joder a caral y a egostar.


PD. Por cierto he cambiado el titulo porque me parece mas correcto.
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 junio 2011 - 07:36

jejejeje, y ni como reclamar, lo bueno que Caral es el más viejo :D :D :D

Salud OS

PD, Ya lo comenté en otro hilo, "ser viejo no garantiza se el mejor, conozco a chavales que me impresionan" Y bueno el amigo escafandra es de los amigos que me impresionan cada día.
  • 0

#12 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 04 julio 2011 - 06:04

luk2009, te muestro la forma de decodificar un SMS en formato PDU. El código anterior para pasar de ASCII a PDU y viceversa, sigue siendo el mismo que publiqué. El formato SMS PDU tiene una cabecera de longitud variable y no codificada como ya sabes. En estos enlaces puede verse: 1 , 2. De ellos se deduce que el mensaje no es el mismo cuando se envía que cuando se recibe.

Lo que muestro es como decodificar un SMS recibido en formato PDU pues parece que es lo que mas te interesa:


delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, PDUConv;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     E_PDU: TEdit;
  13.     Label2: TLabel;
  14.     E_MSG: TEdit;
  15.     Label3: TLabel;
  16.     E_Tlf: TEdit;
  17.     Label4: TLabel;
  18.     procedure Button1Click(Sender: TObject);
  19.   private
  20.     { Private declarations }
  21.   public
  22.     { Public declarations }
  23.   end;
  24.  
  25. var
  26.   Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. function HexStrToInt(HexStr: String; index: integer): integer;
  33. begin
  34.   Result:= StrToInt('$' + Copy(HexStr, index*2-1, 2));
  35. end;
  36.  
  37. function HexStrToStr(HexStr: String): String;
  38. var
  39.   i, L: integer;
  40. begin
  41.   L:= Length(HexStr);
  42.   i:= 1;
  43.   while i <= L do
  44.   begin
  45.     Result:= Result + char(StrToInt('$'+ Copy(HexStr, i, 2)));
  46.     inc(i, 2);
  47.   end;
  48. end;
  49.  
  50. function StrToHexStr(Str: String): String;
  51. var
  52.   i, L: integer;
  53. begin
  54.   L:= Length(Str);
  55.   for i:= 1 to L do
  56.   begin
  57.     Result:= Result + IntToHex(integer(Str[i]), 2);
  58.   end;
  59. end;
  60.  
  61. function GetPDUMessage(PDU: String): string;
  62. var
  63.   i: integer;
  64. begin
  65.   i:= HexStrToInt(PDU, 1) + 3;
  66.   i:= i + (HexStrToInt(PDU, i)+1) div 2 + 12;
  67.   Result:= Pdu2Ascii(HexStrToStr(Copy(PDU, i*2-1, Length(PDU)-i)));
  68. end;
  69.  
  70. function GetPDUSenderNumber(PDU: String): string;
  71. var
  72.   n, i, NDigits: integer;
  73. begin
  74.   Result:= '';
  75.   i:= HexStrToInt(PDU, 1) + 3;
  76.   NDigits:= HexStrToInt(PDU, i);
  77.   inc(i);
  78.   if HexStrToInt(PDU, i) = $91 then Result:= '+';
  79.   inc(i);
  80.   n:=0;
  81.   while n < NDigits do
  82.   begin
  83.     Result:= Result + PDU[n + i*2];
  84.     if UpperCase(PDU[n + i*2-1]) <> 'F' then Result:= Result + PDU[n + i*2-1];
  85.     inc(n, 2);
  86.   end;
  87. end;
  88.  
  89. procedure TForm1.Button1Click(Sender: TObject);
  90. begin
  91.   E_Tlf.Text:= GetPDUSenderNumber(E_PDU.Text);
  92.   E_MSG.Text:= GetPDUMessage(E_PDU.Text);
  93. end;
  94.  
  95. end.



Saludos.

  • 0

#13 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 04 julio 2011 - 10:38

Gracias Escafandra por sacar tiempo para esto.  voy a probar y a tratar de entender tu codigo e implementarlo. Cualquier cosa te comento
  • 0




IP.Board spam blocked by CleanTalk.