Программируем пульты для работы с прошивкой HD2 beta

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby FarVoice » 11 Nov 2010, 13:10

Sekator500 wrote:Спасибо, буду копать в сторону менюшек если есть чем в меня кинуть по этому поводу буду не против 8-) Пока только понял что это команда currentUserInput но вот как ее перехватить не в каждом файле а глобально пока неясно, а то слишком геморно будет везде менять.

Этот номер не прокатит. userInput ничего возвращать не будет. Точнее будет. наверное, но пустую строку
Единственный реальный вариант - пилить DvdPlayer.
ASUS O!Play R1 (amp_r12_vrtn), xTreamer Pro (amp_r12_vrt), xTreamer Prodigy (iNeXT 2.14 r2), IconBIT HDR12L (amp_r12_vrt), 3Q F425HW (xds42gl_7725_r3), MyGica A11 (mygica_m3_20121222)
User avatar
FarVoice
Администратор
 
Posts: 8572
Joined: 03 Sep 2010, 01:27
Location: Russia, Moscow

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby FarVoice » 11 Nov 2010, 13:13

Попробую объяснить эту кухню. В примерах адреса из прошивки HD2 1.10.03, в других прошивках адреса естественно другие, но алгоритм тот же.

Вот текст процедуры:
Code: Select all
.text:00B98DB0             IRCodeTranslate:                         # CODE XREF: sub_40EBCC+3A8?p
.text:00B98DB0                                                      # sub_12F50D0+1A0?p ...
.text:00B98DB0
.text:00B98DB0             var_18          = -0x18
.text:00B98DB0             var_10          = -0x10
.text:00B98DB0             var_C           = -0xC
.text:00B98DB0             var_8           = -8
.text:00B98DB0             var_4           = -4
.text:00B98DB0             arg_0           =  0
.text:00B98DB0
.text:00B98DB0 5E 0F 1C 3C+                li      $gp, 0xF5DAE90
.text:00B98DB8 21 E0 99 03                 addu    $gp, $t9
.text:00B98DBC D8 FF BD 27                 addiu   $sp, -0x28
.text:00B98DC0 24 00 BF AF                 sw      $ra, 0x28+var_4($sp)
.text:00B98DC4 20 00 BE AF                 sw      $fp, 0x28+var_8($sp)
.text:00B98DC8 21 F0 A0 03                 move    $fp, $sp
.text:00B98DCC 10 00 BC AF                 sw      $gp, 0x28+var_18($sp)
.text:00B98DD0 28 00 C4 AF                 sw      $a0, 0x28+arg_0($fp)
.text:00B98DD4 D8 81 84 8F                 la      $a0, 0x1E40000
.text:00B98DD8 80 61 84 24                 addiu   $a0, (aSSCodeX - 0x1E40000)  # "%s-%s: Code %x\n"
.text:00B98DDC D8 81 85 8F                 la      $a1, 0x1E40000
.text:00B98DE0 90 61 A5 24                 addiu   $a1, (aRemotecontrol_ - 0x1E40000)  # "RemoteControl.cpp"
.text:00B98DE4 D8 81 86 8F                 la      $a2, 0x1E40000
.text:00B98DE8 70 61 C6 24                 addiu   $a2, (aIrcodetranslat - 0x1E40000)  # "IRCodeTranslate"
.text:00B98DEC 28 00 C7 8F                 lw      $a3, 0x28+arg_0($fp)
.text:00B98DF0 D0 73 99 8F                 la      $t9, printf
.text:00B98DF4 09 F8 20 03                 jalr    $t9 ; printf
.text:00B98DF8 00 00 00 00                 nop
.text:00B98DFC 10 00 DC 8F                 lw      $gp, 0x28+var_18($fp)
.text:00B98E00 28 00 C2 8F                 lw      $v0, 0x28+arg_0($fp)
.text:00B98E04 FF FF 43 30                 andi    $v1, $v0, 0xFFFF
.text:00B98E08 6C 68 02 24                 li      $v0, 0x686C
.text:00B98E0C 05 00 62 10                 beq     $v1, $v0, loc_B98E24
.text:00B98E10 00 00 00 00                 nop
.text:00B98E14 FF FF 02 24                 li      $v0, 0xFFFFFFFF
.text:00B98E18 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98E1C 9E 00 00 10                 b       loc_B99098
.text:00B98E20 00 00 00 00                 nop
.text:00B98E24              # ---------------------------------------------------------------------------
.text:00B98E24
.text:00B98E24             loc_B98E24:                              # CODE XREF: IRCodeTranslate+5C?j
.text:00B98E24 28 00 C3 8F                 lw      $v1, 0x28+arg_0($fp)
.text:00B98E28 FF 00 02 3C                 lui     $v0, 0xFF
.text:00B98E2C 24 10 62 00                 and     $v0, $v1, $v0
.text:00B98E30 03 14 02 00                 sra     $v0, 16
.text:00B98E34 FC FF 42 24                 nop
.text:00B98E38 1C 00 C2 AF                 sw      $v0, 0x28+var_C($fp)
.text:00B98E3C 1C 00 C3 8F                 lw      $v1, 0x28+var_C($fp)
.text:00B98E40 5C 00 62 2C                 sltiu   $v0, $v1, 0x5C
.text:00B98E44 92 00 40 10                 beqz    $v0, loc_B99090
.text:00B98E48 00 00 00 00                 nop
.text:00B98E4C 1C 00 C2 8F                 lw      $v0, 0x28+var_C($fp)
.text:00B98E50 80 18 02 00                 sll     $v1, $v0, 2
.text:00B98E54 D8 81 82 8F                 la      $v0, 0x1E40000
.text:00B98E58 A4 61 42 24                 addiu   $v0, (dword_1E461A4 - 0x1E40000)
.text:00B98E5C 21 10 62 00                 addu    $v0, $v1, $v0
.text:00B98E60 00 00 42 8C                 lw      $v0, 0($v0)
.text:00B98E64 21 10 5C 00                 addu    $v0, $gp
.text:00B98E68 08 00 40 00                 jr      $v0
.text:00B98E6C 00 00 00 00                 nop
.text:00B98E70              # ---------------------------------------------------------------------------
.text:00B98E70 01 00 02 24                 li      $v0, 1
.text:00B98E74 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98E78 87 00 00 10                 b       loc_B99098
.text:00B98E7C 00 00 00 00                 nop
.text:00B98E80              # ---------------------------------------------------------------------------
.text:00B98E80 02 00 03 24                 li      $v1, 2
.text:00B98E84 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98E88 83 00 00 10                 b       loc_B99098
.text:00B98E8C 00 00 00 00                 nop
.text:00B98E90              # ---------------------------------------------------------------------------
.text:00B98E90 13 00 02 24                 li      $v0, 0x13
.text:00B98E94 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98E98 7F 00 00 10                 b       loc_B99098
.text:00B98E9C 00 00 00 00                 nop
.text:00B98EA0              # ---------------------------------------------------------------------------
.text:00B98EA0 15 00 03 24                 li      $v1, 0x15
.text:00B98EA4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98EA8 7B 00 00 10                 b       loc_B99098
.text:00B98EAC 00 00 00 00                 nop
.text:00B98EB0              # ---------------------------------------------------------------------------
.text:00B98EB0 17 00 02 24                 li      $v0, 0x17
.text:00B98EB4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98EB8 77 00 00 10                 b       loc_B99098
.text:00B98EBC 00 00 00 00                 nop
.text:00B98EC0              # ---------------------------------------------------------------------------
.text:00B98EC0 16 00 03 24                 li      $v1, 0x16
.text:00B98EC4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98EC8 73 00 00 10                 b       loc_B99098
.text:00B98ECC 00 00 00 00                 nop
.text:00B98ED0              # ---------------------------------------------------------------------------
.text:00B98ED0 18 00 02 24                 li      $v0, 0x18
.text:00B98ED4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98ED8 6F 00 00 10                 b       loc_B99098
.text:00B98EDC 00 00 00 00                 nop
.text:00B98EE0              # ---------------------------------------------------------------------------
.text:00B98EE0 14 00 03 24                 li      $v1, 0x14
.text:00B98EE4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98EE8 6B 00 00 10                 b       loc_B99098
.text:00B98EEC 00 00 00 00                 nop
.text:00B98EF0              # ---------------------------------------------------------------------------
.text:00B98EF0 27 00 02 24                 li      $v0, 0x27
.text:00B98EF4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98EF8 67 00 00 10                 b       loc_B99098
.text:00B98EFC 00 00 00 00                 nop
.text:00B98F00              # ---------------------------------------------------------------------------
.text:00B98F00 29 00 03 24                 li      $v1, 0x29
.text:00B98F04 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F08 63 00 00 10                 b       loc_B99098
.text:00B98F0C 00 00 00 00                 nop
.text:00B98F10              # ---------------------------------------------------------------------------
.text:00B98F10 2D 00 02 24                 li      $v0, 0x2D
.text:00B98F14 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98F18 5F 00 00 10                 b       loc_B99098
.text:00B98F1C 00 00 00 00                 nop
.text:00B98F20              # ---------------------------------------------------------------------------
.text:00B98F20 2C 00 03 24                 li      $v1, 0x2C
.text:00B98F24 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F28 5B 00 00 10                 b       loc_B99098
.text:00B98F2C 00 00 00 00                 nop
.text:00B98F30              # ---------------------------------------------------------------------------
.text:00B98F30 2B 00 02 24                 li      $v0, 0x2B
.text:00B98F34 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98F38 57 00 00 10                 b       loc_B99098
.text:00B98F3C 00 00 00 00                 nop
.text:00B98F40              # ---------------------------------------------------------------------------
.text:00B98F40 2A 00 03 24                 li      $v1, 0x2A
.text:00B98F44 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F48 53 00 00 10                 b       loc_B99098
.text:00B98F4C 00 00 00 00                 nop
.text:00B98F50              # ---------------------------------------------------------------------------
.text:00B98F50 34 00 02 24                 li      $v0, 0x34
.text:00B98F54 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98F58 4F 00 00 10                 b       loc_B99098
.text:00B98F5C 00 00 00 00                 nop
.text:00B98F60              # ---------------------------------------------------------------------------
.text:00B98F60 31 00 03 24                 li      $v1, 0x31
.text:00B98F64 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F68 4B 00 00 10                 b       loc_B99098
.text:00B98F6C 00 00 00 00                 nop
.text:00B98F70              # ---------------------------------------------------------------------------
.text:00B98F70 33 00 02 24                 li      $v0, 0x33
.text:00B98F74 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98F78 47 00 00 10                 b       loc_B99098
.text:00B98F7C 00 00 00 00                 nop
.text:00B98F80              # ---------------------------------------------------------------------------
.text:00B98F80 12 00 03 24                 li      $v1, 0x12
.text:00B98F84 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F88 43 00 00 10                 b       loc_B99098
.text:00B98F8C 00 00 00 00                 nop
.text:00B98F90              # ---------------------------------------------------------------------------
.text:00B98F90 03 00 02 24                 li      $v0, 3
.text:00B98F94 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98F98 3F 00 00 10                 b       loc_B99098
.text:00B98F9C 00 00 00 00                 nop
.text:00B98FA0              # ---------------------------------------------------------------------------
.text:00B98FA0 FE FF 03 24                 li      $v1, 0xFFFFFFFE
.text:00B98FA4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98FA8 3B 00 00 10                 b       loc_B99098
.text:00B98FAC 00 00 00 00                 nop
.text:00B98FB0              # ---------------------------------------------------------------------------
.text:00B98FB0 FD FF 02 24                 li      $v0, 0xFFFFFFFD
.text:00B98FB4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98FB8 37 00 00 10                 b       loc_B99098
.text:00B98FBC 00 00 00 00                 nop
.text:00B98FC0              # ---------------------------------------------------------------------------
.text:00B98FC0 FC FF 03 24                 li      $v1, 0xFFFFFFFC
.text:00B98FC4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98FC8 33 00 00 10                 b       loc_B99098
.text:00B98FCC 00 00 00 00                 nop
.text:00B98FD0              # ---------------------------------------------------------------------------
.text:00B98FD0 F5 FF 02 24                 li      $v0, 0xFFFFFFF5
.text:00B98FD4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98FD8 2F 00 00 10                 b       loc_B99098
.text:00B98FDC 00 00 00 00                 nop
.text:00B98FE0              # ---------------------------------------------------------------------------
.text:00B98FE0 36 00 03 24                 li      $v1, 0x36
.text:00B98FE4 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98FE8 2B 00 00 10                 b       loc_B99098
.text:00B98FEC 00 00 00 00                 nop
.text:00B98FF0              # ---------------------------------------------------------------------------
.text:00B98FF0 FB FF 02 24                 li      $v0, 0xFFFFFFFB
.text:00B98FF4 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B98FF8 27 00 00 10                 b       loc_B99098
.text:00B98FFC 00 00 00 00                 nop
.text:00B99000              # ---------------------------------------------------------------------------
.text:00B99000 37 00 03 24                 li      $v1, 0x37
.text:00B99004 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B99008 23 00 00 10                 b       loc_B99098
.text:00B9900C 00 00 00 00                 nop
.text:00B99010              # ---------------------------------------------------------------------------
.text:00B99010 38 00 02 24                 li      $v0, 0x38
.text:00B99014 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B99018 1F 00 00 10                 b       loc_B99098
.text:00B9901C 00 00 00 00                 nop
.text:00B99020              # ---------------------------------------------------------------------------
.text:00B99020 11 00 03 24                 li      $v1, 0x11
.text:00B99024 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B99028 1B 00 00 10                 b       loc_B99098
.text:00B9902C 00 00 00 00                 nop
.text:00B99030              # ---------------------------------------------------------------------------
.text:00B99030 3E 00 02 24                 li      $v0, 0x3E
.text:00B99034 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B99038 17 00 00 10                 b       loc_B99098
.text:00B9903C 00 00 00 00                 nop
.text:00B99040              # ---------------------------------------------------------------------------
.text:00B99040 F3 FF 03 24                 li      $v1, 0xFFFFFFF3
.text:00B99044 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B99048 13 00 00 10                 b       loc_B99098
.text:00B9904C 00 00 00 00                 nop
.text:00B99050              # ---------------------------------------------------------------------------
.text:00B99050 F2 FF 02 24                 li      $v0, 0xFFFFFFF2
.text:00B99054 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B99058 0F 00 00 10                 b       loc_B99098
.text:00B9905C 00 00 00 00                 nop
.text:00B99060              # ---------------------------------------------------------------------------
.text:00B99060 63 00 03 24                 li      $v1, 0x63
.text:00B99064 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B99068 0B 00 00 10                 b       loc_B99098
.text:00B9906C 00 00 00 00                 nop
.text:00B99070              # ---------------------------------------------------------------------------
.text:00B99070 96 FF 02 24                 li      $v0, 0xFFFFFF96
.text:00B99074 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B99078 07 00 00 10                 b       loc_B99098
.text:00B9907C 00 00 00 00                 nop
.text:00B99080              # ---------------------------------------------------------------------------
.text:00B99080 39 00 02 24                 li      $v0, 0x39      # 7B3EE0
.text:00B99084 18 00 C2 AF                 sw      $v0, 0x28+var_10($fp)
.text:00B99088 03 00 00 10                 b       loc_B99098
.text:00B9908C 00 00 00 00                 nop

.text:00B99090              # ---------------------------------------------------------------------------
.text:00B99090
.text:00B99090             loc_B99090:                              # CODE XREF: IRCodeTranslate+94?j
.text:00B99090 FF FF 03 24                 li      $v1, 0xFFFFFFFF
.text:00B99094 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B99098
.text:00B99098             loc_B99098:                              # CODE XREF: IRCodeTranslate+6C?j
.text:00B99098                                                      # IRCodeTranslate+C8?j ...
.text:00B99098 18 00 C2 8F                 lw      $v0, 0x28+var_10($fp)
.text:00B9909C 21 E8 C0 03                 move    $sp, $fp
.text:00B990A0 24 00 BF 8F                 lw      $ra, 0x28+var_4($sp)
.text:00B990A4 20 00 BE 8F                 lw      $fp, 0x28+var_8($sp)
.text:00B990A8 28 00 BD 27                 addiu   $sp, 0x28
.text:00B990AC 08 00 E0 03                 jr      $ra
.text:00B990B0 00 00 00 00                 nop
.text:00B990B0              # End of function IRCodeTranslate

А вот таблица смещений:
Code: Select all
.rodata:01E461A4 C0 52 A2 F0                 .word 0xF0A252C0
.rodata:01E461A8 B0 53 A2 F0                 .word 0xF0A253B0
.rodata:01E461AC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461B0 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461B4 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461B8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461BC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461C0 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461C4 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461C8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461CC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461D0 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461D4 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461D8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461DC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461E0 00 53 A2 F0                 .word 0xF0A25300
.rodata:01E461E4 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461E8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461EC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E461F0 E0 52 A2 F0                 .word 0xF0A252E0
.rodata:01E461F4 B0 52 A2 F0                 .word 0xF0A252B0
.rodata:01E461F8 F0 52 A2 F0                 .word 0xF0A252F0
.rodata:01E461FC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46200 C0 53 A2 F0                 .word 0xF0A253C0
.rodata:01E46204 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46208 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4620C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46210 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46214 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46218 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4621C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46220 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46224 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46228 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4622C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46230 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46234 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46238 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4623C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46240 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46244 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46248 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4624C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46250 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46254 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46258 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4625C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46260 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46264 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46268 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4626C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46270 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46274 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46278 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4627C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46280 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46284 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46288 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E4628C 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46290 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E46294 40 53 A2 F0                 .word 0xF0A25340
.rodata:01E46298 D0 52 A2 F0                 .word 0xF0A252D0
.rodata:01E4629C A0 53 A2 F0                 .word 0xF0A253A0
.rodata:01E462A0 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E462A4 90 52 A2 F0                 .word 0xF0A25290
.rodata:01E462A8 50 53 A2 F0                 .word 0xF0A25350
.rodata:01E462AC 60 53 A2 F0                 .word 0xF0A25360
.rodata:01E462B0 70 53 A2 F0                 .word 0xF0A25370
.rodata:01E462B4 80 53 A2 F0                 .word 0xF0A25380
.rodata:01E462B8 90 53 A2 F0                 .word 0xF0A25390
.rodata:01E462BC E0 53 A2 F0                 .word 0xF0A253E0
.rodata:01E462C0 F0 53 A2 F0                 .word 0xF0A253F0
.rodata:01E462C4 D0 53 A2 F0                 .word 0xF0A253D0
.rodata:01E462C8 00 54 A2 F0                 .word 0xF0A25400
.rodata:01E462CC 10 54 A2 F0                 .word 0xF0A25410
.rodata:01E462D0 20 54 A2 F0                 .word 0xF0A25420
.rodata:01E462D4 30 54 A2 F0                 .word 0xF0A25430
.rodata:01E462D8 40 54 A2 F0                 .word 0xF0A25440
.rodata:01E462DC 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E462E0 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E462E4 40 52 A2 F0                 .word 0xF0A25240
.rodata:01E462E8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E462EC 30 52 A2 F0                 .word 0xF0A25230
.rodata:01E462F0 10 53 A2 F0                 .word 0xF0A25310
.rodata:01E462F4 60 52 A2 F0                 .word 0xF0A25260
.rodata:01E462F8 50 54 A2 F0                 .word 0xF0A25450
.rodata:01E462FC 20 53 A2 F0                 .word 0xF0A25320
.rodata:01E46300 30 53 A2 F0                 .word 0xF0A25330
.rodata:01E46304 A0 52 A2 F0                 .word 0xF0A252A0
.rodata:01E46308 70 52 A2 F0                 .word 0xF0A25270
.rodata:01E4630C 50 52 A2 F0                 .word 0xF0A25250
.rodata:01E46310 80 52 A2 F0                 .word 0xF0A25280

можете сильно не вникать :) это на самом деле case. Реализован так: берётся код кнопки, вычитается 4 (у асус коды кнопок начинаются с 4) , умножается на 4. Берётся значение из таблицы с этим смещением и делается переход на это значение. Пример:
макс значение в табл - 450, оно указывает на 00B99090.
Для клавиши 4 - значение 2C0.
Считаем: 450 - 2C0 = 190. 00B99090 - 190 = B98F00
попадаем на
Code: Select all
.text:00B98F00              # ---------------------------------------------------------------------------
.text:00B98F00 29 00 03 24                 li      $v1, 0x29
.text:00B98F04 18 00 C3 AF                 sw      $v1, 0x28+var_10($fp)
.text:00B98F08 63 00 00 10                 b       loc_B99098
.text:00B98F0C 00 00 00 00                 nop

Здесь запихивается значение 29 (код внутренней команды stop) в регистр, регистр кладётся в переменную и переход на конец

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

Теперь по кнопкам:
полный код кнопки, получаемый с IR - четыре байта
XXYYZZZZ
YY - код клавиши,
XX - код клавиши XOR FF (для проверки драйвером),
ZZZZ - код устройства (производителя)

Код устройства у нас 688C у IconBit HDS7L и подобных 9F00. Хранится по адресу 00798E08

Таблицы кодов пультов:
код внутреняя команда действие
Code: Select all
IconBit
0x00   0x23      7
0x01   0x06      TV SYS
0x02   0x17      OK
0x03   0x2C      >>
0x04   0x20      4
0x05   0x1D      1
0x06   0x15      LEFT
0x07   0x2D      <<
0x08   0x21      5
0x09   0x1E      2
0x0A   0x14      DOWN
0x0B   0x2A      >>|
0x0C   0x25      9
0x0D   0x30      GOTO
0x0E   0x16      RIGHT
0x0F   0x2B      |<<
0x10   0x24      8
0x11   0x1C      0
0x13   0x29      STOP
0x14   0x22      6
0x15   0x1F      3
0x16   0x3E      MENU
0x17   0x37      VOL+
0x1A   0x03      SETUP
0x40   0x3B      ZOOM-
0x41   0x10      COPY
0x43   0x13      UP
0x44   0x36      ZOOM+
0x45   0x1B      CM SKIP
0x46   0x1A      INS REPLAY
0x47   0x12      HOME
0x48   0x33      SUBTITLE
0x49   0x34      AUDIO
0x4A   0x66      BROWSER
0x4C   0x32      A-B
0x4D   0x2E      SLOW
0x4E   0x8F      CONFIRM
0x4F   0x18      RETURN
0x50   0x27      PLAY
0x52   0x02      INFO
0x54   0x38      VOL-
0x55   0x90      SELECT
0x56   0x92      MUSIC
0x57   0x01      POWER
0x58   0x31      REPEAT
0x59   0x35      ANGLE
0x5A   0x28      PAUSE
0x5B   0x39      MUTE

Code: Select all
ASUS
0x04    0x29             STOP
0x05    0xFFFFFFFB       play_music (нет на пульте)
0x13    0x2A             NEXT
0x17    0x2C             FFWD
0x18    0x27             PLAY/PAUSE
0x19    0x2B             PREV
0x1B    0x37             VOL+
0x40    0x12             GUIDE/HOME
0x41    0x2D             FRWD
0x42    0x36             ZOOM
0x44    0x18             RETURN
0x45    0x03             SETUP
0x46    0xFFFFFFFE       movies
0x47    0xFFFFFFFD       music
0x48    0xFFFFFFFC       photo
0x49    0xFFFFFFF5       RANDOM
0x4A    0x11             OPTION
0x4B    0x3E             FILE
0x4C    0x38             VOL-
0x4D    0xFFFFFFF3       NAS
0x4E    0xFFFFFFF2       internet
0x4F    0x63             EJECT
0x50    0xFFFFFF96       DISC MENU
0x51    0x39             MUTE
0x54    0x02             DISPLAY/INFO
0x56    0x01             POWER
0x57    0x34             AUDIO
0x58    0x15             LEFT
0x5A    0x31             REPEAT
0x5B    0x33             SUBTITLE
0x5C    0x14             DOWN
0x5D    0x17             OK
0x5E    0x13             UP
0x5F    0x16             RIGHT


Ну и напоследок коды внутренних команд
Code: Select all
13          up 
14          down   
15          left   
16          right   
3          setup   
1          power   
78          option_red 
79          option_green   
7B          option_blue
7A          option_yellow 
2          display
4          eject   
6          pscan   
FFFFFF86     hdcp_on
FFFFFF85     hdcp_off   
5          source 
B          hdd
C          dvd
10          file_copy   
9          schedule   
3E          option 
11          menu   
12          guide   
FFFFFF99     timelogging
17          select 
18          return 
19          delete 
28          pause   
27          play
29          stop   
2C          ffwd   
2D          frwd   
2E          sfwd   
22          srwd   
41          next_file   
2A          next   
42          prev_file   
2B          prev   
1A          instant_replay 
1B          cmskip 
30          search 
39          mute   
31          repeat 
34          audio   
33          subtitle   
35          angle
36          zoom   
3A          zoom_in
3B          zoom_out   
45          rotate 
FFFFFF90     playattime 
FFFFFF93     IM_Status   
FFFFFF92     IM_File_Status 
FFFFFF91     IM_MSG_TXT


Огромное спасибо LossLess, что разжевал мне всё это :) Теперь передаю дальше.
Кст, он отказался от case и делает просто Command = array[Ir_code]
т.е. он набивает в таблицу коды внутренних команд и выбирает значение в зависимости от кода кнопки. Экономия места потрясающая :)

PS: Вот так можно вычислить коды пульта - viewtopic.php?f=14&t=102
ASUS O!Play R1 (amp_r12_vrtn), xTreamer Pro (amp_r12_vrt), xTreamer Prodigy (iNeXT 2.14 r2), IconBIT HDR12L (amp_r12_vrt), 3Q F425HW (xds42gl_7725_r3), MyGica A11 (mygica_m3_20121222)
User avatar
FarVoice
Администратор
 
Posts: 8572
Joined: 03 Sep 2010, 01:27
Location: Russia, Moscow

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby andreyka459 » 11 Nov 2010, 15:53

дополнил таблицы соответствия.
http://narod.ru/disk/27315567000/%D0%BA ... B.xls.html
andreyka459
 
Posts: 106
Joined: 09 Nov 2010, 23:43

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Sekator500 » 11 Nov 2010, 19:51

Жуть какая, нет в жизни счастья :mrgreen: Я вот думаю было бы здорово чтоб он вместо пробела на неизвестную трансляцию выдавал посланный код, темболее что он это и так делает но не на команду currentUserInput а просто эхом в консоль. Завтра порулю в эту сторону.

Кстати вот коды с APACER AL460 может кому пригодится:

Power = e51ab649
Home = e41bb649
Mute = ad52b649
Display = bb44b649
Setup = af50b649
Vol- = b04fb649
Vol+ = ae51b649
UP = b54ab649
DOWN = b14eb649
LEFT = ed12b649
RIGHT = b44bb649
Enter/PLay = f50ab649
Stop = ea15b649
Back = bc43b649
FR = f609b649
FF = f20db649
Pause/Step = fc03b649
Prev = e817b649
Next = a857b649
Slow = f00fb649
Subtitle = b946b649
Audio = ba45b649
Zoom = ab54b649
TV System = b847b649
Repeat = f708b649
Option = fb04b649
User avatar
Sekator500
 
Posts: 457
Joined: 11 Nov 2010, 00:13
Location: Киев

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Lossless » 11 Nov 2010, 23:15

Небольшая полезняшка для Иды:
маленький скриптик, помогающий понять работу case в асме для MIPS

File --> IDC Command... --> вставляем текст
Code: Select all
auto st_proc, gp, table, count, start, i, st;
st_proc = 0xB98DB0;
table   = 0x1E461A4;
count   = 0x5C;
start   = 4;
gp      = Eval(GetOpnd(st_proc, 1));
for (i = 0; i < count; i++) {
  MakeUnknown(table + (i*4), 4, DOUNK_SIMPLE);
  MakeDword(table + (i*4));
  MakeComm(Dword(table + (i*4)) + st_proc + gp, "");
}
for (i = 0; i < count; i++) {
  st = CommentEx(Dword(table + (i*4)) + st_proc + gp, 0);
  if (st == "")
    MakeComm(Dword(table + (i*4)) + st_proc + gp, form("case 0x%2.2x", i + start));
  else
    MakeComm(Dword(table + (i*4)) + st_proc + gp, st + form(", 0x%2.2x", i + start));
}


Правим константы в начале по примеру ниже:
.text:00B98DB0              # IRCodeTranslate(int)
.text:00B98DB0 _Z15IRCodeTranslatei: # CODE XREF: sub_40EBCC+3A8p
.text:00B98DB0 # sub_12F50D0+1A0p ...
.text:00B98DB0
.text:00B98DB0 var_18 = -0x18
.text:00B98DB0 var_10 = -0x10
.text:00B98DB0 var_C = -0xC
.text:00B98DB0 var_8 = -8
.text:00B98DB0 var_4 = -4
.text:00B98DB0 arg_0 = 0
.text:00B98DB0
.text:00B98DB0 5E 0F 1C 3C+ li $gp, 0xF5DAE90 # адрес начала процедуры (st_proc = 0xB98DB0)
.text:00B98DB8 21 E0 99 03 addu $gp, $t9
.text:00B98DBC D8 FF BD 27 addiu $sp, -0x28
.text:00B98DC0 24 00 BF AF sw $ra, 0x28+var_4($sp)
.text:00B98DC4 20 00 BE AF sw $fp, 0x28+var_8($sp)
.text:00B98DC8 21 F0 A0 03 move $fp, $sp
.text:00B98DCC 10 00 BC AF sw $gp, 0x28+var_18($sp)
.text:00B98DD0 28 00 C4 AF sw $a0, 0x28+arg_0($fp)
.text:00B98DD4 D8 81 84 8F la $a0, 0x1E40000
.text:00B98DD8 80 61 84 24 addiu $a0, (aSSCodeX - 0x1E40000) # "%s-%s: Code %x\n"
.text:00B98DDC D8 81 85 8F la $a1, 0x1E40000
.text:00B98DE0 90 61 A5 24 addiu $a1, (aRemotecontrol_ - 0x1E40000) # "RemoteControl.cpp"
.text:00B98DE4 D8 81 86 8F la $a2, 0x1E40000
.text:00B98DE8 70 61 C6 24 addiu $a2, (aIrcodetranslat - 0x1E40000) # "IRCodeTranslate"
.text:00B98DEC 28 00 C7 8F lw $a3, 0x28+arg_0($fp)
.text:00B98DF0 D0 73 99 8F la $t9, printf
.text:00B98DF4 09 F8 20 03 jalr $t9 ; printf
.text:00B98DF8 00 00 00 00 nop
.text:00B98DFC 10 00 DC 8F lw $gp, 0x28+var_18($fp)
.text:00B98E00 28 00 C2 8F lw $v0, 0x28+arg_0($fp)
.text:00B98E04 FF FF 43 30 andi $v1, $v0, 0xFFFF
.text:00B98E08 6C 68 02 24 li $v0, 0x686C
.text:00B98E0C 05 00 62 10 beq $v1, $v0, loc_B98E24
.text:00B98E10 00 00 00 00 nop
.text:00B98E14 FF FF 02 24 li $v0, 0xFFFFFFFF
.text:00B98E18 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98E1C 9E 00 00 10 b loc_B99098
.text:00B98E20 00 00 00 00 nop
.text:00B98E24 # ---------------------------------------------------------------------------
.text:00B98E24
.text:00B98E24 loc_B98E24: # CODE XREF: IRCodeTranslate(int)+5Cj
.text:00B98E24 28 00 C3 8F lw $v1, 0x28+arg_0($fp)
.text:00B98E28 FF 00 02 3C lui $v0, 0xFF
.text:00B98E2C 24 10 62 00 and $v0, $v1, $v0
.text:00B98E30 03 14 02 00 sra $v0, 16
.text:00B98E34 FC FF 42 24 addiu $v0, -4 # стартовый элемент case (если нет такой строки - то 0) start = 4
.text:00B98E38 1C 00 C2 AF sw $v0, 0x28+var_C($fp)
.text:00B98E3C 1C 00 C3 8F lw $v1, 0x28+var_C($fp)
.text:00B98E40 5C 00 62 2C sltiu $v0, $v1, 0x5C # кол-во элементов case (count = 0x5C)
.text:00B98E44 92 00 40 10 beqz $v0, loc_B99090
.text:00B98E48 00 00 00 00 nop
.text:00B98E4C 1C 00 C2 8F lw $v0, 0x28+var_C($fp)
.text:00B98E50 80 18 02 00 sll $v1, $v0, 2
.text:00B98E54 D8 81 82 8F la $v0, 0x1E40000
.text:00B98E58 A4 61 42 24 addiu $v0, (dword_1E461A4 - 0x1E40000) # адрес таблицы переходов (table = 0x1E461A4)
.text:00B98E5C 21 10 62 00 addu $v0, $v1, $v0
.text:00B98E60 00 00 42 8C lw $v0, 0($v0)
.text:00B98E64 21 10 5C 00 addu $v0, $gp
.text:00B98E68 08 00 40 00 jr $v0
.text:00B98E6C 00 00 00 00 nop
.text:00B98E70 # ---------------------------------------------------------------------------
.text:00B98E70 01 00 02 24 li $v0, 1
.text:00B98E74 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98E78 87 00 00 10 b loc_B99098
.text:00B98E7C 00 00 00 00 nop
.text:00B98E80 # ---------------------------------------------------------------------------
...

Всё. Жмем OK и скрипт сам расставляет значения в виде комментов.
Xtreamer Prodigy (X3D_4.00_r0)
User avatar
Lossless
 
Posts: 358
Joined: 20 Oct 2010, 11:12
Location: Russia

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Virtual » 11 Nov 2010, 23:26

большая имха! case в топку! то что сделал ты на порядок лучше :). если один исправит dvdlayer то другой на счет раз вставит любой пульт с любым набором комманд :). прям в HEX редакторе, даж не думая и не зная о системе комманд mips процессоров :).
+ набор комманд можно использовать значительно больше чем при компиляции прошивки :)
+ еще много много места остается... ну мало ли чего еще "приспичит"

ЗЫ хочу пульт кнопков так на 60+10 :).
марсы: HDS7 (смотрелка AMP скин vrt )
HDR12 AMP (обычно сервер с RAM 256 и 2 SATA диска 2T+)//но очень иногда оцифровка видео
XTR PRO(AMP, HTTP(S) NFS SMB FTP сервер +trans2.90 + 2 SATA диска 2T+
сатурны: XTR Prodigy, R6S(512Mb_NAND), HD900A(_MD*) прошивка
User avatar
Virtual
 
Posts: 6862
Joined: 01 Oct 2010, 17:17
Location: RU

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Lossless » 11 Nov 2010, 23:44

Virtual wrote:ЗЫ хочу пульт кнопков так на 60+10 :).

Такой пойдет?
:roll:
Xtreamer Prodigy (X3D_4.00_r0)
User avatar
Lossless
 
Posts: 358
Joined: 20 Oct 2010, 11:12
Location: Russia

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby FarVoice » 11 Nov 2010, 23:48

Lossless wrote:
Virtual wrote:ЗЫ хочу пульт кнопков так на 60+10 :).

Такой пойдет?
:roll:

+ 100 Артемий жжот :))
ASUS O!Play R1 (amp_r12_vrtn), xTreamer Pro (amp_r12_vrt), xTreamer Prodigy (iNeXT 2.14 r2), IconBIT HDR12L (amp_r12_vrt), 3Q F425HW (xds42gl_7725_r3), MyGica A11 (mygica_m3_20121222)
User avatar
FarVoice
Администратор
 
Posts: 8572
Joined: 03 Sep 2010, 01:27
Location: Russia, Moscow

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Virtual » 12 Nov 2010, 00:04

уау вот это штучка :).
марсы: HDS7 (смотрелка AMP скин vrt )
HDR12 AMP (обычно сервер с RAM 256 и 2 SATA диска 2T+)//но очень иногда оцифровка видео
XTR PRO(AMP, HTTP(S) NFS SMB FTP сервер +trans2.90 + 2 SATA диска 2T+
сатурны: XTR Prodigy, R6S(512Mb_NAND), HD900A(_MD*) прошивка
User avatar
Virtual
 
Posts: 6862
Joined: 01 Oct 2010, 17:17
Location: RU

Re: Программируем пульты для работы с прошивкой HD2 beta

Postby Olegin » 12 Nov 2010, 00:23

Вот вам пульт... :)
reset.jpg
reset.jpg (20.76 KiB) Viewed 6765 times
Asus O!Play R1 (amp, vrt), xTreamer Pro (amp, vrt), Iconbit 7L(amp, vrt), Iconbit 12L(amp, vrt/12l), Iconbit 1003(3Dgui)
Olegin
 
Posts: 1243
Joined: 04 Sep 2010, 20:13
Location: Ufa, Russia

PreviousNext

Return to ASUS

Who is online

Users browsing this forum: No registered users and 18 guests