static void trigger_hdlr(struct device *bmi160, struct sensor_trigger *trigger) { if (trigger->type != SENSOR_TRIG_DELTA && trigger->type != SENSOR_TRIG_DATA_READY) { return; } if (sensor_sample_fetch(bmi160) < 0) { printk("Sample update error.\n"); return; } #if !defined(CONFIG_BMI160_GYRO_PMU_SUSPEND) if (trigger->chan == SENSOR_CHAN_GYRO_XYZ) { print_gyro_data(bmi160); } #endif #if !defined(CONFIG_BMI160_ACCEL_PMU_SUSPEND) if (trigger->chan == SENSOR_CHAN_ACCEL_XYZ) { print_accel_data(bmi160); } #endif }
static void trigger_handler(struct device *dev, struct sensor_trigger *trig) { struct sensor_value temp; sensor_sample_fetch(dev); sensor_channel_get(dev, SENSOR_CHAN_TEMP, &temp); printf("trigger fired, temp %d.%06d\n", temp.val1, temp.val2); }
void main(void) { struct device *dev = device_get_binding("MCP9808"); if (dev == NULL) { printf("device not found. aborting test.\n"); return; } #ifdef DEBUG printf("dev %p\n", dev); printf("dev %p name %s\n", dev, dev->config->name); #endif #ifdef CONFIG_MCP9808_TRIGGER struct sensor_value val; struct sensor_trigger trig; val.type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; val.val1 = 26; val.val2 = 0; sensor_attr_set(dev, SENSOR_CHAN_TEMP, SENSOR_ATTR_UPPER_THRESH, &val); trig.type = SENSOR_TRIG_THRESHOLD; trig.chan = SENSOR_CHAN_TEMP; sensor_trigger_set(dev, &trig, trigger_handler); #endif while (1) { struct sensor_value temp; int rc; rc = sensor_sample_fetch(dev); if (rc != 0) { printf("sensor_sample_fetch error: %d\n", rc); break; } rc = sensor_channel_get(dev, SENSOR_CHAN_TEMP, &temp); if (rc != 0) { printf("sensor_channel_get error: %d\n", rc); break; } printf("temp: %d.%06d\n", temp.val1, temp.val2); k_sleep(2000); } }
static void test_polling_mode(struct device *bmi160) { s32_t remaining_test_time = MAX_TEST_TIME; struct sensor_value attr; #if defined(CONFIG_BMI160_ACCEL_ODR_RUNTIME) /* set sampling frequency to 100Hz for accel */ attr.val1 = 100; attr.val2 = 0; if (sensor_attr_set(bmi160, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &attr) < 0) { printk("Cannot set sampling frequency for accelerometer.\n"); return; } #endif #if defined(CONFIG_BMI160_GYRO_ODR_RUNTIME) /* set sampling frequency to 3200Hz for gyro */ attr.val1 = 3200; attr.val2 = 0; if (sensor_attr_set(bmi160, SENSOR_CHAN_GYRO_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &attr) < 0) { printk("Cannot set sampling frequency for gyroscope.\n"); return; } #endif /* wait for the change to take effect */ k_sleep(SLEEPTIME); /* poll the data and print it */ do { if (sensor_sample_fetch(bmi160) < 0) { printk("Sample update error.\n"); return; } #if !defined(CONFIG_BMI160_GYRO_PMU_SUSPEND) print_gyro_data(bmi160); #endif #if !defined(CONFIG_BMI160_ACCEL_PMU_SUSPEND) print_accel_data(bmi160); #endif print_temp_data(bmi160); /* wait a while */ k_sleep(SLEEPTIME); remaining_test_time -= SLEEPTIME; } while (remaining_test_time > 0); }
static void trigger_handler(struct device *bmg160, struct sensor_trigger *trigger) { if (trigger->type != SENSOR_TRIG_DATA_READY && trigger->type != SENSOR_TRIG_DELTA) { printf("Gyro: trigger handler: unknown trigger type.\n"); return; } if (sensor_sample_fetch(bmg160) < 0) { printf("Gyro sample update error.\n"); } print_gyro_data(bmg160); }
static void do_main(struct device *dev) { int ret; struct sensor_value temp_value; struct sensor_value attr; attr.type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; attr.val1 = 150; attr.val2 = 0; ret = sensor_attr_set(dev, SENSOR_CHAN_TEMP, SENSOR_ATTR_FULL_SCALE, &attr); if (ret) { printk("sensor_attr_set failed ret %d\n", ret); return; } attr.type = SENSOR_VALUE_TYPE_INT_PLUS_MICRO; attr.val1 = 8; attr.val2 = 0; ret = sensor_attr_set(dev, SENSOR_CHAN_TEMP, SENSOR_ATTR_SAMPLING_FREQUENCY, &attr); if (ret) { printk("sensor_attr_set failed ret %d\n", ret); return; } while (1) { ret = sensor_sample_fetch(dev); if (ret) { printk("sensor_sample_fetch failed ret %d\n", ret); return; } ret = sensor_channel_get(dev, SENSOR_CHAN_TEMP, &temp_value); if (ret) { printk("sensor_channel_get failed ret %d\n", ret); return; } printk("temp is %d (%d micro)\n", temp_value.val1, temp_value.val2); k_sleep(1000); } }
static void test_polling_mode(struct device *bmg160) { uint32_t timer_data[2] = {0, 0}; int32_t remaining_test_time = MAX_TEST_TIME; struct nano_timer timer; nano_timer_init(&timer, timer_data); do { if (sensor_sample_fetch(bmg160) < 0) { printf("Gyro sample update error.\n"); } print_gyro_data(bmg160); print_temp_data(bmg160); /* wait a while */ nano_task_timer_start(&timer, SLEEPTIME); nano_task_timer_test(&timer, TICKS_UNLIMITED); remaining_test_time -= SLEEPTIME; } while (remaining_test_time > 0); }
void main(void) { struct device *dev[ARRAY_SIZE(info)]; struct sensor_value val[ARRAY_SIZE(info)]; unsigned int i; int rc; for (i = 0; i < ARRAY_SIZE(info); i++) { dev[i] = device_get_binding(info[i].dev_name); if (dev[i] == NULL) { printk("Failed to get \"%s\" device\n", info[i].dev_name); return; } } #ifdef CONFIG_GROVE_LCD_RGB struct device *glcd; glcd = device_get_binding(GROVE_LCD_NAME); if (glcd == NULL) { printk("Failed to get Grove LCD\n"); return; } /* configure LCD */ glcd_function_set(glcd, GLCD_FS_ROWS_2 | GLCD_FS_DOT_SIZE_LITTLE | GLCD_FS_8BIT_MODE); glcd_display_state_set(glcd, GLCD_DS_DISPLAY_ON); #endif while (1) { /* fetch sensor samples */ for (i = 0; i < ARRAY_SIZE(info); i++) { rc = sensor_sample_fetch(dev[i]); if (rc) { printk("Failed to fetch sample for device %s (%d)\n", info[i].dev_name, rc); } } for (i = 0; i < ARRAY_SIZE(info); i++) { rc = sensor_channel_get(dev[i], info[i].chan, &val[i]); if (rc) { printk("Failed to get data for device %s (%d)\n", info[i].dev_name, rc); continue; } } #ifdef CONFIG_GROVE_LCD_RGB char row[16]; /* clear LCD */ memset(row, ' ', sizeof(row)); glcd_cursor_pos_set(glcd, 0, 0); glcd_print(glcd, row, sizeof(row)); glcd_cursor_pos_set(glcd, 0, 1); glcd_print(glcd, row, sizeof(row)); /* display temperature on LCD */ glcd_cursor_pos_set(glcd, 0, 0); sprintf(row, "T:%.1f%cC", sensor_value_to_double(val), 223 /* degree symbol */); glcd_print(glcd, row, strlen(row)); /* display himidity on LCD */ glcd_cursor_pos_set(glcd, 17 - strlen(row), 0); sprintf(row, "RH:%.0f%c", sensor_value_to_double(val + 1), 37 /* percent symbol */); glcd_print(glcd, row, strlen(row)); #endif k_sleep(2000); } }