Jump to content


Meet Sony Xperia XZ Premium:


Photo

Tutorial - Detekcja modelu telefonu i FW


  • Please log in to reply
No replies to this topic

#1 OFFLINE   mc_kibel

mc_kibel

    Proud Member of Sony.yt Community

  • User
  • 26 posts
    • Time Online: 1h 1m
  • Country | Страна | Kraj:
  • Operator | Oператор:
    T-Mobile

Posted 28 October 2011 - 23:22

Witam!

Jest to prosty przykład, jak dowiedzieć się z poziomu elfa, na jakim telefonie i FW jest odpalany. Sama GetChipID zwraca tylko platformę, nie zwróci więc modelu telefonu i wersji FW.
Kodu użyłem w swoim najnowszym EasyGDFSBackup, by procedura była naprawdę "Easy" Posted Image, a otrzymałem go [kod] prosto od ploika Posted Image

No więc zacznijmy od utworzenia pliku phone.h:
#ifndef _PHONE_H_
#define _PHONE_H_
typedef struct {
int type;
char *addr;
char *firmware;
}PhoneDB_t;
enum phone_t {
	    UNKNOWN		 = 0,
	    K750_R1CA021,
	    W800_R1BD001,
	    phoneNums
};
extern PhoneDB_t PhoneDB[phoneNums];
#endif //_PHONE_H_


oraz phone.c:
#include "phone.h"
#include "def_func.h"
PhoneDB_t PhoneDB[phoneNums] = {
{UNKNOWN, 0, "0000000"},
{K750_R1CA021, K750_R1CA021_ADDR, "R1CA021"},
{W800_R1BD001, W800_R1BD001_ADDR, "R1BD001"}
};


oraz def_func.h
#ifndef _DEF_FUNC_H_
#define _DEF_FUNC_H_
#define W200_R4HA014_ADDR (char *)0x4482ADBE
#define W300_R4EA031_ADDR (char *)0x448CA6BD
#define W550_R4CB020_ADDR (char *)0x44898CEC
#define W580_R8BE001_ADDR (char *)0x45AF7529
#define W600_R7CA017_ADDR (char *)0x44896D54
#define W610_R6BC002_ADDR (char *)0x45995A7D
#define W660_R8BB001_ADDR (char *)0x45B14E61
#define W700_R1CA021_ADDR (char *)0x4467EDDC
#define W710_R1JC002_ADDR (char *)0x459A6D3D
#define W800_R1BD001_ADDR (char *)0x4467DFB2
#define W810_R4EA031_ADDR (char *)0x4493E81E
#define W850_R1KG001_ADDR (char *)0x45BD5B0D
#define W880_R8BA024_ADDR (char *)0x45BDF5FD
#define K600_R2BB001_ADDR (char *)0x21423A90
#define K750_R1CA021_ADDR (char *)0x44670436
#define K770_R8BA024_ADDR (char *)0x45C072E8
#define K790_R8BF003_ADDR (char *)0x45A05CB9
#define K800_R8BF003_ADDR (char *)0x45B8F9C9
#define K810_R8BA024_ADDR (char *)0x45BA3581
#define K810_R8BF003_ADDR (char *)0x45BA5ED9
#define Z530_R6DA001_ADDR (char *)0x448A7E6E
#define Z550_R6GA004_ADDR (char *)0x4492C6C7
#define Z610_R6DA001_ADDR (char *)0x45A7B0ED

#endif //_DEF_FUNC_H_




Więc aby dodać do elfa:
1. Przechodzimy do naszego projektu. Dajemy w IAR: Project>Add Files.
2. Wybieramy phone.c i dajemy OK.
3. W main.c pod inkludami dodajemy:
#include "phone.h"
int PhoneType = UNKNOWN;

4. Dodajemy funkcję:
int GetPhoneType()
{
char tmp[8];
for(int i=0; i<phoneNums; i++)
{
	    if(PhoneDB[i].addr)
	    {
	    memcpy(tmp,PhoneDB[i].addr,7);
	    tmp[7] = 0;
	    if(strcmp(tmp,PhoneDB[i].firmware) == 0)
	    {
	    return PhoneDB[i].type;
	    }
	    }
}
return UNKNOWN;
}

I żeby użyć tego co mamy:
int main (void)
{
PhoneType = GetPhoneType();
if(PhoneType == K750_R1CA021)
	    MessageBox(0x6fFFFFFF,STR("Wykryto: K750 R1CA021"),0, 1 ,5000,0);

else if (PhoneType == W800_R1BD001)
	    MessageBox(0x6fFFFFFF,STR("Wykryto: W800 R1BD001"),0, 1 ,5000,0);

else
	    MessageBox(0x6fFFFFFF,STR("Wykryto inny model"),0, 1 ,5000,0);

return(0);
}



No więc żeby sobie dodać telefony modyfikujemy plik phone.c i phone.h.
We wszystkim bazujemy się na pliku def_func.h.
Dodajmy więc K800 R8BF003.
W def_func.h szukamy wzmianki o tym telefonie i FW:
#define K800_R8BF003_ADDR (char *)0x45B8F9C9


Więc otwieramy phone.h i do enum phone_t dodajemy model:
enum phone_t {
	    UNKNOWN		 = 0,
	    K750_R1CA021,
	    W800_R1BD001,
	    K800_R8BF003,
	    phoneNums
};

Otwieramy phone.c i również dodajemy model do PhoneDB_t PhoneDB[phoneNums] według tego schematu:
{MODEL_wersja-SOFTWARE, MODEL_wersja-SOFTWARE_ADDR, "wersja-SOFTWARE"}
(żeby wiedzieć OCB porównaj poniższą część z częścią phone.c pokazaną na początku.
PhoneDB_t PhoneDB[phoneNums] = {
{UNKNOWN, 0, "0000000"},
{K750_R1CA021, K750_R1CA021_ADDR, "R1CA021"},
{W800_R1BD001, W800_R1BD001_ADDR, "R1BD001"},
{K800_R8BF003, K800_R8BF003_ADDR, "R8BF003"}
};

I żeby użyć nowego modelu w kodzie:
if (PhoneType == K800_R8BF003)
	    ///zrob to i to....

To chyba tyle Posted Image
Enjoy Posted Image
  • 0
Sony Ericsson X8 || GingerDX v017 Android 2.3.7 || Sense Theme


0 user(s) are reading this topic