Olá leitores,
Agora, se você é uma empresa que fornece dispositivos a serem utilizados na automação
bancária e comercial em geral, é mais provável que você consiga atender a maioria de
seus clientes, utilizando até mesmo um padrão proprietário para a camada de acesso ao
dispositivo. Isso ocorre porque em geral, o teu dispositivo é parte de uma solução maior
(exemplo, você fornece a impressora térmica que é utilizada em um ATM), e a
responsabilidade de fornecer a infra-estrutura de drivers da camada de negócio (ou seja, a
parte que fará interface com a aplicação), é em geral da empresa que está fornecendo
essa solução integrada final.
Com esse material em mãos, você precisará ler, pelo menos, aos documentos da Part 1 -
API/SPI Programer's Reference e Part 2 - Service Class Definition -
Programmer's Reference. E além desses dois você precisará também ler o documento
referente a classe que especifica o tipo de dispositivo para o qual você quer construir o
driver XFS. Por exemplo, se você quer desenvolver um driver XFS para uma impressora
térmica, então a classe de dispositivo em questão é a PTR, e você encontrará sua
especificação no documento CWA 15748- 3.
Se a sua escolha foi por desenvolver a infra-estrutura em XFS, então você deverá saber
que sua infra-estrutura somente executará em sistemas Windows. Deverá
ter consciência também de que a plataforma de desenvolvimento terá que ser uma que
permita a criação de DLL. O SDK do XFS é baseado na API da linguagem C. Por isso,
como plataforma de desenvolvimento o melhor é utilizar C ou C++.
Desenvolvendo o driver
Abaixo segue uma figura que mostra a arquitetura de uma solução executando em XFS.
Aqui, a sua responsabilidade está na camada mais inferior da solução, que é o Service
Provider. Você terá pelo menos um Service Provider, para cada classe de dispositivo que
compuser a sua solução, mas você poderá ter um Service Provider por DLL ou uma DLL
para vários Service Providers, ou ainda uma única DLL para todos os Services Provider
existentes em sua solução (não recomendo essa ultima abordagem):
Sua DLL precisará exportar todas as funções com o prefixo WFP, especificadas no
capítulo 6 do primeiro documento da especificação. Abaixo segue uma imagem extraída
do Dependency Walker, onde são listadas as funções exportadas por uma DLL que
implementa um Service Provider:
Além de exportar essas funções em sua DLL, você terá também que implementá-las de
acordo com a especificação, atentando principalmente para o comportamento esperado
para cada uma delas. Isso é assim, justamente para que a idéia de se ter um framework
realmente funcione. Veja que o objetivo do framework XFS é permitir que aplicações sejam
desenvolvidas para a automação bancária e comercial, de uma maneira independente da
plataforma de hardware. Quando a especificação é atendida, normalmente os clientes tem
livre escolha de fornecedores de hardware, e geralmente utilizam muitos dos principais
fornecedores para compor seu parque de equipamentos na produção, e tudo isso
utilizando uma única aplicação, que não possui qualquer característica técnica amarrada a
nenhum desses fornecedores. Essa é a idéia e é por isso que é necessário se atendar
para o que diz a especificação.
Você notará que todas essas funções exportadas são comuns a todos os drivers XFS,
sejam eles drivers que atendam a classe PTR (impressora), ou a qualquer outra classe. Na
verdade, o comportamento específico de cada classe só vem à tona a partir da função
WFPExecute. É com essa função que se acionam os comportamentos ou "comandos"
específicos de cada classe de dispositivo.
Olhando a especificação, você verá que essa função recebe vários parâmetros de
execução. Dentre eles está o parâmetro dwCommand. É nesse parâmetro que você
receberá a identificação do comando que a aplicação do cliente quer executar junto ao
dispositivo implementado pelo seu driver. Por exemplo, se a aplicação quisesse solicitar o
status de sua impressora térmica, então ela preencheria esse campo com o valor definido
na constante: WFS_INF_PTR_STATUS. E você teria que construir a resposta a esse
comando, tomando por base o que diz a especificação no documento da classe PTR. Você
notará nesse documento, que todos os "comandos" são identificados por constantes como
essa aí, e se dividem em duas categorias: Info Commands, para comandos de
informações a cerca do dispositivo e Execute Commands, para comandos de ação junto
ao dispositivo. Abaixo segue uma listagem dos comandos suportados pela classe PTR do
XFS 3.10:
Você precisará então, ler com atenção a especificação da classe de dispositivo que você
está implementando, para que o seu driver se comporte o mais próximo possível do
esperado segundo essa especificação.
Uma boa estratégia é o cliente criar um documento com uma especificação mínima do
XFS, contendo todos os retornos e comportamentos que ele espera de um determinado
driver XFS. Claro que para dizer que o produto final disso é XFS, terá que se fazer essa
mini-especificação baseada na especificação XFS oficial. O fato é que após criado esse
"documento de aderência", os fornecedores poderiam adequar seus drivers para que se
comportem exatamente conforme o cliente quer, atendendo a especificação XFS do ponto
de vista do cliente. Para o cliente isso é muito bom, mas algumas empresas fornecedoras
não vêem isso com bons olhos, pois essa estratégia facilmente implicaria em ter uma infra-
estrutura de drivers XFS para cada cliente, o que aumenta os custos de manutenção das
empresas fornecedoras. Bem, nem tudo é perfeito :)
Bem é isso :)
Autor
Meu nome é Fagner Souza, sou especialista em automação bancária e comercial com
larga experiência em sistemas de Auto-Atendimento. Meu website é
http://www.fagnersouza.com.br/, e nele você pode encontrar meus contatos.