PasjaGSM.pl
  Jesteś w: Forum > Wysyłanie smsów


Wysyłanie smsów

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Wysyłanie smsów
Poprzedni temat «» Następny temat
Autor Wiadomość
 
cieszak 
Starszy Użytkownik
100% Cieszaka



Telefon: HTC HD7
Operator: Orange
Pomógł: 17 razy
Wiek: 32
Dołączył: 01 Mar 2005
Posty: 247
Skąd: Olsztyn
Wysłany: 2006-08-08, 06:57   Wysyłanie smsów

Witam
Przedwczoraj zauważyłem że w SDK pojawił się plik sms.h, od razu go przejrzałem i próbowałem coś z nim zrobić. Znalazłem nawet fajny formularz do obliczania odpowienich pól http://home.student.utwen...ce/sms_pdu.html , tutaj http://emctone.tripod.com/html/smspdu.html troche więcej szczegółowych informacji ale jedyne co narazie potrafie to odczytać smsc z telefonu oraz ... zawiesić telefon :D

i tu prośba do Yak'a: Czy mógłbyś choć przybliżyć możliwość wysyłania smsów?

Pozdrawiam
_________________
http://cieszak.eu
CrystalCode Studio - aplikacje, strony www, urządzenia elektroniczne, pomoc techniczna, konsultacje
^
 
 
  Skype
     
AdSense


yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-08, 13:00   

Wiec tak:

Aby wyslac SMSa trzeba zbudowac SMS PDU czyli taka ramke SMS. Pola tej ramki okreslone sa w standardach GSM (pelna dokumentacja jako dokument Worda w ZIPie tutaj). Layout tych pól czyli ich rozmiary i kolejność, można znaleźć w SDK (tutaj).

PDU zawiera wszystkie informacje o wiadomosci: numer odbiorcy, waznosc, klasa, tresc, itd.

Do tego potrzebny jest jeszcze numer centrum wiadomosci.

Numer centrum (oraz dodatkowe ustawienia jak np. waznosc) sa przechowywane na karcie SIM w takich zestawach ustawien. Znamy to wszyscy, mozna je edytowac w menu "Ustawienia wiadomosci".

Musimy wiec sie do tego dobrac. Aby to zrobic, nalezy wyslac wiadomosc:
Kod:
send_message(MSG_SMS_REQUEST_GET_SETTINGS|MSG_2P,SMS_SYS_UI,1);

Jedynka oznacza tu numer zestawu ustawien. Najsensowniejsza wartoscia bedzie wlasnie jeden.

Po wyslaniu tej wiadomosci musimy zaczekac na odpowiedz (nalezy wiec opuscic dispatcher). W odpowiedzi dostaniemy jedna z dwoch wiadomosci: MSG_SMS_REPLY_OK_GET_SETTINGS lub MSG_SMS_REPLY_FAIL_GET_SETTINGS. Druga zostanie zwrocona jesli zazadamy nieistniejacego zestawu.

Po odebraniu wiadomosci MSG_SMS_REPLY_OK_GET_SETTINGS w pierwszym parametrze (msg_argv[0]) znajdziemy wskaznik do struktury sms_settings.

W strukturze tej znajdziemy nasze ustawienia a miedzy nimi takze numer centrum wiadomosci. Numer zakodowany jest kodem BCD. Nas to w zasadzie nie interesuje, musimy po prostu go skopiowac (zawsze ma 12 bajtow) i uzyc pozniej przy wysylaniu SMSa.

Majac ustawienia mozemy zabrac sie za samego SMSa. Jesli numer telefonu odbiorcy mamy w postaci tekstu Ascii to musimy go zamienic na kod BCD. Sluzy do tego funkcja encode_bcd_phone().
Rezultat tej funkcji musi znalezc sie w ramce SMS.

Tresc SMSa ze zwyklego string'a Ascii do postaci 7bitowej (GSM-Alphabet) konwertujemy funkcja pack_7bits_string. Musimy pamietac o tym, aby taki wlasnie format ustawic w odpowiednim polu PDU.

Jesli mamy juz PDU oraz numer SMSC (SMS Center - centrum wiadomosci) to mozemy wyslac SMS-a.

W tym celu musimy stworzyc strukture sms_send. Pole type ustawiamy na SMS_TYPE_OUTGOING. Pole smsc to oczywiscie centrum wiadomosci (tablica 12 bajtow). Trzecie i ostatnie pole, data, to PDU. Tutaj Nokia dala nam malego psikusa i trzeba liczyc sie z niekompatybiloscia pewnych modeli. Na niektorych przed polem data istnieje padding, czyli wyrownanie do offsetu podzielnego przez 4. Na innych tego nie ma. Dlatego PDU w polu data MUSI zaczac sie od bajtu okreslonego przez stala sms_send_padding. Bajty przed PDU nie sa istotne (dobrze jest je wyzerowac). Dzieki temu NokiX dostosuje stala sms_send_padding do modelu na ktorym skrypt zostanie uruchomiony i kod zawsze bedzie dzialal.

Po zbudowaniu struktury sms_send mozemy wyslac SMSa.
Kod:
send_message(MSG_SMS_REQUEST_SEND|MSG_3P,SMS_SYS_UI,0,sms_send);

sms_send to oczywiscie wskaznik na nasza strukture. Aha, bylbym zapomnial, pamiec na strukture nalezy zarezerwowac funkcja malloc(). Dzieki temu system sam zadba o jej zwolnienie gdy wiadomosc zostanie juz przetworzona.

Po wyslaniu wiadomosci MSG_SMS_REQUEST_SEND musimy znow zaczekac na odpowiedz. Opuszczamy wiec dispatcher.

W odpowiedzi dostaniemy wiadomosc MSG_SMS_REPLY_OK_SEND lub MSG_SMS_REPLY_FAIL_SEND. Ich parametry nie sa dla mnie do konca jasne. W obu przypadkach jest to jeden parametr i zawsze jakis wskaznik.

To w zasadzie wszystko. Nie jestem teraz pewien (pozniej sprawdze i dopisze) ale moze byc konieczne zamienienie tych dwoch ostatnich wiadomosci na MSG_NOP gdyz bez tego beda powodowac wyswietlenie komunikatu "Wiadomosc wyslana" badz "Wyslanie nieudane" (czy jakos tak) na ekranie.

Powodzenia w kodowaniu.
[Yak]

[ Dodano: 2006-08-09, 02:48 ]
Ok, sprawdziłem. Tak, wiadomości MSG_SMS_REPLY_OK_SEND oraz MSG_SMS_REPLY_FAIL_SEND spowodują wyświetlenie komunikatów o udanym/nieudanym wysłaniu SMSa. Jeśli to nie jest pożadane to należy je wymienić na MSG_NOP. Ponieważ wiadomości te przekazują wskaźnik w pierwszym parametrze (msg_argv[0]) więc należy go zwolnić bo NOP'ując te wiadomości automatycznie wyłączamy kod firmware'u który by to zrobił normalnie. A więc w obsłudze tych wiadomości musimy zrobić coś takiego:
Kod:
free((void *)msg_argv[0]);
msg=MSG_NOP;


-- EDYCJA --
Dodałem informację o innym layoucie.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
Ostatnio zmieniony przez yak 2006-08-19, 15:35, w całości zmieniany 2 razy  
^
 
 
 
     
cieszak 
Starszy Użytkownik
100% Cieszaka



Telefon: HTC HD7
Operator: Orange
Pomógł: 17 razy
Wiek: 32
Dołączył: 01 Mar 2005
Posty: 247
Skąd: Olsztyn
Wysłany: 2006-08-12, 13:49   

Jakoś nadal nie mogę sobie poradzić z tym. Lektura dokumentacji tez na niewiele się zdała. Mam pdu (wydaje mi się że dobre):
Kod:
         const char pdu2[]={
            0x21, //First Octet 0 0 1 00 1 01
            0x00, //Message Reference
            0x0B, //Destination address length
            0x91, //Destination address type
            0x84, //Destination address
            0x05,
            0x60,
            0x73,
            0x19,
            0xF5, //End of destination address
            0x00, //proto
            0x00, //data coding scheme
            0x0C, //user data length
            0xC8, //start user data "How are you?"
            0xF7,
            0x1D,
            0x14,
            0x96,
            0x97,
            0x41,
            0xF9,
            0x77,
            0xFD,
            0x07};


dwa wskaźniki:
Kod:
struct sms_send *sms;
struct sms_settings *settings;


i w dispatcherze (OMSG_MAIN_ACTION1- pobranie numeru smsc, MSG_KEY_DOWN - wysłanie smsa)
Kod:
      case OMSG_MAIN_ACTION1: // main Navi key was pressed
         send_message(MSG_SMS_REQUEST_GET_SETTINGS|MSG_2P, SMS_SYS_UI, 1);
         redraw_screen();
         msg=MSG_NOP;
         break;

      case MSG_SMS_REPLY_OK_GET_SETTINGS:
         settings=(struct sms_settings*)msg_argv[0];
         redraw_screen();
         msg=MSG_NOP;
         break;

      case MSG_KEY_DOWN:
         sms=malloc(320);
         memset(sms->data, 0, sms_send_padding); //wyczyszczenie poczatkowych bajtow
         sms->type=SMS_TYPE_OUTGOING;
         memcpy(sms->smsc, settings->smsc, 12);
         free(settings);
         settings=NULL;
         memcpy(sms->data+sms_send_padding, pdu2, sizeof(pdu2));
         send_message(MSG_SMS_REQUEST_SEND|MSG_3P,SMS_SYS_UI, 0, &sms);
         redraw_screen();
         msg=MSG_NOP;
         break;

      case MSG_SMS_REPLY_OK_SEND:
         redraw_screen();
         free((void *)msg_argv[0]);
         msg=MSG_NOP;
         break;

      case MSG_SMS_REPLY_FAIL_SEND:
         redraw_screen();
         free((void *)msg_argv[0]);
         msg=MSG_NOP;
         break;

      case MSG_SMS_REPLY_FAIL_GET_SETTINGS:
         redraw_screen();
         msg=MSG_NOP;
         break;


Tyle że po wciśnięciu klawisza (MSG_KEY_DOWN) dostaję MSG_SMS_REPLY_FAIL_SEND i telefon się zawiesza.
_________________
http://cieszak.eu
CrystalCode Studio - aplikacje, strony www, urządzenia elektroniczne, pomoc techniczna, konsultacje
^
 
 
  Skype
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-12, 16:36   

cieszak, narazie widzę błąd tu:
Kod:
send_message(MSG_SMS_REQUEST_SEND|MSG_3P,SMS_SYS_UI, 0, &sms);


sms już jest wskaźnikiem więc powinieneś podać go bezpośrednio a nie z &.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
cieszak 
Starszy Użytkownik
100% Cieszaka



Telefon: HTC HD7
Operator: Orange
Pomógł: 17 razy
Wiek: 32
Dołączył: 01 Mar 2005
Posty: 247
Skąd: Olsztyn
Wysłany: 2006-08-13, 12:19   

yak napisał/a:
cieszak, narazie widzę błąd tu:
Kod:
send_message(MSG_SMS_REQUEST_SEND|MSG_3P,SMS_SYS_UI, 0, &sms);


sms już jest wskaźnikiem więc powinieneś podać go bezpośrednio a nie z &.


& - taki mały a tak wiele potrafi (zepsuć) :)

No to już mi sie nie zawiesza, ale dostaje komunikat "Wysłanie nieudane tym razem"(oczywiście po zakomentowaniu case MSG_SMS_REPLY_OK_SEND: (...)case MSG_SMS_REPLY_FAIL_SEND: (...) )

Jeszcze popróbuje coś z tym pdu...
_________________
http://cieszak.eu
CrystalCode Studio - aplikacje, strony www, urządzenia elektroniczne, pomoc techniczna, konsultacje
^
 
 
  Skype
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-13, 15:02   

Dobra, może od słów lepszy będzie działający kod :D

Napisałem przykładowy skrypt wysyłający SMSa. Będzie to dostępne w katalogu .examples w następnej paczce źródeł do skryptów. Narazie daję tu w załączniku.

Aplikacja ładnie pyta dialogiem o tekst i numer telefonu i wysyła SMSa. Mam tylko jedną działającą kartę SIM więc wysłałem do siebie i doszedł bez problemu.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
mdawidm 
Expert
VIP



Telefon: only 33x0
Operator: Orange
Pomógł: 76 razy
Wiek: 29
Dołączył: 04 Lut 2005
Posty: 2142
Skąd: Środa Wlkp.
Wysłany: 2006-08-13, 15:07   

yak napisał/a:
Aplikacja ładnie pyta dialogiem o tekst i numer telefonu i wysyła SMSa. Mam tylko jedną działającą kartę SIM więc wysłałem do siebie i doszedł bez problemu.

Fajnie by było gdyby aplikacja pytała jeszcze w jakiej ilości wysyłać te smsy :D
Wtedy gdy ktoś ma np. smsy za 1gr to mogłby kogoś zaspamować.
_________________
http://mdawidm.infonokia.pl/
^
 
 
     
grzesiek1711 
Starszyzna
heh 3x P????Team :P



Telefon: 3310+6600
Operator: Plus
Pomógł: 14 razy
Wiek: 30
Dołączył: 29 Sie 2004
Posty: 632
Skąd: prawie Koszalin
Wysłany: 2006-08-13, 16:24   

mdawidm, przecież to nie problem dopisać,

zastanawia mnie zmiana zawartości PDU, czy można tam sie z czymś pobawić. tzn zmiana numeru nadawcy itp (nad czym już kiedyś się głowiliśmy).

No i teraz mozna by przepisać od nowa wirusy na nokie i siemensa :)

(wchodzi też tutaj kwestia wysyłana SMS'ów graficznych - czy da się coś z tym zrobic, bo z tego co wiemy to odpowiednio spreparowany SMS psuje starsze DCT4 tak że trzeba je flashować...)
_________________
Moja historia: Się męcz C25, Se dżem MC930, Nokia 3310,Nokia 3510i, Nokia 3650, Nokia 6600+Nokia 3310
a na pare dni były też 3210,3330, 5210, 3410, 6210, tak czy siak NOKIA RLZ :D
^
 
 
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-13, 16:48   

cieszak, wydaje mi się że trochę namieszałem. Jak teraz oglądam te Layouty w 3GPP TS 03.40 to widzę, że tu jest zupełnie inaczej. Nie wiem ale jakoś to przegapiłem, wydawało mi się że jest tak samo.

Pola są te same, ale niestety w innej kolejności. Będę musiał to opisać w dokumentacji.

Zajrzyj tu: http://www.embedtronics.com/nokia/fbus.html

Jest tam opisane jak wysłać SMSa FBus'em. Zjedź do "The Full SMS Message Frame". Ten nasz PDU zaczyna się od 24 bajtu (Message Type).

mdawidm, jak mówi grzesiek1711, to nie problem dopisać. Źródła są :) .

grzesiek1711, nadawcy nie zmienisz bo nie ma tam pola nadawcy, jest tylko odbiorca. Można za to dowolnie wpływać na wszystkie pola. Np. zmiana klasy wiadomości to nie problem. Odpowiednio formatując dane i ustawiając odpowiednie pola można także wysłać SMS graficzny, a także coś uszkodzić żeby zawiesić telefon (jeśli oczywiście są błędy w odbiorze na drugim telefonie).

[ Dodano: 2006-08-13, 18:46 ]
Ok, dodałem opis layoutów do dokumentacji.
http://nokix.pasjagsm.pl/..._frames_layouts
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
m_arti21 
PasjaTeam


Telefon: Komórkowy
Pomógł: 28 razy
Dołączył: 21 Lip 2004
Posty: 1430
Skąd: Polska
Wysłany: 2006-08-13, 17:55   

http://www.nobbi.com/pduspy.htm :mrgreen:
_________________
Baza telefonów
Słownik pojęć GSM
Zdjęcia serwisowe - administrator
http://hw.pasjagsm.pl/banner.gif
^
 
 
     
n0rbi666 
Wie co mówi



Telefon: S65
Operator: Plus
Pomógł: 7 razy
Wiek: 33
Dołączył: 22 Sie 2004
Posty: 382
Skąd: Krakow
Wysłany: 2006-08-19, 14:05   

Aj, dawno tu nie zaglądałem :]
Czyli teraz już nic nie stoi na przeszkodzie, żeby napisać skrypt, który np n8210 pozwoli na wysyłanie "długich" (kilkuczęściowych) sms ? :mrgreen:
_________________
I am the Left Hand of Darkness
I am the Right Hand of Light
I am the Lurker of the Twilight
I am the Mist of the Dawn
^
 
     
cieszak 
Starszy Użytkownik
100% Cieszaka



Telefon: HTC HD7
Operator: Orange
Pomógł: 17 razy
Wiek: 32
Dołączył: 01 Mar 2005
Posty: 247
Skąd: Olsztyn
Wysłany: 2006-08-19, 14:16   

jeśli do UserData można wstawić własny UserDataHeader a chyba można bo coś próbowałem i telefon normalnie wysyłał smsy to wystarczy tylko poczytać jak robiona jest kompresja i można robić co sie chce
_________________
http://cieszak.eu
CrystalCode Studio - aplikacje, strony www, urządzenia elektroniczne, pomoc techniczna, konsultacje
^
 
 
  Skype
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-19, 15:37   

Dodałem do tego postu wyżej informację o tych layoutach.

Tak, sądzę że mamy do dyspozycji wszystkie pola SMSa i możemy z nimi robić co chcemy, w ramach standardów. Kiedyś może zrobie przesyłanie plików.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
bubek3 
PasjaTeam
PasjaTeam

Telefon: HTC TyTNII
Operator: Plus
Pomógł: 46 razy
Wiek: 28
Dołączył: 29 Cze 2004
Posty: 1979
Skąd: Żnin
Wysłany: 2006-08-19, 16:01   

yak, może glupie pytanie... a jak to jest właściwie z nadawca ?? nie mozna tego zmienić ??
_________________
  1. Przeczytaj tę stronę
^
 
 
     
yak 
Starszyzna



Telefon: Kilka DCT3
Operator: Vodafone
Pomógł: 20 razy
Wiek: 36
Dołączył: 21 Gru 2004
Posty: 774
Skąd: Bochum / Niemcy
Wysłany: 2006-08-19, 20:10   

bubek3, wedlug tego co ja wiem to telefon wysylajac SMSa do centruw wiadomosci nie informuje o nadawcy. Nadawca zostaje przydzielony wiadomosci w samym centrum i z ta informacja (ale tym razem bez odbiorcy) wiadomosc przekazywana jest do odbiorcy. Dlatego zmiana nadawcy nie jest mozliwa.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać załączników na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do: