Внимание!
Форум является поддоменом основного сайта. Поэтому Вам необходимо заново зарегистрироваться/авторизоваться для принятия участия в жизни форума!
Сразу хочу определить формат: 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]
2. в папке PortKit/libgen/ находятся файлы: functions.pat, LTE.pat, LTE2.pat, LTE2_IROM.sym. Это списки паттерн функций. В какой-то из файлов добавляем паттерну, в зависимости из условия: functions.pat - функция подходит для всех моделей LTE.pat - только для LTE LTE2.pat - только для LTE2
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 записываемое значение
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, // Кол-во событий, на которое должно запускаться приложение
2) Паттерна должна быть в либе с начала эльфпака 1.0. 3) UINT32 AFW_CreateInternalQueuedEvAux( UINT32 ev_id, FREE_BUF_FLAG_T free_buf, UINT32 att_size, void* att_data );
К примеру открываем идой fbrowser (не стесняемя ) , ищем *_event_reg_table - это и есть коды событий на которые он стартует. Теперь при выполнении кода AFW_CreateInternalQueuedEvAux( 0x3DC, FBF_FREE, NULL, NULL ); Будет стартовать fbrowser.
Некторорые полнзные функции Выключить тел 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
// *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 - указатель на буфер, где хранятся записываемые данные
// Установить на 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;
Паттерны: 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
// Установить громкость 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
// если 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
/* Получить системное время в тиках */ UINT64 suPalReadTime( void ); /* Перевести время из тиков в миллисекунды */ UINT64 suPalTicksToMsec( UINT64 ticks );
2) UIS_GetActiveDialogType A e92d4010e1a04000????????e350000003a0000105c400000a000006e5901000e28fe008e5912060e0821001
3) Возвращает "тип" верхнего диалога. В приложениях прошивки часто используется для определения нахождения на рабочем столе. Если в res значение 0xE, значит на рабочем столе. Для обычного списка в res значение 0x10. Поэксперементируйте если вам это нужно.
1) оффсет в базе, по которому можно узнать о состоянии клавиатуры (блок/разблок) 2) KEYPAD_STATE D 48616E646C65417564696F506C617965723A2045786974203D20-0x10 3) Код