Jump to content
Old Phone Forum
  • Login

    You are currently not logged in to the forum.

    To comment, upload files, subscribe to answers - you need to login.

MaxKis

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

Recommended Posts

alex.bat98,

да любой удобный тебе компилятор используй, что спрашивать-то... :D

Share this post


Link to post
Share on other sites

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

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

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

а при изменении значения спина регулируется громкость (думаю, должна помочь 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 - тоже перезагрузка. Похоже, что эту функцию можно вызывать только в процессе воспроизведения файла.

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Alex&r,

mov  r0,1
bl   Hbgm2_GetProcState

 

результат:

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Alex&r,

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

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

:D

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Alex&r,

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

  • Like 1

Share this post


Link to post
Share on other sites

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

 

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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


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

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

  • Like 1

Сложность программы растет до тех пор, пока не превысит способности программиста!!!

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

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


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

Share this post


Link to post
Share on other sites
Sylar, Россия - страна простых людей! :Laie_67:

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

icq 8395545

Share this post


Link to post
Share on other sites

А в чём отличие 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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Share this post


Link to post
Share on other sites

Приделал к мастерпатчу обработчики 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...