Esempio n. 1
0
void EventCheck2()
{
   VCOS_THREAD_T thread1, thread2;

   // Create two event group.
   
   TEST_OK("os_eventgroup_create", os_eventgroup_create ( &eventgroup, "group") );
   TEST_OK("os_eventgroup_create", os_eventgroup_create ( &eventgroup2, "group2") );

   TEST_OK("os_thread_start", os_thread_start( &thread1, &ThreadTwo, NULL, 1000, "ThreadOne"));
   TEST_OK("os_thread_start", os_thread_start( &thread2, &ThreadThree, NULL, 1000, "ThreadTwo"));

   // Wait for threads to start. Should really check a semaphore!
   TEST_OK("os_delay", os_delay(1000));


   for (current_event=1;current_event<=TERM_EVENT;current_event++)
   {
      TEST_OK("os_eventgroup_signal", os_eventgroup_signal ( &eventgroup, current_event) );
      
      // for moment same on other thread
      current_event2 = current_event;
      
      TEST_OK("os_eventgroup_signal", os_eventgroup_signal ( &eventgroup2, current_event2) );
      
      TEST_OK("os_delay", os_delay(1000));
   }

   TEST_OK("os_eventgroup_destroy", os_eventgroup_destroy ( &eventgroup ) );
}
Esempio n. 2
0
/* ----------------------------------------------------------------------
 * initialise the mphi driver
 * this is part of the common driver api
 * return 0 on success; all other values are failures
 * -------------------------------------------------------------------- */
static int32_t mphi_init( void )
{
    int i, ret;
    struct task_struct* t;

    memset(&mphidrv, 0, sizeof(mphidrv));
    for(i = 0; i < MPHI_CHANNEL_MAX; i++)
    {
        mphidrv.mphi[i].channel = i;
        mphidrv.mphi[i].drv = &mphidrv;
        sema_init(&mphidrv.mphi[i].fifolock, 1);
    }

    sema_init(&mphidrv.buslock, 1);
    os_eventgroup_create(&mphidrv.rxtxavail, "rxtxavail");

    t = kthread_run(mphi_rxtx_task,  &mphidrv, "mphi_rxtx_task");
    if(IS_ERR(t))
    {
        VC_DEBUG(MPHI, "Error starting mphi_rx_task\n");
        return -1;
    }

#ifdef MPHIDRV_LOGLEVEL
    sema_init(&mphidrv.mphilog_lock, 1);
    mphidrv.mphilog_rindex = 0;
    mphidrv.mphilog_windex = 0;
    mphidrv.mphilog = vmalloc(VC03_MPHILOG_MAX);
    memset(mphidrv.mphilog, 0, VC03_MPHILOG_MAX);

    mphidrv.mphilog_proc = create_proc_entry("VC03_mphilog", 0644, NULL);

    if (mphidrv.mphilog_proc == NULL)
    {
        remove_proc_entry("VC03_mphilog", NULL);
        printk(KERN_ALERT "could not initialize /proc/VC03_mphilog");
    }
    else
    {
        mphidrv.mphilog_proc->read_proc  = mphi_omxlog_procread;
        mphidrv.mphilog_proc->write_proc = NULL;
        mphidrv.mphilog_proc->owner	= THIS_MODULE;
        mphidrv.mphilog_proc->mode 	= S_IFREG | S_IRUGO;
        mphidrv.mphilog_proc->uid		= 0;
        mphidrv.mphilog_proc->gid		= 0;
        mphidrv.mphilog_proc->size 	= 37;
    }
#endif //MPHIDRV_LOGLEVEL

    if (( ret = vchost_request_irq( vc_gpioirq, &mphidrv )) != 0 )
    {
        return ret;
    }

    return 0;
}
Esempio n. 3
0
void EventCheck()
{
   VCOS_THREAD_T thread;

   // Create one event group.
   
   TEST_OK("os_eventgroup_create", os_eventgroup_create ( &eventgroup, "group") );

   TEST_OK("os_thread_start", os_thread_start( &thread, &ThreadTwo, NULL, 1000, "ThreadOne"));

   // Wait for thread to start. Should really check a semaphore!
   TEST_OK("os_delay", os_delay(1000));


   for (current_event=1;current_event<=TERM_EVENT;current_event++)
   {
      TEST_OK("os_eventgroup_signal", os_eventgroup_signal ( &eventgroup, current_event) );
      
      TEST_OK("os_delay", os_delay(1000));
   }

   TEST_OK("os_eventgroup_destroy", os_eventgroup_destroy ( &eventgroup ) );
}