diff --git a/include/BNO08x.hpp b/include/BNO08x.hpp index f150b0b..768f33b 100644 --- a/include/BNO08x.hpp +++ b/include/BNO08x.hpp @@ -220,11 +220,10 @@ class BNO08x sh2_ProductIds_t product_IDs; ///< Product ID info returned IMU at initialization, can be viewed with print_product_ids() - static const constexpr uint8_t IMPLEMENTED_REPORT_COUNT = - 21; ///< Amount of report implementations that have been created, some are still missing. + static const constexpr uint8_t TOTAL_RPT_COUNT = 38; ///< Amount of possible reports returned from BNO08x. // clang-format off - etl::map> usr_reports = + etl::map> usr_reports = { {SH2_ACCELEROMETER, &accelerometer}, {SH2_LINEAR_ACCELERATION, &linear_accelerometer}, @@ -233,7 +232,8 @@ class BNO08x {SH2_MAGNETIC_FIELD_UNCALIBRATED, &uncal_magnetometer}, {SH2_GYROSCOPE_CALIBRATED, &cal_gyro}, {SH2_GYROSCOPE_UNCALIBRATED, &uncal_gyro}, - {SH2_ROTATION_VECTOR, &rv}, {SH2_GAME_ROTATION_VECTOR, &rv_game}, + {SH2_ROTATION_VECTOR, &rv}, + {SH2_GAME_ROTATION_VECTOR, &rv_game}, {SH2_ARVR_STABILIZED_RV, &rv_ARVR_stabilized}, {SH2_ARVR_STABILIZED_GRV, &rv_ARVR_stabilized_game}, {SH2_GYRO_INTEGRATED_RV, &rv_gyro_integrated}, @@ -245,7 +245,26 @@ class BNO08x {SH2_PERSONAL_ACTIVITY_CLASSIFIER, &activity_classifier}, {SH2_STABILITY_CLASSIFIER, &stability_classifier}, {SH2_SHAKE_DETECTOR, &shake_detector}, - {SH2_TAP_DETECTOR, &tap_detector}}; + {SH2_TAP_DETECTOR, &tap_detector}, + + // not implemented, see include/report for existing implementations to add your own + {SH2_PRESSURE, nullptr}, // requires auxilary i2c sensor + {SH2_AMBIENT_LIGHT, nullptr}, // requires auxilary i2c sensor + {SH2_HUMIDITY, nullptr}, // requires auxilary i2c sensor + {SH2_PROXIMITY, nullptr}, // requires auxilary i2c sensor + {SH2_TEMPERATURE, nullptr}, // requires auxilary i2c sensor + {SH2_HEART_RATE_MONITOR, nullptr}, // requires auxilary i2c sensor + {SH2_STEP_DETECTOR, nullptr}, + {SH2_SIGNIFICANT_MOTION, nullptr}, + {SH2_FLIP_DETECTOR, nullptr}, + {SH2_PICKUP_DETECTOR, nullptr}, + {SH2_STABILITY_DETECTOR, nullptr}, + {SH2_SLEEP_DETECTOR, nullptr}, + {SH2_TILT_DETECTOR, nullptr}, + {SH2_POCKET_DETECTOR, nullptr}, + {SH2_CIRCLE_DETECTOR, nullptr}, + {SH2_IZRO_MOTION_REQUEST, nullptr} + }; // clang-format on static void IRAM_ATTR hint_handler(void* arg); diff --git a/source/BNO08x.cpp b/source/BNO08x.cpp index 94bc220..6fc6578 100644 --- a/source/BNO08x.cpp +++ b/source/BNO08x.cpp @@ -324,12 +324,14 @@ void BNO08x::handle_sensor_report(sh2_SensorValue_t* sensor_val) { uint8_t rpt_ID = sensor_val->sensorId; - // check if report exists within map - auto it = usr_reports.find(rpt_ID); - if (it == usr_reports.end()) + // check if report implementation exists within map + if(rpt_ID == SH2_RESERVED) return; - auto& rpt = it->second; + auto& rpt = usr_reports.at(rpt_ID); + + if(rpt == nullptr) + return; // send report ids to cb_task for callback execution (only if this report is enabled) if (rpt->rpt_bit & xEventGroupGetBits(evt_grp_report_en)) @@ -1266,6 +1268,11 @@ esp_err_t BNO08x::re_enable_reports() for (auto entry = usr_reports.begin(); entry != usr_reports.end(); ++entry) { BNO08xRpt* rpt = entry->second; + + //all reports in map passed this point should be null + if(rpt == nullptr) + break; + if (rpt->rpt_bit & report_en_bits) { if (!rpt->enable(rpt->period_us))