Beispiel #1
0
static void fetchPastMinuteSteps() {
  time_t temp = time(NULL); 
  struct tm *tick_time = localtime(&temp);
  
  int currentMinute = tick_time->tm_min;
  
  // Create an array to store data
  const uint32_t max_records = 60;//120;
  HealthMinuteData *minute_data = (HealthMinuteData*)
                                malloc(max_records * sizeof(HealthMinuteData));
  
  // Make a timestamp for an hour ago and now
  time_t end = time(NULL);
  time_t start = end - SECONDS_PER_HOUR;// - SECONDS_PER_HOUR;
  
  // Obtain the minute-by-minute records
  uint32_t num_records = health_service_get_minute_history(minute_data, 
                                                    max_records, &start, &end);
  
  // Print the number of steps for each minute
  for(uint32_t i = 0; i < num_records; i++) {
    int numSteps = (int)minute_data[i].steps;
    s_dotArray[((int)i + 1 + currentMinute) % 60] = calculateDotsFromMinuteSteps(numSteps);
  }
  
  for (int i = ((int)num_records + 1 + currentMinute) % 60; i < currentMinute; i++) {
    s_dotArray[i] = 1;
  }
  
  // Free the array
  free(minute_data);
  
  layer_mark_dirty(s_canvas_layer);
}
uint32_t health_sum_timeframe(HealthMetric metric, time_t time_start, time_t time_end) {
    APP_LOG(APP_LOG_LEVEL_INFO, "Heap: %i", heap_bytes_free());
    uint32_t output = 0;
    APP_LOG(APP_LOG_LEVEL_INFO, "Metric: %i", metric);
    if (health_service_metric_accessible(metric, time_start, time_end) ==
            HealthServiceAccessibilityMaskAvailable) {
        HealthMinuteData * minute_data = malloc(sizeof(HealthMinuteData) * UPDATE_INTERVAL);
        time_t time_start_calc = time_start;
        while (time_start_calc < time_end &&
               time_start_calc < time(NULL)) {
            time_t time_start_temp = time_start_calc;
            time_t time_end_temp = time_start_calc + UPDATE_INTERVAL*60;
            if (time_end_temp > time_end) {
                time_end_temp = time_end;
            }
            if (time_end_temp > time(NULL)) {
                time_end_temp = time(NULL);
            }
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "start %lu", time_start_temp);
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "end %lu", time_end_temp);
            uint32_t minutes_gotten =
                    health_service_get_minute_history(minute_data, UPDATE_INTERVAL, &time_start_temp, &time_end_temp);
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "-> start %lu", time_start_temp);
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "-> end %lu", time_end_temp);
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "mins gotten %lu", minutes_gotten);
            for (uint32_t i = 0; i < minutes_gotten; i++) {
                if (!minute_data[i].is_invalid) {
                    output += minute_data[i].steps;
                }
            }
            APP_LOG(APP_LOG_LEVEL_DEBUG_VERBOSE, "output now %lu", output);
            time_start_calc += UPDATE_INTERVAL*60;
        }
        APP_LOG(APP_LOG_LEVEL_DEBUG, "OUTPUT: %lu", output);
        free(minute_data);
    }
    return output;
}