Exemplo n.º 1
0
static void worker_message_handler(uint16_t type, AppWorkerMessage *data) {
	static AppWorkerMessage msg_data;
		switch(type) {
		case WORKER_MSG_ECHO:
#if !ECHO_CMDS			
			 // Construct a data packet
			msg_data.data0 = data->data0;
	  		// Send the data to the foreground app
			app_worker_send_message(WORKER_MSG_ECHO, &msg_data);
#endif			
		break;
		
		case WORKER_MSG_ACCEL_START:
			accel_data_service_subscribe(data->data0, worker_accel_data_handler);
			accel_service_set_sampling_rate(data->data1);
			worker_accel_enabled = true;
		break;
		
		case WORKER_MSG_ACCEL_STOP:
			accel_data_service_unsubscribe();
			worker_accel_enabled = false;
		break;
				
		case WORKER_MSG_ACCEL_MODIFY:
			accel_service_set_samples_per_update(data->data0);
			accel_service_set_sampling_rate(data->data1);
		break;
		
		case WORKER_MSG_TICK_START:
			if ( data->data0 != 0 ) 
				tickRate = data->data0; // how often do we want updates.
			tick_timer_service_subscribe(SECOND_UNIT, worker_tick_handler);
			worker_tick_enabled = true;
		break;
		
		case WORKER_MSG_TICK_STOP:
			tick_timer_service_unsubscribe();
			worker_tick_enabled = false;
		break;
			
		case WORKER_MSG_LOGGING_START:
			datalog_ref = data_logging_create(SLEEP_DATA_LOG_TAG, DATA_LOGGING_BYTE_ARRAY, sizeof(struct AccelData), true);
			worker_logging_enabled = true;
		break;
		
		case WORKER_MSG_LOGGING_STOP:
			data_logging_finish(datalog_ref);
			worker_logging_enabled = false;
		break;
			
		case WORKER_MSG_STATUS_RQST:
			worker_send_status_resp();
		break;
	}
	
#if ECHO_CMDS
	msg_data.data0 = type;
	app_worker_send_message(WORKER_MSG_ECHO,&msg_data);
#endif
}
Exemplo n.º 2
0
// Handle the start-up of the app
static void init(void)
{
    // Create window
    window = window_create();
    window_stack_push(window, true);
    
    // Load images
    bg_image = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_BG);
    empty_image = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_EMPTY);
    full_image = gbitmap_create_with_resource(RESOURCE_ID_IMAGE_FULL);
    
    // Create bg layer
    bg_layer = bitmap_layer_create(GRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
    bitmap_layer_set_bitmap(bg_layer, bg_image);
    layer_add_child(window_get_root_layer(window), bitmap_layer_get_layer(bg_layer));
    
    // Create status layers
    for (int i = 0; i < NUMBER_OF_STATUS_BARS; i++)
    {
        status_layer[i] = bitmap_layer_create(GRect(STATUS_BAR_X_ORIGIN + STATUS_BAR_X_OFFSET * i, STATUS_BAR_Y_ORIGIN, STATUS_BAR_WIDTH, STATUS_BAR_HEIGHT));
        bitmap_layer_set_bitmap(status_layer[i], empty_image);
        layer_add_child(bitmap_layer_get_layer(bg_layer), bitmap_layer_get_layer(status_layer[i]));
    }
    
    // Subscribe minute handler
    //tick_timer_service_subscribe(SECOND_UNIT, &handle_tick);
    
    // Setup accelerator handling
    old_accel = (AccelData) { .x = 0, .y = 0, .z = 0 };
    accel_service_set_sampling_rate(ACCEL_SAMPLING_10HZ);
    accel_service_set_samples_per_update(0);
    accel_data_service_subscribe(0, handle_accel);
    
    timer = app_timer_register(100 /* milliseconds */, handle_timer, NULL);
}

// Handle the shutdown of the app
static void deinit(void)
{
    // Disable accelerator handling
    accel_data_service_unsubscribe();
    
    // Destroy status layers
    for (int i = 0; i < NUMBER_OF_STATUS_BARS; i++)
    {
        bitmap_layer_destroy(status_layer[i]);
    }
    
    // Destroy bg layer
    bitmap_layer_destroy(bg_layer);
    
    // Unload images
    gbitmap_destroy(bg_image);
    gbitmap_destroy(empty_image);
    gbitmap_destroy(full_image);
    
    // Destroy window
    window_destroy(window);
}
Exemplo n.º 3
0
void simply_accel_set_data_samples(SimplyAccel *self, uint32_t num_samples) {
  self->num_samples = num_samples;
  accel_service_set_samples_per_update(num_samples);
  if (!self->data_subscribed) {
    return;
  }
  simply_accel_set_data_subscribe(self, false);
  simply_accel_set_data_subscribe(self, true);
}