I will break your question into parts.
How to interpret the bhy_get_wakeup_sensor_configuration return values ?
The thing to note here, is that BHI and BHA have 2 layers of software. the bhy.c and bhy.h files are a basic API that puts names on register values. The bhy_uc_driver* files are a simple driver that can be ported to any platform, including the smallest microcontrollers. the file bhy_uc_driver.h should contain all the functions that are required for the vast majority of use-cases.
The function bhy_get_wakeup_sensor_configuration is part of the API for does not use the same enums as the driver, therefore the argument VS_TYPE_ACCELEROMETER is invalid. See code excerpt from bhy.h :
/*!
* @brief API used to get the sensor wakeup configuration
* Sensor page-3 parameter 65 to 89
*
* @param v_sample_rate_u16 : contains the wakeup sample rate data
* @param v_max_report_latency_u16: contains the wakeup max report latency
* @param v_change_sensitivity_u16: contains the wakeup sensitivity
* @param v_dynamic_range_u16: contains the wakeup dynamic range
*
* @param v_parameter_request_u8: value of selected parameter request
* param_request | value | Virtual sensor
* -----------------------------------|-------|----------------
* BHY_PARAMETER_REQUEST_READ_PARAMETER_97 | 0xE1 | Accelerometer
* BHY_PARAMETER_REQUEST_READ_PARAMETER_98 | 0xE2 | Magnetometer
* BHY_PARAMETER_REQUEST_READ_PARAMETER_99 | 0xE3 | Orientation
* BHY_PARAMETER_REQUEST_READ_PARAMETER_100 | 0xE4 | Gyroscope
* BHY_PARAMETER_REQUEST_READ_PARAMETER_101 | 0xE5 | Light
* BHY_PARAMETER_REQUEST_READ_PARAMETER_102 | 0xE6 | Barometer
* BHY_PARAMETER_REQUEST_READ_PARAMETER_103 | 0xE7 | Temperature
* BHY_PARAMETER_REQUEST_READ_PARAMETER_104 | 0xE8 | Proximity
* BHY_PARAMETER_REQUEST_READ_PARAMETER_105 | 0xE9 | Gravity
* BHY_PARAMETER_REQUEST_READ_PARAMETER_106 | 0xEA | Liner accel
* BHY_PARAMETER_REQUEST_READ_PARAMETER_107 | 0xEB | Rotation vector
* BHY_PARAMETER_REQUEST_READ_PARAMETER_108 | 0xEC | Humidity
* BHY_PARAMETER_REQUEST_READ_PARAMETER_109 | 0xED | Ambient Temperature
* BHY_PARAMETER_REQUEST_READ_PARAMETER_110 | 0xEE | Uncalibrated Mag
* BHY_PARAMETER_REQUEST_READ_PARAMETER_111 | 0xEF | Game rotation Vector
* BHY_PARAMETER_REQUEST_READ_PARAMETER_112 | 0xF0 | Uncalibrated Gyro
* BHY_PARAMETER_REQUEST_READ_PARAMETER_113 | 0xF1 | Signification Motion
* BHY_PARAMETER_REQUEST_READ_PARAMETER_114 | 0xF2 | Step detector
* BHY_PARAMETER_REQUEST_READ_PARAMETER_115 | 0xF3 | Step Counter
* BHY_PARAMETER_REQUEST_READ_PARAMETER_116 | 0xF4 | Geomagnetic
* BHY_PARAMETER_REQUEST_READ_PARAMETER_117 | 0xF5 | Heart Rate
* BHY_PARAMETER_REQUEST_READ_PARAMETER_118 | 0xF6 | Tilt Detector
* BHY_PARAMETER_REQUEST_READ_PARAMETER_119 | 0xF7 | Wakeup Gesture
* BHY_PARAMETER_REQUEST_READ_PARAMETER_120 | 0xF8 | Glance Gesture
* BHY_PARAMETER_REQUEST_READ_PARAMETER_121 | 0xF9 | Pickup Gesture
* BHY_PARAMETER_REQUEST_READ_PARAMETER_127 | 0xFF | Activity
*
*
* @return results of bus communication function
* @retval 0 -> Success
* @retval -1 -> Error
*
*
*
*/
BHY_RETURN_FUNCTION_TYPE bhy_get_wakeup_sensor_configuration(
u8 v_parameter_request_u8, u16 *v_sample_rate_u16,
u16 *v_max_report_latency_u16,
u16 *v_change_sensitivity_u16, u16 *v_dynamic_range_u16);
What does the dynamic range field mean ?
@owain-incus wrote:
Wikipedia says dynamic range is ratio between smallest and largest value; surely this is not just 4. I assume for a signed short this means -32,768 to 32,767 where low limit is -2g and high limit is 2g.
I believe that you are confusing range and resolution. In the case of the acceleromter, it has possible ranges of +-2G, +-4G, +-8G or +-16. Since the range can vary it is dynamic.
Resolution on the other hand is fixed, always 16 bits. There are a total of 65536 values that are mapped to the entire range (positive and negative). For the default +-4G range, that means 65536/8 = 8196 LSB/g
@owain-incus wrote:
Again sample rate 100Hz, Dynamic range 2000; 2000 what (not g as sensor hub document says) and what does this represent. Is this 2000 degrees/second?
Thank you for finding this typo. Indeed the data for the gyroscope is in degrees/second. For the magnetometer, it is in uT.
I highly recommend that you start your development with one of our examples. The BHI160 is a sensor Hub, and unlike dumb sensors, there is a communication protocol for the data readout that must be followed.
... View more