From 94f61c7ec79de21c499e12e603a2dc37e7b015ef Mon Sep 17 00:00:00 2001 From: Eiren Rain Date: Fri, 23 May 2025 18:17:30 +0200 Subject: [PATCH] Run CI for new boards with own defines (#443) * Run CI for new boards with own defines * Do not redefine board when defined from CI or other places * Move sensor defaults to the separate file too * Add comment to sensor offset * Add a way to ask for raw accel from BNO08X * Merge fix * Update from suggestions * Fix typos * Move some stuff around and apply suggestions * Fix formatting * Add defines for all other boards too * Make glove buildable * Make failed build report better --- .github/workflows/actions.yml | 1 + ci/build.py | 2 +- lib/bno080/BNO080.cpp | 11 +- lib/bno080/BNO080.h | 1 + platformio-tools.ini | 47 ++++ src/GlobalVars.h | 8 +- .../boards_default.h} | 70 ++++++ src/{ => boards}/defines_helpers.cpp | 2 +- src/{ => boards}/defines_helpers.h | 0 src/boards/glove_default.h | 140 ++++++++++++ src/defines.h | 205 ++---------------- src/globals.h | 7 +- src/sensors/SensorBuilder.cpp | 14 +- src/sensors/sensor.h | 4 + src/{ => status}/LEDManager.cpp | 4 +- src/{ => status}/LEDManager.h | 4 +- 16 files changed, 305 insertions(+), 215 deletions(-) rename src/{board_default.h => boards/boards_default.h} (52%) rename src/{ => boards}/defines_helpers.cpp (98%) rename src/{ => boards}/defines_helpers.h (100%) create mode 100644 src/boards/glove_default.h rename src/{ => status}/LEDManager.cpp (98%) rename src/{ => status}/LEDManager.h (98%) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 37510c2..cc4c40a 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -71,3 +71,4 @@ jobs: generate_release_notes: true files: | ./build/BOARD_SLIMEVR-firmware.bin + ./build/BOARD_SLIMEVR_V1_2-firmware.bin diff --git a/ci/build.py b/ci/build.py index 9cbf47a..75df6a3 100644 --- a/ci/build.py +++ b/ci/build.py @@ -95,7 +95,7 @@ def build() -> int: status = build_for_device(device) if not status: - failed_builds.append(device.platformio_board) + failed_builds.append(device.board) if len(failed_builds) > 0: print(f" 🡢 {COLOR_RED}Failed!{COLOR_RESET}") diff --git a/lib/bno080/BNO080.cpp b/lib/bno080/BNO080.cpp index e97e2a2..9a2373b 100644 --- a/lib/bno080/BNO080.cpp +++ b/lib/bno080/BNO080.cpp @@ -12,7 +12,6 @@ This library handles the initialization of the BNO080 and is able to query the sensor for different readings. - https://github.com/sparkfun/SparkFun_BNO080_Arduino_Library Development environment specifics: @@ -688,6 +687,16 @@ void BNO080::getAccel(float &x, float &y, float &z, uint8_t &accuracy) hasNewAccel_ = false; } +bool BNO080::getNewAccel(float &x, float &y, float &z, uint8_t &accuracy) +{ + if (hasNewAccel_) + { + getAccel(x, y, z, accuracy); + return true; + } + return false; +} + //Return the acceleration component float BNO080::getAccelX() { diff --git a/lib/bno080/BNO080.h b/lib/bno080/BNO080.h index eb31a99..678714b 100644 --- a/lib/bno080/BNO080.h +++ b/lib/bno080/BNO080.h @@ -214,6 +214,7 @@ public: uint8_t getQuatAccuracy(); void getAccel(float &x, float &y, float &z, uint8_t &accuracy); + bool getNewAccel(float &x, float &y, float &z, uint8_t &accuracy); float getAccelX(); float getAccelY(); float getAccelZ(); diff --git a/platformio-tools.ini b/platformio-tools.ini index f6c4239..542a710 100644 --- a/platformio-tools.ini +++ b/platformio-tools.ini @@ -17,26 +17,62 @@ build_unflags = [env:BOARD_SLIMEVR] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_SLIMEVR + +[env:BOARD_SLIMEVR_V1_2] +platform = espressif8266 @ 4.2.1 +board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_SLIMEVR_V1_2 [env:BOARD_SLIMEVR_DEV] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_SLIMEVR_DEV + +[env:BOARD_GLOVE_IMU_SLIMEVR_DEV] +platform = espressif32 @ 6.7.0 +platform_packages = + framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.1 + framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.1/esp32-arduino-libs-3.0.1.zip +build_flags = + ${env.build_flags} + -DESP32C3 + -D BOARD=BOARD_GLOVE_IMU_SLIMEVR_DEV +board = lolin_c3_mini [env:BOARD_NODEMCU] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_NODEMCU [env:BOARD_WEMOSD1MINI] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_WEMOSD1MINI [env:BOARD_TTGO_TBASE] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_TTGO_TBASE [env:BOARD_WEMOSWROOM02] platform = espressif8266 @ 4.2.1 board = esp12e +build_flags = + ${env.build_flags} + -D BOARD=BOARD_NODEMCU [env:BOARD_WROOM32] platform = espressif32 @ 6.7.0 @@ -44,6 +80,9 @@ platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.1 framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.1/esp32-arduino-libs-3.0.1.zip board = esp32dev +build_flags = + ${env.build_flags} + -D BOARD=BOARD_WROOM32 [env:BOARD_ESP01] platform = espressif32 @ 6.7.0 @@ -51,6 +90,9 @@ platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.1 framework-arduinoespressif32-libs @ https://github.com/espressif/arduino-esp32/releases/download/3.0.1/esp32-arduino-libs-3.0.1.zip board = esp32dev +build_flags = + ${env.build_flags} + -D BOARD=BOARD_ESP01 [env:BOARD_LOLIN_C3_MINI] platform = espressif32 @ 6.7.0 @@ -60,6 +102,7 @@ platform_packages = build_flags = ${env.build_flags} -DESP32C3 + -D BOARD=BOARD_LOLIN_C3_MINI board = lolin_c3_mini [env:BOARD_BEETLE32C3] @@ -70,6 +113,7 @@ platform_packages = build_flags = ${env.build_flags} -DESP32C3 + -D BOARD=BOARD_BEETLE32C3 board = dfrobot_beetle_esp32c3 [env:BOARD_ESP32C3DEVKITM1] @@ -80,6 +124,7 @@ platform_packages = build_flags = ${env.build_flags} -DESP32C3 + -D BOARD=BOARD_ESP32C3DEVKITM1 board = esp32-c3-devkitm-1 [env:BOARD_ESP32C6DEVKITC1] @@ -87,6 +132,7 @@ platform = https://github.com/tasmota/platform-espressif32/releases/download/202 build_flags = ${env.build_flags} -DESP32C6 + -D BOARD=BOARD_ESP32C6DEVKITC1 board = esp32-c6-devkitc-1 [env:BOARD_XIAO_ESP32C3] @@ -97,4 +143,5 @@ platform_packages = build_flags = ${env.build_flags} -DESP32C3 + -D BOARD=BOARD_XIAO_ESP32C3 board = seeed_xiao_esp32c3 diff --git a/src/GlobalVars.h b/src/GlobalVars.h index 1d2f191..4c7cb3c 100644 --- a/src/GlobalVars.h +++ b/src/GlobalVars.h @@ -20,18 +20,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -#ifndef GLOBALVARS_H -#define GLOBALVARS_H +#pragma once #include -#include "LEDManager.h" #include "batterymonitor.h" #include "configuration/Configuration.h" #include "network/connection.h" #include "network/manager.h" #include "sensors/SensorManager.h" +#include "status/LEDManager.h" #include "status/StatusManager.h" extern Timer<> globalTimer; @@ -42,5 +40,3 @@ extern SlimeVR::Sensors::SensorManager sensorManager; extern SlimeVR::Network::Manager networkManager; extern SlimeVR::Network::Connection networkConnection; extern BatteryMonitor battery; - -#endif diff --git a/src/board_default.h b/src/boards/boards_default.h similarity index 52% rename from src/board_default.h rename to src/boards/boards_default.h index f990f32..72fb245 100644 --- a/src/board_default.h +++ b/src/boards/boards_default.h @@ -174,3 +174,73 @@ BATTERY_R1(10) BATTERY_R2(40.2) #endif + +// Default IMU pinouts and definitions for default tracker types + +#if BOARD != BOARD_GLOVE_IMU_SLIMEVR_DEV +// Defaunlt definitions for normal 2-sensor trackers +#ifndef MAX_SENSORS_COUNT +#define MAX_SENSORS_COUNT 2 +#endif +#ifndef TRACKER_TYPE +#define TRACKER_TYPE TrackerType::TRACKER_TYPE_SVR_ROTATION +#endif + +// Axis mapping example +/* +#include "sensors/axisremap.h" +#define BMI160_QMC_REMAP AXIS_REMAP_BUILD(AXIS_REMAP_USE_Y, AXIS_REMAP_USE_XN, +AXIS_REMAP_USE_Z, \ AXIS_REMAP_USE_YN, AXIS_REMAP_USE_X, AXIS_REMAP_USE_Z) + +SENSOR_DESC_ENTRY(IMU_BMP160, PRIMARY_IMU_ADDRESS_ONE, IMU_ROTATION, PIN_IMU_SCL, +PIN_IMU_SDA, PRIMARY_IMU_OPTIONAL, BMI160_QMC_REMAP) \ +*/ + +#ifndef SENSOR_DESC_LIST +#if BOARD == BOARD_SLIMEVR_V1_2 +#define SENSOR_DESC_LIST \ + SENSOR_DESC_ENTRY( \ + IMU, \ + DIRECT_PIN(15), \ + IMU_ROTATION, \ + DIRECT_SPI(24'000'000, MSBFIRST, SPI_MODE3), \ + PRIMARY_IMU_OPTIONAL, \ + DIRECT_PIN(PIN_IMU_INT), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + SECOND_IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + SECOND_IMU_ROTATION, \ + DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ + SECONDARY_IMU_OPTIONAL, \ + DIRECT_PIN(PIN_IMU_INT_2), \ + 0 \ + ) +#else +#define SENSOR_DESC_LIST \ + SENSOR_DESC_ENTRY( \ + IMU, \ + PRIMARY_IMU_ADDRESS_ONE, \ + IMU_ROTATION, \ + DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ + PRIMARY_IMU_OPTIONAL, \ + DIRECT_PIN(PIN_IMU_INT), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + SECOND_IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + SECOND_IMU_ROTATION, \ + DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ + SECONDARY_IMU_OPTIONAL, \ + DIRECT_PIN(PIN_IMU_INT_2), \ + 0 \ + ) +#endif +#endif +#else // BOARD == BOARD_GLOVE_IMU_SLIMEVR_DEV + +#include "glove_default.h" + +#endif // BOARD != BOARD_GLOVE_IMU_SLIMEVR_DEV diff --git a/src/defines_helpers.cpp b/src/boards/defines_helpers.cpp similarity index 98% rename from src/defines_helpers.cpp rename to src/boards/defines_helpers.cpp index a8613e5..a2c5ad7 100644 --- a/src/defines_helpers.cpp +++ b/src/boards/defines_helpers.cpp @@ -23,7 +23,7 @@ #include "defines_helpers.h" -#include "consts.h" +#include "../consts.h" #ifndef LED_BUILTIN #define LED_BUILTIN LED_OFF diff --git a/src/defines_helpers.h b/src/boards/defines_helpers.h similarity index 100% rename from src/defines_helpers.h rename to src/boards/defines_helpers.h diff --git a/src/boards/glove_default.h b/src/boards/glove_default.h new file mode 100644 index 0000000..e86ffab --- /dev/null +++ b/src/boards/glove_default.h @@ -0,0 +1,140 @@ +// default definitions for the GLOVE +#ifndef MAX_SENSORS_COUNT +#define MAX_SENSORS_COUNT 10 +#endif +#ifndef TRACKER_TYPE +#define TRACKER_TYPE TrackerType::TRACKER_TYPE_SVR_GLOVE_LEFT +#endif +#ifndef GLOVE_SIDE +#define GLOVE_SIDE GLOVE_LEFT +#endif +#ifndef PRIMARY_IMU_ADDRESS_ONE +#define PRIMARY_IMU_ADDRESS_ONE 0x4a +#endif +#ifndef SECONDARY_IMU_ADDRESS_TWO +#define SECONDARY_IMU_ADDRESS_TWO 0x4b +#endif + +#ifndef SENSOR_DESC_LIST +#define SENSOR_DESC_LIST \ + SENSOR_DESC_ENTRY( \ + IMU, \ + (PRIMARY_IMU_ADDRESS_ONE ^ 0x02), \ + IMU_ROTATION, \ + DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ + false, \ + MCP_PIN(MCP_GPA6), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + (SECONDARY_IMU_ADDRESS_TWO ^ 0x02), \ + IMU_ROTATION, \ + DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ + true, \ + MCP_PIN(MCP_GPA5), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + PRIMARY_IMU_ADDRESS_ONE, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 0), \ + true, \ + MCP_PIN(MCP_GPB0), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 0), \ + true, \ + MCP_PIN(MCP_GPB1), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + PRIMARY_IMU_ADDRESS_ONE, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 1), \ + true, \ + MCP_PIN(MCP_GPB2), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 1), \ + true, \ + MCP_PIN(MCP_GPB3), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + PRIMARY_IMU_ADDRESS_ONE, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 2), \ + true, \ + MCP_PIN(MCP_GPB4), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 2), \ + true, \ + MCP_PIN(MCP_GPB5), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + PRIMARY_IMU_ADDRESS_ONE, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 3), \ + true, \ + MCP_PIN(MCP_GPB6), \ + 0 \ + ) \ + SENSOR_DESC_ENTRY( \ + IMU, \ + SECONDARY_IMU_ADDRESS_TWO, \ + IMU_ROTATION, \ + PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 3), \ + true, \ + MCP_PIN(MCP_GPA1), \ + 0 \ + ) +#endif + +#ifndef SENSOR_INFO_LIST +#if GLOVE_SIDE == GLOVE_LEFT +#define SENSOR_INFO_LIST \ + SENSOR_INFO_ENTRY(0, SensorPosition::POSITION_LEFT_HAND) \ + SENSOR_INFO_ENTRY(1, SensorPosition::POSITION_LEFT_LITTLE_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(2, SensorPosition::POSITION_LEFT_RING_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(3, SensorPosition::POSITION_LEFT_RING_DISTAL) \ + SENSOR_INFO_ENTRY(4, SensorPosition::POSITION_LEFT_MIDDLE_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(5, SensorPosition::POSITION_LEFT_MIDDLE_DISTAL) \ + SENSOR_INFO_ENTRY(6, SensorPosition::POSITION_LEFT_INDEX_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(7, SensorPosition::POSITION_LEFT_INDEX_DISTAL) \ + SENSOR_INFO_ENTRY(8, SensorPosition::POSITION_LEFT_THUMB_PROXIMAL) \ + SENSOR_INFO_ENTRY(9, SensorPosition::POSITION_LEFT_THUMB_DISTAL) +#elif GLOVE_SDIE == GLOVE_RIGHT +#define SENSOR_INFO_LIST \ + SENSOR_INFO_ENTRY(0, SensorPosition::POSITION_RIGHT_HAND) \ + SENSOR_INFO_ENTRY(1, SensorPosition::POSITION_RIGHT_LITTLE_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(2, SensorPosition::POSITION_RIGHT_RING_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(3, SensorPosition::POSITION_RIGHT_RING_DISTAL) \ + SENSOR_INFO_ENTRY(4, SensorPosition::POSITION_RIGHT_MIDDLE_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(5, SensorPosition::POSITION_RIGHT_MIDDLE_DISTAL) \ + SENSOR_INFO_ENTRY(6, SensorPosition::POSITION_RIGHT_INDEX_INTERMEDIATE) \ + SENSOR_INFO_ENTRY(7, SensorPosition::POSITION_RIGHT_INDEX_DISTAL) \ + SENSOR_INFO_ENTRY(8, SensorPosition::POSITION_RIGHT_THUMB_PROXIMAL) \ + SENSOR_INFO_ENTRY(9, SensorPosition::POSITION_RIGHT_THUMB_DISTAL) +#else // GLOVE_SIDE +#error "Glove side not defined" +#endif // GLOVE_SIDE +#endif diff --git a/src/defines.h b/src/defines.h index afb53ee..819d551 100644 --- a/src/defines.h +++ b/src/defines.h @@ -26,214 +26,41 @@ // ================================================ // Set parameters of IMU and board used +#ifndef IMU #define IMU IMU_AUTO +#endif +#ifndef SECOND_IMU #define SECOND_IMU IMU_AUTO +#endif +#ifndef BOARD #define BOARD BOARD_SLIMEVR_V1_2 +#endif +#ifndef IMU_ROTATION #define IMU_ROTATION DEG_270 +#endif +#ifndef SECOND_IMU_ROTATION #define SECOND_IMU_ROTATION DEG_270 +#endif +#ifndef PRIMARY_IMU_OPTIONAL #define PRIMARY_IMU_OPTIONAL false +#endif +#ifndef SECONDARY_IMU_OPTIONAL #define SECONDARY_IMU_OPTIONAL true +#endif -#if BOARD != BOARD_GLOVE_IMU_SLIMEVR_DEV -#define MAX_SENSORS_COUNT 2 -#define TRACKER_TYPE TrackerType::TRACKER_TYPE_SVR_ROTATION // Set I2C address here or directly in IMU_DESC_ENTRY for each IMU used // If not set, default address is used based on the IMU and Sensor ID // #define PRIMARY_IMU_ADDRESS_ONE 0x4a // #define SECONDARY_IMU_ADDRESS_TWO 0x4b -// Axis mapping example -/* -#include "sensors/axisremap.h" -#define BMI160_QMC_REMAP AXIS_REMAP_BUILD(AXIS_REMAP_USE_Y, AXIS_REMAP_USE_XN, -AXIS_REMAP_USE_Z, \ AXIS_REMAP_USE_YN, AXIS_REMAP_USE_X, AXIS_REMAP_USE_Z) - -SENSOR_DESC_ENTRY(IMU_BMP160, PRIMARY_IMU_ADDRESS_ONE, IMU_ROTATION, PIN_IMU_SCL, -PIN_IMU_SDA, PRIMARY_IMU_OPTIONAL, BMI160_QMC_REMAP) \ -*/ - -#ifndef SENSOR_DESC_LIST -#if BOARD == BOARD_SLIMEVR_V1_2 -#define SENSOR_DESC_LIST \ - SENSOR_DESC_ENTRY( \ - IMU, \ - DIRECT_PIN(15), \ - IMU_ROTATION, \ - DIRECT_SPI(24'000'000, MSBFIRST, SPI_MODE3), \ - PRIMARY_IMU_OPTIONAL, \ - DIRECT_PIN(PIN_IMU_INT), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - SECOND_IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - SECOND_IMU_ROTATION, \ - DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ - SECONDARY_IMU_OPTIONAL, \ - DIRECT_PIN(PIN_IMU_INT_2), \ - 0 \ - ) -#else -#define SENSOR_DESC_LIST \ - SENSOR_DESC_ENTRY( \ - IMU, \ - PRIMARY_IMU_ADDRESS_ONE, \ - IMU_ROTATION, \ - DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ - PRIMARY_IMU_OPTIONAL, \ - DIRECT_PIN(PIN_IMU_INT), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - SECOND_IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - SECOND_IMU_ROTATION, \ - DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ - SECONDARY_IMU_OPTIONAL, \ - DIRECT_PIN(PIN_IMU_INT_2), \ - 0 \ - ) -#endif -#endif -#else - -// Predefines for the GLOVE -#ifndef SENSOR_DESC_LIST -#define MAX_SENSORS_COUNT 10 -#define TRACKER_TYPE TrackerType::TRACKER_TYPE_SVR_GLOVE_LEFT -#define GLOVE_SIDE GLOVE_LEFT -#define PRIMARY_IMU_ADDRESS_ONE 0x4a -#define SECONDARY_IMU_ADDRESS_TWO 0x4b - -#define SENSOR_DESC_LIST \ - SENSOR_DESC_ENTRY( \ - IMU, \ - (PRIMARY_IMU_ADDRESS_ONE ^ 0x02), \ - IMU_ROTATION, \ - DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ - false, \ - MCP_PIN(MCP_GPA6), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - (SECONDARY_IMU_ADDRESS_TWO ^ 0x02), \ - IMU_ROTATION, \ - DIRECT_WIRE(PIN_IMU_SCL, PIN_IMU_SDA), \ - true, \ - MCP_PIN(MCP_GPA5), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - PRIMARY_IMU_ADDRESS_ONE, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 0), \ - true, \ - MCP_PIN(MCP_GPB0), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 0), \ - true, \ - MCP_PIN(MCP_GPB1), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - PRIMARY_IMU_ADDRESS_ONE, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 1), \ - true, \ - MCP_PIN(MCP_GPB2), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 1), \ - true, \ - MCP_PIN(MCP_GPB3), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - PRIMARY_IMU_ADDRESS_ONE, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 2), \ - true, \ - MCP_PIN(MCP_GPB4), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 2), \ - true, \ - MCP_PIN(MCP_GPB5), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - PRIMARY_IMU_ADDRESS_ONE, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 3), \ - true, \ - MCP_PIN(MCP_GPB6), \ - 0 \ - ) \ - SENSOR_DESC_ENTRY( \ - IMU, \ - SECONDARY_IMU_ADDRESS_TWO, \ - IMU_ROTATION, \ - PCA_WIRE(PIN_IMU_SCL, PIN_IMU_SDA, PCA_ADDR, 3), \ - true, \ - MCP_PIN(MCP_GPA1), \ - 0 \ - ) - -#if GLOVE_SIDE == GLOVE_LEFT -#define SENSOR_INFO_LIST \ - SENSOR_INFO_ENTRY(0, SensorPosition::POSITION_LEFT_HAND) \ - SENSOR_INFO_ENTRY(1, SensorPosition::POSITION_LEFT_LITTLE_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(2, SensorPosition::POSITION_LEFT_RING_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(3, SensorPosition::POSITION_LEFT_RING_DISTAL) \ - SENSOR_INFO_ENTRY(4, SensorPosition::POSITION_LEFT_MIDDLE_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(5, SensorPosition::POSITION_LEFT_MIDDLE_DISTAL) \ - SENSOR_INFO_ENTRY(6, SensorPosition::POSITION_LEFT_INDEX_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(7, SensorPosition::POSITION_LEFT_INDEX_DISTAL) \ - SENSOR_INFO_ENTRY(8, SensorPosition::POSITION_LEFT_THUMB_PROXIMAL) \ - SENSOR_INFO_ENTRY(9, SensorPosition::POSITION_LEFT_THUMB_DISTAL) -#elif GLOVE_SIDE == GLOVE_RIGHT -#define SENSOR_INFO_LIST \ - SENSOR_INFO_ENTRY(0, SensorPosition::POSITION_RIGHT_HAND) \ - SENSOR_INFO_ENTRY(1, SensorPosition::POSITION_RIGHT_LITTLE_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(2, SensorPosition::POSITION_RIGHT_RING_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(3, SensorPosition::POSITION_RIGHT_RING_DISTAL) \ - SENSOR_INFO_ENTRY(4, SensorPosition::POSITION_RIGHT_MIDDLE_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(5, SensorPosition::POSITION_RIGHT_MIDDLE_DISTAL) \ - SENSOR_INFO_ENTRY(6, SensorPosition::POSITION_RIGHT_INDEX_INTERMEDIATE) \ - SENSOR_INFO_ENTRY(7, SensorPosition::POSITION_RIGHT_INDEX_DISTAL) \ - SENSOR_INFO_ENTRY(8, SensorPosition::POSITION_RIGHT_THUMB_PROXIMAL) \ - SENSOR_INFO_ENTRY(9, SensorPosition::POSITION_RIGHT_THUMB_DISTAL) -#else // GLOVE_SIDE -#error "Glove side not defined" -#endif // GLOVE_SIDE - -#endif // SENSOR_DESC_LIST -#endif // BOARD != BOARD_GLOVE_IMU_SLIMEVR_DEV - +#ifndef BATTERY_MONITOR // Battery monitoring options (comment to disable): // BAT_EXTERNAL for ADC pin, // BAT_INTERNAL for internal - can detect only low battery, // BAT_MCP3021 for external ADC connected over I2C #define BATTERY_MONITOR BAT_EXTERNAL +#endif // --- OVERRIDES FOR DEFAULT PINS diff --git a/src/globals.h b/src/globals.h index 6433ee1..5f6da82 100644 --- a/src/globals.h +++ b/src/globals.h @@ -20,8 +20,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef SLIMEVR_GLOBALS_H_ -#define SLIMEVR_GLOBALS_H_ +#pragma once #include @@ -30,7 +29,7 @@ #include "defines.h" // clang-format off -#include "board_default.h" +#include "boards/boards_default.h" // clang-format on #ifndef SECOND_IMU @@ -53,5 +52,3 @@ #ifndef EXPERIMENTAL_BNO_DISABLE_ACCEL_CALIBRATION #define EXPERIMENTAL_BNO_DISABLE_ACCEL_CALIBRATION true #endif - -#endif // SLIMEVR_GLOBALS_H_ diff --git a/src/sensors/SensorBuilder.cpp b/src/sensors/SensorBuilder.cpp index 782604b..3c20e4b 100644 --- a/src/sensors/SensorBuilder.cpp +++ b/src/sensors/SensorBuilder.cpp @@ -32,6 +32,9 @@ SensorBuilder::SensorBuilder(SensorManager* sensorManager) activeSensorCount += sensorDescEntry(sensorID, __VA_ARGS__) ? 1 : 0; \ sensorID++; +#define SENSOR_INFO_ENTRY(ImuID, SensorPosition) \ + m_Manager->m_Sensors[ImuID]->setSensorInfo(SensorPosition); + uint8_t SensorBuilder::buildAllSensors() { uint8_t sensorID = 0; uint8_t activeSensorCount = 0; @@ -59,15 +62,10 @@ uint8_t SensorBuilder::buildAllSensors() { }; // Apply descriptor list and expand to entries - SENSOR_DESC_LIST; + SENSOR_DESC_LIST - [[maybe_unused]] const auto SENSOR_INFO_ENTRY - = [&](uint8_t ImuID, SensorPosition position) { - m_Manager->m_Sensors[ImuID]->setSensorInfo(position); - }; - - // Apply sensor info list - SENSOR_INFO_LIST; + // Apply sensor info list and expand to entries + SENSOR_INFO_LIST return activeSensorCount; } diff --git a/src/sensors/sensor.h b/src/sensors/sensor.h index 72102d2..616bef9 100644 --- a/src/sensors/sensor.h +++ b/src/sensors/sensor.h @@ -122,6 +122,10 @@ protected: bool working = false; bool hadData = false; uint8_t calibrationAccuracy = 0; + /** + * Apply sensor offset to align it with tracker's axises + * (Y to top of the tracker, Z to front, X to left) + */ Quat sensorOffset; bool newFusedRotation = false; diff --git a/src/LEDManager.cpp b/src/status/LEDManager.cpp similarity index 98% rename from src/LEDManager.cpp rename to src/status/LEDManager.cpp index bfdfc1b..c8a8f64 100644 --- a/src/LEDManager.cpp +++ b/src/status/LEDManager.cpp @@ -23,8 +23,8 @@ #include "LEDManager.h" -#include "GlobalVars.h" -#include "status/Status.h" +#include "../GlobalVars.h" +#include "Status.h" namespace SlimeVR { void LEDManager::setup() { diff --git a/src/LEDManager.h b/src/status/LEDManager.h similarity index 98% rename from src/LEDManager.h rename to src/status/LEDManager.h index 80a1042..9c6b1af 100644 --- a/src/LEDManager.h +++ b/src/status/LEDManager.h @@ -25,8 +25,8 @@ #include -#include "globals.h" -#include "logging/Logger.h" +#include "../globals.h" +#include "../logging/Logger.h" #define DEFAULT_LENGTH 300 #define DEFAULT_GAP 500