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 ) ); }
/* ---------------------------------------------------------------------- * 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; }
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 ) ); }