Ejemplo n.º 1
0
void set_status(uint64_t *ping_start_time, uint64_t curr_time)
{
    status_lock();
    if (ping_start_time != NULL)
	*ping_start_time = curr_time;
    status_unlock();
}
Ejemplo n.º 2
0
char get_status(uint64_t *ping_start_time, uint64_t curr_time)
{
    char ret = PING_STATUS_STEADY;
    status_lock();
    if (curr_time - *ping_start_time > PING_STEADY_TIME) {
	ret = PING_STATUS_STEADY;
    } else {
	ret = PING_STATUS_START;
    }
    status_unlock();
    return ret;
}
Ejemplo n.º 3
0
void status_error( unsigned char *codes ) {
  #ifdef __XMK__
    status_lock();
    if ( n_error_sets < MAX_ERROR_SETS ) {
      if (cur_error_set >= n_error_sets)
        ++cur_error_set;
      error_list[n_error_sets++] = codes;
    }
    status_unlock();
  #else
    set_status(codes[0] | 0x10 );
  #endif
}
Ejemplo n.º 4
0
static void *status_thread(void *param) {
  for (;;) {
    int cur_value;
    sleep(500);
    status_lock();
    if ( cur_error_set < n_error_sets ) {
      cur_value = error_list[cur_error_set][cur_elt];
      if ( cur_value == 0 ) {
        cur_elt = 0;
        if (++cur_error_set == n_error_sets) {
          if ( n_status_sets > 0 ) {
            cur_status_set = 0;
          } else {
            cur_error_set = 0;
            cur_value |= 0x10;
          }
        }
      } else {
        cur_value |= 0x10;
        ++cur_elt;
      }
    } else if ( cur_status_set < n_status_sets ) {
      cur_value = status_list[cur_status_set][cur_elt];
      if ( cur_value == 0 ) {
        cur_elt = 0;
        if (++cur_status_set == n_status_sets) {
          if ( n_error_sets > 0 ) {
            cur_error_set = 0;
            // cur_value |= 0x10;
          } else {
            cur_status_set = 0;
          }
        }
      } else {
        ++cur_elt;
      }
    } else if ( n_error_sets > 0 ) {
      cur_error_set = 0;
      cur_elt = 0;
      cur_value = 0x10;
    } else if ( n_status_sets > 0 ) {
      cur_status_set = 0;
      cur_elt = 0;
      cur_value = 0;
    }
    status_unlock();
    set_status(cur_value);
  }
}
Ejemplo n.º 5
0
/* if clear == 0, appends the specified codes */
void status_set( int clear, unsigned char *codes) {
  #ifdef __XMK__
    status_lock();
    if ( clear ) {
      if (cur_status_set < n_status_sets) {
        cur_status_set = 1;
        cur_elt = 0;
      } else {
        cur_status_set = 1; // future n_status_sets
      }
      n_status_sets = 0;
    } else {
      if (n_status_sets >= MAX_STATUS_SETS) return;
      if (cur_status_set >= n_status_sets)
        ++cur_status_set;
    }
    status_list[n_status_sets++] = codes;
    status_unlock();
  #else
    set_status(codes[0]);
  #endif
}