esp32_BNO08x/include/report/BNO08xRpt.hpp

84 lines
2.9 KiB
C++
Raw Normal View History

/**
* @file BNO08xRpt.hpp
* @author Myles Parfeniuk
*/
#pragma once
// standard library includes
#include <functional>
2024-12-27 02:02:09 +00:00
// esp-idf includes
#include "esp_log.h"
// in-house includes
#include "BNO08xGlobalTypes.hpp"
#include "BNO08xPrivateTypes.hpp"
// hill-crest labs includes (apache 2.0 license, compatible with MIT)
#include "sh2.h"
#include "sh2_SensorValue.h"
#include "sh2_err.h"
/**
* @class BNO08xRpt
*
* @brief Class to represent and manage reports returned from BNO08x.
*/
class BNO08xRpt
{
public:
bool disable(sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg);
bool register_cb(std::function<void(void)> cb_fxn);
bool has_new_data();
bool flush();
uint64_t get_timestamp_us();
bool get_sample_counts(bno08x_sample_counts_t& sample_counts);
bool clear_sample_counts();
bool get_meta_data(bno08x_meta_data_t& meta_data);
virtual bool enable(
uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg) = 0;
protected:
2024-12-05 06:09:15 +00:00
uint8_t ID; ///< Report ID, ex. SH2_ACCELERATION.
EventBits_t rpt_bit; ///< Respective enable and data bit for report in evt_grp_rpt_en and evt_grp_rpt_data
uint32_t period_us; ///< The period/interval of the report in microseconds.
uint64_t time_stamp_us; ///< Timestamp sent in SHTP header, updated with each respective resport rx'd.
2024-12-05 06:09:15 +00:00
BNO08xPrivateTypes::bno08x_sync_ctx_t* sync_ctx;
bool rpt_enable(uint32_t time_between_reports, sh2_SensorConfig_t sensor_cfg = BNO08xPrivateTypes::default_sensor_cfg);
virtual void update_data(sh2_SensorValue_t* sensor_val) = 0;
void update_timestamp(sh2_SensorValue_t* sensor_val);
/**
* @brief BNO08xRpt report constructor.
*
* Construct a BNO08xRpt object for managing a BNO08x sensor report.
*
* @param imu Pointer to BNO08x imu object.
* @param report_ID Report ID, ex. SH2_ACCELERATION.
* @param rpt_bit Respective enable bit for report in BNO08x::evt_grp_report_en.
* @param period_us The period/interval of the report in microseconds.
*
* @return void, nothing to return
*/
2024-12-05 06:09:15 +00:00
BNO08xRpt(uint8_t ID, EventBits_t rpt_bit, BNO08xPrivateTypes::bno08x_sync_ctx_t* sync_ctx)
: ID(ID)
, rpt_bit(rpt_bit)
, period_us(0UL)
, time_stamp_us(0ULL)
2024-12-05 06:09:15 +00:00
, sync_ctx(sync_ctx)
{
}
void unlock_sh2_HAL();
void lock_sh2_HAL();
void unlock_user_data();
void lock_user_data();
void signal_data_available();
static const constexpr float RAD_2_DEG =
2024-12-05 06:09:15 +00:00
(180.0f / M_PI); ///< Constant for radian to degree conversions, sed in quaternion to euler function conversions.
static const constexpr char* TAG = "BNO08xRpt";
friend class BNO08x;
};