Example #1
0
static void battery_display_layer_update_callback(Layer *layer, GContext* ctx) {
    
  GPoint p0,p1;
  BatteryChargeState bat_stat = battery_state_service_peek();
  
  p0.x=0;
  p0.y=167;
  p1.x= (int16_t) (1.4 * bat_stat.charge_percent); // 140 @ 100 percent
  p1.y=167;
  
  graphics_context_set_stroke_color(ctx, FOREGROUND_COLOR);
  graphics_draw_line(ctx, p0, p1);
  if (INVERT)
    {
    // if inverted, then the battery bar is too thin
    // make it a bit wider (2 pixels)
    p0.y = 166;
    p1.y = 166;
    graphics_draw_line(ctx, p0, p1);
  }
 
}
Example #2
0
static void main_window_load(Window *window) {
  s_time_layer = text_layer_create(GRect(0, 50, 144, 50));
  text_layer_set_background_color(s_time_layer, GColorClear);
  text_layer_set_text_color(s_time_layer, GColorBlack);
  text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49));
  
  text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer));
  
  s_date_layer = text_layer_create(GRect(0, 100, 144, 50));
  text_layer_set_background_color(s_date_layer, GColorClear);
  text_layer_set_text_color(s_date_layer, GColorBlack);
  text_layer_set_font(s_date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
  text_layer_set_text_alignment(s_date_layer, GTextAlignmentCenter);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_date_layer));
  
  s_battery_layer = text_layer_create(GRect(0, 0, 144, 25));
  text_layer_set_background_color(s_battery_layer, GColorClear);
  text_layer_set_text_color(s_battery_layer, GColorBlack);
  text_layer_set_font(s_battery_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
  text_layer_set_text_alignment(s_battery_layer, GTextAlignmentRight);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_battery_layer));
  battery_handler(battery_state_service_peek());
  
  s_bt_layer = text_layer_create(GRect(0, 0, 144, 25));
  text_layer_set_background_color(s_bt_layer, GColorClear);
  text_layer_set_text_color(s_bt_layer, GColorBlack);
  text_layer_set_font(s_bt_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
  text_layer_set_text_alignment(s_bt_layer, GTextAlignmentLeft);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_bt_layer));
  bt_handler(bluetooth_connection_service_peek());
  
  s_day_layer = text_layer_create(GRect(0, 150, 144, 50));
  text_layer_set_background_color(s_day_layer, GColorClear);
  text_layer_set_text_color(s_day_layer, GColorBlack);
  text_layer_set_font(s_day_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
  text_layer_set_text_alignment(s_day_layer, GTextAlignmentCenter);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_day_layer));
}
Example #3
0
static void main_window_load(Window *window) {
  
  Layer *window_layer = window_get_root_layer(window);
  GRect bounds = layer_get_bounds(window_layer);

  //Create GBitmap, then set to created BitmapLayer
  sushi_resource_id = RESOURCE_ID_SUSHI_S;
  s_background_bitmap = gbitmap_create_with_resource(sushi_resource_id);
  s_background_layer = bitmap_layer_create(GRect(0, 60, 720, 72));
  bitmap_layer_set_bitmap(s_background_layer, s_background_bitmap);
  layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(s_background_layer));
  
  
  //Create GFont
  s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_VIGRO_26));
  // Create time TextLayer
  s_time_layer = text_layer_create(GRect(0, 20, bounds.size.w, 52));
  text_layer_set_background_color(s_time_layer, GColorClear);
  text_layer_set_text_color(s_time_layer, GColorDarkGreen);
  text_layer_set_text(s_time_layer, "00:00:00");
  text_layer_set_font(s_time_layer, s_time_font);
  text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter);

  s_battery_layer = text_layer_create(GRect(0, 140, bounds.size.w, 34));
  text_layer_set_text_color(s_battery_layer, GColorDarkGreen);
  text_layer_set_background_color(s_battery_layer, GColorClear);
  text_layer_set_font(s_battery_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
  text_layer_set_text_alignment(s_battery_layer, GTextAlignmentCenter);
  text_layer_set_text(s_battery_layer, "100% charged");
  
  battery_state_service_subscribe(handle_battery);
  
  // Add it as a child layer to the Window's root layer
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_battery_layer));
  // Make sure the time is displayed from the start
  update_time();
  handle_battery(battery_state_service_peek());
}
Example #4
0
static void draw_bat(Layer *this_layer, GContext *ctx, int y) {

  GRect bounds = layer_get_bounds(this_layer);

  BatteryChargeState bat = battery_state_service_peek();
  
  int16_t width = bounds.size.w;
  
  int16_t offset = bounds.size.w/2 - (100 - bat.charge_percent)*width/100;
  
//   APP_LOG(APP_LOG_LEVEL_INFO, "o: %d y: %d w: %d", offset, y, width);
  
  int g = 50; // 100-50
  int ye = 25; // 50-25 
  int r = 25; // 25-0
  
#ifdef PBL_COLOR
  int height = 8;
#else
  int height = 4;
#endif
  
  GRect green  = GRect(offset, y, width*g/100, height);
  GRect yellow = GRect(green.origin.x+green.size.w,   y, width*ye/100, height);
#ifndef PBL_COLOR
  height /= 2;
#endif
  GRect red =    GRect(yellow.origin.x+yellow.size.w, y, width*r/100, height);
  
  graphics_context_set_fill_color(ctx,  COLOR_FALLBACK(GColorGreen, GColorWhite));
  graphics_fill_rect(ctx, green, 0, GCornerNone);
  graphics_context_set_fill_color(ctx, COLOR_FALLBACK(GColorYellow, GColorLightGray));
  graphics_fill_rect(ctx, yellow, 0, GCornerNone);
  graphics_context_set_fill_color(ctx, COLOR_FALLBACK(GColorRed, GColorDarkGray));
  graphics_fill_rect(ctx, red, 0, GCornerNone);
  

}
Example #5
0
void window_load(Window *window){     
     //setup text layer for time
     text_layer = text_layer_create(GRect(0, 120, 132, 168));
     text_layer_set_background_color(text_layer, GColorClear);
     text_layer_set_text_color(text_layer, GColorBlack);
     text_layer_set_text_alignment(text_layer, GTextAlignmentCenter);
     text_layer_set_font(text_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_POKEMON_GB_24)));
     layer_add_child(window_get_root_layer(window), (Layer*) text_layer);
     
     //Setup Battery Layer
     batt_layer = text_layer_create(GRect(5, 5, 144, 30));
     text_layer_set_font(batt_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_POKEMON_GB_8)));
     layer_add_child(window_get_root_layer(window), text_layer_get_layer(batt_layer));
 
     //Get info, copy to long-lived buffer and display
     BatteryChargeState state = battery_state_service_peek();
     static char buffer[] = "HP: 100/100";
     snprintf(buffer, sizeof("HP: 100/100"), "HP: %d/100", state.charge_percent);
     text_layer_set_text(batt_layer, buffer);
     
     //Subscribe to AccelerometerService (uncomment one to choose)
     //accel_tap_service_subscribe(accel_tap_handler);
     accel_data_service_subscribe(1, accel_raw_handler);
     
     //Setup Accel Layer
     accel_layer = text_layer_create(GRect(5, 15, 144, 30));
     text_layer_set_font(accel_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_POKEMON_GB_8)));
     text_layer_set_text(accel_layer, "Accel tap: N/A");
     layer_add_child(window_get_root_layer(window), text_layer_get_layer(accel_layer));

     //Get a time structure so that the face doesn't start blank
     struct tm *t;
     time_t temp;
     temp = time(NULL);
     t = localtime(&temp);   
     //Manually call the tick handler when the window is loading
     tick_handler(t, MINUTE_UNIT);
}
Example #6
0
static void main_window_load(Window *window) {
  // Initialize variables.
  selected_color = 0;
  
  // Set background color.
  window_set_background_color(s_main_window, GColorFromHEX(background_colors[selected_color]));

  // Create background canvas.
  s_canvas = layer_create(GRect(0, 0, 144, 168));
  
  // Create watch texts.
  s_time_layer = text_layer_create(GRect(0, 30, 144, 54));
  s_info_layer = text_layer_create(GRect(10, 134, 124, 24));
  
  // Setup watch text colors.
  text_layer_set_text_color(s_time_layer, GColorBlack);
  text_layer_set_background_color(s_time_layer, GColorClear);
  text_layer_set_text_color(s_info_layer, GColorBlack);
  text_layer_set_background_color(s_info_layer, GColorClear);
  
  // Setup font for watch.
  s_time_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_ROBOTICON_42));
  text_layer_set_font(s_time_layer, s_time_font);

  text_layer_set_font(s_info_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
  
  // Set text alignments.
  text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter);
  text_layer_set_text_alignment(s_info_layer, GTextAlignmentCenter);
  
  // Add it as a child layer to the Window's root layer
  layer_add_child(window_get_root_layer(window), s_canvas);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_info_layer));

  // Get the current battery level
  battery_handler(battery_state_service_peek());
}
Example #7
0
static void update_battery(Layer *layer, GContext *ctx) {
  int bat = (battery_state_service_peek().charge_percent) / 10;
  if (bat == 0) {
    bat = 1;
  }
  
  GRect box_frame = GRect(0, 0,((bat * 5)), 4);
  s_battery_layer = layer_create(box_frame);
#ifdef PBL_COLOR
  if (bat >= 6) {
  graphics_context_set_fill_color(ctx, GColorGreen);
  }
  else if (bat >=3) {
    graphics_context_set_fill_color(ctx, GColorYellow);
  }
  else {
    graphics_context_set_fill_color(ctx, GColorRed);
  }
#else
  graphics_context_set_fill_color(ctx, GColorBlack);
#endif
  graphics_fill_rect(ctx, layer_get_bounds(s_battery_layer), 2, GCornersAll);
}
Example #8
0
static void battery_update_proc(Layer *layer, GContext *ctx) {
  static BatteryChargeState c_state;
  c_state = battery_state_service_peek();
  
  graphics_context_set_stroke_color(ctx, c_state.is_charging ? GColorWhite : GColorBlack);
  graphics_draw_rect(ctx, GRect(0,0,15,15));
  
  graphics_context_set_stroke_color(ctx, GColorWhite);
  graphics_context_set_fill_color(ctx, GColorWhite);

  switch(c_state.charge_percent/10){
    case 10: graphics_fill_rect(ctx, GRect(1,1,13,13), 0, GCornerNone); break;
    case 9: graphics_draw_rect(ctx, GRect(2,10,3,3));
    case 8: graphics_draw_rect(ctx, GRect(6,10,3,3));
    case 7: graphics_draw_rect(ctx, GRect(2,6,3,3));
    case 6: graphics_draw_rect(ctx, GRect(10,10,3,3));
    case 5: graphics_draw_rect(ctx, GRect(2,2,3,3));
    case 4: graphics_draw_rect(ctx, GRect(6,6,3,3));
    case 3: graphics_draw_rect(ctx, GRect(10,6,3,3));
    case 2: graphics_draw_rect(ctx, GRect(6,2,3,3));
    case 1: graphics_draw_rect(ctx, GRect(10,2,3,3));
  }
}
Example #9
0
File: main.c Project: musl/DataFace
/*
 * Manually update the ui.
 */
static void update_all() {

	static BatteryChargeState battery_state;
	static bool bluetooth_state;
	static time_t gmt;
	static struct tm *local_time;

	// Prepare to update the UI manually.
	//
	battery_state = battery_state_service_peek();
	bluetooth_state = bluetooth_connection_service_peek();
	gmt = time(NULL);
	local_time = localtime(&gmt);

	// Draw everything that we can, so that there isn't a blank screen
	// on start-up.
	//
	update_time(local_time);
	update_date(local_time);
	update_cldr(local_time);
	update_batt(battery_state);
	update_blth(bluetooth_state);

}
Example #10
0
static void update_status() {
  BatteryChargeState bcs = battery_state_service_peek();
  APP_LOG(APP_LOG_LEVEL_DEBUG, "Battery state: %u%%%s%s", bcs.charge_percent,
          bcs.is_charging ? " charging" : "", bcs.is_plugged ? " plugged" : "");
  
  int i = bcs.charge_percent / 10;
  if (i > 9) i = 9;
  if (i < 0) i = 0;
  bitmap_layer_set_bitmap(s_status_battery_layer, s_bmp_battery[i]);

  bitmap_layer_set_bitmap(s_status_charge_layer, bcs.is_plugged ? s_bmp_charge : s_bmp_nocharge);
  
  bool bt_connected = bluetooth_connection_service_peek();
  APP_LOG(APP_LOG_LEVEL_DEBUG, "Bluetooth %s", bt_connected ? "connected" : "disconnected");
  
  bitmap_layer_set_bitmap(s_status_bt_layer, bt_connected ? s_bmp_bt : s_bmp_nobt);
  
  if (s_last_bt_connected != bt_connected) {
    vibes_double_pulse();
  }
  s_last_bt_connected = bt_connected;

  text_layer_set_text(s_status_text_layer, s_status_label_text);
}
Example #11
0
static void time_handler(struct tm* tick_time, TimeUnits units_changed) {

    static char time_text[] = "00:00"; // Needs to be static because it's used by the system later.
    static char date_text[] = "Xxxxxxxxxxx Xxxxxxxxxx 00";
    static char date_num[] = "00000000";
    
    char *time_format;
    
    strftime(date_text, sizeof(date_text), "%A, %b %e", tick_time);
    text_layer_set_text(date_layer, date_text);
    
    if(clock_is_24h_style()) {
        time_format = "%R";
    }
    else {
        time_format = "%I:%M";
    }
    
    strftime(time_text, sizeof(time_text), time_format, tick_time);

    // Kludge to handle lack of non-padded hour format string
    // for twelve hour clock.
    if (!clock_is_24h_style() && (time_text[0] == '0')) {
        memmove(time_text, &time_text[1], sizeof(time_text) - 1);
    }
    
    text_layer_set_text(time_layer, time_text);
    battery_handler(battery_state_service_peek());
    
    strftime(date_num, sizeof(date_num), "%Y%m%d", tick_time);
    
    if(time(NULL) - start >= 300 || time(NULL) - start == 0) {
        get_events_handler(date_num);
        time(&start);
    }
}
void handle_minute_tick(struct tm * tick_time, TimeUnits units_changed) {
  display_time(tick_time);
  handle_battery(battery_state_service_peek());
}
Example #13
0
void window_load(Window *window){
	
	//load bitmap for background/watchface
	face_bitmap = gbitmap_create_with_resource(RESOURCE_ID_WATCHFACE);
	//add bitmap layer
	face_layer = bitmap_layer_create(GRect(0, 0, 144, 168));
	bitmap_layer_set_bitmap(face_layer, face_bitmap);
	layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(face_layer));
	
	//create text layer for bluetooth status
	bt_layer = text_layer_create(GRect(0, 130, 144, 38));
	text_layer_set_background_color(bt_layer, GColorClear);
	text_layer_set_text_color(bt_layer, GColorWhite);
	text_layer_set_text_alignment(bt_layer, GTextAlignmentCenter);
	text_layer_set_font(bt_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14));
	layer_add_child(window_get_root_layer(window), (Layer*) bt_layer);
	
	//manually invoke bluetooth handler to refresh status on load
	bt_handler();
	
	//create text layer for 'pebble' brand at 6oclock
	brand_layer = text_layer_create(GRect(0, 145, 144, 23));
	text_layer_set_background_color(brand_layer, GColorClear);
	text_layer_set_text_color(brand_layer, GColorWhite);
	text_layer_set_text_alignment(brand_layer, GTextAlignmentCenter);
	text_layer_set_font(brand_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
	text_layer_set_text(brand_layer, "pebble");
	layer_add_child(window_get_root_layer(window), (Layer*) brand_layer);
	
	//create text layer for pebble battery status
	batt_layer = text_layer_create(GRect(5, 76, 20, 50));
	text_layer_set_background_color(batt_layer, GColorClear);
	text_layer_set_text_color(batt_layer, GColorWhite);
	text_layer_set_text_alignment(batt_layer, GTextAlignmentCenter);
	text_layer_set_font(batt_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
	layer_add_child(window_get_root_layer(window), (Layer*) batt_layer);
	
	//manually invoke battery status handler to refresh status on load
	batt_handler(battery_state_service_peek());
	
	//add text layer for digital time
	text_layer = text_layer_create(GRect(0, 0, 144, 168));
	text_layer_set_background_color(text_layer, GColorClear);
	text_layer_set_text_color(text_layer, GColorWhite);
	text_layer_set_text_alignment(text_layer, GTextAlignmentCenter);
	text_layer_set_font(text_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
	layer_add_child(window_get_root_layer(window), (Layer*) text_layer);
	
	//create text layer for date
	date_layer = text_layer_create(GRect(116, 76, 25, 50));
	text_layer_set_background_color(date_layer, GColorClear);
	text_layer_set_text_color(date_layer, GColorWhite);
	text_layer_set_text_alignment(date_layer, GTextAlignmentCenter);
	text_layer_set_font(date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
	layer_add_child(window_get_root_layer(window), (Layer*) date_layer);
	
	//add layers for analog clock
	hours_layer = layer_create(GRect(0, 0, 144, 168));
	layer_set_update_proc(hours_layer, hours_layer_update_proc);
	minutes_layer = layer_create(GRect(0, 0, 144, 168));
	layer_set_update_proc(minutes_layer, minutes_layer_update_proc);
	//draw hands
	hour_path = gpath_create(&HOUR_PATH_INFO);
	layer_add_child(window_get_root_layer(window), (Layer*) hours_layer);
	minute_path = gpath_create(&MINUTE_PATH_INFO);
	layer_add_child(window_get_root_layer(window), (Layer*) minutes_layer);
	
	//time struct to display time on load
	struct tm *t;
	time_t temp;
	temp = time(NULL);
	t = localtime(&temp);
	
	//manually invoke tick handler to refresh time on load
	tick_handler(t, MINUTE_UNIT);
	
	//add centre point
	centre_layer = layer_create(GRect(0, 0, 144, 168));
	layer_set_update_proc(centre_layer, centre_layer_update_proc);
	layer_add_child(window_get_root_layer(window), (Layer*) centre_layer);
}
Example #14
0
static void main_window_load(Window *window) {
  static BatteryChargeState battery_state;
  
  static int vpos_batt;
  static int vpos_dow;
  static int vpos_date;
  static int vpos_time;
  static int vtop;
  static int vcenter;
  static int vpos;
  static int vmove;
  
  minute_when_last_updated = -1;
  
  vpos_batt = -1;
  vpos_dow  = -1;
  vpos_date = -1;
  vpos_time = -1;
  
  vpos = 0;
  if (show_battery) {
    vpos_batt = vpos; vpos += 20;
  }
  vtop = vpos;			
  
  vcenter = (vtop + 168) / 2;	
  
  if (show_date) {
    vpos_dow  = vpos; vpos += 20;
    vpos_date = vpos; vpos += 20;
    vpos += 20;			/* for space between date and time */
  }

  vpos_time = vpos; vpos += 32;	/* larger clock font is just as tall */
  
  vmove = vcenter - ((vtop + vpos) / 2); 
  
  if (vpos_dow  > -1) { vpos_dow  += vmove; }
  if (vpos_date > -1) { vpos_date += vmove; }
  if (vpos_time > -1) { vpos_time += vmove; }
  
  fg = black_on_white ? GColorBlack : GColorWhite;
  bg = black_on_white ? GColorWhite : GColorBlack;
  window_set_background_color(s_main_window, bg);
  
  s_batt_text_layer = NULL;
  s_dow_text_layer  = NULL;
  s_date_text_layer = NULL;
  
  if (show_battery) {
    s_batt_text_layer = text_layer_create(GRect( 2, vpos_batt, 140, 20));
  }
  if (show_date) {
    s_dow_text_layer  = text_layer_create(GRect( 2, vpos_dow , 140, 20));
    s_date_text_layer = text_layer_create(GRect( 2, vpos_date, 140, 20));
  }
  
  s_time_text_layer = text_layer_create(GRect(0, vpos_time, 144, 32)); /* larger clock font is just as tall */
  
  if (show_battery) {
    text_layer_set_background_color(s_batt_text_layer, bg);
    text_layer_set_text_color(s_batt_text_layer, fg);
  }
  
  if (show_date) {
    text_layer_set_background_color(s_dow_text_layer, bg);
    text_layer_set_text_color(s_dow_text_layer, fg);
    text_layer_set_background_color(s_date_text_layer, bg);
    text_layer_set_text_color(s_date_text_layer, fg);
  }

  text_layer_set_background_color(s_time_text_layer, bg);
  text_layer_set_text_color(s_time_text_layer, fg);
  
  if (show_battery || show_date) {
    has_small_font = 1;
    s_small_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_DOT_MATRIX_NUMBER_ONE_16));
  } else {
    has_small_font = 0;
  }
  
  has_large_font = 1;
  if (larger_clock_font) {
    s_large_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_DOT_MATRIX_NUMBER_ONE_DOTTED_SEMICONDENSED_32));
  } else {
    s_large_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_DOT_MATRIX_NUMBER_ONE_CONDENSED_32));
  }
  
  if (show_battery) {
    text_layer_set_font(s_batt_text_layer, s_small_font);
    text_layer_set_text_alignment(s_batt_text_layer, GTextAlignmentRight);
    layer_add_child(window_get_root_layer(s_main_window), text_layer_get_layer(s_batt_text_layer));
  }
  
  if (show_date) {
    text_layer_set_font(s_dow_text_layer,  s_small_font);
    text_layer_set_font(s_date_text_layer, s_small_font);
    text_layer_set_text_alignment(s_dow_text_layer, GTextAlignmentLeft);
    text_layer_set_text_alignment(s_date_text_layer, GTextAlignmentLeft);
    layer_add_child(window_get_root_layer(s_main_window), text_layer_get_layer(s_dow_text_layer));
    layer_add_child(window_get_root_layer(s_main_window), text_layer_get_layer(s_date_text_layer));
  }

  text_layer_set_font(s_time_text_layer, s_large_font);
  text_layer_set_text_alignment(s_time_text_layer, GTextAlignmentCenter);
  layer_add_child(window_get_root_layer(s_main_window), text_layer_get_layer(s_time_text_layer));
  
  update_time();
  
  if (show_battery) {
    battery_state = battery_state_service_peek();
    on_battery_state_change(battery_state);
    battery_state_service_subscribe(on_battery_state_change);
  }

  enabled = 1;
}
Example #15
0
//-----------------------------------------------------------------------------------------------------------------------
static void update_configuration(void)
{
    if (persist_exists(CONFIG_KEY_THEME))
    {
        int32_t theme = persist_read_int(CONFIG_KEY_THEME);
		CfgData.circle = (theme == 0);
	}
	else
		CfgData.circle = false;
	
    if (persist_exists(CONFIG_KEY_FSM))
		CfgData.fsm = persist_read_bool(CONFIG_KEY_FSM);
	else	
		CfgData.fsm = false;
	
    if (persist_exists(CONFIG_KEY_INV))
		CfgData.inv = !CfgData.circle && persist_read_bool(CONFIG_KEY_INV);
	else	
		CfgData.inv = true;
	
    if (persist_exists(CONFIG_KEY_ANIM))
		CfgData.anim = persist_read_bool(CONFIG_KEY_ANIM);
	else	
		CfgData.anim = true;
	
    if (persist_exists(CONFIG_KEY_SEP))
		CfgData.sep = persist_read_bool(CONFIG_KEY_SEP);
	else	
		CfgData.sep = true;
	
    if (persist_exists(CONFIG_KEY_DATEFMT)) 
		CfgData.datefmt = (int16_t)persist_read_int(CONFIG_KEY_DATEFMT);
	else
		CfgData.datefmt = 0;
	
    if (persist_exists(CONFIG_KEY_SMART))
		CfgData.smart = persist_read_bool(CONFIG_KEY_SMART);
	else	
		CfgData.smart = true;
	
    if (persist_exists(CONFIG_KEY_VIBR))
		CfgData.vibr = persist_read_bool(CONFIG_KEY_VIBR);
	else	
		CfgData.vibr = false;
	
	app_log(APP_LOG_LEVEL_DEBUG, __FILE__, __LINE__, "Curr Conf: circle:%d, fsm:%d, inv:%d, anim:%d, sep:%d, datefmt:%d, smart:%d, vibr:%d",
		CfgData.circle, CfgData.fsm, CfgData.inv, CfgData.anim, CfgData.sep, CfgData.datefmt, CfgData.smart, CfgData.vibr);
	
	gbitmap_destroy(batteryAll);
	batteryAll = gbitmap_create_with_resource(CfgData.inv ? RESOURCE_ID_IMAGE_BATTERY_INV : RESOURCE_ID_IMAGE_BATTERY);
	
	bitmap_layer_set_bitmap(radio_layer, NULL);
	gbitmap_destroy(bmp_radio);
	bmp_radio = gbitmap_create_as_sub_bitmap(batteryAll, GRect(110, 0, 10, 20));
	bitmap_layer_set_bitmap(radio_layer, bmp_radio);
	
	Layer *window_layer = window_get_root_layer(window);
	GRect bounds = layer_get_bounds(window_get_root_layer(window));
	window_set_background_color(window, CfgData.inv ? GColorWhite : GColorBlack);
	
	//Face Layer first on round
	layer_remove_from_parent(face_layer);
	layer_destroy(face_layer);
#if defined(PBL_RECT)
	face_layer = layer_create(GRect(0, 0, bounds.size.w, CfgData.fsm ? bounds.size.h : bounds.size.h-n_bottom_margin));
	layer_set_update_proc(face_layer, face_update_proc);
#elif defined(PBL_ROUND)
	face_layer = layer_create(GRect(0, 0, bounds.size.w, bounds.size.h));
	layer_set_update_proc(face_layer, face_update_proc);
	layer_add_child(window_layer, face_layer);
#endif		

	//Bottom Layer next, then Radio and Battery
	layer_remove_from_parent(text_layer_get_layer(date_layer));
	layer_remove_from_parent(bitmap_layer_get_layer(radio_layer));
	layer_remove_from_parent(bitmap_layer_get_layer(battery_layer));
#if defined(PBL_RECT)
	if (!CfgData.fsm)
#endif		
	{
#if defined(PBL_RECT)
		layer_add_child(window_layer, text_layer_get_layer(date_layer));
		#ifdef PBL_COLOR
			text_layer_set_text_color(date_layer, CfgData.inv ? GColorDarkGray : GColorLightGray);
		#else
			text_layer_set_text_color(date_layer, CfgData.inv ? GColorBlack : GColorWhite);
		#endif
		text_layer_set_background_color(date_layer, CfgData.inv ? GColorWhite : GColorBlack);
#endif		
		if (CfgData.smart)
		{
			layer_add_child(window_layer, bitmap_layer_get_layer(radio_layer));
			layer_add_child(window_layer, bitmap_layer_get_layer(battery_layer));
		}
	}	

	//On Rect later
#if defined(PBL_RECT)
	layer_add_child(window_layer, face_layer);
#endif		

	//Get a time structure so that it doesn't start blank
	time_t temp = time(NULL);
	struct tm *t = localtime(&temp);

	//Manually call the tick handler when the window is loading
	aktHH = t->tm_hour;
	aktMM = t->tm_min;
	handle_tick(t, MINUTE_UNIT);

	//Set Battery state
	BatteryChargeState btchg = battery_state_service_peek();
	battery_state_service_handler(btchg);
	
	//Set Bluetooth state
	bool connected = bluetooth_connection_service_peek();
	bluetooth_connection_handler(connected);
}
Example #16
0
File: main.c Project: palian/Metro8
static void update_time() {
  // Get a tm structure
  time_t temp = time(NULL); 
  struct tm *tick_time = localtime(&temp);

  // Create a long-lived buffer
  static char buffer[] = "00:00";
  static char buffer2[] = "Xxx";
  static char buffer2a[] = "00";
  static char buffer3[] = "Xxx";

  strftime(buffer3, sizeof(buffer3), "%a", tick_time);

  // Write the current hours and minutes into the buffer
  if(clock_is_24h_style() == true) {
    // Use 24 hour format
    strftime(buffer, sizeof("00:00"), "%H:%M", tick_time);
    
      text_layer_set_text(s_time_layer, buffer);
  } else {
  // Use 12 hour format
  strftime(buffer, sizeof(buffer), "%I:%M", tick_time);
  text_layer_set_text(s_time_layer,buffer+(('0' == buffer[0])?1:0));  
}
  
  int bmin = BatteryINT;
  //if (bmin % 2) Even minutes
  
  if (tick_time->tm_min % bmin == 0)  // divisible by 5 if(tick_time->tm_min % 5 == 0)
  {
    layer_set_hidden(s_image_layer, false);
    layer_set_hidden(s_image_layer2, false);
    
    BatteryChargeState charge_state = battery_state_service_peek();
      if (charge_state.is_charging) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BATCHARGING);
       } 
       else if (charge_state.charge_percent==100||charge_state.charge_percent==90) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT100);
       } 
        else if (charge_state.charge_percent==70||charge_state.charge_percent==80) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT75);
       }
    else if (charge_state.charge_percent==50||charge_state.charge_percent==40||charge_state.charge_percent==60) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT50);
       }
    else if (charge_state.charge_percent==20||charge_state.charge_percent==30) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT25);
       } 
        else if (charge_state.charge_percent==10||charge_state.charge_percent==0) 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT00);
       } 
    else 
      {
    snprintf(buffer3, sizeof(buffer3), "%d%%", charge_state.charge_percent);
       s_image2 = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BAT75);
      }
    
    strftime(buffer2, sizeof(buffer2), "%b", tick_time);    //Month
    text_layer_set_text(s_time_layer2, "");
    text_layer_set_text(s_time_layer2a, "");
    layer_set_update_proc(s_line_layer3, line_layer_update_callback3Red);
    layer_set_update_proc(s_line_layer4, line_layer_update_callback4Mag);
    
    if (bluetooth_connection_service_peek()) 
    {
       s_image = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BTC55);
    } 
    else 
    {
       s_image = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BTNC55);
    }
  }
  else           // even
  {
    layer_set_hidden(s_image_layer, true);
    layer_set_hidden(s_image_layer2, true);

    strftime(buffer2, sizeof(buffer2), "%b", tick_time);    //Month
    
    strftime(buffer2a, sizeof(buffer2a), "%e", tick_time);  //date
    strftime(buffer3, sizeof(buffer3), "%A", tick_time);   //day of Week
    text_layer_set_text(s_time_layer2, buffer2);
    text_layer_set_text(s_time_layer2a, buffer2a);
    
    layer_set_update_proc(s_line_layer3, line_layer_update_callback3);
    layer_set_update_proc(s_line_layer4, line_layer_update_callback4);
  }
  
  // Display this time on the TextLayer
  text_layer_set_text(s_time_layer3, buffer3);
}  
Example #17
0
void init() {

	// Window
	window = window_create();
	window_stack_push(window, true /* Animated */);
	window_layer = window_get_root_layer(window);

	// Background image
	background_image_container = gbitmap_create_with_resource(
			RESOURCE_ID_IMAGE_BACKGROUND);
	background_layer = layer_create(GRECT_FULL_WINDOW);
	layer_set_update_proc(background_layer, &draw_background_callback);
	layer_add_child(window_layer, background_layer);

	// Date setup
	date_layer = text_layer_create(GRect(27, 100, 90, 21));
	text_layer_set_text_color(date_layer, GColorWhite);
	text_layer_set_text_alignment(date_layer, GTextAlignmentCenter);
	text_layer_set_background_color(date_layer, GColorClear);
	text_layer_set_font(date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18));
	layer_add_child(window_layer, text_layer_get_layer(date_layer));

	draw_date();

	// Status setup
	icon_battery = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_ICON);
	icon_battery_charge = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_CHARGE);
	icon_bt = gbitmap_create_with_resource(RESOURCE_ID_BLUETOOTH);

	BatteryChargeState initial = battery_state_service_peek();
	battery_level = initial.charge_percent;
	battery_plugged = initial.is_plugged;
	battery_layer = layer_create(GRect(50,56,24,12)); //24*12
	layer_set_update_proc(battery_layer, &battery_layer_update_callback);
	layer_add_child(window_layer, battery_layer);


	bt_ok = bluetooth_connection_service_peek();
	bt_layer = layer_create(GRect(83,56,9,12)); //9*12
	layer_set_update_proc(bt_layer, &bt_layer_update_callback);
	layer_add_child(window_layer, bt_layer);

	// Hands setup
	hour_display_layer = layer_create(GRECT_FULL_WINDOW);
	layer_set_update_proc(hour_display_layer,
			&hour_display_layer_update_callback);
	layer_add_child(window_layer, hour_display_layer);

	hour_hand_path = gpath_create(&HOUR_HAND_PATH_POINTS);
	gpath_move_to(hour_hand_path, grect_center_point(&GRECT_FULL_WINDOW));

	minute_display_layer = layer_create(GRECT_FULL_WINDOW);
	layer_set_update_proc(minute_display_layer,
			&minute_display_layer_update_callback);
	layer_add_child(window_layer, minute_display_layer);

	minute_hand_path = gpath_create(&MINUTE_HAND_PATH_POINTS);
	gpath_move_to(minute_hand_path, grect_center_point(&GRECT_FULL_WINDOW));

	center_display_layer = layer_create(GRECT_FULL_WINDOW);
	layer_set_update_proc(center_display_layer,
			&center_display_layer_update_callback);
	layer_add_child(window_layer, center_display_layer);

	second_display_layer = layer_create(GRECT_FULL_WINDOW);
	layer_set_update_proc(second_display_layer,
			&second_display_layer_update_callback);
	layer_add_child(window_layer, second_display_layer);

	// Configurable inverse
#ifdef INVERSE
	full_inverse_layer = inverter_layer_create(GRECT_FULL_WINDOW);
	layer_add_child(window_layer, inverter_layer_get_layer(full_inverse_layer));
#endif

}
Example #18
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);
}
bool canVibrate(void)
{
	return !config_dontVibrateWhenCharging || !battery_state_service_peek().is_plugged;
}
Example #20
0
static void update_time() {
  // Get a tm structure
  time_t temp = time(NULL); 
  struct tm *tick_time = localtime(&temp);
  
  // Manila = UTC+08:00

  // Create a long-lived buffer
  static char buffer[] = "00:00:00";

  // Write the current hours and minutes into the buffer
  if(clock_is_24h_style() == true) {
    //Use 24h hour format
    strftime(buffer, sizeof("00:00:00"), "%H:%M:%S", tick_time);
  } else {
    //Use 12 hour format
    strftime(buffer, sizeof("00:00:00"), "%I:%M", tick_time);
  }
  
  
  // TODO: CONVERT TO subscribe
  // TODO: vibrate upon change
  static char buffer_bluetooth [100];
  if ((bluetooth_connection_service_peek() == true)) {
    strncpy(buffer_bluetooth, "", 100);
  } else {
    strncpy(buffer_bluetooth, "!", 100);
  }
  
  
  // http://developer.getpebble.com/docs/c/Foundation/Event_Service/BatteryStateService/
  // http://developer.getpebble.com/guides/pebble-apps/app-events/battery-service/
  
  static char buffer_battery [100];
  BatteryChargeState charge_state = battery_state_service_peek();
  if (charge_state.is_charging) {
    snprintf(buffer_battery, sizeof(buffer_battery), " %d%%^", charge_state.charge_percent);
  } else {
    snprintf(buffer_battery, sizeof(buffer_battery), " %d%%", charge_state.charge_percent);
  }
  
  //http://developer.getpebble.com/blog/2013/07/24/Using-Pebble-System-Fonts/
  
  static char buffer_date [100];
  //strftime(buffer_date, sizeof("Saturday 31 September"), "%A %e %B", tick_time); // Sunday 27 September
  strftime(buffer_date, sizeof("2015-12-31"), "%Y-%m-%d", tick_time); // 2015-12-31
  
  static char buffer_world [100];
  time_t rawtime = time(NULL);
  struct tm *ptm = gmtime ( &rawtime );
  ptm->tm_hour += 8; // PH = +8 (depends on DLS) 
  ptm->tm_min += 0;
  time_t shiftedTime = mktime( ptm );
  struct tm *pShiftedTm = gmtime( &shiftedTime );
  strftime(buffer_world, sizeof("00 "), "%H ", pShiftedTm);
  
  

  // Display this time on the TextLayer
  text_layer_set_text(s_time_layer, buffer);
  
  int time_min = tick_time->tm_min;
  int time_hour = tick_time->tm_hour;
  
  static char buffer_timeintext [100];
  
  static char buffer_timeintext_row_02 [100];
  static char buffer_timeintext_row_03 [100];
  static char buffer_timeintext_row_04 [100];
  static char buffer_timeintext_row_05 [100];
  
  static char time_hour_word [100];
  strncpy(time_hour_word, "het uur", 100);
  
  static char time_hour_next_word [100];
  strncpy(time_hour_next_word, "volgend uur", 100);
  
  if ((time_hour == 0)) {
    strncpy(time_hour_word, "twaalf", 100);
    strncpy(time_hour_next_word, "een", 100);
  } else if ((time_hour == 1)) {
    strncpy(time_hour_word, "een", 100);
    strncpy(time_hour_next_word, "twee", 100);
  } else if ((time_hour == 2)) {
    strncpy(time_hour_word, "twee", 100);
    strncpy(time_hour_next_word, "drie", 100);
  } else if ((time_hour == 3)) {
    strncpy(time_hour_word, "drie", 100);
    strncpy(time_hour_next_word, "vier", 100);
  } else if ((time_hour == 4)) {
    strncpy(time_hour_word, "vier", 100);
    strncpy(time_hour_next_word, "vijf", 100);
  } else if ((time_hour == 5)) {
    strncpy(time_hour_word, "vijf", 100);
    strncpy(time_hour_next_word, "zes", 100);
  } else if ((time_hour == 6)) {
    strncpy(time_hour_word, "zes", 100);
    strncpy(time_hour_next_word, "zeven", 100);
  } else if ((time_hour == 7)) {
    strncpy(time_hour_word, "zeven", 100);
    strncpy(time_hour_next_word, "acht", 100);
  } else if ((time_hour == 8)) {
    strncpy(time_hour_word, "acht", 100);
    strncpy(time_hour_next_word, "negen", 100);
  } else if ((time_hour == 9)) {
    strncpy(time_hour_word, "negen", 100);
    strncpy(time_hour_next_word, "tien", 100);
  } else if ((time_hour == 10)) {
    strncpy(time_hour_word, "tien", 100);
    strncpy(time_hour_next_word, "elf", 100);
  } else if ((time_hour == 11)) {
    strncpy(time_hour_word, "elf", 100);
    strncpy(time_hour_next_word, "twaalf", 100);
  } else if ((time_hour == 12)) {
    strncpy(time_hour_word, "twaalf", 100);
    strncpy(time_hour_next_word, "een", 100);
  } else if ((time_hour == 13)) {
    strncpy(time_hour_word, "een", 100);
    strncpy(time_hour_next_word, "twee", 100);
  } else if ((time_hour == 14)) {
    strncpy(time_hour_word, "twee", 100);
    strncpy(time_hour_next_word, "drie", 100);
  } else if ((time_hour == 15)) {
    strncpy(time_hour_word, "drie", 100);
    strncpy(time_hour_next_word, "vier", 100);
  } else if ((time_hour == 16)) {
    strncpy(time_hour_word, "vier", 100);
    strncpy(time_hour_next_word, "vijf", 100);
  } else if ((time_hour == 17)) {
    strncpy(time_hour_word, "vijf", 100);
    strncpy(time_hour_next_word, "zes", 100);
  } else if ((time_hour == 18)) {
    strncpy(time_hour_word, "zes", 100);
    strncpy(time_hour_next_word, "zeven", 100);
  } else if ((time_hour == 19)) {
    strncpy(time_hour_word, "zeven", 100);
    strncpy(time_hour_next_word, "acht", 100);
  } else if ((time_hour == 20)) {
    strncpy(time_hour_word, "acht", 100);
    strncpy(time_hour_next_word, "negen", 100);
  } else if ((time_hour == 21)) {
    strncpy(time_hour_word, "negen", 100);
    strncpy(time_hour_next_word, "tien", 100);
  } else if ((time_hour == 22)) {
    strncpy(time_hour_word, "tien", 100);
    strncpy(time_hour_next_word, "elf", 100);
  } else if ((time_hour == 23)) {
    strncpy(time_hour_word, "elf", 100);
    strncpy(time_hour_next_word, "twaalf", 100);
  } else if ((time_hour == 24)) {
    strncpy(time_hour_word, "twaalf", 100);
    strncpy(time_hour_next_word, "een", 100);
  }
  
  //snprintf(buffer_timeintext, sizeof(buffer_timeintext), "%d", tick_time->tm_min);
  
  //http://forums.getpebble.com/discussion/5508/new-to-c-accessing-the-time-data-as-an-integer
  
  //layer_set_hidden(LAYERNAME, true);
  
  // display TimeInText
  if ((tick_time->tm_min >= 0 && tick_time->tm_min <= 2)) {
    // op het uur
    if ((time_hour > 23)) {
      strncpy(buffer_timeintext, "", 100);
      strncpy(buffer_timeintext_row_02, "Midder-\nnacht", 100);
      strncpy(buffer_timeintext_row_03, "", 100);
      strncpy(buffer_timeintext_row_04, "", 100);
      strncpy(buffer_timeintext_row_05, "", 100);
      text_layer_set_font(s_timeintext_row_01_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
      text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
    } else {
      strncpy(buffer_timeintext, "", 100); 
      strncpy(buffer_timeintext_row_02, "", 100);
      strncpy(buffer_timeintext_row_03, "", 100);
      strncpy(buffer_timeintext_row_04, time_hour_word, 100);
      strncpy(buffer_timeintext_row_05, "uur", 100);
      text_layer_set_font(s_timeintext_row_01_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
      text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_04_layer, FONT_50);
      text_layer_set_font(s_timeintext_row_05_layer, FONT_50);
    }
  } else if ((time_min >= 58 && time_min <= 62)) {
    // op het uur
    if ((time_hour > 23)) {
      strncpy(buffer_timeintext, "", 100);
      strncpy(buffer_timeintext_row_02, "Midder-\nnacht", 100);
      strncpy(buffer_timeintext_row_03, "", 100);
      strncpy(buffer_timeintext_row_04, "", 100);
      strncpy(buffer_timeintext_row_05, "", 100);
      text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
      text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
      text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
      text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
    } else {
      strncpy(buffer_timeintext, "", 100); 
      strncpy(buffer_timeintext_row_02, "", 100);
      strncpy(buffer_timeintext_row_03, "", 100);
      strncpy(buffer_timeintext_row_04, time_hour_next_word, 100); // next word gebruiken, want is eigenlijk nog maar 2 of 1 voor
      strncpy(buffer_timeintext_row_05, "uur", 100);
      text_layer_set_font(s_timeintext_row_01_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
      text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
      text_layer_set_font(s_timeintext_row_04_layer, FONT_50);
      text_layer_set_font(s_timeintext_row_05_layer, FONT_50);
    }
  } else if ((time_min >= 3 && time_min <= 7)) {
    // 5 over
    strncpy(buffer_timeintext, "vijf", 100);
    strncpy(buffer_timeintext_row_02, "over", 100);
    strncpy(buffer_timeintext_row_03, time_hour_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 8 && time_min <= 12)) {
    // 10 over
    strncpy(buffer_timeintext, "tien", 100);
    strncpy(buffer_timeintext_row_02, "over", 100);
    strncpy(buffer_timeintext_row_03, time_hour_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 13 && time_min <= 17)) {
    // kwart over
    strncpy(buffer_timeintext, "kwart", 100);
    strncpy(buffer_timeintext_row_02, "over", 100);
    strncpy(buffer_timeintext_row_03, time_hour_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 18 && time_min <= 22)) {
    // 20 over
    strncpy(buffer_timeintext, "twintig", 100);
    strncpy(buffer_timeintext_row_02, "over", 100);
    strncpy(buffer_timeintext_row_03, time_hour_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100); 
    text_layer_set_font(s_timeintext_row_01_layer, FONT_38);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 23 && time_min <= 27)) {
    // 5 voor half
    strncpy(buffer_timeintext, "vijf", 100);
    strncpy(buffer_timeintext_row_02, "voor half", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 28 && time_min <= 32)) {
    // half
    strncpy(buffer_timeintext, "", 100);
    strncpy(buffer_timeintext_row_02, "", 100);
    strncpy(buffer_timeintext_row_03, "", 100);
    strncpy(buffer_timeintext_row_04, "half", 100);
    strncpy(buffer_timeintext_row_05, time_hour_next_word, 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_50);
  } else if ((time_min >= 33 && time_min <= 37)) {
    // 5 over half
    strncpy(buffer_timeintext, "vijf", 100);
    strncpy(buffer_timeintext_row_02, "over half", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  }  else if ((time_min >= 38 && time_min <= 42)) {
    // 20 voor
    strncpy(buffer_timeintext, "twintig", 100);
    strncpy(buffer_timeintext_row_02, "voor", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_38);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 43 && time_min <= 47)) {
    // kwart voor
    strncpy(buffer_timeintext, "kwart", 100);
    strncpy(buffer_timeintext_row_02, "voor", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 48 && time_min <= 52)) {
    // 10 voor
    strncpy(buffer_timeintext, "tien", 100);
    strncpy(buffer_timeintext_row_02, "voor", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else if ((time_min >= 53 && time_min <= 57)) {
    // 5 voor
    strncpy(buffer_timeintext, "vijf", 100);
    strncpy(buffer_timeintext_row_02, "voor", 100);
    strncpy(buffer_timeintext_row_03, time_hour_next_word, 100);
    strncpy(buffer_timeintext_row_04, "", 100);
    strncpy(buffer_timeintext_row_05, "", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_50);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  } else {
    // error
    strncpy(buffer_timeintext, "error_row_01", 100);
    strncpy(buffer_timeintext_row_02, "error_row_02", 100);
    strncpy(buffer_timeintext_row_03, "error_row_03", 100);
    strncpy(buffer_timeintext_row_04, "error_row_04", 100);
    strncpy(buffer_timeintext_row_05, "error_row_05", 100);
    text_layer_set_font(s_timeintext_row_01_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_02_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_03_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_04_layer, FONT_20);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_20);
  }
  
  // Reduce font for 'twaalf'
  if ((time_hour == 12)) {
    text_layer_set_font(s_timeintext_row_03_layer, FONT_44);
    text_layer_set_font(s_timeintext_row_05_layer, FONT_44);
  }

  
  
  if ((1 > 2)) {
    //
  } else if ((time_min == 58 || time_min == 3 || time_min == 8 || time_min == 13 || time_min == 18 || time_min == 23 || time_min == 28 || time_min == 33 || time_min == 38 || time_min == 43 || time_min == 48 || time_min == 53 )) {
    // 2 voor
    text_layer_set_text_color(s_timeintext_row_01_layer, GColorYellow);
    text_layer_set_text_color(s_timeintext_row_02_layer, GColorYellow);
    text_layer_set_text_color(s_timeintext_row_03_layer, GColorYellow);
    text_layer_set_text_color(s_timeintext_row_04_layer, GColorYellow);
    text_layer_set_text_color(s_timeintext_row_05_layer, GColorYellow);
  } else if ((time_min == 59 || time_min == 4 || time_min == 9 || time_min == 14 || time_min == 19 || time_min == 24 || time_min == 29 || time_min == 34 || time_min == 39 || time_min == 44 || time_min == 49 || time_min == 54 )) {
    // 1 voor
    text_layer_set_text_color(s_timeintext_row_01_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_02_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_03_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_04_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_05_layer, GColorVividCerulean);
  } else if ((time_min == 0 || time_min == 5 || time_min == 10 || time_min == 15 || time_min == 20 || time_min == 25 || time_min == 30 || time_min == 35 || time_min == 40 || time_min == 45 || time_min == 50 || time_min == 55 )) {
    // op het uur
    text_layer_set_text_color(s_timeintext_row_01_layer, GColorGreen);
    text_layer_set_text_color(s_timeintext_row_02_layer, GColorGreen);
    text_layer_set_text_color(s_timeintext_row_03_layer, GColorGreen);
    text_layer_set_text_color(s_timeintext_row_04_layer, GColorGreen);
    text_layer_set_text_color(s_timeintext_row_05_layer, GColorGreen);
  } else if ((time_min == 1 || time_min == 6 || time_min == 11 || time_min == 16 || time_min == 21 || time_min == 26 || time_min == 31 || time_min == 36 || time_min == 41 || time_min == 46 || time_min == 51 || time_min == 56 )) {
    // 1 na
    text_layer_set_text_color(s_timeintext_row_01_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_02_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_03_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_04_layer, GColorVividCerulean);
    text_layer_set_text_color(s_timeintext_row_05_layer, GColorVividCerulean);
  } else if ((time_min == 2 || time_min == 7 || time_min == 12 || time_min == 17 || time_min == 22 || time_min == 27 || time_min == 32 || time_min == 37 || time_min == 42 || time_min == 47 || time_min == 52 || time_min == 57 )) {
    // 2 na
    text_layer_set_text_color(s_timeintext_row_01_layer, GColorRed);
    text_layer_set_text_color(s_timeintext_row_02_layer, GColorRed);
    text_layer_set_text_color(s_timeintext_row_03_layer, GColorRed);
    text_layer_set_text_color(s_timeintext_row_04_layer, GColorRed);
    text_layer_set_text_color(s_timeintext_row_05_layer, GColorRed);
  }
  
  
  text_layer_set_text(s_timeintext_row_01_layer, buffer_timeintext);
  text_layer_set_text(s_timeintext_row_02_layer, buffer_timeintext_row_02);
  text_layer_set_text(s_timeintext_row_03_layer, buffer_timeintext_row_03);
  text_layer_set_text(s_timeintext_row_04_layer, buffer_timeintext_row_04);
  text_layer_set_text(s_timeintext_row_05_layer, buffer_timeintext_row_05);
  text_layer_set_text(s_bluetooth_layer, buffer_bluetooth);
  text_layer_set_text(s_battery_layer, buffer_battery);
  text_layer_set_text(s_date_layer, buffer_date);
  text_layer_set_text(s_world_layer, buffer_world);
  
}
Example #21
0
static void update_display(struct tm *current_time, TimeUnits units_changed){
  if(blink == 0){
    if(current_time->tm_sec % 2 == 0){
      layer_set_hidden(bitmap_layer_get_layer(dots_layer), false);
    } else {
      layer_set_hidden(bitmap_layer_get_layer(dots_layer), true);
    }
  }
	
  if(battery_state_service_peek().is_charging){
    if(current_time->tm_sec % 2 == 0){
      layer_set_hidden(bitmap_layer_get_layer(meter_bar_layer), false);
      is_hidden = false;
    } else {
      layer_set_hidden(bitmap_layer_get_layer(meter_bar_layer), true);
      is_hidden = true;
      }
  } else {
    if(is_hidden){
      layer_set_hidden(bitmap_layer_get_layer(meter_bar_layer), false);
      is_hidden = false;
    }
  }

  if (units_changed & MINUTE_UNIT) {
    set_container_image(&time_digits_images[2], time_digits_layers[2], BIG_DIGIT_IMAGE_RESOURCE_IDS[current_time->tm_min/10]);
    set_container_image(&time_digits_images[3], time_digits_layers[3], BIG_DIGIT_IMAGE_RESOURCE_IDS[current_time->tm_min%10]);
	  
    if (units_changed & HOUR_UNIT) {
      // TODO implement hourly display changes
      unsigned short display_hour = get_display_hour(current_time->tm_hour);
	
      set_container_image(&time_digits_images[0], time_digits_layers[0], BIG_DIGIT_IMAGE_RESOURCE_IDS[display_hour/10]);
      set_container_image(&time_digits_images[1], time_digits_layers[1], BIG_DIGIT_IMAGE_RESOURCE_IDS[display_hour%10]);
			
      if(display_hour < 10 && zeroes == 0) {
        layer_set_hidden(bitmap_layer_get_layer(time_digits_layers[0]), true);
      } else {
	    layer_set_hidden(bitmap_layer_get_layer(time_digits_layers[0]), false);
      }
		
	  if(!clock_is_24h_style()){
		  strftime(text_buffer, sizeof(text_buffer), "%p", current_time);
		  text_layer_set_text(time_format_layer, text_buffer);
	  }	else {
		  text_layer_set_text(time_format_layer, "24H");
	  }

		if (units_changed & DAY_UNIT) {
			char *formating0 = "%b";
			char *formating1 = "%e";
			if(date == 0){
				formating0 ="%b";
				if(zeroes == 0){
					formating1 = "%e";
				} else {
					formating1 = "%d";
				}
			} else {
				if(zeroes == 0){
					formating0 = "%e";
				} else {
					formating0 = "%d";
				}
				formating1 = "%b";
			}

			strftime(text_buffer0, sizeof(text_buffer0), formating0, current_time);
			text_layer_set_text(date_layer[0], text_buffer0);
			strftime(text_buffer1, sizeof(text_buffer1), formating1, current_time);
			text_layer_set_text(date_layer[1], text_buffer1);

			GRect frame = (GRect){{0, 15}, {15, 2}};
			if(square == 1){
				frame = (GRect){{0, 3}, {15, 13}};
			}

			int offset[] = {0, 16, 33, 48, 67, 82, 94};
			int width[] = {15, 17, 14, 19, 14, 12, 15};

			frame.origin.x = offset[current_time->tm_wday];
			frame.size.w = width[current_time->tm_wday];
			if(square == 0){
				frame.origin.x = frame.origin.x + 1;
				frame.size.w = frame.size.w - 2;
			}
			layer_set_frame(inverter_layer_get_layer(day_inv_layer), frame);

			if(units_changed & MONTH_UNIT){
				//Showing of month name is already solved during the day show
			}
		}
    }
  }
}
Example #22
0
static void tick_handler(struct tm *t, TimeUnits units_changed){
	light_enable(true);
    handle_battery(battery_state_service_peek());
}
Example #23
0
void handle_init(void) {
  window = window_create();
  window_stack_push(window, true /* Animated */);
  window_set_background_color(window, GColorBlack);

  Layer *window_layer = window_get_root_layer(window);

  // Setup weather bar
  Layer *weather_holder = layer_create(GRect(0, 0, 144, 50));
  layer_add_child(window_layer, weather_holder);

  icon_layer = bitmap_layer_create(GRect(8, 7, 40, 40));
  layer_add_child(weather_holder, bitmap_layer_get_layer(icon_layer));

  temp_layer = text_layer_create(GRect(32, 10, 144 - 40, 28));
  text_layer_set_text_color(temp_layer, GColorWhite);
  text_layer_set_background_color(temp_layer, GColorClear);
  text_layer_set_font(temp_layer,
      fonts_get_system_font(FONT_KEY_GOTHIC_28_BOLD));
  text_layer_set_text_alignment(temp_layer, GTextAlignmentRight);
  layer_add_child(weather_holder, text_layer_get_layer(temp_layer));

  // Initialize date & time text
  Layer *date_holder = layer_create(GRect(0, 52, 144, 94));
  layer_add_child(window_layer, date_holder);

  ResHandle roboto_21 = resource_get_handle(RESOURCE_ID_FONT_ROBOTO_CONDENSED_21);
  text_day_layer = text_layer_create(GRect(8, 0, 144-8, 25));
  text_layer_set_text_color(text_day_layer, GColorWhite);
  text_layer_set_background_color(text_day_layer, GColorClear);
  text_layer_set_font(text_day_layer, fonts_load_custom_font(roboto_21));
  layer_add_child(date_holder, text_layer_get_layer(text_day_layer));

  text_date_layer = text_layer_create(GRect(8, 21, 144-8, 25));
  text_layer_set_text_color(text_date_layer, GColorWhite);
  text_layer_set_background_color(text_date_layer, GColorClear);
  text_layer_set_font(text_date_layer, fonts_load_custom_font(roboto_21));
  layer_add_child(date_holder, text_layer_get_layer(text_date_layer));

  line_layer = layer_create(GRect(8, 47, 144-16, 2));
  layer_set_update_proc(line_layer, line_layer_update_callback);
  layer_add_child(date_holder, line_layer);
	
  line_layer = layer_create(GRect(8, 0, 144-16, 2));
  layer_set_update_proc(line_layer, line_layer_update_callback);
  layer_add_child(date_holder, line_layer);

  ResHandle roboto_49 = resource_get_handle(RESOURCE_ID_FONT_ROBOTO_BOLD_SUBSET_49);
  text_time_layer = text_layer_create(GRect(7, 45, 144-7, 49));
  text_layer_set_text_color(text_time_layer, GColorWhite);
  text_layer_set_background_color(text_time_layer, GColorClear);
  text_layer_set_text_alignment(text_time_layer, GTextAlignmentCenter);
  text_layer_set_font(text_time_layer, fonts_load_custom_font(roboto_49));
  layer_add_child(date_holder, text_layer_get_layer(text_time_layer));

  // Setup messaging
  const int inbound_size = 64;
  const int outbound_size = 64;
  app_message_open(inbound_size, outbound_size);

  Tuplet initial_values[] = {
    TupletInteger(WEATHER_ICON_KEY, (uint8_t) 13),
    TupletCString(WEATHER_TEMPERATURE_KEY, ""),
    TupletInteger(INVERT_COLOR_KEY, persist_read_bool(INVERT_COLOR_KEY)),
  };

  app_sync_init(&sync, sync_buffer, sizeof(sync_buffer), initial_values,
                ARRAY_LENGTH(initial_values), sync_tuple_changed_callback,
                NULL, NULL);

  // FIXME testing code
  battery_text_layer = text_layer_create(GRect(0, 53, 144-8, 30));
  text_layer_set_text_color(battery_text_layer, GColorWhite);
  text_layer_set_background_color(battery_text_layer, GColorClear);
  text_layer_set_font(battery_text_layer, fonts_load_custom_font(roboto_21));
  text_layer_set_text_alignment(battery_text_layer, GTextAlignmentRight);
  layer_add_child(window_layer, text_layer_get_layer(battery_text_layer));

  // Subscribe to notifications
  bluetooth_connection_service_subscribe(bluetooth_connection_changed);
  tick_timer_service_subscribe(MINUTE_UNIT, handle_minute_tick);
  battery_state_service_subscribe(update_battery_state);

  // Update the battery on launch
  update_battery_state(battery_state_service_peek());

  // TODO: Update display here to avoid blank display on launch?
}
Example #24
0
static void main_window_load(Window *window) {
    Layer *window_layer = window_get_root_layer(window);
    static BatteryChargeState battery_state;

    /* defaults */
    settings.show_date = 0;
    settings.show_battery = 0;
    settings.use_bold_font = 0;
    settings.use_larger_font = 0;

    persist_read_data(SETTINGS_KEY, &settings, sizeof(settings));

    window_bounds = layer_get_bounds(window_layer);

    watch_bounds = window_bounds;
    if (settings.show_date || settings.show_battery) {
        if (settings.use_larger_font) {
            watch_bounds.origin.y += 18;
            watch_bounds.size.h   -= 18;
        } else {
            watch_bounds.origin.y += 14;
            watch_bounds.size.h   -= 14;
        }
    }

    tick_radius = MIN(watch_bounds.size.h, watch_bounds.size.w) / 2 - 2;
    second_hand_length = tick_radius - 3;
    minute_hand_length = ROUND(tick_radius * 0.8);
    hour_hand_length   = ROUND(tick_radius * 0.5);

    window_set_background_color(window, GColorBlack);

    s_ticks_layer = layer_create(watch_bounds);
    layer_set_update_proc(s_ticks_layer, ticks_update_proc);
    layer_add_child(window_layer, s_ticks_layer);

    inner_bounds = layer_get_bounds(s_ticks_layer);

    center = grect_center_point(&inner_bounds);

    s_wall_time_layer = layer_create(watch_bounds);
    layer_set_update_proc(s_wall_time_layer, canvas_update_proc);
    layer_add_child(window_layer, s_wall_time_layer);

    s_date_text_layer = NULL;
    s_batt_text_layer = NULL;

    if (settings.use_bold_font) {
        if (settings.use_larger_font) {
            s_font = fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD);
        } else {
            s_font = fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD);
        }
    } else {
        if (settings.use_larger_font) {
            s_font = fonts_get_system_font(FONT_KEY_GOTHIC_18);
        } else {
            s_font = fonts_get_system_font(FONT_KEY_GOTHIC_14);
        }
    }

    if (settings.show_date) {
        s_date_text_layer = text_layer_create(GRect(0, 0, 90, settings.use_larger_font ? 18 : 14));
        text_layer_set_background_color(s_date_text_layer, GColorBlack);
        text_layer_set_text_color(s_date_text_layer, GColorWhite);
        text_layer_set_font(s_date_text_layer, s_font);
        text_layer_set_text_alignment(s_date_text_layer, GTextAlignmentLeft);
        layer_add_child(window_layer, text_layer_get_layer(s_date_text_layer));
    }

    if (settings.show_battery) {
        s_batt_text_layer = text_layer_create(GRect(90, 0, 54, settings.use_larger_font ? 18 : 14));
        text_layer_set_background_color(s_batt_text_layer, GColorBlack);
        text_layer_set_text_color(s_batt_text_layer, GColorWhite);
        text_layer_set_font(s_batt_text_layer, s_font);
        text_layer_set_text_alignment(s_batt_text_layer, GTextAlignmentRight);
        layer_add_child(window_layer, text_layer_get_layer(s_batt_text_layer));
    }

    minute_when_last_updated = -1;

    layer_mark_dirty(s_wall_time_layer);
    tick_timer_service_subscribe(SECOND_UNIT, tick_handler);

    if (settings.show_battery) {
        battery_state = battery_state_service_peek();
        on_battery_state_change(battery_state);
        battery_state_service_subscribe(on_battery_state_change);
    }
}
Example #25
0
static void handle_init() {
  time_t clock = time(NULL);
  now = localtime(&clock);
  window = window_create();
  window_stack_push(window, true /* Animated */);
  window_set_background_color(window, GColorBlack);
  Layer *window_layer = window_get_root_layer(window);

  background_layer = layer_create(GRect(0, 0, 144, 144));
  layer_set_update_proc(background_layer, background_layer_update_callback);
  layer_add_child(window_layer, background_layer);

  hands_layer = layer_create(layer_get_frame(background_layer));
  layer_set_update_proc(hands_layer, hands_layer_update_callback);
  layer_add_child(background_layer, hands_layer);

  for (int i = 0; i < 22; i++) {
    battery_images[i] = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BATTERY_0 + i);  
  }
  battery_layer = bitmap_layer_create(GRect(144-16-3, 3, 16, 10));
  layer_add_child(window_layer, bitmap_layer_get_layer(battery_layer));

  for (int i = 0; i < 2; i++)
    bluetooth_images[i] = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BLUETOOTH_OFF + i);  
  bluetooth_layer = bitmap_layer_create(GRect(66, 0, 13, 13));
  layer_add_child(background_layer, bitmap_layer_get_layer(bluetooth_layer));

  battp_layer = text_layer_create(GRect(0, 0, 32, 16));
  text_layer_set_text_color(battp_layer, GColorWhite);
  text_layer_set_background_color(battp_layer, GColorBlack);
  layer_add_child(window_layer, text_layer_get_layer(battp_layer));
  
  hour_path = gpath_create(&HOUR_POINTS);
  hour_in_path = gpath_create(&HOUR_IN_POINTS);
  gpath_move_to(hour_path, GPoint(CENTER_X, CENTER_Y));
  gpath_move_to(hour_in_path, GPoint(CENTER_X, CENTER_Y));
  min_path = gpath_create(&MIN_POINTS);
  gpath_move_to(min_path, GPoint(CENTER_X, CENTER_Y));

  font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_20));
  font2 = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_28));

  time_layer = text_layer_create(GRect(25,146,94,24));
  text_layer_set_text_alignment(time_layer, GTextAlignmentCenter);
  text_layer_set_text_color(time_layer, GColorWhite);
  text_layer_set_background_color(time_layer, GColorClear);
  text_layer_set_font(time_layer, font);
  layer_add_child(window_layer, text_layer_get_layer(time_layer));
  
  date_layer = text_layer_create(GRect(94, 136, 50, 50));
  text_layer_set_text_alignment(date_layer, GTextAlignmentRight);
  text_layer_set_text_color(date_layer, GColorWhite);
  text_layer_set_background_color(date_layer, GColorClear);
  text_layer_set_font(date_layer, font2);
  layer_add_child(window_layer, text_layer_get_layer(date_layer));

  day_layer = text_layer_create(GRect(0, 146, 50, 24));
  text_layer_set_text_alignment(day_layer, GTextAlignmentLeft);
  text_layer_set_text_color(day_layer, GColorWhite);
  text_layer_set_background_color(day_layer, GColorClear);
  text_layer_set_font(day_layer, font);
  layer_add_child(window_layer, text_layer_get_layer(day_layer));

  tick_timer_service_subscribe(MINUTE_UNIT, handle_tick);
  battery_state_service_subscribe(&handle_battery);
  handle_battery(battery_state_service_peek());
  bluetooth_connection_service_subscribe(&handle_bluetooth);
  handle_bluetooth(bluetooth_connection_service_peek());
  handle_tick(now,1);
}
Example #26
0
void app_event_loop() {
    bool isRunning=true;
    SDL_Event event;
    uint32_t lastTick;
    int32_t delay;
    int i;
    struct tm* now;
    printf("[DEBUG] Got app_event_loop\n");
    while (isRunning) {
        lastTick=SDL_GetTicks ();
        SDL_PumpEvents ();
        while (SDL_PollEvent (&event)) {
            switch (event.type) {
            case(SDL_QUIT): {
                isRunning=false;
            }
            break;
            case(SDL_KEYDOWN): {
                switch (event.key.keysym.sym) {
                case(SDLK_ESCAPE): {
                    isRunning=false;
                }
                break;
                case(SDLK_F1): {
                    bodyID=(bodyID+1)%BODY_COUNT;
                    bodyRender=true;
                }
                break;
                case(SDLK_F2): {
                    shadow=!shadow;
                    markDirty(true);
                    bodyRender=true;
                }
                break;
                case(SDLK_F3): {
                    toggle_24h_style();
                    if (clock_is_24h_style ())
                        SDL_WM_SetCaption("Pebble Local Simulator - 24H Style",0);
                    else
                        SDL_WM_SetCaption("Pebble Local Simulator - 12H Style",0);
                }
                break;
                case(SDLK_F4): {
                    toggle_bluetooth_connection();
                    printf("[INFO] Toggle bluetooth %s\n", bluetooth_connection_service_peek() ? "ON":"OFF");
                }
                break;
                case(SDLK_F5): {
                    BatteryChargeState state;
                    toggle_battery_charger_plugged();
                    state = battery_state_service_peek();
                    printf("[INFO] Toggle plugged: %d%%, %s charging, %s plugged\n",
                           state.charge_percent, state.is_charging ? "":"not", state.is_plugged ? "":"not");
                }
                break;
                case(SDLK_F12): {
                    time_t timeSec=time(0);
                    now=localtime(&timeSec);
                    strftime (titleBuffer,strlen(titleBuffer),"./simdata/screenshots/%Y-%m-%e-%H-%M-%S",now);
                    strcat(titleBuffer,".bmp");
                    if (SDL_SaveBMP(screen,titleBuffer)<0)
                        printf("[WARN] SDL_SaveBMP: %s\n",SDL_GetError ());
                    else
                        printf ("[INFO] Saved screenshot: %s\n",titleBuffer);
                }
                break;
                case(SDLK_PLUS): {
                    BatteryChargeState state;
                    battery_charge_increase();
                    state = battery_state_service_peek();
                    printf("[INFO] Battery state: %d%%, %s charging, %s plugged\n",
                           state.charge_percent, state.is_charging ? "":"not", state.is_plugged ? "":"not");
                }
                break;
                case(SDLK_MINUS): {
                    BatteryChargeState state;
                    battery_charge_decrease();
                    state = battery_state_service_peek();
                    printf("[INFO] Battery state: %d%%, %s charging, %s plugged\n",
                           state.charge_percent, state.is_charging ? "":"not", state.is_plugged ? "":"not");
                }
                break;
                case (SDLK_x): {
                    int32_t direction=1;
                    if(event.key.keysym.mod & KMOD_SHIFT) {
                        direction=-1;
                    }
                    accel_do_tap_on_axis(ACCEL_AXIS_X, direction);
                    printf("[INFO] Tap X %d\n", direction);
                }
                break;
                case (SDLK_y): {
                    int32_t direction=1;
                    if(event.key.keysym.mod & KMOD_SHIFT) {
                        direction=-1;
                    }
                    accel_do_tap_on_axis(ACCEL_AXIS_Y, direction);
                    printf("[INFO] Tap Y %d\n", direction);
                }
                break;
                case (SDLK_z): {
                    int32_t direction=1;
                    if(event.key.keysym.mod & KMOD_SHIFT) {
                        direction=-1;
                    }
                    accel_do_tap_on_axis(ACCEL_AXIS_Z, direction);
                    printf("[INFO] Tap Z %d\n", direction);
                }
                break;
                case (KEY_BUTTON_BACK): {
                    buttonState[BUTTON_ID_BACK]=true;
                    bodyRender=true;
                    onButtonDown(BUTTON_ID_BACK);
                }
                break;
                case (KEY_BUTTON_UP): {
                    buttonState[BUTTON_ID_UP]=true;
                    bodyRender=true;
                    onButtonDown(BUTTON_ID_UP);
                }
                break;
                case (KEY_BUTTON_SELECT): {
                    buttonState[BUTTON_ID_SELECT]=true;
                    bodyRender=true;
                    onButtonDown(BUTTON_ID_SELECT);
                }
                break;
                case (KEY_BUTTON_DOWN): {
                    buttonState[BUTTON_ID_DOWN]=true;
                    bodyRender=true;
                    onButtonDown(BUTTON_ID_DOWN);
                }
                break;
                default:
                    ;
                }
            }
            break;
            case(SDL_KEYUP): {
                switch (event.key.keysym.sym) {
                case(KEY_BUTTON_BACK): {
                    buttonState[BUTTON_ID_BACK]=false;
                    bodyRender=true;
                    onButtonUp(BUTTON_ID_BACK);
                }
                break;
                case(KEY_BUTTON_UP): {
                    buttonState[BUTTON_ID_UP]=false;
                    bodyRender=true;
                    onButtonUp(BUTTON_ID_UP);
                }
                break;
                case(KEY_BUTTON_SELECT): {
                    buttonState[BUTTON_ID_SELECT]=false;
                    bodyRender=true;
                    onButtonUp(BUTTON_ID_SELECT);
                }
                break;
                case(KEY_BUTTON_DOWN): {
                    buttonState[BUTTON_ID_DOWN]=false;
                    bodyRender=true;
                    onButtonUp(BUTTON_ID_DOWN);
                }
                break;
                default:
                    ;
                }
            }
            break;
            default:
                ;
            }
        }

		for (i=0;i<SIM_SERVICE_COUNT;i++)
            (serviceData.services[i]) ();
        if (lastVibeState!=getVibeState()) {
            bodyRender=true;
            lastVibeState=getVibeState();
        }
        if (lastLightState!=getLightState()) {
            bodyRender=true;
            lastLightState=getLightState();
        }

        if (render ()||bodyRender)
            simulatorRender ();

        delay=(SDL_GetTicks()-lastTick);
        elapsed=delay/1000.0f;
        delay=16-delay; //equals about 60 frames per second
        lastTick=SDL_GetTicks();
        if (delay>0)
            SDL_Delay(delay);
    }
}
Example #27
0
// update display
static void update_display() {
  // Getting Battery State
  BatteryChargeState current_battery_charge_state = battery_state_service_peek();
  
  if (current_battery_charge_state.is_charging) {
    chargeState = -1;
  }
  else {
    chargeState = current_battery_charge_state.charge_percent;
  }
  
  //APP_LOG(APP_LOG_LEVEL_DEBUG, "Setting chargeState = %d", chargeState);
  
  // Get a tm structure
  time_t temp = time(NULL); 
  struct tm *tick_time = localtime(&temp);
  
  // Create a long-lived buffers
  static char buffer_hh[] = "00";
  static char buffer_mm[] = "00";
  static char buffer_dte[] = "ddd 00 mmm";
  
  // Write the current hours into the buffer
  if(clock_is_24h_style() == true) {
    // Use 24 hour format
    strftime(buffer_hh, sizeof("00:00"), "%H", tick_time);
  } else {
    // Use 12 hour format
    strftime(buffer_hh, sizeof("00:00"), "%I", tick_time);
  }
  
  h1 = ascii_digit_to_int(buffer_hh[0]);
  h2 = ascii_digit_to_int(buffer_hh[1]);
  
  // hide leading zero if required
  if (h1 == 0 && hh_strip_zero) h1 = -1;

  // Write the current minuts into the buffer
  strftime(buffer_mm, sizeof("00"), "%M", tick_time);
  
  m1 = ascii_digit_to_int(buffer_mm[0]);
  m2 = ascii_digit_to_int(buffer_mm[1]);
  
  // debug
  //h1 = h2 = m1 = m2 = 0;
  
  // Write the current date into the buffer
  if (locale != locale_en) {
    // Ddd 00 Mmm
    //strftime(buffer_dte, sizeof("ddd 00 mmm"), "%a %d %b", tick_time);
    snprintf(buffer_dte, sizeof("ddd 00 mmm"), "%s %d %s", DAYS[locale][tick_time->tm_wday], tick_time->tm_mday, MONTHS[locale][tick_time->tm_mon]);
  }
  else {
    // Ddd Mmm 00
    //strftime(buffer_dte, sizeof("ddd mmm 00"), "%a %b %d", tick_time);
    snprintf(buffer_dte, sizeof("ddd mmm 00"), "%s %s %d", DAYS[0][tick_time->tm_wday], MONTHS[0][tick_time->tm_mon], tick_time->tm_mday);
  }
  
  // undload and relaod time images
  unload_time_images();
  load_time_images();
  
  // Display values in TextLayers
  text_layer_set_text(s_time_layer_dte, buffer_dte);
  
  if (connection_service_peek_pebble_app_connection()) {
    // phone is connected
    layer_set_hidden(bitmap_layer_get_layer(s_warning_img_layer), true); 
    //layer_set_hidden(text_layer_get_layer(s_time_layer_dte), false); 
    lastBtStateConnected = true;
  } else {
    // phone is not connected
    //layer_set_hidden(text_layer_get_layer(s_time_layer_dte), true); 
    layer_set_hidden(bitmap_layer_get_layer(s_warning_img_layer), false); 
    
    // if we just lost the connection or if we want to have repeated vibrations, vibe twice
    if (lastBtStateConnected || repeat_vib) {
      lastBtStateConnected = false;
      vibes_double_pulse();
    }
  }
}
Example #28
0
static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {
  update_time();
  handle_battery(battery_state_service_peek());  
  
}
Example #29
0
static void init(void) {
  window=window_create();
  window_stack_push(window, true /* Animated */);
  
  background_image_layer=bitmap_layer_create(layer_get_frame(window_get_root_layer(window)));
  background_image=gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BACKGROUND);
  bitmap_layer_set_bitmap(background_image_layer, background_image);
  
  layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(background_image_layer));

  // Date Layer
  text_date_layer=text_layer_create(GRect(79, 5, 144-79, 168-5));
  text_layer_set_text_color(text_date_layer, GColorWhite);
  text_layer_set_background_color(text_date_layer, GColorClear);
  text_layer_set_font(text_date_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_BOLD_17)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_date_layer));

  // Nice date Layer
  text_nice_date_layer=text_layer_create(GRect(6, 26, 144-6, 168-26));
  text_layer_set_background_color(text_nice_date_layer, GColorClear);
  text_layer_set_font(text_nice_date_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_BOLD_17)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_nice_date_layer));

  // Time Layer
  text_time_layer=text_layer_create(GRect(36, 12, 144-36, 168-12));
  text_layer_set_text_color(text_time_layer, GColorWhite);
  text_layer_set_background_color(text_time_layer, GColorClear);
  text_layer_set_font(text_time_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_60)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_time_layer));

  // AMPM Layer
  text_ampm_layer=text_layer_create(GRect(36, 69, 144-36, 168-69));
  text_layer_set_text_color(text_ampm_layer, GColorWhite);
  text_layer_set_background_color(text_ampm_layer, GColorClear);
  text_layer_set_font(text_ampm_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_BOLD_17)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_ampm_layer));

  // Stardate Layer
  text_stardate_layer=text_layer_create(GRect(36, 95, 144-36, 168-95));
  text_layer_set_text_color(text_stardate_layer, GColorWhite);
  text_layer_set_background_color(text_stardate_layer, GColorClear);
  text_layer_set_font(text_stardate_layer, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_36)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(text_stardate_layer));

  //Battery  layer
  battery_percent=text_layer_create(GRect(8, 93, 27, 115));
  text_layer_set_background_color(battery_percent, GColorClear);
  text_layer_set_font(battery_percent, fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_LCARS_BOLD_17)));
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(battery_percent));
  
  //Battery charging layer
  battery_charge_image_layer=bitmap_layer_create(GRect(10, 92, 16, 3));
  battery_charge_image=gbitmap_create_with_resource(RESOURCE_ID_BATTERY_CHARGING_IMAGE);
  bitmap_layer_set_bitmap(battery_charge_image_layer, battery_charge_image);
  layer_set_hidden(bitmap_layer_get_layer(battery_charge_image_layer), true);
  layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(battery_charge_image_layer));
  
  //Battery status layer
  battery_status_layer=layer_create(GRect(6, 92, 20, 3));
  layer_add_child(window_get_root_layer(window), battery_status_layer);
  layer_set_update_proc(battery_status_layer, battery_status_layer_update);
  
  //Bluetooth status layer
  bluetooth_status_layer=text_layer_create(GRect(15, 107, 14, 14));
  text_layer_set_background_color(bluetooth_status_layer, GColorClear);
  layer_add_child(window_get_root_layer(window), text_layer_get_layer(bluetooth_status_layer));

  //Prevent blank screen on init.
  time_t now=time(NULL);
  struct tm* tick_time;
  tick_time=localtime(&now);
  update_display(tick_time);
  update_battery_display(battery_state_service_peek());
  update_bluetooth_status(bluetooth_connection_service_peek());

  bluetooth_connection_service_subscribe(update_bluetooth_status);
  battery_state_service_subscribe(update_battery_display);
  tick_timer_service_subscribe(MINUTE_UNIT, &handle_minute_tick);
}
Example #30
0
static void update_time() {
  // Get a tm structure
  time_t temp = time(NULL); 
  struct tm *tick_time = localtime(&temp);
  

  // Create a long-lived buffer
  static char buffer[] = "00:00";
  static char buffer2[]= "                                                                                     ";
 // static char buffer3[] = "Twitter";
  
  // Write the current hours and minutes into the buffer
  if(clock_is_24h_style() == true) {
    // Use 24 hour format
    strftime(buffer, sizeof("00:00"), "%H:%M", tick_time);
  } else {
    // Use 12 hour format
    //strftime(buffer, sizeof("00:00 A"), "%I:%M %P", tick_time);
    strftime(buffer, sizeof("00:00"), "%I:%M", tick_time);
  }
  
  // Combine header
  snprintf(buffer2, sizeof(buffer2), "%s\n%s", s_str,s_str_2);
  
  // Generate Cool Humans
   switch (human) {
    // This is component that displays the image watchface
    case 1:
      // Cycle the icon
      text_layer_set_text(s_quote_layer, "You have to learn the rules of the game. And then you have to play better than anyone else.");    
      text_layer_set_text(s_twitter_layer, "Albert Einstein");    
      break;
 
    case 2:
     text_layer_set_text(s_quote_layer, "There is only one corner of the universe you can be certain of improving, and that's your own self.");    
      text_layer_set_text(s_twitter_layer, "Aldous Huxley");
      break;

    case 3:
          text_layer_set_text(s_quote_layer, "The secret of getting ahead is getting started.");    

      text_layer_set_text(s_twitter_layer, "Mark Twain");
      break;


      case 4:
        text_layer_set_text(s_quote_layer, "Stay hungry. Stay foolish."); 
      text_layer_set_text(s_twitter_layer, "Steve Jobs");
      break;
     
     
      case 5:
     text_layer_set_text(s_quote_layer, "Breathe in throgh the nose. Pause. Breathe out through the mouth. Pause."); 
      text_layer_set_text(s_twitter_layer, "Lex Dreitser");
      break;
     
      case 6:
       human = 1;
     break;


  }

  counter++;
   if(counter == 10)
   {     
     counter = 0;
     human++;
   }
  
  


  // buffer3 = " Twitter";
  text_layer_set_text(s_time_layer, buffer);
  text_layer_set_text(s_stat_layer, buffer2);
  battery_state_service_peek();
}