Postar resposta

Observação: Este post não será mostrado enquanto não for aprovado por um moderador.

Nome:
Email:
Assunto:
Ícone de mensagem:

Verificação:
Escreva as letras mostradas na imagem
Escutar as letras / Pedir uma nova imagem

Escreva as letras mostradas na imagem:
Escreva "convidado" (sem as aspas) na caixa ao lado (ou abaixo).:

atalhos: pressione alt+s para enviar ou alt+p para pré-visualizar


Resumo do Tópico

Enviado por: rictad
« Online: Março 27, 2009, 10:38:14 pm »

COM2 é a porta default. Ela é escolhida se houver uma enumeração mas o nome corrente da porta não bater com nenhuma das opções enumeradas. Isso pode acontecer se o valor no INI for inválido (por exemplo "COM 1" ou "COM1:" quando o certo é "COM1").

Para se certificar de que não seja isso, escolha uma porta que não seja COM2 pelo diálogo, clique em OK e depois em Salvar

Certo, verifiquei o INI, estava "COM4". Fui em configurar, selecionei COM3, 115000 e salvei. Verifiquei no INI, e estava COM3 e 115000. Abri o programa, mas quando fui em configurar apareceu, inicialmente, COM2 e 9600. Mas, enfim, são coisas do wine/linux. Acho que se não mexer no configurar, fica tudo certo. O problema é que a comunicação não está funcionando, mesmo no windows. Tentei por diversas vezes. E o MTKTool lá funciona. Não sei se falei, mas o cabo é USB! É o Prolific PL 2303, portanto eu uso aquele driver de celular.

De qualquer forma, a tabela que você incluiu já é de grande ajuda. Vou usar os códigos no MTKTool.

 
Enviado por: Jefferson
« Online: Março 27, 2009, 10:17:50 pm »


Bom, depois que eu incluí as chaves das seriais no registro (realmente, no wiki do wine o pessoal relatou que isso é necessário para que alguns programas funcionem), o programa passou a listar as COMs. O estranho é que independente do valor que estiver no INI, quando eu clico em  configurar, sempre aparece pré-selecionada a COM2. Mas como você falou que se não clicar em configurar, vale o que está no INI, pois isso é carregado inicialmente, acho que já está no ponto, mas ainda não funciona.

COM2 é a porta default. Ela é escolhida se houver uma enumeração mas o nome corrente da porta não bater com nenhuma das opções enumeradas. Isso pode acontecer se o valor no INI for inválido (por exemplo "COM 1" ou "COM1:" quando o certo é "COM1").

Para se certificar de que não seja isso, escolha uma porta que não seja COM2 pelo diálogo, clique em OK e depois em Salvar (apenas porta serial). Isso vai gravar o INI no formato correto.

Então, fui fazer o teste completo no windows. Antes havia feito o teste só com o cabo, sem o player, só para ver as portas seriais (pois teria que levar o player e a tv para o outro cômodo). Mas no windows ele não consegue fazer a comunicação também. Eu acho que talvez seja o meu chip! Por exemplo, o MTKTool só consegue realizar 3 operações: extrair o firmware, gravar o firmware e enviar bytes para endereços de memória, tipo XRAM DATA. Mas o resto, não faz nada. Não consigo ler a memória (apesar de poder gravar nela), nem ler ou gravar registradores, nem EEPROM e nem nada mais. Sempre achei que poderia ser devido a incompatibilidade. Pode ser o caso?

Acho que não, porque a operação que faço é justamente gravar em XRAM DATA.
Enviado por: rictad
« Online: Março 27, 2009, 10:01:24 pm »

Eu só encontrei um motivo para seu problema estar acontecendo, se não for na enumeração.

Todos os exemplos que encontrei de como se abre uma porta serial são mais ou menos assim (exemplos simplificados):

CreateFile(Portname,...

Já a rotina que utilizo abre a porta assim:

CreateFile('\\.\'+Portname...

E eu não consigo encontrar a razão para esse '\\.\' antes do nome da porta. Se você não conseguir fazer funcionar corrigindo a enumeração eu vou remover isso do programa para você testar.

Lembrando que para o DOS/Windows portas seriais são como arquivos.

Bom, depois que eu incluí as chaves das seriais no registro (realmente, no wiki do wine o pessoal relatou que isso é necessário para que alguns programas funcionem), o programa passou a listar as COMs. O estranho é que independente do valor que estiver no INI, quando eu clico em  configurar, sempre aparece pré-selecionada a COM2. Mas como você falou que se não clicar em configurar, vale o que está no INI, pois isso é carregado inicialmente, acho que já está no ponto, mas ainda não funciona.

Então, fui fazer o teste completo no windows. Antes havia feito o teste só com o cabo, sem o player, só para ver as portas seriais (pois teria que levar o player e a tv para o outro cômodo). Mas no windows ele não consegue fazer a comunicação também. Eu acho que talvez seja o meu chip! Por exemplo, o MTKTool só consegue realizar 3 operações: extrair o firmware, gravar o firmware e enviar bytes para endereços de memória, tipo XRAM DATA. Mas o resto, não faz nada. Não consigo ler a memória (apesar de poder gravar nela), nem ler ou gravar registradores, nem EEPROM e nem nada mais. Sempre achei que poderia ser devido a incompatibilidade. Pode ser o caso?
Enviado por: Jefferson
« Online: Março 27, 2009, 08:15:36 pm »

Eu só encontrei um motivo para seu problema estar acontecendo, se não for na enumeração.

Todos os exemplos que encontrei de como se abre uma porta serial são mais ou menos assim (exemplos simplificados):

CreateFile(Portname,...

Já a rotina que utilizo abre a porta assim:

CreateFile('\\.\'+Portname...

E eu não consigo encontrar a razão para esse '\\.\' antes do nome da porta. Se você não conseguir fazer funcionar corrigindo a enumeração eu vou remover isso do programa para você testar.

Edit: O propósito de '\\.\' é esclarecido aqui:

Lembrando que para o DOS/Windows portas seriais são como arquivos.
Enviado por: Jefferson
« Online: Março 27, 2009, 07:21:30 pm »


Humm...interessante. Olhando pelo regedit do meu Wine, em "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\", só aparece a chave "Scsi". Então deve ser isso. O Wine parece não enumerar as seriais no registro. Deixa do jeito que está que eu vou tentar modificar as coisas aqui no Wine então.

Outras informações que podem ajudar:

As portas só são enumeradas quando o form de configuração é criado e isso só ocorre uma vez, logo ao executar o programa.

Quando o programa é executado, lê o INI e configura a porta de acordo. O conteúdo do diálogo de configuração é ignorado até o momento em que você clicar em Configurar... . Nesse ponto o diálogo é preenchido com a configuração da porta (lida no INI) e qualquer mudança é carregada na porta quando você clica OK no diálogo. Como a porta configurada manualmente não bate com nenhuma obtida por enumeração isso pode criar um problema se você clicar em OK depois de entrar no diálogo, mesmo que não salve nada.

Tendo isso em mente, se você configurar a porta manualmente no INI e não entrar no diálogo de configuração, deve funcionar. Se não funcionar, o problema não é apenas de enumeração.
Enviado por: rictad
« Online: Março 27, 2009, 06:26:15 pm »

O programa enumera as portas olhando o conteúdo de

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

Verifique como se faz para simular esse conteúdo no Wine. Se você não conseguir ou não funcionar, tentaremos de outra forma.

Humm...interessante. Olhando pelo regedit do meu Wine, em "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\", só aparece a chave "Scsi". Então deve ser isso. O Wine parece não enumerar as seriais no registro. Deixa do jeito que está que eu vou tentar modificar as coisas aqui no Wine então.
Enviado por: Jefferson
« Online: Março 27, 2009, 05:46:47 pm »

Quando vou configurar a serial, não aparece porta nenhuma disponível para selecionar (eu uso a COM4), e se salvo assim, o INI fica com a porta em branco. Editando manualmente o INI para COM4, o programa inicia configurado para COM4, mas não faz a comunicação. Ao ligar numa máquina windows, vi que tudo funciona normalmente.

O programa enumera as portas olhando o conteúdo de

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

Verifique como se faz para simular esse conteúdo no Wine. Se você não conseguir ou não funcionar, tentaremos de outra forma.
Enviado por: rictad
« Online: Março 27, 2009, 05:12:45 pm »

Ryan, a possibilidade de usar imagens de remotos ficou fantástica! Muito bom mesmo!

Não consegui fazer o programa funcionar direito no wine (linux). Claro, o programa foi feito para windows, mas como consigo usar o MTKTool e os demais programas no wine, talvez ainda seja possível (o que facilitaria a vida de usuários linux, como eu). O problema ocorre, a meu ver, com a identificação das portas. Quando vou configurar a serial, não aparece porta nenhuma disponível para selecionar (eu uso a COM4), e se salvo assim, o INI fica com a porta em branco. Editando manualmente o INI para COM4, o programa inicia configurado para COM4, mas não faz a comunicação. Ao ligar numa máquina windows, vi que tudo funciona normalmente.

Vou arriscar que talvez haja duas soluções para isso:

1) Qual (ou quais) biblioteca você usa para acessar as COMS? Se eu souber qual é, talvez basta eu instalá-la aqui no meu wine.

2) Essa é se você tiver tempo. O programa faz alguma verificação das seriais disponíveis antes da configuração e antes da própria comunicação? Se sim, talvez você possa tirar essa verificação e deixar com que o programa use a porta de forma forçada, sem verificar. A desvantagem disso é que você teria que deixar um monte de portas disponíveis para selecionar em nome da compatibilidade (ou fazer como no MTKTool, deixar só 4, diminuindo a compatibilidade). A vantagem de fazer do jeito que você fez é que o programa chegou a reconhecer o cabo conectado na COM10 do windows.




Enviado por: Jefferson
« Online: Março 27, 2009, 04:28:32 pm »

Como criar/editar Image Maps

Eu uso o Macromedia Dreamweaver 3 para criar os Image Maps e editar o HTML. Existem programas gratuitos que fazem isso, mas geralmente eu os acho inconvenientes. Não é que o Dreamweaver não seja inconveniente, mas ele costuma ser menos que as alternativas que eu já testei.

No GIMP, por exemplo, abra uma imagem e vá em Filtros -> Web -> Mapa de imagens. O problema do GIMP (além de ser leeeento e usar diálogos não-Windows que me deixam perdido) é que ele só cria/edita o código dos mapas, que depois precisa ser inserido manualmente na página HTML.

E o Kompozer, que muita gente "acha" que substitui o Dreamweaver (o povo do Open Source sempre "acha" essas coisas), não faz Image Maps. E olha que eu estou comparando com o Dreamweaver 3, que é de 1999.

GeoHTML parece ser bem interessante, mas por algum motivo ele não consegue exibir algumas imagens JPG, como a imagem do Remoto Philips dos meus exemplos. Edit: A imagem havia sido corrompida). Além disso falta a ele a facilidade do Dreamweaver de clicar em um HOT SPOT e ir direto para a tag SHAPE que o define. Apesar disso, creio (não testei o suficiente) que GeoHTML pode até substituir o Dreamweaver 3 porque dá acesso direto aos eventos de cada HOT SPOT. Abra o meu exemplo LG nele, clique em um HOT SPOT e na janela "Area Inspector" clique em "events". Veja como é fácil mudar o que eu defini. Outro recurso útil do GeoHTML é definir um tamanho de objeto e toda vez que clicar na imagem gerar um objeto exatamente daquele tamanho, simplificando a criação de HOT SPOTS sobre muitos botões do mesmo formato e tamanho.
Enviado por: Jefferson
« Online: Março 27, 2009, 01:31:08 pm »

Como funciona a integração entre o código HTML e o código Delphi

Não é nada complicado do ponto de vista do usuário do programa. Se você tiver experiência em HTML com a interação entre Image Maps e javascript, vai entender de cara como funciona só olhando o código fonte dos meus exemplos em HTML. Mesmo que você não tenha experiência com isso, o que vou explicar aqui deve ser suficiente.

O básico

Para poder exibir páginas HTML o programa usa um controle que encapsula um controle ActiveX da Microsoft que é, para todos os efeitos práticos, o Internet Explorer instalado no PC do usuário. Mesmo que o usuário não use o IE esse mecanismo está disponível em todas as versões do Windows por intermédio da biblioteca MSHTML.DLL, que encapsula toda a  Trident Engine.

Embora seja muito simples fazer isso (embutir uma instância do IE) em Delphi, não existe um mecanismo simples, nem no Delphi nem na linguagem HTML, para se passar informações entre esse IE embutido e a aplicação. Isso está sendo feito através de um mecanismo COM que eu mal consigo entender e que por isso dá trabalho implementar.

Crédito da técnica - Peter D. Johnson

Através de COM eu consigo criar rotinas em Delphi e fazer com que elas sejam visíveis para o browser como se fossem rotinas em javascript ou vbscript, por meio do objeto external. Essas rotinas podem ser chamadas da mesma forma que qualquer outra rotina em javascript seria, mas nos meus exemplos isso está sendo feito apenas quando o usuário clica ou move o mouse sobre o browser e por isso depende de tags HREF.

Funcionamento

Por exemplo, quando você cria uma região clicável em um Image Map HTML, obtém algo mais ou menos assim no código:

<area shape="circle" coords="66,1356,18" href="#">

Para fazer com que o MTKRemote reaja a cliques e movimento do mouse sobre essa região, substitua o que está em negrito por:

        href="javascript:void(0);" id=""
        onclick="external.ProcessarDado('34');"
        onmouseover="external.ExibirInfo('RANDOM');"
        onmouseout="external.OcultarInfo()";

Três eventos do browser são usados (onclick, onmouseover e onmouseout) mas você pode usar apenas o evento onclick, porque é o único que realmente manda algo importante para o programa.


  • A função ProcessarDado espera um MTKCommand em hexadecimal. No exemplo, o código "34" será enviado para o aparelho;
  • ExibirInfo, que não está implementada ainda na versão Alfa3, apenas serve para exibir informação (no exemplo "RANDOM") no Delphi. Isso é perfeitamente dispensável no caso de MTKRemote, até mesmo porque se é só para indicar ao usuário a função do elemento por onde ele está passando o mouse, existem mecanismos em HTML/Javascript com essa funcionalidade;
  • OcultarInfo é necessária sempre que você usar ExibirInfo.

Enviado por: Jefferson
« Online: Março 27, 2009, 05:20:33 am »

Nova versão - Ainda com status ALFA

Estou usando uma nova (para mim) técnica de programação que me permite enviar dados de um browser embutido para o resto do programa. Graças a isso o usuário do MTKRemote pode criar seus próprios remotos usando HTML. Eu inclui dois exemplos nesta nova versão.

Eu usei fotos de remotos reais como base, mas você pode "inventar" o remoto que quiser e nem precisa usar Image Maps. Basta adaptar o que está nos exemplos.

Ao descompactar, preserve os diretórios. Os remotos em HTML precisam estar em uma pasta "remotos" dentro da pasta do programa.
Enviado por: Jefferson
« Online: Março 26, 2009, 09:50:19 pm »

Nova versão

Agora é possível salvar as configurações da porta serial;
Agora o programa carrega automaticamente a última tabela aberta;
Agora é possível enviar códigos manualmente;

Organização cosmética;
Enviado por: Jefferson
« Online: Março 26, 2009, 08:24:38 pm »

Nova versão.

Eu implementei a capacidade de executar comandos em uma lista. Basta ir até a aba "Controle por Códigos" e carregar uma lista apropriada. Eu incluí dois exemplos em arquivos TXT, retirados de documentação MT13x9 já conhecida. Basta clicar na linha que tem o código que você deseja enviar para o aparelho.

Você pode escrever o que você quiser no arquivo e organizá-lo da forma que achar melhor para cada caso, mas o código a ser enviado precisa estar no formato hexadecimal, com dois caracteres (mesmo que o primeiro seja zero) e precedido por '#$'.

Exemplo: #$0D

Edit: Anexo removido. Baixe a versão mais recente.
Enviado por: Jefferson
« Online: Março 26, 2009, 07:15:20 pm »

ATENÇÃO: EJECT e POWER do programa não funcionam no LG DK194g, mas as setas funcionam normalmente. Vou investigar se existe diferença nos códigos, mas não vai ser agora.
Enviado por: Jefferson
« Online: Março 26, 2009, 06:07:08 pm »

ATENÇÃO: Este software está em versão ALFA! A interface está confusa e literalmente uma bagunça, muitas funções não funcionam, etc.

Só tem utilidade para desenvolvedores e apenas para os que tem o cabo de comunicação.

O objetivo deste software é simplificar o envio de "MTK Commands" para o aparelho. O software usa o protocolo de comunicação MT13x9 para colocar os códigos diretamente no registrador 0xFB00, sem precisar de qualquer ajuda de softwares extras como o MTKtool.

Em outras palavras: O MTKRemote age como se fosse um controle remoto com fio para dispositivos MT13x9.

Situações onde o MTKRemote pretende facilitar sua vida:

  • Testar como um determinado aparelho reage a MTKCommands que não existem no seu remoto oficial.
  • Poder testar um firmware que usa um controle remoto completamente distinto

Do jeito que o software está agora ele ainda é limitado a simular as teclas que estão representadas por ícones. Estou trabalhando numa forma de permitir a simulação simples de qualquer MTKCommand, mesmo um inventado. Mas eu só vou fazer isso se vocês testarem o software e ele estiver funcionando razoavelmente do jeito que está. Meeeh... Já fiz. :)

Como usar:

Na aba Conexões configure para a porta COM onde o cabo está conectado. Lembre-se de fechar qualquer outro programa que esteja usando essa porta.

Ligue o aparelho;

Coloque um disco no aparelho que exiba o file browser (MP3, DivX, etc) e teste se consegue "passear" pelas pastas usando as setas do MTKremote.

Os mesmos cuidados e problemas de uso do MTktool no modo Avançado também se aplicam. O software pode perder contato com a placa sem motivo aparente, exigindo desligar o aparelho da tomada e ligar de novo.

 

Edit: Anexo removido. Baixe a versão mais recente.