Exemple #1
0
void event_clocktick_handle(event_t* event,
			    struct TOS_state* state) {

  event_queue_t* queue = &(state->queue);
  clock_tick_data_t* data = (clock_tick_data_t*)event->data;
  atomic TOS_LOCAL_ADDRESS = (short)(event->mote & 0xffff);
  
  if (TOS_LOCAL_ADDRESS != event->mote) {
    dbg(DBG_ERROR, "ERROR in clock tick event handler! Things are probably ver bad....\n");
  }

  if (data->valid) {
    if (dbg_active(DBG_CLOCK)) {
      char buf[1024];
      printTime(buf, 1024);
      dbg(DBG_CLOCK, "CLOCK: event handled for mote %i at %s (%i ticks).\n", event->mote, buf, data->interval);
    }

    setTime[NODE_NUM] = tos_state.tos_time;
    event->time = event->time + data->interval;
    queue_insert_event(queue, event);
    if (!data->disabled) {
      TOS_ISSUE_INTERRUPT(SIG_OUTPUT_COMPARE2)();
    }
    else {
      interruptPending[NODE_NUM] = 1;
    }
  }
  else {
    //dbg(DBG_CLOCK, "CLOCK: invalid event discarded.\n");
    
    event_cleanup(event);
  }
}
Exemple #2
0
void queue_insert_event(event_queue_t* queue, event_t* event) {
  if (dbg_active(DBG_QUEUE)) {
    char ftime[128];
    ftime[0] = 0;
    printOtherTime(ftime, 128, event->time);
    dbg(DBG_QUEUE, "Inserting event with time %s.\n", ftime);
  }
  pthread_mutex_lock(&(queue->lock));
  heap_insert(&(queue->heap), event, event->time);
  pthread_mutex_unlock(&(queue->lock));
}
Exemple #3
0
event_t* queue_pop_event(event_queue_t* queue) {
  long long ftime;
  event_t* event;

  pthread_mutex_lock(&(queue->lock));
  event = (event_t*)(heap_pop_min_data(&(queue->heap), &ftime));
  pthread_mutex_unlock(&(queue->lock));

  if(dbg_active(DBG_QUEUE)) {
    char timeStr[128];
    timeStr[0] = 0;
    printOtherTime(timeStr, 128, ftime);
    dbg(DBG_QUEUE, "Popping event for mote %i with time %s.\n", event->mote, timeStr);
  }
  
  if (queue->pause > 0 && event->pause) {
    sleep(queue->pause);
    //dbg(DBG_ALL, "\n");
  }
  
  return event;
}