Análise de Domínio
O objetivo é criar um driver infravermelho para linux, rodando em um processador StrongARM 1110 e fornecer uma abstração orientada a objetos para os desenvolvedores dos protocolos de comunicação.
Para seguir o padrão IrDA, são obrigatórios 3
protocolos:
- PHY (Physical
Signaling Layer)
- IrLAP (Link
Access Protocol)
- IrLMP (Link
Management Protocol and Information Access Service (IAS))
Destes, IrLAP e IrLMP é
feito por software e fica a cargo do grupo de protocolos. Já o PHY fica a cargo
do driver que implementa do infravermelho. Este protocolo depende da velocidade
que é usada para comunicação.
Para taxas de transmissão baixas, até
115.2 kbps, a operação se dá utilizando transmissão assíncrona de caracteres,
com start e stop bits. Neste modo, a camada física opera essencialmente como um
modem, convertendo os bits da UART diretamente em pulsos de luz. Neste caso, o
protocolo IrLAP incorpora um conjunto de mecanismos que são usados para agrupar
os dados em frames para ser usado pelos outros protocolos.
Ao ultrapassar a velocidade de 115.2
kbps, o IrDA incorpora mais mecanismos para prover frames. Entre 115.2 kbps e
1.152 Mbps é utilizado o protocolo HDLC (High-level Data Link Control) e há
controle de erro, feito pelo padrão CCITT de 16 bits.
Para taxas de transferência de 4 Mbps, a camada física do IrDA emprega esquemas de codificação mais sofisticados, similares aos conceitos encontrados em equipamentos de LAN. O mais importante é o PPM (Pulse Position Modulation) no qual grupos de pulsos de sinalização são transmitidos para representar 2 bits.
A velocidade máxima que o processador StrongARM AS-1110 suporta é 4Mbps, porém segundo informações obtidas com o grupo que irá implementar o infravermelho no RCX, a velocidade neste não ultrapassa os 115.2 kbps. Portanto poderemos apenas fornecer funções que lêem e escrevem um byte, e o IrLAP que deverá se encarregar de agrupar os dados em frames para posterior processamento. Forneceremos também funções para configurar a velocidade (entre 9600 bps e 115.2 kbps). Segundo a especificação do processador StrongARM, o formato de transmissão deve produzir 8 bits de dados, 1 start bit, 1 stop bit e sem paridade, como mostrado na figura 1. Logo, estes parâmetros não podem ser configurados pelo usuário. O tipo de modulação utilizado é o padrão Hewlett-Packard Serial Infrared (SIR).
Figura 1
A
programação de um driver para linux é feita em C, utilizando programação
estruturada. Porém é necessário fornecer uma interface orientada a objetos. Uma
boa política a ser adotada é a classificação de cada protocolo como sendo uma
classe. Com isto, o protocolo PHY é representado obviamente pela classe PHY.
Esta classe possui um construtor e um destrutor, que configura o hardware e o
deixa pronto para começar o envio e o recebimento de dados, estes que são
feitos por métodos enviaByte e recebeByte, como mostrado na figura 2.
Figura 2
Os métodos
de envio e recepcão de dados são bloqueantes. Porém o hardware fornece 2 filas,
uma para transmissão (com 16 entradas) e outra para recepção (com 20 entradas),
logo estes métodos não serão bloqueados necessariamente até o envio físico dos
dados. Caso necessário podem ser criadas filas dentro da classe, para otimizar
o processo.