diff --git a/BNO08x.cpp b/BNO08x.cpp index 4ca0c25..f5147ef 100644 --- a/BNO08x.cpp +++ b/BNO08x.cpp @@ -51,17 +51,24 @@ BNO08x::BNO08x(bno08x_config_t imu_config) // SPI non-driver-controlled GPIO config // configure outputs gpio_config_t outputs_config; - outputs_config.pin_bit_mask = (1ULL << imu_config.io_cs) | (1ULL << imu_config.io_rst) | - (1ULL << imu_config.io_wake); // configure CS, RST, and wake gpio pins + + if (imu_config.io_wake != GPIO_NUM_NC) + outputs_config.pin_bit_mask = (1ULL << imu_config.io_cs) | (1ULL << imu_config.io_rst) | + (1ULL << imu_config.io_wake); // configure CS, RST, and wake gpio pins + else + outputs_config.pin_bit_mask = (1ULL << imu_config.io_cs) | (1ULL << imu_config.io_rst); + outputs_config.mode = GPIO_MODE_OUTPUT; outputs_config.pull_down_en = GPIO_PULLDOWN_DISABLE; outputs_config.pull_up_en = GPIO_PULLUP_DISABLE; outputs_config.intr_type = GPIO_INTR_DISABLE; gpio_config(&outputs_config); gpio_set_level(imu_config.io_cs, 1); - gpio_set_level(imu_config.io_wake, 1); gpio_set_level(imu_config.io_rst, 1); + if (imu_config.io_wake != GPIO_NUM_NC) + gpio_set_level(imu_config.io_wake, 1); + // configure input (HINT pin) gpio_config_t inputs_config; inputs_config.pin_bit_mask = (1ULL << imu_config.io_int); @@ -208,7 +215,10 @@ bool BNO08x::wait_for_device_int() { */ bool BNO08x::hard_reset() { gpio_set_level(imu_config.io_cs, 1); - gpio_set_level(imu_config.io_wake, 1); + + if (imu_config.io_wake != GPIO_NUM_NC) + gpio_set_level(imu_config.io_wake, 1); + gpio_set_level(imu_config.io_rst, 0); // set reset pin low vTaskDelay(50 / portTICK_PERIOD_MS); // 10ns min, set to 50ms to let things stabilize(Anton) gpio_set_level(imu_config.io_rst, 1); // bring out of reset diff --git a/BNO08x.hpp b/BNO08x.hpp index 8f12da0..662c600 100644 --- a/BNO08x.hpp +++ b/BNO08x.hpp @@ -41,9 +41,9 @@ typedef struct bno08x_config_t { uint64_t sclk_speed; ///