logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

komendy at-wysylanie smsa-pdu w delphi prozbha o pomoc

studencik22 03 Kwi 2007 12:04 4217 1
REKLAMA
  • #1 3747512
    studencik22
    Poziom 13  
    Posty: 94
    Pomógł: 2
    Ocena: 2
    czesc
    jak myslicie co w tym kodzie jest nie tak bo nie moge znalesc bledu. Pisalem go na podstawie innego kodu napisanego w C. Dziwne jest to, ze po przekodowaniu pierwsze dwa znaki sie zgadzaja z tym wygenerowanym przez program z sieci.

    Chcialem jeszcze zapytac czy dlugosc smsa powinna byc w hexie czy w systemie dziesietnym. A moze nie ma to w ogole znaczenia, gdyz kombinacja zer i jedynek jest taka sama, kwestia jest tylko interpretacja przez kompilator? Jesli przez kompilator to jaka liczbe podawac? czy 19H czy 25D.

    Tak na prawde mam o wiele wiecej pytan ale to chyba nie dzial wiec sobie daruje.

    Dodam ze nie mam pewnosci jak sie uzywa komendy do wysylania sms:
    at+cmgs=19;
    bo jak ja wysle to potem musze wyslac pewne dane. Wysylam je, potem pdu i wyskakuje mi blad po nacisnieciu esc lub gdy wciskam jednoczesnie ctrl i z.
    Czy kto moglby mi wyslac sekwencje do mt50 ktora by dzialala 100%?
    Dzieki i pozdrawiam.
    oto kod :
    a1:array [0..3] of char;
    a2:array [0..3] of char;
    i,k1:real;
    z1,z2,s,hex,length,kk,ll,kiki,hexik:string;
    ss,dd,ff,lenn,jj,lll:pchar;
    zz1,NNN,gg,zz2,ii,x,c,v,b,m,n,il,q,he,cc,jjj,cho1,q3,cho2,pdu_len:integer;
    ch1,ch2,ch3:char;
    begin
    label8.caption:='d72435a80c01';
    label1.caption:=inttostr($d72435a80c01); //pokazuje dziesietna z hexa WITAJ!
    n:=strlen(pchar(string(edit2.text)));
    i:=n / 8; // ii jest int
    c:=n mod 8; // reszta z dzielenia liczba pozycji na 8
    q:=round(i*7+c+1);

    i:=n / 8; // ii jest real
    c:=n mod 8; // reszta z dzielenia liczba pozycji na 8
    ii:=round(i*7+c+13);
    dd:='at+cmgs='; //inicjacja sms
    strcopy(buffer_o, dd);
    mem1.text:=mem1.text+dd;
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev);

    cc:=1;
    pdu_len:=q+13; //wyslanie ile znakow ma PDU
    kk:=inttostr(pdu_len);
    label3.Caption:=kk;
    jjj:=strlen(pchar(string(label3.caption)));
    while cc<jjj+1 do
    begin
    kiki:=label3.caption[cc];
    lenn:=pchar(kiki);

    strcopy(buffer_o, lenn);
    mem1.text:=mem1.text+lenn;
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev);
    cc:=cc+1;
    end;
    lll:=#13+#10;
    strcopy(buffer_o, lll);
    mem1.text:=mem1.text+lll;
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev); //zatwierdzenie dlugosci pdu

    // Teraz wypadaloby poczekac na znak zachety


    lll:='07918406010013F011000b8405275531f30000c406';
    strcopy(buffer_o, lll);
    mem1.text:=mem1.text+lll+#13#10;
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev);


    n:=strlen(pchar(string(edit2.text)));
    i:=n / 8; //
    c:=n mod 8; // reszta z dzielenia liczba pozycji na 8
    k1:=i*7+c+13;
    ii:=round(k1);

    il:=0;
    while il<n-1 do begin
    ch1:=edit2.text[il+1];
    ch2:=edit2.text[il+2];
    zz1:=ord(ch1);
    zz2:=ord(ch2);
    q:=il mod 8;
    cho1:=zz1 shr q;
    q:=7-q;
    cho2:=zz2 shl q;
    cho1:=cho1+cho2;

    label7.caption:=inttostr(cho1);
    label9.caption:=inttohex(ord(cho1),2);
    hexik:=inttohex(ord(cho1),2);

    a1[0]:=hexik[3];
    a1[1]:=hexik[4];
    a1[2]:=hexik[1];
    a1[3]:=hexik[2];

    v:=0; while v<4 do begin
    s:=a1[v];
    //s:=hexik;
    ss:=pchar(s);
    edit3.text:=edit3.text+s;
    strcopy(buffer_o, ss);
    mem1.text:=mem1.text+ss;
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev);
    v:=v+1;
    end;
    il:=il+1;
    if q=1 then il:=il+1;
    end;

    ff:='#13'+'#10';
    strcopy(buffer_o, ff);
    richedit1.text :=buffer_o;
    write_comm(hcommdev, strlen(buffer_o));
    flushfilebuffers(hcommdev);
    // edit3.Text:=pdu
    end;

    Dodano po 53 [sekundy]:

    Aha
    i jak zrobic czekanie w delphi na znak zachety ktorym jest znak '>'?
    Pozdro.
  • REKLAMA
  • #2 3748627
    radekr
    Poziom 16  
    Posty: 122
    Pomógł: 11
    Ocena: 5
    studencik22 napisał:

    ...
    Dodam ze nie mam pewnosci jak sie uzywa komendy do wysylania sms:
    at+cmgs=19;
    bo jak ja wysle to potem musze wyslac pewne dane. Wysylam je, potem pdu i wyskakuje mi blad po nacisnieciu esc lub gdy wciskam jednoczesnie ctrl i z.
    Czy kto moglby mi wyslac sekwencje do mt50 ktora by dzialala 100%?
    ...


    Ja do wysyłana SMS'ów używałem komendy:
    AT+CMGS=<długość><CR>wiadomość PDU<ctrl-Z>
    długość – liczba oktetów zakodowanej wiadomości PDU (bez oktetów adresu SMSC)
    Po przesłaniu <CR> TA (telefon) wysyła 4 znaki: <CR><LF><większy niż><spacja>. Dopiero wtedy można rozpocząć nadawanie wiadomości PDU.

    Działało mi to na Ericsson T10s i T65.
REKLAMA