
Convertir al Formato PDU y enviar SMS en formato PDU
#1
Posted 23 June 2011 - 01:02 PM
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]
#2
Posted 23 June 2011 - 05:53 PM
#3
Posted 23 June 2011 - 08:22 PM
El utiliza el componente APRO o ASYNCPRO que es el que utilizo para conectarme a los puertos seriales.

Attached Files
#4
Posted 23 June 2011 - 11:10 PM
Saludos
#5
Posted 25 June 2011 - 01:44 PM
...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


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.
#6
Posted 26 June 2011 - 02:20 AM
Saludos.
#7
Posted 26 June 2011 - 06:26 AM
Lo prometido es deuda:Cuando tenga un rato trato de realizar un interface mas cercano al delphi, con String, pues las funciones usan PCHAR.
function Ascii2Pdu(ascii: String): String; var _pdu: PCHAR; i: integer; begin i:= ascii_to_pdu(PCHAR(ascii), @_pdu); Result:= Copy(_pdu, 1, i); FreeMem(_pdu); end; function Pdu2Ascii(pdu: String): String; var _ascii: PCHAR; i: integer; begin i:= pdu_to_ascii(PCHAR(pdu), Length(pdu), @_ascii); Result:= Copy(_ascii, 1, i); FreeMem(_ascii); end
Subo los cambios en el archivo PDUConv.pas y una aplicación delphi de ejemplo.
Saludos.
#8
Posted 26 June 2011 - 01:17 PM

Cuando sea un viejito como caral y egostar, espero haber alcanzado tu sabiduria




#9
Posted 26 June 2011 - 03:52 PM

Saludos.
#10
Posted 27 June 2011 - 06:54 AM



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.
#11
Posted 27 June 2011 - 07:36 AM



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.
#12
Posted 04 July 2011 - 06:04 AM
Lo que muestro es como decodificar un SMS recibido en formato PDU pues parece que es lo que mas te interesa:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, PDUConv; type TForm1 = class(TForm) Button1: TButton; E_PDU: TEdit; Label2: TLabel; E_MSG: TEdit; Label3: TLabel; E_Tlf: TEdit; Label4: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function HexStrToInt(HexStr: String; index: integer): integer; begin Result:= StrToInt('$' + Copy(HexStr, index*2-1, 2)); end; function HexStrToStr(HexStr: String): String; var i, L: integer; begin L:= Length(HexStr); i:= 1; while i <= L do begin Result:= Result + char(StrToInt('$'+ Copy(HexStr, i, 2))); inc(i, 2); end; end; function StrToHexStr(Str: String): String; var i, L: integer; begin L:= Length(Str); for i:= 1 to L do begin Result:= Result + IntToHex(integer(Str[i]), 2); end; end; function GetPDUMessage(PDU: String): string; var i: integer; begin i:= HexStrToInt(PDU, 1) + 3; i:= i + (HexStrToInt(PDU, i)+1) div 2 + 12; Result:= Pdu2Ascii(HexStrToStr(Copy(PDU, i*2-1, Length(PDU)-i))); end; function GetPDUSenderNumber(PDU: String): string; var n, i, NDigits: integer; begin Result:= ''; i:= HexStrToInt(PDU, 1) + 3; NDigits:= HexStrToInt(PDU, i); inc(i); if HexStrToInt(PDU, i) = $91 then Result:= '+'; inc(i); n:=0; while n < NDigits do begin Result:= Result + PDU[n + i*2]; if UpperCase(PDU[n + i*2-1]) <> 'F' then Result:= Result + PDU[n + i*2-1]; inc(n, 2); end; end; procedure TForm1.Button1Click(Sender: TObject); begin E_Tlf.Text:= GetPDUSenderNumber(E_PDU.Text); E_MSG.Text:= GetPDUMessage(E_PDU.Text); end; end.
Saludos.
#13
Posted 04 July 2011 - 10:38 PM