From 31bcb2bc00e33e63ff58fe21e4a05156798cda79 Mon Sep 17 00:00:00 2001 From: BSP1RT Date: Thu, 12 Sep 2024 17:19:02 +0550 Subject: [PATCH] BMA530 Sensor API v4.2.0 Github release. --- bma5.c | 15 +- bma5.h | 4 +- bma530.c | 4 +- bma530.h | 4 +- bma530_context.h | 4 +- bma530_features.c | 4 +- bma530_features.h | 4 +- bma5_defs.h | 26 +-- examples/accel_foc/Makefile | 2 +- examples/accel_foc/accel_foc.c | 174 ++++++++++++++---- examples/accelerometer/Makefile | 2 +- examples/accelerometer/accelerometer.c | 29 ++- examples/android_generic_interrupt_1/Makefile | 2 +- .../android_generic_interrupt_1.c | 23 ++- examples/android_generic_interrupt_2/Makefile | 2 +- .../android_generic_interrupt_2.c | 24 ++- examples/android_sig_motion/Makefile | 2 +- .../android_sig_motion/android_sig_motion.c | 30 ++- examples/android_tilt/Makefile | 2 +- examples/android_tilt/android_tilt.c | 27 ++- examples/common/common.h | 8 + examples/feature_axis_exchange/Makefile | 2 +- .../feature_axis_exchange.c | 36 +++- .../Makefile | 2 +- ...ifo_full_16_bit_dedicated_frame_comp_dis.c | 66 ++++--- .../Makefile | 2 +- .../fifo_full_16_bit_each_frame_comp_dis.c | 62 ++++--- .../Makefile | 2 +- .../fifo_full_8_bit_dedicated_frame_comp_en.c | 66 ++++--- .../Makefile | 2 +- .../fifo_full_8_bit_each_frame_comp_en.c | 66 ++++--- .../Makefile | 2 +- .../fifo_wm_16_bit_dedicated_frame_comp_dis.c | 74 +++++--- .../Makefile | 2 +- .../fifo_wm_16_bit_each_frame_comp_dis.c | 62 ++++--- .../Makefile | 2 +- .../fifo_wm_8_bit_dedicated_frame_comp_en.c | 61 +++--- .../fifo_wm_8_bit_each_frame_comp_en/Makefile | 2 +- .../fifo_wm_8_bit_each_frame_comp_en.c | 63 ++++--- examples/flat/flat.c | 21 ++- examples/generic_interrupt_1/Makefile | 2 +- .../generic_interrupt_1/generic_interrupt_1.c | 51 ++++- examples/generic_interrupt_2/Makefile | 2 +- .../generic_interrupt_2/generic_interrupt_2.c | 49 ++++- examples/generic_interrupt_3/Makefile | 2 +- .../generic_interrupt_3/generic_interrupt_3.c | 49 ++++- examples/orientation/Makefile | 2 +- examples/orientation/orientation.c | 33 +++- examples/self_test/Makefile | 2 +- examples/self_test/self_test.c | 12 +- examples/sig_motion/Makefile | 2 +- examples/sig_motion/sig_motion.c | 33 +++- examples/step_activity/Makefile | 2 +- examples/step_activity/step_activity.c | 25 ++- examples/step_counter/Makefile | 2 +- examples/step_counter/step_counter.c | 33 +++- examples/step_detector/Makefile | 2 +- examples/step_detector/step_detector.c | 20 +- examples/temperature/Makefile | 2 +- examples/temperature/temperature.c | 15 +- examples/tilt/Makefile | 2 +- examples/tilt/tilt.c | 28 ++- 62 files changed, 1016 insertions(+), 341 deletions(-) diff --git a/bma5.c b/bma5.c index 6b34238..2e374f0 100644 --- a/bma5.c +++ b/bma5.c @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma5.c -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ @@ -513,8 +513,6 @@ int8_t bma5_get_temp_conf(struct bma5_temp_conf *config, struct bma5_dev *dev) config->temp_rate = BMA5_GET_BITS_POS_0(reg_value, BMA5_TEMP_RATE); config->temp_meas_src = BMA5_GET_BITS(reg_value, BMA5_TEMP_MEAS_SRC); config->temp_ext_sel = BMA5_GET_BITS(reg_value, BMA5_TEMP_EXT_SEL); - config->temp_tcs = BMA5_GET_BITS(reg_value, BMA5_TEMP_TCS); - config->temp_tco = BMA5_GET_BITS(reg_value, BMA5_TEMP_TCO); } } @@ -539,8 +537,6 @@ int8_t bma5_set_temp_conf(const struct bma5_temp_conf *config, struct bma5_dev * reg_value = BMA5_SET_BITS_POS_0(reg_value, BMA5_TEMP_RATE, config->temp_rate); reg_value = BMA5_SET_BITS(reg_value, BMA5_TEMP_MEAS_SRC, config->temp_meas_src); reg_value = BMA5_SET_BITS(reg_value, BMA5_TEMP_EXT_SEL, config->temp_ext_sel); - reg_value = BMA5_SET_BITS(reg_value, BMA5_TEMP_TCS, config->temp_tcs); - reg_value = BMA5_SET_BITS(reg_value, BMA5_TEMP_TCO, config->temp_tco); result = bma5_set_regs(BMA5_REG_TEMP_CONF, (const uint8_t *)®_value, sizeof(reg_value), dev); } @@ -1279,22 +1275,23 @@ int8_t bma5_get_acc_doff(struct bma5_accel_doff *accel_doff, struct bma5_dev *de else { result = bma5_get_regs(BMA5_REG_ACC_OFFSET_0, reg_value, 6, dev); + if (BMA5_OK == result) { acc_doff_7_0 = BMA5_GET_BITS_POS_0(reg_value[0], BMA5_ACC_DOFF_7_0); acc_doff_8 = BMA5_GET_BITS_POS_0(reg_value[1], BMA5_ACC_DOFF_8); - accel_doff->x_doff = (int16_t)(((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)); + accel_doff->x_doff = (int16_t)((((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)) << 7) >> 7; acc_doff_7_0 = BMA5_GET_BITS_POS_0(reg_value[2], BMA5_ACC_DOFF_7_0); acc_doff_8 = BMA5_GET_BITS_POS_0(reg_value[3], BMA5_ACC_DOFF_8); - accel_doff->y_doff = (int16_t)(((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)); + accel_doff->y_doff = (int16_t)((((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)) << 7) >> 7; acc_doff_7_0 = BMA5_GET_BITS_POS_0(reg_value[4], BMA5_ACC_DOFF_7_0); acc_doff_8 = BMA5_GET_BITS_POS_0(reg_value[5], BMA5_ACC_DOFF_8); - accel_doff->z_doff = (int16_t)(((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)); + accel_doff->z_doff = (int16_t)((((uint16_t)acc_doff_8 << 8) | ((uint16_t)acc_doff_7_0)) << 7) >> 7; } } diff --git a/bma5.h b/bma5.h index d87dfe3..439efeb 100644 --- a/bma5.h +++ b/bma5.h @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma5.h -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma530.c b/bma530.c index 73c575f..54b5f67 100644 --- a/bma530.c +++ b/bma530.c @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma530.c -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma530.h b/bma530.h index c1be7a1..1682ef1 100644 --- a/bma530.h +++ b/bma530.h @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma530.h -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma530_context.h b/bma530_context.h index 0cd7344..4876271 100644 --- a/bma530_context.h +++ b/bma530_context.h @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma530_context.h -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma530_features.c b/bma530_features.c index ca5d821..21a50d6 100644 --- a/bma530_features.c +++ b/bma530_features.c @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma530_features.c -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma530_features.h b/bma530_features.h index 6023b74..d36a3ca 100644 --- a/bma530_features.h +++ b/bma530_features.h @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma530_features.h -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ diff --git a/bma5_defs.h b/bma5_defs.h index a23f91d..600bf4f 100644 --- a/bma5_defs.h +++ b/bma5_defs.h @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. * * @file bma5_defs.h -* @date 2024-04-15 -* @version v4.1.0 +* @date 2024-07-29 +* @version v4.2.0 * */ @@ -421,14 +421,6 @@ #define BMA5_TEMP_EXT_SEL_MSK UINT8_C(0x10) #define BMA5_TEMP_EXT_SEL_POS UINT8_C(0x04) -/*! Enable temperature dependent sensitivity correction. */ -#define BMA5_TEMP_TCS_MSK UINT8_C(0x20) -#define BMA5_TEMP_TCS_POS UINT8_C(0x05) - -/*! Enable temperature dependent offset correction. */ -#define BMA5_TEMP_TCO_MSK UINT8_C(0x40) -#define BMA5_TEMP_TCO_POS UINT8_C(0x06) - /*! Output enable for INT pin */ #define BMA5_INT_MODE_MSK UINT8_C(0x03) #define BMA5_INT_MODE_POS UINT8_C(0x00) @@ -748,14 +740,6 @@ #define BMA5_TEMP_EXT_SEL_INT1 UINT8_C(0x00) /*! interrupt pin INT1 */ #define BMA5_TEMP_EXT_SEL_INT2 UINT8_C(0x01) /*! interrupt pin INT2 */ -/* Macros to define the supported temp_tcs values */ -#define BMA5_TEMP_TCS_DISABLE UINT8_C(0x00) /*! TCS correction disabled */ -#define BMA5_TEMP_TCS_ENABLE UINT8_C(0x01) /*! TCS correction enabled */ - -/* Macros to define the supported temp_tco values */ -#define BMA5_TEMP_TCO_DISABLE UINT8_C(0x00) /*! TCO correction disabled */ -#define BMA5_TEMP_TCO_ENABLE UINT8_C(0x01) /*! TCO correction enabled */ - /* Macros to define the supported int1_mode values */ #define BMA5_INT1_MODE_OFF UINT8_C(0x00) /*! Output disabled. */ #define BMA5_INT1_MODE_LATCHED UINT8_C(0x01) /*! Latched (level triggered) interrupts. */ @@ -1157,12 +1141,6 @@ struct bma5_temp_conf /*! Select the external pin as source for temperature ADC. */ uint8_t temp_ext_sel; - /*! Enable temperature dependent sensitivity correction. */ - uint8_t temp_tcs; - - /*! Enable temperature dependent offset correction. */ - uint8_t temp_tco; - }; /*! diff --git a/examples/accel_foc/Makefile b/examples/accel_foc/Makefile index 5e0eb04..f73d6bb 100644 --- a/examples/accel_foc/Makefile +++ b/examples/accel_foc/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/accel_foc/accel_foc.c b/examples/accel_foc/accel_foc.c index 75d2b2a..ae317e1 100644 --- a/examples/accel_foc/accel_foc.c +++ b/examples/accel_foc/accel_foc.c @@ -65,12 +65,13 @@ int main(void) uint8_t n_ints = 2; uint8_t n_status = 2; uint8_t loop; - uint8_t gpr_ctrl_host = BMA5_ENABLE; + uint8_t limit = 10; uint8_t sensor_ctrl; - float x, y, z; + /*Structue to hold the configurations */ struct bma5_dev dev; + struct bma5_acc_conf config; struct bma530_int_map int_map = { 0 }; struct bma530_int_status_types int_status[2]; struct bma5_int_conf_types int_config[2]; @@ -80,15 +81,18 @@ int main(void) struct bma5_accel_doff user_off; struct bma5_sensor_status status; struct bma5_accel sens_data = { 0 }; + struct bma5_feat_eng_gpr_ctrl gpr_ctrl_host; /* Assign context parameter selection */ enum bma5_context context; context = BMA5_SMARTPHONE; + /*Mapping to hardware interrupt pin 1 and 2 on sensor */ int_config[0].int_src = BMA5_INT_1; int_config[1].int_src = BMA5_INT_2; + /* Variable to hold configurations related to interrupt pin */ int_status[0].int_src = BMA530_INT_STATUS_INT1; int_status[1].int_src = BMA530_INT_STATUS_INT2; @@ -99,9 +103,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the BMA5 device instance */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Get accel configurations */ rslt = bma5_get_acc_conf_0(&sensor_ctrl, &dev); @@ -113,6 +118,11 @@ int main(void) rslt = bma5_set_acc_conf_0(sensor_ctrl, &dev); bma5_check_rslt("bma5_get_acc_conf_0", rslt); + /* Get accel configurations */ + rslt = bma5_get_acc_conf_0(&sensor_ctrl, &dev); + bma5_check_rslt("bma5_get_acc_conf_0", rslt); + + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -122,39 +132,61 @@ int main(void) /* Map accel foc interrupt */ int_map.acc_foc_int_map = BMA530_ACC_FOC_INT_MAP_INT2; + /* Set the interrupt map */ rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map_0", rslt); /* Get accel configurations */ - rslt = bma5_get_acc_conf_0(&sensor_ctrl, &dev); - bma5_check_rslt("bma5_get_acc_conf_0", rslt); + rslt = bma5_get_acc_conf(&config, &dev); + bma5_check_rslt("bma5_get_acc_conf", rslt); + /* Set the accel configurations */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; + config.acc_odr = BMA5_ACC_ODR_HZ_50; + config.acc_range = BMA5_ACC_RANGE_MAX_16G; /* enable accel */ rslt = bma5_set_acc_conf_0(sensor_ctrl, &dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + /* Set the accel configurations */ + rslt = bma5_set_acc_conf(&config, &dev); + bma5_check_rslt("bma5_get_acc_conf", rslt); + + printf("\nAccel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_50)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_16G)); + /* Map hardware interrupt pin configurations */ rslt = bma5_get_int_conf(int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the hardware interrupt pin configuration */ int_config[0].int_conf.int_mode = BMA5_INT1_MODE_PULSED_LONG; int_config[0].int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config[0].int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_HIGH; int_config[1].int_conf.int_mode = BMA5_INT2_MODE_PULSED_LONG; int_config[1].int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config[1].int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config[1].int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt1 mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_PULSED_LONG)); + printf("Int1 output type : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + + printf("\nInt2 mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_LONG)); + printf("Int2 output type : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int2 level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + + printf("\nIteration count : %d\n\n", limit); printf("Reading Accel values before FOC compensation\n"); printf("\n# Count, Accel_LSB_X, Accel_LSB_Y, Accel_LSB_Z, Acc_ms2_X, Acc_ms2_Y, Acc_ms2_Z\n"); loop = 0; - while (loop < 10) + while (loop < limit) { for (;;) { @@ -168,6 +200,7 @@ int main(void) rslt = bma530_get_int_status(int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /*Checking interrupt status to check accel data ready */ if (int_status[0].int_status.acc_drdy_int_status & BMA530_ACC_DRDY_INT_STATUS_MSK) { rslt = bma5_set_sensor_status(&status, &dev); @@ -180,13 +213,13 @@ int main(void) rslt = bma5_get_acc(&sens_data, &dev); bma5_check_rslt("bma5_get_acc", rslt); - /* Converting lsb to mg for 16 bit resolution at 8G range */ - x = lsb_to_ms2(sens_data.x, (float)8, BMA5_16_BIT_RESOLUTION); - y = lsb_to_ms2(sens_data.y, (float)8, BMA5_16_BIT_RESOLUTION); - z = lsb_to_ms2(sens_data.z, (float)8, BMA5_16_BIT_RESOLUTION); + /* Converting lsb to m/s^2 for 16 bit resolution at 16G range */ + x = lsb_to_ms2(sens_data.x, (float)16, BMA5_16_BIT_RESOLUTION); + y = lsb_to_ms2(sens_data.y, (float)16, BMA5_16_BIT_RESOLUTION); + z = lsb_to_ms2(sens_data.z, (float)16, BMA5_16_BIT_RESOLUTION); - /* Print the data in mg */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", + /* Print the data in m/s^2 */ + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", loop + 1, sens_data.x, sens_data.y, @@ -202,24 +235,29 @@ int main(void) loop++; } - printf("Reading the offset values before FOC compensation\n"); + printf("\nReading the offset values before FOC compensation\n"); + /* Get the offset values */ rslt = bma5_get_acc_doff(&user_off, &dev); bma5_check_rslt("bma5_get_acc_doff", rslt); - printf("USER_OFFSET_X %d\t USER_OFFSET_Y %d\t USER_OFFSET_Z %d\n", user_off.x_doff, user_off.y_doff, - user_off.z_doff); + printf("USER_OFFSET_X: %d\n", user_off.x_doff); + printf("USER_OFFSET_Y: %d\n", user_off.y_doff); + printf("USER_OFFSET_Z: %d\n", user_off.z_doff); + /* Get the accel FOC configurations */ rslt = bma530_get_accel_foc_config(&conf, &dev); bma5_check_rslt("bma530_get_accel_foc_config", rslt); + printf("\nFOC Configurations for offset x, y and z axis:\n"); printf("foc_off_x:0x%x\n", conf.foc_off_x); printf("foc_off_y:0x%x\n", conf.foc_off_y); printf("foc_off_z:0x%x\n", conf.foc_off_z); + /* Set the accel FOC configurations */ conf.foc_apply_corr = BMA5_ENABLE; conf.foc_filter_coeff = 4; - conf.foc_axis_1g = BMA5_ACC_FOC_AXIS_Z_MINUS_1G; + conf.foc_axis_1g = BMA5_ACC_FOC_AXIS_Z_PLUS_1G; rslt = bma530_set_accel_foc_config(&conf, &dev); bma5_check_rslt("bma530_set_accel_foc_config", rslt); @@ -227,39 +265,69 @@ int main(void) rslt = bma530_get_accel_foc_config(&conf, &dev); bma5_check_rslt("bma530_get_accel_foc_config", rslt); + printf("\nFOC Configurations for FOC corelation, filter coefficient and axis of 1g\n"); printf("foc_apply_corr:0x%x\n", conf.foc_apply_corr); printf("foc_filter_coeff:0x%x\n", conf.foc_filter_coeff); printf("foc_axis_1g:0x%x\n", conf.foc_axis_1g); + /* Get the feature engine general purpose register 0 configurations */ rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable accel FOC */ gpr_0.acc_foc_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); - rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); - bma5_check_rslt("bma5_set_regs", rslt); + /* Update feature engine */ + gpr_ctrl_host.update_gprs = BMA5_ENABLE; + rslt = bma5_set_feat_eng_gpr_ctrl(&gpr_ctrl_host, &dev); + bma5_check_rslt("bma5_set_feat_eng_gpr_ctrl", rslt); + /* Get the feature engine general purpose register 0 configurations */ rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); - printf("foc en : %d\n", gpr_0.acc_foc_en); + printf("\nfoc en : %d\n", gpr_0.acc_foc_en); + if (rslt == BMA5_OK) + { + printf("Accel FOC is enabled\n"); + } + printf("\nDo not move the board to perform ACCEL FOC\n"); + + /* Clear the offset values */ + user_off.x_doff = 0; + user_off.y_doff = 0; + user_off.z_doff = 0; + + rslt = bma5_set_acc_doff(&user_off, &dev); + bma5_check_rslt("bma5_get_acc_doff", rslt); + + rslt = bma5_get_acc_doff(&user_off, &dev); + bma5_check_rslt("bma5_get_acc_doff", rslt); + + printf("\nClearing the offset values\n"); + printf("USER_OFFSET_X: %d\n", user_off.x_doff); + printf("USER_OFFSET_Y: %d\n", user_off.y_doff); + printf("USER_OFFSET_Z: %d\n", user_off.z_doff); + + /* Get the feature engine general purpose flags */ rslt = bma530_get_feat_eng_gp_flags(&gp_flags, &dev); bma5_check_rslt("bma530_get_feat_eng_gp_flags", rslt); - printf("gp_flags.feat_init_stat : %d\n", gp_flags.feat_init_stat); + printf("\ngp_flags.feat_init_stat : %d\n", gp_flags.feat_init_stat); printf("gp_flags.foc_running : %d\n", gp_flags.foc_running); - printf("\nDo not move the board to perform ACCEL FOC\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); - if (int_status[0].int_status.acc_drdy_int_status & int_status[1].int_status.acc_foc_int_status & BMA5_ENABLE) + /* Check if accel FOC interrupt occurred */ + if (int_status[1].int_status.acc_foc_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(int_status, n_status, &dev); bma5_check_rslt("bma530_set_int_status", rslt); @@ -270,11 +338,44 @@ int main(void) } } - printf("\n# Count, Accel_LSB_X, Accel_LSB_Y, Accel_LSB_Z, Acc_ms2_X, Acc_ms2_Y, Acc_ms2_Z\n"); - printf("Reading Accel values after FOC compensation\n"); + /* Get the feature engine configurations */ + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); + bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + + /* Disable accel FOC */ + gpr_0.acc_foc_en = BMA5_DISABLE; + + rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); + bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); + bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + + /* Update feature engine */ + gpr_ctrl_host.update_gprs = BMA5_ENABLE; + rslt = bma5_set_feat_eng_gpr_ctrl(&gpr_ctrl_host, &dev); + bma5_check_rslt("bma5_set_feat_eng_gpr_ctrl", rslt); + + sensor_ctrl = BMA5_SENSOR_CTRL_DISABLE; + + /* disable accel */ + rslt = bma5_set_acc_conf_0(sensor_ctrl, &dev); + bma5_check_rslt("bma5_get_acc_conf_0", rslt); + + rslt = bma5_get_acc_conf_0(&sensor_ctrl, &dev); + bma5_check_rslt("bma5_get_acc_conf_0", rslt); + + sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; + + /* Enable accel */ + rslt = bma5_set_acc_conf_0(sensor_ctrl, &dev); + bma5_check_rslt("bma5_get_acc_conf_0", rslt); + + printf("\nReading Accel values after FOC compensation\n"); + printf("# Count, Accel_LSB_X, Accel_LSB_Y, Accel_LSB_Z, Acc_ms2_X, Acc_ms2_Y, Acc_ms2_Z\n"); loop = 0; - while (loop < 10) + while (loop < limit) { for (;;) { @@ -288,6 +389,7 @@ int main(void) rslt = bma530_get_int_status(int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /*Checking interrupt status to check accel data ready */ if (int_status[0].int_status.acc_drdy_int_status & BMA530_ACC_DRDY_INT_STATUS_MSK) { rslt = bma5_set_sensor_status(&status, &dev); @@ -300,13 +402,13 @@ int main(void) rslt = bma5_get_acc(&sens_data, &dev); bma5_check_rslt("bma5_get_acc", rslt); - /* Converting lsb to mg for 16 bit resolution at 8G range */ - x = lsb_to_ms2(sens_data.x, (float)8, BMA5_16_BIT_RESOLUTION); - y = lsb_to_ms2(sens_data.y, (float)8, BMA5_16_BIT_RESOLUTION); - z = lsb_to_ms2(sens_data.z, (float)8, BMA5_16_BIT_RESOLUTION); + /* Converting lsb to m/s^2 for 16 bit resolution at 8G range */ + x = lsb_to_ms2(sens_data.x, (float)16, BMA5_16_BIT_RESOLUTION); + y = lsb_to_ms2(sens_data.y, (float)16, BMA5_16_BIT_RESOLUTION); + z = lsb_to_ms2(sens_data.z, (float)16, BMA5_16_BIT_RESOLUTION); - /* Print the data in mg */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", + /* Print the data in m/s^2 */ + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", loop + 1, sens_data.x, sens_data.y, @@ -322,13 +424,15 @@ int main(void) loop++; } - printf("Reading the offset values after FOC compensation\n"); + printf("\nReading the accel offset values after FOC compensation\n"); + /* Get the offset values */ rslt = bma5_get_acc_doff(&user_off, &dev); bma5_check_rslt("bma5_get_acc_doff", rslt); - printf("USER_OFFSET_X %d\t USER_OFFSET_Y %d\t USER_OFFSET_Z %d\n", user_off.x_doff, user_off.y_doff, - user_off.z_doff); + printf("USER_OFFSET_X: %d\n", user_off.x_doff); + printf("USER_OFFSET_Y: %d\n", user_off.y_doff); + printf("USER_OFFSET_Z: %d\n", user_off.z_doff); bma5_coines_deinit(); diff --git a/examples/accelerometer/Makefile b/examples/accelerometer/Makefile index 612875f..a48dcb2 100644 --- a/examples/accelerometer/Makefile +++ b/examples/accelerometer/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/accelerometer/accelerometer.c b/examples/accelerometer/accelerometer.c index df696c5..87750d2 100644 --- a/examples/accelerometer/accelerometer.c +++ b/examples/accelerometer/accelerometer.c @@ -66,6 +66,7 @@ int main(void) uint8_t n_conf = 1; uint8_t n_status = 1; uint8_t loop = 0; + uint8_t limit = 50; float x = 0, y = 0, z = 0; struct bma5_acc_conf acc_cfg; @@ -93,8 +94,9 @@ int main(void) rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -123,12 +125,26 @@ int main(void) rslt = bma5_set_acc_conf(&acc_cfg, &dev); bma5_check_rslt("bma5_set_acc_conf", rslt); + printf("\nAccel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_25)); + printf("BWP : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR filter : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_40)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Data ready interrupt auto clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_ENABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, &dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + /* Map hardware interrupt pin configurations */ rslt = bma5_get_int_conf(&int_config, n_conf, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); @@ -140,11 +156,14 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_conf, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); - printf("Accelerometer data in 2G range\n"); + printf("\nInterrupt configurations\n"); + printf("Int1 mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 output type : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); printf("\nCount, Accel_LSB_X, Accel_LSB_Y, Accel_LSB_Z, Acc_ms2_X, Acc_ms2_Y, Acc_ms2_Z\n"); - while (loop < 50) + while (loop < limit) { /* Get accel data ready status */ rslt = bma5_get_sensor_status(&status, &dev); @@ -156,6 +175,7 @@ int main(void) rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if the data is ready */ if (int_status.int_status.acc_drdy_int_status & BMA530_ACC_DRDY_INT_STATUS_MSK) { rslt = bma5_set_sensor_status(&status, &dev); @@ -165,7 +185,6 @@ int main(void) bma5_check_rslt("bma530_set_int_status_int1_0", rslt); /* Get accel data and sensortime */ - /* Get accel data */ rslt = bma5_get_acc(&sens_data, &dev); bma5_check_rslt("bma5_get_acc", rslt); @@ -175,7 +194,7 @@ int main(void) z = lsb_to_ms2(sens_data.z, (float)2, BMA5_16_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", loop, sens_data.x, sens_data.y, diff --git a/examples/android_generic_interrupt_1/Makefile b/examples/android_generic_interrupt_1/Makefile index 4a0d344..d3b7860 100644 --- a/examples/android_generic_interrupt_1/Makefile +++ b/examples/android_generic_interrupt_1/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/android_generic_interrupt_1/android_generic_interrupt_1.c b/examples/android_generic_interrupt_1/android_generic_interrupt_1.c index d544887..02902dc 100644 --- a/examples/android_generic_interrupt_1/android_generic_interrupt_1.c +++ b/examples/android_generic_interrupt_1/android_generic_interrupt_1.c @@ -44,6 +44,8 @@ int main(void) uint8_t n_status = 1; uint8_t android_comp, get_android_comp; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /*Structure to hold variable configurations */ struct bma530_int_map int_map; struct bma5_int_conf_types int_config; struct bma530_int_status_types int_status; @@ -51,10 +53,13 @@ int main(void) struct bma530_feat_eng_gpr_0 gpr_0; struct bma5_dev dev; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_1; + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT1; + /* Generic interrupt 1 configuration */ conf.generic_interrupt = BMA530_GEN_INT_1; /* Assign context parameter selection */ @@ -68,9 +73,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("Default configurations\n"); rslt = bma530_get_default_generic_int_config(&conf, n_ints, &dev); @@ -89,6 +95,7 @@ int main(void) printf("ref_acc_y 0x%x\n", conf.gen_int.ref_acc_y); printf("ref_acc_z 0x%x\n", conf.gen_int.ref_acc_z); + /* Set the generic interrupt 1 configuration */ conf.gen_int.slope_thres = 0xA; conf.gen_int.comb_sel = 0x0; conf.gen_int.axis_sel = 0x7; @@ -122,11 +129,17 @@ int main(void) rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 1 */ gpr_0.gen_int1_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Generic interrupt 1 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -142,6 +155,7 @@ int main(void) rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the interrupt pin configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_LOW; @@ -149,13 +163,20 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("Interrupt Configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_PULSED_SHORT)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_LOW)); + printf("Shake the board to get generic interrupt 1 interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if generic interrupt 1 interrupt occurred */ if (int_status.int_status.gen_int1_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/android_generic_interrupt_2/Makefile b/examples/android_generic_interrupt_2/Makefile index 0899683..8077c2d 100644 --- a/examples/android_generic_interrupt_2/Makefile +++ b/examples/android_generic_interrupt_2/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/android_generic_interrupt_2/android_generic_interrupt_2.c b/examples/android_generic_interrupt_2/android_generic_interrupt_2.c index 0ceb903..3a938ed 100644 --- a/examples/android_generic_interrupt_2/android_generic_interrupt_2.c +++ b/examples/android_generic_interrupt_2/android_generic_interrupt_2.c @@ -44,6 +44,8 @@ int main(void) uint8_t n_status = 1; uint8_t android_comp, get_android_comp; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /*Structure to hold variable configurations */ struct bma530_int_map int_map; struct bma5_int_conf_types int_config; struct bma530_int_status_types int_status; @@ -51,10 +53,13 @@ int main(void) struct bma530_feat_eng_gpr_0 gpr_0; struct bma5_dev dev; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_2; + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT2; + /* Generic interrupt 2 configuration */ conf.generic_interrupt = BMA530_GEN_INT_2; /* Assign context parameter selection */ @@ -68,9 +73,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("Default configurations\n"); rslt = bma530_get_default_generic_int_config(&conf, n_ints, &dev); @@ -89,6 +95,7 @@ int main(void) printf("ref_acc_y 0x%x\n", conf.gen_int.ref_acc_y); printf("ref_acc_z 0x%x\n", conf.gen_int.ref_acc_z); + /* Set the generic interrupt 2 configurations */ conf.gen_int.slope_thres = 0xA; conf.gen_int.comb_sel = 0x0; conf.gen_int.axis_sel = 0x7; @@ -122,11 +129,17 @@ int main(void) rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 2 */ gpr_0.gen_int2_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Generic interrupt 2 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -144,18 +157,25 @@ int main(void) int_config.int_conf.int_mode = BMA5_INT2_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt pin configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_SHORT)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + printf("Shake the board to get generic interrupt 2 interrupt\n"); for (;;) { + /* Check for interrupt */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if generic interrupt 2 interrupt occurred */ if (int_status.int_status.gen_int2_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/android_sig_motion/Makefile b/examples/android_sig_motion/Makefile index 1aa08fc..741b698 100644 --- a/examples/android_sig_motion/Makefile +++ b/examples/android_sig_motion/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/android_sig_motion/android_sig_motion.c b/examples/android_sig_motion/android_sig_motion.c index 521c85c..fc0e2c2 100644 --- a/examples/android_sig_motion/android_sig_motion.c +++ b/examples/android_sig_motion/android_sig_motion.c @@ -46,13 +46,18 @@ int main(void) uint8_t n_status = 1; uint8_t get_android_comp = 0; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /*Structure to hold variable configurations */ struct bma530_int_map int_map = { 0 }; struct bma5_int_conf_types int_config = { 0 }; struct bma530_sig_motion conf = { 0 }; struct bma530_feat_eng_gpr_0 gpr_0 = { 0 }; struct bma530_int_status_types int_status = { 0 }; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_2; + + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT2; /* Assign context parameter selection */ @@ -66,9 +71,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the bma530 sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); rslt = bma530_get_android_comp_mode(&android_comp, &dev); bma5_check_rslt("bma530_get_android_comp_mode", rslt); @@ -94,6 +100,7 @@ int main(void) printf("p2p_max :: 0x%x\n", conf.p2p_max); printf("p2p_min :: 0x%x\n", conf.p2p_min); + /* Set the configurations */ conf.block_size = 0xFA; conf.mcr_max = 0x11; conf.mcr_min = 0x11; @@ -102,15 +109,27 @@ int main(void) rslt = bma530_set_sig_motion_config(&conf, &dev); bma5_check_rslt("bma530_set_sig_motion_config", rslt); + printf("\nSet configurations\n\n"); + printf("block_size :: 0x%x\n", conf.block_size); + printf("mcr_max :: 0x%x\n", conf.mcr_max); + printf("mcr_min :: 0x%x\n", conf.mcr_min); + printf("p2p_max :: 0x%x\n", conf.p2p_max); + printf("p2p_min :: 0x%x\n", conf.p2p_min); rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable significant motion */ gpr_0.sig_mo_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Significant motion feature enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -128,18 +147,25 @@ int main(void) int_config.int_conf.int_mode = BMA5_INT2_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt Configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_SHORT)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + printf("\nMove the board to get significant motion interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if significant motion interrupt occurred */ if (int_status.int_status.sig_mo_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/android_tilt/Makefile b/examples/android_tilt/Makefile index 1d29b05..66ff9e2 100644 --- a/examples/android_tilt/Makefile +++ b/examples/android_tilt/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/android_tilt/android_tilt.c b/examples/android_tilt/android_tilt.c index 2cac7a0..7660adb 100644 --- a/examples/android_tilt/android_tilt.c +++ b/examples/android_tilt/android_tilt.c @@ -46,13 +46,18 @@ int main(void) uint8_t n_status = 1; uint8_t n_ints = 1; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /*Structure to hold variable configurations */ struct bma530_int_map int_map = { 0 }; struct bma5_int_conf_types int_config = { 0 }; struct bma530_tilt conf = { 0 }; struct bma530_feat_eng_gpr_0 gpr_0 = { 0 }; struct bma530_int_status_types int_status = { 0 }; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_2; + + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT2; /* Assign context parameter selection */ @@ -66,9 +71,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the bma530 sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); rslt = bma530_get_android_comp_mode(&android_comp, &dev); bma5_check_rslt("bma530_get_android_comp_mode", rslt); @@ -98,15 +104,25 @@ int main(void) rslt = bma530_set_tilt_config(&conf, &dev); bma5_check_rslt("bma530_set_tilt_config", rslt); + printf("\nTilt configurations set\n"); + printf("beta_acc_mean :: 0x%x\n", conf.beta_acc_mean); + printf("min_tilt_angle :: 0x%x\n", conf.min_tilt_angle); + printf("segment_size :: 0x%x\n", conf.segment_size); rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable tilt */ gpr_0.tilt_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Tilt feature enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -124,18 +140,25 @@ int main(void) int_config.int_conf.int_mode = BMA5_INT2_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt Configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_SHORT)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + printf("\nTilt the board to get tilt interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if tilt interrupt occurred */ if (int_status.int_status.tilt_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/common/common.h b/examples/common/common.h index c3ce0e9..ce39232 100644 --- a/examples/common/common.h +++ b/examples/common/common.h @@ -43,6 +43,14 @@ extern "C" { #include #include "bma5.h" +/******************************************************************************/ +/*! Macro definitions */ + +/*! Enum to string converter*/ +#ifndef enum_to_string +#define enum_to_string(a) #a +#endif + /***************************************************************************/ /*! User function prototypes diff --git a/examples/feature_axis_exchange/Makefile b/examples/feature_axis_exchange/Makefile index 51bf32b..9e5ecae 100644 --- a/examples/feature_axis_exchange/Makefile +++ b/examples/feature_axis_exchange/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/feature_axis_exchange/feature_axis_exchange.c b/examples/feature_axis_exchange/feature_axis_exchange.c index 5dead21..3fec908 100644 --- a/examples/feature_axis_exchange/feature_axis_exchange.c +++ b/examples/feature_axis_exchange/feature_axis_exchange.c @@ -57,6 +57,7 @@ int main(void) uint8_t n_status = 1; uint8_t gpr_ctrl_host = BMA5_ENABLE; + /*Structure to hold variable configurations */ struct bma5_dev dev; struct bma530_feat_axis conf, get_conf; struct bma530_int_map int_map = { 0 }; @@ -66,9 +67,14 @@ int main(void) struct bma530_feat_eng_gpr_0 gpr_0; struct bma5_feat_eng_status feat_eng_status; + /* Generic interrupt 1 configuration */ gen_conf.generic_interrupt = BMA530_GEN_INT_1; set_gen_conf.generic_interrupt = BMA530_GEN_INT_1; + + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT1; + + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_1; /* Assign context parameter selection */ @@ -82,13 +88,15 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); rslt = bma5_get_feat_eng_status(&feat_eng_status, &dev); bma5_check_rslt("bma5_get_feat_eng_status", rslt); + /* Print the feature engine status */ printf("feat_eng_status.feat_eng_gpr_update_pending : %d\n", feat_eng_status.feat_eng_gpr_update_pending); printf("feat_eng_status.feat_eng_halted : %d\n", feat_eng_status.feat_eng_halted); printf("feat_eng_status.feat_eng_running : %d\n", feat_eng_status.feat_eng_running); @@ -104,6 +112,7 @@ int main(void) rslt = bma530_set_feature_axis_config(&conf, &dev); bma5_check_rslt("bma530_set_feature_axis_config", rslt); + printf("Feature axis configuration set\n"); rslt = bma530_get_feature_axis_config(&get_conf, &dev); bma5_check_rslt("bma530_get_feature_axis_config", rslt); @@ -113,6 +122,7 @@ int main(void) rslt = bma530_get_generic_int_config(&gen_conf, n_ints, &dev); bma5_check_rslt("bma530_get_generic_int_config", rslt); + /* Set the generic interrupt 1 configuration */ set_gen_conf.gen_int.slope_thres = 0xA; set_gen_conf.gen_int.comb_sel = 0x0; set_gen_conf.gen_int.axis_sel = BMA530_FEAT_AXIS_EX_SEL_Z; @@ -149,10 +159,15 @@ int main(void) rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 1 */ gpr_0.gen_int1_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Generic interrupt 1 enabled\n"); + } rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -181,13 +196,20 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt pin configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + printf("\nShake the board to get generic interrupt 1 interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if generic interrupt 1 interrupt occurred */ if (int_status.int_status.gen_int1_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_ints, &dev); @@ -212,32 +234,32 @@ static void feature_axis_selection(const struct bma530_feat_axis *conf) if ((conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_DEFAULT_0) || (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_DEFAULT_6) || (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_DEFAULT_7)) { - printf("Selected axis is XYZ\n"); + printf("Selected axis : XYZ\n"); } if (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_YXZ) { - printf("Selected axis is YXZ\n"); + printf("Selected axis : YXZ\n"); } if (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_XZY) { - printf("Selected axis is XZY\n"); + printf("Selected axis : XZY\n"); } if (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_ZXY) { - printf("Selected axis is ZXY\n"); + printf("Selected axis : ZXY\n"); } if (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_YZX) { - printf("Selected axis is YZX\n"); + printf("Selected axis : YZX\n"); } if (conf->feat_axis_ex == BMA530_FEAT_AXIS_EX_ZYX) { - printf("Selected axis is ZYX\n"); + printf("Selected axis : ZYX\n"); } if (conf->feat_x_inv == BMA530_FEAT_X_INV_DEFAULT) diff --git a/examples/fifo_full_16_bit_dedicated_frame_comp_dis/Makefile b/examples/fifo_full_16_bit_dedicated_frame_comp_dis/Makefile index 70fd6b4..10d0d29 100644 --- a/examples/fifo_full_16_bit_dedicated_frame_comp_dis/Makefile +++ b/examples/fifo_full_16_bit_dedicated_frame_comp_dis/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/fifo_full_16_bit_dedicated_frame_comp_dis/fifo_full_16_bit_dedicated_frame_comp_dis.c b/examples/fifo_full_16_bit_dedicated_frame_comp_dis/fifo_full_16_bit_dedicated_frame_comp_dis.c index e01004d..c481069 100644 --- a/examples/fifo_full_16_bit_dedicated_frame_comp_dis/fifo_full_16_bit_dedicated_frame_comp_dis.c +++ b/examples/fifo_full_16_bit_dedicated_frame_comp_dis/fifo_full_16_bit_dedicated_frame_comp_dis.c @@ -134,9 +134,10 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; - enum bma5_context context; /* Assign context parameter selection */ + enum bma5_context context; + context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -146,17 +147,25 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize BMA530 sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set FIFO full interrupt to INT2 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); + if (rslt == BMA5_OK) + { + printf("FIFO full interrupt mapped to INT2\n"); + } + rslt = bma530_get_int_map(&get_int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -203,6 +212,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set INT2 as the interrupt pin */ int_config.int_src = BMA5_INT_2; /* Get accel configurations */ @@ -225,30 +235,36 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set INT2 configurations */ int_config.int_conf.int_mode = BMA5_INT2_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; @@ -256,6 +272,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt configurations\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("Int OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -272,14 +293,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_16BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_DEDICATED_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -310,13 +331,14 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data\n"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); @@ -350,7 +372,7 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_16_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", idx, fifo_accel_data[idx].x, + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, fifo_accel_data[idx].z, x, y, z); } diff --git a/examples/fifo_full_16_bit_each_frame_comp_dis/Makefile b/examples/fifo_full_16_bit_each_frame_comp_dis/Makefile index 2c9d4d7..ab19946 100644 --- a/examples/fifo_full_16_bit_each_frame_comp_dis/Makefile +++ b/examples/fifo_full_16_bit_each_frame_comp_dis/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_full_16_bit_each_frame_comp_dis/fifo_full_16_bit_each_frame_comp_dis.c b/examples/fifo_full_16_bit_each_frame_comp_dis/fifo_full_16_bit_each_frame_comp_dis.c index d585ea7..def8fb1 100644 --- a/examples/fifo_full_16_bit_each_frame_comp_dis/fifo_full_16_bit_each_frame_comp_dis.c +++ b/examples/fifo_full_16_bit_each_frame_comp_dis/fifo_full_16_bit_each_frame_comp_dis.c @@ -131,9 +131,10 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; - enum bma5_context context; /* Assign context parameter selection */ + enum bma5_context context; + context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -143,13 +144,16 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the bma530 sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set the interrupt pin to INT2 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); @@ -157,6 +161,7 @@ int main(void) rslt = bma530_get_int_map(&get_int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /*Get accel and int settings */ rslt = get_accel_and_int_settings(&dev); bma5_check_rslt("get_accel_and_int_settings", rslt); @@ -222,30 +227,36 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("No:e mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel is enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT2_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; @@ -253,6 +264,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt configurations\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("Int OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -269,14 +285,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -307,18 +323,20 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for fifo full interrupt */ if (int_status.int_status.fifo_full_int_status & BMA5_ENABLE) { printf("\n\nIteration %d\n\n", loop); @@ -348,7 +366,7 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_16_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f, %.4lf s\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f %10.4lf s\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, diff --git a/examples/fifo_full_8_bit_dedicated_frame_comp_en/Makefile b/examples/fifo_full_8_bit_dedicated_frame_comp_en/Makefile index 8f7527b..af58631 100644 --- a/examples/fifo_full_8_bit_dedicated_frame_comp_en/Makefile +++ b/examples/fifo_full_8_bit_dedicated_frame_comp_en/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_full_8_bit_dedicated_frame_comp_en/fifo_full_8_bit_dedicated_frame_comp_en.c b/examples/fifo_full_8_bit_dedicated_frame_comp_en/fifo_full_8_bit_dedicated_frame_comp_en.c index aabf9b9..3ed6fb8 100644 --- a/examples/fifo_full_8_bit_dedicated_frame_comp_en/fifo_full_8_bit_dedicated_frame_comp_en.c +++ b/examples/fifo_full_8_bit_dedicated_frame_comp_en/fifo_full_8_bit_dedicated_frame_comp_en.c @@ -135,9 +135,9 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -147,16 +147,23 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set the interrupt map */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); + if (rslt == BMA5_OK) + { + printf("FIFO full interrupt mapped to INT2\n"); + } rslt = bma530_get_int_map(&get_int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -201,6 +208,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Map interrupt pin to hardware interrupt pin of the sensor */ int_config.int_src = BMA5_INT_2; /* Get accel configurations */ @@ -223,27 +231,32 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); @@ -254,6 +267,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt2 configurations\n"); + printf("Int2 mode = %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("Int2 output type = %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int2 level = %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -270,14 +288,15 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("Fifo en : %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("Fifo x en : %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("Fifo y en : %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("Fifo z en : %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("Fifo compression en : %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("Fifo sensor time : %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_DEDICATED_FRAME)); + printf("Fifo size : %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); + printf("Fifo stop on full : %s\t\n", enum_to_string(BMA5_ENABLE)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -307,19 +326,22 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi uint8_t n_status = 1; struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; + uint8_t iteration = 3; uint16_t idx = 0; float x = 0, y = 0, z = 0; + /* Set the interrupt status */ int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for fifo full interrupt */ if (int_status.int_status.fifo_full_int_status & BMA5_ENABLE) { printf("\n\nIteration %d\n\n", loop); @@ -347,7 +369,7 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_8_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", idx, fifo_accel_data[idx].x, + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, fifo_accel_data[idx].z, x, y, z); } diff --git a/examples/fifo_full_8_bit_each_frame_comp_en/Makefile b/examples/fifo_full_8_bit_each_frame_comp_en/Makefile index 6fa974a..370f7ae 100644 --- a/examples/fifo_full_8_bit_each_frame_comp_en/Makefile +++ b/examples/fifo_full_8_bit_each_frame_comp_en/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_full_8_bit_each_frame_comp_en/fifo_full_8_bit_each_frame_comp_en.c b/examples/fifo_full_8_bit_each_frame_comp_en/fifo_full_8_bit_each_frame_comp_en.c index 2f742f8..514eede 100644 --- a/examples/fifo_full_8_bit_each_frame_comp_en/fifo_full_8_bit_each_frame_comp_en.c +++ b/examples/fifo_full_8_bit_each_frame_comp_en/fifo_full_8_bit_each_frame_comp_en.c @@ -132,9 +132,9 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -144,17 +144,25 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Enable FIFO full interrupt on INT1 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT1; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); + if (rslt == BMA5_OK) + { + printf("FIFO full interrupt enabled on INT1\n"); + } + rslt = bma530_get_int_map(&get_int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -165,6 +173,7 @@ int main(void) rslt = bma5_get_fifo_conf(&fifo_conf, &dev); bma5_check_rslt("bma5_get_fifo_conf", rslt); + /* Set FIFO configurations */ fifo_conf.fifo_cfg = BMA5_FIFO_CFG_ENABLE; fifo_conf.fifo_acc_x = BMA5_FIFO_ACC_X_ENABLE; fifo_conf.fifo_acc_y = BMA5_FIFO_ACC_Y_ENABLE; @@ -198,6 +207,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set the interrupt pin configurations */ int_config.int_src = BMA5_INT_1; /* Get accel configurations */ @@ -220,27 +230,32 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("\nAccel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); @@ -251,6 +266,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt Configurations\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + return rslt; } @@ -267,14 +287,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -304,19 +324,21 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi uint8_t n_status = 1; struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; + uint8_t iteration = 3; uint16_t idx = 0; float x = 0, y = 0, z = 0; int_status.int_src = BMA530_INT_STATUS_INT1; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if FIFO full interrupt is triggered */ if (int_status.int_status.fifo_full_int_status & BMA5_ENABLE) { printf("\n\nIteration %d\n\n", loop); @@ -345,7 +367,7 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_8_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f, %.4lf s\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f %10.4lf s\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, diff --git a/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/Makefile b/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/Makefile index 3ebef23..cd9e8a9 100644 --- a/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/Makefile +++ b/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/fifo_wm_16_bit_dedicated_frame_comp_dis.c b/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/fifo_wm_16_bit_dedicated_frame_comp_dis.c index 975c8c1..8e2630b 100644 --- a/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/fifo_wm_16_bit_dedicated_frame_comp_dis.c +++ b/examples/fifo_wm_16_bit_dedicated_frame_comp_dis/fifo_wm_16_bit_dedicated_frame_comp_dis.c @@ -149,20 +149,28 @@ int main(void) * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /*Initialize the sensor */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set FIFO full interrupt to INT2 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); + if (rslt == BMA5_OK) + { + printf("FIFO full interrupt mapped to INT2\n"); + } + rslt = bma530_get_int_map(&get_int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -176,6 +184,7 @@ int main(void) rslt = bma5_get_fifo_conf(&fifo_conf, &dev); bma5_check_rslt("bma5_get_fifo_conf", rslt); + /* Set FIFO configuration */ fifo_conf.fifo_cfg = BMA5_FIFO_CFG_ENABLE; fifo_conf.fifo_acc_x = BMA5_FIFO_ACC_X_ENABLE; fifo_conf.fifo_acc_y = BMA5_FIFO_ACC_Y_ENABLE; @@ -212,6 +221,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set interrupt configurations */ int_config.int_src = BMA5_INT_2; /* Get accel configurations */ @@ -234,30 +244,36 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("\nAccel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT2_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; @@ -265,6 +281,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt Configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("Int push-pull : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -282,13 +303,13 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ bma5_check_rslt("bma5_set_fifo_conf", rslt); printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -319,18 +340,21 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; + /* Set interrupt status */ int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for fifo full interrupt */ if (int_status.int_status.fifo_full_int_status & BMA5_ENABLE) { printf("\n\nIteration %d\n\n", loop); @@ -359,8 +383,14 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_16_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", idx, fifo_accel_data[idx].x, - fifo_accel_data[idx].y, fifo_accel_data[idx].z, x, y, z); + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f \n", + idx, + fifo_accel_data[idx].x, + fifo_accel_data[idx].y, + fifo_accel_data[idx].z, + x, + y, + z); } printf("Sensor time(in seconds) = %.4lf s", fifo_accel_data[idx].sensor_time * SENSORTIME_RESOLUTION); diff --git a/examples/fifo_wm_16_bit_each_frame_comp_dis/Makefile b/examples/fifo_wm_16_bit_each_frame_comp_dis/Makefile index 7f2cbab..b557b0a 100644 --- a/examples/fifo_wm_16_bit_each_frame_comp_dis/Makefile +++ b/examples/fifo_wm_16_bit_each_frame_comp_dis/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_wm_16_bit_each_frame_comp_dis/fifo_wm_16_bit_each_frame_comp_dis.c b/examples/fifo_wm_16_bit_each_frame_comp_dis/fifo_wm_16_bit_each_frame_comp_dis.c index c78dec7..2b5c6da 100644 --- a/examples/fifo_wm_16_bit_each_frame_comp_dis/fifo_wm_16_bit_each_frame_comp_dis.c +++ b/examples/fifo_wm_16_bit_each_frame_comp_dis/fifo_wm_16_bit_each_frame_comp_dis.c @@ -137,25 +137,28 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; - enum bma5_context context; /* Assign context parameter selection */ + enum bma5_context context; + context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set FIFO full interrupt to INT2 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); @@ -173,6 +176,7 @@ int main(void) rslt = bma5_get_fifo_conf(&fifo_conf, &dev); bma5_check_rslt("bma5_get_fifo_conf", rslt); + /* Set FIFO configuration */ fifo_conf.fifo_cfg = BMA5_FIFO_CFG_ENABLE; fifo_conf.fifo_acc_x = BMA5_FIFO_ACC_X_ENABLE; fifo_conf.fifo_acc_y = BMA5_FIFO_ACC_Y_ENABLE; @@ -209,6 +213,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set INT2 as the interrupt pin */ int_config.int_src = BMA5_INT_2; /* Get accel configurations */ @@ -231,27 +236,32 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); @@ -262,6 +272,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt Configurations\n\n"); + printf("INT2 mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("INT2 OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("INT2 level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -278,14 +293,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -316,13 +331,14 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); @@ -357,7 +373,7 @@ static int8_t get_fifo_full_16_bit_data(struct bma5_sens_fifo_axes_data_16_bit * z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_16_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f, %.4lf s\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f %10.4lf s\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, diff --git a/examples/fifo_wm_8_bit_dedicated_frame_comp_en/Makefile b/examples/fifo_wm_8_bit_dedicated_frame_comp_en/Makefile index 65e3291..ef13663 100644 --- a/examples/fifo_wm_8_bit_dedicated_frame_comp_en/Makefile +++ b/examples/fifo_wm_8_bit_dedicated_frame_comp_en/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_wm_8_bit_dedicated_frame_comp_en/fifo_wm_8_bit_dedicated_frame_comp_en.c b/examples/fifo_wm_8_bit_dedicated_frame_comp_en/fifo_wm_8_bit_dedicated_frame_comp_en.c index dc9fbea..ca7d898 100644 --- a/examples/fifo_wm_8_bit_dedicated_frame_comp_en/fifo_wm_8_bit_dedicated_frame_comp_en.c +++ b/examples/fifo_wm_8_bit_dedicated_frame_comp_en/fifo_wm_8_bit_dedicated_frame_comp_en.c @@ -141,25 +141,27 @@ int main(void) /* Set FIFO water-mark level */ uint16_t fifo_watermark_level = WATERMARK_LEVEL; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set FIFO full interrupt to INT2 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT2; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); @@ -174,6 +176,7 @@ int main(void) rslt = bma5_get_fifo_conf(&fifo_conf, &dev); bma5_check_rslt("bma5_get_fifo_conf", rslt); + /* Set FIFO configurations */ fifo_conf.fifo_cfg = BMA5_FIFO_CFG_ENABLE; fifo_conf.fifo_acc_x = BMA5_FIFO_ACC_X_ENABLE; fifo_conf.fifo_acc_y = BMA5_FIFO_ACC_Y_ENABLE; @@ -210,6 +213,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set interrupt configurations */ int_config.int_src = BMA5_INT_2; /* Get accel configurations */ @@ -232,27 +236,32 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); @@ -263,6 +272,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt configurations\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("Int OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + return rslt; } @@ -279,14 +293,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -317,13 +331,14 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; int_status.int_src = BMA530_INT_STATUS_INT2; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); @@ -356,7 +371,7 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_8_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", idx, fifo_accel_data[idx].x, + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, fifo_accel_data[idx].z, x, y, z); } diff --git a/examples/fifo_wm_8_bit_each_frame_comp_en/Makefile b/examples/fifo_wm_8_bit_each_frame_comp_en/Makefile index dd14676..aff92c5 100644 --- a/examples/fifo_wm_8_bit_each_frame_comp_en/Makefile +++ b/examples/fifo_wm_8_bit_each_frame_comp_en/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk \ No newline at end of file diff --git a/examples/fifo_wm_8_bit_each_frame_comp_en/fifo_wm_8_bit_each_frame_comp_en.c b/examples/fifo_wm_8_bit_each_frame_comp_en/fifo_wm_8_bit_each_frame_comp_en.c index 78f3510..acc6ae6 100644 --- a/examples/fifo_wm_8_bit_each_frame_comp_en/fifo_wm_8_bit_each_frame_comp_en.c +++ b/examples/fifo_wm_8_bit_each_frame_comp_en/fifo_wm_8_bit_each_frame_comp_en.c @@ -138,9 +138,9 @@ int main(void) /* Initialize FIFO frame structure */ struct bma5_fifo_frame fifoframe = { 0 }; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -150,13 +150,16 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the BMA530 device instance */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); + /* Set FIFO full interrupt to INT1 */ int_map.fifo_full_int_map = BMA530_FIFO_FULL_INT_MAP_INT1; rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); @@ -171,6 +174,7 @@ int main(void) rslt = bma5_get_fifo_conf(&fifo_conf, &dev); bma5_check_rslt("bma5_get_fifo_conf", rslt); + /* Set FIFO configurations */ fifo_conf.fifo_cfg = BMA5_FIFO_CFG_ENABLE; fifo_conf.fifo_acc_x = BMA5_FIFO_ACC_X_ENABLE; fifo_conf.fifo_acc_y = BMA5_FIFO_ACC_Y_ENABLE; @@ -207,6 +211,7 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) struct bma5_acc_conf acc_cfg, get_acc_cfg; struct bma5_int_conf_types int_config; + /* Set interrupt configurations */ int_config.int_src = BMA5_INT_1; /* Get accel configurations */ @@ -229,30 +234,36 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_acc_conf(&acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); + printf("Accel configurations\n"); + printf("ODR : %s\t\n", enum_to_string(BMA5_ACC_ODR_HZ_6K4)); + printf("Bandwidth : %s\t\n", enum_to_string(BMA5_ACC_BWP_NORM_AVG4)); + printf("Power mode : %s\t\n", enum_to_string(BMA5_POWER_MODE_HPM)); + printf("Range : %s\t\n", enum_to_string(BMA5_ACC_RANGE_MAX_2G)); + printf("IIR RO : %s\t\n", enum_to_string(BMA5_ACC_IIR_RO_DB_60)); + printf("Noise mode : %s\t\n", enum_to_string(BMA5_NOISE_MODE_LOWER_POWER)); + printf("Auto Int clear : %s\t\n", enum_to_string(BMA5_ACC_DRDY_INT_AUTO_CLEAR_DISABLED)); + /* Enable accel */ sensor_ctrl = BMA5_SENSOR_CTRL_ENABLE; rslt = bma5_set_acc_conf_0(sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nAccel is enabled\n"); + } + rslt = bma5_get_acc_conf_0(&sensor_ctrl, dev); bma5_check_rslt("bma5_set_acc_conf_0", rslt); rslt = bma5_get_acc_conf(&get_acc_cfg, dev); bma5_check_rslt("bma5_get_acc_conf", rslt); - printf("Sensor CTRL : %d\n", sensor_ctrl); - printf("ODR : %d\n", get_acc_cfg.acc_odr); - printf("BW : %d\n", get_acc_cfg.acc_bwp); - printf("Power mode : %d\n", get_acc_cfg.power_mode); - printf("Range : %d\n", get_acc_cfg.acc_range); - printf("IIR RO : %d\n", get_acc_cfg.acc_iir_ro); - printf("Noise mode : %d\n", get_acc_cfg.noise_mode); - printf("Auto Int clear : %d\n", get_acc_cfg.acc_drdy_int_auto_clear); - rslt = bma5_get_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_HIGH; @@ -260,6 +271,11 @@ static int8_t get_accel_and_int_settings(struct bma5_dev *dev) rslt = bma5_set_int_conf(&int_config, n_ints, dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInt Configurations\n\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int od : %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + return rslt; } @@ -276,14 +292,14 @@ static int8_t get_fifo_conf(const struct bma5_fifo_conf *fifo_conf, struct bma5_ rslt = bma5_set_fifo_conf(fifo_conf, dev); bma5_check_rslt("bma5_set_fifo_conf", rslt); - printf("\nSet FIFO conf\n"); - printf("fifo en %d\n", fifo_conf->fifo_cfg); - printf("fifo_x_en %d\n", fifo_conf->fifo_acc_x); - printf("fifo_y_en %d\n", fifo_conf->fifo_acc_y); - printf("fifo_z_en %d\n", fifo_conf->fifo_acc_z); - printf("fifo_compression_en %d\n", fifo_conf->fifo_compression); - printf("fifo_sensor_time %d\n", fifo_conf->fifo_sensor_time); - printf("fifo_size %d\n", fifo_conf->fifo_size); + printf("\nFIFO conf\n"); + printf("fifo en %s\t\n", enum_to_string(BMA5_FIFO_CFG_ENABLE)); + printf("fifo_x_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_X_ENABLE)); + printf("fifo_y_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Y_ENABLE)); + printf("fifo_z_en %s\t\n", enum_to_string(BMA5_FIFO_ACC_Z_ENABLE)); + printf("fifo_compression_en %s\t\n", enum_to_string(BMA5_FIFO_COMPRESSION_ACC_8BIT)); + printf("fifo_sensor_time %s\t\n", enum_to_string(BMA5_FIFO_SENSOR_TIME_EACH_FRAME)); + printf("fifo_size %s\t\n", enum_to_string(BMA5_FIFO_SIZE_MAX_512_BYTES)); /* Get FIFO configuration register */ rslt = bma5_get_fifo_conf(&read_fifo_conf, dev); @@ -314,18 +330,21 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi struct bma530_int_status_types int_status = { 0 }; uint8_t loop = 0; uint16_t idx = 0; + uint8_t iteration = 3; float x = 0, y = 0, z = 0; + /* Set interrupt status */ int_status.int_src = BMA530_INT_STATUS_INT1; - printf("Get FIFO data"); + printf("\nGet FIFO data"); - while (loop < 3) + while (loop < iteration) { /* Get fifo full interrupt 2 status */ rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if FIFO full interrupt is triggered */ if (int_status.int_status.fifo_full_int_status & BMA5_ENABLE) { printf("\n\nIteration %d\n\n", loop); @@ -354,7 +373,7 @@ static int8_t get_fifo_full_8_bit_data(struct bma5_sens_fifo_axes_data_8_bit *fi z = lsb_to_ms2(fifo_accel_data[idx].z, (float)2, BMA5_8_BIT_RESOLUTION); /* Print the data in m/s2 */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f, %.4lf s\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f %10.4lf s\n", idx, fifo_accel_data[idx].x, fifo_accel_data[idx].y, diff --git a/examples/flat/flat.c b/examples/flat/flat.c index 55f8572..4a44255 100644 --- a/examples/flat/flat.c +++ b/examples/flat/flat.c @@ -81,7 +81,7 @@ int main(void) /* Initialize the BMA5 device instance */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Updating the generic interrupt 1 and 2 configuration for face up and face down detection */ printf("Gen Int configurations\n"); @@ -128,12 +128,18 @@ int main(void) rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 1 and 2 */ gpr_0.gen_int1_en = BMA5_ENABLE; gpr_0.gen_int2_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nGeneric Interrupt 1 and 2 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -162,7 +168,16 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints_conf, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); - printf("Keep the board in Flat postion to genereate interrupt\n"); + if (rslt == BMA5_OK) + { + printf("\nHardware interrupt pin 1 configurations done\n"); + } + + printf("\nInt1 mode: %s\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 OD: %s\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 Level: %s\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + + printf("\nKeep the board in Flat position to generate interrupt\n"); for (;;) { @@ -177,7 +192,7 @@ int main(void) rslt = bma530_set_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_set_int_status", rslt); - printf("Flat orientation detected\n"); + printf("\nFlat orientation detected\n"); break; } diff --git a/examples/generic_interrupt_1/Makefile b/examples/generic_interrupt_1/Makefile index 0712942..6eaf144 100644 --- a/examples/generic_interrupt_1/Makefile +++ b/examples/generic_interrupt_1/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/generic_interrupt_1/generic_interrupt_1.c b/examples/generic_interrupt_1/generic_interrupt_1.c index 78504f8..d46bcc5 100644 --- a/examples/generic_interrupt_1/generic_interrupt_1.c +++ b/examples/generic_interrupt_1/generic_interrupt_1.c @@ -45,12 +45,22 @@ int main(void) uint8_t n_ints = 1; uint8_t n_status = 1; + /* Variable to hold interrupt mapping, mapping to hardware interrupt pin 1 on sensor */ struct bma530_int_map int_map; + + /* Variable to hold configurations related to interrupt pin 1 */ struct bma5_int_conf_types int_config; + + /* Variable to hold generic interrupt 1 configuation */ struct bma530_generic_interrupt_types conf, set_conf; + + /* Variable to store interrupt status */ struct bma530_int_status_types int_status; + + /* Variable to store Feature engine general purpose register 0 */ struct bma530_feat_eng_gpr_0 gpr_0; + /*Generic Interrupt configurations */ int_config.int_src = BMA5_INT_1; int_status.int_src = BMA530_INT_STATUS_INT1; conf.generic_interrupt = BMA530_GEN_INT_1; @@ -64,12 +74,12 @@ int main(void) * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("Default configurations\n"); rslt = bma530_get_default_generic_int_config(&conf, n_ints, &dev); @@ -88,6 +98,7 @@ int main(void) printf("ref_acc_y 0x%x\n", conf.gen_int.ref_acc_y); printf("ref_acc_z 0x%x\n", conf.gen_int.ref_acc_z); + /* Set the generic interrupt configurations */ set_conf.gen_int.slope_thres = 0xA; set_conf.gen_int.comb_sel = 0x0; set_conf.gen_int.axis_sel = 0x7; @@ -104,14 +115,34 @@ int main(void) rslt = bma530_set_generic_int_config(&set_conf, n_ints, &dev); bma5_check_rslt("bma530_set_generic_int_config", rslt); + printf("\nSet Interrupt configurations\n"); + printf("\nslope_thres 0x%x\n", set_conf.gen_int.slope_thres); + printf("comb_sel 0x%x\n", set_conf.gen_int.comb_sel); + printf("axis_sel 0x%x\n", set_conf.gen_int.axis_sel); + printf("hysteresis 0x%x\n", set_conf.gen_int.hysteresis); + printf("criterion_sel 0x%x\n", set_conf.gen_int.criterion_sel); + printf("acc_ref_up 0x%x\n", set_conf.gen_int.acc_ref_up); + printf("duration 0x%x\n", set_conf.gen_int.duration); + printf("wait_time 0x%x\n", set_conf.gen_int.wait_time); + printf("quiet_time 0x%x\n", set_conf.gen_int.quiet_time); + printf("ref_acc_x 0x%x\n", set_conf.gen_int.ref_acc_x); + printf("ref_acc_y 0x%x\n", set_conf.gen_int.ref_acc_y); + printf("ref_acc_z 0x%x\n", set_conf.gen_int.ref_acc_z); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 1 */ gpr_0.gen_int1_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nGeneric interrupt 1 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -127,6 +158,7 @@ int main(void) rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Hardware interrupt pin 1 configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_HIGH; @@ -134,19 +166,30 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); - printf("Shake the board to get generic interrupt 1 interrupt\n"); + if (rslt == BMA5_OK) + { + printf("\nHardware interrupt pin 1 configurations done\n"); + } + + printf("\nInt1 mode: %s\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 OD: %s\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 Level: %s\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + + printf("\nShake the board to get generic interrupt 1 interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for the generic interrupt 1 interrupt */ if (int_status.int_status.gen_int1_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_set_int_status", rslt); - printf("Generic interrupt 1 interrupt occurred\n"); + printf("\nGeneric interrupt 1 interrupt occurred\n"); break; } diff --git a/examples/generic_interrupt_2/Makefile b/examples/generic_interrupt_2/Makefile index 76b2b29..02499e2 100644 --- a/examples/generic_interrupt_2/Makefile +++ b/examples/generic_interrupt_2/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/generic_interrupt_2/generic_interrupt_2.c b/examples/generic_interrupt_2/generic_interrupt_2.c index 106f97c..ead1207 100644 --- a/examples/generic_interrupt_2/generic_interrupt_2.c +++ b/examples/generic_interrupt_2/generic_interrupt_2.c @@ -45,12 +45,22 @@ int main(void) uint8_t n_ints = 1; uint8_t n_status = 1; + /* Variable to hold interrupt mapping, mapping to hardware interrupt pin 1 on sensor */ struct bma530_int_map int_map; + + /* Variable to hold configurations related to interrupt pin 1 */ struct bma5_int_conf_types int_config; + + /* Variable to hold generic interrupt 2 configuration */ struct bma530_generic_interrupt_types conf, set_conf; + + /* Variable to store interrupt status */ struct bma530_int_status_types int_status; + + /* Variable to store Feature engine general purpose register 0 */ struct bma530_feat_eng_gpr_0 gpr_0; + /* Generic interrupt configurations */ int_config.int_src = BMA5_INT_2; int_status.int_src = BMA530_INT_STATUS_INT2; conf.generic_interrupt = BMA530_GEN_INT_2; @@ -69,7 +79,7 @@ int main(void) rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("Default configurations\n"); rslt = bma530_get_default_generic_int_config(&conf, n_ints, &dev); @@ -88,6 +98,7 @@ int main(void) printf("ref_acc_y 0x%x\n", conf.gen_int.ref_acc_y); printf("ref_acc_z 0x%x\n", conf.gen_int.ref_acc_z); + /* Set generic interrupt configurations */ set_conf.gen_int.slope_thres = 0xA; set_conf.gen_int.comb_sel = 0x1; set_conf.gen_int.axis_sel = 0x7; @@ -104,14 +115,34 @@ int main(void) rslt = bma530_set_generic_int_config(&set_conf, n_ints, &dev); bma5_check_rslt("bma530_set_generic_int_config", rslt); + printf("\nSet Interrupt configurations\n"); + printf("\nslope_thres 0x%x\n", set_conf.gen_int.slope_thres); + printf("comb_sel 0x%x\n", set_conf.gen_int.comb_sel); + printf("axis_sel 0x%x\n", set_conf.gen_int.axis_sel); + printf("hysteresis 0x%x\n", set_conf.gen_int.hysteresis); + printf("criterion_sel 0x%x\n", set_conf.gen_int.criterion_sel); + printf("acc_ref_up 0x%x\n", set_conf.gen_int.acc_ref_up); + printf("duration 0x%x\n", set_conf.gen_int.duration); + printf("wait_time 0x%x\n", set_conf.gen_int.wait_time); + printf("quiet_time 0x%x\n", set_conf.gen_int.quiet_time); + printf("ref_acc_x 0x%x\n", set_conf.gen_int.ref_acc_x); + printf("ref_acc_y 0x%x\n", set_conf.gen_int.ref_acc_y); + printf("ref_acc_z 0x%x\n", set_conf.gen_int.ref_acc_z); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 2 */ gpr_0.gen_int2_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nGeneric interrupt 2 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -127,6 +158,7 @@ int main(void) rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set hardware interrupt pin configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_HIGH; @@ -134,19 +166,30 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); - printf("Do not shake the board to get interrupt for generic interrupt 2\n"); + if (rslt == BMA5_OK) + { + printf("\nHardware interrupt pin 1 configurations done\n"); + } + + printf("Int1 mode: %s\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 OD: %s\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 Level: %s\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + + printf("\nDo not shake the board to get interrupt for generic interrupt 2\n"); for (;;) { + /* Get interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status_int", rslt); + /* Check if generic interrupt 2 interrupt occurred */ if (int_status.int_status.gen_int2_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_set_int_status_int", rslt); - printf("Generic interrupt 2 interrupt occurred\n"); + printf("\nGeneric interrupt 2 interrupt occurred\n"); break; } diff --git a/examples/generic_interrupt_3/Makefile b/examples/generic_interrupt_3/Makefile index 15ff58e..72a81e2 100644 --- a/examples/generic_interrupt_3/Makefile +++ b/examples/generic_interrupt_3/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/generic_interrupt_3/generic_interrupt_3.c b/examples/generic_interrupt_3/generic_interrupt_3.c index 3172cf0..bb981f0 100644 --- a/examples/generic_interrupt_3/generic_interrupt_3.c +++ b/examples/generic_interrupt_3/generic_interrupt_3.c @@ -45,12 +45,22 @@ int main(void) uint8_t n_ints = 1; uint8_t n_status = 1; + /* Variable to hold interrupt mapping, mapping to hardware interrupt pin 1 on sensor */ struct bma530_int_map int_map; + + /* Variable to hold configurations related to interrupt pin 1 */ struct bma5_int_conf_types int_config; + + /* Variable to hold generic interrupt 3 configuation */ struct bma530_generic_interrupt_types conf, set_conf; + + /* Variable to store interrupt status */ struct bma530_int_status_types int_status; + + /* Variable to store Feature engine general purpose register 0 */ struct bma530_feat_eng_gpr_0 gpr_0; + /*Generic interrupt configurations */ int_config.int_src = BMA5_INT_1; int_status.int_src = BMA530_INT_STATUS_INT1; conf.generic_interrupt = BMA530_GEN_INT_3; @@ -67,9 +77,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize BMA510 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("Default configurations\n"); rslt = bma530_get_generic_int_config(&conf, n_ints, &dev); @@ -104,17 +115,38 @@ int main(void) rslt = bma530_set_generic_int_config(&set_conf, n_ints, &dev); bma5_check_rslt("bma530_set_generic_int_config", rslt); + printf("\nSet Generic interrupt 3 configurations\n"); + printf("\nslope_thres 0x%x\n", set_conf.gen_int.slope_thres); + printf("comb_sel 0x%x\n", set_conf.gen_int.comb_sel); + printf("axis_sel 0x%x\n", set_conf.gen_int.axis_sel); + printf("hysteresis 0x%x\n", set_conf.gen_int.hysteresis); + printf("criterion_sel 0x%x\n", set_conf.gen_int.criterion_sel); + printf("acc_ref_up 0x%x\n", set_conf.gen_int.acc_ref_up); + printf("duration 0x%x\n", set_conf.gen_int.duration); + printf("wait_time 0x%x\n", set_conf.gen_int.wait_time); + printf("quiet_time 0x%x\n", set_conf.gen_int.quiet_time); + printf("ref_acc_x 0x%x\n", set_conf.gen_int.ref_acc_x); + printf("ref_acc_y 0x%x\n", set_conf.gen_int.ref_acc_y); + printf("ref_acc_z 0x%x\n", set_conf.gen_int.ref_acc_z); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable generic interrupt 3 */ gpr_0.gen_int3_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nGeneric interrupt 3 enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -134,19 +166,30 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); - printf("Drop the board to get generic interrupt 3 interrupt\n"); + if (rslt == BMA5_OK) + { + printf("\nHardware interrupt pin 1 configurations done\n"); + } + + printf("\nInt1 mode: %s\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 OD: %s\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 Level: %s\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + + printf("\nDrop the board to get generic interrupt 3 interrupt\n"); for (;;) { + /* Read the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if generic interrupt 3 interrupt occurred */ if (int_status.int_status.gen_int3_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_set_int_status", rslt); - printf("Generic interrupt 3 interrupt occurred\n"); + printf("\nGeneric interrupt 3 interrupt occurred\n"); break; } diff --git a/examples/orientation/Makefile b/examples/orientation/Makefile index b04172a..631e5b1 100644 --- a/examples/orientation/Makefile +++ b/examples/orientation/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/orientation/orientation.c b/examples/orientation/orientation.c index 74ffc1d..6310dd5 100644 --- a/examples/orientation/orientation.c +++ b/examples/orientation/orientation.c @@ -68,6 +68,7 @@ int main(void) uint8_t orientation_out = 0; uint8_t orientation_faceup_down = 0; + /* Generic interrupt configurations */ int_config.int_src = BMA5_INT_2; int_status.int_src = BMA530_INT_STATUS_INT2; @@ -79,12 +80,13 @@ int main(void) * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize BMA530 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("\nDefault configurations\n\n"); rslt = bma530_get_orient_config(&conf, &dev); @@ -98,20 +100,26 @@ int main(void) printf("theta :: 0x%x\n", conf.theta); printf("ud_en :: 0x%x\n", conf.ud_en); + /* Set configurations */ conf.hold_time = 0x5; conf.hysteresis = 0x20; conf.slope_thres = 0xCD; conf.theta = 0x27; - conf.ud_en = 1; conf.blocking = 0; conf.mode = 0; + rslt = bma530_set_orient_config(&conf, &dev); bma5_check_rslt("bma530_set_orient_config", rslt); + printf("\n\nSet configurations\n\n"); + printf("Slope threshold : 0x%x\n", conf.slope_thres); + printf("Theta : 0x%x\n", conf.theta); + printf("Hysteresis : 0x%x\n", conf.hysteresis); + printf("Hold time : 0x%x\n", conf.hold_time); printf("\n\nSet Upside down orientation detection : %d\n", conf.ud_en); - printf("Set Blocking : %d\n", conf.blocking); - printf("Set Mode : %d\n", conf.mode); + printf("Blocking : %d\n", conf.blocking); + printf("Mode : %d\n", conf.mode); rslt = bma530_get_orient_config(&get_conf, &dev); bma5_check_rslt("bma530_get_orient_config", rslt); @@ -123,11 +131,17 @@ int main(void) rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Set the orientation enable bit */ gpr_0.orient_en = 0x01; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nOrientation feature enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -145,18 +159,25 @@ int main(void) int_config.int_conf.int_mode = BMA5_INT2_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\n\nOrientation interrupt configurations\n\n"); + printf("INT_MODE : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_SHORT)); + printf("INT_OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("INT_LVL : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + printf("\nMove the board to get orientation interrupt\n"); for (;;) { + /* Get interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if orientation interrupt occurred */ if (int_status.int_status.orient_int_status & BMA5_ENABLE) { printf("\nOrientation interrupt occurred\n"); diff --git a/examples/self_test/Makefile b/examples/self_test/Makefile index d7eb5db..b08ae42 100644 --- a/examples/self_test/Makefile +++ b/examples/self_test/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/self_test/self_test.c b/examples/self_test/self_test.c index 1109a8f..98b1c70 100644 --- a/examples/self_test/self_test.c +++ b/examples/self_test/self_test.c @@ -90,18 +90,19 @@ int main(void) struct bma530_feat_eng_gpr_0 config = { 0 }; struct bma530_int_map map_config = { 0 }; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize BMA530 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); @@ -355,13 +356,15 @@ static int8_t read_accel_samples(uint8_t count, struct bma530_int_status_types int_status = { 0 }; struct bma5_accel sens_data = { 0 }; uint8_t n_status = 1; + uint8_t limit = 1; float x = 0, y = 0, z = 0; + /* Set interrupt pin 1 configurations */ int_status.int_src = BMA530_INT_STATUS_INT1; printf("\nCount, Accel_LSB_X, Accel_LSB_Y, Accel_LSB_Z, Acc_mg_X, Acc_mg_Y, Acc_mg_Z\n"); - while (count >= 1) + while (count >= limit) { /* Get accel data ready status */ rslt = bma5_get_sensor_status(&status, dev); @@ -373,6 +376,7 @@ static int8_t read_accel_samples(uint8_t count, rslt = bma530_get_int_status(&int_status, n_status, dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for accel data ready interrupt */ if (int_status.int_status.acc_drdy_int_status & BMA530_ACC_DRDY_INT_STATUS_MSK) { rslt = bma5_set_sensor_status(&status, dev); @@ -395,7 +399,7 @@ static int8_t read_accel_samples(uint8_t count, z = lsb_to_mg(sens_data.z, (float)8, BMA5_16_BIT_RESOLUTION); /* Print the data in mg */ - printf("%d, %d, %d, %d, %4.2f, %4.2f, %4.2f\n", + printf("%4d %11d %11d %11d %9.2f %9.2f %9.2f\n", count, sens_data.x, sens_data.y, diff --git a/examples/sig_motion/Makefile b/examples/sig_motion/Makefile index c4ae7d7..b30258e 100644 --- a/examples/sig_motion/Makefile +++ b/examples/sig_motion/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/sig_motion/sig_motion.c b/examples/sig_motion/sig_motion.c index 2ea3d56..2f79d42 100644 --- a/examples/sig_motion/sig_motion.c +++ b/examples/sig_motion/sig_motion.c @@ -39,18 +39,23 @@ /******************************************************************************/ int main(void) { - struct bma5_dev dev; int8_t rslt; uint8_t gpr_ctrl_host = BMA5_ENABLE; uint8_t n_ints = 1; uint8_t n_status = 1; + + /*Structue to hold the configurations */ + struct bma5_dev dev; struct bma530_int_map int_map = { 0 }; struct bma5_int_conf_types int_config = { 0 }; struct bma530_sig_motion conf = { 0 }; struct bma530_feat_eng_gpr_0 gpr_0 = { 0 }; struct bma530_int_status_types int_status = { 0 }; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_1; + + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT1; /* Assign context parameter selection */ @@ -64,9 +69,10 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the device BMA530 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("\nDefault configurations\n\n"); rslt = bma530_get_default_sig_motion_config(&conf, &dev); @@ -78,6 +84,7 @@ int main(void) printf("p2p_max :: 0x%x\n", conf.p2p_max); printf("p2p_min :: 0x%x\n", conf.p2p_min); + /* Set the configurations */ conf.block_size = 0xFA; conf.mcr_max = 0x11; conf.mcr_min = 0x11; @@ -87,17 +94,31 @@ int main(void) rslt = bma530_set_sig_motion_config(&conf, &dev); bma5_check_rslt("bma530_set_sig_motion_config", rslt); + printf("\nConfigurations set\n\n"); + printf("block_size :: 0x%x\n", conf.block_size); + printf("mcr_max :: 0x%x\n", conf.mcr_max); + printf("mcr_min :: 0x%x\n", conf.mcr_min); + printf("p2p_max :: 0x%x\n", conf.p2p_max); + printf("p2p_min :: 0x%x\n", conf.p2p_min); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable significant motion */ gpr_0.sig_mo_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nSignificant motion enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); + /* Get the interrupt mapping */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -110,6 +131,7 @@ int main(void) rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the hardware interrupt pin configuration */ int_config.int_conf.int_mode = BMA5_INT1_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_LOW; @@ -117,13 +139,20 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("\nInterrupt configurations\n"); + printf("\nINT1 Mode = %s\t\n", enum_to_string(BMA5_INT1_MODE_PULSED_SHORT)); + printf("INT1 Output type = %s\t\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("INT1 Active level = %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + printf("\nMove the board to get significant motion interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if significant motion interrupt occurred */ if (int_status.int_status.sig_mo_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/step_activity/Makefile b/examples/step_activity/Makefile index e1d4612..b3df4c6 100644 --- a/examples/step_activity/Makefile +++ b/examples/step_activity/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/step_activity/step_activity.c b/examples/step_activity/step_activity.c index 41ed5ec..4d3c309 100644 --- a/examples/step_activity/step_activity.c +++ b/examples/step_activity/step_activity.c @@ -39,11 +39,13 @@ /******************************************************************************/ int main(void) { - struct bma5_dev dev; int8_t rslt; uint16_t loop = 10; uint8_t n_ints = 1; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /*Structue to hold the configurations */ + struct bma5_dev dev; struct bma5_int_conf_types int_config = { 0 }; struct bma530_step_cntr conf = { 0 }; struct bma530_feat_eng_gpr_0 gpr_0 = { 0 }; @@ -52,6 +54,7 @@ int main(void) /* The step activities are listed in array. */ const char *activity_output[4] = { "UNKNOWN", "STILL", "WALKING", "RUNNING" }; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_1; /* Assign context parameter selection */ @@ -65,14 +68,16 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the device BMA530 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Map hardware interrupt pin configurations */ rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT1_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_HIGH; @@ -80,14 +85,29 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + if (rslt == BMA5_OK) + { + printf("Hardware interrupt pin 1 configurations done\n"); + } + + printf("Int1 mode: %s\n", enum_to_string(BMA5_INT1_MODE_LATCHED)); + printf("Int1 OD: %s\n", enum_to_string(BMA5_INT1_OD_PUSH_PULL)); + printf("Int1 Level: %s\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_HIGH)); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable step counter */ gpr_0.step_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nStep counter enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -127,6 +147,7 @@ int main(void) printf("step_duration_window :: 0x%x\n", conf.step_duration_window); printf("watermark_level :: 0x%x\n", conf.watermark_level); + /* Set the configurations */ conf.acc_mean_decay_coeff = 0xEAC8; conf.activity_detection_factor = 0x3; conf.activity_detection_thres = 0xF3C; diff --git a/examples/step_counter/Makefile b/examples/step_counter/Makefile index a6804c6..3b764eb 100644 --- a/examples/step_counter/Makefile +++ b/examples/step_counter/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/step_counter/step_counter.c b/examples/step_counter/step_counter.c index bfe0b73..acdf8ab 100644 --- a/examples/step_counter/step_counter.c +++ b/examples/step_counter/step_counter.c @@ -39,23 +39,29 @@ /******************************************************************************/ int main(void) { - struct bma5_dev dev; + int8_t rslt; uint8_t n_ints = 1; uint8_t n_status = 1; uint8_t gpr_ctrl_host = BMA5_ENABLE; + + /* Structure to hold the configurations */ + struct bma5_dev dev; struct bma530_int_map int_map = { 0 }; struct bma5_int_conf_types int_config = { 0 }; struct bma530_step_cntr conf = { 0 }; struct bma530_feat_eng_gpr_0 gpr_0 = { 0 }; struct bma530_int_status_types int_status = { 0 }; struct bma530_feat_eng_feat_out feat_out = { 0 }; - enum bma5_context context; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_2; + + /* Variable to hold configurations related to interrupt pin */ int_status.int_src = BMA530_INT_STATUS_INT2; /* Assign context parameter selection */ + enum bma5_context context; context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -65,14 +71,16 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the device BMA530 */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Map hardware interrupt pin configurations */ rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT2_MODE_LATCHED; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; @@ -80,14 +88,25 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int1_conf", rslt); + printf("\nInterrupt configurations\n"); + printf("\nINT1 Mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_LATCHED)); + printf("INT1 Output type : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("INT1 Active level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable step counter */ gpr_0.step_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nStep counter enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -165,6 +184,7 @@ int main(void) rslt = bma530_set_step_counter_config(&conf, &dev); bma5_check_rslt("bma530_set_step_counter_config", rslt); + /* Map generic interrupts to hardware interrupt pin of the sensor */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -173,6 +193,11 @@ int main(void) rslt = bma530_set_int_map(&int_map, &dev); bma5_check_rslt("bma530_set_int_map", rslt); + if (rslt == BMA5_OK) + { + printf("Step counter interrupt mapped to INT2\n"); + } + rslt = bma530_get_step_counter_config(&conf, &dev); bma5_check_rslt("bma530_get_step_counter_config", rslt); @@ -185,9 +210,11 @@ int main(void) for (;;) { + /* Check for the interrupt */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check for the step counter interrupt */ if (int_status.int_status.step_cnt_int_status & BMA5_ENABLE) { printf("Step counter interrupt occurred\n"); diff --git a/examples/step_detector/Makefile b/examples/step_detector/Makefile index 381dca1..9a3d14e 100644 --- a/examples/step_detector/Makefile +++ b/examples/step_detector/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/step_detector/step_detector.c b/examples/step_detector/step_detector.c index 2419d4a..f167057 100644 --- a/examples/step_detector/step_detector.c +++ b/examples/step_detector/step_detector.c @@ -61,17 +61,18 @@ int main(void) * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Map hardware interrupt pin configurations */ rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /*Interrupt Configurations */ int_config.int_conf.int_mode = BMA5_INT1_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT1_OD_OPEN_DRAIN; int_config.int_conf.int_lvl = BMA5_INT1_LVL_ACTIVE_LOW; @@ -79,14 +80,25 @@ int main(void) rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("Interrupt configurations\n"); + printf("\nINT1 Mode = %s\t\n", enum_to_string(BMA5_INT1_MODE_PULSED_SHORT)); + printf("INT1 Output type = %s\t\n", enum_to_string(BMA5_INT1_OD_OPEN_DRAIN)); + printf("INT1 Active level = %s\t\n", enum_to_string(BMA5_INT1_LVL_ACTIVE_LOW)); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable step counter */ gpr_0.step_en = 0x01; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("\nStep counter enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -126,6 +138,7 @@ int main(void) printf("step_duration_window :: 0x%x\n", conf.step_duration_window); printf("watermark_level :: 0x%x\n", conf.watermark_level); + /* Set step counter configurations */ conf.acc_mean_decay_coeff = 0xEAC8; conf.activity_detection_factor = 0x3; conf.activity_detection_thres = 0xF3C; @@ -161,6 +174,7 @@ int main(void) rslt = bma530_set_step_counter_config(&conf, &dev); bma5_check_rslt("bma530_set_step_counter_config", rslt); + /* Get the interrupt mapping */ rslt = bma530_get_int_map(&int_map, &dev); bma5_check_rslt("bma530_get_int_map", rslt); @@ -173,9 +187,11 @@ int main(void) for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if step detector interrupt occurred */ if (int_status.int_status.step_det_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev); diff --git a/examples/temperature/Makefile b/examples/temperature/Makefile index 6e7190d..ef4fabe 100644 --- a/examples/temperature/Makefile +++ b/examples/temperature/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/temperature/temperature.c b/examples/temperature/temperature.c index cdee376..e47dc9f 100644 --- a/examples/temperature/temperature.c +++ b/examples/temperature/temperature.c @@ -46,10 +46,11 @@ int main(void) struct bma5_sensor_status status; uint8_t temperature = 0; int8_t temp_celsius = 0; + uint8_t iteration = 50; + /* Assign context parameter selection */ enum bma5_context context; - /* Assign context parameter selection */ context = BMA5_SMARTPHONE; /* Interface reference is given as a parameter @@ -59,14 +60,16 @@ int main(void) rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); + /* Initialize the device */ rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); /* Get temperature config */ rslt = bma5_get_temp_conf(&config, &dev); bma5_check_rslt("bma5_get_temp_conf", rslt); + /* Set temperature configuration */ config.temp_rate = BMA5_TEMP_RATE_HZ_25; config.temp_meas_src = BMA5_TEMP_MEAS_SRC_TMP_INT; config.temp_ext_sel = BMA5_TEMP_EXT_SEL_INT2; @@ -75,14 +78,20 @@ int main(void) rslt = bma5_set_temp_conf(&config, &dev); bma5_check_rslt("bma5_set_temp_conf", rslt); + printf("Temperature configurations\n"); + printf("Temperature rate: %s\t\n", enum_to_string(BMA5_TEMP_RATE_HZ_25)); + printf("Temperature measurement source: %s\t\n", enum_to_string(BMA5_TEMP_MEAS_SRC_TMP_INT)); + printf("Temperature external selection: %s\t\n", enum_to_string(BMA5_TEMP_EXT_SEL_INT2)); + printf("\nCount, Temparature data\n"); - while (loop < 50) + while (loop < iteration) { /* Get temperature data ready status */ rslt = bma5_get_sensor_status(&status, &dev); bma5_check_rslt("bma5_get_sensor_status", rslt); + /* Check if temperature data is ready */ if (status.temperature_rdy & BMA5_ENABLE) { rslt = bma5_set_sensor_status(&status, &dev); diff --git a/examples/tilt/Makefile b/examples/tilt/Makefile index 24b5bdb..c3ab6b1 100644 --- a/examples/tilt/Makefile +++ b/examples/tilt/Makefile @@ -14,5 +14,5 @@ $(COMMON_LOCATION)/common/common.c INCLUDEPATHS += \ $(API_LOCATION) \ $(COMMON_LOCATION)/common - +COINES_BACKEND ?= COINES_BRIDGE include $(COINES_INSTALL_PATH)/coines.mk diff --git a/examples/tilt/tilt.c b/examples/tilt/tilt.c index 3a0a849..918895d 100644 --- a/examples/tilt/tilt.c +++ b/examples/tilt/tilt.c @@ -45,6 +45,7 @@ int main(void) uint8_t n_ints = 1; uint8_t n_status = 1; + /*Structue to hold the configurations */ struct bma530_int_map int_map = { 0 }; struct bma5_int_conf_types int_config = { 0 }; struct bma530_tilt conf = { 0 }; @@ -52,6 +53,7 @@ int main(void) struct bma530_int_status_types int_status = { 0 }; enum bma5_context context; + /* Mapping to hardware interrupt pin on sensor */ int_config.int_src = BMA5_INT_2; int_status.int_src = BMA530_INT_STATUS_INT2; @@ -62,12 +64,12 @@ int main(void) * For I2C : BMA5_I2C_INTF * For SPI : BMA5_SPI_INTF */ - rslt = bma5_interface_init(&dev, BMA5_SPI_INTF, context); + rslt = bma5_interface_init(&dev, BMA5_I2C_INTF, context); bma5_check_rslt("bma5_interface_init", rslt); rslt = bma530_init(&dev); bma5_check_rslt("bma530_init", rslt); - printf("BMA530 Chip ID is 0x%X\n", dev.chip_id); + printf("Chip ID:0x%x\n\n", dev.chip_id); printf("\nDefault configurations\n\n"); rslt = bma530_get_tilt_config(&conf, &dev); @@ -77,6 +79,7 @@ int main(void) printf("min_tilt_angle :: 0x%x\n", conf.min_tilt_angle); printf("segment_size :: 0x%x\n", conf.segment_size); + /* Set tilt configurations */ conf.beta_acc_mean = 0xf069; conf.min_tilt_angle = 0xd2; conf.segment_size = 0x64; @@ -84,14 +87,25 @@ int main(void) rslt = bma530_set_tilt_config(&conf, &dev); bma5_check_rslt("bma530_set_tilt_config", rslt); + printf("\nConfigurations after setting\n\n"); + printf("beta_acc_mean :: 0x%x\n", conf.beta_acc_mean); + printf("min_tilt_angle :: 0x%x\n", conf.min_tilt_angle); + printf("segment_size :: 0x%x\n", conf.segment_size); + rslt = bma530_get_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_get_feat_eng_gpr_0", rslt); + /* Enable tilt */ gpr_0.tilt_en = BMA5_ENABLE; rslt = bma530_set_feat_eng_gpr_0(&gpr_0, &dev); bma5_check_rslt("bma530_set_feat_eng_gpr_0", rslt); + if (rslt == BMA5_OK) + { + printf("Tilt feature enabled\n"); + } + rslt = bma5_set_regs(BMA5_REG_FEAT_ENG_GPR_CTRL, &gpr_ctrl_host, 1, &dev); bma5_check_rslt("bma5_set_regs", rslt); @@ -107,20 +121,28 @@ int main(void) rslt = bma5_get_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_get_int_conf", rslt); + /* Set the interrupt configurations */ int_config.int_conf.int_mode = BMA5_INT2_MODE_PULSED_SHORT; int_config.int_conf.int_od = BMA5_INT2_OD_PUSH_PULL; - int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_LOW; + int_config.int_conf.int_lvl = BMA5_INT2_LVL_ACTIVE_HIGH; rslt = bma5_set_int_conf(&int_config, n_ints, &dev); bma5_check_rslt("bma5_set_int_conf", rslt); + printf("Interrupt configurations\n"); + printf("Int mode : %s\t\n", enum_to_string(BMA5_INT2_MODE_PULSED_SHORT)); + printf("Int OD : %s\t\n", enum_to_string(BMA5_INT2_OD_PUSH_PULL)); + printf("Int level : %s\t\n", enum_to_string(BMA5_INT2_LVL_ACTIVE_HIGH)); + printf("\nTilt the board to get tilt interrupt\n"); for (;;) { + /* Get the interrupt status */ rslt = bma530_get_int_status(&int_status, n_status, &dev); bma5_check_rslt("bma530_get_int_status", rslt); + /* Check if tilt interrupt occurred */ if (int_status.int_status.tilt_int_status & BMA5_ENABLE) { rslt = bma530_set_int_status(&int_status, n_status, &dev);