Отключение плеера/радио при отсоединении гарнитуры

Первый урок будет посящен разбору патча... Я решил не брать какой-нить замудрённый патч ))

Вот исходник патча: 


;K750 SW-R1CA021 
;Отключение плеера/радио при отсоединении гарнитуры 
;© IronMaster 
;(p) Joker XT
patch equ 0x451E1FA0
org 0x4505BF5A 
bl patch 
org patch 
STRB R5, [R4] 
push {r0-r7} 
ldr r0, isAudioPlayerBook 
bl 0x4504D3B8 ;findBook 
cmp r0, 0 
beq next 
bl 0x44E7AAA4 ;freeBook 

next: 
ldr r0, isFmRadioBook 
bl 0x4504D3B8 ;findBook 
cmp r0, 0 
beq ex 
bl 0x44E7AAA4 ;freeBook 

ex: 
pop {r0-r7} 
ldr r7, rest 
mov pc, r7
align 4 
rest DCD 0x4505BF8C+1 
isAudioPlayerBook DCD 0x44F55518+1 
isFmRadioBook DCD 0x4511EBB8+1

Теперь начнём разбирать))

org 0x4505BF5A 
bl patch 
Это врезка патча, собсно с помощью неё патч изнаёт када нужно запускаться )

После org patch идёт тело патча, те то, что будет выполняться при отсоединении гарнитуры...

STRB R5, [R4] - это данные, который мы затёрли врезкой... Их всегда нужно восстанавливать!


ldr r0, isAudioPlayerBook 
bl 0x4504D3B8 ;findBook 
cmp r0, 0 
beq next 
bl 0x44E7AAA4 ;freeBook 

Тут идёт первая проверка на то, не запушен ли Плеер. 
Ф-ией findBook мы проверяем, создана ли AudioPlayerBook, если бука создана, то ф-ия findBook вернёт нам указатель на book, елси же нет, то она вернёт 0... 

cmp r0, 0 
beq next 

Тут проверяем не ноль ли вышел из функции )) Если же ноль, то идём на вторую проверку... А если не ноль, но освобождаем буку ф-ией freeBook.

Вторая проверка аналогична первой, только там мы проверяем не включено ли Радио.


ldr r7, rest 
mov pc, r7 

Этой крнструкцией мы переходим на адрес rest.


align 4 
rest DCD 0x4505BF8C+1 
isAudioPlayerBook DCD 0x44F55518+1 
isFmRadioBook DCD 0x4511EBB8+1 

align 4 - это выровнять по адресу кратному 4. 
Ну и собсно дальше адреса ф-ий...

Вроде всё ) Если что непонятно, пишите )) Дополним, переделаем...


 

No comments yet! Why don't you be the first?

Post Comment

Your email address will not be published. Required fields are marked *