0527

Dependencies:   MQTT

Files at this revision

API Documentation at this revision

Comitter:
peng103617
Date:
Mon May 27 05:38:15 2019 +0000
Parent:
59:9bbcc1b368ba
Commit message:
20190527

Changed in this revision

VL53L1X.cpp Show annotated file Show diff for this revision Revisions of this file
VL53L1X.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VL53L1X.cpp	Mon May 27 05:38:15 2019 +0000
@@ -0,0 +1,877 @@
+// Most of the functionality of this library is based on the VL53L1X API
+// provided by ST (STSW-IMG007), and some of the explanatory comments are quoted
+// or paraphrased from the API source code, API user manual (UM2356), and
+// VL53L1X datasheet.
+ 
+#include "VL53L1X.h"
+#include "mbed.h"
+ 
+// Constructors ////////////////////////////////////////////////////////////////
+VL53L1X::VL53L1X(PinName SDA, PinName SCL, PinName shutDown) : 
+  _i2c(SDA,SCL), _shutDown(shutDown)  
+  , io_timeout(0) // no timeout
+  , did_timeout(false)
+  , calibrated(false)
+  , saved_vhv_init(0)
+  , saved_vhv_timeout(0)
+  , distance_mode(Unknown){
+    //Set I2C fast and bring reset line high
+   _i2c.frequency(400000);
+    address = AddressDefault << 1;
+    turnOff();
+    }
+    
+/*VL53L1X::VL53L1X()
+  : address(AddressDefault)
+{
+}*/
+ 
+// Public Methods //////////////////////////////////////////////////////////////
+ 
+void VL53L1X::setAddress(uint8_t new_addr)
+{
+  writeReg(I2C_SLAVE__DEVICE_ADDRESS, new_addr & 0x7F);
+  wait(.01);
+  printf("%x\r\n", readReg(I2C_SLAVE__DEVICE_ADDRESS));
+  address = new_addr << 1;
+}
+ 
+// Initialize sensor using settings taken mostly from VL53L1_DataInit() and
+// VL53L1_StaticInit().
+// If io_2v8 (optional) is true or not given, the sensor is configured for 2V8
+// mode.
+bool VL53L1X::init(bool io_2v8)
+{
+  // check model ID and module type registers (values specified in datasheet)
+  int tempRegister = readReg16Bit(IDENTIFICATION__MODEL_ID);
+  printf("temporary %x\r\n", tempRegister);
+  if (tempRegister != 0xEACC) {  
+    return false; 
+  }
+ 
+  // VL53L1_software_reset() begin
+ 
+  writeReg(SOFT_RESET, 0x00);
+  wait(.001);
+  writeReg(SOFT_RESET, 0x01);
+ 
+  // VL53L1_poll_for_boot_completion() begin
+ 
+  startTimeout();
+  int firmware = (readReg16Bit(FIRMWARE__SYSTEM_STATUS));
+  printf("firmware : %x\r\n", firmware);
+  while ((readReg(FIRMWARE__SYSTEM_STATUS) & 0x01) == 0)
+  {
+    printf("stuck\r\n");
+    if (checkTimeoutExpired())
+    {
+      did_timeout = true;
+      return false;
+    }
+  }
+  // VL53L1_poll_for_boot_completion() end
+ 
+  // VL53L1_software_reset() end
+ 
+  // VL53L1_DataInit() begin
+ 
+  // sensor uses 1V8 mode for I/O by default; switch to 2V8 mode if necessary
+  if (io_2v8)
+  {
+    writeReg(PAD_I2C_HV__EXTSUP_CONFIG,
+      readReg(PAD_I2C_HV__EXTSUP_CONFIG) | 0x01);
+  }
+ 
+  // store oscillator info for later use
+  fast_osc_frequency = readReg16Bit(OSC_MEASURED__FAST_OSC__FREQUENCY);
+  osc_calibrate_val = readReg16Bit(RESULT__OSC_CALIBRATE_VAL);
+ 
+  // VL53L1_DataInit() end
+ 
+  // VL53L1_StaticInit() begin
+ 
+  // Note that the API does not actually apply the configuration settings below
+  // when VL53L1_StaticInit() is called: it keeps a copy of the sensor's
+  // register contents in memory and doesn't actually write them until a
+  // measurement is started. Writing the configuration here means we don't have
+  // to keep it all in memory and avoids a lot of redundant writes later.
+ 
+  // the API sets the preset mode to LOWPOWER_AUTONOMOUS here:
+  // VL53L1_set_preset_mode() begin
+ 
+  // VL53L1_preset_mode_standard_ranging() begin
+ 
+  // values labeled "tuning parm default" are from vl53l1_tuning_parm_defaults.h
+  // (API uses these in VL53L1_init_tuning_parm_storage_struct())
+ 
+  // static config
+  // API resets PAD_I2C_HV__EXTSUP_CONFIG here, but maybe we don't want to do
+  // that? (seems like it would disable 2V8 mode)
+  writeReg16Bit(DSS_CONFIG__TARGET_TOTAL_RATE_MCPS, TargetRate); // should already be this value after reset
+  writeReg(GPIO__TIO_HV_STATUS, 0x02);
+  writeReg(SIGMA_ESTIMATOR__EFFECTIVE_PULSE_WIDTH_NS, 8); // tuning parm default
+  writeReg(SIGMA_ESTIMATOR__EFFECTIVE_AMBIENT_WIDTH_NS, 16); // tuning parm default
+  writeReg(ALGO__CROSSTALK_COMPENSATION_VALID_HEIGHT_MM, 0x01);
+  writeReg(ALGO__RANGE_IGNORE_VALID_HEIGHT_MM, 0xFF);
+  writeReg(ALGO__RANGE_MIN_CLIP, 0); // tuning parm default
+  writeReg(ALGO__CONSISTENCY_CHECK__TOLERANCE, 2); // tuning parm default
+ 
+  // general config
+  writeReg16Bit(SYSTEM__THRESH_RATE_HIGH, 0x0000);
+  writeReg16Bit(SYSTEM__THRESH_RATE_LOW, 0x0000);
+  writeReg(DSS_CONFIG__APERTURE_ATTENUATION, 0x38);
+ 
+  // timing config
+  // most of these settings will be determined later by distance and timing
+  // budget configuration
+  writeReg16Bit(RANGE_CONFIG__SIGMA_THRESH, 360); // tuning parm default
+  writeReg16Bit(RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS, 192); // tuning parm default
+ 
+  // dynamic config
+ 
+  writeReg(SYSTEM__GROUPED_PARAMETER_HOLD_0, 0x01);
+  writeReg(SYSTEM__GROUPED_PARAMETER_HOLD_1, 0x01);
+  writeReg(SD_CONFIG__QUANTIFIER, 2); // tuning parm default
+ 
+  // VL53L1_preset_mode_standard_ranging() end
+ 
+  // from VL53L1_preset_mode_timed_ranging_*
+  // GPH is 0 after reset, but writing GPH0 and GPH1 above seem to set GPH to 1,
+  // and things don't seem to work if we don't set GPH back to 0 (which the API
+  // does here).
+  writeReg(SYSTEM__GROUPED_PARAMETER_HOLD, 0x00);
+  writeReg(SYSTEM__SEED_CONFIG, 1); // tuning parm default
+ 
+  // from VL53L1_config_low_power_auto_mode
+  writeReg(SYSTEM__SEQUENCE_CONFIG, 0x8B); // VHV, PHASECAL, DSS1, RANGE
+  writeReg16Bit(DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT, 200 << 8);
+  writeReg(DSS_CONFIG__ROI_MODE_CONTROL, 2); // REQUESTED_EFFFECTIVE_SPADS
+ 
+  // VL53L1_set_preset_mode() end
+ 
+  // default to long range, 50 ms timing budget
+  // note that this is different than what the API defaults to
+  setDistanceMode(Short);
+  setMeasurementTimingBudget(50000);
+ 
+  // VL53L1_StaticInit() end
+ 
+  // the API triggers this change in VL53L1_init_and_start_range() once a
+  // measurement is started; assumes MM1 and MM2 are disabled
+  writeReg16Bit(ALGO__PART_TO_PART_RANGE_OFFSET_MM,
+    readReg16Bit(MM_CONFIG__OUTER_OFFSET_MM) * 4);
+ t.start();
+  return true;
+}
+ 
+// Write an 8-bit register
+void VL53L1X::writeReg(uint16_t registerAddr, uint8_t data)
+{
+    char data_write[3];
+    data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+    data_write[1] = registerAddr & 0xFF; //LSB of register address 
+    data_write[2] = data & 0xFF; 
+    _i2c.write(address, data_write, 3); 
+}
+ 
+void VL53L1X::writeReg16Bit(uint16_t registerAddr, uint16_t data)
+{
+    char data_write[4];
+    data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+    data_write[1] = registerAddr & 0xFF; //LSB of register address 
+    data_write[2] = (data >> 8) & 0xFF;
+    data_write[3] = data & 0xFF; 
+    _i2c.write(address, data_write, 4); 
+}
+ 
+ 
+// Write a 32-bit register
+/*
+void VL53L1X::writeReg32Bit(uint16_t registerAddr, uint32_t data)
+{
+    char data_write[5];
+    data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+    data_write[1] = registerAddr & 0xFF; //LSB of register address 
+    data_write[2] = (data >> 16) & 0xFF;
+    data_write[3] = (data >> 8) & 0xFF; 
+    data_write[4] =  data & 0xFF;
+    _i2c.write(address, data_write, 5); 
+}
+*/
+void VL53L1X::writeReg32Bit(uint16_t registerAddr, uint32_t data)
+{
+    char data_write[6];
+    data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+    data_write[1] = registerAddr & 0xFF; //LSB of register address 
+    data_write[2] = (data >> 24) & 0xFF;
+    data_write[3] = (data >> 16) & 0xFF; 
+    data_write[4] = (data >> 8) & 0xFF;;
+    data_write[5] =  data & 0xFF;
+    _i2c.write(address, data_write, 6); 
+}
+ 
+ 
+// Read an 8-bit register
+uint8_t VL53L1X::readReg(uint16_t registerAddr)
+{
+  uint8_t data;
+  char data_write[2];
+  char data_read[1];
+  data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+  data_write[1] = registerAddr & 0xFF; //LSB of register address 
+  _i2c.write(address, data_write, 2,0); 
+  _i2c.read(address,data_read,1,1);
+  //Read Data from selected register
+  data=data_read[0];
+  return data;
+}
+ 
+uint16_t VL53L1X::readReg16Bit(uint16_t registerAddr)
+{
+  uint8_t data_low;
+  uint8_t data_high;
+  uint16_t data;
+ 
+  char data_write[2];
+  char data_read[2];
+  data_write[0] = (registerAddr >> 8) & 0xFF; //MSB of register address 
+  data_write[1] = registerAddr & 0xFF; //LSB of register address 
+  _i2c.write(address, data_write, 2,0); 
+  _i2c.read(address,data_read,2,1);
+  data_high = data_read[0]; //Read Data from selected register
+  data_low = data_read[1]; //Read Data from selected register
+  data = (data_high << 8)|data_low;
+ 
+  return data;
+}
+// Read a 32-bit register
+uint32_t VL53L1X::readReg32Bit(uint16_t reg)
+{
+  uint32_t value;
+/*
+  _i2c.beginTransmission(address);
+  _i2c.write((reg >> 8) & 0xFF); // reg high byte
+  _i2c.write( reg       & 0xFF); // reg low byte
+  last_status = _i2c.endTransmission();
+ 
+  _i2c.requestFrom(address, (uint8_t)4);
+  value  = (uint32_t)_i2c.read() << 24; // value highest byte
+  value |= (uint32_t)_i2c.read() << 16;
+  value |= (uint16_t)_i2c.read() <<  8;
+  value |=           _i2c.read();       // value lowest byte
+*/
+  return value;
+}
+ 
+// set distance mode to Short, Medium, or Long
+// based on VL53L1_SetDistanceMode()
+bool VL53L1X::setDistanceMode(DistanceMode mode)
+{
+  // save existing timing budget
+  uint32_t budget_us = getMeasurementTimingBudget();
+  switch (mode)
+  {
+    case Short:
+      // from VL53L1_preset_mode_standard_ranging_short_range()
+ 
+      // timing config
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_A, 0x07);
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_B, 0x05);
+      writeReg(RANGE_CONFIG__VALID_PHASE_HIGH, 0x38);
+ 
+      // dynamic config
+      writeReg(SD_CONFIG__WOI_SD0, 0x07);
+      writeReg(SD_CONFIG__WOI_SD1, 0x05);
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD0, 6); // tuning parm default
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD1, 6); // tuning parm default
+ 
+      break;
+ 
+    case Medium:
+      // from VL53L1_preset_mode_standard_ranging()
+ 
+      // timing config
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_A, 0x0B);
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_B, 0x09);
+      writeReg(RANGE_CONFIG__VALID_PHASE_HIGH, 0x78);
+ 
+      // dynamic config
+      writeReg(SD_CONFIG__WOI_SD0, 0x0B);
+      writeReg(SD_CONFIG__WOI_SD1, 0x09);
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD0, 10); // tuning parm default
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD1, 10); // tuning parm default
+ 
+      break;
+ 
+    case Long: // long
+      // from VL53L1_preset_mode_standard_ranging_long_range()
+ 
+      // timing config
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_A, 0x0F);
+      writeReg(RANGE_CONFIG__VCSEL_PERIOD_B, 0x0D);
+      writeReg(RANGE_CONFIG__VALID_PHASE_HIGH, 0xB8);
+ 
+      // dynamic config
+      writeReg(SD_CONFIG__WOI_SD0, 0x0F);
+      writeReg(SD_CONFIG__WOI_SD1, 0x0D);
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD0, 14); // tuning parm default
+      writeReg(SD_CONFIG__INITIAL_PHASE_SD1, 14); // tuning parm default
+ 
+      break;
+ 
+    default:
+      // unrecognized mode - do nothing
+      return false;
+  }
+ 
+  // reapply timing budget
+  setMeasurementTimingBudget(budget_us);
+ 
+  // save mode so it can be returned by getDistanceMode()
+  distance_mode = mode;
+ 
+  return true;
+}
+ 
+// Set the measurement timing budget in microseconds, which is the time allowed
+// for one measurement. A longer timing budget allows for more accurate
+// measurements.
+// based on VL53L1_SetMeasurementTimingBudgetMicroSeconds()
+bool VL53L1X::setMeasurementTimingBudget(uint32_t budget_us)
+{
+  // assumes PresetMode is LOWPOWER_AUTONOMOUS
+ 
+  if (budget_us <= TimingGuard) { return false; }
+ 
+  uint32_t range_config_timeout_us = budget_us -= TimingGuard;
+  if (range_config_timeout_us > 1100000) { return false; } // FDA_MAX_TIMING_BUDGET_US * 2
+ 
+  range_config_timeout_us /= 2;
+ 
+  // VL53L1_calc_timeout_register_values() begin
+ 
+  uint32_t macro_period_us;
+ 
+  // "Update Macro Period for Range A VCSEL Period"
+  macro_period_us = calcMacroPeriod(readReg(RANGE_CONFIG__VCSEL_PERIOD_A));
+ 
+  // "Update Phase timeout - uses Timing A"
+  // Timeout of 1000 is tuning parm default (TIMED_PHASECAL_CONFIG_TIMEOUT_US_DEFAULT)
+  // via VL53L1_get_preset_mode_timing_cfg().
+  uint32_t phasecal_timeout_mclks = timeoutMicrosecondsToMclks(1000, macro_period_us);
+  if (phasecal_timeout_mclks > 0xFF) { phasecal_timeout_mclks = 0xFF; }
+  writeReg(PHASECAL_CONFIG__TIMEOUT_MACROP, phasecal_timeout_mclks);
+ 
+  // "Update MM Timing A timeout"
+  // Timeout of 1 is tuning parm default (LOWPOWERAUTO_MM_CONFIG_TIMEOUT_US_DEFAULT)
+  // via VL53L1_get_preset_mode_timing_cfg(). With the API, the register
+  // actually ends up with a slightly different value because it gets assigned,
+  // retrieved, recalculated with a different macro period, and reassigned,
+  // but it probably doesn't matter because it seems like the MM ("mode
+  // mitigation"?) sequence steps are disabled in low power auto mode anyway.
+  writeReg16Bit(MM_CONFIG__TIMEOUT_MACROP_A, encodeTimeout(
+    timeoutMicrosecondsToMclks(1, macro_period_us)));
+ 
+  // "Update Range Timing A timeout"
+  writeReg16Bit(RANGE_CONFIG__TIMEOUT_MACROP_A, encodeTimeout(
+    timeoutMicrosecondsToMclks(range_config_timeout_us, macro_period_us)));
+ 
+  // "Update Macro Period for Range B VCSEL Period"
+  macro_period_us = calcMacroPeriod(readReg(RANGE_CONFIG__VCSEL_PERIOD_B));
+ 
+  // "Update MM Timing B timeout"
+  // (See earlier comment about MM Timing A timeout.)
+  writeReg16Bit(MM_CONFIG__TIMEOUT_MACROP_B, encodeTimeout(
+    timeoutMicrosecondsToMclks(1, macro_period_us)));
+ 
+  // "Update Range Timing B timeout"
+  writeReg16Bit(RANGE_CONFIG__TIMEOUT_MACROP_B, encodeTimeout(
+    timeoutMicrosecondsToMclks(range_config_timeout_us, macro_period_us)));
+  // VL53L1_calc_timeout_register_values() end
+ 
+  return true;
+}
+ 
+// Get the measurement timing budget in microseconds
+// based on VL53L1_SetMeasurementTimingBudgetMicroSeconds()
+uint32_t VL53L1X::getMeasurementTimingBudget()
+{
+  // assumes PresetMode is LOWPOWER_AUTONOMOUS and these sequence steps are
+  // enabled: VHV, PHASECAL, DSS1, RANGE
+ 
+  // VL53L1_get_timeouts_us() begin
+ 
+  // "Update Macro Period for Range A VCSEL Period"
+  uint32_t macro_period_us = calcMacroPeriod(readReg(RANGE_CONFIG__VCSEL_PERIOD_A));
+ 
+  // "Get Range Timing A timeout"
+ 
+  uint32_t range_config_timeout_us = timeoutMclksToMicroseconds(decodeTimeout(
+    readReg16Bit(RANGE_CONFIG__TIMEOUT_MACROP_A)), macro_period_us);
+ 
+  // VL53L1_get_timeouts_us() end
+ 
+  return  2 * range_config_timeout_us + TimingGuard;
+}
+ 
+// Start continuous ranging measurements, with the given inter-measurement
+// period in milliseconds determining how often the sensor takes a measurement.
+void VL53L1X::startContinuous(uint32_t period_ms)
+{
+  // from VL53L1_set_inter_measurement_period_ms()
+  writeReg32Bit(SYSTEM__INTERMEASUREMENT_PERIOD, period_ms * osc_calibrate_val);
+  writeReg(SYSTEM__INTERRUPT_CLEAR, 0x01); // sys_interrupt_clear_range
+  writeReg(SYSTEM__MODE_START, 0x40); // mode_range__timed
+}
+ 
+// Stop continuous measurements
+// based on VL53L1_stop_range()
+void VL53L1X::stopContinuous()
+{
+  writeReg(SYSTEM__MODE_START, 0x80); // mode_range__abort
+ 
+  // VL53L1_low_power_auto_data_stop_range() begin
+ 
+  calibrated = false;
+ 
+  // "restore vhv configs"
+  if (saved_vhv_init != 0)
+  {
+    writeReg(VHV_CONFIG__INIT, saved_vhv_init);
+  }
+  if (saved_vhv_timeout != 0)
+  {
+     writeReg(VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND, saved_vhv_timeout);
+  }
+ 
+  // "remove phasecal override"
+  writeReg(PHASECAL_CONFIG__OVERRIDE, 0x00);
+ 
+  // VL53L1_low_power_auto_data_stop_range() end
+}
+ 
+// Returns a range reading in millimeters when continuous mode is active
+// (readRangeSingleMillimetersx () also calls this function after starting a
+// single-shot range measurement)
+uint16_t VL53L1X::read(bool blocking)
+{
+  if (blocking)
+  {
+  //  startTimeout();
+    
+    /* dataReady returns 0. Loop is never entered. */
+    /*
+    while (dataReady())
+    {
+      if (checkTimeoutExpired())
+      {
+        did_timeout = true;
+        ranging_data.range_status = None;
+        ranging_data.range_mm = 0;
+        ranging_data.peak_signal_count_rate_MCPS = 0;
+        ranging_data.ambient_count_rate_MCPS = 0;
+        return ranging_data.range_mm;
+      }
+    }*/
+  }
+ 
+  readResults();
+ 
+  if (!calibrated)
+  {
+    setupManualCalibration();
+    calibrated = true;
+  }
+ 
+  updateDSS();
+ 
+  getRangingData();
+ 
+  writeReg(SYSTEM__INTERRUPT_CLEAR, 0x01); // sys_interrupt_clear_range
+ 
+  return ranging_data.range_mm;
+}
+ 
+// convert a RangeStatus to a readable string
+// Note that on an AVR, these strings are stored in RAM (dynamic memory), which
+// makes working with them easier but uses up 200+ bytes of RAM (many AVR-based
+// Arduinos only have about 2000 bytes of RAM). You can avoid this memory usage
+// if you do not call this function in your sketch.
+const char * VL53L1X::rangeStatusToString(RangeStatus status)
+{
+  switch (status)
+  {
+    case RangeValid:
+      return "range valid";
+ 
+    case SigmaFail:
+      return "sigma fail";
+ 
+    case SignalFail:
+      return "signal fail";
+ 
+    case RangeValidMinRangeClipped:
+      return "range valid, min range clipped";
+ 
+    case OutOfBoundsFail:
+      return "out of bounds fail";
+ 
+    case HardwareFail:
+      return "hardware fail";
+ 
+    case RangeValidNoWrapCheckFail:
+      return "range valid, no wrap check fail";
+ 
+    case WrapTargetFail:
+      return "wrap target fail";
+ 
+    case XtalkSignalFail:
+      return "xtalk signal fail";
+ 
+    case SynchronizationInt:
+      return "synchronization int";
+ 
+    case MinRangeFail:
+      return "min range fail";
+ 
+    case None:
+      return "no update";
+ 
+    default:
+      return "unknown status";
+  }
+}
+ 
+// Did a timeout occur in one of the read functions since the last call to
+// timeoutOccurred()?
+bool VL53L1X::timeoutOccurred()
+{
+  bool tmp = did_timeout;
+  did_timeout = false;
+  return tmp;
+}
+ 
+// Private Methods /////////////////////////////////////////////////////////////
+ 
+// "Setup ranges after the first one in low power auto mode by turning off
+// FW calibration steps and programming static values"
+// based on VL53L1_low_power_auto_setup_manual_calibration()
+void VL53L1X::setupManualCalibration()
+{
+  // "save original vhv configs"
+  saved_vhv_init = readReg(VHV_CONFIG__INIT);
+  saved_vhv_timeout = readReg(VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND);
+ 
+  // "disable VHV init"
+  writeReg(VHV_CONFIG__INIT, saved_vhv_init & 0x7F);
+ 
+  // "set loop bound to tuning param"
+  writeReg(VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND,
+    (saved_vhv_timeout & 0x03) + (3 << 2)); // tuning parm default (LOWPOWERAUTO_VHV_LOOP_BOUND_DEFAULT)
+ 
+  // "override phasecal"
+  writeReg(PHASECAL_CONFIG__OVERRIDE, 0x01);
+  writeReg(CAL_CONFIG__VCSEL_START, readReg(PHASECAL_RESULT__VCSEL_START));
+}
+ 
+// read measurement results into buffer
+void VL53L1X::readResults()
+{
+  char infoToWrite[2];
+  char infoToRead[18];
+  //_i2c.beginTransmission(address);
+  //_i2c.write(address);
+  //_i2c.write((RESULT__RANGE_STATUS >> 8) & 0xFF); // reg high byte
+  //_i2c.write( RESULT__RANGE_STATUS       & 0xFF); // reg low byte
+//  last_status = _i2c.endTransmission();
+  infoToWrite[0] = ((RESULT__RANGE_STATUS >> 8) & 0xFF);
+  infoToWrite[1] = ( RESULT__RANGE_STATUS       & 0xFF);
+  _i2c.write(address, infoToWrite, 2, 1);
+ 
+//  _i2c.requestFrom(address, (uint8_t)17);
+  _i2c.read(address, infoToRead, 17, 0);
+ 
+  wait(.005);
+  results.range_status = infoToRead[0];
+ 
+//  infoToRead[1]; // report_status: not used
+ 
+  results.stream_count = infoToRead[2];
+ 
+  results.dss_actual_effective_spads_sd0  = (uint16_t)infoToRead[3] << 8; // high byte
+  results.dss_actual_effective_spads_sd0 |=           infoToRead[4];      // low byte
+ 
+//  infoToRead[5]; // peak_signal_count_rate_mcps_sd0: not used
+//  infoToRead[6];
+ 
+  results.ambient_count_rate_mcps_sd0  = (uint16_t)infoToRead[7] << 8; // high byte
+  results.ambient_count_rate_mcps_sd0 |=           infoToRead[8];      // low byte
+ 
+//  infoToRead[9]; // sigma_sd0: not used
+//  infoToRead[10];
+ 
+//  infoToRead[11]; // phase_sd0: not used
+//  infoToRead[12];
+ 
+  results.final_crosstalk_corrected_range_mm_sd0  = (uint16_t)infoToRead[13] << 8; // high byte
+  results.final_crosstalk_corrected_range_mm_sd0 |=           infoToRead[14];      // low byte
+ 
+  results.peak_signal_count_rate_crosstalk_corrected_mcps_sd0  = (uint16_t)infoToRead[15] << 8; // high byte
+  results.peak_signal_count_rate_crosstalk_corrected_mcps_sd0 |=           infoToRead[16];      // low byte
+}
+ 
+// perform Dynamic SPAD Selection calculation/update
+// based on VL53L1_low_power_auto_update_DSS()
+void VL53L1X::updateDSS()
+{
+  uint16_t spadCount = results.dss_actual_effective_spads_sd0;
+ 
+  if (spadCount != 0)
+  {
+    // "Calc total rate per spad"
+ 
+    uint32_t totalRatePerSpad =
+      (uint32_t)results.peak_signal_count_rate_crosstalk_corrected_mcps_sd0 +
+      results.ambient_count_rate_mcps_sd0;
+ 
+    // "clip to 16 bits"
+    if (totalRatePerSpad > 0xFFFF) { totalRatePerSpad = 0xFFFF; }
+ 
+    // "shift up to take advantage of 32 bits"
+    totalRatePerSpad <<= 16;
+ 
+    totalRatePerSpad /= spadCount;
+ 
+    if (totalRatePerSpad != 0)
+    {
+      // "get the target rate and shift up by 16"
+      uint32_t requiredSpads = ((uint32_t)TargetRate << 16) / totalRatePerSpad;
+ 
+      // "clip to 16 bit"
+      if (requiredSpads > 0xFFFF) { requiredSpads = 0xFFFF; }
+ 
+      // "override DSS config"
+      writeReg16Bit(DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT, requiredSpads);
+      // DSS_CONFIG__ROI_MODE_CONTROL should already be set to REQUESTED_EFFFECTIVE_SPADS
+ 
+      return;
+    }
+  }
+ 
+  // If we reached this point, it means something above would have resulted in a
+  // divide by zero.
+  // "We want to gracefully set a spad target, not just exit with an error"
+ 
+   // "set target to mid point"
+   writeReg16Bit(DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT, 0x8000);
+}
+ 
+// get range, status, rates from results buffer
+// based on VL53L1_GetRangingMeasurementData()
+void VL53L1X::getRangingData()
+{
+  // VL53L1_copy_sys_and_core_results_to_range_results() begin
+ 
+  uint16_t range = results.final_crosstalk_corrected_range_mm_sd0;
+ 
+  // "apply correction gain"
+  // gain factor of 2011 is tuning parm default (VL53L1_TUNINGPARM_LITE_RANGING_GAIN_FACTOR_DEFAULT)
+  // Basically, this appears to scale the result by 2011/2048, or about 98%
+  // (with the 1024 added for proper rounding).
+  ranging_data.range_mm = ((uint32_t)range * 2011 + 0x0400) / 0x0800;
+  wait(.005);
+  // VL53L1_copy_sys_and_core_results_to_range_results() end
+ 
+  // set range_status in ranging_data based on value of RESULT__RANGE_STATUS register
+  // mostly based on ConvertStatusLite()
+  switch(results.range_status)
+  {
+    case 17: // MULTCLIPFAIL
+    case 2: // VCSELWATCHDOGTESTFAILURE
+    case 1: // VCSELCONTINUITYTESTFAILURE
+    case 3: // NOVHVVALUEFOUND
+      // from SetSimpleData()
+      ranging_data.range_status = HardwareFail;
+      break;
+ 
+    case 13: // USERROICLIP
+     // from SetSimpleData()
+      ranging_data.range_status = MinRangeFail;
+      break;
+ 
+    case 18: // GPHSTREAMCOUNT0READY
+      ranging_data.range_status = SynchronizationInt;
+      break;
+ 
+    case 5: // RANGEPHASECHECK
+      ranging_data.range_status =  OutOfBoundsFail;
+      break;
+ 
+    case 4: // MSRCNOTARGET
+      ranging_data.range_status = SignalFail;
+      break;
+ 
+    case 6: // SIGMATHRESHOLDCHECK
+      ranging_data.range_status = SignalFail;
+      break;
+ 
+    case 7: // PHASECONSISTENCY
+      ranging_data.range_status = WrapTargetFail;
+      break;
+ 
+    case 12: // RANGEIGNORETHRESHOLD
+      ranging_data.range_status = XtalkSignalFail;
+      break;
+ 
+    case 8: // MINCLIP
+      ranging_data.range_status = RangeValidMinRangeClipped;
+      break;
+ 
+    case 9: // RANGECOMPLETE
+      // from VL53L1_copy_sys_and_core_results_to_range_results()
+      if (results.stream_count == 0)
+      {
+        ranging_data.range_status = RangeValidNoWrapCheckFail;
+      }
+      else
+      {
+        ranging_data.range_status = RangeValid;
+      }
+      break;
+ 
+    default:
+      ranging_data.range_status = None;
+  }
+ 
+  // from SetSimpleData()
+  ranging_data.peak_signal_count_rate_MCPS =
+    countRateFixedToFloat(results.peak_signal_count_rate_crosstalk_corrected_mcps_sd0);
+  ranging_data.ambient_count_rate_MCPS =
+    countRateFixedToFloat(results.ambient_count_rate_mcps_sd0);
+}
+ 
+// Decode sequence step timeout in MCLKs from register value
+// based on VL53L1_decode_timeout()
+uint32_t VL53L1X::decodeTimeout(uint16_t reg_val)
+{
+  return ((uint32_t)(reg_val & 0xFF) << (reg_val >> 8)) + 1;
+}
+ 
+// Encode sequence step timeout register value from timeout in MCLKs
+// based on VL53L1_encode_timeout()
+uint16_t VL53L1X::encodeTimeout(uint32_t timeout_mclks)
+{
+  // encoded format: "(LSByte * 2^MSByte) + 1"
+ 
+  uint32_t ls_byte = 0;
+  uint16_t ms_byte = 0;
+ 
+  if (timeout_mclks > 0)
+  {
+    ls_byte = timeout_mclks - 1;
+ 
+    while ((ls_byte & 0xFFFFFF00) > 0)
+    {
+      ls_byte >>= 1;
+      ms_byte++;
+    }
+ 
+    return (ms_byte << 8) | (ls_byte & 0xFF);
+  }
+  else { return 0; }
+}
+ 
+// Convert sequence step timeout from macro periods to microseconds with given
+// macro period in microseconds (12.12 format)
+// based on VL53L1_calc_timeout_us()
+uint32_t VL53L1X::timeoutMclksToMicroseconds(uint32_t timeout_mclks, uint32_t macro_period_us)
+{
+  return ((uint64_t)timeout_mclks * macro_period_us + 0x800) >> 12;
+}
+ 
+// Convert sequence step timeout from microseconds to macro periods with given
+// macro period in microseconds (12.12 format)
+// based on VL53L1_calc_timeout_mclks()
+uint32_t VL53L1X::timeoutMicrosecondsToMclks(uint32_t timeout_us, uint32_t macro_period_us)
+{
+  return (((uint32_t)timeout_us << 12) + (macro_period_us >> 1)) / macro_period_us;
+}
+ 
+// Calculate macro period in microseconds (12.12 format) with given VCSEL period
+// assumes fast_osc_frequency has been read and stored
+// based on VL53L1_calc_macro_period_us()
+uint32_t VL53L1X::calcMacroPeriod(uint8_t vcsel_period)
+{
+  // from VL53L1_calc_pll_period_us()
+  // fast osc frequency in 4.12 format; PLL period in 0.24 format
+  uint32_t pll_period_us = ((uint32_t)0x01 << 30) / fast_osc_frequency;
+ 
+  // from VL53L1_decode_vcsel_period()
+  uint8_t vcsel_period_pclks = (vcsel_period + 1) << 1;
+ 
+  // VL53L1_MACRO_PERIOD_VCSEL_PERIODS = 2304
+  uint32_t macro_period_us = (uint32_t)2304 * pll_period_us;
+  macro_period_us >>= 6;
+  macro_period_us *= vcsel_period_pclks;
+  macro_period_us >>= 6;
+ 
+  return macro_period_us;
+}
+
+
+
+
+
+
+
+
+
+
+bool VL53L1X::initReading(int addr, int timing_budget)
+{
+  turnOn();
+  wait_ms(100);
+  setTimeout(500);
+  if (!init())  {
+    didInitialize = false;
+    return false;
+  }
+ // setDistanceMode(VL53L1X::Short);//Short Medium Long
+  setAddress(addr);//change I2C address for next sensor
+  setMeasurementTimingBudget(timing_budget);//min 20ms for Short, 33ms for Medium and Long
+  startContinuous(50);
+  wait_ms(100);
+  didInitialize = true;
+  return true;
+}
+//*************************************
+
+//*********GPIO***********
+void VL53L1X::turnOff(void)
+{
+  //turn pin LOW
+  _shutDown = false;
+}
+void VL53L1X::resetPin(void)
+{
+  //reset pin and set it to LOW
+    _shutDown = false;
+    wait(.05);
+    _shutDown = true;
+    wait(.05); 
+    _shutDown = false;
+    wait(.05);  
+
+}
+void VL53L1X::turnOn(void)
+{
+  //turn pin HIGH
+    _shutDown = true;
+}
+int VL53L1X::readFromOneSensor(void)
+{
+    if (didInitialize)   //create bool
+        return read();
+    else 
+        return -1;  
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VL53L1X.h	Mon May 27 05:38:15 2019 +0000
@@ -0,0 +1,1403 @@
+#ifndef VL53L1X_H
+#define VL53L1X_H
+
+#include "mbed.h"
+
+class VL53L1X
+{
+  public:
+    Timer t;
+    VL53L1X(PinName SDA, PinName SCL, PinName shutDown);
+
+    // register addresses from API vl53l1x_register_map.h
+    enum regAddr : uint16_t
+    {
+      SOFT_RESET                                                                 = 0x0000,
+      I2C_SLAVE__DEVICE_ADDRESS                                                  = 0x0001,
+      ANA_CONFIG__VHV_REF_SEL_VDDPIX                                             = 0x0002,
+      ANA_CONFIG__VHV_REF_SEL_VQUENCH                                            = 0x0003,
+      ANA_CONFIG__REG_AVDD1V2_SEL                                                = 0x0004,
+      ANA_CONFIG__FAST_OSC__TRIM                                                 = 0x0005,
+      OSC_MEASURED__FAST_OSC__FREQUENCY                                          = 0x0006,
+      OSC_MEASURED__FAST_OSC__FREQUENCY_HI                                       = 0x0006,
+      OSC_MEASURED__FAST_OSC__FREQUENCY_LO                                       = 0x0007,
+      VHV_CONFIG__TIMEOUT_MACROP_LOOP_BOUND                                      = 0x0008,
+      VHV_CONFIG__COUNT_THRESH                                                   = 0x0009,
+      VHV_CONFIG__OFFSET                                                         = 0x000A,
+      VHV_CONFIG__INIT                                                           = 0x000B,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_0                                          = 0x000D,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_1                                          = 0x000E,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_2                                          = 0x000F,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_3                                          = 0x0010,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_4                                          = 0x0011,
+      GLOBAL_CONFIG__SPAD_ENABLES_REF_5                                          = 0x0012,
+      GLOBAL_CONFIG__REF_EN_START_SELECT                                         = 0x0013,
+      REF_SPAD_MAN__NUM_REQUESTED_REF_SPADS                                      = 0x0014,
+      REF_SPAD_MAN__REF_LOCATION                                                 = 0x0015,
+      ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS                             = 0x0016,
+      ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS_HI                          = 0x0016,
+      ALGO__CROSSTALK_COMPENSATION_PLANE_OFFSET_KCPS_LO                          = 0x0017,
+      ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS                         = 0x0018,
+      ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS_HI                      = 0x0018,
+      ALGO__CROSSTALK_COMPENSATION_X_PLANE_GRADIENT_KCPS_LO                      = 0x0019,
+      ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS                         = 0x001A,
+      ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS_HI                      = 0x001A,
+      ALGO__CROSSTALK_COMPENSATION_Y_PLANE_GRADIENT_KCPS_LO                      = 0x001B,
+      REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS                                      = 0x001C,
+      REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS_HI                                   = 0x001C,
+      REF_SPAD_CHAR__TOTAL_RATE_TARGET_MCPS_LO                                   = 0x001D,
+      ALGO__PART_TO_PART_RANGE_OFFSET_MM                                         = 0x001E,
+      ALGO__PART_TO_PART_RANGE_OFFSET_MM_HI                                      = 0x001E,
+      ALGO__PART_TO_PART_RANGE_OFFSET_MM_LO                                      = 0x001F,
+      MM_CONFIG__INNER_OFFSET_MM                                                 = 0x0020,
+      MM_CONFIG__INNER_OFFSET_MM_HI                                              = 0x0020,
+      MM_CONFIG__INNER_OFFSET_MM_LO                                              = 0x0021,
+      MM_CONFIG__OUTER_OFFSET_MM                                                 = 0x0022,
+      MM_CONFIG__OUTER_OFFSET_MM_HI                                              = 0x0022,
+      MM_CONFIG__OUTER_OFFSET_MM_LO                                              = 0x0023,
+      DSS_CONFIG__TARGET_TOTAL_RATE_MCPS                                         = 0x0024,
+      DSS_CONFIG__TARGET_TOTAL_RATE_MCPS_HI                                      = 0x0024,
+      DSS_CONFIG__TARGET_TOTAL_RATE_MCPS_LO                                      = 0x0025,
+      DEBUG__CTRL                                                                = 0x0026,
+      TEST_MODE__CTRL                                                            = 0x0027,
+      CLK_GATING__CTRL                                                           = 0x0028,
+      NVM_BIST__CTRL                                                             = 0x0029,
+      NVM_BIST__NUM_NVM_WORDS                                                    = 0x002A,
+      NVM_BIST__START_ADDRESS                                                    = 0x002B,
+      HOST_IF__STATUS                                                            = 0x002C,
+      PAD_I2C_HV__CONFIG                                                         = 0x002D,
+      PAD_I2C_HV__EXTSUP_CONFIG                                                  = 0x002E,
+      GPIO_HV_PAD__CTRL                                                          = 0x002F,
+      GPIO_HV_MUX__CTRL                                                          = 0x0030,
+      GPIO__TIO_HV_STATUS                                                        = 0x0031,
+      GPIO__FIO_HV_STATUS                                                        = 0x0032,
+      ANA_CONFIG__SPAD_SEL_PSWIDTH                                               = 0x0033,
+      ANA_CONFIG__VCSEL_PULSE_WIDTH_OFFSET                                       = 0x0034,
+      ANA_CONFIG__FAST_OSC__CONFIG_CTRL                                          = 0x0035,
+      SIGMA_ESTIMATOR__EFFECTIVE_PULSE_WIDTH_NS                                  = 0x0036,
+      SIGMA_ESTIMATOR__EFFECTIVE_AMBIENT_WIDTH_NS                                = 0x0037,
+      SIGMA_ESTIMATOR__SIGMA_REF_MM                                              = 0x0038,
+      ALGO__CROSSTALK_COMPENSATION_VALID_HEIGHT_MM                               = 0x0039,
+      SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_0                                   = 0x003A,
+      SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_1                                   = 0x003B,
+      ALGO__RANGE_IGNORE_THRESHOLD_MCPS                                          = 0x003C,
+      ALGO__RANGE_IGNORE_THRESHOLD_MCPS_HI                                       = 0x003C,
+      ALGO__RANGE_IGNORE_THRESHOLD_MCPS_LO                                       = 0x003D,
+      ALGO__RANGE_IGNORE_VALID_HEIGHT_MM                                         = 0x003E,
+      ALGO__RANGE_MIN_CLIP                                                       = 0x003F,
+      ALGO__CONSISTENCY_CHECK__TOLERANCE                                         = 0x0040,
+      SPARE_HOST_CONFIG__STATIC_CONFIG_SPARE_2                                   = 0x0041,
+      SD_CONFIG__RESET_STAGES_MSB                                                = 0x0042,
+      SD_CONFIG__RESET_STAGES_LSB                                                = 0x0043,
+      GPH_CONFIG__STREAM_COUNT_UPDATE_VALUE                                      = 0x0044,
+      GLOBAL_CONFIG__STREAM_DIVIDER                                              = 0x0045,
+      SYSTEM__INTERRUPT_CONFIG_GPIO                                              = 0x0046,
+      CAL_CONFIG__VCSEL_START                                                    = 0x0047,
+      CAL_CONFIG__REPEAT_RATE                                                    = 0x0048,
+      CAL_CONFIG__REPEAT_RATE_HI                                                 = 0x0048,
+      CAL_CONFIG__REPEAT_RATE_LO                                                 = 0x0049,
+      GLOBAL_CONFIG__VCSEL_WIDTH                                                 = 0x004A,
+      PHASECAL_CONFIG__TIMEOUT_MACROP                                            = 0x004B,
+      PHASECAL_CONFIG__TARGET                                                    = 0x004C,
+      PHASECAL_CONFIG__OVERRIDE                                                  = 0x004D,
+      DSS_CONFIG__ROI_MODE_CONTROL                                               = 0x004F,
+      SYSTEM__THRESH_RATE_HIGH                                                   = 0x0050,
+      SYSTEM__THRESH_RATE_HIGH_HI                                                = 0x0050,
+      SYSTEM__THRESH_RATE_HIGH_LO                                                = 0x0051,
+      SYSTEM__THRESH_RATE_LOW                                                    = 0x0052,
+      SYSTEM__THRESH_RATE_LOW_HI                                                 = 0x0052,
+      SYSTEM__THRESH_RATE_LOW_LO                                                 = 0x0053,
+      DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT                                  = 0x0054,
+      DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_HI                               = 0x0054,
+      DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_LO                               = 0x0055,
+      DSS_CONFIG__MANUAL_BLOCK_SELECT                                            = 0x0056,
+      DSS_CONFIG__APERTURE_ATTENUATION                                           = 0x0057,
+      DSS_CONFIG__MAX_SPADS_LIMIT                                                = 0x0058,
+      DSS_CONFIG__MIN_SPADS_LIMIT                                                = 0x0059,
+      MM_CONFIG__TIMEOUT_MACROP_A                                                = 0x005A, // added by Pololu for 16-bit accesses
+      MM_CONFIG__TIMEOUT_MACROP_A_HI                                             = 0x005A,
+      MM_CONFIG__TIMEOUT_MACROP_A_LO                                             = 0x005B,
+      MM_CONFIG__TIMEOUT_MACROP_B                                                = 0x005C, // added by Pololu for 16-bit accesses
+      MM_CONFIG__TIMEOUT_MACROP_B_HI                                             = 0x005C,
+      MM_CONFIG__TIMEOUT_MACROP_B_LO                                             = 0x005D,
+      RANGE_CONFIG__TIMEOUT_MACROP_A                                             = 0x005E, // added by Pololu for 16-bit accesses
+      RANGE_CONFIG__TIMEOUT_MACROP_A_HI                                          = 0x005E,
+      RANGE_CONFIG__TIMEOUT_MACROP_A_LO                                          = 0x005F,
+      RANGE_CONFIG__VCSEL_PERIOD_A                                               = 0x0060,
+      RANGE_CONFIG__TIMEOUT_MACROP_B                                             = 0x0061, // added by Pololu for 16-bit accesses
+      RANGE_CONFIG__TIMEOUT_MACROP_B_HI                                          = 0x0061,
+      RANGE_CONFIG__TIMEOUT_MACROP_B_LO                                          = 0x0062,
+      RANGE_CONFIG__VCSEL_PERIOD_B                                               = 0x0063,
+      RANGE_CONFIG__SIGMA_THRESH                                                 = 0x0064,
+      RANGE_CONFIG__SIGMA_THRESH_HI                                              = 0x0064,
+      RANGE_CONFIG__SIGMA_THRESH_LO                                              = 0x0065,
+      RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS                                = 0x0066,
+      RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_HI                             = 0x0066,
+      RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_LO                             = 0x0067,
+      RANGE_CONFIG__VALID_PHASE_LOW                                              = 0x0068,
+      RANGE_CONFIG__VALID_PHASE_HIGH                                             = 0x0069,
+      SYSTEM__INTERMEASUREMENT_PERIOD                                            = 0x006C,
+      SYSTEM__INTERMEASUREMENT_PERIOD_3                                          = 0x006C,
+      SYSTEM__INTERMEASUREMENT_PERIOD_2                                          = 0x006D,
+      SYSTEM__INTERMEASUREMENT_PERIOD_1                                          = 0x006E,
+      SYSTEM__INTERMEASUREMENT_PERIOD_0                                          = 0x006F,
+      SYSTEM__FRACTIONAL_ENABLE                                                  = 0x0070,
+      SYSTEM__GROUPED_PARAMETER_HOLD_0                                           = 0x0071,
+      SYSTEM__THRESH_HIGH                                                        = 0x0072,
+      SYSTEM__THRESH_HIGH_HI                                                     = 0x0072,
+      SYSTEM__THRESH_HIGH_LO                                                     = 0x0073,
+      SYSTEM__THRESH_LOW                                                         = 0x0074,
+      SYSTEM__THRESH_LOW_HI                                                      = 0x0074,
+      SYSTEM__THRESH_LOW_LO                                                      = 0x0075,
+      SYSTEM__ENABLE_XTALK_PER_QUADRANT                                          = 0x0076,
+      SYSTEM__SEED_CONFIG                                                        = 0x0077,
+      SD_CONFIG__WOI_SD0                                                         = 0x0078,
+      SD_CONFIG__WOI_SD1                                                         = 0x0079,
+      SD_CONFIG__INITIAL_PHASE_SD0                                               = 0x007A,
+      SD_CONFIG__INITIAL_PHASE_SD1                                               = 0x007B,
+      SYSTEM__GROUPED_PARAMETER_HOLD_1                                           = 0x007C,
+      SD_CONFIG__FIRST_ORDER_SELECT                                              = 0x007D,
+      SD_CONFIG__QUANTIFIER                                                      = 0x007E,
+      ROI_CONFIG__USER_ROI_CENTRE_SPAD                                           = 0x007F,
+      ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE                              = 0x0080,
+      SYSTEM__SEQUENCE_CONFIG                                                    = 0x0081,
+      SYSTEM__GROUPED_PARAMETER_HOLD                                             = 0x0082,
+      POWER_MANAGEMENT__GO1_POWER_FORCE                                          = 0x0083,
+      SYSTEM__STREAM_COUNT_CTRL                                                  = 0x0084,
+      FIRMWARE__ENABLE                                                           = 0x0085,
+      SYSTEM__INTERRUPT_CLEAR                                                    = 0x0086,
+      SYSTEM__MODE_START                                                         = 0x0087,
+      RESULT__INTERRUPT_STATUS                                                   = 0x0088,
+      RESULT__RANGE_STATUS                                                       = 0x0089,
+      RESULT__REPORT_STATUS                                                      = 0x008A,
+      RESULT__STREAM_COUNT                                                       = 0x008B,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0                                     = 0x008C,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI                                  = 0x008C,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO                                  = 0x008D,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0                                    = 0x008E,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI                                 = 0x008E,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO                                 = 0x008F,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD0                                        = 0x0090,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI                                     = 0x0090,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO                                     = 0x0091,
+      RESULT__SIGMA_SD0                                                          = 0x0092,
+      RESULT__SIGMA_SD0_HI                                                       = 0x0092,
+      RESULT__SIGMA_SD0_LO                                                       = 0x0093,
+      RESULT__PHASE_SD0                                                          = 0x0094,
+      RESULT__PHASE_SD0_HI                                                       = 0x0094,
+      RESULT__PHASE_SD0_LO                                                       = 0x0095,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0                             = 0x0096,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI                          = 0x0096,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO                          = 0x0097,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0                = 0x0098,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI             = 0x0098,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO             = 0x0099,
+      RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0                                = 0x009A,
+      RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                             = 0x009A,
+      RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                             = 0x009B,
+      RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0                                = 0x009C,
+      RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                             = 0x009C,
+      RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                             = 0x009D,
+      RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0                                     = 0x009E,
+      RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI                                  = 0x009E,
+      RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO                                  = 0x009F,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1                                     = 0x00A0,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI                                  = 0x00A0,
+      RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO                                  = 0x00A1,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1                                    = 0x00A2,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI                                 = 0x00A2,
+      RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO                                 = 0x00A3,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD1                                        = 0x00A4,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI                                     = 0x00A4,
+      RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO                                     = 0x00A5,
+      RESULT__SIGMA_SD1                                                          = 0x00A6,
+      RESULT__SIGMA_SD1_HI                                                       = 0x00A6,
+      RESULT__SIGMA_SD1_LO                                                       = 0x00A7,
+      RESULT__PHASE_SD1                                                          = 0x00A8,
+      RESULT__PHASE_SD1_HI                                                       = 0x00A8,
+      RESULT__PHASE_SD1_LO                                                       = 0x00A9,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1                             = 0x00AA,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI                          = 0x00AA,
+      RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO                          = 0x00AB,
+      RESULT__SPARE_0_SD1                                                        = 0x00AC,
+      RESULT__SPARE_0_SD1_HI                                                     = 0x00AC,
+      RESULT__SPARE_0_SD1_LO                                                     = 0x00AD,
+      RESULT__SPARE_1_SD1                                                        = 0x00AE,
+      RESULT__SPARE_1_SD1_HI                                                     = 0x00AE,
+      RESULT__SPARE_1_SD1_LO                                                     = 0x00AF,
+      RESULT__SPARE_2_SD1                                                        = 0x00B0,
+      RESULT__SPARE_2_SD1_HI                                                     = 0x00B0,
+      RESULT__SPARE_2_SD1_LO                                                     = 0x00B1,
+      RESULT__SPARE_3_SD1                                                        = 0x00B2,
+      RESULT__THRESH_INFO                                                        = 0x00B3,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0                                     = 0x00B4,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3                                   = 0x00B4,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2                                   = 0x00B5,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1                                   = 0x00B6,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0                                   = 0x00B7,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD0                                      = 0x00B8,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3                                    = 0x00B8,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2                                    = 0x00B9,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1                                    = 0x00BA,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0                                    = 0x00BB,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0                                       = 0x00BC,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3                                     = 0x00BC,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2                                     = 0x00BD,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1                                     = 0x00BE,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0                                     = 0x00BF,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0                                     = 0x00C0,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3                                   = 0x00C0,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2                                   = 0x00C1,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1                                   = 0x00C2,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0                                   = 0x00C3,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1                                     = 0x00C4,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3                                   = 0x00C4,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2                                   = 0x00C5,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1                                   = 0x00C6,
+      RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0                                   = 0x00C7,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD1                                      = 0x00C8,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3                                    = 0x00C8,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2                                    = 0x00C9,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1                                    = 0x00CA,
+      RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0                                    = 0x00CB,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1                                       = 0x00CC,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3                                     = 0x00CC,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2                                     = 0x00CD,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1                                     = 0x00CE,
+      RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0                                     = 0x00CF,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1                                     = 0x00D0,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3                                   = 0x00D0,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2                                   = 0x00D1,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1                                   = 0x00D2,
+      RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0                                   = 0x00D3,
+      RESULT_CORE__SPARE_0                                                       = 0x00D4,
+      PHASECAL_RESULT__REFERENCE_PHASE                                           = 0x00D6,
+      PHASECAL_RESULT__REFERENCE_PHASE_HI                                        = 0x00D6,
+      PHASECAL_RESULT__REFERENCE_PHASE_LO                                        = 0x00D7,
+      PHASECAL_RESULT__VCSEL_START                                               = 0x00D8,
+      REF_SPAD_CHAR_RESULT__NUM_ACTUAL_REF_SPADS                                 = 0x00D9,
+      REF_SPAD_CHAR_RESULT__REF_LOCATION                                         = 0x00DA,
+      VHV_RESULT__COLDBOOT_STATUS                                                = 0x00DB,
+      VHV_RESULT__SEARCH_RESULT                                                  = 0x00DC,
+      VHV_RESULT__LATEST_SETTING                                                 = 0x00DD,
+      RESULT__OSC_CALIBRATE_VAL                                                  = 0x00DE,
+      RESULT__OSC_CALIBRATE_VAL_HI                                               = 0x00DE,
+      RESULT__OSC_CALIBRATE_VAL_LO                                               = 0x00DF,
+      ANA_CONFIG__POWERDOWN_GO1                                                  = 0x00E0,
+      ANA_CONFIG__REF_BG_CTRL                                                    = 0x00E1,
+      ANA_CONFIG__REGDVDD1V2_CTRL                                                = 0x00E2,
+      ANA_CONFIG__OSC_SLOW_CTRL                                                  = 0x00E3,
+      TEST_MODE__STATUS                                                          = 0x00E4,
+      FIRMWARE__SYSTEM_STATUS                                                    = 0x00E5,
+      FIRMWARE__MODE_STATUS                                                      = 0x00E6,
+      FIRMWARE__SECONDARY_MODE_STATUS                                            = 0x00E7,
+      FIRMWARE__CAL_REPEAT_RATE_COUNTER                                          = 0x00E8,
+      FIRMWARE__CAL_REPEAT_RATE_COUNTER_HI                                       = 0x00E8,
+      FIRMWARE__CAL_REPEAT_RATE_COUNTER_LO                                       = 0x00E9,
+      FIRMWARE__HISTOGRAM_BIN                                                    = 0x00EA,
+      GPH__SYSTEM__THRESH_HIGH                                                   = 0x00EC,
+      GPH__SYSTEM__THRESH_HIGH_HI                                                = 0x00EC,
+      GPH__SYSTEM__THRESH_HIGH_LO                                                = 0x00ED,
+      GPH__SYSTEM__THRESH_LOW                                                    = 0x00EE,
+      GPH__SYSTEM__THRESH_LOW_HI                                                 = 0x00EE,
+      GPH__SYSTEM__THRESH_LOW_LO                                                 = 0x00EF,
+      GPH__SYSTEM__ENABLE_XTALK_PER_QUADRANT                                     = 0x00F0,
+      GPH__SPARE_0                                                               = 0x00F1,
+      GPH__SD_CONFIG__WOI_SD0                                                    = 0x00F2,
+      GPH__SD_CONFIG__WOI_SD1                                                    = 0x00F3,
+      GPH__SD_CONFIG__INITIAL_PHASE_SD0                                          = 0x00F4,
+      GPH__SD_CONFIG__INITIAL_PHASE_SD1                                          = 0x00F5,
+      GPH__SD_CONFIG__FIRST_ORDER_SELECT                                         = 0x00F6,
+      GPH__SD_CONFIG__QUANTIFIER                                                 = 0x00F7,
+      GPH__ROI_CONFIG__USER_ROI_CENTRE_SPAD                                      = 0x00F8,
+      GPH__ROI_CONFIG__USER_ROI_REQUESTED_GLOBAL_XY_SIZE                         = 0x00F9,
+      GPH__SYSTEM__SEQUENCE_CONFIG                                               = 0x00FA,
+      GPH__GPH_ID                                                                = 0x00FB,
+      SYSTEM__INTERRUPT_SET                                                      = 0x00FC,
+      INTERRUPT_MANAGER__ENABLES                                                 = 0x00FD,
+      INTERRUPT_MANAGER__CLEAR                                                   = 0x00FE,
+      INTERRUPT_MANAGER__STATUS                                                  = 0x00FF,
+      MCU_TO_HOST_BANK__WR_ACCESS_EN                                             = 0x0100,
+      POWER_MANAGEMENT__GO1_RESET_STATUS                                         = 0x0101,
+      PAD_STARTUP_MODE__VALUE_RO                                                 = 0x0102,
+      PAD_STARTUP_MODE__VALUE_CTRL                                               = 0x0103,
+      PLL_PERIOD_US                                                              = 0x0104,
+      PLL_PERIOD_US_3                                                            = 0x0104,
+      PLL_PERIOD_US_2                                                            = 0x0105,
+      PLL_PERIOD_US_1                                                            = 0x0106,
+      PLL_PERIOD_US_0                                                            = 0x0107,
+      INTERRUPT_SCHEDULER__DATA_OUT                                              = 0x0108,
+      INTERRUPT_SCHEDULER__DATA_OUT_3                                            = 0x0108,
+      INTERRUPT_SCHEDULER__DATA_OUT_2                                            = 0x0109,
+      INTERRUPT_SCHEDULER__DATA_OUT_1                                            = 0x010A,
+      INTERRUPT_SCHEDULER__DATA_OUT_0                                            = 0x010B,
+      NVM_BIST__COMPLETE                                                         = 0x010C,
+      NVM_BIST__STATUS                                                           = 0x010D,
+      IDENTIFICATION__MODEL_ID                                                   = 0x010F,
+      IDENTIFICATION__MODULE_TYPE                                                = 0x0110,
+      IDENTIFICATION__REVISION_ID                                                = 0x0111,
+      IDENTIFICATION__MODULE_ID                                                  = 0x0112,
+      IDENTIFICATION__MODULE_ID_HI                                               = 0x0112,
+      IDENTIFICATION__MODULE_ID_LO                                               = 0x0113,
+      ANA_CONFIG__FAST_OSC__TRIM_MAX                                             = 0x0114,
+      ANA_CONFIG__FAST_OSC__FREQ_SET                                             = 0x0115,
+      ANA_CONFIG__VCSEL_TRIM                                                     = 0x0116,
+      ANA_CONFIG__VCSEL_SELION                                                   = 0x0117,
+      ANA_CONFIG__VCSEL_SELION_MAX                                               = 0x0118,
+      PROTECTED_LASER_SAFETY__LOCK_BIT                                           = 0x0119,
+      LASER_SAFETY__KEY                                                          = 0x011A,
+      LASER_SAFETY__KEY_RO                                                       = 0x011B,
+      LASER_SAFETY__CLIP                                                         = 0x011C,
+      LASER_SAFETY__MULT                                                         = 0x011D,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_0                                          = 0x011E,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_1                                          = 0x011F,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_2                                          = 0x0120,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_3                                          = 0x0121,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_4                                          = 0x0122,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_5                                          = 0x0123,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_6                                          = 0x0124,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_7                                          = 0x0125,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_8                                          = 0x0126,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_9                                          = 0x0127,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_10                                         = 0x0128,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_11                                         = 0x0129,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_12                                         = 0x012A,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_13                                         = 0x012B,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_14                                         = 0x012C,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_15                                         = 0x012D,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_16                                         = 0x012E,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_17                                         = 0x012F,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_18                                         = 0x0130,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_19                                         = 0x0131,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_20                                         = 0x0132,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_21                                         = 0x0133,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_22                                         = 0x0134,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_23                                         = 0x0135,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_24                                         = 0x0136,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_25                                         = 0x0137,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_26                                         = 0x0138,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_27                                         = 0x0139,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_28                                         = 0x013A,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_29                                         = 0x013B,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_30                                         = 0x013C,
+      GLOBAL_CONFIG__SPAD_ENABLES_RTN_31                                         = 0x013D,
+      ROI_CONFIG__MODE_ROI_CENTRE_SPAD                                           = 0x013E,
+      ROI_CONFIG__MODE_ROI_XY_SIZE                                               = 0x013F,
+      GO2_HOST_BANK_ACCESS__OVERRIDE                                             = 0x0300,
+      MCU_UTIL_MULTIPLIER__MULTIPLICAND                                          = 0x0400,
+      MCU_UTIL_MULTIPLIER__MULTIPLICAND_3                                        = 0x0400,
+      MCU_UTIL_MULTIPLIER__MULTIPLICAND_2                                        = 0x0401,
+      MCU_UTIL_MULTIPLIER__MULTIPLICAND_1                                        = 0x0402,
+      MCU_UTIL_MULTIPLIER__MULTIPLICAND_0                                        = 0x0403,
+      MCU_UTIL_MULTIPLIER__MULTIPLIER                                            = 0x0404,
+      MCU_UTIL_MULTIPLIER__MULTIPLIER_3                                          = 0x0404,
+      MCU_UTIL_MULTIPLIER__MULTIPLIER_2                                          = 0x0405,
+      MCU_UTIL_MULTIPLIER__MULTIPLIER_1                                          = 0x0406,
+      MCU_UTIL_MULTIPLIER__MULTIPLIER_0                                          = 0x0407,
+      MCU_UTIL_MULTIPLIER__PRODUCT_HI                                            = 0x0408,
+      MCU_UTIL_MULTIPLIER__PRODUCT_HI_3                                          = 0x0408,
+      MCU_UTIL_MULTIPLIER__PRODUCT_HI_2                                          = 0x0409,
+      MCU_UTIL_MULTIPLIER__PRODUCT_HI_1                                          = 0x040A,
+      MCU_UTIL_MULTIPLIER__PRODUCT_HI_0                                          = 0x040B,
+      MCU_UTIL_MULTIPLIER__PRODUCT_LO                                            = 0x040C,
+      MCU_UTIL_MULTIPLIER__PRODUCT_LO_3                                          = 0x040C,
+      MCU_UTIL_MULTIPLIER__PRODUCT_LO_2                                          = 0x040D,
+      MCU_UTIL_MULTIPLIER__PRODUCT_LO_1                                          = 0x040E,
+      MCU_UTIL_MULTIPLIER__PRODUCT_LO_0                                          = 0x040F,
+      MCU_UTIL_MULTIPLIER__START                                                 = 0x0410,
+      MCU_UTIL_MULTIPLIER__STATUS                                                = 0x0411,
+      MCU_UTIL_DIVIDER__START                                                    = 0x0412,
+      MCU_UTIL_DIVIDER__STATUS                                                   = 0x0413,
+      MCU_UTIL_DIVIDER__DIVIDEND                                                 = 0x0414,
+      MCU_UTIL_DIVIDER__DIVIDEND_3                                               = 0x0414,
+      MCU_UTIL_DIVIDER__DIVIDEND_2                                               = 0x0415,
+      MCU_UTIL_DIVIDER__DIVIDEND_1                                               = 0x0416,
+      MCU_UTIL_DIVIDER__DIVIDEND_0                                               = 0x0417,
+      MCU_UTIL_DIVIDER__DIVISOR                                                  = 0x0418,
+      MCU_UTIL_DIVIDER__DIVISOR_3                                                = 0x0418,
+      MCU_UTIL_DIVIDER__DIVISOR_2                                                = 0x0419,
+      MCU_UTIL_DIVIDER__DIVISOR_1                                                = 0x041A,
+      MCU_UTIL_DIVIDER__DIVISOR_0                                                = 0x041B,
+      MCU_UTIL_DIVIDER__QUOTIENT                                                 = 0x041C,
+      MCU_UTIL_DIVIDER__QUOTIENT_3                                               = 0x041C,
+      MCU_UTIL_DIVIDER__QUOTIENT_2                                               = 0x041D,
+      MCU_UTIL_DIVIDER__QUOTIENT_1                                               = 0x041E,
+      MCU_UTIL_DIVIDER__QUOTIENT_0                                               = 0x041F,
+      TIMER0__VALUE_IN                                                           = 0x0420,
+      TIMER0__VALUE_IN_3                                                         = 0x0420,
+      TIMER0__VALUE_IN_2                                                         = 0x0421,
+      TIMER0__VALUE_IN_1                                                         = 0x0422,
+      TIMER0__VALUE_IN_0                                                         = 0x0423,
+      TIMER1__VALUE_IN                                                           = 0x0424,
+      TIMER1__VALUE_IN_3                                                         = 0x0424,
+      TIMER1__VALUE_IN_2                                                         = 0x0425,
+      TIMER1__VALUE_IN_1                                                         = 0x0426,
+      TIMER1__VALUE_IN_0                                                         = 0x0427,
+      TIMER0__CTRL                                                               = 0x0428,
+      TIMER1__CTRL                                                               = 0x0429,
+      MCU_GENERAL_PURPOSE__GP_0                                                  = 0x042C,
+      MCU_GENERAL_PURPOSE__GP_1                                                  = 0x042D,
+      MCU_GENERAL_PURPOSE__GP_2                                                  = 0x042E,
+      MCU_GENERAL_PURPOSE__GP_3                                                  = 0x042F,
+      MCU_RANGE_CALC__CONFIG                                                     = 0x0430,
+      MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE                                     = 0x0432,
+      MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE_HI                                  = 0x0432,
+      MCU_RANGE_CALC__OFFSET_CORRECTED_RANGE_LO                                  = 0x0433,
+      MCU_RANGE_CALC__SPARE_4                                                    = 0x0434,
+      MCU_RANGE_CALC__SPARE_4_3                                                  = 0x0434,
+      MCU_RANGE_CALC__SPARE_4_2                                                  = 0x0435,
+      MCU_RANGE_CALC__SPARE_4_1                                                  = 0x0436,
+      MCU_RANGE_CALC__SPARE_4_0                                                  = 0x0437,
+      MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC                                  = 0x0438,
+      MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC_HI                               = 0x0438,
+      MCU_RANGE_CALC__AMBIENT_DURATION_PRE_CALC_LO                               = 0x0439,
+      MCU_RANGE_CALC__ALGO_VCSEL_PERIOD                                          = 0x043C,
+      MCU_RANGE_CALC__SPARE_5                                                    = 0x043D,
+      MCU_RANGE_CALC__ALGO_TOTAL_PERIODS                                         = 0x043E,
+      MCU_RANGE_CALC__ALGO_TOTAL_PERIODS_HI                                      = 0x043E,
+      MCU_RANGE_CALC__ALGO_TOTAL_PERIODS_LO                                      = 0x043F,
+      MCU_RANGE_CALC__ALGO_ACCUM_PHASE                                           = 0x0440,
+      MCU_RANGE_CALC__ALGO_ACCUM_PHASE_3                                         = 0x0440,
+      MCU_RANGE_CALC__ALGO_ACCUM_PHASE_2                                         = 0x0441,
+      MCU_RANGE_CALC__ALGO_ACCUM_PHASE_1                                         = 0x0442,
+      MCU_RANGE_CALC__ALGO_ACCUM_PHASE_0                                         = 0x0443,
+      MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS                                         = 0x0444,
+      MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_3                                       = 0x0444,
+      MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_2                                       = 0x0445,
+      MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_1                                       = 0x0446,
+      MCU_RANGE_CALC__ALGO_SIGNAL_EVENTS_0                                       = 0x0447,
+      MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS                                        = 0x0448,
+      MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_3                                      = 0x0448,
+      MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_2                                      = 0x0449,
+      MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_1                                      = 0x044A,
+      MCU_RANGE_CALC__ALGO_AMBIENT_EVENTS_0                                      = 0x044B,
+      MCU_RANGE_CALC__SPARE_6                                                    = 0x044C,
+      MCU_RANGE_CALC__SPARE_6_HI                                                 = 0x044C,
+      MCU_RANGE_CALC__SPARE_6_LO                                                 = 0x044D,
+      MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD                                   = 0x044E,
+      MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD_HI                                = 0x044E,
+      MCU_RANGE_CALC__ALGO_ADJUST_VCSEL_PERIOD_LO                                = 0x044F,
+      MCU_RANGE_CALC__NUM_SPADS                                                  = 0x0450,
+      MCU_RANGE_CALC__NUM_SPADS_HI                                               = 0x0450,
+      MCU_RANGE_CALC__NUM_SPADS_LO                                               = 0x0451,
+      MCU_RANGE_CALC__PHASE_OUTPUT                                               = 0x0452,
+      MCU_RANGE_CALC__PHASE_OUTPUT_HI                                            = 0x0452,
+      MCU_RANGE_CALC__PHASE_OUTPUT_LO                                            = 0x0453,
+      MCU_RANGE_CALC__RATE_PER_SPAD_MCPS                                         = 0x0454,
+      MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_3                                       = 0x0454,
+      MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_2                                       = 0x0455,
+      MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_1                                       = 0x0456,
+      MCU_RANGE_CALC__RATE_PER_SPAD_MCPS_0                                       = 0x0457,
+      MCU_RANGE_CALC__SPARE_7                                                    = 0x0458,
+      MCU_RANGE_CALC__SPARE_8                                                    = 0x0459,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS                                      = 0x045A,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS_HI                                   = 0x045A,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_MCPS_LO                                   = 0x045B,
+      MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS                                       = 0x045C,
+      MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS_HI                                    = 0x045C,
+      MCU_RANGE_CALC__AVG_SIGNAL_RATE_MCPS_LO                                    = 0x045D,
+      MCU_RANGE_CALC__AMBIENT_RATE_MCPS                                          = 0x045E,
+      MCU_RANGE_CALC__AMBIENT_RATE_MCPS_HI                                       = 0x045E,
+      MCU_RANGE_CALC__AMBIENT_RATE_MCPS_LO                                       = 0x045F,
+      MCU_RANGE_CALC__XTALK                                                      = 0x0460,
+      MCU_RANGE_CALC__XTALK_HI                                                   = 0x0460,
+      MCU_RANGE_CALC__XTALK_LO                                                   = 0x0461,
+      MCU_RANGE_CALC__CALC_STATUS                                                = 0x0462,
+      MCU_RANGE_CALC__DEBUG                                                      = 0x0463,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS                           = 0x0464,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS_HI                        = 0x0464,
+      MCU_RANGE_CALC__PEAK_SIGNAL_RATE_XTALK_CORR_MCPS_LO                        = 0x0465,
+      MCU_RANGE_CALC__SPARE_0                                                    = 0x0468,
+      MCU_RANGE_CALC__SPARE_1                                                    = 0x0469,
+      MCU_RANGE_CALC__SPARE_2                                                    = 0x046A,
+      MCU_RANGE_CALC__SPARE_3                                                    = 0x046B,
+      PATCH__CTRL                                                                = 0x0470,
+      PATCH__JMP_ENABLES                                                         = 0x0472,
+      PATCH__JMP_ENABLES_HI                                                      = 0x0472,
+      PATCH__JMP_ENABLES_LO                                                      = 0x0473,
+      PATCH__DATA_ENABLES                                                        = 0x0474,
+      PATCH__DATA_ENABLES_HI                                                     = 0x0474,
+      PATCH__DATA_ENABLES_LO                                                     = 0x0475,
+      PATCH__OFFSET_0                                                            = 0x0476,
+      PATCH__OFFSET_0_HI                                                         = 0x0476,
+      PATCH__OFFSET_0_LO                                                         = 0x0477,
+      PATCH__OFFSET_1                                                            = 0x0478,
+      PATCH__OFFSET_1_HI                                                         = 0x0478,
+      PATCH__OFFSET_1_LO                                                         = 0x0479,
+      PATCH__OFFSET_2                                                            = 0x047A,
+      PATCH__OFFSET_2_HI                                                         = 0x047A,
+      PATCH__OFFSET_2_LO                                                         = 0x047B,
+      PATCH__OFFSET_3                                                            = 0x047C,
+      PATCH__OFFSET_3_HI                                                         = 0x047C,
+      PATCH__OFFSET_3_LO                                                         = 0x047D,
+      PATCH__OFFSET_4                                                            = 0x047E,
+      PATCH__OFFSET_4_HI                                                         = 0x047E,
+      PATCH__OFFSET_4_LO                                                         = 0x047F,
+      PATCH__OFFSET_5                                                            = 0x0480,
+      PATCH__OFFSET_5_HI                                                         = 0x0480,
+      PATCH__OFFSET_5_LO                                                         = 0x0481,
+      PATCH__OFFSET_6                                                            = 0x0482,
+      PATCH__OFFSET_6_HI                                                         = 0x0482,
+      PATCH__OFFSET_6_LO                                                         = 0x0483,
+      PATCH__OFFSET_7                                                            = 0x0484,
+      PATCH__OFFSET_7_HI                                                         = 0x0484,
+      PATCH__OFFSET_7_LO                                                         = 0x0485,
+      PATCH__OFFSET_8                                                            = 0x0486,
+      PATCH__OFFSET_8_HI                                                         = 0x0486,
+      PATCH__OFFSET_8_LO                                                         = 0x0487,
+      PATCH__OFFSET_9                                                            = 0x0488,
+      PATCH__OFFSET_9_HI                                                         = 0x0488,
+      PATCH__OFFSET_9_LO                                                         = 0x0489,
+      PATCH__OFFSET_10                                                           = 0x048A,
+      PATCH__OFFSET_10_HI                                                        = 0x048A,
+      PATCH__OFFSET_10_LO                                                        = 0x048B,
+      PATCH__OFFSET_11                                                           = 0x048C,
+      PATCH__OFFSET_11_HI                                                        = 0x048C,
+      PATCH__OFFSET_11_LO                                                        = 0x048D,
+      PATCH__OFFSET_12                                                           = 0x048E,
+      PATCH__OFFSET_12_HI                                                        = 0x048E,
+      PATCH__OFFSET_12_LO                                                        = 0x048F,
+      PATCH__OFFSET_13                                                           = 0x0490,
+      PATCH__OFFSET_13_HI                                                        = 0x0490,
+      PATCH__OFFSET_13_LO                                                        = 0x0491,
+      PATCH__OFFSET_14                                                           = 0x0492,
+      PATCH__OFFSET_14_HI                                                        = 0x0492,
+      PATCH__OFFSET_14_LO                                                        = 0x0493,
+      PATCH__OFFSET_15                                                           = 0x0494,
+      PATCH__OFFSET_15_HI                                                        = 0x0494,
+      PATCH__OFFSET_15_LO                                                        = 0x0495,
+      PATCH__ADDRESS_0                                                           = 0x0496,
+      PATCH__ADDRESS_0_HI                                                        = 0x0496,
+      PATCH__ADDRESS_0_LO                                                        = 0x0497,
+      PATCH__ADDRESS_1                                                           = 0x0498,
+      PATCH__ADDRESS_1_HI                                                        = 0x0498,
+      PATCH__ADDRESS_1_LO                                                        = 0x0499,
+      PATCH__ADDRESS_2                                                           = 0x049A,
+      PATCH__ADDRESS_2_HI                                                        = 0x049A,
+      PATCH__ADDRESS_2_LO                                                        = 0x049B,
+      PATCH__ADDRESS_3                                                           = 0x049C,
+      PATCH__ADDRESS_3_HI                                                        = 0x049C,
+      PATCH__ADDRESS_3_LO                                                        = 0x049D,
+      PATCH__ADDRESS_4                                                           = 0x049E,
+      PATCH__ADDRESS_4_HI                                                        = 0x049E,
+      PATCH__ADDRESS_4_LO                                                        = 0x049F,
+      PATCH__ADDRESS_5                                                           = 0x04A0,
+      PATCH__ADDRESS_5_HI                                                        = 0x04A0,
+      PATCH__ADDRESS_5_LO                                                        = 0x04A1,
+      PATCH__ADDRESS_6                                                           = 0x04A2,
+      PATCH__ADDRESS_6_HI                                                        = 0x04A2,
+      PATCH__ADDRESS_6_LO                                                        = 0x04A3,
+      PATCH__ADDRESS_7                                                           = 0x04A4,
+      PATCH__ADDRESS_7_HI                                                        = 0x04A4,
+      PATCH__ADDRESS_7_LO                                                        = 0x04A5,
+      PATCH__ADDRESS_8                                                           = 0x04A6,
+      PATCH__ADDRESS_8_HI                                                        = 0x04A6,
+      PATCH__ADDRESS_8_LO                                                        = 0x04A7,
+      PATCH__ADDRESS_9                                                           = 0x04A8,
+      PATCH__ADDRESS_9_HI                                                        = 0x04A8,
+      PATCH__ADDRESS_9_LO                                                        = 0x04A9,
+      PATCH__ADDRESS_10                                                          = 0x04AA,
+      PATCH__ADDRESS_10_HI                                                       = 0x04AA,
+      PATCH__ADDRESS_10_LO                                                       = 0x04AB,
+      PATCH__ADDRESS_11                                                          = 0x04AC,
+      PATCH__ADDRESS_11_HI                                                       = 0x04AC,
+      PATCH__ADDRESS_11_LO                                                       = 0x04AD,
+      PATCH__ADDRESS_12                                                          = 0x04AE,
+      PATCH__ADDRESS_12_HI                                                       = 0x04AE,
+      PATCH__ADDRESS_12_LO                                                       = 0x04AF,
+      PATCH__ADDRESS_13                                                          = 0x04B0,
+      PATCH__ADDRESS_13_HI                                                       = 0x04B0,
+      PATCH__ADDRESS_13_LO                                                       = 0x04B1,
+      PATCH__ADDRESS_14                                                          = 0x04B2,
+      PATCH__ADDRESS_14_HI                                                       = 0x04B2,
+      PATCH__ADDRESS_14_LO                                                       = 0x04B3,
+      PATCH__ADDRESS_15                                                          = 0x04B4,
+      PATCH__ADDRESS_15_HI                                                       = 0x04B4,
+      PATCH__ADDRESS_15_LO                                                       = 0x04B5,
+      SPI_ASYNC_MUX__CTRL                                                        = 0x04C0,
+      CLK__CONFIG                                                                = 0x04C4,
+      GPIO_LV_MUX__CTRL                                                          = 0x04CC,
+      GPIO_LV_PAD__CTRL                                                          = 0x04CD,
+      PAD_I2C_LV__CONFIG                                                         = 0x04D0,
+      PAD_STARTUP_MODE__VALUE_RO_GO1                                             = 0x04D4,
+      HOST_IF__STATUS_GO1                                                        = 0x04D5,
+      MCU_CLK_GATING__CTRL                                                       = 0x04D8,
+      TEST__BIST_ROM_CTRL                                                        = 0x04E0,
+      TEST__BIST_ROM_RESULT                                                      = 0x04E1,
+      TEST__BIST_ROM_MCU_SIG                                                     = 0x04E2,
+      TEST__BIST_ROM_MCU_SIG_HI                                                  = 0x04E2,
+      TEST__BIST_ROM_MCU_SIG_LO                                                  = 0x04E3,
+      TEST__BIST_RAM_CTRL                                                        = 0x04E4,
+      TEST__BIST_RAM_RESULT                                                      = 0x04E5,
+      TEST__TMC                                                                  = 0x04E8,
+      TEST__PLL_BIST_MIN_THRESHOLD                                               = 0x04F0,
+      TEST__PLL_BIST_MIN_THRESHOLD_HI                                            = 0x04F0,
+      TEST__PLL_BIST_MIN_THRESHOLD_LO                                            = 0x04F1,
+      TEST__PLL_BIST_MAX_THRESHOLD                                               = 0x04F2,
+      TEST__PLL_BIST_MAX_THRESHOLD_HI                                            = 0x04F2,
+      TEST__PLL_BIST_MAX_THRESHOLD_LO                                            = 0x04F3,
+      TEST__PLL_BIST_COUNT_OUT                                                   = 0x04F4,
+      TEST__PLL_BIST_COUNT_OUT_HI                                                = 0x04F4,
+      TEST__PLL_BIST_COUNT_OUT_LO                                                = 0x04F5,
+      TEST__PLL_BIST_GONOGO                                                      = 0x04F6,
+      TEST__PLL_BIST_CTRL                                                        = 0x04F7,
+      RANGING_CORE__DEVICE_ID                                                    = 0x0680,
+      RANGING_CORE__REVISION_ID                                                  = 0x0681,
+      RANGING_CORE__CLK_CTRL1                                                    = 0x0683,
+      RANGING_CORE__CLK_CTRL2                                                    = 0x0684,
+      RANGING_CORE__WOI_1                                                        = 0x0685,
+      RANGING_CORE__WOI_REF_1                                                    = 0x0686,
+      RANGING_CORE__START_RANGING                                                = 0x0687,
+      RANGING_CORE__LOW_LIMIT_1                                                  = 0x0690,
+      RANGING_CORE__HIGH_LIMIT_1                                                 = 0x0691,
+      RANGING_CORE__LOW_LIMIT_REF_1                                              = 0x0692,
+      RANGING_CORE__HIGH_LIMIT_REF_1                                             = 0x0693,
+      RANGING_CORE__QUANTIFIER_1_MSB                                             = 0x0694,
+      RANGING_CORE__QUANTIFIER_1_LSB                                             = 0x0695,
+      RANGING_CORE__QUANTIFIER_REF_1_MSB                                         = 0x0696,
+      RANGING_CORE__QUANTIFIER_REF_1_LSB                                         = 0x0697,
+      RANGING_CORE__AMBIENT_OFFSET_1_MSB                                         = 0x0698,
+      RANGING_CORE__AMBIENT_OFFSET_1_LSB                                         = 0x0699,
+      RANGING_CORE__AMBIENT_OFFSET_REF_1_MSB                                     = 0x069A,
+      RANGING_CORE__AMBIENT_OFFSET_REF_1_LSB                                     = 0x069B,
+      RANGING_CORE__FILTER_STRENGTH_1                                            = 0x069C,
+      RANGING_CORE__FILTER_STRENGTH_REF_1                                        = 0x069D,
+      RANGING_CORE__SIGNAL_EVENT_LIMIT_1_MSB                                     = 0x069E,
+      RANGING_CORE__SIGNAL_EVENT_LIMIT_1_LSB                                     = 0x069F,
+      RANGING_CORE__SIGNAL_EVENT_LIMIT_REF_1_MSB                                 = 0x06A0,
+      RANGING_CORE__SIGNAL_EVENT_LIMIT_REF_1_LSB                                 = 0x06A1,
+      RANGING_CORE__TIMEOUT_OVERALL_PERIODS_MSB                                  = 0x06A4,
+      RANGING_CORE__TIMEOUT_OVERALL_PERIODS_LSB                                  = 0x06A5,
+      RANGING_CORE__INVERT_HW                                                    = 0x06A6,
+      RANGING_CORE__FORCE_HW                                                     = 0x06A7,
+      RANGING_CORE__STATIC_HW_VALUE                                              = 0x06A8,
+      RANGING_CORE__FORCE_CONTINUOUS_AMBIENT                                     = 0x06A9,
+      RANGING_CORE__TEST_PHASE_SELECT_TO_FILTER                                  = 0x06AA,
+      RANGING_CORE__TEST_PHASE_SELECT_TO_TIMING_GEN                              = 0x06AB,
+      RANGING_CORE__INITIAL_PHASE_VALUE_1                                        = 0x06AC,
+      RANGING_CORE__INITIAL_PHASE_VALUE_REF_1                                    = 0x06AD,
+      RANGING_CORE__FORCE_UP_IN                                                  = 0x06AE,
+      RANGING_CORE__FORCE_DN_IN                                                  = 0x06AF,
+      RANGING_CORE__STATIC_UP_VALUE_1                                            = 0x06B0,
+      RANGING_CORE__STATIC_UP_VALUE_REF_1                                        = 0x06B1,
+      RANGING_CORE__STATIC_DN_VALUE_1                                            = 0x06B2,
+      RANGING_CORE__STATIC_DN_VALUE_REF_1                                        = 0x06B3,
+      RANGING_CORE__MONITOR_UP_DN                                                = 0x06B4,
+      RANGING_CORE__INVERT_UP_DN                                                 = 0x06B5,
+      RANGING_CORE__CPUMP_1                                                      = 0x06B6,
+      RANGING_CORE__CPUMP_2                                                      = 0x06B7,
+      RANGING_CORE__CPUMP_3                                                      = 0x06B8,
+      RANGING_CORE__OSC_1                                                        = 0x06B9,
+      RANGING_CORE__PLL_1                                                        = 0x06BB,
+      RANGING_CORE__PLL_2                                                        = 0x06BC,
+      RANGING_CORE__REFERENCE_1                                                  = 0x06BD,
+      RANGING_CORE__REFERENCE_3                                                  = 0x06BF,
+      RANGING_CORE__REFERENCE_4                                                  = 0x06C0,
+      RANGING_CORE__REFERENCE_5                                                  = 0x06C1,
+      RANGING_CORE__REGAVDD1V2                                                   = 0x06C3,
+      RANGING_CORE__CALIB_1                                                      = 0x06C4,
+      RANGING_CORE__CALIB_2                                                      = 0x06C5,
+      RANGING_CORE__CALIB_3                                                      = 0x06C6,
+      RANGING_CORE__TST_MUX_SEL1                                                 = 0x06C9,
+      RANGING_CORE__TST_MUX_SEL2                                                 = 0x06CA,
+      RANGING_CORE__TST_MUX                                                      = 0x06CB,
+      RANGING_CORE__GPIO_OUT_TESTMUX                                             = 0x06CC,
+      RANGING_CORE__CUSTOM_FE                                                    = 0x06CD,
+      RANGING_CORE__CUSTOM_FE_2                                                  = 0x06CE,
+      RANGING_CORE__SPAD_READOUT                                                 = 0x06CF,
+      RANGING_CORE__SPAD_READOUT_1                                               = 0x06D0,
+      RANGING_CORE__SPAD_READOUT_2                                               = 0x06D1,
+      RANGING_CORE__SPAD_PS                                                      = 0x06D2,
+      RANGING_CORE__LASER_SAFETY_2                                               = 0x06D4,
+      RANGING_CORE__NVM_CTRL__MODE                                               = 0x0780,
+      RANGING_CORE__NVM_CTRL__PDN                                                = 0x0781,
+      RANGING_CORE__NVM_CTRL__PROGN                                              = 0x0782,
+      RANGING_CORE__NVM_CTRL__READN                                              = 0x0783,
+      RANGING_CORE__NVM_CTRL__PULSE_WIDTH_MSB                                    = 0x0784,
+      RANGING_CORE__NVM_CTRL__PULSE_WIDTH_LSB                                    = 0x0785,
+      RANGING_CORE__NVM_CTRL__HV_RISE_MSB                                        = 0x0786,
+      RANGING_CORE__NVM_CTRL__HV_RISE_LSB                                        = 0x0787,
+      RANGING_CORE__NVM_CTRL__HV_FALL_MSB                                        = 0x0788,
+      RANGING_CORE__NVM_CTRL__HV_FALL_LSB                                        = 0x0789,
+      RANGING_CORE__NVM_CTRL__TST                                                = 0x078A,
+      RANGING_CORE__NVM_CTRL__TESTREAD                                           = 0x078B,
+      RANGING_CORE__NVM_CTRL__DATAIN_MMM                                         = 0x078C,
+      RANGING_CORE__NVM_CTRL__DATAIN_LMM                                         = 0x078D,
+      RANGING_CORE__NVM_CTRL__DATAIN_LLM                                         = 0x078E,
+      RANGING_CORE__NVM_CTRL__DATAIN_LLL                                         = 0x078F,
+      RANGING_CORE__NVM_CTRL__DATAOUT_MMM                                        = 0x0790,
+      RANGING_CORE__NVM_CTRL__DATAOUT_LMM                                        = 0x0791,
+      RANGING_CORE__NVM_CTRL__DATAOUT_LLM                                        = 0x0792,
+      RANGING_CORE__NVM_CTRL__DATAOUT_LLL                                        = 0x0793,
+      RANGING_CORE__NVM_CTRL__ADDR                                               = 0x0794,
+      RANGING_CORE__NVM_CTRL__DATAOUT_ECC                                        = 0x0795,
+      RANGING_CORE__RET_SPAD_EN_0                                                = 0x0796,
+      RANGING_CORE__RET_SPAD_EN_1                                                = 0x0797,
+      RANGING_CORE__RET_SPAD_EN_2                                                = 0x0798,
+      RANGING_CORE__RET_SPAD_EN_3                                                = 0x0799,
+      RANGING_CORE__RET_SPAD_EN_4                                                = 0x079A,
+      RANGING_CORE__RET_SPAD_EN_5                                                = 0x079B,
+      RANGING_CORE__RET_SPAD_EN_6                                                = 0x079C,
+      RANGING_CORE__RET_SPAD_EN_7                                                = 0x079D,
+      RANGING_CORE__RET_SPAD_EN_8                                                = 0x079E,
+      RANGING_CORE__RET_SPAD_EN_9                                                = 0x079F,
+      RANGING_CORE__RET_SPAD_EN_10                                               = 0x07A0,
+      RANGING_CORE__RET_SPAD_EN_11                                               = 0x07A1,
+      RANGING_CORE__RET_SPAD_EN_12                                               = 0x07A2,
+      RANGING_CORE__RET_SPAD_EN_13                                               = 0x07A3,
+      RANGING_CORE__RET_SPAD_EN_14                                               = 0x07A4,
+      RANGING_CORE__RET_SPAD_EN_15                                               = 0x07A5,
+      RANGING_CORE__RET_SPAD_EN_16                                               = 0x07A6,
+      RANGING_CORE__RET_SPAD_EN_17                                               = 0x07A7,
+      RANGING_CORE__SPAD_SHIFT_EN                                                = 0x07BA,
+      RANGING_CORE__SPAD_DISABLE_CTRL                                            = 0x07BB,
+      RANGING_CORE__SPAD_EN_SHIFT_OUT_DEBUG                                      = 0x07BC,
+      RANGING_CORE__SPI_MODE                                                     = 0x07BD,
+      RANGING_CORE__GPIO_DIR                                                     = 0x07BE,
+      RANGING_CORE__VCSEL_PERIOD                                                 = 0x0880,
+      RANGING_CORE__VCSEL_START                                                  = 0x0881,
+      RANGING_CORE__VCSEL_STOP                                                   = 0x0882,
+      RANGING_CORE__VCSEL_1                                                      = 0x0885,
+      RANGING_CORE__VCSEL_STATUS                                                 = 0x088D,
+      RANGING_CORE__STATUS                                                       = 0x0980,
+      RANGING_CORE__LASER_CONTINUITY_STATE                                       = 0x0981,
+      RANGING_CORE__RANGE_1_MMM                                                  = 0x0982,
+      RANGING_CORE__RANGE_1_LMM                                                  = 0x0983,
+      RANGING_CORE__RANGE_1_LLM                                                  = 0x0984,
+      RANGING_CORE__RANGE_1_LLL                                                  = 0x0985,
+      RANGING_CORE__RANGE_REF_1_MMM                                              = 0x0986,
+      RANGING_CORE__RANGE_REF_1_LMM                                              = 0x0987,
+      RANGING_CORE__RANGE_REF_1_LLM                                              = 0x0988,
+      RANGING_CORE__RANGE_REF_1_LLL                                              = 0x0989,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_MMM                                  = 0x098A,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LMM                                  = 0x098B,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LLM                                  = 0x098C,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_1_LLL                                  = 0x098D,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_1_MMM                                   = 0x098E,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_1_LMM                                   = 0x098F,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_1_LLM                                   = 0x0990,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_1_LLL                                   = 0x0991,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_MMM                                    = 0x0992,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LMM                                    = 0x0993,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LLM                                    = 0x0994,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_1_LLL                                    = 0x0995,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_MM                                   = 0x0996,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_LM                                   = 0x0997,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_1_LL                                   = 0x0998,
+      RANGING_CORE__AMBIENT_MISMATCH_MM                                          = 0x0999,
+      RANGING_CORE__AMBIENT_MISMATCH_LM                                          = 0x099A,
+      RANGING_CORE__AMBIENT_MISMATCH_LL                                          = 0x099B,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_MMM                              = 0x099C,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LMM                              = 0x099D,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LLM                              = 0x099E,
+      RANGING_CORE__AMBIENT_WINDOW_EVENTS_REF_1_LLL                              = 0x099F,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_MMM                               = 0x09A0,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LMM                               = 0x09A1,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LLM                               = 0x09A2,
+      RANGING_CORE__RANGING_TOTAL_EVENTS_REF_1_LLL                               = 0x09A3,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_MMM                                = 0x09A4,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LMM                                = 0x09A5,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LLM                                = 0x09A6,
+      RANGING_CORE__SIGNAL_TOTAL_EVENTS_REF_1_LLL                                = 0x09A7,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_MM                               = 0x09A8,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_LM                               = 0x09A9,
+      RANGING_CORE__TOTAL_PERIODS_ELAPSED_REF_1_LL                               = 0x09AA,
+      RANGING_CORE__AMBIENT_MISMATCH_REF_MM                                      = 0x09AB,
+      RANGING_CORE__AMBIENT_MISMATCH_REF_LM                                      = 0x09AC,
+      RANGING_CORE__AMBIENT_MISMATCH_REF_LL                                      = 0x09AD,
+      RANGING_CORE__GPIO_CONFIG__A0                                              = 0x0A00,
+      RANGING_CORE__RESET_CONTROL__A0                                            = 0x0A01,
+      RANGING_CORE__INTR_MANAGER__A0                                             = 0x0A02,
+      RANGING_CORE__POWER_FSM_TIME_OSC__A0                                       = 0x0A06,
+      RANGING_CORE__VCSEL_ATEST__A0                                              = 0x0A07,
+      RANGING_CORE__VCSEL_PERIOD_CLIPPED__A0                                     = 0x0A08,
+      RANGING_CORE__VCSEL_STOP_CLIPPED__A0                                       = 0x0A09,
+      RANGING_CORE__CALIB_2__A0                                                  = 0x0A0A,
+      RANGING_CORE__STOP_CONDITION__A0                                           = 0x0A0B,
+      RANGING_CORE__STATUS_RESET__A0                                             = 0x0A0C,
+      RANGING_CORE__READOUT_CFG__A0                                              = 0x0A0D,
+      RANGING_CORE__WINDOW_SETTING__A0                                           = 0x0A0E,
+      RANGING_CORE__VCSEL_DELAY__A0                                              = 0x0A1A,
+      RANGING_CORE__REFERENCE_2__A0                                              = 0x0A1B,
+      RANGING_CORE__REGAVDD1V2__A0                                               = 0x0A1D,
+      RANGING_CORE__TST_MUX__A0                                                  = 0x0A1F,
+      RANGING_CORE__CUSTOM_FE_2__A0                                              = 0x0A20,
+      RANGING_CORE__SPAD_READOUT__A0                                             = 0x0A21,
+      RANGING_CORE__CPUMP_1__A0                                                  = 0x0A22,
+      RANGING_CORE__SPARE_REGISTER__A0                                           = 0x0A23,
+      RANGING_CORE__VCSEL_CONT_STAGE5_BYPASS__A0                                 = 0x0A24,
+      RANGING_CORE__RET_SPAD_EN_18                                               = 0x0A25,
+      RANGING_CORE__RET_SPAD_EN_19                                               = 0x0A26,
+      RANGING_CORE__RET_SPAD_EN_20                                               = 0x0A27,
+      RANGING_CORE__RET_SPAD_EN_21                                               = 0x0A28,
+      RANGING_CORE__RET_SPAD_EN_22                                               = 0x0A29,
+      RANGING_CORE__RET_SPAD_EN_23                                               = 0x0A2A,
+      RANGING_CORE__RET_SPAD_EN_24                                               = 0x0A2B,
+      RANGING_CORE__RET_SPAD_EN_25                                               = 0x0A2C,
+      RANGING_CORE__RET_SPAD_EN_26                                               = 0x0A2D,
+      RANGING_CORE__RET_SPAD_EN_27                                               = 0x0A2E,
+      RANGING_CORE__RET_SPAD_EN_28                                               = 0x0A2F,
+      RANGING_CORE__RET_SPAD_EN_29                                               = 0x0A30,
+      RANGING_CORE__RET_SPAD_EN_30                                               = 0x0A31,
+      RANGING_CORE__RET_SPAD_EN_31                                               = 0x0A32,
+      RANGING_CORE__REF_SPAD_EN_0__EWOK                                          = 0x0A33,
+      RANGING_CORE__REF_SPAD_EN_1__EWOK                                          = 0x0A34,
+      RANGING_CORE__REF_SPAD_EN_2__EWOK                                          = 0x0A35,
+      RANGING_CORE__REF_SPAD_EN_3__EWOK                                          = 0x0A36,
+      RANGING_CORE__REF_SPAD_EN_4__EWOK                                          = 0x0A37,
+      RANGING_CORE__REF_SPAD_EN_5__EWOK                                          = 0x0A38,
+      RANGING_CORE__REF_EN_START_SELECT                                          = 0x0A39,
+      RANGING_CORE__REGDVDD1V2_ATEST__EWOK                                       = 0x0A41,
+      SOFT_RESET_GO1                                                             = 0x0B00,
+      PRIVATE__PATCH_BASE_ADDR_RSLV                                              = 0x0E00,
+      PREV_SHADOW_RESULT__INTERRUPT_STATUS                                       = 0x0ED0,
+      PREV_SHADOW_RESULT__RANGE_STATUS                                           = 0x0ED1,
+      PREV_SHADOW_RESULT__REPORT_STATUS                                          = 0x0ED2,
+      PREV_SHADOW_RESULT__STREAM_COUNT                                           = 0x0ED3,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0                         = 0x0ED4,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI                      = 0x0ED4,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO                      = 0x0ED5,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0                        = 0x0ED6,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI                     = 0x0ED6,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO                     = 0x0ED7,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0                            = 0x0ED8,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI                         = 0x0ED8,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO                         = 0x0ED9,
+      PREV_SHADOW_RESULT__SIGMA_SD0                                              = 0x0EDA,
+      PREV_SHADOW_RESULT__SIGMA_SD0_HI                                           = 0x0EDA,
+      PREV_SHADOW_RESULT__SIGMA_SD0_LO                                           = 0x0EDB,
+      PREV_SHADOW_RESULT__PHASE_SD0                                              = 0x0EDC,
+      PREV_SHADOW_RESULT__PHASE_SD0_HI                                           = 0x0EDC,
+      PREV_SHADOW_RESULT__PHASE_SD0_LO                                           = 0x0EDD,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0                 = 0x0EDE,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI              = 0x0EDE,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO              = 0x0EDF,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0    = 0x0EE0,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI = 0x0EE0,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO = 0x0EE1,
+      PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0                    = 0x0EE2,
+      PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                 = 0x0EE2,
+      PREV_SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                 = 0x0EE3,
+      PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0                    = 0x0EE4,
+      PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                 = 0x0EE4,
+      PREV_SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                 = 0x0EE5,
+      PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0                         = 0x0EE6,
+      PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI                      = 0x0EE6,
+      PREV_SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO                      = 0x0EE7,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1                         = 0x0EE8,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI                      = 0x0EE8,
+      PREV_SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO                      = 0x0EE9,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1                        = 0x0EEA,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI                     = 0x0EEA,
+      PREV_SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO                     = 0x0EEB,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1                            = 0x0EEC,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI                         = 0x0EEC,
+      PREV_SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO                         = 0x0EED,
+      PREV_SHADOW_RESULT__SIGMA_SD1                                              = 0x0EEE,
+      PREV_SHADOW_RESULT__SIGMA_SD1_HI                                           = 0x0EEE,
+      PREV_SHADOW_RESULT__SIGMA_SD1_LO                                           = 0x0EEF,
+      PREV_SHADOW_RESULT__PHASE_SD1                                              = 0x0EF0,
+      PREV_SHADOW_RESULT__PHASE_SD1_HI                                           = 0x0EF0,
+      PREV_SHADOW_RESULT__PHASE_SD1_LO                                           = 0x0EF1,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1                 = 0x0EF2,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI              = 0x0EF2,
+      PREV_SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO              = 0x0EF3,
+      PREV_SHADOW_RESULT__SPARE_0_SD1                                            = 0x0EF4,
+      PREV_SHADOW_RESULT__SPARE_0_SD1_HI                                         = 0x0EF4,
+      PREV_SHADOW_RESULT__SPARE_0_SD1_LO                                         = 0x0EF5,
+      PREV_SHADOW_RESULT__SPARE_1_SD1                                            = 0x0EF6,
+      PREV_SHADOW_RESULT__SPARE_1_SD1_HI                                         = 0x0EF6,
+      PREV_SHADOW_RESULT__SPARE_1_SD1_LO                                         = 0x0EF7,
+      PREV_SHADOW_RESULT__SPARE_2_SD1                                            = 0x0EF8,
+      PREV_SHADOW_RESULT__SPARE_2_SD1_HI                                         = 0x0EF8,
+      PREV_SHADOW_RESULT__SPARE_2_SD1_LO                                         = 0x0EF9,
+      PREV_SHADOW_RESULT__SPARE_3_SD1                                            = 0x0EFA,
+      PREV_SHADOW_RESULT__SPARE_3_SD1_HI                                         = 0x0EFA,
+      PREV_SHADOW_RESULT__SPARE_3_SD1_LO                                         = 0x0EFB,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0                         = 0x0EFC,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3                       = 0x0EFC,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2                       = 0x0EFD,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1                       = 0x0EFE,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0                       = 0x0EFF,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0                          = 0x0F00,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3                        = 0x0F00,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2                        = 0x0F01,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1                        = 0x0F02,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0                        = 0x0F03,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0                           = 0x0F04,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3                         = 0x0F04,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2                         = 0x0F05,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1                         = 0x0F06,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0                         = 0x0F07,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0                         = 0x0F08,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3                       = 0x0F08,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2                       = 0x0F09,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1                       = 0x0F0A,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0                       = 0x0F0B,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1                         = 0x0F0C,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3                       = 0x0F0C,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2                       = 0x0F0D,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1                       = 0x0F0E,
+      PREV_SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0                       = 0x0F0F,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1                          = 0x0F10,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3                        = 0x0F10,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2                        = 0x0F11,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1                        = 0x0F12,
+      PREV_SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0                        = 0x0F13,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1                           = 0x0F14,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3                         = 0x0F14,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2                         = 0x0F15,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1                         = 0x0F16,
+      PREV_SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0                         = 0x0F17,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1                         = 0x0F18,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3                       = 0x0F18,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2                       = 0x0F19,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1                       = 0x0F1A,
+      PREV_SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0                       = 0x0F1B,
+      PREV_SHADOW_RESULT_CORE__SPARE_0                                           = 0x0F1C,
+      RESULT__DEBUG_STATUS                                                       = 0x0F20,
+      RESULT__DEBUG_STAGE                                                        = 0x0F21,
+      GPH__SYSTEM__THRESH_RATE_HIGH                                              = 0x0F24,
+      GPH__SYSTEM__THRESH_RATE_HIGH_HI                                           = 0x0F24,
+      GPH__SYSTEM__THRESH_RATE_HIGH_LO                                           = 0x0F25,
+      GPH__SYSTEM__THRESH_RATE_LOW                                               = 0x0F26,
+      GPH__SYSTEM__THRESH_RATE_LOW_HI                                            = 0x0F26,
+      GPH__SYSTEM__THRESH_RATE_LOW_LO                                            = 0x0F27,
+      GPH__SYSTEM__INTERRUPT_CONFIG_GPIO                                         = 0x0F28,
+      GPH__DSS_CONFIG__ROI_MODE_CONTROL                                          = 0x0F2F,
+      GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT                             = 0x0F30,
+      GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_HI                          = 0x0F30,
+      GPH__DSS_CONFIG__MANUAL_EFFECTIVE_SPADS_SELECT_LO                          = 0x0F31,
+      GPH__DSS_CONFIG__MANUAL_BLOCK_SELECT                                       = 0x0F32,
+      GPH__DSS_CONFIG__MAX_SPADS_LIMIT                                           = 0x0F33,
+      GPH__DSS_CONFIG__MIN_SPADS_LIMIT                                           = 0x0F34,
+      GPH__MM_CONFIG__TIMEOUT_MACROP_A_HI                                        = 0x0F36,
+      GPH__MM_CONFIG__TIMEOUT_MACROP_A_LO                                        = 0x0F37,
+      GPH__MM_CONFIG__TIMEOUT_MACROP_B_HI                                        = 0x0F38,
+      GPH__MM_CONFIG__TIMEOUT_MACROP_B_LO                                        = 0x0F39,
+      GPH__RANGE_CONFIG__TIMEOUT_MACROP_A_HI                                     = 0x0F3A,
+      GPH__RANGE_CONFIG__TIMEOUT_MACROP_A_LO                                     = 0x0F3B,
+      GPH__RANGE_CONFIG__VCSEL_PERIOD_A                                          = 0x0F3C,
+      GPH__RANGE_CONFIG__VCSEL_PERIOD_B                                          = 0x0F3D,
+      GPH__RANGE_CONFIG__TIMEOUT_MACROP_B_HI                                     = 0x0F3E,
+      GPH__RANGE_CONFIG__TIMEOUT_MACROP_B_LO                                     = 0x0F3F,
+      GPH__RANGE_CONFIG__SIGMA_THRESH                                            = 0x0F40,
+      GPH__RANGE_CONFIG__SIGMA_THRESH_HI                                         = 0x0F40,
+      GPH__RANGE_CONFIG__SIGMA_THRESH_LO                                         = 0x0F41,
+      GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS                           = 0x0F42,
+      GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_HI                        = 0x0F42,
+      GPH__RANGE_CONFIG__MIN_COUNT_RATE_RTN_LIMIT_MCPS_LO                        = 0x0F43,
+      GPH__RANGE_CONFIG__VALID_PHASE_LOW                                         = 0x0F44,
+      GPH__RANGE_CONFIG__VALID_PHASE_HIGH                                        = 0x0F45,
+      FIRMWARE__INTERNAL_STREAM_COUNT_DIV                                        = 0x0F46,
+      FIRMWARE__INTERNAL_STREAM_COUNTER_VAL                                      = 0x0F47,
+      DSS_CALC__ROI_CTRL                                                         = 0x0F54,
+      DSS_CALC__SPARE_1                                                          = 0x0F55,
+      DSS_CALC__SPARE_2                                                          = 0x0F56,
+      DSS_CALC__SPARE_3                                                          = 0x0F57,
+      DSS_CALC__SPARE_4                                                          = 0x0F58,
+      DSS_CALC__SPARE_5                                                          = 0x0F59,
+      DSS_CALC__SPARE_6                                                          = 0x0F5A,
+      DSS_CALC__SPARE_7                                                          = 0x0F5B,
+      DSS_CALC__USER_ROI_SPAD_EN_0                                               = 0x0F5C,
+      DSS_CALC__USER_ROI_SPAD_EN_1                                               = 0x0F5D,
+      DSS_CALC__USER_ROI_SPAD_EN_2                                               = 0x0F5E,
+      DSS_CALC__USER_ROI_SPAD_EN_3                                               = 0x0F5F,
+      DSS_CALC__USER_ROI_SPAD_EN_4                                               = 0x0F60,
+      DSS_CALC__USER_ROI_SPAD_EN_5                                               = 0x0F61,
+      DSS_CALC__USER_ROI_SPAD_EN_6                                               = 0x0F62,
+      DSS_CALC__USER_ROI_SPAD_EN_7                                               = 0x0F63,
+      DSS_CALC__USER_ROI_SPAD_EN_8                                               = 0x0F64,
+      DSS_CALC__USER_ROI_SPAD_EN_9                                               = 0x0F65,
+      DSS_CALC__USER_ROI_SPAD_EN_10                                              = 0x0F66,
+      DSS_CALC__USER_ROI_SPAD_EN_11                                              = 0x0F67,
+      DSS_CALC__USER_ROI_SPAD_EN_12                                              = 0x0F68,
+      DSS_CALC__USER_ROI_SPAD_EN_13                                              = 0x0F69,
+      DSS_CALC__USER_ROI_SPAD_EN_14                                              = 0x0F6A,
+      DSS_CALC__USER_ROI_SPAD_EN_15                                              = 0x0F6B,
+      DSS_CALC__USER_ROI_SPAD_EN_16                                              = 0x0F6C,
+      DSS_CALC__USER_ROI_SPAD_EN_17                                              = 0x0F6D,
+      DSS_CALC__USER_ROI_SPAD_EN_18                                              = 0x0F6E,
+      DSS_CALC__USER_ROI_SPAD_EN_19                                              = 0x0F6F,
+      DSS_CALC__USER_ROI_SPAD_EN_20                                              = 0x0F70,
+      DSS_CALC__USER_ROI_SPAD_EN_21                                              = 0x0F71,
+      DSS_CALC__USER_ROI_SPAD_EN_22                                              = 0x0F72,
+      DSS_CALC__USER_ROI_SPAD_EN_23                                              = 0x0F73,
+      DSS_CALC__USER_ROI_SPAD_EN_24                                              = 0x0F74,
+      DSS_CALC__USER_ROI_SPAD_EN_25                                              = 0x0F75,
+      DSS_CALC__USER_ROI_SPAD_EN_26                                              = 0x0F76,
+      DSS_CALC__USER_ROI_SPAD_EN_27                                              = 0x0F77,
+      DSS_CALC__USER_ROI_SPAD_EN_28                                              = 0x0F78,
+      DSS_CALC__USER_ROI_SPAD_EN_29                                              = 0x0F79,
+      DSS_CALC__USER_ROI_SPAD_EN_30                                              = 0x0F7A,
+      DSS_CALC__USER_ROI_SPAD_EN_31                                              = 0x0F7B,
+      DSS_CALC__USER_ROI_0                                                       = 0x0F7C,
+      DSS_CALC__USER_ROI_1                                                       = 0x0F7D,
+      DSS_CALC__MODE_ROI_0                                                       = 0x0F7E,
+      DSS_CALC__MODE_ROI_1                                                       = 0x0F7F,
+      SIGMA_ESTIMATOR_CALC__SPARE_0                                              = 0x0F80,
+      VHV_RESULT__PEAK_SIGNAL_RATE_MCPS                                          = 0x0F82,
+      VHV_RESULT__PEAK_SIGNAL_RATE_MCPS_HI                                       = 0x0F82,
+      VHV_RESULT__PEAK_SIGNAL_RATE_MCPS_LO                                       = 0x0F83,
+      VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF                                        = 0x0F84,
+      VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_3                                      = 0x0F84,
+      VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_2                                      = 0x0F85,
+      VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_1                                      = 0x0F86,
+      VHV_RESULT__SIGNAL_TOTAL_EVENTS_REF_0                                      = 0x0F87,
+      PHASECAL_RESULT__PHASE_OUTPUT_REF                                          = 0x0F88,
+      PHASECAL_RESULT__PHASE_OUTPUT_REF_HI                                       = 0x0F88,
+      PHASECAL_RESULT__PHASE_OUTPUT_REF_LO                                       = 0x0F89,
+      DSS_RESULT__TOTAL_RATE_PER_SPAD                                            = 0x0F8A,
+      DSS_RESULT__TOTAL_RATE_PER_SPAD_HI                                         = 0x0F8A,
+      DSS_RESULT__TOTAL_RATE_PER_SPAD_LO                                         = 0x0F8B,
+      DSS_RESULT__ENABLED_BLOCKS                                                 = 0x0F8C,
+      DSS_RESULT__NUM_REQUESTED_SPADS                                            = 0x0F8E,
+      DSS_RESULT__NUM_REQUESTED_SPADS_HI                                         = 0x0F8E,
+      DSS_RESULT__NUM_REQUESTED_SPADS_LO                                         = 0x0F8F,
+      MM_RESULT__INNER_INTERSECTION_RATE                                         = 0x0F92,
+      MM_RESULT__INNER_INTERSECTION_RATE_HI                                      = 0x0F92,
+      MM_RESULT__INNER_INTERSECTION_RATE_LO                                      = 0x0F93,
+      MM_RESULT__OUTER_COMPLEMENT_RATE                                           = 0x0F94,
+      MM_RESULT__OUTER_COMPLEMENT_RATE_HI                                        = 0x0F94,
+      MM_RESULT__OUTER_COMPLEMENT_RATE_LO                                        = 0x0F95,
+      MM_RESULT__TOTAL_OFFSET                                                    = 0x0F96,
+      MM_RESULT__TOTAL_OFFSET_HI                                                 = 0x0F96,
+      MM_RESULT__TOTAL_OFFSET_LO                                                 = 0x0F97,
+      XTALK_CALC__XTALK_FOR_ENABLED_SPADS                                        = 0x0F98,
+      XTALK_CALC__XTALK_FOR_ENABLED_SPADS_3                                      = 0x0F98,
+      XTALK_CALC__XTALK_FOR_ENABLED_SPADS_2                                      = 0x0F99,
+      XTALK_CALC__XTALK_FOR_ENABLED_SPADS_1                                      = 0x0F9A,
+      XTALK_CALC__XTALK_FOR_ENABLED_SPADS_0                                      = 0x0F9B,
+      XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS                                      = 0x0F9C,
+      XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_3                                    = 0x0F9C,
+      XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_2                                    = 0x0F9D,
+      XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_1                                    = 0x0F9E,
+      XTALK_RESULT__AVG_XTALK_USER_ROI_KCPS_0                                    = 0x0F9F,
+      XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS                                  = 0x0FA0,
+      XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_3                                = 0x0FA0,
+      XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_2                                = 0x0FA1,
+      XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_1                                = 0x0FA2,
+      XTALK_RESULT__AVG_XTALK_MM_INNER_ROI_KCPS_0                                = 0x0FA3,
+      XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS                                  = 0x0FA4,
+      XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_3                                = 0x0FA4,
+      XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_2                                = 0x0FA5,
+      XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_1                                = 0x0FA6,
+      XTALK_RESULT__AVG_XTALK_MM_OUTER_ROI_KCPS_0                                = 0x0FA7,
+      RANGE_RESULT__ACCUM_PHASE                                                  = 0x0FA8,
+      RANGE_RESULT__ACCUM_PHASE_3                                                = 0x0FA8,
+      RANGE_RESULT__ACCUM_PHASE_2                                                = 0x0FA9,
+      RANGE_RESULT__ACCUM_PHASE_1                                                = 0x0FAA,
+      RANGE_RESULT__ACCUM_PHASE_0                                                = 0x0FAB,
+      RANGE_RESULT__OFFSET_CORRECTED_RANGE                                       = 0x0FAC,
+      RANGE_RESULT__OFFSET_CORRECTED_RANGE_HI                                    = 0x0FAC,
+      RANGE_RESULT__OFFSET_CORRECTED_RANGE_LO                                    = 0x0FAD,
+      SHADOW_PHASECAL_RESULT__VCSEL_START                                        = 0x0FAE,
+      SHADOW_RESULT__INTERRUPT_STATUS                                            = 0x0FB0,
+      SHADOW_RESULT__RANGE_STATUS                                                = 0x0FB1,
+      SHADOW_RESULT__REPORT_STATUS                                               = 0x0FB2,
+      SHADOW_RESULT__STREAM_COUNT                                                = 0x0FB3,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0                              = 0x0FB4,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_HI                           = 0x0FB4,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD0_LO                           = 0x0FB5,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0                             = 0x0FB6,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_HI                          = 0x0FB6,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD0_LO                          = 0x0FB7,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0                                 = 0x0FB8,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_HI                              = 0x0FB8,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD0_LO                              = 0x0FB9,
+      SHADOW_RESULT__SIGMA_SD0                                                   = 0x0FBA,
+      SHADOW_RESULT__SIGMA_SD0_HI                                                = 0x0FBA,
+      SHADOW_RESULT__SIGMA_SD0_LO                                                = 0x0FBB,
+      SHADOW_RESULT__PHASE_SD0                                                   = 0x0FBC,
+      SHADOW_RESULT__PHASE_SD0_HI                                                = 0x0FBC,
+      SHADOW_RESULT__PHASE_SD0_LO                                                = 0x0FBD,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0                      = 0x0FBE,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_HI                   = 0x0FBE,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD0_LO                   = 0x0FBF,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0         = 0x0FC0,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_HI      = 0x0FC0,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LO      = 0x0FC1,
+      SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0                         = 0x0FC2,
+      SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                      = 0x0FC2,
+      SHADOW_RESULT__MM_INNER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                      = 0x0FC3,
+      SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0                         = 0x0FC4,
+      SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_HI                      = 0x0FC4,
+      SHADOW_RESULT__MM_OUTER_ACTUAL_EFFECTIVE_SPADS_SD0_LO                      = 0x0FC5,
+      SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0                              = 0x0FC6,
+      SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_HI                           = 0x0FC6,
+      SHADOW_RESULT__AVG_SIGNAL_COUNT_RATE_MCPS_SD0_LO                           = 0x0FC7,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1                              = 0x0FC8,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_HI                           = 0x0FC8,
+      SHADOW_RESULT__DSS_ACTUAL_EFFECTIVE_SPADS_SD1_LO                           = 0x0FC9,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1                             = 0x0FCA,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_HI                          = 0x0FCA,
+      SHADOW_RESULT__PEAK_SIGNAL_COUNT_RATE_MCPS_SD1_LO                          = 0x0FCB,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1                                 = 0x0FCC,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_HI                              = 0x0FCC,
+      SHADOW_RESULT__AMBIENT_COUNT_RATE_MCPS_SD1_LO                              = 0x0FCD,
+      SHADOW_RESULT__SIGMA_SD1                                                   = 0x0FCE,
+      SHADOW_RESULT__SIGMA_SD1_HI                                                = 0x0FCE,
+      SHADOW_RESULT__SIGMA_SD1_LO                                                = 0x0FCF,
+      SHADOW_RESULT__PHASE_SD1                                                   = 0x0FD0,
+      SHADOW_RESULT__PHASE_SD1_HI                                                = 0x0FD0,
+      SHADOW_RESULT__PHASE_SD1_LO                                                = 0x0FD1,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1                      = 0x0FD2,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_HI                   = 0x0FD2,
+      SHADOW_RESULT__FINAL_CROSSTALK_CORRECTED_RANGE_MM_SD1_LO                   = 0x0FD3,
+      SHADOW_RESULT__SPARE_0_SD1                                                 = 0x0FD4,
+      SHADOW_RESULT__SPARE_0_SD1_HI                                              = 0x0FD4,
+      SHADOW_RESULT__SPARE_0_SD1_LO                                              = 0x0FD5,
+      SHADOW_RESULT__SPARE_1_SD1                                                 = 0x0FD6,
+      SHADOW_RESULT__SPARE_1_SD1_HI                                              = 0x0FD6,
+      SHADOW_RESULT__SPARE_1_SD1_LO                                              = 0x0FD7,
+      SHADOW_RESULT__SPARE_2_SD1                                                 = 0x0FD8,
+      SHADOW_RESULT__SPARE_2_SD1_HI                                              = 0x0FD8,
+      SHADOW_RESULT__SPARE_2_SD1_LO                                              = 0x0FD9,
+      SHADOW_RESULT__SPARE_3_SD1                                                 = 0x0FDA,
+      SHADOW_RESULT__THRESH_INFO                                                 = 0x0FDB,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0                              = 0x0FDC,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_3                            = 0x0FDC,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_2                            = 0x0FDD,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_1                            = 0x0FDE,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD0_0                            = 0x0FDF,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0                               = 0x0FE0,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_3                             = 0x0FE0,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_2                             = 0x0FE1,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_1                             = 0x0FE2,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD0_0                             = 0x0FE3,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0                                = 0x0FE4,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_3                              = 0x0FE4,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_2                              = 0x0FE5,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_1                              = 0x0FE6,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD0_0                              = 0x0FE7,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0                              = 0x0FE8,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_3                            = 0x0FE8,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_2                            = 0x0FE9,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_1                            = 0x0FEA,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD0_0                            = 0x0FEB,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1                              = 0x0FEC,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_3                            = 0x0FEC,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_2                            = 0x0FED,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_1                            = 0x0FEE,
+      SHADOW_RESULT_CORE__AMBIENT_WINDOW_EVENTS_SD1_0                            = 0x0FEF,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1                               = 0x0FF0,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_3                             = 0x0FF0,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_2                             = 0x0FF1,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_1                             = 0x0FF2,
+      SHADOW_RESULT_CORE__RANGING_TOTAL_EVENTS_SD1_0                             = 0x0FF3,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1                                = 0x0FF4,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_3                              = 0x0FF4,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_2                              = 0x0FF5,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_1                              = 0x0FF6,
+      SHADOW_RESULT_CORE__SIGNAL_TOTAL_EVENTS_SD1_0                              = 0x0FF7,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1                              = 0x0FF8,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_3                            = 0x0FF8,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_2                            = 0x0FF9,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_1                            = 0x0FFA,
+      SHADOW_RESULT_CORE__TOTAL_PERIODS_ELAPSED_SD1_0                            = 0x0FFB,
+      SHADOW_RESULT_CORE__SPARE_0                                                = 0x0FFC,
+      SHADOW_PHASECAL_RESULT__REFERENCE_PHASE_HI                                 = 0x0FFE,
+      SHADOW_PHASECAL_RESULT__REFERENCE_PHASE_LO                                 = 0x0FFF,
+    };
+
+    enum DistanceMode { Short, Medium, Long, Unknown };
+
+    enum RangeStatus : uint8_t
+    {
+      RangeValid                =   0,
+
+      // "sigma estimator check is above the internal defined threshold"
+      // (sigma = standard deviation of measurement)
+      SigmaFail                 =   1,
+
+      // "signal value is below the internal defined threshold"
+      SignalFail                =   2,
+
+      // "Target is below minimum detection threshold."
+      RangeValidMinRangeClipped =   3,
+
+      // "phase is out of bounds"
+      // (nothing detected in range; try a longer distance mode if applicable)
+      OutOfBoundsFail           =   4,
+
+      // "HW or VCSEL failure"
+      HardwareFail              =   5,
+
+      // "The Range is valid but the wraparound check has not been done."
+      RangeValidNoWrapCheckFail =   6,
+
+      // "Wrapped target, not matching phases"
+      // "no matching phase in other VCSEL period timing."
+      WrapTargetFail            =   7,
+
+      // "Internal algo underflow or overflow in lite ranging."
+   // ProcessingFail            =   8: not used in API
+
+      // "Specific to lite ranging."
+      // should never occur with this lib (which uses low power auto ranging,
+      // as the API does)
+      XtalkSignalFail           =   9,
+
+      // "1st interrupt when starting ranging in back to back mode. Ignore
+      // data."
+      // should never occur with this lib
+      SynchronizationInt         =  10, // (the API spells this "syncronisation")
+
+      // "All Range ok but object is result of multiple pulses merging together.
+      // Used by RQL for merged pulse detection"
+   // RangeValid MergedPulse    =  11: not used in API
+
+      // "Used by RQL as different to phase fail."
+   // TargetPresentLackOfSignal =  12:
+
+      // "Target is below minimum detection threshold."
+      MinRangeFail              =  13,
+
+      // "The reported range is invalid"
+   // RangeInvalid              =  14: can't actually be returned by API (range can never become negative, even after correction)
+
+      // "No Update."
+      None                      = 255,
+    };
+
+    struct RangingData
+    {
+      uint16_t range_mm;
+      RangeStatus range_status;
+      float peak_signal_count_rate_MCPS;
+      float ambient_count_rate_MCPS;
+    };
+
+    RangingData ranging_data;
+
+    uint8_t last_status; // status of last I2C transmission
+    VL53L1X();
+
+    void setAddress(uint8_t new_addr);
+    uint8_t getAddress() { return address; }
+
+    bool init(bool io_2v8 = true);
+
+    void writeReg(uint16_t registerAddr, uint8_t data);
+    void writeReg16Bit(uint16_t registerAddr, uint16_t data);
+    void writeReg32Bit(uint16_t registerAddr, uint32_t data);
+    uint8_t readReg(uint16_t registerAddr);
+    uint16_t readReg16Bit(uint16_t registerAddr);
+    uint32_t readReg32Bit(uint16_t registerAddr);
+
+    bool setDistanceMode(DistanceMode mode);
+    DistanceMode getDistanceMode() { return distance_mode; }
+
+    bool setMeasurementTimingBudget(uint32_t budget_us);
+    uint32_t getMeasurementTimingBudget();
+
+    void startContinuous(uint32_t period_ms);
+    void stopContinuous();
+    uint16_t read(bool blocking = true);
+    uint16_t readRangeContinuousMillimeters(bool blocking = true) { return read(blocking); } // alias of read()
+
+    // check if sensor has new reading available
+    // assumes interrupt is active low (GPIO_HV_MUX__CTRL bit 4 is 1)
+    bool dataReady() { 
+    int isThereData = readReg(GPIO__TIO_HV_STATUS);
+ //   printf("%x\r\n", isThereData);
+    return (isThereData & 0x01) == 0; 
+    }
+
+    static const char * rangeStatusToString(RangeStatus status);
+
+    void setTimeout(uint16_t timeout) { io_timeout = timeout; }
+    uint16_t getTimeout() { return io_timeout; }
+    bool timeoutOccurred();
+
+    bool initReading(int addr, int timing_budget);
+    void turnOff(void);
+    void resetPin(void);
+    void turnOn(void);
+    int  readFromOneSensor(void);
+
+
+
+  private:
+    I2C _i2c;
+    DigitalOut _shutDown;
+    
+    // The Arduino two-wire interface uses a 7-bit number for the address,
+    // and sets the last bit correctly based on reads and writes
+    static const uint8_t AddressDefault = 0b0101001;
+
+    // value used in measurement timing budget calculations
+    // assumes PresetMode is LOWPOWER_AUTONOMOUS
+    //
+    // vhv = LOWPOWER_AUTO_VHV_LOOP_DURATION_US + LOWPOWERAUTO_VHV_LOOP_BOUND
+    //       (tuning parm default) * LOWPOWER_AUTO_VHV_LOOP_DURATION_US
+    //     = 245 + 3 * 245 = 980
+    // TimingGuard = LOWPOWER_AUTO_OVERHEAD_BEFORE_A_RANGING +
+    //               LOWPOWER_AUTO_OVERHEAD_BETWEEN_A_B_RANGING + vhv
+    //             = 1448 + 2100 + 980 = 4528
+    static const uint32_t TimingGuard = 4528;
+
+    // value in DSS_CONFIG__TARGET_TOTAL_RATE_MCPS register, used in DSS
+    // calculations
+    static const uint16_t TargetRate = 0x0A00;
+
+    // for storing values read from RESULT__RANGE_STATUS (0x0089)
+    // through RESULT__PEAK_SIGNAL_COUNT_RATE_CROSSTALK_CORRECTED_MCPS_SD0_LOW
+    // (0x0099)
+    struct ResultBuffer
+    {
+      uint8_t range_status;
+    // uint8_t report_status: not used
+      uint8_t stream_count;
+      uint16_t dss_actual_effective_spads_sd0;
+   // uint16_t peak_signal_count_rate_mcps_sd0: not used
+      uint16_t ambient_count_rate_mcps_sd0;
+   // uint16_t sigma_sd0: not used
+   // uint16_t phase_sd0: not used
+      uint16_t final_crosstalk_corrected_range_mm_sd0;
+      uint16_t peak_signal_count_rate_crosstalk_corrected_mcps_sd0;
+    };
+
+    // making this static would save RAM for multiple instances as long as there
+    // aren't multiple sensors being read at the same time (e.g. on separate
+    // I2C buses)
+    ResultBuffer results;
+    
+    bool didInitialize;
+
+    uint8_t address;
+
+    uint16_t io_timeout;
+    bool did_timeout;
+    uint16_t timeout_start_ms;
+
+    uint16_t fast_osc_frequency;
+    uint16_t osc_calibrate_val;
+
+    bool calibrated;
+    uint8_t saved_vhv_init;
+    uint8_t saved_vhv_timeout;
+
+    DistanceMode distance_mode;
+
+    // Record the current time to check an upcoming timeout against
+    void startTimeout() { timeout_start_ms = t.read()*1000; }
+
+    // Check if timeout is enabled (set to nonzero value) and has expired
+    bool checkTimeoutExpired() {return (io_timeout > 0) && ((uint16_t)(t.read()*1000 - timeout_start_ms) > io_timeout); }
+
+    void setupManualCalibration();
+    void readResults();
+    void updateDSS();
+    void getRangingData();
+
+    static uint32_t decodeTimeout(uint16_t reg_val);
+    static uint16_t encodeTimeout(uint32_t timeout_mclks);
+    static uint32_t timeoutMclksToMicroseconds(uint32_t timeout_mclks, uint32_t macro_period_us);
+    static uint32_t timeoutMicrosecondsToMclks(uint32_t timeout_us, uint32_t macro_period_us);
+    uint32_t calcMacroPeriod(uint8_t vcsel_period);
+
+    // Convert count rate from fixed point 9.7 format to float
+    float countRateFixedToFloat(uint16_t count_rate_fixed) { return (float)count_rate_fixed / (1 << 7); }
+};
+#endif
\ No newline at end of file
--- a/main.cpp	Tue Apr 23 09:45:23 2019 +0000
+++ b/main.cpp	Mon May 27 05:38:15 2019 +0000
@@ -1,19 +1,3 @@
-/* WiFi Example
- * Copyright (c) 2018 ARM Limited
- *
- * 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.
- */
-
 //MQTT+WIFI
 
 
@@ -30,7 +14,8 @@
 
 #include "mbed.h"
 #include "TCPSocket.h"
-
+#include "VL53L1X.h"
+#include <string> 
 #define WIFI_IDW0XX1    2
 
 #if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH))
@@ -52,7 +37,7 @@
     MQTT::Message &message = md.message;
     logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
     logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
-    ++arrivedcount;
+    //++arrivedcount;
 }
 
 
@@ -146,14 +131,205 @@
     // Close the socket to return its memory and bring down the network interface
     socket.close();
 }
+bool s1_init = true;
+bool s2_init = true;
+bool s3_init = true;
+bool s4_init = true;
+VL53L1X sensor1(PC_1,PC_0, PC_2);
+VL53L1X sensor2(PC_1,PC_0, PC_3);
+VL53L1X sensor3(PC_1,PC_0, PC_4);
+VL53L1X sensor4(PC_1,PC_0, PC_5);
+SPI acc (PA_7,PA_6,PA_5);
+DigitalOut cs(PB_8);
+char buffer[6];
+int16_t data[3];
+float x,y,z,w;
+Timer t; 
+AnalogIn analog_value1(PA_2);
+AnalogIn analog_value2(PA_4);
+AnalogIn analog_value3(PB_1);
+AnalogIn analog_value4(PA_3);
+AnalogIn analog_value5(PB_0);
+Serial pc(USBTX,USBRX);
+
+void sensor(void)
+{
+     double meas_a;
+     double meas_a1;
+     double meas_b;
+     double meas_b1;
+     double meas_c;
+     double meas_c1;
+     double meas_d;
+     double meas_d1;
+     double meas_e;
+     double meas_e1;
+     double outputv;
+     
+     double D1;    
+     double D2;  
+     double D3;  
+     double D4;  
+     
+     
+     
+     
+    sensor1.initReading(0x52,50000);
+    sensor2.initReading(0x27,50000);
+    sensor3.initReading(0x35,50000);
+    sensor4.initReading(0x37,50000);
+     sensor1.setDistanceMode(VL53L1X::Short);
+     sensor2.setDistanceMode(VL53L1X::Short);
+     sensor3.setDistanceMode(VL53L1X::Short);
+     sensor4.setDistanceMode(VL53L1X::Short);
+     cs=1;
+     acc.format(8,3);
+     acc.frequency(2000000);
+     cs=0;
+     acc.write(0x31);
+     acc.write(0x0B);
+     cs=1;
+     cs=0;
+     acc.write(0x2D);
+     acc.write(0x08);
+     cs=1;
+        
+       D1 = sensor1.readFromOneSensor();
+       wait(0.1);
+       D2 = sensor2.readFromOneSensor();
+       wait(0.1);
+       D3 = sensor3.readFromOneSensor();
+       wait(0.1);
+       D4 = sensor4.readFromOneSensor();
+       wait(0.1);
+      
+      cs=0;
+      acc.write(0x80|0x40|0x32);
+      for (int i=0;i<=5;i++)
+      {
+      buffer[i]=acc.write(0x00);
+      }
+      cs= 1;   
+      data[0]=buffer[1]<<8|buffer[0];
+      data[1]=buffer[3]<<8|buffer[2];
+      data[2]=buffer[5]<<8|buffer[4];
+      x=0.004*data[0];
+      wait(0.1);
+      y=0.004*data[1];
+      wait(0.1);
+      z=0.004*data[2];
+      wait(0.1);
+      w=atan2(x,y)*(57.4);
+      wait(0.1);
+      meas_a = analog_value1.read(); 
+      meas_a1 = meas_a * 3*25; 
+      meas_b = analog_value2.read(); 
+      meas_b1 = meas_b * 3*25; 
+      meas_c = analog_value3.read(); 
+      meas_c1 = meas_c * 3*25; 
+      meas_d = analog_value4.read(); 
+      meas_d1 = meas_d * 3*25; 
+      meas_e = analog_value5.read(); 
+      meas_e1 = meas_e * 3*25; 
+      
+      
+    
+    
+    }
+
 
 int main()
-{
+{      
+
+                   
+    pc.baud (115200) ;
+     
+     double meas_a;
+     double meas_a1;
+     double meas_b;
+     double meas_b1;
+     double meas_c;
+     double meas_c1;
+     double meas_d;
+     double meas_d1;
+     double meas_e;
+     double meas_e1;
+     double outputv;
+     
+     double D1;    
+     double D2;  
+     double D3;  
+     double D4;  
+     
+     
+     
+     
+    sensor1.initReading(0x52,50000);
+    sensor2.initReading(0x27,50000);
+    sensor3.initReading(0x35,50000);
+    sensor4.initReading(0x37,50000);
+     sensor1.setDistanceMode(VL53L1X::Short);
+     sensor2.setDistanceMode(VL53L1X::Short);
+     sensor3.setDistanceMode(VL53L1X::Short);
+     sensor4.setDistanceMode(VL53L1X::Short);
+     cs=1;
+     acc.format(8,3);
+     acc.frequency(2000000);
+     cs=0;
+     acc.write(0x31);
+     acc.write(0x0B);
+     cs=1;
+     cs=0;
+     acc.write(0x2D);
+     acc.write(0x08);
+     cs=1;
+        
+       D1 = sensor1.readFromOneSensor();
+       wait(0.1);
+       D2 = sensor2.readFromOneSensor();
+       wait(0.1);
+       D3 = sensor3.readFromOneSensor();
+       wait(0.1);
+       D4 = sensor4.readFromOneSensor();
+       wait(0.1);
+      
+      cs=0;
+      acc.write(0x80|0x40|0x32);
+      for (int i=0;i<=5;i++)
+      {
+      buffer[i]=acc.write(0x00);
+      }
+      cs= 1;   
+      data[0]=buffer[1]<<8|buffer[0];
+      data[1]=buffer[3]<<8|buffer[2];
+      data[2]=buffer[5]<<8|buffer[4];
+      x=0.004*data[0];
+      wait(0.1);
+      y=0.004*data[1];
+      wait(0.1);
+      z=0.004*data[2];
+      wait(0.1);
+      w=atan2(x,y)*(57.4);
+      wait(0.1);
+      meas_a = analog_value1.read(); 
+      meas_a1 = meas_a * 3*25; 
+      meas_b = analog_value2.read(); 
+      meas_b1 = meas_b * 3*25; 
+      meas_c = analog_value3.read(); 
+      meas_c1 = meas_c * 3*25; 
+      meas_d = analog_value4.read(); 
+      meas_d1 = meas_d * 3*25; 
+      meas_e = analog_value5.read(); 
+      meas_e1 = meas_e * 3*25;  
+     
+         
+                     
     int count = 0;
 
     printf("WiFi example\n\n");
 
     count = scan_demo(&wifi);
+    
     if (count == 0) {
         printf("No WIFI APNs found - can't continue further.\n");
         return -1;
@@ -182,7 +358,7 @@
     
     // MQTT Example Start
     float version = 0.6;
-    char* topic = "test1";
+    char* topic = "192.168.0.164";
 
     logMessage("HelloMQTT: version is %.2f\r\n", version);
 
@@ -195,7 +371,7 @@
 
     MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
 
-    const char* hostname = "192.168.0.120";
+    const char* hostname = "192.168.0.164";
     int port = 1883;
     logMessage("Connecting to %s:%d\r\n", hostname, port);
     int rc = mqttNetwork.connect(hostname, port);
@@ -212,48 +388,33 @@
 
     if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
         logMessage("rc from MQTT subscribe is %d\r\n", rc);
-
+    
     MQTT::Message message;
-
+    //pc.printf("%d,%d,%d,%d,%+1.2f,%+1.2f,%+1.2f,%+1.2f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f\n\r", 
+//sensor1.readFromOneSensor(), sensor2.readFromOneSensor(), sensor3.readFromOneSensor(), sensor4.readFromOneSensor(),
+//x,y,z,w, meas_a1, meas_b1, meas_c1, meas_d1, meas_e1);
     // QoS 0
+      
     char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f\r\n", version);
-    message.qos = MQTT::QOS0;
+     sprintf(buf, "100");
+     
+     
+      //sprintf(buf, "%d,%d,%d,%d,%+1.2f,%+1.2f,%+1.2f,%+1.2f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f\n\r", 
+//sensor1.readFromOneSensor(), sensor2.readFromOneSensor(), sensor3.readFromOneSensor(), sensor4.readFromOneSensor(),
+//x,y,z,w, meas_a1, meas_b1, meas_c1, meas_d1, meas_e1);
+
+
+
+    message.qos = MQTT::QOS1;
     message.retained = false;
     message.dup = false;
     message.payload = (void*)buf;
     message.payloadlen = strlen(buf)+1;
     rc = client.publish(topic, message);
-    while (arrivedcount < 1)
-        client.yield(100);
-
-    // QoS 1
-    sprintf(buf, "Hello World!  QoS 1 message from app version %f\r\n", version);
-    message.qos = MQTT::QOS1;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 2)
-        client.yield(100);
-
-    // QoS 2
-    sprintf(buf, "Hello World!  QoS 2 message from app version %f\r\n", version);
-    message.qos = MQTT::QOS2;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 3)
-        client.yield(100);
-
-    if ((rc = client.unsubscribe(topic)) != 0)
-        logMessage("rc from unsubscribe was %d\r\n", rc);
-
-    if ((rc = client.disconnect()) != 0)
-        logMessage("rc from disconnect was %d\r\n", rc);
-
-    mqttNetwork.disconnect();
-
-    logMessage("Version %.2f: finish %d msgs\r\n", version, arrivedcount);
-
-    return 0;
-    
-    
+    client.yield(100);
+ 
+ 
+ 
+       
+   
 }
--- a/mbed_app.json	Tue Apr 23 09:45:23 2019 +0000
+++ b/mbed_app.json	Mon May 27 05:38:15 2019 +0000
@@ -6,11 +6,11 @@
         },
         "wifi-ssid": {
             "help": "WiFi SSID",
-            "value": "\"note9\""
+            "value": "\"Tenda_267770\""
         },
         "wifi-password": {
             "help": "WiFi Password",
-            "value": "\"tp67651209\""
+            "value": "\"0963354403\""
         },
         "wifi-tx": {
             "help": "TX pin for serial connection to external device",