Camada de Abstração de Hardware do Virtual-Cam#
A hal do virtual-cam é uma camada de abstração de hardware alternativa à hal lpc2106-cmucam3 que permite a prototipagem de software cc3 em um PC. Isso é muito semelhante a um simulador da CMUcam3. A hal do virtual-cam carregará quadros armazenados em um diretório da mesma forma que a CMUcam3 normalmente carrega quadros da câmera. Todas as funções cc3 normais são então realizadas em uma fifo virtual. Um texto de depuração adicional será exibido em tempo de execução, que normalmente não aparece quando a hal lpc2106-cmucam3 é usada. Isso notifica o usuário sobre os estados dos LEDs e os comandos cc3 de baixo nível que são chamados. A entrada e saída serial são substituídas pela entrada e saída padrão da aplicação.
Compilando
Para compilar código para o virtual-cam, simplesmente digite hal=virtual-cam quando executar o make. Por exemplo:
projects/hello_world :> make hal=virtual-cam
Isso gerará um arquivo executável hello_world_virtual-cam.
Para fazer make clean, você ainda precisará especificar a hal. Por exemplo, para limpar o hello_world:
projects/hello_world :> make hal=virtual-cam clean
Executando um Projeto virtual-cam
O virtual-cam lerá 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, em um terminal bash, você poderia executar um arquivo 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 alimentadas no buffer de quadros da câmera virtual. As imagens precisam estar no formato PPM e numeradas como “IMGxxxxx.PPM”, onde os x’s representam o número do quadro. A hal do virtual-cam lerá as imagens cada vez que cc3_load_frame() for chamada, em ordem crescente, começando por “IMG00000.PPM”. Quando não houver mais imagens disponíveis, a virtual-hal entrará em pânico e parará. Essas imagens podem ser criadas usando o projeto ppm-grab. Por padrão, o projeto ppm-grab armazena imagens brutas, de alta resolução e não comprimidas no formato correto para serem usadas pela 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 atualmente não são suportadas. Em muitos casos, a hal do virtual-cam simplesmente sempre retornará true ou false para permitir que sua aplicação continue. Ao compilar com a hal do virtual-cam, VIRTUAL_CAM será definido para que sua aplicação possa alternar certas regiões de execução com base na hal atual. Por exemplo, para desabilitar uma espera de botão ao usar o virtual-cam, você poderia usar:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
ou se você quiser habilitar mais depuração, poderia escrever algo como:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif