int Device::process_readings_raw(char *buf) { int uid_test = (buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24)); if(uid_test == -1) update_uid(uid_counter++); int flags = buf[4]; int n_readings = buf[5]; if(flags & LOW_BATTERY_FLAG) set_battery(LOW_BATTERY_LEVEL); if(flags & SHUTDOWN_FLAG) { set_battery(LOW_BATTERY_LEVEL); // std::cout << "Device shut down" << std::endl; } //std::cout << "n_readings = " << n_readings << std::endl; for(int i = 0; i < n_readings; i++) { time_t time = 0; int reading = 0; for(int n = 0; n < 4; n++) { time |= ((buf[6+(i*(4+4))+n] & 0x000000FF) << n*8); reading |= ((buf[6+(i*(4+4))+4+n] & 0x000000FF) << n*8); } add_reading(time, reading); } return n_readings; }
/* * Messages incoming from the phone */ void received_message(DictionaryIterator *received, void *context) { Event temp_event; Tuple *tuple = dict_find(received, RECONNECT_KEY); if (tuple) { vibes_short_pulse(); calendar_request(); } // Gather the bits of a calendar together tuple = dict_find(received, CALENDAR_RESPONSE_KEY); if (tuple) { set_status(STATUS_REPLY); uint8_t i, j; if (g_count > g_received_rows) { i = g_received_rows; j = 0; } else { g_count = tuple->value->data[0]; i = 0; j = 1; } while (i < g_count && j < tuple->length) { memcpy(&temp_event, &tuple->value->data[j], sizeof(Event)); if (temp_event.index < MAX_EVENTS) memcpy(&g_events[temp_event.index], &temp_event, sizeof(Event)); i++; j += sizeof(Event); } g_received_rows = i; if (g_count == g_received_rows) { g_max_entries = g_count; process_rot_events(); if (nothing_showing) { nothing_showing = false; show_next_event(); } battery_request(); } } tuple = dict_find(received, BATTERY_RESPONSE_KEY); if (tuple) { memcpy(&g_battery_status, &tuple->value->data[0], sizeof(BatteryStatus)); set_battery(g_battery_status.state, g_battery_status.level); } }
static void update_time() { // Get a tm structure time_t temp = time(NULL); struct tm *tick_time = localtime(&temp); if(clock_is_24h_style() == true) { //Use 2h hour format strftime(buffer, sizeof("00:00"), "%H:%M", tick_time); } else { //Use 12 hour format strftime(buffer, sizeof("00:00"), "%I:%M", tick_time); } strftime(month_buffer, sizeof("SEPTEMBER"), "%B %d", tick_time); set_display(); set_battery(); //set_display_right(); text_layer_set_text(s_time_layer, buffer); text_layer_set_text(month_layer, month_buffer); }
static void init(void) { window = window_create(); window_stack_push(window, true); window_set_background_color(window, GColorBlack); Layer *root_layer = window_get_root_layer(window); GRect frame = layer_get_frame(root_layer); // Init fonts and images font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_16)); font_tiny = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_10)); battery_outline = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_OUTLINE); battery_charge = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_CHARGE); // Init layer for display display_layer = layer_create(frame); layer_set_update_proc(display_layer, &display_layer_update_callback); layer_add_child(root_layer, display_layer); // Init layer for text date_layer = text_layer_create(frame); layer_set_frame(text_layer_get_layer(date_layer), GRect(0, 130, 144, 168-130)); layer_set_bounds(text_layer_get_layer(date_layer), GRect(0, 0, 144, 168-130)); text_layer_set_text_alignment(date_layer, GTextAlignmentCenter); text_layer_set_font(date_layer, font); layer_add_child(root_layer, text_layer_get_layer(date_layer)); // Init layer for battery image battery_layer = bitmap_layer_create(frame); bitmap_layer_set_background_color(battery_layer, GColorClear); layer_set_frame(bitmap_layer_get_layer(battery_layer), GRect(4, 134, 30, 20)); layer_set_bounds(bitmap_layer_get_layer(battery_layer), GRect(0, 0, 30, 20)); bitmap_layer_set_bitmap(battery_layer, battery_outline); layer_add_child(root_layer, bitmap_layer_get_layer(battery_layer)); // Init layer for charge image charge_layer = bitmap_layer_create(frame); bitmap_layer_set_background_color(charge_layer, GColorClear); layer_set_frame(bitmap_layer_get_layer(charge_layer), GRect(8, 136, 20, 16)); layer_set_bounds(bitmap_layer_get_layer(charge_layer), GRect(0, 0, 20, 16)); bitmap_layer_set_bitmap(charge_layer, battery_charge); layer_add_child(root_layer, bitmap_layer_get_layer(charge_layer)); // Init battery fill layer battfill_layer = inverter_layer_create(frame); layer_set_frame(inverter_layer_get_layer(battfill_layer), GRect(8, 136, 0, 16)); layer_add_child(root_layer, inverter_layer_get_layer(battfill_layer)); // Init layer for battery percentage percent_layer = text_layer_create(frame); layer_set_frame(text_layer_get_layer(percent_layer), GRect(4, 154, 30, 14)); layer_set_bounds(text_layer_get_layer(percent_layer), GRect(0, 0, 30, 14)); text_layer_set_text_alignment(percent_layer, GTextAlignmentCenter); text_layer_set_font(percent_layer, font_tiny); layer_add_child(root_layer, text_layer_get_layer(percent_layer)); battery_state_service_subscribe(set_battery); set_battery(battery_state_service_peek()); show_battery(); tick_timer_service_subscribe(SECOND_UNIT, &handle_second_tick); }