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.

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


Recommended Posts

а что значит BLT  ess_error?

Наверно опечатка. Там наверно должно быть BLE - ошибка если возвращён 0 или отрицательное число, или даже BEQ (ошибка если возвращён 0).

 

 

Команды условного перехода в режиме Thumb

BEQ метка Переход, если установлен Z (равно)

BNE метка Переход, если сброшен Z (не равно)

BCS метка Переход, если установлен C (выше беззнаковое или равно)

BCC метка Переход, если сброшен C (ниже беззнаковое)

BMI метка Переход, если установлен N (минус, или старший бит установлен)

BPL метка Переход, если сброшен N (плюс или равно, или старший бит сброшен)

BVS метка Переход, если установлен V (переполнение)

BVC метка Переход, если сброшен V (нет переполнения)

BHI метка Переход, если установлен C и сброшен Z (выше беззнаковое)

BLS метка Переход, если сброшен C или установлен Z (ниже беззнаковое или равно)

BGE метка Переход, если установлен N и установлен V или сброшен N и сброшен V (больше со знаком или равно)

BLT метка Переход, если установлен N и сброшен V или сброшен N и установлен V (меньше со знаком)

BGT метка Переход, если сброшен Z и либо установлен N и сброшен V, либо сброшен N и установлен V (больше со знаком)

BLE метка Переход, если установлен Z, или установлен N и сброшен V, или сброшен N и установлен V (меньше со знаком или равно)

 

 

Подскажите, пожалуйста, как Вы определяли .start 0x2197B5FA?

Для B5722 есть полный sym… Откуда ясно что это врезка в функцию gfs30_24CptScr (0x2197B304). Функция имеет ссылки на трассировку (лежит там текст gfs30_24CptScr). Обычно в таких случаях в другой прошивке ищем аналогичный текст трассировки и идём в обратную сторону.

Но в случае J210 облом - у него нету функции gfs30_24CptScr, и вообще нету даже текста CptScr… Я проверил в более древнем D780 - но у него тоже есть gfs30_24CptScr…

 

Так что либо скриншоты придётся запускать из терминалки запуском из CGSN-патча, либо надо исследовать есть ли у J210 штатный скриншотер (в инженерном меню включается ли он) и как он работает…

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

Link to comment
Share on other sites

  • Replies 1.4k
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

f2065

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

AlexeyK

В принципе в настройках компилятора есть пункт "Искать адреса редиректов для длинных переходов". во многих случаях компилятор сам сможет найти нужный редирект и сделать вызов через него.   PS. правда настройка мало тестировалась и по умолчанию отключена. На вариантах которыя я сам проверял вроде работало, но мало статистики.

Дамир

Вот нарыл у себя сегодня на винте статейку, думаю начинающим и не только пригодиться... Программная среда ARM Programme_ambience_ARM.rar

Posted Images

Спасибо! В J210 gfs30_24CptScr есть (0x20E19C80). В инженерном меню включается и работает. Мой вопрос был по поводу того, как переделать raw в bmp.

 


 

 

 

Link to comment
Share on other sites

В J210 gfs30_24CptScr есть (0x20E19C80).

Это называется mmigfs3_33LCDDump. gfs30_24CptScr там нету

 

Мой вопрос был по поводу того, как переделать raw в bmp.

Надо исследовать mmigfs3_33LCDDump, где там пишется в файл буфер vScreenMem. Я что-то не вижу там ничего похожего на 0x302FA620

надо имена всех функций которые вызываются из mmigfs3_33LCDDump найти

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

Link to comment
Share on other sites

Это называется mmigfs3_33LCDDump. gfs30_24CptScr там нету

 

Надо исследовать mmigfs3_33LCDDump, где там пишется в файл буфер vScreenMem. Я что-то не вижу там ничего похожего на 0x302FA620

надо имена всех функций которые вызываются из mmigfs3_33LCDDump найти

Спасибо! Значит я ошибся. Буду довольствоваться raw.

Link to comment
Share on other sites

  • 11 months later...

Хочу сделать себе патч Talker aka «Говорящие часы» на примере B5722.  Не знаю как правильно добавить новый пункт меню в Настройки-Телефон-Время и Дата. Определил адрес меню:

213C949C 5C000000000000000000000000000000
213C94AC 8B000000000000000000000000000000
213C94BC 1713B100000000000000000000000000
213C94CC 7F000100000100000000000030000000
213C94DC 1713B000000000000000000000000000
213C94EC 80130F00000002020000000000000000
213C94FC 8C00010000000000CC9DB52000000000
213C950C 8C00FFFF000000009C953C2100000000
213C951C 8D0100000202D8019C953C2167060000
213C952C 180901000F0000007C953C2100000000
213C953C 19090100020000007C953C2100000000
213C954C 19090100010000007C953C2100000000
213C955C 19090100090000004CB0B52000000000
213C956C 38000000000000000000000000000000

Странно, что в адресе 213C94FC не 6 пунктов фокус меню, а только один. При переходе  в кейс 0x00B0

215B8ABC:    0722    MOV    R2, #0x7 как и в B5722 ( 0x216EAF20)
 

 

Link to comment
Share on other sites

05.11.2019 в 20:02, bugbug сказал:

213C94FC 8C00010000000000CC9DB52000000000

BinEdit это должен показывать так

213C949C:    5C000000000000000000000000000000    DCM    MCC_INIT_RESTORE    ;Подготовка окна
213C94AC:    8B000000000000000000000000000000    DCM    MCC_SET_CURFOCUS    ;MCC_SET_CURFOCUS
213C94BC:    1713B100000000000000000000000000    DCM    MCC_TASK 0x13 0xB1    ;Выполнить 0x13 x2=177 x3=0 x4=0 x5=0 x6=0
213C94CC:    7F000100000100000000000030000000    DCM    MCC_FOCUS_START 0 0x1 0x100 0 0 0x30    ;MCC_FOCUS_START
213C94DC:    1713B000000000000000000000000000    DCM    MCC_TASK 0x13 0xB0    ;Выполнить 0x13 x2=176 x3=0 x4=0 x5=0 x6=0
213C94EC:    80130F00000002020000000000000000    DCM    MCC_DISPLAY_FOCUS 0x13 0xF 0 0x202    ;MCC_DISPLAY_FOCUS
213C94FC:    8C00010000000000CC9DB52000000000    DCM    MCC_FOCUS_SELECT 0 0x1 0 0 loc_20B59DCC    ;MCC_FOCUS_SELECT
213C950C:    8C00FFFF000000009C953C2100000000    DCM    MCC_FOCUS_SELECT 0 0xFFFF 0 0 loc_213C959C    ;MCC_FOCUS_SELECT
213C951C:    8D0100000202D8019C953C2167060000    DCM    MCC_FOCUS_CHANGE 0x1 0 0x202 0x1D8 loc_213C959C 0x667    ;MCC_FOCUS_CHANGE
213C952C:    180901000F0000007C953C2100000000    DCM    MCC_IF 0x9 0x1 0xF 0 loc_213C957C    ;Если кнопка "R-Soft/Middle" в состояни 1 то переход на 0x213C957C
213C953C:    19090100020000007C953C2100000000    DCM    MCC_ELSEIF 0x9 0x1 0x2 0 loc_213C957C    ;Или если кнопка "С" в состояни 1 то переход на 0x213C957C
213C954C:    19090100010000007C953C2100000000    DCM    MCC_ELSEIF 0x9 0x1 0x1 0 loc_213C957C    ;Или если кнопка "С-long" в состояни 1 то переход на 0x213C957C
213C955C:    19090100090000004CB0B52000000000    DCM    MCC_ELSEIF 0x9 0x1 0x9 0 loc_20B5B04C    ;Или если кнопка "Red" в состояни 1 то переход на 0x20B5B04C
213C956C:    38000000000000000000000000000000    DCM    MCC_EXIT    ;Завершение МСС скрипта

20B59DCC:    180901000E0000009C953C2100000000    DCM    MCC_IF 0x9 0x1 0xE 0 loc_213C959C    ;Если кнопка "L-Soft" в состояни 1 то переход на 0x213C959C
20B59DDC:    17130600000000000000000000000000    DCM    MCC_TASK 0x13 0x6    ;Выполнить 0x13 x2=6 x3=0 x4=0 x5=0 x6=0
20B59DEC:    1C0000000000000030B17B2100000000    DCM    MCC_TRANSF 0 0 0 0 loc_217BB130    ;Переход на адрес 0x217BB130
20B59DFC:    5C000000000000000000000000000000    DCM    MCC_INIT_RESTORE    ;Подготовка окна
20B59E0C:    17138200000000000000000000000000    DCM    MCC_TASK 0x13 0x82    ;Выполнить 0x13 x2=130 x3=0 x4=0 x5=0 x6=0
20B59E1C:    7A01010013000F000000000000000000    DCM    MCC_RETURN_MENU 0x1 0x1 0x13 0xF    ;MCC_RETURN_MENU

213C959C:    1713B200000000000000000000000000    DCM    MCC_TASK 0x13 0xB2    ;Выполнить 0x13 x2=178 x3=0 x4=0 x5=0 x6=0
213C95AC:    181321000000000090F1772000000000    DCM    MCC_IF 0x13 0x21 0 0 loc_2077F190    ;Если x1=19 x2=33 x3=0 то переход на 0x2077F190
213C95BC:    1B000000000000002C9EB52000000000    DCM    MCC_CALL 0 0 0 0 loc_20B59E2C    ;Вызов подпрограммы по адресу 0x20B59E2C
213C95CC:    1713B300000000000000000000000000    DCM    MCC_TASK 0x13 0xB3    ;Выполнить 0x13 x2=179 x3=0 x4=0 x5=0 x6=0
213C95DC:    1C00000000000000B4AB372100000000    DCM    MCC_TRANSF 0 0 0 0 loc_2137ABB4    ;Переход на адрес 0x2137ABB4
 

05.11.2019 в 20:02, bugbug сказал:

Странно, что в адресе 213C94FC не 6 пунктов фокус меню, а только один

Обработчик меню (особенно focus-меню) бывает и не в виде MCC-скриптов, а регистрируется в ассемблере, в функции подготовки этого самого меню. Либо, в MCC-функции которая вызывается при завершении меню - асм-код проверяет на каком пункте меню был выход…

Вобщем, надо внимательно смотреть асм-внутренности всех MCC_TASK на запуске меню (начиная с init restore), и при выходе. Лучше наверно на B5722 где есть sym-файл, чтобы имена всех BL-функций BinEdit показывал. И потихоньку переносить описания функций в sym для J210 (вкладка «Символы» в BinEdit, там добавлять адреса в J210). Функций задействованных в работе меню не много, штук 50, так что потом по мере переноса имён - уже можно будет читать понятный код сразу в J210.

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

Link to comment
Share on other sites

В Talker_menu_enter.asm

;fn_menu_in_focus: ; выдрано из cal6_FakeCallFocusTimerDisplay

А у меня нет ложного срабатывания, тогда откуда мне  выдирать?

Спасибо!

P.S. Talker_fn.asm я уже сделал.

Link to comment
Share on other sites

Проверил Talker_fn.asm, установив на удержание кнопки. Все работает: женщина приятным голосом сообщает точное время.  Однако цель моя не достигнута: нет меню автоматических настроек. Нашел патч-конфигуратор для D780, M3510,E200 где аналогичное меню Время и Дата. А asm (Патч-конфигуратор) на форуме  не нашел. Существует ли такой asm?

P.S. Вручную smp сделать сложно из-за огромного объема.

Link to comment
Share on other sites

2 часа назад, bugbug сказал:

нет меню автоматических настроек

Надо брать патч с B5722 (или C3322/S5610 - но они сильнее отличаются). Там и меню настроек своё собственное, и функций у говорящих часов больше (есть возможность предварительных сигналов).

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

Link to comment
Share on other sites

Нашел адрес для увеличения скрости набора текста в java. Увеличил скорость в 3 раза. Сработало. Однако произошло ускорение всех процессов в java: прокрутка страниц, ускорение хода часов и т.д. Наверное именно поэтому никто не делал этот патч?

Link to comment
Share on other sites

Ну просто наверно надо более сложный патч, не просто поправить 1 константу, а добавить несколько проверок где используется эта константа.

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

Link to comment
Share on other sites

Делая вторую запись имя файла не меняется и файл перезаписывается. Реально ли сделать, чтобы присваивалось новое имя (например, ...1, ...2) 

Link to comment
Share on other sites

3 минуты назад, bugbug сказал:

В телефоне есть функция скрытой записи, которая записывает файл ENGMODE.amr.

Это отладочная инженерная функция (и вероятно имеющая проблемы с bluetooth, спикерфоном и т.п.), а не скрытая запись для пользователей.

4 минуты назад, bugbug сказал:

Реально ли сделать для скрытой записи, чтобы присваивалось новое имя (например, ...1, ...2) 

Всё реально. Однако зачем именно скрытая запись нужна - не понятно (и не законно).

Патчи автозаписи разговоров вроде были на B5722 - можно оттуда перенести нормальную запись (на C3322 - механизм записи кардинально другой).

  • Thanks 1

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

Link to comment
Share on other sites

  • 2 weeks later...

Подскажите, пожалуйста, как для патча Filename_DateTime определить адрес ga_PhotoDefaultName. 

В файле Filename_DateTime_v11_B5722XXJK3.asm например для D780XEHE  указаны адреса:

; 3005E8A0 - фото - имя для редактирования (сюда можно класть новое имя перед запуском камеры)
;  300C9F2E - фото - промежуточное место - отсюда берётся имя для формирования следующего файла
;  300C9EA0 - фото - тут лежил полное имя (xxxx_0001.jpg) но оно не пишется
;  300CA2D6 - фото - а тут лежит то что пишется (были бы в мобиле секунды - можно было
;                       бы по OK тут каждый раз подменять имя)

Аналог промежуточного места для своей прошивки я нашел по адресу 215D4CF8:  ldr r0, =0x3011AB3F, а как определяется "фото - имя для редактирования"?

 

Link to comment
Share on other sites

27.11.2019 в 08:33, bugbug сказал:

В файле Filename_DateTime_v11_B5722XXJK3.asm например для D780XEHE  указаны адреса:

актуальная версия v17

адреса D780 - не совсем правильный алгоритм (тогда ещё не было sym), см. имена используемых адресов в B5722, и надо искать их аналоги.

gv_CameraJpegFileFullPath надо.

Смотрим в B5722 все ссылки на адрес 3026484A, находим место где есть трассировки (например camera3_CreateMultishotFile).

Находим в J210 текст трассировки (camera3_CreateMultishotFile), находим откуда он вызывается и находим эту функцию (2095B998 camera3_CreateMultishotFile)

Разбираем логику по sym-именам с B5722, подписываем имена в J210 (внимательно проверяя аргументы, например у одного snprintf, а у другого там sprintf).

B5722XXJK3
21C5722E: MOV R0, 0
21C57230: STRB R0, [R4, #0x7]
21C57232: LDR R0, =0x00000A3E
21C57234: LDR R1, =v_upv_LineNumber
21C57236: STR R0, [R1]
21C57238: LDR R1, =0x204FC594
21C5723A: MOV R0, #0xFF
21C5723C: ADD R1, #0xC ; 0x204FC5A0 = camera3_CreateMultishotFile : gv_CameraJpegFileFullPath = %s
21C5723E: ADD R0, 1
21C57240: LDR R2, =gv_CameraJpegFileFullPath
21C57242: BL multi2_100SpvTrace

Смотрим аналогичный код в J210XEHG1
2095BA82: MOV R0, 0
2095BA84: STRB R0, [R4, 7]
2095BA86: LDR R0, =0x00001889
2095BA88: LDR R1, =v_upv_LineNumber
2095BA8A: ADD R0, #0x1C
2095BA8C: STR R0, [R1]
2095BA8E: LDR R1, =0x212C4924
2095BA90: MOV R3, R6  ;R3 = R6 = gv_CameraThumbFileFullPath
2095BA92: MOV R2, R7  ;R2 = R7 = gv_CameraJpegFileFullPath
2095BA94: MOV R0, #0xFF
2095BA96: ADD R1, #0x84 ; 0x212C49A8 = gv_CameraJpegFileFullPath:::%s, gv_CameraThumbFileFullPath:::%s
2095BA98: ADD R0, 1
2095BA9A: BL  multi2_100SpvTrace

Ищем где формируется R7
2095BA2C: MOV R3, 1
2095BA2E: LDR R6, =0x301419F0 ; gv_CameraThumbFileFullPath
2095BA30: LSL R7, R3, #10 ;R7 = R3 << 10 = 0x400 (1024)
2095BA32: SUB R7, R6, R7  ;R7 = R6 - R7 = 0x301415F0 = gv_CameraJpegFileFullPath
 

Потом при помощи CGSN смотреть в ОЗУ что в gv_CameraJpegFileFullPath лежит и как. Вероятно, там базовый оффсет будет другим (не «/x/Images/My photos/»).

ga_PhotoDefaultName там же аналогично

B5722
21C571EE:    LDRH    R0, [R0, #2]
21C571F0:    LDR    R3, =ga_PhotoDefaultName
21C571F2:    ADD    R2, R0, R1
21C571F4:    SUB    R2, 1
21C571F6:    STR    R2, [SP]
21C571F8:    LDR    R2, =0x204FC594    ; %s-%04d.jpg
21C571FA:    MOV    R1, #0x34
21C571FC:    LDR    R0, =ga_CameraPhotoFileName
21C571FE:    BL _snprintf

J210
2095B9C8:    LDR    R7, =0x3011AB18
2095B9D6:    LDR    R0, =0x3012DF90
2095B9D8:    MOV    R2, R7
2095B9DA:    LDRH R0, [R0, #0]
2095B9DC:    ADD    R2, #0x27    ;R2 = R2 + 39 = 0x3011AB3F = ga_PhotoDefaultName
2095B9DE:    LDR    R1, =0x212C39D4    ; %s-%04d.jpg
2095B9E0:    ADD    R3, R0, R6
2095B9E2:    SUB    R3, 1
2095B9E4:    MOV    R0, R5    ;R0 = R5 = 0x3011ABA4 = ga_CameraPhotoFileName
2095B9E6:    BL _sprintf
 

  • Thanks 1

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

Link to comment
Share on other sites

Спасибо, получилось сделать имена файлов для диктофона, радио,  видеокамеры. А для фотокамеры имя остается прежним.

При помощи CGSN определил, что лежит в gv_CameraJpegFileFullPath:

2F652F496D616765732FD0A4D0BED182D0BE2D303030312E6A7067

/e/Images/Фото-0001.jpg (+10 - пропуск пути)

в  ga_PhotoDefaultName:

D0A4D0BED182D0BE00D09400000000000001010000000000002B000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0A4D0BED182D0BE2D303030362E6A7067

Фото.Д.......+.....Фото-0001.jpg

в ga_CameraPhotoFileName:

D0A4D0BED182D0BE2D303030372E6A7067

Фото-0001.jpg

Далее определил mcc_camera_capture_mode_select:

B5722
A9200100020000007C275B2000000000
151D1E00010000000000000000000000
161D010001000100F8494F2000000000
171D010002000100F8494F2000000000
171D0E0001000100F8494F2000000000
161D050001000000384A4F2000000000
1A00000000000000884A4F2000000000
6D63635F63616D6572615F6361707475   mcc_camera_captu
72655F636865636B5F74696D65720000   re_check_timer

J210
9F203200000000009CE56B2100000000
18232B000100010024E1A52000000000
1820620001000000BCA4E92000000000
17202B00010000000000000000000000
17200400000000000000000000000000
1B00000000000000A8F61E2000000000
1820040001000000BCE56B2100000000
1C0000000000000058CE612000000000
6D63635F63616D6572615F6361707475 mcc_camera_captu
72655F636865636B5F74696D65720000 re_check_timer

B5722
151D4600000000000000000000000000
161D010001000000246A4F2000000000
171D010002000000F4684F2000000000
171D0E0001000000E84B4F2000000000
1800000000000000D84A4F2000000000
190000000000000034514F2000000000

J210
17209400000000000000000000000000
182001000100000090DCA32000000000
192001000200000080DBA32000000000
192001000300000018E6A32000000000
19200C0001000000B8CE612000000000
1A00000000000000847FE92000000000
 

.equ  gs_CameraStatus 0x3011AB18
.equ gv_CameraJpegFileFullPath 0x301415F0
.equ ga_PhotoDefaultName 0x3011AB3F
.equ MP 0x22
.equ MPCode 0x12
.equ new_mcc_task_tab 0x20C279D0

.equ strcpy 0x20470F2C
.equ strncpy 0x208B267C
.equ strlen 0x20470F7C

.start 0x2061CE58 ; mcc_camera_capture_mode_select
.mcc    MCC_TRANSF 0 0 0 0 mcc_set_photo_fullname
.start new_mcc_task_tab+4*MPCode
.word set_photo_fullname+1

.start 0x20C2B650

mcc_set_photo_fullname:
.mcc    MCC_TASK MP MPCode
.mcc    MCC_TASK 0x20 0x94 ; компенсация врезки
.mcc    MCC_TRANSF 0 0 0 0 0x2061CE58+0x10

set_photo_fullname:

; проверка режима фотокамеры
LDR    R0, =gs_CameraStatus ; 0,2,3 - единичные кадры, 1 - мультисъёмка
LDRB    R0, [R0] ;[R0,#0xC]
CMP    R0, 1
BEQ    photo_multi ; если мультисъёмка - то патч пока её не поддерживает, будет старое имя

LDR    R5, =gv_CameraJpegFileFullPath+10


; Пишем в начале строки дефолтное имя
LDR    R1, =ga_PhotoDefaultName
BL    print_header

; пишем дату
BL    print_datetime

photo_normal_1:
; пишем расширение
MOV    R1, 'j'
STRB    R1, [R5, 1]
MOV    R1, 'p'
STRB    R1, [R5, 2]
MOV    R1, 'g'
STRB    R1, [R5, 3]

photo_multi:

ADD    SP,SP,0x100
POP    {R4-R7,PC}

print_header:
PUSH    {LR}
MOV    R2, 0xB ; максимальный размер дефолтного имени.
LDRB    R3, [R1]
CMP    R3, 0
BEQ    skip_header ; если дефолтное имя пустое
MOV    R0, R5
BL    strncpy
BL    strlen
ADD    R5, R0, R5
MOV    R1, '-'
STRB    R1, [R5]
ADD    R5, R5, 1
skip_header:
POP    {PC}

print_datetime:
PUSH    {R0-R4,R6-R7,LR}
SUB    SP, SP, 0x10

; Запрос текущего времени
MOV    R0, SP
BL    hcl_06GetCurrentTimeAndDate
MOV    R6, SP

LDRH    R0, [R6, 6] ; год
BL    write_num2
LDRB    R0, [R6, 5] ; месяц
BL    write_num1
LDRB    R0, [R6, 4] ; число
BL    write_num1

MOV    R0, '-'
STRB    R0, [R5]
ADD    R5, R5, 1

LDRB    R0, [R6, 2] ; час
BL    write_num1
LDRB    R0, [R6, 1] ; минута
BL    write_num1
LDRB    R0, [R6, 0] ; секунда
BL    write_num1


MOV    R0, '.' ; точка после имени, перед расширением
STRB    R0, [R5]

MOV    R1, 'p' ; поскольку у нас обычно расширения mp3/mp4/jpg - общую букву сразу впишем
STRB    R1, [R5, 2]

MOV    R0, 0 ; EOL после расширения (расширение впишем потом)
STRB    R0, [R5, 4]

ADD    SP, SP, 0x10
POP    {R0-R4,R6-R7,PC}

write_num1: ; печатает число 00-99
PUSH    {LR}
BLX    __rt_udiv10
ADD    R0, 0x30 ; "0"
ADD    R1, 0x30 ; "0"
STRB    R0, [R5]
STRB    R1, [R5, 1]
ADD    R5, R5, 2
POP    {PC}

write_num2: ; печатает число 0000-9999 (год, и частоту тюнера)
PUSH    {LR}
BLX    __rt_udiv10
ADD    R1, 0x30 ; "0"
STRB    R1, [R5, 3]
BLX    __rt_udiv10
ADD    R1, 0x30 ; "0"
STRB    R1, [R5, 2]
BLX    __rt_udiv10
ADD    R1, 0x30 ; "0"
STRB    R1, [R5, 1]
ADD    R0, 0x30 ; "0"
STRB    R0, [R5, 0]
ADD    R5, R5, 4
POP    {PC}

;-------------------------------------------------------
.data

Вроде все правильно сделал.

Edited by bugbug
изменил максимальный размер дефолтного имени.
Link to comment
Share on other sites

2 часа назад, bugbug сказал:

А для фотокамеры имя остается прежним.

Ну надо контрольные точки вставлять (функции, которые куда-то во временно неиспользуемое место ОЗУ, например какой-нибудь буфер имени, будут писать байты о прохождении). В принципе подозреваю если всё остальное правильно и функция подмены имени фотокамеры вызывается - то надо смотреть условие мультисъёмки, может там не в gs_CameraStatus+0 оно или вообще другие значения или там просто нет мультисъёмки.

  • Thanks 1

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

Link to comment
Share on other sites

В телефоне есть мультисъемка. Решил сделать имя для фото, чтобы действовала и мультисъемка. Взял Filename_DateTime_v27_M3510XEHJ2.asm. Сделал следующее:

.equ buff_foto 0x3011AB3F
.equ __rt_udiv10 0x2151EEE0
.equ GetCurrentTimeAndDate 0x2161AEB4

.start new_mcc_task_tab+0x00*4 ; функция №00h
.word metka0+1

.start 0x216BE51C
.mcc mcc_transf 0 0 0 0 metka_mcc2 ; камера (перехват в момент фотки)

.start 0x20C2B650

metka_mcc2:
.mcc MCC_TASK 0x22 0
.mcc MCC_MULTI_TRACKING 0x20 0x32 0 0 0x216BE59C
.mcc MCC_TRANSF 0 0 0 0 0x216BE52C

;-------------------------------------------------------
metka0:

PUSH    {R0-R3}
SUB    SP, SP, 0x8
MOV    R0, SP
BL    GetCurrentTimeAndDate
MOV    R2, SP

LDR    R7, =buff_foto

LDRB    R0, [R2, 6] ; год
ADD    R0, #0x30     ; 2008 = 07D8, D8 = 216 а надо 08: 0xD8+0x30=0x108=0x08
MOV    R1, #0xFF
AND    R0, R1
BL    write_num

LDRB    R0, [R2, 5] ; месяц
BL    write_num

LDRB    R0, [R2, 4] ; число
BL    write_num

MOV    R0, #0x2D ; "-"
STRB    R0, [R7]
ADD    R7, 1

LDRB    R0, [R2, 2] ; час
BL    write_num

LDRB    R0, [R2, 1] ; минута
BL    write_num


MOV    R0, 0 ; EOL
STRB    R0, [R7]

B    m_exit

mov    r0, '.' ; дописывает '.jpg',0x0
strb    r0, [r7, 0]
mov    r0, 'j'
strb    r0, [r7, 1]
mov    r0, 'p'
strb    r0, [r7, 2]
mov    r0, 'g'
strb    r0, [r7, 3]
mov    r0, 0
strb    r0, [r7, 4]

m_exit:
ADD    SP, SP, 0x8
POP    {R0-R3}
ADD    SP, SP, #0x100
POP    {R4-R7,PC}

write_num:
PUSH    {R2,R4,LR}
BLX    __rt_udiv10
ADD    R0, '0'
ADD    R1, '0'
STRB    R0, [R7]
STRB    R1, [R7, 1]
ADD    R7, 2
POP    {R2,R4,PC}

.data

Имя получилось формата  ГГММДД-ЧЧММ-NNNN.jpg. 

У меня никак не получается здесь прописать год полностью ГГГГММДД-ЧЧММ-NNNN.jpg. Пробовал вставить блок write_num2 из B5722, мобила перезагружается. Не могли бы Вы подсказать, как прописать блок с годом. Заранее благодарю!

Link to comment
Share on other sites

7 минут назад, bugbug сказал:

Пробовал вставить блок write_num2 из B5722, мобила перезагружается.

Ну внимательно проверить что там на входе и на выходе в какие регистры… Это же вообще простейшее деление, такое надо самому писать. А если тупо скопировать весь блок оттуда - ну например там цифры пишутся по адресу из R5, а тут по адресу из R7. Ещё тут R2 сохраняется (может где-то выше по коду он был нужен), а там нет (при этом любая системная функция имеет право изменять R0,R1,R2,R3).

И вообще патч 2.7 от M3510 гораздо древнее чем 1.7 от B5722. Лучше всё-же на базе B5722 делать, в нём учтён весь старый опыт проблем и ошибок.

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

Link to comment
Share on other sites

  Это  был просто пример блока write_num2, конечно же регистры я поменял.  Получается, что в B5722 при мультисъемке остаются стандартные имена?

Link to comment
Share on other sites

2 минуты назад, bugbug сказал:

Получается, что в B5722 при мультисъемке остаются стандартные имена?

Да.

Потому что логика формирования порядкового номера работает не всегда как надо в случае изменения имени. В патче на B5722 используются секунды, и для фотокамеры этого хватает (в нормальном режиме невозможно успеть сделать 2 фотки за 1 секунду) так что дополнительные порядковые номера не нужны, а в режиме последовательной серии кадров - поэтому оставлена стандартная схема именования (без патча).

  • Thanks 1

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

Link to comment
Share on other sites

  • 2 weeks later...

Данные эквиваленты используются в Talker_listen.asm (патч Talker B5722).

.equ set03_StopSound 0x21A0C0E8
.equ set03_StopMidiSound 0x21D354C8
.equ set03_StopTimer 0x216A79E8

Не могу понять, где их искать в моей прошивке.

Link to comment
Share on other sites

На J210 это существенно отличается, функций нет, надо искать аналоги.

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

  • Thanks 1

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

Link to comment
Share on other sites

  • 2 weeks later...

Нижеприведенный код используется в ProfileSheduler_menu_fn.asm  и Talker_menu_enter.asm. В нем есть функция lk_DisplayFocusBG. В моем телефоне я нашел только lk_DisplayMenuFocusBG. Можно ли ее чем-то заменить, сократить или убрать? И обязателен ли этот код для построения меню?

LDR    R4, =fx_pos
MOV    R1, 5
STRH    R1, [R4, #0] ; fx_pos
MOV    R2, 22
STRH    R2, [R4, #6] ; f_height
LDRH    R1, [R5, #6]
LDRH    R0, [R5, #2]
BL    lk_GetCenterPos ; v_Start,v_Total,v_Part
STRH    R0, [R4, #2] ; fy_pos
MOV    R0, 220
STRH    R0, [R4, #4] ; f_width
LDR    R0, =0x00000816
STRH    R0, [R4, #8] ; f_font

MOV    R1, 0
MOV    R0, R6
BL    lk_MenuFontColor ; v_Active,v_HideState

CMP    R6, 1
BNE    loc_201815A0
MOV    R0, R5
BL    lk_DisplayFocusBG ; p_Pos
loc_201815A0:
CMP    R6, 0
BEQ    loc_201815EC ; рисовалка невыбранной строки
; рисовалка выбранной строки (со скроллом невлезающего текста)
LDR    R2, =0x00001001 ; (4097)
MOV    R1, 0
MOV    R0, 3
BL    lk6_ClearOneRestoreProc ; v_ContextType,v_CtxIdx,v_WidgetType
BL    lk6_look_dsptext_register
MOV    R2, 0
STR    R2, [SP, #0x10]    ; invalidate
STR    R7, [SP, #0xC]    ; SrcData - текстовая строка
MOV    R3, #0x1D ; 29
STR    R3, [SP, #0x8] ; ExtInfo_Index
STR    R0, [SP, #0x4] ; p_DspText
STR    R2, [SP] ; DspTarget
LDRH    R3, [R4, #6] ; f_height
LDRH    R2, [R4, #4] ; f_width
LDRH    R1, [R4, #2] ; fy_pos
LDRH    R0, [R4, #0] ; fx_pos
BL    lk_TextDisplay ; x,y,w,h,DspTarget,p_DspText,ExtInfo_Index,SrcData,invalidate

loc_201815E8:
ADD    SP, 0x100
POP    {R4-R7,PC}

loc_201815EC: ; это вывод невыбранного пункта, скролла нет и потому строку надо обрезать с учётом размера фонта
MOV    R0, R7
BL    strlen
MOV    R6, R0
ADD    R0, #0x4
BL    RtkGetMemory
MOV    R5, R0
ADD    R1, R6, 2
;MOV    R0, R5
BLX    __rt_memclr
MOV    R1, R7
MOV    R0, R5
BL    strcpy
LDRH    R3, [R4, #6] ; f_height
LDRH    R2, [R4, #4] ; f_width
LDRH    R1, [R4, #8] ; f_font
MOV    R0, R5
BL    StringAbbreviation ; p_String,v_FontId,v_Width,v_Height

MOV    R0, R5
BL    strlen
MOV    R1, R0
MOV    R3, 0
STR    R3, [SP]
MOV    R2, #0x81
MOV    R0, R5
BL    lk4_10WriteWindow ; v_String,v_StrLen,v_Format,v_Invalid,v_LcdId
MOV    R0, R5
BL    RtkReleaseMemory
B    loc_201815E8

.data

Link to comment
Share on other sites

4 часа назад, bugbug сказал:

Нижеприведенный код используется в ProfileSheduler_menu_fn.asm  и Talker_menu_enter.asm. В нем есть функция lk_DisplayFocusBG. В моем телефоне я нашел только lk_DisplayMenuFocusBG. Можно ли ее чем-то заменить, сократить или убрать? И обязателен ли этот код для построения меню?

lk_DisplayFocusBG и lk_DisplayMenuFocusBG - это удобные обёртки для lk_DisplayMenuFocusEffectBG.

Надо сравнить как сделано lk_DisplayFocusBG и написать его по аналогии (учитывая известные функции в lk_DisplayMenuFocusBG).

 

new_lk_DisplayFocusBG: ; p_Pos
PUSH {R1-R7,LR}
MOV R4, R0 ; p_Pos
BEQ loc_2199E30A
MOV R2, 0 ; v_Overlay
MOV R1, 0 ; v_Brightness
MOV R0, 2 ; v_UCSIndex - Тут на старом J210 могут быть нужные другие значения.
BL lk25_5GetUCSColor ; v_UCSIndex,v_Brightness,v_Overlay
MOV R5, R0
MOV R1, 100 ; v_Opacity
MOV R0, 2 ; v_UCSIndex
BL lk25_7GetUCSOpacity ; v_UCSIndex,v_Opacity
MOV R3, R0 ; v_Transparency
MOV R2, 3 ; v_TransparentType
MOV R1, 0 ; v_PositionType
MOV R0, R4 ; p_Pos
STR R1, [SP] ; v_ScreenId
STR R5, [SP, 4] ; v_Color
BL lk_MakeTransparentScreenColor ; p_Pos,v_PositionType,v_TransparentType,v_Transparency,v_ScreenId,v_Color
MOV R1, R4
LDR R0, =gs_DspMenu
BL lk_DisplayMenuFocusEffectBG ; p_DspMenu,s_Pos
loc_2199E30A:
POP {R1-R7,PC}
 

Но Focus-меню вообще непростое явление. Это совокупность разных костылей которые приделывались в последних моделях самсунгов, когда не хватало функционала и красивостей обычных menu-функций. Есть вероятность что кроме DisplayFocusBG там ещё будут проблемы (например с отсутствием обработки каких-либо аргументов или их кодов).

В итоге надо построить такое вот меню:

ScrShot_0.pngScrShot_1.pngScrShot_2.pngScrShot_3.pngScrShot_4.pngScrShot_5.png

ScrShot_6.pngScrShot_7.pngScrShot_8.png

  • Thanks 1

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

Link to comment
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
 Share




×
×
  • Create New...