Exemple #1
0
int main()
{
	int fd, wd, len;
	char buf[ 1024 * EV_SIZE ];
	struct inotify_event *ie= NULL;

	fd = inotify_init();

	if ( fd != -1 )
		printf( "fd = %d\n", fd );
	else
	{
		printf( "init failed\n" );
		return -1;
	}

	wd = inotify_add_watch( fd, "./lib/", IN_CREATE | IN_DELETE );

	if ( wd != -1 )
		printf( "wd = %d\n", wd );
	else
	{
		printf( "addwatch failed\n" );
		return -1;
	}

	while ( len = read( fd, buf, BUFSIZ ) )
	{
	
		if ( len )
		{
			printf( "%d readed\n", len );
			do_analysis();
		}
		else
		{
			printf( "read failed\n" );
			return -1;
		}
	
		ie = ( struct inotify_event * ) &buf[0];
		if ( ie )
		{
			printf("wd %d, mask %d, ck %d, len %d, name %s\n",
				 ie->wd, ie->mask, ie->cookie, ie->len, ie->name);
		}
		else
			printf( "ie null\n");
	}
	inotify_rm_watch( fd, wd );
	close( fd );

	return 0;
}
/************************************************************************
 * clock_tick_handler() - Analyse data and update display.
 * Updates the text layer clock_layer to show current time.
 * This function is the handler for tick events and is called every 
 * second.
 */
static void clock_tick_handler(struct tm *tick_time, TimeUnits units_changed) {
  static char s_batt_buffer[16];
  static char s_time_buffer[16];
  static int dataUpdateCount = 0;
  static int lastAlarmState = 0;

  if (isManAlarm) {
    APP_LOG(APP_LOG_LEVEL_DEBUG,"Manual Alarm - manAlarmTime=%d, manAlarmPeriod=%d",
	    manAlarmTime,manAlarmPeriod);
    if (manAlarmTime < manAlarmPeriod) {
      alarmState = ALARM_STATE_MAN_ALARM;
      text_layer_set_text(alarm_layer, "** MAN ALARM **");
      manAlarmTime += 1;
    } else {
      isManAlarm = 0;
      manAlarmTime = 0;
    }
  }
  if (isMuted) {
    APP_LOG(APP_LOG_LEVEL_DEBUG,"Alarms Muted - muteTime=%d",muteTime);
    if (muteTime < mutePeriod) {
      text_layer_set_text(alarm_layer, "** MUTE **");
      muteTime += 1;
    } else {
      isMuted = 0;
      muteTime = 0;
    }
  }
  
  
  // Do FFT analysis if we have filled the buffer with data.
  if (accDataFull) {
    do_analysis();
    if (fallActive) check_fall();  // sets fallDetected global variable.
    // Check the alarm state, and set the global alarmState variable.
    alarm_check();
    
    // If no seizure detected, modify alarmState to reflect potential fall
    // detection
    if ((alarmState == ALARM_STATE_OK) && (fallDetected==1))
      alarmState = ALARM_STATE_FALL;
    
    //  Display alarm message on screen.
    if (alarmState == ALARM_STATE_OK) {
      text_layer_set_text(alarm_layer, "OK");
    }
    if (alarmState == ALARM_STATE_WARN) {
      //vibes_short_pulse();
      text_layer_set_text(alarm_layer, "WARNING");
    }
    if (alarmState == ALARM_STATE_ALARM) {
      //vibes_long_pulse();
      text_layer_set_text(alarm_layer, "** ALARM **");
    }
    if (alarmState == ALARM_STATE_FALL) {
      //vibes_long_pulse();
      text_layer_set_text(alarm_layer, "** FALL **");
    }
    if (isManAlarm) {
      alarmState = ALARM_STATE_MAN_ALARM;
      text_layer_set_text(alarm_layer, "** MAN ALARM **");
    }
    if (isMuted) {
      alarmState = ALARM_STATE_MUTE;
      text_layer_set_text(alarm_layer, "** MUTE **");
    }    
    
    // Send data to phone if we have an alarm condition.
    // or if alarm state has changed from last time.
    if ((alarmState != ALARM_STATE_OK && !isMuted) ||
	(alarmState != lastAlarmState)) {
      sendSdData();
    }
    lastAlarmState = alarmState;
  }
  
  // See if it is time to send data to the phone.
  dataUpdateCount++;
  if (dataUpdateCount>=dataUpdatePeriod) {
    sendSdData();
    dataUpdateCount = 0;
  }
 
  // Update the display
  text_layer_set_text(text_layer, "OpenSeizureDetector");
  if (clock_is_24h_style()) {
    strftime(s_time_buffer, sizeof(s_time_buffer), "%H:%M:%S", tick_time);
  } else {
    strftime(s_time_buffer, sizeof(s_time_buffer), "%I:%M:%S", tick_time);
  }
  text_layer_set_text(clock_layer, s_time_buffer);
  BatteryChargeState charge_state = battery_state_service_peek();
  snprintf(s_batt_buffer,sizeof(s_batt_buffer),
  	   "%d%%", 
  	   charge_state.charge_percent);
  text_layer_set_text(batt_layer, s_batt_buffer);
}
Exemple #3
0
/************************************************************************
 * clock_tick_handler() - Analyse data and update display.
 * Updates the text layer clock_layer to show current time.
 * This function is the handler for tick events.*/
static void clock_tick_handler(struct tm *tick_time, TimeUnits units_changed) {
  static char s_time_buffer[16];
  static char s_alarm_buffer[64];
  static char s_buffer[256];
  static int analysisCount=0;

  /* Only process data every ANALYSIS_PERIOD seconds */
  analysisCount++;
  if (analysisCount>=ANALYSIS_PERIOD) {
    // Do FFT analysis
    if (accDataFull) {
      do_analysis();
      if (fallActive) check_fall();  // sets fallDetected global variable.
      // Check the alarm state, and set the global alarmState variable.
      alarm_check();

      // If no seizure detected, modify alarmState to reflect potential fall
      // detection
      if ((alarmState == 0) && (fallDetected==1)) alarmState = 3;

      //  Display alarm message on screen.
      if (alarmState == 0) {
	text_layer_set_text(alarm_layer, "OK");
      }
      if (alarmState == 1) {
	//vibes_short_pulse();
	text_layer_set_text(alarm_layer, "WARNING");
      }
      if (alarmState == 2) {
	//vibes_long_pulse();
	text_layer_set_text(alarm_layer, "** ALARM **");
      }
      if (alarmState == 3) {
	//vibes_long_pulse();
	text_layer_set_text(alarm_layer, "** FALL **");
      }
      // Send data to phone
      sendSdData();
    }
    // Re-set counter.
    analysisCount = 0;
  }
 

  // Update data display.
  //snprintf(s_buffer,sizeof(s_buffer),
  //	   "max=%d, P=%ld\n%d Hz",
  //	   /*latestAccelData.x, latestAccelData.y, latestAccelData.z,*/
  //	   maxVal,specPower,maxFreq
  //	   );
  text_layer_set_text(text_layer, "OpenSeizureDetector");

  // and update clock display.
  if (clock_is_24h_style()) {
    strftime(s_time_buffer, sizeof(s_time_buffer), "%H:%M:%S", tick_time);
  } else {
    strftime(s_time_buffer, sizeof(s_time_buffer), "%I:%M:%S", tick_time);
  }
  BatteryChargeState charge_state = battery_state_service_peek();
  snprintf(s_time_buffer,sizeof(s_time_buffer),
	   "%s %d%%", 
	   s_time_buffer,
	   charge_state.charge_percent);
  text_layer_set_text(clock_layer, s_time_buffer);
}
Exemple #4
0
void analysis(int playernum, int governor, int apcount)
{
    int pnum;
    int sector_type = -1; /* -1 does analysis on all types */
    int i = 1;
    int do_player = -1;
    int mode = 1; /* Does top five. 0 does low five */
    placetype where; /* Otherwise on specific type */
    char *p;

    where.level = Dir[playernum - 1][governor].level;
    where.snum = Dir[playernum - 1][governor].snum;
    where.pnum = Dir[playernum - 1][governor].pnum;

    p = args[1];

    /*
     * Must use 'd' to do an analysis on desert sector to avoid confusion with
     * the '-' for the mode type
     */
    if (*p == '-') {
        ++p;
        ++i;
        mode = 0;
    }

    switch (*p) {
    case CHAR_SEA:
        sector_type = SEA;

        break;
    case CHAR_LAND:
        sector_type = LAND;

        break;
    case CHAR_MOUNT:
        sector_type = MOUNT;

        break;
    case CHAR_GAS:
        sector_type = GAS;

        break;
    case CHAR_ICE:
        sector_type = ICE;

        break;
    case CHAR_FOREST:
        sector_type = FOREST;

        break;
        /*
         * Duh, can't use '-'
         * case CHAR_DESERT:
         *     sector_type = DESERT;
         *
         *     break;
         */
    case 'd':
        sector_type = DESERT;

        break;
    case CHAR_PLATED:
        sector_type = PLATED;

        break;
    case CHAR_WASTED:
        sector_type = WASTED;

        break;
    case CHAR_WORM:
        sector_type = WORM;

        break;
    }

    if ((sector_type != -1) && (mode == 1)) {
        ++i;
    }

    p = args[i];

    if (isdigit((unsigned char)*p)) {
        do_player = atoi(p);

        if (do_player > Num_races) {
            notify(playernum, governor, "No such player #.\n");

            return;
        }

        where.level = Dir[playernum - 1][governor].level;
        where.snum = Dir[playernum - 1][governor].snum;
        where.pnum = Dir[playernum - 1][governor].pnum;

        ++i;
    }

    p = args[i];

    if ((i < argn) && (isalpha((unsigned char)*p) || (*p == '/'))) {
        where = Getplace(playernum, governor, args[i], 0);

        if (where.err) {
            return;
        }
    }

    switch (where.level) {
    case LEVEL_UNIV:
        notify(playernum, governor, "You can only analyze planets.\n");

        break;
    case LEVEL_PLAN:
        do_analysis(playernum,
                    governor,
                    do_player,
                    mode,
                    sector_type,
                    (int)where.snum,
                    (int)where.pnum);

        break;
    case LEVEL_STAR:
        for (pnum = 0; pnum < Stars[where.snum]->numplanets; ++pnum) {
            do_analysis(playernum,
                        governor,
                        do_player,
                        mode,
                        sector_type,
                        (int)where.snum,
                        pnum);
        }

        break;
    }

    return;
}
ciMethodBlocks::ciMethodBlocks(Arena *arena, ciMethod *meth): _method(meth),
                          _arena(arena), _num_blocks(0), _code_size(meth->code_size()) {
  int block_estimate = _code_size / 8;

  _blocks =  new(_arena) GrowableArray<ciBlock *>(block_estimate);
  int b2bsize = _code_size * sizeof(ciBlock **);
  _bci_to_block = (ciBlock **) arena->Amalloc(b2bsize);
  Copy::zero_to_words((HeapWord*) _bci_to_block, b2bsize / sizeof(HeapWord));

  // create initial block covering the entire method
  ciBlock *b = new(arena) ciBlock(_method, _num_blocks++, 0);
  _blocks->append(b);
  _bci_to_block[0] = b;

  // create blocks for exception handlers
  if (meth->has_exception_handlers()) {
    for(ciExceptionHandlerStream str(meth); !str.is_done(); str.next()) {
      ciExceptionHandler* handler = str.handler();
      ciBlock *eb = make_block_at(handler->handler_bci());
      //
      // Several exception handlers can have the same handler_bci:
      //
      //  try {
      //    if (a.foo(b) < 0) {
      //      return a.error();
      //    }
      //    return CoderResult.UNDERFLOW;
      //  } finally {
      //      a.position(b);
      //  }
      //
      //  The try block above is divided into 2 exception blocks
      //  separated by 'areturn' bci.
      //
      int ex_start = handler->start();
      int ex_end = handler->limit();
      // ensure a block at the start of exception range and start of following code
      (void) make_block_at(ex_start);
      if (ex_end < _code_size)
        (void) make_block_at(ex_end);

      if (eb->is_handler()) {
        // Extend old handler exception range to cover additional range.
        int old_ex_start = eb->ex_start_bci();
        int old_ex_end   = eb->ex_limit_bci();
        if (ex_start > old_ex_start)
          ex_start = old_ex_start;
        if (ex_end < old_ex_end)
          ex_end = old_ex_end;
        eb->clear_exception_handler(); // Reset exception information
      }
      eb->set_exception_range(ex_start, ex_end);
    }
  }

  // scan the bytecodes and identify blocks
  do_analysis();

  // mark blocks that have exception handlers
  if (meth->has_exception_handlers()) {
    for(ciExceptionHandlerStream str(meth); !str.is_done(); str.next()) {
      ciExceptionHandler* handler = str.handler();
      int ex_start = handler->start();
      int ex_end = handler->limit();

      int bci = ex_start;
      while (bci < ex_end) {
        ciBlock *b = block_containing(bci);
        b->set_has_handler();
        bci = b->limit_bci();
      }
    }
  }
}