Commit 91774cb0 authored by Zhang Lixu's avatar Zhang Lixu Committed by Carles Cufi
Browse files

samples: sensing: add more sample code

1. add sensing_set_config/sensing_get_config in sample code
2. add hinge_angle sensor in sample code.

Build and test:
  west build -p -b native_sim samples/subsys/sensing/simple/ -t run

Signed-off-by: default avatarZhang Lixu <lixu.zhang@intel.com>
parent 18a257cb
Loading
Loading
Loading
Loading
+10 −0
Changes for samples/subsys/sensing/simple/boards/native_sim.overlay: 10 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -41,5 +41,15 @@
			minimal-interval = <625>;
			underlying-device = <&bmi160_spi>;
		};

		hinge_angle: hinge-angle {
			compatible = "zephyr,sensing-hinge-angle";
			status = "okay";
			sensor-type = <0x20B>;
			friendly-name = "Hinge Angle Sensor";
			reporters = <&base_accel &lid_accel>;
			minimal-interval = <100000>;
			stream-mode;
		};
	};
};
+123 −3
Changes for samples/subsys/sensing/simple/src/main.c: 123 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ static void acc_data_event_callback(sensing_sensor_handle_t handle, const void *
{
	const struct sensing_sensor_info *info = sensing_get_sensor_info(handle);
	struct sensing_sensor_value_3d_q31 *sample = (struct sensing_sensor_value_3d_q31 *)buf;

	ARG_UNUSED(context);

	LOG_INF("%s(%d), handle:%p, Sensor:%s data:(x:%d, y:%d, z:%d)",
@@ -26,6 +27,17 @@ static void acc_data_event_callback(sensing_sensor_handle_t handle, const void *
		sample->readings[0].z);
}

static void hinge_angle_data_event_callback(sensing_sensor_handle_t handle, const void *buf,
				    void *context)
{
	const struct sensing_sensor_info *info = sensing_get_sensor_info(handle);
	struct sensing_sensor_value_q31 *sample = (struct sensing_sensor_value_q31 *)buf;

	ARG_UNUSED(context);

	LOG_INF("handle:%p, Sensor:%s data:(v:%d)", handle, info->name, sample->readings[0].v);
}

int main(void)
{
	const struct sensing_callback_list base_acc_cb_list = {
@@ -34,9 +46,17 @@ int main(void)
	const struct sensing_callback_list lid_acc_cb_list = {
		.on_data_event = &acc_data_event_callback,
	};
	const struct sensing_callback_list hinge_angle_cb_list = {
		.on_data_event = &hinge_angle_data_event_callback,
	};
	const struct sensing_sensor_info *info;
	sensing_sensor_handle_t base_acc;
	sensing_sensor_handle_t lid_acc;
	sensing_sensor_handle_t hinge_angle;
	struct sensing_sensor_config base_acc_config;
	struct sensing_sensor_config lid_acc_config;
	struct sensing_sensor_config hinge_angle_config;
	const struct sensing_sensor_info *tmp_sensor_info;
	int ret, i, num = 0;

	ret = sensing_get_sensors(&num, &info);
@@ -65,18 +85,118 @@ int main(void)
					&lid_acc_cb_list,
					&lid_acc);
	if (ret) {
		LOG_ERR("sensing_open_sensor, type:0x%x index:1 error:%d",
		LOG_ERR("sensing_open_sensor_by_dt, type:0x%x index:1 error:%d",
			SENSING_SENSOR_TYPE_MOTION_ACCELEROMETER_3D, ret);
	}
	ret = sensing_open_sensor_by_dt(DEVICE_DT_GET(DT_NODELABEL(hinge_angle)),
					&hinge_angle_cb_list,
					&hinge_angle);
	if (ret) {
		LOG_ERR("sensing_open_sensor_by_type, type:0x%x index:0 error:%d",
			SENSING_SENSOR_TYPE_MOTION_HINGE_ANGLE, ret);
	}

	/* set base acc, lid acc, hinge sensor interval */
	base_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	base_acc_config.interval = 100 * USEC_PER_MSEC;
	ret = sensing_set_config(base_acc, &base_acc_config, 1);
	if (ret) {
		LOG_ERR("base_acc sensing_set_interval error:%d\n", ret);
	}

	lid_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	lid_acc_config.interval = 100 * USEC_PER_MSEC;
	ret = sensing_set_config(lid_acc, &lid_acc_config, 1);
	if (ret) {
		LOG_ERR("lid_acc sensing_set_interval error:%d\n", ret);
	}

	tmp_sensor_info = sensing_get_sensor_info(hinge_angle);
	hinge_angle_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	hinge_angle_config.interval = tmp_sensor_info->minimal_interval;
	ret = sensing_set_config(hinge_angle, &hinge_angle_config, 1);
	if (ret) {
		LOG_ERR("hinge_angle sensing_set_interval error:%d\n", ret);
	}

	memset(&base_acc_config, 0x00, sizeof(struct sensing_sensor_config));
	memset(&lid_acc_config, 0x00, sizeof(struct sensing_sensor_config));
	memset(&hinge_angle_config, 0x00, sizeof(struct sensing_sensor_config));

	/* get base acc, lid acc, hinge sensor interval */
	base_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	ret = sensing_get_config(base_acc, &base_acc_config, 1);
	if (ret) {
		LOG_ERR("base_acc sensing_get_interval error:%d\n", ret);
	}

	lid_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	ret = sensing_get_config(lid_acc, &lid_acc_config, 1);
	if (ret) {
		LOG_ERR("lid_acc sensing_get_interval error:%d\n", ret);
	}

	hinge_angle_config.attri = SENSING_SENSOR_ATTRIBUTE_INTERVAL;
	ret = sensing_get_config(hinge_angle, &hinge_angle_config, 1);
	if (ret) {
		LOG_ERR("hinge_angle sensing_get_interval error:%d\n", ret);
	}

	/* set base acc, lid acc, hinge sensor sensitivity */
	base_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	base_acc_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	base_acc_config.sensitivity = 0;
	ret = sensing_set_config(base_acc, &base_acc_config, 1);
	if (ret) {
		LOG_ERR("base_acc sensing_set_sensitivity error:%d\n", ret);
	}

	lid_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	lid_acc_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	lid_acc_config.sensitivity = 0;
	ret = sensing_set_config(lid_acc, &lid_acc_config, 1);
	if (ret) {
		LOG_ERR("lid_acc sensing_set_sensitivity error:%d\n", ret);
	}

	hinge_angle_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	hinge_angle_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	hinge_angle_config.sensitivity = 1;
	ret = sensing_set_config(hinge_angle, &hinge_angle_config, 1);
	if (ret) {
		LOG_ERR("hinge_angle sensing_set_sensitivity error:%d\n", ret);
	}

	memset(&base_acc_config, 0x00, sizeof(struct sensing_sensor_config));
	memset(&lid_acc_config, 0x00, sizeof(struct sensing_sensor_config));
	memset(&hinge_angle_config, 0x00, sizeof(struct sensing_sensor_config));

	/* get base acc, lid acc, hinge sensor sensitivity */
	base_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	base_acc_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	ret = sensing_get_config(base_acc, &base_acc_config, 1);
	if (ret) {
		LOG_ERR("base_acc sensing_get_sensitivity error:%d\n", ret);
	}

	lid_acc_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	lid_acc_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	ret = sensing_get_config(lid_acc, &lid_acc_config, 1);
	if (ret) {
		LOG_ERR("lid_acc sensing_get_sensitivity error:%d\n", ret);
	}

	ret = sensing_close_sensor(&base_acc);
	hinge_angle_config.attri = SENSING_SENSOR_ATTRIBUTE_SENSITIVITY;
	hinge_angle_config.data_field = SENSING_SENSITIVITY_INDEX_ALL;
	ret = sensing_get_config(hinge_angle, &hinge_angle_config, 1);
	if (ret) {
		LOG_ERR("sensing_close_sensor:%p error:%d", base_acc, ret);
		LOG_ERR("hinge_angle sensing_get_sensitivity error:%d\n", ret);
	}

	ret = sensing_close_sensor(&lid_acc);
	if (ret) {
		LOG_ERR("sensing_close_sensor:%p error:%d", lid_acc, ret);
	}

	return 0;
}