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

а что значит 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

Share this post


Link to post
Share on other sites

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

 


 

 

 

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

 

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

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

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

Share this post


Link to post
Share on other sites

Хочу сделать себе патч 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)
 

 

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

В Talker_menu_enter.asm

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

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

Спасибо!

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
2 часа назад, bugbug сказал:

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

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


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
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

Share this post


Link to post
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
изменил максимальный размер дефолтного имени.

Share this post


Link to post
Share on other sites
2 часа назад, bugbug сказал:

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

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

  • Thanks 1

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

Share this post


Link to post
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, мобила перезагружается. Не могли бы Вы подсказать, как прописать блок с годом. Заранее благодарю!

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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

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...