Create site free
Всё для Motorola|Мобильный форум
Пятница, 10.02.2012, 02:06
Приветствую Вас Гость | RSS |Скачать ГОСТ СНиП ЕНиР - Бесплатно

Внимание! Форум является поддоменом основного сайта. Поэтому Вам необходимо заново зарегистрироваться/авторизоваться для принятия участия в жизни форума!

Сайт | Главная Форума | forum.motomaxclub | Регистрация | Вход
 

Всё для Motorola

[ Новые сообщения · Участники · Правила · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: MotoWalkman 
forum.motomaxclub » MOTOROLA » ELFPack » Паттерны и описания функций (новые функции, которых нет в SDK)
Паттерны и описания функций
MotoWalkmanДата: Четверг, 19.06.2008, 03:22 | Сообщение # 1
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
Делимся со всеми найденными функциями.

Сразу хочу определить формат:
1) Название
2) Паттерна
3) Описание функции

Например:

1) Регулировка яркости дисплея
2) HAPI_LP393X_disp_backlight_intensity T 495DB508784A2302439A704A2800D001431A704A221302124310AB0080187848
3) void HAPI_LP393X_disp_backlight_intensity(int light);
ligth: от 0 до 100 (в десятичной системе)

Небольшой мануал по добавлению функций

1. Качаем PortKit:
Elfpack v1.0
Смотрим мануал как им пользоваться:
Портация [http://forum.motomaxclub.com/forum/31-279-1]Elfpack v1.0[/url]

http://forum.motomaxclub.com/forum/31-279-1

2. в папке PortKit/libgen/ находятся файлы: functions.pat, LTE.pat, LTE2.pat, LTE2_IROM.sym. Это списки паттерн функций.
В какой-то из файлов добавляем паттерну, в зависимости из условия:
functions.pat - функция подходит для всех моделей
LTE.pat - только для LTE
LTE2.pat - только для LTE2

3. Собираем дальше всё по мануалу (см. пн 1)

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:23 | Сообщение # 2
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Вкл/Выкл подсветки клавиатуры
2) HAPI_PCAP_transceive T B5F01C04684068A6B08DA90891092100AB087319210473592101403046847399
3) В SDK:

Quote
typedef struct {
unsigned int *addr;
unsigned int data;
unsigned int mask;
UINT8 rw;
UINT8 reg;
} HAPI_CAP_ACCESS;

void HAPI_PCAP_transceive(HAPI_CAP_ACCESS*);

В самом исходнике эльфа:

Quote
#define create_mask(mask, sbit, len)\
(mask = 0xFFFFFFFFL,\
mask >>= sbit,\
mask <<= (sizeof(mask) * 8) - len,\
mask >>= (sizeof(mask) * 8) - (sbit + len))

#define set_data(dest, sbit, data) (dest = ((unsigned int)data) << sbit)
#define get_data(data, sbit) (data >>= sbit)

void hPCAPwrite(UINT8 port, UINT8 pin, UINT8 len, UINT8 write_data)
{
HAPI_CAP_ACCESS hapi_cap_params;
UINT8 num_bits = len;
UINT8 bit_specifier = pin;

create_mask(hapi_cap_params.mask, bit_specifier, num_bits);
set_data(hapi_cap_params.data, bit_specifier, write_data);
hapi_cap_params.rw = 1;
hapi_cap_params.reg = port;
hapi_cap_params.addr = 0;
HAPI_PCAP_transceive(&hapi_cap_params);
}

unsigned int hPCAPread(UINT8 port, UINT8 pin, UINT8 len)
{
unsigned int data_buffer;
HAPI_CAP_ACCESS hapi_cap_params;
UINT8 num_bits = len;
UINT8 bit_specifier = pin;

create_mask(hapi_cap_params.mask, bit_specifier, num_bits);
set_data(hapi_cap_params.data, bit_specifier, 0);
hapi_cap_params.rw = 0;
hapi_cap_params.reg = port;
hapi_cap_params.addr = &hapi_cap_params.data;
HAPI_PCAP_transceive(&hapi_cap_params);
data_buffer = get_data(hapi_cap_params.data, bit_specifier);
return(data_buffer);
}

Чтобы включить подсветку клавы:
hPCAPwrite(0x15,0,3, 1); // включить клаву
чтобы выключить:
hPCAPwrite(0x15,0,3, 0); // выключить клаву

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:23 | Сообщение # 3
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Определение состояния клавиатуры (чтение из базы)
2) DL_DbFeatureGetCurrentState T B58CAB0080184A??9101466948??3A0D
3)
Quote
#define ID_KEYPAD_LOCK_79 0x86A // 79r
#define ID_KEYPAD_LOCK_49 0x7F3 // 49r

BOOL DL_DbFeatureGetCurrentState( UINT16 fstate_ID, UINT8 *result );
// fstate_ID офсет в базе (ID_KEYPAD_LOCK)
// result=1 заблокирована; result=0 разблокирована

1) Запись в базу
2) DL_DbFeatureStoreState T B583B0??AB008018A80330??4A??900148
3) UINT32 DL_DbFeatureStoreState(UINT16 fstate_ID, UINT8 state);
// fstate_ID офсет в базе
// state записываемое значение

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:28 | Сообщение # 4
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Сенсор освещения.
2) HAPI_ATOD_convert_ambient_light_sensor T b51024002101203e????????2100205a????????21012086
(у меня есть дураная привычка - не проверять патерну на других прошивках :Р)
3) UINT8 HAPI_ATOD_convert_ambient_light_sensor( void );


1) Создает Internal (внутренний) ивент. Не ловится APP_HandleEvent*. Реакцией на ивент будет старт приложения.
Quote
status = APP_Register( &evcode_base, // На какое событие должно запускаться приложение
// AFW_CreateInternalQueuedEvAux и есть генератор этих событий
1, // Кол-во событий, на которое должно запускаться приложение

Про коды событий можно посмотреть в теме ProcedureScaner или на сайте электро http://elektro255.ovh.org/Jsynerj.php

2) Паттерна должна быть в либе с начала эльфпака 1.0.
3) UINT32 AFW_CreateInternalQueuedEvAux( UINT32 ev_id, FREE_BUF_FLAG_T free_buf, UINT32 att_size, void* att_data );

К примеру открываем идой fbrowser (не стесняемя ) wink , ищем *_event_reg_table - это и есть коды событий на которые он стартует. Теперь при выполнении кода
AFW_CreateInternalQueuedEvAux( 0x3DC, FBF_FREE, NULL, NULL );
Будет стартовать fbrowser.

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:29 | Сообщение # 5
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
Некторорые полнзные функции
Выключить тел
pu_main_powerdown T B5B01C04F???F???1C20F???F???200?F???F???4D??782806000F00280?D103210?201?F???F???F???F???F???F?

Выключить с анимацией? (не проверено)
pu_powerkey_hold_test T B580F???F???280?D10820F?30??F???F???280?D105200?F???F???BC80BC084718200?F???F???E?

Обновить иконку стиля в сс. ( стиль в 4а А)
AlertStatusStart T B50E466948??F???F???280?D001200?E???200?280?D11CAB007818280?D210A3015C1B005B449F0C08020

Сохранить значение в сим 4а
DL_DbFeatureStoreState T B583B0??AB008018A80330??4A??900148??46693A08F???F???B0??BC80BC0806000E004718

Запустить фанлайт
DL_AudStartFunlight T B5F81C0E1C05240?2A0?D003F???F???280?D109AB00701D4A??705C709E466948??3214F???F???BCF8BC084718

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:29 | Сообщение # 6
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Выключение телефона
2) Для LTE:
pu_main_powerdown T 34012C0BD3F920C3????????21002027????????????????BC10BC084718B5B01C04+0x1E
Для LTE2:
pu_main_powerdown T B5B01C04????????1C20????????2000
3) pu_main_powerdown(UINT32 r0);
// r0 от 0 до 5
//0 = normal_powerdown
//1 = reboot
//3 = Boot
 
MotoWalkmanДата: Четверг, 19.06.2008, 03:29 | Сообщение # 7
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Чтение из сима
2) SEEM_ELEMENT_DATA_read T B5F7B0??1C04250088202306435849??18407940

1) Запись в сим
2) SEEM_ELEMENT_DATA_write T B5F3B0931C042500AE0C

3)

Code
typedef UINT16 SEEM_ELEMENT_TYPE; // номер сима

typedef struct {
   SEEM_ELEMENT_TYPE   seem_element_id; // seem
   UINT16   seem_record_number; // record
   UINT32  seem_offset; // offset
   UINT32  seem_size;
} SEEM_ELEMENT_DATA_CONTROL;  

// чтение из сима
UINT16   SEEM_ELEMENT_DATA_read     (     SEEM_ELEMENT_DATA_CONTROL  *data_ctrl_ptr,
                    UINT8  *data_buf,
                    BOOL read_zero_byte_allowed  
                             );

// *data_ctrl_ptr - указатель на структуру данных, содержащую информацию о запросе
// *data_buf - указатель на буфер, куда прочитаются данные
// read_zero_byte_allowed - если true, то можно читать маленькие симы, длина которых меньше 255                    
//  запись в сим                    
UINT16  SEEM_ELEMENT_DATA_write    (      SEEM_ELEMENT_DATA_CONTROL  *data_ctrl_ptr,
                             UINT8  *seem_data_ptr
                         );         
// *seem_data_ptr - указатель на буфер, где хранятся записываемые данные    
 
MotoWalkmanДата: Четверг, 19.06.2008, 03:32 | Сообщение # 8
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
Из-за отсутствия времени нарушу собственное правило добавления новых функций в эту тему

1) Функции MME (для воспроизведения аудиофайлов)

Code
// ПЛЕЕР //
typedef   void*    MME_GC_MEDIA_FILE;

// Открывает файл uri для воспроизведения, и возвращает указатель на открытый файл, unk1 = 0
MME_GC_MEDIA_FILE  MME_GC_playback_create(SU_PORT_T * port, WCHAR * uri, UINT32 unk1, UINT32 unk2, UINT32 unk3, UINT32 unk4, UINT32 unk5, UINT32 unk6);

// Закрывает файл
UINT32 MME_GC_playback_delete(MME_GC_MEDIA_FILE  media_file);  

// Начать воспроизведение файла
UINT32 MME_GC_playback_start(MME_GC_MEDIA_FILE  media_file, UINT32 unk1, UINT32 unk2);  

// Остановить воспроизведение файла
UINT32 MME_GC_playback_stop(MME_GC_MEDIA_FILE  media_file);  

// Пауза
UINT32 MME_GC_playback_pause(MME_GC_MEDIA_FILE  media_file);  

// Установить на ms мс. от начала файла
UINT32 MME_GC_playback_seek(MME_GC_MEDIA_FILE  media_file, UINT32 ms);  

// Получение аттрибутов
typedef enum
{
DURATION=1,    
DURATION_MS, // общее время аудиофайла в мс
POSITION=73,    
POSITION_MS  // текущая позиция, почему-то в сек.
}ATTRIBUTE_NAME;

UINT32 MME_GC_playback_get_attribute ( MME_GC_MEDIA_FILE        handle,
                    ATTRIBUTE_NAME   attribute_name,
                    void              *attribute_value   // UINT32
                    );

Паттерны:
MME_GC_playback_start T B5F7B08A27001C04AA07214CF7FF
MME_GC_playback_create T B5FFB08D9E191C0F24002000900B250
MME_GC_playback_delete T B5F0B0852400900421009103
MME_GC_playback_seek T B5FE1C051C0F24001C28
MME_GC_playback_get_attribute T B5F01C0F1C061C14B0??25001C30F7FF
Для LTE:
MME_GC_playback_stop T 9400220131026800F7??????1C20E5??B5BC+0x10
MME_GC_playback_pause T D102??01E000??011C??BCBCBC084718B5BC+0x10
Для V3i:
MME_GC_playback_stop T B5BC1C0425001C21A08D????????214C1C20466A
MME_GC_playback_pause T B5BC1C0524001C29A073????????214C1C28466A

2) Изменение громкости

Code
// ГРОМКОСТЬ//
#define AUDIO_VOLUME_TYPE_MULTIMEDIA   4
#define PLAYER_VOLUME_TYPE_MULTIMEDIA   2 // 49R

// Установить громкость  
void DL_AudSetVolumeSetting(UINT8 volume_type, UINT8 volume);

// Прочитать громкость
void DL_AudGetVolumeSetting(UINT8 volume_type, UINT8 *volume);
// volume_type - тип громкости (громкость клавиатуры, громкость в мультимедиа...)

Паттерны:
Для LTE:
DL_AudSetVolumeSetting T B508AB00701848??70592202380C4669
DL_AudGetVolumeSetting T B51CAB00701848291C0C91012208380B4669F7
Для V3i:
DL_AudSetVolumeSetting T B508AB0070184852466A210D????????2800D102
DL_AudGetVolumeSetting T B5F01C051C0CB085A801210022002300C00EC008AB00

3) Для определения входящих звонков

Code
// ВХОДЯЩИЙ ЗВОНОК//
#define MAX_CALLS                   7

typedef UINT8 CALL_OVERALL;
typedef UINT8 CALL_STATE;
typedef UINT16  CALL_ID;

typedef struct
{        
     CALL_ID                call_id;   
    CALL_STATE             call_state;
} CALL_ID_;

typedef struct
{
     UINT8  number_of_calls;
     CALL_OVERALL overall_call_state;
     CALL_ID_ call_state_info[MAX_CALLS];
} CALL_STATES;

// если number_of_calls == 0, то вызовов нет
void DL_SigCallGetCallStates(CALL_STATES *call_states);

BOOL APP_MMC_Util_IsVoiceCall(void); // если FALSE, то вызовов нет

Паттерны:
APP_MMC_Util_IsVoiceCall T B5B0B0FFB09FA8962500????????AB907E582800D0172400E01100A0A9961840
Для LTE:
DL_SigCallGetCallStates T B5084A889000488846693A0AF0
Для V3i:
DL_SigCallGetCallStates T B5084A889000488846693A0A????????B001BC084718

4) Изменение, чтение элементов рабочего стола

Code
// ВЫВОД СТРОКИ В ПОЛЕ ДАТЫ//
#define ICONS_STATUS     0x0  // для изменения иконок
#define AUDIO_STATUS     0x69 // появляются иконки плеера, чтобы их убрать нужно послать инвент
#define GPRS_STATUS        0x1D // только строка даты
#define NETWORK_STATUS     0x27 // строка оператора

typedef UINT8 STATUS_ID;

typedef union
{
     INT32                    integer; // номер иконки
     BOOL                    boolean;
     WCHAR                            *currency;
     WCHAR                            *quoted_name;
     WCHAR                            *quoted_phone_number;
     WCHAR                            *quoted_string; // строка для поля даты
     UINT32                           phone_type;
} STATUS;

// изменить элемент
//Чтобы вернуть обратно дату, нужно послать NULL
UINT32 UIS_SetStatus(STATUS_ID status_id, STATUS value);
     
// прочитать значение элемента
UINT32 UIS_GetCurrentStatusValue(STATUS_ID status_id,  STATUS *value);

Паттерны:
UIS_SetStatus A E350007D13500007E3A0300001A00003012FFF1EE92D4008E1A03002
UIS_GetCurrentStatusValue A E350007D1350000703A0000005810000

5) Получение системного времени

Code
// ВРЕМЯ //
typedef struct
{
     UINT8  hour;
     UINT8  minute;
     UINT8  seconds;
} TIME;

UINT32 DL_ClkGetTime( TIME *time );

Паттерна:
DL_ClkGetTime T B5084ADB900048DB466932

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:32 | Сообщение # 9
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
Получение системного времени

Code
/* Получить системное время в тиках */
UINT64 suPalReadTime( void );  
/* Перевести время из тиков в миллисекунды  */
UINT64 suPalTicksToMsec( UINT64 ticks );

Обе функции уже есть в libgen

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:33 | Сообщение # 10
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
Раз уж на то пошло...
добавил в SDK файл time.h (назване не подходит... ну ладно)

Code
#ifndef TIME_H
#define TIME_H

typedef struct
{
     UINT8     day;
     UINT8     month;
     UINT16    year;
} CLK_DATE_T;

typedef struct
{
     UINT8     h;
     UINT8     m;
     UINT8     s;
} CLK_TIME_T;

BOOL DL_ClkGetDate( CLK_DATE_T* );
BOOL DL_ClkGetTime( CLK_TIME_T* );

#endif
 
MotoWalkmanДата: Четверг, 19.06.2008, 03:34 | Сообщение # 11
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1。self-motion press

2。DL_KeyInjectKeyPress T B58CAB00711A71587199220092002300

3。

Code
void DL_KeyInjectKeyPress(UINT8 KEY,UINT8 states,UINT8 p3);
// p1=key;
// p2=0 Press;p2=1 Release;
// P3=0

void Autopress(UINT8 key)   
{
DL_KeyInjectKeyPress(key,0,0);
DL_KeyInjectKeyPress(key,1,0);
}

1.SetWallpaper

2.UIS_SetWallpaper A E92D4008E1A01000E5??????E3A02001????????E3500008908FF100

3.

Code
typedef struct
{
     WCHAR            *url;            
     UINT32           unk;     
} UIS_SETWALLPAPER_SETTINGS_T;   

UINT32 UIS_SetWallpaper(UIS_SETWALLPAPER_SETTINGS_T * );  // thanks G-XaD

1.DL_FsGetIDFromURI(URL,ID); //get pic ID from url

2.DL_DbFeatureStoreBlock(0xAAD,ID,8); // store pic id to DB

3.

Code
wset->url=URL;
       wset->unk=0;
        
        UIS_SetWallpaper(wset);  //setwallpaper
 
MotoWalkmanДата: Четверг, 19.06.2008, 03:34 | Сообщение # 12
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) UINT32 UIS_GetActiveDialogType(UINT8* res);

2) UIS_GetActiveDialogType A e92d4010e1a04000????????e350000003a0000105c400000a000006e5901000e28fe008e5912060e0821001

3) Возвращает "тип" верхнего диалога. В приложениях прошивки часто используется для определения нахождения на рабочем столе. Если в res значение 0xE, значит на рабочем столе. Для обычного списка в res значение 0x10. Поэксперементируйте если вам это нужно.

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:35 | Сообщение # 13
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) инвент входящего звонка
2) CALL_ALERT D 0008????5265636569766500
3)
Код

Code
extern const UINT32 *CALL_ALERT;  
UINT32 event = *CALL_ALERT;

1) инвент срабатывания будильника
2) ALMCLK_REMINDER_START D 0D??416C6D52656D00
3)
Код

Code
extern const UINT16 *ALMCLK_REMINDER_START;
UINT32 event = *ALMCLK_REMINDER_START;

1) инвент срабатывания события календаря
2) DATEBOOK_REMINDER D FFFFFFFF00000000000007??10??????00000D??10??????00000D??+0x8
3)
Код

Code
extern const UINT32 *DATEBOOK_REMINDER;
UINT32 event = *DATEBOOK_REMINDER;

1) оффсет в базе, по которому лежит IMEI
2) SEEM_IMEI D 0000????566F6461666F6E652F
3)
Код

Code
extern const UINT32 *SEEM_IMEI;
WCHAR IMEI[15];
DL_DbFeatureGetValueString(*SEEM_IMEI, IMEI );

1) оффсет в базе, по которому можно узнать о состоянии клавиатуры (блок/разблок)
2) KEYPAD_STATE D 48616E646C65417564696F506C617965723A2045786974203D20-0x10
3)
Код

Code
extern const UINT32 *KEYPAD_STATE;
BOOL bLock;
DL_DbFeatureGetCurrentState( *KEYPAD_STATE, &bLock  );

1) инвент отправки по Bluetooth
2) EVENT_BT D 67204F4245582066656174757265202564000000-0x30
3)
Код

Code
extern const UINT32 *EVENT_BT;
UINT32 event = *EVENT_BT;
 
MotoWalkmanДата: Четверг, 19.06.2008, 03:36 | Сообщение # 14
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1。GetCurrentLanguageID
2。DRM_GetCurrentLanguage T 1 4A??230056D21C0120012A00D10047702900D0FC48??68007800
3。UINT8 DRM_GetCurrentLanguage(UINT8 * LGID);

LGID:
04 Chinese Complex
05 Chinese Simple
03 British English
01 English

=========================================================
1.GetSecurityCode
2。DL_DbSigNamGetSecurityCode T B51024021C014875????????2800D1002400
3。UINT32 DL_DbSigNamGetSecurityCode(WCHAR *);

===========================================================
1。GetUnlockCode
2。DL_DbSigNamGetUnlockCode T 1C014869B51024023801????????2800
3。UINT32 DL_DbSigNamGetUnlockCode(WCHAR *);

 
MotoWalkmanДата: Четверг, 19.06.2008, 03:36 | Сообщение # 15
Генералиссимус
Группа: Модераторы
Сообщений: 2066
Репутация: 13
Статус: Offline
1) Чтение строки из базы
2) DL_DbFeatureGetValueString T B58CAB0080184A??9101466948??3A0A????????BC8CBC0806000E004718
3) UINT8 DL_DbFeatureGetValueString(UINT32 feature_id, WCHAR *feature_string );
 
forum.motomaxclub » MOTOROLA » ELFPack » Паттерны и описания функций (новые функции, которых нет в SDK)
Страница 1 из 212»
Поиск:
   Статистика Форума
Новые темы: Популярные темы: Новые пользователи:
Создать сайт бесплатно

Copyright  © 2007-2012 forum.motomaxclub.com
Мобильный форум - Всё для телефонов Motorola