COMO FUNCIONA
O sinal de bina em uma linha telefonica nada mais é do que dados binários
enviados da operadora telefonica para a linha local, a BINAGEM só funciona
em telefones que tem linhas digitais, os testes que fiz obtive os resultados
esperados usando a prestadora TELEMAR e sinal de bina DTMF,
se sua prestadora usa algum outro tipo de sinal diferente tem que se fazer os
testes, eu usei a TELEMAR, claro, por ser a única que atende minha cidade
que fica no interior de minas, muito pequena por sinal.
Quando você abre o MODEM (Pensando do ponto de vista da programação) está simplesmente com um canal para envio e recebimento de dados, isto sempre foi assim desde os principios da informática, todo equipamento que vc tem acesso, vc precisa apenas de um canal para envio e recebimento de informação, com o MODEM não seria diferente. O problema é que, vc só consegue manter este canal aberto se conseguir fazer ou receber uma chamada e fazer uma conexão bem sucedida, correto?
NÃO, ERRADO...
Se você for analisar, como faria então para receber o número telefônico que vem via linha telefonica até sua casa antes mesmo da chamada ser concluída?
Ai entra a questão de que maioria dos modens mais novos (Acho que acima de V80) podem trabalhar no modo chamado de NULL MODEM ou MODEM NULO, ou seja, vc pode abrir o canal de comunicação com o MODEM e manter ele aberto mesmo sem receber ou fazer uma ligação. Nunca testei, mas pela logica, vc pode ter um modem ligado diretamente a outro modem em outro computador captando estes mesmos dados mesmo sem ter uma chamada em curso, como se fosse uma placa de rede, isso to falando de teoria, nunca testei.
Então o primeiro ponto do mistério foi solucionado.
COMO FAZER O MODEM FUNCIONA NULO?
Bom, os modens, como sabemos respondem a comandos, podemos imaginar como se fosse um linha de comando dos DOS, claro, os comandos são próprios de um padrão que é conhecido por padrão "AT", logo abaixo indico um tutorial que criei ensinando como usar a IOLIB e os testes foram feitos com base em alguns destes comandos, é uma literatura indispensável, apesar dos diversos erros de "purtuguês" que prometo num futuro consertar. Continuando, logo, para ativar o modem nulo, também conhecido por CLASSE 80 temos que enviar um determinado comando para o modem, cada modem pode ter este comando de uma forma diferente, para isto criei 4 combinações destes comandos que funcionaram em todos os modem' s que eu testei.
Sabemos que quando enviamos um comando para o modem ele nos retorna [ERROR] quando houver algum erro ou [OK] quando o comando foi aceito com sucesso, com base nisto, eu envio os comandos um por um até que o modem possa aceitar um destes como abaixo. Para receber as respostas do momdem como string, o modo X3 deve estar ativado, veja na linha de ativação do modem que ele está lá.
Código:
outchr("AT
&C0 V1 S40=2 S41=1 X3 #CLS=8"+chr(13)) |
Com isto temos o modem já ativado com padrão CLASSE 80, como o modem vai continuar aberto sem que caia o canal I/O com o PC, podemos na logica, captar qualquer coisa que chegue pela linha telefônica.
Porem ai vem outro problema, a linha telefonica trabalha com 2 tipos de voltagens, uma para o telefone em modo de espera e outra voltagem para CHAMADA EM CURSO. Não tenho certeza dos valores usados, faz muito tempo que me passaram isso e acho que não são tão importantes aqui, logo, então, apesar do modem estar aberto e em estado nulo, ele não vai captar nenhum pulso da linha telefônica pois ela vai estar na mesma voltagem em que o modem opera na transmissão de dados. Logo deveriamos então de alguma forma, regular esta tensão de entrada para que sempre seja igual a tensão obtida quando uma chamada estiver em curso, para isto é usado um resistor muito barato que pode ser achado em qualquer lugar, até em minha cidade no interior de minas tem pra vender.
Para quem não sabe para o que serve um resistor e tiver interessado em aprender mais pode usar este link:
http://pt.wikipedia.org/wiki/Resistor
Assim, fiz os teste com o resistor 3k3 5% 5 watts, segundo a experiência de um tio meu, que me ajudou muito neste caso. Com este resistor obtive um resultado um tanto inesperado e creio que os amigos obterão o mesmo, obviamente, quando digitamos algo no telefone, tudo é enviado bináriamente para a prestadora telefônica, com este resistor, consegui captar todas as teclas que são digitadas no aparelho telefonico local, ou mesmo da extensão, isto é outro ponto importante, faça uma extensão para colocar no computador com este resistor, de outra forma seu telefone vai parar de funcionar como se a linha tivesse em uma ligação, pois com o resistor você coloca a voltagem num nível obtido em "UMA CHAMADA EM CURSO", o teste que fiz logo em sequência foi o que já deu certo, com um Resistor 3k9 5 Watts 5%, no caso deste resistor esquentar muito, pode usar um 10%, um amigo disse que testou com um destes e deu certo, porém ele não esquentou tanto quando o de 5%, porém isto não dá defeito, o custo de um resistor deste é apenas 1 real na minha cidade, mas você pode obter um facilmente em uma TV ou Rádio, só não deixem suas mães sem assistir a novela.
Assim, este resistor deve ser colocado em uma das pernas da linha telefonica, qualquer uma, ele vai fazer uma especie de bloqueio e para o computador a voltagem vai estar reduzida a uma voltagem identica a obtida durante uma CHAMADA EM CURSO, assim o modem aberto e com a classe 80 ativada, vai conseguir obter tudo que chegar pela linha telefonica.
COMO NÃO PODERIA SER DIFERENTE TEMOS NESTE PONTO MAIS UM PROBLEMA
Bom, com o modem aberto, o resistor na linha, você pode criar um pequeno programa para receber os dados do modem, eu usei no exemplo que postarei abaixo usando a IOLIB, é a melhor lib para comunicação serial disponível , por causa da grande praticidade de uso, apesar de ser para DOS e para modo real (Não funciona em modo protegido, para isto use a CTCOM), voltando ao assunto, você verá que receberá o número telefônico com um lixo no meio tipo
#1#1#1#7#7#8#8#9#9#0#0
Este lixo pode variar, não achei um padrão nem logica para o mesmo, logo, você poderá ver no exemplo que é capturado do modem apenas caracteres NUMERICOS que são os caracteres que nos interessa, assim o numero acima ficaria assim:
11177889900
O primeiro dígito é o tipo de chamada, na época que fiz as rotinas a TELEMAR me passou uma tabela dos tipos de chamadas, mas não estava operacionalmente correta e até hoje não está, então é um dado irrelevante que não postarei aqui, só sei que se o primeiro digito for 1 me parece que é chamada local, 2 para celular o restante só testando mesmo para saber.
Assim o telefone acima seria:
1 (11) 77889900
Ou seja 1 representando uma chamada local do DDD 11 do numero 7788-9900
A string obtida pode ter diversos tamanhos, dependendo de região, pais, etc...
É um teste interessante, vale você manter sempre no seu programa o campo telefone cadastrado sem mascaras, ai pode usar a rotina para abrir diretamente o cadastro dos clientes que estão chamando.
Bom amigos, a tão misteriosa rotina de bina é apenas isto
O esquema seria basicamente este
Linha:
|--|------------------------------------|-\--------------|---------|
| |Linha telefônica -------- | \OPERADORA/ |PC|-------------------|3k9 5W|---------|-/--------------|---------| _|__|_ -------- ^ Aparelho telefônico Antes do resistor |
Rotina de BINA (CODIGO FONTE)
Código:
/* $ Aqui você verá
como identificar números telefônicos e formatá-los
A rotina TELEFONE retorna
o TIPO de ligação o telefone sem formatação
Programa de teste criado
por Wagner Nunes da Silva #include "iolib.ch"
if !init_port(COM4,BPS57600,EIGHT_DATA_BITS,NO_PARITY,;
function inicia_bina
function resposta procedure telefone function smsg function mak function centra function sair function digito |
Para compilar o exemplo faça apenas:
Código:
clipper bina
rtlink fi bina lib iolib
Repare que é um exemplo bem simples que abre o modem e espera o número
exibindo ele na tela.
PROBLEMAS COM MODEM
Por favor, não entre em contato que não irei dar suporte para o caso do seu modem não funcionar em DOS, se você garantir que ele funciona, ai pode ser que ele precise de uma string diferentes das que tenho para ativar classe 80, ai é ler o manual do modem ou entrar em contato com o fabricante.
Modem do tipo WINMODEM' S dificilmente terão suporte para DOS.
Modem do tipo HSP geralmente funcionam para DOS na porta COM4 independente da porta que estiverem instalados para o Windows .
Modem EXTERNOS são os melhores pois tem que ser ligados a uma serial física, isso quando não são USB´s.
Por favor, tente você mesmo instalar seu modem, se ele não funcionar em DOS tente comprar uma placa PCI ou um modem externo, eu mesmo comprei um modem externo USB ROBOTICs no mercado livre por meros 30 reais, tá funcionando até hoje apesar de não usar mais.
Portar estas rotinas para xHarbour ou qualquer linguagem é coisa simples, podem funcionar em Windows ou Linux. Se alguém fizer, visto que isto se torna hoje uma espécie de dominio público, peço que contribuam com o feito para com os amigos, pois você mesmo saberá no futuro que você apenas implementou a idéia tornando ela extensiva, é contribuindo que faremos isto crescer.