static void init(void) { memset(&time_digits_layers, 0, sizeof(time_digits_layers)); memset(&time_digits_images, 0, sizeof(time_digits_images)); const int inbound_size = 64; const int outbound_size = 64; app_message_open(inbound_size, outbound_size); window = window_create(); if (window == NULL) { return; } window_set_background_color(window, GColorBlack); canvas = layer_create(GRect(0, 0, 144, 168)); layer_set_update_proc(canvas, (LayerUpdateProc) render); layer_add_child(window_get_root_layer(window), canvas); window_stack_push(window, true); Layer *window_layer = window_get_root_layer(window); load_settings(); // Open AppMessage connection app_message_register_inbox_received(inbox_received_handler); app_message_open(128, 128); //owm_weather_init(5ba77aab84470992ddc7e49e4985aeab); //events_app_message_open(); //owm_weather_fetch(); handle_weather(); handle_battery(battery_state_service_peek()); battery_state_service_subscribe(handle_battery); // Create time and date layers GRect dummy_frame = { {0, 0}, {0, 0} }; for (int i = 0; i < TOTAL_TIME_DIGITS; i++) { time_digits_layers[i] = bitmap_layer_create(dummy_frame); layer_add_child(window_layer, bitmap_layer_get_layer(time_digits_layers[i])); } mFont = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_20)); mDayText = malloc(mDayTextSize); mWeatherText = malloc(mWeatherTextSize); mBatteryText = malloc(mBatteryTextSize); // Avoids a blank screen on watch start. time_t now = time(NULL); struct tm *tick_time = localtime(&now); handle_tick(tick_time, DAY_UNIT + HOUR_UNIT + MINUTE_UNIT); tick_timer_service_subscribe(MINUTE_UNIT, handle_tick); }
static void process_tuple(Tuple* t) { // Store incoming information static char conditions_buffer[16]; switch(t->key) { case KEY_SCALE: if (strcmp(t->value->cstring, "0") == 0) scale = 0; else if (strcmp(t->value->cstring, "1") == 0) scale = 1; else if (strcmp(t->value->cstring, "2") == 0) scale = 2; else if (strcmp(t->value->cstring, "3") == 0) scale = 3; write_settings_to_memory(); handle_weather(); break; case KEY_CLOCK: if (strcmp(t->value->cstring, "0") == 0) clock_format = 0; else if (strcmp(t->value->cstring, "1") == 0) clock_format = 1; write_settings_to_memory(); update_time(); break; case KEY_DATE: if (strcmp(t->value->cstring, "0") == 0) date_format = 0; else if (strcmp(t->value->cstring, "1") == 0) date_format = 1; else if (strcmp(t->value->cstring, "2") == 0) date_format = 2; write_settings_to_memory(); handle_date(); break; case KEY_TEMPERATURE: update_scale((int)t->value->int32); break; case KEY_CONDITIONS: snprintf(conditions_buffer, sizeof(conditions_buffer), "%s", t->value->cstring); text_layer_set_text(condition_layer, conditions_buffer); break; default: APP_LOG(APP_LOG_LEVEL_ERROR, "Key %d not recognized!", (int)t->key); break; } }
void handle_minute_tick(struct tm *tick_time, TimeUnits units_changed) { handle_battery(); handle_date(); switch (clock_format) { case 0: // diurnal if(((tick_time->tm_min) * 60 + tick_time->tm_sec) % 50 == 0) update_time(); break; case 1: // semidiurnal if(((tick_time->tm_min) * 60 + tick_time->tm_sec) % 25 == 0) update_time(); break; } // Get weather update every 30 minutes if(tick_time->tm_min % 30 == 0) handle_weather(); }