Autor Tópico: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR  (Lida 91608 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #30 Online: Março 20, 2011, 12:55:01 am »
Obrigado novamente rictad, pela continuação das explicações!
Eu consegui, lendo atentamente o que você escreveu, entender a parte das modificações no MIPS Assembly com o IDA (apesar das curiosas peculiaridades do MIPS Assembly, não fica tão difícil para quem tem um pouco de familiaridade com o ARM Assembly).
Já a parte "Linux" do processo foi mais difícil pra mim. Não tinha a menor idéia do que era o Buildroot, ou NTFS-3G, etc. De qualquer modo fui atrás para decobrir do que se tratava, e fiquei bastante impressionado. É incrível a quantidade de coisas que nós podemos aprender seguindo as trilhas que você deixa com tanto cuidado e detalhismo.

Tenho notado que nos últimos tempos a maioria dos aparelhos eletrônicos de áudio-vídeo possuem firmware com Linux embarcado (ex: Media Players, Blu-ray Players, STBs, TVs, etc.). Listo abaixo alguns exemplos interessantes:

1- Modificações de firmware no WDTV: http://root.unknown.sk/wdtv/wiki/doku.php?id=wdtv_firmware_hacks
Pode-se observar no link que passei, que existem 2 tipos principais de firmware alternativo para o WDTV, sendo um tradicional, e outro chamado ext3-boot, que de certa maneira lembra o Mini Modo de Desenvolvimento que você quer implantar para o Zinwell (ou seja, o boot é feito pelo pendrive, o qual deve conter o firmware a ser testado: o interessante é que nesse caso não há a limitação de tamanho da flash, podendo-se criar firmwares de tamanhos bem grandes...).

2- Modificações de firmware das TVs Samsung (SamyGo): http://sourceforge.net/apps/mediawiki/samygo/index.php?title=Main_Page
Neste caso a curiosidade é o sistema de arquivos proprietário da Samsung (RFS), que acaba causando dificuldades adicionais no processo de hacking.

3- Por último, gostaria de lembrar de uma tentativa frustrada de hacking, a dos Blu-ray players com Mediatek MT8520: http://hej456.com/forum/viewtopic.php?t=832&postdays=0&postorder=asc&start=0&sid=171c409203bd52ebdb2ee715c2dab9b0
Nem o NewAge conseguiu desvendar o algorítmo de compressão/descompressão usado (provavelmente por Hardware, diferente dos MT13x9, que tinham um algoritmo de compressão mais simples, e cujo descompressor ficava no próprio firmware).

A minha intenção em descrever os exemplos acima foi a de ressaltar que para modificações de firmwares dos mais diversos aparelhos na atualidade, é necessário um conjunto de conhecimentos que envolve Linux, Assembly (ARM, MIPS, x86, etc.) e de preferência um conhecimento aprofundado em Compressão de Dados (para os casos mais difíceis como o item 3).
Além disso, o que já foi feito nos itens 1 e 2 pode servir de inspiração para os mais variados aparelhos com Linux embarcado, apesar de que as modificações criadas para esses aparelhos (itens 1 e 2) nunca forma tão claramente explicadas como as modificações que o rictad já fez (tanto no LG DV397H como no Zinwell "Tijolão"). Pelo contrário, os hackers "gostam" de transmitir comunicados simplistas, quase em código, e dão a impressão de não querer transmitir os seus feitos de modo didático...

rictad,
Você já conseguiu alguma pista sobre a localização e funcionamento das rotinas do menu? Pergunto isso pois, caso seja possível o suporte a NTFS, talvez seja necessária a seleção do tipo de sistema de arquivos usado (ext3 ou NTFS), através do menu...
« Última modificação: Março 20, 2011, 12:59:35 am por zeurt »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #31 Online: Março 23, 2011, 06:48:25 am »
rictad,
Você já conseguiu alguma pista sobre a localização e funcionamento das rotinas do menu? Pergunto isso pois, caso seja possível o suporte a NTFS, talvez seja necessária a seleção do tipo de sistema de arquivos usado (ext3 ou NTFS), através do menu...

Olá zeurt! Consegui apenas algumas poucas coisas em relação à GUI. Acho que é possível redirecionar os apontamentos às strings "Sim" e "Não" (no menu que pergunta se deseja formatar) para strings "FAT32" (ou "NTFS") e "ext3", por exemplo. Daí a escolha "ext3" continuará executando o comando "mke2fs", que foi fácil de achar procurando por essa string no código. Mas ainda não procurei descobrir como é feita a execução desse comando. Descobrindo como, será possível redirecionar a outra opção à execução de um comando "mkfs.vfat" ou "mkntfs" de uma forma semelhante, eu acho.

1- Modificações de firmware no WDTV: http://root.unknown.sk/wdtv/wiki/doku.php?id=wdtv_firmware_hacks
Pode-se observar no link que passei, que existem 2 tipos principais de firmware alternativo para o WDTV, sendo um tradicional, e outro chamado ext3-boot, que de certa maneira lembra o Mini Modo de Desenvolvimento que você quer implantar para o Zinwell (ou seja, o boot é feito pelo pendrive, o qual deve conter o firmware a ser testado: o interessante é que nesse caso não há a limitação de tamanho da flash, podendo-se criar firmwares de tamanhos bem grandes...).

Isso é interessante. Tem até versão com suporte a CD/DVD externo.



Consegui retirar o bug do closed caption na versão 1.14.4. Então fiz as modificações para aceitar os 3 controles, incluí suporte ao controle do Semp DC2008H (ainda não testado). Agradecimentos ao rafael_netto pelos códigos daquele controle. Retirei a limitação do tamanho mínimo dos HDs externos (que era de 32 GB) e fiz a versão para o "tijolão". Antes de disponibilizar os firmwares, vou explicar o que foi feito.

Eu obtive a versão 1.14.2, que parece ter sido usada como testes para a função PVR com agendamento. Agradecimentos ao JC. Essa versão, assim como a 1.13.6, não possui bug algum no closed caption. Não testei tudo, então não sei como estavam as demais funções. Mas o closed caption estava funcionando normalmente. O que ocorre é que esses firmwares tem duas rotinas relacionadas ao CC. Uma é para habilitar/desabilitar o closed caption e a outra é para mostrar/ocultar a legenda do CC, mesmo ele estando habilitado. No firmware 1.14.4, a rotina que habilita a legenda é a sub_45ACD4. Para habilitar, devemos chamá-la com o valor 1 no registrado $a0. Para desabilitar, o valor deve ser 0. Já a rotina que deixa ou não ser mostrado o quadro de legendas do CC é a sub_4A2F18 e também tem como entrada o registrador $a0. Para chegar a essas rotinas, procurei pelas strings "Enable CC" e "Show CC" que são mostradas no console (com cabo serial) quando habilitamos ou desabilitamos o closed caption.

O motivo para ter duas talvez seja o desejo ou necessidade de "desabilitar" temporariamente o closed caption enquanto se faz alguma operação. Por exemplo, ao se conectar um dispositivo na entrada USB, aparece na tela o quadro de mensagens com a informação "USB Conectado!". Se o CC estiver habilitado, poderia dar problemas. O mesmo poderia acontecer ao acessar o menu. Porém, ao que parece, as próprias rotinas da interface gráfica se encarregam de resolver esse conflito, desabilitando temporariamente a visualização do CC enquanto alguma outra informação é exibida na tela. Por isso, não havia nenhuma preocupação em desabilitar o CC quando se exibia mensagens na tela nas versões 1.13.6 e 1.14.2.

Já na versão 1.14.4, estranhamente as rotinas responsáveis pela exibição do closed caption (as duas) são chamadas pela rotina que exibe a informação de dispositivo USB conectado/desconectado. E isso ocorre duas vezes, sendo a primeira para desabilitar o CC, antes da exibição da mensagem, e a segunda para habilitar, após a exibição. Há também outra rotina que as chama, duas vezes e da mesma forma. Essa rotina é bem grande e tem relação com diversas funções que exibem informações na tela, entre elas a de atualização de firmware. E, por fim, outra rotina faz três chamadas, mas sempre ligando o CC. Essa parece estar ligada à programação de canais.

Portanto, ao todo são 3 bugs de CC. Eu simplesmente retirei essas chamadas anormais às rotinas "Enable CC" e "Show CC" e tudo voltou a funcionar como deveria. Seguem os pontos:

Código: [Selecionar]
.text:0045AD20 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:0045AD24 21 20 00 00                             move    $a0, $0          # Bug CC desliga
.text:0045AD28 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:0045AD2C 02 91 10 00                             srl     $s2, $s0, 4
.text:0045AD30 18 00 BC 8F                             lw      $gp, 0x40+var_28($sp)
.text:0045AD34 21 20 00 00                             move    $a0, $0
.text:0045AD38 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:0045AD3C 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop

Código: [Selecionar]
.text:0045B0B4 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:0045B0B8 02 AA 02 92                             lbu     $v0, (byte_C3AA02 - 0xC40000)($s0)
.text:0045B0BC 05 00 40 14                             bnez    $v0, loc_45B0D4
.text:0045B0C0 01 00 04 24                             li      $a0, 1  # Bug CC liga
.text:0045B0C4 1C 00 BF 8F                             lw      $ra, 0x20+var_4($sp)
.text:0045B0C8 18 00 B0 8F                             lw      $s0, 0x20+var_8($sp)
.text:0045B0CC 08 00 E0 03                             jr      $ra
.text:0045B0D0 20 00 BD 27                             addiu   $sp, 0x20
.text:0045B0D4                          # ---------------------------------------------------------------------------
.text:0045B0D4
.text:0045B0D4                         loc_45B0D4:                              # CODE XREF: sub_45B094+28_j
.text:0045B0D4 09 F8 20 03                             jalr    $t9            #  -- alterar para nop
.text:0045B0D8 00 00 00 00                             nop
.text:0045B0DC 10 00 BC 8F                             lw      $gp, 0x20+var_10($sp)
.text:0045B0E0 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:0045B0E4 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop

Código: [Selecionar]
.text:004A809C 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:004A80A0 01 00 02 24                             li      $v0, 1
.text:004A80A4 8C 4C 62 A0                             sb      $v0, 0x4C8C($v1)
.text:004A80A8 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:004A80AC 21 20 00 00                             move    $a0, $0          # Bug CC desliga
.text:004A80B0 18 00 BC 8F                             lw      $gp, 0x40+var_28($sp)
.text:004A80B4 21 20 00 00                             move    $a0, $0
.text:004A80B8 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:004A80BC 80 80 92 8F                             la      $s2, unk_CB0000
.text:004A80C0 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop

Código: [Selecionar]
.text:004A8670 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:004A8674 8C 4C 60 A0                             sb      $0, 0x4C8C($v1)
.text:004A8678 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:004A867C 01 00 04 24                             li      $a0, 1           # Bug CC liga
.text:004A8680 18 00 BC 8F                             lw      $gp, 0x60+var_48($sp)
.text:004A8684 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:004A8688 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop
.text:004A868C 01 00 04 24                             li      $a0, 1

Código: [Selecionar]
.text:004D2CE0 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:004D2CE4 01 00 04 24                             li      $a0, 1           # Bug CC liga
.text:004D2CE8 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:004D2CEC E0 AF 40 A2                             sb      $0, -0x5020($s2)
.text:004D2CF0 10 00 BC 8F                             lw      $gp, 0x28+var_18($sp)
.text:004D2CF4 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:004D2CF8 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop
.text:004D2CFC 01 00 04 24                             li      $a0, 1

Código: [Selecionar]
.text:004D2D70 01 00 04 24                             li      $a0, 1           # Bug CC liga
.text:004D2D74 18 97 99 8F                             la      $t9, sub_4A2C58  # Mostra 'Enable CC'
.text:004D2D78 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:004D2D7C E0 AF 40 A2                             sb      $0, -0x5020($s2)
.text:004D2D80 10 00 BC 8F                             lw      $gp, 0x28+var_18($sp)
.text:004D2D84 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:004D2D88 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop
.text:004D2D8C 01 00 04 24                             li      $a0, 1

Código: [Selecionar]
.text:004D2E78 18 97 99 8F                             la      $t9, sub_4A2C58 # Mostra 'Enable CC'
.text:004D2E7C 01 00 04 24                             li      $a0, 1 # Bug CC liga
.text:004D2E80 09 F8 20 03                             jalr    $t9 ; sub_4A2C58  # Mostra 'Enable CC' -- alterar para nop
.text:004D2E84 E0 AF 40 A2                             sb      $0, -0x5020($s2)
.text:004D2E88 10 00 BC 8F                             lw      $gp, 0x28+var_18($sp)
.text:004D2E8C 01 00 04 24                             li      $a0, 1
.text:004D2E90 3C 97 99 8F                             la      $t9, sub_4A2F18  # Mostra 'Show CC'
.text:004D2E94 09 F8 20 03                             jalr    $t9 ; sub_4A2F18  # Mostra 'Show CC' -- alterar para nop
.text:004D2E98 01 00 11 24                             li      $s1, 1

Com relação ao tamanho mínimo permitido para o HD, a rotina que calcula o espaço disponível é esta:

Código: [Selecionar]
.text:004B2A98                         sub_4B2A98:                              # CODE XREF: sub_4786EC+FC_p
.text:004B2A98                                                                  # sub_4D4C48+B58_p
.text:004B2A98                                                                  # DATA XREF: ...
.text:004B2A98
.text:004B2A98                         var_18          = -0x18
.text:004B2A98                         var_10          = -0x10
.text:004B2A98                         var_C           = -0xC
.text:004B2A98                         var_8           = -8
.text:004B2A98
.text:004B2A98 71 00 1C 3C 18 D2 9C 27                 la      $gp, unk_70D218
.text:004B2AA0 21 E0 99 03                             addu    $gp, $t9
.text:004B2AA4 D8 FF BD 27                             addiu   $sp, -0x28
.text:004B2AA8 20 00 BF AF                             sw      $ra, 0x28+var_8($sp)
.text:004B2AAC 10 00 BC AF                             sw      $gp, 0x28+var_18($sp)
.text:004B2AB0 34 80 84 8F                             la      $a0, aWarningUnknown  # "Warning: unknown JFIF revision number %"...
.text:004B2AB4 70 8E 99 8F                             la      $t9, sub_4B28A4
.text:004B2AB8 18 00 A5 27                             addiu   $a1, $sp, 0x28+var_10
.text:004B2ABC 1C 00 A6 27                             addiu   $a2, $sp, 0x28+var_C
.text:004B2AC0 09 F8 20 03                             jalr    $t9 ; sub_4B28A4
.text:004B2AC4 00 D6 84 24                             addiu   $a0, (aMntUsb - 0x690000)  # "/mnt/usb"
.text:004B2AC8 10 00 BC 8F                             lw      $gp, 0x28+var_18($sp)
.text:004B2ACC 18 00 A5 8F                             lw      $a1, 0x28+var_10($sp)
.text:004B2AD0 1C 00 A6 8F                             lw      $a2, 0x28+var_C($sp)
.text:004B2AD4 34 80 84 8F                             la      $a0, aWarningUnknown  # "Warning: unknown JFIF revision number %"...
.text:004B2AD8 30 8A 99 8F                             la      $t9, sub_666260
.text:004B2ADC 82 2A 05 00                             srl     $a1, 10
.text:004B2AE0 82 32 06 00                             srl     $a2, 10
.text:004B2AE4 18 00 A5 AF                             sw      $a1, 0x28+var_10($sp)
.text:004B2AE8 1C 00 A6 AF                             sw      $a2, 0x28+var_C($sp)
.text:004B2AEC 09 F8 20 03                             jalr    $t9 ; sub_666260
.text:004B2AF0 8C 9E 84 24                             addiu   $a0, (aTotalDAvailD - 0x690000)  # "\n>>> total = %d avail = %d \n"
.text:004B2AF4 18 00 A2 8F                             lw      $v0, 0x28+var_10($sp)
.text:004B2AF8 10 00 BC 8F                             lw      $gp, 0x28+var_18($sp)
.text:004B2AFC 20 00 BF 8F                             lw      $ra, 0x28+var_8($sp)
.text:004B2B00 00 7D 42 2C                             sltiu   $v0, 0x7D00
.text:004B2B04 08 00 E0 03                             jr      $ra
.text:004B2B08 28 00 BD 27                             addiu   $sp, 0x28
.text:004B2B08                          # End of function sub_4B2A98

Vejam que no final temos 4B2B00 00 7D 42 2C  sltiu  $v0, 0x7D00. Isso é o mesmo que dividir o valor de $v0 por 0x7D00 = 32.000. Há duas chamadas para esse rotina: uma antes de começar uma gravação OTR e outra que eu acho que é antes de aceitar um agendamento de gravação. As mudanças estão explicadas nos comentários:

Código: [Selecionar]
.text:004787E4 9C 8C 99 8F                             la      $t9, sub_4B2A98  # verifica tamanho
.text:004787E8 09 F8 20 03                             jalr    $t9 ; sub_4B2A98  # verifica tamanho
.text:004787EC 00 00 00 00                             nop
.text:004787F0 12 00 40 14                             bnez    $v0, loc_47883C  # se não zero, limite de tamanho nao atingido (32G)
.text:004787F0                                                                  # mudar para nop ignora o tamanho
.text:004787F4 10 00 BC 8F                             lw      $gp, 0x20+var_10($sp)

Código: [Selecionar]
.text:004D579C 9C 8C 99 8F                             la      $t9, sub_4B2A98  # verifica tamanho
.text:004D57A0 09 F8 20 03                             jalr    $t9 ; sub_4B2A98  # verifica tamanho
.text:004D57A4 00 00 00 00                             nop
.text:004D57A8 56 00 40 14                             bnez    $v0, loc_4D5904  # se não zero, limite de tamanho nao atingido (32G)
.text:004787F0                                                                  # mudar para nop ignora o tamanho
.text:004D57AC 18 00 BC 8F                             lw      $gp, 0xE8+var_D0($sp)

Por fim, apenas para indicar onde ocorreram as mudanças que já haviam sido explicadas para a versão 1.13.6:

  • a rotina "pre-executa 8051 fp init" é a sub_4526A0;
  • a rotina "executa 8051 fp init" é a sub_4DD3E8;
  • a chamada à "executa onboard fp init", que deve ser alterada para iniciar o painel do "tijolão", está em 0x4006AC;
  • em .got:00BBA4F foi incluído o endereço da "pre-executa 8051 fp init";
  • e em .got:00BBA4E8 o apontamento foi de alterado de "executa onboard fp init" para "executa 8051 fp init".

A nova rotina para interpretar as teclas dos diversos controles começa em sub_791250. Eu alterei levemente o início da rotina utilizada por mim na versão 1.13.6, apenas para incluir a checagem do código mestre do Semp, e acrescentei a rotina inteira de interpretação do controle remoto retirada do firmware daquele STB, a qual eu achei com ajuda dos códigos que o rafael_netto me passou. É interessante notar que a rotina do Semp devolve os mesmos códigos de função e no mesmo registrador ($v0), o que facilitou o seu "transplante". Porém, a sua estrutura é arquitetada de um modo diferente, o que parece indicar que o compilador usado era de outra versão ou estava com alguma opção de otimização modificada. A chamada para esta minha rotina é feita em 0x43E144, onde originalmente havia o filtro para o código mestre do controle (que eu retirei).

À tarde eu disponibilizo os firmwares, tanto para o ZBT-633 como para o ZBT-620A "tijolão". Estou chamando de 1.14.4 "beta" porque ainda precisamos testar o controle do Semp e quero incluir o mini modo de desenvolvimento, que está quase pronto. Também gostaria de arrumar algumas strings mal traduzidas que deixaram no firmware original, como "Dispositivo do formato", que deveria ser "Formatando dispostivo".

FORUM.RYAN.COM.BR

Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #31 Online: Março 23, 2011, 06:48:25 am »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #32 Online: Março 23, 2011, 05:59:16 pm »
Firmware Rictad versão 1.14.4 beta (com agendamento da gravação)

  • Corrigido o "bug do closed caption" que havia no firmware oficial;
  • Retirado o limite mínimo de 32GB de espaço para que dispositivos USB pudessem ser utilizados;
  • Suporte simultâneo aos controles remotos do ZBT-620A ("tijolão"), ZBT-620C/633 (slim), Samsung BN59-00604A (configurado na função STB, código 15) e Semp DC2008H;
  • Disponibilizada uma versão para o ZBT-620A, que inicializa corretamente o painel frontal.

Nota 1: O limite de 32GB foi retirado, mas isso não quer dizer que é possível gravar tranquilamente em pen drives. Eu não consegui gravar mais que 1 minuto devido a problemas de sincronismo da unidade, já que a memória flash costuma ser lenta. Portanto, isso vai depender da velocidade do pen drive e deve ser usado mais para testes do que para gravações reais. Já em partições pequenas de HDs verdadeiros, a gravação ocorreu tranquilamente.

Nota 2: O suporte ao controle do Semp ainda não foi testado. Foi incluído apenas como um recurso extra. Como os aparelhos possuem sintonizadores diferentes, esse firmware não deve ser utilizado no Semp.

ATENÇÃO:

Por questão de segurança, assim como ocorre com a versão 1.13.6, só atualize para as versões 1.14.4, inclusive a oficial da Ivision, se o aparelho estiver, no mínimo, com a versão 1.5.5. Caso a versão seja inferior a essa, como a 1.3.7 ou a 1.3.8, você deve atualizar primeiro para as versões 1.5.5 ou 1.7.2 que estão disponíveis na Internet, de acordo com o modelo do seu aparelho.

A versão 1.14.4a beta deve ser preferencialmente instalada no Zinwell ZBT-620A "tijolão", de controle grande e prateado. Mas se você instalar no aparelho errado, ainda poderá atualizar com a versão c depois.
Após a atualização, você não poderá instalar as versões antigas 1.7.2 e 1.5.5 oficiais. Caso, por algum motivo, isso seja necessário, você só poderá "desatualizar" se utilizar a versão 1.7.2_back especial disponibilizada no início do tópico (EDIT: ou com a versão ZBT-620A_1.7.2_back2 disponibilizada mais à frente).

A versão 1.14.4c beta deve ser preferencialmente instalada no Zinwell ZBT-620C/633 slim, de controle Zinwell menor e preto. Mas se você instalar no aparelho errado, ainda poderá atualizar com a versão a depois. Após a atualização, você poderá voltar para as versões oficiais 1.13.6 e 1.14.4 disponibilizadas no site da Ivision. E assim como ocorre quando se atualiza com as versões oficiais, você não poderá voltar para as versões mais antigas (1.5.5, 1.7.2 etc). (EDIT:  é possível voltar com a versão ZBT-633_1.7.2_back2 disponibilizada mais à frente).

Quando você atualizar para a versão 1.14.4, serão gravados 4 blocos na flash. Então você deverá esperar a barra de gravação encher 4 vezes! Após a atualização, caso o STB já não esteja atualizado com a versão 1.14.4 oficial, o mesmo será reiniciado 2 vezes, a primeira é para apagar a EPROM.
« Última modificação: Abril 01, 2011, 05:01:43 am por rictad »

Offline rafael_netto

  • Novato
  • *
  • Mensagens: 19
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #33 Online: Março 23, 2011, 06:59:44 pm »
Como eu já disse anteriormente, eu esperava usar esses desenvolvimentos para implementar modificações no próprio firmware original do Semp, sem pensar em PVR.

Tenho duas coisas em mente:

1) Medidores de sinal. Como eu já havia dito os medidores do Semp estão bugados e têm um comportamento semelhante ao que havia nas versões mais antigas do Zinwell (não sei extamente até qual, a 1.7.2 com certeza não tem esse problema).

2) Ajuste de formato. O Semp, como o Zinwell até 1.7.2 (inclusive) não oferece ajuste de formato para resoluções HD, apenas para 480i/p. Apesar dos menus funcionarem normalmente, a maioria das configurações é ignorada. Isto foi implementado nas versões mais novas.

Para implementar essas modificações, acho que poderia ser feito o seguinte:
- identificar o código correspondente nas diferentes versões do Zinwell, antes e depois da alteração
- identificar o mesmo código no Semp, que deverá ser semelhante ao Zinwell mais antigo
- "transplantar" o código mais recente do Zinwell

O Semp 1.1.0, bem como o Zinwell 1.7.2, também possui um bug que provoca falhas esporádicas no áudio. Aparentemente isso não acontece nas versões mais antigas de ambos, nem na mais nova do Zinwell. Este problema eu imagino que seja de solução mais difícil.

E é claro a infame mensagem "Atualizando informações da transmissora" com tela preta, e no caso do Semp, mudança de canal. Parece que as versões mais novas da Zinwell, e só elas, não têm isso.
« Última modificação: Março 23, 2011, 07:08:41 pm por rafael_netto »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #34 Online: Março 23, 2011, 08:46:54 pm »
1) Medidores de sinal. Como eu já havia dito os medidores do Semp estão bugados e têm um comportamento semelhante ao que havia nas versões mais antigas do Zinwell (não sei extamente até qual, a 1.7.2 com certeza não tem esse problema).

Para a gente tentar comparar, quais mensagens são mostradas no terminal do Semp quando se exibe os medidores de sinal?

Offline rafael_netto

  • Novato
  • *
  • Mensagens: 19
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #35 Online: Março 24, 2011, 01:39:50 am »
Para a gente tentar comparar, quais mensagens são mostradas no terminal do Semp quando se exibe os medidores de sinal?

Aí é que está! Não mostra. Por outro lado, existe uma mensagem "%SNR %ddb" num ponto do código, pra mim isso indica que essa rotina não é usada (seria pra outro tuner).

O mais perto que a gente chega de mensagens relativas a sinal é a mudança de canal na tela de sintonia manual:
Código: [Selecionar]
tc90512-> Tune to channel, frequency=533143 KHz
Writing RF = 533143
Set Frequency : Write tuner sequence = 0xf 0xc8 0xc1 0x84 0x80
[TUNER]zw_frontend_VA6009Read=0x54 , fStatus=0
Tuner(0x11) PLL locked
***ReTuner Frequency***  533143
in scan_init
========== TMCC Information ==========
-----Mode           =   Mode3-----
-----GuardLength    =     1/8-----
-----System         =   ISDBT-----
-----TMCC Countdown =      15-----
-----Emergency Flag =     OFF-----
-----Part Flag      =      ON-----

========== TMCC[A] ==========
-----Modulation     =    QPSK-----
-----Rate           =     2/3-----
-----InterLeave     =       2-----
-----Segment Number =       1-----
========== TMCC[B] ==========
-----Modulation     =   64QAM-----
-----Rate           =     2/3-----
-----InterLeave     =       2-----
-----Segment Number =      12-----
========== TMCC[C] ==========
-----Modulation     = Invalid-----
-----Rate           = Invalid-----
-----InterLeave     = Invalid-----
-----Segment Number = Invalid-----
Demod -> Normal channel detected !

in request PAT
av play 0 0
clear no signal

Quanto à mudança de formato, ainda não verifiquei o terminal, farei isso em breve.

Offline rafael_netto

  • Novato
  • *
  • Mensagens: 19
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #36 Online: Março 24, 2011, 02:40:01 am »
O firmware do Semp parece que tem um PVR oculto!

Eu já havia visto mensagens no terminal relativas a isso. Mas pesquisando pelas strings Unicode (usadas nos menus) descobri o seguinte:

Código: [Selecionar]
.data:00938C12                 .byte 0x46  # F
.data:00938C13                 .byte    0
.data:00938C14                 .byte 0x6F  # o
.data:00938C15                 .byte    0
.data:00938C16                 .byte 0x72  # r
.data:00938C17                 .byte    0
.data:00938C18                 .byte 0x6D  # m
.data:00938C19                 .byte    0
.data:00938C1A                 .byte 0x61  # a
.data:00938C1B                 .byte    0
.data:00938C1C                 .byte 0x74  # t
.data:00938C1D                 .byte    0
.data:00938C1E                 .byte 0x20
.data:00938C1F                 .byte    0
.data:00938C20                 .byte 0x48  # H
.data:00938C21                 .byte    0
.data:00938C22                 .byte 0x44  # D
.data:00938C23                 .byte    0
.data:00938C24                 .byte 0x44  # D
.data:00938C25                 .byte    0
.data:00938C26                 .byte    0
.data:00938C27                 .byte    0
.data:00938C28                 .byte 0x48  # H
.data:00938C29                 .byte    0
.data:00938C2A                 .byte 0x44  # D
.data:00938C2B                 .byte    0
.data:00938C2C                 .byte 0x44  # D
.data:00938C2D                 .byte    0
.data:00938C2E                 .byte 0x20
.data:00938C2F                 .byte    0
.data:00938C30                 .byte 0x64  # d
.data:00938C31                 .byte    0
.data:00938C32                 .byte 0x65  # e
.data:00938C33                 .byte    0
.data:00938C34                 .byte 0x6C  # l
.data:00938C35                 .byte    0
.data:00938C36                 .byte 0x20
.data:00938C37                 .byte    0
.data:00938C38                 .byte 0x46  # F
.data:00938C39                 .byte    0
.data:00938C3A                 .byte 0x6F  # o
.data:00938C3B                 .byte    0
.data:00938C3C                 .byte 0x72  # r
.data:00938C3D                 .byte    0
.data:00938C3E                 .byte 0x6D  # m
.data:00938C3F                 .byte    0
.data:00938C40                 .byte 0x61  # a
.data:00938C41                 .byte    0
.data:00938C42                 .byte 0x74  # t
.data:00938C43                 .byte    0
.data:00938C44                 .byte 0x6F  # o
.data:00938C45                 .byte    0
.data:00938C46                 .byte    0
.data:00938C47                 .byte    0
.data:00938C48                 .byte 0x48  # H
.data:00938C49                 .byte    0
.data:00938C4A                 .byte 0x44  # D
.data:00938C4B                 .byte    0
.data:00938C4C                 .byte 0x44  # D
.data:00938C4D                 .byte    0
.data:00938C4E                 .byte 0x20
.data:00938C4F                 .byte    0
.data:00938C50                 .byte 0x64  # d
.data:00938C51                 .byte    0
.data:00938C52                 .byte 0x6F  # o
.data:00938C53                 .byte    0
.data:00938C54                 .byte 0x20
.data:00938C55                 .byte    0
.data:00938C56                 .byte 0x46  # F
.data:00938C57                 .byte    0
.data:00938C58                 .byte 0x6F  # o
.data:00938C59                 .byte    0
.data:00938C5A                 .byte 0x72  # r
.data:00938C5B                 .byte    0
.data:00938C5C                 .byte 0x6D  # m
.data:00938C5D                 .byte    0
.data:00938C5E                 .byte 0x61  # a
.data:00938C5F                 .byte    0
.data:00938C60                 .byte 0x74  # t
.data:00938C61                 .byte    0
.data:00938C62                 .byte 0x6F  # o

Código: [Selecionar]
.data:00939034                 .byte 0x52  # R
.data:00939035                 .byte    0
.data:00939036                 .byte 0x65  # e
.data:00939037                 .byte    0
.data:00939038                 .byte 0x63  # c
.data:00939039                 .byte    0
.data:0093903A                 .byte 0x6F  # o
.data:0093903B                 .byte    0
.data:0093903C                 .byte 0x72  # r
.data:0093903D                 .byte    0
.data:0093903E                 .byte 0x64  # d
.data:0093903F                 .byte    0
.data:00939040                 .byte 0x20
.data:00939041                 .byte    0
.data:00939042                 .byte 0x4C  # L
.data:00939043                 .byte    0
.data:00939044                 .byte 0x69  # i
.data:00939045                 .byte    0
.data:00939046                 .byte 0x73  # s
.data:00939047                 .byte    0
.data:00939048                 .byte 0x74  # t
.data:00939049                 .byte    0
.data:0093904A                 .byte    0
.data:0093904B                 .byte    0
.data:0093904C                 .byte 0x4C  # L
.data:0093904D                 .byte    0
.data:0093904E                 .byte 0x69  # i
.data:0093904F                 .byte    0
.data:00939050                 .byte 0x73  # s
.data:00939051                 .byte    0
.data:00939052                 .byte 0x74  # t
.data:00939053                 .byte    0
.data:00939054                 .byte 0x61  # a
.data:00939055                 .byte    0
.data:00939056                 .byte 0x20
.data:00939057                 .byte    0
.data:00939058                 .byte 0x64  # d
.data:00939059                 .byte    0
.data:0093905A                 .byte 0x65  # e
.data:0093905B                 .byte    0
.data:0093905C                 .byte 0x20
.data:0093905D                 .byte    0
.data:0093905E                 .byte 0x52  # R
.data:0093905F                 .byte    0
.data:00939060                 .byte 0x65  # e
.data:00939061                 .byte    0
.data:00939062                 .byte 0x67  # g
.data:00939063                 .byte    0
.data:00939064                 .byte 0x69  # i
.data:00939065                 .byte    0
.data:00939066                 .byte 0x73  # s
.data:00939067                 .byte    0
.data:00939068                 .byte 0x74  # t
.data:00939069                 .byte    0
.data:0093906A                 .byte 0x72  # r
.data:0093906B                 .byte    0
.data:0093906C                 .byte 0x6F  # o
.data:0093906D                 .byte    0
.data:0093906E                 .byte    0
.data:0093906F                 .byte    0
.data:00939070                 .byte 0x4C  # L
.data:00939071                 .byte    0
.data:00939072                 .byte 0x69  # i
.data:00939073                 .byte    0
.data:00939074                 .byte 0x73  # s
.data:00939075                 .byte    0
.data:00939076                 .byte 0x74  # t
.data:00939077                 .byte    0
.data:00939078                 .byte 0x61  # a
.data:00939079                 .byte    0
.data:0093907A                 .byte 0x20
.data:0093907B                 .byte    0
.data:0093907C                 .byte 0x52  # R
.data:0093907D                 .byte    0
.data:0093907E                 .byte 0x65  # e
.data:0093907F                 .byte    0
.data:00939080                 .byte 0x63  # c
.data:00939081                 .byte    0
.data:00939082                 .byte 0x6F  # o
.data:00939083                 .byte    0
.data:00939084                 .byte 0x72  # r
.data:00939085                 .byte    0
.data:00939086                 .byte 0x64  # d


"HDD Format" e "Record List" em inglês, português e espanhol, como todas as mensagens da interface. Com direito a erros de tradução...
« Última modificação: Março 24, 2011, 02:42:18 am por rafael_netto »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #37 Online: Março 24, 2011, 03:59:17 am »
Para a gente tentar comparar, quais mensagens são mostradas no terminal do Semp quando se exibe os medidores de sinal?

Aí é que está! Não mostra. Por outro lado, existe uma mensagem "%SNR %ddb" num ponto do código, pra mim isso indica que essa rotina não é usada (seria pra outro tuner).

O mais perto que a gente chega de mensagens relativas a sinal é a mudança de canal na tela de sintonia manual:
Código: [Selecionar]
tc90512-> Tune to channel, frequency=533143 KHz
Writing RF = 533143
Set Frequency : Write tuner sequence = 0xf 0xc8 0xc1 0x84 0x80
[TUNER]zw_frontend_VA6009Read=0x54 , fStatus=0
Tuner(0x11) PLL locked
***ReTuner Frequency***  533143
in scan_init
========== TMCC Information ==========
-----Mode           =   Mode3-----
-----GuardLength    =     1/8-----
-----System         =   ISDBT-----
-----TMCC Countdown =      15-----
-----Emergency Flag =     OFF-----
-----Part Flag      =      ON-----

========== TMCC[A] ==========
-----Modulation     =    QPSK-----
-----Rate           =     2/3-----
-----InterLeave     =       2-----
-----Segment Number =       1-----
========== TMCC[B] ==========
-----Modulation     =   64QAM-----
-----Rate           =     2/3-----
-----InterLeave     =       2-----
-----Segment Number =      12-----
========== TMCC[C] ==========
-----Modulation     = Invalid-----
-----Rate           = Invalid-----
-----InterLeave     = Invalid-----
-----Segment Number = Invalid-----
Demod -> Normal channel detected !

in request PAT
av play 0 0
clear no signal

Para comparar:
Código: [Selecionar]
tc90507-> Tune to channel, frequency=515143 KHz
Frank-> Set Frequency = 515143000 to mt2131
pInfo->AS_Data.f_LO1 = 1732750000
pInfo->AS_Data.f_LO2 = 1173600000
Frank-> Calculated Num1 = 2432
Frank-> Calculated Num2 = 2867
Tuner(0x40) PLL locked
========== TMCC Information ==========
-----Mode           =   Mode3-----
-----GuardLength    =    1/16-----
-----System         =   ISDBT-----
-----TMCC Countdown =      15-----
-----Emergency Flag =     OFF-----
-----Part Flag      =      ON-----

========== TMCC[A] ==========
-----Modulation     =    QPSK-----
-----Rate           =     1/2-----
-----InterLeave     =       2-----
-----Segment Number =       1-----
========== TMCC[B] ==========
-----Modulation     =   64QAM-----
-----Rate           =     3/4-----
-----InterLeave     =       2-----
-----Segment Number =      12-----
========== TMCC[C] ==========
-----Modulation     = Invalid-----
-----Rate           = Invalid-----
-----InterLeave     = Invalid-----
-----Segment Number = Invalid-----
Demod -> Normal channel detected !
clear no signal
Pat index 0, Program Num 0x3f80
 >> Nit index 0, SID 0x3f98
>> Requset PMT index 0
Manual Scan PlayStream --->
        Video PID: 0x0111 Type: 27
        Audio PID: 0x0112 Type: 17
Video PID: 0x111 Type: 0x1b
Audio PID: 0x112 Type: 0x12
av play 0 0
Video PID: 0x111 IsPidScrambled 0
Audio PID: 0x112 IsPidScrambled 0
tc90507-> Tune to channel, frequency=515143 KHz
Frank-> Set Frequency = 515143000 to mt2131
pInfo->AS_Data.f_LO1 = 1732750000
pInfo->AS_Data.f_LO2 = 1173600000
Frank-> Calculated Num1 = 2432
Frank-> Calculated Num2 = 2867
Tuner(0x40) PLL locked
========== TMCC Information ==========
-----Mode           =   Mode3-----
-----GuardLength    =    1/16-----
-----System         =   ISDBT-----
-----TMCC Countdown =      15-----
-----Emergency Flag =     OFF-----
-----Part Flag      =      ON-----

========== TMCC[A] ==========
-----Modulation     =    QPSK-----
-----Rate           =     1/2-----
-----InterLeave     =       2-----
-----Segment Number =       1-----
========== TMCC[B] ==========
-----Modulation     =   64QAM-----
-----Rate           =     3/4-----
-----InterLeave     =       2-----
-----Segment Number =      12-----
========== TMCC[C] ==========
-----Modulation     = Invalid-----
-----Rate           = Invalid-----
-----InterLeave     = Invalid-----
-----Segment Number = Invalid-----
Demod -> Normal channel detected !
clear no signal
Pat index 0, Program Num 0x3f80
 >> Nit index 0, SID 0x3f98
>> Requset PMT index 0
Manual Scan PlayStream --->
        Video PID: 0x0111 Type: 27
        Audio PID: 0x0112 Type: 17
Video PID: 0x111 Type: 0x1b
Audio PID: 0x112 Type: 0x12
av play 0 0
Video PID: 0x111 IsPidScrambled 0
Audio PID: 0x112 IsPidScrambled 0
clear no signal

Já pensou que apesar de aparecer a referência correta ao tuner (que está relacionada à mudança manual de canal), as rotinas que mostram o sinal estão "trabalhando" com referência a outro sintonizador?

Mas o que é mostrado um pouco antes, no momento em que a interface gráfica é chamada para exibir a informação? Isso pode nos dar pistas para acharmos as rotinas responsáveis da GUI e traçarmos um caminho até as rotinas que de fato "calculam" o sinal. Seguem essas informações para o ZBT-633:

Código: [Selecionar]
Frank-> Delete ErrMsg
set frame buffer alpha 0xff
Current TunerHandle = 0, TunerType = 6
get HD ws.dx = 0, ws.dy = 0, ws.dw = 1920, ws.dx = 1080
resize HD ws.dx = 1070, ws.dy = 233, ws.dw = 600, ws.dx = 249
get ws.dx = 0, ws.dy = 0, ws.dw = 720, ws.dx = 480
resize ws.dx = 402, ws.dy = 100, ws.dw = 224, ws.dx = 115
hw layer create 602 451
hwid 0

O firmware do Semp parece que tem um PVR oculto!

É, eu também vi isso nos firmwares anteriores dos ZBT. É por isso que eu acho que já tem bastante coisa pronta no zmw_base_zinwell. Inclusive os sintonizadores. Também é possível encontrar referências à interatividade pela Internet, que foi implementada no STB da Olevia. A flash do Olevia tem o mesmo tamanho da do Zinwell. Eu cheguei a rodar esse firmware com interatividade no meu ZBT-620A, mas sem o sintonizador funcionar.

Offline et@

  • Banidos
  • Novato
  • *
  • Mensagens: 3
  • Aprovação: +0/-3
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #38 Online: Março 24, 2011, 04:52:30 pm »
Amigo meu aparelho é um ZBT-633 slim com versão de firmware v1.14.7 é uma atualização nova que corrigiu o bug do closed caption, o que eu quero mesmo é se vc você pode indicar um link de firmware seguro que vc criou que tire o limite de 32 GB para gravação. vc você tem um link seguro de firmware criado por vc você que eu posso fazer a atualização em cima do firmaware  firmware v1.14.7 que já está instalado no meu aparelho.

se tem coloca o link aí para mim!
« Última modificação: Março 24, 2011, 07:47:43 pm por Jefferson »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #39 Online: Março 24, 2011, 06:10:31 pm »
Você pode utilizar a versão 1.14.4c beta do link acima com segurança, atualizando por cima da 1.14.7. Eu já testei esse retorno. Ela é a mesma 1.14.4, mas com bug de CC corrigido e sem o limite de 32GB. Chamei de beta, pois pretendo adicionar mais alguns recursos e ainda falta verificar o funcionamento do controle do Semp. Talvez eu implemente essas mesmas modificações na versão 1.14.7.

et@, por favor, atenção às Regras da Casa.
« Última modificação: Março 24, 2011, 06:24:12 pm por rictad »

FORUM.RYAN.COM.BR

Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #39 Online: Março 24, 2011, 06:10:31 pm »