Camada de Abstração de Hardware Virtual-Cam#

O hal do virtual-cam é uma camada de abstração de hardware alternativa ao hal lpc2106-cmucam3 que permite a prototipagem de software cc3 num PC. Isto é muito semelhante a um simulador da CMUcam3. O hal do virtual-cam carregará frames armazenados num diretório da mesma forma que a CMUcam3 normalmente carrega frames a partir da câmara. Todas as funções cc3 normais são então executadas sobre uma fifo virtual. Será apresentado, em tempo de execução, texto de depuração adicional que normalmente não aparece quando o hal lpc2106-cmucam3 é utilizado. Isto notifica o utilizador dos estados dos LEDs e dos comandos cc3 de baixo nível que são chamados. A entrada e a saída série são substituídas pela entrada e saída padrão da aplicação.

Compilação

Para compilar código para o virtual-cam, basta escrever hal=virtual-cam quando executar o make. Por exemplo:

projects/hello_world :> make hal=virtual-cam

Isto gerará um ficheiro executável hello_world_virtual-cam.

Para fazer make clean, ainda precisará de especificar o hal. Por exemplo, para limpar o hello_world:

projects/hello_world :> make hal=virtual-cam clean

Executar um Projeto virtual-cam

O virtual-cam lerá as imagens de um diretório especificado pela variável de ambiente CC3_VCAM_PATH. O caminho deve ser relativo ao diretório onde o executável virtual-cam é chamado. Por exemplo, num terminal bash, poderá executar um ficheiro virtual-cam assim:

projects/hello_world :> ls
hello_world_virtual-cam.exe  Makefile main.c my_img_dir

projects/hello_world :> export CC3_VCAM_PATH=my_img_dir

projects/hello_world :> ./hello_world_virtual-cam.exe

O diretório virtual-cam contém imagens de exemplo que serão introduzidas no frame buffer da câmara virtual. As imagens têm de estar em formato PPM e numeradas «IMGxxxxx.PPM», onde os x representam o número do frame. O hal do virtual-cam lerá as imagens sempre que cc3_load_frame() for chamado, por ordem crescente, começando por «IMG00000.PPM». Quando não houver mais imagens disponíveis, o virtual-hal entrará em pânico e parará. Estas imagens podem ser criadas utilizando o projeto ppm-grab. Por predefinição, o projeto ppm-grab armazena imagens raw, de alta resolução e não comprimidas, no formato correto para serem utilizadas pelo hal do virtual-cam.

Problemas de Simulação

Uma questão principal de simulação é que a temporização e a entrada externa de GPIO ou botões não são atualmente suportadas. Em muitos casos, o hal do virtual-cam simplesmente devolverá sempre true ou false para permitir que a sua aplicação continue. Ao compilar com o hal do virtual-cam, VIRTUAL_CAM será definido para que a sua aplicação possa alternar determinadas regiões de execução com base no hal atual. Por exemplo, para desativar uma espera por botão ao utilizar o virtual-cam, poderá usar:

#ifndef VIRTUAL_CAM
   while(!cc3_read_button());
#endif

ou se quiser ativar mais depuração, pode escrever algo como:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif