1. COMUNICAÇÃO SAT-PC CONFIGURANDO SERVIDOR SAT SS-1000 Por especificação, todos os SATs, obrigatoriamente, devem se comunicar com o computador pelo cabo USB. A Sweda optou por um mecanismo moderno para realizar essa comunicação, o USB-Ethernet. Desta forma, quando o sistema operacional detecta a conexão do SAT, ele cria uma interface de rede, como se uma nova placa de rede fosse instalada. Os drivers para essa comunicação são os padrões, para Windows o SAT precisa do RNDIS e para Linux do CDC. Por padrão, o SAT usa a seguinte configuração de IP em sua interface de rede interna (dentro do equipamento): IP: 172.16.0.3 Máscara: 255.255.255.248 Desta forma, para que o PC consiga se comunicar com o SAT via protocolo IP, ele deve usar o endereço 172.16.0.X onde X = 2, 4, 5 ou 6. 2. MAIS DE UM SAT NO MESMO COMPUTADOR Esta configuração padrão possui duas características: 1. Se dois SS-1000 forem conectados no mesmo computador e os dois estiverem configurados com o mesmo IP, o sistema operacional se perde e não consegue se comunicar com os dois; 2. Se a rede local a qual o computador (ou SAT) está ligado usa a rede 172.16.0.X, poderão existir conflitos que causarão falha de conexão com a Internet ou entre computador e SAT. A versão (02.00.00) do SS-1000 pode se comportar de forma diferente. Ela aceita a configuração de qualquer IP na interface de rede USB/SAT. Então: Para característica 1: Basta que cada interface de rede USB/SAT seja configurada com um IP diferente, ex: SAT1: 172.16.1.2 SAT2: 172.16.2.2 SAT3: 172.16.3.2 Para característica 2: Basta que a interface de rede USB/SAT seja configurada com IP em uma faixa completamente diferente da rede local, ex: Rede local: 172.16.0.1-255 SAT1: 10.1.1.2 SAT2: 10.1.2.2 Na versão 02.00.00, o SS-1000 pede para o driver/sistema operacional configurar o MAC da interface de rede USB/SAT com o número de série do SAT. Desta forma, para o SAT 900004697-18, o MAC que o driver/sistema operacional escolherá para a interface de rede que ele cria é AA:00:00:46:97:18. OBS: Importante lembrar que esta interface só é usada para a comunicação entre computador e SAT, não interferindo na rede local. 1
3. AS NOVAS FUNÇÕES DA SATDLL (VERSAO 02.00.00 OU SUPERIOR) Para realizar as configurações ditas acima, foram adicionadas três funções na SATDLL: (1) Int AbrePortaSAT(char* NumeroDeSerie, char* IpDaInterfaceUsbSat, char* Mascara) O que esta função faz é varrer todas as interfaces de rede do computador, verificar quais são USB/SAT, verificar qual tem o MAC compatível com o número de série fornecido e configurar essa interface com os valores escolhidos. Argumentos NumeroDeSerie Significado String C contendo o número de série do equipamento SAT. IpDaInterfaceUsbSat String C contendo endereço IP a ser usado na interface USB/SAT criada no computador pelo driver do sistema operacional. Mascara String C contendo a máscara. Sugerimos o valor 255.255.255.0. Retorno A função retornará um inteiro. Ver tabela de possíveis valores. (2) Int AbrePortaPadraoSAT() Esta função não busca um número de série específico. Ela varre todas as interfaces de rede do computador procurando por uma que seja USB/SAT e a configura com o endereço IP padrão. Esta função é muito útil para quando se usa apenas um SAT no computador. Um retorno com sucesso garante que o SAT está conectado, configurado corretamente e pronto para uso. Retorno A função retornará um inteiro. Ver tabela de possíveis valores. 2
Tabela de possíveis retornos para as funções acima: Retorno Significado 0 Sucesso. A configuração funcionou e o SAT está respondendo. 1 IP já usado. O IP está sendo usado por outra interface de rede. 2 SAT não encontrado. A DLL não conseguiu encontrar um SAT com o número de série fornecido. Ela usa o MAC das interfaces para esta busca. 3 Falha na configuração de IP. O sistema operacional não permitiu que a DLL configurasse a interface com o IP solicitado. 4 Parâmetro inválido. Algum parâmetro utilizado está fora do padrão. 5 Erro na criação do socket. A DLL não conseguiu criar um pacote para se comunicar com o SAT. Checar permissão da aplicação que usa a DLL. 6 Erro no envio de mensagem. A DLL não conseguiu enviar a mensagem ao SAT. 7 Falha ao tentar receber mensagem do SAT. O sistema operacional não permitiu que a DLL tentasse receber a resposta do SAT. 8 Falha no roteamento. A DLL, mesmo insistindo, não conseguiu que o sistema operacional roteasse os pacotes corretamente. 9 Falha na configuração da interface. A DLL não conseguiu configurar a interface para receber a reposta do SAT como precisa. 10 Sem resposta. O SAT não respondeu a DLL afirmando que agora consegue se comunicar com o novo endereço. Para este retorno, a DLL tenta receber a resposta mais uma vez. 11 Resposta inválida. A DLL recebeu uma resposta inválida. (3) int HabilitaConfigAvancada(char* código_de_ativacao) Esta função é responsável por habilitar tudo o que está sendo descrito neste documento. Por padrão e questões de compatibilidade, mesmos os SS-1000 fabricados na versão 02.00.00 vêm com este recurso desabilitado. Ao chamar esta função, a DLL irá solicitar que o SAT passe a usar a nova configuração do driver USB-Ethernet. Importante observar que será necessário reiniciar o SAT manualmente e aguardar o Windows reinstalar o driver, caso o Windows não instale o driver automaticamente, o mesmo arquivo.inf deverá ser usado. Esta reinstalação é necessária pois agora o Windows reconhece o número de série do SAT, então, para ele, cada SAT será um equipamento diferente. Argumentos código_de_ativacao Significado String C contendo o código de ativação do equipamento. Caso o equipamento esteja desativado, o código 00000000 (sequência de oito zeros) deve ser informado. Retorno Significado 0 Sucesso. 3
A configuração funcionou e o SAT deve ser reiniciado para passar a usar a nova configuração. 1 Falha na comunicação. Não foi possível realizar a comunicação com o equipamento. 2 Código de ativação inválido. O código de ativação fornecido não é o mesmo que foi utilizado no processo de ativação. 3 Versão inválida. SAT não está na versão 02.00.00 4. VÁRIOS SATS E WINDOWS LOADLIBRARY Quando uma linguagem como Java, C# ou até mesmo C++ carregam uma DLL em tempo de execução (somente depois de iniciar), a função LoadLibrary do Windows é chamada direta ou indiretamente. Essa função tem um mecanismo de controle de carregamento de DLL e esse mecanismo não carrega duas (ou mais) instâncias da biblioteca para a memória, apenas controla usando um contador. Dito isso, para que vários SATs sejam usados pelo mesmo aplicativo é importante que o aplicativo carregue DLLs com nomes ou em pastas diferentes. Desta forma, o sistema operacional entenderá que são bibliotecas diferentes e carregará todas elas. Caso isso não seja feito, a DLL sempre tentará se comunicar com o SAT da última chamada da função AbrePortaSAT. 5. PEQUENO EXEMPLO Abaixo segue um exemplo em python, bem simples, para ilustrar como um programa conseguiria usar dois SS-1000: from ctypes import * satdll_1 = windll.loadlibrary("satdll1.dll") satdll_2 = windll.loadlibrary("satdll2.dll") ret = satdll_1.abreportasat("900004697-18", "10.1.1.2", "255.255.255.0") print "satdll_1.abreportasat:", ret ret = satdll_1.consultarstatusoperacional(1,"codigo_ativacao") print "satdll_1. ConsultarStatusOperacional:", c_char_p(ret).value ret = satdll_2.abreportasat("900004694-75", "10.1.2.2", "255.255.255.0") print "satdll_2.abreportasat:", ret ret = satdll_2.consultarstatusoperacional(1,"codigo_ativacao") print "satdll_2. ConsultarStatusOperacional:", c_char_p(ret).value >python exemplopython.py satdll_1.abreportasat: 0 satdll_1. ConsultarStatusOperacional: 000001 10000 Resposta com Sucesso 900004697 DHCP... satdll_2.abreportasat: 0 satdll_2. ConsultarStatusOperacional: 000001 10000 Resposta com Sucesso 900004694 DHCP... 4
5