Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Задаем вопросы по теме "Создание патчей, для начинающих"


Рекомендуемые сообщения

  • 2 недели спустя...
  • Ответов 1,4 тыс
  • Создана
  • Последний ответ

Топ авторов темы

в таком случае я бы сделал так:

при установке курсора на фокус (спин) регулировки громкости начинает воспроизводиться мелодия,

при уходе курсора с фокуса мелодия останавливается,

а при изменении значения спина регулируется громкость (думаю, должна помочь Hbgm2_SendSetVolumeReq)

А как бы ты это сделал, код? :)

А если серьезно, люди знающие, подскажите как остановить мелодию (без перезагрузки, а то с ней я и сам умею :28: ).

Пробовал экспериментировать через CGSN-патч. Сделал такой плагин:

.plugin

.equ Hbgm2_SendPlayReq		0x20544078
.equ Hbgm2_SendStopReq		0x20E2431C

PUSH	{LR}
SUB		SP,#0x10

MOV		R2,#0x0
MOV		R0,#0xC
MOV		R1,#0x0
STR		R2,[SP,#0xC]
STR		R2,[SP]
MOV		R3,#0x0
STR		R0,[SP,#0x4]
MOV		R0,#0x1
ADR		R2,="/a/user/misscall.mp3"
STR		R1,[SP,#0x8]
BL		Hbgm2_SendPlayReq

;---что-то вроде временной задержки---
MOV		R0,0
metka1:
MOV		R1,0
metka:
NOP
ADD		R1,1
CMP		R1,0xFF
BLT		metka
ADD		R0,1
CMP		R0,0xFF
BLT		metka1
;---------------------------------------------------

MOV		R0,#0x1
MOV		R1,#0x0
BL		Hbgm2_SendStopReq

ADD		SP,#0x10
POP		{PC}
.endplugin

При первом запуске кода на выполнение из окна терминала все хорошо: мелодия начинает проигрываться и прерывается. Но через некоторое время (5-10 секунд) запускаю повторно - телефон перезагружается. :)

Пробовал и просто Hbgm2_SendStopReq запускать с R0=0 и 1, R1=0 - тоже перезагрузка. Похоже, что эту функцию можно вызывать только в процессе воспроизведения файла.

Помогите кто чем может!!!

Ссылка на комментарий
Поделиться на другие сайты

Alex&r,

mov  r0,1
bl   Hbgm2_GetProcState

 

результат:

0 - музыка не проигрывается

1 - музыка проигрывается

2 - музыка на паузе

 

Spoiler

HBGM_AUDIO_PCM_FEEDING_TYPE = {HBGM_NO_PCM_FEEDING=0, HBGM_PCM_FEEDING=1}

 

INSTANCE_TYPE = {INSTANCE_HPLY=0, INSTANCE_LIST=1, INSTANCE_HBGM=2, INSTANCE_RINGTONE=3, INSTANCE_MAX_INDEX=4}

 

SOURCE_TYPE = {SOURCE_FILENAME=0, SOURCE_FILEID=1}

 

SYNC_TYPE = {TYPE_SYNCHRONOUS=0, TYPE_ASYNCHRONOUS=1}

 

 

Hbgm2_SendPlayReq:

InstanceType: INSTANCE_TYPE;

SourceType: SOURCE_TYPE;

FileName: pointer of char;

FileId: unsigned;

StartTime: unsigned short;

Volume: unsigned short;

BT_USE_FLAG: HBGM_AUDIO_PCM_FEEDING_TYPE;

SyncType: SYNC_TYPE;

 

 

Hbgm2_SendStopReq:

InstanceType: INSTANCE_TYPE;

SyncType: SYNC_TYPE;

 

 

Hbgm2_SendSetVolumeReq:

InstanceType: INSTANCE_TYPE;

VolumeLevel: unsigned short;

SyncType: SYNC_TYPE;

 

 

Hbgm2_SendPauseReq:

InstanceType: INSTANCE_TYPE;

SyncType: SYNC_TYPE;

 

 

Hbgm2_SendResumeReq:

InstanceType: INSTANCE_TYPE;

BT_USE_FLAG: HBGM_AUDIO_PCM_FEEDING_TYPE;

FadeOutResume: bool;

SyncType: SYNC_TYPE;

 

 

Hbgm2_GetProcState:

InstanceType: INSTANCE_TYPE;

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

Alex&r,

mov  r0,1
bl   Hbgm2_GetProcState

 

результат:

0 - музыка не проигрывается

1 - музыка проигрывается

2 - музыка на паузе

 

Спасибо, сделаю проверку прежде чем пытаться останавливать мелодию. Результат в R0?

Может еще объяснишь, почему все-таки при повторном выполнении того же кода (плагин из предыдущего моего поста) телефон перезагружается. Ведь первый раз работает?!

Ссылка на комментарий
Поделиться на другие сайты

Результат в R0?

как обычно...

Может еще объяснишь, почему все-таки при повторном выполнении того же кода (плагин из предыдущего моего поста) телефон перезагружается. Ведь первый раз работает?!

да я хз... надо узнать на котором участке кода именно происходит ребут...

Ссылка на комментарий
Поделиться на другие сайты

как обычно...

 

да я хз... надо узнать на котором участке кода именно происходит ребут...

Мелодия даже не начинает воспроизводиться, по крайней мере её не слышно.

Ссылка на комментарий
Поделиться на другие сайты

Мелодия даже не начинает воспроизводиться, по крайней мере её не слышно.

стоит перед Hbgm2_SendPlayReq тоже вызвать Hbgm2_GetProcState...

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

Мелодия даже не начинает воспроизводиться, по крайней мере её не слышно.

Оказалось все просто. При поиске эквивалентов мною была допущена ошибка: для Hbgm2_SendStopReq я указал адрес Hbgm2_SendPauseReq (большой кусок кода в начале у них одинаковый). Получалось, что первый раз я ставил мелодию на паузу, а второй раз повторно ее запускал. Вот и получалась перезагрузка.
Ссылка на комментарий
Поделиться на другие сайты

Alex&r,

ну я что-то типа этого и предполагал, когда посоветовал:

стоит перед Hbgm2_SendPlayReq тоже вызвать Hbgm2_GetProcState...

:D

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

У меня появилась очередная бредовая идея и для ее реализации мне нужна помощь специалистов, профессионалов.

Хочу узнать как происходит обработка нажатий любых клавиш в любом месте (менюшки, плееры, радио, просмотры фото, видео и т.д.).

Я так подозреваю, что где-то есть обработчик нажатий клавиш один общий, который постоянно мониторит их состояние, и как только клавиша нажата передает ее код куда надо. Хотя может я крупно ошибаюсь.

Если есть такое одно место, о котором я написал, то как его найти в прошивке, а точнее место между определением нажатой клавиши и действием, которое должно последовать за этим нажатием.

В общем хочется по-подробнее. Если это где-то описано, то ткните носом.

Люди знающие, не оставайтесь равнодушными.

Ссылка на комментарий
Поделиться на другие сайты

Alex&r,

действительно такое место есть, смотри Юрин патч CKeyRevival, там это как раз и используется... :)

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Привет! В начале извините за плохой русский, но я использую Google переводчик.

 

Ну, я спросил, направляя меня о том, как создать патчи для платформы Broadcom - S5620.

Я хотел, чтобы преобразовать патчи для работы на прошивке JTJL2.

Но у меня есть проблема с переписать master_patch анализа master_patch с четырьмя другими softów (XXJA4, XEJE1, MFJF1, XEJB3) заметил, что код является относительно аналогичного, но Есть небольшие различия - и из-за их хорошего редактирования у меня есть проблемы.

Что касается компенсации, я подозреваю, что мне удалось найти правильный.

 

Заранее благодарим вас за вашу помощь.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

в этом патче можешь использовать стековый кадр как свободную оперативку

А что такое "стековый кадр"? :)

Обожаю свою жену Анюточку! =)

Ссылка на комментарий
Поделиться на другие сайты

А что такое "стековый кадр"? :)

Сте́ковый кадр (англ. stack frame) — технология передачи аргументов и выделения временной памяти (в процедурах языков программирования высокого уровня) с использованием системного стека.

 

В самой функции выделяшь память командой к примеру sub sp,0x100 и отдаешь память add sp,0x100 и пишешь данные в стек str r0 sp 4

 

З.Ы. Поправте если что не так... я в программировании и в терминологии не силен... я ж простой учитель математики :)

  • Like 1
Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Ссылка на комментарий
Поделиться на другие сайты

Прошел курс лечения от патчезависимости)))

успешно? Чем лечил? Алкоголем? :)

В самой функции выделяшь память командой к примеру sub sp,0x100 и отдаешь память add sp,0x100 и пишешь данные в стек str r0 sp 4

ну да, че-то наподобие, отрезаешь кусок от стека и пишешь туда свои данные (в том примере - текст, имя абонента)

З.Ы. Поправте если что не так... я в программировании и в терминологии не силен... я ж простой учитель математики

надеюсь я тоже ничего не "намудрил", я ж простой инженер-электрик (и то даже еще не дипломированный) :)

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

я ж простой учитель математики

я ж простой инженер-электрик

Два собутыльника :Laie_67:

Пожертвования отправлять сюда R256859050930

Ссылка на комментарий
Поделиться на другие сайты

Два собутыльника

да если б жили рядом - так и было бы :Laie_67:

Комментарий модератора MaksM
ну и слава Богу, что живёте врозь! :)
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Доброго времени суток!

Подскажите реально ли написать такой патч, чтоб на Samsung S5560 не блокировался автоматом, нужен для того что сломана плата по цепи кнопок, не работает блокировка и громкость +, или перепрограмировать на другую клавишу, готов заплатить кто поможет!

icq 8395545

Ссылка на комментарий
Поделиться на другие сайты

А в чём отличие MCC-команд BSRP, IBSRP, CBSRP, ICBSRP, ICFBSRP, RP, RSP, BS, IP, BSR от обычного TASK ?

 

На первый взгляд их работа не отличается от TASK.

Однако, многие обработчики продублированы по разным MCC-командам!

К примеру (B5722XXJK3) вот:

2138С088 - MCC_BSRP_10, MCC_IBSRP_10, MCC_CBSRP_10, MCC_ICBSRP_10, MCC_ICFBSRP_10, MCC_BS_10.

Т.е. вроде бы один и тот-же thumb-код можно вызвать разными MCC-командами.

 

Вообще у меня такая проблема (в процессе написания патча CallRecord для B5722XXJK3):

в индийской прошивке есть код типа

MCC_BSRP 0x10 5 ; просто делает Rtk05_2SendMsgToProcess MAPI_AUP_RECORD_STOP_REQ

MCC_TASK 0x10 1 ; копирует файл из temp-папки в итоговую

 

Ну сделал я весь код который был в BSRP - в TASK-мастерпатче… И всё даже заработало как надо!

Но, примерно в половине случаев после вышеупомянутого Rtk05_2SendMsgToProcess временный файл не копируется! Смотрю во временную папку потом - а файл есть… И даже нормально копируется ручным запуском MCC_TASK 0x10 1. Вобщем я пришёл к выводу что проблема в том что файл появляется (или освобождается) далеко не сразу после отправки команды в Rtk05_2SendMsgToProcess. Попытки вместо TASK 0x10 1 использовать напрямую свою функция gfs00_6Rnm вероятность успешного копирования файла существенно понизили (видимо потому что у меня это было гораздо быстрее). А вот BSRP каким-то образом ждал выполнения отправленной через Rtk05_2SendMsgToProcess команды…

 

Ладно, попробовал расширить кол-во функций в этом MCC_BSRP 0x10 (добавил ещё несколько CASE-переходов в конце), но мои функции работают с глюками - после их вызова экран зависает (очевидно ждёт какого-то события, но факт создания файла почему-то не видит). Вызываю тоже самое через MCC_BS 0x10 - экран не зависает и всё работает, только опять проблема с temp-файлом прежняя - как у MCC_TASK…

А, напомню, что thumb-обработчик у MCC_BS 0x10 и MCC_BSRP 0x10 - один и тот же!

Однако штатные функции управления диктофоном используют именно BSRP…

 

Так что вообще делать с этим BSRP ? Как он управляется ?

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

NeO_2kX давал ссылку Документация по MMI, ты там даже спасибку оставил :)

Читай главу 3.3

Чтение документации помогло… Расширил соответствующим образом таблицу ga_srg_cnf_err_tab, добавил там _CNF и _ERR соответствующие и BSRP сработал как надо.

 

Однако у меня возник вопрос - а почему к мастерпатчу не приделали обработчик RP ?

Было бы очень удобно, и в принципе для нескольких патчей это бы пригодилось…

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

Чтение документации помогло… Расширил соответствующим образом таблицу ga_srg_cnf_err_tab, добавил там _CNF и _ERR соответствующие и BSRP сработал как надо.

 

Однако у меня возник вопрос - а почему к мастерпатчу не приделали обработчик RP ?

Было бы очень удобно, и в принципе для нескольких патчей это бы пригодилось…

На момент создания мастер-патча - никто толком не использовал паралельные процессы, да и знания были не столь сильны.

Ссылка на комментарий
Поделиться на другие сайты

Приделал к мастерпатчу обработчики BSRP, RSP, IP… Типа описание для начинающих:

 

MCC_BSRP - это в принципе тоже самое что MCC_TASK, но, после выполнения thumb-кода BSRP будет ждать сообщения, которое должно быть прописано в таблице cnf_err_tab. Обычно это надо в случаях использования Rtk05_2SendMsgToProcess - оно отправляет параллельному процессу какое-то указание, и не факт что указание будет выполнено мгновенно. BSRP позволяет дождаться ответного сообщения от процесса, и продолжить выполнение MCC-скриптов только после этого.

 

Пример (на основе использования в патче Call Record на B5722XXJK3):

 

.equ MP 0x19 ; базовый код мастерпатча

.equ id_bsrp_demo 5

 

; регистрация команды MCC_BSRP MP id_bsrp_demo

.start new_mcc_bs_tab+id_bsrp_demo*4

.word bsrp_demo+1

 

; регистрация кода успешного ответа и кода ошибки.

.start ga_masterpatch_cnf_err_tab+id_bsrp_demo*4

.short MAPI_AUP_RECORD_STOP_CNF, MAPI_AUP_RECORD_STOP_ERR

 

; заглушка для MCC_RSP которое вызывается автоматически из BSRP.

.start new_mcc_rp_tab+id_bsrp_demo*4

.word rsp_exit+1

 

.start free_addr

bsrp_demo:

MOV R0, #0xC

BL RtkGetMemory

MOV R3, R0 ; доп.аргументы команды

LDR R2, =MAPI_AUP_RECORD_STOP_REQ ; команда

MOV R1, PROCESS_GPLAYER ; получатель

MOV R0, PROCESS_MMI ; отправитель

BL Rtk05_2SendMsgToProcess

ADD SP, 0x100

POP {R4-R7,PC}

 

rsp_exit:

ADD SP, 0x100

POP {R4-R7,PC}

 

и теперь такая вот команда:

.mcc MCC_BSRP MP id_bsrp_demo 0 0 mcc_demo_error

Отправит сообщение MAPI_AUP_RECORD_STOP_REQ в PROCESS_GPLAYER,

и будет ждать ответного сообщения MAPI_AUP_RECORD_STOP_CNF или MAPI_AUP_RECORD_STOP_ERR

Эти сообщения зашиты в недрах вызываемого процесса, и вобщем надо правильно указать что следует ожидать.

На один код BSRP можно указать только два сообщения - одно для CNF и одно для ERR.

Размер их по 16 бит.

В случае CNF - MCC нормально перейдёт на следующую строку,

а в случае ERR - перейдёт по адресу mcc_demo_error

 

Значения типа MAPI_AUP_RECORD_STOP_REQ, PROCESS_MMI - описаны не в SYM, а в DEF-Файле.

 

А таблицы и обработчики MCC_RSP - нужны в случае если мы хотим при получении какого-то ответа немедленно что-то выполнить.

Виртуальная команда типа MCC_RSP MP id_bsrp_demo будет обязательно выполнена как только MCC_BSRP дождётся ответа.

MCC_RSP не может повлиять на интерпретацию ответа, но может записать в лог или выполнить ещё какие-либо действия.

Даже если вам она не нужна - при использовании MCC_BSRP необходимо для MCC_RSP поставить заглушку в new_mcc_rp_tab.

  • Like 7

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

Может кто знает как убить запущенный таймер MCC_USER_EVENT_WAIT так, чтобы больше никакие mcc не выполнялись, MCC_EXIT в том числе. Наверное нужно как-то использовать RtkStopTimer?

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти



×
×
  • Создать...