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.
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.