Exemple #1
0
// This should probably go in the helper file with the save logic.
// But it's late and I want to get saving/loading working.
static void load_game() {
  // We already know that we have valid data (can_load).
  lines_cleared = persist_read_int(SCORE_KEY);
  level = (lines_cleared / 10) + 1;
  if (level > 10) { level = 10; }
  update_num_layer(lines_cleared, scoreStr, score_layer);
  update_num_layer(level, levelStr, level_layer);
  tick_time = max_tick - (tick_interval * level);
  persist_read_data(GRID_KEY, grid, sizeof(grid));
  persist_read_data(GRID_COL_KEY, grid_col, sizeof(grid_col));
  blockType = persist_read_int(BLOCK_TYPE_KEY);
  nextBlockType = persist_read_int(NEXT_BLOCK_TYPE_KEY);
  blockX = persist_read_int(BLOCK_X_KEY);
  blockY = persist_read_int(BLOCK_Y_KEY);
  make_block(block, blockType, blockX, blockY);
  make_block(nextBlock, nextBlockType, nextBlockX, nextBlockY);
  rotation = persist_read_int(ROTATION_KEY);
  if (rotation != 0) {
    for (int i=0; i<rotation; i++) {
      GPoint rPoints[4];
      rotate_block(rPoints, block, blockType, i);
      for (int j=0; j<4; j++) {
        block[j] = rPoints[j];
      }
    }
  }
}
Exemple #2
0
void settings_load(void) {
  if (persist_exists(PERSIST_SETTINGS)) {
    if (! persist_exists(PERSIST_SETTINGS_VERSION)) {
      DEBUG("Migrating settings from 2.X to 3.X");
      OldSettings old_settings;
      int res = persist_read_data(PERSIST_SETTINGS, &old_settings, sizeof(old_settings));
      if (res >= 0) {
        migrate_settings_01(old_settings);
        return;
      }
    }
    else if (persist_read_int(PERSIST_SETTINGS_VERSION) == SETTINGS_VERSION_TINY) {
      SettingsTiny settings_tiny;
      int res = persist_read_data(PERSIST_SETTINGS, &settings_tiny, sizeof(settings_tiny));
      if (res >= 0) {
        migrate_settings_02(settings_tiny);
        return;
      }
    }
    int res = persist_read_data(PERSIST_SETTINGS, &_settings, sizeof(_settings));
    if (res < 0) {
      LOG("Settings load failed: %d", res);
    }
  }
}
Exemple #3
0
/**
 * Function to restore the presets saved in persistent storage into the list.
 */
void presets_restore(void){
	presets_clear();
	if (!persist_exists(STORAGE_PRESET_START))
		return;
	int block = 0;
	PresetBlock* presetBlock = malloc(sizeof(PresetBlock));
	persist_read_data(STORAGE_PRESET_START, presetBlock, sizeof(PresetBlock));
	uint8_t preset_count = presetBlock->count;
	int save_time = presetBlock->time;
	int now = time(NULL);
	int seconds_elapsed = now-save_time;
	int minutes_elapse = (int)(floorl(seconds_elapsed / 60));
	for (int i = 0; i < preset_count; i++){
		if (i > 0 && i % PRESET_BLOCK_SIZE == 0){
			block += 1;
			free(presetBlock);
			presetBlock = malloc(sizeof(PresetBlock));
			persist_read_data(STORAGE_PRESET_START + block, presetBlock, sizeof(PresetBlock));
		}
		Preset *preset = preset_clone(&presetBlock->presets[i % PRESET_BLOCK_SIZE]);
		preset->eta -= minutes_elapse;
		if (preset->eta <= 0)
			preset->eta = PRESET_REFRESHING_ETA;
		presets_add(preset);
	}
	free(presetBlock);
	send_all_eta_req();
	return;
}
Exemple #4
0
void Settings_init() {
  // first, check if we have any saved settings
  if (persist_exists(SETTINGS_PERSIST_KEY)) {
    // if we do, what version of the settings was saved?
    uint32_t savedVersion = persist_read_int(SETTINGS_VERSION_KEY);

    if(savedVersion == 2) { // in this case, we can direclty load the current version
      persist_read_data(SETTINGS_PERSIST_KEY, &globalSettings, sizeof(Settings));
    } else { // in this case, we're upgrading from the old version

        // first, read in the settings using the original format
        Settings_v0 oldSettings;
        persist_read_data(SETTINGS_PERSIST_KEY, &oldSettings, sizeof(Settings_v0));

        // now upgrade to the new format
        globalSettings.timeColor = oldSettings.timeColor;
        globalSettings.timeBgColor = oldSettings.timeBgColor;
        globalSettings.sidebarColor = oldSettings.sidebarColor;
        globalSettings.useMetric = oldSettings.useMetric;
        globalSettings.sidebarOnRight = oldSettings.sidebarOnRight;

        // fill the new settings, use the defaults
        Settings_loadV2Defaults();
    }
  } else {
    // if there weren't any saved settings, load the defaults
    Settings_loadAllDefaults();
  }

  // if it doesn't exist, we get "0", which is the default anyway
  Settings_showLeadingZero = persist_read_int(SETTING_LEADING_ZERO_KEY);
}
Exemple #5
0
static void window_load(Window *window) {
  Layer *root_layer = window_get_root_layer(window);

  if (persist_exists(PERSIST_KEY_ID_POMODORO)) {
    persist_read_data(PERSIST_KEY_ID_POMODORO, &pomodoro, sizeof(pomodoro));

  }
  if (persist_exists(PERSIST_KEY_ID_POMODORO_CYCLE)) {
    persist_read_data(PERSIST_KEY_ID_POMODORO_CYCLE, &pomodoro.cycle, sizeof(pomodoro.cycle));
  }
  if (persist_exists(PERSIST_KEY_ID_POMODORO_CYCLE_NOW)) {
    persist_read_data(PERSIST_KEY_ID_POMODORO_CYCLE_NOW, &pomodoro.timer, sizeof(pomodoro.timer));

    if (pomodoro.cycle <= pomodoro.timer) pomodoro.timer = -1;
  }

  tick_timer_service_subscribe(HOUR_UNIT | MINUTE_UNIT, tick_handler);

  // LOAD RESOURCE
  uint8_t resource_id = (uint8_t)RESOURCE_ID_HANNA_B;

  for (uint8_t i = 0; i < bitmaps_length; ++i) {
    bitmaps[i] = gbitmap_create_with_resource((uint8_t)(resource_id + i));
  }

  load_layers(root_layer);
}
void readSettings(){

    if( persist_exists(BLACK_KEY))              black =             persist_read_bool(BLACK_KEY);
    if( persist_exists(GRID_KEY))               grid =              persist_read_bool(GRID_KEY);
    if( persist_exists(INVERT_KEY))             invert =            persist_read_bool(INVERT_KEY);
    if( persist_exists(SHOWTIME_KEY))           showtime =          persist_read_bool(SHOWTIME_KEY);
    if( persist_exists(HIDELASTPREV_KEY))       hidelastprev =      persist_read_bool(HIDELASTPREV_KEY);
    if( persist_exists(HIDEAGENDA_KEY))         hideagenda =        persist_read_bool(HIDEAGENDA_KEY);
    if( persist_exists(NOTINVERTAGENDA_KEY))    notinvertagenda =   persist_read_bool(NOTINVERTAGENDA_KEY);
    if( persist_exists(BOLDEVENTS_KEY))         boldevents =        persist_read_bool(BOLDEVENTS_KEY);
    if( persist_exists(SHOWLABELS_KEY))         showlabels =        persist_read_bool(SHOWLABELS_KEY);
    if( persist_exists(SHOWDATE_KEY))           showdate =          persist_read_bool(SHOWDATE_KEY);
    
    if( persist_exists(START_OF_WEEK_KEY))      start_of_week =     persist_read_int(START_OF_WEEK_KEY);
    if( persist_exists(SHOWWEEKNO_KEY))         showweekno =        persist_read_int(SHOWWEEKNO_KEY);
    if( persist_exists(WEEKSTOSHOW_KEY))        weekstoshow =       persist_read_int(WEEKSTOSHOW_KEY);
    if( persist_exists(AGENDA_TITLE_KEY))       agenda_title_rows = persist_read_int(AGENDA_TITLE_KEY);
    
    if( persist_exists(AGENDALENGTH_KEY))       agendaLength =      persist_read_int(AGENDALENGTH_KEY);
    for(int i = 0; i<MAX_AGENDA_LENGTH;i++ ){
        if( persist_exists(AGENDATITLE_KEY+i)){
            persist_read_data(AGENDATITLE_KEY+i,agendaTitle[i],sizeof(agendaTitle[i]));
            persist_read_data(AGENDADATE_KEY+i, agendaDate[i], sizeof(agendaDate[i]));
            persist_read_data(AGENDATIME_KEY+i, agendaTime[i], sizeof(agendaTime[i]));
        }
    }
}
Exemple #7
0
/*
 * Load the saved color settings, or if they don't exist load defaults
 */
void Settings_loadFromStorage() {
  if(persist_exists(SETTING_TIME_COLOR_KEY) && persist_exists(SETTING_TIME_BG_COLOR_KEY) &&
     persist_exists(SETTING_SIDEBAR_COLOR_KEY) && persist_exists(SETTING_SIDEBAR_TEXT_COLOR_KEY)) {

    // if the color data exists, load the colors
    persist_read_data(SETTING_TIME_COLOR_KEY,         &globalSettings.timeColor,        sizeof(GColor));
    persist_read_data(SETTING_TIME_BG_COLOR_KEY,      &globalSettings.timeBgColor,      sizeof(GColor));
    persist_read_data(SETTING_SIDEBAR_COLOR_KEY,      &globalSettings.sidebarColor,     sizeof(GColor));
    persist_read_data(SETTING_SIDEBAR_TEXT_COLOR_KEY, &globalSettings.sidebarTextColor, sizeof(GColor));
  } else {
    // otherwise, load the default colors
    globalSettings.timeBgColor      = GColorBlack;
    globalSettings.sidebarTextColor = GColorBlack;

    #ifdef PBL_COLOR
      globalSettings.timeColor      = GColorOrange;
      globalSettings.sidebarColor   = GColorOrange;
    #else
      globalSettings.timeColor      = GColorWhite;
      globalSettings.sidebarColor   = GColorWhite;
    #endif
  }

  // load widgets
  if(persist_exists(SETTING_SIDEBAR_WIDGET0_KEY)) {
    globalSettings.widgets[0] = persist_read_int(SETTING_SIDEBAR_WIDGET0_KEY);
    globalSettings.widgets[1] = persist_read_int(SETTING_SIDEBAR_WIDGET1_KEY);
    globalSettings.widgets[2] = persist_read_int(SETTING_SIDEBAR_WIDGET2_KEY);
  } else {
    // in the case of a new installation, set the default widgets
    globalSettings.widgets[0] = WEATHER_CURRENT;
    globalSettings.widgets[1] = EMPTY;
    globalSettings.widgets[2] = DATE;
  }

  if(persist_exists(SETTING_ALTCLOCK_NAME_KEY)) {
    persist_read_string(SETTING_ALTCLOCK_NAME_KEY, globalSettings.altclockName, sizeof(globalSettings.altclockName));
  } else {
    strncpy(globalSettings.altclockName, "ALT", sizeof(globalSettings.altclockName));
  }

  // load the rest of the settings, using default settings if none exist
  // all settings except colors automatically return "0" or "false" if
  // they haven't been set yet, so we don't need to check if they exist
  globalSettings.useMetric              = persist_read_bool(SETTING_USE_METRIC_KEY);
  globalSettings.sidebarOnLeft          = persist_read_bool(SETTING_SIDEBAR_LEFT_KEY);
  globalSettings.btVibe                 = persist_read_bool(SETTING_BT_VIBE_KEY);
  globalSettings.languageId             = persist_read_int(SETTING_LANGUAGE_ID_KEY);
  globalSettings.showLeadingZero        = persist_read_int(SETTING_LEADING_ZERO_KEY);
  globalSettings.showBatteryPct         = persist_read_bool(SETTING_SHOW_BATTERY_PCT_KEY);
  globalSettings.disableWeather         = persist_read_bool(SETTING_DISABLE_WEATHER_KEY);
  globalSettings.clockFontId            = persist_read_bool(SETTING_CLOCK_FONT_ID_KEY);
  globalSettings.hourlyVibe             = persist_read_int(SETTING_HOURLY_VIBE_KEY);
  globalSettings.onlyShowBatteryWhenLow = persist_read_bool(SETTING_BATTERY_ONLY_WHEN_LOW_KEY);
  globalSettings.useLargeFonts          = persist_read_bool(SETTING_USE_LARGE_FONTS_KEY);
  globalSettings.altclockOffset         = persist_read_int(SETTING_ALTCLOCK_OFFSET_KEY);

  Settings_updateDynamicSettings();
}
Exemple #8
0
bool LoadPersistedData(void)
{
	CharacterData *characterData;
	int floor = 0;
	bool useWorkerApp = false;
	if(!persist_exists(PERSISTED_IS_DATA_SAVED) || !persist_read_bool(PERSISTED_IS_DATA_SAVED))
		return false;
		
	if(!IsPersistedDataCurrent())
	{
		WARNING_LOG("Persisted data does not match current version, clearing.");
		ClearPersistedData();
		return false;
	}

	ProfileLogStart("LoadPersistedData");
	INFO_LOG("Loading persisted data.");
	characterData = GetCharacter();
	persist_read_data(PERSISTED_CHARACTER_DATA, characterData, sizeof(CharacterData));
	floor = persist_read_int(PERSISTED_CURRENT_FLOOR);
	SetCurrentFloor(floor);
	persist_read_data(PERSISTED_ITEM_DATA, GetItemsOwned(), GetSizeOfItemsOwned());
	SetStatPointsPurchased(persist_read_int(PERSISTED_STAT_POINTS_PURCHASED));
	SetVibration(persist_read_bool(PERSISTED_VIBRATION));
	SetFastMode(persist_read_bool(PERSISTED_FAST_MODE));
	if(persist_exists(PERSISTED_USE_OLD_ASSETS))
		SetUseOldAssets(persist_read_bool(PERSISTED_USE_OLD_ASSETS));
	useWorkerApp = persist_read_bool(PERSISTED_WORKER_APP);
	if(useWorkerApp)
	{
		AttemptToLaunchWorkerApp();
	}
	else
	{
		// If the user has launched the worker app outside of MiniDungeon,
		// they want it on.
		if(WorkerIsRunning())
			SetWorkerApp(true);
	}
	SetWorkerCanLaunch(persist_read_bool(PERSISTED_WORKER_CAN_LAUNCH));

	if(persist_read_bool(PERSISTED_IN_COMBAT))
	{
		int currentMonster = persist_read_int(PERSISTED_MONSTER_TYPE);
		int currentMonsterHealth = persist_read_int(PERSISTED_MONSTER_HEALTH);
		ResumeBattle(currentMonster, currentMonsterHealth);
	}
	ProfileLogStop("LoadPersistedData");
	if(characterData->level == 0)
	{
		// Something bad happened to the data, possible due to a watch crash
		ERROR_LOG("Persisted data was broken somehow, clearing");
		ClearPersistedData();
		return false;
	}
	return true;
}
Exemple #9
0
bool LoadPersistedData(void)
{
	CharacterData *characterData;
	int floor = 0;
	if(!persist_exists(PERSISTED_IS_DATA_SAVED) || !persist_read_bool(PERSISTED_IS_DATA_SAVED))
		return false;
		
	if(!IsPersistedDataCurrent())
	{
		WARNING_LOG("Persisted data does not match current version, clearing.");
		ClearPersistedData();
		return false;
	}

	INFO_LOG("Loading persisted data.");
	characterData = GetCharacter();
	persist_read_data(PERSISTED_CHARACTER_DATA, characterData, sizeof(CharacterData));
	floor = persist_read_int(PERSISTED_CURRENT_FLOOR);
	SetCurrentFloor(floor);
	
	uint8_t * itemsOwned = malloc(sizeof(uint8_t) * ITEM_TYPE_COUNT);
	persist_read_data(PERSISTED_ITEM_DATA, itemsOwned, sizeof(itemsOwned));
	SetItemOwned(itemsOwned);
	free(itemsOwned);
	
	SetStatPointsPurchased(persist_read_int(PERSISTED_STAT_POINTS_PURCHASED));
	SetVibration(persist_read_bool(PERSISTED_VIBRATION));
	SetFastMode(persist_read_bool(PERSISTED_FAST_MODE));
	SetEasyMode(persist_read_bool(PERSISTED_EASY_MODE));
	
	CardSave saves[NB_TYPE_CARDS];
	persist_read_data(PERSISTED_CARD_DECK, saves, sizeof(saves));
	SetCardSave(saves);
	SetEntriesSize(persist_read_int(PERSISTED_ENTRIES_SIZE));	
	
	if(persist_read_bool(PERSISTED_IN_COMBAT))
	{
		persist_read_data(PERSISTED_MONSTER_TYPE, GetCurMonster(), sizeof(MonsterInfo));
		ResumeBattle();
	}
	if(characterData->level == 0)
	{
		// Something bad happened to the data, possible due to a watch crash
		ERROR_LOG("Persisted data was broken somehow, clearing");
		ClearPersistedData();
		return false;
	}
	return true;
}
Exemple #10
0
static void history_load() {
  if (persist_exists(MESSAGE_KEY_batches)) {
    current_history_batch = persist_read_int(MESSAGE_KEY_batches);
  }
  if (current_history_batch < 0) {
    // APP_LOG(APP_LOG_LEVEL_DEBUG, "No history in persistent storage: %d", current_history_batch);
    return;
  }
  // APP_LOG(APP_LOG_LEVEL_DEBUG, "Reading %d history batches from persistent storage", current_history_batch+1);
  int total_bytes_read = 0;
  for (int i=0; i<=current_history_batch; i++) {
    if (persist_exists(FIRST_HISTORY_BATCH+i)) {
      // int result = persist_read_data(FIRST_HISTORY_BATCH+i, &history[i], sizeof(history[i]));
      // APP_LOG(APP_LOG_LEVEL_DEBUG, "Loaded history batch %d, %d bytes, %d events, result %d", i, (int) sizeof(history[i]), history[i].last_event+1, result);
      persist_read_data(FIRST_HISTORY_BATCH+i, &history[i], sizeof(history[i]));
      total_bytes_read += sizeof(history[i]);
    }
    else {
      APP_LOG(APP_LOG_LEVEL_WARNING, "No history batch %d although current_history_batch %d indicates its existence!", i, current_history_batch);
    }
  }
  start_time = (int) history[0].event_time[0];
  selected = (Selected) {current_history_batch, history[current_history_batch].last_event};
  events = current_history_batch * HISTORY_BATCH_SIZE + history[current_history_batch].last_event + 1;
  if (persist_exists(MESSAGE_KEY_avgMood)) {
    average_mood = persist_read_int(MESSAGE_KEY_avgMood);
  }
  APP_LOG(APP_LOG_LEVEL_DEBUG, "Total history: %d batches, %d events, %d bytes", current_history_batch+1, events, total_bytes_read);
}
Exemple #11
0
void cdt_init(void) {
  if (persist_exists(KEY_CDT)) {
    persist_read_data(KEY_CDT, &cdt, sizeof(cdt));
  } else {
    cdt_reset_all();
  }
}
void bgpicker_init() {
  // first, load and set all the background images
  // awkwardly force bw images in the case of a black and white watch
  #ifdef PBL_COLOR
  bgpicker_dayparts[0].backgroundImageId = RESOURCE_ID_IMAGE_BG0_NIGHT;
  bgpicker_dayparts[1].backgroundImageId = RESOURCE_ID_IMAGE_BG1_TWILIGHT;
  bgpicker_dayparts[2].backgroundImageId = RESOURCE_ID_IMAGE_BG2_SUNRISE;
  bgpicker_dayparts[3].backgroundImageId = RESOURCE_ID_IMAGE_BG3_MIDDAY;
  bgpicker_dayparts[4].backgroundImageId = RESOURCE_ID_IMAGE_BG4_AFTERNOON;
  bgpicker_dayparts[5].backgroundImageId = RESOURCE_ID_IMAGE_BG5_SUNSET;
  bgpicker_dayparts[6].backgroundImageId = RESOURCE_ID_IMAGE_BG6_TWILIGHT;
  bgpicker_dayparts[7].backgroundImageId = RESOURCE_ID_IMAGE_BG0_NIGHT;
  #else
  bgpicker_dayparts[0].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG0_NIGHT;
  bgpicker_dayparts[1].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG1_TRANSITION;
  bgpicker_dayparts[2].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG1_TRANSITION;
  bgpicker_dayparts[3].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG2_DAY;
  bgpicker_dayparts[4].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG2_DAY;
  bgpicker_dayparts[5].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG1_TRANSITION;
  bgpicker_dayparts[6].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG1_TRANSITION;
  bgpicker_dayparts[7].backgroundImageId = RESOURCE_ID_IMAGE_BW_BG0_NIGHT;
  #endif

  // if we have a location set in persistent storage, use that
  if (persist_exists(BGPICKER_LOC_KEY)) {
    LocationInfo loc;
    persist_read_data(BGPICKER_LOC_KEY, &loc, sizeof(LocationInfo));
    bgpicker_updateLocation(loc);
  } else {
    // otherwise, just use the default data
    bgpicker_setSunriseSunset(DEFAULT_SUNRISE_TIME, DEFAULT_SUNSET_TIME);
  }
}
Exemple #13
0
static void window_load(Window *window) {
  Layer *window_layer = window_get_root_layer(window);
  GRect bounds = layer_get_bounds(window_layer);

  int i;
  static char log[PERSIST_LOG_MAX][PERSIST_LOG_LEN]={""};
  for(i=0;i<PERSIST_LOG_MAX;i++){
    log_t logn;
    persist_read_data(NUM_PERSIST_LOG+i, &logn, sizeof(logn));
    if(logn.sets != 0 ){
      if(cfg_adv){
        snprintf(log[i], PERSIST_LOG_LEN, 
               "%02d%02d|%2dx(%3d+%3d+%3d+%2d)",
               logn.mon, logn.day, //logn.hour, logn.min,
               logn.sets, logn.time[0], logn.time[1], logn.time[2], logn.rest);
      }
      else{
        snprintf(log[i], PERSIST_LOG_LEN, 
               "[%02d%02d %02d%02d]%2dx3x%3d(%2d)",
               logn.mon, logn.day, logn.hour, logn.min,
               logn.sets, logn.time[0], logn.rest);
      }
      APP_LOG(APP_LOG_LEVEL_DEBUG, "Loading %s from %d", log[i], i);

      text_layer[i] = text_layer_create((GRect) { .origin = { 0, i*20 }, .size = { bounds.size.w, 20 } });
      text_layer_set_text(text_layer[i], log[i]);
      text_layer_set_text_alignment(text_layer[i], GTextAlignmentLeft);
      layer_add_child(window_layer, text_layer_get_layer(text_layer[i]));
    }
Exemple #14
0
// Initialization
static void init() {
  s_main_window = window_create();
  s_set_window = window_create();
  
// Remove the statusbar on SDK 2
#ifdef PBL_SDK_2
  window_set_fullscreen(s_main_window, true);
  window_set_fullscreen(s_set_window, true);
#endif
  
  // Read the persistent storage. Probably incorrectly
  valueRead = persist_read_data(SETTINGS_KEY, &settings, sizeof(settings));
  
  // Read the persistent storage better, meaning after that read fails, just go ahead and fix it
  if (settings.c_1 == 0) {
    settings.c_1 = 5;
    settings.c_2 = 5;
    settings.c_3 = 5;
    settings.c_4 = 5;
    settings.set = false;
  }
  
  window_set_background_color(s_main_window, GColorBlack);
  window_set_background_color(s_set_window, GColorBlack);
  window_set_window_handlers(s_main_window, (WindowHandlers) {
    .load = main_window_load,
    .unload = main_window_unload,
  });
Exemple #15
0
static void update_visible_layers(void) {
    const bool refresh_layer_hidden = !updating && persist_exists(STORAGE_REWARDS_UPDATED_AT);
    const bool cards_layer_hidden = updating || !refresh_layer_hidden || (current_page == 0);
    const bool stats_layer_hidden = updating || !refresh_layer_hidden || !cards_layer_hidden;
    const bool pager_layer_hidden = updating;

    uint8_t num_cards = 0;
    persist_read_data(STORAGE_NUMBER_OF_CARDS, &num_cards, sizeof(num_cards));

    if (current_page > num_cards) {
        current_page = num_cards;
    }

    if (!cards_layer_hidden) {
        card_layer_set_index(card_layer, current_page - 1);
    }

    if (!pager_layer_hidden) {
        pager_layer_set_values(pager_layer, current_page, num_cards + 1);
    }

    refresh_layer_set_updating(refresh_layer, updating);

    layer_set_hidden(refresh_layer_get_layer(refresh_layer), refresh_layer_hidden);
    layer_set_hidden(card_layer_get_layer(card_layer), cards_layer_hidden);
    layer_set_hidden(stats_layer_get_layer(stats_layer), stats_layer_hidden);
    layer_set_hidden(pager_layer_get_layer(pager_layer), pager_layer_hidden);
}
bool watchface_preferences_get_prefs(WatchfacePrefs *data_out) {
  if (!data_out) {
    return false;
  }

  const size_t buffer_size = sizeof(SerializedPrefs);
  uint8_t buffer[buffer_size];

  status_t status = persist_read_data(WATCHFACE_PREFS_KEY, buffer, buffer_size);

  if (status == E_DOES_NOT_EXIST) {
    *data_out = s_default_prefs;
    return true;
  }

  size_t bytes_written = status;
    SerializedPrefs *serialized_prefs = (SerializedPrefs *)buffer;
  if ((bytes_written < buffer_size) ||
      (serialized_prefs->version != SERIALIZED_PREFS_CURRENT_VERSION)) {
    APP_LOG(APP_LOG_LEVEL_ERROR, "Did not completely write buffer. Missing %u bytes",
            (buffer_size - bytes_written));
    return false;
  }

  *data_out = (WatchfacePrefs) {
    .background_color = {serialized_prefs->background_color},
    .band_color = {serialized_prefs->band_color},
    .time_text_color = {serialized_prefs->time_text_color},
Exemple #17
0
static void show_charge_log()
{
  if (!persist_exists(PERSIST_KEY_LOG_COUNT) || !persist_exists(PERSIST_KEY_LOG_INDEX)) {
    return;
  }
  
  int log_count = persist_read_int(PERSIST_KEY_LOG_COUNT);
  int log_index = persist_read_int(PERSIST_KEY_LOG_INDEX);
  
  if (log_count == 0) {
    return;
  }
  
  time_t now = time(NULL);
  for (int i = 0; i < log_count; ++i) {
    uint32_t key_log = PERSIST_KEY_LOG_BASE + (log_index + i) % MAX_LOG_COUNT;
    
    ChargeLog charge_log;
    persist_read_data(key_log, &charge_log, sizeof(charge_log));
    
    static char buff[] = "999 4294967296 %100";
    snprintf(buff, sizeof(buff), "%d %u %d%%", i, (unsigned)difftime(now, charge_log.time), charge_log.charge_state.charge_percent);
    APP_LOG(APP_LOG_LEVEL_DEBUG, buff);
  }
}
Exemple #18
0
static void timers_migrate_2(void) {

  if (! persist_exists(PERSIST_TIMER_START)) {
    return;
  }

  int block_number = 0;
  TimerBlockTiny* block = malloc(sizeof(TimerBlockTiny));
  persist_read_data(PERSIST_TIMER_START, block, sizeof(TimerBlockTiny));

  uint8_t timer_count = block->total_timers;

  for (int t = 0; t < timer_count; t += 1) {

    if (t > 0 && t % TIMER_BLOCK_SIZE == 0) {
      block_number += 1;
      if (NULL != block) {
        free(block);
        block = NULL;
      }
      block = malloc(sizeof(TimerBlockTiny));
      persist_read_data(PERSIST_TIMER_START + block_number, block, sizeof(TimerBlockTiny));
    }

    TimerTiny* timer_tiny = &block->timers[t % TIMER_BLOCK_SIZE];

    int seconds_elapsed = time(NULL) - block->save_time;

    Timer* timer = malloc(sizeof(Timer));
    timer->id = timer_tiny->id;
    timer->current_time = timer_tiny->current_time;
    timer->length = timer_tiny->length;
    timer->repeat = timer_tiny->repeat;
    timer->repeat_count = timer_tiny->repeat_count;
    timer->status = timer_tiny->status;
    timer->vibration = timer_tiny->vibration;
    timer->type = timer_tiny->type;
    timer->wakeup_id = timer_tiny->wakeup_id;
    timer->timer = NULL;
    strcpy(timer->label, timer_tiny->label);
    timer_restore(timer, seconds_elapsed);
    timers_add(timer);
  }
  if (NULL != block) {
    free(block);
  }
}
Exemple #19
0
static void readDemoData(){
    int currentDay = getCurrentDayNumber();

        for(int i = 0; i < 6; i++){
        persist_read_data(currentDay - (i+1), &weekData[i], sizeof(weekData[i]));
        APP_LOG(APP_LOG_LEVEL_INFO, "Week data %d: seconds:%d mood:%d", currentDay - (i+1), weekData[i].sleepSeconds, weekData[i].mood);
    }
}
Exemple #20
0
void settings_load(void) {
  if (persist_exists(STORAGE_SETTINGS)) {
    int res = persist_read_data(STORAGE_SETTINGS, &_settings, sizeof(_settings));
    if (res < 0) {
      LOG("Settings load failed: %d", res);
    }
  }
}
Exemple #21
0
void Weather_init() {
  // if possible, load weather data from persistent storage
  printf("starting weather!");
  if (persist_exists(WEATHERINFO_PERSIST_KEY)) {
    printf("current key exists!");
    WeatherInfo w;
    persist_read_data(WEATHERINFO_PERSIST_KEY, &w, sizeof(WeatherInfo));

    Weather_weatherInfo = w;

    #ifdef PBL_COLOR
      Weather_currentWeatherIcon = gdraw_command_image_create_with_resource(w.currentIconResourceID);
    #else
      Weather_currentWeatherIcon = gbitmap_create_with_resource(w.currentIconResourceID);
    #endif

  } else {

    printf("current key does not exist!");
    // otherwise, use null data
    Weather_currentWeatherIcon = NULL;
    Weather_weatherInfo.currentTemp = INT32_MIN;
  }

  if (persist_exists(WEATHERFORECAST_PERSIST_KEY)) {
    printf("forecast key exists!");
    WeatherForecastInfo w;
    persist_read_data(WEATHERFORECAST_PERSIST_KEY, &w, sizeof(WeatherForecastInfo));

    Weather_weatherForecast = w;

    #ifdef PBL_COLOR
      Weather_forecastWeatherIcon = gdraw_command_image_create_with_resource(w.forecastIconResourceID);
    #else
      Weather_forecastWeatherIcon = gbitmap_create_with_resource(w.forecastIconResourceID);
    #endif

  } else {
    printf("forecast key does not exist!");

    Weather_forecastWeatherIcon = NULL;
    Weather_weatherForecast.highTemp = INT32_MIN;
    Weather_weatherForecast.lowTemp = INT32_MIN;
  }
}
Exemple #22
0
void timers_restore(void) {

  if (! persist_exists(PERSIST_TIMERS_VERSION)) {
    timers_migrate_1();
    return;
  }

  if (TIMERS_VERSION_TINY == persist_read_int(PERSIST_TIMERS_VERSION)) {
    timers_migrate_2();
    return;
  }

  timers_clear();

  time_t now = time(NULL);
  uint16_t seconds_elapsed = 0;

  TimerBlock* block = NULL;
  if (persist_exists(PERSIST_TIMER_START)) {
    block = malloc(sizeof(TimerBlock));
    persist_read_data(PERSIST_TIMER_START, block, sizeof(TimerBlock));
    uint8_t num_timers = block->total_timers;
    uint8_t block_offset = 0;
    seconds_elapsed = now - block->save_time;

    for (uint8_t t = 0; t < num_timers; t += 1) {
      if (! block) {
        block = malloc(sizeof(TimerBlock));
        persist_read_data(PERSIST_TIMER_START + block_offset, block, sizeof(TimerBlock));
      }
      Timer* timer = timer_clone(&block->timers[t % TIMER_BLOCK_SIZE]);
      timers_add(timer);
      timer_restore(timer, seconds_elapsed);
      if (t % TIMER_BLOCK_SIZE == (TIMER_BLOCK_SIZE - 1)) {
        free(block);
        block = NULL;
        block_offset += 1;
      }
    }
    if (block) {
      free(block);
      block = NULL;
    }
  }
}
Exemple #23
0
static void main_load_data(void) {
  settings.Auto_sort=false;
  settings.Show_clock=true;
  settings.Hrs_day_x10=240;
  settings.Last_reset=time(NULL);
  
  stored_version = persist_read_int(STORAGE_KEY_VERSION); // defaults to 0 if key is missing
  if (stored_version) {
    data_loaded_from_watch = true;
    if (persist_exists(STORAGE_KEY_TIMESTAMP)) data_timestamp=persist_read_int(STORAGE_KEY_TIMESTAMP);
    persist_read_data(STORAGE_KEY_TIMER, &timer, sizeof(Timer));
    if (persist_exists(STORAGE_KEY_SETTINGS)) {
      persist_read_data(STORAGE_KEY_SETTINGS, &settings, sizeof(Settings));
    }
    jobs_list_load(STORAGE_KEY_FIRST_JOB, stored_version);
    if (stored_version < STORAGE_KEY_VERSION) main_save_data();
  }
}
Exemple #24
0
Calendar read_calendar(const uint32_t key, Calendar def_value) {
  if (persist_exists(key)) {
    Calendar calendar;
    persist_read_data(key, &calendar, sizeof(calendar));
    return calendar;
  } else {
    return def_value;
  }
}
Exemple #25
0
uint32_t *sleepData(uint32_t dataCount) {
    if (persist_exists(SLEEP_KEY)) {
        uint32_t *buffer = malloc(dataCount * sizeof(uint32_t));
        persist_read_data(SLEEP_KEY, buffer, dataCount * sizeof(uint32_t));
        return buffer;
    } else {
        return NULL;
    }
}
Exemple #26
0
// Call once from init()/deinit()
void cache_init()
{
    app_log_ts(APP_LOG_LEVEL_DEBUG, "         cache_init()  ");

    if (persist_exists(STATE_KEY)){
      persist_read_data(STATE_KEY, state_cache, sizeof(state_cache));
    }
    if (persist_exists(TIME_KEY)){
      persist_read_data(TIME_KEY, time_cache, sizeof(time_cache));
    }
    if (persist_exists(HEIGHT_KEY)){
      persist_read_data(HEIGHT_KEY, height_cache, sizeof(height_cache));
    }
    if (persist_exists(PORTNAME_KEY)){
      persist_read_string(PORTNAME_KEY, portname_cache, sizeof(portname_cache));
    }
    app_log_ts(APP_LOG_LEVEL_DEBUG, "         cache_init() - exit  ");

}
Exemple #27
0
static void window_down_click_handler(ClickRecognizerRef recognizer, void *context) {
    if (updating) return;

    uint8_t num_cards = 0;
    persist_read_data(STORAGE_NUMBER_OF_CARDS, &num_cards, sizeof(num_cards));

    if (num_cards > 0 && current_page < num_cards) {
        current_page++;
        update_visible_layers();
    }
}
Exemple #28
0
int get_data_keys(uint32_t *buffer) {
  // Get out the values at the master key
  uint32_t tmp[BUFFER_SIZE/4];
  persist_read_data(MASTER_KEY, tmp, BUFFER_SIZE);

  // Read the ints out 32 bits at a time
  for(int i = 0; i < next_key; i++) {
    buffer[i]  = tmp[i] & 0x1FFFFFFF;
  }

  return next_key;
}
Exemple #29
0
static void upgrade(void) {
    Version saved_version = { 0, 0 };
    persist_read_data(STORAGE_APP_VERSION, &saved_version, sizeof(saved_version));

    if (saved_version.major < 3) {
        for (uint32_t i = 0; i < 5; i++) {
            persist_delete(i);
        }
    }

    Version current_version = __pbl_app_info.app_version;
    persist_write_data(STORAGE_APP_VERSION, &current_version, sizeof(current_version));
}
void load_clock() {
  time_t now = time(NULL);
#ifdef PBL_SDK_2
  struct tm *t = localtime(&now);
#else
  struct tm *t = gmtime(&now);
#endif
  tick_clock(t, true);
  if(persist_exists(SW_BUTT)) {
    sw_butt = persist_read_int(SW_BUTT);
    persist_read_data(SW_STOP, &reg, sizeof(reg));
    lap.tm_hour = t->tm_hour - reg.tm_hour + 960;
    lap.tm_hour += (t->tm_yday - reg.tm_yday) * 24;//days;
    if(reg.tm_year != t->tm_year) {
      lap.tm_hour += 365 * 24;//happy new year (close enough)
      if((reg.tm_year%4 == 0) && ((reg.tm_year%100 != 0) || (reg.tm_year%400 == 0)))
        lap.tm_hour += 24;//leap year day
      if(t->tm_year - reg.tm_year > 1) {//greater than 1 year
        reset_sw();//get a life!!
        return;
      } 
    }
    lap.tm_min = t->tm_min - reg.tm_min + 60;
    lap.tm_sec = t->tm_sec - reg.tm_sec + 60;
    persist_read_data(SW_STORE, &reg, sizeof(reg));
    if((sw_butt&1)==1) {//add extra running time
      reg.tm_hour += lap.tm_hour;
      reg.tm_hour %= 960;//40 day timer
      reg.tm_min += lap.tm_min;
      reg.tm_min %= 60;
      reg.tm_sec += lap.tm_sec;
      reg.tm_sec %= 60;
    }
    persist_read_data(SW_LAP, &lap, sizeof(lap));
    return;
  }
  reset_sw();
}