void
capture_task (void *data)
{
    int ret;
    
    // We need to disable interrupts during capture so we do not
    // interfere with taking a photo
    extint_disable (extint1);
    
    while ( tcm8230_frame_ready_p ())
        continue;    
    
    while (! tcm8230_frame_ready_p ())
        continue;
    
    ret = tcm8230_capture (image, sizeof(image), 200);
    
    if (ret < 0) // Capturing failed
        *comms_data[CD_PHOTO_READY-ARRAY_OFFSET] = 0;
    else
    {
        *comms_data[CD_PHOTO_READY-ARRAY_OFFSET] = 1;        
        kernelTaskBlocked (CAPTURE_TASK); // Reblock capture task
        kernelTaskReady (PHOTO_READY_FLASH_TASK); // Indicate a photo is available
    }
    extint_enable (extint1);
}
Пример #2
0
int
main (void)
{
    led_t leds[LEDS_NUM];
    usb_cdc_t usb_cdc;
    int i;

    /* Initialise LEDs.  */
    for (i = 0; i < LEDS_NUM; i++)
	leds[i] = led_init (&leds_cfg[i]);

    led_set (leds[0], 0);
    led_set (leds[1], 0);
    led_set (leds[2], 0);

    usb_cdc = usb_cdc_init ();
    
    sys_redirect_stdin ((void *)usb_cdc_read, usb_cdc);
    sys_redirect_stdout ((void *)usb_cdc_write, usb_cdc);
    sys_redirect_stderr ((void *)usb_cdc_write, usb_cdc);

    tcm8230_init (&cfg);

    /* Wait until USB configured.  */
    while (! usb_cdc_update ())
        continue;

    led_set (leds[0], 1);

    while (1)
    {
        int32_t ret;

        led_set (leds[1], 1);
        while ( tcm8230_frame_ready_p ())
            continue;

        led_set (leds[1], 0);
        while (! tcm8230_frame_ready_p ())
            continue;

        led_set (leds[1], 1);

        ret = tcm8230_capture (image, sizeof(image), 200);

        if (usb_cdc_update ())
        {
            led_set (leds[0], 1);
            led_set (leds[2], 1);

            if (ret < 0)
                fprintf (stderr, "TCM8230 error: %d\r\n", (int)ret);
            else
                image_dump(image, SQCIF_HEIGHT, SQCIF_WIDTH);
            led_set (leds[2], 0);
        }
        else
        {
            /* USB disconnected.  */
            led_set (leds[0], 0);
        }
    }
}