Esempio n. 1
0
static int single_waiter_test()
{
   VCOS_EVENT_FLAGS_T event;
   WAITER_T waiter;
   int passed = 1;

   vcos_log("%s", __FUNCTION__);

   if(vcos_event_flags_create(&event,"test") != VCOS_SUCCESS)
      passed = 0;

   if(passed && waiter_init(&waiter, &event, 1) < 0)
   {
      vcos_event_flags_delete(&event);
      passed = 0;
   }

   if(passed)
   {
      run_waiter(&waiter, 0, 1, VCOS_OR_CONSUME, VCOS_EVENT_FLAGS_SUSPEND, 10, 1, VCOS_SUCCESS, 0, &passed);
      run_waiter(&waiter, 10, 1, VCOS_OR_CONSUME, VCOS_EVENT_FLAGS_SUSPEND, 0, 1, VCOS_SUCCESS, 0, &passed);
      run_waiter(&waiter, 0, 1, VCOS_OR_CONSUME, VCOS_EVENT_FLAGS_SUSPEND, 10, 3, VCOS_SUCCESS, 2, &passed);
      run_waiter(&waiter, 0, 1, VCOS_OR_CONSUME, 20, 10, 2, VCOS_EAGAIN, 2, &passed);
      run_waiter(&waiter, 10, 1, VCOS_OR_CONSUME, 10, 0, 2, VCOS_EAGAIN, 2, &passed);

      waiter_deinit(&waiter, &passed);
      vcos_event_flags_delete(&event);
   }

   return passed;
}
Esempio n. 2
0
static int basic_timeout(void)
{
   int delay = 10;
#ifdef VCOS_TIMER_MARGIN_EARLY
   int margin_early = VCOS_TIMER_MARGIN_EARLY;
   int margin_late = VCOS_TIMER_MARGIN_LATE;
#else
   int margin_early = SLACK;
   int margin_late = SLACK;
#endif

   VCOS_EVENT_FLAGS_T flags;
   VCOS_STATUS_T st = vcos_event_flags_create(&flags, "test");
   VCOS_UNSIGNED elapsed_time = vcos_get_ms(), actual;
   st = vcos_event_flags_get(&flags, 1, VCOS_OR, delay, &actual);
   if (st == VCOS_EAGAIN)
   {
      elapsed_time = vcos_get_ms()-elapsed_time;
      if (((int) elapsed_time >= (delay - margin_early)) && ((int) elapsed_time <= (delay + margin_late)))
      {
         vcos_log("Good delay: %d ms", elapsed_time);
         vcos_event_flags_delete(&flags);
         return 1;
      }
      vcos_log("Wrong delay: %d ms, expected %d ms", elapsed_time, delay);
   }

   vcos_event_flags_delete(&flags);

   return 0;
}
static int32_t guard_init(GUARD_T *guard)
{
   memset(guard, 0, sizeof(GUARD_T));

   if(vcos_semaphore_create(&guard->go, "go", 0) != VCOS_SUCCESS)
      return -1;

   if(vcos_semaphore_create(&guard->done, "done", 0) != VCOS_SUCCESS)
   {
      vcos_semaphore_delete(&guard->go);
      return -1;
   }

   if(vcos_event_flags_create(&guard->event, "event") != VCOS_SUCCESS)
   {
      vcos_semaphore_delete(&guard->go);
      vcos_semaphore_delete(&guard->done);
      return -1;
   }
   
   if (vcos_thread_create(&guard->thread, "guard", NULL, guard_func, guard) != VCOS_SUCCESS)
   {
      vcos_event_flags_delete(&guard->event);
      vcos_semaphore_delete(&guard->go);
      vcos_semaphore_delete(&guard->done);
      return -1;
   }

   return 0;
}
Esempio n. 4
0
static int set_operations_test()
{
   VCOS_EVENT_FLAGS_T event;
   int passed = 1;

   if(vcos_event_flags_create(&event,"test") != VCOS_SUCCESS)
      passed = 0;
   else
   {
      check_value(&event, 0, 1, &passed);

      vcos_event_flags_set(&event, 1, VCOS_AND);
      check_value(&event, 0, 1, &passed);

      vcos_event_flags_set(&event, 1, VCOS_OR);
      check_value(&event, 1, 0, &passed);

      vcos_event_flags_set(&event, 8, VCOS_OR);
      check_value(&event, 9, 0, &passed);

      vcos_event_flags_set(&event, 96, VCOS_OR);
      check_value(&event, 9|96, 0, &passed);

      vcos_event_flags_set(&event, 65|1024, VCOS_AND);
      check_value(&event, 65, 0, &passed);

      vcos_event_flags_set(&event, -1, VCOS_OR);
      check_value(&event, -1, 1, &passed);

      vcos_event_flags_delete(&event);
   }

   return passed;
}
		~CThreadT()
		{
			vcos_event_flags_set(&m_EventFlags, s_nTerminationFlag, VCOS_OR);
			void* pData;
			vcos_thread_join(&m_Thread, &pData);
			vcos_event_flags_delete(&m_EventFlags);
			vcos_event_delete(&m_InitializedEvent);
		}
static void guard_deinit(GUARD_T *guard, int *passed)
{
   guard->quit = 1;
   vcos_semaphore_post(&guard->go);

   vcos_thread_join(&guard->thread,0);

   vcos_semaphore_delete(&guard->go);
   vcos_semaphore_delete(&guard->done);
   vcos_event_flags_delete(&guard->event);
}
Esempio n. 7
0
static int create_test()
{
   int passed = 1;
   VCOS_EVENT_FLAGS_T events[MAX_TESTED];
   int i;

   for(i=0; i<MAX_TESTED; i++)
      if(vcos_event_flags_create(events+i,"test") != VCOS_SUCCESS)
         passed = 0;

   for(i=0; i<MAX_TESTED; i+=2)
      vcos_event_flags_delete(events+i);

   for(i=0; i<MAX_TESTED; i+=2)
      if(vcos_event_flags_create(events+i,"test") != VCOS_SUCCESS)
         passed = 0;

   if(passed)
   {
      /* see if the bits appear to be independent */
      for(i=0; i<MAX_TESTED; i++)
         vcos_event_flags_set(events+i, i | (1<<i), VCOS_OR);

      for(i=0; i<MAX_TESTED; i++)
      {
         uint32_t set;
         if(vcos_event_flags_get(events+i, -1, VCOS_OR, VCOS_NO_SUSPEND, &set) != VCOS_SUCCESS)
            passed = 0;
         if(set != (i | (1<<i)))
            passed = 0;
      }

      for(i=0; i<MAX_TESTED; i++)
         vcos_event_flags_delete(events+i);
   }

   return passed;
}
Esempio n. 8
0
static int multiple_waiters_test()
{
   WAITER_T waiter[3];
   VCOS_EVENT_FLAGS_T event;
   int i;
   int passed = 1;

   vcos_log("%s", __FUNCTION__);

   if(vcos_event_flags_create(&event,"test") != VCOS_SUCCESS)
      passed = 0;

   i=0;
   while(passed && (i < 3) && waiter_init(waiter+(i), &event, i) == 0)
   {
      i++;
   }

   if(i < 3) // tidy up if we failed to create all the waiter threads
   {
      while(--i >= 0)
      {
         waiter_deinit(waiter+i, &passed);
      }
      passed = 0;
   }

   if(passed)
   {
      for(i=0; i<sizeof(specs) / sizeof(specs[0]); i++)
      {
         vcos_log("running multiple test spec %d", i);
         run_waiters(waiter, 3, NULL, specs[i].bitmask, specs[i].operation, specs[i].suspend,
                     specs[i].set_sleep, specs[i].set_bitmask, specs[i].expected, specs[i].after, &passed);
      }

      for(i=0; i<3; i++)
      {
         waiter_deinit(waiter+i, &passed);
      }

      vcos_event_flags_delete(&event);
   }

   return passed;
}
Esempio n. 9
0
static int get_operations_test()
{
   VCOS_EVENT_FLAGS_T event;
   int passed = 1;

   if(vcos_event_flags_create(&event,"test") != VCOS_SUCCESS)
      passed = 0;
   else
   {
      int testnum = 0;
      try_get_value(&testnum, &event, 0, 0, VCOS_OR,          VCOS_EAGAIN, 0, &passed);
      try_get_value(&testnum, &event, 0, 0, VCOS_AND,         VCOS_SUCCESS, 0, &passed);
      try_get_value(&testnum, &event, 0, 0, VCOS_OR_CONSUME,  VCOS_EAGAIN, 0, &passed);
      try_get_value(&testnum, &event, 0, 0, VCOS_AND_CONSUME, VCOS_SUCCESS, 0, &passed);

      try_get_value(&testnum, &event, 1, 0, VCOS_OR,          VCOS_EAGAIN, 1, &passed);
      try_get_value(&testnum, &event, 1, 0, VCOS_AND,         VCOS_SUCCESS, 1, &passed);
      try_get_value(&testnum, &event, 1, 0, VCOS_OR_CONSUME,  VCOS_EAGAIN, 1, &passed);
      try_get_value(&testnum, &event, 1, 0, VCOS_AND_CONSUME, VCOS_SUCCESS, 1, &passed);

      try_get_value(&testnum, &event, 7, 7, VCOS_OR,          VCOS_SUCCESS, 7, &passed);
      try_get_value(&testnum, &event, 7, 7, VCOS_OR_CONSUME,  VCOS_SUCCESS, 0, &passed);
      try_get_value(&testnum, &event, 7, 3, VCOS_OR,          VCOS_SUCCESS, 7, &passed);
      try_get_value(&testnum, &event, 7, 3, VCOS_OR_CONSUME,  VCOS_SUCCESS, 4, &passed);
      try_get_value(&testnum, &event, 7, 15, VCOS_OR,         VCOS_SUCCESS, 7, &passed);
      try_get_value(&testnum, &event, 7, 15, VCOS_OR_CONSUME, VCOS_SUCCESS, 0, &passed);
      try_get_value(&testnum, &event, 7, 8, VCOS_OR,          VCOS_EAGAIN, 7, &passed);
      try_get_value(&testnum, &event, 7, 8, VCOS_OR_CONSUME,  VCOS_EAGAIN, 7, &passed);

      try_get_value(&testnum, &event, 7, 7, VCOS_AND,         VCOS_SUCCESS, 7, &passed);
      try_get_value(&testnum, &event, 7, 7, VCOS_AND_CONSUME, VCOS_SUCCESS, 0, &passed);
      try_get_value(&testnum, &event, 7, 3, VCOS_AND,         VCOS_SUCCESS, 7, &passed);
      try_get_value(&testnum, &event, 7, 3, VCOS_AND_CONSUME, VCOS_SUCCESS, 4, &passed);
      try_get_value(&testnum, &event, 7, 15, VCOS_AND,        VCOS_EAGAIN, 7, &passed);
      try_get_value(&testnum, &event, 7, 15, VCOS_AND_CONSUME, VCOS_EAGAIN, 7, &passed);
      try_get_value(&testnum, &event, 7, 8, VCOS_AND,         VCOS_EAGAIN, 7, &passed);
      try_get_value(&testnum, &event, 7, 8, VCOS_AND_CONSUME, VCOS_EAGAIN, 7, &passed);

      vcos_event_flags_delete(&event);
   }

   return passed;
}
Esempio n. 10
0
static void
destroy_event( VC_POOL_T *pool )
{
   vcos_event_flags_delete( &pool->event );
}