PasjaGSM.pl
  Jesteś w: Forum > Pytanie o pewne sprawy w NokiX'ie


Pytanie o pewne sprawy w NokiX'ie

Forum.PasjaGSM.pl » ...:Sprzęt:... » Nokia » DCT-3 » [DCT3] Modyfikacje HW i SW » NokiX » Programowanie » Pytanie o pewne sprawy w NokiX'ie
Poprzedni temat «» Następny temat
Autor Wiadomość
 
jaras 
Nowicjusz



Telefon: Nokia 5110
Operator: Plus
Pomógł: 2 razy
Wiek: 44
Dołączył: 09 Kwi 2005
Posty: 62
Skąd: "LAC: 41008" ;-)
Wysłany: 2006-01-17, 03:42   Pytanie o pewne sprawy w NokiX'ie

Witam.

Mam do Ciebie, @ yak, pewne pytania związane z programowaniem w SDK.

Po pierwsze: chodzi o standardowy typ nokstr_t. Zacytuję tutaj kawałek doca:
yak w docu napisał/a:
nokstr_t
Text string in AscII, Unicode or multilanguage PPM string with special indication allowing to distinguish between the types.

Indication
If the first byte of the string isn't 0x04, the whole string is assumed to be in AscII format. Otherwise if the second byte is 0xFF then all bytes after this 0xFF are treated as Unicode string. If the second byte isn't 0xFF, the second and third bytes form a 16bit PPM string ID.

OK, rozumiem to tak, że jeśli bym chciał użyć jakiegoś standardowego stringa z PPM, to w pierwszym bajcie takiej zmiennej umieszczam wartość 0x04, a w drugim i trzecim od razu numer (ID) tego stringa z PPM.

No i teraz pytanie...

Powiedzmy, że chciałbym w jakimś miejscu użyć napisu "Odczyt" (ale już np. gdy telefon jest przełączony na inny język, to w tym języku, np. "Lesen" w niemieckim, a "Read" w angielskim). Znalazłem sobie ten string w PPM (bo po co mam tworzyć nowy ciąg w pliku *_ppm.txt, skoro taki już jest dawno w PPM?) i teraz chciałbym go użyć. Ma on ID równy 0x007E.

OK, robię sobie zmienną:
Kod:
nokstr_t str_odczyt;

// mogę tak zrobić, bo typ jest zdefiniowany następująco: typedef char nokstr_t[3];
str_odczyt[0]=0x04;
str_odczyt[1]=0x00;
str_odczyt[2]=0x7E;   // czy w dobrej kolejności ustawiam bajty dla ID=0x007E?

Można by zresztą zrobić makra, a nawet dodać je do ui.h albo ppm.h:
Kod:
#define STR_ID_LO(id) ((unsigned int)(id) & 0x00FFU)
#define STR_ID_HI(id) (((unsigned int)(id) & 0xFF00U)>>8)
// o ile w dobrej kolejności zapisuję bajty dla tego ID

No dobra, mam sobie ten tekst i mogę się teraz wszędzie nim posługiwać, np. podczas wyświetlania go na ekranie, w menu czy gdziekolwiek indziej.

Ale...

Czy jest gwarancja na to, że TEN SAM tekst o TYM SAMYM ID bedzie we wszystkich telefonach DCT-3, które umie obsłużyć NokiX? Czy nie zdarzy się, że w jakimś telefonie pod tym ID'em będzie zupełnie inny tekst?

No i jeszcze takie "pod-pytanie", które chyba też jest z tym związane: a co z PPM-owym subchunkiem COMM, który zawiera teksty wspólne (common) dla całego telefonu? Czy można z niego wykorzystywać teksty bez obawy, że w innym modelu są inne?

No bo wiadomo, że w takiej aplikacji, niezależnie od telefonu wykorzystany jednak powinien być wciąż ten sam tekst (w tym przykładzie "Odczyt"/"Read"/"Lesen"). A jeśli nie ma takiej gwarancji, że on będzie wszędzie pod tym samym ID, to w takim układzie, mimo iż w każdym firmware (PPM) taki tekst jest, to mimo wszystko, będę musiał go dopisywać do pliku *_ppm.txt?

A więc tak:
Kod:
@text var=text/moj_skrypt/napis_odczyt
ENGL:Odczyt
POLI:Read
GERM:Lesen
mimo, że przecież w każdym modelu telefonów DCT-3 taki napis już jest?

To jedna sprawa.

Druga sprawa, to actions.

W plikach nagłówkowych (i w dokumentacji) znalazłem takie standardowe zmienne globalne:
Kod:
extern rexx_uint action_select_back
extern rexx_uint action_ok_back
extern rexx_uint action_ok_back_close
extern rexx_uint action_erase_quit
extern rexx_uint action_back_back

No jest ich sporo, ale... to nie wszystkie akcje jakie się mogą wyświetlać nad klawiszem Navi. Na przykład na głównym ekranie telefonu jest coś takiego jak "Menu/Spis" (nie wiem czy dobrze napisałem nazwy, bo nie mam wgranego patcha two_navi_keys.nrx) albo w menu z checkboxami jest "Zaznacz" oraz "Odrzuć". Są jeszcze takie akcje jak "Tak/Nie" i tak dalej.

To wszystko są już gotowe akcje, które gdzieś tam są w firmware, a które możnaby też wykorzystać do własnego dispatchera.

No i teraz znowu pytanie...

Powiedzmy, że w programie chciałbym wykorzystać którąś z tych standardowych akcji (np. choćby to "Tak/Nie") - co mam zrobić?

Na dzień dzisiejszy moja wiedza ogranicza się do tego, że postąpiłbym następująco: zrobiłbym własną akcję w Rexx, na przykład tak:
Kod:
/* żeby działała jak MSG_SELECT / MSG_BACK (więc używam domyślnych argumentów),
   ale, żeby na ekranie pokazane było "Tak" (i "Nie" dla two_navi_keys.nrx)     */

mojaakcja=add_action("Tak", , , , "Nie")

Czyli znowu musiałbym tworzyć coś, co już dawno jest w firmware.

Jak to zrobić, żeby wykorzystywać te standardowe akcje, które są już w sofcie bez dodawania ich przez add_action() ?

To była druga sprawa.

No, to teraz wróćmy jeszcze na koniec do sprawy tekstów z PPM przy actions (moim zdaniem zresztą, te sprawy są dość bliskie sobie) i zróbmy tak...

Chcemy zrobić sobie nową akcję wykorzystującą jakiś standardowy tekst z PPM, oczywiście tak, żeby ten tekst był inny, gdy przełączy się język w telefonie. Wiemy, że ten tekst już tam dawno istnieje w PPM. Dobrym przykładem może być akcja, która nad Navi pokaże napis "Menu" (a w innym języku odpowienio inny) a spowoduje cokolwiek (czy to wysłanie MSG_SELECT, czy też jakiegoś własnego komunikatu).

Oczywiście, znowu najprościej dodać do *_ppm.txt zapis:
Kod:
@text var=text/moj_skrypt/napis_menu
ENGL:Menu
POLI:Menu
GERM:Menü
ROMA:Meniu
CROA:Meni
(powiedzmy, że tak, bo to tylko przykład pokazujący, że w innych językach napis "Menu" jest inny)

Ale czy nie da się w tej akcji wykorzystać ISTNIEJĄCEGO już w PPM tekstu "Menu" (lub jego odpowiedników w innych językach) mającego ID=0x0242?

Jak widzisz, problem jest bardzo podobny do pierwszego pytania, tyle, że teraz dotyczy on akcji.

Zresztą, jak widzę w skryptach *.nrx, że jest tak właśnie zrobione. Na przykład call_duration.nrx korzysta z call_duration_ppm.txt, którego fragment jest taki:
Kod:
@text var=text/off
ENGL:Off
POLI:Nie

@text var=text/on
ENGL:On
POLI:Tak
a przecież wszystkie z tych tekstów są już dawno w PPM i tylko możnaby (albo nie możnaby) je wykorzystać.

No właśnie - sens tych moich wszystkich pytań jest taki: CZY MOŻNA czy też NIE MOŻNA wykorzystywać różne gotowe zasoby softu(-ów) DCT-3, dodając TYLKO te zasoby, których tam NIE MA? Czy za każdym razem trzeba tworzyć własne (teksty przez plik *_ppm.txt i/lub akcje przez makro add_action()), mimo, że dany zasób już pewnie jest?

No i na koniec powiem, co skłoniło mnie do zadania tych pytań. To takie podsumowanie tego wszystkiego.

Całe firmware telefonu DCT-3 kojarzy mi się z takim jakby EXE-kiem w Windows. W takim EXE-ku mamy dwie ważne częsci: część wykonawczą (executive - kod, dane i inne rzeczy) i część z zasobami (resources - ikony, dialogi, menu, napisy w wersjach językowych itp.). W firmware jest podobnie: jest część wykonawcza (MCU - kod, dane i inne rzeczy) i zasoby (PPM - melodyjki, słowniki, tablice konwersji, teksty w różnych wersjach językowych itp.). Dlatego łatwiej jest mi zrozumieć i działanie samego firmware, a także programów (i całych patchy) dodawanych do niego. To tak, jakbym patchował właśnie takiego EXE-ka, żeby coś w nim tam zmienić, nie mając kodu źródłowego. Co prawda, nigdy się nie bawiłem w cracking, ale z DCT-3, jak zauważyłem, sprawa tak chyba właśnie wygląda. OK, w porządku - to już jest od dawna wiadome i nie odkryłem tu żadnej Ameryki. ;-)

Tak sobie oglądam te wszystkie skrypty i źródła, i to rozumiem. Uczę się z nich jak wyglądają komendy Rexx, jak programować swoje własne patche itp.

Ale jedno mnie wciąż zastanawia: po takich wielu przeróbkach w telefonie, kiedy np. do NokiX'a wstawi się dużo różnych skryptów, to chyba PPM wygląda jak przeładowana i pękająca w szwach szafa i na dodatek wypełniona stringami, które już tam dawno są (bo przecież nie jedyny call_duration.nrx dodaje sobie napisy "Tak", "Nie", On" i "Off"), a, z kolei, firmware'owa tablica actions także zawiera powtarzające się akcje, które już dawno są w oryginalnym firmware (bo przecież nawet wiele skryptów dodaje sobie np. akcję z napisem "Opcje" ("Options") nad klawiszem Navi, choć już przecież taka akcja jest).

A może ja znowu czegoś tam nie doczytałem i coś tu źle namodziłem? ;-)

Pozdrawiam Cię serdecznie.

PS. Te wszystkie ID'y napisów wymienionych w pytaniach pochodzą z mojego softu NSE-1.
_________________
Jarosław Krasuski (jaras)
^
 
 
 
AdSense


sander18 
Starszyzna
Nie Wie Co Pisze ;)



Telefon: nokie
Operator: Orange
Pomógł: 29 razy
Wiek: 34
Dołączył: 02 Mar 2005
Posty: 512
Skąd: z kątowni ;)
Wysłany: 2006-01-17, 15:29   

ja moge tylko odpowiedziec na pytanie zwiazane z wykorzystaniem tekstow. nie ma zadnej gwarancji, ze pod danym ID w roznych softach beda te zame napisy... nawet w softach dla tego samego modelu :/ ale chyba da sie jakos wykorzystac istniejace teksty... bo np. w grach nie sa dodawane wszystkie potrzebne teksty... np. Nowa gra i Dalej sa pobierane z softu... nie mam teraz przy sobie nokixa bo siedze na wydziale, a w domu aktualnie nie mam netu, wiec moglem cos pokrecic, ale raczej jest tak jak mowie...
_________________
W dżungli amazońskiej odkryto nowy gatunek kameleona. Ma 65 tys. kolorów i polifoniczne dzwonki :D
^
 
 
     
yak 
Starszyzna



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

Uff, aleś się rozpisał :D.

Więc. Firmware nokii wykorzystuje w wielu miejscach tablice, bo takie konstrukcje zajmują mniej miejsca. Poźniej używany jest jeden indeks, najczęściej bajt, zamiast wskaźników co znacznie przyśpiesza kod i go zmniejsza (bajt można załadować do rejestru jedna 16 bitową instrukcją procesora). Niestety, nie ma żadnej gwarancji, że indeksy będą takie same w innym modelu a nawet w innej wersji tego samego modelu.

To samo dotyczy stringów z PPM'a. Dlatego właśnie czasem dodawane są do PPM mimo, że już tam istnieją (a czasem istnieją tylko w niektórych modelach).

IDy stringów oraz różne indeksy tablic (np. akcji) lokalizuje się znajując jakiś fragment kodu używający tego stringa/akcji (taki, który wygląda podobnie we wszystkich modelach) i wartość pobiera się stamtąd. Nie zawsze da się łatwo coś takiego namierzyć.

W przypadku akcji można użyć makra find_action(). Wykorzystuje on fakt, że w tablicy akcji pewne akcje występują zawsze obok siebie w każdym modelu (zmieniają się tylko niektóre akcje pomiędzy takimi grupami). Tu jednak też należy być ostrożnym i nie zawsze da się to wykorzystać.

W przypadku stringów w podany wyżej sposób znajdziemy wskaźnik na nokstr_t czyli na wartość 4 i ID. Nie ma sensu wyciągać IDa i tworzyć własny string (znów 4 i ID), lepiej po prostu wziąść ten wskaźnik (nokstr_t *).

Takie same wskaźniki zwraca makro add_ppm_strings() więc można je wykorzystać przy dodawaniu akcji (add_action), w menu (ezmenu) czy gdziekolwiek indziej.

Tak więc głównie dla uproszczenia czasem dodaje się string/akcję nawet jeśli taki/taka już istnieje. Makra dodające posiadają jednak mechanizmy uniemożliwiające dodanie dwóch takich samych elementów.

W przypadku stringów istnieje lista wbudowanych napisów, które dodawane są automatycznie przy pierwszym odwołaniu do nich. Lista znajduje się tutaj.

add_action() automatycznie wykrywa próbę dodania takiej samej akcji po raz drugi i zwraca ID pierwszej. Tak samo jest z innymi makrami, np. insert_graphics().

Pytasz także dlaczego skrypty dodają akcję Options skoro już taka jest. Najczęściej robią to, aby po naciśnięciu klawiszy akcja wysyłała inne wiadomości. Te w oryginalnej akcji są zazwyczaj powiązane z konkretnym miejscem, w którym są używane.

Podsumowując istniejące elementy można wykorzystywać ale jest to obwarowane pewnymi ograniczeniami i jest po prostu trudniejsze. Dodawanie nowych elementów jest za to zoptymalizowane aby zajmowały minimalną ilość miejsca i nie powtarzały się. Dla początkujących programistów prostota obsługi jest ważna i zmuszanie ich do szukania odwołań do stringów w disasemblerze byłoby zniechęcające. Doświadczeni mogą to zrobić (w przypadkach, w których jest to możliwe) i zrezygnować z mechanizmów dodających.

Pozdrawiam
[Yak]
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
jaras 
Nowicjusz



Telefon: Nokia 5110
Operator: Plus
Pomógł: 2 razy
Wiek: 44
Dołączył: 09 Kwi 2005
Posty: 62
Skąd: "LAC: 41008" ;-)
Wysłany: 2006-01-17, 19:41   

Witaj.

Ooo, właśnie... dziękuję bardzo za te obszerne wyjaśnienia.

Tak się rozpisałem, abyś Ty dobrze zrozumiał o co mi chodzi w pytaniach - gdybym źle je zadał, nie doczekałbym się od Ciebie wyczerpującej odpowiedzi. ;-)

OK, no to teraz już wiem wszystko. Nic tu dodać, nic ująć. :-)

Jeszcze raz dziękuję i pozdrawiam Cię serdecznie.

PS. Polecam poczytać to - dużo bardzo ciekawych rzeczy o zadawaniu pytań. ;-)
_________________
Jarosław Krasuski (jaras)
^
 
 
 
yak 
Starszyzna



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

jaras, podoba mi się ten dokument do którego dałeś linka. Wiele razy na tym forum zdarzało się, że pochopnie ktoś stwierdzał, że znalazł błąd podczas gdy po prostu coś źle robił.

Cytat:
Osoby, które napisały oprogramowanie, włożyły dużo ciężkiej pracy, by działało ono jak najlepiej. Twierdząc, że znalazłeś błąd, sugerujesz, że ktoś coś gdzieś zrobił źle i najczęściej w ten sposób obrażasz tego kogoś - nawet jeżeli masz rację. Bardzo niedyplomatycznie jest zakrzyknąć "błąd" w polu tematu.


To taka mała dygresja :D.
_________________
NokiX Ci się podoba? Kliknij i wyraź to!
^
 
 
 
     
druidbartek 
Expert



Telefon: DCT-3
Operator: Era
Pomógł: 39 razy
Wiek: 32
Dołączył: 13 Wrz 2005
Posty: 1006
Skąd: Wrocław
Wysłany: 2006-02-10, 21:59   

nie chciałem specjalnie zakąłdać nowego tematu bo to jednak mały(?) problemik a nazwa tego tematu sugeruje że można zamieścić w nim różne pytania dotyczące spraw w NokiXie ; )
jeśli chcę użyć dialogu aby można w nim było wpisać np date czy godzine to oryginalnie we firmwarze Nokii jest używane coś w rodzaju maski wprowadzania, tzn znaczków się skasować nie da a wprowadzana treść musi mieć postać hh:mm czy dd.mm.yyyy
jednak jak to jest np w skrypcie autoshutdown gdzie jest używany właśnie dialog do wprowadzenia godziny jest on jednak taki zwykły, tzn bez tej maski. żeby cos wpisać należy skasować literki już wpisane i pisać na nowo, w odróżnieniu np od godziny wpisywanej przy ustawianiu alarmu. No imoje pytanko jest takie czy jest coś w rodzaju jakiejś flagi którą można by ustawić dla tworzonego dialogu aby wprowadzanie godziny/daty było tak jak oryginalnie w sofcie. mam nadzieje ze dobrze wyjaśniłem o co mi chodzi.

pozdrawiam,
druidbartek
^
 
     
yak 
Starszyzna



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

tak, jest cos takiego. prawdopodobnie jest to wlaczane jadna z flag plus odpowiednio zainicjowanym buforem. bede to musial dokladniej obadac tym bardziej, ze wlasnie dodaje opis dialogow do dokumentacji (narazie lokalnie :)).
_________________
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:  

Podobne tematy
Temat Autor Forum Odpowiedzi Wysłany
Brak nowych postów Pytanie o ultrabook Acer Aspire S7-39... Misiork Hardware 0 2014-06-05, 16:15
Brak nowych postów Pytanie o program Kaspersky Lab Misiork Sieci Komórkowe 3 2014-08-20, 12:10
Brak nowych postów Pytanie o TomTom Bandit Proximo Hardware 0 2015-05-11, 13:30
Brak nowych postów Pytanie o tablet Lenovo Proximo Inne 1 2015-05-14, 15:54
Brak nowych postów Pytanie o słuchawki Misiork Co wybrać? 4 2015-08-12, 14:50