DVD+RW Recorder

Equipe

Hammurabi Mendes
Rodrigo dos Santos Lima
Leandro Inácio de Oliveira Bororo
Bruno Klava

Conteúdo

Apresentação do problema
Manutenção do estado geral do sistema
Comunicação entre subsistemas
Controle de entrada/saída do aparelho
Diagrama de classes envolvendo todas as operações

Apresentação do problema

A descrição completa do problema encontra-se na página http://designfest.acm.org/

O DVD+RW Recorder é um aparelho que combina as funcionalidades de um DVD player comum às de um videocassete, permitindo a gravação de programas de televisão sobre esta nova mídia.

Em um DVD player comum (desenvolvido pela Philips), existe um subsistema chamado PBS (Playback Subsystem) que lida com o dispositivo que lê mídias DVD, sendo responsável pelas seguintes funcionalidades, entre outras:

Figura 1: Estrutura geral do PBS

Uma parte do PBS é responsável pelo recebimento e tratamento de comandos de entrada (destacada na figura sob o rótulo de Input). Além disso, temos destacadas outras duas frações do PBS: o OSD e o LD.

O OSD (On Screen Display) é uma camada de imagem sobreposta à saída de vídeo do aparelho, e trata-se do principal meio de interface com o usuário provido pelo PBS. Já o LD (Local Display) é um pequeno dispositivo baseado em LEDs que se encontra à frente do aparelho, apresentando informações acerca do estado do disco e das operações em andamento.

Relacionado aos aparelhos de vídeo-cassete (do mesmo fabricante), existe um outro subsistema que se chama Recording Control Subsystem (RCS), que apresenta as funcionalidades do PBS no contexto de uma fita cassete. Como esta mídia permitia gravação, temos também as seguintes funcionalidades:

Figura 2: Estrutura geral do RCS

Vemos que a figura referente ao RCS destaca também o Input, o OSD e o LD. Além disso, é destacado algo chamado de Tape Deck Interface. Esta é a parte que lida diretamente com o hardware da fita em um vídeo cassete.

O desafio apresentado no Design Fest consiste em "juntar" estes subsistemas de forma a englobar a funcionalidade de um DVD+RW Recorder. Da especificação, é assumido que:
O subsistema aludido anteriormente que recebe as informações de saída (referentes ao OSD e ao LD) se chama AM (de Application Manager), e também foi definido no documento que descreve o desafio.

As ações do usuário sobre o aparelho como um todo podem se concretizar em operações sobre o RCS, PBS ou ambos. O AM deve então ser responsável também por intermediar os comandos do usuário junto aos módulos de software internos.

Estas modificações no PBS e no RCS permitem que estes subsistemas, autônomos no contexto de suas aplicações (de seus aparelhos) originais, sejam acoplados. Abaixo, apresenta-se graficamente estas mudanças.


Figura 3: PBS modificado para permitir o acoplamento


Figura 4: RCS modificado para permitir o acoplamento

Os problemas mais evidentes a serem tratados na resolução do problema são os seguintes:
Na figura seguinte, temos uma visão geral da arquitetura do novo aparelho, o DVD+RW Recorder, mostrando como os subsistemas anteriormente descritos devem ser interligados.


Figura 5: Arquitetura do DVD+RW Recorder

Nas seções seguintes serão apresentadas as soluções para os problemas citados anteriormente. Basicamente, eles são instanciados com os seguintes nomes:
  1. Manutenção do estado geral do sistema
  2. Comunicação entre subsistemas
  3. Controle de entrada/saída do aparelho

Manutenção do estado geral do sistema

O controle de estados é o principal problema a ser resolvido no desafio. Cada um dos subsistemas apresenta seu próprio controle de estados, e deve-se manter um estado global do sistema de modo a permitir que comandos enviados para o aparelho possam ser encaminhados aos subsistemas corretos, que saídas geradas pelo aparelho estejam condizentes com seu contexto de funcionamento e que comunicações inter-subsistemas possam ser validadas, eventualmente modificando o estado global do sistema.

A seguir, na Figura 6, apresentamos um diagrama que mostra os estados globais do aparelho e as possíveis transições entre eles. Adiante temos uma explicação textual mais detalhada destas informações.


Figura 6: Diagrama de estados

Descrição dos estados da máquina:

Off:

Representa o estado em que o sistema se encontra totalmente desligado. É acessível a partir de todos os outros estados pelo comando power_off.

Transições possíveis:

Pode ir para o estado StandbBy caso o sistema seja ligado.

StandBy:

Estado no qual o sistema espera ser ligado manualmente ou acordado via evento de timer. É acessível a partir de todos os outros estados pelo comando standby.

Saídas: OSD desligado e LD mostrando o LD do RCS (onde deverá haver informações sobre os timers programados, a hora atual no sistema e se há mídia gravável no aparelho).

Transições possíveis:

Se for ligado manualmente, o sistema vai para o estado TOC. Se for ligado via evento de timer e houver mídia gravável disponível, o sistema muda para o estado Recording.

TOC:

Estado em que o conteúdo de uma mídia é mostrado no OSD. A partir desse estado é possível escolher uma cena para ser visualizada ou editar os detalhes de uma gravação.

Saídas: OSD e LD mostrando OSD e LD do PBS.

Transições possíveis:

Pode mudar para o estado Playing se o usuário pressionar play ou enter em uma das cenas disponíveis no DVD. A partir do TOC, o usuário também pode acessar os menus de sistema, timer e edição usando os comandos correspondentes no controle remoto ou no painel frontal. O sistema pode ir para o estado Recording por algum evento de timer ou ir para o estado TV com o respectivo comando do usuário.

Playing:

Sistema reproduzindo conteúdo da mídia.

Saídas: OSD e LD mostrando OSD e LD do PBS.

Transições possíveis:

Vai para TOC se o usuário acionar stop ou quando chega ao fim do filme que está sendo reproduzido.

TV:

Quando o sistema está reproduzindo a programação da TV.

Saídas: OSD e LD do RCS.

Transições possíveis:

Pode ir para o TOC se o usuário pressionar o botão TV/DVD, para os menus de sistema ou timer ou para o estado Recording se o usuário pressionar o botão REC ou se um timer disparar a gravação.

Timer:

Usuário acessando o menu de programação de timer.

Sáidas: OSD e LD do RCS.

Transições possíveis:

Assim que o usuário terminar a programação, deve voltar para o estado anterior (TOC ou TV).

Recording:

Sistema gravando programa de TV para DVD. Acessível através de comando manual do usuário (REC) ou evento de timer.

Sáidas: OSD e LD do RCS.

Transições possíveis:

Assim que termina a gravação, pode ir para StandBy (se a gravação foi iniciada por evento de timer) ou para TOC (se a gravação foi iniciada manualmente por comando de usuário).

Editing:

Menu de edição de conteúdo do DVD, acessível via TOC.

Saídas: OSD e LD do PBS.

Transições possíveis:

Volta para TOC assim que termina a edição.

System Menu:

Menu do sistema no qual o usuário faz todas configurações como data e hora, canais, preferências do DVD, entre outras.

Saídas: Dependem do que está sendo configurado.

Transições possíveis:

Assim que terminado o acesso ao menu, o sistema retorna ao TOC.

Cada um dos estados é mapeado em uma sub-classe de "State". Cada uma destas classes é responsável por informar para quais outros a máquina de estados global do aparelho pode migrar dado um comando. A seguir, na Figura 7 apresentamos um diagrama envolvendo todas estas classes.


Figura 7: Diagrama da máquina de estados

Comunicação entre subsistemas

O RCS se comunica com o PBS através da interface Tape Deck, conforme apresentado na introdução. Esta comunicação é assíncrona, e pode levar a modificações no estado do PBS.

Porém, é preciso interceptar as mensagens trocadas entre os subsistemas devido à necessidade de manter consistente o estado global do sistema. Por exemplo, se o aparelho contém um disco somente-leitura e o usuário está acessando a tabela de conteúdo, um evento de timer disparado pelo RCS em direção ao PBS solicitando a gravação de um canal de televisão deve ser ignorado.

A solução apresentada envolve o uso de um interceptador que implementa a interface do Tape Deck, conforme apresentado na Figura 8. Este interceptador consulta o AM para verificar se a mensagem trocada entre os subsistemas deve:


Figura 8: Interceptando as mensagens da interface do Tape Deck

Uma mensagem é bloqueada se ela não faz sentido dado o contexto (o estado) do aparelho como um todo. Se ela fizer sentido, o estado pode ser alterado conforme as especificações de transição de estado apresentadas anteriormente.

Desta forma, fazendo com que o AM esteja ciente das mensagens trocadas entre os subsistemas, fazemos com que o estado global do aparelho se mantenha consistente.

Controle de entrada/saída do aparelho

Os comandos do usuário para o aparelho devem ser direcionados ao RCS, ao PBS ou a ambos. Cada um dos subsistemas controla seu estado, e o estado global do sistema é mantido pelo AM. É baseado neste estado global que é decidido quais subsistemas devem receber o comando do usuário, e daí cada um deles mantêm seu estado particular conforme sua lógica de funcionamento.

Os comandos do usuário são recebidos por uma classe chamada ControlCenter. Ela ordena os comandos de entrada e os encaminhados para a classe InputControl. Esta última transforma os comandos (dados binários) fornecidos pelo usuário em requisições do sistema. O ControlCenter verifica junto à máquina de estados do sistema se a requisição gera uma transição válida, ou seja, se ela faz sentido no corrente contexto de funcionamento.

Se o comando fizer sentido no contexto corrente de funcionamento do sistema, ele é enviado ao RCS ou PBS (ou ambos). Se ele não fizer sentido, o comando é ignorado.

Na Figura 9 temos o diagrama das classes envolvidas neste processo.


Figura 9: Controle de entrada

O controle da saída é mais delicado. Os dois subsistemas podem gerar, ao mesmo tempo, saídas OSD, que devem ser apresentadas na tela da televisão. A classe ControlCenter recebe as mensagens correspondentes do RCS e do PBS e as envia à classe OSDController (sub-classe de OutputControl). Esta última "junta" as diversas informações a serem apresentadas em tela em um menu consistente, que é retornado ControlCenter. O menu está então pronto para ser apresentado em tela.

Existe uma classe análoga ao OSDController, o LDController, referente ao LD. Basicamente, as mensagens dos subsistemas são interpretadas de forma a identificar um conjunto de LEDs que devem ser ativados na parte frontal do aparelho.

As classes envolvidas no controle de saída são apresentadas na Figura 10.


Figura 10: Controle de saída

Diagrama de classes envolvendo todas as operações