PasjaGSM.pl
  Jesteś w: Forum > Jak się wpiąć pod wiadomość?


Jak się wpiąć pod wiadomość?

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Jak się wpiąć pod wiadomość?
Poprzedni temat «» Następny temat
Autor Wiadomość
 
bobek_wb 
Starszy Użytkownik



Telefon: DCT-3
Operator: Era
Pomógł: 8 razy
Wiek: 28
Dołączył: 16 Wrz 2005
Posty: 232
Wysłany: 2007-02-19, 00:28   Jak się wpiąć pod wiadomość?

Witam!

Mam następujący problem. A mianowicie jak się podpiąć pod wiadomość?
No więc tak użyłem skryptu dump_msg_processing.nrx, ładnie wszystko przeszło. Znalazłem tam wiadomość pełnej baterii.

Kod:

// ############################################################################### Message 0x729
      case 0x729:
         if( msg_argv[0] == 0x2 )
         {
            send_message(0x822C,0x10,0x40802E); // 0x22C; Bateria roz?a- dowana
         }
         if( msg_argv[0] == 0x1 )
         {
            send_message(0x8226,0x11,0x40789C); // 0x226; Bateria~s?aba
         }
         if( msg_argv[0] == 0x3 )
         {
            send_message(0x8226,0xF,0x407899); // 0x226; Bateria~pe?na
         }
         if( msg_argv[0] == 0x6 )
         {
            send_message(0x8226,0x12,0x407FDD); // 0x226; Startuje
         }
         if( msg_argv[0] == 0x1 )
         {
            if( call_status == 0x4 )
            {
               send_message(0x89E);
            }
         }
         break;


Chodzi mi o wpięcie się pod komunikat pełnej baterii i np. odegranie dźwięku.
Zrobiłem takie cuś:
Kod:

#include <nokix/all.h>

extern const ringtone_t tone_game_won;

case 0x729:
  if( msg_argv[0] == 0x3 )
     {
       own_play_tone(&tone_game_won,PTM_WARNING_TONE);
      }


Czy dobrze to rozumiem? I czy to w ogóle zadziała?
^
 
 
 
     
AdSense


druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 31
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2007-02-19, 03:01   

sprawa wygląda tak, jeśli stworzymy własny dispatcher będą przechodzić przez niego wszystkie wiadomości UI (TASK 5) jak MSG_KEYPRESS itd - ale tylko wtedy gdy nasz handler jest aktywny. aby nasz kod odpalał się zawsze kiedy przez TASK 5 przechodzi dany event należy podpiąć się pod kod danej wiadomości
tworzymy więc naszą handler wiadomości

Kod:
unsigned hook_msg_729(unsigned msg)
{
   if((msg=0x729)&&(msg_argv[0]==3))
     own_play_tone(&tone_game_won,PTM_WARNING_TONE);

   return msg;
}

i podpinamy to pod ui_processor:
Kod:
call ezhook "ui_processor", hook_msg_729

gdybyśmy chcieli dodać własny kod pod więcej wiadomości to najwygodniej to na switchu (jak mamy w dispatcherach).
twoim celem było odegranie dźwięku, jednak czasami możemy chcieć nie tylko sprawdzać co modyfikować wiadomości jak i ich argumenty.
makro EZHOOK nam to umożliwia:
Kod:
call ezhook <place>, <routine>, [registers], [method]

registers to lista rejestrów procesora które chcielibyśmy zmodyfikować, rozdzielana przecinkiem. Więc jeśli chcemy modyfikować wiadomość umieścimy tam R0, msg_argv[0] to podamy R0 itd
Kod:
call ezhook <place>, <routine>, "R0,R1", [method]

umożliwi modyfikowanie zarówno wiadomości jak i pierwszego jej argumentu

no ok wszytko pięknie ale taki kod minimalnie wydłuża nam kod ui_processora (o kilka instrukcji), więc jeśli jest taka możliwość (nie zawsze) możemy podpiąć bezpośrednio pod wybraną wiadomość. NokiX również nam to umożliwia - należy wykorzystać makro FIND_UI_MESSAGE.rx

przykładem wykorzystania byłby np:
Kod:
call ezhook find_ui_message(x2d(c9)), hook_msg_c9


akurat w twoim przypadku nie możemy wykorzystać tej metody (FIND_UI_MESSAGE się wysypie) dlatego skorzystasz z metody pierwszej :)

osobiście lubię pogrzebać WinARMem we flashu i znaleźć odpowiednie miejsce do podpięcia się - trzeba wiedzieć że przy podpinaniu się fragment kodu (nie duzy - 1 lub 2 instrukcje) jest przenoszony tak aby odpalić nasz kod. jednak niektórych instrukcji nie można przenieść i mogło by się zdarzyć że miejsce podpięcia jest np już poza naszą funkcją/wiadomością przez co kod nie byłby poprawnie wykonywany. dlatego zawsze wypadałoby sprawdzić gdzie dokładnie nasz kod został podpięty - jednak jeśli korzystamy tutaj z pierwszej metody nie jest to konieczne

pozdrawiam i życzę powodzenia,
Bartek
^
 
     
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:  

Podobne tematy
Temat Autor Forum Odpowiedzi Wysłany
Brak nowych postów Błąd przy guardzie na wpisz wiadomość. mdawidm NokiX 1 2005-10-13, 20:04
Brak nowych postów Wyślij wiadomość... n0kL0rD PasjaPUB 10 2006-08-04, 05:25