O rádio possui dois modos de operação distintos: o modo básico e o modo extendido. No modo básico o rádio apenas faz o envio/recebimento dos pacotes escritos no frame buffer. Já no modo extendido o rádio implementa algumas funcionalidades do MAC do protocolo IEE802.15.4 como envio/recebimento automatico de ACKs e filtragem de endereço. O modo de operação utilzado foi o modo básico.
A figura 14 apresenta o diagrama de estados do rádio no modo de operação básico. Os estados serão explicaodos a mediada que entrarmos em detalhes na classe responsável pela operação do rádio.
A classe AT86RF230 é a responsável pelo controle do rádio. A figura 15 mostra os seus métodos principais.
Os métodos de inicialização do mediador configuram o o controlador de SPI do ATmega e colocam o rádio no estado TRX_OFF, onde ele está pronto para o uso. A mudança de estados do rádio pode ser controlada pelo pino SLP_TR ou escrevendo valores no registrator do rádio TRX_STATE.
Os métodos rx_on e rx_off são utilizados para colocar e tirar o rádio no estado RX_OFF. Neste estado o rádio fica procurando por frames que utilizam a modulação e o preambulo do protocolo IEEE802.15.4. Ao encontrar um frame, ele é demodulado, os dados são armazenado no frame buffer e o rádio retorna ao estado RX_ON. Para evitar que um novo frame sobrescreva a anterior antes que ele seja lido, o rádio é sempre colocado de volta no estado TRX_OFF depois de ter recebido algum frame. O método dataReceived é usado para verificar se algum frame foi recebido e o método receive é usado para copiar o frame recebido do frame buffer do rádio para o buffer definido pelo usuário.
O método send é usado para transmitir dados pelo rádio. O rádio vai para o estado PLL_ON, que é o estado que o rádio está pronto para transmitir. Em seguida os dados são copiados para frame buffer e o pino SLP_TR é setado para high, mudando o rádio para o estado BUSY_TX onde os dados do frame buffer são transmitidos. Ao final da transmição o rádio volta ao estado PLL_ON e depois para TRX_OFF, quando o método retorna.
Os métodos retornam um valor do tipo result_t, indicando o resultado da operação: SUCESS(concluída com sucesso), BUSY(O rádio estava no estado BUSY_RX ou BUSY_TX), FAILED_OPERATING_MODE(Rádio no estado incorreto para a operação) e FAILED(falhou por algum outro motivo).
Tiago Rogerio Muck 2009-07-08