Program Listing for File adis_register_definitions.h
↰ Return to documentation for file (include/adi_imu/utils/adis_register_definitions.h)
// Copyright 2025 Analog Devices, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef ADI_IMU__UTILS__ADIS_REGISTER_DEFINITIONS_H_
#define ADI_IMU__UTILS__ADIS_REGISTER_DEFINITIONS_H_
#include <cstdint>
#include <string>
#include <unordered_map>
constexpr int32_t DELTAVEL_DELTAANG_BUFFERED_DATA = 0;
constexpr int32_t ACCEL_GYRO_BUFFERED_DATA = 1;
constexpr int32_t IMU_STD_MSG_DATA = 2;
constexpr int32_t FULL_MEASURED_DATA = 3;
namespace adi_imu
{
enum adis_device_id
{
ADIS16465_1,
ADIS16465_2,
ADIS16465_3,
ADIS16467_1,
ADIS16467_2,
ADIS16467_3,
ADIS16470,
ADIS16475_1,
ADIS16475_2,
ADIS16475_3,
ADIS16477_1,
ADIS16477_2,
ADIS16477_3,
ADIS16500,
ADIS16501,
ADIS16505_1,
ADIS16505_2,
ADIS16505_3,
ADIS16507_1,
ADIS16507_2,
ADIS16507_3,
ADIS16545_1,
ADIS16545_2,
ADIS16545_3,
ADIS16547_1,
ADIS16547_2,
ADIS16547_3,
ADIS16550,
ADIS16575_2,
ADIS16575_3,
ADIS16576_2,
ADIS16576_3,
ADIS16577_2,
ADIS16577_3,
};
// Single enum for all possible registers and bits across all ADIS devices
enum class ADISRegister : uint32_t
{
// Device capabilities
FLS_MEM_ENDURANCE,
MAX_SAMP_FREQ,
HAS_DELTA_BURST,
HAS_CALIB_SCALE,
// Value to add to reg addr per page
PAGE_ID_VAL,
// Global commands
GLOB_CMD_PAGE_ID,
GLOB_CMD_ADDR_WITHOUT_PAGE,
GLOB_CMD_ADDR,
// Status and error flag indication
DIAG_STAT_PAGE_ID,
DIAG_STAT_ADDR_WITHOUT_PAGE,
DIAG_STAT_ADDR,
CRC_ERROR_POS,
// self test error flags
DIAG_STS_PAGE_ID,
DIAG_STS_REG_WITHOUT_PAGE,
DIAG_STS_REG,
GYRO_ACCEL_FAIL_REG,
GYRO_X_FAIL_POS,
GYRO_Y_FAIL_POS,
GYRO_Z_FAIL_POS,
ACCEL_X_FAIL_POS,
ACCEL_Y_FAIL_POS,
ACCEL_Z_FAIL_POS,
ADUC_MCU_FAULT_POS,
GYRO_X_FAIL,
GYRO_Y_FAIL,
GYRO_Z_FAIL,
ACCEL_X_FAIL,
ACCEL_Y_FAIL,
ACCEL_Z_FAIL,
// measurement range identifier
RANG_MDL_PAGE_ID,
RANG_MDL_ADDR_WITHOUT_PAGE,
RANG_MDL_ADDR,
// point of percussion
PT_OF_PERC_PAGE_ID,
PT_OF_PERC_REG_ADDR_WITHOUT_PAGE,
PT_OF_PERC_REG_ADDR,
PT_OF_PERC_ALGNMNT_POS,
PT_OF_PERC_ALGNMNT,
// continuous bias estimation
NULL_CNFG_PAGE_ID,
NULL_CNFG_ADDR_WITHOUT_PAGE,
NULL_CNFG_ADDR,
// Delta burst registers
DELTANG_X_LOW_REG,
DELTANG_X_OUT_REG,
DELTANG_Y_LOW_REG,
DELTANG_Y_OUT_REG,
DELTANG_Z_LOW_REG,
DELTANG_Z_OUT_REG,
DELTVEL_X_LOW_REG,
DELTVEL_X_OUT_REG,
DELTVEL_Y_LOW_REG,
DELTVEL_Y_OUT_REG,
DELTVEL_Z_LOW_REG,
DELTVEL_Z_OUT_REG,
// Register addresses
MSC_CTRL_ADDR,
// Bit positions
SNSR_INIT_FAIL_POS, // adis1657x
SNSR_FAIL_POS,
DATA_PATH_OVERRUN_POS,
FLS_MEM_UPDATE_FAIL_POS,
SPI_COMM_ERR_POS,
STDBY_MODE_POS,
MEM_FAIL_POS,
ADUC_MCU_FAULT,
CLK_ERR_POS,
WDG_TIMER_FLAG_POS,
GYRO1_FAIL_POS,
GYRO2_FAIL_POS,
ACCEL_FAIL_POS,
GYRO_MEAS_RANG_POS,
DR_POL_POS,
SYNC_POL_POS,
SENS_BW_POS,
LN_ACCL_COMP_POS,
TIME_BASE_CONTROL_POS,
X_AXIS_GYRO_BIAS_CORR_EN_POS,
Y_AXIS_GYRO_BIAS_CORR_EN_POS,
Z_AXIS_GYRO_BIAS_CORR_EN_POS,
X_AXIS_ACCEL_BIAS_CORR_EN_POS,
Y_AXIS_ACCEL_BIAS_CORR_EN_POS,
Z_AXIS_ACCEL_BIAS_CORR_EN_POS,
//
BIAS_CORRECTION_UPDATE_POS,
FACTORY_CALIBRATION_RESTORE_POS,
SENSOR_SELF_TEST_POS,
FLASH_MEMORY_UPDATE_POS,
FLASH_MEMORY_TEST_POS, // added by bogdan!!
SOFTWARE_RESET_CMD_POS,
BIAS_CORRECTION_UPDATE,
FACTORY_CALIBRATION_RESTORE,
SENSOR_SELF_TEST,
FLASH_MEMORY_UPDATE,
FLASH_MEMORY_TEST,
SOFTWARE_RESET_CMD,
// Computed bit masks
DATA_PATH_OVERRUN,
WDG_TIMER_FLAG,
FLS_MEM_UPDATE_FAIL,
SPI_COMM_ERR,
STDBY_MODE,
SNSR_INIT_FAIL, // adis1657x
SNSR_FAIL,
MEM_FAIL,
CRC_ERROR,
CLK_ERR,
GYRO1_FAIL,
GYRO2_FAIL,
ACCEL_FAIL,
GYRO_MEAS_RANG,
DR_POL,
SYNC_POL,
SENS_BW,
LN_ACCL_COMP,
TIME_BASE_CONTROL,
X_AXIS_GYRO_BIAS_CORR_EN,
Y_AXIS_GYRO_BIAS_CORR_EN,
Z_AXIS_GYRO_BIAS_CORR_EN,
X_AXIS_ACCEL_BIAS_CORR_EN,
Y_AXIS_ACCEL_BIAS_CORR_EN,
Z_AXIS_ACCEL_BIAS_CORR_EN,
};
const std::unordered_map<ADISRegister, std::string> registerNames = {
// Device capabilities
{ADISRegister::FLS_MEM_ENDURANCE, "FLS_MEM_ENDURANCE"},
{ADISRegister::MAX_SAMP_FREQ, "MAX_SAMP_FREQ"},
{ADISRegister::HAS_DELTA_BURST, "HAS_DELTA_BURST"},
{ADISRegister::HAS_CALIB_SCALE, "HAS_CALIB_SCALE"},
// Value to add to reg addr per page
{ADISRegister::PAGE_ID_VAL, "PAGE_ID_VAL"},
// Global commands
{ADISRegister::GLOB_CMD_PAGE_ID, "GLOB_CMD_PAGE_ID"},
{ADISRegister::GLOB_CMD_ADDR_WITHOUT_PAGE, "GLOB_CMD_ADDR_WITHOUT_PAGE"},
{ADISRegister::GLOB_CMD_ADDR, "GLOB_CMD_ADDR"},
// Status and error flag indication
{ADISRegister::DIAG_STAT_PAGE_ID, "DIAG_STAT_PAGE_ID"},
{ADISRegister::DIAG_STAT_ADDR_WITHOUT_PAGE, "DIAG_STAT_ADDR_WITHOUT_PAGE"},
{ADISRegister::DIAG_STAT_ADDR, "DIAG_STAT_ADDR"},
{ADISRegister::CRC_ERROR_POS, "CRC_ERROR_POS"},
// Self test error flags
{ADISRegister::DIAG_STS_PAGE_ID, "DIAG_STS_PAGE_ID"},
{ADISRegister::DIAG_STS_REG_WITHOUT_PAGE, "DIAG_STS_REG_WITHOUT_PAGE"},
{ADISRegister::DIAG_STS_REG, "DIAG_STS_REG"},
{ADISRegister::GYRO_ACCEL_FAIL_REG, "GYRO_ACCEL_FAIL_REG"},
{ADISRegister::GYRO_X_FAIL_POS, "GYRO_X_FAIL_POS"},
{ADISRegister::GYRO_Y_FAIL_POS, "GYRO_Y_FAIL_POS"},
{ADISRegister::GYRO_Z_FAIL_POS, "GYRO_Z_FAIL_POS"},
{ADISRegister::ACCEL_X_FAIL_POS, "ACCEL_X_FAIL_POS"},
{ADISRegister::ACCEL_Y_FAIL_POS, "ACCEL_Y_FAIL_POS"},
{ADISRegister::ACCEL_Z_FAIL_POS, "ACCEL_Z_FAIL_POS"},
{ADISRegister::ADUC_MCU_FAULT_POS, "ADUC_MCU_FAULT_POS"},
// Computed sensor failure bits
{ADISRegister::GYRO_X_FAIL, "GYRO_X_FAIL"},
{ADISRegister::GYRO_Y_FAIL, "GYRO_Y_FAIL"},
{ADISRegister::GYRO_Z_FAIL, "GYRO_Z_FAIL"},
{ADISRegister::ACCEL_X_FAIL, "ACCEL_X_FAIL"},
{ADISRegister::ACCEL_Y_FAIL, "ACCEL_Y_FAIL"},
{ADISRegister::ACCEL_Z_FAIL, "ACCEL_Z_FAIL"},
// Measurement range identifier
{ADISRegister::RANG_MDL_PAGE_ID, "RANG_MDL_PAGE_ID"},
{ADISRegister::RANG_MDL_ADDR_WITHOUT_PAGE, "RANG_MDL_ADDR_WITHOUT_PAGE"},
{ADISRegister::RANG_MDL_ADDR, "RANG_MDL_ADDR"},
// Point of percussion
{ADISRegister::PT_OF_PERC_PAGE_ID, "PT_OF_PERC_PAGE_ID"},
{ADISRegister::PT_OF_PERC_REG_ADDR_WITHOUT_PAGE, "PT_OF_PERC_REG_ADDR_WITHOUT_PAGE"},
{ADISRegister::PT_OF_PERC_REG_ADDR, "PT_OF_PERC_REG_ADDR"},
{ADISRegister::PT_OF_PERC_ALGNMNT_POS, "PT_OF_PERC_ALGNMNT_POS"},
{ADISRegister::PT_OF_PERC_ALGNMNT, "PT_OF_PERC_ALGNMNT"},
// Continuous bias estimation
{ADISRegister::NULL_CNFG_PAGE_ID, "NULL_CNFG_PAGE_ID"},
{ADISRegister::NULL_CNFG_ADDR_WITHOUT_PAGE, "NULL_CNFG_ADDR_WITHOUT_PAGE"},
{ADISRegister::NULL_CNFG_ADDR, "NULL_CNFG_ADDR"},
// Delta burst registers
{ADISRegister::DELTANG_X_LOW_REG, "DELTANG_X_LOW_REG"},
{ADISRegister::DELTANG_X_OUT_REG, "DELTANG_X_OUT_REG"},
{ADISRegister::DELTANG_Y_LOW_REG, "DELTANG_Y_LOW_REG"},
{ADISRegister::DELTANG_Y_OUT_REG, "DELTANG_Y_OUT_REG"},
{ADISRegister::DELTANG_Z_LOW_REG, "DELTANG_Z_LOW_REG"},
{ADISRegister::DELTANG_Z_OUT_REG, "DELTANG_Z_OUT_REG"},
{ADISRegister::DELTVEL_X_LOW_REG, "DELTVEL_X_LOW_REG"},
{ADISRegister::DELTVEL_X_OUT_REG, "DELTVEL_X_OUT_REG"},
{ADISRegister::DELTVEL_Y_LOW_REG, "DELTVEL_Y_LOW_REG"},
{ADISRegister::DELTVEL_Y_OUT_REG, "DELTVEL_Y_OUT_REG"},
{ADISRegister::DELTVEL_Z_LOW_REG, "DELTVEL_Z_LOW_REG"},
{ADISRegister::DELTVEL_Z_OUT_REG, "DELTVEL_Z_OUT_REG"},
// Register addresses
{ADISRegister::MSC_CTRL_ADDR, "MSC_CTRL_ADDR"},
// Bit positions
{ADISRegister::SNSR_INIT_FAIL_POS, "SNSR_INIT_FAIL_POS"},
{ADISRegister::DATA_PATH_OVERRUN_POS, "DATA_PATH_OVERRUN_POS"},
{ADISRegister::FLS_MEM_UPDATE_FAIL_POS, "FLS_MEM_UPDATE_FAIL_POS"},
{ADISRegister::SPI_COMM_ERR_POS, "SPI_COMM_ERR_POS"},
{ADISRegister::STDBY_MODE_POS, "STDBY_MODE_POS"},
{ADISRegister::SNSR_FAIL_POS, "SNSR_FAIL_POS"},
{ADISRegister::MEM_FAIL_POS, "MEM_FAIL_POS"},
{ADISRegister::ADUC_MCU_FAULT, "ADUC_MCU_FAULT"},
{ADISRegister::CLK_ERR_POS, "CLK_ERR_POS"},
{ADISRegister::WDG_TIMER_FLAG_POS, "WDG_TIMER_FLAG_POS"},
{ADISRegister::GYRO1_FAIL_POS, "GYRO1_FAIL_POS"},
{ADISRegister::GYRO2_FAIL_POS, "GYRO2_FAIL_POS"},
{ADISRegister::ACCEL_FAIL_POS, "ACCEL_FAIL_POS"},
{ADISRegister::GYRO_MEAS_RANG_POS, "GYRO_MEAS_RANG_POS"},
{ADISRegister::DR_POL_POS, "DR_POL_POS"},
{ADISRegister::SYNC_POL_POS, "SYNC_POL_POS"},
{ADISRegister::SENS_BW_POS, "SENS_BW_POS"},
{ADISRegister::LN_ACCL_COMP_POS, "LN_ACCL_COMP_POS"},
{ADISRegister::TIME_BASE_CONTROL_POS, "TIME_BASE_CONTROL_POS"},
{ADISRegister::X_AXIS_GYRO_BIAS_CORR_EN_POS, "X_AXIS_GYRO_BIAS_CORR_EN_POS"},
{ADISRegister::Y_AXIS_GYRO_BIAS_CORR_EN_POS, "Y_AXIS_GYRO_BIAS_CORR_EN_POS"},
{ADISRegister::Z_AXIS_GYRO_BIAS_CORR_EN_POS, "Z_AXIS_GYRO_BIAS_CORR_EN_POS"},
{ADISRegister::X_AXIS_ACCEL_BIAS_CORR_EN_POS, "X_AXIS_ACCEL_BIAS_CORR_EN_POS"},
{ADISRegister::Y_AXIS_ACCEL_BIAS_CORR_EN_POS, "Y_AXIS_ACCEL_BIAS_CORR_EN_POS"},
{ADISRegister::Z_AXIS_ACCEL_BIAS_CORR_EN_POS, "Z_AXIS_ACCEL_BIAS_CORR_EN_POS"},
// Global command bit positions
{ADISRegister::BIAS_CORRECTION_UPDATE_POS, "BIAS_CORRECTION_UPDATE_POS"},
{ADISRegister::FACTORY_CALIBRATION_RESTORE_POS, "FACTORY_CALIBRATION_RESTORE_POS"},
{ADISRegister::SENSOR_SELF_TEST_POS, "SENSOR_SELF_TEST_POS"},
{ADISRegister::FLASH_MEMORY_UPDATE_POS, "FLASH_MEMORY_UPDATE_POS"},
{ADISRegister::FLASH_MEMORY_TEST_POS, "FLASH_MEMORY_TEST_POS"},
{ADISRegister::SOFTWARE_RESET_CMD_POS, "SOFTWARE_RESET_CMD_POS"},
// Global command computed bit masks
{ADISRegister::BIAS_CORRECTION_UPDATE, "BIAS_CORRECTION_UPDATE"},
{ADISRegister::FACTORY_CALIBRATION_RESTORE, "FACTORY_CALIBRATION_RESTORE"},
{ADISRegister::SENSOR_SELF_TEST, "SENSOR_SELF_TEST"},
{ADISRegister::FLASH_MEMORY_UPDATE, "FLASH_MEMORY_UPDATE"},
{ADISRegister::FLASH_MEMORY_TEST, "FLASH_MEMORY_TEST"},
{ADISRegister::SOFTWARE_RESET_CMD, "SOFTWARE_RESET_CMD"},
// Computed bit masks
{ADISRegister::DATA_PATH_OVERRUN, "DATA_PATH_OVERRUN"},
{ADISRegister::WDG_TIMER_FLAG, "WDG_TIMER_FLAG"},
{ADISRegister::FLS_MEM_UPDATE_FAIL, "FLS_MEM_UPDATE_FAIL"},
{ADISRegister::SPI_COMM_ERR, "SPI_COMM_ERR"},
{ADISRegister::STDBY_MODE, "STDBY_MODE"},
{ADISRegister::SNSR_FAIL, "SNSR_FAIL"},
{ADISRegister::MEM_FAIL, "MEM_FAIL"},
{ADISRegister::CRC_ERROR, "CRC_ERROR"},
{ADISRegister::CLK_ERR, "CLK_ERR"},
{ADISRegister::GYRO1_FAIL, "GYRO1_FAIL"},
{ADISRegister::GYRO2_FAIL, "GYRO2_FAIL"},
{ADISRegister::ACCEL_FAIL, "ACCEL_FAIL"},
{ADISRegister::GYRO_MEAS_RANG, "GYRO_MEAS_RANG"},
{ADISRegister::DR_POL, "DR_POL"},
{ADISRegister::SYNC_POL, "SYNC_POL"},
{ADISRegister::SENS_BW, "SENS_BW"},
{ADISRegister::LN_ACCL_COMP, "LN_ACCL_COMP"},
{ADISRegister::TIME_BASE_CONTROL, "TIME_BASE_CONTROL"},
{ADISRegister::X_AXIS_GYRO_BIAS_CORR_EN, "X_AXIS_GYRO_BIAS_CORR_EN"},
{ADISRegister::Y_AXIS_GYRO_BIAS_CORR_EN, "Y_AXIS_GYRO_BIAS_CORR_EN"},
{ADISRegister::Z_AXIS_GYRO_BIAS_CORR_EN, "Z_AXIS_GYRO_BIAS_CORR_EN"},
{ADISRegister::X_AXIS_ACCEL_BIAS_CORR_EN, "X_AXIS_ACCEL_BIAS_CORR_EN"},
{ADISRegister::Y_AXIS_ACCEL_BIAS_CORR_EN, "Y_AXIS_ACCEL_BIAS_CORR_EN"},
{ADISRegister::Z_AXIS_ACCEL_BIAS_CORR_EN, "Z_AXIS_ACCEL_BIAS_CORR_EN"},
};
} // namespace adi_imu
#endif // ADI_IMU__UTILS__ADIS_REGISTER_DEFINITIONS_H_