Skip to content

Commit

Permalink
samples: sensing: add more sample code
Browse files Browse the repository at this point in the history
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_posix samples/subsys/sensing/simple/ -t run

Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
  • Loading branch information
lixuzha committed Oct 27, 2023
1 parent d7e7b7e commit 1ddcdfc
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 3 deletions.
10 changes: 10 additions & 0 deletions samples/subsys/sensing/simple/boards/native_posix.overlay
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
};
};
126 changes: 123 additions & 3 deletions samples/subsys/sensing/simple/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)",
Expand All @@ -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 = {
Expand All @@ -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);
Expand Down Expand Up @@ -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;
}

0 comments on commit 1ddcdfc

Please sign in to comment.