diff --git a/LICENSE b/LICENSE index 341e06b..7df19fd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2023, STM32duino +Copyright (c) 2024, STM32duino Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index 4291a2d..26585e2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Arduino library to support the VL53L8CX Time-of-Flight 8x8 multizone ranging sen ## API -This sensor uses I2C to communicate. And I2C instance is required to access to the sensor. +This sensor uses I2C/SPI to communicate. And I2C/SPI instance is required to access to the sensor. The APIs provide simple distance measure and multizone detection in both polling and interrupt modes. ## Examples diff --git a/examples/VL53L8CX_HelloWorld_I2C/VL53L8CX_HelloWorld_I2C.ino b/examples/VL53L8CX_HelloWorld_I2C/VL53L8CX_HelloWorld_I2C.ino index 8aa5689..5aa66ab 100644 --- a/examples/VL53L8CX_HelloWorld_I2C/VL53L8CX_HelloWorld_I2C.ino +++ b/examples/VL53L8CX_HelloWorld_I2C/VL53L8CX_HelloWorld_I2C.ino @@ -1,45 +1,45 @@ - /** - ****************************************************************************** - * @file VL53L8CX_HelloWorld_I2C.ino - * @author STMicroelectronics - * @version V1.0.0 - * @date 12 June 2023 - * @brief Arduino test application for STMicroelectronics VL53L8CX - * proximity sensor satellite based on FlightSense. - * This application makes use of C++ classes obtained from the C - * components' drivers. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ +/** +****************************************************************************** +* @file VL53L8CX_HelloWorld_I2C.ino +* @author STMicroelectronics +* @version V2.0.0 +* @date 27 June 2024 +* @brief Arduino test application for STMicroelectronics VL53L8CX +* proximity sensor satellite based on FlightSense. +* This application makes use of C++ classes obtained from the C +* components' drivers. +****************************************************************************** +* @attention +* +*

© COPYRIGHT(c) 2024 STMicroelectronics

+* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* 3. Neither the name of STMicroelectronics nor the names of its contributors +* may be used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +*/ /* * To use these examples you need to connect the VL53L8CX satellite sensor directly to the Nucleo board with wires as explained below: - * pin 1 (SPI_I2C_n) of the VL53L8CX satellite connected to pin GND of the Nucleo board + * pin 1 (SPI_I2C_N) of the VL53L8CX satellite connected to pin GND of the Nucleo board * pin 2 (LPn) of the VL53L8CX satellite connected to pin A3 of the Nucleo board * pin 3 (NCS) not connected * pin 4 (MISO) not connected @@ -49,15 +49,14 @@ * pin 8 (I0VDD) of the VL53L8CX satellite not connected * pin 9 (3V3) of the VL53L8CX satellite connected to 3V3 of the Nucleo board * pin 10 (1V8) of the VL53L8CX satellite not connected - * pin 11 (5V) of the VL53L8CX satellite not connected + * pin 11 (5V) of the VL53L8CX satellite not connected * GPIO1 of VL53L8CX satellite connected to A2 pin of the Nucleo board (not used) * GND of the VL53L8CX satellite connected to GND of the Nucleo board */ - + /* Includes ------------------------------------------------------------------*/ -#include -#include -#include + +#include #ifdef ARDUINO_SAM_DUE @@ -68,7 +67,6 @@ #define SerialPort Serial #define LPN_PIN A3 -#define I2C_RST_PIN -1 #define PWREN_PIN 11 void print_result(VL53L8CX_ResultsData *Result); @@ -77,12 +75,13 @@ void handle_cmd(uint8_t cmd); void display_commands_banner(void); // Components. -VL53L8CX sensor_vl53l8cx_top(&DEV_I2C, LPN_PIN, I2C_RST_PIN); +VL53L8CX sensor_vl53l8cx_top(&DEV_I2C, LPN_PIN); bool EnableAmbient = false; bool EnableSignal = false; uint8_t res = VL53L8CX_RESOLUTION_4X4; char report[256]; +uint8_t status; /* Setup ---------------------------------------------------------------------*/ void setup() @@ -100,32 +99,30 @@ void setup() // Initialize I2C bus. DEV_I2C.begin(); - + // Configure VL53L8CX component. sensor_vl53l8cx_top.begin(); - sensor_vl53l8cx_top.init_sensor(); - + status = sensor_vl53l8cx_top.init(); + // Start Measurements - sensor_vl53l8cx_top.vl53l8cx_start_ranging(); + status = sensor_vl53l8cx_top.start_ranging(); } void loop() { VL53L8CX_ResultsData Results; uint8_t NewDataReady = 0; - uint8_t status; do { - status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady); + status = sensor_vl53l8cx_top.check_data_ready(&NewDataReady); } while (!NewDataReady); if ((!status) && (NewDataReady != 0)) { - status = sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results); + status = sensor_vl53l8cx_top.get_ranging_data(&Results); print_result(&Results); } - if (Serial.available()>0) - { + if (Serial.available() > 0) { handle_cmd(Serial.read()); } delay(100); @@ -142,82 +139,65 @@ void print_result(VL53L8CX_ResultsData *Result) display_commands_banner(); SerialPort.print("Cell Format :\n\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { - snprintf(report, sizeof(report)," \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { + snprintf(report, sizeof(report), " \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); SerialPort.print(report); - if(EnableAmbient || EnableSignal) - { - snprintf(report, sizeof(report)," %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); + if (EnableAmbient || EnableSignal) { + snprintf(report, sizeof(report), " %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); SerialPort.print(report); } } SerialPort.print("\n\n"); - for (j = 0; j < number_of_zones; j += zones_per_line) - { - for (i = 0; i < zones_per_line; i++) + for (j = 0; j < number_of_zones; j += zones_per_line) { + for (i = 0; i < zones_per_line; i++) { SerialPort.print(" -----------------"); + } SerialPort.print("\n"); - - for (i = 0; i < zones_per_line; i++) + + for (i = 0; i < zones_per_line; i++) { SerialPort.print("| "); + } SerialPort.print("|\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { - // Print distance and status - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - snprintf(report, sizeof(report),"| \033[38;5;10m%5ld\033[0m : %5ld ", - (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l], - (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); - SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { + // Print distance and status + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + snprintf(report, sizeof(report), "| \033[38;5;10m%5ld\033[0m : %5ld ", + (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l], + (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); + SerialPort.print(report); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } SerialPort.print("|\n"); - if (EnableAmbient || EnableSignal ) - { - // Print Signal and Ambient - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - if (EnableSignal) - { - snprintf(report, sizeof(report),"| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); + if (EnableAmbient || EnableSignal) { + // Print Signal and Ambient + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + if (EnableSignal) { + snprintf(report, sizeof(report), "| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : ", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : ", "X"); SerialPort.print(report); } - if (EnableAmbient) - { - snprintf(report, sizeof(report),"%5ld ", (long)Result->ambient_per_spad[j+k]); + if (EnableAmbient) { + snprintf(report, sizeof(report), "%5ld ", (long)Result->ambient_per_spad[j + k]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"%5s ", "X"); + } else { + snprintf(report, sizeof(report), "%5s ", "X"); SerialPort.print(report); } - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } @@ -225,17 +205,17 @@ void print_result(VL53L8CX_ResultsData *Result) } } } - for (i = 0; i < zones_per_line; i++) - SerialPort.print(" -----------------"); + for (i = 0; i < zones_per_line; i++) { + SerialPort.print(" -----------------"); + } SerialPort.print("\n"); } void toggle_resolution(void) { - sensor_vl53l8cx_top.vl53l8cx_stop_ranging(); + status = sensor_vl53l8cx_top.stop_ranging(); - switch (res) - { + switch (res) { case VL53L8CX_RESOLUTION_4X4: res = VL53L8CX_RESOLUTION_8X8; break; @@ -247,8 +227,8 @@ void toggle_resolution(void) default: break; } - sensor_vl53l8cx_top.vl53l8cx_set_resolution(res); - sensor_vl53l8cx_top.vl53l8cx_start_ranging(); + status = sensor_vl53l8cx_top.set_resolution(res); + status = sensor_vl53l8cx_top.start_ranging(); } void toggle_signal_and_ambient(void) @@ -259,13 +239,13 @@ void toggle_signal_and_ambient(void) void clear_screen(void) { - snprintf(report, sizeof(report),"%c[2J", 27); /* 27 is ESC command */ + snprintf(report, sizeof(report), "%c[2J", 27); /* 27 is ESC command */ SerialPort.print(report); } void display_commands_banner(void) { - snprintf(report, sizeof(report),"%c[2H", 27); /* 27 is ESC command */ + snprintf(report, sizeof(report), "%c[2H", 27); /* 27 is ESC command */ SerialPort.print(report); Serial.print("53L8A1 Simple Ranging demo application\n"); @@ -280,8 +260,7 @@ void display_commands_banner(void) void handle_cmd(uint8_t cmd) { - switch (cmd) - { + switch (cmd) { case 'r': toggle_resolution(); clear_screen(); diff --git a/examples/VL53L8CX_HelloWorld_SPI/VL53L8CX_HelloWorld_SPI.ino b/examples/VL53L8CX_HelloWorld_SPI/VL53L8CX_HelloWorld_SPI.ino index aea9918..a65f344 100644 --- a/examples/VL53L8CX_HelloWorld_SPI/VL53L8CX_HelloWorld_SPI.ino +++ b/examples/VL53L8CX_HelloWorld_SPI/VL53L8CX_HelloWorld_SPI.ino @@ -2,8 +2,8 @@ ****************************************************************************** * @file VL53L8CX_HelloWorld_SPI.ino * @author STMicroelectronics - * @version V1.0.0 - * @date 12 June 2023 + * @version V2.0.0 + * @date 27 June 2024 * @brief Arduino test application for the X-NUCLEO-53L8A1 based on VL53L8CX * proximity sensor. * This application makes use of C++ classes obtained from the C @@ -11,7 +11,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2021 STMicroelectronics

+ *

© COPYRIGHT(c) 2024 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -55,10 +55,9 @@ */ /* Includes ------------------------------------------------------------------*/ -#include -#include + #include -#include +#include #define SerialPort Serial @@ -101,29 +100,26 @@ void setup() // Configure VL53L8CX component. sensor_vl53l8cx_top.begin(); - sensor_vl53l8cx_top.init_sensor(); + status = sensor_vl53l8cx_top.init(); // Start Measurements - sensor_vl53l8cx_top.vl53l8cx_start_ranging(); + status = sensor_vl53l8cx_top.start_ranging(); } void loop() { VL53L8CX_ResultsData Results; uint8_t NewDataReady = 0; - uint8_t status; - do { - status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady); + status = sensor_vl53l8cx_top.check_data_ready(&NewDataReady); } while (!NewDataReady); if ((!status) && (NewDataReady != 0)) { - status = sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results); + status = sensor_vl53l8cx_top.get_ranging_data(&Results); print_result(&Results); } - if (Serial.available()>0) - { + if (Serial.available() > 0) { handle_cmd(Serial.read()); } delay(50); @@ -140,82 +136,65 @@ void print_result(VL53L8CX_ResultsData *Result) display_commands_banner(); SerialPort.print("Cell Format :\n\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { - snprintf(report, sizeof(report)," \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { + snprintf(report, sizeof(report), " \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); SerialPort.print(report); - if(EnableAmbient || EnableSignal) - { - snprintf(report, sizeof(report)," %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); + if (EnableAmbient || EnableSignal) { + snprintf(report, sizeof(report), " %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); SerialPort.print(report); } } SerialPort.print("\n\n"); - for (j = 0; j < number_of_zones; j += zones_per_line) - { - for (i = 0; i < zones_per_line; i++) + for (j = 0; j < number_of_zones; j += zones_per_line) { + for (i = 0; i < zones_per_line; i++) { SerialPort.print(" -----------------"); + } SerialPort.print("\n"); - - for (i = 0; i < zones_per_line; i++) + + for (i = 0; i < zones_per_line; i++) { SerialPort.print("| "); + } SerialPort.print("|\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { - // Print distance and status - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - snprintf(report, sizeof(report),"| \033[38;5;10m%5ld\033[0m : %5ld ", - (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l], - (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); - SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { + // Print distance and status + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + snprintf(report, sizeof(report), "| \033[38;5;10m%5ld\033[0m : %5ld ", + (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l], + (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); + SerialPort.print(report); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } SerialPort.print("|\n"); - if (EnableAmbient || EnableSignal ) - { - // Print Signal and Ambient - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - if (EnableSignal) - { - snprintf(report, sizeof(report),"| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); + if (EnableAmbient || EnableSignal) { + // Print Signal and Ambient + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + if (EnableSignal) { + snprintf(report, sizeof(report), "| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : ", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : ", "X"); SerialPort.print(report); } - if (EnableAmbient) - { - snprintf(report, sizeof(report),"%5ld ", (long)Result->ambient_per_spad[j+k]); + if (EnableAmbient) { + snprintf(report, sizeof(report), "%5ld ", (long)Result->ambient_per_spad[j + k]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"%5s ", "X"); + } else { + snprintf(report, sizeof(report), "%5s ", "X"); SerialPort.print(report); } - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } @@ -223,17 +202,17 @@ void print_result(VL53L8CX_ResultsData *Result) } } } - for (i = 0; i < zones_per_line; i++) - SerialPort.print(" -----------------"); + for (i = 0; i < zones_per_line; i++) { + SerialPort.print(" -----------------"); + } SerialPort.print("\n"); } void toggle_resolution(void) { - sensor_vl53l8cx_top.vl53l8cx_stop_ranging(); + status = sensor_vl53l8cx_top.stop_ranging(); - switch (res) - { + switch (res) { case VL53L8CX_RESOLUTION_4X4: res = VL53L8CX_RESOLUTION_8X8; break; @@ -245,8 +224,8 @@ void toggle_resolution(void) default: break; } - sensor_vl53l8cx_top.vl53l8cx_set_resolution(res); - sensor_vl53l8cx_top.vl53l8cx_start_ranging(); + status = sensor_vl53l8cx_top.set_resolution(res); + status = sensor_vl53l8cx_top.start_ranging(); } void toggle_signal_and_ambient(void) @@ -257,13 +236,13 @@ void toggle_signal_and_ambient(void) void clear_screen(void) { - snprintf(report, sizeof(report),"%c[2J", 27); /* 27 is ESC command */ + snprintf(report, sizeof(report), "%c[2J", 27); /* 27 is ESC command */ SerialPort.print(report); } void display_commands_banner(void) { - snprintf(report, sizeof(report),"%c[2H", 27); /* 27 is ESC command */ + snprintf(report, sizeof(report), "%c[2H", 27); /* 27 is ESC command */ SerialPort.print(report); Serial.print("53L8A1 Simple Ranging demo application\n"); @@ -278,8 +257,7 @@ void display_commands_banner(void) void handle_cmd(uint8_t cmd) { - switch (cmd) - { + switch (cmd) { case 'r': toggle_resolution(); clear_screen(); diff --git a/examples/VL53L8CX_ThresholdDetection/VL53L8CX_ThresholdDetection.ino b/examples/VL53L8CX_ThresholdDetection/VL53L8CX_ThresholdDetection.ino index f798617..27adeea 100644 --- a/examples/VL53L8CX_ThresholdDetection/VL53L8CX_ThresholdDetection.ino +++ b/examples/VL53L8CX_ThresholdDetection/VL53L8CX_ThresholdDetection.ino @@ -2,8 +2,8 @@ ****************************************************************************** * @file VL53L8CX_ThresholdDetection.ino * @author STMicroelectronics - * @version V1.0.0 - * @date 12 June 2023 + * @version V2.0.0 + * @date 27 June 2024 * @brief Arduino test application for the STMicrolectronics VL53L8CX * proximity sensor satellite based on FlightSense. * This application makes use of C++ classes obtained from the C @@ -11,7 +11,7 @@ ****************************************************************************** * @attention * - *

© COPYRIGHT(c) 2021 STMicroelectronics

+ *

© COPYRIGHT(c) 2024 STMicroelectronics

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -49,15 +49,14 @@ * pin 8 (I0VDD) of the VL53L8CX satellite not connected * pin 9 (3V3) of the VL53L8CX satellite connected to 3V3 of the Nucleo board * pin 10 (1V8) of the VL53L8CX satellite not connected - * pin 11 (5V) of the VL53L8CX satellite not connected + * pin 11 (5V) of the VL53L8CX satellite not connected * GPIO1 of VL53L8CX satellite connected to A2 pin of the Nucleo board (not used) * GND of the VL53L8CX satellite connected to GND of the Nucleo board */ /* Includes ------------------------------------------------------------------*/ -#include -#include -#include + +#include #ifdef ARDUINO_SAM_DUE #define DEV_I2C Wire1 @@ -67,15 +66,14 @@ #define SerialPort Serial #define LPN_PIN A3 -#define I2C_RST_PIN -1 #define PWREN_PIN 11 -#define INT_PIN A2 +#define INT_PIN A2 void measure(void); void print_result(VL53L8CX_ResultsData *Result); // Component. -VL53L8CX sensor_VL53L8CX_top(&DEV_I2C, LPN_PIN, I2C_RST_PIN); +VL53L8CX sensor_VL53L8CX_top(&DEV_I2C, LPN_PIN); bool EnableAmbient = false; bool EnableSignal = false; @@ -83,6 +81,7 @@ uint8_t res = VL53L8CX_RESOLUTION_4X4; char report[256]; volatile int interruptCount = 0; uint8_t i; +uint8_t status; /* Setup ---------------------------------------------------------------------*/ @@ -107,21 +106,19 @@ void setup() // Set interrupt pin pinMode(INT_PIN, INPUT_PULLUP); attachInterrupt(INT_PIN, measure, FALLING); - + // Configure VL53L8CX component. sensor_VL53L8CX_top.begin(); - - sensor_VL53L8CX_top.init_sensor(); + status = sensor_VL53L8CX_top.init(); // Disable thresholds detection. - sensor_VL53L8CX_top.vl53l8cx_set_detection_thresholds_enable(0U); + status = sensor_VL53L8CX_top.set_detection_thresholds_enable(0U); // Set all values to 0. memset(&thresholds, 0, sizeof(thresholds)); // Configure thresholds on each active zone - for (i = 0; i < res; i++) - { + for (i = 0; i < res; i++) { thresholds[i].zone_num = i; thresholds[i].measurement = VL53L8CX_DISTANCE_MM; thresholds[i].type = VL53L8CX_IN_WINDOW; @@ -130,32 +127,30 @@ void setup() thresholds[i].param_high_thresh = 600; } - // Last threshold must be clearly indicated. - thresholds[i].zone_num |= VL53L8CX_LAST_THRESHOLD; + // Last threshold must be clearly indicated. + thresholds[i].zone_num |= VL53L8CX_LAST_THRESHOLD; - // Send array of thresholds to the sensor. - sensor_VL53L8CX_top.vl53l8cx_set_detection_thresholds(thresholds); + // Send array of thresholds to the sensor. + status = sensor_VL53L8CX_top.set_detection_thresholds(thresholds); - // Enable thresholds detection. - sensor_VL53L8CX_top.vl53l8cx_set_detection_thresholds_enable(1U); + // Enable thresholds detection. + status = sensor_VL53L8CX_top.set_detection_thresholds_enable(1U); - // Start Measurements. - sensor_VL53L8CX_top.vl53l8cx_start_ranging(); + // Start Measurements. + status = sensor_VL53L8CX_top.start_ranging(); } void loop() { VL53L8CX_ResultsData Results; uint8_t NewDataReady = 0; - uint8_t status; - do { - status = sensor_VL53L8CX_top.vl53l8cx_check_data_ready(&NewDataReady); + status = sensor_VL53L8CX_top.check_data_ready(&NewDataReady); } while (!NewDataReady); - if ((!status) && (NewDataReady != 0)&& interruptCount ) { + if ((!status) && (NewDataReady != 0) && interruptCount) { interruptCount = 0; - status = sensor_VL53L8CX_top.vl53l8cx_get_ranging_data(&Results); + status = sensor_VL53L8CX_top.get_ranging_data(&Results); print_result(&Results); } @@ -166,90 +161,73 @@ void print_result(VL53L8CX_ResultsData *Result) int8_t i, j, k, l; uint8_t zones_per_line; uint8_t number_of_zones = res; - + zones_per_line = (number_of_zones == 16) ? 4 : 8; - snprintf(report, sizeof(report),"%c[2H", 27); /* 27 is ESC command */ + snprintf(report, sizeof(report), "%c[2H", 27); /* 27 is ESC command */ SerialPort.print(report); SerialPort.print("53L8A1 Threshold Detection demo application\n"); SerialPort.print("-------------------------------------------\n\n"); SerialPort.print("Cell Format :\n\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { - snprintf(report, sizeof(report)," \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { + snprintf(report, sizeof(report), " \033[38;5;10m%20s\033[0m : %20s\n", "Distance [mm]", "Status"); SerialPort.print(report); - if(EnableAmbient || EnableSignal) - { - snprintf(report, sizeof(report)," %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); + if (EnableAmbient || EnableSignal) { + snprintf(report, sizeof(report), " %20s : %20s\n", "Signal [kcps/spad]", "Ambient [kcps/spad]"); SerialPort.print(report); } } SerialPort.print("\n\n"); - for (j = 0; j < number_of_zones; j += zones_per_line) - { - for (i = 0; i < zones_per_line; i++) + for (j = 0; j < number_of_zones; j += zones_per_line) { + for (i = 0; i < zones_per_line; i++) { SerialPort.print(" -----------------"); + } SerialPort.print("\n"); - - for (i = 0; i < zones_per_line; i++) + + for (i = 0; i < zones_per_line; i++) { SerialPort.print("| "); + } SerialPort.print("|\n"); - - for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) - { + + for (l = 0; l < VL53L8CX_NB_TARGET_PER_ZONE; l++) { // Print distance and status. - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - snprintf(report, sizeof(report),"| \033[38;5;10m%5ld\033[0m : %5ld ", - (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l], - (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); - SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + snprintf(report, sizeof(report), "| \033[38;5;10m%5ld\033[0m : %5ld ", + (long)Result->distance_mm[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l], + (long)Result->target_status[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); + SerialPort.print(report); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } SerialPort.print("|\n"); - if (EnableAmbient || EnableSignal ) - { + if (EnableAmbient || EnableSignal) { // Print Signal and Ambient. - for (k = (zones_per_line - 1); k >= 0; k--) - { - if (Result->nb_target_detected[j+k]>0) - { - if (EnableSignal) - { - snprintf(report, sizeof(report),"| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j+k)) + l]); + for (k = (zones_per_line - 1); k >= 0; k--) { + if (Result->nb_target_detected[j + k] > 0) { + if (EnableSignal) { + snprintf(report, sizeof(report), "| %5ld : ", (long)Result->signal_per_spad[(VL53L8CX_NB_TARGET_PER_ZONE * (j + k)) + l]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"| %5s : ", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : ", "X"); SerialPort.print(report); } - if (EnableAmbient) - { - snprintf(report, sizeof(report),"%5ld ", (long)Result->ambient_per_spad[j+k]); + if (EnableAmbient) { + snprintf(report, sizeof(report), "%5ld ", (long)Result->ambient_per_spad[j + k]); SerialPort.print(report); - } - else - { - snprintf(report, sizeof(report),"%5s ", "X"); + } else { + snprintf(report, sizeof(report), "%5s ", "X"); SerialPort.print(report); } - } - else - { - snprintf(report, sizeof(report),"| %5s : %5s ", "X", "X"); + } else { + snprintf(report, sizeof(report), "| %5s : %5s ", "X", "X"); SerialPort.print(report); } } @@ -257,8 +235,9 @@ void print_result(VL53L8CX_ResultsData *Result) } } } - for (i = 0; i < zones_per_line; i++) - SerialPort.print(" -----------------"); + for (i = 0; i < zones_per_line; i++) { + SerialPort.print(" -----------------"); + } SerialPort.print("\n"); } diff --git a/keywords.txt b/keywords.txt index 12c3401..0901028 100644 --- a/keywords.txt +++ b/keywords.txt @@ -14,45 +14,44 @@ VL53L8CX KEYWORD1 begin KEYWORD2 end KEYWORD2 -init_sensor KEYWORD2 -vl53l8cx_on KEYWORD2 -vl53l8cx_off KEYWORD2 -vl53l8cx_is_alive KEYWORD2 -vl53l8cx_init KEYWORD2 -vl53l8cx_set_i2c_address KEYWORD2 -vl53l8cx_get_power_mode KEYWORD2 -vl53l8cx_set_power_mode KEYWORD2 -vl53l8cx_start_ranging KEYWORD2 -vl53l8cx_stop_ranging KEYWORD2 -vl53l8cx_check_data_ready KEYWORD2 -vl53l8cx_get_ranging_data KEYWORD2 -vl53l8cx_get_resolution KEYWORD2 -vl53l8cx_set_resolution KEYWORD2 -vl53l8cx_get_ranging_frequency_hz KEYWORD2 -vl53l8cx_set_ranging_frequency_hz KEYWORD2 -vl53l8cx_get_integration_time_ms KEYWORD2 -vl53l8cx_set_integration_time_ms KEYWORD2 -vl53l8cx_get_sharpener_percent KEYWORD2 -vl53l8cx_set_sharpener_percent KEYWORD2 -vl53l8cx_get_target_order KEYWORD2 -vl53l8cx_set_target_order KEYWORD2 -vl53l8cx_get_ranging_mode KEYWORD2 -vl53l8cx_set_ranging_mode KEYWORD2 -vl53l8cx_dci_read_data KEYWORD2 -vl53l8cx_dci_write_data KEYWORD2 -vl53l8cx_dci_replace_data KEYWORD2 -vl53l8cx_get_detection_thresholds_enable KEYWORD2 -vl53l8cx_set_detection_thresholds_enable KEYWORD2 -vl53l8cx_get_detection_thresholds KEYWORD2 -vl53l8cx_set_detection_thresholds KEYWORD2 -vl53l8cx_motion_indicator_init KEYWORD2 -vl53l8cx_motion_indicator_set_distance_motion KEYWORD2 -vl53l8cx_motion_indicator_set_resolution KEYWORD2 -vl53l8cx_calibrate_xtalk KEYWORD2 -vl53l8cx_get_caldata_xtalk KEYWORD2 -vl53l8cx_set_caldata_xtalk KEYWORD2 -vl53l8cx_get_xtalk_margin KEYWORD2 -vl53l8cx_set_xtalk_margin KEYWORD2 +on KEYWORD2 +off KEYWORD2 +is_alive KEYWORD2 +init KEYWORD2 +set_i2c_address KEYWORD2 +get_power_mode KEYWORD2 +set_power_mode KEYWORD2 +start_ranging KEYWORD2 +stop_ranging KEYWORD2 +check_data_ready KEYWORD2 +get_ranging_data KEYWORD2 +get_resolution KEYWORD2 +set_resolution KEYWORD2 +get_ranging_frequency_hz KEYWORD2 +set_ranging_frequency_hz KEYWORD2 +get_integration_time_ms KEYWORD2 +set_integration_time_ms KEYWORD2 +get_sharpener_percent KEYWORD2 +set_sharpener_percent KEYWORD2 +get_target_order KEYWORD2 +set_target_order KEYWORD2 +get_ranging_mode KEYWORD2 +set_ranging_mode KEYWORD2 +dci_read_data KEYWORD2 +dci_write_data KEYWORD2 +dci_replace_data KEYWORD2 +get_detection_thresholds_enable KEYWORD2 +set_detection_thresholds_enable KEYWORD2 +get_detection_thresholds KEYWORD2 +set_detection_thresholds KEYWORD2 +motion_indicator_init KEYWORD2 +motion_indicator_set_distance_motion KEYWORD2 +motion_indicator_set_resolution KEYWORD2 +calibrate_xtalk KEYWORD2 +get_caldata_xtalk KEYWORD2 +set_caldata_xtalk KEYWORD2 +get_xtalk_margin KEYWORD2 +set_xtalk_margin KEYWORD2 SwapBuffer KEYWORD2 get_stream_count KEYWORD2 diff --git a/library.properties b/library.properties index d00a2ae..99022fb 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=STM32duino VL53L8CX -version=1.0.4 +version=2.0.0 author=STMicroelectronics maintainer=stm32duino sentence=Allows controlling the VL53L8CX (Time-of-Flight 8x8 multizone ranging sensor with wide field view) diff --git a/src/platform.c b/src/platform.c new file mode 100644 index 0000000..16cca32 --- /dev/null +++ b/src/platform.c @@ -0,0 +1,99 @@ +/** + ****************************************************************************** + * @file platform.cpp + * @author STMicroelectronics + * @version V1.0.0 + * @date 11 November 2021 + * @brief Implementation of the platform dependent APIs. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2021 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + + +#include "platform.h" + + +uint8_t VL53L8CX_RdByte( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAdress, + uint8_t *p_value) +{ + return p_platform->Read(p_platform->handle, RegisterAdress, p_value, 1U); +} + +uint8_t VL53L8CX_WrByte( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAdress, + uint8_t value) +{ + return p_platform->Write(p_platform->handle, RegisterAdress, &value, 1U); +} + +uint8_t VL53L8CX_WrMulti( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAdress, + uint8_t *p_values, + uint32_t size) +{ + return p_platform->Write(p_platform->handle, RegisterAdress, p_values, size); +} + +uint8_t VL53L8CX_RdMulti( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAdress, + uint8_t *p_values, + uint32_t size) +{ + return p_platform->Read(p_platform->handle, RegisterAdress, p_values, size); +} + +void VL53L8CX_SwapBuffer( + uint8_t *buffer, + uint16_t size) +{ + uint32_t i, tmp; + + /* Example of possible implementation using */ + for (i = 0; i < size; i = i + 4) { + tmp = ( + buffer[i] << 24) + | (buffer[i + 1] << 16) + | (buffer[i + 2] << 8) + | (buffer[i + 3]); + + memcpy(&(buffer[i]), &tmp, 4); + } +} + +uint8_t VL53L8CX_WaitMs( + VL53L8CX_Platform *p_platform, + uint32_t TimeMs) +{ + return p_platform->Wait(p_platform->handle, TimeMs); +} diff --git a/src/platform.cpp b/src/platform.cpp deleted file mode 100644 index 8ccd783..0000000 --- a/src/platform.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/** - ****************************************************************************** - * @file platform.cpp - * @author STMicroelectronics - * @version V1.0.0 - * @date 11 November 2021 - * @brief Implementation of the platform dependent APIs. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - - -#include "vl53l8cx_class.h" - -#define VL53L8CX_COMMS_CHUNK_SIZE 4096 -#define SPI_WRITE_MASK(x) (uint16_t)(x | 0x8000) -#define SPI_READ_MASK(x) (uint16_t)(x & ~0x8000) - - -uint8_t VL53L8CX::RdByte( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_value) -{ - uint8_t status = RdMulti(p_platform, RegisterAddress, p_value, 1); - return status; -} - -uint8_t VL53L8CX::WrByte( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t value) -{ - // Just use WrMulti but 1 byte - uint8_t status = WrMulti(p_platform, RegisterAddress, &value, 1); - return status; -} - -uint8_t VL53L8CX::WrMulti( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_values, - uint32_t size) -{ - if (p_platform->dev_i2c) { - uint32_t i = 0; - uint8_t buffer[2]; - while (i < size) { - // If still more than DEFAULT_I2C_BUFFER_LEN bytes to go, DEFAULT_I2C_BUFFER_LEN, - // else the remaining number of bytes - size_t current_write_size = (size - i > DEFAULT_I2C_BUFFER_LEN ? DEFAULT_I2C_BUFFER_LEN : size - i); - - p_platform->dev_i2c->beginTransmission((uint8_t)((p_platform->address >> 1) & 0x7F)); - - // Target register address for transfer - buffer[0] = (uint8_t)((RegisterAddress + i) >> 8); - buffer[1] = (uint8_t)((RegisterAddress + i) & 0xFF); - - p_platform->dev_i2c->write(buffer, 2); - if (p_platform->dev_i2c->write(p_values + i, current_write_size) == 0) { - return 1; - } else { - i += current_write_size; - if (size - i) { - - // Flush buffer and send stop bit so we have compatibility also with ESP32 platforms - p_platform->dev_i2c->endTransmission(true); - - } - } - } - return p_platform->dev_i2c->endTransmission(true); - } - - if (p_platform->dev_spi) { - - uint8_t status = 0; - int32_t i = 0; - uint32_t position = 0; - uint32_t data_size = 0; - uint16_t temp; - uint8_t data_write[VL53L8CX_COMMS_CHUNK_SIZE + 2]; - - for (position = 0; position < size; position += VL53L8CX_COMMS_CHUNK_SIZE) { - if (size > VL53L8CX_COMMS_CHUNK_SIZE) { - if ((position + VL53L8CX_COMMS_CHUNK_SIZE) > size) { - data_size = size - position; - } else { - data_size = VL53L8CX_COMMS_CHUNK_SIZE; - } - } else { - data_size = size; - } - - temp = RegisterAddress + position; - - data_write[0] = SPI_WRITE_MASK(temp) >> 8; - data_write[1] = SPI_WRITE_MASK(temp) & 0xFF; - - for (i = 0; i < data_size; i++) { - data_write[i + 2] = p_values[position + i]; - } - - data_size += 2; - p_platform->dev_spi->beginTransaction(SPISettings(p_platform->spi_speed, MSBFIRST, SPI_MODE3)); - digitalWrite(p_platform->cs_pin, LOW); - p_platform->dev_spi->transfer(&data_write, data_size); - digitalWrite(p_platform->cs_pin, HIGH); - } - return status; - } - return 1; -} - -uint8_t VL53L8CX::RdMulti( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_values, - uint32_t size) -{ - if (p_platform->dev_i2c) { - int status = 0; - uint8_t buffer[2]; - // Loop until the port is transmitted correctly - do { - p_platform->dev_i2c->beginTransmission((uint8_t)((p_platform->address >> 1) & 0x7F)); - - // Target register address for transfer - buffer[0] = (uint8_t)(RegisterAddress >> 8); - buffer[1] = (uint8_t)(RegisterAddress & 0xFF); - p_platform->dev_i2c->write(buffer, 2); - - status = p_platform->dev_i2c->endTransmission(false); - - // Fix for some STM32 boards - // Reinitialize the i2c bus with the default parameters -#ifdef ARDUINO_ARCH_STM32 - if (status) { - p_platform->dev_i2c->end(); - p_platform->dev_i2c->begin(); - } -#endif - // End of fix - } while (status != 0); - uint32_t i = 0; - if (size > DEFAULT_I2C_BUFFER_LEN) { - while (i < size) { - // If still more than DEFAULT_I2C_BUFFER_LEN bytes to go, DEFAULT_I2C_BUFFER_LEN, - // else the remaining number of bytes - uint8_t current_read_size = (size - i > DEFAULT_I2C_BUFFER_LEN ? DEFAULT_I2C_BUFFER_LEN : size - i); - p_platform->dev_i2c->requestFrom(((uint8_t)((p_platform->address >> 1) & 0x7F)), - current_read_size); - while (p_platform->dev_i2c->available()) { - p_values[i] = p_platform->dev_i2c->read(); - i++; - } - } - } else { - p_platform->dev_i2c->requestFrom(((uint8_t)((p_platform->address >> 1) & 0x7F)), size); - while (p_platform->dev_i2c->available()) { - p_values[i] = p_platform->dev_i2c->read(); - i++; - } - } - return i != size; - } - if (p_platform->dev_spi) { - uint8_t status = 0; - uint32_t position = 0; - uint32_t data_size = 0; - uint16_t temp; - uint8_t data_write[VL53L8CX_COMMS_CHUNK_SIZE + 2]; - - for (position = 0; position < size; position += VL53L8CX_COMMS_CHUNK_SIZE) { - if (size > VL53L8CX_COMMS_CHUNK_SIZE) { - if ((position + VL53L8CX_COMMS_CHUNK_SIZE) > size) { - data_size = size - position; - } else { - data_size = VL53L8CX_COMMS_CHUNK_SIZE; - } - } else { - data_size = size; - } - - temp = RegisterAddress + position; - - data_write[0] = SPI_READ_MASK(temp) >> 8; - data_write[1] = SPI_READ_MASK(temp) & 0xFF; - p_platform->dev_spi->beginTransaction(SPISettings(p_platform->spi_speed, MSBFIRST, SPI_MODE3)); - digitalWrite(p_platform->cs_pin, LOW); - p_platform->dev_spi->transfer(&data_write, 2); - for (uint16_t i = 0; i < data_size; i++) { - *(p_values + i + position) = p_platform->dev_spi->transfer(0x00); - } - digitalWrite(p_platform->cs_pin, HIGH); - } - return 0; - } - return 1; -} - -void VL53L8CX::SwapBuffer( - uint8_t *buffer, - uint16_t size) -{ - uint32_t i, tmp; - /* Example of possible implementation using */ - for (i = 0; i < size; i = i + 4) { - tmp = ( - buffer[i] << 24) - | (buffer[i + 1] << 16) - | (buffer[i + 2] << 8) - | (buffer[i + 3]); - memcpy(&(buffer[i]), &tmp, 4); - - - } - -} - - -uint8_t VL53L8CX::WaitMs( - VL53L8CX_Platform *p_platform, - uint32_t TimeMs) -{ - (void)p_platform; - delay(TimeMs); - - return 0; -} diff --git a/src/platform.h b/src/platform.h index 9634707..29b3729 100644 --- a/src/platform.h +++ b/src/platform.h @@ -37,50 +37,82 @@ #ifndef _PLATFORM_H_ #define _PLATFORM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + + #pragma once #include #include -#include -#include -#include "SPI.h" #include "platform_config.h" - +#define VL53L8CX_COMMS_CHUNK_SIZE 4096 +#define SPI_WRITE_MASK(x) (uint16_t)(x | 0x8000) +#define SPI_READ_MASK(x) (uint16_t)(x & ~0x8000) #ifndef DEFAULT_I2C_BUFFER_LEN - #ifdef ARDUINO_SAM_DUE - /* FIXME: It seems that an I2C buffer of BUFFER_LENGTH does not work on Arduino DUE. So, we need to decrease the size */ - #define DEFAULT_I2C_BUFFER_LEN (BUFFER_LENGTH - 2) - #else - #ifdef BUFFER_LENGTH - #define DEFAULT_I2C_BUFFER_LEN BUFFER_LENGTH - #else - #define DEFAULT_I2C_BUFFER_LEN 32 - #endif - #endif -#endif -/** - * @brief Structure VL53L8CX_Platform needs to be filled by the customer, - * depending on his platform. At least, it contains the VL53L8CX I2C address. - * Some additional fields can be added, as descriptors, or platform - * dependencies. Anything added into this structure is visible into the platform - * layer. - */ + + +typedef uint8_t (*VL53L8CX_wait_Func)(void *, uint32_t); +typedef uint8_t (*VL53L8CX_write_Func)(void *, uint16_t, uint8_t *, uint32_t); +typedef uint8_t (*VL53L8CX_read_Func)(void *, uint16_t, uint8_t *, uint32_t); + + +#ifdef ARDUINO_SAM_DUE +/* FIXME: It seems that an I2C buffer of BUFFER_LENGTH does not work on Arduino DUE. So, we need to decrease the size */ +#define DEFAULT_I2C_BUFFER_LEN (BUFFER_LENGTH - 2) +#else +#ifdef BUFFER_LENGTH +#define DEFAULT_I2C_BUFFER_LEN BUFFER_LENGTH +#else +#define DEFAULT_I2C_BUFFER_LEN 32 +#endif +#endif +#endif typedef struct { uint16_t address; + VL53L8CX_write_Func Write; + VL53L8CX_read_Func Read; + VL53L8CX_wait_Func Wait; + void *handle; +} VL53L8CX_Platform; - TwoWire *dev_i2c; - SPIClass *dev_spi; - int cs_pin; - uint32_t spi_speed; +uint8_t VL53L8CX_RdByte( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAddress, + uint8_t *p_value); - int lpn_pin; +uint8_t VL53L8CX_WrByte( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAddress, + uint8_t value); - int i2c_rst_pin; +uint8_t VL53L8CX_WrMulti( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAddress, + uint8_t *p_values, + uint32_t size); -} VL53L8CX_Platform; +uint8_t VL53L8CX_RdMulti( + VL53L8CX_Platform *p_platform, + uint16_t RegisterAddress, + uint8_t *p_values, + uint32_t size); + +uint8_t VL53L8CX_WaitMs( + VL53L8CX_Platform *p_platform, + uint32_t TimeMs); +void VL53L8CX_SwapBuffer( + uint8_t *buffer, + uint16_t size); + +#ifdef __cplusplus +} +#endif #endif // _PLATFORM_H_ diff --git a/src/vl53l8cx.cpp b/src/vl53l8cx.cpp new file mode 100644 index 0000000..f1075a7 --- /dev/null +++ b/src/vl53l8cx.cpp @@ -0,0 +1,663 @@ +/** +****************************************************************************** +* @file vl53l8cx.cpp +* @author STMicroelectronics +* @version V2.0.0 +* @date 27 June 2024 +* @brief Implementation of of a VL53L8CX Time of Flight(TOF) sensor. +****************************************************************************** +* @attention +* +*

© COPYRIGHT(c) 2024 STMicroelectronics

+* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* 3. Neither the name of STMicroelectronics nor the names of its contributors +* may be used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +* OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +****************************************************************************** +*/ + + +/* Includes ------------------------------------------------------------------*/ +#include "vl53l8cx.h" + + +/** Constructor + * @param[in] i2c device I2C to be used for communication + * @param[in] lpn_pin pin to be used as component LPn + * @param[in] i2c_rst_pin pin to be used as component I2C_RST + */ +VL53L8CX::VL53L8CX(TwoWire *i2c, int _lpn_pin, int _i2c_rst_pin): dev_i2c(i2c), lpn_pin(_lpn_pin), i2c_rst_pin(_i2c_rst_pin) +{ + memset((void *)&_dev, 0x0, sizeof(VL53L8CX_Configuration)); + dev_spi = NULL; + _dev.platform.address = VL53L8CX_DEFAULT_I2C_ADDRESS; + _dev.platform.Write = VL53L8CX_io_write; + _dev.platform.Read = VL53L8CX_io_read; + _dev.platform.Wait = VL53L8CX_io_wait; + _dev.platform.handle = (void *)this; + p_dev = &_dev; +} +/** Constructor +* @param spi object of an helper class which handles the SPI peripheral +* @param cs_pin the chip select pin +* @param spi_speed the SPI speed in Hz +*/ +VL53L8CX::VL53L8CX(SPIClass *spi, int _cs_pin, int _lpn_pin, int _i2c_rst_pin, uint32_t _spi_speed) : dev_spi(spi), cs_pin(_cs_pin), lpn_pin(_lpn_pin), i2c_rst_pin(_i2c_rst_pin), spi_speed(_spi_speed) +{ + memset((void *)&_dev, 0x0, sizeof(VL53L8CX_Configuration)); + dev_i2c = NULL; + _dev.platform.address = VL53L8CX_DEFAULT_I2C_ADDRESS; + _dev.platform.Write = VL53L8CX_io_write; + _dev.platform.Read = VL53L8CX_io_read; + _dev.platform.Wait = VL53L8CX_io_wait; + _dev.platform.handle = (void *)this; + p_dev = &_dev; +} + +/** Destructor + */ +VL53L8CX::~VL53L8CX() {} +/* warning: VL53LX class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor. + The warning should request to introduce a destructor to make sure to delete the object */ + +int VL53L8CX::begin() +{ + if (lpn_pin >= 0) { + pinMode(lpn_pin, OUTPUT); + digitalWrite(lpn_pin, LOW); + delay(10); + digitalWrite(lpn_pin, HIGH); + } + if (i2c_rst_pin >= 0) { + pinMode(i2c_rst_pin, OUTPUT); + if (dev_i2c) { + digitalWrite(i2c_rst_pin, LOW); + } + if (dev_spi) { + digitalWrite(i2c_rst_pin, HIGH); + } + } + + if (dev_spi) { + // Configure CS pin + pinMode(cs_pin, OUTPUT); + digitalWrite(cs_pin, HIGH); + } + return 0; +} + +int VL53L8CX::end() +{ + if (lpn_pin >= 0) { + pinMode(lpn_pin, INPUT); + } + if (i2c_rst_pin >= 0) { + pinMode(i2c_rst_pin, INPUT); + } + /* Reset CS configuration */ + if (dev_spi) { + // Configure CS pin + pinMode(cs_pin, INPUT); + } + return 0; +} + +/*** Interface Methods ***/ +/*** High level API ***/ +/** + * @brief PowerOn the sensor + * @return void + */ +void VL53L8CX::on(void) +{ + if (lpn_pin >= 0) { + digitalWrite(lpn_pin, HIGH); + } + delay(10); +} + +/** + * @brief PowerOff the sensor + * @return void + */ +void VL53L8CX::off(void) +{ + if (lpn_pin >= 0) { + digitalWrite(lpn_pin, LOW); + } + delay(10); +} + +/** + * @brief Reset I2C peripheral of the sensor + * @return void + */ +void VL53L8CX::i2c_reset(void) +{ + if (dev_i2c && i2c_rst_pin >= 0) { + digitalWrite(i2c_rst_pin, LOW); + delay(10); + digitalWrite(i2c_rst_pin, HIGH); + delay(10); + digitalWrite(i2c_rst_pin, LOW); + delay(10); + } +} + +/** +* @brief Check if the VL53L8CX sensor is alive(responding to I2C communication). +* @param p_dev Pointer to the device configuration structure. +* @param p_is_alive Pointer to the variable that will be set to indicate if the sensor is alive. +* @return Status 0 if check is OK. +*/ +uint8_t VL53L8CX::is_alive(uint8_t *p_is_alive) +{ + return vl53l8cx_is_alive(p_dev, p_is_alive); +} + +/** +* @brief Initialize the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @return Status 0 if initialization is OK. +*/ +uint8_t VL53L8CX::init(void) +{ + return vl53l8cx_init(p_dev); +} + +/** +* @brief Set the I2C address of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param i2c_address The new I2C address to be set for the sensor. +* @return Status 0 if the address is set correctly. +*/ +uint8_t VL53L8CX::set_i2c_address(uint16_t i2c_address) +{ + return vl53l8cx_set_i2c_address(p_dev, i2c_address); +} + +/** +* @brief Get the current power mode of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_power_mode Pointer to the variable that will be set to the current power mode. +* @return Status 0 if the power mode is retrieved successfully. +*/ +uint8_t VL53L8CX::get_power_mode(uint8_t *p_power_mode) +{ + return vl53l8cx_get_power_mode(p_dev, p_power_mode); +} + +/** +* @brief Set the power mode of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param power_mode The power mode to be set(e.g., sleep or wakeup). +* @return Status 0 if the power mode is set successfully, or 127 if the requested power mode is not valid. +*/ +uint8_t VL53L8CX::set_power_mode(uint8_t power_mode) +{ + return vl53l8cx_set_power_mode(p_dev, power_mode); +} + +/** +* @brief Start a ranging session with the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @return Status 0 if the ranging session starts successfully. +*/ +uint8_t VL53L8CX::start_ranging(void) +{ + return vl53l8cx_start_ranging(p_dev); +} + +/** +* @brief Stop the current ranging session with the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @return Status 0 if the ranging session stops successfully. +*/ +uint8_t VL53L8CX::stop_ranging(void) +{ + return vl53l8cx_stop_ranging(p_dev); +} + +/** +* @brief Check if new ranging data is ready. +* @param p_dev Pointer to the device configuration structure. +* @param p_isReady Pointer to the variable that will be updated to indicate if new data is ready. +* @return Status 0 if the data ready check is successful. +*/ +uint8_t VL53L8CX::check_data_ready(uint8_t *p_isReady) +{ + return vl53l8cx_check_data_ready(p_dev, p_isReady); +} + +/** +* @brief Get the ranging data from the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_results Pointer to the results data structure where the ranging data will be stored. +* @return Status 0 if the data is retrieved successfully. +*/ +uint8_t VL53L8CX::get_ranging_data(VL53L8CX_ResultsData *p_results) +{ + return vl53l8cx_get_ranging_data(p_dev, p_results); +} + +/** +* @brief Get the current resolution of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_resolution Pointer to the variable that will be set to the current resolution. +* @return Status 0 if the resolution is retrieved successfully. +*/ +uint8_t VL53L8CX::get_resolution(uint8_t *p_resolution) +{ + return vl53l8cx_get_resolution(p_dev, p_resolution); +} + +/** +* @brief Set a new resolution for the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param resolution The new resolution to be set. +* @return Status 0 if the resolution is set successfully. +*/ +uint8_t VL53L8CX::set_resolution(uint8_t resolution) +{ + return vl53l8cx_set_resolution(p_dev, resolution); +} + +/** +* @brief Get the current ranging frequency of the VL53L8CX sensor in Hz. +* @param p_dev Pointer to the device configuration structure. +* @param p_frequency_hz Pointer to the variable that will be set to the current ranging frequency. +* @return Status 0 if the ranging frequency is retrieved successfully. +*/ +uint8_t VL53L8CX::get_ranging_frequency_hz(uint8_t *p_frequency_hz) +{ + return vl53l8cx_get_ranging_frequency_hz(p_dev, p_frequency_hz); +} + +/** +* @brief Set a new ranging frequency for the VL53L8CX sensor in Hz. +* @param p_dev Pointer to the device configuration structure. +* @param frequency_hz The new ranging frequency to be set. +* @return Status 0 if the ranging frequency is set successfully, or 127 if the value is not correct. +*/ +uint8_t VL53L8CX::set_ranging_frequency_hz(uint8_t frequency_hz) +{ + return vl53l8cx_set_ranging_frequency_hz(p_dev, frequency_hz); +} + +/** +* @brief Get the current integration time of the VL53L8CX sensor in ms. +* @param p_dev Pointer to the device configuration structure. +* @param p_time_ms Pointer to the variable that will be set to the current integration time. +* @return Status 0 if the integration time is retrieved successfully. +*/ +uint8_t VL53L8CX::get_integration_time_ms(uint32_t *p_time_ms) +{ + return vl53l8cx_get_integration_time_ms(p_dev, p_time_ms); +} + +/** +* @brief Set a new integration time for the VL53L8CX sensor in ms. +* @param p_dev Pointer to the device configuration structure. +* @param integration_time_ms The new integration time to be set. +* @return Status 0 if the integration time is set successfully. +*/ +uint8_t VL53L8CX::set_integration_time_ms(uint32_t integration_time_ms) +{ + return vl53l8cx_set_integration_time_ms(p_dev, integration_time_ms); +} + +/** +* @brief Get the current sharpener percentage of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_sharpener_percent Pointer to the variable that will be set to the current sharpener percentage. +* @return Status 0 if the sharpener percentage is retrieved successfully. +*/ +uint8_t VL53L8CX::get_sharpener_percent(uint8_t *p_sharpener_percent) +{ + return vl53l8cx_get_sharpener_percent(p_dev, p_sharpener_percent); +} + +/** +* @brief Set a new sharpener percentage for the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param sharpener_percent The new sharpener percentage to be set. +* @return Status 0 if the sharpener percentage is set successfully. +*/ +uint8_t VL53L8CX::set_sharpener_percent(uint8_t sharpener_percent) +{ + return vl53l8cx_set_sharpener_percent(p_dev, sharpener_percent); +} +/** +* @brief Get the current target order of the VL53L8CX sensor(closest or strongest). +* @param p_dev Pointer to the device configuration structure. +* @param p_target_order Pointer to the variable that will be set to the current target order. +* @return Status 0 if the target order is retrieved successfully. +*/ +uint8_t VL53L8CX::get_target_order(uint8_t *p_target_order) +{ + return vl53l8cx_get_target_order(p_dev, p_target_order); +} + +/** +* @brief Set a new target order for the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param target_order The new target order to be set. +* @return Status 0 if the target order is set successfully, or 127 if the target order is unknown. +*/ +uint8_t VL53L8CX::set_target_order(uint8_t target_order) +{ + return vl53l8cx_set_target_order(p_dev, target_order); +} + +/** +* @brief Get the current ranging mode of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_ranging_mode Pointer to the variable that will be set to the current ranging mode. +* @return Status 0 if the ranging mode is retrieved successfully. +*/ +uint8_t VL53L8CX::get_ranging_mode(uint8_t *p_ranging_mode) +{ + return vl53l8cx_get_ranging_mode(p_dev, p_ranging_mode); +} + +/** +* @brief Set the ranging mode of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param ranging_mode The new ranging mode to be set. +* @return Status 0 if the ranging mode is set successfully. +*/ +uint8_t VL53L8CX::set_ranging_mode(uint8_t ranging_mode) +{ + return vl53l8cx_set_ranging_mode(p_dev, ranging_mode); +} + +/** +* @brief Check if the synchronization pin of the VL53L8CX sensor is enabled. +* @param p_dev Pointer to the device configuration structure. +* @param p_is_sync_pin_enabled Pointer to the variable that will be updated to indicate if the sync pin is enabled. +* @return Status 0 if the sync pin status is retrieved successfully. +*/ +uint8_t VL53L8CX::get_external_sync_pin_enable(uint8_t *p_is_sync_pin_enabled) +{ + return vl53l8cx_get_external_sync_pin_enable(p_dev, p_is_sync_pin_enabled); +} + +/** +* @brief Enable or disable the synchronization pin of the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param enable_sync_pin Set to 1 to enable the sync pin, or 0 to disable it. +* @return Status 0 if the sync pin is set successfully. +*/ +uint8_t VL53L8CX::set_external_sync_pin_enable(uint8_t enable_sync_pin) +{ + return vl53l8cx_set_external_sync_pin_enable(p_dev, enable_sync_pin); +} + +/** +* @brief Get the number of frames between two temperature compensations for the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param p_repeat_count Pointer to the variable that will be set to the number of frames before the next temperature compensation. +* @return Status 0 if the repeat count is retrieved successfully. +*/ +uint8_t VL53L8CX::get_VHV_repeat_count(uint32_t *p_repeat_count) +{ + return vl53l8cx_get_VHV_repeat_count(p_dev, p_repeat_count); +} + + +/** +* @brief Set the number of frames between two temperature compensations for the VL53L8CX sensor. +* @param p_dev Pointer to the device configuration structure. +* @param repeat_count The number of frames between temperature compensations to be set. +* @return Status 0 if the repeat count is set successfully. +*/ +uint8_t VL53L8CX::set_VHV_repeat_count(uint32_t repeat_count) +{ + return vl53l8cx_set_VHV_repeat_count(p_dev, repeat_count); +} + +/** +* @brief Read 'extra data' from the VL53L8CX sensor using DCI(Device Configuration Interface). +* @param p_dev Pointer to the device configuration structure. +* @param data Pointer to the data array or casted structure where the read data will be stored. +* @param index Index of the required value to be read. +* @param data_size Size of the data array or casted structure(use sizeof() function). +* @return Status 0 if the read operation is successful. +*/ +uint8_t VL53L8CX::dci_read_data(uint8_t *data, uint32_t index, uint16_t data_size) +{ + return vl53l8cx_dci_read_data(p_dev, data, index, data_size); +} + +/** +* @brief Write 'extra data' to the VL53L8CX sensor using DCI(Device Configuration Interface). +* @param p_dev Pointer to the device configuration structure. +* @param data Pointer to the data array or casted structure containing the data to be written. +* @param index Index of the required value to be written. +* @param data_size Size of the data array or casted structure(use sizeof() function). +* @return Status 0 if the write operation is successful. +*/ +uint8_t VL53L8CX::dci_write_data(uint8_t *data, uint32_t index, uint16_t data_size) +{ + return vl53l8cx_dci_write_data(p_dev, data, index, data_size); +} + +/** +* @brief Replace 'extra data' in the VL53L8CX sensor using DCI(Device Configuration Interface). +* @param p_dev Pointer to the device configuration structure. +* @param data Pointer to the data array or casted structure where the current data is stored. +* @param index Index of the required value to be replaced. +* @param data_size Size of the data array or casted structure(use sizeof() function). +* @param new_data Pointer to the new data array containing the fields to be replaced. +* @param new_data_size Size of the new data array. +* @param new_data_pos Position of the new data in the buffer. +* @return Status 0 if the replace operation is successful. +*/ +uint8_t VL53L8CX::dci_replace_data(uint8_t *data, uint32_t index, uint16_t data_size, uint8_t *new_data, uint16_t new_data_size, uint16_t new_data_pos) +{ + return vl53l8cx_dci_replace_data(p_dev, + data, + index, + data_size, + new_data, + new_data_size, + new_data_pos); +} + + +/** +* @brief Check if the detection thresholds are enabled on the VL53L8CX sensor. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_enabled Pointer to the variable that will be set to 1 if thresholds are enabled, or 0 if disabled. +* @return Status 0 if the check is successful. +*/ +uint8_t VL53L8CX::get_detection_thresholds_enable(uint8_t *p_enabled) +{ + return vl53l8cx_get_detection_thresholds_enable(p_dev, p_enabled); +} + +/** +* @brief Enable or disable the detection thresholds on the VL53L8CX sensor. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param enabled Set to 1 to enable thresholds, or 0 to disable them. +* @return Status 0 if the thresholds are set successfully. +*/ +uint8_t VL53L8CX::set_detection_thresholds_enable(uint8_t enabled) +{ + return vl53l8cx_set_detection_thresholds_enable(p_dev, enabled); +} + +/** +* @brief Get the detection thresholds from the VL53L8CX sensor. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_thresholds Pointer to the array where the detection thresholds will be stored. +* @return Status 0 if the thresholds are retrieved successfully. +*/ +uint8_t VL53L8CX::get_detection_thresholds(VL53L8CX_DetectionThresholds *p_thresholds) +{ + return vl53l8cx_get_detection_thresholds(p_dev, p_thresholds); +} + +/** +* @brief Set the detection thresholds on the VL53L8CX sensor. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_thresholds Pointer to the array containing the new detection thresholds. +* @return Status 0 if the thresholds are programmed successfully. +*/ +uint8_t VL53L8CX::set_detection_thresholds(VL53L8CX_DetectionThresholds *p_thresholds) +{ + return vl53l8cx_set_detection_thresholds(p_dev, p_thresholds); +} + +/** +* @brief Get the status of the auto-stop feature on the VL53L8CX sensor when using detection thresholds. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_auto_stop Pointer to the variable that will be set to 1 if auto-stop is enabled, or 0 if disabled. +* @return Status 0 if the auto-stop status is retrieved successfully. +*/ +uint8_t VL53L8CX::get_detection_thresholds_auto_stop(uint8_t *p_auto_stop) +{ + return vl53l8cx_get_detection_thresholds_auto_stop(p_dev, p_auto_stop); +} + +/** +* @brief Enable or disable the auto-stop feature on the VL53L8CX sensor when using detection thresholds. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param auto_stop Set to 1 to enable auto-stop, or 0 to disable it. +* @return Status 0 if the auto-stop feature is set successfully. +*/ +uint8_t VL53L8CX::set_detection_thresholds_auto_stop(uint8_t auto_stop) +{ + return vl53l8cx_set_detection_thresholds_auto_stop(p_dev, auto_stop); +} + + +/** +* @brief Initialize the motion indicator with the default monitoring range. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_motion_config Pointer to the structure containing the initialized motion configuration. +* @param resolution The desired resolution, defined by macros VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. +* @return Status 0 if initialization is successful, or 127 if the resolution is unknown. +*/ +uint8_t VL53L8CX::motion_indicator_init(VL53L8CX_Motion_Configuration *p_motion_config, uint8_t resolution) +{ + return vl53l8cx_motion_indicator_init(p_dev, p_motion_config, resolution); +} + +/** +* @brief Change the working distance range of the motion indicator. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_motion_config Pointer to the structure containing the motion configuration. +* @param distance_min_mm Minimum distance for the motion indicator(minimum value 400mm, maximum 4000mm). +* @param distance_max_mm Maximum distance for the motion indicator(minimum value 400mm, maximum 4000mm). +* @return Status 0 if the configuration is successful, or 127 if an argument is invalid. +*/ +uint8_t VL53L8CX::motion_indicator_set_distance_motion(VL53L8CX_Motion_Configuration *p_motion_config, uint16_t distance_min_mm, uint16_t distance_max_mm) +{ + return vl53l8cx_motion_indicator_set_distance_motion(p_dev, p_motion_config, distance_min_mm, distance_max_mm); +} + +/** +* @brief Update the internal motion indicator map to a new resolution. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_motion_config Pointer to the structure containing the motion configuration. +* @param resolution The desired SCI resolution, defined by macros VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. +* @return Status 0 if the update is successful, or 127 if the resolution is unknown. +*/ +uint8_t VL53L8CX::motion_indicator_set_resolution(VL53L8CX_Motion_Configuration *p_motion_config, uint8_t resolution) +{ + return vl53l8cx_motion_indicator_set_resolution(p_dev, p_motion_config, resolution); +} + +/** +* @brief Start the VL53L8CX sensor to calibrate Xtalk, recommended for use with a coverglass. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param reflectance_percent Target reflectance in percent, between 1 and 99%. ST recommends a 3% target reflectance for better efficiency. +* @param nb_samples Number of samples used for calibration. More samples increase accuracy but also calibration time. Minimum is 1, maximum is 16. +* @param distance_mm Target distance in mm for calibration. Minimum allowed is 600mm, maximum is 3000mm. The target must stay in Full FOV. +* @return Status 0 if calibration is successful, 127 if an argument has an incorrect value, or 255 if something failed. +*/ +uint8_t VL53L8CX::calibrate_xtalk(uint16_t reflectance_percent, uint8_t nb_samples, uint16_t distance_mm) +{ + return vl53l8cx_calibrate_xtalk(p_dev, reflectance_percent, nb_samples, distance_mm); +} + +/** +* @brief Get the Xtalk calibration data buffer, available after using vl53l8cx_calibrate_xtalk(). +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_xtalk_data Buffer to store Xtalk data, size defined by VL53L8CX_XTALK_SIZE macro. +* @return Status 0 if buffer reading is successful. +*/ +uint8_t VL53L8CX::get_caldata_xtalk(uint8_t *p_xtalk_data) +{ + return vl53l8cx_get_caldata_xtalk(p_dev, p_xtalk_data); +} + +/** +* @brief Set the Xtalk calibration data buffer, can be used to override the default Xtalk buffer. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_xtalk_data Buffer containing Xtalk data, size defined by VL53L8CX_XTALK_SIZE macro. +* @return Status 0 if buffer is set successfully. +*/ +uint8_t VL53L8CX::set_caldata_xtalk(uint8_t *p_xtalk_data) +{ + return vl53l8cx_set_caldata_xtalk(p_dev, p_xtalk_data); +} + +/** +* @brief Get the Xtalk margin, used to increase the Xtalk threshold and avoid false positives after calibration. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param p_xtalk_margin Pointer to store the current Xtalk margin in kcps/spads. +* @return Status 0 if reading is successful. +*/ +uint8_t VL53L8CX::get_xtalk_margin(uint32_t *p_xtalk_margin) +{ + return vl53l8cx_get_xtalk_margin(p_dev, p_xtalk_margin); +} + +/** +* @brief Set the Xtalk margin, used to increase the Xtalk threshold and avoid false positives after calibration. +* @param p_dev Pointer to the VL53L8CX configuration structure. +* @param xtalk_margin New Xtalk margin in kcps/spads. Minimum value is 0, maximum is 10,000 kcps/spads. +* @return Status 0 if the new margin is set successfully, or 127 if the margin is invalid. +*/ +uint8_t VL53L8CX::set_xtalk_margin(uint32_t xtalk_margin) +{ + return vl53l8cx_set_xtalk_margin(p_dev, xtalk_margin); +} + + + +uint8_t VL53L8CX_io_write(void *handle, uint16_t RegisterAddress, uint8_t *p_values, uint32_t size) +{ + return ((VL53L8CX *)handle)->IO_Write(RegisterAddress, p_values, size); +} + +uint8_t VL53L8CX_io_read(void *handle, uint16_t RegisterAddress, uint8_t *p_values, uint32_t size) +{ + return ((VL53L8CX *)handle)->IO_Read(RegisterAddress, p_values, size); +} + +uint8_t VL53L8CX_io_wait(void *handle, uint32_t ms) +{ + return ((VL53L8CX *)handle)->IO_Wait(ms); +} diff --git a/src/vl53l8cx.h b/src/vl53l8cx.h new file mode 100644 index 0000000..f74a998 --- /dev/null +++ b/src/vl53l8cx.h @@ -0,0 +1,298 @@ +/** + ****************************************************************************** + * @file vl53l8cx.h + * @author STMicroelectronics + * @version V2.0.0 + * @date 27 June 2024 + * @brief Abstract class of a VL53L8CX Time of Flight(TOF) sensor. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2024 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Prevent recursive inclusion -----------------------------------------------*/ +#ifndef __VL53L8CX_H +#define __VL53L8CX_H + +/* Includes ------------------------------------------------------------------*/ +#include "Arduino.h" +#include "Wire.h" +#include "SPI.h" +#include "platform.h" +#include "vl53l8cx_api.h" +#include "vl53l8cx_plugin_detection_thresholds.h" +#include "vl53l8cx_plugin_motion_indicator.h" +#include "vl53l8cx_plugin_xtalk.h" + +/* Class Declaration ---------------------------------------------------------*/ +class VL53L8CX { + public: + VL53L8CX(TwoWire *i2c, int lpn_pin, int i2c_rst_pin = -1); + VL53L8CX(SPIClass *spi, int cs_pin, int lpn_pin = -1, int i2c_rst_pin = -1, uint32_t spi_speed = 5000000); + virtual ~VL53L8CX(void); + virtual int begin(void); + virtual int end(void); + virtual void on(void); + virtual void off(void); + virtual void i2c_reset(void); + uint8_t is_alive(uint8_t *p_is_alive); + uint8_t init(void); + uint8_t set_i2c_address(uint16_t i2c_address); + uint8_t get_power_mode(uint8_t *p_power_mode); + uint8_t set_power_mode(uint8_t power_mode); + uint8_t start_ranging(void); + uint8_t stop_ranging(void); + uint8_t check_data_ready(uint8_t *p_isReady); + uint8_t get_ranging_data(VL53L8CX_ResultsData *p_results); + uint8_t get_resolution(uint8_t *p_resolution); + uint8_t set_resolution(uint8_t resolution); + uint8_t get_ranging_frequency_hz(uint8_t *p_frequency_hz); + uint8_t set_ranging_frequency_hz(uint8_t frequency_hz); + uint8_t get_integration_time_ms(uint32_t *p_time_ms); + uint8_t set_integration_time_ms(uint32_t integration_time_ms); + uint8_t get_sharpener_percent(uint8_t *p_sharpener_percent); + uint8_t set_sharpener_percent(uint8_t sharpener_percent); + uint8_t get_target_order(uint8_t *p_target_order); + uint8_t set_target_order(uint8_t target_order); + uint8_t get_ranging_mode(uint8_t *p_ranging_mode); + uint8_t set_ranging_mode(uint8_t ranging_mode); + uint8_t get_external_sync_pin_enable(uint8_t *p_is_sync_pin_enabled); + uint8_t set_external_sync_pin_enable(uint8_t enable_sync_pin); + uint8_t get_VHV_repeat_count(uint32_t *p_repeat_count); + uint8_t set_VHV_repeat_count(uint32_t repeat_count); + uint8_t dci_read_data(uint8_t *data, uint32_t index, uint16_t data_size); + uint8_t dci_write_data(uint8_t *data, uint32_t index, uint16_t data_size); + uint8_t dci_replace_data(uint8_t *data, uint32_t index, uint16_t data_size, uint8_t *new_data, uint16_t new_data_size, uint16_t new_data_pos); + uint8_t get_detection_thresholds_enable(uint8_t *p_enabled); + uint8_t set_detection_thresholds_enable(uint8_t enabled); + uint8_t get_detection_thresholds(VL53L8CX_DetectionThresholds *p_thresholds); + uint8_t set_detection_thresholds(VL53L8CX_DetectionThresholds *p_thresholds); + uint8_t get_detection_thresholds_auto_stop(uint8_t *p_auto_stop); + uint8_t set_detection_thresholds_auto_stop(uint8_t auto_stop); + uint8_t motion_indicator_init(VL53L8CX_Motion_Configuration *p_motion_config, uint8_t resolution); + uint8_t motion_indicator_set_distance_motion(VL53L8CX_Motion_Configuration *p_motion_config, uint16_t distance_min_mm, uint16_t distance_max_mm); + uint8_t motion_indicator_set_resolution(VL53L8CX_Motion_Configuration *p_motion_config, uint8_t resolution); + uint8_t calibrate_xtalk(uint16_t reflectance_percent, uint8_t nb_samples, uint16_t distance_mm); + uint8_t get_caldata_xtalk(uint8_t *p_xtalk_data); + uint8_t set_caldata_xtalk(uint8_t *p_xtalk_data); + uint8_t get_xtalk_margin(uint32_t *p_xtalk_margin); + uint8_t set_xtalk_margin(uint32_t xtalk_margin); + + /** + * @brief Utility function to read data. + * @param RegisterAddr: specifies internal address register to be read. + * @param p_values: pointer to data to be read. + * @param size: number of bytes to be read. + * @retval 0 if ok, an error code otherwise. + */ + uint8_t IO_Read(uint16_t RegisterAddress, uint8_t *p_values, uint32_t size) + { + if (dev_i2c) { + int status = 0; + uint8_t buffer[2]; + // Loop until the port is transmitted correctly + do { + dev_i2c->beginTransmission((uint8_t)((_dev.platform.address >> 1) & 0x7F)); + // Target register address for transfer + buffer[0] = (uint8_t)(RegisterAddress >> 8); + buffer[1] = (uint8_t)(RegisterAddress & 0xFF); + dev_i2c->write(buffer, 2); + status = dev_i2c->endTransmission(false); + // Fix for some STM32 boards + // Reinitialize the i2c bus with the default parameters +#ifdef ARDUINO_ARCH_STM32 + if (status) { + dev_i2c->end(); + dev_i2c->begin(); + } +#endif + // End of fix + } while (status != 0); + uint32_t i = 0; + if (size > DEFAULT_I2C_BUFFER_LEN) { + while (i < size) { + // If still more than DEFAULT_I2C_BUFFER_LEN bytes to go, DEFAULT_I2C_BUFFER_LEN, + // else the remaining number of bytes + uint8_t current_read_size = (size - i > DEFAULT_I2C_BUFFER_LEN ? DEFAULT_I2C_BUFFER_LEN : size - i); + dev_i2c->requestFrom(((uint8_t)((_dev.platform.address >> 1) & 0x7F)), current_read_size); + while (dev_i2c->available()) { + p_values[i] = dev_i2c->read(); + i++; + } + } + } else { + dev_i2c->requestFrom(((uint8_t)((_dev.platform.address >> 1) & 0x7F)), size); + while (dev_i2c->available()) { + p_values[i] = dev_i2c->read(); + i++; + } + } + return i != size; + } + if (dev_spi) { + uint8_t status = 0; + uint32_t position = 0; + uint32_t data_size = 0; + uint16_t temp; + uint8_t data_write[VL53L8CX_COMMS_CHUNK_SIZE + 2]; + for (position = 0; position < size; position += VL53L8CX_COMMS_CHUNK_SIZE) { + if (size > VL53L8CX_COMMS_CHUNK_SIZE) { + if ((position + VL53L8CX_COMMS_CHUNK_SIZE) > size) { + data_size = size - position; + } else { + data_size = VL53L8CX_COMMS_CHUNK_SIZE; + } + } else { + data_size = size; + } + temp = RegisterAddress + position; + data_write[0] = SPI_READ_MASK(temp) >> 8; + data_write[1] = SPI_READ_MASK(temp) & 0xFF; + dev_spi->beginTransaction(SPISettings(spi_speed, MSBFIRST, SPI_MODE3)); + digitalWrite(cs_pin, LOW); + dev_spi->transfer(&data_write, 2); + for (uint16_t i = 0; i < data_size; i++) { + *(p_values + i + position) = dev_spi->transfer(0x00); + } + digitalWrite(cs_pin, HIGH); + } + return 0; + } + return 1; + } + + /** + * @brief Utility function to write data. + * @param RegisterAddr: specifies internal address register to be written. + * @param p_values: pointer to data to be written. + * @param size: number of bytes to be written. + * @retval 0 if ok, an error code otherwise. + */ + uint8_t IO_Write(uint16_t RegisterAddress, uint8_t *p_values, uint32_t size) + { + if (dev_i2c) { + uint32_t i = 0; + uint8_t buffer[2]; + while (i < size) { + // If still more than DEFAULT_I2C_BUFFER_LEN bytes to go, DEFAULT_I2C_BUFFER_LEN, + // else the remaining number of bytes + size_t current_write_size = (size - i > DEFAULT_I2C_BUFFER_LEN ? DEFAULT_I2C_BUFFER_LEN : size - i); + dev_i2c->beginTransmission((uint8_t)((_dev.platform.address >> 1) & 0x7F)); + // Target register address for transfer + buffer[0] = (uint8_t)((RegisterAddress + i) >> 8); + buffer[1] = (uint8_t)((RegisterAddress + i) & 0xFF); + dev_i2c->write(buffer, 2); + if (dev_i2c->write(p_values + i, current_write_size) == 0) { + return 1; + } else { + i += current_write_size; + if (size - i) { + // Flush buffer and send stop bit so we have compatibility also with ESP32 platforms + dev_i2c->endTransmission(true); + } + } + } + return dev_i2c->endTransmission(true); + } + + if (dev_spi) { + + uint8_t status = 0; + int32_t i = 0; + uint32_t position = 0; + uint32_t data_size = 0; + uint16_t temp; + uint8_t data_write[VL53L8CX_COMMS_CHUNK_SIZE + 2]; + for (position = 0; position < size; position += VL53L8CX_COMMS_CHUNK_SIZE) { + if (size > VL53L8CX_COMMS_CHUNK_SIZE) { + if ((position + VL53L8CX_COMMS_CHUNK_SIZE) > size) { + data_size = size - position; + } else { + data_size = VL53L8CX_COMMS_CHUNK_SIZE; + } + } else { + data_size = size; + } + temp = RegisterAddress + position; + data_write[0] = SPI_WRITE_MASK(temp) >> 8; + data_write[1] = SPI_WRITE_MASK(temp) & 0xFF; + for (i = 0; i < data_size; i++) { + data_write[i + 2] = p_values[position + i]; + } + data_size += 2; + dev_spi->beginTransaction(SPISettings(spi_speed, MSBFIRST, SPI_MODE3)); + digitalWrite(cs_pin, LOW); + dev_spi->transfer(&data_write, data_size); + digitalWrite(cs_pin, HIGH); + } + return status; + } + return 1; + } + + /** + * @brief Utility function to wait. + * @param ms: milliseconds to wait. + * @retval 0 + */ + uint8_t IO_Wait(uint32_t ms) + { + delay(ms); + return 0; + } + + private: + + /* Helper classes. */ + TwoWire *dev_i2c; + SPIClass *dev_spi; + + /* Configuration */ + int lpn_pin; + int i2c_rst_pin; + int cs_pin; + uint32_t spi_speed; + + VL53L8CX_Configuration _dev; + VL53L8CX_Configuration *p_dev; +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +uint8_t VL53L8CX_io_write(void *handle, uint16_t RegisterAddress, uint8_t *p_values, uint32_t size); +uint8_t VL53L8CX_io_read(void *handle, uint16_t RegisterAddress, uint8_t *p_values, uint32_t size); +uint8_t VL53L8CX_io_wait(void *handle, uint32_t ms); + +#ifdef __cplusplus +} +#endif + +#endif /* __VL53L8CX_H */ diff --git a/src/vl53l8cx_api.cpp b/src/vl53l8cx_api.c similarity index 56% rename from src/vl53l8cx_api.cpp rename to src/vl53l8cx_api.c index 4c4e651..f982114 100644 --- a/src/vl53l8cx_api.cpp +++ b/src/vl53l8cx_api.c @@ -1,52 +1,27 @@ /** - ****************************************************************************** - * @file vl53l8cx_api.cpp - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Implementation of the VL53L8CX APIs. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #include #include -#include "vl53l8cx_class.h" +#include "vl53l8cx_api.h" #include "vl53l8cx_buffers.h" - /** * @brief Inner function, not available outside this file. This function is used * to wait for an answer from VL53L8CX sensor. */ -uint8_t VL53L8CX::_vl53l8cx_poll_for_answer( +static uint8_t _vl53l8cx_poll_for_answer( + VL53L8CX_Configuration *p_dev, uint8_t size, uint8_t pos, uint16_t address, @@ -57,9 +32,9 @@ uint8_t VL53L8CX::_vl53l8cx_poll_for_answer( uint8_t timeout = 0; do { - status |= RdMulti(&(p_dev->platform), address, - p_dev->temp_buffer, size); - status |= WaitMs(&(p_dev->platform), 10); + status |= VL53L8CX_RdMulti(&(p_dev->platform), address, + p_dev->temp_buffer, size); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 10); if (timeout >= (uint8_t)200) { /* 2s timeout */ status |= (uint8_t)VL53L8CX_STATUS_TIMEOUT_ERROR; @@ -80,27 +55,27 @@ uint8_t VL53L8CX::_vl53l8cx_poll_for_answer( * Inner function, not available outside this file. This function is used to * wait for the MCU to boot. */ -uint8_t VL53L8CX::_vl53l8cx_poll_for_mcu_boot() +static uint8_t _vl53l8cx_poll_for_mcu_boot( + VL53L8CX_Configuration *p_dev) { uint8_t go2_status0, go2_status1, status = VL53L8CX_STATUS_OK; uint16_t timeout = 0; do { - status |= RdByte(&(p_dev->platform), 0x06, &go2_status0); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x06, &go2_status0); if ((go2_status0 & (uint8_t)0x80) != (uint8_t)0) { - status |= RdByte(&(p_dev->platform), 0x07, &go2_status1); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x07, &go2_status1); if (go2_status1 & (uint8_t)0x01) { status |= VL53L8CX_STATUS_OK; break; } } - (void)WaitMs(&(p_dev->platform), 1); + (void)VL53L8CX_WaitMs(&(p_dev->platform), 1); timeout++; if ((go2_status0 & (uint8_t)0x1) != (uint8_t)0) { break; } - } while (timeout < (uint16_t)500); return status; @@ -111,7 +86,9 @@ uint8_t VL53L8CX::_vl53l8cx_poll_for_mcu_boot() * to set the offset data gathered from NVM. */ -uint8_t VL53L8CX::_vl53l8cx_send_offset_data(uint8_t resolution) +static uint8_t _vl53l8cx_send_offset_data( + VL53L8CX_Configuration *p_dev, + uint8_t resolution) { uint8_t status = VL53L8CX_STATUS_OK; uint32_t signal_grid[64]; @@ -127,7 +104,7 @@ uint8_t VL53L8CX::_vl53l8cx_send_offset_data(uint8_t resolution) /* Data extrapolation is required for 4X4 offset */ if (resolution == (uint8_t)VL53L8CX_RESOLUTION_4X4) { (void)memcpy(&(p_dev->temp_buffer[0x10]), dss_4x4, sizeof(dss_4x4)); - SwapBuffer(p_dev->temp_buffer, VL53L8CX_OFFSET_BUFFER_SIZE); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, VL53L8CX_OFFSET_BUFFER_SIZE); (void)memcpy(signal_grid, &(p_dev->temp_buffer[0x3C]), sizeof(signal_grid)); (void)memcpy(range_grid, &(p_dev->temp_buffer[0x140]), @@ -155,7 +132,7 @@ uint8_t VL53L8CX::_vl53l8cx_send_offset_data(uint8_t resolution) signal_grid, sizeof(signal_grid)); (void)memcpy(&(p_dev->temp_buffer[0x140]), range_grid, sizeof(range_grid)); - SwapBuffer(p_dev->temp_buffer, VL53L8CX_OFFSET_BUFFER_SIZE); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, VL53L8CX_OFFSET_BUFFER_SIZE); } for (k = 0; k < (VL53L8CX_OFFSET_BUFFER_SIZE - (uint16_t)4); k++) { @@ -163,9 +140,9 @@ uint8_t VL53L8CX::_vl53l8cx_send_offset_data(uint8_t resolution) } (void)memcpy(&(p_dev->temp_buffer[0x1E0]), footer, 8); - status |= WrMulti(&(p_dev->platform), 0x2e18, p_dev->temp_buffer, - VL53L8CX_OFFSET_BUFFER_SIZE); - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2e18, p_dev->temp_buffer, + VL53L8CX_OFFSET_BUFFER_SIZE); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); return status; @@ -176,7 +153,9 @@ uint8_t VL53L8CX::_vl53l8cx_send_offset_data(uint8_t resolution) * to set the Xtalk data from generic configuration, or user's calibration. */ -uint8_t VL53L8CX::_vl53l8cx_send_xtalk_data(uint8_t resolution) +static uint8_t _vl53l8cx_send_xtalk_data( + VL53L8CX_Configuration *p_dev, + uint8_t resolution) { uint8_t status = VL53L8CX_STATUS_OK; uint8_t res4x4[] = {0x0F, 0x04, 0x04, 0x17, 0x08, 0x10, 0x10, 0x07}; @@ -195,7 +174,7 @@ uint8_t VL53L8CX::_vl53l8cx_send_xtalk_data(uint8_t resolution) (void)memcpy(&(p_dev->temp_buffer[0x020]), dss_4x4, sizeof(dss_4x4)); - SwapBuffer(p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); (void)memcpy(signal_grid, &(p_dev->temp_buffer[0x34]), sizeof(signal_grid)); @@ -211,189 +190,203 @@ uint8_t VL53L8CX::_vl53l8cx_send_xtalk_data(uint8_t resolution) (void)memset(&signal_grid[0x10], 0, (uint32_t)192); (void)memcpy(&(p_dev->temp_buffer[0x34]), signal_grid, sizeof(signal_grid)); - SwapBuffer(p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); (void)memcpy(&(p_dev->temp_buffer[0x134]), profile_4x4, sizeof(profile_4x4)); (void)memset(&(p_dev->temp_buffer[0x078]), 0, (uint32_t)4 * sizeof(uint8_t)); } - status |= WrMulti(&(p_dev->platform), 0x2cf8, - p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2cf8, + p_dev->temp_buffer, VL53L8CX_XTALK_BUFFER_SIZE); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); return status; } -uint8_t VL53L8CX::vl53l8cx_is_alive(uint8_t *p_is_alive) +uint8_t vl53l8cx_is_alive( + VL53L8CX_Configuration *p_dev, + uint8_t *p_is_alive) { uint8_t status = VL53L8CX_STATUS_OK; uint8_t device_id, revision_id; - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= RdByte(&(p_dev->platform), 0, &device_id); - status |= RdByte(&(p_dev->platform), 1, &revision_id); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0, &device_id); + status |= VL53L8CX_RdByte(&(p_dev->platform), 1, &revision_id); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); + + if ((device_id == (uint8_t)0xF0) && (revision_id == (uint8_t)0x0C)) { *p_is_alive = 1; } else { *p_is_alive = 0; } + return status; } -uint8_t VL53L8CX::vl53l8cx_init() +uint8_t vl53l8cx_init( + VL53L8CX_Configuration *p_dev) { uint8_t tmp, status = VL53L8CX_STATUS_OK; uint8_t pipe_ctrl[] = {VL53L8CX_NB_TARGET_PER_ZONE, 0x00, 0x01, 0x00}; uint32_t single_range = 0x01; - + uint32_t crc_checksum = 0x00; p_dev->default_xtalk = (uint8_t *)VL53L8CX_DEFAULT_XTALK; p_dev->default_configuration = (uint8_t *)VL53L8CX_DEFAULT_CONFIGURATION; p_dev->is_auto_stop_enabled = (uint8_t)0x0; /* SW reboot sequence */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= WrByte(&(p_dev->platform), 0x0009, 0x04); - status |= WrByte(&(p_dev->platform), 0x000F, 0x40); - status |= WrByte(&(p_dev->platform), 0x000A, 0x03); - status |= RdByte(&(p_dev->platform), 0x7FFF, &tmp); - status |= WrByte(&(p_dev->platform), 0x000C, 0x01); - - status |= WrByte(&(p_dev->platform), 0x0101, 0x00); - status |= WrByte(&(p_dev->platform), 0x0102, 0x00); - status |= WrByte(&(p_dev->platform), 0x010A, 0x01); - status |= WrByte(&(p_dev->platform), 0x4002, 0x01); - status |= WrByte(&(p_dev->platform), 0x4002, 0x00); - status |= WrByte(&(p_dev->platform), 0x010A, 0x03); - status |= WrByte(&(p_dev->platform), 0x0103, 0x01); - status |= WrByte(&(p_dev->platform), 0x000C, 0x00); - status |= WrByte(&(p_dev->platform), 0x000F, 0x43); - status |= WaitMs(&(p_dev->platform), 1); - - status |= WrByte(&(p_dev->platform), 0x000F, 0x40); - status |= WrByte(&(p_dev->platform), 0x000A, 0x01); - status |= WaitMs(&(p_dev->platform), 100); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0009, 0x04); + + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000F, 0x40); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000A, 0x03); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7FFF, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000C, 0x01); + + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0101, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0102, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x010A, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x4002, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x4002, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x010A, 0x03); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0103, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000C, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000F, 0x43); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 1); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000F, 0x40); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000A, 0x01); + + status |= VL53L8CX_WaitMs(&(p_dev->platform), 100); /* Wait for sensor booted (several ms required to get sensor ready ) */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= _vl53l8cx_poll_for_answer(1, 0, 0x06, 0xff, 1); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= _vl53l8cx_poll_for_answer(p_dev, 1, 0, 0x06, 0xff, 1); if (status != (uint8_t)0) { goto exit; } - status |= WrByte(&(p_dev->platform), 0x000E, 0x01); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000E, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); /* Enable FW access */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x01); - status |= WrByte(&(p_dev->platform), 0x06, 0x01); - status |= _vl53l8cx_poll_for_answer(1, 0, 0x21, 0xFF, 0x4); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x06, 0x01); + status |= _vl53l8cx_poll_for_answer(p_dev, 1, 0, 0x21, 0xFF, 0x4); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); /* Enable host access to GO1 */ - status |= RdByte(&(p_dev->platform), 0x7fff, &tmp); - status |= WrByte(&(p_dev->platform), 0x0C, 0x01); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7fff, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0C, 0x01); /* Power ON status */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= WrByte(&(p_dev->platform), 0x101, 0x00); - status |= WrByte(&(p_dev->platform), 0x102, 0x00); - status |= WrByte(&(p_dev->platform), 0x010A, 0x01); - status |= WrByte(&(p_dev->platform), 0x4002, 0x01); - status |= WrByte(&(p_dev->platform), 0x4002, 0x00); - status |= WrByte(&(p_dev->platform), 0x010A, 0x03); - status |= WrByte(&(p_dev->platform), 0x103, 0x01); - status |= WrByte(&(p_dev->platform), 0x400F, 0x00); - status |= WrByte(&(p_dev->platform), 0x21A, 0x43); - status |= WrByte(&(p_dev->platform), 0x21A, 0x03); - status |= WrByte(&(p_dev->platform), 0x21A, 0x01); - status |= WrByte(&(p_dev->platform), 0x21A, 0x00); - status |= WrByte(&(p_dev->platform), 0x219, 0x00); - status |= WrByte(&(p_dev->platform), 0x21B, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x101, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x102, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x010A, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x4002, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x4002, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x010A, 0x03); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x103, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x400F, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x21A, 0x43); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x21A, 0x03); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x21A, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x21A, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x219, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x21B, 0x00); /* Wake up MCU */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= RdByte(&(p_dev->platform), 0x7fff, &tmp); - - status |= WrByte(&(p_dev->platform), 0x7fff, 0x01); - status |= WrByte(&(p_dev->platform), 0x20, 0x07); - status |= WrByte(&(p_dev->platform), 0x20, 0x06); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7fff, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x01); /* Download FW into VL53L8CX */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x09); - status |= WrMulti(&(p_dev->platform), 0, - (uint8_t *)&VL53L8CX_FIRMWARE[0], 0x8000); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x0a); - status |= WrMulti(&(p_dev->platform), 0, - (uint8_t *)&VL53L8CX_FIRMWARE[0x8000], 0x8000); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x0b); - status |= WrMulti(&(p_dev->platform), 0, - (uint8_t *)&VL53L8CX_FIRMWARE[0x10000], 0x5000); - - status |= WrByte(&(p_dev->platform), 0x7fff, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x09); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0, + (uint8_t *)&VL53L8CX_FIRMWARE[0], 0x8000); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x0a); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0, + (uint8_t *)&VL53L8CX_FIRMWARE[0x8000], 0x8000); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x0b); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0, + (uint8_t *)&VL53L8CX_FIRMWARE[0x10000], 0x5000); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x01); /* Check if FW correctly downloaded */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x01); - status |= WrByte(&(p_dev->platform), 0x06, 0x03); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x06, 0x03); - status |= WaitMs(&(p_dev->platform), 5); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= RdByte(&(p_dev->platform), 0x7fff, &tmp); - status |= WrByte(&(p_dev->platform), 0x0C, 0x01); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 5); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7fff, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0C, 0x01); /* Reset MCU and wait boot */ - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x00); - status |= WrByte(&(p_dev->platform), 0x114, 0x00); - status |= WrByte(&(p_dev->platform), 0x115, 0x00); - status |= WrByte(&(p_dev->platform), 0x116, 0x42); - status |= WrByte(&(p_dev->platform), 0x117, 0x00); - status |= WrByte(&(p_dev->platform), 0x0B, 0x00); - status |= RdByte(&(p_dev->platform), 0x7fff, &tmp); - status |= WrByte(&(p_dev->platform), 0x0C, 0x00); - status |= WrByte(&(p_dev->platform), 0x0B, 0x01); - - status |= _vl53l8cx_poll_for_mcu_boot(); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x114, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x115, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x116, 0x42); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x117, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0B, 0x00); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7fff, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0C, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x0B, 0x01); + + status |= _vl53l8cx_poll_for_mcu_boot(p_dev); if (status != (uint8_t)0) { goto exit; } - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); + + /* Firmware checksum */ + status |= VL53L8CX_RdMulti(&(p_dev->platform), (uint16_t)(0x812FFC & 0xFFFF), + p_dev->temp_buffer, 4); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, 4); + memcpy((uint8_t *)&crc_checksum, &(p_dev->temp_buffer[0]), 4); + if (crc_checksum != (uint32_t)0xc0b6c9e) { + status |= VL53L8CX_STATUS_FW_CHECKSUM_FAIL; + goto exit; + } /* Get offset NVM data and store them into the offset buffer */ - status |= WrMulti(&(p_dev->platform), 0x2fd8, - (uint8_t *)VL53L8CX_GET_NVM_CMD, sizeof(VL53L8CX_GET_NVM_CMD)); - status |= _vl53l8cx_poll_for_answer(4, 0, + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2fd8, + (uint8_t *)VL53L8CX_GET_NVM_CMD, sizeof(VL53L8CX_GET_NVM_CMD)); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 0, VL53L8CX_UI_CMD_STATUS, 0xff, 2); - status |= RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, - p_dev->temp_buffer, VL53L8CX_NVM_DATA_SIZE); + status |= VL53L8CX_RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, + p_dev->temp_buffer, VL53L8CX_NVM_DATA_SIZE); (void)memcpy(p_dev->offset_data, p_dev->temp_buffer, VL53L8CX_OFFSET_BUFFER_SIZE); - status |= _vl53l8cx_send_offset_data(VL53L8CX_RESOLUTION_4X4); + status |= _vl53l8cx_send_offset_data(p_dev, VL53L8CX_RESOLUTION_4X4); + /* Set default Xtalk shape. Send Xtalk to sensor */ (void)memcpy(p_dev->xtalk_data, (uint8_t *)VL53L8CX_DEFAULT_XTALK, VL53L8CX_XTALK_BUFFER_SIZE); - - status |= _vl53l8cx_send_xtalk_data(VL53L8CX_RESOLUTION_4X4); + status |= _vl53l8cx_send_xtalk_data(p_dev, VL53L8CX_RESOLUTION_4X4); /* Send default configuration to VL53L8CX firmware */ - status |= WrMulti(&(p_dev->platform), 0x2c34, - p_dev->default_configuration, - sizeof(VL53L8CX_DEFAULT_CONFIGURATION)); - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2c34, + p_dev->default_configuration, + sizeof(VL53L8CX_DEFAULT_CONFIGURATION)); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); - status |= vl53l8cx_dci_write_data((uint8_t *)&pipe_ctrl, - VL53L8CX_DCI_PIPE_CONTROL, (uint16_t)sizeof(pipe_ctrl)); + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *)&pipe_ctrl, + VL53L8CX_DCI_PIPE_CONTROL, (uint16_t)sizeof(pipe_ctrl)); #if VL53L8CX_NB_TARGET_PER_ZONE != 1 tmp = VL53L8CX_NB_TARGET_PER_ZONE; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_FW_NB_TARGET, 16, (uint8_t *)&tmp, 1, 0x0C); #endif - status |= vl53l8cx_dci_write_data((uint8_t *)&single_range, + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *)&single_range, VL53L8CX_DCI_SINGLE_RANGE, (uint16_t)sizeof(single_range)); @@ -401,31 +394,40 @@ uint8_t VL53L8CX::vl53l8cx_init() return status; } -uint8_t VL53L8CX::vl53l8cx_set_i2c_address(uint16_t i2c_address) +uint8_t vl53l8cx_set_i2c_address( + VL53L8CX_Configuration *p_dev, + uint16_t i2c_address) { uint8_t status = VL53L8CX_STATUS_OK; - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= WrByte(&(p_dev->platform), 0x4, (uint8_t)(i2c_address >> 1)); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x4, (uint8_t)(i2c_address >> 1)); p_dev->platform.address = i2c_address; - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); return status; } -uint8_t VL53L8CX::vl53l8cx_get_power_mode(uint8_t *p_power_mode) +uint8_t vl53l8cx_get_power_mode( + VL53L8CX_Configuration *p_dev, + uint8_t *p_power_mode) { uint8_t tmp, status = VL53L8CX_STATUS_OK; - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x00); - status |= RdByte(&(p_dev->platform), 0x009, &tmp); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x00); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x009, &tmp); switch (tmp) { case 0x4: *p_power_mode = VL53L8CX_POWER_MODE_WAKEUP; break; case 0x2: - *p_power_mode = VL53L8CX_POWER_MODE_SLEEP; + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x000F, &tmp); + if (tmp == 0x43) { + *p_power_mode = VL53L8CX_POWER_MODE_DEEP_SLEEP; + } else { + *p_power_mode = VL53L8CX_POWER_MODE_SLEEP; + } break; default: @@ -434,43 +436,61 @@ uint8_t VL53L8CX::vl53l8cx_get_power_mode(uint8_t *p_power_mode) break; } - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x02); return status; } -uint8_t VL53L8CX::vl53l8cx_set_power_mode(uint8_t power_mode) +uint8_t vl53l8cx_set_power_mode( + VL53L8CX_Configuration *p_dev, + uint8_t power_mode) { - uint8_t current_power_mode, status = VL53L8CX_STATUS_OK; + uint8_t current_power_mode, stored_mode, status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_get_power_mode(¤t_power_mode); + status |= vl53l8cx_get_power_mode(p_dev, ¤t_power_mode); if (power_mode != current_power_mode) { switch (power_mode) { case VL53L8CX_POWER_MODE_WAKEUP: - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x00); - status |= WrByte(&(p_dev->platform), 0x09, 0x04); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x09, 0x04); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x000F, &stored_mode); + if (stored_mode == 0x43) { /* Only for deep sleep mode */ + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000F, 0x40); + } status |= _vl53l8cx_poll_for_answer( - 1, 0, 0x06, 0x01, 1); + p_dev, 1, 0, 0x06, 0x01, 1); + if (stored_mode == 0x43) { /* Only for deep sleep mode */ + status |= vl53l8cx_init(p_dev); + } break; case VL53L8CX_POWER_MODE_SLEEP: - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x00); - status |= WrByte(&(p_dev->platform), 0x09, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x09, 0x02); + status |= _vl53l8cx_poll_for_answer( + p_dev, 1, 0, 0x06, 0x01, 0); + break; + + case VL53L8CX_POWER_MODE_DEEP_SLEEP: + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x09, 0x02); status |= _vl53l8cx_poll_for_answer( - 1, 0, 0x06, 0x01, 0); + p_dev, 1, 0, 0x06, 0x01, 0); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x000F, 0x43); break; default: status = VL53L8CX_STATUS_ERROR; break; } - status |= WrByte(&(p_dev->platform), 0x7FFF, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7FFF, 0x02); } return status; } -uint8_t VL53L8CX::vl53l8cx_start_ranging() +uint8_t vl53l8cx_start_ranging( + VL53L8CX_Configuration *p_dev) { uint8_t resolution, status = VL53L8CX_STATUS_OK; uint16_t tmp; @@ -479,8 +499,8 @@ uint8_t VL53L8CX::vl53l8cx_start_ranging() union Block_header *bh_ptr; uint8_t cmd[] = {0x00, 0x03, 0x00, 0x00}; - status |= vl53l8cx_get_resolution(&resolution); + status |= vl53l8cx_get_resolution(p_dev, &resolution); p_dev->data_read_size = 0; p_dev->streamcount = 255; @@ -491,6 +511,7 @@ uint8_t VL53L8CX::vl53l8cx_start_ranging() 0x00000000U, 0xC0000000U }; + /* Send addresses of possible output */ uint32_t output[] = {VL53L8CX_START_BH, VL53L8CX_METADATA_BH, @@ -561,69 +582,71 @@ uint8_t VL53L8CX::vl53l8cx_start_ranging() } p_dev->data_read_size += (uint32_t)24; - status |= vl53l8cx_dci_write_data( - (uint8_t *) & (output), VL53L8CX_DCI_OUTPUT_LIST, - (uint16_t)sizeof(output)); + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *) & (output), VL53L8CX_DCI_OUTPUT_LIST, + (uint16_t)sizeof(output)); header_config[0] = p_dev->data_read_size; header_config[1] = i + (uint32_t)1; - status |= vl53l8cx_dci_write_data( - (uint8_t *) & (header_config), VL53L8CX_DCI_OUTPUT_CONFIG, - (uint16_t)sizeof(header_config)); + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *) & (header_config), VL53L8CX_DCI_OUTPUT_CONFIG, + (uint16_t)sizeof(header_config)); - status |= vl53l8cx_dci_write_data( - (uint8_t *) & (output_bh_enable), VL53L8CX_DCI_OUTPUT_ENABLES, - (uint16_t)sizeof(output_bh_enable)); + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *) & (output_bh_enable), VL53L8CX_DCI_OUTPUT_ENABLES, + (uint16_t)sizeof(output_bh_enable)); /* Start xshut bypass (interrupt mode) */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= WrByte(&(p_dev->platform), 0x09, 0x05); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x09, 0x05); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); /* Start ranging session */ - status |= WrMulti(&(p_dev->platform), VL53L8CX_UI_CMD_END - - (uint16_t)(4 - 1), (uint8_t *)cmd, sizeof(cmd)); - - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), VL53L8CX_UI_CMD_END - + (uint16_t)(4 - 1), (uint8_t *)cmd, sizeof(cmd)); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); /* Read ui range data content and compare if data size is the correct one */ - status |= vl53l8cx_dci_read_data( - (uint8_t *)p_dev->temp_buffer, 0x5440, 12); + status |= vl53l8cx_dci_read_data(p_dev, + (uint8_t *)p_dev->temp_buffer, 0x5440, 12); (void)memcpy(&tmp, &(p_dev->temp_buffer[0x8]), sizeof(tmp)); if (tmp != p_dev->data_read_size) { status |= VL53L8CX_STATUS_ERROR; } /* Ensure that there is no laser safety fault */ - status |= vl53l8cx_dci_read_data( - (uint8_t *)p_dev->temp_buffer, 0xE0C4, 8); + status |= vl53l8cx_dci_read_data(p_dev, + (uint8_t *)p_dev->temp_buffer, 0xE0C4, 8); if ((uint8_t)p_dev->temp_buffer[0x6] != (uint8_t)0) { status |= VL53L8CX_STATUS_LASER_SAFETY; } + return status; } -uint8_t VL53L8CX::vl53l8cx_stop_ranging() +uint8_t vl53l8cx_stop_ranging( + VL53L8CX_Configuration *p_dev) { uint8_t tmp = 0, status = VL53L8CX_STATUS_OK; uint16_t timeout = 0; uint32_t auto_stop_flag = 0; - status |= RdMulti(&(p_dev->platform), - 0x2FFC, (uint8_t *)&auto_stop_flag, 4); - if (auto_stop_flag != (uint32_t)0x4FF) { - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_RdMulti(&(p_dev->platform), + 0x2FFC, (uint8_t *)&auto_stop_flag, 4); + if ((auto_stop_flag != (uint32_t)0x4FF) + && (p_dev->is_auto_stop_enabled == (uint8_t)0)) { + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); /* Provoke MCU stop */ - status |= WrByte(&(p_dev->platform), 0x15, 0x16); - status |= WrByte(&(p_dev->platform), 0x14, 0x01); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x15, 0x16); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x14, 0x01); /* Poll for G02 status 0 MCU stop */ while (((tmp & (uint8_t)0x80) >> 7) == (uint8_t)0x00) { - status |= RdByte(&(p_dev->platform), 0x6, &tmp); - status |= WaitMs(&(p_dev->platform), 10); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x6, &tmp); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 10); timeout++; /* Timeout reached after 5 seconds */ if (timeout > (uint16_t)500) { @@ -634,31 +657,33 @@ uint8_t VL53L8CX::vl53l8cx_stop_ranging() } /* Check GO2 status 1 if status is still OK */ - status |= RdByte(&(p_dev->platform), 0x6, &tmp); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x6, &tmp); if ((tmp & (uint8_t)0x80) != (uint8_t)0) { - status |= RdByte(&(p_dev->platform), 0x7, &tmp); + status |= VL53L8CX_RdByte(&(p_dev->platform), 0x7, &tmp); if ((tmp != (uint8_t)0x84) && (tmp != (uint8_t)0x85)) { status |= tmp; } } /* Undo MCU stop */ - status |= WrByte(&(p_dev->platform), 0x7fff, 0x00); - status |= WrByte(&(p_dev->platform), 0x14, 0x00); - status |= WrByte(&(p_dev->platform), 0x15, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x14, 0x00); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x15, 0x00); /* Stop xshut bypass */ - status |= WrByte(&(p_dev->platform), 0x09, 0x04); - status |= WrByte(&(p_dev->platform), 0x7fff, 0x02); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x09, 0x04); + status |= VL53L8CX_WrByte(&(p_dev->platform), 0x7fff, 0x02); return status; } -uint8_t VL53L8CX::vl53l8cx_check_data_ready(uint8_t *p_isReady) +uint8_t vl53l8cx_check_data_ready( + VL53L8CX_Configuration *p_dev, + uint8_t *p_isReady) { uint8_t status = VL53L8CX_STATUS_OK; - status |= RdMulti(&(p_dev->platform), 0x0, p_dev->temp_buffer, 4); + status |= VL53L8CX_RdMulti(&(p_dev->platform), 0x0, p_dev->temp_buffer, 4); if ((p_dev->temp_buffer[0] != p_dev->streamcount) && (p_dev->temp_buffer[0] != (uint8_t)255) @@ -679,23 +704,25 @@ uint8_t VL53L8CX::vl53l8cx_check_data_ready(uint8_t *p_isReady) return status; } -uint8_t VL53L8CX::vl53l8cx_get_ranging_data(VL53L8CX_ResultsData *p_results) +uint8_t vl53l8cx_get_ranging_data( + VL53L8CX_Configuration *p_dev, + VL53L8CX_ResultsData *p_results) { - uint8_t status = VL53L8CX_STATUS_OK; uint16_t header_id, footer_id; union Block_header *bh_ptr; uint32_t i, j, msize; - status |= RdMulti(&(p_dev->platform), 0x0, - p_dev->temp_buffer, p_dev->data_read_size); + status |= VL53L8CX_RdMulti(&(p_dev->platform), 0x0, + p_dev->temp_buffer, p_dev->data_read_size); p_dev->streamcount = p_dev->temp_buffer[0]; - SwapBuffer(p_dev->temp_buffer, (uint16_t)p_dev->data_read_size); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, (uint16_t)p_dev->data_read_size); /* Start conversion at position 16 to avoid headers */ - for (i = 16U; i < (uint32_t)p_dev->data_read_size; i += 4U) { + for (i = (uint32_t)16; i + < (uint32_t)p_dev->data_read_size; i += (uint32_t)4) { bh_ptr = (union Block_header *) & (p_dev->temp_buffer[i]); - if ((bh_ptr->type > 0x1U) - && (bh_ptr->type < 0xdU)) { + if ((bh_ptr->type > (uint32_t)0x1) + && (bh_ptr->type < (uint32_t)0xd)) { msize = bh_ptr->type * bh_ptr->size; } else { msize = bh_ptr->size; @@ -780,9 +807,6 @@ uint8_t VL53L8CX::vl53l8cx_get_ranging_data(VL53L8CX_ResultsData *p_results) *VL53L8CX_NB_TARGET_PER_ZONE); i++) { #ifndef VL53L8CX_DISABLE_DISTANCE_MM p_results->distance_mm[i] /= 4; - if (p_results->distance_mm[i] < 0) { - p_results->distance_mm[i] = 0; - } #endif #ifndef VL53L8CX_DISABLE_REFLECTANCE_PERCENT p_results->reflectance[i] /= (uint8_t)2; @@ -828,70 +852,80 @@ uint8_t VL53L8CX::vl53l8cx_get_ranging_data(VL53L8CX_ResultsData *p_results) - (uint32_t)4]) << 8) & 0xFF00U; footer_id |= ((uint16_t)(p_dev->temp_buffer[p_dev->data_read_size - (uint32_t)3])) & 0xFFU; + if (header_id != footer_id) { status |= VL53L8CX_STATUS_CORRUPTED_FRAME; } + return status; } -uint8_t VL53L8CX::vl53l8cx_get_resolution(uint8_t *p_resolution) +uint8_t vl53l8cx_get_resolution( + VL53L8CX_Configuration *p_dev, + uint8_t *p_resolution) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_ZONE_CONFIG, 8); *p_resolution = p_dev->temp_buffer[0x00] * p_dev->temp_buffer[0x01]; + return status; } -uint8_t VL53L8CX::vl53l8cx_set_resolution(uint8_t resolution) + + +uint8_t vl53l8cx_set_resolution( + VL53L8CX_Configuration *p_dev, + uint8_t resolution) { uint8_t status = VL53L8CX_STATUS_OK; switch (resolution) { case VL53L8CX_RESOLUTION_4X4: - status |= vl53l8cx_dci_read_data( - p_dev->temp_buffer, - VL53L8CX_DCI_DSS_CONFIG, 16); + status |= vl53l8cx_dci_read_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_DSS_CONFIG, 16); p_dev->temp_buffer[0x04] = 64; p_dev->temp_buffer[0x06] = 64; p_dev->temp_buffer[0x09] = 4; - status |= vl53l8cx_dci_write_data( - p_dev->temp_buffer, - VL53L8CX_DCI_DSS_CONFIG, 16); + status |= vl53l8cx_dci_write_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_DSS_CONFIG, 16); - status |= vl53l8cx_dci_read_data( - p_dev->temp_buffer, - VL53L8CX_DCI_ZONE_CONFIG, 8); + status |= vl53l8cx_dci_read_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_ZONE_CONFIG, 8); p_dev->temp_buffer[0x00] = 4; p_dev->temp_buffer[0x01] = 4; p_dev->temp_buffer[0x04] = 8; p_dev->temp_buffer[0x05] = 8; - status |= vl53l8cx_dci_write_data( - p_dev->temp_buffer, - VL53L8CX_DCI_ZONE_CONFIG, 8); + status |= vl53l8cx_dci_write_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_ZONE_CONFIG, 8); break; case VL53L8CX_RESOLUTION_8X8: - status |= vl53l8cx_dci_read_data( - p_dev->temp_buffer, - VL53L8CX_DCI_DSS_CONFIG, 16); + status |= vl53l8cx_dci_read_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_DSS_CONFIG, 16); p_dev->temp_buffer[0x04] = 16; p_dev->temp_buffer[0x06] = 16; p_dev->temp_buffer[0x09] = 1; - status |= vl53l8cx_dci_write_data( - p_dev->temp_buffer, - VL53L8CX_DCI_DSS_CONFIG, 16); + status |= vl53l8cx_dci_write_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_DSS_CONFIG, 16); - status |= vl53l8cx_dci_read_data( - p_dev->temp_buffer, - VL53L8CX_DCI_ZONE_CONFIG, 8); + status |= vl53l8cx_dci_read_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_ZONE_CONFIG, 8); p_dev->temp_buffer[0x00] = 8; p_dev->temp_buffer[0x01] = 8; p_dev->temp_buffer[0x04] = 4; p_dev->temp_buffer[0x05] = 4; - status |= vl53l8cx_dci_write_data( - p_dev->temp_buffer, - VL53L8CX_DCI_ZONE_CONFIG, 8); + status |= vl53l8cx_dci_write_data(p_dev, + p_dev->temp_buffer, + VL53L8CX_DCI_ZONE_CONFIG, 8); break; @@ -900,39 +934,45 @@ uint8_t VL53L8CX::vl53l8cx_set_resolution(uint8_t resolution) break; } - status |= _vl53l8cx_send_offset_data(resolution); - status |= _vl53l8cx_send_xtalk_data(resolution); + status |= _vl53l8cx_send_offset_data(p_dev, resolution); + status |= _vl53l8cx_send_xtalk_data(p_dev, resolution); return status; } -uint8_t VL53L8CX::vl53l8cx_get_ranging_frequency_hz(uint8_t *p_frequency_hz) +uint8_t vl53l8cx_get_ranging_frequency_hz( + VL53L8CX_Configuration *p_dev, + uint8_t *p_frequency_hz) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_FREQ_HZ, 4); *p_frequency_hz = p_dev->temp_buffer[0x01]; return status; } -uint8_t VL53L8CX::vl53l8cx_set_ranging_frequency_hz(uint8_t frequency_hz) +uint8_t vl53l8cx_set_ranging_frequency_hz( + VL53L8CX_Configuration *p_dev, + uint8_t frequency_hz) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_FREQ_HZ, 4, (uint8_t *)&frequency_hz, 1, 0x01); return status; } -uint8_t VL53L8CX::vl53l8cx_get_integration_time_ms(uint32_t *p_time_ms) +uint8_t vl53l8cx_get_integration_time_ms( + VL53L8CX_Configuration *p_dev, + uint32_t *p_time_ms) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_INT_TIME, 20); (void)memcpy(p_time_ms, &(p_dev->temp_buffer[0x0]), 4); @@ -941,7 +981,9 @@ uint8_t VL53L8CX::vl53l8cx_get_integration_time_ms(uint32_t *p_time_ms) return status; } -uint8_t VL53L8CX::vl53l8cx_set_integration_time_ms(uint32_t integration_time_ms) +uint8_t vl53l8cx_set_integration_time_ms( + VL53L8CX_Configuration *p_dev, + uint32_t integration_time_ms) { uint8_t status = VL53L8CX_STATUS_OK; uint32_t integration = integration_time_ms; @@ -953,7 +995,7 @@ uint8_t VL53L8CX::vl53l8cx_set_integration_time_ms(uint32_t integration_time_ms) } else { integration *= (uint32_t)1000; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_INT_TIME, 20, (uint8_t *)&integration, 4, 0x00); } @@ -961,11 +1003,13 @@ uint8_t VL53L8CX::vl53l8cx_set_integration_time_ms(uint32_t integration_time_ms) return status; } -uint8_t VL53L8CX::vl53l8cx_get_sharpener_percent(uint8_t *p_sharpener_percent) +uint8_t vl53l8cx_get_sharpener_percent( + VL53L8CX_Configuration *p_dev, + uint8_t *p_sharpener_percent) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_SHARPENER, 16); *p_sharpener_percent = (p_dev->temp_buffer[0xD] @@ -974,7 +1018,9 @@ uint8_t VL53L8CX::vl53l8cx_get_sharpener_percent(uint8_t *p_sharpener_percent) return status; } -uint8_t VL53L8CX::vl53l8cx_set_sharpener_percent(uint8_t sharpener_percent) +uint8_t vl53l8cx_set_sharpener_percent( + VL53L8CX_Configuration *p_dev, + uint8_t sharpener_percent) { uint8_t status = VL53L8CX_STATUS_OK; uint8_t sharpener; @@ -983,7 +1029,7 @@ uint8_t VL53L8CX::vl53l8cx_set_sharpener_percent(uint8_t sharpener_percent) status |= VL53L8CX_STATUS_INVALID_PARAM; } else { sharpener = (sharpener_percent * (uint8_t)255) / (uint8_t)100; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_SHARPENER, 16, (uint8_t *)&sharpener, 1, 0xD); } @@ -991,24 +1037,28 @@ uint8_t VL53L8CX::vl53l8cx_set_sharpener_percent(uint8_t sharpener_percent) return status; } -uint8_t VL53L8CX::vl53l8cx_get_target_order(uint8_t *p_target_order) +uint8_t vl53l8cx_get_target_order( + VL53L8CX_Configuration *p_dev, + uint8_t *p_target_order) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_TARGET_ORDER, 4); *p_target_order = (uint8_t)p_dev->temp_buffer[0x0]; return status; } -uint8_t VL53L8CX::vl53l8cx_set_target_order(uint8_t target_order) +uint8_t vl53l8cx_set_target_order( + VL53L8CX_Configuration *p_dev, + uint8_t target_order) { uint8_t status = VL53L8CX_STATUS_OK; if ((target_order == (uint8_t)VL53L8CX_TARGET_ORDER_CLOSEST) || (target_order == (uint8_t)VL53L8CX_TARGET_ORDER_STRONGEST)) { - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_TARGET_ORDER, 4, (uint8_t *)&target_order, 1, 0x0); } else { @@ -1018,11 +1068,13 @@ uint8_t VL53L8CX::vl53l8cx_set_target_order(uint8_t target_order) return status; } -uint8_t VL53L8CX::vl53l8cx_get_ranging_mode(uint8_t *p_ranging_mode) +uint8_t vl53l8cx_get_ranging_mode( + VL53L8CX_Configuration *p_dev, + uint8_t *p_ranging_mode) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_RANGING_MODE, 8); if (p_dev->temp_buffer[0x01] == (uint8_t)0x1) { @@ -1034,12 +1086,14 @@ uint8_t VL53L8CX::vl53l8cx_get_ranging_mode(uint8_t *p_ranging_mode) return status; } -uint8_t VL53L8CX::vl53l8cx_set_ranging_mode(uint8_t ranging_mode) +uint8_t vl53l8cx_set_ranging_mode( + VL53L8CX_Configuration *p_dev, + uint8_t ranging_mode) { uint8_t status = VL53L8CX_STATUS_OK; uint32_t single_range = 0x00; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_RANGING_MODE, 8); switch (ranging_mode) { @@ -1060,22 +1114,23 @@ uint8_t VL53L8CX::vl53l8cx_set_ranging_mode(uint8_t ranging_mode) break; } - status |= vl53l8cx_dci_write_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_write_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_RANGING_MODE, (uint16_t)8); - status |= vl53l8cx_dci_write_data((uint8_t *)&single_range, + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *)&single_range, VL53L8CX_DCI_SINGLE_RANGE, (uint16_t)sizeof(single_range)); return status; } - -uint8_t VL53L8CX::vl53l8cx_get_external_sync_pin_enable(uint8_t *p_is_sync_pin_enabled) +uint8_t vl53l8cx_get_external_sync_pin_enable( + VL53L8CX_Configuration *p_dev, + uint8_t *p_is_sync_pin_enabled) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_SYNC_PIN, 4); /* Check bit 1 value (get sync pause bit) */ @@ -1088,12 +1143,14 @@ uint8_t VL53L8CX::vl53l8cx_get_external_sync_pin_enable(uint8_t *p_is_sync_pin_e return status; } -uint8_t VL53L8CX::vl53l8cx_set_external_sync_pin_enable(uint8_t enable_sync_pin) +uint8_t vl53l8cx_set_external_sync_pin_enable( + VL53L8CX_Configuration *p_dev, + uint8_t enable_sync_pin) { uint8_t status = VL53L8CX_STATUS_OK; uint32_t tmp; - status |= vl53l8cx_dci_read_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_SYNC_PIN, 4); tmp = (uint32_t)p_dev->temp_buffer[3]; @@ -1106,13 +1163,40 @@ uint8_t VL53L8CX::vl53l8cx_set_external_sync_pin_enable(uint8_t enable_sync_pin) } p_dev->temp_buffer[3] = (uint8_t)tmp; - status |= vl53l8cx_dci_write_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_write_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_SYNC_PIN, 4); return status; } -uint8_t VL53L8CX::vl53l8cx_dci_read_data( +uint8_t vl53l8cx_get_VHV_repeat_count( + VL53L8CX_Configuration *p_dev, + uint32_t *p_repeat_count) +{ + uint8_t status = VL53L8CX_STATUS_OK; + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, + VL53L8CX_DCI_VHV_CONFIG, 16); + + *p_repeat_count = ((uint32_t)p_dev->temp_buffer[7] << 24) + | ((uint32_t)p_dev->temp_buffer[6] << 16) + | ((uint32_t)p_dev->temp_buffer[5] << 8) + | (uint32_t)p_dev->temp_buffer[4]; + + return status; +} + +uint8_t vl53l8cx_set_VHV_repeat_count( + VL53L8CX_Configuration *p_dev, + uint32_t repeat_count) +{ + uint8_t status = VL53L8CX_STATUS_OK; + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, + VL53L8CX_DCI_VHV_CONFIG, 16, (uint8_t *)&repeat_count, 4, 0x4); + return status; +} + +uint8_t vl53l8cx_dci_read_data( + VL53L8CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size) @@ -1133,18 +1217,19 @@ uint8_t VL53L8CX::vl53l8cx_dci_read_data( cmd[1] = (uint8_t)(index & (uint32_t)0xff); cmd[2] = (uint8_t)((data_size & (uint16_t)0xff0) >> 4); cmd[3] = (uint8_t)((data_size & (uint16_t)0xf) << 4); + /* Request data reading from FW */ - status |= WrMulti(&(p_dev->platform), (VL53L8CX_UI_CMD_END - (uint16_t)11), cmd, sizeof(cmd)); - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), + (VL53L8CX_UI_CMD_END - (uint16_t)11), cmd, sizeof(cmd)); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); - - /* Read new data sent (4 bytes header + data_size + 8 bytes footer) */ - status |= RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, - p_dev->temp_buffer, rd_size); - SwapBuffer(p_dev->temp_buffer, data_size + (uint16_t)12); + status |= VL53L8CX_RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, + p_dev->temp_buffer, rd_size); + VL53L8CX_SwapBuffer(p_dev->temp_buffer, data_size + (uint16_t)12); + /* Copy data from FW into input structure (-4 bytes to remove header) */ for (i = 0 ; i < (int16_t)data_size; i++) { data[i] = p_dev->temp_buffer[i + 4]; @@ -1154,7 +1239,8 @@ uint8_t VL53L8CX::vl53l8cx_dci_read_data( return status; } -uint8_t VL53L8CX::vl53l8cx_dci_write_data( +uint8_t vl53l8cx_dci_write_data( + VL53L8CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size) @@ -1182,7 +1268,7 @@ uint8_t VL53L8CX::vl53l8cx_dci_write_data( headers[3] = (uint8_t)((data_size & (uint16_t)0xf) << 4); /* Copy data from structure to FW format (+4 bytes to add header) */ - SwapBuffer(data, data_size); + VL53L8CX_SwapBuffer(data, data_size); for (i = (int16_t)data_size - (int16_t)1 ; i >= 0; i--) { p_dev->temp_buffer[i + 4] = data[i]; } @@ -1193,19 +1279,20 @@ uint8_t VL53L8CX::vl53l8cx_dci_write_data( footer, sizeof(footer)); /* Send data to FW */ - status |= WrMulti(&(p_dev->platform), address, - p_dev->temp_buffer, - (uint32_t)((uint32_t)data_size + (uint32_t)12)); - status |= _vl53l8cx_poll_for_answer(4, 1, + status |= VL53L8CX_WrMulti(&(p_dev->platform), address, + p_dev->temp_buffer, + (uint32_t)((uint32_t)data_size + (uint32_t)12)); + status |= _vl53l8cx_poll_for_answer(p_dev, 4, 1, VL53L8CX_UI_CMD_STATUS, 0xff, 0x03); - SwapBuffer(data, data_size); + VL53L8CX_SwapBuffer(data, data_size); } return status; } -uint8_t VL53L8CX::vl53l8cx_dci_replace_data( +uint8_t vl53l8cx_dci_replace_data( + VL53L8CX_Configuration *p_dev, uint8_t *data, uint32_t index, uint16_t data_size, @@ -1215,9 +1302,9 @@ uint8_t VL53L8CX::vl53l8cx_dci_replace_data( { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data(data, index, data_size); + status |= vl53l8cx_dci_read_data(p_dev, data, index, data_size); (void)memcpy(&(data[new_data_pos]), new_data, new_data_size); - status |= vl53l8cx_dci_write_data(data, index, data_size); + status |= vl53l8cx_dci_write_data(p_dev, data, index, data_size); return status; } diff --git a/src/vl53l8cx_api.h b/src/vl53l8cx_api.h index b2b21ee..db173c3 100644 --- a/src/vl53l8cx_api.h +++ b/src/vl53l8cx_api.h @@ -1,45 +1,24 @@ /** - ****************************************************************************** - * @file vl53l7cx_api.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Header file for the VL53L7CX main structures. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #ifndef VL53L8CX_API_H_ #define VL53L8CX_API_H_ +#ifdef __cplusplus +extern "C" { +#endif + #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION < 6010050) - #pragma anon_unions +#pragma anon_unions #endif @@ -50,7 +29,7 @@ * @brief Current driver version. */ -#define VL53L8CX_API_REVISION "VL53L8CX_1.0.4" +#define VL53L8CX_API_REVISION "VL53L8CX_1.3.0" /** * @brief Default I2C address of VL53L8CX sensor. Can be changed using function @@ -88,14 +67,20 @@ #define VL53L8CX_RANGING_MODE_AUTONOMOUS ((uint8_t) 3U) /** - * @brief The default power mode is VL53L8CX_POWER_MODE_WAKEUP. User can choose - * the mode VL53L8CX_POWER_MODE_SLEEP to save power consumption is the device - * is not used. The low power mode retains the firmware and the configuration. + * @brief The default power mode is VL53L8CX_POWER_MODE_WAKEUP. User can choose two + * different modes to save power consumption when is the device + * is not used: + * - VL53L8CX_POWER_MODE_SLEEP: This mode retains the firmware and the configuration. It + * is recommended when the device needs to quickly wake-up. + * - VL53L8CX_POWER_MODE_DEEP_SLEEP: This mode clears all memory, by consequence the firmware, + * the configuration and the calibration are lost. It is recommended when the device sleeps during + * a long time as it consumes a very low current consumption. * Both modes can be changed using function vl53l8cx_set_power_mode(). */ #define VL53L8CX_POWER_MODE_SLEEP ((uint8_t) 0U) #define VL53L8CX_POWER_MODE_WAKEUP ((uint8_t) 1U) +#define VL53L8CX_POWER_MODE_DEEP_SLEEP ((uint8_t) 2U) /** * @brief Macro VL53L8CX_STATUS_OK indicates that VL53L5 sensor has no error. @@ -107,6 +92,8 @@ #define VL53L8CX_STATUS_TIMEOUT_ERROR ((uint8_t) 1U) #define VL53L8CX_STATUS_CORRUPTED_FRAME ((uint8_t) 2U) #define VL53L8CX_STATUS_LASER_SAFETY ((uint8_t) 3U) +#define VL53L8CX_STATUS_XTALK_FAILED ((uint8_t) 4U) +#define VL53L8CX_STATUS_FW_CHECKSUM_FAIL ((uint8_t) 5U) #define VL53L8CX_MCU_ERROR ((uint8_t) 66U) #define VL53L8CX_STATUS_INVALID_PARAM ((uint8_t) 127U) #define VL53L8CX_STATUS_ERROR ((uint8_t) 255U) @@ -117,54 +104,54 @@ #if VL53L8CX_NB_TARGET_PER_ZONE == 1 - #define VL53L8CX_START_BH ((uint32_t)0x0000000DU) - #define VL53L8CX_METADATA_BH ((uint32_t)0x54B400C0U) - #define VL53L8CX_COMMONDATA_BH ((uint32_t)0x54C00040U) - #define VL53L8CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U) - #define VL53L8CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U) - #define VL53L8CX_NB_TARGET_DETECTED_BH ((uint32_t)0xDB840401U) - #define VL53L8CX_SIGNAL_RATE_BH ((uint32_t)0xDBC40404U) - #define VL53L8CX_RANGE_SIGMA_MM_BH ((uint32_t)0xDEC40402U) - #define VL53L8CX_DISTANCE_BH ((uint32_t)0xDF440402U) - #define VL53L8CX_REFLECTANCE_BH ((uint32_t)0xE0440401U) - #define VL53L8CX_TARGET_STATUS_BH ((uint32_t)0xE0840401U) - #define VL53L8CX_MOTION_DETECT_BH ((uint32_t)0xD85808C0U) - - #define VL53L8CX_METADATA_IDX ((uint16_t)0x54B4U) - #define VL53L8CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U) - #define VL53L8CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U) - #define VL53L8CX_NB_TARGET_DETECTED_IDX ((uint16_t)0xDB84U) - #define VL53L8CX_SIGNAL_RATE_IDX ((uint16_t)0xDBC4U) - #define VL53L8CX_RANGE_SIGMA_MM_IDX ((uint16_t)0xDEC4U) - #define VL53L8CX_DISTANCE_IDX ((uint16_t)0xDF44U) - #define VL53L8CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0xE044U) - #define VL53L8CX_TARGET_STATUS_IDX ((uint16_t)0xE084U) - #define VL53L8CX_MOTION_DETEC_IDX ((uint16_t)0xD858U) +#define VL53L8CX_START_BH ((uint32_t)0x0000000DU) +#define VL53L8CX_METADATA_BH ((uint32_t)0x54B400C0U) +#define VL53L8CX_COMMONDATA_BH ((uint32_t)0x54C00040U) +#define VL53L8CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U) +#define VL53L8CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U) +#define VL53L8CX_NB_TARGET_DETECTED_BH ((uint32_t)0xDB840401U) +#define VL53L8CX_SIGNAL_RATE_BH ((uint32_t)0xDBC40404U) +#define VL53L8CX_RANGE_SIGMA_MM_BH ((uint32_t)0xDEC40402U) +#define VL53L8CX_DISTANCE_BH ((uint32_t)0xDF440402U) +#define VL53L8CX_REFLECTANCE_BH ((uint32_t)0xE0440401U) +#define VL53L8CX_TARGET_STATUS_BH ((uint32_t)0xE0840401U) +#define VL53L8CX_MOTION_DETECT_BH ((uint32_t)0xD85808C0U) + +#define VL53L8CX_METADATA_IDX ((uint16_t)0x54B4U) +#define VL53L8CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U) +#define VL53L8CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U) +#define VL53L8CX_NB_TARGET_DETECTED_IDX ((uint16_t)0xDB84U) +#define VL53L8CX_SIGNAL_RATE_IDX ((uint16_t)0xDBC4U) +#define VL53L8CX_RANGE_SIGMA_MM_IDX ((uint16_t)0xDEC4U) +#define VL53L8CX_DISTANCE_IDX ((uint16_t)0xDF44U) +#define VL53L8CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0xE044U) +#define VL53L8CX_TARGET_STATUS_IDX ((uint16_t)0xE084U) +#define VL53L8CX_MOTION_DETEC_IDX ((uint16_t)0xD858U) #else - #define VL53L8CX_START_BH ((uint32_t)0x0000000DU) - #define VL53L8CX_METADATA_BH ((uint32_t)0x54B400C0U) - #define VL53L8CX_COMMONDATA_BH ((uint32_t)0x54C00040U) - #define VL53L8CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U) - #define VL53L8CX_NB_TARGET_DETECTED_BH ((uint32_t)0x57D00401U) - #define VL53L8CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U) - #define VL53L8CX_SIGNAL_RATE_BH ((uint32_t)0x58900404U) - #define VL53L8CX_RANGE_SIGMA_MM_BH ((uint32_t)0x64900402U) - #define VL53L8CX_DISTANCE_BH ((uint32_t)0x66900402U) - #define VL53L8CX_REFLECTANCE_BH ((uint32_t)0x6A900401U) - #define VL53L8CX_TARGET_STATUS_BH ((uint32_t)0x6B900401U) - #define VL53L8CX_MOTION_DETECT_BH ((uint32_t)0xCC5008C0U) - - #define VL53L8CX_METADATA_IDX ((uint16_t)0x54B4U) - #define VL53L8CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U) - #define VL53L8CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U) - #define VL53L8CX_NB_TARGET_DETECTED_IDX ((uint16_t)0x57D0U) - #define VL53L8CX_SIGNAL_RATE_IDX ((uint16_t)0x5890U) - #define VL53L8CX_RANGE_SIGMA_MM_IDX ((uint16_t)0x6490U) - #define VL53L8CX_DISTANCE_IDX ((uint16_t)0x6690U) - #define VL53L8CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0x6A90U) - #define VL53L8CX_TARGET_STATUS_IDX ((uint16_t)0x6B90U) - #define VL53L8CX_MOTION_DETEC_IDX ((uint16_t)0xCC50U) +#define VL53L8CX_START_BH ((uint32_t)0x0000000DU) +#define VL53L8CX_METADATA_BH ((uint32_t)0x54B400C0U) +#define VL53L8CX_COMMONDATA_BH ((uint32_t)0x54C00040U) +#define VL53L8CX_AMBIENT_RATE_BH ((uint32_t)0x54D00104U) +#define VL53L8CX_NB_TARGET_DETECTED_BH ((uint32_t)0x57D00401U) +#define VL53L8CX_SPAD_COUNT_BH ((uint32_t)0x55D00404U) +#define VL53L8CX_SIGNAL_RATE_BH ((uint32_t)0x58900404U) +#define VL53L8CX_RANGE_SIGMA_MM_BH ((uint32_t)0x64900402U) +#define VL53L8CX_DISTANCE_BH ((uint32_t)0x66900402U) +#define VL53L8CX_REFLECTANCE_BH ((uint32_t)0x6A900401U) +#define VL53L8CX_TARGET_STATUS_BH ((uint32_t)0x6B900401U) +#define VL53L8CX_MOTION_DETECT_BH ((uint32_t)0xCC5008C0U) + +#define VL53L8CX_METADATA_IDX ((uint16_t)0x54B4U) +#define VL53L8CX_SPAD_COUNT_IDX ((uint16_t)0x55D0U) +#define VL53L8CX_AMBIENT_RATE_IDX ((uint16_t)0x54D0U) +#define VL53L8CX_NB_TARGET_DETECTED_IDX ((uint16_t)0x57D0U) +#define VL53L8CX_SIGNAL_RATE_IDX ((uint16_t)0x5890U) +#define VL53L8CX_RANGE_SIGMA_MM_IDX ((uint16_t)0x6490U) +#define VL53L8CX_DISTANCE_IDX ((uint16_t)0x6690U) +#define VL53L8CX_REFLECTANCE_EST_PC_IDX ((uint16_t)0x6A90U) +#define VL53L8CX_TARGET_STATUS_IDX ((uint16_t)0x6B90U) +#define VL53L8CX_MOTION_DETEC_IDX ((uint16_t)0xCC50U) #endif @@ -183,6 +170,7 @@ #define VL53L8CX_DCI_FW_NB_TARGET ((uint16_t)0x5478) #define VL53L8CX_DCI_RANGING_MODE ((uint16_t)0xAD30U) #define VL53L8CX_DCI_DSS_CONFIG ((uint16_t)0xAD38U) +#define VL53L8CX_DCI_VHV_CONFIG ((uint16_t)0xAD60U) #define VL53L8CX_DCI_TARGET_ORDER ((uint16_t)0xAE64U) #define VL53L8CX_DCI_SHARPENER ((uint16_t)0xAED8U) #define VL53L8CX_DCI_INTERNAL_CP ((uint16_t)0xB39CU) @@ -203,57 +191,57 @@ */ #ifndef VL53L8CX_DISABLE_AMBIENT_PER_SPAD - #define L5CX_AMB_SIZE 260U +#define L5CX_AMB_SIZE 260U #else - #define L5CX_AMB_SIZE 0U +#define L5CX_AMB_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_NB_SPADS_ENABLED - #define L5CX_SPAD_SIZE 260U +#define L5CX_SPAD_SIZE 260U #else - #define L5CX_SPAD_SIZE 0U +#define L5CX_SPAD_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_NB_TARGET_DETECTED - #define L5CX_NTAR_SIZE 68U +#define L5CX_NTAR_SIZE 68U #else - #define L5CX_NTAR_SIZE 0U +#define L5CX_NTAR_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_SIGNAL_PER_SPAD - #define L5CX_SPS_SIZE ((256U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) +#define L5CX_SPS_SIZE ((256U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) #else - #define L5CX_SPS_SIZE 0U +#define L5CX_SPS_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_RANGE_SIGMA_MM - #define L5CX_SIGR_SIZE ((128U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) +#define L5CX_SIGR_SIZE ((128U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) #else - #define L5CX_SIGR_SIZE 0U +#define L5CX_SIGR_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_DISTANCE_MM - #define L5CX_DIST_SIZE ((128U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) +#define L5CX_DIST_SIZE ((128U * VL53L8CX_NB_TARGET_PER_ZONE) + 4U) #else - #define L5CX_DIST_SIZE 0U +#define L5CX_DIST_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_REFLECTANCE_PERCENT - #define L5CX_RFLEST_SIZE ((64U *VL53L8CX_NB_TARGET_PER_ZONE) + 4U) +#define L5CX_RFLEST_SIZE ((64U *VL53L8CX_NB_TARGET_PER_ZONE) + 4U) #else - #define L5CX_RFLEST_SIZE 0U +#define L5CX_RFLEST_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_TARGET_STATUS - #define L5CX_STA_SIZE ((64U *VL53L8CX_NB_TARGET_PER_ZONE) + 4U) +#define L5CX_STA_SIZE ((64U *VL53L8CX_NB_TARGET_PER_ZONE) + 4U) #else - #define L5CX_STA_SIZE 0U +#define L5CX_STA_SIZE 0U #endif #ifndef VL53L8CX_DISABLE_MOTION_INDICATOR - #define L5CX_MOT_SIZE 144U +#define L5CX_MOT_SIZE 144U #else - #define L5CX_MOT_SIZE 0U +#define L5CX_MOT_SIZE 0U #endif /** @@ -274,9 +262,9 @@ */ #if VL53L8CX_MAX_RESULTS_SIZE < 1024U - #define VL53L8CX_TEMPORARY_BUFFER_SIZE ((uint32_t) 1024U) +#define VL53L8CX_TEMPORARY_BUFFER_SIZE ((uint32_t) 1024U) #else - #define VL53L8CX_TEMPORARY_BUFFER_SIZE ((uint32_t) VL53L8CX_MAX_RESULTS_SIZE) +#define VL53L8CX_TEMPORARY_BUFFER_SIZE ((uint32_t) VL53L8CX_MAX_RESULTS_SIZE) #endif @@ -301,7 +289,7 @@ typedef struct { /* Xtalk buffer */ uint8_t xtalk_data[VL53L8CX_XTALK_BUFFER_SIZE]; /* Temporary buffer used for internal driver processing */ - uint8_t temp_buffer[VL53L8CX_TEMPORARY_BUFFER_SIZE]; + uint8_t temp_buffer[VL53L8CX_TEMPORARY_BUFFER_SIZE]; /* Auto-stop flag for stopping the sensor */ uint8_t is_auto_stop_enabled; } VL53L8CX_Configuration; @@ -392,4 +380,384 @@ union Block_header { }; }; +uint8_t vl53l8cx_is_alive( + VL53L8CX_Configuration *p_dev, + uint8_t *p_is_alive); + +/** + * @brief Mandatory function used to initialize the sensor. This function must + * be called after a power on, to load the firmware into the VL53L8CX. It takes + * a few hundred milliseconds. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @return (uint8_t) status : 0 if initialization is OK. + */ + +uint8_t vl53l8cx_init( + VL53L8CX_Configuration *p_dev); + +/** + * @brief This function is used to change the I2C address of the sensor. If + * multiple VL53L5 sensors are connected to the same I2C line, all other LPn + * pins needs to be set to Low. The default sensor address is 0x52. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint16_t) i2c_address : New I2C address. + * @return (uint8_t) status : 0 if new address is OK + */ + +uint8_t vl53l8cx_set_i2c_address( + VL53L8CX_Configuration *p_dev, + uint16_t i2c_address); + +/** + * @brief This function is used to get the current sensor power mode. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_power_mode : Current power mode. The value of this + * pointer is equal to 0 if the sensor is in low power, + * (VL53L8CX_POWER_MODE_SLEEP), or 1 if sensor is in standard mode + * (VL53L8CX_POWER_MODE_WAKEUP). + * @return (uint8_t) status : 0 if power mode is OK + */ + +uint8_t vl53l8cx_get_power_mode( + VL53L8CX_Configuration *p_dev, + uint8_t *p_power_mode); + +/** + * @brief This function is used to set the sensor in Low Power mode, for + * example if the sensor is not used during a long time. The macro + * VL53L8CX_POWER_MODE_SLEEP can be used to enable the low power mode. When user + * want to restart the sensor, he can use macro VL53L8CX_POWER_MODE_WAKEUP. + * Please ensure that the device is not streaming before calling the function. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) power_mode : Selected power mode (VL53L8CX_POWER_MODE_SLEEP + * or VL53L8CX_POWER_MODE_WAKEUP) + * @return (uint8_t) status : 0 if power mode is OK, or 127 if power mode + * requested by user is not valid. + */ + +uint8_t vl53l8cx_set_power_mode( + VL53L8CX_Configuration *p_dev, + uint8_t power_mode); + +/** + * @brief This function starts a ranging session. When the sensor streams, host + * cannot change settings 'on-the-fly'. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @return (uint8_t) status : 0 if start is OK. + */ + +uint8_t vl53l8cx_start_ranging( + VL53L8CX_Configuration *p_dev); + +/** + * @brief This function stops the ranging session. It must be used when the + * sensor streams, after calling vl53l8cx_start_ranging(). + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @return (uint8_t) status : 0 if stop is OK + */ + +uint8_t vl53l8cx_stop_ranging( + VL53L8CX_Configuration *p_dev); + +/** + * @brief This function checks if a new data is ready by polling I2C. If a new + * data is ready, a flag will be raised. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_isReady : Value of this pointer be updated to 0 if data + * is not ready, or 1 if a new data is ready. + * @return (uint8_t) status : 0 if I2C reading is OK + */ + +uint8_t vl53l8cx_check_data_ready( + VL53L8CX_Configuration *p_dev, + uint8_t *p_isReady); + +/** + * @brief This function gets the ranging data, using the selected output and the + * resolution. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_ResultsData) *p_results : VL53L5 results structure. + * @return (uint8_t) status : 0 data are successfully get. + */ + +uint8_t vl53l8cx_get_ranging_data( + VL53L8CX_Configuration *p_dev, + VL53L8CX_ResultsData *p_results); + +/** + * @brief This function gets the current resolution (4x4 or 8x8). + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_resolution : Value of this pointer will be equal to 16 + * for 4x4 mode, and 64 for 8x8 mode. + * @return (uint8_t) status : 0 if resolution is OK. + */ + +uint8_t vl53l8cx_get_resolution( + VL53L8CX_Configuration *p_dev, + uint8_t *p_resolution); + +/** + * @brief This function sets a new resolution (4x4 or 8x8). + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) resolution : Use macro VL53L8CX_RESOLUTION_4X4 or + * VL53L8CX_RESOLUTION_8X8 to set the resolution. + * @return (uint8_t) status : 0 if set resolution is OK. + */ + +uint8_t vl53l8cx_set_resolution( + VL53L8CX_Configuration *p_dev, + uint8_t resolution); + +/** + * @brief This function gets the current ranging frequency in Hz. Ranging + * frequency corresponds to the time between each measurement. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_frequency_hz: Contains the ranging frequency in Hz. + * @return (uint8_t) status : 0 if ranging frequency is OK. + */ + +uint8_t vl53l8cx_get_ranging_frequency_hz( + VL53L8CX_Configuration *p_dev, + uint8_t *p_frequency_hz); + +/** + * @brief This function sets a new ranging frequency in Hz. Ranging frequency + * corresponds to the measurements frequency. This setting depends of + * the resolution, so please select your resolution before using this function. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) frequency_hz : Contains the ranging frequency in Hz. + * - For 4x4, min and max allowed values are : [1;60] + * - For 8x8, min and max allowed values are : [1;15] + * @return (uint8_t) status : 0 if ranging frequency is OK, or 127 if the value + * is not correct. + */ + +uint8_t vl53l8cx_set_ranging_frequency_hz( + VL53L8CX_Configuration *p_dev, + uint8_t frequency_hz); + +/** + * @brief This function gets the current integration time in ms. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) *p_time_ms: Contains integration time in ms. + * @return (uint8_t) status : 0 if integration time is OK. + */ + +uint8_t vl53l8cx_get_integration_time_ms( + VL53L8CX_Configuration *p_dev, + uint32_t *p_time_ms); + +/** + * @brief This function sets a new integration time in ms. Integration time must + * be computed to be lower than the ranging period, for a selected resolution. + * Please note that this function has no impact on ranging mode continuous. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) time_ms : Contains the integration time in ms. For all + * resolutions and frequency, the minimum value is 2ms, and the maximum is + * 1000ms. + * @return (uint8_t) status : 0 if set integration time is OK. + */ + +uint8_t vl53l8cx_set_integration_time_ms( + VL53L8CX_Configuration *p_dev, + uint32_t integration_time_ms); + +/** + * @brief This function gets the current sharpener in percent. Sharpener can be + * changed to blur more or less zones depending of the application. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) *p_sharpener_percent: Contains the sharpener in percent. + * @return (uint8_t) status : 0 if get sharpener is OK. + */ + +uint8_t vl53l8cx_get_sharpener_percent( + VL53L8CX_Configuration *p_dev, + uint8_t *p_sharpener_percent); + +/** + * @brief This function sets a new sharpener value in percent. Sharpener can be + * changed to blur more or less zones depending of the application. Min value is + * 0 (disabled), and max is 99. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) sharpener_percent : Value between 0 (disabled) and 99%. + * @return (uint8_t) status : 0 if set sharpener is OK. + */ + +uint8_t vl53l8cx_set_sharpener_percent( + VL53L8CX_Configuration *p_dev, + uint8_t sharpener_percent); + +/** + * @brief This function gets the current target order (closest or strongest). + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_target_order: Contains the target order. + * @return (uint8_t) status : 0 if get target order is OK. + */ + +uint8_t vl53l8cx_get_target_order( + VL53L8CX_Configuration *p_dev, + uint8_t *p_target_order); + +/** + * @brief This function sets a new target order. Please use macros + * VL53L8CX_TARGET_ORDER_STRONGEST and VL53L8CX_TARGET_ORDER_CLOSEST to define + * the new output order. By default, the sensor is configured with the strongest + * output. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) target_order : Required target order. + * @return (uint8_t) status : 0 if set target order is OK, or 127 if target + * order is unknown. + */ + +uint8_t vl53l8cx_set_target_order( + VL53L8CX_Configuration *p_dev, + uint8_t target_order); + +/** + * @brief This function is used to get the ranging mode. Two modes are + * available using ULD : Continuous and autonomous. The default + * mode is Autonomous. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_ranging_mode : current ranging mode + * @return (uint8_t) status : 0 if get ranging mode is OK. + */ + +uint8_t vl53l8cx_get_ranging_mode( + VL53L8CX_Configuration *p_dev, + uint8_t *p_ranging_mode); + +/** + * @brief This function is used to set the ranging mode. Two modes are + * available using ULD : Continuous and autonomous. The default + * mode is Autonomous. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) ranging_mode : Use macros VL53L8CX_RANGING_MODE_CONTINUOUS, + * VL53L8CX_RANGING_MODE_CONTINUOUS. + * @return (uint8_t) status : 0 if set ranging mode is OK. + */ + +uint8_t vl53l8cx_set_ranging_mode( + VL53L8CX_Configuration *p_dev, + uint8_t ranging_mode); + +/** + * @brief This function is used to check if the synchronization pin is enabled + * or disabled. When it is enabled, the sensor waits an interrupt on B1 pin + * to start the next measurement. It is useful for multi-devices + * synchronization. By default the sync pin is disabled. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t*) p_is_sync_pin_enabled : Pointer of sync pin status. Value + * overridden to 0 if the pin is disabled, or 1 if the pin is enabled. + * @return (uint8_t) status : 0 if get sync pin OK. + */ +uint8_t vl53l8cx_get_external_sync_pin_enable( + VL53L8CX_Configuration *p_dev, + uint8_t *p_is_sync_pin_enabled); + + +/** + * @brief This function is used to enable or disable the synchronization pin. When + * it is enabled, the sensor waits an interrupt on B1 pin to start the next + * measurement. It is useful for multi-devices synchronization. By default the sync + * pin is disabled. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) enable_sync_pin : Ste the value to 1 to enable the sync + * pin, or 0 to disable it. + * @return (uint8_t) status : 0 if set sync pin OK. + */ +uint8_t vl53l8cx_set_external_sync_pin_enable( + VL53L8CX_Configuration *p_dev, + uint8_t enable_sync_pin); + +/** + * @brief This function is used to get the number of frames between 2 temperature + * compensation. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) *p_repeat_count : Number of frames before next temperature + * compensation. Set to 0 to disable the feature (default configuration). + */ +uint8_t vl53l8cx_get_VHV_repeat_count( + VL53L8CX_Configuration *p_dev, + uint32_t *p_repeat_count); + +/** + * @brief This function is used to set a periodic temperature compensation. By + * setting a repeat count different to 0 the firmware automatically runs a + * temperature calibration every N frames. + * default the repeat count is set to 0 + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) repeat_count : Number of frames between temperature + * compensation. Set to 0 to disable the feature (default configuration). + */ +uint8_t vl53l8cx_set_VHV_repeat_count( + VL53L8CX_Configuration *p_dev, + uint32_t repeat_count); + +/** + * @brief This function can be used to read 'extra data' from DCI. Using a known + * index, the function fills the casted structure passed in argument. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *data : This field can be a casted structure, or a simple + * array. Please note that the FW only accept data of 32 bits. So field data can + * only have a size of 32, 64, 96, 128, bits .... + * @param (uint32_t) index : Index of required value. + * @param (uint16_t)*data_size : This field must be the structure or array size + * (using sizeof() function). + * @return (uint8_t) status : 0 if OK + */ + +uint8_t vl53l8cx_dci_read_data( + VL53L8CX_Configuration *p_dev, + uint8_t *data, + uint32_t index, + uint16_t data_size); + +/** + * @brief This function can be used to write 'extra data' to DCI. The data can + * be simple data, or casted structure. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *data : This field can be a casted structure, or a simple + * array. Please note that the FW only accept data of 32 bits. So field data can + * only have a size of 32, 64, 96, 128, bits .. + * @param (uint32_t) index : Index of required value. + * @param (uint16_t)*data_size : This field must be the structure or array size + * (using sizeof() function). + * @return (uint8_t) status : 0 if OK + */ + +uint8_t vl53l8cx_dci_write_data( + VL53L8CX_Configuration *p_dev, + uint8_t *data, + uint32_t index, + uint16_t data_size); + +/** + * @brief This function can be used to replace 'extra data' in DCI. The data can + * be simple data, or casted structure. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *data : This field can be a casted structure, or a simple + * array. Please note that the FW only accept data of 32 bits. So field data can + * only have a size of 32, 64, 96, 128, bits .. + * @param (uint32_t) index : Index of required value. + * @param (uint16_t)*data_size : This field must be the structure or array size + * (using sizeof() function). + * @param (uint8_t) *new_data : Contains the new fields. + * @param (uint16_t) new_data_size : New data size. + * @param (uint16_t) new_data_pos : New data position into the buffer. + * @return (uint8_t) status : 0 if OK + */ + +uint8_t vl53l8cx_dci_replace_data( + VL53L8CX_Configuration *p_dev, + uint8_t *data, + uint32_t index, + uint16_t data_size, + uint8_t *new_data, + uint16_t new_data_size, + uint16_t new_data_pos); + +#ifdef __cplusplus +} +#endif + #endif //VL53L8CX_API_H_ diff --git a/src/vl53l8cx_buffers.h b/src/vl53l8cx_buffers.h index b9180bc..256233f 100644 --- a/src/vl53l8cx_buffers.h +++ b/src/vl53l8cx_buffers.h @@ -1,44 +1,24 @@ + /** - ****************************************************************************** - * @file vl53l7cx_buffer.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Header file for the VL53L7CX firmware. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #ifndef VL53L8CX_BUFFERS_H_ #define VL53L8CX_BUFFERS_H_ +#ifdef __cplusplus +extern "C" { +#endif + #include "platform.h" /** @@ -46,35 +26,34 @@ */ #if VL53L8CX_NB_TARGET_PER_ZONE == 1 - #define VL53L8CX_FW_NBTAR_RANGING 2 +#define VL53L8CX_FW_NBTAR_RANGING 2 #else - #define VL53L8CX_FW_NBTAR_RANGING VL53L8CX_NB_TARGET_PER_ZONE +#define VL53L8CX_FW_NBTAR_RANGING VL53L8CX_NB_TARGET_PER_ZONE #endif /** - * @brief This buffer contains the VL53L8CX firmware (MM1.6) + * @brief This buffer contains the VL53L8CX firmware (MM1.8) */ const uint8_t VL53L8CX_FIRMWARE[] = { - 0xe0, 0x00, 0x03, 0x08, 0xe0, 0x00, 0x0a, 0xc8, 0xe0, 0x00, 0x05, 0x08, - 0xe0, 0x60, 0x37, 0xc8, + 0xe0, 0x64, 0x08, 0x48, 0xe0, 0x00, 0x0a, 0x88, 0xe0, 0x00, 0x0a, 0x88, 0xe0, 0x00, 0x0a, 0x88, 0xe0, 0x00, 0x0a, 0x88, - 0xe0, 0x64, 0x1c, 0x28, - 0xe0, 0x64, 0x1f, 0xe8, - 0xe0, 0x64, 0x23, 0x48, - 0xe0, 0x64, 0x29, 0x88, - 0xe0, 0x64, 0x32, 0x68, - 0xe0, 0x68, 0x05, 0x68, - 0xe0, 0x68, 0x09, 0x48, - 0xe0, 0x68, 0x0c, 0xc8, - 0xe0, 0x68, 0x13, 0x28, - 0xe0, 0x68, 0x16, 0x48, + 0xe0, 0x64, 0x2e, 0x28, + 0xe0, 0x64, 0x31, 0xe8, + 0xe0, 0x64, 0x35, 0x48, + 0xe0, 0x64, 0x3b, 0x88, + 0xe0, 0x68, 0x04, 0x68, + 0xe0, 0x68, 0x17, 0x68, + 0xe0, 0x68, 0x1b, 0x48, + 0xe0, 0x68, 0x1e, 0xc8, + 0xe0, 0x68, 0x25, 0x28, + 0xe0, 0x68, 0x28, 0x48, 0xe0, 0x00, 0x09, 0xe8, 0xe0, 0x00, 0x09, 0xc8, 0xe0, 0x00, 0x09, 0xa8, @@ -116,24 +95,24 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x1c, 0x8c, 0xd1, 0x67, 0xe3, 0x6b, 0xe4, 0x04, 0xe5, 0x6b, 0x8e, 0x05, - 0x80, 0x60, 0x33, 0x08, - 0x34, 0x58, 0xe7, 0x6b, - 0xe9, 0x6b, 0x80, 0x60, + 0x80, 0x64, 0x03, 0x88, + 0x04, 0xd8, 0xe7, 0x6b, + 0xe9, 0x6b, 0x80, 0x64, 0xeb, 0x6b, 0x8a, 0xc5, - 0x80, 0x60, 0x35, 0x88, - 0x39, 0xd8, 0xed, 0x6b, - 0xf1, 0x6b, 0x80, 0x60, - 0x80, 0x60, 0x36, 0xa8, - 0x37, 0xf8, 0xf3, 0x6b, - 0xf5, 0x6b, 0x80, 0x60, + 0x80, 0x64, 0x06, 0x08, + 0x0a, 0x58, 0xed, 0x6b, + 0xf1, 0x6b, 0x80, 0x64, + 0x80, 0x64, 0x07, 0x28, + 0x08, 0x78, 0xf3, 0x6b, + 0xf5, 0x6b, 0x80, 0x64, 0xf7, 0x6b, 0x8a, 0xc5, 0xf9, 0x6b, 0x8c, 0x05, 0xfb, 0x6b, 0x8c, 0x45, 0x0c, 0x0a, 0x8a, 0x45, 0x8a, 0x65, 0xe4, 0xb4, 0xe4, 0xb8, 0x0c, 0x0a, - 0x39, 0xf8, 0x84, 0x45, - 0x40, 0x06, 0xe0, 0x60, + 0x0a, 0x78, 0x84, 0x45, + 0x40, 0x06, 0xe0, 0x64, 0x40, 0x4a, 0xfc, 0x12, 0x80, 0xd5, 0xe0, 0xd0, 0xc1, 0xc3, 0xc1, 0xc3, @@ -426,9 +405,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x68, 0x04, 0x57, 0xc8, 0xc1, 0xc3, 0x8c, 0x0b, 0xfa, 0x04, 0x04, 0x7c, - 0x74, 0x91, 0x46, 0xce, - 0x49, 0x8e, 0xc0, 0x10, - 0xc0, 0x10, 0x74, 0x91, + 0x74, 0xa9, 0x46, 0x4e, + 0x49, 0x0e, 0xc0, 0x10, + 0xc0, 0x10, 0x74, 0xa9, 0x88, 0x25, 0x89, 0x3d, 0xcd, 0x14, 0xcd, 0x04, 0x05, 0x0a, 0xcd, 0x24, @@ -453,9 +432,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x31, 0x81, 0x21, 0xe8, 0x04, 0x4a, 0x88, 0x8c, 0x45, 0xa1, 0x0b, - 0x74, 0x91, 0x07, 0x4e, - 0x48, 0xce, 0xc0, 0x10, - 0xc0, 0x10, 0x74, 0x91, + 0x74, 0xa9, 0x06, 0xce, + 0x48, 0x4e, 0xc0, 0x10, + 0xc0, 0x10, 0x74, 0xa9, 0x8a, 0x45, 0x89, 0x3d, 0xcd, 0x14, 0xcd, 0x04, 0x05, 0x0a, 0xcd, 0x24, @@ -492,7 +471,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x08, 0xe1, 0xa4, 0x8b, 0x04, 0xdc, 0x38, 0xfe, 0x24, 0x89, 0x14, - 0xe8, 0x6c, 0x53, 0x68, + 0xe8, 0x6c, 0x65, 0x68, 0xe1, 0xa4, 0x0c, 0x46, 0xe1, 0xa4, 0x0e, 0x46, 0x82, 0x45, 0x8f, 0x6d, @@ -1260,7 +1239,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x68, 0x34, 0xaa, 0x24, 0x50, 0x82, 0xa0, 0x1b, 0x8e, 0x0b, 0x7b, 0x90, - 0x68, 0x34, 0x61, 0x48, + 0x68, 0x38, 0x4a, 0x68, 0x3e, 0x0e, 0x8c, 0x4b, 0x85, 0x05, 0x81, 0xa1, 0x0e, 0x29, 0xd9, 0x0a, @@ -1475,84 +1454,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x67, 0x60, 0x0a, 0x50, 0x02, 0x13, 0xc0, 0x03, 0x98, 0x0b, 0xe0, 0xc0, - 0xe0, 0x00, 0x35, 0x08, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x90, 0x1e, 0xf0, - 0x88, 0x9b, 0x23, 0x04, - 0x02, 0x06, 0x09, 0x1e, - 0x0a, 0xcb, 0xe0, 0x04, - 0xfc, 0x0e, 0x81, 0x61, - 0xfe, 0x0e, 0xa1, 0x04, - 0xe0, 0x38, 0x04, 0x09, - 0x51, 0x6e, 0x81, 0x55, - 0xec, 0x04, 0x02, 0x10, - 0xa1, 0x1b, 0xf1, 0x6c, - 0x7e, 0x44, 0xfe, 0x75, - 0x03, 0xc1, 0x81, 0x61, - 0xe0, 0x08, 0x02, 0x06, - 0x16, 0x30, 0x20, 0x0b, - 0x10, 0x6e, 0xe6, 0x40, - 0x92, 0xce, 0x81, 0x71, - 0xd0, 0x6e, 0xd2, 0x6e, - 0x10, 0x1e, 0xfc, 0x44, - 0x92, 0xce, 0x81, 0x11, - 0xbe, 0x1e, 0xd2, 0x6e, - 0x0c, 0x30, 0x50, 0x6e, - 0xc0, 0x02, 0x66, 0x41, - 0x00, 0x20, 0x0f, 0x0e, - 0xc0, 0x03, 0x65, 0x71, - 0x00, 0x30, 0x0b, 0x0e, - 0xc0, 0x03, 0x66, 0x41, - 0x8b, 0x35, 0x8d, 0x0e, - 0xae, 0x03, 0x8d, 0x04, - 0xa1, 0xab, 0x80, 0xa8, - 0x89, 0x04, 0x8e, 0x85, - 0x00, 0x09, 0x91, 0x5e, - 0xc1, 0xad, 0xe0, 0x10, - 0x7c, 0x14, 0x82, 0xa5, - 0xe0, 0x08, 0x00, 0x46, - 0x83, 0x01, 0x04, 0x0e, - 0x8b, 0x04, 0x86, 0x0e, - 0x80, 0x08, 0xae, 0x03, - 0x81, 0x01, 0x46, 0x0e, - 0x2c, 0x04, 0xc4, 0x0e, - 0xe1, 0x84, 0x10, 0xa4, - 0x81, 0x21, 0x2e, 0x14, - 0x90, 0x03, 0x81, 0x31, - 0x72, 0x88, 0x42, 0x12, - 0x61, 0xb8, 0x94, 0x2b, - 0x45, 0xfe, 0xef, 0xf4, - 0xcf, 0xff, 0x7f, 0xfd, - 0xff, 0x21, 0x45, 0x0d, - 0x1f, 0xfd, 0x41, 0xfe, - 0xa1, 0x1b, 0x0f, 0xff, - 0x1f, 0xfd, 0x41, 0xfe, - 0xa4, 0x0e, 0xcf, 0xff, - 0x91, 0x54, 0x98, 0x04, - 0x04, 0x0e, 0x04, 0x0d, - 0x10, 0x84, 0xf8, 0x00, - 0x80, 0x83, 0x91, 0x80, - 0xe0, 0xaa, 0x40, 0x8a, - 0xfa, 0x08, 0x40, 0x02, - 0x00, 0x02, 0x03, 0x05, - 0xc0, 0x7f, 0x6b, 0xfd, - 0x83, 0x31, 0x7e, 0x24, - 0x8a, 0x3e, 0x88, 0x3e, - 0xae, 0x03, 0x8b, 0x04, - 0x4a, 0x0e, 0x80, 0x08, - 0x48, 0x0e, 0x81, 0x01, - 0xa4, 0x3e, 0x81, 0x01, - 0x0e, 0x70, 0x55, 0x0c, - 0x08, 0x61, 0xec, 0x04, - 0x90, 0xb1, 0x88, 0x91, - 0x8f, 0x0b, 0x8f, 0x04, - 0xfe, 0x04, 0xea, 0x95, - 0xa1, 0x0b, 0x80, 0x04, - 0xc0, 0x08, 0x40, 0x96, - 0xc0, 0x04, 0x5e, 0x05, - 0xc8, 0xf1, 0x3e, 0x04, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0xe0, 0x00, 0x24, 0x68, 0xfa, 0x3c, 0x04, 0x0c, 0x84, 0x6b, 0x02, 0x7b, 0x60, 0x50, 0x0e, 0x2b, @@ -1567,7 +1469,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x06, 0x24, 0x1c, 0x04, 0x9e, 0x14, 0xe1, 0x84, 0x81, 0x31, 0x06, 0x03, - 0x6f, 0xf4, 0x5b, 0xe8, + 0x6f, 0xf4, 0x65, 0x88, 0xf2, 0xa0, 0x42, 0x12, 0x67, 0xfd, 0x00, 0x8a, 0x41, 0xfe, 0xc7, 0xff, @@ -1580,7 +1482,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x06, 0x24, 0x5c, 0x04, 0xde, 0x14, 0xe1, 0x84, 0x81, 0x31, 0x06, 0x03, - 0x6f, 0xf4, 0x5a, 0x48, + 0x6f, 0xf4, 0x63, 0xe8, 0xf2, 0xa0, 0x42, 0x12, 0x67, 0xfd, 0x00, 0x8a, 0x41, 0xfe, 0xc7, 0xff, @@ -1594,7 +1496,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x84, 0x06, 0x24, 0xe0, 0x14, 0x0e, 0x15, 0x81, 0x31, 0x06, 0x03, - 0x6f, 0xf4, 0x58, 0x88, + 0x6f, 0xf4, 0x62, 0x28, 0xf2, 0xa0, 0x42, 0x12, 0x67, 0xfd, 0x00, 0x8a, 0x41, 0xfe, 0xc7, 0xff, @@ -1646,30 +1548,6 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe9, 0xfc, 0x00, 0x02, 0x0c, 0x0c, 0xca, 0x06, 0xdd, 0x93, 0xf0, 0x04, - 0xf8, 0x0c, 0x04, 0x4c, - 0x60, 0x38, 0x04, 0x09, - 0x66, 0x40, 0x04, 0x30, - 0x18, 0x41, 0xc0, 0x03, - 0x05, 0x15, 0xff, 0x31, - 0xf8, 0x00, 0x18, 0x0e, - 0xa1, 0x6b, 0x88, 0x68, - 0x90, 0x6a, 0x84, 0xe5, - 0x84, 0x82, 0x94, 0x72, - 0x04, 0x25, 0xa1, 0x6b, - 0xf1, 0x9c, 0x4e, 0x82, - 0x10, 0x64, 0x06, 0x7d, - 0x58, 0x77, 0xe1, 0x84, - 0x91, 0x80, 0x10, 0x84, - 0x4c, 0x8a, 0x8e, 0x83, - 0x4c, 0x62, 0xe0, 0x9a, - 0x0e, 0x62, 0xfa, 0x30, - 0xc0, 0x7f, 0x6b, 0xfd, - 0x00, 0x00, 0x94, 0x7c, - 0x84, 0x41, 0x6c, 0x04, - 0x82, 0x21, 0x04, 0x51, - 0xf8, 0x35, 0xa1, 0x0b, - 0xf0, 0x0c, 0x0c, 0x4c, - 0xc1, 0xc3, 0xdd, 0x93, 0xf8, 0x1c, 0x04, 0x0c, 0x89, 0x04, 0x84, 0x7a, 0x04, 0x89, 0x86, 0x1a, @@ -1704,38 +1582,6 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x01, 0x60, 0x2c, 0xf0, 0x1c, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x50, 0x1e, 0xf0, - 0x88, 0x6b, 0x19, 0x84, - 0x82, 0x9b, 0x06, 0x7b, - 0x84, 0xab, 0x09, 0x5e, - 0x64, 0x91, 0x16, 0x80, - 0x02, 0x80, 0x40, 0x01, - 0xc0, 0x01, 0x66, 0xd1, - 0x00, 0x80, 0x3e, 0x1e, - 0xc0, 0x01, 0x66, 0x91, - 0x08, 0x80, 0x3c, 0x0e, - 0x12, 0x1b, 0xe4, 0x90, - 0x0c, 0x3b, 0x8e, 0x2b, - 0x61, 0xd8, 0x96, 0x5b, - 0xa1, 0x0b, 0xef, 0xfc, - 0x04, 0x80, 0x86, 0xb5, - 0x8c, 0x1b, 0x64, 0x30, - 0xef, 0xfc, 0x6b, 0x08, - 0x14, 0x80, 0x7e, 0xae, - 0x0c, 0x1b, 0xe4, 0x80, - 0x70, 0xd8, 0x94, 0x2b, - 0x12, 0x1b, 0xef, 0xfc, - 0x09, 0x44, 0x8e, 0x2b, - 0x75, 0xd8, 0x8c, 0x3b, - 0x96, 0x5b, 0x6f, 0xfc, - 0x92, 0x1b, 0x3c, 0x8e, - 0x8e, 0x3b, 0x7e, 0x24, - 0x94, 0x5b, 0x0c, 0x4b, - 0xef, 0xfc, 0x78, 0x48, - 0xa8, 0xf1, 0x81, 0x01, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, 0xf0, 0x80, 0x46, 0x22, 0xec, 0x70, 0x06, 0x39, 0x86, 0xa5, 0xa1, 0x3b, @@ -1789,7 +1635,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x28, 0x04, 0xe4, 0x40, 0x7f, 0xfd, 0x49, 0xfe, 0x3c, 0x3e, 0xcf, 0xff, - 0x4d, 0x78, 0x81, 0x31, + 0x5e, 0x18, 0x81, 0x31, 0x81, 0x51, 0x6f, 0xfc, 0x81, 0x95, 0x89, 0x04, 0x83, 0x01, 0x7c, 0x24, @@ -1821,15 +1667,15 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf2, 0x7c, 0x0c, 0x0c, 0x04, 0x90, 0xdd, 0x93, 0x96, 0x0b, 0x64, 0x30, - 0x6f, 0xfc, 0x5e, 0x88, + 0x6f, 0xfc, 0x65, 0x88, 0x7c, 0x8e, 0x8c, 0x1b, 0xe4, 0x80, 0x10, 0x90, 0x8c, 0x1b, 0x16, 0x0b, - 0x6f, 0xfc, 0x64, 0x48, + 0x6f, 0xfc, 0x6b, 0x48, 0x3c, 0x9e, 0x90, 0x2b, 0x7c, 0x24, 0x96, 0x0b, 0x0e, 0x3b, 0x94, 0x1b, - 0x6c, 0x18, 0x8c, 0x4b, + 0x70, 0x18, 0x8c, 0x4b, 0x90, 0x5b, 0x6f, 0xfc, 0x0c, 0x0c, 0x98, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, @@ -1840,7 +1686,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x67, 0x60, 0x04, 0x80, 0x12, 0x09, 0xc0, 0x03, 0x8c, 0x3b, 0x60, 0x10, - 0xe8, 0x04, 0x59, 0x48, + 0xe8, 0x04, 0x59, 0x68, 0xe0, 0x10, 0x0e, 0x05, 0xe0, 0x34, 0x0e, 0x1b, 0xef, 0x48, 0x10, 0x29, @@ -1868,10 +1714,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x06, 0xf0, 0x90, 0x05, 0x92, 0x0b, 0x64, 0x70, 0x90, 0x2b, 0x0a, 0x1b, - 0xe8, 0x30, 0x64, 0x88, + 0xe8, 0x34, 0x5e, 0x48, 0x8e, 0x15, 0xa1, 0x0b, 0x90, 0x1b, 0x12, 0x0b, - 0x68, 0x30, 0x67, 0x88, + 0x68, 0x34, 0x61, 0x48, 0xa1, 0x0b, 0x8e, 0x2b, 0x8f, 0x84, 0x8c, 0x35, 0x54, 0xb5, 0xa1, 0x8b, @@ -1885,12 +1731,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x06, 0x70, 0x88, 0x42, 0xb2, 0xff, 0x40, 0x81, 0x31, 0x72, 0xac, - 0xef, 0xf0, 0x7d, 0x88, + 0xef, 0xf4, 0x4e, 0x28, 0x60, 0xfc, 0x04, 0x14, 0x24, 0x0f, 0xc3, 0x07, 0x01, 0x31, 0xc3, 0x17, - 0x73, 0x98, 0x90, 0x2b, - 0x04, 0x04, 0xef, 0xf0, + 0x44, 0x38, 0x90, 0x2b, + 0x04, 0x04, 0xef, 0xf4, 0xff, 0x31, 0x60, 0xa0, 0xd0, 0x17, 0x71, 0x07, 0xa2, 0x0f, 0x07, 0x2b, @@ -2006,7 +1852,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x10, 0x03, 0xe1, 0x84, 0x42, 0x12, 0x98, 0x3b, 0x88, 0x2b, 0x72, 0x88, - 0xef, 0xf0, 0x58, 0xa8, + 0xef, 0xf0, 0x69, 0x48, 0xe0, 0x00, 0x03, 0x4a, 0x02, 0x1a, 0x3e, 0x14, 0x00, 0x6a, 0xe0, 0x00, @@ -2105,7 +1951,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0xc2, 0x1c, 0x00, 0x42, 0xb2, 0xf0, 0x90, 0xac, 0x3f, 0x72, 0x94, - 0xef, 0xf0, 0x4c, 0x48, + 0xef, 0xf0, 0x5c, 0xe8, 0x02, 0xa4, 0x95, 0xb4, 0xd6, 0xb7, 0x7c, 0x00, 0xa2, 0x83, 0x3e, 0x14, @@ -2164,7 +2010,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc7, 0x1d, 0xc0, 0x00, 0xc0, 0x00, 0x56, 0x35, 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0x00, 0x0c, 0xdd, 0x93, + 0xc0, 0x00, 0x61, 0x01, 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0xf0, 0x1e, 0xf0, 0x84, 0x9b, 0x11, 0x1e, @@ -2332,14 +2179,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xbc, 0x3e, 0x9b, 0xb4, 0x2b, 0x34, 0xad, 0x0e, 0xa1, 0x44, 0x96, 0x2b, - 0xef, 0xfc, 0x4d, 0x08, + 0xef, 0xfc, 0x4c, 0xe8, 0x00, 0xf0, 0x18, 0x12, 0x3e, 0x0e, 0xe5, 0xc0, 0xe5, 0xe0, 0x0a, 0xf0, 0x96, 0x2b, 0x11, 0x04, 0xa9, 0x44, 0xab, 0x34, 0x2d, 0x04, 0xbc, 0x0e, - 0x4c, 0x18, 0x86, 0xbb, + 0x4b, 0xf8, 0x86, 0xbb, 0x97, 0x04, 0xef, 0xfc, 0xe0, 0x30, 0x00, 0x09, 0x84, 0x05, 0xa1, 0x0b, @@ -2349,7 +2196,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x3e, 0x0e, 0xe5, 0x90, 0xbc, 0x2e, 0x96, 0x3b, 0x9b, 0x24, 0xad, 0x04, - 0x4a, 0xd8, 0x9f, 0x44, + 0x4a, 0xb8, 0x9f, 0x44, 0xbd, 0x04, 0xef, 0xfc, 0x99, 0x24, 0x95, 0x14, 0xbb, 0x04, 0xad, 0x0e, @@ -2363,7 +2210,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xb9, 0x44, 0xbc, 0x3e, 0x9b, 0x04, 0xb7, 0x54, 0x91, 0x34, 0xad, 0x24, - 0xe8, 0x14, 0x7e, 0x08, + 0xe8, 0x18, 0x75, 0x68, 0x81, 0x01, 0x00, 0x2b, 0xf1, 0xd5, 0xa7, 0x34, 0x83, 0x7d, 0x8e, 0x18, @@ -2454,18 +2301,18 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x21, 0x4f, 0x86, 0x7b, 0x0f, 0xae, 0x82, 0x0b, 0x0d, 0xae, 0x84, 0x1b, - 0x58, 0xf8, 0x88, 0x2b, - 0x58, 0xae, 0xe8, 0x2c, + 0x52, 0x98, 0x88, 0x2b, + 0x58, 0xae, 0xe8, 0x30, 0x1a, 0xae, 0x80, 0x9b, 0xe4, 0x70, 0x04, 0xf0, 0x92, 0x1b, 0x0e, 0x0b, - 0xe8, 0x2c, 0x5e, 0x08, + 0xe8, 0x30, 0x57, 0xa8, 0x84, 0x35, 0xa1, 0x0b, 0x06, 0xf0, 0x0f, 0x04, 0x22, 0x14, 0xe4, 0x60, 0x58, 0x0e, 0x92, 0x2b, - 0x59, 0xf8, 0x8e, 0x0b, - 0xa1, 0x0b, 0xe8, 0x2c, + 0x53, 0x98, 0x8e, 0x0b, + 0xa1, 0x0b, 0xe8, 0x30, 0x80, 0x18, 0x1e, 0x05, 0x00, 0x04, 0x4c, 0x05, 0x80, 0x00, 0x00, 0x06, @@ -2483,7 +2330,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x7c, 0xbe, 0x82, 0x0b, 0xe8, 0x88, 0x04, 0x54, 0x88, 0x1b, 0x3e, 0xbe, - 0xe8, 0x2c, 0x55, 0x68, + 0xe8, 0x30, 0x4f, 0x08, 0x00, 0x90, 0x00, 0x8b, 0x01, 0x95, 0xe4, 0xc0, 0x41, 0xbe, 0x99, 0x11, @@ -2496,20 +2343,20 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa1, 0x0b, 0x81, 0x01, 0x28, 0x04, 0x88, 0xd5, 0xe4, 0x20, 0x04, 0xf0, - 0x68, 0x2c, 0x59, 0x68, + 0x68, 0x30, 0x53, 0x08, 0xa1, 0x0b, 0x90, 0x1b, 0x7c, 0x04, 0x86, 0xd5, 0xe4, 0x10, 0x06, 0xf0, 0xa4, 0x0e, 0x90, 0x2b, 0x9e, 0x14, 0xa8, 0x04, - 0xe8, 0x2c, 0x55, 0x48, + 0xe8, 0x30, 0x4e, 0xe8, 0x84, 0x75, 0xa1, 0x0b, 0x06, 0xf0, 0x3e, 0x04, 0x90, 0x2b, 0xe4, 0x10, 0xf8, 0x30, 0x52, 0x05, 0xe0, 0x60, 0x14, 0x05, - 0x54, 0x78, 0x9e, 0x14, - 0xa1, 0x0b, 0xe8, 0x2c, + 0x4e, 0x18, 0x9e, 0x14, + 0xa1, 0x0b, 0xe8, 0x30, 0x80, 0x04, 0x1e, 0x05, 0x00, 0x30, 0x52, 0x05, 0x80, 0x00, 0x00, 0x06, @@ -2533,7 +2380,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x24, 0x65, 0x82, 0x82, 0x03, 0xe1, 0x84, 0x72, 0x98, 0x42, 0x32, - 0x63, 0x18, 0x81, 0x31, + 0x73, 0x98, 0x81, 0x31, 0x0f, 0x24, 0xef, 0xec, 0x41, 0xfe, 0x91, 0x0b, 0xa1, 0x1b, 0x1f, 0xfc, @@ -2610,7 +2457,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x03, 0x7c, 0x14, 0x94, 0x2b, 0x25, 0x3f, 0x72, 0x84, 0x42, 0x32, - 0x59, 0x78, 0x96, 0x3b, + 0x69, 0xf8, 0x96, 0x3b, 0x09, 0x54, 0xef, 0xec, 0x67, 0xfd, 0x00, 0x8a, 0x41, 0xf6, 0xc0, 0xff, @@ -2682,21 +2529,21 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x09, 0x3e, 0xaa, 0x23, 0x3c, 0x3e, 0x96, 0x1b, 0x7c, 0x5e, 0x8a, 0x3b, - 0x6c, 0xf8, 0x8c, 0x5b, + 0x6c, 0xd8, 0x8c, 0x5b, 0xa1, 0x0b, 0xef, 0xf8, 0x09, 0x04, 0x86, 0x75, 0x3e, 0xae, 0x81, 0x41, 0x7e, 0x24, 0x96, 0x1b, 0x3c, 0x0e, 0x8c, 0x5b, 0x8d, 0x34, 0x90, 0x0b, - 0xef, 0xf8, 0x6c, 0x28, + 0xef, 0xf8, 0x6c, 0x08, 0x82, 0xd5, 0xa1, 0x0b, 0x81, 0x41, 0x0d, 0x24, 0x96, 0x1b, 0x7e, 0x04, 0x8c, 0x5b, 0x3e, 0x7e, 0x09, 0x04, 0xfc, 0x34, 0x3c, 0x0e, 0x80, 0x23, - 0x6b, 0x38, 0x90, 0x0b, + 0x6b, 0x18, 0x90, 0x0b, 0x16, 0x1b, 0xef, 0xf8, 0x0b, 0x64, 0x96, 0x8d, 0x09, 0x0e, 0x8c, 0xbb, @@ -2768,13 +2615,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe4, 0xa0, 0x00, 0xf0, 0x96, 0x0b, 0x3e, 0x0e, 0x8f, 0x14, 0xbc, 0x1e, - 0x56, 0x78, 0xfe, 0x44, + 0x56, 0x58, 0xfe, 0x44, 0x0d, 0x04, 0xef, 0xf8, 0x99, 0x24, 0x96, 0x1b, 0x3e, 0x0e, 0x97, 0x34, 0x95, 0x44, 0x94, 0x0b, 0x93, 0x54, 0xbc, 0x6e, - 0xef, 0xf8, 0x68, 0x28, + 0xef, 0xf8, 0x68, 0x08, 0x8e, 0x5b, 0x09, 0x74, 0xe2, 0xa4, 0x00, 0x0a, 0x81, 0x01, 0x80, 0x75, @@ -2794,7 +2641,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe6, 0x86, 0x50, 0x2a, 0xe5, 0x00, 0x11, 0x0a, 0x19, 0x21, 0x92, 0x55, - 0x66, 0x58, 0x8e, 0x0b, + 0x76, 0xd8, 0x8e, 0x0b, 0x8c, 0x1b, 0x6f, 0xec, 0x64, 0x30, 0x00, 0x70, 0xe0, 0x04, 0x02, 0x06, @@ -2818,7 +2665,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0f, 0x14, 0x84, 0x85, 0xe1, 0x84, 0x00, 0x24, 0x81, 0x31, 0x16, 0x03, - 0x6f, 0xe8, 0x7f, 0x88, + 0x6f, 0xec, 0x50, 0x08, 0xf2, 0xa4, 0x42, 0x12, 0x67, 0xfd, 0x00, 0x8a, 0x41, 0xf6, 0xc0, 0xff, @@ -2840,40 +2687,42 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x06, 0x0e, 0x60, 0x10, 0xc0, 0x00, 0x72, 0xc0, 0x88, 0xbb, 0x1d, 0x9e, - 0x42, 0x96, 0x09, 0x1e, + 0x42, 0x96, 0x7e, 0x1e, 0xc0, 0x01, 0x67, 0xb9, - 0x8d, 0x1e, 0x80, 0x04, - 0x13, 0x0e, 0x8f, 0x1e, + 0x8b, 0x1e, 0x80, 0x04, + 0x11, 0x0e, 0x8d, 0x1e, 0x63, 0x21, 0x41, 0x56, - 0x17, 0x0e, 0xc0, 0x01, - 0x91, 0x1e, 0x84, 0x0b, - 0x1b, 0x1e, 0x95, 0x1e, - 0x99, 0x3e, 0x8c, 0x1b, + 0x15, 0x0e, 0xc0, 0x01, + 0x6e, 0xa1, 0x00, 0x06, + 0x1b, 0x0e, 0xc0, 0x01, + 0x8f, 0x1e, 0x84, 0x0b, + 0x19, 0x1e, 0x93, 0x1e, + 0x97, 0x3e, 0x8c, 0x1b, 0xe8, 0x00, 0x48, 0xc8, 0x6c, 0x04, 0x00, 0xa0, 0xe0, 0x08, 0x42, 0xc6, - 0x74, 0x18, 0x01, 0x0a, - 0x0b, 0x0e, 0x81, 0x01, + 0x74, 0x1c, 0x01, 0x0a, + 0x09, 0x0e, 0x81, 0x01, 0x80, 0x88, 0x00, 0xa4, - 0x04, 0x60, 0x02, 0xf0, + 0x04, 0x50, 0x02, 0xf0, 0xe0, 0x10, 0x10, 0x1a, 0x1c, 0x00, 0x02, 0x05, 0x80, 0x00, 0x02, 0x06, - 0x00, 0x14, 0x5e, 0x05, - 0x0b, 0x04, 0xb1, 0x8b, + 0x00, 0x10, 0x5e, 0x05, + 0x09, 0x04, 0xb1, 0x8b, 0xed, 0x80, 0x42, 0x0a, 0xc0, 0x08, 0x42, 0xc6, 0x42, 0xc6, 0xa1, 0x0b, 0xe5, 0xad, 0x00, 0x08, - 0x8a, 0x95, 0xfe, 0x1e, - 0xa1, 0x0b, 0xfe, 0x04, - 0x09, 0x14, 0x8a, 0x35, + 0x8a, 0x95, 0xfc, 0x1e, + 0xa1, 0x0b, 0xfc, 0x04, + 0x7e, 0x14, 0x8a, 0x35, 0x0e, 0x0b, 0x90, 0x7b, 0x49, 0x98, 0x96, 0x2b, 0x18, 0xb1, 0xe8, 0x00, 0x04, 0x06, 0x81, 0x11, 0x96, 0x0b, 0x60, 0x08, - 0xef, 0xec, 0x62, 0x88, + 0xef, 0xec, 0x72, 0xc8, 0xe6, 0x9e, 0x4e, 0x7a, 0x00, 0x06, 0x83, 0x75, 0xe7, 0xad, 0x61, 0x00, @@ -2882,12 +2731,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x1a, 0x44, 0xe4, 0xe0, 0xe1, 0xec, 0x0b, 0x76, 0x90, 0x1b, 0x3e, 0x0e, - 0x89, 0x24, 0x8b, 0x04, + 0xfe, 0x24, 0x89, 0x04, 0x92, 0x0b, 0x3c, 0x0e, 0xe8, 0x00, 0x40, 0xc8, 0x6d, 0x0c, 0x9d, 0x04, 0x93, 0x7b, 0x82, 0x91, - 0x7e, 0x04, 0xfa, 0x35, + 0x7c, 0x04, 0xfa, 0x35, 0x0c, 0x0c, 0xf8, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, 0xf8, 0x7c, 0x04, 0x0c, @@ -2930,8 +2779,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x20, 0x1f, 0xe1, 0x84, 0xe0, 0xfc, 0x00, 0x34, 0x40, 0x42, 0xa0, 0x5f, - 0x71, 0x78, 0xf0, 0x94, - 0x42, 0x12, 0x6f, 0xe8, + 0x41, 0xb8, 0xf0, 0x94, + 0x42, 0x12, 0x6f, 0xec, 0x04, 0x06, 0xf2, 0xb0, 0x40, 0x40, 0x60, 0x01, 0x84, 0x03, 0xff, 0x31, @@ -3045,13 +2894,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x1c, 0x04, 0x80, 0x9b, 0x22, 0x34, 0xa3, 0x2f, 0xe0, 0x90, 0x02, 0x44, - 0x68, 0x28, 0x4f, 0x28, + 0x68, 0x2c, 0x48, 0x88, 0xe8, 0x94, 0x14, 0x24, 0x9c, 0x24, 0xa4, 0x14, 0x22, 0x34, 0x98, 0x0e, 0x04, 0x0b, 0xcf, 0x17, - 0x4e, 0x78, 0x94, 0x2b, - 0x1a, 0x0e, 0xe8, 0x28, + 0x47, 0xd8, 0x94, 0x2b, + 0x1a, 0x0e, 0xe8, 0x2c, 0x0c, 0x0c, 0x81, 0x01, 0xdd, 0x93, 0xf2, 0x3c, 0xfa, 0x0c, 0x04, 0x0c, @@ -3062,7 +2911,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x01, 0x67, 0xd1, 0x72, 0xa0, 0x42, 0x12, 0xe0, 0x3c, 0x44, 0x86, - 0x6f, 0xe8, 0x61, 0x08, + 0x6f, 0xe8, 0x71, 0x48, 0x7f, 0x21, 0x81, 0x31, 0x85, 0x0b, 0x81, 0x31, 0x1f, 0xfc, 0x41, 0xfe, @@ -3073,7 +2922,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x03, 0xe0, 0x9c, 0x72, 0xa0, 0x42, 0x22, 0xe0, 0xa0, 0x04, 0x64, - 0xef, 0xe8, 0x5f, 0xa8, + 0xef, 0xe8, 0x6f, 0xe8, 0x7f, 0xfd, 0x45, 0xfe, 0xc5, 0x0d, 0xc0, 0x3f, 0x1f, 0xfd, 0x41, 0xfe, @@ -3483,10 +3332,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0x81, 0x81, 0xfa, 0x3c, 0x04, 0x0c, 0xec, 0xa0, 0x1e, 0xf0, - 0x55, 0x0e, 0x2d, 0x84, - 0xc0, 0x10, 0x64, 0x31, + 0x54, 0x8e, 0x2d, 0x84, + 0xc0, 0x10, 0x64, 0x11, 0x13, 0xae, 0xaf, 0x94, - 0x63, 0xf1, 0x14, 0xce, + 0x63, 0xd1, 0x14, 0x4e, 0x91, 0xae, 0xc0, 0x10, 0x8d, 0x8e, 0x8f, 0x9e, 0xa1, 0xc4, 0xab, 0xa4, @@ -5216,34 +5065,34 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x81, 0x11, 0x0e, 0x12, 0x05, 0x8d, 0x45, 0x99, 0x21, 0x78, 0x30, - 0x49, 0xd8, 0x9c, 0x1a, - 0x1c, 0x1a, 0xe8, 0x18, + 0x43, 0x38, 0x9c, 0x1a, + 0x1c, 0x1a, 0xe8, 0x1c, 0x7f, 0xfd, 0x57, 0xfe, 0x40, 0x02, 0xcf, 0xff, 0x99, 0x21, 0x7b, 0xac, 0xf8, 0x30, 0x54, 0x05, - 0x49, 0x18, 0xe5, 0x04, - 0x69, 0x0e, 0xe8, 0x18, + 0x42, 0x78, 0xe5, 0x04, + 0x69, 0x0e, 0xe8, 0x1c, 0x8f, 0x9e, 0x99, 0x21, 0xe0, 0x2c, 0x12, 0x05, - 0x48, 0x98, 0x9c, 0x1a, - 0x59, 0x3a, 0xe8, 0x18, + 0x41, 0xf8, 0x9c, 0x1a, + 0x59, 0x3a, 0xe8, 0x1c, 0xfb, 0xac, 0x40, 0x02, 0x99, 0x21, 0x1e, 0x1a, 0x54, 0x05, 0x8d, 0xae, 0x86, 0x0b, 0x60, 0x2c, - 0xe8, 0x18, 0x47, 0xe8, + 0xe8, 0x1c, 0x41, 0x48, 0x99, 0x21, 0x11, 0xb4, 0x0c, 0x03, 0xed, 0x0c, 0x9e, 0x1a, 0xe0, 0x5c, - 0xe8, 0x18, 0x49, 0x48, + 0xe8, 0x1c, 0x42, 0xa8, 0x60, 0x2c, 0x0c, 0x03, 0x1e, 0x1a, 0x80, 0xab, - 0x48, 0xd8, 0x99, 0x21, - 0x0c, 0x03, 0xe8, 0x18, + 0x42, 0x38, 0x99, 0x21, + 0x0c, 0x03, 0xe8, 0x1c, 0x80, 0x9b, 0x60, 0x8c, 0x99, 0x21, 0x1e, 0x1a, - 0xe8, 0x18, 0x48, 0x68, + 0xe8, 0x1c, 0x41, 0xc8, 0x89, 0x34, 0xfc, 0x24, 0x42, 0x22, 0xfe, 0x44, 0xb4, 0x23, 0x71, 0xa4, @@ -5306,119 +5155,560 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x48, 0x01, 0x85, 0x01, 0xdd, 0x93, 0xe3, 0x90, 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0xd0, 0x1e, 0xf0, - 0x81, 0xc1, 0x0b, 0x1e, - 0x91, 0x4e, 0xad, 0x14, - 0x89, 0x1e, 0xb3, 0x44, - 0x13, 0x5e, 0xab, 0x14, - 0x8f, 0x3e, 0x80, 0x5b, - 0xa9, 0x14, 0x97, 0x1e, - 0x99, 0x21, 0x0d, 0x2e, - 0x7e, 0x1e, 0xb1, 0x34, - 0xe7, 0x90, 0x02, 0x40, - 0x81, 0x45, 0xaf, 0x04, - 0x04, 0x20, 0x45, 0xc6, - 0xa1, 0x2b, 0xec, 0x04, - 0x04, 0x00, 0xfe, 0x95, - 0x4f, 0x06, 0x65, 0x80, - 0x19, 0x06, 0xe0, 0x00, - 0x81, 0xa1, 0x60, 0x08, - 0x06, 0x05, 0x8d, 0x05, - 0x00, 0x0a, 0xfc, 0x1c, + 0xed, 0x30, 0x1e, 0xf0, + 0x1e, 0x25, 0x9b, 0x2e, + 0xb7, 0xc4, 0xe0, 0x88, + 0x99, 0x41, 0x1d, 0x4e, + 0x1e, 0x25, 0x95, 0x2e, + 0x0c, 0xc0, 0x60, 0x84, + 0xb5, 0xb4, 0xe7, 0x90, + 0x1e, 0x25, 0x97, 0x2e, + 0x99, 0x2e, 0xe0, 0x80, + 0xa3, 0x2e, 0xbf, 0x24, + 0x91, 0x2e, 0xbd, 0x24, + 0x93, 0x2e, 0xbb, 0x24, + 0x0f, 0x2e, 0xb9, 0x24, + 0x81, 0x45, 0x81, 0x21, + 0x08, 0x40, 0x59, 0x26, + 0xa1, 0x4b, 0xec, 0x04, + 0x1f, 0x1e, 0xfe, 0x95, + 0xe5, 0x80, 0x0a, 0x50, + 0x60, 0x00, 0x4f, 0x06, + 0xe0, 0x08, 0x11, 0x06, + 0x81, 0x91, 0x21, 0x3e, + 0x16, 0x15, 0x87, 0xd5, + 0x02, 0x0a, 0xfc, 0x1c, 0xc7, 0xff, 0x63, 0xfd, - 0x4c, 0x42, 0x94, 0xc5, - 0x8d, 0x01, 0x70, 0xa8, - 0xe3, 0x90, 0x4c, 0x01, - 0xa1, 0x0b, 0x94, 0x0a, - 0x88, 0x14, 0x80, 0xe5, - 0x00, 0x86, 0xc1, 0x1d, - 0x4c, 0x01, 0xc0, 0x00, - 0x96, 0x0a, 0xc3, 0x90, - 0x82, 0x65, 0xa1, 0x0b, - 0x70, 0x9c, 0x42, 0x42, - 0x02, 0x15, 0xce, 0x07, - 0xc0, 0x1d, 0xe0, 0x30, - 0xc0, 0x00, 0x00, 0x36, - 0xc3, 0x90, 0x4c, 0x01, - 0xd4, 0x0a, 0x99, 0x2e, - 0x82, 0x05, 0xa1, 0x0b, - 0xfc, 0x30, 0x08, 0x1b, - 0x00, 0x36, 0xc0, 0x1d, - 0x4c, 0x01, 0xc0, 0x00, - 0x15, 0x6e, 0xc3, 0x90, - 0x11, 0x14, 0x8a, 0x0b, - 0x08, 0xbb, 0x94, 0x2b, - 0x06, 0x9b, 0x8a, 0x6b, - 0x78, 0xd8, 0x98, 0x8b, - 0x13, 0x04, 0xef, 0xfc, - 0x19, 0x24, 0x90, 0xcb, - 0x0c, 0x5b, 0x92, 0x3b, - 0x00, 0x09, 0x96, 0x4b, - 0x00, 0x0a, 0xe0, 0x34, - 0x86, 0x65, 0xe3, 0xfc, - 0x00, 0x09, 0x95, 0x04, - 0x00, 0x00, 0xe3, 0x90, - 0x01, 0x0a, 0xec, 0x14, - 0x84, 0x75, 0xf4, 0x04, - 0x7c, 0x4e, 0x89, 0x04, - 0x8b, 0x14, 0x94, 0x4b, - 0xfe, 0x04, 0xbe, 0x0e, - 0x8f, 0x34, 0x8d, 0x24, - 0x8a, 0x0b, 0x3c, 0x0e, - 0x41, 0x58, 0x93, 0x54, - 0x19, 0x24, 0xe8, 0x00, - 0x12, 0x3b, 0x90, 0xcb, - 0x96, 0x4b, 0x8c, 0x5b, - 0x88, 0x21, 0x02, 0xa1, - 0x84, 0xc1, 0x08, 0x71, - 0x82, 0x08, 0x97, 0x04, - 0xe6, 0xd5, 0x81, 0xad, - 0xe8, 0xf1, 0x01, 0x01, + 0x48, 0xc2, 0x8c, 0x65, + 0x8d, 0x11, 0x70, 0xa4, + 0xe3, 0x90, 0x48, 0x11, + 0xa1, 0x1b, 0x80, 0x1a, + 0x94, 0x24, 0x80, 0xe5, + 0x02, 0x86, 0xc3, 0x2d, + 0x48, 0x11, 0xc0, 0x00, + 0x82, 0x1a, 0xc3, 0x90, + 0x82, 0x65, 0xa1, 0x1b, + 0x70, 0x9c, 0x44, 0xc2, + 0x04, 0x25, 0xce, 0x17, + 0xc2, 0x2d, 0xe0, 0x30, + 0xc0, 0x00, 0x02, 0x36, + 0xc3, 0x90, 0x48, 0x11, + 0xc0, 0x1a, 0xa5, 0x5e, + 0x82, 0x05, 0xa1, 0x1b, + 0xfc, 0x20, 0x18, 0x2b, + 0x02, 0x36, 0xc2, 0x2d, + 0x48, 0x11, 0xc0, 0x00, + 0x23, 0x14, 0xc3, 0x90, + 0x16, 0x3b, 0x92, 0x2b, + 0x00, 0x6b, 0x98, 0x4b, + 0x78, 0x78, 0x98, 0xab, + 0x21, 0x34, 0xef, 0xfc, + 0x25, 0x54, 0x94, 0xcb, + 0x02, 0x91, 0x8c, 0x0b, + 0x08, 0x71, 0x88, 0x51, + 0x8e, 0x18, 0x84, 0x81, + 0xf0, 0x55, 0x83, 0x9d, + 0x02, 0x29, 0x9f, 0x14, + 0x04, 0x0a, 0xe0, 0x34, + 0x84, 0x85, 0xe3, 0xfc, + 0x98, 0x5b, 0x15, 0x24, + 0x0d, 0x2e, 0x9d, 0x44, + 0x8b, 0x2e, 0x89, 0x21, + 0x89, 0x2e, 0x97, 0x24, + 0xfe, 0x2e, 0x8f, 0x24, + 0xfc, 0x2e, 0x99, 0x24, + 0xbe, 0x2e, 0x91, 0x24, + 0xbc, 0x2e, 0x93, 0x24, + 0x40, 0x98, 0x9b, 0x24, + 0x01, 0x01, 0xe8, 0x00, + 0xe5, 0x30, 0x1e, 0xf0, 0xf2, 0x7c, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x70, 0x1e, 0xf0, - 0x8a, 0x9b, 0x00, 0xab, - 0x60, 0x14, 0x14, 0x03, - 0xa1, 0xb4, 0x82, 0x8b, - 0x0d, 0x0e, 0x9f, 0x54, - 0x8e, 0xf5, 0xa3, 0x0d, - 0x60, 0x30, 0x12, 0x09, - 0xe0, 0x84, 0x0c, 0x44, - 0x42, 0xb2, 0x15, 0xc1, - 0x16, 0x63, 0xf0, 0x90, - 0x1d, 0x04, 0x81, 0x71, - 0x18, 0x46, 0xa1, 0x0b, - 0x42, 0xc1, 0xc0, 0x00, - 0x18, 0x60, 0x63, 0x90, - 0x0b, 0x8e, 0xe6, 0xa0, - 0xe5, 0xe0, 0x0c, 0x00, - 0xfe, 0xae, 0x89, 0x5e, - 0xbe, 0x3e, 0xfc, 0xbe, - 0xb0, 0x02, 0x83, 0xe5, - 0x0d, 0x14, 0x98, 0x12, - 0x00, 0x04, 0xa2, 0x03, - 0x82, 0x0d, 0xf0, 0x80, - 0x14, 0x13, 0x84, 0x95, - 0x90, 0x0b, 0x60, 0x20, - 0x92, 0xbb, 0x3c, 0xbe, - 0x84, 0x9b, 0x08, 0x8b, - 0x6f, 0xfc, 0x6f, 0x48, - 0x14, 0xcb, 0x98, 0xab, - 0x16, 0x9b, 0x92, 0x2b, - 0xfc, 0xb4, 0x90, 0x4b, - 0xbe, 0x34, 0x89, 0x54, - 0x8b, 0x84, 0xfe, 0xa4, - 0x84, 0x61, 0x02, 0x71, - 0xe0, 0x30, 0x12, 0x09, - 0xf8, 0x15, 0x81, 0x7d, - 0x0c, 0x0c, 0xb8, 0xf1, - 0xdd, 0x93, 0xf2, 0x7c, - 0x60, 0x20, 0x14, 0x13, - 0xbc, 0xbe, 0x90, 0x0b, - 0xef, 0xfc, 0x6d, 0xa8, - 0x0c, 0x0c, 0xb8, 0xf1, - 0xdd, 0x93, 0xf2, 0x7c, + 0xfe, 0x7c, 0x04, 0x0c, + 0xed, 0x00, 0x1e, 0xf0, + 0x84, 0x8b, 0x7c, 0x0e, + 0x95, 0x5e, 0xbb, 0x04, + 0x11, 0x0e, 0xfe, 0x4e, + 0xb7, 0x04, 0xa3, 0x0b, + 0xb3, 0x04, 0xbe, 0x0e, + 0xb1, 0x04, 0x8b, 0x0e, + 0x8e, 0x28, 0x89, 0x0e, + 0x86, 0x75, 0x97, 0x2e, + 0x81, 0x71, 0x03, 0x65, + 0x8e, 0x03, 0x95, 0x04, + 0xe3, 0x90, 0x00, 0x09, + 0x82, 0xd5, 0xad, 0x0b, + 0x8e, 0x4b, 0x7c, 0x04, + 0x8b, 0x34, 0x89, 0x24, + 0xe0, 0x20, 0x00, 0x13, + 0xfe, 0x54, 0x95, 0x04, + 0xbe, 0x04, 0xbc, 0x0e, + 0xef, 0xfc, 0x70, 0x68, + 0x82, 0x71, 0x97, 0x24, + 0xfa, 0x75, 0x8f, 0x2b, + 0xe0, 0x00, 0x39, 0x98, + 0xe0, 0x30, 0x02, 0x09, + 0xb5, 0xb4, 0x95, 0x14, + 0xa1, 0x0b, 0x1f, 0x0e, + 0x02, 0x10, 0x15, 0x01, + 0x1d, 0x0e, 0xe7, 0x90, + 0xc0, 0x00, 0x00, 0x46, + 0xc0, 0x38, 0x5e, 0x05, + 0x9b, 0x0e, 0xbd, 0x04, + 0x81, 0xa5, 0xb9, 0x04, + 0x04, 0x20, 0x04, 0x38, + 0xad, 0x3b, 0xec, 0x04, + 0x80, 0x38, 0x1e, 0x35, + 0x00, 0x00, 0x42, 0x31, + 0xa1, 0x2b, 0x82, 0x11, + 0x09, 0x94, 0xfc, 0xd5, + 0xe2, 0x00, 0x00, 0x2a, + 0x81, 0xa1, 0x0b, 0x74, + 0x60, 0x08, 0x0d, 0x06, + 0x40, 0x0a, 0x81, 0x31, + 0x96, 0x2b, 0x66, 0xa6, + 0x40, 0x09, 0x0c, 0x06, + 0x42, 0x0a, 0xc0, 0x00, + 0x40, 0x0a, 0xe5, 0x1e, + 0x02, 0x10, 0xe5, 0x9e, + 0xc0, 0x08, 0x64, 0x01, + 0x72, 0xa8, 0x40, 0x02, + 0xe8, 0x07, 0xd9, 0x17, + 0x81, 0x11, 0x22, 0x0f, + 0xef, 0xd8, 0x53, 0x28, + 0x66, 0xa6, 0x44, 0x6a, + 0x64, 0x00, 0x00, 0x00, + 0x42, 0x12, 0xc1, 0x00, + 0xe3, 0x07, 0x72, 0xa8, + 0x65, 0x1e, 0x46, 0x2a, + 0x44, 0x2a, 0xde, 0x17, + 0x4c, 0x02, 0x65, 0x9e, + 0x06, 0x30, 0xf9, 0x84, + 0x40, 0x08, 0x64, 0x01, + 0x40, 0x22, 0x81, 0x11, + 0xd9, 0x37, 0x72, 0xa8, + 0x96, 0x2b, 0x68, 0x07, + 0x81, 0x31, 0x26, 0x0f, + 0xef, 0xd8, 0x51, 0x68, + 0x00, 0x00, 0x17, 0x34, + 0xc1, 0x00, 0x64, 0x01, + 0x42, 0x12, 0x1b, 0x44, + 0x5e, 0x17, 0xf2, 0xa8, + 0x04, 0x34, 0xe3, 0x07, + 0xa2, 0x0f, 0x60, 0x88, + 0xa6, 0x1b, 0x08, 0x23, + 0x64, 0x01, 0x06, 0x40, + 0x04, 0x20, 0x40, 0x09, + 0xc0, 0x09, 0x64, 0x01, + 0x60, 0x08, 0x48, 0x86, + 0x11, 0xb4, 0x81, 0x51, + 0x85, 0x25, 0x81, 0xc1, + 0xa9, 0xbb, 0x15, 0xa4, + 0xfc, 0x10, 0x14, 0x73, + 0x14, 0x95, 0x8c, 0x7e, + 0x46, 0x95, 0xfc, 0x14, + 0x52, 0xa2, 0x60, 0xc0, + 0x12, 0xa9, 0xf1, 0xb0, + 0x46, 0xa5, 0xe3, 0x90, + 0x82, 0x95, 0xe1, 0x80, + 0x88, 0x7e, 0x8c, 0x73, + 0x0e, 0x75, 0x95, 0x74, + 0x44, 0x75, 0xfc, 0x14, + 0x12, 0x79, 0xe0, 0xc0, + 0x44, 0x75, 0xe3, 0x90, + 0x18, 0xc0, 0xe1, 0x80, + 0x84, 0x41, 0x6c, 0x04, + 0x88, 0x31, 0x08, 0x21, + 0x99, 0x1b, 0x88, 0x51, + 0x1f, 0x24, 0xf6, 0xd5, + 0x1b, 0x44, 0x81, 0x51, + 0x91, 0xb4, 0x81, 0xc1, + 0x60, 0x88, 0x06, 0x24, + 0x19, 0x3e, 0xa4, 0x1b, + 0x0f, 0x3e, 0x88, 0x33, + 0xe5, 0xe0, 0x04, 0x80, + 0x65, 0x81, 0x06, 0x30, + 0x08, 0x40, 0x40, 0x09, + 0xc0, 0x0a, 0x67, 0x81, + 0x08, 0x62, 0x85, 0x15, + 0xf0, 0x94, 0x52, 0x42, + 0x52, 0x65, 0xa9, 0xbb, + 0x10, 0x75, 0xf9, 0x80, + 0x52, 0x75, 0xfc, 0x14, + 0x4e, 0x82, 0x78, 0xc0, + 0x0e, 0xa9, 0xf1, 0xb0, + 0xa4, 0xae, 0xe2, 0x40, + 0x00, 0x63, 0x82, 0xb5, + 0xf0, 0x94, 0x52, 0x32, + 0x10, 0x65, 0xa4, 0x6e, + 0x52, 0x65, 0xfc, 0x14, + 0x0e, 0x69, 0xe0, 0xc0, + 0x52, 0x65, 0xe2, 0x40, + 0x18, 0xc0, 0xe1, 0x80, + 0x84, 0x21, 0x6c, 0x04, + 0x99, 0x1b, 0x88, 0x51, + 0x11, 0x04, 0xf6, 0xf5, + 0x17, 0x54, 0xff, 0x81, + 0x9f, 0x14, 0x81, 0x41, + 0x00, 0x4a, 0x1b, 0x34, + 0x00, 0x0c, 0xe0, 0x0c, + 0x04, 0x54, 0xe2, 0x00, + 0x00, 0x14, 0x68, 0x80, + 0x42, 0x0a, 0xe8, 0x80, + 0x81, 0x35, 0xe6, 0x8a, + 0x82, 0x41, 0x4d, 0x8e, + 0xfe, 0xb5, 0x83, 0x4d, + 0x0e, 0x04, 0x1b, 0x14, + 0x81, 0x41, 0xe0, 0x88, + 0x65, 0x81, 0x06, 0x10, + 0x93, 0x3e, 0xc0, 0x09, + 0x1b, 0xc4, 0x85, 0x95, + 0xe0, 0x88, 0x0a, 0x44, + 0x82, 0x9b, 0x13, 0x64, + 0x8a, 0xc3, 0x9f, 0xa4, + 0x66, 0x01, 0x0a, 0xc0, + 0x18, 0xc0, 0x40, 0x0a, + 0xc0, 0x09, 0x64, 0x01, + 0x94, 0xb4, 0x83, 0x65, + 0x82, 0xe5, 0xa1, 0xbb, + 0xe1, 0x80, 0x0c, 0xb5, + 0x82, 0x65, 0xa1, 0xbb, + 0x98, 0x34, 0xb0, 0xb4, + 0x16, 0xb4, 0xa6, 0xb3, + 0x17, 0x0a, 0xf0, 0x80, + 0xc0, 0x03, 0x60, 0x81, + 0x80, 0x00, 0x52, 0xb5, + 0x6c, 0x04, 0x14, 0xa0, + 0x88, 0x61, 0x88, 0x91, + 0xfa, 0x55, 0xa1, 0xab, + 0x82, 0x41, 0x17, 0x54, + 0x8b, 0x4b, 0x8e, 0x13, + 0x91, 0x14, 0xf4, 0xf5, + 0x0a, 0x48, 0xa9, 0x1b, + 0x03, 0x68, 0xc0, 0x00, + 0xc0, 0x00, 0x40, 0x01, + 0x66, 0x96, 0x42, 0x0a, + 0x9b, 0x34, 0x81, 0x41, + 0x05, 0xb5, 0xc4, 0x17, + 0x1b, 0x54, 0x86, 0x13, + 0xf0, 0x94, 0x46, 0x42, + 0xc4, 0x37, 0x13, 0x64, + 0x82, 0x9b, 0x1f, 0xa4, + 0x0a, 0x30, 0x8a, 0x33, + 0x40, 0x0a, 0x66, 0x01, + 0x64, 0x01, 0x18, 0x30, + 0x83, 0x65, 0xc0, 0x09, + 0xa1, 0x3b, 0x94, 0x34, + 0x0c, 0x35, 0x82, 0xe5, + 0xa1, 0x3b, 0xe1, 0x80, + 0xb0, 0x34, 0x82, 0x65, + 0xb6, 0x33, 0x98, 0xb4, + 0xf0, 0x80, 0x16, 0x34, + 0x60, 0x81, 0x17, 0x0a, + 0x52, 0xb5, 0xc0, 0x03, + 0x14, 0xa0, 0x80, 0x00, + 0x88, 0x91, 0x6c, 0x04, + 0xa1, 0xab, 0x88, 0x61, + 0x17, 0x54, 0xfa, 0x55, + 0x8e, 0x13, 0x82, 0x41, + 0xf4, 0xd5, 0x8b, 0x4b, + 0x1b, 0x14, 0x87, 0x45, + 0x99, 0x34, 0x81, 0x41, + 0x06, 0x10, 0x86, 0x13, + 0xc0, 0x09, 0x65, 0x81, + 0x85, 0x95, 0x93, 0x3e, + 0x0a, 0x44, 0x1b, 0xc4, + 0x13, 0x64, 0xe0, 0x88, + 0x9f, 0xa4, 0x82, 0x9b, + 0x0a, 0xc0, 0x8a, 0xc3, + 0x40, 0x0a, 0x66, 0x01, + 0x64, 0x01, 0x18, 0xc0, + 0x83, 0x65, 0xc0, 0x09, + 0xa1, 0xbb, 0x94, 0xb4, + 0x0c, 0xb5, 0x82, 0xe5, + 0xa1, 0xbb, 0xe1, 0x80, + 0xb0, 0xb4, 0x82, 0x65, + 0xa6, 0xb3, 0x98, 0x34, + 0xf0, 0x80, 0x16, 0xb4, + 0x60, 0x81, 0x17, 0x0a, + 0x52, 0xb5, 0xc0, 0x03, + 0x14, 0xa0, 0x80, 0x00, + 0x88, 0x91, 0x6c, 0x04, + 0xa1, 0xab, 0x88, 0x61, + 0x17, 0x54, 0xfa, 0x55, + 0x8e, 0x13, 0x82, 0x41, + 0xf4, 0xf5, 0x8b, 0x4b, + 0x42, 0x0a, 0x9f, 0x34, + 0x99, 0x44, 0xe6, 0x96, + 0x86, 0x13, 0x1b, 0x34, + 0x06, 0x13, 0xc4, 0x17, + 0x06, 0x30, 0x88, 0x33, + 0x40, 0x09, 0x65, 0x81, + 0x93, 0x3e, 0x81, 0x41, + 0x1b, 0xc4, 0x85, 0x95, + 0x13, 0x64, 0x88, 0x53, + 0x1f, 0xa4, 0xc4, 0x57, + 0x8a, 0xc3, 0x82, 0x9b, + 0x66, 0x01, 0x0a, 0xc0, + 0x18, 0xc0, 0x40, 0x0a, + 0xc0, 0x09, 0x64, 0x01, + 0x94, 0xb4, 0x83, 0x65, + 0x82, 0xe5, 0xa1, 0xbb, + 0xe1, 0x80, 0x0c, 0xb5, + 0x82, 0x65, 0xa1, 0xbb, + 0x98, 0x34, 0xb0, 0xb4, + 0x16, 0xb4, 0xa6, 0xb3, + 0x17, 0x0a, 0xf0, 0x80, + 0xc0, 0x03, 0x60, 0x81, + 0x80, 0x00, 0x52, 0xb5, + 0x6c, 0x04, 0x14, 0xa0, + 0x88, 0x61, 0x88, 0x91, + 0xfa, 0x55, 0xa1, 0xab, + 0x82, 0x41, 0x17, 0x54, + 0x8b, 0x4b, 0x8e, 0x13, + 0x1b, 0x94, 0xf4, 0xf5, + 0x8d, 0x05, 0x81, 0x41, + 0x66, 0x82, 0x42, 0x4a, + 0x7f, 0xfc, 0x55, 0xfe, + 0x13, 0x9e, 0xdf, 0xff, + 0x0d, 0x1e, 0x92, 0x3b, + 0x59, 0xfe, 0xff, 0x51, + 0x5f, 0xff, 0x7f, 0xfd, + 0x03, 0x85, 0xff, 0x61, + 0x8c, 0x14, 0x81, 0x91, + 0x84, 0x05, 0x91, 0x1b, + 0x4a, 0x60, 0x95, 0x1d, + 0x58, 0xa0, 0x5c, 0x00, + 0x02, 0x75, 0xdc, 0x00, + 0xdc, 0x00, 0x4c, 0x90, + 0x92, 0xbb, 0x19, 0x1d, + 0x1c, 0x00, 0x56, 0x50, + 0xfb, 0x30, 0x58, 0x12, + 0x94, 0x1b, 0x96, 0x5b, + 0x88, 0x31, 0x02, 0x91, + 0x81, 0x9d, 0x82, 0xab, + 0x13, 0x94, 0xfa, 0x35, + 0x8c, 0x85, 0x91, 0x5b, + 0xf1, 0xa8, 0x42, 0xc2, + 0xe1, 0xdc, 0x03, 0x0a, + 0x58, 0xa0, 0x08, 0x55, + 0x1b, 0x94, 0xdc, 0x00, + 0xe0, 0x88, 0x02, 0x44, + 0x60, 0x88, 0x06, 0x64, + 0xe0, 0x88, 0x16, 0x54, + 0x12, 0x90, 0x12, 0x13, + 0xc0, 0x0a, 0x64, 0x81, + 0xfc, 0x0c, 0x12, 0x35, + 0xe9, 0xc0, 0x02, 0x15, + 0xfc, 0x2c, 0x12, 0x95, + 0xf1, 0x8c, 0x46, 0x12, + 0x06, 0x34, 0x32, 0x13, + 0x13, 0x94, 0xf0, 0x80, + 0xf0, 0x80, 0x02, 0x14, + 0x4a, 0x60, 0x87, 0x1d, + 0x58, 0xa0, 0x1c, 0x00, + 0x8a, 0x6b, 0x9c, 0x00, + 0x81, 0x31, 0x12, 0x1b, + 0x45, 0x8e, 0x81, 0x35, + 0x81, 0x3d, 0x82, 0x31, + 0x8d, 0x14, 0xfe, 0xb5, + 0x82, 0x63, 0x1b, 0x14, + 0x82, 0x63, 0xc4, 0x67, + 0x02, 0x41, 0x98, 0xce, + 0x85, 0x4d, 0x8e, 0x93, + 0x1b, 0x34, 0xe8, 0x15, + 0x8d, 0x35, 0x81, 0x91, + 0x43, 0xfe, 0x13, 0x9e, + 0xdf, 0xff, 0x7f, 0xfd, + 0xff, 0x41, 0x06, 0xbb, + 0x7f, 0xfd, 0x4b, 0xfe, + 0xff, 0xc1, 0x5f, 0xff, + 0x81, 0x91, 0x03, 0x85, + 0x91, 0xab, 0xac, 0xa4, + 0x83, 0xad, 0x84, 0x05, + 0x5c, 0x00, 0x48, 0xc0, + 0xdc, 0x00, 0x4a, 0x10, + 0x58, 0x90, 0x02, 0x75, + 0x0b, 0xad, 0xdc, 0x00, + 0x4c, 0x40, 0x92, 0x6b, + 0x4a, 0xa2, 0x1c, 0x00, + 0x8c, 0x4b, 0xfb, 0x14, + 0x02, 0x91, 0x82, 0xab, + 0x94, 0x1b, 0x8e, 0xb3, + 0xfa, 0x35, 0x85, 0x9d, + 0x91, 0x4b, 0x13, 0x94, + 0x4c, 0x52, 0x8e, 0x45, + 0x0d, 0x0a, 0xf1, 0x84, + 0x08, 0x55, 0xe1, 0xdc, + 0xdc, 0x00, 0x4a, 0x10, + 0x0c, 0x94, 0x1b, 0xa4, + 0x12, 0xc4, 0xe0, 0x88, + 0x16, 0x44, 0x60, 0x88, + 0x14, 0x63, 0xe0, 0x88, + 0x67, 0x01, 0x14, 0xa0, + 0x14, 0x95, 0xc0, 0x09, + 0x0c, 0x65, 0xfc, 0x24, + 0x14, 0xa5, 0xea, 0x20, + 0x52, 0x62, 0xfc, 0x2c, + 0x34, 0x63, 0xf1, 0xa4, + 0xf0, 0x80, 0x12, 0x94, + 0xf0, 0x80, 0x0c, 0x64, + 0x93, 0x6d, 0x13, 0x94, + 0x1c, 0x00, 0x48, 0xc0, + 0x9c, 0x00, 0x4a, 0x10, + 0x01, 0x11, 0x88, 0xcb, + 0x85, 0x6d, 0x81, 0x61, + 0x50, 0x84, 0x48, 0x32, + 0xc4, 0x04, 0x0c, 0x60, + 0x40, 0x00, 0x48, 0x85, + 0xd0, 0x9c, 0x42, 0x12, + 0x42, 0xca, 0xfc, 0xf5, + 0x9b, 0x44, 0xe6, 0x82, + 0xc4, 0x17, 0x92, 0x13, + 0x84, 0x5e, 0x88, 0x13, + 0x88, 0x31, 0x02, 0x91, + 0xe6, 0xb5, 0x81, 0x9d, + 0x02, 0x2a, 0x91, 0x14, + 0x0c, 0x28, 0xe0, 0x10, + 0xc0, 0x00, 0x40, 0x01, + 0xff, 0x31, 0x1b, 0x64, + 0x81, 0xc1, 0x7f, 0x41, + 0x13, 0x6e, 0x8b, 0x75, + 0x7f, 0xb1, 0x8c, 0x5b, + 0x03, 0x45, 0xff, 0x61, + 0x8a, 0x9b, 0x81, 0x11, + 0xfe, 0x1c, 0x12, 0xa5, + 0x19, 0xa4, 0x91, 0xab, + 0xdc, 0x00, 0x46, 0xa0, + 0xdc, 0x00, 0x56, 0x10, + 0xfc, 0x28, 0x0a, 0x55, + 0x48, 0x50, 0x91, 0x5b, + 0x4c, 0x10, 0x5c, 0x00, + 0x02, 0x11, 0xdc, 0x00, + 0x85, 0x1d, 0x92, 0x5b, + 0x91, 0xbb, 0x80, 0xa5, + 0x91, 0x6b, 0xfa, 0x65, + 0x91, 0xbb, 0xfa, 0x25, + 0x91, 0x6b, 0x8c, 0x85, + 0x42, 0x32, 0x8c, 0x45, + 0x02, 0x14, 0xf1, 0x90, + 0x03, 0x0a, 0xf0, 0x80, + 0x86, 0x95, 0xe1, 0xdc, + 0x02, 0xc4, 0x1b, 0x94, + 0x0a, 0xb4, 0xe0, 0x88, + 0x14, 0x64, 0x60, 0x88, + 0x12, 0x13, 0xe0, 0x88, + 0x67, 0x01, 0x12, 0x90, + 0x12, 0x55, 0xc0, 0x09, + 0x02, 0x15, 0xfc, 0x14, + 0x12, 0x95, 0xea, 0x20, + 0x4a, 0x12, 0xfc, 0x28, + 0x32, 0x13, 0xf1, 0x94, + 0xf0, 0x80, 0x0a, 0x54, + 0xf0, 0x80, 0x02, 0x14, + 0x80, 0x95, 0x83, 0x5d, + 0x89, 0x3d, 0x81, 0x85, + 0x9f, 0x14, 0x80, 0xc5, + 0xe6, 0x82, 0x4a, 0x6a, + 0x98, 0x13, 0x01, 0x55, + 0x66, 0x82, 0x42, 0xba, + 0x1b, 0x54, 0x98, 0x5b, + 0xc4, 0x17, 0x8a, 0x13, + 0x84, 0x8e, 0x8a, 0x13, + 0x82, 0xc1, 0x13, 0x64, + 0x9f, 0x54, 0x88, 0x61, + 0x8b, 0xcb, 0x97, 0x14, + 0x42, 0x0a, 0xe8, 0xf5, + 0x81, 0x51, 0x66, 0x86, + 0xc4, 0x17, 0x9b, 0x24, + 0x54, 0x22, 0x0b, 0x85, + 0x19, 0x2e, 0xf0, 0x84, + 0x14, 0x1b, 0x84, 0xbb, + 0x7f, 0xc1, 0xff, 0x21, + 0x81, 0xe5, 0x81, 0x61, + 0x91, 0x9b, 0xed, 0x94, + 0x46, 0x90, 0x45, 0x94, + 0x44, 0x60, 0xdc, 0x00, + 0x91, 0x9b, 0xdc, 0x00, + 0x5c, 0x00, 0x58, 0x60, + 0xdc, 0x00, 0x48, 0x90, + 0x81, 0x6d, 0x82, 0x61, + 0x91, 0x2b, 0x80, 0xa5, + 0x91, 0xcb, 0xfc, 0x05, + 0x91, 0x2b, 0xfa, 0xc5, + 0x91, 0xcb, 0x8c, 0xc5, + 0x42, 0x32, 0x8c, 0x85, + 0x02, 0x14, 0xf1, 0x90, + 0x03, 0x0a, 0xf0, 0x80, + 0x86, 0xd5, 0xe1, 0xdc, + 0x02, 0x54, 0x1b, 0x94, + 0x14, 0xbb, 0xe0, 0x88, + 0xe0, 0x88, 0x0c, 0x24, + 0xe0, 0x88, 0x14, 0xc4, + 0x12, 0x90, 0x12, 0x13, + 0xc0, 0x0a, 0x64, 0x81, + 0xfc, 0x18, 0x12, 0x65, + 0xe9, 0xc0, 0x02, 0x15, + 0x7c, 0x28, 0x12, 0x95, + 0x4c, 0x12, 0x96, 0xab, + 0x32, 0x13, 0xf1, 0x98, + 0xf0, 0x80, 0x0c, 0x64, + 0xf0, 0x80, 0x02, 0x14, + 0x4c, 0xca, 0x01, 0x55, + 0x46, 0xca, 0xe0, 0x04, + 0x17, 0x14, 0xe0, 0x10, + 0xdc, 0x00, 0x58, 0x20, + 0x02, 0x06, 0x9b, 0x24, + 0x8a, 0x13, 0xc0, 0x00, + 0xe6, 0x82, 0x42, 0x1a, + 0xc4, 0x17, 0x98, 0x13, + 0x84, 0x8e, 0x84, 0x13, + 0x82, 0x51, 0x19, 0x24, + 0x8e, 0x23, 0x8e, 0xa3, + 0x83, 0x5b, 0x97, 0x14, + 0x97, 0x24, 0xea, 0x35, + 0x9b, 0xb4, 0x9f, 0x14, + 0xe6, 0x8a, 0x40, 0x0a, + 0x00, 0x13, 0x8f, 0x34, + 0x1d, 0x94, 0xc4, 0x07, + 0x4c, 0xb2, 0xc4, 0x17, + 0x80, 0xb3, 0x70, 0x84, + 0x81, 0x11, 0x09, 0x15, + 0x82, 0xab, 0x15, 0x04, + 0x86, 0x2b, 0x0f, 0x3e, + 0x8c, 0x4b, 0x16, 0x3b, + 0x82, 0x03, 0x1b, 0x14, + 0x67, 0x90, 0x00, 0x00, + 0x81, 0x65, 0x81, 0x51, + 0x88, 0x41, 0x02, 0x51, + 0x88, 0x21, 0x08, 0x31, + 0x9f, 0xc4, 0x88, 0x11, + 0x88, 0x45, 0x99, 0x5d, + 0x93, 0xcb, 0x80, 0xc8, + 0x84, 0xc4, 0xfc, 0xd5, + 0x84, 0x15, 0x91, 0xcb, + 0x5f, 0xfd, 0x3f, 0x28, + 0x88, 0xc4, 0xc3, 0xff, + 0x80, 0xf5, 0x91, 0xcb, + 0x91, 0xcb, 0x8c, 0xc4, + 0x90, 0xc4, 0x80, 0x95, + 0xf8, 0xe5, 0x91, 0xcb, + 0x80, 0x16, 0x89, 0x11, + 0x7c, 0x04, 0x81, 0xd5, + 0x89, 0x24, 0x94, 0x4b, + 0x00, 0x13, 0x8b, 0x34, + 0x95, 0x04, 0xe0, 0x20, + 0xbc, 0x0e, 0xfe, 0x54, + 0x77, 0x58, 0xbe, 0x04, + 0x1b, 0x04, 0xef, 0xf8, + 0x0f, 0x34, 0x94, 0x1b, + 0x17, 0x24, 0x82, 0x11, + 0x0e, 0x03, 0x8e, 0x63, + 0x1b, 0x0e, 0x8e, 0xb3, + 0x85, 0x1b, 0x8e, 0x33, + 0x1e, 0xf0, 0xf0, 0x15, + 0x0c, 0x0c, 0xe5, 0x00, + 0xdd, 0x93, 0xf6, 0x7c, 0xfe, 0x7c, 0x04, 0x0c, 0xec, 0x60, 0x1e, 0xf0, 0x82, 0x9b, 0x00, 0xab, @@ -5463,7 +5753,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x80, 0x42, 0x0a, 0x1f, 0xfd, 0x57, 0xfe, 0x0e, 0x06, 0x40, 0x3f, - 0x7e, 0x38, 0xc0, 0x00, + 0x57, 0x58, 0xc0, 0x00, 0x04, 0x04, 0xef, 0xd4, 0xd0, 0x17, 0x61, 0xe0, 0x45, 0xfe, 0x24, 0x1f, @@ -5480,9 +5770,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xfe, 0x92, 0x2b, 0x43, 0xfe, 0x5f, 0xfc, 0xc0, 0x3f, 0x1f, 0xfc, - 0x6f, 0xd4, 0x72, 0xc8, + 0x6f, 0xd4, 0x4b, 0xe8, 0x12, 0x2b, 0x90, 0x3b, - 0x72, 0x78, 0x90, 0x3b, + 0x4b, 0x98, 0x90, 0x3b, 0x02, 0x3b, 0xef, 0xd4, 0x23, 0xa4, 0x80, 0x2b, 0xe0, 0x28, 0x44, 0x6a, @@ -5495,7 +5785,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xed, 0x80, 0x42, 0x0a, 0x5f, 0xfc, 0x45, 0xfe, 0xc0, 0x04, 0x47, 0xf6, - 0xef, 0xd4, 0x7a, 0x48, + 0xef, 0xd4, 0x53, 0x68, 0x47, 0xfe, 0x3e, 0x24, 0xc0, 0x3f, 0x7f, 0xfd, 0x89, 0xb4, 0xa7, 0x74, @@ -5527,29 +5817,29 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xfe, 0x5f, 0xff, 0xa1, 0x1b, 0xdf, 0xfc, 0x0b, 0x24, 0x82, 0x45, - 0x6c, 0xd8, 0x96, 0x3b, + 0x45, 0xf8, 0x96, 0x3b, 0x01, 0x31, 0xef, 0xd4, - 0x75, 0xf8, 0x8e, 0x2b, + 0x4f, 0x18, 0x8e, 0x2b, 0x81, 0x95, 0xef, 0xd4, 0x8e, 0x2b, 0x01, 0x31, - 0xef, 0xd4, 0x75, 0xa8, + 0xef, 0xd4, 0x4e, 0xc8, 0x96, 0x3b, 0x0b, 0x24, - 0xef, 0xd4, 0x6c, 0x08, + 0xef, 0xd4, 0x45, 0x28, 0x43, 0xfe, 0xa1, 0x1d, 0x5f, 0xff, 0x1f, 0xfd, 0xdf, 0xfc, 0x41, 0xfe, 0x82, 0xe5, 0xa1, 0x1b, 0x96, 0x3b, 0x0b, 0x24, - 0xef, 0xd4, 0x6b, 0x48, + 0xef, 0xd4, 0x44, 0x68, 0x60, 0xf8, 0x04, 0x14, 0x24, 0x0f, 0xc5, 0x07, 0x01, 0x31, 0xc5, 0x17, - 0x74, 0x18, 0x8e, 0x2b, + 0x4d, 0x38, 0x8e, 0x2b, 0x81, 0xe5, 0xef, 0xd4, 0x8e, 0x2b, 0x01, 0x31, - 0xef, 0xd4, 0x73, 0xc8, + 0xef, 0xd4, 0x4c, 0xe8, 0x96, 0x3b, 0x0b, 0x24, - 0xef, 0xd4, 0x6a, 0x28, + 0xef, 0xd4, 0x43, 0x48, 0x60, 0xf8, 0x04, 0x14, 0x24, 0x0f, 0xc5, 0x07, 0x21, 0x1d, 0xc5, 0x17, @@ -5625,24 +5915,25 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf0, 0x7c, 0x0c, 0xcc, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x7c, 0x04, 0x0c, - 0xed, 0x70, 0x1e, 0xf0, - 0x99, 0x5e, 0xbf, 0x74, - 0xa5, 0x3e, 0xa1, 0x4e, - 0xa3, 0x1e, 0xab, 0x2e, - 0x0e, 0x05, 0x9e, 0x14, - 0x1e, 0x85, 0xe0, 0x20, - 0x1e, 0x65, 0xe0, 0x84, - 0xbd, 0x94, 0xe0, 0x80, - 0x82, 0x0b, 0x1f, 0x0e, - 0x45, 0xd8, 0xa9, 0x1e, - 0x1b, 0x0e, 0xe8, 0x14, + 0xed, 0x90, 0x1e, 0xf0, + 0xe0, 0x84, 0x1e, 0x75, + 0xa7, 0x4e, 0x9d, 0x5e, + 0xaf, 0x2e, 0xa1, 0x3e, + 0x9e, 0x14, 0xa9, 0x1e, + 0xe0, 0x20, 0x0e, 0x05, + 0xe0, 0x8c, 0x1e, 0x85, + 0xe0, 0x88, 0x1e, 0x65, + 0xe0, 0x80, 0x1e, 0xa5, + 0x82, 0x0b, 0x25, 0x0e, + 0x47, 0xf8, 0xad, 0x1e, + 0x1f, 0x0e, 0xe8, 0x14, 0x0e, 0x05, 0x83, 0xc1, 0x4c, 0x05, 0xe0, 0x18, 0x0e, 0x09, 0xeb, 0x54, 0xdc, 0x34, 0xe0, 0x58, - 0x00, 0x60, 0x2d, 0x0e, + 0x00, 0x60, 0x31, 0x0e, 0xc0, 0x0b, 0x65, 0x41, - 0x9e, 0x48, 0xa7, 0x0e, + 0x9e, 0x48, 0xab, 0x0e, 0xe0, 0x20, 0x0e, 0x1b, 0x5c, 0x58, 0x9c, 0x28, 0x4c, 0x35, 0xa9, 0xcf, @@ -5654,35 +5945,35 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6d, 0x6d, 0x4c, 0x41, 0x4c, 0x51, 0xc0, 0x02, 0xc0, 0x02, 0x6d, 0x71, - 0xe8, 0x14, 0x49, 0x08, + 0xe8, 0x14, 0x4b, 0x28, 0x60, 0x18, 0x0e, 0x05, - 0x0e, 0x29, 0x80, 0xbb, - 0x90, 0xab, 0x60, 0x4c, - 0xf0, 0x14, 0x54, 0x05, + 0x0e, 0x29, 0x80, 0x9b, + 0x90, 0xbb, 0x60, 0x4c, + 0xf0, 0x14, 0x56, 0x05, 0xe0, 0x48, 0x0e, 0x09, - 0x12, 0x19, 0x97, 0x9e, - 0x81, 0x91, 0x60, 0x34, + 0x14, 0x19, 0x9b, 0xae, + 0x81, 0xa1, 0x60, 0x34, 0xe0, 0x90, 0x0e, 0x39, 0xe0, 0x94, 0x0e, 0x49, - 0x78, 0x18, 0x54, 0x01, + 0x78, 0x18, 0x56, 0x01, 0xe7, 0xf4, 0x03, 0x0a, - 0x78, 0x10, 0x54, 0x31, + 0x78, 0x10, 0x56, 0x31, 0x00, 0x10, 0x81, 0x01, 0x02, 0x70, 0x04, 0x04, - 0x54, 0x41, 0xe4, 0x60, + 0x56, 0x41, 0xe4, 0x60, 0x90, 0x4b, 0x78, 0x0c, - 0xf8, 0x14, 0x54, 0x21, + 0xf8, 0x14, 0x56, 0x21, 0xe0, 0x1c, 0x0e, 0x35, - 0x50, 0x01, 0x9d, 0x1e, + 0x50, 0x01, 0xa3, 0x1e, 0x99, 0x01, 0x60, 0x48, - 0x50, 0x91, 0xa8, 0x06, - 0x50, 0x91, 0xe0, 0x54, - 0xa7, 0x04, 0xe0, 0x58, - 0xad, 0x24, 0xa9, 0x14, - 0xef, 0xe4, 0x6b, 0xe8, + 0x50, 0xa1, 0xac, 0x06, + 0x50, 0xa1, 0xe0, 0x54, + 0xab, 0x04, 0xe0, 0x58, + 0xb1, 0x24, 0xad, 0x14, + 0xef, 0xe0, 0x74, 0x68, 0x8d, 0x51, 0x21, 0x0b, - 0x2b, 0xc4, 0x90, 0xa5, - 0xad, 0x14, 0x80, 0x9b, + 0x2f, 0xc4, 0x90, 0xa5, + 0xb1, 0x14, 0x80, 0xab, 0x64, 0x01, 0x00, 0x60, 0x04, 0x70, 0x40, 0x09, 0x01, 0x65, 0xe4, 0xa0, @@ -5690,12 +5981,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xec, 0x04, 0x06, 0x30, 0xa1, 0x3b, 0xc1, 0x4e, 0x1e, 0x05, 0xfe, 0x75, - 0xa1, 0x9b, 0x60, 0x88, - 0x99, 0x0e, 0x96, 0xf5, + 0xa1, 0xab, 0x60, 0x90, + 0x9d, 0x0e, 0x96, 0xd5, 0xe0, 0xa4, 0x18, 0x09, - 0x12, 0xe5, 0xa1, 0x0b, - 0x84, 0x60, 0x16, 0x80, - 0x64, 0x60, 0x16, 0x80, + 0x12, 0xc5, 0xa1, 0x0b, + 0x84, 0x60, 0x12, 0x80, + 0x64, 0x60, 0x12, 0x80, 0xe4, 0x80, 0x02, 0xc0, 0x64, 0xe0, 0x04, 0xc0, 0xe5, 0xf0, 0x06, 0xc0, @@ -5705,165 +5996,170 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x66, 0x01, 0x0a, 0x60, 0x18, 0x60, 0x40, 0x04, 0xc0, 0x06, 0x67, 0x01, - 0x8d, 0xae, 0x8f, 0xbe, + 0x8d, 0xbe, 0x8f, 0x9e, 0x89, 0x5e, 0x8b, 0xce, 0xfc, 0x6e, 0xfe, 0x4e, - 0xad, 0x04, 0xbe, 0x0e, - 0x9f, 0x54, 0xa1, 0x44, - 0xa3, 0x04, 0xbc, 0x0e, - 0xef, 0xec, 0x69, 0x48, - 0x80, 0x9b, 0x2d, 0x14, - 0xa1, 0x9b, 0x2b, 0xc4, - 0x05, 0xf5, 0x88, 0xc5, - 0xab, 0xc4, 0x95, 0x51, - 0x18, 0x09, 0xa5, 0x24, - 0xa1, 0x0b, 0xe0, 0x70, - 0x18, 0x09, 0xee, 0x25, - 0xa3, 0x0b, 0xe0, 0x74, - 0x1d, 0x04, 0x96, 0xf5, - 0xe4, 0x40, 0x02, 0x20, - 0x99, 0x24, 0xca, 0x54, - 0x00, 0xc0, 0x00, 0x34, - 0xfe, 0x6e, 0xe4, 0x40, - 0xbe, 0x0e, 0xfc, 0x2e, - 0x96, 0x1b, 0x3c, 0x1e, - 0x98, 0xbb, 0x23, 0x04, - 0xad, 0x44, 0x9b, 0x24, - 0xef, 0xdc, 0x4c, 0xa8, - 0x8f, 0x51, 0x21, 0x0b, - 0x00, 0x9b, 0x90, 0x85, - 0xf3, 0xc5, 0x96, 0xcb, - 0x66, 0xf0, 0x00, 0xc0, - 0x7b, 0x38, 0x94, 0x2b, - 0x96, 0x3b, 0x6f, 0xe4, - 0xa1, 0x9b, 0x80, 0x9b, - 0x97, 0x51, 0x82, 0x65, - 0x00, 0x9e, 0x99, 0x04, - 0xe5, 0x70, 0x1e, 0xf0, - 0x92, 0x0b, 0x02, 0x5e, - 0xf2, 0x7c, 0x0c, 0x0c, - 0x21, 0x04, 0xdd, 0x93, - 0xe6, 0x70, 0x02, 0x80, - 0x64, 0x01, 0x04, 0x60, - 0x94, 0x3b, 0x40, 0x09, - 0x00, 0x59, 0x96, 0x4b, - 0xab, 0x04, 0xe0, 0x2c, - 0xa1, 0x1e, 0xfe, 0x1e, - 0xa0, 0x01, 0x2d, 0x14, - 0xbe, 0x2e, 0xfc, 0x6e, - 0x3c, 0x1e, 0x95, 0x2e, - 0x93, 0x0e, 0x8e, 0x1b, - 0x7f, 0x78, 0x9d, 0x24, - 0x19, 0x04, 0xef, 0xe0, - 0x21, 0x9b, 0x80, 0x9b, - 0xf6, 0x95, 0x99, 0x51, - 0x0e, 0x80, 0x1d, 0xbe, - 0xc0, 0x02, 0x64, 0xd1, - 0x94, 0x2b, 0x27, 0x04, - 0x8e, 0x4b, 0x29, 0x14, - 0x64, 0xb8, 0xa1, 0x34, - 0x80, 0x9b, 0xef, 0xe4, - 0x8a, 0xa5, 0xa1, 0x9b, - 0x9d, 0x51, 0x79, 0xc5, - 0x60, 0x70, 0x16, 0x09, - 0xa1, 0x0b, 0x96, 0xcb, - 0x0e, 0x09, 0xd4, 0xe5, - 0x04, 0x60, 0x60, 0x58, - 0xc0, 0x02, 0x65, 0x00, - 0x66, 0x01, 0x06, 0x60, - 0x08, 0x60, 0x40, 0x04, - 0xc0, 0x06, 0x67, 0x01, - 0x68, 0x10, 0x59, 0x48, - 0x21, 0x0b, 0x8c, 0x1b, - 0xd0, 0x95, 0x91, 0x51, - 0xad, 0x14, 0xab, 0xc4, + 0xb1, 0x04, 0xbe, 0x0e, + 0xa5, 0x54, 0xa7, 0x44, + 0xa9, 0x04, 0xbc, 0x0e, + 0xef, 0xe8, 0x72, 0x08, + 0x80, 0xab, 0x31, 0x14, + 0xa1, 0xab, 0x2f, 0xc4, + 0x05, 0xe5, 0x88, 0xa5, + 0xaf, 0xc4, 0x95, 0x51, 0xe0, 0x70, 0x18, 0x09, - 0xd0, 0x25, 0xa1, 0x0b, - 0x04, 0x70, 0x02, 0x0b, - 0x06, 0x60, 0xe4, 0xa0, + 0xee, 0x45, 0xa1, 0x0b, + 0xe0, 0x74, 0x18, 0x09, + 0x96, 0xf5, 0xa3, 0x0b, + 0xa1, 0x14, 0xa3, 0x04, + 0x00, 0x34, 0x9d, 0x24, + 0xe4, 0x40, 0x00, 0xc0, + 0xa0, 0x11, 0x46, 0x54, + 0xfc, 0x2e, 0xfe, 0x6e, + 0x3c, 0x1e, 0xbe, 0x0e, + 0x29, 0x04, 0x92, 0x1b, + 0x9f, 0x24, 0x98, 0x9b, + 0x65, 0xb8, 0xb1, 0x44, + 0x21, 0x0b, 0xef, 0xd8, + 0x90, 0x85, 0x8f, 0x51, + 0x92, 0xcb, 0x00, 0xab, + 0x00, 0xc0, 0xf3, 0xd5, + 0x96, 0x2b, 0x66, 0xf0, + 0x6f, 0xe4, 0x43, 0xc8, + 0x80, 0xab, 0x92, 0x3b, + 0x82, 0x65, 0xa1, 0xab, + 0x9d, 0x04, 0x97, 0x51, + 0x1e, 0xf0, 0x00, 0xae, + 0x02, 0x5e, 0xe5, 0x90, + 0x0c, 0x0c, 0x94, 0x0b, + 0xdd, 0x93, 0xf2, 0x7c, + 0x02, 0x80, 0x27, 0x04, + 0x04, 0x60, 0xe6, 0x70, 0x40, 0x09, 0x64, 0x01, - 0x65, 0xf8, 0x8c, 0x1b, - 0x2d, 0x14, 0xef, 0xfc, - 0x2b, 0xc4, 0x80, 0x9b, - 0xe9, 0x05, 0x93, 0x51, - 0x04, 0x80, 0x29, 0x7e, - 0xc0, 0x01, 0x66, 0x31, - 0x95, 0xb4, 0x9f, 0x74, - 0x27, 0x2e, 0xfc, 0x2e, - 0xe4, 0x40, 0x00, 0x70, - 0x02, 0x04, 0x3e, 0xbe, - 0x77, 0x17, 0xe1, 0x7c, - 0x1d, 0x34, 0x94, 0x2b, - 0x2b, 0x04, 0x82, 0x03, - 0xe1, 0x14, 0x0a, 0x04, - 0x8e, 0x4b, 0x11, 0x5e, - 0x02, 0x00, 0x2d, 0x04, - 0xbc, 0x0e, 0xe7, 0x00, - 0x47, 0x58, 0xa3, 0x04, - 0x80, 0x9b, 0xe8, 0x04, - 0x60, 0x35, 0xa1, 0x9b, - 0xc0, 0x00, 0x0a, 0xf6, - 0x94, 0x3b, 0x2b, 0x04, - 0xad, 0x24, 0xa9, 0x14, - 0xe3, 0x04, 0x00, 0x09, - 0xa7, 0x14, 0x8f, 0x1e, - 0x8d, 0x1e, 0x9d, 0x44, - 0xa5, 0x14, 0x8b, 0x6e, - 0xfe, 0x2e, 0x89, 0xbe, - 0xb0, 0x11, 0x11, 0x24, - 0xfc, 0x2e, 0x9b, 0x64, - 0x8c, 0x5b, 0x3e, 0x7e, - 0xa3, 0x04, 0xbc, 0x0e, - 0x43, 0x18, 0x93, 0x24, - 0x80, 0x9b, 0xef, 0xe4, - 0x58, 0x75, 0xa1, 0x9b, - 0xc0, 0x00, 0x0b, 0x46, - 0x8c, 0x2b, 0x2b, 0x04, - 0x94, 0x3b, 0x25, 0x14, - 0x29, 0x74, 0xa7, 0x64, - 0xe7, 0x10, 0x00, 0x00, - 0x8c, 0x4b, 0xa0, 0x11, - 0x6f, 0xe4, 0x50, 0x68, - 0x00, 0x9b, 0x8e, 0x5b, - 0xa1, 0x9b, 0x8c, 0xbb, - 0x0b, 0xc6, 0x54, 0x15, - 0x2b, 0x04, 0xc0, 0x00, - 0x64, 0x91, 0x0c, 0x80, - 0x25, 0x14, 0xc0, 0x03, - 0x0e, 0x3b, 0x94, 0x2b, - 0x00, 0x00, 0x8c, 0x4b, - 0x6f, 0x98, 0xe7, 0x20, - 0xb8, 0x11, 0x6f, 0xf8, - 0xa1, 0x9b, 0x80, 0x9b, - 0x0b, 0xd6, 0x4e, 0xd5, - 0x25, 0x04, 0xc0, 0x00, - 0x0e, 0x2b, 0x94, 0x1b, - 0x4c, 0x38, 0x8c, 0x3b, - 0x80, 0x9b, 0xe8, 0x04, - 0x4c, 0x75, 0xa1, 0x9b, + 0x92, 0x4b, 0x96, 0x3b, + 0xe0, 0x2c, 0x00, 0x59, + 0xfe, 0x1e, 0xaf, 0x04, + 0x31, 0x14, 0xa7, 0x1e, + 0xfc, 0x6e, 0xa0, 0x01, + 0x99, 0x2e, 0xbe, 0x2e, + 0x8e, 0x1b, 0x3c, 0x1e, + 0xa3, 0x24, 0x97, 0x0e, + 0xef, 0xe0, 0x48, 0x08, + 0x80, 0xab, 0x1d, 0x04, + 0x99, 0x51, 0x21, 0xab, + 0x23, 0x9e, 0xf6, 0x95, + 0x64, 0xd1, 0x0e, 0x80, + 0x2b, 0x04, 0xc0, 0x02, + 0x2d, 0x14, 0x96, 0x2b, + 0xa7, 0x34, 0x8e, 0x4b, + 0xef, 0xe0, 0x6d, 0x48, + 0xa1, 0xab, 0x80, 0xab, + 0x79, 0xc5, 0x8a, 0xa5, + 0x12, 0x09, 0x9d, 0x51, + 0x92, 0xcb, 0x60, 0x70, + 0xd6, 0x05, 0xa1, 0x0b, + 0x60, 0x58, 0x0e, 0x09, + 0x65, 0x00, 0x04, 0x60, + 0x06, 0x60, 0xc0, 0x02, + 0x40, 0x04, 0x66, 0x01, + 0x67, 0x01, 0x08, 0x60, + 0x5b, 0x78, 0xc0, 0x06, + 0x8c, 0x1b, 0x68, 0x10, + 0x91, 0x51, 0x21, 0x0b, + 0xaf, 0xc4, 0xd0, 0xb5, + 0x18, 0x09, 0xb1, 0x14, + 0xa1, 0x0b, 0xe0, 0x70, + 0x02, 0x0b, 0xd0, 0x45, + 0xe4, 0xa0, 0x04, 0x70, + 0x64, 0x01, 0x06, 0x60, + 0x8c, 0x1b, 0x40, 0x09, + 0xef, 0xfc, 0x65, 0xe8, + 0x80, 0xab, 0x31, 0x14, + 0x93, 0x51, 0x2f, 0xc4, + 0x2d, 0x7e, 0xe9, 0x15, + 0x66, 0x31, 0x04, 0x80, + 0xa5, 0x74, 0xc0, 0x01, + 0xfc, 0x2e, 0x99, 0x94, + 0x00, 0x70, 0x2b, 0x2e, + 0x3e, 0x9e, 0xe4, 0x40, + 0xe1, 0x7c, 0x02, 0x04, + 0x96, 0x2b, 0x77, 0x17, + 0x82, 0x03, 0x23, 0x34, + 0x0a, 0x04, 0x2f, 0x04, + 0x15, 0x5e, 0xe1, 0x14, + 0x31, 0x04, 0x8e, 0x4b, + 0xe7, 0x00, 0x02, 0x00, + 0xa9, 0x04, 0xbc, 0x0e, + 0xe8, 0x04, 0x48, 0x08, + 0xa1, 0xab, 0x80, 0xab, + 0x0a, 0xf6, 0x60, 0x35, + 0x2f, 0x04, 0xc0, 0x00, + 0xad, 0x24, 0x96, 0x3b, + 0x00, 0x09, 0xa1, 0x14, + 0x8f, 0x2e, 0xe3, 0x04, + 0xb0, 0x11, 0x2b, 0x24, + 0x8d, 0x2e, 0xa3, 0x44, + 0x8b, 0x6e, 0xb1, 0x24, + 0xfe, 0x2e, 0x89, 0x9e, + 0x9f, 0x64, 0x95, 0x24, + 0x3e, 0x7e, 0xfc, 0x2e, + 0xbc, 0x0e, 0x8c, 0x5b, + 0x97, 0x24, 0xa9, 0x04, + 0xef, 0xe0, 0x4b, 0xa8, + 0xa1, 0xab, 0x80, 0xab, + 0x0b, 0x46, 0x58, 0x75, + 0x2f, 0x04, 0xc0, 0x00, + 0x21, 0x74, 0x8c, 0x2b, + 0xab, 0x64, 0x96, 0x3b, + 0x00, 0x00, 0x2d, 0x94, + 0x02, 0x70, 0xe7, 0x10, + 0x8c, 0x4b, 0xe4, 0x40, + 0x6f, 0xe0, 0x58, 0xe8, + 0x00, 0xab, 0x92, 0x5b, + 0x21, 0xab, 0x8e, 0x2b, + 0x52, 0xd5, 0x92, 0x7b, + 0xc0, 0x00, 0x0b, 0xc6, + 0x08, 0x80, 0x2f, 0x04, + 0xc0, 0x03, 0x64, 0x91, + 0x64, 0x70, 0x02, 0x20, + 0x16, 0x2b, 0x84, 0x9b, + 0x25, 0x4e, 0x8e, 0x3b, + 0xe7, 0x20, 0x00, 0x00, + 0xef, 0xf4, 0x78, 0x28, + 0xa1, 0xab, 0x80, 0xab, + 0x0b, 0xd6, 0x4e, 0x75, + 0x12, 0x0b, 0xc0, 0x00, + 0x25, 0x34, 0x96, 0x1b, + 0x4c, 0xb8, 0x8e, 0x2b, + 0x80, 0xab, 0xe8, 0x04, + 0x4c, 0x15, 0xa1, 0xab, 0xc0, 0x00, 0x0b, 0xe6, - 0xa5, 0x14, 0xab, 0x74, - 0x17, 0x54, 0xa1, 0xc4, - 0xe7, 0x30, 0x00, 0x70, - 0xe0, 0x10, 0x02, 0x45, - 0xe1, 0x88, 0x0e, 0x3b, - 0x63, 0x20, 0x0e, 0x19, - 0xe4, 0x40, 0x04, 0x50, - 0x89, 0xbe, 0x8b, 0x6e, - 0x9d, 0xc4, 0xfe, 0xce, - 0xbe, 0xae, 0xfc, 0xce, - 0x9b, 0x24, 0xbc, 0x2e, - 0xef, 0xf8, 0x7b, 0x88, - 0xa1, 0x9b, 0x80, 0x9b, - 0x0b, 0xf6, 0x44, 0xd5, - 0x0e, 0x19, 0xc0, 0x00, - 0x08, 0x80, 0x63, 0x80, - 0xc0, 0x04, 0x64, 0x50, - 0x94, 0x2b, 0x23, 0x04, - 0x6f, 0xfc, 0x5d, 0x48, - 0x00, 0x9b, 0x8c, 0x3b, - 0xe0, 0x00, 0x4a, 0x06, - 0xc1, 0xc3, 0xe1, 0x65, + 0x12, 0x15, 0xaf, 0x74, + 0x12, 0x2b, 0xe0, 0x10, + 0xa9, 0x94, 0xe0, 0x3c, + 0x0e, 0x0b, 0xb1, 0x44, + 0x0e, 0x39, 0xe1, 0x88, + 0x91, 0x9e, 0xe3, 0x20, + 0x8d, 0x2e, 0x8f, 0x4e, + 0x9f, 0x14, 0x8b, 0x1e, + 0x00, 0x70, 0x09, 0x0e, + 0xa3, 0x44, 0xe7, 0x30, + 0x9b, 0x14, 0xfe, 0x1e, + 0xa5, 0x34, 0xfc, 0x3e, + 0x04, 0x10, 0x27, 0x54, + 0x3e, 0x3e, 0xe4, 0x40, + 0xbc, 0x6e, 0x96, 0x3b, + 0xef, 0xf8, 0x43, 0xa8, + 0xa1, 0xab, 0x80, 0xab, + 0x5f, 0xfc, 0x30, 0xb8, + 0xc0, 0x00, 0x0b, 0xf6, + 0x63, 0x80, 0x0e, 0x19, + 0x64, 0x50, 0x08, 0x80, + 0x12, 0x0b, 0xc0, 0x04, + 0xa5, 0x34, 0x96, 0x2b, + 0xef, 0xfc, 0x5c, 0x68, + 0x4a, 0x06, 0x00, 0xab, + 0xdf, 0xa5, 0xe0, 0x00, 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0x30, 0x1e, 0xf0, 0x82, 0xab, 0x19, 0x14, @@ -5879,38 +6175,38 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x25, 0xad, 0x0b, 0xaf, 0x0b, 0x7c, 0xb4, 0x10, 0x0b, 0x9a, 0x15, - 0x49, 0x98, 0x8e, 0x1b, - 0xa3, 0x0d, 0xef, 0xdc, + 0x61, 0xf8, 0x8e, 0x1b, + 0xa3, 0x0d, 0xef, 0xd8, 0x8d, 0x15, 0x8c, 0x25, 0x8e, 0x45, 0xa5, 0x0b, 0xa7, 0x0b, 0x7c, 0xb4, 0x02, 0x60, 0x96, 0x95, 0x90, 0x0b, 0x64, 0x20, - 0x6f, 0xdc, 0x79, 0x48, + 0x6f, 0xdc, 0x41, 0x08, 0xa3, 0x0d, 0x8e, 0x2b, 0x8b, 0x35, 0x82, 0x25, 0x8e, 0x1b, 0x10, 0x0b, - 0xef, 0xdc, 0x48, 0x48, + 0xef, 0xd8, 0x60, 0xa8, 0xa3, 0x0d, 0x7c, 0xb4, 0x3e, 0x64, 0x92, 0x95, 0x8e, 0x1b, 0x90, 0x0b, - 0x6f, 0xdc, 0x49, 0x48, + 0x6f, 0xd8, 0x61, 0xa8, 0x10, 0x0b, 0x8c, 0x2b, - 0x51, 0x58, 0x8e, 0x1b, - 0x8c, 0x2b, 0x6f, 0xdc, + 0x69, 0xb8, 0x8e, 0x1b, + 0x8c, 0x2b, 0x6f, 0xd8, 0x92, 0x1b, 0x14, 0x0b, - 0x6f, 0xdc, 0x55, 0x08, + 0x6f, 0xd8, 0x6d, 0x68, 0x87, 0xb5, 0x8c, 0x2b, 0x64, 0x20, 0x02, 0x60, - 0x77, 0x38, 0x90, 0x0b, - 0x8e, 0x2b, 0x6f, 0xdc, + 0x7e, 0xf8, 0x90, 0x0b, + 0x8e, 0x2b, 0x6f, 0xd8, 0xa3, 0x0d, 0x7c, 0xb4, 0x3e, 0x64, 0x8c, 0x55, 0x8e, 0x1b, 0x90, 0x0b, - 0x6f, 0xdc, 0x47, 0xa8, + 0x6f, 0xd8, 0x60, 0x08, 0x10, 0x0b, 0x8c, 0x2b, - 0x52, 0x18, 0x8e, 0x1b, - 0x8c, 0x2b, 0x6f, 0xdc, + 0x6a, 0x78, 0x8e, 0x1b, + 0x8c, 0x2b, 0x6f, 0xd8, 0x0e, 0x09, 0x85, 0x65, 0xc0, 0x05, 0x6f, 0xd1, 0x84, 0xe5, 0xa1, 0x0b, @@ -5925,11 +6221,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x58, 0x56, 0x21, 0xe0, 0x5c, 0x56, 0x31, 0xe0, 0x30, 0x56, 0x43, - 0x6f, 0xdc, 0x42, 0xe8, + 0x6f, 0xd8, 0x5b, 0x48, 0x7c, 0xb4, 0x8e, 0x0b, 0x80, 0xb5, 0xa3, 0x0d, 0x8e, 0x0b, 0x3e, 0x14, - 0xef, 0xdc, 0x4a, 0xe8, + 0xef, 0xd8, 0x63, 0x48, 0x98, 0xf1, 0x01, 0x01, 0x40, 0x16, 0x2c, 0x0e, 0x2e, 0x0e, 0xe0, 0x00, @@ -5939,10 +6235,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x6b, 0x02, 0x8b, 0x86, 0x7b, 0x60, 0x28, 0xa0, 0x08, 0xa2, 0x18, - 0xe8, 0x10, 0x60, 0xe8, + 0xe8, 0x10, 0x62, 0x68, 0x60, 0x58, 0x10, 0x19, 0xa2, 0x04, 0x80, 0x2b, - 0x64, 0xf8, 0xe0, 0x34, + 0x66, 0x78, 0xe0, 0x34, 0xc8, 0x17, 0x68, 0x10, 0xe0, 0x44, 0x0c, 0x19, 0x9c, 0x55, 0xa5, 0x1b, @@ -6079,7 +6375,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8d, 0x1e, 0xae, 0x04, 0xaf, 0x74, 0xa5, 0x14, 0xfe, 0x1e, 0xa7, 0x94, - 0x4e, 0x38, 0x8f, 0x8e, + 0x4f, 0xb8, 0x8f, 0x8e, 0x16, 0x39, 0xe8, 0x10, 0x98, 0x1a, 0xe0, 0x94, 0xa5, 0x3b, 0x9a, 0x2a, @@ -6162,7 +6458,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x8b, 0x0b, 0x64, 0x8b, 0x91, 0x0d, 0x14, 0x02, 0x1b, 0x89, 0x04, - 0x7c, 0x38, 0xe1, 0xa8, + 0x44, 0x18, 0xe1, 0xa8, 0x4c, 0x03, 0xef, 0xe0, 0x90, 0x0b, 0x60, 0x18, 0xc8, 0xf1, 0x1c, 0x8e, @@ -6178,7 +6474,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x3b, 0x06, 0x6b, 0x44, 0x06, 0x02, 0x7b, 0x0c, 0x0b, 0xe0, 0x00, - 0x7f, 0x58, 0x86, 0x1b, + 0x57, 0xb8, 0x86, 0x1b, 0xa6, 0x7d, 0xef, 0xd0, 0xa9, 0x7b, 0x82, 0x25, 0xad, 0x7b, 0x80, 0xa5, @@ -6203,7 +6499,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x7b, 0x06, 0x6b, 0x44, 0x46, 0x02, 0x8b, 0x0c, 0x0b, 0xe0, 0x0c, - 0x7c, 0x38, 0x8e, 0x1b, + 0x54, 0x98, 0x8e, 0x1b, 0xad, 0x8b, 0xef, 0xd0, 0xe0, 0x0c, 0x10, 0x1a, 0xed, 0x80, 0x42, 0x0a, @@ -6215,7 +6511,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x60, 0x70, 0x4c, 0x21, 0xe4, 0xb0, 0x02, 0x70, 0x0c, 0x0c, 0x99, 0x21, - 0x3a, 0xb8, 0xf2, 0x0c, + 0x13, 0x18, 0xf2, 0x0c, 0x0c, 0x0c, 0xff, 0xd0, 0xdd, 0x93, 0xf2, 0x0c, 0xf8, 0x3c, 0x04, 0x4c, @@ -6324,8 +6620,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x02, 0x6f, 0xe9, 0x60, 0x2d, 0x46, 0x51, 0x0c, 0x0c, 0xc0, 0x06, - 0x0b, 0xd8, 0xf0, 0x8c, - 0xc1, 0xc3, 0xff, 0xd8, + 0x24, 0x38, 0xf0, 0x8c, + 0xc1, 0xc3, 0xff, 0xd4, 0xf8, 0x1c, 0x04, 0x0c, 0xe0, 0x18, 0x00, 0x79, 0xe0, 0x28, 0x00, 0x39, @@ -6396,8 +6692,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x78, 0x90, 0x16, 0x03, 0xac, 0x12, 0x94, 0x5b, 0xa7, 0x34, 0xa5, 0x24, - 0x6b, 0x18, 0xa3, 0x44, - 0xa1, 0x0b, 0xef, 0xe0, + 0x72, 0xf8, 0xa3, 0x44, + 0xa1, 0x0b, 0xef, 0xdc, 0xa1, 0x34, 0x94, 0xf5, 0x16, 0x03, 0x9d, 0x44, 0xac, 0x12, 0xf8, 0x90, @@ -6408,8 +6704,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x99, 0x44, 0xfe, 0x4e, 0x9b, 0x44, 0xfc, 0x4e, 0xbc, 0xae, 0xbe, 0x4e, - 0x6c, 0x58, 0xa5, 0x44, - 0xa1, 0x0b, 0xef, 0xe0, + 0x74, 0x38, 0xa5, 0x44, + 0xa1, 0x0b, 0xef, 0xdc, 0x93, 0x44, 0x8e, 0xf5, 0x16, 0x03, 0xa1, 0x34, 0x2c, 0x12, 0xf8, 0x90, @@ -6423,8 +6719,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa7, 0x54, 0x91, 0x5e, 0x9f, 0x44, 0xfc, 0x4e, 0xbc, 0xae, 0xbe, 0x4e, - 0x71, 0x98, 0x95, 0x44, - 0xa1, 0x0b, 0xef, 0xe0, + 0x79, 0x78, 0x95, 0x44, + 0xa1, 0x0b, 0xef, 0xdc, 0xa9, 0x04, 0x88, 0x35, 0x11, 0x04, 0x8f, 0xc4, 0x00, 0x34, 0xa3, 0x0b, @@ -6440,8 +6736,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfe, 0xce, 0xa7, 0x44, 0xbe, 0x4e, 0xfc, 0xae, 0x3c, 0x4e, 0x95, 0x44, - 0x64, 0x18, 0x83, 0x41, - 0x02, 0x71, 0xef, 0xdc, + 0x6b, 0xd8, 0x83, 0x41, + 0x02, 0x71, 0xef, 0xd8, 0x04, 0xb1, 0x88, 0x91, 0xa2, 0x18, 0x84, 0x61, 0xe4, 0xf5, 0x83, 0x7d, @@ -6536,7 +6832,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa5, 0x3f, 0x8c, 0x03, 0xf2, 0x84, 0x42, 0x32, 0xfe, 0x34, 0x89, 0x24, - 0xef, 0xcc, 0x6e, 0xc8, + 0xef, 0xcc, 0x47, 0x28, 0x00, 0x70, 0x00, 0x2b, 0x08, 0x70, 0xe4, 0x2c, 0x01, 0x0a, 0x6c, 0x54, @@ -6593,7 +6889,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x42, 0x22, 0x07, 0x55, 0x04, 0x0b, 0xf2, 0x84, 0xbe, 0x24, 0x81, 0x31, - 0xef, 0xcc, 0x71, 0x08, + 0xef, 0xcc, 0x49, 0x68, 0x64, 0x08, 0x06, 0x70, 0x07, 0x0a, 0x81, 0x21, 0x01, 0xe5, 0xe4, 0x7c, @@ -6616,7 +6912,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x08, 0x42, 0x38, 0x2f, 0x29, 0x2f, 0xec, 0x04, 0x42, 0x12, 0x8a, 0x03, - 0x74, 0x18, 0xf2, 0x88, + 0x4c, 0x78, 0xf2, 0x88, 0x04, 0x70, 0x6f, 0xcc, 0x00, 0x8a, 0xe4, 0x0c, 0x41, 0xf6, 0xe7, 0xfc, @@ -6688,11 +6984,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x1f, 0x04, 0x8c, 0x1b, 0x09, 0x5e, 0x94, 0x2b, 0x0b, 0x0e, 0x86, 0x8b, - 0x6b, 0x18, 0x98, 0x0b, + 0x43, 0x78, 0x98, 0x0b, 0x00, 0x7b, 0xef, 0xcc, 0x7f, 0x01, 0x82, 0xbb, 0x7c, 0xae, 0xff, 0x11, - 0x6a, 0x98, 0x94, 0x2b, + 0x42, 0xf8, 0x94, 0x2b, 0x09, 0xa4, 0xef, 0xcc, 0xe1, 0x7c, 0x04, 0x64, 0x78, 0x88, 0x40, 0x02, @@ -6708,7 +7004,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf0, 0x84, 0x40, 0xb2, 0x72, 0x84, 0x44, 0x72, 0x44, 0x1f, 0xc2, 0x0f, - 0x68, 0x98, 0x90, 0x2b, + 0x40, 0xf8, 0x90, 0x2b, 0x21, 0x1b, 0xef, 0xcc, 0x00, 0x14, 0xbf, 0xc1, 0x81, 0x11, 0x56, 0x80, @@ -6749,7 +7045,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe8, 0x90, 0x00, 0x54, 0x7c, 0x7c, 0x02, 0x14, 0xf1, 0x88, 0x44, 0x32, - 0xef, 0xcc, 0x63, 0x88, + 0xef, 0xc8, 0x7b, 0xe8, 0x03, 0xd5, 0x90, 0x03, 0xf2, 0x9c, 0x42, 0x12, 0xff, 0x01, 0x23, 0x8d, @@ -6790,14 +7086,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x86, 0xa3, 0x6c, 0x04, 0x68, 0x84, 0x02, 0x04, 0xe8, 0x90, 0x00, 0xc4, - 0x6f, 0xcc, 0x42, 0xa8, + 0x6f, 0xc8, 0x5b, 0x08, 0x81, 0x81, 0x81, 0x31, 0xff, 0x21, 0x34, 0x93, 0x84, 0x9d, 0x1e, 0x1e, 0x82, 0x85, 0x9c, 0x0e, 0x12, 0x8a, 0x18, 0x9e, 0x8a, 0x55, 0xe0, 0xfc, - 0x6f, 0xcc, 0x5b, 0xc8, + 0x6f, 0xc8, 0x74, 0x28, 0xec, 0xf8, 0x04, 0x90, 0x51, 0xe6, 0x05, 0x25, 0x32, 0x2b, 0xe0, 0x00, @@ -6872,8 +7168,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x52, 0x72, 0x84, 0xbb, 0x50, 0x9f, 0xf2, 0xa0, 0x10, 0x0b, 0xc0, 0x8f, - 0x54, 0x18, 0x92, 0x1b, - 0xa1, 0x1b, 0xef, 0xcc, + 0x6c, 0x78, 0x92, 0x1b, + 0xa1, 0x1b, 0xef, 0xc8, 0xd6, 0x80, 0x00, 0x14, 0x9c, 0x04, 0x40, 0x00, 0x96, 0x80, 0x00, 0x04, @@ -6954,7 +7250,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x26, 0x93, 0xec, 0x04, 0xe8, 0x94, 0x14, 0xc4, 0x92, 0x2b, 0x29, 0x8f, - 0xef, 0xcc, 0x49, 0xe8, + 0xef, 0xc8, 0x62, 0x48, 0xb4, 0x1f, 0x0f, 0x24, 0x81, 0xa1, 0x30, 0x0f, 0x01, 0xe5, 0x84, 0xb3, @@ -6970,8 +7266,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xfe, 0x5f, 0xff, 0x04, 0x8a, 0xdf, 0xfc, 0xff, 0x81, 0x60, 0xfc, - 0x47, 0xd8, 0x80, 0xf5, - 0x04, 0x20, 0x6f, 0xcc, + 0x60, 0x38, 0x80, 0xf5, + 0x04, 0x20, 0x6f, 0xc8, 0x45, 0xe6, 0xec, 0xf8, 0x4e, 0x6f, 0xe0, 0x00, 0xf1, 0x80, 0x48, 0xa2, @@ -6987,7 +7283,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x7b, 0x02, 0x6b, 0x81, 0x11, 0x58, 0x04, 0x6b, 0xc8, 0x04, 0xf6, - 0x7f, 0xb8, 0x81, 0x31, + 0x58, 0x18, 0x81, 0x31, 0x04, 0x04, 0xef, 0xc8, 0xc2, 0x17, 0x61, 0xfc, 0x7c, 0x7c, 0x00, 0x04, @@ -7088,7 +7384,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x71, 0x23, 0x0b, 0xc4, 0x27, 0x81, 0x11, 0x90, 0x88, 0x4c, 0x62, - 0x6f, 0xcc, 0x53, 0xa8, + 0x6f, 0xc8, 0x6c, 0x08, 0x98, 0x7e, 0x8c, 0x0b, 0xf2, 0x04, 0x0c, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, @@ -7364,8 +7660,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x1e, 0x85, 0xe0, 0xbc, 0x1e, 0xa5, 0xe0, 0xb8, 0x96, 0x1b, 0xe0, 0xd0, - 0x54, 0xd8, 0x90, 0x0b, - 0x94, 0x2b, 0x6f, 0xc8, + 0x6d, 0x38, 0x90, 0x0b, + 0x94, 0x2b, 0x6f, 0xc4, 0xe0, 0x00, 0x02, 0xca, 0xe0, 0x00, 0x02, 0x1a, 0x67, 0x05, 0x00, 0xea, @@ -7452,8 +7748,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xae, 0x83, 0x68, 0x9c, 0x82, 0xa5, 0xa5, 0x5e, 0x71, 0x98, 0x44, 0x92, - 0x49, 0xd8, 0x88, 0x0b, - 0x86, 0x1b, 0x6f, 0xc8, + 0x62, 0x38, 0x88, 0x0b, + 0x86, 0x1b, 0x6f, 0xc4, 0x82, 0x3b, 0x00, 0x4b, 0x8c, 0x9b, 0x3d, 0x4e, 0xbb, 0x6e, 0xbf, 0x3e, @@ -7461,7 +7757,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x14, 0x82, 0x02, 0xf5, 0x04, 0x90, 0xec, 0x04, 0x88, 0x0b, 0x6c, 0x28, - 0x6f, 0xc8, 0x48, 0xc8, + 0x6f, 0xc4, 0x61, 0x28, 0x00, 0x4b, 0x86, 0x1b, 0x3d, 0x4e, 0x95, 0x91, 0xbf, 0x3e, 0x82, 0x3b, @@ -7473,7 +7769,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x41, 0x01, 0x21, 0x83, 0x21, 0x3f, 0x2e, 0x81, 0x31, 0x3d, 0x2e, - 0x6f, 0xc4, 0x6d, 0x48, + 0x6f, 0xc4, 0x45, 0xa8, 0x3f, 0x1e, 0x88, 0x2b, 0x1e, 0x15, 0xb2, 0x63, 0x0e, 0xf0, 0x60, 0x9c, @@ -7514,8 +7810,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x1b, 0x00, 0x8c, 0x00, 0x88, 0x5e, 0x75, 0x12, 0x06, 0x90, 0x2b, - 0x42, 0x18, 0x80, 0x00, - 0x92, 0x0b, 0x6f, 0xc8, + 0x5a, 0x78, 0x80, 0x00, + 0x92, 0x0b, 0x6f, 0xc4, 0xe0, 0x00, 0x02, 0xca, 0xe0, 0x00, 0x02, 0x1a, 0x64, 0x01, 0x00, 0xea, @@ -7530,7 +7826,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x44, 0x10, 0x8a, 0x04, 0x80, 0x82, 0xf5, 0x92, 0x0b, 0x6c, 0x40, - 0x6f, 0xc8, 0x40, 0x28, + 0x6f, 0xc4, 0x58, 0x88, 0x81, 0xa1, 0x8c, 0x1b, 0xe0, 0x8c, 0x5e, 0x15, 0xe0, 0x88, 0x5e, 0x05, @@ -7655,116 +7951,125 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfd, 0x45, 0xf4, 0xa5, 0xfa, 0x7c, 0x04, 0x0c, 0xed, 0xf0, 0x1e, 0xf0, - 0x60, 0x98, 0x1e, 0x45, - 0x25, 0x0e, 0x88, 0xbb, - 0x1e, 0x95, 0x82, 0x8b, - 0xa7, 0x4e, 0xe0, 0xa8, - 0xe0, 0x90, 0x08, 0x19, - 0x02, 0x61, 0x80, 0x13, - 0x81, 0x11, 0x60, 0x70, - 0x52, 0x15, 0xa4, 0x1e, - 0x00, 0x19, 0xe0, 0x10, - 0xe2, 0x24, 0xe0, 0x48, - 0x00, 0x19, 0xab, 0x1e, - 0x44, 0x0a, 0x60, 0x4c, - 0xa9, 0x1e, 0xe0, 0x80, - 0xe0, 0x50, 0x00, 0xa9, - 0x97, 0x5e, 0xd2, 0x78, - 0x82, 0xe5, 0xa3, 0x3e, - 0x44, 0x1a, 0x20, 0x14, - 0xa1, 0x1b, 0xe0, 0x84, - 0xe2, 0x00, 0x02, 0x0c, - 0x00, 0x78, 0xa0, 0x1e, - 0x01, 0x01, 0xa0, 0x00, - 0x74, 0xd8, 0x90, 0x1b, - 0xe2, 0x24, 0xef, 0xf8, - 0xe0, 0x88, 0x44, 0x0a, - 0x40, 0x00, 0x00, 0x16, - 0xdc, 0x00, 0x42, 0x80, - 0xcf, 0xf8, 0x74, 0x48, - 0x65, 0x60, 0x00, 0xf0, - 0xe5, 0xd0, 0x0a, 0xf0, - 0x00, 0xf0, 0x0d, 0x0e, - 0x0b, 0x0e, 0xe5, 0x90, - 0xe5, 0x70, 0x00, 0xf0, - 0x00, 0xf0, 0x09, 0x0e, - 0x7e, 0x0e, 0xe5, 0xa0, - 0xe5, 0x80, 0x00, 0xf0, - 0x00, 0xf0, 0x7c, 0x0e, - 0x3e, 0x0e, 0xe5, 0xb0, - 0xe5, 0xc0, 0x00, 0xf0, - 0x83, 0x21, 0x3c, 0x0e, - 0x94, 0x0b, 0x29, 0x14, - 0x90, 0x4b, 0x0c, 0x3b, - 0xef, 0xf8, 0x52, 0x68, - 0x81, 0x11, 0x62, 0x04, - 0x40, 0x0a, 0xe1, 0x21, - 0x1e, 0x05, 0xe0, 0x8c, - 0x40, 0x15, 0xc0, 0x74, - 0xa7, 0x34, 0xc0, 0x00, - 0xc0, 0x0c, 0x10, 0x05, - 0xe0, 0x94, 0x06, 0x19, - 0xe2, 0x0e, 0x84, 0x0f, - 0xc8, 0x19, 0x25, 0x54, - 0xab, 0x1b, 0x2b, 0x24, - 0xc0, 0x00, 0x1e, 0x58, - 0xa1, 0x6d, 0x15, 0x8e, - 0xc0, 0x00, 0x1a, 0x78, - 0x80, 0x04, 0xbb, 0x04, - 0x1d, 0xc8, 0xa5, 0x0b, - 0x1e, 0x05, 0x80, 0x00, - 0x96, 0x4b, 0x60, 0xa0, - 0x16, 0x74, 0x14, 0x14, - 0x14, 0xb0, 0xe0, 0x90, - 0x00, 0x05, 0xe4, 0x40, - 0x02, 0x03, 0xe0, 0x10, - 0x06, 0x15, 0xff, 0x11, - 0x82, 0x0d, 0x60, 0x18, - 0xc1, 0xac, 0x00, 0x04, - 0x41, 0x2a, 0x4e, 0x0a, - 0x91, 0x80, 0x00, 0x04, - 0x01, 0xac, 0x00, 0x04, - 0xe1, 0x20, 0x10, 0x14, - 0x91, 0x80, 0x00, 0x04, - 0x81, 0xaa, 0x4e, 0x0a, - 0x80, 0x08, 0xa3, 0x04, - 0xa7, 0x0b, 0x4e, 0x08, - 0x08, 0x19, 0x82, 0x15, - 0x83, 0x0b, 0xe0, 0x2c, - 0x08, 0x19, 0x84, 0x15, + 0x82, 0x9b, 0x23, 0x3e, + 0xe0, 0x98, 0x1e, 0x35, + 0xa5, 0x0e, 0xab, 0x4e, + 0x06, 0x19, 0xa7, 0x3e, + 0x1e, 0xb5, 0xe0, 0x90, + 0x00, 0x89, 0xe0, 0xa8, + 0x80, 0x13, 0xe0, 0x48, + 0x60, 0x70, 0x02, 0x61, + 0xac, 0x1e, 0x81, 0x11, + 0xe0, 0x10, 0x56, 0x15, + 0xe0, 0x4c, 0x00, 0x19, + 0xa9, 0x1e, 0xe6, 0x24, + 0x60, 0x50, 0x00, 0xa9, + 0xe0, 0x80, 0x44, 0x0a, + 0x97, 0x5e, 0xce, 0x78, + 0x24, 0x14, 0x82, 0xe5, + 0xe0, 0x84, 0x44, 0x1a, + 0x02, 0x0c, 0xa1, 0x1b, + 0xa4, 0x1e, 0xe2, 0x00, + 0xa0, 0x00, 0x00, 0x78, + 0x92, 0x1b, 0x01, 0x01, + 0xef, 0xf8, 0x74, 0xe8, + 0x44, 0x0a, 0xe6, 0x24, + 0x00, 0x16, 0xe0, 0x88, + 0x42, 0x90, 0x40, 0x00, + 0x74, 0x58, 0xdc, 0x00, + 0x00, 0xf0, 0xcf, 0xf8, + 0x0a, 0xf0, 0x65, 0x60, + 0x0d, 0x0e, 0xe5, 0xd0, + 0xe5, 0x90, 0x00, 0xf0, + 0x00, 0xf0, 0x0b, 0x0e, + 0x09, 0x0e, 0xe5, 0x70, + 0xe5, 0xa0, 0x00, 0xf0, + 0x00, 0xf0, 0x7e, 0x0e, + 0x7c, 0x0e, 0xe5, 0x80, + 0xe5, 0xb0, 0x00, 0xf0, + 0x00, 0xf0, 0x3e, 0x0e, + 0x3c, 0x0e, 0xe5, 0xc0, + 0x29, 0x14, 0x83, 0x21, + 0x0c, 0x3b, 0x94, 0x0b, + 0x52, 0x78, 0x92, 0x4b, + 0x66, 0x04, 0xef, 0xf8, + 0xe1, 0x31, 0x81, 0x11, + 0xe0, 0x8c, 0x40, 0x0a, + 0xc0, 0x74, 0x1e, 0x05, + 0xc0, 0x00, 0x40, 0x15, + 0x12, 0x05, 0xa7, 0x44, + 0x08, 0x19, 0xc0, 0x0c, + 0x86, 0x0f, 0xe0, 0x94, + 0x25, 0x54, 0xe6, 0x0e, + 0xfc, 0x10, 0x44, 0x10, + 0x1f, 0xe8, 0xab, 0x2b, + 0x15, 0x9e, 0xc0, 0x00, + 0x1c, 0x08, 0xa1, 0x6d, + 0xbb, 0x04, 0xc0, 0x00, + 0xa5, 0x0b, 0x80, 0x04, + 0x80, 0x00, 0x1f, 0x58, + 0x60, 0xa0, 0x1e, 0x05, + 0x14, 0x70, 0xc8, 0x77, + 0x00, 0x25, 0xe4, 0x40, + 0x94, 0x04, 0xe0, 0x10, + 0xff, 0x01, 0x00, 0x23, + 0x00, 0x24, 0x80, 0x2d, + 0x52, 0x0a, 0xc1, 0xac, + 0x82, 0x15, 0xc1, 0x2a, + 0xd7, 0x07, 0xa4, 0x0b, + 0x40, 0x0a, 0xa0, 0x0b, + 0x12, 0x00, 0xe1, 0xaa, + 0x0a, 0x09, 0xec, 0x04, + 0x40, 0x0a, 0xe0, 0x64, + 0x44, 0x20, 0xe0, 0x94, + 0x40, 0x07, 0x13, 0xfd, + 0xc0, 0xc0, 0x06, 0x94, + 0x40, 0x28, 0x1e, 0x25, + 0xd9, 0x88, 0x46, 0x32, + 0x40, 0x08, 0x44, 0x35, + 0x0a, 0x19, 0xab, 0x1b, + 0x08, 0x25, 0x80, 0x68, + 0xab, 0x34, 0xe0, 0x18, + 0x52, 0x92, 0x23, 0x14, + 0x0c, 0x24, 0x90, 0x84, + 0x84, 0x18, 0xe1, 0x20, + 0xa7, 0x1b, 0x52, 0x18, + 0x06, 0x29, 0x82, 0x15, + 0x85, 0x1b, 0xe0, 0x2c, + 0x06, 0x29, 0x84, 0x15, 0x81, 0x75, 0xe0, 0x28, - 0xe0, 0x24, 0x08, 0x19, - 0x82, 0x35, 0x83, 0x0b, - 0xe0, 0x20, 0x08, 0x19, - 0x82, 0x01, 0x02, 0x11, - 0x50, 0x1a, 0x9f, 0x0e, - 0x81, 0x35, 0xe6, 0xa2, - 0x9f, 0x0e, 0x83, 0x01, - 0x88, 0x45, 0xa1, 0x8b, - 0x00, 0x84, 0x1f, 0x14, - 0x81, 0x1d, 0xe0, 0x84, - 0x06, 0x15, 0x86, 0xa5, - 0x0a, 0x09, 0xe0, 0x20, - 0x46, 0x1a, 0xe0, 0x64, - 0x40, 0x0a, 0xe6, 0x8a, - 0x9b, 0x3e, 0xe0, 0x88, - 0x40, 0x3a, 0x84, 0xd5, - 0x81, 0x31, 0x66, 0x8a, - 0x02, 0x04, 0x9f, 0x24, - 0x44, 0x2e, 0xe1, 0x7c, - 0x93, 0x2e, 0xe0, 0x0a, - 0xef, 0xc4, 0x60, 0x08, - 0xe1, 0x94, 0x04, 0x14, - 0x8e, 0x05, 0xa1, 0x2b, - 0xf6, 0x80, 0x0c, 0x24, - 0x89, 0x01, 0x87, 0xd5, - 0xaf, 0xe5, 0xa4, 0x0e, - 0x02, 0x34, 0x1f, 0x04, - 0x02, 0x14, 0xe1, 0x94, - 0x44, 0x06, 0x76, 0x80, - 0x1f, 0x64, 0xe0, 0x00, + 0xe0, 0x24, 0x06, 0x29, + 0x82, 0x35, 0x85, 0x1b, + 0xe0, 0x20, 0x06, 0x29, + 0x82, 0x11, 0x02, 0x21, + 0x4c, 0x2a, 0x9f, 0x1e, + 0x81, 0x35, 0xe6, 0x9a, + 0x9f, 0x1e, 0x83, 0x11, + 0x88, 0x25, 0xa1, 0x6b, + 0x02, 0x64, 0x1f, 0x24, + 0x83, 0x2d, 0xe0, 0x84, + 0x08, 0x15, 0x86, 0x85, + 0x40, 0x0a, 0x60, 0x20, + 0x9d, 0x6e, 0xe0, 0x88, + 0xe6, 0xa2, 0x46, 0x1a, + 0x84, 0xd5, 0x9b, 0x3e, + 0x40, 0x3a, 0x9f, 0x24, + 0x81, 0x31, 0x66, 0xa2, + 0x60, 0x0a, 0x44, 0x2e, + 0xe1, 0x7c, 0x02, 0x04, + 0x77, 0x58, 0x93, 0x2e, + 0x04, 0x14, 0xef, 0xc0, + 0xa1, 0x2b, 0xe1, 0x94, + 0x0c, 0x24, 0x8e, 0x25, + 0x87, 0xe5, 0xf6, 0x80, + 0xac, 0x0e, 0x89, 0x01, + 0x1f, 0x04, 0xb1, 0x55, + 0xe1, 0x94, 0x02, 0x34, + 0x76, 0x80, 0x02, 0x14, + 0xe0, 0x00, 0x44, 0x06, + 0x8e, 0xbb, 0x1f, 0x74, + 0x76, 0x80, 0x00, 0x04, 0xe5, 0xe0, 0x0a, 0xf0, - 0xf6, 0x80, 0x00, 0x04, 0x00, 0x10, 0x20, 0x23, 0x19, 0x2e, 0xec, 0x18, 0x33, 0x44, 0x80, 0x2d, @@ -7775,96 +8080,100 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x00, 0x04, 0x56, 0x00, 0x34, 0x2d, 0x34, 0x40, 0x0a, 0xc9, 0x04, - 0x42, 0x22, 0x66, 0x9a, + 0x42, 0x22, 0x66, 0x9e, 0xbd, 0x1e, 0xd1, 0x84, 0x8c, 0x30, 0x90, 0x24, - 0xe0, 0xa2, 0x40, 0x0a, - 0xef, 0xf4, 0x70, 0xe8, + 0xe0, 0x9a, 0x40, 0x0a, + 0xef, 0xf4, 0x6f, 0xc8, 0xad, 0x14, 0xbd, 0x04, - 0x40, 0x6e, 0x84, 0x06, - 0x93, 0x0e, 0xe0, 0x1a, - 0x04, 0x04, 0x8d, 0x55, + 0x40, 0x7e, 0x84, 0x06, + 0x93, 0x0e, 0xe0, 0x1e, + 0x04, 0x04, 0x8d, 0xa5, 0x06, 0x14, 0x61, 0x94, 0xa6, 0x2f, 0xe0, 0xec, 0xf6, 0x80, 0x0c, 0x24, 0x04, 0x60, 0xc0, 0x61, 0x80, 0x4b, 0x6c, 0x14, - 0xe4, 0x7c, 0x05, 0x0a, - 0x1c, 0x00, 0x48, 0x10, - 0xec, 0x94, 0x02, 0x60, - 0x7b, 0x84, 0x42, 0x22, - 0xe6, 0xaa, 0x44, 0x8a, + 0x64, 0x7c, 0x05, 0x0a, + 0x48, 0x10, 0x8e, 0xbb, + 0x02, 0x60, 0x1c, 0x00, + 0x1d, 0x74, 0xec, 0x94, + 0xfb, 0x84, 0x42, 0x22, 0xec, 0x7c, 0x06, 0x12, 0x68, 0x8c, 0x0a, 0x44, 0x48, 0x00, 0x81, 0x41, 0x18, 0x34, 0x1c, 0x00, 0x00, 0x44, 0xec, 0x00, - 0xa6, 0x13, 0x6f, 0x8c, - 0x78, 0x80, 0x40, 0xc2, - 0xe6, 0xa2, 0x44, 0x2a, + 0x44, 0x7a, 0x6f, 0x8c, + 0x40, 0xc2, 0xe6, 0xaa, + 0xa6, 0x13, 0x78, 0x80, 0x00, 0x12, 0x20, 0x5f, 0x02, 0x54, 0xec, 0x04, 0x00, 0x44, 0x68, 0x80, - 0x50, 0x18, 0xe8, 0x8c, - 0x81, 0x31, 0x6f, 0xc4, - 0x80, 0x9b, 0x27, 0x04, - 0xa3, 0x1e, 0xc0, 0x08, - 0x92, 0x0b, 0x20, 0x63, - 0x6f, 0xc4, 0x5e, 0xe8, - 0xa1, 0x1b, 0x8c, 0x2b, - 0xd6, 0x80, 0x00, 0x14, - 0x96, 0x80, 0x00, 0x04, - 0x84, 0x80, 0x00, 0x00, - 0x01, 0x0a, 0xac, 0x03, - 0x82, 0xb5, 0xe0, 0x80, - 0xe0, 0x00, 0x42, 0x16, - 0x71, 0x80, 0x44, 0x12, - 0xa1, 0x2e, 0x92, 0x0b, - 0x5d, 0x98, 0xa3, 0x14, - 0x21, 0x04, 0xef, 0xc4, - 0xa0, 0x63, 0x80, 0x9b, + 0x44, 0x2a, 0xe8, 0x8c, + 0x81, 0x31, 0x66, 0x9e, + 0xef, 0xc0, 0x67, 0x28, + 0x80, 0x2b, 0x27, 0x04, + 0xab, 0x2e, 0xc0, 0x08, + 0x4e, 0x62, 0xa3, 0x1e, + 0x84, 0x0b, 0x71, 0x80, + 0x6f, 0xc0, 0x75, 0xe8, + 0x1d, 0x64, 0x8e, 0x2b, + 0x00, 0x14, 0xa1, 0x1b, + 0x00, 0x04, 0xd6, 0x80, + 0x00, 0x00, 0x96, 0x80, + 0xae, 0x03, 0x84, 0x80, + 0xe0, 0x80, 0x01, 0x0a, + 0xc0, 0x54, 0x1e, 0x05, + 0x42, 0x16, 0x82, 0x95, + 0x2b, 0x04, 0xe0, 0x00, + 0xf1, 0x80, 0x44, 0x12, + 0xa3, 0x14, 0xa1, 0x2e, + 0xef, 0xc0, 0x74, 0x68, + 0xa2, 0x73, 0xa1, 0x14, 0x0a, 0xf0, 0x33, 0x44, - 0x2d, 0x04, 0xe5, 0xe0, - 0xbd, 0x6e, 0x8c, 0x1b, - 0x00, 0x30, 0x90, 0x24, - 0x6a, 0xd8, 0x92, 0x0b, - 0x1f, 0x24, 0xef, 0xf4, - 0xe0, 0x00, 0x46, 0x06, - 0xad, 0x14, 0xbd, 0x04, - 0xf6, 0x80, 0x04, 0x24, - 0x84, 0x06, 0xa4, 0x33, - 0x40, 0x8a, 0x99, 0x3e, - 0x9e, 0xb1, 0x66, 0xa2, - 0x60, 0x9c, 0x1e, 0x95, - 0x1d, 0x8e, 0x8e, 0x6b, - 0x91, 0x0e, 0x81, 0xc1, - 0xa7, 0x44, 0xa5, 0x54, - 0x93, 0x95, 0xab, 0x24, - 0x60, 0x64, 0x0a, 0x39, - 0xe1, 0x7c, 0x04, 0x64, - 0x04, 0x63, 0x96, 0x2f, - 0xf0, 0x84, 0x44, 0x72, - 0x94, 0x2b, 0x55, 0x2d, - 0x60, 0x28, 0x4c, 0x9a, - 0x04, 0x06, 0x82, 0x11, - 0x40, 0x00, 0x20, 0x01, - 0xe0, 0x8c, 0x46, 0x1a, - 0x62, 0x00, 0x04, 0x0c, - 0x06, 0x64, 0xa4, 0x63, - 0xa4, 0x0f, 0x60, 0x88, - 0x46, 0x32, 0x2b, 0x24, - 0xc0, 0x00, 0x30, 0xa5, - 0x24, 0x01, 0x06, 0x30, - 0x82, 0x61, 0x40, 0x09, - 0xb0, 0x90, 0x46, 0x32, - 0xa4, 0xa0, 0x06, 0x30, - 0x86, 0x83, 0x8c, 0x34, - 0xf6, 0x35, 0x83, 0x2b, + 0xad, 0x14, 0xe5, 0xe0, + 0x90, 0x24, 0xbd, 0x7e, + 0x8e, 0x1b, 0x04, 0x30, + 0xef, 0xf4, 0x69, 0x68, + 0x46, 0x06, 0x1f, 0x24, + 0xbd, 0x04, 0xe0, 0x00, + 0x04, 0x24, 0xad, 0x14, + 0xa4, 0x33, 0xf6, 0x80, + 0x99, 0x3e, 0x84, 0x06, + 0x60, 0x9c, 0x1e, 0x05, + 0x25, 0x54, 0x9e, 0xb1, + 0xa7, 0x44, 0x81, 0xc1, + 0x40, 0x6a, 0xab, 0x0e, + 0x92, 0x6b, 0x66, 0x9a, + 0x93, 0xb5, 0x91, 0x0e, + 0xf0, 0x84, 0x44, 0x92, + 0x04, 0x0c, 0xd5, 0x2d, + 0x0a, 0x29, 0xe2, 0x00, + 0xa4, 0x0f, 0x60, 0x64, + 0xfb, 0xfc, 0x00, 0x0a, + 0x44, 0x4a, 0x80, 0x85, + 0x86, 0x65, 0xe0, 0x90, + 0xe1, 0x7c, 0x06, 0x64, + 0x06, 0x63, 0x96, 0x3f, + 0x95, 0x6d, 0x94, 0x3b, + 0x40, 0x00, 0x06, 0x06, + 0xe0, 0x8c, 0x44, 0x0a, + 0x40, 0x54, 0x1e, 0x35, + 0x04, 0x64, 0xa6, 0x63, + 0x44, 0x22, 0xe0, 0x88, + 0x04, 0x20, 0xd0, 0x8c, + 0xc0, 0x09, 0x04, 0x01, + 0x90, 0x90, 0x44, 0x22, + 0x84, 0xa0, 0x04, 0x20, + 0x84, 0x73, 0x88, 0x24, + 0x82, 0x11, 0x02, 0x61, + 0xf4, 0xb5, 0x83, 0x8b, 0xfb, 0xfc, 0x00, 0x0a, 0x0a, 0x09, 0x80, 0xc5, 0x40, 0x4a, 0xe0, 0x64, - 0x98, 0xe5, 0xe0, 0x90, - 0x00, 0x84, 0x1b, 0x14, + 0x98, 0xa5, 0xe0, 0x90, + 0x00, 0x74, 0x1b, 0x14, 0x19, 0x34, 0xe0, 0x94, 0xe0, 0x88, 0x0a, 0xc4, 0xa2, 0x03, 0xb7, 0x44, @@ -7889,37 +8198,36 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x21, 0x5e, 0xfc, 0x30, 0xd1, 0x80, 0x00, 0x04, 0x0a, 0xf0, 0x23, 0xce, - 0x63, 0x18, 0xe5, 0xe0, + 0x61, 0x78, 0xe5, 0xe0, 0xa3, 0xc4, 0xef, 0xf4, 0xbd, 0x14, 0xb1, 0x04, 0x80, 0x16, 0x98, 0x03, 0xa7, 0x44, 0xa5, 0x54, - 0x0a, 0x09, 0xab, 0x24, - 0x40, 0x4a, 0xe0, 0x64, - 0x88, 0xa5, 0xe0, 0x84, - 0xa1, 0x24, 0x93, 0x04, - 0x40, 0x0a, 0xb5, 0x44, - 0x2f, 0x34, 0xe6, 0xa2, - 0x02, 0x04, 0x84, 0x8b, - 0x11, 0x54, 0xf6, 0x80, - 0x02, 0x06, 0xa4, 0x1d, - 0x02, 0x10, 0x80, 0x00, - 0x3d, 0x1e, 0xcc, 0x08, - 0x08, 0x25, 0xa3, 0x0f, - 0x90, 0x43, 0x7c, 0x20, - 0x60, 0x16, 0x40, 0x0a, - 0xe5, 0xe0, 0x0a, 0xf0, - 0xfc, 0x30, 0x06, 0x31, - 0xef, 0xf4, 0x60, 0x88, - 0xaf, 0x04, 0xa3, 0xc4, - 0x98, 0x03, 0xbd, 0x14, - 0xa5, 0x54, 0x80, 0x16, - 0xab, 0x24, 0xa7, 0x44, - 0x84, 0x73, 0x02, 0xc1, + 0xe0, 0x64, 0x0a, 0x09, + 0xe0, 0x84, 0x40, 0x4a, + 0x93, 0x04, 0x88, 0x85, + 0xb5, 0x44, 0xa1, 0x24, + 0xe6, 0x9e, 0x40, 0x0a, + 0x84, 0x7b, 0x2f, 0x34, + 0xf6, 0x80, 0x02, 0x04, + 0xa4, 0x1d, 0x11, 0x54, + 0x80, 0x00, 0x02, 0x06, + 0xcc, 0x08, 0x02, 0x10, + 0xa3, 0x0f, 0x3d, 0x1e, + 0x7c, 0x1c, 0x08, 0x25, + 0x40, 0x0a, 0x8e, 0x43, + 0x0a, 0xf0, 0x60, 0x16, + 0x06, 0x31, 0xe5, 0xe0, + 0x5e, 0xf8, 0xfc, 0x30, + 0xa3, 0xc4, 0xef, 0xf4, + 0xbd, 0x14, 0xaf, 0x04, + 0x80, 0x16, 0x98, 0x03, + 0xa7, 0x44, 0xa5, 0x54, + 0x90, 0x93, 0x02, 0xc1, 0x81, 0xcb, 0xa9, 0x04, - 0x40, 0x00, 0x10, 0x06, + 0x40, 0x00, 0x0e, 0x06, 0xc0, 0x00, 0x02, 0x06, - 0x00, 0x06, 0x62, 0x15, + 0x00, 0x06, 0x62, 0x55, 0x97, 0x14, 0xc0, 0x00, 0x0a, 0x49, 0xb9, 0x34, 0x84, 0x08, 0xe0, 0x54, @@ -8019,10 +8327,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x80, 0x4a, 0x4a, 0x40, 0x00, 0x00, 0x06, 0xdc, 0x00, 0x42, 0x60, - 0xcf, 0xf8, 0x4a, 0x08, + 0xcf, 0xf8, 0x48, 0x88, 0x8c, 0x1b, 0x03, 0x01, 0xf2, 0x9c, 0x0c, 0x0c, - 0xff, 0xf8, 0x09, 0xa8, + 0xff, 0xf8, 0x08, 0x28, 0xfa, 0x3c, 0x04, 0x0c, 0xec, 0x20, 0x1e, 0xf0, 0x82, 0x9b, 0x00, 0x6b, @@ -8031,14 +8339,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x3c, 0x9e, 0x86, 0xab, 0x01, 0x21, 0x81, 0x01, 0x01, 0x41, 0x89, 0x31, - 0x50, 0x58, 0x8e, 0x1b, - 0x8c, 0x5b, 0x6f, 0xd0, + 0x56, 0x98, 0x8e, 0x1b, + 0x8c, 0x5b, 0x6f, 0xcc, 0x82, 0xb5, 0xa1, 0x0b, 0x81, 0x01, 0x3e, 0xae, 0x81, 0x21, 0x3c, 0x9e, 0x81, 0x41, 0x11, 0x31, 0x8c, 0x5b, 0x0e, 0x1b, - 0xef, 0xd0, 0x4f, 0x88, + 0xef, 0xcc, 0x55, 0xc8, 0x80, 0xa5, 0xa1, 0x0b, 0x0c, 0x0c, 0x90, 0xf1, 0xdd, 0x93, 0xf2, 0x3c, @@ -8046,7 +8354,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x21, 0x3c, 0x9e, 0x81, 0x41, 0x21, 0x31, 0x8c, 0x5b, 0x0e, 0x1b, - 0xef, 0xd0, 0x4e, 0x88, + 0xef, 0xcc, 0x54, 0xc8, 0x0c, 0x0c, 0x90, 0xf1, 0xdd, 0x93, 0xf2, 0x3c, 0x86, 0x05, 0xa1, 0x1b, @@ -8200,8 +8508,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x79, 0x84, 0x44, 0x32, 0xfc, 0x7c, 0x00, 0x44, 0x60, 0x10, 0x02, 0x06, - 0x5e, 0xb8, 0x81, 0x31, - 0x08, 0x4c, 0xef, 0xc0, + 0x75, 0x98, 0x81, 0x31, + 0x08, 0x4c, 0xef, 0xbc, 0xdd, 0x93, 0xf2, 0x00, 0xfa, 0x04, 0x04, 0x4c, 0x80, 0x2b, 0x04, 0x6b, @@ -8211,7 +8519,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x84, 0x06, 0x24, 0xdd, 0x17, 0x06, 0x03, 0x81, 0x31, 0x01, 0x71, - 0x6f, 0xc0, 0x5d, 0x68, + 0x6f, 0xbc, 0x74, 0x48, 0xf2, 0x9c, 0x42, 0x12, 0x8e, 0x0b, 0x98, 0x0e, 0xf2, 0x04, 0x0c, 0x4c, @@ -8227,8 +8535,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x2b, 0x42, 0x07, 0x81, 0x11, 0x04, 0x01, 0x7a, 0x80, 0x00, 0x04, - 0x64, 0xb8, 0x81, 0x31, - 0x04, 0x04, 0xef, 0xc0, + 0x7b, 0x98, 0x81, 0x31, + 0x04, 0x04, 0xef, 0xbc, 0xa2, 0x2f, 0xe1, 0xa0, 0x41, 0xfe, 0xa1, 0x2b, 0x00, 0x04, 0xdf, 0xfc, @@ -8292,7 +8600,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x65, 0x06, 0x40, 0x3a, 0x42, 0x3a, 0x88, 0x2b, 0x8a, 0x3b, 0x65, 0x86, - 0xef, 0xc0, 0x5c, 0xa8, + 0xef, 0xbc, 0x73, 0x88, 0x60, 0x01, 0x04, 0x06, 0x81, 0x31, 0x42, 0x00, 0x42, 0x12, 0x84, 0x03, @@ -8322,7 +8630,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x12, 0x61, 0x84, 0x42, 0x22, 0xf0, 0x94, 0x88, 0x2b, 0x72, 0xb0, - 0xef, 0xc0, 0x4f, 0x88, + 0xef, 0xbc, 0x66, 0x68, 0x85, 0x0b, 0xff, 0x21, 0x1f, 0xfc, 0x41, 0xfe, 0x01, 0x65, 0xa1, 0x1b, @@ -8364,7 +8672,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x27, 0x5f, 0xec, 0x04, 0x42, 0x52, 0x88, 0x03, 0x81, 0x31, 0x72, 0x84, - 0xef, 0xc0, 0x4a, 0x48, + 0xef, 0xbc, 0x61, 0x28, 0xf2, 0x00, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x00, 0x00, 0x4c, @@ -8374,8 +8682,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x06, 0x20, 0x82, 0x65, 0x83, 0x41, 0x6c, 0x04, 0x81, 0x31, 0x27, 0x4f, - 0x58, 0x58, 0x88, 0x03, - 0x42, 0x12, 0x6f, 0xc0, + 0x6f, 0x38, 0x88, 0x03, + 0x42, 0x12, 0x6f, 0xbc, 0xff, 0x21, 0xf2, 0x8c, 0x41, 0xfe, 0x85, 0x0b, 0xa1, 0x1b, 0x1f, 0xfc, @@ -8398,7 +8706,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x5c, 0x00, 0x4a, 0xc0, 0x42, 0x52, 0x88, 0x03, 0x06, 0x24, 0x72, 0x84, - 0x79, 0x98, 0xe1, 0x7c, + 0x50, 0x78, 0xe1, 0x7c, 0x03, 0x4a, 0xef, 0xbc, 0x02, 0x1a, 0xe0, 0x00, 0x00, 0xea, 0xe0, 0x00, @@ -8452,7 +8760,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xaa, 0x14, 0xa8, 0x04, 0xe1, 0x84, 0x06, 0x24, 0x81, 0x31, 0x06, 0x03, - 0x6f, 0xbc, 0x7f, 0x48, + 0x6f, 0xbc, 0x56, 0x28, 0xf2, 0x94, 0x42, 0x12, 0x42, 0x62, 0x0f, 0x44, 0x04, 0x0e, 0xf0, 0x9c, @@ -8596,11 +8904,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x82, 0x81, 0x91, 0x81, 0x31, 0x70, 0xa8, 0x72, 0xa4, 0x42, 0x42, - 0x6d, 0x38, 0x8e, 0x2b, + 0x44, 0x18, 0x8e, 0x2b, 0x00, 0xab, 0xef, 0xbc, 0xf0, 0xac, 0x40, 0x82, 0x72, 0xa4, 0x42, 0x62, - 0x6c, 0xb8, 0x81, 0x31, + 0x43, 0x98, 0x81, 0x31, 0x8e, 0x2b, 0x6f, 0xbc, 0xfc, 0x14, 0x80, 0xbb, 0x00, 0x44, 0xfe, 0x44, @@ -8891,8 +9199,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x9b, 0x7e, 0x2e, 0x02, 0x06, 0x3e, 0x0e, 0x09, 0x21, 0xe0, 0x10, - 0x68, 0x9d, 0x46, 0x0e, - 0x78, 0x18, 0xc0, 0x10, + 0x68, 0xf1, 0x06, 0x4e, + 0x4e, 0xf8, 0xc0, 0x10, 0x92, 0x0b, 0x6f, 0xbc, 0x81, 0x11, 0x01, 0x01, 0x81, 0x01, 0x09, 0x0e, @@ -9084,17 +9392,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x00, 0x00, 0x4c, 0xe1, 0x00, 0x1e, 0x06, 0x61, 0x9c, 0x00, 0x46, - 0x4f, 0x58, 0x83, 0x11, - 0xc1, 0xc3, 0xef, 0xbc, + 0x66, 0x38, 0x83, 0x11, + 0xc1, 0xc3, 0xef, 0xb8, 0xfa, 0x0c, 0x04, 0x0c, 0x80, 0x6b, 0x02, 0x7b, 0x60, 0x3c, 0x41, 0xf6, - 0x5c, 0xf8, 0x81, 0x11, - 0x81, 0x81, 0x6f, 0xc0, + 0x73, 0xd8, 0x81, 0x11, + 0x81, 0x81, 0x6f, 0xbc, 0x60, 0x00, 0x42, 0x76, - 0x79, 0xb8, 0x8c, 0x0b, - 0x5b, 0x18, 0xe8, 0x24, - 0x8c, 0x0b, 0x68, 0x10, + 0x62, 0x98, 0x8c, 0x0b, + 0x7e, 0xd8, 0xe8, 0x24, + 0x8c, 0x0b, 0x68, 0x0c, 0xe1, 0x3c, 0x00, 0x86, 0x80, 0x18, 0x80, 0x04, 0xf1, 0xfc, 0x42, 0x10, @@ -9104,7 +9412,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0xe1, 0x44, 0x40, 0x46, 0x00, 0x86, 0x80, 0x04, 0xe1, 0x44, - 0x01, 0xc6, 0x00, 0x86, + 0x40, 0x46, 0x00, 0x86, 0x0c, 0x2b, 0xef, 0xdc, 0xc0, 0x15, 0x6e, 0x09, 0x73, 0xf5, 0x42, 0x20, @@ -9150,14 +9458,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x81, 0xbf, 0xc1, 0x80, 0x38, 0x03, 0x11, 0x80, 0x00, 0x40, 0x15, - 0x68, 0x00, 0x61, 0xe8, + 0x68, 0x00, 0x5f, 0xa8, 0x42, 0x86, 0x8c, 0x0b, 0x8c, 0x0b, 0x60, 0x00, - 0xe8, 0x24, 0x72, 0x28, + 0xe8, 0x24, 0x5b, 0x08, 0xef, 0xfc, 0x76, 0xe8, 0xfa, 0x00, 0x04, 0x0c, 0x8b, 0x11, 0x00, 0x6b, - 0xe8, 0x28, 0x6d, 0xa8, + 0xe8, 0x28, 0x56, 0x88, 0x61, 0x24, 0x00, 0xc6, 0xe0, 0x00, 0x42, 0x06, 0x4c, 0x11, 0x80, 0x04, @@ -9166,7 +9474,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x3c, 0x00, 0x86, 0x80, 0x18, 0x80, 0x04, 0xf1, 0xfc, 0x42, 0x10, - 0x01, 0x86, 0x00, 0x16, + 0x40, 0x06, 0x00, 0x16, 0x80, 0x08, 0xef, 0xdc, 0xe0, 0x80, 0x40, 0x0a, 0x0e, 0x09, 0x0c, 0x0b, @@ -9174,8 +9482,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0xff, 0x13, 0x7d, 0x0e, 0x09, 0x4c, 0x03, 0x8c, 0x0b, 0x40, 0x15, - 0xe8, 0x00, 0x5e, 0xe8, - 0xe8, 0x00, 0x5e, 0x48, + 0xe8, 0x00, 0x5c, 0xa8, + 0xe8, 0x00, 0x5c, 0x08, 0x61, 0x44, 0x40, 0x46, 0x80, 0x04, 0x85, 0x11, 0x01, 0x86, 0x00, 0x16, @@ -9194,15 +9502,15 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x86, 0x65, 0xb3, 0x0b, 0x86, 0xb5, 0xb5, 0x0b, 0x0c, 0x0c, 0x8c, 0x0b, - 0x39, 0x38, 0xf2, 0x00, + 0x20, 0x58, 0xf2, 0x00, 0x8c, 0x0b, 0xe0, 0x58, 0xf2, 0x00, 0x0c, 0x0c, - 0xe0, 0x44, 0x0a, 0xc8, + 0xe0, 0x40, 0x35, 0x48, 0x0c, 0x0c, 0x8c, 0x0b, - 0x21, 0x18, 0xf2, 0x00, + 0x08, 0x38, 0xf2, 0x00, 0x8c, 0x0b, 0xe0, 0x54, 0xf2, 0x00, 0x0c, 0x0c, - 0xe0, 0x4c, 0x26, 0x08, + 0xe0, 0x4c, 0x10, 0xc8, 0x0c, 0x0c, 0x8c, 0x0b, 0x85, 0xb5, 0xf2, 0x00, 0x0c, 0x0c, 0x8c, 0x0b, @@ -9211,7 +9519,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xdd, 0x93, 0xf2, 0x00, 0xfa, 0x00, 0x04, 0x0c, 0x81, 0x11, 0x01, 0x01, - 0x68, 0x24, 0x54, 0xc8, + 0x68, 0x20, 0x7d, 0xa8, 0x03, 0x46, 0x81, 0x61, 0x83, 0x31, 0x61, 0x4c, 0x08, 0x36, 0x84, 0x24, @@ -9221,25 +9529,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x14, 0x87, 0x21, 0x83, 0x11, 0x04, 0x26, 0xf2, 0x00, 0x0c, 0x0c, - 0xe0, 0x24, 0x13, 0x88, + 0xe0, 0x20, 0x3c, 0x68, 0x61, 0x14, 0x40, 0xc6, 0x80, 0x04, 0x83, 0x11, 0xc1, 0x83, 0x80, 0x16, 0xdd, 0x93, 0xc7, 0x13, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x10, 0x1e, 0xf0, + 0xfa, 0x3c, 0x04, 0x0c, 0x0c, 0x09, 0x80, 0x6b, 0xc0, 0x2b, 0x6c, 0x21, - 0x82, 0x55, 0xb3, 0x0b, - 0xe0, 0x00, 0x40, 0x96, - 0x6c, 0x1d, 0x4c, 0x01, - 0x8c, 0x0b, 0x40, 0x2b, - 0xe8, 0x50, 0x56, 0xe8, - 0x40, 0x66, 0x81, 0x95, + 0x40, 0x96, 0xb3, 0x0b, + 0x4c, 0x01, 0x80, 0x00, + 0x80, 0x2b, 0x0c, 0x1d, + 0x40, 0x66, 0x82, 0x25, 0x4c, 0x01, 0xe0, 0x00, 0x40, 0x2b, 0x6c, 0x1d, - 0x59, 0xf8, 0x8c, 0x0b, - 0x58, 0xf8, 0xe8, 0x50, + 0x41, 0x78, 0x8c, 0x0b, + 0x40, 0xf8, 0xe8, 0x50, 0x8c, 0x0b, 0x68, 0x18, 0x61, 0xd1, 0x0c, 0x09, 0x80, 0x7b, 0x40, 0x15, @@ -9255,93 +9560,78 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x45, 0xc0, 0x16, 0x6c, 0x1d, 0x0c, 0x29, 0x8c, 0x0b, 0x40, 0x2b, - 0x68, 0x10, 0x4c, 0x28, + 0x68, 0x0c, 0x70, 0x48, 0xa1, 0x0b, 0x8e, 0x1b, - 0x5c, 0xd8, 0xa0, 0x55, + 0x47, 0xb8, 0x98, 0x75, 0x8c, 0x0b, 0x68, 0x44, - 0x65, 0xc1, 0x10, 0x60, - 0x0c, 0x09, 0xc0, 0x54, - 0x40, 0x2b, 0x6c, 0x21, - 0xb3, 0x0b, 0x80, 0x7b, - 0x21, 0x7b, 0x90, 0x15, - 0xe0, 0x00, 0x40, 0x96, + 0x6c, 0x21, 0x0c, 0x09, + 0x80, 0x7b, 0x40, 0x2b, + 0x88, 0x55, 0xb3, 0x0b, + 0x92, 0xd5, 0xa1, 0x7b, + 0x68, 0x3c, 0x72, 0xc8, + 0x00, 0x7b, 0x8c, 0x0b, + 0xe1, 0x34, 0x41, 0x06, + 0x02, 0x96, 0x00, 0x04, + 0x4c, 0x11, 0xe0, 0x04, + 0xc0, 0x2b, 0x6c, 0x1d, + 0x00, 0x0e, 0x00, 0x16, + 0x0c, 0x19, 0xff, 0xf8, + 0xc0, 0x2c, 0x6c, 0xfd, + 0xe3, 0xf0, 0x02, 0x0a, + 0xc4, 0x04, 0x00, 0x10, + 0x6c, 0xfd, 0x4c, 0x01, + 0x8c, 0x0b, 0x40, 0x2c, + 0xe8, 0x04, 0x4b, 0xe8, + 0x8c, 0x15, 0xa1, 0x7b, + 0x21, 0x7b, 0x87, 0x85, + 0xe0, 0x00, 0x40, 0x66, 0x6c, 0x1d, 0x4c, 0x01, - 0x98, 0xb5, 0xc0, 0x2b, - 0x61, 0x4c, 0x41, 0x46, - 0x64, 0x50, 0x02, 0x60, - 0x3c, 0x1e, 0xc0, 0x9e, + 0x8a, 0x15, 0xc0, 0x2b, + 0x61, 0x4c, 0x55, 0x46, + 0x66, 0xe0, 0x10, 0x60, + 0x28, 0x04, 0xc0, 0xa3, + 0x67, 0x61, 0x12, 0x60, + 0x02, 0x60, 0xc0, 0x9f, + 0x40, 0x54, 0x65, 0xc1, 0x65, 0x41, 0x04, 0x60, - 0x00, 0x04, 0xc0, 0x54, - 0x66, 0xd1, 0x06, 0x60, - 0x08, 0x60, 0xc0, 0x54, - 0x40, 0xa3, 0x66, 0xe1, - 0x66, 0x71, 0x0a, 0x60, - 0x4d, 0x78, 0xc0, 0xa2, - 0x90, 0x1b, 0x6f, 0xc4, + 0x06, 0x60, 0xc0, 0x54, + 0x40, 0x54, 0x66, 0xd1, + 0x5e, 0xd8, 0x90, 0x4b, + 0x92, 0x5b, 0x6f, 0xc0, 0xa1, 0x7b, 0x80, 0x7b, - 0x42, 0x18, 0x92, 0x95, - 0x8c, 0x0b, 0x68, 0x40, - 0x41, 0x06, 0x00, 0x7b, - 0x00, 0x04, 0xe1, 0x34, - 0xe0, 0x04, 0x02, 0x96, - 0x6c, 0x1d, 0x4c, 0x11, - 0x00, 0x16, 0xc0, 0x2b, - 0xff, 0xf8, 0x00, 0x0e, - 0x6c, 0xfd, 0x0c, 0x19, - 0x02, 0x0a, 0xc0, 0x2c, - 0x00, 0x10, 0xe3, 0xf0, - 0x4c, 0x01, 0xc4, 0x04, - 0x40, 0x2c, 0x6c, 0xfd, - 0x4b, 0x78, 0x8c, 0x0b, - 0xa1, 0x7b, 0xe8, 0x04, - 0x87, 0x65, 0x8a, 0xd5, - 0x40, 0x66, 0x21, 0x7b, - 0x4c, 0x01, 0xe0, 0x00, - 0xc0, 0x2b, 0x6c, 0x1d, - 0x57, 0x46, 0x88, 0xd5, - 0x12, 0x60, 0x61, 0x4c, - 0xc0, 0xa3, 0x66, 0xe0, - 0x14, 0x60, 0x2c, 0x04, - 0xc0, 0x9f, 0x67, 0x61, - 0x65, 0x41, 0x04, 0x60, - 0x06, 0x60, 0x40, 0x54, - 0xc0, 0x54, 0x66, 0xd1, - 0x92, 0x4b, 0x10, 0x1b, - 0x6f, 0xc4, 0x56, 0x48, - 0x80, 0x7b, 0x94, 0x5b, - 0x82, 0xf5, 0xa1, 0x7b, - 0x02, 0x60, 0x2c, 0x04, - 0xc0, 0xad, 0x66, 0x31, - 0x64, 0x71, 0x08, 0x60, - 0x92, 0x2b, 0x40, 0xa1, - 0x6f, 0xc4, 0x58, 0xe8, - 0x80, 0x7b, 0x94, 0x3b, - 0x84, 0x05, 0xa1, 0x7b, - 0x6c, 0x1d, 0x0c, 0x29, - 0x8c, 0x0b, 0x40, 0x2b, - 0x68, 0x10, 0x44, 0x28, - 0xa1, 0x0b, 0x8e, 0x1b, - 0x81, 0x71, 0x80, 0x55, - 0x88, 0xf1, 0x0e, 0x0b, - 0xf2, 0x7c, 0x0c, 0x0c, - 0x2c, 0x04, 0xdd, 0x93, + 0x28, 0x04, 0x82, 0xf5, + 0x66, 0x31, 0x02, 0x60, + 0x08, 0x60, 0xc0, 0xad, + 0x40, 0xa1, 0x64, 0x71, + 0x61, 0x78, 0x90, 0x2b, + 0x92, 0x3b, 0x6f, 0xc0, + 0xa1, 0x7b, 0x80, 0x7b, + 0x0c, 0x29, 0x82, 0xe5, + 0x40, 0x2b, 0x6c, 0x1d, + 0x6a, 0x38, 0x8c, 0x0b, + 0x8e, 0x1b, 0x68, 0x0c, + 0x80, 0x55, 0xa1, 0x0b, + 0x8e, 0x0b, 0x81, 0x71, + 0xf2, 0x3c, 0x0c, 0x0c, + 0x28, 0x04, 0xdd, 0x93, 0x64, 0x81, 0x04, 0x60, 0x06, 0x60, 0xc0, 0x99, 0x40, 0xa2, 0x65, 0x21, - 0x4e, 0x78, 0x92, 0x1b, - 0xf3, 0x95, 0xef, 0xf8, - 0x66, 0x15, 0x00, 0x8a, + 0x50, 0xd8, 0x90, 0x1b, + 0x73, 0x95, 0xef, 0xf8, + 0xc1, 0xc3, 0x80, 0x7b, + 0x64, 0x51, 0x00, 0x8a, 0x80, 0xf5, 0xc0, 0x03, 0x61, 0x18, 0x01, 0x46, 0x80, 0x04, 0x87, 0x11, 0xdd, 0x93, 0x80, 0x16, - 0x65, 0x61, 0x00, 0x8a, + 0x64, 0x39, 0x00, 0x8a, 0x80, 0xf5, 0xc0, 0x02, 0x61, 0x18, 0x01, 0x46, 0x80, 0x04, 0x85, 0x11, 0xdd, 0x93, 0x80, 0x16, 0x61, 0x18, 0x03, 0x46, - 0x64, 0xac, 0x01, 0x4a, + 0x64, 0x18, 0x01, 0x4a, 0x84, 0x14, 0xc0, 0x01, 0xe2, 0x00, 0x00, 0x0c, 0xdd, 0x93, 0x84, 0x06, @@ -9425,7 +9715,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x26, 0x00, 0x6b, 0x4c, 0x01, 0xe0, 0x0c, 0x40, 0x2b, 0x6c, 0x1d, - 0x79, 0xf8, 0x81, 0x01, + 0x65, 0x18, 0x81, 0x01, 0x81, 0x11, 0x68, 0x20, 0x6f, 0xa9, 0x0c, 0x15, 0x25, 0x1b, 0xc0, 0x0b, @@ -9434,13 +9724,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x42, 0x4a, 0x88, 0x18, 0x80, 0xc5, 0xe0, 0x80, 0x0c, 0x0c, 0x83, 0x11, - 0x38, 0xd8, 0xf2, 0xfc, + 0x23, 0xf8, 0xf2, 0xfc, 0x3e, 0x0e, 0xe0, 0x20, 0x88, 0x18, 0x8c, 0x0b, 0xf3, 0xf8, 0x42, 0x10, 0x02, 0x86, 0x08, 0x16, - 0x4c, 0x18, 0xe0, 0x0c, - 0x81, 0x21, 0x68, 0x54, + 0x75, 0x78, 0xe0, 0x0c, + 0x81, 0x21, 0x68, 0x50, 0x61, 0x44, 0x10, 0xc6, 0xe1, 0x48, 0x53, 0x86, 0xff, 0xa1, 0x20, 0x04, @@ -9455,22 +9745,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x29, 0x84, 0x05, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x0c, 0x02, 0x96, - 0x68, 0x0c, 0x73, 0x28, + 0x68, 0x0c, 0x59, 0x28, 0x81, 0x95, 0x8c, 0x0b, 0x80, 0x08, 0xa0, 0x04, 0x01, 0x55, 0xc7, 0x07, 0xf0, 0x04, 0x4e, 0x00, - 0xef, 0xfc, 0x50, 0xa8, + 0xef, 0xfc, 0x52, 0xe8, 0x80, 0x04, 0xac, 0x04, 0xf8, 0x35, 0xa1, 0x0b, 0x83, 0x11, 0x3e, 0x04, 0xf2, 0xfc, 0x0c, 0x0c, - 0xe0, 0x20, 0x35, 0x08, + 0xe0, 0x20, 0x20, 0x28, 0xfa, 0xfc, 0x04, 0x0c, 0x00, 0x36, 0x00, 0x7b, 0x4e, 0x01, 0xe0, 0x0c, 0x40, 0x2b, 0x6c, 0x1d, - 0x74, 0x58, 0x81, 0x01, + 0x5f, 0x78, 0x81, 0x01, 0x81, 0x11, 0x68, 0x20, 0x3e, 0x0e, 0x81, 0x81, 0xe1, 0x24, 0x01, 0xc6, @@ -9478,11 +9768,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x86, 0xe1, 0x24, 0x80, 0x64, 0xa8, 0x04, 0x8e, 0x0b, 0x00, 0x14, - 0xe8, 0x24, 0x49, 0x88, + 0xe8, 0x20, 0x74, 0xa8, 0x43, 0xa6, 0x03, 0x91, 0x03, 0x21, 0xe0, 0x0c, - 0x46, 0xd8, 0x8e, 0x0b, - 0x41, 0x86, 0xe8, 0x54, + 0x70, 0x38, 0x8e, 0x0b, + 0x41, 0x86, 0xe8, 0x50, 0x80, 0x14, 0xe1, 0x14, 0x03, 0x46, 0x04, 0x8c, 0x84, 0x14, 0xe1, 0x24, @@ -9495,14 +9785,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x02, 0x86, 0x04, 0x96, 0x80, 0x04, 0xe0, 0x0c, 0x8e, 0x0b, 0x00, 0x9c, - 0xe8, 0x54, 0x45, 0x28, + 0xe8, 0x50, 0x6e, 0x88, 0x61, 0x24, 0x01, 0xc6, 0x80, 0x04, 0xa9, 0x11, 0x8e, 0x0b, 0x00, 0x96, - 0xe8, 0x24, 0x46, 0xe8, + 0xe8, 0x20, 0x72, 0x08, 0x60, 0x0c, 0x02, 0x86, - 0x44, 0x58, 0x81, 0x21, - 0x8e, 0x0b, 0x68, 0x54, + 0x6d, 0xb8, 0x81, 0x21, + 0x8e, 0x0b, 0x68, 0x50, 0xe1, 0x44, 0x00, 0xc6, 0x80, 0x08, 0x80, 0x04, 0x52, 0x00, 0xc7, 0x07, @@ -9523,7 +9813,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x0c, 0x02, 0xa6, 0x6c, 0x1d, 0x0e, 0x29, 0x8e, 0x0b, 0x40, 0x2b, - 0xe8, 0x0c, 0x6a, 0xa8, + 0xe8, 0x0c, 0x50, 0xa8, 0x00, 0xc6, 0x81, 0x85, 0x80, 0x04, 0xe1, 0x44, 0xc7, 0x07, 0x80, 0x08, @@ -9531,10 +9821,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0xa8, 0x04, 0xf4, 0x45, 0x81, 0x6b, 0x8e, 0x0b, 0x2b, 0x11, - 0xe8, 0x24, 0x42, 0xe8, + 0xe8, 0x20, 0x6e, 0x08, 0x00, 0x14, 0xa8, 0x04, - 0x42, 0x98, 0x8e, 0x0b, - 0x01, 0xc6, 0xe8, 0x24, + 0x6d, 0xb8, 0x8e, 0x0b, + 0x01, 0xc6, 0xe8, 0x20, 0x80, 0x04, 0xe1, 0x24, 0x41, 0x46, 0x00, 0x86, 0x80, 0x04, 0xe1, 0x18, @@ -9546,7 +9836,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x16, 0xf3, 0xf4, 0xbe, 0x04, 0x83, 0x11, 0xf2, 0xfc, 0x0c, 0x0c, - 0xe0, 0x20, 0x2a, 0xe8, + 0xe0, 0x20, 0x16, 0x08, 0x70, 0x01, 0x00, 0x06, 0x02, 0x06, 0x40, 0x20, 0xff, 0xc0, 0x60, 0x01, @@ -9554,7 +9844,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x0c, 0x04, 0x0c, 0x80, 0x8b, 0x02, 0x7b, 0x81, 0x01, 0x04, 0x6b, - 0x68, 0x20, 0x69, 0xe8, + 0x68, 0x20, 0x55, 0x08, 0x43, 0x86, 0x81, 0x11, 0x49, 0xc6, 0x61, 0x48, 0x04, 0x24, 0xe1, 0x48, @@ -9578,7 +9868,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa4, 0x3f, 0x88, 0x3f, 0x83, 0x11, 0x04, 0x3e, 0xf2, 0x0c, 0x0c, 0x0c, - 0xe0, 0x20, 0x26, 0xe8, + 0xe0, 0x20, 0x12, 0x08, 0xfa, 0xfc, 0x04, 0x0c, 0x50, 0x06, 0x00, 0x6b, 0x0c, 0x09, 0xe1, 0xa0, @@ -9603,11 +9893,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x0a, 0x98, 0x85, 0xaa, 0x65, 0xf0, 0x0c, 0xf0, 0x04, 0x00, 0x0a, - 0x40, 0x00, 0x13, 0x38, + 0x40, 0x00, 0x13, 0x68, 0xc1, 0x4c, 0x17, 0xc6, 0x02, 0x56, 0x04, 0xab, - 0x43, 0xb8, 0xe0, 0x10, - 0x8c, 0x0b, 0x68, 0x24, + 0x6e, 0xd8, 0xe0, 0x10, + 0x8c, 0x0b, 0x68, 0x20, 0x61, 0x98, 0x05, 0x46, 0xfb, 0x80, 0x00, 0x74, 0x72, 0xfd, 0x49, 0xc6, @@ -9637,10 +9927,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf0, 0x94, 0x40, 0x32, 0x48, 0x30, 0x90, 0x34, 0xbf, 0x4b, 0xf0, 0x3c, - 0x1d, 0xe5, 0xf6, 0x15, + 0x1f, 0x15, 0xf6, 0x15, 0x02, 0x56, 0x94, 0x2b, 0x8c, 0x0b, 0x60, 0x80, - 0x68, 0x20, 0x7f, 0x88, + 0x68, 0x20, 0x6a, 0xa8, 0x0c, 0x0b, 0x84, 0x7b, 0x40, 0x15, 0x6e, 0x09, 0xe1, 0x4c, 0x17, 0xc6, @@ -9648,10 +9938,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0xff, 0x72, 0xf1, 0x6e, 0x09, 0x4c, 0x03, 0x8c, 0x0b, 0x40, 0x15, - 0xef, 0xf8, 0x79, 0xc8, - 0x8e, 0x2b, 0x1b, 0x75, + 0xef, 0xf8, 0x7c, 0x08, + 0x8e, 0x2b, 0x1b, 0xa5, 0x02, 0x56, 0x3e, 0x2e, - 0x7e, 0x18, 0xe0, 0x20, + 0x69, 0x38, 0xe0, 0x20, 0x8c, 0x0b, 0x68, 0x20, 0x7b, 0x80, 0x00, 0x74, 0x72, 0xfc, 0x43, 0xc6, @@ -9686,92 +9976,94 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc5, 0x3e, 0xe4, 0x10, 0xf0, 0x3c, 0x48, 0x30, 0xf4, 0x95, 0xbf, 0x4b, - 0x91, 0xc5, 0xbe, 0x24, + 0x91, 0xf5, 0xbe, 0x24, 0x60, 0x40, 0x02, 0x56, - 0x79, 0x78, 0x8c, 0x0b, - 0x4a, 0x58, 0xe8, 0x20, - 0x8c, 0x0b, 0x68, 0x00, - 0xef, 0xfc, 0x43, 0xc8, - 0x6e, 0x09, 0x0c, 0x0b, - 0x03, 0xee, 0x40, 0x15, - 0x0e, 0x0a, 0xff, 0xfc, - 0x82, 0x0f, 0xe8, 0x00, - 0x7c, 0x04, 0x42, 0x00, - 0xfd, 0x04, 0x40, 0x00, - 0x6e, 0x09, 0x4c, 0x13, - 0x03, 0x86, 0x40, 0x15, - 0x84, 0x9e, 0xe1, 0x98, - 0x6e, 0x09, 0x4c, 0x03, - 0x00, 0x74, 0x40, 0x15, - 0x4c, 0xb1, 0xfb, 0x80, - 0x40, 0x15, 0x62, 0xe5, - 0xe1, 0x4c, 0x17, 0xc6, - 0x49, 0xc6, 0x8e, 0x05, - 0x40, 0x20, 0x72, 0xfd, - 0xe1, 0x98, 0x05, 0x46, - 0x73, 0x01, 0x02, 0x06, - 0xa0, 0x43, 0x40, 0x20, - 0x40, 0x12, 0x20, 0x14, - 0x88, 0x2a, 0xf1, 0x80, - 0x0a, 0x40, 0x85, 0x55, - 0x80, 0x7b, 0x6c, 0x08, - 0x0a, 0x34, 0x77, 0x5d, - 0x4a, 0x50, 0xe1, 0x90, - 0x40, 0x0f, 0x73, 0xfd, - 0x80, 0x00, 0x08, 0x16, - 0x66, 0x96, 0x48, 0x4a, - 0x84, 0x33, 0xe1, 0x37, - 0x73, 0xf1, 0x4a, 0x30, - 0xc5, 0x47, 0x41, 0xff, - 0x64, 0x10, 0x06, 0x00, - 0x01, 0x65, 0x82, 0x53, - 0x5d, 0x94, 0x88, 0xcb, - 0xec, 0x04, 0x18, 0xc0, - 0xa1, 0xcb, 0xd5, 0x9e, - 0x0a, 0x44, 0xfe, 0x75, - 0x48, 0x02, 0xe0, 0x88, - 0x40, 0x32, 0x70, 0x94, - 0x90, 0x34, 0xf0, 0x94, - 0xf0, 0x3c, 0x48, 0x30, - 0xf6, 0x15, 0xbf, 0x4b, - 0x62, 0x65, 0x0c, 0x19, - 0x00, 0x46, 0x40, 0x15, - 0x80, 0x04, 0xe1, 0x4c, - 0x80, 0x28, 0x88, 0x19, - 0xf3, 0xec, 0x44, 0x20, - 0x80, 0x26, 0xa2, 0x2f, - 0x64, 0xc5, 0x0c, 0x09, - 0x4c, 0x01, 0xc0, 0x2b, - 0x40, 0x2b, 0x6c, 0x21, - 0x45, 0x78, 0x8c, 0x0b, - 0x20, 0x44, 0xe8, 0x00, - 0x65, 0x01, 0x00, 0x60, - 0x04, 0x04, 0xc0, 0x54, - 0x81, 0x01, 0x7b, 0x80, - 0x06, 0x46, 0x19, 0x11, - 0xc0, 0x20, 0x72, 0xc1, - 0xe8, 0x00, 0x4f, 0x48, - 0x9f, 0x21, 0x2c, 0x14, - 0x4e, 0xa0, 0x00, 0x2e, - 0xc3, 0x00, 0x7c, 0x51, - 0x6b, 0xd8, 0x84, 0x7e, - 0x0e, 0x2b, 0xef, 0xf8, - 0x02, 0x06, 0xa9, 0x91, - 0x7f, 0xc0, 0x60, 0x01, - 0xfb, 0x80, 0x00, 0x94, - 0x84, 0x1f, 0x2c, 0x24, - 0x40, 0x10, 0xa0, 0x1f, - 0xc3, 0x00, 0x7c, 0x01, - 0x0c, 0x09, 0x88, 0x0e, - 0xc0, 0x2d, 0x67, 0xcd, - 0xe0, 0x80, 0x40, 0x0a, - 0x0c, 0x09, 0x80, 0xe5, - 0xc0, 0x2b, 0x6c, 0x11, - 0xe0, 0x98, 0x40, 0x0a, - 0x0c, 0x0c, 0x80, 0x95, - 0xdd, 0x93, 0xf2, 0xfc, - 0x0c, 0x0c, 0x8c, 0x0b, - 0x9f, 0x95, 0xf2, 0xfc, + 0x64, 0x98, 0x8c, 0x0b, + 0x4c, 0x91, 0xe8, 0x20, + 0x40, 0x38, 0x64, 0xc5, + 0x4a, 0x58, 0x8c, 0x0b, + 0x45, 0xd8, 0xe8, 0x00, + 0x0c, 0x0b, 0xef, 0xfc, + 0x40, 0x15, 0x6e, 0x09, + 0xff, 0xfc, 0x03, 0xee, + 0xe8, 0x00, 0x0e, 0x0a, + 0x42, 0x00, 0x82, 0x0f, + 0x40, 0x00, 0x7c, 0x04, + 0x4c, 0x13, 0xfd, 0x04, + 0x40, 0x15, 0x6e, 0x09, + 0xe1, 0x98, 0x03, 0x86, + 0x4c, 0x03, 0x84, 0x9e, + 0x40, 0x15, 0x6e, 0x09, + 0xfb, 0x80, 0x00, 0x74, + 0x62, 0xe5, 0x4c, 0xb1, + 0x17, 0xc6, 0x40, 0x15, + 0x8e, 0x05, 0xe1, 0x4c, + 0x72, 0xfd, 0x49, 0xc6, + 0x05, 0x46, 0x40, 0x20, + 0x02, 0x06, 0xe1, 0x98, + 0x40, 0x20, 0x73, 0x01, + 0x20, 0x14, 0xa0, 0x43, + 0xf1, 0x80, 0x40, 0x12, + 0x85, 0x55, 0x88, 0x2a, + 0x6c, 0x08, 0x0a, 0x40, + 0x77, 0x5d, 0x80, 0x7b, + 0xe1, 0x90, 0x0a, 0x34, + 0x73, 0xfd, 0x4a, 0x50, + 0x08, 0x16, 0x40, 0x0f, + 0x48, 0x4a, 0x80, 0x00, + 0xe1, 0x37, 0x66, 0x96, + 0x4a, 0x30, 0x84, 0x33, + 0x41, 0xff, 0x73, 0xf1, + 0x06, 0x00, 0xc5, 0x47, + 0x82, 0x53, 0x64, 0x10, + 0x88, 0xcb, 0x01, 0x65, + 0x18, 0xc0, 0x5d, 0x94, + 0xd5, 0x9e, 0xec, 0x04, + 0xfe, 0x75, 0xa1, 0xcb, + 0xe0, 0x88, 0x0a, 0x44, + 0x70, 0x94, 0x48, 0x02, + 0xf0, 0x94, 0x40, 0x32, + 0x48, 0x30, 0x90, 0x34, + 0xbf, 0x4b, 0xf0, 0x3c, + 0x0c, 0x19, 0xf6, 0x15, + 0x40, 0x15, 0x62, 0x65, + 0xe1, 0x4c, 0x00, 0x46, + 0x88, 0x19, 0x80, 0x04, + 0x44, 0x20, 0x80, 0x28, + 0xa2, 0x2f, 0xf3, 0xec, + 0x0c, 0x09, 0x80, 0x26, + 0xc0, 0x2b, 0x64, 0xc5, + 0x6c, 0x21, 0x4c, 0x01, + 0x8c, 0x0b, 0x40, 0x2b, + 0xe8, 0x00, 0x45, 0x88, + 0x00, 0x60, 0x20, 0x44, + 0xc0, 0x54, 0x65, 0x01, + 0x7b, 0x80, 0x04, 0x04, + 0x19, 0x11, 0x81, 0x01, + 0x72, 0xc1, 0x06, 0x46, + 0x4f, 0x58, 0xc0, 0x20, + 0x2c, 0x14, 0xe8, 0x00, + 0x00, 0x2e, 0x9f, 0x21, + 0x7c, 0x51, 0x4e, 0xa0, + 0x84, 0x7e, 0xc3, 0x00, + 0xef, 0xf8, 0x6d, 0xe8, + 0xa9, 0x91, 0x0e, 0x2b, + 0x60, 0x01, 0x02, 0x06, + 0x00, 0x94, 0x7f, 0xc0, + 0x2c, 0x24, 0xfb, 0x80, + 0xa0, 0x1f, 0x84, 0x1f, + 0x7c, 0x01, 0x40, 0x10, + 0x88, 0x0e, 0xc3, 0x00, + 0x67, 0xcd, 0x0c, 0x09, + 0x40, 0x0a, 0xc0, 0x2d, + 0x80, 0xe5, 0xe0, 0x80, + 0x6c, 0x11, 0x0c, 0x09, + 0x40, 0x0a, 0xc0, 0x2b, + 0x80, 0x95, 0xe0, 0x98, + 0xf2, 0xfc, 0x0c, 0x0c, + 0x8c, 0x0b, 0xdd, 0x93, + 0xf2, 0xfc, 0x0c, 0x0c, + 0xc1, 0xc3, 0x9f, 0xa5, 0xfa, 0x00, 0x04, 0x0c, 0x41, 0x86, 0x00, 0x6b, 0x80, 0x14, 0xe1, 0x48, @@ -9782,10 +10074,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0x84, 0x26, 0x42, 0x10, 0x80, 0x18, 0x80, 0x16, 0xf1, 0xfc, - 0xef, 0xf8, 0x78, 0x68, + 0xef, 0xf8, 0x7a, 0x68, 0x83, 0x11, 0x01, 0x01, 0x0c, 0x0c, 0x8c, 0x2b, - 0x22, 0xb8, 0xf2, 0x00, + 0x22, 0x78, 0xf2, 0x00, 0xc1, 0xc3, 0xff, 0xfc, 0xf8, 0x1c, 0x04, 0x0c, 0x61, 0x41, 0x00, 0x19, @@ -9914,7 +10206,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x73, 0xfd, 0x40, 0x00, 0x4c, 0x03, 0xc0, 0xfd, 0x40, 0x15, 0x6e, 0x09, - 0x7c, 0xd8, 0x81, 0x01, + 0x67, 0xb8, 0x81, 0x01, 0x7e, 0x0e, 0xe8, 0x1c, 0xe1, 0x48, 0x41, 0x86, 0x41, 0xc6, 0x00, 0x14, @@ -10000,7 +10292,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa2, 0x0f, 0xa4, 0x0f, 0x68, 0x01, 0x4c, 0x05, 0x8c, 0x0b, 0x40, 0x02, - 0xe8, 0x10, 0x5e, 0x68, + 0xe8, 0x10, 0x4a, 0xc8, 0xe1, 0x48, 0x41, 0x86, 0x80, 0x18, 0x80, 0x04, 0xe0, 0x90, 0x42, 0x0a, @@ -10010,7 +10302,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa2, 0x2f, 0xf3, 0x7c, 0xf8, 0x80, 0x42, 0x20, 0x7e, 0x04, 0x80, 0x16, - 0x70, 0xd8, 0x83, 0x11, + 0x5b, 0xb8, 0x83, 0x11, 0x01, 0x86, 0xe8, 0x1c, 0x80, 0x04, 0xe1, 0x98, 0x0c, 0x0b, 0xa3, 0x0b, @@ -10020,10 +10312,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x85, 0x80, 0x15, 0x68, 0x00, 0x49, 0xc8, 0x03, 0x01, 0x8c, 0x0b, - 0x45, 0x58, 0x81, 0x11, + 0x45, 0x18, 0x81, 0x11, 0x8c, 0x2b, 0x6f, 0xfc, 0x0c, 0x0c, 0xa8, 0xf1, - 0x1a, 0x38, 0xf2, 0x7c, + 0x1c, 0x38, 0xf2, 0x7c, 0xc1, 0xc3, 0xff, 0xf8, 0xf8, 0x7c, 0x04, 0x0c, 0x63, 0x09, 0x00, 0x19, @@ -10098,7 +10390,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x84, 0x04, 0x0c, 0x81, 0x01, 0x00, 0x6b, - 0x68, 0x1c, 0x65, 0xe8, + 0x68, 0x1c, 0x50, 0xc8, 0x0c, 0x1b, 0x81, 0x11, 0x40, 0x0a, 0x68, 0x91, 0x00, 0x60, 0x80, 0x7b, @@ -10113,16 +10405,16 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0x8c, 0x2b, 0xe0, 0x19, 0x80, 0x18, 0x83, 0x01, 0x00, 0x16, - 0x6f, 0xf8, 0x79, 0xc8, - 0x4e, 0xd8, 0x81, 0x11, - 0x50, 0xb8, 0xef, 0xf8, - 0x8c, 0x0b, 0x68, 0x10, + 0x6f, 0xf8, 0x79, 0x88, + 0x50, 0xd8, 0x81, 0x11, + 0x7d, 0x18, 0xef, 0xf8, + 0x8c, 0x0b, 0x68, 0x0c, 0x61, 0x8d, 0x0c, 0x0b, 0x83, 0x11, 0x40, 0x1c, 0x4c, 0x03, 0x82, 0x01, 0x40, 0x1c, 0x61, 0x8d, 0x0c, 0x0c, 0x8e, 0x0b, - 0x22, 0xd8, 0xf2, 0x84, + 0x0d, 0xb8, 0xf2, 0x84, 0xc1, 0xc3, 0xe0, 0x1c, 0xfa, 0x00, 0x04, 0x0c, 0x43, 0x86, 0x02, 0x6b, @@ -10139,16 +10431,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0xfe, 0x73, 0xfd, 0x4c, 0x13, 0xa0, 0x1f, 0xc0, 0x15, 0x6e, 0x09, - 0xef, 0xf8, 0x4b, 0xc8, + 0xef, 0xf8, 0x4d, 0xc8, 0x81, 0x11, 0x01, 0x01, 0x0c, 0x0c, 0x8c, 0x2b, - 0x36, 0x18, 0xf2, 0x00, + 0x35, 0xd8, 0xf2, 0x00, 0xc1, 0xc3, 0xff, 0xf8, 0xe1, 0x00, 0x01, 0x86, 0x80, 0x08, 0x80, 0x04, 0x82, 0x09, 0x5d, 0x93, 0xc7, 0x13, 0xc1, 0x83, - 0xc1, 0xc3, 0xdd, 0x93, + 0x00, 0x0c, 0xdd, 0x93, + 0xc0, 0x00, 0x61, 0x01, 0xfa, 0x0c, 0x04, 0x0c, 0x81, 0x01, 0x00, 0x6b, 0x82, 0x8b, 0x04, 0x7b, @@ -10160,13 +10453,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x0b, 0x03, 0x11, 0xe8, 0x00, 0x4e, 0x28, 0x80, 0xd5, 0xa1, 0x0b, - 0x68, 0x48, 0x70, 0x88, + 0x68, 0x48, 0x59, 0x88, 0xa1, 0x0b, 0x8c, 0x0b, 0x0c, 0x0c, 0x80, 0x85, 0xdd, 0x93, 0xf2, 0x0c, 0x45, 0x76, 0x01, 0x11, 0x09, 0x31, 0xe0, 0x00, - 0x74, 0x58, 0x8c, 0x0b, + 0x5d, 0x58, 0x8c, 0x0b, 0xa3, 0x8b, 0xe8, 0x48, 0xa1, 0x0b, 0xfc, 0xb5, 0x0c, 0x0b, 0xfc, 0x75, @@ -10278,7 +10571,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x92, 0x95, 0xa3, 0x1b, 0x65, 0x41, 0x02, 0x60, 0x8c, 0x0b, 0x40, 0xb1, - 0xe8, 0x48, 0x79, 0xe8, + 0xe8, 0x48, 0x62, 0xe8, 0x90, 0x95, 0xa1, 0x0b, 0x4c, 0x01, 0x83, 0x01, 0xc0, 0x2c, 0x65, 0x39, @@ -10309,7 +10602,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x84, 0x5e, 0x01, 0x60, 0x8c, 0x5e, 0x01, 0x5e, 0x21, 0x8c, 0x0b, - 0x75, 0xf8, 0xe0, 0x88, + 0x5e, 0xf8, 0xe0, 0x88, 0xa1, 0x0b, 0xe8, 0x48, 0x4c, 0x71, 0x80, 0xb5, 0xc0, 0x2c, 0x65, 0x39, @@ -10320,7 +10613,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x6b, 0x02, 0x7b, 0x64, 0x90, 0x02, 0xf0, 0xe4, 0x80, 0x04, 0xf0, - 0xe8, 0x10, 0x60, 0x28, + 0xe8, 0x10, 0x49, 0x68, 0x60, 0x90, 0x1e, 0x89, 0xe0, 0x04, 0x0e, 0x2a, 0xe0, 0x80, 0x1e, 0x79, @@ -10355,7 +10648,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x02, 0xb4, 0x00, 0x2c, 0x40, 0x91, 0xfa, 0x80, 0x00, 0x2c, 0x41, 0x71, - 0x54, 0x18, 0x8c, 0x0b, + 0x4f, 0x58, 0x8c, 0x0b, 0x1e, 0x89, 0xe8, 0x00, 0x00, 0x80, 0x60, 0x90, 0x02, 0x04, 0xe4, 0x04, @@ -10370,152 +10663,114 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf6, 0x7c, 0x0c, 0xcc, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x7c, 0x04, 0x0c, - 0xee, 0x70, 0x1e, 0xf0, + 0xee, 0x50, 0x1e, 0xf0, 0xa1, 0x1b, 0x00, 0x6b, 0x65, 0x39, 0x0c, 0x09, 0x84, 0x8b, 0x40, 0x2c, - 0x42, 0x66, 0x8a, 0x85, + 0x42, 0x66, 0x8a, 0x25, 0xa5, 0x0b, 0x60, 0x04, 0x6c, 0x1d, 0x4c, 0x11, 0x81, 0x91, 0x40, 0x2b, - 0x81, 0xa1, 0x02, 0xc5, + 0x81, 0xb1, 0x02, 0xc5, 0x8c, 0x0b, 0x05, 0x11, 0xef, 0xfc, 0x72, 0x68, - 0xa1, 0xab, 0x80, 0xab, - 0xc0, 0x00, 0x10, 0x58, - 0x68, 0x04, 0x6e, 0xa8, - 0x80, 0xab, 0x8c, 0x0b, + 0xa1, 0xbb, 0x80, 0xbb, + 0xc0, 0x00, 0x0b, 0xa8, + 0x68, 0x04, 0x54, 0x48, + 0x80, 0xbb, 0x8c, 0x0b, 0xe4, 0x40, 0x10, 0x8a, - 0xc0, 0x00, 0x0d, 0x68, - 0x0d, 0x38, 0xa1, 0xab, - 0x0c, 0x29, 0xc0, 0x00, + 0xa1, 0xbb, 0xa2, 0x75, + 0x0c, 0x29, 0xa2, 0x35, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x00, 0x42, 0xb6, - 0x68, 0x04, 0x7e, 0x28, - 0x54, 0xb6, 0x8c, 0x0b, + 0x68, 0x04, 0x63, 0xe8, + 0x56, 0xb6, 0x8c, 0x0b, 0x23, 0x0b, 0xe0, 0x00, - 0x0c, 0x78, 0x81, 0x81, - 0x9d, 0xa5, 0xc0, 0x00, - 0x40, 0xa6, 0x23, 0x0b, - 0x4c, 0x01, 0xe0, 0x04, - 0xc0, 0x2b, 0x6c, 0x1d, - 0x03, 0x11, 0x82, 0x25, - 0x6f, 0xd8, 0x8c, 0x0b, - 0x80, 0xab, 0xef, 0xfc, - 0x0d, 0xc8, 0xa1, 0xab, - 0x00, 0xc6, 0xc0, 0x00, + 0x9e, 0xd5, 0x81, 0x81, + 0x23, 0x0b, 0x95, 0x25, + 0xe0, 0x04, 0x40, 0xa6, + 0x6c, 0x1d, 0x4c, 0x01, + 0x82, 0x05, 0xc0, 0x2b, + 0x8c, 0x0b, 0x03, 0x11, + 0xef, 0xfc, 0x70, 0x08, + 0xa1, 0xbb, 0x80, 0xbb, + 0x00, 0xc6, 0xa4, 0x95, 0x02, 0xf0, 0x60, 0x08, - 0x01, 0x55, 0xe4, 0x40, - 0x45, 0x86, 0x81, 0x81, + 0x01, 0x55, 0xe4, 0x20, + 0x45, 0xb6, 0x81, 0xb1, 0xec, 0x04, 0x00, 0x00, 0xfe, 0x95, 0xa1, 0x0b, - 0x81, 0x01, 0x3e, 0x6e, - 0x81, 0x01, 0x7e, 0x0e, - 0x65, 0x71, 0x12, 0x60, - 0x17, 0x06, 0x40, 0xb0, - 0x7c, 0x0e, 0xe0, 0x04, - 0x89, 0x55, 0x81, 0x71, - 0x78, 0x81, 0x12, 0x09, + 0x10, 0x60, 0x01, 0x01, + 0xc0, 0xb0, 0x65, 0x71, + 0x81, 0x01, 0x3e, 0x0e, + 0x15, 0x06, 0x3c, 0x0e, + 0x89, 0x55, 0xe0, 0x04, + 0x78, 0x81, 0x10, 0x09, 0x95, 0x11, 0x40, 0x01, - 0x14, 0x04, 0x8e, 0x6b, - 0x9e, 0x09, 0x61, 0x90, - 0xe6, 0x86, 0x42, 0xaa, - 0x01, 0x0a, 0x82, 0x03, - 0x80, 0xf5, 0xe6, 0x30, - 0xe1, 0x34, 0x03, 0x46, - 0x84, 0x14, 0x84, 0x14, - 0x82, 0xf5, 0xb7, 0x1b, - 0x03, 0x36, 0x3e, 0x04, - 0x0f, 0x36, 0xe0, 0x08, - 0x00, 0x29, 0xe0, 0x08, - 0xc0, 0x2b, 0x6c, 0x1d, - 0xe8, 0x04, 0x79, 0x68, - 0x00, 0xc6, 0x23, 0x0b, - 0x88, 0x05, 0xe0, 0x08, - 0x06, 0xd5, 0xa1, 0x6b, - 0xdc, 0x00, 0x4e, 0x60, - 0x04, 0xf0, 0x24, 0x18, - 0x16, 0x0a, 0xe4, 0x40, - 0x80, 0x23, 0x61, 0x40, - 0x5e, 0xa5, 0x88, 0x16, - 0x0e, 0x06, 0x00, 0x0c, - 0x5e, 0xa5, 0x80, 0x00, - 0x82, 0xc5, 0x80, 0x08, - 0x81, 0x71, 0x7e, 0x04, - 0xfa, 0x80, 0x00, 0x04, - 0xfb, 0x80, 0x40, 0xa2, - 0xfc, 0x04, 0xfe, 0x0e, - 0xfa, 0x80, 0x00, 0x04, - 0xfa, 0x80, 0x40, 0xa2, - 0x16, 0xb0, 0xfc, 0x0e, - 0x82, 0x91, 0x6c, 0x04, - 0xee, 0x75, 0xa1, 0xbb, - 0x17, 0x46, 0x3e, 0x64, - 0x87, 0xe5, 0xe1, 0x34, - 0x7a, 0x80, 0x02, 0x84, - 0x5f, 0xb8, 0x8c, 0x0b, - 0xa1, 0x0b, 0xe8, 0x00, - 0xac, 0x04, 0x80, 0xb5, - 0xb9, 0x0b, 0x80, 0x04, - 0x40, 0x62, 0x8c, 0x55, - 0x95, 0x11, 0x70, 0xa0, - 0x6b, 0x51, 0x00, 0x09, - 0x12, 0x04, 0xc0, 0x2c, - 0x9e, 0x09, 0x61, 0x90, - 0xe6, 0x86, 0x54, 0x9a, - 0x15, 0x0a, 0x80, 0xa3, - 0x80, 0xb5, 0xe6, 0x30, - 0x80, 0x04, 0xac, 0x04, - 0x82, 0xd5, 0xb9, 0x0b, - 0x6c, 0x1d, 0x0c, 0x29, - 0x03, 0x36, 0x40, 0x2b, - 0x74, 0x58, 0xe0, 0x08, - 0x8c, 0x0b, 0x68, 0x04, - 0x14, 0xc6, 0xa3, 0x0b, - 0x0f, 0x36, 0x40, 0x08, - 0x00, 0xf0, 0x80, 0x08, - 0x9f, 0x11, 0x64, 0x40, - 0x80, 0x16, 0x94, 0x03, - 0xfc, 0x14, 0xfe, 0x04, - 0xfa, 0x80, 0x00, 0x04, - 0x7b, 0x80, 0x40, 0x92, - 0xfa, 0x80, 0x02, 0x14, - 0x40, 0x92, 0x7e, 0x0e, - 0xfc, 0x0e, 0xfa, 0x84, - 0x10, 0x0a, 0x82, 0x81, - 0xf0, 0x35, 0xe0, 0x80, - 0x8e, 0xab, 0x21, 0x7b, - 0xfc, 0x04, 0x8c, 0xf5, - 0xfa, 0x80, 0x00, 0x04, - 0x7e, 0x04, 0xc4, 0x07, - 0xe4, 0x10, 0x0e, 0x00, - 0x7a, 0x80, 0x12, 0x04, - 0x67, 0x18, 0x8c, 0x0b, - 0xc4, 0x97, 0x68, 0x00, - 0x80, 0xab, 0x03, 0xd5, - 0x88, 0xd5, 0xa1, 0xab, - 0x61, 0xa1, 0x40, 0xf6, - 0x81, 0x11, 0x40, 0x00, - 0x42, 0x0a, 0x81, 0xb5, - 0x90, 0x2b, 0x60, 0x80, - 0x5c, 0x00, 0x10, 0x29, - 0xe4, 0x40, 0x06, 0xf0, - 0x82, 0x11, 0x02, 0x33, - 0x02, 0x0a, 0x8c, 0x26, - 0xfc, 0x95, 0xe2, 0x30, - 0x90, 0x1b, 0x0c, 0x0b, - 0xe8, 0x04, 0x61, 0x08, - 0x4f, 0x76, 0x00, 0xab, - 0xa1, 0xab, 0xe0, 0x00, - 0x02, 0x94, 0x82, 0x75, - 0x04, 0x74, 0x7a, 0x80, - 0x06, 0xf0, 0xfa, 0x80, - 0x8c, 0x0b, 0x64, 0x40, - 0xe8, 0x48, 0x5b, 0xe8, - 0x14, 0x0b, 0x80, 0xab, - 0xe6, 0x70, 0x1e, 0xf0, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0x61, 0x90, 0x12, 0x04, + 0x42, 0x9a, 0x9e, 0x09, + 0x82, 0x03, 0xe6, 0x86, + 0xe6, 0x30, 0x01, 0x0a, + 0x03, 0x46, 0x80, 0xf5, + 0x84, 0x14, 0xe1, 0x34, + 0xb7, 0x1b, 0x84, 0x14, + 0x0c, 0x29, 0x82, 0xf5, + 0x40, 0x2b, 0x6c, 0x1d, + 0xe0, 0x08, 0x03, 0x36, + 0x68, 0x04, 0x5f, 0xa8, + 0x0f, 0x36, 0x8c, 0x0b, + 0x23, 0x0b, 0xe0, 0x08, + 0xe0, 0x08, 0x00, 0xc6, + 0xa1, 0xbb, 0x88, 0x05, + 0x4e, 0xb0, 0x06, 0xd5, + 0x20, 0x18, 0xdc, 0x00, + 0xe4, 0x20, 0x04, 0xf0, + 0x61, 0x40, 0x14, 0x0a, + 0x88, 0x16, 0x80, 0x23, + 0x00, 0x04, 0x5e, 0x95, + 0x80, 0x00, 0x0e, 0x06, + 0x80, 0x00, 0x5e, 0x95, + 0x3e, 0x04, 0x82, 0xc5, + 0x00, 0x04, 0x81, 0x71, + 0x40, 0x92, 0xfa, 0x80, + 0xbe, 0x0e, 0xfb, 0x80, + 0x00, 0x04, 0xbc, 0x04, + 0x40, 0x92, 0xfa, 0x80, + 0xbc, 0x0e, 0xfa, 0x80, + 0x6c, 0x04, 0x14, 0xa0, + 0x8e, 0xbb, 0x82, 0x81, + 0xee, 0x75, 0xa1, 0xab, + 0x8c, 0xf5, 0xa1, 0xbb, + 0x00, 0x04, 0xbc, 0x04, + 0xc4, 0x07, 0xfa, 0x80, + 0x0e, 0x00, 0x3e, 0x04, + 0x12, 0x04, 0xe4, 0x10, + 0x8c, 0x0b, 0x7a, 0x80, + 0x68, 0x00, 0x54, 0xa8, + 0x03, 0xd5, 0xc4, 0x97, + 0xa1, 0xbb, 0x80, 0xbb, + 0x40, 0xf6, 0x88, 0xd5, + 0x40, 0x00, 0x61, 0xa1, + 0x81, 0xb5, 0x81, 0x11, + 0x60, 0x80, 0x42, 0x0a, + 0x10, 0x29, 0x90, 0x2b, + 0x06, 0xf0, 0x5c, 0x00, + 0x02, 0x33, 0xe4, 0x20, + 0x8c, 0x26, 0x82, 0x11, + 0xe2, 0x30, 0x02, 0x0a, + 0x0c, 0x0b, 0xfc, 0x95, + 0x4b, 0x58, 0x90, 0x1b, + 0x00, 0xbb, 0xe8, 0x04, + 0xe0, 0x00, 0x4f, 0x76, + 0x82, 0x75, 0xa1, 0xbb, + 0x7a, 0x80, 0x02, 0x94, + 0xfa, 0x80, 0x04, 0x74, + 0x64, 0x20, 0x06, 0xf0, + 0x49, 0x98, 0x8c, 0x0b, + 0x80, 0xbb, 0xe8, 0x48, + 0x1e, 0xf0, 0x16, 0x0b, + 0x0c, 0x0c, 0xe6, 0x50, + 0xdd, 0x93, 0xf2, 0x7c, 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0x30, 0x1e, 0xf0, 0x82, 0x8b, 0x00, 0x9b, @@ -10523,7 +10778,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0xaf, 0x64, 0x71, 0xf0, 0xa0, 0x54, 0x62, 0xe2, 0x80, 0x14, 0x19, - 0xe8, 0x00, 0x55, 0x08, + 0xe8, 0x00, 0x4c, 0x88, 0x80, 0x7b, 0x42, 0x87, 0x67, 0xc0, 0x00, 0xa0, 0x3c, 0x6e, 0x90, 0x63, @@ -10535,7 +10790,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf8, 0x04, 0x12, 0x09, 0x44, 0x0a, 0xa4, 0x18, 0xd0, 0x07, 0xe0, 0x80, - 0x48, 0x00, 0x5f, 0x68, + 0x48, 0x00, 0x4d, 0x08, 0x0e, 0x0f, 0xa2, 0x0f, 0xfb, 0x80, 0x02, 0x64, 0x82, 0x45, 0x83, 0x0b, @@ -10553,169 +10808,6 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x01, 0x01, 0xf6, 0x75, 0x0c, 0x0c, 0x98, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x30, 0x1e, 0xf0, - 0x82, 0x9b, 0x00, 0x6b, - 0x6c, 0x41, 0x0c, 0x09, - 0x83, 0xa1, 0x40, 0x2b, - 0x6c, 0x39, 0x0c, 0x19, - 0xa1, 0x9b, 0x40, 0x2b, - 0x16, 0x90, 0x04, 0x8b, - 0xfc, 0x0e, 0xe4, 0x24, - 0x6c, 0x49, 0x0c, 0x09, - 0x3e, 0x0e, 0xc0, 0x2b, - 0x4c, 0x03, 0x81, 0x01, - 0x40, 0x16, 0x65, 0x51, - 0xe0, 0x80, 0x00, 0x86, - 0x65, 0x59, 0x4c, 0x03, - 0x91, 0x01, 0x40, 0x16, - 0x6a, 0xa9, 0x4c, 0xa1, - 0x4c, 0x01, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6a, 0xb9, - 0x6a, 0xad, 0x4c, 0xa1, - 0x4c, 0x01, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6a, 0xbd, - 0x00, 0x90, 0x82, 0x65, - 0x82, 0x7b, 0x6c, 0x04, - 0x6a, 0x91, 0x4c, 0xa1, - 0x04, 0x04, 0x40, 0x2c, - 0x01, 0xb5, 0xfa, 0x80, - 0x21, 0x1b, 0x81, 0x11, - 0x02, 0x85, 0x82, 0x7b, - 0x4c, 0xa1, 0x81, 0x01, - 0x40, 0x2c, 0x6a, 0x91, - 0x81, 0x21, 0x81, 0x11, - 0x90, 0x3b, 0x0c, 0x0b, - 0xe8, 0x00, 0x46, 0x88, - 0x17, 0x0a, 0x83, 0x01, - 0x4c, 0xa1, 0xf4, 0x30, - 0x00, 0x2c, 0x0a, 0x95, - 0x84, 0x28, 0x12, 0x90, - 0x04, 0x94, 0x04, 0x45, - 0xfc, 0x14, 0x9a, 0x80, - 0x42, 0x2a, 0xbe, 0x24, - 0x04, 0xb4, 0x66, 0x86, - 0xc5, 0x17, 0xfa, 0x80, - 0x02, 0x10, 0x8e, 0x13, - 0xc5, 0x1d, 0xec, 0x04, - 0x4c, 0xa1, 0x90, 0x25, - 0xc0, 0x2c, 0x6a, 0x95, - 0x8c, 0x0b, 0x03, 0x11, - 0x68, 0x00, 0x44, 0xa8, - 0x00, 0x80, 0x90, 0x3b, - 0x01, 0x0a, 0xe4, 0x1c, - 0x82, 0xb5, 0xf4, 0x20, - 0x6a, 0x99, 0x4c, 0xa1, - 0x00, 0x80, 0x40, 0x2c, - 0x06, 0x04, 0xe4, 0x20, - 0x85, 0x11, 0x7a, 0x80, - 0x8e, 0x2b, 0x0c, 0x0b, - 0xe8, 0x00, 0x43, 0x88, - 0x82, 0xa5, 0xa1, 0x8b, - 0x6a, 0x9d, 0x4c, 0xa1, - 0x00, 0x80, 0x40, 0x2c, - 0x06, 0x04, 0xec, 0x04, - 0x87, 0x11, 0x7a, 0x80, - 0x8e, 0x2b, 0x0c, 0x0b, - 0xe8, 0x00, 0x42, 0xa8, - 0x64, 0x85, 0x4c, 0xa1, - 0x00, 0x60, 0x40, 0x26, - 0xc0, 0xb2, 0x66, 0x91, - 0x89, 0x11, 0x01, 0xb5, - 0x14, 0xa4, 0x41, 0x28, - 0x02, 0x10, 0xfa, 0x80, - 0x84, 0xa3, 0xec, 0x04, - 0x64, 0x85, 0x4c, 0xa1, - 0xa1, 0x1b, 0xc0, 0x26, - 0x81, 0x91, 0xfc, 0xd5, - 0x98, 0xf1, 0x12, 0x0b, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xa1, 0x0b, 0xdd, 0x93, - 0x0c, 0x29, 0xf0, 0xf5, - 0x40, 0x2b, 0x6c, 0x1d, - 0xe0, 0x0c, 0x02, 0x76, - 0x68, 0x04, 0x5f, 0xc8, - 0x12, 0x76, 0x8c, 0x0b, - 0xa3, 0x0b, 0xe0, 0x0c, - 0xfd, 0xd5, 0xee, 0x75, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x30, 0x1e, 0xf0, - 0x84, 0x7b, 0x00, 0x8b, - 0x70, 0x84, 0x40, 0x82, - 0x00, 0x29, 0x86, 0x6b, - 0x40, 0x2c, 0x6a, 0xa1, - 0x40, 0x71, 0xc6, 0x17, - 0x40, 0x26, 0x64, 0x95, - 0x66, 0xa1, 0x06, 0x00, - 0x40, 0x61, 0xc0, 0xb2, - 0x40, 0x26, 0x64, 0xb5, - 0x23, 0x2b, 0x81, 0xa1, - 0x7c, 0x1e, 0x91, 0x21, - 0x04, 0x16, 0x83, 0x11, - 0x02, 0x86, 0x40, 0x00, - 0xbe, 0x3e, 0xc0, 0x00, - 0x64, 0xd5, 0x40, 0x21, - 0x40, 0x11, 0xc0, 0x26, - 0xc0, 0x26, 0x64, 0xf5, - 0x90, 0x03, 0xfc, 0x04, - 0x87, 0xb5, 0xbc, 0x0e, - 0x00, 0x74, 0x7c, 0x94, - 0x42, 0x60, 0xe0, 0x90, - 0x56, 0x02, 0xf0, 0x3c, - 0x90, 0x0b, 0x79, 0x84, - 0x7a, 0x80, 0x02, 0xb4, - 0x43, 0x58, 0x94, 0x93, - 0x6e, 0x38, 0xe8, 0x00, - 0xa1, 0x11, 0x68, 0x4c, - 0x61, 0x8c, 0x02, 0x94, - 0x3e, 0x19, 0x8e, 0x99, - 0x10, 0x13, 0x83, 0x31, - 0x02, 0x29, 0xb3, 0x3f, - 0x40, 0x2c, 0x6b, 0x41, - 0x48, 0x6a, 0x9d, 0x41, - 0x3c, 0x34, 0xe6, 0x92, - 0x42, 0x21, 0xa6, 0x2f, - 0x40, 0x2c, 0x6b, 0x41, - 0x14, 0x33, 0x8e, 0x43, - 0x46, 0x41, 0x82, 0xa1, - 0xc0, 0x2c, 0x6a, 0xc1, - 0x6b, 0x51, 0x46, 0xb1, - 0x46, 0x01, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6b, 0xd1, - 0x80, 0x08, 0xbe, 0x04, - 0xe0, 0x04, 0x00, 0x4a, - 0x62, 0x00, 0x00, 0x0c, - 0xe0, 0x04, 0x00, 0x1a, - 0x62, 0x00, 0x00, 0x1c, - 0x80, 0x73, 0x80, 0x63, - 0xf0, 0xb5, 0xb1, 0xab, - 0x0c, 0x0c, 0x98, 0xf1, - 0xdd, 0x93, 0xf2, 0x7c, - 0x61, 0x90, 0x04, 0x14, - 0x44, 0x2a, 0xa9, 0x31, - 0x06, 0x14, 0x66, 0x8e, - 0x8e, 0x39, 0xe1, 0x84, - 0x81, 0x21, 0x04, 0x03, - 0x81, 0x31, 0x06, 0x03, - 0x00, 0x00, 0x01, 0xe5, - 0xc0, 0x9c, 0x67, 0x81, - 0x70, 0x14, 0x00, 0x49, - 0xe0, 0x80, 0x42, 0x0a, - 0xc1, 0x90, 0x08, 0x44, - 0x25, 0x4f, 0x9e, 0x49, - 0xa8, 0x3f, 0x88, 0x21, - 0xe0, 0x40, 0x04, 0x0a, - 0x5d, 0x93, 0xfc, 0x95, - 0xfb, 0x80, 0x00, 0x34, - 0xe4, 0x7c, 0x03, 0x0a, - 0x04, 0x14, 0x82, 0xb5, - 0x8e, 0x19, 0x61, 0x8c, - 0x00, 0x09, 0x84, 0x03, - 0xc0, 0x2c, 0x6b, 0x41, - 0xe4, 0x84, 0x40, 0x4a, - 0xe2, 0x00, 0x00, 0x0c, - 0x5d, 0x93, 0xdd, 0x93, - 0xc1, 0xc3, 0x81, 0x01, 0xe5, 0x7c, 0x03, 0x0a, 0x04, 0x14, 0x82, 0xb5, 0x8e, 0x19, 0x61, 0x8c, @@ -10731,7 +10823,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x0b, 0xe0, 0x84, 0x80, 0x13, 0x7c, 0x08, 0xe5, 0x00, 0x02, 0x19, - 0x68, 0x4c, 0x66, 0x08, + 0x68, 0x4c, 0x68, 0x28, 0xd0, 0x07, 0x82, 0x11, 0xf2, 0x00, 0x08, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, @@ -10747,7 +10839,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0x82, 0x95, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x42, 0x96, - 0x68, 0x04, 0x51, 0xa8, + 0x68, 0x04, 0x50, 0x68, 0xe0, 0x08, 0x56, 0x96, 0x84, 0x45, 0xa3, 0x0b, 0xe0, 0x22, 0x40, 0x7a, @@ -10773,7 +10865,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0x82, 0x95, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x42, 0x96, - 0x68, 0x04, 0x4e, 0x68, + 0x68, 0x04, 0x4d, 0x28, 0xe0, 0x08, 0x56, 0x96, 0x84, 0x05, 0xa3, 0x0b, 0xe0, 0x22, 0x40, 0x7a, @@ -10786,6 +10878,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x96, 0x0b, 0x81, 0xb1, 0xf2, 0x7c, 0x0c, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, + 0x61, 0x90, 0x04, 0x14, + 0x44, 0x2a, 0xa9, 0x31, + 0x06, 0x14, 0x66, 0x8e, + 0x8e, 0x39, 0xe1, 0x84, + 0x81, 0x21, 0x04, 0x03, + 0x81, 0x31, 0x06, 0x03, + 0x00, 0x00, 0x01, 0xe5, + 0xc0, 0x9c, 0x67, 0x81, + 0x70, 0x14, 0x00, 0x49, + 0xe0, 0x80, 0x42, 0x0a, + 0xc1, 0x90, 0x08, 0x44, + 0x25, 0x4f, 0x9e, 0x49, + 0xa8, 0x3f, 0x88, 0x21, + 0xe0, 0x40, 0x04, 0x0a, + 0x5d, 0x93, 0xfc, 0x95, + 0xfb, 0x80, 0x00, 0x34, 0x9f, 0x21, 0x01, 0x11, 0x81, 0x31, 0x03, 0x95, 0x68, 0x84, 0x08, 0x24, @@ -10820,7 +10928,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x80, 0x0e, 0x94, 0x6e, 0xf1, 0x0c, 0xb9, 0x94, 0x0b, 0x40, 0x2b, - 0x6f, 0xfc, 0x73, 0x08, + 0x6f, 0xfc, 0x71, 0x08, 0x00, 0x0a, 0x8e, 0x1b, 0x86, 0xb5, 0xf0, 0x04, 0x6c, 0xe9, 0x14, 0x09, @@ -10850,7 +10958,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x45, 0x2a, 0x81, 0x55, 0xec, 0x04, 0x10, 0x80, 0xa1, 0x8b, 0xc1, 0x2c, - 0x77, 0x38, 0xfe, 0x75, + 0x77, 0x58, 0xfe, 0x75, 0x94, 0x0b, 0x68, 0x44, 0x0c, 0x0c, 0xb8, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, @@ -10867,7 +10975,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0xd0, 0x1e, 0xf0, 0x02, 0xf0, 0x00, 0x9b, - 0x5b, 0xb8, 0xe4, 0xc0, + 0x5c, 0x18, 0xe4, 0xc0, 0x04, 0xf0, 0x68, 0x0c, 0x12, 0x39, 0xe4, 0xb0, 0xc0, 0x2b, 0x6c, 0x49, @@ -10896,94 +11004,88 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x26, 0x64, 0xd1, 0xe4, 0xa0, 0x02, 0xf0, 0x64, 0xf1, 0x52, 0xa1, - 0x67, 0x78, 0xc0, 0x26, + 0x67, 0xd8, 0xc0, 0x26, 0x80, 0x7b, 0xe8, 0x0c, - 0x80, 0xc5, 0xa1, 0x7b, - 0xe8, 0xf1, 0x0e, 0x0b, - 0xf2, 0x7c, 0x0c, 0x0c, - 0x45, 0xb7, 0xdd, 0x93, - 0xe1, 0x88, 0x06, 0x64, - 0xa1, 0xbb, 0x7c, 0xbe, - 0xa1, 0x3b, 0x80, 0x65, - 0x12, 0x29, 0x82, 0xf5, - 0x40, 0x2b, 0x6c, 0x1d, - 0xe0, 0x08, 0x42, 0x96, - 0x86, 0x6b, 0x12, 0x0b, - 0x68, 0x00, 0x7d, 0x68, - 0xe0, 0x08, 0x4e, 0x96, - 0x8c, 0x3b, 0x23, 0x0b, - 0x0d, 0x04, 0xf8, 0xc5, - 0x7c, 0x14, 0xc5, 0x87, - 0xe0, 0x0c, 0x4b, 0xf6, - 0x60, 0x0e, 0x48, 0x8a, - 0xc5, 0x07, 0x81, 0xb1, - 0xe0, 0x06, 0x44, 0x0a, - 0x8b, 0x14, 0x8f, 0x04, - 0xbc, 0x4e, 0xbe, 0x2e, - 0x42, 0x4a, 0x02, 0x03, - 0x09, 0x24, 0xe6, 0x8a, - 0xec, 0x04, 0x00, 0x00, - 0x84, 0xa3, 0xfe, 0x0e, - 0x6c, 0x04, 0x00, 0xa0, - 0x8d, 0x0e, 0x81, 0xa1, - 0x65, 0x3d, 0x52, 0x11, - 0x8b, 0xe5, 0xc0, 0x2c, - 0xf0, 0xac, 0x4c, 0x92, - 0x6e, 0xf1, 0x0c, 0x09, - 0x4c, 0x51, 0xc0, 0x2b, - 0xc0, 0x2c, 0x62, 0xb1, - 0x63, 0xf1, 0x4c, 0x51, - 0x42, 0x00, 0xc0, 0x2c, - 0xc5, 0x1d, 0xf0, 0x3c, - 0x8d, 0x44, 0x92, 0xd5, - 0x92, 0x75, 0xc8, 0x1d, - 0xc9, 0x07, 0x7e, 0x14, - 0x90, 0xf5, 0xc2, 0x0d, - 0xc3, 0x0d, 0x8f, 0x14, - 0x00, 0xb4, 0x90, 0x95, - 0x44, 0xb0, 0x61, 0x8c, - 0x3e, 0x09, 0xf0, 0x1c, - 0x12, 0x03, 0x83, 0x41, - 0xe8, 0x88, 0x04, 0x44, - 0x65, 0xc1, 0x00, 0x19, - 0x86, 0x8b, 0x40, 0x2c, - 0x7a, 0x80, 0x08, 0xa4, - 0xe4, 0x90, 0x0a, 0xf0, - 0x58, 0x12, 0x7c, 0x14, - 0x0b, 0x34, 0xf9, 0x88, - 0xfa, 0x80, 0x04, 0x34, - 0x65, 0xc1, 0x40, 0xc1, - 0x92, 0x0b, 0x40, 0x2c, - 0xfa, 0x80, 0x02, 0x14, - 0x6f, 0xfc, 0x64, 0x88, - 0xfa, 0x80, 0x06, 0x34, - 0xa1, 0x7b, 0x80, 0x7b, - 0x3e, 0x04, 0xe2, 0x55, - 0xe4, 0x80, 0x0a, 0xf0, - 0xe0, 0x90, 0x1e, 0x49, - 0xe0, 0xa0, 0x1e, 0x39, - 0x02, 0x04, 0x3c, 0x04, - 0x4c, 0x41, 0xfa, 0x80, + 0xa6, 0x55, 0xa1, 0x7b, + 0x06, 0x64, 0x45, 0xb7, + 0x7c, 0xbe, 0xe1, 0x88, + 0x80, 0x65, 0xa1, 0xbb, + 0x82, 0xf5, 0xa1, 0x3b, + 0x6c, 0x1d, 0x12, 0x29, + 0x42, 0x96, 0x40, 0x2b, + 0x12, 0x0b, 0xe0, 0x08, + 0x7a, 0x78, 0x86, 0x6b, + 0x4e, 0x96, 0x68, 0x00, + 0x23, 0x0b, 0xe0, 0x08, + 0xa0, 0x85, 0x8c, 0x3b, + 0xc5, 0x87, 0x0d, 0x04, + 0x4b, 0xf6, 0x7c, 0x14, + 0x48, 0x8a, 0xe0, 0x0c, + 0x81, 0xb1, 0x60, 0x0e, + 0x44, 0x0a, 0xc5, 0x07, + 0x8f, 0x04, 0xe0, 0x06, + 0xbe, 0x2e, 0x8b, 0x14, + 0x02, 0x03, 0xbc, 0x4e, + 0xe6, 0x8a, 0x42, 0x4a, + 0x00, 0x00, 0x09, 0x24, + 0xfe, 0x0e, 0xec, 0x04, + 0x00, 0xa0, 0x84, 0xa3, + 0x81, 0xa1, 0x6c, 0x04, + 0x52, 0x11, 0x8d, 0x0e, + 0xc0, 0x2c, 0x65, 0x3d, + 0x4c, 0x92, 0x8b, 0xe5, + 0x0c, 0x09, 0xf0, 0xac, + 0xc0, 0x2b, 0x6e, 0xf1, + 0x62, 0xb1, 0x4c, 0x51, + 0x4c, 0x51, 0xc0, 0x2c, 0xc0, 0x2c, 0x63, 0xf1, - 0x7a, 0x80, 0x04, 0x04, - 0x66, 0x58, 0x92, 0x0b, - 0x80, 0x7b, 0xef, 0xfc, - 0xdc, 0xb5, 0xa1, 0x7b, - 0x60, 0x80, 0x1e, 0x09, - 0x10, 0x3b, 0x82, 0xa1, - 0xe0, 0x0c, 0x4b, 0xf6, - 0x62, 0xb1, 0x4c, 0x01, - 0x89, 0x24, 0xc0, 0x2c, - 0x17, 0x0a, 0x82, 0xb1, - 0xe8, 0x25, 0xe5, 0x3c, - 0x68, 0x00, 0x41, 0x08, - 0x80, 0x7b, 0x92, 0x0b, - 0xd8, 0x35, 0xa1, 0x7b, - 0x60, 0xb0, 0x1e, 0x29, - 0x1e, 0x19, 0x92, 0x0b, - 0x4a, 0x78, 0xe0, 0xc0, - 0x6b, 0x95, 0xef, 0xfc, - 0xc1, 0xc3, 0x80, 0x7b, + 0xf0, 0x3c, 0x42, 0x00, + 0x92, 0xd5, 0xc5, 0x1d, + 0xc8, 0x1d, 0x8d, 0x44, + 0x7e, 0x14, 0x92, 0x75, + 0xc2, 0x0d, 0xc9, 0x07, + 0x8f, 0x14, 0x90, 0xf5, + 0x90, 0x95, 0xc3, 0x0d, + 0x61, 0x8c, 0x00, 0xb4, + 0xf0, 0x1c, 0x44, 0xb0, + 0x83, 0x41, 0x3e, 0x09, + 0x04, 0x44, 0x12, 0x03, + 0x00, 0x19, 0xe8, 0x88, + 0x40, 0x2c, 0x65, 0xc1, + 0x08, 0xa4, 0x86, 0x8b, + 0x0a, 0xf0, 0x7a, 0x80, + 0x7c, 0x14, 0xe4, 0x90, + 0xf9, 0x88, 0x58, 0x12, + 0x04, 0x34, 0x0b, 0x34, + 0x40, 0xc1, 0xfa, 0x80, + 0x40, 0x2c, 0x65, 0xc1, + 0x02, 0x14, 0x92, 0x0b, + 0x62, 0xd8, 0xfa, 0x80, + 0x06, 0x34, 0x6f, 0xfc, + 0x80, 0x7b, 0xfa, 0x80, + 0x8a, 0x15, 0xa1, 0x7b, + 0x0a, 0xf0, 0x3e, 0x04, + 0x1e, 0x49, 0xe4, 0x80, + 0x1e, 0x39, 0xe0, 0x90, + 0x3c, 0x04, 0xe0, 0xa0, + 0xfa, 0x80, 0x02, 0x04, + 0x63, 0xf1, 0x4c, 0x41, + 0x04, 0x04, 0xc0, 0x2c, + 0x92, 0x0b, 0x7a, 0x80, + 0xef, 0xfc, 0x64, 0xa8, + 0xa1, 0x7b, 0x80, 0x7b, + 0x1e, 0x09, 0x84, 0x75, + 0x82, 0xa1, 0x60, 0x80, + 0x4b, 0xf6, 0x10, 0x3b, + 0x4c, 0x01, 0xe0, 0x0c, + 0xc0, 0x2c, 0x62, 0xb1, + 0x82, 0xb1, 0x89, 0x24, + 0xe5, 0x3c, 0x17, 0x0a, + 0x40, 0x98, 0xe8, 0x25, + 0x92, 0x0b, 0x68, 0x00, + 0x0e, 0x0b, 0x80, 0x7b, + 0x0c, 0x0c, 0xe8, 0xf1, + 0xdd, 0x93, 0xf2, 0x7c, 0xfa, 0x1c, 0x04, 0x0c, 0xec, 0x30, 0x1e, 0xf0, 0x81, 0x81, 0x00, 0x6b, @@ -10991,9 +11093,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa3, 0x0b, 0xc0, 0x2b, 0x02, 0xf0, 0x8a, 0x85, 0x8c, 0x0b, 0x64, 0x20, - 0xe8, 0x0c, 0x5c, 0x68, + 0xe8, 0x0c, 0x5d, 0x88, 0x88, 0xd5, 0xa1, 0x0b, - 0x6f, 0xdc, 0x01, 0x86, + 0x6f, 0xdc, 0x40, 0x06, 0x80, 0x08, 0x81, 0x91, 0xe0, 0x80, 0x40, 0x4a, 0x04, 0xf1, 0x00, 0x60, @@ -11031,7 +11133,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x63, 0xfc, 0x12, 0x0a, 0xfc, 0x2e, 0x81, 0x01, 0x90, 0x0c, 0xbe, 0x4e, - 0x80, 0x00, 0x0b, 0xa8, + 0x80, 0x00, 0x0b, 0x98, 0x10, 0x50, 0x49, 0x37, 0xc0, 0xb0, 0x66, 0xb1, 0x0e, 0x50, 0x3c, 0x3e, @@ -11046,7 +11148,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa0, 0x18, 0xc0, 0x2c, 0x86, 0x15, 0x83, 0x0b, 0x7a, 0x80, 0x02, 0xb4, - 0x56, 0xb8, 0x8a, 0x0b, + 0x55, 0x78, 0x8a, 0x0b, 0x00, 0x0a, 0xef, 0xfc, 0x1e, 0x55, 0xf0, 0x04, 0x82, 0xd5, 0xc0, 0x0c, @@ -11060,7 +11162,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x71, 0x82, 0x81, 0xe5, 0x3c, 0x17, 0x0a, 0xa1, 0xab, 0xf4, 0xe5, - 0x0a, 0x8b, 0xa0, 0x05, + 0x0a, 0x8b, 0x9e, 0xe5, 0xc0, 0x15, 0x6a, 0x7d, 0xc9, 0x87, 0xbc, 0x14, 0xfb, 0x80, 0x00, 0x14, @@ -11080,7 +11182,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x44, 0x11, 0x8a, 0x23, 0xc0, 0x2c, 0x61, 0x71, 0xfe, 0x15, 0xa1, 0xab, - 0x81, 0x31, 0x8b, 0x85, + 0x81, 0x31, 0x8b, 0x75, 0x00, 0x34, 0x85, 0x05, 0x02, 0xf0, 0x60, 0x88, 0x02, 0x15, 0xe4, 0x50, @@ -11099,35 +11201,34 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x2c, 0x61, 0x71, 0xf8, 0x15, 0x95, 0x3b, 0x94, 0x7b, 0x21, 0x06, - 0x83, 0xa3, 0xa1, 0x43, - 0xe8, 0x00, 0x12, 0xcc, + 0x83, 0x23, 0xa1, 0x43, + 0x4e, 0x8a, 0xab, 0xe3, + 0x8a, 0x25, 0xec, 0x20, + 0x64, 0x50, 0x12, 0xf0, + 0x82, 0xb1, 0xff, 0xb1, + 0x88, 0x45, 0xd5, 0xbd, + 0x00, 0x50, 0x24, 0x64, + 0xc0, 0xaf, 0x64, 0x71, + 0xe4, 0x40, 0x04, 0xf0, + 0x60, 0x84, 0x02, 0x64, + 0x00, 0x0b, 0x80, 0x63, + 0x0c, 0x19, 0xfc, 0x04, + 0x73, 0xd8, 0xe5, 0x00, + 0x21, 0x08, 0xef, 0xfc, + 0x0c, 0x19, 0x88, 0x91, + 0x83, 0x0b, 0xe5, 0x00, + 0x05, 0x01, 0x02, 0x60, + 0x0e, 0x74, 0x40, 0x01, + 0x42, 0x01, 0xdb, 0x80, + 0x0e, 0x70, 0x40, 0x00, + 0x7e, 0x54, 0xc4, 0x04, 0xec, 0x20, 0x4e, 0x8a, - 0x12, 0xf0, 0x8a, 0x25, - 0xff, 0xb1, 0x64, 0x50, - 0xd5, 0xbd, 0x82, 0xb1, - 0x24, 0x64, 0x88, 0x45, - 0x64, 0x71, 0x00, 0x50, - 0x04, 0xf0, 0xc0, 0xaf, - 0x02, 0x64, 0xe4, 0x40, - 0x80, 0x63, 0x60, 0x84, - 0xfc, 0x04, 0x00, 0x0b, - 0xe5, 0x00, 0x0c, 0x19, - 0xef, 0xfc, 0x73, 0xc8, - 0x88, 0x91, 0x21, 0x08, - 0xe5, 0x00, 0x0c, 0x19, - 0x02, 0x60, 0x83, 0x0b, - 0x40, 0x01, 0x05, 0x01, - 0xdb, 0x80, 0x0e, 0x74, - 0x40, 0x00, 0x42, 0x01, - 0xc4, 0x04, 0x0e, 0x70, - 0x4e, 0x8a, 0x7e, 0x54, - 0xf6, 0xb5, 0xec, 0x20, - 0x3e, 0x04, 0xc1, 0xc3, - 0x80, 0x7c, 0xc8, 0x77, - 0xf8, 0xf1, 0x01, 0x01, - 0xf0, 0x00, 0x18, 0xfc, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0xc1, 0xc3, 0xf6, 0xb5, + 0xc8, 0x77, 0x3e, 0x04, + 0x01, 0x01, 0x80, 0x7c, + 0x18, 0xfc, 0xf8, 0xf1, + 0x0c, 0x0c, 0xf0, 0x00, + 0xdd, 0x93, 0xf2, 0x7c, 0xfa, 0x00, 0x04, 0x0c, 0x02, 0x46, 0x02, 0x6b, 0x04, 0x14, 0xe1, 0x28, @@ -11139,7 +11240,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x31, 0x40, 0x1b, 0xa1, 0x11, 0x23, 0x2f, 0x88, 0x0b, 0x21, 0x2f, - 0xef, 0xe8, 0x5b, 0x68, + 0xef, 0xe8, 0x75, 0x48, 0x81, 0x01, 0x18, 0x0e, 0xf2, 0x00, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -11178,7 +11279,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x80, 0x40, 0x00, 0x42, 0x70, 0xdc, 0x00, 0x48, 0x50, 0x5c, 0x00, - 0x6c, 0xb8, 0xdc, 0x00, + 0x6c, 0xd8, 0xdc, 0x00, 0x81, 0x01, 0xcf, 0xfc, 0x0c, 0x0c, 0xa8, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, @@ -11192,7 +11293,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8d, 0x0b, 0x82, 0x25, 0x02, 0x94, 0x80, 0xf5, 0x8e, 0x0b, 0x7a, 0x80, - 0xef, 0xfc, 0x45, 0xa8, + 0xef, 0xfc, 0x44, 0x88, 0x82, 0x91, 0x80, 0x83, 0xe1, 0x40, 0x12, 0x0a, 0x90, 0x0b, 0xfa, 0xb5, @@ -11206,19 +11307,19 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x08, 0x8b, 0x8a, 0x7b, 0x00, 0x08, 0x86, 0x9b, 0x7e, 0x1e, 0x84, 0xab, - 0x4b, 0x18, 0x91, 0x11, + 0x64, 0xf8, 0x91, 0x11, 0x00, 0x2b, 0xef, 0xe8, 0xe4, 0x40, 0x00, 0xf0, 0x0a, 0x84, 0x3e, 0x0e, 0x3c, 0x7e, 0xe0, 0x90, 0x64, 0xe1, 0x06, 0x60, 0x16, 0x0b, 0xc0, 0xad, - 0x6d, 0xd8, 0x94, 0x1b, + 0x4d, 0xf8, 0x94, 0x1b, 0x92, 0x4b, 0x6f, 0xb4, 0xa1, 0x7b, 0x80, 0x7b, 0x0c, 0x29, 0x82, 0x65, 0x40, 0x2b, 0x6c, 0x1d, - 0x56, 0xb8, 0x8c, 0x0b, + 0x54, 0x58, 0x8c, 0x0b, 0x8e, 0x1b, 0x68, 0x00, 0x81, 0x01, 0x23, 0x0b, 0x09, 0x04, 0x80, 0xe5, @@ -11228,57 +11329,38 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x0c, 0xa8, 0xf1, 0x0c, 0x0c, 0x8e, 0x0b, 0xdd, 0x93, 0xf2, 0x7c, - 0xfa, 0x7c, 0x04, 0x0c, - 0xec, 0x30, 0x1e, 0xf0, - 0x02, 0x00, 0x02, 0x6b, + 0xfa, 0x3c, 0x04, 0x0c, + 0x0e, 0x00, 0x02, 0x6b, 0xc0, 0xb0, 0x65, 0x71, - 0x16, 0x00, 0x7c, 0x1e, - 0xc0, 0xaf, 0x66, 0xf1, - 0x81, 0x91, 0x3e, 0x0e, - 0x7f, 0xf4, 0x4e, 0x0e, - 0x01, 0xa1, 0x9d, 0x81, - 0x03, 0xa5, 0x81, 0x01, - 0xac, 0x18, 0x81, 0x31, - 0x70, 0x3c, 0x44, 0x10, - 0x44, 0x2a, 0xc9, 0x17, - 0x82, 0x23, 0xe6, 0xa2, - 0x82, 0xb5, 0x8d, 0x2b, - 0x16, 0x19, 0xfc, 0x04, - 0xb4, 0x03, 0xe2, 0x80, - 0x78, 0x81, 0x00, 0x0b, - 0x82, 0x11, 0x40, 0x01, - 0xe8, 0x48, 0x65, 0x88, - 0x83, 0x01, 0x00, 0x3b, - 0x6c, 0x08, 0x14, 0xa0, - 0x8f, 0xab, 0x82, 0xb1, - 0xa1, 0x0b, 0xf8, 0xf5, - 0xbe, 0x84, 0x86, 0x35, - 0x4e, 0x82, 0x83, 0x45, - 0x0e, 0x09, 0xf0, 0xa4, - 0xc0, 0x2c, 0x6a, 0xc1, - 0x82, 0x95, 0x8d, 0x0b, - 0x7a, 0x80, 0x02, 0x94, - 0x7b, 0x18, 0x90, 0x0b, - 0x86, 0xab, 0x6f, 0xf8, - 0xa1, 0x0b, 0x14, 0x3b, - 0x0b, 0xd1, 0x0e, 0x39, - 0x82, 0x91, 0xc0, 0x2c, - 0xe0, 0x80, 0x12, 0x0a, - 0x00, 0x34, 0xfa, 0x75, - 0x98, 0xf1, 0x60, 0xa0, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0x64, 0x71, 0x10, 0x00, + 0x81, 0x01, 0x40, 0xaf, + 0x60, 0x04, 0x13, 0x06, + 0x83, 0x75, 0x9d, 0xa1, + 0x78, 0x81, 0x0e, 0x19, + 0x44, 0x10, 0xc0, 0x01, + 0xc9, 0x17, 0x70, 0x3c, + 0xe6, 0xaa, 0x44, 0x2a, + 0x8d, 0x2b, 0x82, 0x23, + 0x80, 0x00, 0x0e, 0x19, + 0x80, 0x00, 0x10, 0x0b, + 0x08, 0x48, 0x67, 0x28, + 0x84, 0x04, 0x02, 0x10, + 0x6c, 0x04, 0x12, 0x90, + 0x84, 0x81, 0x82, 0x71, + 0xfa, 0x35, 0xa1, 0x9b, + 0x0c, 0x0c, 0xd0, 0x07, + 0xdd, 0x93, 0xf2, 0x3c, 0xfa, 0x00, 0x04, 0x0c, 0x02, 0x06, 0x00, 0x6b, - 0x5a, 0x98, 0xe2, 0x80, + 0x5d, 0xf8, 0xe2, 0x80, 0x43, 0xf6, 0xe8, 0x48, 0x05, 0x86, 0x60, 0x0c, - 0x48, 0x78, 0xe0, 0x10, - 0x8c, 0x0b, 0x6f, 0xac, + 0x7b, 0x98, 0xe0, 0x10, + 0x8c, 0x0b, 0x6f, 0xa8, 0x45, 0x76, 0x01, 0x11, 0x0c, 0x0b, 0xe0, 0x00, 0x0c, 0x0c, 0x8c, 0x3b, - 0x3a, 0xd8, 0xf2, 0x00, + 0x3e, 0x38, 0xf2, 0x00, 0xc1, 0xc3, 0xe0, 0x40, 0xfa, 0x9c, 0x04, 0x0c, 0x40, 0x96, 0x00, 0x6b, @@ -11286,7 +11368,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0x02, 0x06, 0x82, 0x7b, 0x8c, 0x0b, 0x62, 0x80, - 0xe8, 0x48, 0x58, 0xa8, + 0xe8, 0x48, 0x5c, 0x08, 0xe4, 0x40, 0x0e, 0x8a, 0x0c, 0x29, 0x82, 0xd5, 0x40, 0x2b, 0x6c, 0x1d, @@ -11309,7 +11391,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x40, 0x02, 0x0a, 0x01, 0x11, 0xfc, 0xb5, 0x0c, 0x0b, 0x9f, 0x21, - 0x64, 0x58, 0x8c, 0x3b, + 0x67, 0xb8, 0x8c, 0x3b, 0x80, 0x8b, 0xe8, 0x40, 0x84, 0x55, 0xa1, 0x8b, 0x6a, 0xa9, 0x0c, 0x09, @@ -11324,7 +11406,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf2, 0x9c, 0x0c, 0x0c, 0x0c, 0x0b, 0xdd, 0x93, 0x0c, 0x0c, 0x8c, 0x1b, - 0x15, 0x78, 0xf2, 0x9c, + 0x1c, 0x78, 0xf2, 0x9c, 0xc1, 0xc3, 0xe0, 0x3c, 0xfa, 0x00, 0x04, 0x0c, 0x61, 0x00, 0x4c, 0x46, @@ -11336,7 +11418,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x28, 0x98, 0x14, 0xf3, 0xf8, 0x44, 0x20, 0x43, 0x46, 0x04, 0x26, - 0x5e, 0xf8, 0xe0, 0x1c, + 0x62, 0x58, 0xe0, 0x1c, 0x83, 0x21, 0x68, 0x44, 0x80, 0x18, 0x98, 0x04, 0xf3, 0xf4, 0x42, 0x10, @@ -11354,23 +11436,23 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x01, 0x00, 0x16, 0x6c, 0x25, 0x46, 0x21, 0x81, 0x11, 0x40, 0x2b, - 0x6f, 0xf0, 0x5e, 0xa8, + 0x6f, 0xf0, 0x78, 0xa8, 0x08, 0x0c, 0x86, 0x2b, - 0x33, 0x98, 0xf2, 0x80, - 0xc1, 0xc3, 0xff, 0xec, + 0x0f, 0xd8, 0xf2, 0x80, + 0xc1, 0xc3, 0xff, 0xf0, 0xfa, 0x3c, 0x04, 0x0c, 0x81, 0x01, 0x00, 0x6b, - 0x68, 0x14, 0x48, 0x28, + 0x68, 0x14, 0x4d, 0x48, 0x81, 0x81, 0x81, 0x11, - 0x68, 0x28, 0x65, 0x08, + 0x68, 0x28, 0x6f, 0xc8, 0x12, 0x86, 0x80, 0x7b, 0xa4, 0x04, 0xe1, 0x3c, 0x42, 0x10, 0x80, 0x18, 0x80, 0x16, 0xf3, 0xbc, - 0xe8, 0x30, 0x68, 0x48, + 0xe8, 0x30, 0x72, 0xc8, 0x95, 0x11, 0x03, 0xa1, 0x8c, 0x0b, 0x03, 0x21, - 0xe8, 0x44, 0x5a, 0xc8, + 0xe8, 0x44, 0x5e, 0x28, 0xe1, 0x10, 0x41, 0x46, 0x84, 0x86, 0x80, 0x14, 0x80, 0xa6, 0x80, 0x04, @@ -11398,7 +11480,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x18, 0x00, 0xc6, 0x00, 0x86, 0x80, 0x04, 0x0c, 0x0c, 0x8e, 0x0b, - 0x03, 0x58, 0xf2, 0x3c, + 0x08, 0x78, 0xf2, 0x3c, 0xc1, 0xc3, 0xe0, 0x14, 0xfa, 0x3c, 0x04, 0x0c, 0x81, 0x61, 0x02, 0xab, @@ -11408,10 +11490,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6c, 0x1d, 0x4e, 0x01, 0x84, 0x9b, 0x40, 0x2b, 0x50, 0x04, 0x4c, 0x60, - 0x42, 0x18, 0x81, 0x01, + 0x47, 0x38, 0x81, 0x01, 0x81, 0x11, 0x68, 0x14, 0x42, 0x56, 0x00, 0x8b, - 0x57, 0xd8, 0xe0, 0x00, + 0x5c, 0xf8, 0xe0, 0x00, 0x8e, 0x0b, 0x68, 0x14, 0x01, 0x06, 0x21, 0x6b, 0x4e, 0x01, 0xe0, 0x04, @@ -11433,7 +11515,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x75, 0xa3, 0x0b, 0x72, 0xc1, 0x02, 0x06, 0x8e, 0x0b, 0x40, 0x20, - 0xef, 0xec, 0x5a, 0xa8, + 0xef, 0xec, 0x76, 0xe8, 0x01, 0x36, 0x81, 0xf5, 0x94, 0x1b, 0x60, 0x04, 0x6c, 0x1d, 0x4e, 0x01, @@ -11443,12 +11525,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x68, 0x00, 0x41, 0x68, 0x42, 0x96, 0x8e, 0x0b, 0x8e, 0x0b, 0x60, 0x00, - 0xe8, 0x14, 0x53, 0xe8, + 0xe8, 0x14, 0x59, 0x08, 0x60, 0x00, 0x42, 0x66, - 0x53, 0x98, 0x8e, 0x0b, + 0x58, 0xb8, 0x8e, 0x0b, 0x03, 0x11, 0xe8, 0x14, - 0x7d, 0x38, 0x90, 0x0b, - 0x8c, 0x0b, 0xe8, 0x10, + 0x42, 0x58, 0x90, 0x0b, + 0x8c, 0x0b, 0xe8, 0x14, 0xf2, 0x3c, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x84, 0x04, 0x0c, @@ -11459,277 +11541,316 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x15, 0x6e, 0x09, 0x4c, 0x01, 0x81, 0x01, 0xc0, 0x2b, 0x64, 0xd5, - 0xe8, 0x00, 0x78, 0x88, + 0xe8, 0x00, 0x7d, 0x68, 0x8c, 0x0b, 0x00, 0x7b, - 0xe8, 0x18, 0x59, 0x28, - 0x68, 0x00, 0x77, 0xa8, - 0x42, 0xd8, 0x8c, 0x0b, + 0xe8, 0x18, 0x5e, 0x48, + 0x68, 0x00, 0x7c, 0x88, + 0x47, 0xf8, 0x8c, 0x0b, 0xa1, 0x7b, 0xe8, 0x0c, - 0x4a, 0x18, 0x86, 0x25, + 0x49, 0xf8, 0x86, 0x25, 0x8c, 0x0b, 0x68, 0x00, 0x68, 0x00, 0x41, 0x88, - 0x01, 0x46, 0x8c, 0x0b, + 0x01, 0xc6, 0x8c, 0x0b, 0x42, 0x46, 0x6f, 0xdc, 0x42, 0x1e, 0xe0, 0x04, 0x02, 0x16, 0x83, 0x11, 0xe0, 0x1c, 0x43, 0x46, 0xf8, 0x08, 0x40, 0x15, - 0xef, 0xf0, 0x4f, 0x28, + 0xef, 0xf0, 0x69, 0x28, 0x0c, 0x0c, 0x8c, 0x0b, - 0x05, 0x58, 0xf2, 0x84, + 0x0a, 0x78, 0xf2, 0x84, 0x0c, 0x0c, 0xe0, 0x0c, 0xdd, 0x93, 0xf2, 0x84, 0x63, 0x49, 0x00, 0x19, - 0x81, 0x21, 0x40, 0x2d, - 0x6e, 0x51, 0x40, 0x21, - 0xa1, 0x31, 0x40, 0x2c, - 0x68, 0x09, 0x40, 0x23, - 0x40, 0x23, 0xc0, 0x0a, - 0x40, 0x0a, 0x68, 0x0d, - 0x40, 0x25, 0xe0, 0x19, - 0x40, 0x0a, 0x61, 0x1d, - 0x40, 0x21, 0xaf, 0x21, - 0x40, 0x28, 0x64, 0x91, - 0xe0, 0x0c, 0x45, 0xf6, - 0x67, 0xc9, 0x40, 0x21, - 0x04, 0x06, 0x40, 0x2d, - 0x40, 0x23, 0xe0, 0x08, - 0x40, 0x13, 0x69, 0x85, - 0x40, 0x11, 0x91, 0x21, + 0x06, 0x56, 0x40, 0x2d, + 0xc0, 0x01, 0x60, 0x01, + 0x64, 0x01, 0x40, 0x35, + 0x83, 0x31, 0x40, 0x05, + 0x68, 0x15, 0x40, 0x33, + 0x81, 0x21, 0x40, 0x0a, + 0x65, 0x45, 0x40, 0x31, + 0x07, 0x06, 0x40, 0x22, + 0x40, 0x31, 0xe0, 0x08, + 0x40, 0x1b, 0x65, 0x6d, + 0x40, 0x31, 0xe0, 0x19, + 0x40, 0x22, 0x65, 0x4d, + 0x40, 0x31, 0xa1, 0x41, + 0x40, 0x28, 0x64, 0x89, + 0x40, 0x11, 0xaf, 0x31, 0x40, 0x2d, 0x63, 0x49, 0x60, 0x11, 0x02, 0x26, - 0x40, 0x21, 0xc0, 0xc0, - 0x40, 0x27, 0x63, 0x15, - 0xe0, 0x10, 0x05, 0x86, - 0x65, 0x65, 0x40, 0x31, - 0x40, 0x33, 0xc0, 0x1b, - 0xc0, 0x14, 0x62, 0x41, - 0x69, 0x81, 0x40, 0x33, - 0x40, 0x31, 0xc0, 0x13, - 0x40, 0x27, 0x63, 0x11, - 0xe0, 0x8c, 0x06, 0x06, + 0x40, 0x31, 0xc0, 0xc0, + 0x40, 0x28, 0x64, 0x91, + 0xe0, 0x0c, 0x47, 0xf6, 0x63, 0x29, 0x40, 0x15, - 0x02, 0x56, 0x40, 0x0b, - 0xc0, 0x01, 0x60, 0x01, - 0x69, 0x91, 0x40, 0x23, - 0x45, 0x86, 0x40, 0x13, + 0x91, 0x11, 0x40, 0x0b, + 0x67, 0xc9, 0x40, 0x31, + 0x06, 0x06, 0x40, 0x2d, + 0x40, 0x33, 0xe0, 0x08, + 0x40, 0x13, 0x69, 0x85, + 0xe0, 0x8c, 0x06, 0x06, + 0x68, 0x11, 0x40, 0x13, + 0x40, 0x11, 0xc0, 0x0a, + 0x40, 0x27, 0x63, 0x15, + 0xe0, 0x10, 0x03, 0x86, + 0x69, 0x91, 0x40, 0x13, + 0x43, 0x86, 0x40, 0x13, 0x40, 0x33, 0xe0, 0x00, 0x40, 0x13, 0x69, 0x95, 0xe0, 0x00, 0x46, 0x86, - 0x64, 0x01, 0x40, 0x15, - 0x8b, 0x11, 0x40, 0x05, - 0x63, 0x31, 0x40, 0x21, - 0x89, 0x21, 0x40, 0x27, + 0x63, 0x31, 0x40, 0x11, + 0x89, 0x11, 0x40, 0x27, 0x63, 0x35, 0x40, 0x31, 0x00, 0x3b, 0xc0, 0x27, 0xc0, 0x0a, 0x69, 0x31, - 0x68, 0x11, 0x40, 0x13, - 0x83, 0x11, 0x40, 0x0a, - 0x6c, 0x61, 0x40, 0x21, - 0x85, 0x21, 0x40, 0x22, - 0x6c, 0x65, 0x40, 0x21, - 0x9d, 0x21, 0x40, 0x22, - 0x68, 0x15, 0x40, 0x13, - 0x40, 0x11, 0xc0, 0x0a, - 0x40, 0x22, 0x65, 0x45, - 0xe0, 0x08, 0x03, 0x06, - 0x6f, 0xb1, 0x40, 0x21, - 0x04, 0x34, 0x40, 0x22, - 0x40, 0x11, 0xfc, 0xa8, - 0xc0, 0x1b, 0x65, 0x6d, - 0x65, 0x4d, 0x40, 0x11, - 0x40, 0x11, 0xc0, 0x22, - 0x40, 0x28, 0x64, 0x89, - 0x40, 0x11, 0x95, 0x11, - 0xc0, 0x28, 0x64, 0x8d, - 0x6f, 0xb5, 0x40, 0x11, - 0x40, 0x23, 0xc0, 0x22, - 0xc0, 0x0a, 0x69, 0x31, - 0xc1, 0xc3, 0xdd, 0x93, - 0xf8, 0x1c, 0x04, 0x0c, - 0x53, 0xc6, 0x01, 0xc1, - 0x40, 0xc1, 0xe0, 0x04, - 0x40, 0x15, 0x62, 0x05, - 0xe0, 0x08, 0x0e, 0x06, - 0x63, 0x6d, 0x40, 0xc1, - 0x59, 0xf6, 0x40, 0x2d, + 0x6c, 0x61, 0x40, 0x11, + 0x85, 0x11, 0x40, 0x22, + 0x6c, 0x65, 0x40, 0x11, + 0x9d, 0x11, 0x40, 0x22, + 0x6f, 0xb1, 0x40, 0x11, + 0x02, 0x34, 0x40, 0x22, + 0x40, 0x21, 0xfc, 0xa8, + 0xc0, 0x2c, 0x6e, 0x51, + 0x68, 0x09, 0x40, 0x23, + 0x40, 0x23, 0xc0, 0x0a, + 0xc0, 0x0a, 0x68, 0x0d, + 0x61, 0x1d, 0x40, 0x25, + 0x95, 0x21, 0x40, 0x0a, + 0x65, 0x65, 0x40, 0x41, + 0x40, 0x43, 0xc0, 0x1b, + 0xc0, 0x14, 0x62, 0x41, + 0x64, 0x8d, 0x40, 0x21, + 0x40, 0x43, 0xc0, 0x28, + 0xc0, 0x13, 0x69, 0x81, + 0x63, 0x11, 0x40, 0x41, + 0x40, 0x21, 0xc0, 0x27, + 0xc0, 0x22, 0x6f, 0xb5, + 0x69, 0x31, 0x40, 0x13, + 0xdd, 0x93, 0xc0, 0x0a, + 0xf8, 0x7c, 0x04, 0x0c, + 0x60, 0x0c, 0x14, 0x86, + 0x63, 0xc0, 0x04, 0x0e, + 0x40, 0xa3, 0xc0, 0xbb, + 0x40, 0x15, 0x6d, 0xb5, + 0xef, 0xfc, 0x55, 0xf6, + 0x6d, 0xc1, 0x40, 0xa3, + 0x55, 0xf6, 0x40, 0x15, + 0x40, 0xa1, 0xe0, 0x0c, + 0x40, 0x2c, 0x6c, 0xfd, + 0xe0, 0x7c, 0x07, 0x06, + 0x63, 0x69, 0x40, 0xa1, + 0x55, 0xf6, 0x40, 0x2d, 0xc0, 0x20, 0x72, 0xfd, - 0x6e, 0x81, 0x40, 0x91, - 0xb7, 0x91, 0x40, 0x2c, - 0x64, 0xe1, 0x40, 0xc5, - 0x49, 0x86, 0x40, 0x0b, - 0x40, 0xc5, 0xef, 0xf0, - 0x40, 0x0b, 0x64, 0xe5, - 0x0b, 0x86, 0xbd, 0xc1, - 0x0d, 0xc6, 0x60, 0x24, - 0x40, 0x91, 0xe0, 0x5c, - 0x40, 0x2c, 0x6e, 0x89, - 0xe0, 0x0c, 0x10, 0x86, - 0x63, 0xa9, 0x40, 0xc1, - 0xab, 0x91, 0x40, 0x2d, - 0x02, 0x0e, 0x0d, 0xc1, - 0xc0, 0xbb, 0x63, 0xc1, - 0x6b, 0x19, 0x40, 0x43, - 0x07, 0x06, 0x40, 0x15, - 0x40, 0x53, 0xe0, 0x7c, - 0x40, 0x15, 0x6b, 0x1d, - 0x40, 0x63, 0x99, 0x41, + 0x64, 0x59, 0x40, 0x25, + 0x05, 0x06, 0x40, 0x05, + 0x40, 0xa5, 0xe0, 0x08, + 0x40, 0x0b, 0x64, 0xe1, + 0xe0, 0x04, 0x57, 0xc6, + 0x64, 0xe5, 0x40, 0xa5, + 0xbd, 0xa1, 0x40, 0x0b, + 0x6e, 0x25, 0x40, 0x21, + 0x83, 0x21, 0x40, 0x29, + 0x6e, 0x81, 0x40, 0xb1, + 0xb7, 0xb1, 0x40, 0x2c, + 0x63, 0xa9, 0x40, 0xa1, + 0x14, 0x56, 0x40, 0x2d, + 0xc0, 0x20, 0x70, 0x01, + 0x6a, 0xe1, 0x40, 0x33, + 0x12, 0x06, 0x40, 0x15, + 0x40, 0x33, 0xe0, 0x08, + 0x40, 0x1c, 0x62, 0x6d, + 0xe0, 0x00, 0x46, 0x86, + 0x60, 0x24, 0x0d, 0x86, + 0xe0, 0x5c, 0x11, 0xc6, + 0x6e, 0x89, 0x40, 0xb1, + 0xab, 0xb1, 0x40, 0x2c, + 0x62, 0x25, 0x40, 0x33, + 0x46, 0xc6, 0x40, 0x1c, + 0x40, 0x21, 0xe0, 0x00, + 0x40, 0x2b, 0x65, 0x11, + 0x40, 0x21, 0xa3, 0x51, + 0x40, 0x2b, 0x65, 0xd1, + 0xe0, 0x40, 0x0e, 0x06, + 0x66, 0x81, 0x40, 0x21, + 0x81, 0x11, 0x40, 0x2b, + 0x66, 0x85, 0x40, 0x21, + 0x91, 0xc1, 0x40, 0x2b, + 0x6b, 0x8d, 0x40, 0x21, + 0x85, 0x41, 0x40, 0x2b, + 0x6b, 0x91, 0x40, 0x21, + 0x40, 0x21, 0xc0, 0x2b, + 0xc0, 0x2c, 0x6d, 0x61, + 0x6e, 0x5d, 0x40, 0x21, + 0x40, 0x21, 0xc0, 0x2c, + 0xc0, 0x2c, 0x6e, 0x61, + 0x6e, 0x91, 0x40, 0x21, + 0x40, 0x21, 0xc0, 0x2c, + 0xc0, 0x2c, 0x6e, 0x99, + 0x63, 0x31, 0x40, 0x21, + 0x40, 0xa5, 0xc0, 0x2d, + 0xc0, 0x0b, 0x64, 0xed, + 0x64, 0xf1, 0x40, 0xa5, + 0x8d, 0xa1, 0x40, 0x0b, + 0x68, 0x1d, 0x40, 0x21, + 0x40, 0x21, 0xc0, 0x2d, + 0xc0, 0x2d, 0x69, 0xd9, + 0x69, 0xdd, 0x40, 0x21, + 0x40, 0x21, 0xc0, 0x2d, + 0xc0, 0x2d, 0x6a, 0x7d, + 0x64, 0xd5, 0x40, 0x21, + 0xa9, 0x21, 0x40, 0x38, + 0x6b, 0x1d, 0x40, 0x63, + 0x0c, 0x06, 0x40, 0x15, + 0x40, 0x83, 0xf9, 0x00, 0x40, 0x15, 0x6d, 0xb1, - 0xf9, 0x00, 0x0a, 0x06, - 0x6d, 0xb5, 0x40, 0x83, - 0x0c, 0xd6, 0x40, 0x15, - 0x40, 0x91, 0xe0, 0xcc, - 0x40, 0x2c, 0x6e, 0x95, - 0xef, 0xfc, 0x51, 0xf6, - 0x63, 0xd1, 0x40, 0xc1, - 0x12, 0xc6, 0x40, 0x2d, - 0x40, 0x71, 0xe0, 0x0c, - 0x40, 0x29, 0x6e, 0x21, - 0x72, 0xbd, 0x59, 0xf6, - 0x40, 0x71, 0xc0, 0x20, - 0x40, 0x29, 0x6e, 0x29, - 0x40, 0x71, 0x85, 0x21, + 0xe0, 0xcc, 0x10, 0xd6, + 0x6e, 0x95, 0x40, 0xb1, + 0x16, 0xc6, 0x40, 0x2c, + 0x40, 0xa1, 0xe0, 0x0c, + 0x40, 0x2d, 0x63, 0xd1, + 0x72, 0xbd, 0x55, 0xf6, + 0x40, 0x23, 0xc0, 0x20, + 0x40, 0x1c, 0x62, 0x11, + 0xe0, 0x10, 0x44, 0xc6, + 0x62, 0x29, 0x40, 0x33, + 0x07, 0x06, 0x40, 0x1c, + 0x40, 0x91, 0xe0, 0x18, + 0xc0, 0x29, 0x6e, 0x21, + 0x6e, 0x29, 0x40, 0x91, + 0x40, 0x91, 0xc0, 0x29, 0x40, 0x2c, 0x6e, 0x9d, - 0x40, 0x15, 0xb5, 0x71, - 0x40, 0x05, 0x64, 0x59, - 0xe0, 0x08, 0x03, 0x06, - 0x6a, 0xe1, 0x40, 0x33, - 0xa3, 0x31, 0x40, 0x15, - 0x66, 0x41, 0x40, 0x41, - 0x08, 0x0e, 0x40, 0x2b, - 0x40, 0x55, 0xff, 0xc0, - 0x40, 0x0a, 0x6d, 0x95, - 0xe0, 0x40, 0x0a, 0x06, - 0x6d, 0xb9, 0x40, 0x63, - 0x4c, 0x66, 0x40, 0x15, - 0x40, 0x83, 0xe0, 0x00, - 0x40, 0x15, 0x6d, 0xc1, - 0xe0, 0x0c, 0x51, 0xf6, - 0x63, 0x49, 0x40, 0x91, - 0x13, 0x86, 0x40, 0x2d, - 0x40, 0x71, 0xe0, 0x60, - 0xc0, 0x2d, 0x63, 0x29, - 0x63, 0x39, 0x40, 0x71, - 0x40, 0x71, 0xc0, 0x2d, - 0xc0, 0x2d, 0x63, 0xd9, - 0x64, 0x09, 0x40, 0x71, - 0x0e, 0x66, 0x40, 0x2d, - 0xc0, 0x20, 0x68, 0x01, - 0x64, 0xf9, 0x40, 0xc5, - 0x40, 0xc5, 0xc0, 0x0b, - 0x40, 0x0b, 0x64, 0xfd, - 0x60, 0x01, 0x18, 0x06, - 0x40, 0x11, 0xc0, 0x20, - 0x40, 0x29, 0x6e, 0x25, - 0x40, 0x31, 0x83, 0x11, + 0x40, 0x51, 0xb5, 0x91, 0x40, 0x2b, 0x65, 0xc9, - 0x40, 0x45, 0x91, 0x31, - 0x40, 0x0a, 0x6d, 0x99, - 0x40, 0x55, 0x89, 0x41, - 0x40, 0x0a, 0x6d, 0x9d, - 0x40, 0x61, 0x8b, 0x51, - 0x40, 0x2b, 0x6b, 0x95, - 0x40, 0x93, 0x8f, 0x61, - 0x40, 0x16, 0x69, 0xa9, - 0x40, 0x81, 0x87, 0x91, - 0xc0, 0x2c, 0x6c, 0xfd, - 0x63, 0x69, 0x40, 0x81, - 0x10, 0x56, 0x40, 0x2d, - 0xc0, 0x20, 0x70, 0x01, - 0x65, 0x05, 0x40, 0xc5, - 0x40, 0xc5, 0xc0, 0x0b, - 0x40, 0x0b, 0x65, 0x09, - 0x40, 0x75, 0xb9, 0xc1, - 0xc0, 0x0b, 0x65, 0x11, - 0x65, 0x15, 0x40, 0x75, - 0x93, 0x71, 0x40, 0x0b, - 0x65, 0x11, 0x40, 0x11, - 0x40, 0x21, 0xc0, 0x2b, + 0xef, 0xf0, 0x4b, 0x86, + 0x6d, 0x95, 0x40, 0x65, + 0x0c, 0x0e, 0x40, 0x0a, + 0x40, 0x83, 0xff, 0xc0, + 0x40, 0x15, 0x6d, 0xb9, + 0xe0, 0x00, 0x50, 0x66, + 0x63, 0x49, 0x40, 0xb1, + 0x17, 0x86, 0x40, 0x2d, + 0x40, 0x23, 0xe0, 0x60, + 0x40, 0x1c, 0x62, 0x15, + 0x40, 0x33, 0xa1, 0x21, + 0x40, 0x1c, 0x62, 0x2d, + 0xe0, 0xf8, 0x46, 0x06, + 0x63, 0x29, 0x40, 0x91, + 0x40, 0x91, 0xc0, 0x2d, + 0xc0, 0x2d, 0x63, 0x39, + 0x63, 0xd9, 0x40, 0x91, + 0x40, 0x91, 0xc0, 0x2d, + 0x40, 0x2d, 0x64, 0x09, + 0x60, 0x01, 0x12, 0x06, + 0x40, 0xa5, 0xc0, 0x20, + 0xc0, 0x0b, 0x64, 0xf9, + 0x64, 0xfd, 0x40, 0xa5, + 0x14, 0x66, 0x40, 0x0b, + 0xc0, 0x20, 0x68, 0x01, + 0x6b, 0x19, 0x40, 0x53, + 0x99, 0x51, 0x40, 0x15, + 0x6d, 0x99, 0x40, 0x65, + 0x89, 0x61, 0x40, 0x0a, + 0x6d, 0x9d, 0x40, 0x75, + 0x8b, 0x71, 0x40, 0x0a, + 0x6b, 0x95, 0x40, 0x81, + 0x8f, 0x81, 0x40, 0x2b, + 0x69, 0xa9, 0x40, 0xb3, + 0x87, 0xb1, 0x40, 0x16, + 0x62, 0x31, 0x40, 0x33, + 0x46, 0x46, 0x40, 0x1c, + 0x40, 0x95, 0xe0, 0xf8, + 0xc0, 0x0b, 0x65, 0x05, + 0x65, 0x09, 0x40, 0x95, + 0xb9, 0x91, 0x40, 0x0b, + 0x65, 0x11, 0x40, 0xa5, + 0x40, 0xa5, 0xc0, 0x0b, + 0x40, 0x0b, 0x65, 0x15, + 0x40, 0x23, 0x93, 0xa1, + 0xc0, 0x1c, 0x62, 0x21, + 0x62, 0x41, 0x40, 0x23, + 0x40, 0x23, 0xc0, 0x1c, + 0x40, 0x1c, 0x62, 0x45, + 0xe0, 0x18, 0x04, 0x06, + 0x62, 0x05, 0x40, 0x11, + 0x40, 0x41, 0xc0, 0x15, 0xc0, 0x2b, 0x65, 0x31, - 0x65, 0xcd, 0x40, 0x31, - 0x40, 0x11, 0xc0, 0x2b, - 0xc0, 0x2b, 0x65, 0xd1, - 0x66, 0x81, 0x40, 0x11, - 0x40, 0x11, 0xc0, 0x2b, - 0xc0, 0x2b, 0x66, 0x85, - 0x6a, 0xa1, 0x40, 0x51, - 0x40, 0x41, 0xc0, 0x2b, - 0xc0, 0x2b, 0x6a, 0xa5, - 0x6b, 0x89, 0x40, 0x41, - 0x40, 0x11, 0xc0, 0x2b, - 0xc0, 0x2b, 0x6b, 0x8d, - 0x6b, 0x91, 0x40, 0x11, + 0x65, 0xcd, 0x40, 0xc1, + 0x40, 0x51, 0xc0, 0x2b, + 0xc0, 0x2b, 0x66, 0x41, + 0x6a, 0xa1, 0x40, 0x71, 0x40, 0x61, 0xc0, 0x2b, + 0xc0, 0x2b, 0x6a, 0xa5, + 0x6b, 0x89, 0x40, 0x61, + 0x40, 0x81, 0xc0, 0x2b, 0xc0, 0x2c, 0x6d, 0x51, - 0x6d, 0x61, 0x40, 0x11, + 0x6e, 0x59, 0x40, 0x81, 0x40, 0x61, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6e, 0x59, - 0x6e, 0x5d, 0x40, 0x11, - 0x40, 0x11, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6e, 0x61, - 0x6e, 0x65, 0x40, 0x41, - 0x40, 0x41, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6e, 0x69, - 0x6e, 0x85, 0x40, 0x31, - 0x40, 0x21, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6e, 0x8d, - 0x6e, 0x91, 0x40, 0x11, - 0x40, 0x11, 0xc0, 0x2c, - 0xc0, 0x2c, 0x6e, 0x99, - 0x6e, 0xa5, 0x40, 0x31, - 0x40, 0x51, 0xc0, 0x2c, - 0xc0, 0x2d, 0x63, 0x25, - 0x63, 0x31, 0x40, 0x11, - 0x40, 0x51, 0xc0, 0x2d, + 0xc0, 0x2c, 0x6e, 0x65, + 0x6e, 0x69, 0x40, 0x61, + 0x40, 0xc1, 0xc0, 0x2c, + 0xc0, 0x2c, 0x6e, 0x85, + 0x6e, 0x8d, 0x40, 0x41, + 0x40, 0xc1, 0xc0, 0x2c, + 0xc0, 0x2c, 0x6e, 0xa5, + 0x63, 0x25, 0x40, 0x71, + 0x40, 0x71, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x35, - 0x63, 0x41, 0x40, 0x21, - 0x40, 0x51, 0xc0, 0x2d, + 0x63, 0x41, 0x40, 0x41, + 0x40, 0x71, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x45, - 0x63, 0x59, 0x40, 0x91, - 0x40, 0x51, 0xc0, 0x2d, + 0x63, 0x59, 0x40, 0xb1, + 0x40, 0x71, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x5d, - 0x63, 0x61, 0x40, 0x41, - 0x40, 0x51, 0xc0, 0x2d, + 0x63, 0x61, 0x40, 0x61, + 0x40, 0x71, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x65, - 0x63, 0x71, 0x40, 0x91, - 0x40, 0x51, 0xc0, 0x2d, - 0xc0, 0x2d, 0x63, 0xa1, - 0x63, 0xa5, 0x40, 0x51, - 0x40, 0x85, 0xc0, 0x2d, - 0xc0, 0x0b, 0x64, 0xed, - 0x64, 0xf1, 0x40, 0x85, - 0x40, 0x51, 0xc0, 0x0b, - 0xc0, 0x2d, 0x63, 0xd5, - 0x64, 0x01, 0x40, 0x61, - 0x40, 0x51, 0xc0, 0x2d, - 0xc0, 0x2d, 0x64, 0x05, - 0x64, 0x31, 0x40, 0x31, - 0x40, 0x51, 0xc0, 0x2d, - 0xc0, 0x2d, 0x64, 0x35, - 0x64, 0x39, 0x40, 0xc1, + 0x63, 0x6d, 0x40, 0x11, + 0x40, 0xb1, 0xc0, 0x2d, + 0xc0, 0x2d, 0x63, 0x71, + 0x63, 0xa1, 0x40, 0x71, 0x40, 0x71, 0xc0, 0x2d, - 0xc0, 0x2d, 0x64, 0x61, - 0x64, 0x65, 0x40, 0x51, + 0xc0, 0x2d, 0x63, 0xa5, + 0x63, 0xd5, 0x40, 0x71, + 0x40, 0x81, 0xc0, 0x2d, + 0xc0, 0x2d, 0x64, 0x01, + 0x64, 0x05, 0x40, 0x71, 0x40, 0xc1, 0xc0, 0x2d, - 0xc0, 0x2d, 0x64, 0x69, - 0x65, 0x31, 0x40, 0x61, + 0xc0, 0x2d, 0x64, 0x31, + 0x64, 0x35, 0x40, 0x71, + 0x40, 0x91, 0xc0, 0x2d, + 0xc0, 0x2d, 0x64, 0x39, + 0x64, 0x61, 0x40, 0xa1, + 0x40, 0x71, 0xc0, 0x2d, + 0xc0, 0x2d, 0x64, 0x65, + 0x64, 0x69, 0x40, 0x91, + 0x40, 0x81, 0xc0, 0x2d, + 0xc0, 0x2d, 0x65, 0x31, + 0x65, 0x35, 0x40, 0x81, 0x40, 0x61, 0xc0, 0x2d, - 0xc0, 0x2d, 0x65, 0x35, - 0x68, 0x11, 0x40, 0x41, - 0x40, 0x11, 0xc0, 0x2d, - 0xc0, 0x2d, 0x68, 0x1d, - 0x69, 0xd9, 0x40, 0x11, - 0x40, 0x11, 0xc0, 0x2d, - 0xc0, 0x2d, 0x69, 0xdd, - 0x6a, 0x31, 0x40, 0x21, - 0x40, 0x31, 0xc0, 0x2d, + 0xc0, 0x2d, 0x68, 0x11, + 0x6a, 0x31, 0x40, 0x41, + 0x40, 0xc1, 0xc0, 0x2d, 0xc0, 0x2d, 0x6a, 0x35, - 0x6a, 0x39, 0x40, 0x91, - 0x40, 0x41, 0xc0, 0x2d, + 0x6a, 0x39, 0x40, 0xb1, + 0x40, 0x61, 0xc0, 0x2d, 0xc0, 0x2d, 0x6a, 0x71, - 0x6a, 0x7d, 0x40, 0x11, - 0x0c, 0x0c, 0xc0, 0x2d, - 0xdd, 0x93, 0xf0, 0x1c, + 0x64, 0xd1, 0x40, 0x11, + 0x40, 0x13, 0xc0, 0x38, + 0xc0, 0x1c, 0x62, 0x19, + 0x62, 0x1d, 0x40, 0x53, + 0x40, 0x33, 0xc0, 0x1c, + 0xc0, 0x1c, 0x62, 0x35, + 0x62, 0x39, 0x40, 0x13, + 0x40, 0x13, 0xc0, 0x1c, + 0xc0, 0x1c, 0x62, 0x3d, + 0x62, 0x49, 0x40, 0x23, + 0x40, 0x23, 0xc0, 0x1c, + 0xc0, 0x1c, 0x62, 0x4d, + 0x62, 0x51, 0x40, 0x23, + 0x40, 0x13, 0xc0, 0x1c, + 0xc0, 0x1c, 0x62, 0x55, + 0xf0, 0x7c, 0x0c, 0x0c, + 0xc1, 0xc3, 0xdd, 0x93, 0xf8, 0x3c, 0x04, 0x4c, 0x61, 0x4c, 0x44, 0x46, 0xe4, 0x50, 0x0a, 0x00, @@ -11973,7 +12094,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xdd, 0x93, 0x80, 0x00, 0xfa, 0xfc, 0x04, 0x0c, 0x81, 0x01, 0x00, 0x6b, - 0x68, 0x0c, 0x7b, 0x88, + 0x68, 0x0c, 0x7b, 0xc8, 0x81, 0x81, 0x81, 0x11, 0x61, 0x34, 0x56, 0x86, 0x2c, 0x04, 0x80, 0x7b, @@ -11984,10 +12105,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa4, 0x04, 0x80, 0xa6, 0x0c, 0x15, 0x80, 0x86, 0xc0, 0x0b, 0x69, 0xf9, - 0x40, 0x06, 0xa1, 0x1b, + 0x40, 0x86, 0xa1, 0x1b, 0x00, 0x15, 0x8f, 0xdc, 0x8c, 0x0b, 0x00, 0x00, - 0xe8, 0x40, 0x4f, 0x48, + 0xe8, 0x40, 0x4d, 0xc8, 0x83, 0x11, 0x2c, 0x04, 0x40, 0x46, 0x00, 0xa6, 0x80, 0x04, 0xe1, 0x34, @@ -11995,9 +12116,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa4, 0x04, 0x80, 0x86, 0xa4, 0x04, 0x80, 0xa6, 0x8c, 0x0b, 0x00, 0x86, - 0xe8, 0x10, 0x67, 0x68, + 0xe8, 0x10, 0x67, 0xa8, 0x8e, 0x0b, 0x03, 0x11, - 0xe8, 0x0c, 0x78, 0x88, + 0xe8, 0x0c, 0x78, 0xc8, 0x67, 0xcd, 0x0c, 0x09, 0xa4, 0x09, 0xc0, 0x2d, 0x82, 0x75, 0xa5, 0x0b, @@ -12005,22 +12126,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa7, 0x0b, 0xc0, 0x2b, 0x8c, 0x0b, 0x80, 0xd5, 0xf2, 0xfc, 0x0c, 0x0c, - 0xe0, 0x2c, 0x0c, 0x88, + 0xe0, 0x2c, 0x12, 0x28, 0xf2, 0xfc, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x7c, 0x04, 0x0c, 0xed, 0x50, 0x1e, 0xf0, 0x97, 0x11, 0x00, 0x6b, - 0xe8, 0x10, 0x4c, 0xe8, - 0xef, 0xdc, 0x03, 0xc6, + 0xe8, 0x10, 0x4d, 0x28, + 0xef, 0xdc, 0x42, 0x46, 0x40, 0x00, 0x84, 0x08, 0x84, 0x06, 0xf3, 0xf8, 0x62, 0x65, 0x0c, 0x09, 0x40, 0x4a, 0xc0, 0x15, - 0x21, 0xb8, 0xe0, 0x8c, + 0x22, 0x58, 0xe0, 0x8c, 0x0c, 0x09, 0x80, 0x00, 0xc0, 0x2d, 0x6b, 0x85, - 0x21, 0x58, 0xa1, 0x0b, + 0x21, 0xf8, 0xa1, 0x0b, 0x06, 0x60, 0x80, 0x00, 0x40, 0xb6, 0x67, 0xa1, 0xe0, 0x04, 0x00, 0x06, @@ -12277,27 +12398,41 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x69, 0xed, 0x4c, 0x25, 0x02, 0x0a, 0xc0, 0x0b, 0xf4, 0xb5, 0xe1, 0x00, - 0x03, 0xc6, 0x24, 0x0f, - 0x04, 0x08, 0xef, 0xdc, - 0x04, 0x25, 0xa1, 0x0b, - 0x93, 0xf8, 0x40, 0x00, - 0x84, 0x06, 0xc2, 0x09, - 0x6e, 0x0d, 0x0c, 0x09, - 0xa3, 0x0b, 0xc0, 0x36, - 0x80, 0x00, 0x00, 0x16, - 0x03, 0x11, 0x4c, 0x01, - 0x81, 0x45, 0x80, 0x38, + 0xa1, 0x0b, 0xa4, 0x0f, + 0x0c, 0x09, 0x88, 0x05, + 0xc0, 0x38, 0x64, 0xc5, + 0x64, 0xc1, 0x0c, 0x19, + 0x43, 0x0d, 0xc0, 0x38, + 0x64, 0xc5, 0x00, 0x60, + 0x86, 0xf5, 0xc0, 0xe1, + 0xef, 0xdc, 0x42, 0x46, + 0x88, 0x18, 0x82, 0x2b, + 0x88, 0x16, 0xc2, 0x19, + 0x6e, 0x0d, 0x0c, 0x19, + 0xa3, 0x1b, 0xc0, 0x36, + 0x80, 0x00, 0x02, 0x16, + 0x03, 0x11, 0x4c, 0x11, + 0x81, 0xf5, 0x80, 0x38, 0xc2, 0x09, 0x84, 0x08, - 0x1e, 0xf0, 0x84, 0x06, + 0x83, 0x25, 0x84, 0x06, + 0xef, 0xdc, 0x40, 0x46, + 0x84, 0x08, 0x80, 0x1b, + 0xf3, 0xf8, 0x40, 0x00, + 0x00, 0x60, 0x04, 0x06, + 0xc0, 0xe1, 0x64, 0xc5, + 0x02, 0x0a, 0x80, 0x18, + 0x02, 0x10, 0xe3, 0xfc, + 0x40, 0x11, 0xc4, 0x04, + 0x1e, 0xf0, 0xc0, 0x00, 0x0c, 0x0c, 0xe5, 0x50, 0xdd, 0x93, 0xf2, 0x7c, - 0xef, 0xdc, 0x01, 0xc6, + 0xef, 0xdc, 0x40, 0x46, 0x80, 0x28, 0x80, 0x18, 0x04, 0x19, 0xc2, 0x17, 0xf3, 0xf4, 0x44, 0x20, 0x80, 0x26, 0xa2, 0x2f, 0xc1, 0xc3, 0xdd, 0x93, - 0xef, 0xdc, 0x02, 0x06, + 0xef, 0xdc, 0x02, 0x86, 0xe0, 0x70, 0x02, 0x29, 0xe0, 0x84, 0x44, 0x0a, 0x9a, 0x00, 0x5c, 0x08, @@ -12306,7 +12441,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x00, 0x02, 0x29, 0x9c, 0x20, 0x44, 0x20, 0x80, 0x00, 0x42, 0x21, - 0xff, 0xfc, 0x16, 0x28, + 0xff, 0xfc, 0x14, 0x68, 0xfa, 0x00, 0x04, 0x0c, 0x6c, 0x51, 0x00, 0x19, 0x00, 0x29, 0xc0, 0x2b, @@ -12324,7 +12459,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0xdd, 0x93, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x42, 0x96, - 0x6f, 0xf8, 0x4c, 0x88, + 0x6f, 0xf8, 0x45, 0xe8, 0xe0, 0x08, 0x4c, 0x96, 0x0c, 0x06, 0xa3, 0x0b, 0x8c, 0x0b, 0xc0, 0x00, @@ -12347,7 +12482,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0xdd, 0x93, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x42, 0x96, - 0x6f, 0xf8, 0x49, 0xa8, + 0x6f, 0xf8, 0x43, 0x08, 0xe0, 0x08, 0x4c, 0x96, 0x0c, 0x06, 0xa3, 0x0b, 0x8c, 0x0b, 0xc0, 0x00, @@ -12369,7 +12504,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0f, 0xf6, 0x40, 0x2b, 0x03, 0xf6, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xf8, 0x46, 0xe8, + 0xef, 0xf8, 0x40, 0x48, 0x0d, 0x78, 0xa3, 0x0b, 0x0c, 0x19, 0x80, 0x00, 0xc0, 0x15, 0x61, 0x41, @@ -12387,8 +12522,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x4e, 0x76, 0x60, 0x08, 0x42, 0x76, - 0x44, 0x98, 0x8c, 0x0b, - 0xa3, 0x0b, 0xef, 0xf8, + 0x7d, 0xf8, 0x8c, 0x0b, + 0xa3, 0x0b, 0xef, 0xf4, 0x80, 0x00, 0x0b, 0x28, 0x61, 0x41, 0x0c, 0x19, 0x0c, 0x09, 0xc0, 0x15, @@ -12411,7 +12546,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4e, 0x76, 0x40, 0x2b, 0x42, 0x76, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xf8, 0x41, 0xa8, + 0xef, 0xf4, 0x7b, 0x08, 0xa0, 0x65, 0xa3, 0x0b, 0x61, 0x51, 0x0c, 0x09, 0x00, 0x0a, 0xc0, 0x15, @@ -12428,7 +12563,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x4e, 0x06, 0x60, 0x08, 0x42, 0x06, - 0x7f, 0x78, 0x8c, 0x0b, + 0x78, 0xd8, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xf4, 0x0c, 0x09, 0x98, 0x05, 0xc0, 0x15, 0x61, 0x49, @@ -12446,7 +12581,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x4e, 0x16, 0x60, 0x08, 0x42, 0x16, - 0x7d, 0x38, 0x8c, 0x0b, + 0x76, 0x98, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xf4, 0x0c, 0x09, 0x8e, 0x85, 0xc0, 0x15, 0x61, 0x41, @@ -12466,7 +12601,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4e, 0x36, 0x40, 0x2b, 0x42, 0x36, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xf4, 0x7a, 0xc8, + 0xef, 0xf4, 0x74, 0x28, 0x03, 0x55, 0xa3, 0x0b, 0xc0, 0x00, 0x0e, 0x06, 0x61, 0x51, 0x0c, 0x09, @@ -12484,33 +12619,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4e, 0x26, 0x40, 0x2b, 0x42, 0x26, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xf4, 0x78, 0x88, + 0xef, 0xf4, 0x71, 0xe8, 0x0e, 0x06, 0xa3, 0x0b, 0x8e, 0x0b, 0xc0, 0x00, 0xf2, 0x04, 0x0c, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, - 0x6c, 0x51, 0x00, 0x19, - 0x00, 0x29, 0xc0, 0x2b, - 0xc0, 0x2b, 0x6c, 0x55, - 0x61, 0x88, 0x06, 0x14, - 0x40, 0x11, 0x83, 0x11, - 0x40, 0x2b, 0x6c, 0x59, - 0xe1, 0x88, 0x08, 0x24, - 0xe6, 0x92, 0x44, 0x3a, - 0x6c, 0x41, 0x40, 0x31, - 0x04, 0x0a, 0xc0, 0x2b, - 0x89, 0x21, 0x60, 0x40, - 0x6c, 0x49, 0x40, 0x21, - 0x40, 0x21, 0xc0, 0x2b, - 0xc0, 0x2b, 0x6c, 0x4d, - 0x6c, 0x45, 0x40, 0x41, - 0x40, 0x11, 0xc0, 0x2b, - 0xc0, 0x2c, 0x6c, 0x79, - 0x0c, 0x69, 0x40, 0x21, - 0x40, 0x21, 0x80, 0x2b, - 0x80, 0x2b, 0x0c, 0x6d, - 0x0c, 0x81, 0x40, 0x11, - 0xdd, 0x93, 0x80, 0x2c, 0xfa, 0x00, 0x04, 0xcc, 0x81, 0x01, 0x00, 0x6b, 0x66, 0x35, 0x0c, 0x1b, @@ -12519,10 +12632,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x42, 0x06, 0x60, 0x80, 0x4c, 0x11, 0xe0, 0x04, 0xc0, 0x2b, 0x6c, 0x1d, - 0x80, 0x00, 0x0c, 0x98, - 0x6f, 0xfc, 0x6b, 0x28, + 0x80, 0x00, 0x0c, 0x58, + 0x6f, 0xfc, 0x6d, 0xe8, 0xa1, 0x0b, 0x8c, 0x0b, - 0xc0, 0x00, 0x0c, 0x38, + 0xc0, 0x00, 0x0b, 0xf8, 0x61, 0x41, 0x0c, 0x09, 0x04, 0xf0, 0x40, 0x15, 0x0c, 0x19, 0xe4, 0x20, @@ -12531,7 +12644,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe4, 0x30, 0x02, 0xf0, 0x63, 0x09, 0x4c, 0x01, 0x8c, 0x0b, 0x40, 0x15, - 0xe8, 0x00, 0x4b, 0xc8, + 0xe8, 0x00, 0x4b, 0x88, 0x61, 0x49, 0x0c, 0x09, 0x99, 0x18, 0xc0, 0x15, 0x61, 0x4d, 0x0c, 0x29, @@ -12551,16 +12664,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6c, 0x51, 0x4c, 0x11, 0x4c, 0x21, 0xc0, 0x2b, 0xc0, 0x2b, 0x6c, 0x55, - 0x06, 0x0a, 0x82, 0x15, - 0x80, 0xb5, 0xf0, 0x04, - 0x6f, 0xfc, 0x78, 0x08, - 0x8f, 0x25, 0x8c, 0x0b, + 0x06, 0x0a, 0x80, 0x95, + 0x9c, 0x45, 0xf0, 0x04, 0xf4, 0x0c, 0x07, 0x0a, 0x4c, 0x21, 0x84, 0x55, 0x40, 0x2b, 0x6c, 0x4d, 0x4c, 0x31, 0xea, 0x0d, 0xc0, 0x2b, 0x6c, 0x45, - 0x60, 0x58, 0x8c, 0x25, + 0x63, 0x58, 0x8c, 0x25, 0x8c, 0x0b, 0x6f, 0xfc, 0x9c, 0x55, 0xa1, 0x0b, 0x6c, 0x41, 0x0c, 0x09, @@ -12571,14 +12682,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x2b, 0x6c, 0x4d, 0x6c, 0x45, 0x4c, 0x31, 0x86, 0x85, 0xc0, 0x2b, - 0x6f, 0xfc, 0x5f, 0x08, + 0x6f, 0xfc, 0x62, 0x08, 0xa1, 0x0b, 0x8c, 0x0b, 0x0c, 0x09, 0x96, 0xb5, 0xc0, 0x2b, 0x6c, 0x41, 0x86, 0x15, 0xab, 0x0b, - 0x6f, 0xfc, 0x61, 0x48, + 0x6f, 0xfc, 0x64, 0x48, 0xfd, 0x15, 0x8c, 0x0b, - 0x6f, 0xfc, 0x61, 0x08, + 0x6f, 0xfc, 0x64, 0x08, 0xa1, 0x0b, 0x8c, 0x0b, 0x0c, 0x09, 0x92, 0xf5, 0xc0, 0x15, 0x61, 0x41, @@ -12614,11 +12725,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x44, 0x98, 0xc0, 0x16, 0x8c, 0x0b, 0x68, 0x00, 0x82, 0x95, 0xa1, 0x0b, - 0x6f, 0xf0, 0x65, 0x48, + 0x6f, 0xf0, 0x64, 0xe8, 0xa1, 0x0b, 0x8c, 0x0b, - 0x6c, 0xd8, 0x80, 0xf5, + 0x73, 0xb8, 0x80, 0xf5, 0x8c, 0x0b, 0x68, 0x24, - 0x68, 0x30, 0x4b, 0xa8, + 0x68, 0x30, 0x4f, 0x08, 0x21, 0x11, 0x8c, 0x0b, 0x4c, 0x11, 0x83, 0x21, 0xc0, 0x1b, 0x65, 0x61, @@ -12677,7 +12788,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4e, 0x56, 0x40, 0x2b, 0x42, 0x56, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xf4, 0x60, 0x68, + 0xef, 0xf4, 0x5c, 0xc8, 0x88, 0x05, 0xa3, 0x0b, 0x6c, 0x51, 0x0c, 0x19, 0x81, 0x21, 0x40, 0x2b, @@ -12788,7 +12899,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0xdd, 0x93, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x42, 0x56, - 0x6f, 0xf4, 0x52, 0x88, + 0x6f, 0xf4, 0x4e, 0xe8, 0xe0, 0x08, 0x4c, 0x56, 0x0c, 0x06, 0xa3, 0x0b, 0x8c, 0x0b, 0xc0, 0x00, @@ -12809,8 +12920,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0xe1, 0x48, 0x02, 0x14, 0x80, 0x18, 0x80, 0x16, 0xfc, 0x9c, - 0xef, 0xe0, 0x7e, 0x08, - 0x6f, 0x9c, 0x72, 0xc8, + 0xef, 0xe4, 0x56, 0xa8, + 0x6f, 0x9c, 0x62, 0x48, 0xc1, 0xc3, 0x81, 0x01, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12821,8 +12932,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x7c, 0x78, 0x80, 0x16, - 0x71, 0x38, 0xef, 0xe0, + 0x55, 0x18, 0x80, 0x16, + 0x60, 0xb8, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12833,8 +12944,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x7a, 0xf8, 0x80, 0x16, - 0x6f, 0xb8, 0xef, 0xe0, + 0x53, 0x98, 0x80, 0x16, + 0x5f, 0x38, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12845,8 +12956,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x79, 0x78, 0x80, 0x16, - 0x6e, 0x38, 0xef, 0xe0, + 0x52, 0x18, 0x80, 0x16, + 0x5d, 0xb8, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12857,8 +12968,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x77, 0xf8, 0x80, 0x16, - 0x6c, 0xb8, 0xef, 0xe0, + 0x50, 0x98, 0x80, 0x16, + 0x5c, 0x38, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12869,8 +12980,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x76, 0x78, 0x80, 0x16, - 0x6b, 0x38, 0xef, 0xe0, + 0x4f, 0x18, 0x80, 0x16, + 0x5a, 0xb8, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0x61, 0x48, 0x41, 0xc6, @@ -12881,8 +12992,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x43, 0x86, 0x80, 0x18, 0x84, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x74, 0xf8, 0x80, 0x16, - 0x69, 0xb8, 0xef, 0xe0, + 0x4d, 0x98, 0x80, 0x16, + 0x59, 0x38, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, 0xfa, 0x00, 0x00, 0x4c, 0xe2, 0xc0, 0x00, 0x2c, @@ -12892,136 +13003,148 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x48, 0x41, 0x86, 0x80, 0x18, 0x80, 0x04, 0xfc, 0x9c, 0x02, 0x14, - 0x73, 0x98, 0x80, 0x16, - 0x68, 0x58, 0xef, 0xe0, + 0x4c, 0x38, 0x80, 0x16, + 0x57, 0xd8, 0xef, 0xe4, 0x81, 0x01, 0x6f, 0x9c, - 0xfa, 0x1c, 0x04, 0x0c, - 0xec, 0x30, 0x1e, 0xf0, - 0x6f, 0xf8, 0x44, 0xc8, + 0xfe, 0x1c, 0x04, 0xcc, + 0x6f, 0xf8, 0x46, 0x28, 0x80, 0x7b, 0x80, 0x6b, - 0x96, 0x25, 0xa1, 0x7b, - 0x81, 0x91, 0x05, 0x01, - 0x6c, 0x1d, 0x4c, 0x01, - 0x00, 0x06, 0x40, 0x2b, - 0x00, 0x9e, 0xe1, 0x94, - 0x64, 0x1d, 0x10, 0x60, - 0x66, 0xd8, 0xc0, 0xaf, - 0xa1, 0x0b, 0xef, 0xe8, - 0x87, 0x01, 0x82, 0x65, - 0x43, 0xf8, 0xa0, 0x06, - 0x44, 0x38, 0xef, 0xf8, - 0x71, 0x58, 0xef, 0xf8, - 0x66, 0x78, 0xef, 0xe0, - 0x01, 0x11, 0xef, 0xe8, - 0xee, 0x10, 0x45, 0x06, - 0x6f, 0x9c, 0x7b, 0x68, - 0x00, 0x06, 0x8c, 0x0b, - 0x81, 0x11, 0x6f, 0xdc, - 0x6f, 0x9c, 0x7b, 0x08, - 0xe0, 0x00, 0x44, 0xc6, - 0x60, 0x0c, 0x00, 0x86, - 0x4c, 0x05, 0x8b, 0x11, + 0xe0, 0x00, 0x0e, 0x2a, + 0x40, 0x01, 0x05, 0xf8, + 0x05, 0x01, 0x80, 0x00, + 0x4c, 0x01, 0x81, 0x91, + 0x40, 0x2b, 0x6c, 0x1d, + 0xe1, 0x94, 0x00, 0x06, + 0x10, 0x60, 0x00, 0x9e, + 0xc0, 0xaf, 0x64, 0x1d, + 0xef, 0xe8, 0x7d, 0x68, + 0x82, 0x65, 0xa1, 0x0b, + 0xa0, 0x06, 0x87, 0x01, + 0xef, 0xf8, 0x45, 0x28, + 0xef, 0xf8, 0x45, 0x68, + 0xef, 0xe4, 0x49, 0xe8, + 0xef, 0xe8, 0x7d, 0x08, + 0x45, 0x86, 0x01, 0x11, + 0x6a, 0xd8, 0xee, 0x10, + 0x8c, 0x0b, 0x6f, 0x9c, + 0x6f, 0xdc, 0x00, 0x86, + 0x6a, 0x78, 0x81, 0x11, + 0x44, 0xc6, 0x6f, 0x9c, + 0x00, 0x86, 0xe0, 0x00, + 0x42, 0x86, 0x60, 0x0c, + 0x4c, 0x15, 0xe0, 0x3c, + 0x40, 0x0e, 0x60, 0xd9, + 0x60, 0x01, 0x02, 0x06, + 0x4c, 0x05, 0xc0, 0x7d, 0xc0, 0x0e, 0x60, 0xcd, 0x60, 0xd1, 0x4c, 0x05, 0x4c, 0x05, 0xc0, 0x0e, 0x40, 0x0e, 0x60, 0xd5, - 0xe0, 0x3c, 0x40, 0x86, - 0x60, 0xd9, 0x4c, 0x05, - 0x00, 0x06, 0x40, 0x0e, - 0xc0, 0x7d, 0x60, 0x01, - 0x60, 0xdd, 0x4c, 0x15, - 0x83, 0x11, 0x40, 0x0e, - 0x6d, 0x49, 0x4c, 0x05, - 0x01, 0xe6, 0x40, 0x0a, - 0x4c, 0x11, 0xe0, 0x50, - 0x40, 0x2c, 0x6e, 0x91, - 0xe4, 0x00, 0x02, 0x06, - 0x67, 0x39, 0x4c, 0x03, - 0x40, 0x16, 0x40, 0x16, - 0x4c, 0x13, 0xe0, 0x00, - 0x40, 0x16, 0x67, 0x3d, - 0x60, 0x09, 0x02, 0x76, - 0x4c, 0x03, 0xc0, 0x20, - 0xc0, 0x15, 0x6e, 0x01, - 0x83, 0x05, 0x84, 0x96, - 0x61, 0x94, 0x00, 0x06, - 0x64, 0x1c, 0x10, 0x60, - 0x80, 0x14, 0xc0, 0xaf, - 0x83, 0x11, 0x23, 0x1b, - 0x6c, 0x1d, 0x4c, 0x11, - 0x02, 0x06, 0x40, 0x2b, - 0x40, 0x15, 0xc0, 0x00, - 0x44, 0x98, 0xc0, 0x00, - 0x18, 0xf0, 0xef, 0xe4, - 0x8c, 0x0b, 0x64, 0x10, - 0xe8, 0x10, 0x5e, 0xe8, - 0xa1, 0x0b, 0xbe, 0x04, - 0xfc, 0x94, 0x82, 0x55, - 0x80, 0xe5, 0xa1, 0x9b, - 0xe1, 0x34, 0x01, 0x46, - 0x80, 0x04, 0x80, 0x04, - 0x88, 0xb5, 0xa3, 0x0b, - 0x68, 0x0c, 0x5d, 0xa8, - 0x20, 0x28, 0x8c, 0x0b, - 0xe0, 0x08, 0x10, 0xb6, - 0x60, 0x08, 0x02, 0xb6, - 0x7c, 0x58, 0x8c, 0x0b, - 0x4b, 0x58, 0xef, 0xf0, - 0x8c, 0x0b, 0x68, 0x38, - 0x68, 0x04, 0x50, 0xc8, - 0xa1, 0x8b, 0x8c, 0x0b, - 0x6f, 0xf4, 0x7c, 0x48, - 0x9c, 0x00, 0x50, 0x00, - 0xef, 0xf4, 0x7c, 0x68, - 0xef, 0xe0, 0x69, 0x88, - 0x83, 0x11, 0x01, 0x01, - 0x6f, 0xe4, 0x54, 0x08, - 0x10, 0x0b, 0x8c, 0x2b, - 0x0c, 0x0c, 0x98, 0xf1, - 0xdd, 0x93, 0xf2, 0x1c, - 0x68, 0x0c, 0x79, 0x08, + 0x4c, 0x05, 0x8b, 0x01, + 0x40, 0x0e, 0x60, 0xdd, + 0x4c, 0x15, 0x83, 0x01, + 0x40, 0x0a, 0x6d, 0x49, + 0xe0, 0x40, 0x43, 0x56, + 0x6e, 0x91, 0x4c, 0x01, + 0x01, 0xb6, 0x40, 0x2c, + 0x4c, 0x13, 0xe3, 0x48, + 0x40, 0x16, 0x67, 0x39, + 0xe0, 0x00, 0x42, 0x16, + 0x67, 0x3d, 0x4c, 0x03, + 0x00, 0x76, 0x40, 0x16, + 0xc0, 0x20, 0x60, 0x09, + 0x6e, 0x01, 0x4c, 0x13, + 0x87, 0x11, 0x40, 0x15, + 0x4c, 0x11, 0x80, 0x96, + 0xc0, 0x38, 0x64, 0xc1, + 0x00, 0x06, 0x83, 0x05, + 0x10, 0x60, 0x61, 0x94, + 0xc0, 0xaf, 0x64, 0x1c, + 0x23, 0x1b, 0x80, 0x14, + 0x4c, 0x11, 0x83, 0x11, + 0x40, 0x2b, 0x6c, 0x1d, + 0xc0, 0x00, 0x02, 0x06, + 0xc0, 0x00, 0x40, 0x15, + 0xef, 0xe4, 0x5a, 0xa8, + 0x64, 0x60, 0x18, 0xf0, + 0x60, 0x18, 0x8c, 0x0b, + 0x8d, 0x04, 0xe8, 0x10, + 0x82, 0x55, 0xa1, 0x0b, + 0xa1, 0x9b, 0x8f, 0x94, + 0x01, 0x46, 0x80, 0xe5, + 0x80, 0x04, 0xe1, 0x34, + 0xa3, 0x0b, 0x80, 0x04, + 0x5e, 0xd8, 0x88, 0x95, + 0x8c, 0x0b, 0x68, 0x0c, + 0x10, 0xb6, 0x20, 0x28, + 0x02, 0xb6, 0xe0, 0x08, + 0x8c, 0x0b, 0x60, 0x08, + 0xef, 0xf0, 0x78, 0x68, + 0x68, 0x38, 0x4a, 0xc8, + 0x51, 0xf8, 0x8c, 0x0b, + 0x8c, 0x0b, 0x68, 0x04, + 0x7d, 0x38, 0xa1, 0x8b, + 0x50, 0x00, 0x6f, 0xf4, + 0x7d, 0x58, 0x9c, 0x00, + 0x41, 0xd8, 0xef, 0xf4, + 0x01, 0x01, 0xef, 0xe4, + 0x6a, 0x18, 0x83, 0x11, + 0x8c, 0x2b, 0x6f, 0xe4, + 0x0c, 0xcc, 0x90, 0x0b, + 0xdd, 0x93, 0xf6, 0x1c, + 0x68, 0x0c, 0x7a, 0x48, 0x00, 0x8b, 0x8c, 0x0b, 0xa1, 0x8b, 0x8c, 0x0b, - 0x4c, 0x78, 0x80, 0x85, - 0xfb, 0xe5, 0xef, 0xf4, - 0xe8, 0x14, 0x5e, 0x08, + 0x48, 0x78, 0x80, 0x85, + 0xfb, 0xf5, 0xef, 0xf4, + 0xe8, 0x14, 0x64, 0xe8, 0xa1, 0x8b, 0x80, 0x8b, - 0x79, 0x18, 0xf6, 0x35, - 0x8c, 0x0b, 0x6f, 0xf4, - 0xe8, 0x00, 0x44, 0x48, - 0x8a, 0xa5, 0xa1, 0x7b, - 0x6f, 0xf4, 0x4b, 0x88, - 0x42, 0xf8, 0x8c, 0x0b, + 0x7a, 0x18, 0xf6, 0x55, 0x8c, 0x0b, 0x6f, 0xf4, - 0x6f, 0xdc, 0x01, 0x46, - 0xe0, 0x04, 0x42, 0x46, - 0x83, 0x11, 0x42, 0x1e, - 0x43, 0x46, 0x02, 0x16, - 0x40, 0x15, 0xe0, 0x1c, - 0x50, 0x98, 0xf8, 0x08, - 0x46, 0xf8, 0xef, 0xe4, - 0x8c, 0x0b, 0x68, 0x00, - 0x61, 0x4c, 0x00, 0xc6, - 0x00, 0x04, 0x97, 0x11, - 0x00, 0x16, 0xa3, 0x9b, - 0xe1, 0x4c, 0x00, 0x46, - 0x9d, 0x11, 0x00, 0x04, - 0x82, 0x75, 0x80, 0x16, - 0x68, 0x0c, 0x73, 0x48, - 0x00, 0x8b, 0x8c, 0x0b, - 0x45, 0xf8, 0x8c, 0x0b, + 0xe8, 0x00, 0x45, 0x88, + 0x40, 0x01, 0x04, 0x48, + 0x8c, 0x0b, 0x00, 0x00, + 0xef, 0xf4, 0x47, 0x68, + 0x6f, 0xf0, 0x7f, 0x08, + 0x01, 0xc6, 0x8c, 0x0b, + 0x42, 0x46, 0x6f, 0xdc, + 0x42, 0x1e, 0xe0, 0x04, + 0x02, 0x16, 0x83, 0x11, + 0xe0, 0x1c, 0x43, 0x46, + 0xf8, 0x08, 0x40, 0x15, + 0xef, 0xe4, 0x66, 0xa8, + 0x68, 0x00, 0x48, 0x28, + 0x00, 0xc6, 0x8c, 0x0b, + 0x97, 0x11, 0x61, 0x4c, + 0xa3, 0x9b, 0x00, 0x04, + 0x81, 0x81, 0x01, 0x91, + 0x00, 0x46, 0x00, 0x16, + 0x00, 0x04, 0xe1, 0x4c, + 0x80, 0x16, 0x9d, 0x11, + 0x74, 0x58, 0x80, 0xb5, + 0x8c, 0x0b, 0x68, 0x0c, + 0x02, 0x0e, 0x80, 0x8b, + 0x40, 0x10, 0x60, 0x01, + 0xe5, 0x40, 0x00, 0x06, + 0x02, 0x2b, 0x81, 0x85, + 0xec, 0x04, 0x00, 0x00, + 0x02, 0x33, 0xc9, 0x34, + 0xc6, 0x9f, 0x84, 0x1b, + 0xfe, 0x15, 0xa1, 0x0b, + 0x72, 0xfd, 0x41, 0xc6, + 0x00, 0x9e, 0xc0, 0x20, + 0x44, 0x18, 0x8c, 0x0b, 0xa1, 0x8b, 0xe8, 0x38, - 0x81, 0x45, 0xea, 0x55, - 0x68, 0x38, 0x45, 0xa8, - 0x0c, 0x0b, 0x8c, 0x0b, - 0x59, 0xd8, 0x8e, 0x1b, - 0x8e, 0x2b, 0x6f, 0xe8, - 0xa1, 0x8b, 0x80, 0x8b, - 0x01, 0x11, 0xe6, 0xd5, - 0x03, 0x31, 0x9f, 0x21, - 0x4f, 0xb8, 0x8c, 0x0b, - 0x73, 0x75, 0xe8, 0x34, - 0xc1, 0xc3, 0x80, 0x8b, + 0x81, 0x35, 0xe4, 0xb5, + 0xe8, 0x38, 0x43, 0xc8, + 0x8e, 0x1b, 0x0c, 0x0b, + 0x6f, 0xe8, 0x6f, 0x08, + 0x80, 0x8b, 0x8e, 0x2b, + 0xe2, 0x55, 0xa1, 0x8b, + 0x9f, 0x21, 0x01, 0x11, + 0x8c, 0x0b, 0x03, 0x31, + 0xe8, 0x34, 0x4d, 0xe8, + 0x80, 0x8b, 0x71, 0x35, 0x61, 0x20, 0x00, 0xc6, 0x80, 0x04, 0x81, 0x11, 0x01, 0x06, 0x00, 0x16, @@ -13100,7 +13223,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x01, 0x61, 0xc1, 0x83, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0xa0, 0x67, 0xa8, + 0x6f, 0xa0, 0x55, 0xa8, 0x01, 0x06, 0x81, 0x11, 0x4f, 0x06, 0x61, 0x98, 0x00, 0x1a, 0xe1, 0x4c, @@ -13112,8 +13235,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x10, 0x16, 0x83, 0x11, 0x88, 0x04, 0x83, 0x11, 0x41, 0xf6, 0x00, 0x66, - 0x66, 0x18, 0xe0, 0x3c, - 0x76, 0x38, 0xef, 0xa0, + 0x54, 0x18, 0xe0, 0x3c, + 0x7b, 0xd8, 0xef, 0xa0, 0x1c, 0x04, 0xe8, 0x14, 0x4d, 0x18, 0x81, 0x11, 0xa8, 0xf1, 0xe8, 0x08, @@ -13159,7 +13282,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x41, 0xf6, 0xc1, 0x83, 0x81, 0x11, 0x60, 0x3c, - 0xef, 0xa0, 0x60, 0x48, + 0xef, 0xa0, 0x4e, 0x48, 0x61, 0x4c, 0x4d, 0x06, 0x98, 0x04, 0xa5, 0x11, 0x6c, 0x1d, 0x40, 0x11, @@ -13177,7 +13300,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x18, 0x88, 0x04, 0xf3, 0xf8, 0x42, 0x10, 0x98, 0x04, 0x80, 0x16, - 0xe8, 0x34, 0x77, 0x28, + 0xe8, 0x34, 0x75, 0x68, 0x02, 0x26, 0x18, 0x04, 0x45, 0x18, 0xe0, 0x10, 0x9c, 0x04, 0xe8, 0x08, @@ -13195,7 +13318,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x43, 0x78, 0x98, 0x04, 0x41, 0xf6, 0xe8, 0x08, 0x83, 0x11, 0x60, 0x3c, - 0xef, 0xa0, 0x5b, 0xc8, + 0xef, 0xa0, 0x49, 0xc8, 0x1f, 0x0c, 0xa8, 0xf1, 0x0f, 0xfc, 0xf0, 0x04, 0xbc, 0xf4, 0xf6, 0x84, @@ -13210,7 +13333,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x41, 0xf6, 0xc1, 0x83, 0x81, 0x11, 0x60, 0x3c, - 0xef, 0xa0, 0x59, 0xe8, + 0xef, 0xa0, 0x47, 0xe8, 0x61, 0x4c, 0x4d, 0x06, 0x98, 0x04, 0xa7, 0x11, 0x6c, 0x1d, 0x40, 0x11, @@ -13264,10 +13387,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6e, 0x09, 0x40, 0x13, 0x02, 0x36, 0x40, 0x15, 0x7a, 0x98, 0xe0, 0x40, - 0x75, 0x18, 0xe8, 0x04, - 0x41, 0xf6, 0xef, 0xdc, + 0x4c, 0x38, 0xe8, 0x04, + 0x41, 0xf6, 0xef, 0xe0, 0x83, 0x11, 0x60, 0x3c, - 0xef, 0xa0, 0x52, 0xc8, + 0xef, 0xa0, 0x40, 0xc8, 0x1f, 0x0c, 0xa8, 0xf1, 0x0f, 0xfc, 0xf0, 0x04, 0xbc, 0xf4, 0xf6, 0x84, @@ -13282,7 +13405,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x41, 0xf6, 0xc1, 0x83, 0x81, 0x11, 0x60, 0x3c, - 0xef, 0xa0, 0x50, 0xe8, + 0xef, 0x9c, 0x7e, 0xe8, 0x61, 0x4c, 0x4d, 0x06, 0x98, 0x04, 0xa9, 0x11, 0x6c, 0x1d, 0x40, 0x11, @@ -13420,7 +13543,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x7f, 0x98, 0xe0, 0x0c, 0x41, 0xf6, 0xe8, 0x00, 0x83, 0x11, 0x60, 0x3c, - 0xef, 0x9c, 0x7f, 0xa8, + 0xef, 0x9c, 0x6d, 0xa8, 0x1f, 0x0c, 0xa8, 0xf1, 0x0f, 0xfc, 0xf0, 0x04, 0xbc, 0xf4, 0xf6, 0x84, @@ -13435,7 +13558,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x01, 0x61, 0xc1, 0x83, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0x9c, 0x7d, 0xc8, + 0x6f, 0x9c, 0x6b, 0xc8, 0x4f, 0x06, 0x81, 0x11, 0x03, 0x06, 0x61, 0x4c, 0x1c, 0x04, 0xe1, 0x98, @@ -13449,9 +13572,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x66, 0x8c, 0x04, 0x63, 0x98, 0x9c, 0x04, 0x9c, 0x04, 0xe8, 0x04, - 0xef, 0xe0, 0x5c, 0x48, + 0xef, 0xe0, 0x71, 0x28, 0x60, 0x3c, 0x41, 0xf6, - 0x7b, 0xb8, 0x83, 0x11, + 0x69, 0xb8, 0x83, 0x11, 0xa8, 0xf1, 0xef, 0x9c, 0xf0, 0x04, 0x1f, 0x0c, 0xf6, 0x84, 0x0f, 0xfc, @@ -13467,20 +13590,20 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x01, 0x61, 0xc1, 0x83, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0x9c, 0x79, 0xc8, + 0x6f, 0x9c, 0x67, 0xc8, 0x4f, 0x06, 0x81, 0x11, 0xad, 0x01, 0x61, 0x4c, 0x83, 0x81, 0x1c, 0x14, 0x6c, 0x1d, 0x42, 0x01, 0x83, 0x01, 0x40, 0x2b, - 0xef, 0xe4, 0x5d, 0x68, + 0xef, 0xe4, 0x72, 0x88, 0xe1, 0x3c, 0x41, 0xc6, 0x04, 0x86, 0x80, 0x14, 0x80, 0x04, 0x8d, 0x11, 0x9c, 0x04, 0x80, 0x66, 0xe8, 0x04, 0x5f, 0xc8, 0x60, 0x3c, 0x41, 0xf6, - 0x78, 0x18, 0x83, 0x11, + 0x66, 0x18, 0x83, 0x11, 0xa0, 0xf1, 0xef, 0x9c, 0xf0, 0x04, 0x1f, 0x0c, 0xf6, 0x8c, 0x0f, 0xfc, @@ -13496,15 +13619,15 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x93, 0x81, 0x83, 0x41, 0xf6, 0xc1, 0x83, 0x81, 0x11, 0x60, 0x3c, - 0x6f, 0x9c, 0x76, 0x28, + 0x6f, 0x9c, 0x64, 0x28, 0x4f, 0x06, 0x81, 0x61, 0xaf, 0x01, 0x61, 0x4c, 0x42, 0x01, 0x9c, 0x14, 0x40, 0x2b, 0x6c, 0x1d, - 0x59, 0xd8, 0x81, 0x01, + 0x6e, 0xf8, 0x81, 0x01, 0x1c, 0x04, 0xef, 0xe4, 0x5c, 0x98, 0x8f, 0x11, - 0x00, 0x06, 0xe8, 0x04, + 0x00, 0x86, 0xe8, 0x04, 0x80, 0x18, 0xef, 0xdc, 0xf8, 0xc0, 0x02, 0x0a, 0x80, 0x18, 0x80, 0xe5, @@ -13522,7 +13645,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x45, 0xe0, 0x84, 0x68, 0x04, 0x5a, 0x88, 0xe0, 0x10, 0x02, 0x76, - 0x53, 0xb8, 0x9c, 0x04, + 0x68, 0xd8, 0x9c, 0x04, 0x9c, 0x04, 0xef, 0xe4, 0x6e, 0x09, 0x00, 0x1b, 0x42, 0x10, 0xc0, 0x15, @@ -13533,7 +13656,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x16, 0x80, 0x04, 0x00, 0x66, 0x83, 0x11, 0xe0, 0x3c, 0x41, 0xf6, - 0xef, 0x9c, 0x71, 0x88, + 0xef, 0x9c, 0x5f, 0x88, 0x1f, 0x0c, 0xa8, 0xf1, 0x0f, 0xfc, 0xf0, 0x04, 0xbc, 0xf4, 0xf6, 0x84, @@ -13620,112 +13743,112 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x00, 0x1d, 0x48, 0x63, 0x29, 0x0c, 0x39, 0x40, 0x4e, 0x40, 0x2d, - 0xc0, 0x10, 0x6c, 0xb9, + 0xc0, 0x10, 0x6c, 0xdd, 0x63, 0x21, 0x0c, 0x19, 0x0c, 0x29, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x25, 0x61, 0x84, 0x08, 0x34, - 0x66, 0x78, 0x82, 0x39, + 0x54, 0x78, 0x82, 0x39, 0x82, 0x49, 0x6f, 0x9c, 0x1b, 0xf8, 0xa1, 0x0b, 0x0c, 0x39, 0xc0, 0x00, 0x40, 0x2d, 0x63, 0x39, - 0x6c, 0xc1, 0x40, 0x0e, + 0x6c, 0xe5, 0x40, 0x0e, 0x0c, 0x19, 0xc0, 0x10, 0xc0, 0x2d, 0x63, 0x31, 0x63, 0x35, 0x0c, 0x29, 0x08, 0x34, 0xc0, 0x2d, 0x82, 0x39, 0x61, 0x84, - 0x6f, 0x9c, 0x65, 0x28, + 0x6f, 0x9c, 0x53, 0x28, 0xa1, 0x0b, 0x82, 0x49, 0xc0, 0x00, 0x1a, 0xa8, 0x63, 0x49, 0x0c, 0x39, 0x01, 0x0e, 0x40, 0x2d, - 0xc0, 0x10, 0x6c, 0xc9, + 0xc0, 0x10, 0x6c, 0xed, 0x63, 0x41, 0x0c, 0x19, 0x0c, 0x29, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x45, 0x61, 0x84, 0x08, 0x34, - 0x63, 0xd8, 0x82, 0x39, + 0x51, 0xd8, 0x82, 0x39, 0x82, 0x49, 0x6f, 0x9c, 0x19, 0x58, 0xa1, 0x0b, 0x0c, 0x3b, 0xc0, 0x00, 0x40, 0x16, 0x69, 0xa9, - 0x6c, 0xd5, 0x01, 0xce, + 0x6c, 0xf9, 0x01, 0xce, 0x0c, 0x19, 0xc0, 0x10, 0xc0, 0x2d, 0x63, 0x59, 0x63, 0x5d, 0x0c, 0x29, 0x08, 0x34, 0xc0, 0x2d, 0x82, 0x39, 0x61, 0x84, - 0x6f, 0x9c, 0x62, 0x88, + 0x6f, 0x9c, 0x50, 0x88, 0xa1, 0x0b, 0x82, 0x49, 0xc0, 0x00, 0x18, 0x08, 0x63, 0x71, 0x0c, 0x39, 0x41, 0xce, 0x40, 0x2d, - 0xc0, 0x10, 0x6c, 0xe5, + 0xc0, 0x10, 0x6d, 0x09, 0x63, 0x61, 0x0c, 0x19, 0x0c, 0x29, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0x65, 0x61, 0x84, 0x08, 0x34, - 0x61, 0x38, 0x82, 0x39, + 0x4f, 0x38, 0x82, 0x39, 0x82, 0x49, 0x6f, 0x9c, 0x16, 0xb8, 0xa1, 0x0b, 0x0c, 0x39, 0xc0, 0x00, 0x40, 0x2d, 0x63, 0xa9, - 0x6d, 0x0d, 0x40, 0x0e, + 0x6d, 0x31, 0x40, 0x0e, 0x0c, 0x19, 0xc0, 0x10, 0xc0, 0x2d, 0x63, 0xa1, 0x63, 0xa5, 0x0c, 0x29, 0x08, 0x34, 0xc0, 0x2d, 0x82, 0x39, 0x61, 0x84, - 0x6f, 0x9c, 0x5f, 0xe8, + 0x6f, 0x9c, 0x4d, 0xe8, 0xa1, 0x0b, 0x82, 0x49, 0xc0, 0x00, 0x15, 0x68, 0x63, 0xd9, 0x0c, 0x39, 0x40, 0x0e, 0x40, 0x2d, - 0xc0, 0x10, 0x6d, 0x15, + 0xc0, 0x10, 0x6d, 0x39, 0x63, 0xd1, 0x0c, 0x19, 0x0c, 0x29, 0xc0, 0x2d, 0xc0, 0x2d, 0x63, 0xd5, 0x61, 0x84, 0x08, 0x34, - 0x5e, 0x98, 0x82, 0x39, + 0x4c, 0x98, 0x82, 0x39, 0x82, 0x49, 0x6f, 0x9c, 0x14, 0x18, 0xa1, 0x0b, 0x0c, 0x39, 0xc0, 0x00, 0x40, 0x2d, 0x64, 0x09, - 0x6d, 0x1d, 0x01, 0x4e, + 0x6d, 0x41, 0x01, 0x4e, 0x0c, 0x19, 0xc0, 0x10, 0xc0, 0x2d, 0x64, 0x01, 0x64, 0x05, 0x0c, 0x29, 0x08, 0x34, 0xc0, 0x2d, 0x82, 0x39, 0x61, 0x84, - 0x6f, 0x9c, 0x5d, 0x48, + 0x6f, 0x9c, 0x4b, 0x48, 0xa1, 0x0b, 0x82, 0x49, 0xc0, 0x00, 0x12, 0xc8, 0x64, 0x39, 0x0c, 0x39, 0x40, 0x4e, 0x40, 0x2d, - 0xc0, 0x10, 0x6d, 0x29, + 0xc0, 0x10, 0x6d, 0x4d, 0x64, 0x31, 0x0c, 0x19, 0x0c, 0x29, 0xc0, 0x2d, 0xc0, 0x2d, 0x64, 0x35, - 0x5c, 0x18, 0x82, 0x39, + 0x4a, 0x18, 0x82, 0x39, 0x86, 0x4b, 0x6f, 0x9c, 0x11, 0x98, 0xa1, 0x0b, 0x0c, 0x39, 0xc0, 0x00, 0x40, 0x2d, 0x64, 0x69, - 0x6d, 0x31, 0x00, 0xce, + 0x6d, 0x55, 0x00, 0xce, 0x0c, 0x19, 0xc0, 0x10, 0xc0, 0x2d, 0x64, 0x61, 0x64, 0x65, 0x0c, 0x29, 0x08, 0x34, 0xc0, 0x2d, 0x82, 0x39, 0x61, 0x84, - 0x6f, 0x9c, 0x5a, 0xc8, + 0x6f, 0x9c, 0x48, 0xc8, 0xa1, 0x0b, 0x82, 0x49, 0xc0, 0x00, 0x10, 0x48, - 0x6f, 0x9c, 0x61, 0x48, + 0x6f, 0x9c, 0x4f, 0x48, 0x41, 0xf6, 0x81, 0x01, 0x83, 0x11, 0x60, 0x3c, - 0xef, 0x9c, 0x59, 0x88, + 0xef, 0x9c, 0x47, 0x88, 0x63, 0x29, 0x0c, 0x09, 0x03, 0xc6, 0x40, 0x2d, 0x84, 0x14, 0xe1, 0x38, @@ -13855,7 +13978,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0e, 0xa6, 0x40, 0x2b, 0x02, 0xa6, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xec, 0x4d, 0x28, + 0xef, 0xec, 0x48, 0x08, 0x0e, 0x06, 0xa3, 0x0b, 0x8e, 0x0b, 0xc0, 0x00, 0xf2, 0x04, 0x0c, 0x4c, @@ -13866,64 +13989,64 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x09, 0x80, 0x6b, 0xc0, 0x2d, 0x63, 0x21, 0x63, 0x25, 0x0c, 0x19, - 0x4c, 0xd8, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x7a, 0xd8, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x94, 0x35, 0xc0, 0x2d, 0x63, 0x31, 0x63, 0x35, 0x0c, 0x19, - 0x4c, 0x38, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x7a, 0x38, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x90, 0xf5, 0xc0, 0x2d, 0x63, 0x41, 0x63, 0x45, 0x0c, 0x19, - 0x4b, 0x98, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x79, 0x98, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x8e, 0xb5, 0xc0, 0x2d, 0x63, 0x59, 0x63, 0x5d, 0x0c, 0x19, - 0x4a, 0xf8, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x78, 0xf8, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x8c, 0x75, 0xc0, 0x2d, 0x63, 0x61, 0x63, 0x65, 0x0c, 0x19, - 0x4a, 0x58, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x78, 0x58, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x8a, 0x35, 0xc0, 0x2d, 0x63, 0xa1, 0x63, 0xa5, 0x0c, 0x19, - 0x49, 0xb8, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x77, 0xb8, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x86, 0xf5, 0xc0, 0x2d, 0x63, 0xd1, 0x63, 0xd5, 0x0c, 0x19, - 0x49, 0x18, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x77, 0x18, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x84, 0xb5, 0xc0, 0x2d, 0x64, 0x01, 0x64, 0x05, 0x0c, 0x19, - 0x48, 0x78, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x76, 0x78, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x09, 0x82, 0x75, 0xc0, 0x2d, 0x64, 0x31, 0x64, 0x35, 0x0c, 0x19, - 0x47, 0xd8, 0xc0, 0x2d, - 0xa1, 0x0b, 0xef, 0x9c, + 0x75, 0xd8, 0xc0, 0x2d, + 0xa1, 0x0b, 0xef, 0x98, 0x0c, 0x0c, 0x80, 0x85, 0xdd, 0x93, 0xf2, 0x00, 0x64, 0x61, 0x0c, 0x09, 0x0c, 0x19, 0xc0, 0x2d, 0xc0, 0x2d, 0x64, 0x65, 0xf2, 0x00, 0x0c, 0x0c, - 0xff, 0x9c, 0x06, 0xe8, + 0xff, 0x98, 0x34, 0xe8, 0xfa, 0x80, 0x00, 0x0c, 0x6c, 0x1d, 0x00, 0x29, - 0x45, 0x58, 0xc0, 0x2b, + 0x40, 0x38, 0xc0, 0x2b, 0xa3, 0x0b, 0xef, 0xec, 0x41, 0xf6, 0x82, 0x55, 0x81, 0x11, 0x60, 0x3c, - 0xef, 0x9c, 0x41, 0x08, + 0xef, 0x98, 0x6f, 0x08, 0xf2, 0x80, 0x08, 0x0c, - 0xff, 0xd8, 0x22, 0xc8, + 0xff, 0xd8, 0x39, 0xe8, 0xf2, 0x80, 0x08, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x0c, 0x04, 0x0c, @@ -13933,8 +14056,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x29, 0x82, 0x35, 0x40, 0x2b, 0x6c, 0x1d, 0x0c, 0x0c, 0x8c, 0x0b, - 0x03, 0x58, 0xf2, 0x0c, - 0x0f, 0xc6, 0xff, 0xec, + 0x3e, 0x38, 0xf2, 0x0c, + 0x4e, 0x46, 0xff, 0xe8, 0x0e, 0x09, 0xef, 0xdc, 0xc2, 0x09, 0xf8, 0x10, 0xf8, 0x10, 0x4e, 0x01, @@ -13944,7 +14067,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x0b, 0x60, 0x00, 0xe8, 0x00, 0x5b, 0x88, 0x60, 0x04, 0x42, 0x46, - 0x58, 0xf8, 0x83, 0x21, + 0x57, 0x38, 0x83, 0x21, 0x8c, 0x0b, 0x68, 0x30, 0x81, 0x81, 0x1c, 0x08, 0xf3, 0xf8, 0x40, 0x00, @@ -13956,8 +14079,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x73, 0xfd, 0x40, 0x00, 0x4c, 0x03, 0xc0, 0xfd, 0x40, 0x15, 0x6e, 0x09, - 0x7f, 0x58, 0x8c, 0x0b, - 0x7b, 0x18, 0xe8, 0x1c, + 0x40, 0xf8, 0x8c, 0x0b, + 0x75, 0xf8, 0xe8, 0x20, 0x8c, 0x0b, 0x6f, 0xe8, 0x61, 0x44, 0x00, 0xc6, 0xe0, 0x00, 0x42, 0x46, @@ -13966,7 +14089,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x86, 0x80, 0x04, 0x58, 0xb8, 0x8c, 0x0b, 0x0c, 0x0c, 0xe8, 0x00, - 0x1d, 0x58, 0xf2, 0x0c, + 0x34, 0x78, 0xf2, 0x0c, 0x42, 0x56, 0xff, 0xd8, 0x8c, 0x0b, 0x60, 0x00, 0xe8, 0x00, 0x58, 0x28, @@ -13984,16 +14107,16 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x72, 0xc1, 0x02, 0x06, 0x8c, 0x0b, 0xc0, 0x20, 0xf2, 0x0c, 0x0c, 0x0c, - 0xff, 0xd8, 0x1b, 0xc8, + 0xff, 0xd8, 0x32, 0xe8, 0xfa, 0x00, 0x04, 0x0c, 0x82, 0x25, 0xa1, 0x1b, - 0x6f, 0x98, 0x78, 0xc8, + 0x6f, 0x98, 0x66, 0xc8, 0x40, 0x06, 0x83, 0x11, 0x0c, 0x0c, 0xfa, 0x02, 0xdd, 0x93, 0xf2, 0x00, 0x7a, 0x02, 0x4c, 0x06, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0x98, 0x78, 0x08, + 0x6f, 0x98, 0x66, 0x08, 0x8c, 0x0b, 0x81, 0x11, 0xf2, 0x00, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -14018,11 +14141,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8e, 0x1b, 0x0c, 0x0b, 0xe8, 0x00, 0x4d, 0x08, 0xe0, 0xc8, 0x00, 0x0a, - 0x5c, 0xd8, 0x8a, 0xb5, + 0x62, 0x38, 0x8a, 0xb5, 0x2c, 0x04, 0xe8, 0x1c, 0x83, 0x21, 0x81, 0x11, 0x95, 0x11, 0x00, 0x16, - 0x68, 0x30, 0x4f, 0x48, + 0x68, 0x30, 0x4d, 0x88, 0x2c, 0x04, 0x8c, 0x0b, 0x80, 0x16, 0x83, 0x11, 0x80, 0x08, 0xa8, 0x04, @@ -14043,12 +14166,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x4c, 0xee, 0x05, 0xdd, 0x93, 0xf2, 0x7c, 0xfa, 0x0c, 0x04, 0x0c, - 0x6f, 0xec, 0x7b, 0x08, + 0x6f, 0xec, 0x7a, 0xc8, 0x0e, 0x16, 0x80, 0x6b, 0x42, 0xc6, 0x60, 0x08, 0x4c, 0x71, 0xe0, 0x10, 0x40, 0x2b, 0x6c, 0x1d, - 0x4b, 0xf8, 0x81, 0x21, + 0x4a, 0x38, 0x81, 0x21, 0x8c, 0x0b, 0x68, 0x30, 0x61, 0x44, 0x00, 0xc6, 0xe1, 0x24, 0x50, 0x86, @@ -14057,36 +14180,36 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x80, 0x46, 0x4a, 0x44, 0x4a, 0x84, 0x65, 0xfe, 0x25, 0xe0, 0x8c, - 0xef, 0xec, 0x7a, 0x48, + 0xef, 0xec, 0x7a, 0x08, 0x6c, 0x1d, 0x0c, 0x29, 0x02, 0x16, 0x40, 0x2b, - 0x73, 0x78, 0xe0, 0x08, + 0x6e, 0x58, 0xe0, 0x08, 0x8c, 0x0b, 0x6f, 0xe8, 0x80, 0x95, 0xa3, 0x0b, - 0xe8, 0x30, 0x51, 0x08, - 0x50, 0xd8, 0x81, 0x95, + 0xe8, 0x30, 0x4f, 0x48, + 0x4f, 0x18, 0x81, 0x95, 0xa0, 0x04, 0xe8, 0x30, 0x40, 0x0a, 0x80, 0x08, 0x80, 0xd5, 0xe0, 0x84, 0x8e, 0x0b, 0x81, 0x71, 0xf2, 0x0c, 0x0c, 0x0c, - 0x78, 0x98, 0xdd, 0x93, + 0x78, 0x58, 0xdd, 0x93, 0x0c, 0x29, 0xef, 0xec, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x0e, 0x26, 0x60, 0x08, 0x02, 0x26, - 0x71, 0x98, 0x8c, 0x0b, + 0x6c, 0x78, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xe8, 0xc0, 0x00, 0x0e, 0x06, 0x0c, 0x0c, 0x8e, 0x0b, 0xdd, 0x93, 0xf2, 0x0c, 0xfa, 0x0c, 0x04, 0x0c, - 0x6f, 0xec, 0x76, 0x48, + 0x6f, 0xec, 0x76, 0x08, 0x00, 0x26, 0x80, 0x6b, 0x42, 0x86, 0x60, 0x08, 0x4c, 0x01, 0xe0, 0x3c, 0x40, 0x2b, 0x6c, 0x1d, - 0x47, 0x38, 0x81, 0x21, + 0x45, 0x78, 0x81, 0x21, 0x8c, 0x0b, 0x68, 0x30, 0x61, 0x44, 0x00, 0xc6, 0xe1, 0x24, 0x50, 0x46, @@ -14095,24 +14218,24 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x80, 0x46, 0x4a, 0x44, 0x4a, 0x84, 0xa5, 0xfe, 0x25, 0xe0, 0x8c, - 0xef, 0xec, 0x75, 0x88, + 0xef, 0xec, 0x75, 0x48, 0x6c, 0x1d, 0x0c, 0x29, 0x0e, 0x46, 0x40, 0x2b, 0x02, 0x46, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xe8, 0x6e, 0x88, + 0xef, 0xe8, 0x69, 0x68, 0x80, 0x95, 0xa3, 0x0b, - 0xe8, 0x30, 0x4c, 0x28, - 0x4b, 0xf8, 0x83, 0x75, + 0xe8, 0x30, 0x4a, 0x68, + 0x4a, 0x38, 0x83, 0x75, 0xa0, 0x04, 0xe8, 0x30, 0x40, 0x0a, 0x80, 0x08, 0x82, 0xe5, 0xe0, 0x84, - 0xef, 0xec, 0x74, 0x08, + 0xef, 0xec, 0x73, 0xc8, 0x6c, 0x1d, 0x0c, 0x29, 0x0e, 0x56, 0x40, 0x2b, 0x02, 0x56, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xe8, 0x6d, 0x08, + 0xef, 0xe8, 0x67, 0xe8, 0x80, 0x45, 0xa3, 0x0b, 0x00, 0x86, 0x81, 0x71, 0x80, 0x04, 0xe1, 0x3c, @@ -14122,12 +14245,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x1c, 0x04, 0x4c, 0x80, 0x6b, 0x02, 0x7b, - 0xef, 0xec, 0x71, 0x28, + 0xef, 0xec, 0x70, 0xe8, 0x60, 0x08, 0x00, 0x36, 0xe0, 0x04, 0x42, 0x26, 0x6c, 0x1d, 0x4c, 0x01, 0x81, 0x21, 0x40, 0x2b, - 0x68, 0x30, 0x42, 0x28, + 0x68, 0x30, 0x40, 0x68, 0x00, 0xc6, 0x8c, 0x0b, 0x52, 0xc6, 0x61, 0x44, 0x80, 0x04, 0xe1, 0x24, @@ -14135,16 +14258,16 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x46, 0x4a, 0x84, 0x38, 0x84, 0xa5, 0xe0, 0x80, 0xe0, 0x8c, 0x44, 0x4a, - 0x70, 0x78, 0xfe, 0x25, + 0x70, 0x38, 0xfe, 0x25, 0x0c, 0x29, 0xef, 0xec, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x10, 0x66, 0x60, 0x08, 0x02, 0x66, - 0x69, 0x78, 0x8c, 0x0b, + 0x64, 0x58, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xe8, - 0x47, 0x18, 0x80, 0x95, + 0x45, 0x58, 0x80, 0x95, 0x81, 0xe5, 0xe8, 0x30, - 0xe8, 0x30, 0x46, 0xe8, + 0xe8, 0x30, 0x45, 0x28, 0x80, 0x08, 0xa4, 0x04, 0xe0, 0x84, 0x40, 0x0a, 0x10, 0x06, 0x00, 0xe5, @@ -14152,12 +14275,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x00, 0x51, 0x26, 0x90, 0x0b, 0x80, 0xa5, 0xf2, 0x1c, 0x0c, 0x4c, - 0x6e, 0x58, 0xdd, 0x93, + 0x6e, 0x18, 0xdd, 0x93, 0x0c, 0x29, 0xef, 0xec, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x0e, 0x76, 0x60, 0x08, 0x02, 0x76, - 0x67, 0x58, 0x8c, 0x0b, + 0x62, 0x38, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xe8, 0xc0, 0x00, 0x0e, 0x06, 0x0c, 0x4c, 0x8e, 0x0b, @@ -14395,7 +14518,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf0, 0x8c, 0x4e, 0x62, 0x00, 0x20, 0x8c, 0x23, 0x40, 0xbd, 0x67, 0xc1, - 0x7c, 0x38, 0xa9, 0x21, + 0x6a, 0x38, 0xa9, 0x21, 0x40, 0x06, 0xef, 0x90, 0x4e, 0x05, 0xfc, 0x06, 0xc0, 0x0b, 0x6d, 0xc9, @@ -14475,7 +14598,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x61, 0x4c, 0x4d, 0x06, 0xe1, 0x98, 0x03, 0x46, 0x81, 0x21, 0x18, 0x04, - 0x6e, 0x10, 0x47, 0x06, + 0x6e, 0x10, 0x47, 0x86, 0xe1, 0x00, 0x0a, 0xc6, 0x03, 0x86, 0x04, 0x0c, 0x04, 0x2e, 0xe1, 0x98, @@ -14491,30 +14614,30 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0xb9, 0x67, 0xf1, 0xe1, 0x00, 0x05, 0x06, 0x94, 0x4e, 0x98, 0x04, - 0x78, 0x78, 0x88, 0x1e, + 0x76, 0xf8, 0x88, 0x1e, 0x18, 0x04, 0xef, 0xf0, 0x40, 0x71, 0xb5, 0x71, 0xc0, 0x2b, 0x6c, 0x1d, 0xef, 0xf4, 0x4e, 0xa8, 0x42, 0xc6, 0x18, 0x04, 0x84, 0x0e, 0xe1, 0x98, - 0xe8, 0x2c, 0x4b, 0x68, + 0xe8, 0x2c, 0x49, 0xa8, 0x45, 0x86, 0x18, 0x14, 0x88, 0x0e, 0xe1, 0x98, - 0x68, 0x2c, 0x4b, 0x48, + 0x68, 0x2c, 0x49, 0x88, 0x42, 0x86, 0x82, 0x0b, 0x04, 0x0e, 0xe1, 0x98, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0x94, 0x78, 0x08, + 0x6f, 0x94, 0x66, 0x08, 0x00, 0x1c, 0x81, 0x11, 0x50, 0x06, 0xe2, 0xc0, 0xc0, 0x00, 0x61, 0x99, 0x00, 0x46, 0x20, 0x0e, - 0x68, 0x18, 0xe1, 0x9c, + 0x56, 0x18, 0xe1, 0x9c, 0xa0, 0x04, 0xef, 0x94, 0xe3, 0x40, 0x00, 0x1c, 0x60, 0x3c, 0x41, 0xf6, - 0x76, 0xd8, 0x83, 0x11, + 0x64, 0xd8, 0x83, 0x11, 0x83, 0x81, 0x6f, 0x94, 0x43, 0x86, 0x18, 0x04, 0xc4, 0x80, 0x60, 0x15, @@ -14530,7 +14653,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xff, 0xd5, 0xfa, 0x0c, 0x04, 0x0c, 0x41, 0xf6, 0x00, 0x7b, - 0x74, 0xd8, 0xe0, 0x3c, + 0x62, 0xd8, 0xe0, 0x3c, 0x81, 0x11, 0x6f, 0x94, 0x09, 0x01, 0x81, 0x61, 0x4e, 0x01, 0xb7, 0x11, @@ -14544,15 +14667,15 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0e, 0x19, 0x82, 0xe5, 0xc0, 0x2b, 0x64, 0xc5, 0x8a, 0xf5, 0xa7, 0x1b, - 0xef, 0xdc, 0x02, 0x06, + 0xef, 0xdc, 0x02, 0x86, 0x42, 0x0a, 0x84, 0x18, 0x8a, 0x25, 0xe0, 0x80, 0xe0, 0x80, 0x40, 0x0a, 0x05, 0x11, 0x88, 0xc5, 0x4f, 0x98, 0x8e, 0x0b, - 0x59, 0xd8, 0xef, 0xfc, + 0x5f, 0x78, 0xef, 0xfc, 0xa1, 0x0b, 0xe8, 0x08, - 0x59, 0xf8, 0x80, 0xb5, + 0x5f, 0x98, 0x80, 0xb5, 0x8e, 0x0b, 0x68, 0x08, 0x0e, 0x0b, 0x80, 0x6b, 0x40, 0x15, 0x6e, 0x09, @@ -14560,18 +14683,18 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0xff, 0x72, 0xfd, 0x6e, 0x09, 0x4e, 0x03, 0x41, 0xf6, 0x40, 0x15, - 0x71, 0x18, 0xe0, 0x3c, + 0x5f, 0x18, 0xe0, 0x3c, 0xa1, 0x6b, 0xef, 0x94, 0x07, 0x11, 0xa4, 0xd5, 0x4d, 0xd8, 0x8e, 0x0b, - 0x5b, 0xd8, 0xef, 0xfc, + 0x72, 0xf8, 0xef, 0xfc, 0x8e, 0x0b, 0x6f, 0xd4, 0x80, 0x6b, 0x11, 0xe5, 0x8e, 0x0b, 0x09, 0x11, 0xef, 0xfc, 0x4d, 0x48, 0x64, 0xd5, 0x0e, 0x09, 0xa7, 0x0b, 0xc0, 0x2b, - 0x10, 0x06, 0x92, 0xd5, + 0x10, 0x86, 0x92, 0xd5, 0xa0, 0x08, 0xef, 0xdc, 0xf8, 0xc0, 0x00, 0x0a, 0xa0, 0x08, 0x80, 0xe5, @@ -14587,31 +14710,31 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8a, 0xe5, 0xe0, 0x8c, 0x8e, 0x0b, 0x1b, 0x11, 0xef, 0xfc, 0x4b, 0x08, - 0x6f, 0xd4, 0x7f, 0xe8, + 0x6f, 0xd8, 0x54, 0xc8, 0x1d, 0x11, 0x8e, 0x0b, 0x4a, 0x98, 0x8e, 0x0b, - 0x7a, 0x78, 0xef, 0xfc, + 0x7c, 0x18, 0xef, 0xfc, 0x8e, 0x0b, 0x68, 0x18, 0x64, 0xcd, 0x0e, 0x05, 0xe2, 0x14, 0xc0, 0x05, 0x86, 0xe5, 0xc2, 0x0d, 0xc8, 0x09, 0xa0, 0x08, 0x8e, 0x0b, 0x20, 0x06, - 0xe8, 0x18, 0x7d, 0x88, + 0xe8, 0x18, 0x7f, 0x28, 0x6e, 0x09, 0x0e, 0x0b, 0x83, 0x11, 0x40, 0x15, 0xfc, 0x98, 0x00, 0x04, 0x6e, 0x09, 0x4e, 0x03, 0x41, 0xf6, 0x40, 0x15, - 0x6b, 0xb8, 0xe0, 0x3c, + 0x59, 0xb8, 0xe0, 0x3c, 0x0b, 0x11, 0xef, 0x94, 0x48, 0x98, 0x8e, 0x0b, - 0x7b, 0x98, 0xef, 0xfc, - 0x81, 0x55, 0xe8, 0x08, + 0x41, 0x38, 0xef, 0xfc, + 0x81, 0x55, 0xe8, 0x0c, 0x8e, 0x0b, 0x1f, 0x11, 0xef, 0xfc, 0x48, 0x28, 0x60, 0x3c, 0x41, 0xf6, - 0x6a, 0xb8, 0x83, 0x11, + 0x58, 0xb8, 0x83, 0x11, 0x0e, 0x09, 0xef, 0x94, 0xc0, 0x2b, 0x6c, 0x11, 0xe0, 0x98, 0x40, 0x4a, @@ -14622,8 +14745,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x06, 0x85, 0x05, 0x4e, 0x05, 0xfc, 0x06, 0x40, 0x0e, 0x60, 0xfd, - 0x69, 0xb8, 0x8e, 0x0b, - 0x51, 0x18, 0xe8, 0x08, + 0x6f, 0x58, 0x8e, 0x0b, + 0x56, 0xb8, 0xe8, 0x08, 0x8e, 0x0b, 0x68, 0x08, 0xfc, 0x06, 0x40, 0x06, 0x60, 0xf9, 0x0e, 0x25, @@ -14638,7 +14761,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf8, 0x15, 0xa1, 0x0b, 0xc3, 0x13, 0xc1, 0x83, 0x60, 0x3c, 0x41, 0xf6, - 0x67, 0x58, 0x83, 0x11, + 0x55, 0x58, 0x83, 0x11, 0x00, 0x64, 0xef, 0x94, 0x0c, 0x0c, 0xfa, 0x80, 0xdd, 0x93, 0xf2, 0x0c, @@ -14655,7 +14778,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x44, 0x20, 0x84, 0x14, 0xc0, 0xff, 0x72, 0xf1, 0x6e, 0x09, 0x40, 0x23, - 0x07, 0xd8, 0xc0, 0x15, + 0x1e, 0xf8, 0xc0, 0x15, 0xdd, 0x93, 0xff, 0xd4, 0xfa, 0x84, 0x04, 0x0c, 0x41, 0x06, 0x00, 0x6b, @@ -14667,13 +14790,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x76, 0x85, 0x11, 0xe1, 0x28, 0x40, 0x06, 0x00, 0x76, 0x80, 0x04, - 0x7e, 0x98, 0x8c, 0x0b, + 0x7c, 0xd8, 0x8c, 0x0b, 0x40, 0x46, 0xe8, 0x28, 0xbd, 0x11, 0x61, 0x28, 0x83, 0x21, 0x00, 0x04, 0x8c, 0x0b, 0x00, 0x76, 0xf2, 0x84, 0x0c, 0x0c, - 0xe0, 0x28, 0x3d, 0xe8, + 0xe0, 0x28, 0x3c, 0x28, 0xfa, 0x7c, 0x04, 0x4c, 0x41, 0x86, 0x00, 0x8b, 0x00, 0x04, 0xe1, 0x28, @@ -14687,7 +14810,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xc6, 0x00, 0x76, 0x80, 0x04, 0xe1, 0x28, 0x02, 0x06, 0x00, 0x16, - 0x7c, 0x18, 0xe0, 0x10, + 0x7a, 0x58, 0xe0, 0x10, 0x90, 0x0b, 0x68, 0x28, 0x61, 0x44, 0x00, 0xc6, 0xe1, 0x2c, 0x02, 0x46, @@ -14701,7 +14824,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfc, 0x95, 0xa5, 0x3b, 0x6c, 0x1d, 0x10, 0x29, 0x02, 0xc6, 0x40, 0x2b, - 0x63, 0x58, 0xe0, 0x08, + 0x5e, 0x38, 0xe0, 0x08, 0x90, 0x0b, 0x6f, 0xe4, 0xe0, 0x08, 0x12, 0xc6, 0x8c, 0xd5, 0xa1, 0x0b, @@ -14711,7 +14834,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xc6, 0x18, 0x0e, 0x80, 0x04, 0xe1, 0x28, 0x02, 0x06, 0x00, 0x16, - 0x79, 0x18, 0xe0, 0x10, + 0x77, 0x58, 0xe0, 0x10, 0x90, 0x0b, 0x68, 0x28, 0x61, 0x44, 0x00, 0xc6, 0xe1, 0x2c, 0x02, 0x46, @@ -14725,7 +14848,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfc, 0x95, 0xa7, 0x3b, 0x6c, 0x1d, 0x10, 0x29, 0x02, 0xc6, 0x40, 0x2b, - 0x60, 0x58, 0xe0, 0x08, + 0x5b, 0x38, 0xe0, 0x08, 0x90, 0x0b, 0x6f, 0xe4, 0xe0, 0x08, 0x12, 0xc6, 0x80, 0xd5, 0xa1, 0x0b, @@ -14738,7 +14861,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x61, 0x28, 0x42, 0x46, 0x04, 0x14, 0x81, 0x61, 0x04, 0x66, 0x83, 0x21, - 0x75, 0xb8, 0x83, 0x11, + 0x73, 0xf8, 0x83, 0x11, 0x40, 0x06, 0xe8, 0x28, 0x80, 0x04, 0xe1, 0x28, 0x41, 0x06, 0x00, 0x66, @@ -14944,7 +15067,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf3, 0xf0, 0x46, 0x30, 0x06, 0x36, 0xc4, 0x39, 0xe0, 0x08, 0x02, 0xe6, - 0xef, 0xe4, 0x45, 0x08, + 0xef, 0xe0, 0x7f, 0xe8, 0x82, 0x55, 0xa1, 0x0b, 0x00, 0x56, 0x81, 0x85, 0x80, 0x18, 0xe1, 0x94, @@ -14955,7 +15078,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x00, 0x04, 0x0c, 0x02, 0x06, 0x00, 0x6b, - 0x4d, 0xf8, 0xe2, 0x80, + 0x4c, 0x38, 0xe2, 0x80, 0x5a, 0x98, 0xe8, 0x2c, 0x8c, 0x0b, 0x6f, 0xfc, 0x45, 0xf6, 0x01, 0x11, @@ -14973,7 +15096,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x0c, 0x04, 0x0c, 0xb9, 0x11, 0x00, 0x6b, - 0x68, 0x2c, 0x4b, 0xc8, + 0x68, 0x2c, 0x4a, 0x08, 0xe4, 0x10, 0x0e, 0x60, 0x81, 0x21, 0x29, 0x11, 0x8e, 0x3b, 0x0c, 0x0b, @@ -15220,7 +15343,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4e, 0x66, 0x40, 0x2b, 0x42, 0x66, 0xe0, 0x0c, 0x8c, 0x0b, 0x60, 0x0c, - 0xef, 0xe0, 0x62, 0x88, + 0xef, 0xe0, 0x5d, 0x68, 0x0c, 0x0c, 0x8e, 0x0b, 0xdd, 0x93, 0xf2, 0x0c, 0x69, 0x84, 0x08, 0x24, @@ -15269,7 +15392,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x61, 0x98, 0x4f, 0x06, 0x1c, 0x6e, 0x80, 0x6b, 0xe1, 0x00, 0x02, 0x06, - 0xe8, 0x28, 0x66, 0xc8, + 0xe8, 0x28, 0x65, 0x08, 0x8c, 0x0b, 0x1c, 0x14, 0xe8, 0x00, 0x40, 0x88, 0x8c, 0x0b, 0x1c, 0x14, @@ -15283,24 +15406,24 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0x64, 0x11, 0x00, 0x60, 0x09, 0x21, 0xc0, 0x11, - 0x68, 0xb8, 0x81, 0x31, + 0x6a, 0x98, 0x81, 0x31, 0x00, 0x60, 0xe8, 0x18, 0x40, 0x11, 0x64, 0x21, 0x65, 0x01, 0x02, 0x70, 0x29, 0x21, 0xc0, 0x89, - 0x68, 0x18, 0x81, 0x31, + 0x69, 0xf8, 0x81, 0x31, 0x00, 0x60, 0xe8, 0x18, 0x40, 0x11, 0x64, 0x71, 0x65, 0x61, 0x02, 0x70, 0x21, 0x21, 0xc0, 0x89, - 0x67, 0x78, 0x81, 0x31, + 0x69, 0x58, 0x81, 0x31, 0x00, 0x60, 0xe8, 0x18, 0x40, 0x11, 0x64, 0xb1, 0x65, 0xa1, 0x02, 0x70, 0x45, 0x06, 0xc0, 0x89, 0x89, 0x31, 0x60, 0x18, 0xf2, 0x84, 0x0c, 0x0c, - 0xe0, 0x18, 0x26, 0xa8, + 0xe0, 0x18, 0x28, 0x88, 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0xf0, 0x1e, 0xf0, 0x82, 0xbb, 0x00, 0x6b, @@ -15336,8 +15459,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x65, 0x41, 0x0a, 0x60, 0x3e, 0x1e, 0xc0, 0x54, 0x3c, 0x0e, 0x94, 0x1b, - 0x7f, 0x98, 0x92, 0x0b, - 0x8e, 0x2b, 0x6f, 0xc0, + 0x55, 0x38, 0x92, 0x0b, + 0x8e, 0x2b, 0x6f, 0xc4, 0x63, 0x21, 0x0c, 0x09, 0x4e, 0x0a, 0x40, 0x38, 0x00, 0x1a, 0xe1, 0x9c, @@ -15348,8 +15471,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x01, 0xc0, 0xd8, 0x40, 0x2b, 0x6c, 0x1d, 0x14, 0x1b, 0x92, 0x0b, - 0x77, 0xf8, 0x8e, 0x2b, - 0x96, 0x4b, 0x6f, 0xbc, + 0x4d, 0x98, 0x8e, 0x2b, + 0x96, 0x4b, 0x6f, 0xc0, 0x4e, 0x0a, 0x0d, 0xa5, 0x40, 0x46, 0xe1, 0x9c, 0x43, 0x46, 0x60, 0x08, @@ -15383,7 +15506,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x96, 0x4b, 0x3e, 0x4e, 0xbc, 0xce, 0x9b, 0x8e, 0x9d, 0x2e, 0x95, 0x1e, - 0xef, 0xb4, 0x73, 0xe8, + 0xef, 0xb8, 0x49, 0x88, 0xa1, 0x8b, 0x80, 0x8b, 0x40, 0x56, 0x88, 0x75, 0x0a, 0x60, 0x60, 0x08, @@ -15400,7 +15523,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x9b, 0x24, 0x9d, 0x14, 0x86, 0x1b, 0x3e, 0x1e, 0x92, 0x3b, 0x3c, 0xae, - 0xef, 0xb0, 0x7a, 0x08, + 0xef, 0xb4, 0x4e, 0xe8, 0xa1, 0x8b, 0x80, 0x8b, 0xa1, 0x8b, 0x8a, 0x45, 0x6e, 0x89, 0x0c, 0x05, @@ -15419,7 +15542,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x33, 0xc0, 0x0a, 0xc0, 0x0a, 0x69, 0x49, 0x0c, 0x1d, 0x0c, 0x29, - 0x49, 0x98, 0xc0, 0x2b, + 0x44, 0x78, 0xc0, 0x2b, 0x10, 0x0b, 0xcf, 0xe0, 0x0c, 0x0c, 0xf8, 0xf1, 0xdd, 0x93, 0xf2, 0x7c, @@ -15434,7 +15557,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8e, 0x2b, 0x7c, 0x2e, 0x95, 0x14, 0xbe, 0x1e, 0xbc, 0x1e, 0x93, 0x44, - 0x53, 0xb8, 0x9d, 0x14, + 0x69, 0x58, 0x9d, 0x14, 0x17, 0xb4, 0xef, 0xb4, 0xa1, 0x8b, 0x80, 0x8b, 0x9f, 0xfc, 0x30, 0x18, @@ -15444,7 +15567,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0x06, 0x00, 0x8b, 0x00, 0x8e, 0xe1, 0x98, 0xe1, 0x00, 0x02, 0x06, - 0x68, 0x28, 0x50, 0xe8, + 0x68, 0x28, 0x4f, 0x28, 0x01, 0x91, 0x90, 0x0b, 0xe6, 0xd4, 0x54, 0x06, 0x83, 0x61, 0x17, 0xb1, @@ -15498,13 +15621,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x64, 0x11, 0x00, 0x70, 0x02, 0x80, 0xc0, 0x11, 0x40, 0x6d, 0x65, 0x71, - 0x4d, 0xd8, 0x89, 0x21, + 0x4f, 0xb8, 0x89, 0x21, 0x81, 0x31, 0x68, 0x18, 0x64, 0x21, 0x00, 0x70, 0x02, 0x80, 0x40, 0x11, 0xc0, 0x6d, 0x65, 0x21, 0x81, 0x31, 0x29, 0x21, - 0xe8, 0x18, 0x4d, 0x28, + 0xe8, 0x18, 0x4f, 0x08, 0x60, 0x88, 0x00, 0x64, 0x65, 0x80, 0x02, 0x80, 0x02, 0x25, 0xc0, 0x6d, @@ -15529,7 +15652,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x02, 0x80, 0x40, 0x11, 0xc0, 0x6e, 0x65, 0x01, 0xf2, 0x0c, 0x0c, 0x0c, - 0xe0, 0x18, 0x0a, 0x08, + 0xe0, 0x18, 0x0b, 0xe8, 0xfa, 0x3c, 0x04, 0x0c, 0x15, 0xc6, 0x00, 0x6b, 0x10, 0x60, 0xe1, 0xa0, @@ -15539,17 +15662,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x67, 0x61, 0x0e, 0x60, 0x10, 0x0b, 0xc0, 0xae, 0x0c, 0x2b, 0x92, 0x1b, - 0x53, 0x18, 0x8e, 0x3b, + 0x6a, 0x38, 0x8e, 0x3b, 0xa1, 0x0b, 0xef, 0xcc, 0x28, 0x24, 0x84, 0x55, 0x12, 0x1b, 0x90, 0x0b, - 0x54, 0xf8, 0x8e, 0x3b, + 0x6c, 0x18, 0x8e, 0x3b, 0xa1, 0x0b, 0xef, 0xcc, 0x00, 0x00, 0x14, 0x25, 0x9c, 0x00, 0x40, 0x80, 0x1c, 0x00, 0x42, 0x90, 0x9c, 0x00, 0x46, 0x70, - 0x8f, 0xcc, 0x51, 0xc8, + 0x8f, 0xcc, 0x68, 0xe8, 0x6e, 0x89, 0x0c, 0x15, 0xa1, 0x0b, 0x40, 0x0a, 0x6e, 0x8d, 0x0c, 0x25, @@ -15568,7 +15691,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0e, 0x56, 0x40, 0x2b, 0x02, 0x56, 0xe0, 0x0c, 0x8c, 0x0b, 0x60, 0x0c, - 0xef, 0xdc, 0x77, 0x08, + 0xef, 0xdc, 0x71, 0xe8, 0x0c, 0x0c, 0x8e, 0x0b, 0xdd, 0x93, 0xf2, 0x3c, 0xf8, 0x7c, 0x04, 0x0c, @@ -15686,6 +15809,51 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x01, 0x01, 0xd0, 0x55, 0x0c, 0x0c, 0xb0, 0xf1, 0xdd, 0x93, 0xf0, 0x7c, + 0xf8, 0x1c, 0x04, 0x0c, + 0x63, 0x15, 0x00, 0x19, + 0xa5, 0x1b, 0xc0, 0x38, + 0x00, 0x19, 0x94, 0x15, + 0xc0, 0x38, 0x64, 0xd1, + 0x92, 0x75, 0xa1, 0x1b, + 0x61, 0x41, 0x00, 0x19, + 0x81, 0x31, 0x40, 0x15, + 0x61, 0x45, 0x00, 0x29, + 0x89, 0x41, 0x40, 0x15, + 0xe6, 0x86, 0x44, 0x2a, + 0x62, 0x11, 0x00, 0x19, + 0x07, 0x95, 0xc0, 0x15, + 0xfa, 0x80, 0x04, 0x24, + 0x70, 0xb0, 0x4a, 0x02, + 0xe6, 0x86, 0x58, 0xca, + 0x67, 0x41, 0x0a, 0x50, + 0x81, 0x61, 0x40, 0x57, + 0x98, 0x83, 0x85, 0x85, + 0xf0, 0xa0, 0x4e, 0x02, + 0x6e, 0x41, 0x0e, 0x99, + 0xab, 0x9b, 0xc0, 0x1a, + 0xc2, 0x87, 0x86, 0xf5, + 0x10, 0x83, 0x80, 0x83, + 0xc0, 0x0c, 0x6d, 0x21, + 0xe1, 0xf4, 0x12, 0x84, + 0x00, 0x93, 0x86, 0x99, + 0x40, 0x1c, 0x62, 0x6d, + 0x10, 0x84, 0x92, 0x83, + 0x85, 0x87, 0xfb, 0x00, + 0x82, 0xd5, 0x92, 0x8d, + 0x6a, 0x41, 0x0e, 0x89, + 0x00, 0x99, 0xc0, 0x1a, + 0xc0, 0x38, 0x64, 0xd5, + 0xd2, 0x8d, 0xc3, 0x87, + 0x06, 0x41, 0x0e, 0x70, + 0x4e, 0x41, 0x80, 0x6b, + 0x82, 0x61, 0x80, 0x00, + 0x10, 0x64, 0x14, 0x78, + 0xcf, 0x8d, 0xfa, 0x80, + 0x82, 0x31, 0xf4, 0xb5, + 0xfa, 0x80, 0x18, 0x34, + 0xf0, 0xf5, 0xc5, 0xcd, + 0x0c, 0x0c, 0x81, 0x01, + 0xdd, 0x93, 0xf0, 0x1c, 0xf8, 0x04, 0x04, 0x0c, 0x61, 0x41, 0x00, 0x19, 0xfb, 0x31, 0x40, 0x15, @@ -15748,7 +15916,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x10, 0x00, 0x06, 0x5c, 0x00, 0x40, 0x60, 0xdc, 0x00, 0x42, 0x70, - 0xcf, 0xdc, 0x4b, 0x08, + 0xcf, 0xdc, 0x42, 0xa8, 0x82, 0x71, 0x65, 0x0e, 0xe2, 0x30, 0x0e, 0x0a, 0x20, 0x14, 0xfa, 0xf5, @@ -15770,14 +15938,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x65, 0x21, 0x08, 0x60, 0x0a, 0x60, 0x40, 0xa2, 0xc0, 0xa3, 0x66, 0xe1, - 0x50, 0x98, 0xbc, 0xce, + 0x62, 0x18, 0xbc, 0xce, 0xa1, 0x0b, 0xef, 0xc8, 0x0e, 0x06, 0x02, 0xa5, 0x0c, 0x29, 0x80, 0x00, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x0c, 0x0e, 0x56, 0x60, 0x0c, 0x02, 0x56, - 0x5c, 0xd8, 0x8c, 0x0b, + 0x52, 0x18, 0x8c, 0x0b, 0x0e, 0x0b, 0xef, 0xdc, 0x0c, 0x0c, 0x98, 0xf1, 0xdd, 0x93, 0xf2, 0x04, @@ -15787,7 +15955,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0x30, 0x1e, 0xf0, 0x81, 0x01, 0x00, 0x8b, - 0x6f, 0xf0, 0x5e, 0xc8, + 0x6f, 0xf0, 0x59, 0x28, 0x81, 0x71, 0x81, 0x11, 0x60, 0x04, 0x47, 0xc6, 0x10, 0x05, 0x80, 0x6b, @@ -15796,14 +15964,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x10, 0x15, 0xc0, 0xad, 0xc0, 0x0a, 0x6d, 0x49, 0x6c, 0x1d, 0x50, 0x31, - 0x4a, 0xd8, 0xc0, 0x2b, + 0x5c, 0x58, 0xc0, 0x2b, 0x80, 0x9b, 0xef, 0xc4, 0x82, 0xc5, 0xa1, 0x9b, 0x6c, 0x1d, 0x10, 0x29, 0x90, 0x0b, 0x40, 0x2b, - 0x6f, 0xdc, 0x59, 0xe8, + 0x6f, 0xdc, 0x4f, 0x28, 0x03, 0x11, 0x92, 0x1b, - 0x5c, 0xb8, 0x8c, 0x0b, + 0x57, 0x18, 0x8c, 0x0b, 0x15, 0x75, 0xef, 0xf0, 0x7c, 0x6e, 0x92, 0x7b, 0xe1, 0x04, 0x01, 0x46, @@ -15812,17 +15980,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x10, 0x05, 0x80, 0x1e, 0xc0, 0x0a, 0x6d, 0x59, 0x6e, 0x0d, 0x10, 0x15, - 0x4a, 0x78, 0xc0, 0x09, + 0x5b, 0xf8, 0xc0, 0x09, 0x00, 0x00, 0xef, 0xc4, 0xc0, 0x80, 0x64, 0x01, 0xe1, 0xc0, 0x12, 0x04, - 0x6f, 0xcc, 0x55, 0x48, + 0x6f, 0xcc, 0x64, 0x88, 0x10, 0x0b, 0x92, 0x0b, - 0x5c, 0x98, 0x92, 0x1b, + 0x6b, 0xd8, 0x92, 0x1b, 0x10, 0x0b, 0xef, 0xcc, - 0x56, 0x98, 0x92, 0x1b, + 0x65, 0xd8, 0x92, 0x1b, 0x10, 0x0b, 0xef, 0xcc, - 0x59, 0x58, 0x92, 0x1b, + 0x68, 0x98, 0x92, 0x1b, 0x01, 0x46, 0xef, 0xcc, 0x02, 0x86, 0x61, 0x18, 0x80, 0x04, 0xe1, 0x18, @@ -15845,7 +16013,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xd0, 0x19, 0x80, 0x18, 0x90, 0x0b, 0x00, 0x16, 0x60, 0xcd, 0x10, 0x15, - 0x6b, 0x58, 0xc0, 0x0e, + 0x63, 0xf8, 0xc0, 0x0e, 0x10, 0x09, 0xe8, 0x20, 0x40, 0x38, 0x63, 0x15, 0xe1, 0x04, 0x14, 0x06, @@ -15858,12 +16026,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x16, 0xa8, 0x04, 0x10, 0x15, 0x90, 0x0b, 0xc0, 0x0e, 0x60, 0xd1, - 0xe8, 0x20, 0x69, 0xc8, + 0xe8, 0x20, 0x62, 0x68, 0x8f, 0x61, 0x28, 0x04, 0x00, 0x66, 0x83, 0x21, 0x10, 0x15, 0x90, 0x0b, 0xc0, 0x0e, 0x60, 0xd5, - 0xe8, 0x20, 0x69, 0x28, + 0xe8, 0x20, 0x61, 0xc8, 0x16, 0x76, 0x28, 0x04, 0x00, 0xb6, 0xe0, 0x04, 0x4c, 0x58, 0x90, 0x0b, @@ -15881,13 +16049,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x9a, 0x82, 0x01, 0x50, 0x03, 0xe0, 0x02, 0xc0, 0x15, 0x6e, 0x01, - 0xef, 0xe0, 0x53, 0x48, + 0xef, 0xe0, 0x4d, 0x68, 0xe1, 0x18, 0x00, 0xc6, 0x80, 0xa6, 0x80, 0x04, - 0xe8, 0x20, 0x6d, 0x68, - 0xef, 0xc8, 0x7d, 0x88, + 0xe8, 0x20, 0x66, 0x08, + 0xef, 0xcc, 0x4f, 0x08, 0x8c, 0x0b, 0x03, 0x11, - 0xef, 0xf0, 0x52, 0x48, + 0xef, 0xf0, 0x4c, 0xa8, 0x98, 0xf1, 0x0e, 0x0b, 0xf2, 0x7c, 0x0c, 0x0c, 0x10, 0x15, 0xdd, 0x93, @@ -15915,11 +16083,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x21, 0x00, 0x26, 0x60, 0xd1, 0x10, 0x15, 0x90, 0x0b, 0x40, 0x0e, - 0xe8, 0x20, 0x62, 0xa8, + 0xe8, 0x20, 0x5b, 0x48, 0x83, 0x21, 0x28, 0x04, 0x90, 0x0b, 0x00, 0x66, 0x60, 0xd5, 0x10, 0x15, - 0x62, 0x18, 0xc0, 0x0e, + 0x5a, 0xb8, 0xc0, 0x0e, 0xa8, 0x04, 0xe8, 0x20, 0x90, 0x0b, 0x00, 0xb6, 0xe8, 0x00, 0x45, 0x68, @@ -15937,22 +16105,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xee, 0xd5, 0xc1, 0x9d, 0x6c, 0x1d, 0x10, 0x29, 0x02, 0x36, 0x40, 0x2b, - 0x48, 0xd8, 0xe0, 0x08, - 0x90, 0x0b, 0x6f, 0xdc, + 0x7e, 0x18, 0xe0, 0x08, + 0x90, 0x0b, 0x6f, 0xd8, 0xe0, 0x08, 0x0e, 0x36, 0x83, 0x11, 0x00, 0xab, - 0x4b, 0x78, 0xfc, 0x04, + 0x45, 0xd8, 0xfc, 0x04, 0x21, 0xab, 0xef, 0xf0, 0x3e, 0x94, 0x80, 0x6b, 0x80, 0x00, 0x0e, 0x06, 0x10, 0x29, 0xef, 0x15, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x02, 0x36, - 0x6f, 0xdc, 0x47, 0x88, + 0x6f, 0xd8, 0x7c, 0xc8, 0x0e, 0x36, 0x90, 0x0b, 0x00, 0xab, 0xe0, 0x08, 0xfc, 0x04, 0x83, 0x11, - 0xef, 0xf0, 0x4a, 0x28, + 0xef, 0xf0, 0x44, 0x88, 0x80, 0x6b, 0x21, 0xab, 0x0e, 0x06, 0x6b, 0xf5, 0x10, 0x05, 0x80, 0x00, @@ -15968,7 +16136,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x00, 0x04, 0x0c, 0x60, 0xd9, 0x00, 0x15, 0x81, 0x21, 0x40, 0x0e, - 0x68, 0x20, 0x5c, 0x08, + 0x68, 0x20, 0x54, 0xa8, 0x00, 0xc6, 0x81, 0x61, 0x03, 0x86, 0x61, 0x44, 0x80, 0x04, 0xe1, 0x00, @@ -15982,7 +16150,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x1c, 0x04, 0x4c, 0x81, 0x01, 0x00, 0x6b, - 0x6f, 0xf0, 0x46, 0x68, + 0x6f, 0xf0, 0x40, 0xc8, 0x81, 0x81, 0x81, 0x11, 0x01, 0x86, 0x00, 0x7b, 0x00, 0x04, 0xe1, 0x18, @@ -16014,13 +16182,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x04, 0x00, 0x46, 0x80, 0x18, 0x80, 0x04, 0xf3, 0xdc, 0x42, 0x10, - 0x43, 0x98, 0x80, 0x16, - 0xa4, 0x04, 0xef, 0xe0, + 0x7d, 0xb8, 0x80, 0x16, + 0xa4, 0x04, 0xef, 0xdc, 0x02, 0x14, 0x80, 0x18, 0x80, 0x16, 0xfc, 0x94, - 0xef, 0xc8, 0x6c, 0xe8, + 0xef, 0xc8, 0x7e, 0x68, 0x8e, 0x0b, 0x03, 0x11, - 0xef, 0xf0, 0x41, 0xa8, + 0xef, 0xec, 0x7c, 0x08, 0xe1, 0x18, 0x00, 0xc6, 0x80, 0x86, 0x80, 0x04, 0xf2, 0x1c, 0x0c, 0x4c, @@ -16033,7 +16201,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x0a, 0xc0, 0x2b, 0x0c, 0x09, 0xe0, 0x84, 0xc0, 0x2b, 0x05, 0xa9, - 0x42, 0x86, 0x8c, 0x95, + 0x43, 0x06, 0x8c, 0x95, 0x84, 0x18, 0xef, 0xdc, 0x80, 0xb5, 0xa3, 0x1b, 0x66, 0xe9, 0x0c, 0x09, @@ -16072,12 +16240,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x16, 0xf3, 0xdc, 0x80, 0x18, 0x9c, 0x04, 0x00, 0x16, 0xc2, 0x19, - 0x4e, 0xf8, 0x87, 0x11, + 0x47, 0x98, 0x87, 0x11, 0x8c, 0x0b, 0x68, 0x20, 0x83, 0x21, 0x1c, 0x04, 0xc4, 0x19, 0x80, 0x18, 0x99, 0x11, 0x00, 0x16, - 0x68, 0x20, 0x4e, 0x68, + 0x68, 0x20, 0x47, 0x08, 0x9c, 0x04, 0x8c, 0x0b, 0xc8, 0x19, 0x80, 0x18, 0x0c, 0x4c, 0x80, 0x16, @@ -16088,7 +16256,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x04, 0x04, 0x4c, 0x42, 0x46, 0x00, 0x7b, - 0x4c, 0xf8, 0xe0, 0x04, + 0x45, 0x98, 0xe0, 0x04, 0x81, 0x21, 0x68, 0x20, 0x00, 0xc6, 0x81, 0x61, 0x03, 0x86, 0x61, 0x44, @@ -16101,25 +16269,25 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x0c, 0x86, 0x60, 0x08, 0x02, 0x86, - 0x74, 0x58, 0x8e, 0x0b, + 0x69, 0x98, 0x8e, 0x0b, 0xa3, 0x0b, 0xef, 0xd8, 0xc0, 0x00, 0x0c, 0x06, - 0xe8, 0x20, 0x51, 0xe8, + 0xe8, 0x20, 0x4a, 0x88, 0x0c, 0x4c, 0x8c, 0x0b, 0xdd, 0x93, 0xf2, 0x04, 0xfa, 0x00, 0x04, 0x0c, 0x41, 0xf6, 0x01, 0x61, - 0x6f, 0x78, 0xe0, 0x3c, + 0x57, 0xd8, 0xe0, 0x3c, 0x81, 0x11, 0x6f, 0x88, 0xe1, 0x44, 0x41, 0xc6, 0x80, 0x66, 0x80, 0x04, - 0xef, 0xdc, 0x74, 0x88, - 0xef, 0xdc, 0x77, 0x28, - 0xef, 0xdc, 0x79, 0x08, + 0xef, 0xdc, 0x6e, 0xa8, + 0xef, 0xdc, 0x71, 0x48, + 0xef, 0xdc, 0x73, 0x28, 0x60, 0x3c, 0x41, 0xf6, - 0x6e, 0x78, 0x83, 0x11, + 0x56, 0xd8, 0x83, 0x11, 0x0c, 0x0c, 0xef, 0x88, - 0x21, 0xd8, 0xf2, 0x00, + 0x33, 0x58, 0xf2, 0x00, 0xc1, 0xc3, 0xff, 0xc8, 0xfa, 0x00, 0x04, 0x0c, 0x40, 0xc6, 0x00, 0x6b, @@ -16129,7 +16297,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x05, 0xc0, 0x06, 0xc0, 0x0b, 0x66, 0x85, 0x66, 0x85, 0x0c, 0x05, - 0x65, 0xf8, 0xc0, 0x0b, + 0x77, 0x78, 0xc0, 0x0b, 0x00, 0x04, 0xef, 0xc0, 0x4c, 0x05, 0xfb, 0x80, 0xc0, 0x0b, 0x66, 0x89, @@ -16150,7 +16318,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x66, 0x79, 0x4c, 0x05, 0x0c, 0x09, 0xc0, 0x0b, 0xc0, 0x2b, 0x65, 0xcd, - 0xef, 0xc0, 0x61, 0x28, + 0xef, 0xc0, 0x72, 0xa8, 0x6a, 0x05, 0x4c, 0x01, 0x0c, 0x05, 0xc0, 0x2d, 0xc0, 0x0b, 0x63, 0x7d, @@ -16184,7 +16352,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x05, 0x41, 0x00, 0x60, 0x80, 0x08, 0xc0, 0xad, 0x91, 0x11, 0x04, 0x84, - 0xef, 0xc0, 0x5c, 0xe8, + 0xef, 0xc0, 0x6e, 0x68, 0x6a, 0x05, 0x4c, 0x01, 0xa3, 0x7b, 0x40, 0x2d, 0x03, 0x89, 0x0c, 0x85, @@ -16311,12 +16479,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x66, 0x81, 0x00, 0x90, 0x02, 0x70, 0xc0, 0x6d, 0x89, 0x21, 0x64, 0xa0, - 0x68, 0x10, 0x68, 0x48, + 0x68, 0x10, 0x64, 0x88, 0x00, 0x90, 0x81, 0x31, 0x40, 0x6d, 0x67, 0x81, 0xe4, 0xb0, 0x02, 0x70, 0x81, 0x31, 0x09, 0x21, - 0xe8, 0x10, 0x67, 0xa8, + 0xe8, 0x10, 0x63, 0xe8, 0x60, 0x18, 0x41, 0x06, 0xe4, 0xc0, 0x02, 0x70, 0x66, 0x82, 0x40, 0x6a, @@ -16324,7 +16492,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x83, 0x85, 0x31, 0x65, 0x01, 0x00, 0x80, 0x0c, 0x0c, 0xc0, 0x6e, - 0x26, 0x98, 0xf2, 0x9c, + 0x22, 0xd8, 0xf2, 0x9c, 0xc1, 0xc3, 0xe0, 0x10, 0xfa, 0x0c, 0x04, 0x0c, 0x82, 0x6b, 0x00, 0x7b, @@ -16343,15 +16511,15 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x70, 0x00, 0x04, 0xc0, 0xb6, 0x66, 0x41, 0x64, 0xa0, 0x08, 0x60, - 0x49, 0xf8, 0x8c, 0x3b, - 0x00, 0x8b, 0xef, 0x98, + 0x62, 0x18, 0x8c, 0x3b, + 0x00, 0x8b, 0xef, 0x94, 0xe0, 0x08, 0x41, 0x26, 0x6c, 0x1d, 0x4e, 0x01, 0x00, 0x70, 0x40, 0x2b, 0xc0, 0x89, 0x65, 0xa1, 0x64, 0xc0, 0x02, 0x60, 0xe0, 0x24, 0x04, 0x06, - 0x68, 0x10, 0x63, 0x48, + 0x68, 0x10, 0x5f, 0x88, 0x90, 0x0b, 0x85, 0x31, 0xf2, 0x0c, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -16376,8 +16544,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x80, 0x00, 0x04, 0xc0, 0xb6, 0x66, 0x41, 0x64, 0xa0, 0x08, 0x70, - 0x45, 0xd8, 0x8e, 0x3b, - 0x12, 0x29, 0xef, 0x98, + 0x5d, 0xf8, 0x8e, 0x3b, + 0x12, 0x29, 0xef, 0x94, 0x40, 0x1b, 0x68, 0x81, 0x10, 0x0b, 0x80, 0x6b, 0x76, 0x18, 0x8e, 0x1b, @@ -16412,7 +16580,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x08, 0xc0, 0x09, 0xc5, 0x07, 0x88, 0x24, 0x44, 0x00, 0x08, 0x34, - 0x55, 0x18, 0xf0, 0x0c, + 0x4d, 0xb8, 0xf0, 0x0c, 0x8c, 0x0b, 0x68, 0x20, 0x6c, 0xfd, 0x0c, 0x19, 0x81, 0x21, 0x40, 0x2c, @@ -16440,7 +16608,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x05, 0x82, 0x01, 0xc0, 0x08, 0x69, 0x45, 0x91, 0x11, 0x04, 0x08, - 0xef, 0xbc, 0x7c, 0xe8, + 0xef, 0xc0, 0x4e, 0x68, 0x65, 0x49, 0x4c, 0x01, 0x0c, 0x0c, 0xc0, 0x22, 0xdd, 0x93, 0xf2, 0x00, @@ -16452,7 +16620,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x05, 0x82, 0x01, 0xc0, 0x06, 0x6d, 0x4d, 0x91, 0x11, 0x04, 0x08, - 0xef, 0xbc, 0x7b, 0x68, + 0xef, 0xc0, 0x4c, 0xe8, 0x6d, 0x01, 0x0c, 0x19, 0x4c, 0x01, 0xc0, 0x2c, 0xc0, 0x1b, 0x65, 0x69, @@ -16467,7 +16635,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x19, 0xc0, 0x22, 0xc0, 0x22, 0x65, 0x59, 0x69, 0x5d, 0x4c, 0x05, - 0x48, 0x78, 0xc0, 0x08, + 0x59, 0xf8, 0xc0, 0x08, 0x4c, 0x05, 0xef, 0xc0, 0x40, 0x08, 0x69, 0x61, 0xe0, 0x0c, 0x43, 0xf6, @@ -16475,14 +16643,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x0c, 0xc0, 0x22, 0xdd, 0x93, 0xf2, 0x00, 0xfa, 0x0c, 0x04, 0x0c, - 0x68, 0x20, 0x75, 0x28, + 0x68, 0x20, 0x6d, 0xc8, 0x42, 0x78, 0x80, 0x6b, 0x8c, 0x0b, 0x68, 0x00, 0x66, 0x81, 0x00, 0x60, 0x02, 0x06, 0x40, 0x6d, 0xc0, 0x20, 0x63, 0x41, 0x60, 0x04, 0x04, 0x06, - 0x52, 0xd8, 0x81, 0x31, + 0x4f, 0x18, 0x81, 0x31, 0x0e, 0x60, 0xe8, 0x10, 0x40, 0x6d, 0x67, 0x81, 0x81, 0xf5, 0xa1, 0x81, @@ -16490,7 +16658,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x29, 0x8b, 0x31, 0xc0, 0x1b, 0x65, 0x69, 0x65, 0x79, 0x0c, 0x19, - 0x45, 0x98, 0xc0, 0x1b, + 0x57, 0x18, 0xc0, 0x1b, 0x5d, 0x0e, 0xef, 0xc0, 0xec, 0x04, 0x10, 0x80, 0xfc, 0x35, 0xa1, 0x8b, @@ -16498,12 +16666,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x9c, 0x04, 0x0c, 0x02, 0x06, 0x00, 0x6b, - 0x4d, 0x18, 0xe0, 0x04, + 0x45, 0xb8, 0xe0, 0x04, 0x0e, 0x60, 0xe8, 0x20, 0x40, 0x6e, 0x64, 0x81, 0x01, 0x95, 0xa1, 0x81, 0x5d, 0x18, 0x8c, 0x9b, - 0x66, 0xd8, 0x8c, 0x0b, + 0x5e, 0x78, 0x8c, 0x0b, 0x65, 0x0e, 0xef, 0xd4, 0xec, 0x04, 0x10, 0x80, 0xfe, 0x15, 0xa1, 0x8b, @@ -16511,19 +16679,19 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x06, 0x40, 0x6d, 0x01, 0x31, 0xe0, 0x04, 0x0c, 0x0c, 0x8c, 0x1b, - 0x0f, 0x38, 0xf2, 0x9c, + 0x0b, 0x78, 0xf2, 0x9c, 0xc1, 0xc3, 0xe0, 0x10, 0x65, 0xa1, 0x00, 0x00, 0x02, 0x06, 0x40, 0x89, 0xc0, 0x20, 0x63, 0x1d, 0x60, 0x24, 0x04, 0x06, - 0x0e, 0x78, 0x87, 0x31, + 0x0a, 0xb8, 0x87, 0x31, 0xc1, 0xc3, 0xe0, 0x10, 0x65, 0x01, 0x00, 0x00, 0x02, 0x06, 0x40, 0x6e, 0xc0, 0x20, 0x61, 0x01, 0x62, 0x40, 0x04, 0x06, - 0x0d, 0xb8, 0x87, 0x31, + 0x09, 0xf8, 0x87, 0x31, 0xc1, 0xc3, 0xe0, 0x10, 0xfa, 0x7c, 0x04, 0x0c, 0x6d, 0x91, 0x1e, 0xf0, @@ -16562,12 +16730,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x64, 0xd1, 0x02, 0xf0, 0x45, 0x06, 0xc0, 0x02, 0x81, 0x31, 0x60, 0x20, - 0xe8, 0x10, 0x48, 0xe8, + 0xe8, 0x10, 0x45, 0x28, 0x66, 0x41, 0x00, 0x60, 0x02, 0xf0, 0x40, 0x92, 0x45, 0x06, 0xe4, 0x10, 0x81, 0x31, 0x60, 0x20, - 0xe8, 0x10, 0x48, 0x48, + 0xe8, 0x10, 0x44, 0x88, 0x61, 0x30, 0x00, 0xc6, 0xe1, 0x30, 0x02, 0x46, 0x04, 0xc6, 0x00, 0x04, @@ -16608,7 +16776,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x1c, 0x04, 0x4c, 0x81, 0x01, 0x00, 0x8b, - 0x6f, 0xe8, 0x78, 0x28, + 0x6f, 0xe8, 0x72, 0x88, 0x81, 0x61, 0x81, 0x11, 0x00, 0x06, 0x00, 0x7b, 0x00, 0x04, 0xe1, 0x10, @@ -16629,10 +16797,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x86, 0x40, 0x2b, 0x02, 0x86, 0xe0, 0x08, 0x90, 0x0b, 0x60, 0x08, - 0xef, 0xd4, 0x72, 0x68, + 0xef, 0xd4, 0x67, 0xa8, 0x0b, 0x45, 0xa3, 0x0b, 0xc0, 0x00, 0x0c, 0x06, - 0xef, 0xd8, 0x74, 0x68, + 0xef, 0xd8, 0x6e, 0x88, 0x6f, 0xf8, 0x74, 0x08, 0x45, 0x58, 0x90, 0x0b, 0x90, 0x0b, 0x68, 0x00, @@ -16673,7 +16841,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xef, 0xfc, 0x41, 0xf6, 0x68, 0x00, 0x49, 0x08, 0x03, 0x11, 0x81, 0x11, - 0x6f, 0xf8, 0x8e, 0x0b, + 0x6a, 0x58, 0x8e, 0x0b, 0x8c, 0x0b, 0xef, 0xe8, 0xf2, 0x1c, 0x0c, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, @@ -16794,7 +16962,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0x85, 0x11, 0xa0, 0x04, 0x80, 0x76, 0x8c, 0x0b, 0x00, 0x26, - 0xe8, 0x18, 0x59, 0xa8, + 0xe8, 0x18, 0x52, 0x48, 0x02, 0x76, 0x20, 0x04, 0x4c, 0x11, 0xe0, 0x08, 0xc0, 0x2b, 0x6c, 0x1d, @@ -16803,7 +16971,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfa, 0x0c, 0x04, 0x0c, 0x82, 0x7b, 0x04, 0x3b, 0x86, 0x1b, 0x01, 0x21, - 0x68, 0x18, 0x73, 0xa8, + 0x68, 0x18, 0x6c, 0x48, 0x00, 0x06, 0x81, 0x61, 0x43, 0x46, 0x61, 0x28, 0x00, 0x04, 0xe1, 0x2c, @@ -16820,7 +16988,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xaa, 0xcf, 0x08, 0x49, 0x46, 0xc2, 0xa8, 0xcf, 0x87, 0x7b, 0xf8, 0x1c, - 0x78, 0x58, 0xfa, 0x75, + 0x70, 0xf8, 0xfa, 0x75, 0x8c, 0x0b, 0xe8, 0x18, 0xf2, 0x0c, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -16852,7 +17020,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf3, 0xf4, 0x42, 0x10, 0x89, 0x11, 0x00, 0x16, 0x00, 0x16, 0xa4, 0x04, - 0x6d, 0x78, 0x8b, 0x11, + 0x66, 0x18, 0x8b, 0x11, 0x8c, 0x0b, 0x68, 0x18, 0xe1, 0x14, 0x16, 0xc6, 0x80, 0x08, 0xac, 0x04, @@ -16866,7 +17034,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x9b, 0x01, 0x60, 0x84, 0xa5, 0x1b, 0xa2, 0x65, 0x0b, 0x11, 0xa2, 0x25, - 0x6b, 0xb8, 0x83, 0x21, + 0x64, 0x58, 0x83, 0x21, 0x8c, 0x0b, 0x68, 0x18, 0xe1, 0x10, 0x40, 0x46, 0x80, 0x08, 0x80, 0x04, @@ -16877,7 +17045,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x24, 0x04, 0x9c, 0xe5, 0x83, 0x21, 0x8b, 0x11, 0x8c, 0x0b, 0x00, 0xa6, - 0xe8, 0x18, 0x6a, 0x68, + 0xe8, 0x18, 0x63, 0x08, 0x80, 0x08, 0xac, 0x04, 0x60, 0x80, 0x40, 0x4a, 0x9a, 0x45, 0xa1, 0x01, @@ -16890,7 +17058,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x2b, 0x1b, 0x96, 0xa5, 0xe1, 0x00, 0x15, 0xc6, 0x0b, 0x11, 0x96, 0x25, - 0x68, 0xb8, 0x83, 0x21, + 0x61, 0x58, 0x83, 0x21, 0x8c, 0x0b, 0x68, 0x18, 0xe1, 0x10, 0x40, 0x46, 0x80, 0x08, 0x80, 0x04, @@ -16901,7 +17069,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x24, 0x04, 0x90, 0xe5, 0x83, 0x21, 0x85, 0x11, 0x8b, 0x11, 0x00, 0x16, - 0x68, 0x18, 0x67, 0x68, + 0x68, 0x18, 0x60, 0x08, 0xac, 0x04, 0x8c, 0x0b, 0x40, 0x4a, 0x80, 0x08, 0xa7, 0x01, 0x60, 0x80, @@ -16927,7 +17095,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0x06, 0x00, 0xb6, 0x80, 0x04, 0xe1, 0x10, 0x8c, 0x0b, 0x00, 0xb6, - 0xe8, 0x18, 0x64, 0x28, + 0xe8, 0x18, 0x5c, 0xc8, 0x80, 0x08, 0xa8, 0x04, 0x60, 0x90, 0x40, 0x4a, 0x80, 0xc5, 0x97, 0x01, @@ -16946,7 +17114,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x11, 0x00, 0x04, 0x91, 0x11, 0x00, 0x16, 0x00, 0x16, 0xa4, 0x04, - 0x61, 0xb8, 0x8d, 0x11, + 0x5a, 0x58, 0x8d, 0x11, 0x8c, 0x0b, 0x68, 0x18, 0x02, 0x66, 0x20, 0x04, 0xf7, 0xab, 0x70, 0x01, @@ -16977,7 +17145,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x11, 0xa0, 0x04, 0xc0, 0x2b, 0x6c, 0x1d, 0x8c, 0x0b, 0x00, 0x16, - 0xe8, 0x1c, 0x42, 0xc8, + 0xe8, 0x18, 0x7b, 0x68, 0x6d, 0x15, 0x0c, 0x09, 0x80, 0x7b, 0x40, 0x2c, 0xe0, 0x84, 0x40, 0x4a, @@ -17055,10 +17223,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0x38, 0xe4, 0x10, 0xec, 0x04, 0x04, 0x20, 0xa1, 0x2b, 0xc5, 0x36, - 0x6c, 0x98, 0xfe, 0x75, + 0x65, 0x38, 0xfe, 0x75, 0x8c, 0x0b, 0x68, 0x1c, 0x8c, 0x1b, 0x0c, 0x0b, - 0xe8, 0x04, 0x43, 0x68, + 0xe8, 0x04, 0x43, 0x28, 0x00, 0x60, 0x00, 0x7b, 0xc0, 0x6e, 0x64, 0x81, 0x02, 0xf0, 0x01, 0x75, @@ -17068,7 +17236,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x09, 0xfe, 0x75, 0xc0, 0x2d, 0x67, 0xc9, 0x9c, 0xd5, 0xa5, 0x0b, - 0x68, 0x00, 0x74, 0x88, + 0x68, 0x00, 0x74, 0x48, 0x0f, 0x25, 0x8c, 0x0b, 0x20, 0x04, 0x80, 0x7b, 0xe0, 0x04, 0x02, 0x46, @@ -17077,7 +17245,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x38, 0x00, 0x46, 0x85, 0x11, 0x00, 0x04, 0x8c, 0x0b, 0x00, 0x16, - 0x68, 0x00, 0x7b, 0x68, + 0x68, 0x00, 0x7b, 0x28, 0x80, 0x7b, 0x8c, 0x1b, 0x8c, 0x05, 0xa1, 0x7b, 0x61, 0x38, 0x00, 0x06, @@ -17093,11 +17261,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x46, 0x00, 0x16, 0x00, 0x04, 0xe1, 0x38, 0x00, 0x16, 0x83, 0x11, - 0x4b, 0xb8, 0x8c, 0x0b, + 0x44, 0x58, 0x8c, 0x0b, 0x0c, 0x09, 0xe8, 0x1c, 0x40, 0x2d, 0x67, 0xc9, 0xa1, 0x0b, 0x80, 0x7b, - 0x70, 0xd8, 0x80, 0xb5, + 0x70, 0x98, 0x80, 0xb5, 0x8c, 0x0b, 0x68, 0x00, 0x00, 0x06, 0x80, 0x7b, 0xa1, 0x7b, 0x61, 0x38, @@ -17122,7 +17290,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x08, 0x01, 0x36, 0x6c, 0x1d, 0x4c, 0x01, 0x8c, 0x0b, 0x40, 0x2b, - 0xef, 0xf0, 0x57, 0xe8, + 0xef, 0xf0, 0x52, 0x48, 0x80, 0x7b, 0x2c, 0x04, 0x8b, 0x11, 0x21, 0x7b, 0x11, 0xe8, 0x80, 0x1c, @@ -17156,7 +17324,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0xe1, 0x10, 0x42, 0x10, 0x80, 0x18, 0x00, 0x16, 0xf3, 0xf8, - 0x47, 0x78, 0x95, 0x11, + 0x40, 0x18, 0x95, 0x11, 0x8c, 0x0b, 0x68, 0x18, 0x61, 0x10, 0x41, 0x46, 0x80, 0x14, 0x81, 0x21, @@ -17185,17 +17353,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe1, 0x38, 0x00, 0x46, 0x87, 0x11, 0x00, 0x04, 0x8c, 0x0b, 0x00, 0x16, - 0xe8, 0x00, 0x7b, 0xe8, + 0xe8, 0x00, 0x7b, 0xa8, 0x67, 0xc9, 0x0c, 0x09, 0x81, 0x71, 0x40, 0x2d, 0x80, 0xb5, 0xa7, 0x0b, - 0x68, 0x00, 0x65, 0x68, + 0x68, 0x00, 0x65, 0x28, 0x80, 0x7b, 0x8c, 0x0b, 0x63, 0x11, 0x0c, 0x09, 0x40, 0x4a, 0xc0, 0x2d, 0x80, 0xe5, 0xe0, 0x80, 0x6f, 0xfc, 0x4c, 0x68, - 0x7f, 0x58, 0x8c, 0x0b, + 0x77, 0xf8, 0x8c, 0x0b, 0x8c, 0x0b, 0x68, 0x14, 0xe0, 0x35, 0xa1, 0x7b, 0x6d, 0x15, 0x0c, 0x09, @@ -17205,22 +17373,22 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x11, 0xe0, 0x04, 0xc0, 0x2b, 0x6c, 0x1d, 0x8c, 0x0b, 0x00, 0x16, - 0xe8, 0x00, 0x7a, 0x08, + 0xe8, 0x00, 0x79, 0xc8, 0x67, 0xc9, 0x0c, 0x09, 0x80, 0x7b, 0x40, 0x2d, 0x80, 0xb5, 0xa9, 0x0b, - 0x68, 0x00, 0x62, 0xe8, + 0x68, 0x00, 0x62, 0xa8, 0x80, 0x7b, 0x8c, 0x0b, 0xd8, 0xb5, 0xa1, 0x7b, 0x6d, 0x15, 0x0c, 0x09, 0x40, 0x0a, 0xc0, 0x2c, 0x84, 0x25, 0xe0, 0x90, - 0x6f, 0xd4, 0x75, 0x28, + 0x6f, 0xd4, 0x6f, 0x48, 0x20, 0x04, 0x8c, 0x0b, 0xe0, 0x04, 0x02, 0x96, 0x6c, 0x1d, 0x4c, 0x11, 0x00, 0x16, 0xc0, 0x2b, - 0x6c, 0x78, 0x8c, 0x0b, + 0x7b, 0xf8, 0x8c, 0x0b, 0x0c, 0x09, 0xef, 0xc4, 0xc0, 0x2c, 0x6d, 0x15, 0x60, 0x88, 0x40, 0x0a, @@ -17240,9 +17408,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6f, 0x18, 0x8c, 0x0b, 0x8c, 0x0b, 0x6f, 0xf8, 0x6f, 0xf8, 0x6f, 0x68, - 0x79, 0x58, 0x8c, 0x0b, + 0x79, 0x18, 0x8c, 0x0b, 0x8c, 0x0b, 0x68, 0x00, - 0x55, 0x38, 0x83, 0x35, + 0x4d, 0xd8, 0x83, 0x35, 0x8c, 0x0b, 0x68, 0x1c, 0x6f, 0xf8, 0x62, 0x88, 0x01, 0x95, 0x8c, 0x0b, @@ -17253,7 +17421,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x40, 0x0e, 0x0a, 0x21, 0x0b, 0xfc, 0xf5, 0x31, 0x38, 0x80, 0x7b, - 0x7c, 0x78, 0xdf, 0xfc, + 0x7c, 0x38, 0xdf, 0xfc, 0x8c, 0x0b, 0x68, 0x00, 0x66, 0x35, 0x0c, 0x0b, 0x81, 0x71, 0x40, 0x16, @@ -17271,7 +17439,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x09, 0x87, 0x65, 0xc0, 0x2d, 0x67, 0xc9, 0x82, 0x15, 0xa3, 0x0b, - 0x68, 0x00, 0x5b, 0x28, + 0x68, 0x00, 0x5a, 0xe8, 0x80, 0x7b, 0x8c, 0x0b, 0x2d, 0xa8, 0xa1, 0x7b, 0x20, 0x04, 0xdf, 0xfc, @@ -17299,7 +17467,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x11, 0xe0, 0x08, 0xc0, 0x2b, 0x6c, 0x1d, 0x83, 0x11, 0x00, 0x16, - 0x68, 0x00, 0x7b, 0x88, + 0x68, 0x00, 0x7b, 0x48, 0x57, 0x35, 0x8c, 0x0b, 0xc1, 0xc3, 0x80, 0x7b, 0xfa, 0x7c, 0x04, 0x0c, @@ -17326,168 +17494,166 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0x04, 0xe1, 0x10, 0xc2, 0x19, 0x80, 0x18, 0x8c, 0x0b, 0x00, 0x16, - 0xef, 0xe4, 0x5f, 0xe8, + 0xef, 0xe4, 0x5a, 0x48, 0x81, 0x01, 0x3e, 0x0e, 0x50, 0x86, 0x3c, 0x0e, 0x03, 0x91, 0xe1, 0x24, 0xe1, 0x24, 0x4e, 0x46, 0x61, 0x24, 0x54, 0xc6, - 0xa1, 0xb5, 0x81, 0x01, + 0xa1, 0x85, 0x81, 0x01, 0x00, 0x06, 0x7c, 0x0e, 0x4c, 0x01, 0xe0, 0x08, 0xc0, 0x2b, 0x6c, 0x1d, - 0xef, 0xd4, 0x5f, 0x68, + 0xef, 0xd4, 0x59, 0x88, 0x60, 0x08, 0x00, 0x16, 0xe0, 0x10, 0x42, 0xc6, 0x6c, 0x1d, 0x4c, 0x01, 0x81, 0x21, 0x40, 0x2b, - 0x68, 0x14, 0x70, 0x68, + 0x68, 0x14, 0x69, 0x08, 0x00, 0xc6, 0x8c, 0x0b, 0x80, 0x04, 0xe1, 0x44, - 0x81, 0x95, 0x80, 0xb8, - 0xef, 0xd4, 0x5f, 0x48, - 0x63, 0x2d, 0x4c, 0x91, - 0x4c, 0x91, 0xc0, 0x38, - 0xc0, 0x38, 0x63, 0x29, - 0x80, 0x08, 0xa0, 0x04, - 0xe0, 0x80, 0x40, 0x0a, - 0x0c, 0x09, 0x80, 0xc5, - 0xc0, 0x38, 0x63, 0x29, - 0x82, 0x45, 0xa1, 0x0b, - 0xe0, 0x8c, 0x56, 0x0a, - 0x0c, 0x09, 0xfa, 0x85, - 0xc0, 0x38, 0x63, 0x29, - 0xf8, 0xf5, 0xa1, 0x0b, - 0x75, 0x18, 0xfd, 0x15, - 0xa0, 0x04, 0xe8, 0x14, - 0x40, 0x4a, 0x80, 0x08, - 0x80, 0xc5, 0xe0, 0x84, + 0x81, 0x65, 0x80, 0xb8, + 0xef, 0xd4, 0x59, 0x68, + 0x63, 0x29, 0x4c, 0x91, + 0xa0, 0x04, 0xc0, 0x38, + 0x40, 0x0a, 0x80, 0x08, + 0x80, 0xc5, 0xe0, 0x80, 0x63, 0x29, 0x0c, 0x09, 0xa1, 0x0b, 0xc0, 0x38, - 0x5c, 0xd8, 0x80, 0xc5, - 0x4c, 0x91, 0xef, 0xd4, + 0x56, 0x0a, 0x82, 0x45, + 0xfa, 0xe5, 0xe0, 0x8c, + 0x63, 0x29, 0x0c, 0x09, + 0xa1, 0x0b, 0xc0, 0x38, + 0xfd, 0x45, 0xfa, 0x55, + 0xe8, 0x14, 0x6d, 0xe8, + 0x80, 0x08, 0xa0, 0x04, + 0xe0, 0x84, 0x40, 0x4a, + 0x0c, 0x09, 0x80, 0xc5, 0xc0, 0x38, 0x63, 0x29, - 0xef, 0xc0, 0x44, 0x48, - 0xef, 0xd4, 0x5b, 0x68, - 0x60, 0x08, 0x00, 0x26, - 0xe0, 0x3c, 0x42, 0x86, - 0x6c, 0x1d, 0x4c, 0x01, - 0x81, 0x21, 0x40, 0x2b, - 0x68, 0x14, 0x6c, 0x68, - 0x00, 0xc6, 0x8c, 0x0b, - 0x80, 0x04, 0xe1, 0x44, - 0x81, 0x65, 0x80, 0xb8, - 0xef, 0xd4, 0x5b, 0x48, + 0x80, 0xc5, 0xa1, 0x0b, + 0xef, 0xd4, 0x57, 0x28, 0x63, 0x29, 0x4c, 0x91, - 0x9c, 0x04, 0xc0, 0x38, - 0x40, 0x4a, 0x80, 0x08, - 0x82, 0x45, 0xe0, 0x80, - 0xe0, 0x8c, 0x56, 0x0a, - 0x0c, 0x09, 0xfc, 0x85, + 0x55, 0xf8, 0xc0, 0x38, + 0x55, 0xb8, 0xef, 0xc0, + 0x00, 0x26, 0xef, 0xd4, + 0x42, 0x86, 0x60, 0x08, + 0x4c, 0x01, 0xe0, 0x3c, + 0x40, 0x2b, 0x6c, 0x1d, + 0x65, 0x38, 0x81, 0x21, + 0x8c, 0x0b, 0x68, 0x14, + 0xe1, 0x44, 0x00, 0xc6, + 0x80, 0xb8, 0x80, 0x04, + 0x55, 0x98, 0x81, 0x65, + 0x4c, 0x91, 0xef, 0xd4, 0xc0, 0x38, 0x63, 0x29, - 0xfa, 0xf5, 0xa1, 0x0b, - 0x71, 0x98, 0xfd, 0x95, - 0x9c, 0x04, 0xe8, 0x14, - 0x40, 0x4a, 0x80, 0x08, - 0x80, 0xc5, 0xe0, 0x84, + 0x80, 0x08, 0x9c, 0x04, + 0xe0, 0x80, 0x40, 0x4a, + 0x56, 0x0a, 0x82, 0x45, + 0xfc, 0x85, 0xe0, 0x8c, 0x63, 0x29, 0x0c, 0x09, 0xa1, 0x0b, 0xc0, 0x38, - 0x59, 0x58, 0x82, 0x85, - 0x00, 0x86, 0xef, 0xd4, - 0x80, 0x04, 0xe1, 0x3c, - 0xd0, 0x19, 0x80, 0x18, - 0x4c, 0x91, 0x80, 0x16, + 0xfd, 0x95, 0xfa, 0xf5, + 0xe8, 0x14, 0x6a, 0x68, + 0x80, 0x08, 0x9c, 0x04, + 0xe0, 0x84, 0x40, 0x4a, + 0x0c, 0x09, 0x80, 0xc5, 0xc0, 0x38, 0x63, 0x29, + 0x82, 0x85, 0xa1, 0x0b, + 0xef, 0xd4, 0x53, 0xa8, 0xe1, 0x3c, 0x00, 0x86, 0x80, 0x18, 0x80, 0x04, 0x80, 0x16, 0xd0, 0x19, - 0xef, 0xc0, 0x40, 0x08, - 0x6e, 0xa9, 0x0c, 0x09, - 0xa3, 0x0b, 0xc0, 0x2c, - 0x81, 0x10, 0x01, 0x06, - 0x80, 0x00, 0x00, 0x05, - 0x80, 0x00, 0x40, 0x91, - 0x00, 0xc6, 0x9e, 0x25, - 0x80, 0x04, 0xe1, 0x14, - 0x40, 0x0a, 0x80, 0x08, - 0x9a, 0xa5, 0xe0, 0x84, - 0xef, 0xd4, 0x56, 0x08, - 0x60, 0x08, 0x00, 0x36, - 0xe0, 0x04, 0x42, 0x26, - 0x6c, 0x1d, 0x4c, 0x01, - 0x81, 0x21, 0x40, 0x2b, - 0x68, 0x14, 0x67, 0x08, - 0x00, 0xc6, 0x8c, 0x0b, - 0x80, 0x04, 0xe1, 0x44, - 0x81, 0x65, 0x80, 0xb8, - 0xef, 0xd4, 0x55, 0xe8, 0x63, 0x29, 0x4c, 0x91, - 0xa8, 0x04, 0xc0, 0x38, - 0x40, 0x4a, 0x80, 0x08, - 0x82, 0x45, 0xe0, 0x80, - 0xe0, 0x8c, 0x56, 0x0a, - 0x0c, 0x09, 0xfc, 0x85, + 0x00, 0x86, 0xc0, 0x38, + 0x80, 0x04, 0xe1, 0x3c, + 0xd0, 0x19, 0x80, 0x18, + 0x51, 0xb8, 0x80, 0x16, + 0x0c, 0x09, 0xef, 0xc0, + 0xc0, 0x2c, 0x6e, 0xa9, + 0x01, 0x06, 0xa3, 0x0b, + 0x00, 0x05, 0x81, 0x10, + 0x40, 0x91, 0x80, 0x00, + 0x9e, 0x25, 0x80, 0x00, + 0xe1, 0x14, 0x00, 0xc6, + 0x80, 0x08, 0x80, 0x04, + 0xe0, 0x84, 0x40, 0x0a, + 0x50, 0x58, 0x9a, 0xa5, + 0x00, 0x36, 0xef, 0xd4, + 0x42, 0x26, 0x60, 0x08, + 0x4c, 0x01, 0xe0, 0x04, + 0x40, 0x2b, 0x6c, 0x1d, + 0x5f, 0xd8, 0x81, 0x21, + 0x8c, 0x0b, 0x68, 0x14, + 0xe1, 0x44, 0x00, 0xc6, + 0x80, 0xb8, 0x80, 0x04, + 0x50, 0x38, 0x81, 0x65, + 0x4c, 0x91, 0xef, 0xd4, 0xc0, 0x38, 0x63, 0x29, - 0xfa, 0xf5, 0xa1, 0x0b, - 0x6c, 0x38, 0xfd, 0x95, - 0xa8, 0x04, 0xe8, 0x14, - 0x40, 0x4a, 0x80, 0x08, - 0x80, 0xc5, 0xe0, 0x84, + 0x80, 0x08, 0xa8, 0x04, + 0xe0, 0x80, 0x40, 0x4a, + 0x56, 0x0a, 0x82, 0x45, + 0xfc, 0x85, 0xe0, 0x8c, 0x63, 0x29, 0x0c, 0x09, 0xa1, 0x0b, 0xc0, 0x38, - 0xfc, 0x04, 0x92, 0x25, - 0x90, 0x25, 0xe9, 0x0d, - 0xef, 0xbc, 0x7b, 0x88, - 0x61, 0x10, 0x00, 0xc6, - 0xe1, 0x10, 0x57, 0x46, - 0x83, 0x21, 0x00, 0x04, - 0x42, 0x10, 0x80, 0x18, - 0x00, 0x16, 0xf3, 0xf8, - 0xac, 0x04, 0x81, 0x11, - 0x95, 0x11, 0x00, 0x16, - 0x68, 0x14, 0x63, 0x68, - 0x2c, 0x04, 0x8c, 0x0b, - 0xe1, 0x10, 0x43, 0x46, - 0xe1, 0x3c, 0x04, 0x86, - 0x00, 0xc6, 0x00, 0x96, - 0x80, 0x04, 0xe1, 0x14, - 0x40, 0x4a, 0x80, 0x08, - 0x02, 0x05, 0xe0, 0x84, - 0x02, 0x06, 0x40, 0x00, - 0x40, 0x11, 0xc0, 0x00, - 0x88, 0x04, 0xc0, 0x00, - 0x42, 0x10, 0x80, 0x18, - 0x80, 0x16, 0xf3, 0xdc, + 0xfd, 0x95, 0xfa, 0xf5, + 0xe8, 0x14, 0x65, 0x08, + 0x80, 0x08, 0xa8, 0x04, + 0xe0, 0x84, 0x40, 0x4a, + 0x0c, 0x09, 0x80, 0xc5, + 0xc0, 0x38, 0x63, 0x29, + 0x92, 0x25, 0xa1, 0x0b, + 0xe9, 0x0d, 0xfc, 0x04, + 0x4d, 0x38, 0x90, 0x25, + 0x00, 0xc6, 0xef, 0xc0, + 0x57, 0x46, 0x61, 0x10, + 0x00, 0x04, 0xe1, 0x10, + 0x80, 0x18, 0x83, 0x21, + 0xf3, 0xf8, 0x42, 0x10, + 0x81, 0x11, 0x00, 0x16, + 0x00, 0x16, 0xac, 0x04, + 0x5c, 0x38, 0x95, 0x11, + 0x8c, 0x0b, 0x68, 0x14, + 0x43, 0x46, 0x2c, 0x04, + 0x04, 0x86, 0xe1, 0x10, + 0x00, 0x96, 0xe1, 0x3c, + 0xe1, 0x14, 0x00, 0xc6, + 0x80, 0x08, 0x80, 0x04, + 0xe0, 0x84, 0x40, 0x4a, + 0x40, 0x00, 0x02, 0x05, + 0xc0, 0x00, 0x02, 0x06, + 0xc0, 0x00, 0x40, 0x11, 0x80, 0x18, 0x88, 0x04, - 0xf3, 0xbc, 0x42, 0x10, - 0x00, 0xc6, 0x00, 0x16, - 0x80, 0x04, 0xe1, 0x10, - 0xc2, 0x19, 0x80, 0x18, - 0x41, 0xf6, 0x00, 0x16, - 0xbe, 0x0e, 0xe0, 0x0c, - 0x82, 0x01, 0xfc, 0x04, - 0x2f, 0x58, 0xe8, 0x0d, - 0xbe, 0x04, 0x9f, 0xfc, - 0x81, 0x85, 0xbc, 0x0e, - 0xef, 0xd4, 0x4f, 0xc8, - 0x63, 0x29, 0x4c, 0x91, - 0x77, 0x38, 0xc0, 0x38, - 0x0c, 0x09, 0xef, 0xbc, - 0x40, 0x38, 0x63, 0x15, - 0xe1, 0x14, 0x4f, 0x06, - 0x82, 0x15, 0xa5, 0x0b, - 0x6f, 0xf8, 0x70, 0x88, - 0xbc, 0x0e, 0x8c, 0x0b, - 0x63, 0x29, 0x4c, 0x01, - 0x00, 0x86, 0xc0, 0x38, - 0x80, 0x04, 0xe1, 0x3c, - 0xe0, 0x19, 0x80, 0x18, - 0x9c, 0x04, 0x80, 0x16, + 0xf3, 0xdc, 0x42, 0x10, + 0x88, 0x04, 0x80, 0x16, 0x42, 0x10, 0x80, 0x18, - 0x80, 0x16, 0xf3, 0xbc, - 0x98, 0xf1, 0x3c, 0x04, - 0xf2, 0x7c, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, + 0x00, 0x16, 0xf3, 0xbc, + 0xe1, 0x10, 0x00, 0xc6, + 0x80, 0x18, 0x80, 0x04, + 0x00, 0x16, 0xc2, 0x19, + 0xe0, 0x0c, 0x41, 0xf6, + 0xfc, 0x04, 0xbe, 0x0e, + 0xe8, 0x0d, 0x82, 0x01, + 0x9f, 0xfc, 0x2f, 0x88, + 0xbc, 0x0e, 0xbe, 0x04, + 0x4a, 0x18, 0x81, 0x85, + 0x4c, 0x91, 0xef, 0xd4, + 0xc0, 0x38, 0x63, 0x29, + 0xef, 0xc0, 0x48, 0xe8, + 0x63, 0x15, 0x0c, 0x09, + 0x4f, 0x06, 0x40, 0x38, + 0xa5, 0x0b, 0xe1, 0x14, + 0x70, 0xb8, 0x82, 0x15, + 0x8c, 0x0b, 0x6f, 0xf8, + 0x4c, 0x01, 0xbc, 0x0e, + 0xc0, 0x38, 0x63, 0x29, + 0xe1, 0x3c, 0x00, 0x86, + 0x80, 0x18, 0x80, 0x04, + 0x80, 0x16, 0xe0, 0x19, + 0x80, 0x18, 0x9c, 0x04, + 0xf3, 0xbc, 0x42, 0x10, + 0x3c, 0x04, 0x80, 0x16, + 0x0c, 0x0c, 0x98, 0xf1, + 0xdd, 0x93, 0xf2, 0x7c, 0xfa, 0x7c, 0x04, 0x0c, 0xec, 0x30, 0x1e, 0xf0, 0x08, 0x09, 0x80, 0x4b, @@ -17511,12 +17677,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x73, 0xf1, 0x4c, 0x00, 0x28, 0xba, 0xc0, 0xff, 0x81, 0x6b, 0x88, 0x63, - 0x74, 0xb8, 0x80, 0xf5, + 0x6d, 0x98, 0x80, 0xf5, 0x88, 0x0b, 0x68, 0x10, 0xa1, 0x0b, 0x3c, 0x44, 0xbe, 0x04, 0x8c, 0x15, 0x80, 0xf5, 0x81, 0x6b, - 0x68, 0x10, 0x72, 0x48, + 0x68, 0x10, 0x6b, 0x28, 0x3c, 0x44, 0x88, 0x0b, 0x88, 0xf5, 0xa1, 0x0b, 0xa1, 0x0b, 0xa4, 0x0a, @@ -17546,7 +17712,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2d, 0x67, 0xcd, 0xe0, 0x0c, 0x0e, 0x36, 0x60, 0x0c, 0x02, 0x36, - 0x7f, 0xb8, 0x88, 0x0b, + 0x75, 0x38, 0x88, 0x0b, 0x23, 0x0b, 0xef, 0xcc, 0x0e, 0x06, 0x98, 0xf1, 0x8e, 0x0b, 0xc0, 0x00, @@ -17562,21 +17728,21 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x41, 0x00, 0x04, 0x8c, 0x0b, 0x00, 0x86, 0x63, 0x7d, 0x0c, 0x15, - 0x40, 0x98, 0xc0, 0x0b, - 0x82, 0x2b, 0x68, 0x18, + 0x79, 0x78, 0xc0, 0x0b, + 0x82, 0x2b, 0x68, 0x14, 0x63, 0x11, 0x0c, 0x09, 0x40, 0x4a, 0xc0, 0x2d, 0x82, 0xc5, 0xe0, 0x80, - 0x6f, 0xf8, 0x5d, 0xc8, - 0x4f, 0x38, 0x8c, 0x0b, + 0x6f, 0xf8, 0x5e, 0x08, + 0x48, 0x18, 0x8c, 0x0b, 0x8c, 0x0b, 0x68, 0x14, 0x79, 0x41, 0x02, 0x06, 0x8c, 0x0b, 0x5d, 0xcd, - 0xef, 0xf8, 0x62, 0x88, + 0xef, 0xf8, 0x62, 0xc8, 0x0c, 0x0b, 0x81, 0x55, - 0x63, 0xf8, 0x8e, 0x1b, + 0x64, 0x38, 0x8e, 0x1b, 0x00, 0x8b, 0xef, 0xf4, - 0x4d, 0x58, 0x8c, 0x0b, + 0x46, 0x38, 0x8c, 0x0b, 0x0c, 0x09, 0xe8, 0x14, 0xc0, 0x2c, 0x6d, 0x01, 0x65, 0x3d, 0x4c, 0x01, @@ -17616,11 +17782,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x12, 0x06, 0x04, 0x75, 0x02, 0x06, 0xc0, 0x00, 0x5d, 0xcd, 0x79, 0x41, - 0x5d, 0x78, 0x8e, 0x0b, + 0x5d, 0xb8, 0x8e, 0x0b, 0x01, 0xd5, 0xef, 0xf8, 0x03, 0x31, 0x80, 0x8b, 0x0c, 0x1b, 0x8e, 0x0b, - 0x61, 0xd8, 0x92, 0x2b, + 0x62, 0x18, 0x92, 0x2b, 0x00, 0x8b, 0xef, 0xf4, 0x12, 0x0a, 0x82, 0x91, 0xfc, 0xd5, 0xe0, 0x40, @@ -17652,7 +17818,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x16, 0x66, 0x35, 0x0e, 0x29, 0x8e, 0x0b, 0xc0, 0x2c, 0x6d, 0x09, - 0x6f, 0xc4, 0x71, 0xa8, + 0x6f, 0xc8, 0x41, 0x88, 0x80, 0x8b, 0x82, 0x19, 0x6d, 0x41, 0x0e, 0x09, 0x82, 0x01, 0xc0, 0x2c, @@ -17668,7 +17834,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x85, 0x31, 0x40, 0x0b, 0x63, 0x85, 0x00, 0x25, 0x81, 0x41, 0x40, 0x0b, - 0xe0, 0x14, 0x33, 0x68, + 0xe0, 0x14, 0x2c, 0x48, 0xfa, 0x00, 0x04, 0x0c, 0x0c, 0x09, 0x80, 0x6b, 0xc0, 0x2c, 0x6d, 0x51, @@ -17682,7 +17848,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x19, 0x8f, 0xfc, 0xc0, 0x2c, 0x6d, 0x51, 0xe0, 0x84, 0x42, 0x0a, - 0x67, 0xb8, 0x82, 0x85, + 0x62, 0x58, 0x82, 0x85, 0x8c, 0x0b, 0x6f, 0xec, 0x67, 0xc9, 0x0c, 0x19, 0xb1, 0x1b, 0xc0, 0x2d, @@ -17708,18 +17874,18 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x80, 0x40, 0x0a, 0x0d, 0x11, 0x8c, 0x85, 0x79, 0x41, 0x04, 0x06, - 0x4e, 0x78, 0xdd, 0xcd, + 0x4e, 0xb8, 0xdd, 0xcd, 0x8c, 0x0b, 0x6f, 0xf8, 0x80, 0x85, 0xa1, 0x0b, 0xf2, 0x84, 0x0c, 0x0c, - 0x6b, 0x98, 0xdd, 0x93, + 0x6b, 0xd8, 0xdd, 0x93, 0x8c, 0x0b, 0x6f, 0xf4, 0x6a, 0xad, 0x0c, 0x09, 0x0c, 0x79, 0xc0, 0x2b, 0xc0, 0x2c, 0x6c, 0xfd, 0x1e, 0x79, 0xa3, 0x0b, 0x9c, 0x00, 0x40, 0x60, - 0x08, 0x10, 0x72, 0xc8, + 0x08, 0x10, 0x6b, 0xa8, 0x9a, 0x80, 0x02, 0x74, 0x6d, 0x51, 0x0c, 0x09, 0x40, 0x0a, 0xc0, 0x2c, @@ -17735,11 +17901,11 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x04, 0x06, 0x0f, 0x11, 0xdd, 0xcd, 0x79, 0x41, 0x0c, 0x0c, 0x8c, 0x0b, - 0x0b, 0x18, 0xf2, 0x84, + 0x0b, 0x58, 0xf2, 0x84, 0xc1, 0xc3, 0xff, 0xf8, 0xfa, 0x04, 0x04, 0x4c, 0x81, 0x01, 0x00, 0x6b, - 0x6f, 0xe0, 0x6a, 0xc8, + 0x6f, 0xe0, 0x65, 0x68, 0x00, 0x7b, 0x81, 0x11, 0xe1, 0x48, 0x41, 0x86, 0x80, 0x08, 0x80, 0x04, @@ -17754,10 +17920,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x2c, 0x6c, 0xfd, 0x88, 0xb5, 0xa1, 0x0b, 0x60, 0x3c, 0x41, 0xf6, - 0x61, 0xd8, 0x83, 0x11, + 0x4a, 0x78, 0x83, 0x11, 0x42, 0x06, 0xef, 0x7c, 0x8c, 0x0b, 0x60, 0x00, - 0xef, 0xe0, 0x7e, 0xa8, + 0xef, 0xe0, 0x79, 0x48, 0x61, 0x38, 0x01, 0x06, 0xe0, 0x0c, 0x43, 0xf6, 0x0c, 0x29, 0x80, 0x04, @@ -17766,13 +17932,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x00, 0x40, 0x15, 0x42, 0x16, 0xfe, 0x35, 0x8c, 0x0b, 0x60, 0x00, - 0xef, 0xe0, 0x7d, 0x88, + 0xef, 0xe0, 0x78, 0x28, 0x67, 0xcd, 0x0c, 0x09, 0x40, 0x00, 0xc0, 0x2d, 0x4c, 0x01, 0xf3, 0xec, 0xc0, 0x2d, 0x67, 0xcd, 0x8e, 0x0b, 0x03, 0x11, - 0xef, 0xe0, 0x66, 0xa8, + 0xef, 0xe0, 0x61, 0x48, 0x0c, 0x4c, 0x81, 0x01, 0xdd, 0x93, 0xf2, 0x04, 0xfe, 0x7c, 0x04, 0x0c, @@ -17786,10 +17952,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x98, 0xfe, 0x0e, 0xc0, 0x00, 0x40, 0x01, 0x64, 0x50, 0x02, 0xf0, - 0x7f, 0xb8, 0x8c, 0x0b, + 0x77, 0x98, 0x8c, 0x0b, 0x80, 0xab, 0xef, 0xc8, 0x60, 0x48, 0x02, 0x06, - 0x6b, 0xb8, 0x8c, 0x0b, + 0x64, 0x98, 0x8c, 0x0b, 0x00, 0x60, 0xe8, 0x14, 0x40, 0x09, 0x64, 0x01, 0x61, 0x01, 0x12, 0x06, @@ -17813,12 +17979,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x45, 0x06, 0x50, 0xa0, 0x06, 0x46, 0xc0, 0x18, 0x40, 0x60, 0x40, 0x00, - 0x6c, 0x78, 0xdc, 0x00, + 0x68, 0xf8, 0xdc, 0x00, 0x0b, 0x34, 0xe8, 0x04, 0xe4, 0x40, 0x0a, 0xf0, 0x8c, 0x1b, 0x0c, 0x0b, 0x96, 0x4b, 0x7c, 0x24, - 0xef, 0xc8, 0x7d, 0xa8, + 0xef, 0xc8, 0x75, 0x88, 0xa1, 0xab, 0x80, 0xab, 0x7e, 0x14, 0x84, 0xb5, 0x91, 0x0a, 0x81, 0xa1, @@ -17839,20 +18005,20 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xdd, 0x93, 0x80, 0x16, 0xfa, 0x84, 0x04, 0x0c, 0x80, 0x7b, 0x02, 0x6b, - 0xef, 0xec, 0x79, 0x48, + 0xef, 0xec, 0x79, 0x88, 0x82, 0xb5, 0xa1, 0x0b, 0x66, 0x35, 0x0e, 0x1b, 0x42, 0x0a, 0xc0, 0x16, 0x80, 0xe5, 0xe0, 0x80, 0x8c, 0x1b, 0x0e, 0x0b, 0xf2, 0x84, 0x0c, 0x0c, - 0xe0, 0x10, 0x1e, 0x08, + 0xe0, 0x10, 0x16, 0xe8, 0xf2, 0x84, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, 0x63, 0x89, 0x00, 0x15, 0x85, 0x31, 0x40, 0x0b, 0x04, 0x10, 0x83, 0x41, - 0x1c, 0x58, 0xec, 0x28, + 0x15, 0x38, 0xec, 0x28, 0xc1, 0xc3, 0xe0, 0x14, 0xfa, 0x00, 0x04, 0x0c, 0x0c, 0x09, 0x80, 0x6b, @@ -17868,72 +18034,42 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x10, 0xd8, 0xf2, 0x00, 0x0c, 0x0c, 0xff, 0xfc, 0xdd, 0x93, 0xf2, 0x00, - 0xfa, 0x0c, 0x04, 0x0c, - 0x81, 0x81, 0x00, 0x6b, + 0xfa, 0x84, 0x04, 0x0c, + 0x81, 0x71, 0x00, 0x6b, 0x6d, 0x15, 0x0c, 0x09, 0x40, 0x0a, 0xc0, 0x2c, - 0x9c, 0x65, 0xe0, 0x90, - 0x6f, 0xec, 0x5b, 0x28, - 0x60, 0x18, 0x8c, 0x0b, + 0x8c, 0xc5, 0xe0, 0x90, + 0x6f, 0xec, 0x55, 0xc8, + 0x5a, 0xb8, 0x8c, 0x0b, 0x8c, 0x0b, 0x6f, 0xec, - 0x64, 0xb1, 0x0c, 0x09, - 0x80, 0x7b, 0x40, 0x38, - 0x8e, 0x55, 0xa1, 0x0b, - 0x60, 0x01, 0x01, 0x46, - 0x03, 0x06, 0x40, 0x7d, - 0xc0, 0x0a, 0x60, 0x01, - 0x61, 0x09, 0x4c, 0x05, - 0x00, 0x06, 0x40, 0x0e, - 0xc0, 0x03, 0x60, 0x01, - 0x61, 0x0d, 0x4c, 0x05, - 0x40, 0xc6, 0x40, 0x0e, - 0xc0, 0x64, 0x60, 0x01, - 0x61, 0x15, 0x4c, 0x05, - 0xa1, 0x01, 0x40, 0x0e, - 0x61, 0x11, 0x4c, 0x15, - 0x43, 0x06, 0x40, 0x0e, - 0xc1, 0x2d, 0x60, 0x49, - 0x62, 0x41, 0x4c, 0x03, - 0x4c, 0x03, 0xc0, 0x1c, - 0x40, 0x1c, 0x62, 0x45, - 0xe0, 0x20, 0x00, 0x06, - 0x61, 0x19, 0x4c, 0x15, - 0x4c, 0x83, 0xc0, 0x0e, - 0xc0, 0x1c, 0x62, 0x39, - 0x62, 0x3d, 0x4c, 0x83, - 0x4c, 0x03, 0xc0, 0x1c, - 0xc0, 0x1c, 0x62, 0x49, - 0x62, 0x4d, 0x4c, 0x03, - 0x4c, 0x03, 0xc0, 0x1c, - 0xc0, 0x1c, 0x62, 0x51, - 0x62, 0x55, 0x4c, 0x83, - 0x0c, 0x09, 0xc0, 0x1c, - 0xc0, 0x38, 0x64, 0xb5, - 0x00, 0x60, 0xa1, 0x0b, - 0x00, 0xe1, 0x04, 0x21, - 0x07, 0x01, 0x02, 0x60, - 0x04, 0x60, 0x80, 0x54, - 0x00, 0x54, 0x07, 0x41, - 0x06, 0x41, 0x06, 0x60, - 0x44, 0x98, 0x80, 0x58, - 0x0c, 0x09, 0x8f, 0xd0, - 0xc0, 0x38, 0x64, 0xb9, - 0x00, 0x60, 0xa1, 0x0b, - 0x00, 0x54, 0x07, 0x01, - 0x07, 0x41, 0x02, 0x60, - 0x49, 0x78, 0x80, 0x54, - 0x04, 0x60, 0x0f, 0xd0, - 0x80, 0x58, 0x06, 0x40, - 0x63, 0x21, 0x0c, 0x09, + 0x6f, 0xec, 0x68, 0xe8, + 0x0c, 0x09, 0x8c, 0x0b, + 0x40, 0x38, 0x64, 0xb5, + 0xa1, 0x0b, 0x80, 0x7b, + 0x04, 0x21, 0x00, 0x60, + 0x02, 0x60, 0x00, 0xe1, + 0x80, 0x54, 0x07, 0x01, + 0x07, 0x41, 0x04, 0x60, + 0x06, 0x60, 0x00, 0x54, + 0x80, 0x58, 0x06, 0x41, + 0x8f, 0xd0, 0x42, 0xa8, + 0x64, 0xb9, 0x0c, 0x09, 0xa1, 0x0b, 0xc0, 0x38, - 0x50, 0x70, 0x02, 0x05, - 0x8c, 0x0b, 0x9c, 0x00, - 0xf2, 0x0c, 0x0c, 0x0c, - 0xff, 0xec, 0x27, 0xa8, - 0x0c, 0x0c, 0x90, 0x0b, - 0xdd, 0x93, 0xf2, 0x0c, + 0x07, 0x01, 0x00, 0x60, + 0x02, 0x60, 0x00, 0x54, + 0x80, 0x54, 0x07, 0x41, + 0x0f, 0xd0, 0x47, 0x88, + 0x06, 0x40, 0x04, 0x60, + 0x0c, 0x09, 0x80, 0x58, + 0xc0, 0x38, 0x63, 0x21, + 0x80, 0xc5, 0xa1, 0x0b, + 0x0c, 0x0c, 0x8c, 0x0b, + 0x2b, 0xb8, 0xf2, 0x84, + 0x8e, 0x0b, 0xff, 0xec, + 0xf2, 0x84, 0x0c, 0x0c, + 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x0c, 0x04, 0x0c, - 0x0a, 0x06, 0x00, 0x6b, + 0x0a, 0x86, 0x00, 0x6b, 0x0c, 0x09, 0xef, 0xdc, 0xc0, 0x2c, 0x6d, 0x0d, 0x6d, 0x15, 0x0c, 0x19, @@ -17966,7 +18102,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x10, 0x40, 0x2c, 0x4c, 0x01, 0x93, 0xf0, 0x80, 0x2c, 0x0d, 0x15, - 0x54, 0x38, 0x80, 0x85, + 0x54, 0x78, 0x80, 0x85, 0x8c, 0x0b, 0x68, 0x04, 0x63, 0x11, 0x0c, 0x09, 0x40, 0x0a, 0xc0, 0x2d, @@ -17989,21 +18125,21 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xdd, 0x93, 0xf2, 0x0c, 0xfa, 0x00, 0x04, 0x0c, 0x68, 0x00, 0x43, 0x08, - 0x48, 0x58, 0x80, 0x6b, + 0x48, 0x98, 0x80, 0x6b, 0x8c, 0x0b, 0x68, 0x0c, 0x6c, 0x11, 0x0c, 0x09, 0x40, 0x0a, 0xc0, 0x2b, 0x84, 0x65, 0xe0, 0x94, - 0xef, 0xdc, 0x01, 0x86, + 0xef, 0xdc, 0x40, 0x06, 0x40, 0x0a, 0x80, 0x08, 0x82, 0xb5, 0xe0, 0x80, 0x6c, 0x21, 0x0c, 0x09, 0xa7, 0x0b, 0xc0, 0x2b, - 0x4b, 0xf8, 0x82, 0xb5, + 0x4f, 0xb8, 0x82, 0xb5, 0x8c, 0x0b, 0x6f, 0xfc, - 0x68, 0x04, 0x6a, 0xc8, + 0x68, 0x04, 0x6b, 0x08, 0x81, 0x45, 0x8c, 0x0b, - 0x6f, 0xd4, 0x51, 0x88, + 0x6f, 0xd4, 0x4e, 0xa8, 0xa1, 0x0b, 0x8c, 0x0b, 0x57, 0x58, 0x82, 0x55, 0x8c, 0x0b, 0x68, 0x00, @@ -18026,7 +18162,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x85, 0x15, 0x80, 0x2b, 0xe0, 0x00, 0x42, 0x46, 0x6c, 0x1d, 0x40, 0x11, - 0x02, 0x06, 0x40, 0x2b, + 0x02, 0x86, 0x40, 0x2b, 0x84, 0x28, 0xef, 0xdc, 0xf0, 0xc0, 0x44, 0x20, 0xe0, 0x40, 0x04, 0x0a, @@ -18043,13 +18179,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6e, 0x09, 0x00, 0x1b, 0xc4, 0x19, 0xc0, 0x15, 0x6e, 0x09, 0x40, 0x13, - 0x00, 0x06, 0x40, 0x15, + 0x00, 0x86, 0x40, 0x15, 0x80, 0x18, 0xef, 0xdc, 0xf3, 0xf8, 0x42, 0x10, 0xdd, 0x93, 0x80, 0x16, 0xfa, 0x9c, 0x04, 0x0c, 0x81, 0x01, 0x00, 0x7b, - 0x6f, 0xe0, 0x44, 0x08, + 0x6f, 0xe0, 0x42, 0x68, 0x81, 0x81, 0x81, 0x11, 0x6c, 0x21, 0x0e, 0x09, 0x80, 0x6b, 0x40, 0x2b, @@ -18063,16 +18199,16 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x04, 0xc0, 0xff, 0x4e, 0x03, 0xfc, 0x94, 0x40, 0x15, 0x6e, 0x09, - 0x4d, 0x58, 0x8e, 0x0b, + 0x60, 0x98, 0x8e, 0x0b, 0x48, 0x38, 0xef, 0xbc, 0x8e, 0x0b, 0x68, 0x00, 0x64, 0xd5, 0x0e, 0x09, 0xa7, 0x0b, 0xc0, 0x2b, 0xa5, 0x0b, 0x86, 0x05, - 0x00, 0x06, 0x08, 0xc5, + 0x00, 0x86, 0x08, 0xc5, 0xa3, 0x0b, 0x8f, 0xdc, 0x03, 0xd5, 0x88, 0xf5, - 0xef, 0xdc, 0x00, 0x06, + 0xef, 0xdc, 0x00, 0x86, 0x6e, 0x09, 0x0e, 0x0b, 0x40, 0x00, 0xc0, 0x15, 0xc0, 0xff, 0x73, 0x71, @@ -18080,7 +18216,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6e, 0x09, 0x4e, 0x03, 0x0c, 0x0c, 0xc0, 0x15, 0xdd, 0x93, 0xf2, 0x9c, - 0xef, 0xdc, 0x00, 0x06, + 0xef, 0xdc, 0x00, 0x86, 0x42, 0x4a, 0x80, 0x18, 0x80, 0xe5, 0xe0, 0x8c, 0x6c, 0x15, 0x0e, 0x19, @@ -18089,21 +18225,21 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x01, 0x55, 0x80, 0x08, 0xfc, 0x08, 0x00, 0x04, 0xc8, 0x09, 0x80, 0x08, - 0xef, 0xdc, 0x02, 0x06, - 0x51, 0x38, 0x84, 0x06, + 0xef, 0xdc, 0x02, 0x86, + 0x4f, 0x98, 0x84, 0x06, 0x8e, 0x0b, 0x6f, 0xe4, - 0xef, 0xdc, 0x12, 0x06, + 0xef, 0xdc, 0x12, 0x86, 0x40, 0x0a, 0xa4, 0x08, 0x82, 0xb5, 0xe0, 0x80, 0x40, 0x0a, 0xa4, 0x08, 0x82, 0xf5, 0xe0, 0x88, 0x8e, 0x0b, 0x3d, 0x11, - 0xef, 0xe0, 0x54, 0x08, + 0xef, 0xe0, 0x52, 0x68, 0x68, 0x00, 0x49, 0x68, 0x87, 0x25, 0x8e, 0x0b, 0x8e, 0x0b, 0x3f, 0x11, 0xf2, 0x9c, 0x0c, 0x0c, - 0xff, 0xe0, 0x13, 0x68, + 0xff, 0xe0, 0x11, 0xc8, 0x6e, 0x09, 0x0e, 0x05, 0x02, 0x06, 0x40, 0x09, 0xc0, 0xfa, 0x60, 0x01, @@ -18121,14 +18257,14 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfc, 0x98, 0x00, 0x04, 0x6e, 0x09, 0x4e, 0x03, 0x8e, 0x0b, 0x40, 0x15, - 0xef, 0xe0, 0x51, 0x28, + 0xef, 0xe0, 0x4f, 0x88, 0x60, 0x3c, 0x41, 0xf6, - 0x73, 0xb8, 0x83, 0x11, - 0x43, 0xd8, 0xef, 0x78, + 0x60, 0x18, 0x83, 0x11, + 0x47, 0xd8, 0xef, 0x78, 0x52, 0x81, 0xef, 0xf0, 0x03, 0x11, 0xe0, 0xa0, 0x0c, 0x0c, 0x8c, 0x0b, - 0x3a, 0x18, 0xf2, 0x9c, + 0x38, 0x78, 0xf2, 0x9c, 0xc1, 0xc3, 0xff, 0xdc, 0xfa, 0x00, 0x04, 0x0c, 0x01, 0x46, 0x00, 0x6b, @@ -18141,8 +18277,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x88, 0x24, 0x80, 0x08, 0x08, 0x34, 0xc5, 0x07, 0xf0, 0x0c, 0x44, 0x00, - 0x68, 0x10, 0x7d, 0x08, - 0x02, 0x06, 0x8c, 0x0b, + 0x68, 0x10, 0x79, 0xa8, + 0x02, 0x86, 0x8c, 0x0b, 0x48, 0x86, 0x6f, 0xdc, 0x86, 0x0e, 0xe0, 0x3c, 0xc4, 0x24, 0x86, 0x04, @@ -18178,20 +18314,20 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0xf6, 0x00, 0x6b, 0x4c, 0x01, 0xe0, 0x08, 0x40, 0x2b, 0x6c, 0x1d, - 0x49, 0xf8, 0xb7, 0x11, + 0x48, 0x58, 0xb7, 0x11, 0x8c, 0x0b, 0x6f, 0xe0, 0x64, 0xcd, 0x0c, 0x15, 0x02, 0x8a, 0xc0, 0x05, 0x80, 0xf5, 0xe5, 0x94, 0x8c, 0x0b, 0x01, 0x21, 0xf2, 0x00, 0x0c, 0x0c, - 0xe0, 0x10, 0x0a, 0x28, + 0xe0, 0x10, 0x06, 0xc8, 0x8c, 0x0b, 0x3b, 0x11, - 0xef, 0xe0, 0x48, 0xe8, + 0xef, 0xe0, 0x47, 0x48, 0x60, 0x04, 0x42, 0x46, 0x8c, 0x0b, 0x81, 0x21, 0xf2, 0x00, 0x0c, 0x0c, - 0xe0, 0x10, 0x09, 0x68, + 0xe0, 0x10, 0x06, 0x08, 0xfa, 0x7c, 0x04, 0x4c, 0x00, 0x06, 0x00, 0x6b, 0x00, 0x04, 0xe1, 0x38, @@ -18200,12 +18336,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa1, 0xab, 0x80, 0xa8, 0x0c, 0x29, 0x82, 0x65, 0x40, 0x2b, 0x6c, 0x1d, - 0x6d, 0xf8, 0x8c, 0x0b, + 0x67, 0x38, 0x8c, 0x0b, 0x94, 0x1b, 0x6f, 0xc8, 0x0e, 0x08, 0xa1, 0x0b, 0x0e, 0x60, 0xc0, 0x00, 0x40, 0xb3, 0x64, 0x51, - 0x62, 0x58, 0x8c, 0x0b, + 0x60, 0xb8, 0x8c, 0x0b, 0x8e, 0x1b, 0x6f, 0xe0, 0x67, 0xcd, 0x0c, 0x09, 0x02, 0x04, 0xc0, 0x2d, @@ -18233,7 +18369,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0x91, 0x13, 0xa5, 0xfb, 0xfc, 0x16, 0x0a, 0x13, 0x11, 0xa6, 0x05, - 0x43, 0x18, 0x8c, 0x0b, + 0x41, 0x78, 0x8c, 0x0b, 0x12, 0x0a, 0xef, 0xe0, 0x41, 0x06, 0x7b, 0xfc, 0x4c, 0x01, 0xe0, 0x00, @@ -18241,26 +18377,26 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x41, 0x26, 0x9c, 0xa5, 0x4c, 0x01, 0xe0, 0x00, 0x40, 0x2b, 0x6c, 0x1d, - 0x5d, 0x98, 0x8c, 0x0b, + 0x5d, 0xd8, 0x8c, 0x0b, 0x0f, 0x14, 0xe8, 0x00, - 0x64, 0xd8, 0x8c, 0x0b, + 0x63, 0x38, 0x8c, 0x0b, 0x19, 0x11, 0xef, 0xe0, - 0x41, 0x98, 0x8c, 0x0b, - 0x41, 0x66, 0xef, 0xe0, + 0x7f, 0xf8, 0x8c, 0x0b, + 0x41, 0x66, 0xef, 0xdc, 0x4c, 0x01, 0xe0, 0x00, 0x40, 0x2b, 0x6c, 0x1d, - 0x6e, 0xf8, 0x8c, 0x0b, + 0x6f, 0x38, 0x8c, 0x0b, 0x80, 0xab, 0xe8, 0x00, 0x98, 0xf5, 0xa1, 0xab, 0xe0, 0x00, 0x41, 0x36, 0x6c, 0x1d, 0x4c, 0x01, 0x8c, 0x0b, 0x40, 0x2b, - 0xe8, 0x10, 0x5c, 0xc8, + 0xe8, 0x10, 0x59, 0x68, 0xa1, 0xab, 0x80, 0xab, 0x41, 0x46, 0x96, 0x95, 0x4c, 0x01, 0xe0, 0x00, 0x40, 0x2b, 0x6c, 0x1d, - 0x4d, 0xd8, 0x8c, 0x0b, + 0x4a, 0x78, 0x8c, 0x0b, 0x80, 0xab, 0xe8, 0x14, 0x94, 0x35, 0xa1, 0xab, 0x6d, 0x09, 0x0c, 0x09, @@ -18271,7 +18407,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6c, 0x1d, 0x4c, 0x01, 0x9e, 0x29, 0x40, 0x2b, 0x8c, 0x0b, 0x02, 0x19, - 0xef, 0xc0, 0x64, 0x48, + 0xef, 0xc0, 0x77, 0xe8, 0xa1, 0xab, 0x80, 0xab, 0x41, 0x76, 0x8e, 0x95, 0x4c, 0x01, 0xe0, 0x00, @@ -18284,7 +18420,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x11, 0x80, 0x04, 0x40, 0x2b, 0x6c, 0x1d, 0x00, 0x1c, 0x85, 0x11, - 0x5a, 0x38, 0x8c, 0x0b, + 0x5e, 0x38, 0x8c, 0x0b, 0x80, 0xab, 0xef, 0xf4, 0x88, 0x35, 0xa1, 0xab, 0x6c, 0x71, 0x0c, 0x09, @@ -18304,16 +18440,16 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xa1, 0xab, 0x83, 0x91, 0x83, 0x91, 0xe4, 0x25, 0x8e, 0x1b, 0x0c, 0x0b, - 0xef, 0xe0, 0x56, 0x08, + 0xef, 0xe0, 0x54, 0x68, 0x90, 0x1b, 0x0c, 0x0b, - 0xef, 0xe0, 0x59, 0x48, + 0xef, 0xe0, 0x57, 0xa8, 0xd8, 0xe5, 0xa1, 0xab, 0x6c, 0x91, 0x0c, 0x09, 0x21, 0x0b, 0xc0, 0x2c, 0xe0, 0x00, 0x41, 0xa6, 0x6c, 0x1d, 0x4c, 0x01, 0x40, 0x60, 0x40, 0x2b, - 0x5a, 0x98, 0x9c, 0x00, + 0x53, 0xd8, 0x9c, 0x00, 0x94, 0x0b, 0x8f, 0xc8, 0xf2, 0x7c, 0x0c, 0x4c, 0xc1, 0xc3, 0xdd, 0x93, @@ -18363,7 +18499,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x42, 0x0a, 0x40, 0x0b, 0x4c, 0x21, 0xe0, 0x9c, 0xc0, 0x2c, 0x6c, 0xf5, - 0x64, 0x58, 0x80, 0xe5, + 0x68, 0x58, 0x80, 0xe5, 0x8c, 0x0b, 0x6f, 0xf0, 0x66, 0x35, 0x0c, 0x1b, 0x42, 0x0a, 0xc0, 0x16, @@ -18376,41 +18512,43 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x67, 0xe5, 0x0c, 0x29, 0x0c, 0x19, 0xc0, 0x27, 0xc0, 0x27, 0x67, 0xe1, - 0xe8, 0x04, 0x41, 0x48, + 0xe8, 0x04, 0x41, 0x88, 0xa1, 0x7b, 0x80, 0x7b, - 0x0c, 0x1b, 0x9e, 0x75, + 0x0c, 0x1b, 0x9e, 0xf5, 0xc0, 0x16, 0x66, 0x35, 0xe0, 0xa4, 0x42, 0x0a, 0x03, 0x11, 0x82, 0x85, - 0x7a, 0xd8, 0x81, 0x21, - 0x8c, 0x0b, 0x6f, 0xbc, + 0x4e, 0x78, 0x81, 0x21, + 0x8c, 0x0b, 0x6f, 0xc0, 0xa1, 0x7b, 0x80, 0x7b, - 0x0c, 0x1b, 0x9a, 0xb5, + 0x0c, 0x1b, 0x9c, 0x35, 0xc0, 0x16, 0x66, 0x35, 0xe0, 0xb8, 0x42, 0x0a, - 0x7f, 0x58, 0x80, 0xe5, + 0x7b, 0xf8, 0x80, 0xe5, 0x8c, 0x0b, 0x68, 0x0c, 0xa1, 0x7b, 0x80, 0x7b, - 0x0c, 0x09, 0x98, 0x35, + 0x0c, 0x09, 0x98, 0xb5, 0xc0, 0x2d, 0x63, 0x11, 0xe0, 0x80, 0x40, 0x0a, 0xdc, 0x00, 0x40, 0x60, - 0xcf, 0xec, 0x63, 0xc8, + 0xcf, 0xec, 0x67, 0xc8, 0x65, 0x51, 0x0c, 0x09, 0x43, 0x46, 0x40, 0x2b, - 0x84, 0x14, 0xe1, 0x04, - 0xec, 0x04, 0x00, 0x00, - 0x04, 0x06, 0x8e, 0x09, - 0xe0, 0x08, 0x42, 0x06, - 0x63, 0x15, 0x0c, 0x09, - 0x4c, 0x11, 0xc0, 0x38, + 0x04, 0x14, 0xe1, 0x04, + 0x00, 0x00, 0x85, 0x51, + 0x8e, 0x09, 0xec, 0x04, + 0x0c, 0x09, 0x84, 0x06, + 0xc0, 0x38, 0x63, 0x2d, + 0x40, 0x06, 0x21, 0x0b, + 0x4c, 0x01, 0xe0, 0x08, 0xc0, 0x2b, 0x6c, 0x1d, - 0x02, 0x85, 0xa5, 0x0b, - 0x80, 0x00, 0x0a, 0x76, - 0x02, 0x05, 0xa3, 0x0b, + 0x0c, 0x09, 0x82, 0xf5, + 0xc0, 0x38, 0x63, 0x15, + 0x02, 0x45, 0xa5, 0x0b, + 0x80, 0x00, 0x0a, 0x86, + 0x00, 0xc5, 0xa3, 0x0b, 0x80, 0x00, 0x0a, 0x66, - 0x0a, 0x26, 0xa1, 0x0b, - 0x0a, 0x46, 0xc0, 0x00, + 0x0a, 0x46, 0xa1, 0x0b, 0x02, 0x60, 0x80, 0x00, 0x40, 0x54, 0x65, 0x41, 0x64, 0x11, 0x04, 0x60, @@ -18418,8 +18556,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0xa2, 0x66, 0x71, 0xe4, 0x30, 0x00, 0xf0, 0x06, 0xf0, 0x21, 0x56, - 0x63, 0xb8, 0xe4, 0x10, - 0xa1, 0x0b, 0xef, 0x84, + 0x7f, 0x58, 0xe4, 0x10, + 0xa1, 0x0b, 0xef, 0x80, 0x0c, 0x1d, 0x0c, 0x29, 0x02, 0x06, 0x40, 0x2b, 0x84, 0xb5, 0xc0, 0x04, @@ -18428,8 +18566,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x21, 0xc0, 0x9e, 0x40, 0x2b, 0x6c, 0x1d, 0x64, 0xa1, 0x02, 0x60, - 0x5c, 0x78, 0xc0, 0xa3, - 0xa1, 0x0b, 0xef, 0x84, + 0x78, 0x18, 0xc0, 0xa3, + 0xa1, 0x0b, 0xef, 0x80, 0x0c, 0x29, 0x86, 0x05, 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x04, 0x02, 0x16, @@ -18438,7 +18576,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x05, 0xe0, 0x0c, 0x40, 0x0a, 0x6e, 0x89, 0xe0, 0x0c, 0x02, 0x56, - 0x6f, 0xc8, 0x50, 0x48, + 0x6f, 0xc8, 0x49, 0x48, 0x0e, 0x0b, 0x8c, 0x0b, 0x0c, 0x0c, 0xa8, 0xf1, 0xdd, 0x93, 0xf2, 0x04, @@ -18457,7 +18595,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x19, 0xc0, 0xa3, 0xc0, 0x15, 0x63, 0x09, 0x6c, 0x1d, 0x4c, 0x51, - 0x4e, 0xb8, 0xc0, 0x2b, + 0x62, 0x78, 0xc0, 0x2b, 0x0c, 0x09, 0xef, 0xa0, 0xc0, 0x2b, 0x6c, 0x11, 0x60, 0x94, 0x40, 0x4a, @@ -18470,12 +18608,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x64, 0xc1, 0x04, 0x60, 0x06, 0x60, 0x40, 0xad, 0xc0, 0xad, 0x65, 0x21, - 0x6f, 0xac, 0x5d, 0x48, + 0x6f, 0xac, 0x72, 0x88, 0x66, 0x20, 0x08, 0x60, 0x00, 0x60, 0xc0, 0xae, 0x40, 0xd8, 0x65, 0x61, - 0x44, 0x58, 0x81, 0x11, - 0x04, 0xc6, 0x6f, 0x74, + 0x70, 0x78, 0x81, 0x11, + 0x04, 0xc6, 0x6f, 0x70, 0x77, 0x65, 0xe0, 0x10, 0xc1, 0xc3, 0x81, 0x71, 0xf8, 0x7c, 0x04, 0xcc, @@ -18483,7 +18621,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x03, 0x16, 0x40, 0x2c, 0x40, 0x11, 0xe0, 0x08, 0x40, 0x2b, 0x6c, 0x1d, - 0xef, 0xdc, 0x09, 0x86, + 0xef, 0xdc, 0x48, 0x06, 0x6c, 0x79, 0x00, 0x19, 0x00, 0x79, 0xc0, 0x2c, 0x40, 0x2c, 0x6c, 0x75, @@ -18541,7 +18679,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x58, 0x80, 0x01, 0x55, 0x58, 0xc0, 0xfc, 0x18, 0x08, 0xbb, 0xf3, 0xe0, - 0xef, 0xdc, 0x09, 0x86, + 0xef, 0xdc, 0x48, 0x06, 0x6d, 0x0d, 0x40, 0xc1, 0x58, 0x0a, 0x40, 0x2c, 0x82, 0xc5, 0xe0, 0x84, @@ -18626,7 +18764,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xf0, 0x7c, 0x0c, 0xcc, 0xc1, 0xc3, 0xdd, 0x93, 0xfa, 0x04, 0x04, 0x4c, - 0x68, 0x0c, 0x4a, 0x28, + 0x68, 0x0c, 0x46, 0x88, 0x0e, 0x01, 0x80, 0x7b, 0x40, 0x2c, 0x6d, 0x01, 0x00, 0x8a, 0x81, 0x61, @@ -18635,7 +18773,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x46, 0x40, 0x2b, 0x02, 0x46, 0xe0, 0x0c, 0x8e, 0x0b, 0x60, 0x0c, - 0xef, 0xc4, 0x77, 0xa8, + 0xef, 0xc4, 0x70, 0xa8, 0x0c, 0x06, 0xa1, 0x0b, 0x8c, 0x0b, 0x80, 0x00, 0xf2, 0x04, 0x0c, 0x4c, @@ -18660,7 +18798,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x09, 0x86, 0x25, 0xc0, 0x2c, 0x6c, 0x89, 0x84, 0x85, 0xa1, 0x0b, - 0x68, 0x0c, 0x45, 0xe8, + 0x68, 0x0c, 0x42, 0x48, 0x0c, 0x11, 0x8c, 0x0b, 0xc0, 0x2c, 0x6d, 0x05, 0x6c, 0x89, 0x0c, 0x29, @@ -18687,7 +18825,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x85, 0xa5, 0x3b, 0x84, 0x85, 0xa7, 0x3b, 0x5c, 0x08, 0xa1, 0x3b, - 0x23, 0xb8, 0xda, 0x00, + 0x0f, 0xd8, 0xda, 0x00, 0x89, 0x75, 0xff, 0x70, 0x5c, 0x08, 0xa1, 0x2b, 0x45, 0x34, 0x9a, 0x00, @@ -18857,7 +18995,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xdd, 0x93, 0xf0, 0x1c, 0xfa, 0x04, 0x04, 0x4c, 0x42, 0x16, 0x00, 0x6b, - 0x66, 0x38, 0xe0, 0x00, + 0x62, 0x98, 0xe0, 0x00, 0x0c, 0x09, 0xe8, 0x0c, 0x40, 0x2b, 0x6c, 0x45, 0xe1, 0x0c, 0x42, 0x46, @@ -18894,7 +19032,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x0b, 0x40, 0x2b, 0x6c, 0x41, 0x0c, 0x19, 0x74, 0x78, 0xc0, 0x2b, - 0x46, 0x38, 0xef, 0xfc, + 0x42, 0x98, 0xef, 0xfc, 0x8c, 0x0b, 0x68, 0x10, 0x0c, 0x4c, 0x81, 0x01, 0xdd, 0x93, 0xf2, 0x04, @@ -18915,10 +19053,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x5e, 0x01, 0xe0, 0xd0, 0x5e, 0x01, 0xe0, 0xc0, 0x8c, 0x0b, 0x60, 0xb0, - 0xe8, 0x0c, 0x5f, 0x08, + 0xe8, 0x0c, 0x5b, 0x68, 0x9f, 0x21, 0x01, 0x11, 0x8c, 0x3b, 0x0c, 0x0b, - 0xe8, 0x04, 0x6d, 0x48, + 0xe8, 0x04, 0x69, 0xa8, 0x60, 0x90, 0x00, 0x84, 0xe1, 0x8c, 0x02, 0x84, 0x40, 0x00, 0x0d, 0x8e, @@ -18941,7 +19079,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x92, 0x83, 0x07, 0x65, 0x6c, 0x1d, 0x0c, 0x29, 0x43, 0x76, 0x40, 0x2b, - 0x51, 0x58, 0xe0, 0x00, + 0x4a, 0x58, 0xe0, 0x00, 0x8c, 0x0b, 0x6f, 0xc4, 0x5e, 0xb1, 0xa1, 0x0b, 0x5e, 0xa1, 0xc1, 0x30, @@ -18991,7 +19129,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x85, 0x80, 0xd0, 0x6c, 0x1d, 0x0c, 0x29, 0x43, 0x76, 0x40, 0x2b, - 0x4b, 0x18, 0xe0, 0x00, + 0x44, 0x18, 0xe0, 0x00, 0x8c, 0x0b, 0x6f, 0xc4, 0xe0, 0x00, 0x4f, 0x76, 0x0f, 0x48, 0xa1, 0x0b, @@ -19070,7 +19208,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xfb, 0x80, 0x42, 0x12, 0x04, 0x04, 0x91, 0x04, 0x8c, 0x0b, 0x7a, 0x80, - 0xe8, 0x04, 0x5a, 0x48, + 0xe8, 0x04, 0x56, 0xa8, 0xa1, 0x7b, 0x80, 0x7b, 0x0c, 0x0b, 0x90, 0x35, 0x4c, 0xd8, 0x8c, 0x1b, @@ -19170,7 +19308,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x81, 0xc5, 0xea, 0x15, 0x6c, 0x1d, 0x00, 0x29, 0x43, 0x66, 0x40, 0x2b, - 0x74, 0xb8, 0xe0, 0x08, + 0x6d, 0xb8, 0xe0, 0x08, 0x4d, 0x66, 0x6f, 0xc0, 0xa1, 0x0b, 0xe0, 0x08, 0x81, 0x61, 0x80, 0x55, @@ -19246,7 +19384,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xe0, 0x80, 0x40, 0x0a, 0x05, 0x01, 0x00, 0x60, 0x02, 0x06, 0x40, 0x9b, - 0x63, 0xd8, 0xc0, 0x00, + 0x4f, 0xf8, 0xc0, 0x00, 0x04, 0x06, 0x4f, 0x6c, 0x0c, 0x09, 0xc0, 0x18, 0xc0, 0x2b, 0x6c, 0x21, @@ -19256,10 +19394,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc2, 0x09, 0xf3, 0xf0, 0x6d, 0x21, 0x4c, 0x01, 0x8c, 0x0b, 0x40, 0x2c, - 0xef, 0xf4, 0x7b, 0x08, + 0xef, 0xf4, 0x7a, 0xc8, 0x6d, 0x21, 0x0c, 0x09, 0x80, 0x7b, 0x40, 0x2c, - 0x42, 0x86, 0x21, 0x7b, + 0x43, 0x06, 0x21, 0x7b, 0x83, 0x21, 0xef, 0xdc, 0x40, 0x00, 0x04, 0x26, 0xc4, 0x09, 0xf3, 0xf0, @@ -19267,7 +19405,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x65, 0xc0, 0x2c, 0x6c, 0x1d, 0x0c, 0x29, 0x8c, 0x0b, 0x40, 0x2b, - 0x6f, 0xc0, 0x68, 0xa8, + 0x6f, 0xc0, 0x61, 0xa8, 0xa1, 0x0b, 0x8e, 0x1b, 0xc0, 0x00, 0x0c, 0x38, 0x81, 0x11, 0x01, 0x71, @@ -19292,12 +19430,12 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x21, 0xc0, 0x27, 0xc0, 0x27, 0x67, 0xed, 0x80, 0xf5, 0xa1, 0x7b, - 0x6f, 0xf4, 0x76, 0x88, + 0x6f, 0xf4, 0x76, 0x48, 0x80, 0x7b, 0x8c, 0x0b, 0x82, 0x45, 0xa1, 0x7b, 0x6c, 0x1d, 0x0c, 0x29, 0x8c, 0x0b, 0x40, 0x2b, - 0x6f, 0xc0, 0x64, 0xe8, + 0x6f, 0xc0, 0x5d, 0xe8, 0xa1, 0x0b, 0x8e, 0x1b, 0x02, 0xf0, 0xa0, 0xf5, 0x8c, 0x0b, 0x64, 0x20, @@ -19363,8 +19501,8 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x67, 0xf5, 0x4c, 0x01, 0x4c, 0xa1, 0xc0, 0x27, 0x40, 0x26, 0x6c, 0xf1, - 0x60, 0x98, 0x8c, 0x0b, - 0x40, 0x86, 0xef, 0xb4, + 0x73, 0xd8, 0x8c, 0x0b, + 0x41, 0x06, 0xef, 0xb4, 0x81, 0x11, 0x6f, 0xdc, 0x0e, 0x0b, 0x80, 0x16, 0x0c, 0x0c, 0x98, 0xf1, @@ -19422,7 +19560,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6d, 0x59, 0x0c, 0x05, 0x91, 0x21, 0x40, 0x0a, 0x6e, 0x0d, 0x0c, 0x15, - 0x49, 0x78, 0xc0, 0x09, + 0x5e, 0xb8, 0xc0, 0x09, 0x0c, 0x29, 0xef, 0xa8, 0x40, 0x2b, 0x65, 0x51, 0xe1, 0x18, 0x43, 0x46, @@ -19432,17 +19570,17 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x9e, 0x49, 0xc0, 0x0b, 0x8e, 0x19, 0xc9, 0x17, 0x02, 0x24, 0x23, 0x5f, - 0x4e, 0xb8, 0xe0, 0x90, + 0x63, 0xf8, 0xe0, 0x90, 0x04, 0x54, 0x6f, 0xa8, - 0x42, 0xb8, 0xe8, 0x90, + 0x46, 0x78, 0xe8, 0x90, 0x80, 0x8b, 0x6f, 0xe8, 0x60, 0x10, 0x02, 0x06, - 0x50, 0x58, 0x90, 0x2b, + 0x65, 0x98, 0x90, 0x2b, 0x8e, 0x3b, 0x6f, 0xa8, 0xa1, 0x7b, 0x80, 0x7b, 0x0c, 0x29, 0x82, 0xe5, 0x40, 0x2b, 0x6c, 0x1d, - 0x52, 0xb8, 0x8c, 0x0b, + 0x4b, 0xb8, 0x8c, 0x0b, 0x8e, 0x1b, 0x6f, 0xc0, 0x0e, 0x06, 0xa3, 0x0b, 0x8e, 0x0b, 0xc0, 0x00, @@ -19493,7 +19631,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x0b, 0x63, 0x15, 0x40, 0x33, 0xa4, 0x3f, 0x40, 0x16, 0x66, 0x35, - 0xef, 0xdc, 0x08, 0x06, + 0xef, 0xdc, 0x08, 0x86, 0x60, 0x24, 0x02, 0x29, 0xfc, 0x0c, 0x06, 0x34, 0xc2, 0x27, 0x90, 0x58, @@ -19667,35 +19805,6 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x89, 0x16, 0xc0, 0x0a, 0x65, 0xb9, 0x0c, 0x19, 0x11, 0x36, 0xc0, 0x2b, - 0x3c, 0x0e, 0x89, 0x31, - 0x8f, 0x16, 0x81, 0x01, - 0x65, 0xb5, 0x0c, 0x19, - 0x1b, 0x36, 0xc0, 0x2b, - 0x8b, 0x06, 0x8f, 0x31, - 0x82, 0x19, 0x0d, 0x26, - 0x02, 0x16, 0x1f, 0x16, - 0xc0, 0x40, 0x70, 0x11, - 0xa1, 0x26, 0x9d, 0x36, - 0xa5, 0x26, 0xa3, 0x26, - 0x13, 0x06, 0xa7, 0x06, - 0x8b, 0x1e, 0x8c, 0x0b, - 0x97, 0x26, 0x95, 0x26, - 0x63, 0x38, 0x99, 0x26, - 0x1e, 0x1b, 0xef, 0xfc, - 0x67, 0x58, 0x8c, 0x0b, - 0xb0, 0xf1, 0xef, 0xfc, - 0xf2, 0x00, 0x0c, 0x0c, - 0xc1, 0xc3, 0xdd, 0x93, - 0xfa, 0x00, 0x04, 0x0c, - 0xec, 0x60, 0x1e, 0xf0, - 0x83, 0x21, 0x00, 0x6b, - 0x61, 0xd1, 0x0c, 0x19, - 0x0c, 0x39, 0xc0, 0x15, - 0xc0, 0x15, 0x62, 0x19, - 0x6d, 0x65, 0x0c, 0x05, - 0x89, 0x16, 0xc0, 0x0a, - 0x65, 0xb9, 0x0c, 0x19, - 0x11, 0x36, 0xc0, 0x2b, 0x3c, 0x0e, 0x87, 0x31, 0x8f, 0x16, 0x81, 0x01, 0x65, 0xb5, 0x0c, 0x19, @@ -19709,9 +19818,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x13, 0x06, 0xa7, 0x06, 0x8b, 0x1e, 0x8c, 0x0b, 0x97, 0x26, 0x95, 0x26, - 0x5f, 0x98, 0x99, 0x26, + 0x63, 0x38, 0x99, 0x26, 0x1e, 0x1b, 0xef, 0xfc, - 0x63, 0xb8, 0x8c, 0x0b, + 0x67, 0x58, 0x8c, 0x0b, 0xb0, 0xf1, 0xef, 0xfc, 0xf2, 0x00, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -19735,9 +19844,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xaf, 0x46, 0xad, 0x26, 0x95, 0x26, 0x93, 0x46, 0x99, 0x26, 0x97, 0x26, - 0xef, 0xfc, 0x5c, 0x68, + 0xef, 0xfc, 0x60, 0x08, 0x8c, 0x0b, 0x1e, 0x1b, - 0xef, 0xfc, 0x60, 0x88, + 0xef, 0xfc, 0x64, 0x28, 0x0c, 0x0c, 0xb0, 0xf1, 0xdd, 0x93, 0xf2, 0x00, 0xfa, 0x00, 0x04, 0x0c, @@ -19759,9 +19868,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xad, 0x26, 0x8c, 0x0b, 0x95, 0x26, 0xaf, 0x26, 0x99, 0x26, 0x97, 0x26, - 0xef, 0xfc, 0x59, 0x68, + 0xef, 0xfc, 0x5d, 0x08, 0x8c, 0x0b, 0x1e, 0x1b, - 0xef, 0xfc, 0x5d, 0x88, + 0xef, 0xfc, 0x61, 0x28, 0x0c, 0x0c, 0xb0, 0xf1, 0xdd, 0x93, 0xf2, 0x00, 0xfa, 0x0c, 0x04, 0x0c, @@ -19873,7 +19982,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x11, 0xa6, 0x40, 0x2b, 0x03, 0xa6, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xbc, 0x5c, 0xe8, + 0xef, 0xbc, 0x59, 0x88, 0x9a, 0x85, 0xa3, 0x0b, 0xe1, 0x2c, 0x54, 0xc6, 0x80, 0x08, 0xa8, 0x04, @@ -19885,7 +19994,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x11, 0xa6, 0x40, 0x2b, 0x03, 0xa6, 0xe0, 0x08, 0x8c, 0x0b, 0x60, 0x08, - 0xef, 0xbc, 0x5b, 0x68, + 0xef, 0xbc, 0x58, 0x08, 0x94, 0x85, 0xa3, 0x0b, 0xe4, 0x7d, 0x24, 0x04, 0x88, 0xd5, 0x80, 0x18, @@ -19925,7 +20034,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6c, 0x1d, 0x0c, 0x29, 0x11, 0xc6, 0x40, 0x2b, 0x03, 0xc6, 0xe0, 0x08, - 0x56, 0x58, 0xe0, 0x08, + 0x52, 0xf8, 0xe0, 0x08, 0x8c, 0x0b, 0x6f, 0xbc, 0x80, 0x45, 0xa3, 0x0b, 0x73, 0xd8, 0x81, 0x81, @@ -20023,7 +20132,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x0f, 0xa6, 0x60, 0x08, 0x03, 0xa6, - 0x4a, 0x18, 0x8c, 0x0b, + 0x46, 0xb8, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xbc, 0x28, 0x04, 0x8a, 0x45, 0xe0, 0x3c, 0x42, 0x86, @@ -20043,7 +20152,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x40, 0x2b, 0x6c, 0x1d, 0xe0, 0x08, 0x0f, 0xc6, 0x60, 0x08, 0x03, 0xc6, - 0x47, 0x98, 0x8c, 0x0b, + 0x44, 0x38, 0x8c, 0x0b, 0xa3, 0x0b, 0xef, 0xbc, 0x81, 0x71, 0x80, 0x45, 0xe8, 0x00, 0x65, 0x28, @@ -20220,7 +20329,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6f, 0xfc, 0x44, 0x68, 0x8c, 0x0b, 0x80, 0x6b, 0xf2, 0x00, 0x0c, 0x0c, - 0xff, 0xf0, 0x02, 0x88, + 0xff, 0xf0, 0x05, 0xe8, 0x00, 0x00, 0x5d, 0x93, 0xc0, 0x28, 0x65, 0x41, 0x00, 0x00, 0x5d, 0x93, @@ -20443,7 +20552,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x0c, 0x19, 0xc0, 0x2b, 0xc0, 0x2b, 0x65, 0x39, 0x65, 0x35, 0x0c, 0x09, - 0x4b, 0xd8, 0xc0, 0x2b, + 0x64, 0xb8, 0xc0, 0x2b, 0x00, 0x8b, 0xef, 0xa0, 0xe1, 0x04, 0x01, 0x46, 0x90, 0x2b, 0x00, 0x04, @@ -20451,29 +20560,29 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0xc0, 0x09, 0x6e, 0x0d, 0x65, 0x41, 0x0c, 0x39, 0x92, 0x0b, 0xc0, 0x2b, - 0x6f, 0xa0, 0x4b, 0xa8, + 0x6f, 0xa0, 0x64, 0x88, 0x4c, 0x05, 0x94, 0x1b, 0x40, 0x0b, 0x63, 0x6d, 0x0c, 0x39, 0x92, 0x0b, 0x40, 0x2b, 0x65, 0x49, - 0x4a, 0xf8, 0x94, 0x1b, + 0x63, 0xd8, 0x94, 0x1b, 0x90, 0x2b, 0x6f, 0xa0, 0x63, 0x65, 0x4c, 0x05, 0x92, 0x0b, 0x40, 0x0b, 0x65, 0x45, 0x0c, 0x39, 0x94, 0x1b, 0x40, 0x2b, - 0x6f, 0xa0, 0x4a, 0x48, + 0x6f, 0xa0, 0x63, 0x28, 0x4c, 0x05, 0x90, 0x2b, 0x40, 0x0b, 0x63, 0x71, 0x0c, 0x39, 0x92, 0x0b, 0x40, 0x2b, 0x65, 0x4d, - 0x49, 0x98, 0x94, 0x1b, + 0x62, 0x78, 0x94, 0x1b, 0x90, 0x2b, 0x6f, 0xa0, 0x6d, 0x59, 0x0c, 0x15, 0x91, 0x21, 0x40, 0x0a, 0x63, 0x69, 0x4c, 0x05, 0x02, 0x0b, 0xc0, 0x0b, - 0x46, 0x18, 0x94, 0x1b, + 0x5e, 0xf8, 0x94, 0x1b, 0x4c, 0x05, 0xef, 0xa0, 0x40, 0x06, 0x6d, 0x49, 0xe1, 0x1c, 0x02, 0x86, @@ -20559,7 +20668,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x80, 0xad, 0x05, 0x45, 0x05, 0x41, 0x00, 0x60, 0x80, 0x88, 0xc0, 0xad, - 0x6f, 0x9c, 0x75, 0x28, + 0x6f, 0xa0, 0x4e, 0x08, 0x02, 0x94, 0x90, 0x0b, 0x81, 0x41, 0x7a, 0x80, 0x61, 0x02, 0x46, 0x1a, @@ -20644,9 +20753,9 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x50, 0x01, 0xe0, 0x08, 0x40, 0x2b, 0x6c, 0x1d, 0x06, 0x7b, 0x88, 0xab, - 0x75, 0x38, 0x84, 0x9b, - 0x82, 0x0b, 0x6f, 0x9c, - 0x6f, 0x9c, 0x76, 0x88, + 0x4e, 0x18, 0x84, 0x9b, + 0x82, 0x0b, 0x6f, 0xa0, + 0x6f, 0xa0, 0x4f, 0x68, 0x21, 0x0b, 0x80, 0x6b, 0x02, 0x06, 0xff, 0x11, 0xa3, 0xab, 0x00, 0x00, @@ -20686,7 +20795,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x29, 0xc6, 0x2d, 0x40, 0x2b, 0x0c, 0x1d, 0xc0, 0x08, 0x42, 0x96, - 0xcf, 0xb4, 0x77, 0x48, + 0xcf, 0xb4, 0x73, 0xe8, 0x60, 0x01, 0x00, 0x06, 0x81, 0x31, 0x7d, 0x09, 0xe0, 0x1e, 0x40, 0x0a, @@ -20696,13 +20805,13 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x42, 0x22, 0xc7, 0xa1, 0x04, 0x0e, 0x72, 0x8c, 0xc0, 0x03, 0x74, 0x24, - 0x6f, 0x60, 0x44, 0xc8, + 0x6f, 0x5c, 0x74, 0x88, 0x0c, 0x4c, 0x81, 0x31, 0xdd, 0x93, 0xf2, 0x04, 0xfa, 0x00, 0x04, 0x0c, 0x6c, 0x01, 0x0c, 0x12, 0x81, 0x11, 0x40, 0x28, - 0x6f, 0x60, 0x6d, 0xe8, + 0x6f, 0x60, 0x5d, 0xa8, 0x8c, 0x0b, 0x8c, 0x2b, 0xf2, 0x00, 0x0c, 0x0c, 0xc1, 0xc3, 0xdd, 0x93, @@ -20715,7 +20824,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x45, 0x87, 0x1b, 0x60, 0x08, 0x03, 0x66, 0xe0, 0x08, 0x0d, 0x66, - 0xef, 0xb4, 0x73, 0xa8, + 0xef, 0xb4, 0x70, 0x48, 0x0c, 0x06, 0xa1, 0x0b, 0x8c, 0x0b, 0x80, 0x00, 0xf2, 0x00, 0x0c, 0x0c, @@ -20729,7 +20838,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x45, 0x87, 0x1b, 0x60, 0x08, 0x03, 0x76, 0xe0, 0x08, 0x0d, 0x76, - 0xef, 0xb4, 0x71, 0xe8, + 0xef, 0xb4, 0x6e, 0x88, 0x0c, 0x06, 0xa1, 0x0b, 0x8c, 0x0b, 0x80, 0x00, 0xf2, 0x00, 0x0c, 0x0c, @@ -20744,7 +20853,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x82, 0x45, 0x87, 0x1b, 0x60, 0x08, 0x03, 0x86, 0xe0, 0x08, 0x0d, 0x86, - 0xef, 0xb4, 0x70, 0x08, + 0xef, 0xb4, 0x6c, 0xa8, 0x0c, 0x06, 0xa1, 0x0b, 0x8c, 0x0b, 0x80, 0x00, 0xf2, 0x00, 0x0c, 0x0c, @@ -20758,7 +20867,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x87, 0x1b, 0x9e, 0x39, 0x03, 0x96, 0x82, 0x45, 0x0d, 0x96, 0x60, 0x08, - 0x6e, 0x38, 0xe0, 0x08, + 0x6a, 0xd8, 0xe0, 0x08, 0xa1, 0x0b, 0xef, 0xb4, 0x80, 0x00, 0x0c, 0x06, 0x0c, 0x0c, 0x8c, 0x0b, @@ -20824,7 +20933,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x60, 0xe0, 0x90, 0x40, 0x99, 0x06, 0xf1, 0xc0, 0x00, 0x02, 0x06, - 0x4f, 0x60, 0x5e, 0xa8, + 0x4f, 0x60, 0x4e, 0x68, 0xc0, 0x18, 0x04, 0x06, 0x15, 0x86, 0x0f, 0xbe, 0x01, 0x01, 0xe1, 0x00, @@ -20835,7 +20944,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x8c, 0x0b, 0x00, 0xb6, 0xef, 0xf8, 0x7b, 0xe8, 0x60, 0x3c, 0x42, 0x86, - 0x4b, 0x18, 0x8c, 0x0b, + 0x52, 0x78, 0x8c, 0x0b, 0x00, 0x7b, 0xef, 0xe0, 0x75, 0xb8, 0x8c, 0x0b, 0x0c, 0x09, 0xef, 0xf8, @@ -20846,10 +20955,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x84, 0x08, 0xc0, 0x26, 0x41, 0xf6, 0x82, 0x65, 0x81, 0x11, 0x60, 0x3c, - 0xef, 0x64, 0x5f, 0x68, + 0xef, 0x64, 0x4f, 0x28, 0x60, 0x0c, 0x43, 0x06, - 0x5e, 0xb8, 0x8c, 0x0b, - 0x51, 0xd8, 0xef, 0xc8, + 0x60, 0x78, 0x8c, 0x0b, + 0x59, 0x38, 0xef, 0xc8, 0x0c, 0x19, 0xef, 0xdc, 0xc0, 0x2b, 0x65, 0xb5, 0xe0, 0x90, 0x42, 0x0a, @@ -20880,10 +20989,10 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x66, 0xed, 0x4c, 0x21, 0x04, 0x06, 0xc0, 0x26, 0xe0, 0x3c, 0x41, 0xf6, - 0x6f, 0x64, 0x5b, 0x28, + 0x6f, 0x64, 0x4a, 0xe8, 0x43, 0x06, 0x81, 0x11, 0x8c, 0x0b, 0x60, 0x0c, - 0xef, 0xc8, 0x5a, 0x68, + 0xef, 0xc8, 0x5c, 0x28, 0x42, 0x0a, 0x85, 0x95, 0x44, 0x86, 0x60, 0x94, 0x08, 0x24, 0xe1, 0x00, @@ -20921,7 +21030,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x4c, 0x01, 0xe0, 0x00, 0x40, 0x2b, 0x6c, 0x1d, 0x69, 0x58, 0x8c, 0x0b, - 0x6a, 0xd8, 0xef, 0xf4, + 0x6e, 0x38, 0xef, 0xf4, 0x8c, 0x0b, 0x6f, 0xe8, 0x0c, 0x19, 0xa1, 0x0b, 0x80, 0x2c, 0x0d, 0x15, @@ -20977,7 +21086,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x83, 0x45, 0xfc, 0x15, 0x6c, 0x1d, 0x0c, 0x29, 0x42, 0x96, 0x40, 0x2b, - 0x52, 0xd8, 0xe0, 0x08, + 0x4f, 0x78, 0xe0, 0x08, 0x8c, 0x0b, 0x6f, 0xb4, 0xe0, 0x08, 0x4e, 0x96, 0x66, 0x71, 0x0c, 0x1b, @@ -20997,99 +21106,63 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x6e, 0x19, 0x40, 0x13, 0xdd, 0x93, 0xc0, 0x15, 0xf8, 0x7c, 0x04, 0x0c, - 0xec, 0xa0, 0x1e, 0xf0, + 0xec, 0x60, 0x1e, 0xf0, 0x6c, 0x41, 0x00, 0x69, - 0x87, 0x91, 0x40, 0x2b, - 0x6c, 0x49, 0x00, 0x29, - 0x8f, 0x31, 0x40, 0x2b, + 0x9f, 0x71, 0x40, 0x2b, + 0x6c, 0x49, 0x00, 0x39, + 0x81, 0x81, 0x40, 0x2b, 0x6c, 0x51, 0x00, 0x49, - 0x85, 0x81, 0x40, 0x2b, - 0x8d, 0x91, 0x13, 0x96, - 0x66, 0x9a, 0x42, 0x2a, - 0x15, 0x96, 0x8b, 0x71, - 0x42, 0x1a, 0x93, 0x91, - 0x89, 0xb1, 0x60, 0x12, - 0x99, 0x91, 0x17, 0x96, - 0xbe, 0x1e, 0xbd, 0x36, + 0x81, 0x91, 0x40, 0x2b, + 0x42, 0x3a, 0xaf, 0x76, + 0x42, 0x1a, 0xe6, 0x9a, + 0xbe, 0x1e, 0xe0, 0x12, 0x6c, 0x4d, 0x00, 0x19, - 0x1f, 0x36, 0xc0, 0x2b, - 0x5e, 0x91, 0x9b, 0x31, - 0x3c, 0x1e, 0xe0, 0x90, + 0x3c, 0x1e, 0xc0, 0x2b, 0x60, 0x31, 0x02, 0x0e, - 0x0d, 0x1e, 0xc2, 0x41, + 0x7c, 0x1e, 0xc2, 0x41, 0xe0, 0x40, 0x02, 0x16, - 0x6c, 0x45, 0x00, 0xa9, - 0x1d, 0x1c, 0xc0, 0x2b, - 0x19, 0x96, 0x95, 0x11, - 0x00, 0xc9, 0x83, 0x91, - 0x40, 0x2b, 0x6c, 0x55, - 0xbf, 0x16, 0xa9, 0xab, - 0x97, 0x11, 0x21, 0x16, - 0x91, 0x91, 0x1b, 0x96, - 0xe0, 0x80, 0x5e, 0x81, - 0x9f, 0x81, 0x25, 0x86, - 0xe0, 0x94, 0x5e, 0x31, - 0x9d, 0x31, 0x23, 0x36, - 0xe0, 0x8c, 0x5e, 0x11, - 0x81, 0x11, 0x2b, 0x16, - 0xe0, 0x84, 0x5e, 0x71, - 0xe0, 0x88, 0x5e, 0x91, - 0x12, 0x06, 0x29, 0x96, - 0x5e, 0x31, 0xc0, 0x00, - 0x5e, 0x81, 0xe0, 0x98, - 0x2f, 0x86, 0xe0, 0x9c, - 0xc0, 0x00, 0x10, 0x06, - 0x91, 0x16, 0xad, 0x36, - 0xa7, 0x76, 0x9d, 0xb6, - 0x01, 0x71, 0x92, 0x15, - 0x83, 0x95, 0x81, 0x91, - 0x64, 0x60, 0x0a, 0xf0, - 0x0a, 0x39, 0x82, 0xb1, - 0x80, 0x33, 0xfc, 0x0c, - 0x68, 0x81, 0x46, 0x71, - 0x82, 0x71, 0x40, 0x1b, - 0x6c, 0x41, 0x00, 0x69, - 0x0a, 0x64, 0xc0, 0x2b, - 0x06, 0xb4, 0x7a, 0x80, - 0x94, 0x53, 0xfa, 0x80, - 0xfa, 0xb5, 0xcb, 0x3d, - 0x6c, 0x45, 0x00, 0xb9, - 0x82, 0x91, 0x40, 0x2b, - 0xf4, 0x2c, 0x52, 0x8a, - 0xc0, 0x88, 0x06, 0x94, - 0x13, 0xf1, 0x54, 0x30, - 0x7a, 0xd5, 0xc0, 0x03, - 0xdc, 0x00, 0x56, 0xa0, - 0x6c, 0x81, 0x00, 0x39, - 0xa3, 0x3b, 0xc0, 0x2c, - 0xdf, 0xfc, 0x51, 0xee, - 0x68, 0xbd, 0x40, 0x81, - 0x85, 0x75, 0xc0, 0x1b, + 0x8f, 0x11, 0x0d, 0x1c, + 0x95, 0x11, 0x1d, 0x16, + 0x85, 0x11, 0x1f, 0x16, + 0x8b, 0x11, 0x21, 0x16, + 0x91, 0x11, 0x23, 0x16, + 0x97, 0x11, 0x25, 0x16, + 0x99, 0x11, 0x27, 0x16, + 0x9b, 0x11, 0x29, 0x16, + 0x9d, 0x11, 0x2b, 0x16, + 0x81, 0x11, 0x2d, 0x16, + 0x6c, 0x55, 0x00, 0xc9, + 0x83, 0x65, 0xc0, 0x2b, 0x64, 0x20, 0x0a, 0xf0, - 0x0a, 0x39, 0x82, 0xb1, - 0x80, 0x33, 0xfc, 0x0c, - 0x68, 0x81, 0x46, 0x81, + 0x0a, 0x29, 0x82, 0xb1, + 0x80, 0x23, 0xfc, 0x08, + 0x68, 0x81, 0x44, 0x81, 0x82, 0x81, 0x40, 0x1b, 0x6c, 0x41, 0x00, 0x69, 0x0a, 0x64, 0xc0, 0x2b, - 0x06, 0xb4, 0x7a, 0x80, + 0x04, 0xb4, 0x7a, 0x80, 0x94, 0x53, 0xfa, 0x80, - 0xfa, 0xb5, 0xcb, 0x3d, - 0x6c, 0x45, 0x00, 0xa9, - 0x82, 0x91, 0x40, 0x2b, - 0xf4, 0x28, 0x52, 0x8a, - 0xda, 0x80, 0x06, 0x94, - 0xc6, 0x9e, 0x54, 0x3a, - 0x56, 0xa0, 0x7a, 0xf5, - 0x47, 0xe6, 0xdc, 0x00, - 0x40, 0x31, 0xe0, 0x0c, - 0xc0, 0x1b, 0x68, 0xbd, - 0xbc, 0x54, 0xbe, 0x34, - 0xe0, 0x12, 0x44, 0x2a, - 0xfa, 0x80, 0x06, 0x34, + 0xfa, 0xb5, 0xcb, 0x2d, + 0x00, 0x29, 0x82, 0x91, + 0x40, 0x2b, 0x6c, 0x45, + 0xfa, 0x80, 0x14, 0x94, + 0x04, 0x94, 0xc5, 0xad, + 0x54, 0x20, 0xc0, 0x88, + 0xc0, 0x03, 0x13, 0xf1, + 0x56, 0xa0, 0x7a, 0xb5, + 0x00, 0x29, 0xdc, 0x00, + 0x40, 0x2c, 0x6c, 0x81, + 0xfa, 0x80, 0x18, 0xc4, + 0xe0, 0x12, 0x46, 0x3a, + 0xa3, 0x2b, 0x3c, 0x24, + 0xdf, 0xfc, 0x4f, 0xee, + 0x68, 0xbd, 0x40, 0x71, + 0x3e, 0x24, 0xc0, 0x1b, + 0xfa, 0x80, 0x0a, 0x24, 0x60, 0x32, 0x48, 0x5a, 0x64, 0x80, 0x0a, 0x00, - 0x87, 0x25, 0xc0, 0x6e, + 0x07, 0x45, 0xc0, 0x6e, + 0xfa, 0x80, 0x04, 0x24, 0x6e, 0x19, 0x00, 0xcb, 0x58, 0x0a, 0xc0, 0x15, 0x59, 0xe6, 0xe4, 0x84, @@ -21102,27 +21175,27 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x79, 0xc0, 0x2b, 0xc0, 0x2c, 0x6c, 0xe9, 0xe0, 0x1a, 0x50, 0xca, - 0xe0, 0x0a, 0x52, 0x7a, + 0xe0, 0x0e, 0x52, 0x7a, 0xe1, 0x1a, 0x58, 0xca, 0xe6, 0x92, 0x50, 0x8a, - 0xe1, 0x0a, 0x4c, 0x7a, + 0xe1, 0x0e, 0x4c, 0x7a, 0x58, 0xca, 0x10, 0x93, - 0x0e, 0x94, 0xe6, 0x8a, + 0x0e, 0x94, 0xe6, 0x8e, 0x50, 0x02, 0x7a, 0x80, 0x4e, 0x7a, 0xf0, 0x84, - 0x8c, 0xc3, 0x66, 0x8e, + 0x8c, 0xc3, 0x66, 0x8a, 0x64, 0x81, 0x0c, 0x80, 0x8e, 0xc3, 0xc0, 0x6e, 0x02, 0x11, 0x98, 0xc6, 0x02, 0x0a, 0x82, 0x51, 0xf2, 0xb5, 0xe0, 0x40, - 0x0c, 0x0c, 0xd0, 0xf1, + 0x0c, 0x0c, 0xb0, 0xf1, 0xdd, 0x93, 0xf0, 0x7c, 0x00, 0x00, 0x10, 0x14, - 0x00, 0x43, 0x49, 0x38, + 0x00, 0x43, 0x4a, 0xb0, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x1a, 0x24, - 0x00, 0x43, 0x53, 0x48, + 0x00, 0x43, 0x54, 0xc0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x19, 0x44, 0x00, 0x00, 0x00, 0x00, @@ -21439,7 +21512,7 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0xbb, 0x80, 0x00, 0x00, 0x1a, 0x48, - 0x00, 0x00, 0xfb, 0x78, + 0x00, 0x00, 0xfb, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -21467,100 +21540,6 @@ const uint8_t VL53L8CX_FIRMWARE[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, - 0xab, 0xcd, 0x33, 0x0e, - 0xe6, 0x6d, 0x12, 0x34, - 0x00, 0x05, 0xde, 0xec, - 0x00, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, }; @@ -21740,7 +21719,7 @@ const uint8_t VL53L8CX_DEFAULT_CONFIGURATION[] = { 0xB5, 0xF0, 0x00, 0x40, 0x00, 0xFF, 0x00, 0x00, 0xB3, 0x9C, 0x01, 0x00, - 0x40, 0x00, 0x05, 0x1E, + 0x34, 0x9B, 0x04, 0x35, 0x02, 0x1B, 0x08, 0x7C, 0x80, 0x00, 0x12, 0x01, 0x00, 0x01, 0x08, 0x00, @@ -22032,6 +22011,9 @@ const uint8_t VL53L8CX_GET_NVM_CMD[] = { 0x02, 0x02, 0x00, 0x24 }; -#endif /* VL53L8CX_BUFFERS_H_ */ +#ifdef __cplusplus +} +#endif +#endif /* VL53L8CX_BUFFERS_H_ */ diff --git a/src/vl53l8cx_class.h b/src/vl53l8cx_class.h deleted file mode 100644 index 7cb6e7a..0000000 --- a/src/vl53l8cx_class.h +++ /dev/null @@ -1,834 +0,0 @@ -/** - ****************************************************************************** - * @file vl53l8cx_class.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Abstract Class for VL53L8CX sensor. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -#ifndef __VL53L8CX_CLASS_H -#define __VL53L8CX_CLASS_H - -/* Includes ------------------------------------------------------------------*/ -#include "Arduino.h" -#include "platform.h" -#include "vl53l8cx_api.h" -#include "vl53l8cx_plugin_detection_thresholds.h" -#include "vl53l8cx_plugin_motion_indicator.h" -#include "vl53l8cx_plugin_xtalk.h" - - - - -/* Classes -------------------------------------------------------------------*/ -/** Class representing a VL53LX sensor component - */ - -class VL53L8CX { - public: - /** Constructor - * @param[in] i2c device I2C to be used for communication - * @param[in] lpn_pin pin to be used as component LPn - * @param[in] i2c_rst_pin pin to be used as component I2C_RST - */ - VL53L8CX(TwoWire *i2c, int lpn_pin, int i2c_rst_pin = -1) - { - memset((void *)&_dev, 0x0, sizeof(VL53L8CX_Configuration)); - _dev.platform.address = VL53L8CX_DEFAULT_I2C_ADDRESS; - _dev.platform.dev_i2c = i2c; - _dev.platform.dev_spi = NULL; - _dev.platform.lpn_pin = lpn_pin; - _dev.platform.i2c_rst_pin = i2c_rst_pin; - p_dev = &_dev; - } - - /** Constructor - * @param spi object of an helper class which handles the SPI peripheral - * @param cs_pin the chip select pin - * @param spi_speed the SPI speed - * @param[in] lpn_pin pin to be used as component LPn - * @param[in] i2c_rst_pin pin to be used as component I2C_RST - */ - VL53L8CX(SPIClass *spi, int cs_pin, int lpn_pin = -1, uint32_t spi_speed = 2000000, int i2c_rst_pin = -1) - { - memset((void *)&_dev, 0x0, sizeof(VL53L8CX_Configuration)); - _dev.platform.address = VL53L8CX_DEFAULT_I2C_ADDRESS; - _dev.platform.dev_i2c = NULL; - _dev.platform.dev_spi = spi; - _dev.platform.cs_pin = cs_pin; - _dev.platform.spi_speed = spi_speed ; - _dev.platform.lpn_pin = lpn_pin; - _dev.platform.i2c_rst_pin = i2c_rst_pin; - p_dev = &_dev; - } - - - /** Destructor - */ - virtual ~VL53L8CX() {} - /* warning: VL53LX class inherits from GenericSensor, RangeSensor and LightSensor, that haven`t a destructor. - The warning should request to introduce a virtual destructor to make sure to delete the object */ - - virtual int begin() - { - if (_dev.platform.lpn_pin >= 0) { - pinMode(_dev.platform.lpn_pin, OUTPUT); - digitalWrite(_dev.platform.lpn_pin, LOW); - } - if (_dev.platform.i2c_rst_pin >= 0) { - pinMode(_dev.platform.i2c_rst_pin, OUTPUT); - if (_dev.platform.dev_i2c) { - digitalWrite(_dev.platform.i2c_rst_pin, LOW); - } - if (_dev.platform.dev_spi) { - digitalWrite(_dev.platform.i2c_rst_pin, HIGH); - } - } - - if (_dev.platform.dev_spi) { - // Configure CS pin - pinMode(_dev.platform.cs_pin, OUTPUT); - digitalWrite(_dev.platform.cs_pin, HIGH); - } - return 0; - } - - virtual int end() - { - if (_dev.platform.lpn_pin >= 0) { - pinMode(_dev.platform.lpn_pin, INPUT); - } - if (_dev.platform.i2c_rst_pin >= 0) { - pinMode(_dev.platform.i2c_rst_pin, INPUT); - } - /* Reset CS configuration */ - if (_dev.platform.dev_spi) { - // Configure CS pin - pinMode(_dev.platform.cs_pin, INPUT); - } - return 0; - } - - /*** Interface Methods ***/ - /*** High level API ***/ - /** - * @brief PowerOn the sensor - * @return void - */ - virtual void vl53l8cx_on(void) - { - if (_dev.platform.lpn_pin >= 0) { - digitalWrite(_dev.platform.lpn_pin, HIGH); - } - delay(10); - } - - /** - * @brief PowerOff the sensor - * @return void - */ - virtual void vl53l8cx_off(void) - { - if (_dev.platform.lpn_pin >= 0) { - digitalWrite(_dev.platform.lpn_pin, LOW); - } - delay(10); - } - - /** - * @brief Reset I2C peripheral of the sensor - * @return void - */ - virtual void vl53l8cx_i2c_reset(void) - { - if (_dev.platform.dev_i2c && _dev.platform.i2c_rst_pin >= 0) { - digitalWrite(_dev.platform.i2c_rst_pin, LOW); - delay(10); - digitalWrite(_dev.platform.i2c_rst_pin, HIGH); - delay(10); - digitalWrite(_dev.platform.i2c_rst_pin, LOW); - delay(10); - } - } - - /** - * @brief Initialize the sensor - * @param (uint8_t) addr : New I2C address. - * @return (uint8_t) status : 0 if init_sensor is OK. - */ - int init_sensor(uint8_t addr = VL53L8CX_DEFAULT_I2C_ADDRESS) - { - uint8_t status = VL53L8CX_STATUS_OK; - uint8_t isAlive = 0; - - // Reset the sensor by toggling the LPN pin - vl53l8cx_off(); - vl53l8cx_on(); - if (_dev.platform.dev_i2c && (addr != _dev.platform.address)) { - status = vl53l8cx_set_i2c_address(addr); - if (status != VL53L8CX_STATUS_OK) { - return VL53L8CX_STATUS_ERROR; - } - } - - status = vl53l8cx_is_alive(&isAlive); - - - if (!isAlive || status != VL53L8CX_STATUS_OK) { - return VL53L8CX_STATUS_ERROR; - } - - // Init VL53L8CX sensor - status = vl53l8cx_init(); - if (status != VL53L8CX_STATUS_OK) { - ; - return VL53L8CX_STATUS_ERROR; - } - - return (int)status; - } - - - /* vl53l8cx_api.h */ - /** - * @brief This function is used to check if the sensor is alive. - * @param (uint8_t) *p_is_alive : 1 if the sensor is alive, 0 in case of error. - * @return (uint8_t) status : 0 if is_alive is OK. - */ - uint8_t vl53l8cx_is_alive( - uint8_t *p_is_alive); - - /** - * @brief Mandatory function used to initialize the sensor. This function must - * be called after a power on, to load the firmware into the VL53L8CX. It takes - * a few hundred milliseconds. - * @return (uint8_t) status : 0 if initialization is OK. - */ - - uint8_t vl53l8cx_init(); - - /** - * @brief This function is used to change the I2C address of the sensor. If - * multiple VL53L7 sensors are connected to the same I2C line, all other LPn - * pins needs to be set to Low. The default sensor address is 0x52. - * @param (uint16_t) i2c_address : New I2C address. - * @return (uint8_t) status : 0 if new address is OK - */ - - uint8_t vl53l8cx_set_i2c_address( - uint16_t i2c_address); - - /** - * @brief This function is used to get the current sensor power mode. - * @param (uint8_t) *p_power_mode : Current power mode. The value of this - * pointer is equal to 0 if the sensor is in low power, - * (VL53L8CX_POWER_MODE_SLEEP), or 1 if sensor is in standard mode - * (VL53L8CX_POWER_MODE_WAKEUP). - * @return (uint8_t) status : 0 if power mode is OK - */ - - uint8_t vl53l8cx_get_power_mode( - uint8_t *p_power_mode); - - /** - * @brief This function is used to set the sensor in Low Power mode, for - * example if the sensor is not used during a long time. The macro - * VL53L8CX_POWER_MODE_SLEEP can be used to enable the low power mode. When user - * want to restart the sensor, he can use macro VL53L8CX_POWER_MODE_WAKEUP. - * Please ensure that the device is not streaming before calling the function. - * @param (uint8_t) power_mode : Selected power mode (VL53L8CX_POWER_MODE_SLEEP - * or VL53L8CX_POWER_MODE_WAKEUP) - * @return (uint8_t) status : 0 if power mode is OK, or 127 if power mode - * requested by user is not valid. - */ - - uint8_t vl53l8cx_set_power_mode( - uint8_t power_mode); - - /** - * @brief This function starts a ranging session. When the sensor streams, host - * cannot change settings 'on-the-fly'. - * @return (uint8_t) status : 0 if start is OK. - */ - - uint8_t vl53l8cx_start_ranging(); - - /** - * @brief This function stops the ranging session. It must be used when the - * sensor streams, after calling vl53l8cx_start_ranging(). - * @return (uint8_t) status : 0 if stop is OK - */ - - uint8_t vl53l8cx_stop_ranging(); - - /** - * @brief This function checks if a new data is ready by polling I2C. If a new - * data is ready, a flag will be raised. - * @param (uint8_t) *p_isReady : Value of this pointer be updated to 0 if data - * is not ready, or 1 if a new data is ready. - * @return (uint8_t) status : 0 if I2C reading is OK - */ - - uint8_t vl53l8cx_check_data_ready( - uint8_t *p_isReady); - - /** - * @brief This function gets the ranging data, using the selected output and the - * resolution. - * @param (VL53L8CX_ResultsData) *p_results : VL53L7 results structure. - * @return (uint8_t) status : 0 data are successfully get. - */ - - uint8_t vl53l8cx_get_ranging_data( - VL53L8CX_ResultsData *p_results); - - /** - * @brief This function gets the current resolution (4x4 or 8x8). - * @param (uint8_t) *p_resolution : Value of this pointer will be equal to 16 - * for 4x4 mode, and 64 for 8x8 mode. - * @return (uint8_t) status : 0 if resolution is OK. - */ - - uint8_t vl53l8cx_get_resolution( - uint8_t *p_resolution); - - /** - * @brief This function sets a new resolution (4x4 or 8x8). - * @param (uint8_t) resolution : Use macro VL53L8CX_RESOLUTION_4X4 or - * VL53L8CX_RESOLUTION_8X8 to set the resolution. - * @return (uint8_t) status : 0 if set resolution is OK. - */ - - uint8_t vl53l8cx_set_resolution( - uint8_t resolution); - - /** - * @brief This function gets the current ranging frequency in Hz. Ranging - * frequency corresponds to the time between each measurement. - * @param (uint8_t) *p_frequency_hz: Contains the ranging frequency in Hz. - * @return (uint8_t) status : 0 if ranging frequency is OK. - */ - - uint8_t vl53l8cx_get_ranging_frequency_hz( - uint8_t *p_frequency_hz); - - /** - * @brief This function sets a new ranging frequency in Hz. Ranging frequency - * corresponds to the measurements frequency. This setting depends of - * the resolution, so please select your resolution before using this function. - * @param (uint8_t) frequency_hz : Contains the ranging frequency in Hz. - * - For 4x4, min and max allowed values are : [1;60] - * - For 8x8, min and max allowed values are : [1;15] - * @return (uint8_t) status : 0 if ranging frequency is OK, or 127 if the value - * is not correct. - */ - - uint8_t vl53l8cx_set_ranging_frequency_hz( - uint8_t frequency_hz); - - /** - * @brief This function gets the current integration time in ms. - * @param (uint32_t) *p_time_ms: Contains integration time in ms. - * @return (uint8_t) status : 0 if integration time is OK. - */ - - uint8_t vl53l8cx_get_integration_time_ms( - uint32_t *p_time_ms); - - /** - * @brief This function sets a new integration time in ms. Integration time must - * be computed to be lower than the ranging period, for a selected resolution. - * Please note that this function has no impact on ranging mode continuous. - * @param (uint32_t) time_ms : Contains the integration time in ms. For all - * resolutions and frequency, the minimum value is 2ms, and the maximum is - * 1000ms. - * @return (uint8_t) status : 0 if set integration time is OK. - */ - - uint8_t vl53l8cx_set_integration_time_ms( - uint32_t integration_time_ms); - - /** - * @brief This function gets the current sharpener in percent. Sharpener can be - * changed to blur more or less zones depending of the application. - * @param (uint32_t) *p_sharpener_percent: Contains the sharpener in percent. - * @return (uint8_t) status : 0 if get sharpener is OK. - */ - - uint8_t vl53l8cx_get_sharpener_percent( - uint8_t *p_sharpener_percent); - - /** - * @brief This function sets a new sharpener value in percent. Sharpener can be - * changed to blur more or less zones depending of the application. Min value is - * 0 (disabled), and max is 99. - * @param (uint32_t) sharpener_percent : Value between 0 (disabled) and 99%. - * @return (uint8_t) status : 0 if set sharpener is OK. - */ - - uint8_t vl53l8cx_set_sharpener_percent( - uint8_t sharpener_percent); - - /** - * @brief This function gets the current target order (closest or strongest). - * @param (uint8_t) *p_target_order: Contains the target order. - * @return (uint8_t) status : 0 if get target order is OK. - */ - - uint8_t vl53l8cx_get_target_order( - uint8_t *p_target_order); - - /** - * @brief This function sets a new target order. Please use macros - * VL53L8CX_TARGET_ORDER_STRONGEST and VL53L8CX_TARGET_ORDER_CLOSEST to define - * the new output order. By default, the sensor is configured with the strongest - * output. - * @param (uint8_t) target_order : Required target order. - * @return (uint8_t) status : 0 if set target order is OK, or 127 if target - * order is unknown. - */ - - uint8_t vl53l8cx_set_target_order( - uint8_t target_order); - - /** - * @brief This function is used to get the ranging mode. Two modes are - * available using ULD : Continuous and autonomous. The default - * mode is Autonomous. - * @param (uint8_t) *p_ranging_mode : current ranging mode - * @return (uint8_t) status : 0 if get ranging mode is OK. - */ - - uint8_t vl53l8cx_get_ranging_mode( - uint8_t *p_ranging_mode); - - /** - * @brief This function is used to set the ranging mode. Two modes are - * available using ULD : Continuous and autonomous. The default - * mode is Autonomous. - * @param (uint8_t) ranging_mode : Use macros VL53L8CX_RANGING_MODE_CONTINUOUS, - * VL53L8CX_RANGING_MODE_CONTINUOUS. - * @return (uint8_t) status : 0 if set ranging mode is OK. - */ - - uint8_t vl53l8cx_set_ranging_mode( - uint8_t ranging_mode); - - - /** - * @brief This function is used to enable or disable the synchronization pin. When - * it is enabled, the sensor waits an interrupt on B1 pin to start the next - * measurement. It is useful for multi-devices synchronization. By default the sync - * pin is disabled. - * @param (uint8_t) enable_sync_pin : Ste the value to 1 to enable the sync - * pin, or 0 to disable it. - * @return (uint8_t) status : 0 if set sync pin OK. - */ - uint8_t vl53l8cx_set_external_sync_pin_enable( - uint8_t enable_sync_pin); - - /** - * @brief This function is used to check if the synchronization pin is enabled - * or disabled. When it is enabled, the sensor waits an interrupt on B1 pin - * to start the next measurement. It is useful for multi-devices - * synchronization. By default the sync pin is disabled. - * @param (uint8_t*) p_is_sync_pin_enabled : Pointer of sync pin status. Value - * overridden to 0 if the pin is disabled, or 1 if the pin is enabled. - * @return (uint8_t) status : 0 if get sync pin OK. - */ - uint8_t vl53l8cx_get_external_sync_pin_enable( - uint8_t *p_is_sync_pin_enabled); - - /** - * @brief This function can be used to read 'extra data' from DCI. Using a known - * index, the function fills the casted structure passed in argument. - * @param (uint8_t) *data : This field can be a casted structure, or a simple - * array. Please note that the FW only accept data of 32 bits. So field data can - * only have a size of 32, 64, 96, 128, bits .... - * @param (uint32_t) index : Index of required value. - * @param (uint16_t)*data_size : This field must be the structure or array size - * (using sizeof() function). - * @return (uint8_t) status : 0 if OK - */ - - uint8_t vl53l8cx_dci_read_data( - uint8_t *data, - uint32_t index, - uint16_t data_size); - - /** - * @brief This function can be used to write 'extra data' to DCI. The data can - * be simple data, or casted structure. - * @param (uint8_t) *data : This field can be a casted structure, or a simple - * array. Please note that the FW only accept data of 32 bits. So field data can - * only have a size of 32, 64, 96, 128, bits .. - * @param (uint32_t) index : Index of required value. - * @param (uint16_t)*data_size : This field must be the structure or array size - * (using sizeof() function). - * @return (uint8_t) status : 0 if OK - */ - - uint8_t vl53l8cx_dci_write_data( - uint8_t *data, - uint32_t index, - uint16_t data_size); - - /** - * @brief This function can be used to replace 'extra data' in DCI. The data can - * be simple data, or casted structure. - * @param (uint8_t) *data : This field can be a casted structure, or a simple - * array. Please note that the FW only accept data of 32 bits. So field data can - * only have a size of 32, 64, 96, 128, bits .. - * @param (uint32_t) index : Index of required value. - * @param (uint16_t)*data_size : This field must be the structure or array size - * (using sizeof() function). - * @param (uint8_t) *new_data : Contains the new fields. - * @param (uint16_t) new_data_size : New data size. - * @param (uint16_t) new_data_pos : New data position into the buffer. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t vl53l8cx_dci_replace_data( - uint8_t *data, - uint32_t index, - uint16_t data_size, - uint8_t *new_data, - uint16_t new_data_size, - uint16_t new_data_pos); - - - /* Thresholds Detection APIs */ - - /** - * @brief This function allows indicating if the detection thresholds are - * enabled. - * @param (uint8_t) *p_enabled : Set to 1 if enabled, or 0 if disable. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t vl53l8cx_get_detection_thresholds_enable( - uint8_t *p_enabled); - - /** - * @brief This function allows enable the detection thresholds. - * @param (uint8_t) enabled : Set to 1 to enable, or 0 to disable thresholds. - * @return (uint8_t) status : 0 if programming is OK - */ - - uint8_t vl53l8cx_set_detection_thresholds_enable( - uint8_t enabled); - - /** - * @brief This function allows getting the detection thresholds. - * @param (VL53L8CX_DetectionThresholds) *p_thresholds : Array of 64 thresholds. - * @return (uint8_t) status : 0 if programming is OK - */ - - uint8_t vl53l8cx_get_detection_thresholds( - VL53L8CX_DetectionThresholds *p_thresholds); - - /** - * @brief This function allows programming the detection thresholds. - * @param (VL53L8CX_DetectionThresholds) *p_thresholds : Array of 64 thresholds. - * @return (uint8_t) status : 0 if programming is OK - */ - - uint8_t vl53l8cx_set_detection_thresholds( - VL53L8CX_DetectionThresholds *p_thresholds); - - uint8_t vl53l8cx_get_detection_thresholds_auto_stop( - uint8_t *p_auto_stop); - - uint8_t vl53l8cx_set_detection_thresholds_auto_stop( - uint8_t p_auto_stop); - - /* Motion Indicator APIs */ - - /** - * @brief This function is used to initialized the motion indicator. By default, - * indicator is programmed to monitor movements between 400mm and 1500mm. - * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure - * containing the initialized motion configuration. - * @param (uint8_t) resolution : Wanted resolution, defined by macros - * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. - * @return (uint8_t) status : 0 if OK, or 127 is the resolution is unknown. - */ - - uint8_t vl53l8cx_motion_indicator_init( - VL53L8CX_Motion_Configuration *p_motion_config, - uint8_t resolution); - - /** - * @brief This function can be used to change the working distance of motion - * indicator. By default, indicator is programmed to monitor movements between - * 400mm and 1500mm. - * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure - * containing the initialized motion configuration. - * @param (uint16_t) distance_min_mm : Minimum distance for indicator (min value - * 400mm, max 4000mm). - * @param (uint16_t) distance_max_mm : Maximum distance for indicator (min value - * 400mm, max 4000mm). - * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. - * @return (uint8_t) status : 0 if OK, or 127 if an argument is invalid. - */ - - uint8_t vl53l8cx_motion_indicator_set_distance_motion( - VL53L8CX_Motion_Configuration *p_motion_config, - uint16_t distance_min_mm, - uint16_t distance_max_mm); - - /** - * @brief This function is used to update the internal motion indicator map. - * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure - * containing the initialized motion configuration. - * @param (uint8_t) resolution : Wanted SCI resolution, defined by macros - * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. - * @return (uint8_t) status : 0 if OK, or 127 is the resolution is unknown. - */ - - uint8_t vl53l8cx_motion_indicator_set_resolution( - VL53L8CX_Motion_Configuration *p_motion_config, - uint8_t resolution); - - /* XTalk APIs */ - - /** - * @brief This function starts the VL53L8CX sensor in order to calibrate Xtalk. - * This calibration is recommended is user wants to use a coverglass. - * @param (uint16_t) reflectance_percent : Target reflectance in percent. This - * value is include between 1 and 99%. For a better efficiency, ST recommends a - * 3% target reflectance. - * @param (uint8_t) nb_samples : Nb of samples used for calibration. A higher - * number of samples means a higher accuracy, but it increases the calibration - * time. Minimum is 1 and maximum is 16. - * @param (uint16_t) distance_mm : Target distance in mm. The minimum allowed - * distance is 600mm, and maximum is 3000mm. The target must stay in Full FOV, - * so short distance are easier for calibration. - * @return (uint8_t) status : 0 if calibration OK, 127 if an argument has an - * incorrect value, or 255 is something failed. - */ - - uint8_t vl53l8cx_calibrate_xtalk( - uint16_t reflectance_percent, - uint8_t nb_samples, - uint16_t distance_mm); - - /** - * @brief This function gets the Xtalk buffer. The buffer is available after - * using the function vl53l8cx_calibrate_xtalk(). - * @param (uint8_t) *p_xtalk_data : Buffer with a size defined by - * macro VL53L8CX_XTALK_SIZE. - * @return (uint8_t) status : 0 if buffer reading OK - */ - - uint8_t vl53l8cx_get_caldata_xtalk( - uint8_t *p_xtalk_data); - - /** - * @brief This function sets the Xtalk buffer. This function can be used to - * override default Xtalk buffer. - * @param (uint8_t) *p_xtalk_data : Buffer with a size defined by - * macro VL53L8CX_XTALK_SIZE. - * @return (uint8_t) status : 0 if buffer OK - */ - - uint8_t vl53l8cx_set_caldata_xtalk( - uint8_t *p_xtalk_data); - - /** - * @brief This function gets the Xtalk margin. This margin is used to increase - * the Xtalk threshold. It can also be used to avoid false positives after the - * Xtalk calibration. The default value is 50 kcps/spads. - * @param (uint32_t) *p_xtalk_margin : Xtalk margin in kcps/spads. - * @return (uint8_t) status : 0 if reading OK - */ - - uint8_t vl53l8cx_get_xtalk_margin( - uint32_t *p_xtalk_margin); - - /** - * @brief This function sets the Xtalk margin. This margin is used to increase - * the Xtalk threshold. It can also be used to avoid false positives after the - * Xtalk calibration. The default value is 50 kcps/spads. - * @param (uint32_t) xtalk_margin : New Xtalk margin in kcps/spads. Min value is - * 0 kcps/spads, and max is 10.000 kcps/spads - * @return (uint8_t) status : 0 if set margin is OK, or 127 is the margin is - * invalid. - */ - - uint8_t vl53l8cx_set_xtalk_margin( - uint32_t xtalk_margin); - - /** - * @brief Mandatory function, used to swap a buffer. The buffer size is always a - * multiple of 4 (4, 8, 12, 16, ...). - * @param (uint8_t*) buffer : Buffer to swap, generally uint32_t - * @param (uint16_t) size : Buffer size to swap - */ - - void SwapBuffer( - uint8_t *buffer, - uint16_t size); - - /* Helpful APIs */ - uint8_t get_stream_count(void) - { - return _dev.streamcount; - }; - - protected: - - /** - * @brief Inner function, not available outside this file. This function is used - * to wait for an answer from VL53L8CX sensor. - */ - uint8_t _vl53l8cx_poll_for_answer( - uint8_t size, - uint8_t pos, - uint16_t address, - uint8_t mask, - uint8_t expected_value); - /** - * @brief Inner function, not available outside this file. This function is used to - * wait for the MCU to boot. - */ - uint8_t _vl53l8cx_poll_for_mcu_boot(); - /** - * @brief Inner function, not available outside this file. This function is used - * to set the offset data gathered from NVM. - */ - uint8_t _vl53l8cx_send_offset_data( - uint8_t resolution); - - /** - * @brief Inner function, not available outside this file. This function is used - * to set the Xtalk data from generic configuration, or user's calibration. - */ - uint8_t _vl53l8cx_send_xtalk_data( - uint8_t resolution); - - /** - * @brief Inner function, not available outside this file. This function is used to - * wait for an answer from VL53L7 sensor. - */ - uint8_t _vl53l8cx_poll_for_answer_xtalk( - uint16_t address, - uint8_t expected_value); - - /** - * @brief Inner function, not available outside this file. This function is used to - * program the output using the macro defined into the 'platform.h' file. - */ - uint8_t _vl53l8cx_program_output_config(); - - /* Platform APIs */ - - /** - * @param (VL53L8CX_Platform*) p_platform : Pointer of VL53L8CX platform - * structure. - * @param (uint16_t) Address : I2C location of value to read. - * @param (uint8_t) *p_values : Pointer of value to read. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t RdByte( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_value); - - /** - * @brief Mandatory function used to write one single byte. - * @param (VL53L8CX_Platform*) p_platform : Pointer of VL53L8CX platform - * structure. - * @param (uint16_t) Address : I2C location of value to read. - * @param (uint8_t) value : Pointer of value to write. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t WrByte( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t value); - - /** - * @brief Mandatory function used to read multiples bytes. - * @param (VL53L8CX_Platform*) p_platform : Pointer of VL53L8CX platform - * structure. - * @param (uint16_t) Address : I2C location of values to read. - * @param (uint8_t) *p_values : Buffer of bytes to read. - * @param (uint32_t) size : Size of *p_values buffer. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t RdMulti( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_values, - uint32_t size); - - /** - * @brief Mandatory function used to write multiples bytes. - * @param (VL53L8CX_Platform*) p_platform : Pointer of VL53L8CX platform - * structure. - * @param (uint16_t) Address : I2C location of values to write. - * @param (uint8_t) *p_values : Buffer of bytes to write. - * @param (uint32_t) size : Size of *p_values buffer. - * @return (uint8_t) status : 0 if OK - */ - - uint8_t WrMulti( - VL53L8CX_Platform *p_platform, - uint16_t RegisterAddress, - uint8_t *p_values, - uint32_t size); - - /** - * @brief Mandatory function, used to wait during an amount of time. It must be - * filled as it's used into the API. - * @param (VL53L8CX_Platform*) p_platform : Pointer of VL53L8CX platform - * structure. - * @param (uint32_t) TimeMs : Time to wait in ms. - * @return (uint8_t) status : 0 if wait is finished. - */ - - uint8_t WaitMs( - VL53L8CX_Platform *p_platform, - uint32_t TimeMs); - - protected: - - /* VL53L8CX Device */ - VL53L8CX_Configuration _dev; - VL53L8CX_Configuration *p_dev; -}; - -#endif /* __VL53L8CX_CLASS_H */ diff --git a/src/vl53l8cx_plugin_detection_thresholds.cpp b/src/vl53l8cx_plugin_detection_thresholds.c similarity index 60% rename from src/vl53l8cx_plugin_detection_thresholds.cpp rename to src/vl53l8cx_plugin_detection_thresholds.c index e48eb89..fd7029f 100644 --- a/src/vl53l8cx_plugin_detection_thresholds.cpp +++ b/src/vl53l8cx_plugin_detection_thresholds.c @@ -1,55 +1,32 @@ /** - ****************************************************************************** - * @file vl53l8cx_plugin_detection_thresholds.cpp - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Implementation of the VL53L8CX APIs for thresholds detection. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -#include "vl53l8cx_class.h" - -uint8_t VL53L8CX::vl53l8cx_get_detection_thresholds_enable( + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +#include "vl53l8cx_plugin_detection_thresholds.h" + +uint8_t vl53l8cx_get_detection_thresholds_enable( + VL53L8CX_Configuration *p_dev, uint8_t *p_enabled) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_DET_THRESH_GLOBAL_CONFIG, 8); *p_enabled = p_dev->temp_buffer[0x1]; return status; } -uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds_enable( +uint8_t vl53l8cx_set_detection_thresholds_enable( + VL53L8CX_Configuration *p_dev, uint8_t enabled) { uint8_t tmp, status = VL53L8CX_STATUS_OK; @@ -64,25 +41,26 @@ uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds_enable( } /* Set global interrupt config */ - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_DET_THRESH_GLOBAL_CONFIG, 8, (uint8_t *)&grp_global_config, 4, 0x00); /* Update interrupt config */ - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_DET_THRESH_CONFIG, 20, (uint8_t *)&tmp, 1, 0x11); return status; } -uint8_t VL53L8CX::vl53l8cx_get_detection_thresholds( +uint8_t vl53l8cx_get_detection_thresholds( + VL53L8CX_Configuration *p_dev, VL53L8CX_DetectionThresholds *p_thresholds) { uint8_t i, status = VL53L8CX_STATUS_OK; /* Get thresholds configuration */ - status |= vl53l8cx_dci_read_data((uint8_t *)p_thresholds, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_thresholds, VL53L8CX_DCI_DET_THRESH_START, (uint16_t)VL53L8CX_NB_THRESHOLDS * (uint16_t)sizeof(VL53L8CX_DetectionThresholds)); @@ -121,7 +99,8 @@ uint8_t VL53L8CX::vl53l8cx_get_detection_thresholds( return status; } -uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds( +uint8_t vl53l8cx_set_detection_thresholds( + VL53L8CX_Configuration *p_dev, VL53L8CX_DetectionThresholds *p_thresholds) { uint8_t i, status = VL53L8CX_STATUS_OK; @@ -161,12 +140,12 @@ uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds( } /* Set valid target list */ - status |= vl53l8cx_dci_write_data((uint8_t *)grp_valid_target_cfg, + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *)grp_valid_target_cfg, VL53L8CX_DCI_DET_THRESH_VALID_STATUS, (uint16_t)sizeof(grp_valid_target_cfg)); /* Set thresholds configuration */ - status |= vl53l8cx_dci_write_data((uint8_t *)p_thresholds, + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *)p_thresholds, VL53L8CX_DCI_DET_THRESH_START, (uint16_t)(VL53L8CX_NB_THRESHOLDS * sizeof(VL53L8CX_DetectionThresholds))); @@ -174,27 +153,29 @@ uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds( return status; } -uint8_t VL53L8CX::vl53l8cx_get_detection_thresholds_auto_stop( +uint8_t vl53l8cx_get_detection_thresholds_auto_stop( + VL53L8CX_Configuration *p_dev, uint8_t *p_auto_stop) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_PIPE_CONTROL, 4); *p_auto_stop = p_dev->temp_buffer[0x3]; return status; } -uint8_t VL53L8CX::vl53l8cx_set_detection_thresholds_auto_stop( +uint8_t vl53l8cx_set_detection_thresholds_auto_stop( + VL53L8CX_Configuration *p_dev, uint8_t auto_stop) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_PIPE_CONTROL, 4, (uint8_t *)&auto_stop, 1, 0x03); + p_dev->is_auto_stop_enabled = (uint8_t)auto_stop; return status; } - diff --git a/src/vl53l8cx_plugin_detection_thresholds.h b/src/vl53l8cx_plugin_detection_thresholds.h index 55a36b6..55467c4 100644 --- a/src/vl53l8cx_plugin_detection_thresholds.h +++ b/src/vl53l8cx_plugin_detection_thresholds.h @@ -1,44 +1,23 @@ /** - ****************************************************************************** - * @file vl53l8cx_plugin_detection_thresholds.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Header file for the VL53L8CX thresholds detection structures. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #ifndef VL53L8CX_PLUGIN_DETECTION_THRESHOLDS_H_ #define VL53L8CX_PLUGIN_DETECTION_THRESHOLDS_H_ -#include "vl53l8cx_class.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include "vl53l8cx_api.h" /** * @brief Macro VL53L8CX_NB_THRESHOLDS indicates the number of checkers. This @@ -52,9 +31,9 @@ */ #define VL53L8CX_DCI_DET_THRESH_CONFIG ((uint16_t)0x5488U) -#define VL53L8CX_DCI_DET_THRESH_GLOBAL_CONFIG ((uint16_t)0xB6E0U) +#define VL53L8CX_DCI_DET_THRESH_GLOBAL_CONFIG ((uint16_t)0xB6E0U) #define VL53L8CX_DCI_DET_THRESH_START ((uint16_t)0xB6E8U) -#define VL53L8CX_DCI_DET_THRESH_VALID_STATUS ((uint16_t)0xB9F0U) +#define VL53L8CX_DCI_DET_THRESH_VALID_STATUS ((uint16_t)0xB9F0U) /** * @brief Macro VL53L8CX_LAST_THRESHOLD is used to indicate the end of checkers @@ -69,13 +48,13 @@ */ #define VL53L8CX_DISTANCE_MM ((uint8_t)1U) -#define VL53L8CX_SIGNAL_PER_SPAD_KCPS ((uint8_t)2U) +#define VL53L8CX_SIGNAL_PER_SPAD_KCPS ((uint8_t)2U) #define VL53L8CX_RANGE_SIGMA_MM ((uint8_t)4U) -#define VL53L8CX_AMBIENT_PER_SPAD_KCPS ((uint8_t)8U) +#define VL53L8CX_AMBIENT_PER_SPAD_KCPS ((uint8_t)8U) #define VL53L8CX_NB_TARGET_DETECTED ((uint8_t)9U) #define VL53L8CX_TARGET_STATUS ((uint8_t)12U) #define VL53L8CX_NB_SPADS_ENABLED ((uint8_t)13U) -#define VL53L8CX_MOTION_INDICATOR ((uint8_t)19U) +#define VL53L8CX_MOTION_INDICATOR ((uint8_t)19U) /** * @brief The following macro are used to define the 'type' of a checker. @@ -83,12 +62,12 @@ * thresholds. */ -#define VL53L8CX_IN_WINDOW ((uint8_t)0U) +#define VL53L8CX_IN_WINDOW ((uint8_t)0U) #define VL53L8CX_OUT_OF_WINDOW ((uint8_t)1U) -#define VL53L8CX_LESS_THAN_EQUAL_MIN_CHECKER ((uint8_t)2U) -#define VL53L8CX_GREATER_THAN_MAX_CHECKER ((uint8_t)3U) +#define VL53L8CX_LESS_THAN_EQUAL_MIN_CHECKER ((uint8_t)2U) +#define VL53L8CX_GREATER_THAN_MAX_CHECKER ((uint8_t)3U) #define VL53L8CX_EQUAL_MIN_CHECKER ((uint8_t)4U) -#define VL53L8CX_NOT_EQUAL_MIN_CHECKER ((uint8_t)5U) +#define VL53L8CX_NOT_EQUAL_MIN_CHECKER ((uint8_t)5U) /** * @brief The following macro are used to define multiple checkers in the same @@ -123,5 +102,94 @@ typedef struct { uint8_t mathematic_operation; } VL53L8CX_DetectionThresholds; +/** + * @brief This function allows indicating if the detection thresholds are + * enabled. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_enabled : Set to 1 if enabled, or 0 if disable. + * @return (uint8_t) status : 0 if OK + */ + +uint8_t vl53l8cx_get_detection_thresholds_enable( + VL53L8CX_Configuration *p_dev, + uint8_t *p_enabled); + +/** + * @brief This function allows enable the detection thresholds. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) enabled : Set to 1 to enable, or 0 to disable thresholds. + * @return (uint8_t) status : 0 if programming is OK + */ + +uint8_t vl53l8cx_set_detection_thresholds_enable( + VL53L8CX_Configuration *p_dev, + uint8_t enabled); + +/** + * @brief This function allows getting the detection thresholds. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_DetectionThresholds) *p_thresholds : Array of 64 thresholds. + * @return (uint8_t) status : 0 if programming is OK + */ + +uint8_t vl53l8cx_get_detection_thresholds( + VL53L8CX_Configuration *p_dev, + VL53L8CX_DetectionThresholds *p_thresholds); + +/** + * @brief This function allows programming the detection thresholds. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_DetectionThresholds) *p_thresholds : Array of 64 thresholds. + * @return (uint8_t) status : 0 if programming is OK + */ + +uint8_t vl53l8cx_set_detection_thresholds( + VL53L8CX_Configuration *p_dev, + VL53L8CX_DetectionThresholds *p_thresholds); + +/** + * @brief This function is used to enable or disable the auto-stop feature. + * When ToF runs in autonomous mode with detection threshold, the sensor + * only emits an interrupt (INT pin) when a threshold is reached. Interrupt + * is raised when the measurement is completed. It is possible to abort the ranging + * without waiting for end of measurement completed by enabling the auto-stop. The + * sensor emits an interrupt and quickly aborts the measurements in progress. Please + * note that vl53l8cx_stop_ranging() function needs to be used after interrupt raised + * for a clean stop. + * This function is used to get the auto_stop flag. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_auto_stop : Pointer of auto-stop feature, 0 disabled + * (default) or 1 enabled. + * @return (uint8_t) status : 0 if programming is OK + */ + +uint8_t vl53l8cx_get_detection_thresholds_auto_stop( + VL53L8CX_Configuration *p_dev, + uint8_t *p_auto_stop); + +/** + * @brief This function is used to enable or disable the auto-stop feature. + * When ToF runs in autonomous mode with detection threshold, the sensor + * only emits an interrupt (INT pin) when a threshold is reached. Interrupt + * is raised when the measurement is completed. It is possible to abort the ranging + * without waiting for end of measurement completed by enabling the auto-stop. The + * sensor emits an interrupt and quickly aborts the measurements in progress. Please + * note that vl53l8cx_stop_ranging() function needs to be used after interrupt raised + * for a clean stop. + * This function is used to set the auto_stop flag. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint8_t) *p_auto_stop : Pointer of auto-stop feature, 0 disabled + * (default) or 1 enabled. + * @return (uint8_t) status : 0 if programming is OK + */ + +uint8_t vl53l8cx_set_detection_thresholds_auto_stop( + VL53L8CX_Configuration *p_dev, + uint8_t auto_stop); + + +#ifdef __cplusplus +} +#endif #endif /* VL53L8CX_PLUGIN_DETECTION_THRESHOLDS_H_ */ diff --git a/src/vl53l8cx_plugin_motion_indicator.c b/src/vl53l8cx_plugin_motion_indicator.c new file mode 100644 index 0000000..7430c8e --- /dev/null +++ b/src/vl53l8cx_plugin_motion_indicator.c @@ -0,0 +1,115 @@ +/** + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +#include +#include "vl53l8cx_plugin_motion_indicator.h" + +uint8_t vl53l8cx_motion_indicator_init( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint8_t resolution) +{ + uint8_t status = VL53L8CX_STATUS_OK; + + (void)memset(p_motion_config, 0, sizeof(VL53L8CX_Motion_Configuration)); + + p_motion_config->ref_bin_offset = 13633; + p_motion_config->detection_threshold = 2883584; + p_motion_config->extra_noise_sigma = 0; + p_motion_config->null_den_clip_value = 0; + p_motion_config->mem_update_mode = 6; + p_motion_config->mem_update_choice = 2; + p_motion_config->sum_span = 4; + p_motion_config->feature_length = 9; + p_motion_config->nb_of_aggregates = 16; + p_motion_config->nb_of_temporal_accumulations = 16; + p_motion_config->min_nb_for_global_detection = 1; + p_motion_config->global_indicator_format_1 = 8; + p_motion_config->global_indicator_format_2 = 0; + p_motion_config->spare_1 = 0; + p_motion_config->spare_2 = 0; + p_motion_config->spare_3 = 0; + + status |= vl53l8cx_motion_indicator_set_resolution(p_dev, + p_motion_config, resolution); + + return status; +} + +uint8_t vl53l8cx_motion_indicator_set_distance_motion( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint16_t distance_min_mm, + uint16_t distance_max_mm) +{ + uint8_t status = VL53L8CX_STATUS_OK; + float_t tmp; + + if (((distance_max_mm - distance_min_mm) > (uint16_t)1500) + || (distance_min_mm < (uint16_t)400) + || (distance_max_mm > (uint16_t)4000)) { + status |= VL53L8CX_STATUS_INVALID_PARAM; + } else { + tmp = (float_t)((((float_t)distance_min_mm / (float_t)37.5348) + - (float_t)4.0) * (float_t)2048.5); + p_motion_config->ref_bin_offset = (int32_t)tmp; + + tmp = (float_t)((((((float_t)distance_max_mm - + (float_t)distance_min_mm) / (float_t)10.0) + (float_t)30.02784) + / ((float_t)15.01392)) + (float_t)0.5); + p_motion_config->feature_length = (uint8_t)tmp; + + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *)(p_motion_config), + VL53L8CX_DCI_MOTION_DETECTOR_CFG, + (uint16_t)sizeof(*p_motion_config)); + } + + return status; +} + +uint8_t vl53l8cx_motion_indicator_set_resolution( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint8_t resolution) +{ + uint8_t i, status = VL53L8CX_STATUS_OK; + + switch (resolution) { + case VL53L8CX_RESOLUTION_4X4: + for (i = 0; i < (uint8_t)VL53L8CX_RESOLUTION_4X4; i++) { + p_motion_config->map_id[i] = (int8_t)i; + } + (void)memset(p_motion_config->map_id + 16, -1, 48); + break; + + case VL53L8CX_RESOLUTION_8X8: + for (i = 0; i < (uint8_t)VL53L8CX_RESOLUTION_8X8; i++) { + p_motion_config->map_id[i] = (int8_t)((((int8_t) + i % 8) / 2) + (4 * ((int8_t)i / 16))); + } + break; + + default: + status |= VL53L8CX_STATUS_ERROR; + break; + } + + if (status == VL53L8CX_STATUS_OK) { + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *)(p_motion_config), + VL53L8CX_DCI_MOTION_DETECTOR_CFG, + (uint16_t)sizeof(*p_motion_config)); + } + + return status; +} diff --git a/src/vl53l8cx_plugin_motion_indicator.cpp b/src/vl53l8cx_plugin_motion_indicator.cpp deleted file mode 100644 index 38df2e8..0000000 --- a/src/vl53l8cx_plugin_motion_indicator.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/** - ****************************************************************************** - * @file vl53l8cx_plugin_motion_indicator.cpp - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Implementation of the VL53L8CX APIs for motion indicator. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -#include -#include "vl53l8cx_class.h" - -uint8_t VL53L8CX::vl53l8cx_motion_indicator_init( - VL53L8CX_Motion_Configuration *p_motion_config, - uint8_t resolution) -{ - uint8_t status = VL53L8CX_STATUS_OK; - - (void)memset(p_motion_config, 0, sizeof(VL53L8CX_Motion_Configuration)); - - p_motion_config->ref_bin_offset = 13633; - p_motion_config->detection_threshold = 2883584; - p_motion_config->extra_noise_sigma = 0; - p_motion_config->null_den_clip_value = 0; - p_motion_config->mem_update_mode = 6; - p_motion_config->mem_update_choice = 2; - p_motion_config->sum_span = 4; - p_motion_config->feature_length = 9; - p_motion_config->nb_of_aggregates = 16; - p_motion_config->nb_of_temporal_accumulations = 16; - p_motion_config->min_nb_for_global_detection = 1; - p_motion_config->global_indicator_format_1 = 8; - p_motion_config->global_indicator_format_2 = 0; - p_motion_config->spare_1 = 0; - p_motion_config->spare_2 = 0; - p_motion_config->spare_3 = 0; - - status |= vl53l8cx_motion_indicator_set_resolution( - p_motion_config, resolution); - - return status; -} - -uint8_t VL53L8CX::vl53l8cx_motion_indicator_set_distance_motion( - VL53L8CX_Motion_Configuration *p_motion_config, - uint16_t distance_min_mm, - uint16_t distance_max_mm) -{ - uint8_t status = VL53L8CX_STATUS_OK; - float_t tmp; - - if (((distance_max_mm - distance_min_mm) > (uint16_t)1500) - || (distance_min_mm < (uint16_t)400) - || (distance_max_mm > (uint16_t)4000)) { - status |= VL53L8CX_STATUS_INVALID_PARAM; - } else { - tmp = (float_t)((((float_t)distance_min_mm / (float_t)37.5348) - - (float_t)4.0) * (float_t)2048.5); - p_motion_config->ref_bin_offset = (int32_t)tmp; - - tmp = (float_t)((((((float_t)distance_max_mm - - (float_t)distance_min_mm) / (float_t)10.0) + (float_t)30.02784) - / ((float_t)15.01392)) + (float_t)0.5); - p_motion_config->feature_length = (uint8_t)tmp; - - status |= vl53l8cx_dci_write_data( - (uint8_t *)(p_motion_config), - VL53L8CX_DCI_MOTION_DETECTOR_CFG, - (uint16_t)sizeof(*p_motion_config)); - } - - return status; -} - -uint8_t VL53L8CX::vl53l8cx_motion_indicator_set_resolution( - VL53L8CX_Motion_Configuration *p_motion_config, - uint8_t resolution) -{ - uint8_t i, status = VL53L8CX_STATUS_OK; - - switch (resolution) { - case VL53L8CX_RESOLUTION_4X4: - for (i = 0; i < (uint8_t)VL53L8CX_RESOLUTION_4X4; i++) { - p_motion_config->map_id[i] = (int8_t)i; - } - (void)memset(p_motion_config->map_id + 16, -1, 48); - break; - - case VL53L8CX_RESOLUTION_8X8: - for (i = 0; i < (uint8_t)VL53L8CX_RESOLUTION_8X8; i++) { - p_motion_config->map_id[i] = (int8_t)((((int8_t) - i % 8) / 2) + (4 * ((int8_t)i / 16))); - } - break; - - default: - status |= VL53L8CX_STATUS_ERROR; - break; - } - - if (status == VL53L8CX_STATUS_OK) { - status |= vl53l8cx_dci_write_data( - (uint8_t *)(p_motion_config), - VL53L8CX_DCI_MOTION_DETECTOR_CFG, - (uint16_t)sizeof(*p_motion_config)); - } - - return status; -} diff --git a/src/vl53l8cx_plugin_motion_indicator.h b/src/vl53l8cx_plugin_motion_indicator.h index 6441712..873fa80 100644 --- a/src/vl53l8cx_plugin_motion_indicator.h +++ b/src/vl53l8cx_plugin_motion_indicator.h @@ -1,44 +1,23 @@ /** - ****************************************************************************** - * @file vl53l8cx_plugin_motion_indicator.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Header file for the VL53L8CX motion indicator structures. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #ifndef VL53L8CX_PLUGIN_MOTION_INDICATOR_H_ #define VL53L8CX_PLUGIN_MOTION_INDICATOR_H_ -#include "vl53l8cx_class.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include "vl53l8cx_api.h" /** * @brief Motion indicator internal configuration structure. @@ -66,4 +45,60 @@ typedef struct { uint8_t indicator_format_2[32]; } VL53L8CX_Motion_Configuration; +/** + * @brief This function is used to initialized the motion indicator. By default, + * indicator is programmed to monitor movements between 400mm and 1500mm. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure + * containing the initialized motion configuration. + * @param (uint8_t) resolution : Wanted resolution, defined by macros + * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. + * @return (uint8_t) status : 0 if OK, or 127 is the resolution is unknown. + */ + +uint8_t vl53l8cx_motion_indicator_init( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint8_t resolution); + +/** + * @brief This function can be used to change the working distance of motion + * indicator. By default, indicator is programmed to monitor movements between + * 400mm and 1500mm. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure + * containing the initialized motion configuration. + * @param (uint16_t) distance_min_mm : Minimum distance for indicator (min value + * 400mm, max 4000mm). + * @param (uint16_t) distance_max_mm : Maximum distance for indicator (min value + * 400mm, max 4000mm). + * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. + * @return (uint8_t) status : 0 if OK, or 127 if an argument is invalid. + */ + +uint8_t vl53l8cx_motion_indicator_set_distance_motion( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint16_t distance_min_mm, + uint16_t distance_max_mm); + +/** + * @brief This function is used to update the internal motion indicator map. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (VL53L8CX_Motion_Configuration) *p_motion_config : Structure + * containing the initialized motion configuration. + * @param (uint8_t) resolution : Wanted SCI resolution, defined by macros + * VL53L8CX_RESOLUTION_4X4 or VL53L8CX_RESOLUTION_8X8. + * @return (uint8_t) status : 0 if OK, or 127 is the resolution is unknown. + */ + +uint8_t vl53l8cx_motion_indicator_set_resolution( + VL53L8CX_Configuration *p_dev, + VL53L8CX_Motion_Configuration *p_motion_config, + uint8_t resolution); + +#ifdef __cplusplus +} +#endif + #endif /* VL53L8CX_PLUGIN_MOTION_INDICATOR_H_ */ diff --git a/src/vl53l8cx_plugin_xtalk.cpp b/src/vl53l8cx_plugin_xtalk.c similarity index 52% rename from src/vl53l8cx_plugin_xtalk.cpp rename to src/vl53l8cx_plugin_xtalk.c index 316ac9d..88de80a 100644 --- a/src/vl53l8cx_plugin_xtalk.cpp +++ b/src/vl53l8cx_plugin_xtalk.c @@ -1,48 +1,24 @@ /** - ****************************************************************************** - * @file vl53l8cx_plugin_xtalk.cpp - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Implementation of the VL53L8CX APIs for xtalk calibration. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -#include "vl53l8cx_class.h" + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +#include "vl53l8cx_plugin_xtalk.h" /* * Inner function, not available outside this file. This function is used to * wait for an answer from VL53L5 sensor. */ -uint8_t VL53L8CX::_vl53l8cx_poll_for_answer_xtalk( +static uint8_t _vl53l8cx_poll_for_answer( + VL53L8CX_Configuration *p_dev, uint16_t address, uint8_t expected_value) { @@ -50,9 +26,9 @@ uint8_t VL53L8CX::_vl53l8cx_poll_for_answer_xtalk( uint8_t timeout = 0; do { - status |= RdMulti(&(p_dev->platform), - address, p_dev->temp_buffer, 4); - status |= WaitMs(&(p_dev->platform), 10); + status |= VL53L8CX_RdMulti(&(p_dev->platform), + address, p_dev->temp_buffer, 4); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 10); /* 2s timeout or FW error*/ if ((timeout >= (uint8_t)200) @@ -72,14 +48,15 @@ uint8_t VL53L8CX::_vl53l8cx_poll_for_answer_xtalk( * program the output using the macro defined into the 'platform.h' file. */ -uint8_t VL53L8CX::_vl53l8cx_program_output_config() +static uint8_t _vl53l8cx_program_output_config( + VL53L8CX_Configuration *p_dev) { uint8_t resolution, status = VL53L8CX_STATUS_OK; uint32_t i; - union Block_header *bh_ptr; uint32_t header_config[2] = {0, 0}; + union Block_header *bh_ptr; - status |= vl53l8cx_get_resolution(&resolution); + status |= vl53l8cx_get_resolution(p_dev, &resolution); p_dev->data_read_size = 0; /* Enable mandatory output (meta and common data) */ @@ -135,29 +112,30 @@ uint8_t VL53L8CX::_vl53l8cx_program_output_config() } else { p_dev->data_read_size += bh_ptr->size; } + p_dev->data_read_size += (uint32_t)4; } p_dev->data_read_size += (uint32_t)24; - status |= vl53l8cx_dci_write_data( - (uint8_t *) & (output), - VL53L8CX_DCI_OUTPUT_LIST, (uint16_t)sizeof(output)); + status |= vl53l8cx_dci_write_data(p_dev, + (uint8_t *) & (output), + VL53L8CX_DCI_OUTPUT_LIST, (uint16_t)sizeof(output)); header_config[0] = p_dev->data_read_size; header_config[1] = i + (uint32_t)1; - status |= vl53l8cx_dci_write_data( - (uint8_t *) & (header_config), VL53L8CX_DCI_OUTPUT_CONFIG, - (uint16_t)sizeof(header_config)); - - status |= vl53l8cx_dci_write_data((uint8_t *) & (output_bh_enable), + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *) & (header_config), + VL53L8CX_DCI_OUTPUT_CONFIG, + (uint16_t)sizeof(header_config)); + status |= vl53l8cx_dci_write_data(p_dev, (uint8_t *) & (output_bh_enable), VL53L8CX_DCI_OUTPUT_ENABLES, (uint16_t)sizeof(output_bh_enable)); return status; } -uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( +uint8_t vl53l8cx_calibrate_xtalk( + VL53L8CX_Configuration *p_dev, uint16_t reflectance_percent, uint8_t nb_samples, uint16_t distance_mm) @@ -176,13 +154,13 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( uint8_t *default_xtalk_ptr; /* Get initial configuration */ - status |= vl53l8cx_get_resolution(&resolution); - status |= vl53l8cx_get_ranging_frequency_hz(&frequency); - status |= vl53l8cx_get_integration_time_ms(&integration_time_ms); - status |= vl53l8cx_get_sharpener_percent(&sharp_prct); - status |= vl53l8cx_get_target_order(&target_order); - status |= vl53l8cx_get_xtalk_margin(&xtalk_margin); - status |= vl53l8cx_get_ranging_mode(&ranging_mode); + status |= vl53l8cx_get_resolution(p_dev, &resolution); + status |= vl53l8cx_get_ranging_frequency_hz(p_dev, &frequency); + status |= vl53l8cx_get_integration_time_ms(p_dev, &integration_time_ms); + status |= vl53l8cx_get_sharpener_percent(p_dev, &sharp_prct); + status |= vl53l8cx_get_target_order(p_dev, &target_order); + status |= vl53l8cx_get_xtalk_margin(p_dev, &xtalk_margin); + status |= vl53l8cx_get_ranging_mode(p_dev, &ranging_mode); /* Check input arguments validity */ if (((reflectance < (uint16_t)1) || (reflectance > (uint16_t)99)) @@ -190,50 +168,49 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( || ((samples < (uint8_t)1) || (samples > (uint8_t)16))) { status |= VL53L8CX_STATUS_INVALID_PARAM; } else { - status |= vl53l8cx_set_resolution( - VL53L8CX_RESOLUTION_8X8); + status |= vl53l8cx_set_resolution(p_dev, + VL53L8CX_RESOLUTION_8X8); /* Send Xtalk calibration buffer */ (void)memcpy(p_dev->temp_buffer, VL53L8CX_CALIBRATE_XTALK, sizeof(VL53L8CX_CALIBRATE_XTALK)); - status |= WrMulti(&(p_dev->platform), 0x2c28, - p_dev->temp_buffer, - (uint16_t)sizeof(VL53L8CX_CALIBRATE_XTALK)); - status |= _vl53l8cx_poll_for_answer_xtalk( - VL53L8CX_UI_CMD_STATUS, 0x3); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2c28, + p_dev->temp_buffer, + (uint16_t)sizeof(VL53L8CX_CALIBRATE_XTALK)); + status |= _vl53l8cx_poll_for_answer(p_dev, + VL53L8CX_UI_CMD_STATUS, 0x3); /* Format input argument */ reflectance = reflectance * (uint16_t)16; distance = distance * (uint16_t)4; /* Update required fields */ - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_CAL_CFG, 8, (uint8_t *)&distance, 2, 0x00); - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_CAL_CFG, 8, (uint8_t *)&reflectance, 2, 0x02); - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_CAL_CFG, 8, (uint8_t *)&samples, 1, 0x04); /* Program output for Xtalk calibration */ - status |= _vl53l8cx_program_output_config(); + status |= _vl53l8cx_program_output_config(p_dev); /* Start ranging session */ - status |= WrMulti(&(p_dev->platform), - VL53L8CX_UI_CMD_END - (uint16_t)(4 - 1), - (uint8_t *)cmd, sizeof(cmd)); - status |= _vl53l8cx_poll_for_answer_xtalk( - VL53L8CX_UI_CMD_STATUS, 0x3); + status |= VL53L8CX_WrMulti(&(p_dev->platform), + VL53L8CX_UI_CMD_END - (uint16_t)(4 - 1), + (uint8_t *)cmd, sizeof(cmd)); + status |= _vl53l8cx_poll_for_answer(p_dev, + VL53L8CX_UI_CMD_STATUS, 0x3); /* Wait for end of calibration */ do { - status |= RdMulti(&(p_dev->platform), - 0x0, p_dev->temp_buffer, 4); - + status |= VL53L8CX_RdMulti(&(p_dev->platform), + 0x0, p_dev->temp_buffer, 4); if (p_dev->temp_buffer[0] != VL53L8CX_STATUS_ERROR) { /* Coverglass too good for Xtalk calibration */ if ((p_dev->temp_buffer[2] >= (uint8_t)0x7f) && @@ -243,6 +220,7 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( (void)memcpy(p_dev->xtalk_data, default_xtalk_ptr, sizeof(p_dev->xtalk_data)); + status |= VL53L8CX_STATUS_XTALK_FAILED; } continue_loop = (uint8_t)0; } else if (timeout >= (uint16_t)400) { @@ -250,7 +228,7 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( continue_loop = (uint8_t)0; } else { timeout++; - status |= WaitMs(&(p_dev->platform), 50); + status |= VL53L8CX_WaitMs(&(p_dev->platform), 50); } } while (continue_loop == (uint8_t)1); @@ -259,13 +237,13 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( /* Save Xtalk data into the Xtalk buffer */ (void)memcpy(p_dev->temp_buffer, VL53L8CX_GET_XTALK_CMD, sizeof(VL53L8CX_GET_XTALK_CMD)); - status |= WrMulti(&(p_dev->platform), 0x2fb8, - p_dev->temp_buffer, - (uint16_t)sizeof(VL53L8CX_GET_XTALK_CMD)); - status |= _vl53l8cx_poll_for_answer_xtalk(VL53L8CX_UI_CMD_STATUS, 0x03); - status |= RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, - p_dev->temp_buffer, - VL53L8CX_XTALK_BUFFER_SIZE + (uint16_t)4); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2fb8, + p_dev->temp_buffer, + (uint16_t)sizeof(VL53L8CX_GET_XTALK_CMD)); + status |= _vl53l8cx_poll_for_answer(p_dev, VL53L8CX_UI_CMD_STATUS, 0x03); + status |= VL53L8CX_RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, + p_dev->temp_buffer, + VL53L8CX_XTALK_BUFFER_SIZE + (uint16_t)4); (void)memcpy(&(p_dev->xtalk_data[0]), &(p_dev->temp_buffer[8]), VL53L8CX_XTALK_BUFFER_SIZE - (uint16_t)8); @@ -273,66 +251,72 @@ uint8_t VL53L8CX::vl53l8cx_calibrate_xtalk( - (uint16_t)8]), footer, sizeof(footer)); /* Reset default buffer */ - status |= WrMulti(&(p_dev->platform), 0x2c34, - p_dev->default_configuration, - VL53L8CX_CONFIGURATION_SIZE); - status |= _vl53l8cx_poll_for_answer_xtalk(VL53L8CX_UI_CMD_STATUS, 0x03); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2c34, + p_dev->default_configuration, + VL53L8CX_CONFIGURATION_SIZE); + status |= _vl53l8cx_poll_for_answer(p_dev, VL53L8CX_UI_CMD_STATUS, 0x03); /* Reset initial configuration */ - status |= vl53l8cx_set_resolution(resolution); - status |= vl53l8cx_set_ranging_frequency_hz(frequency); - status |= vl53l8cx_set_integration_time_ms(integration_time_ms); - status |= vl53l8cx_set_sharpener_percent(sharp_prct); - status |= vl53l8cx_set_target_order(target_order); - status |= vl53l8cx_set_xtalk_margin(xtalk_margin); - status |= vl53l8cx_set_ranging_mode(ranging_mode); + status |= vl53l8cx_set_resolution(p_dev, resolution); + status |= vl53l8cx_set_ranging_frequency_hz(p_dev, frequency); + status |= vl53l8cx_set_integration_time_ms(p_dev, integration_time_ms); + status |= vl53l8cx_set_sharpener_percent(p_dev, sharp_prct); + status |= vl53l8cx_set_target_order(p_dev, target_order); + status |= vl53l8cx_set_xtalk_margin(p_dev, xtalk_margin); + status |= vl53l8cx_set_ranging_mode(p_dev, ranging_mode); return status; } -uint8_t VL53L8CX::vl53l8cx_get_caldata_xtalk(uint8_t *p_xtalk_data) +uint8_t vl53l8cx_get_caldata_xtalk( + VL53L8CX_Configuration *p_dev, + uint8_t *p_xtalk_data) { uint8_t status = VL53L8CX_STATUS_OK, resolution; uint8_t footer[] = {0x00, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x03, 0x04}; - status |= vl53l8cx_get_resolution(&resolution); - status |= vl53l8cx_set_resolution(VL53L8CX_RESOLUTION_8X8); + status |= vl53l8cx_get_resolution(p_dev, &resolution); + status |= vl53l8cx_set_resolution(p_dev, VL53L8CX_RESOLUTION_8X8); (void)memcpy(p_dev->temp_buffer, VL53L8CX_GET_XTALK_CMD, sizeof(VL53L8CX_GET_XTALK_CMD)); - status |= WrMulti(&(p_dev->platform), 0x2fb8, - p_dev->temp_buffer, sizeof(VL53L8CX_GET_XTALK_CMD)); - status |= _vl53l8cx_poll_for_answer_xtalk(VL53L8CX_UI_CMD_STATUS, 0x03); - status |= RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, - p_dev->temp_buffer, - VL53L8CX_XTALK_BUFFER_SIZE + (uint16_t)4); + status |= VL53L8CX_WrMulti(&(p_dev->platform), 0x2fb8, + p_dev->temp_buffer, sizeof(VL53L8CX_GET_XTALK_CMD)); + status |= _vl53l8cx_poll_for_answer(p_dev, VL53L8CX_UI_CMD_STATUS, 0x03); + status |= VL53L8CX_RdMulti(&(p_dev->platform), VL53L8CX_UI_CMD_START, + p_dev->temp_buffer, + VL53L8CX_XTALK_BUFFER_SIZE + (uint16_t)4); (void)memcpy(&(p_xtalk_data[0]), &(p_dev->temp_buffer[8]), VL53L8CX_XTALK_BUFFER_SIZE - (uint16_t)8); (void)memcpy(&(p_xtalk_data[VL53L8CX_XTALK_BUFFER_SIZE - (uint16_t)8]), footer, sizeof(footer)); - status |= vl53l8cx_set_resolution(resolution); + status |= vl53l8cx_set_resolution(p_dev, resolution); return status; } -uint8_t VL53L8CX::vl53l8cx_set_caldata_xtalk(uint8_t *p_xtalk_data) +uint8_t vl53l8cx_set_caldata_xtalk( + VL53L8CX_Configuration *p_dev, + uint8_t *p_xtalk_data) { uint8_t resolution, status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_get_resolution(&resolution); + status |= vl53l8cx_get_resolution(p_dev, &resolution); (void)memcpy(p_dev->xtalk_data, p_xtalk_data, VL53L8CX_XTALK_BUFFER_SIZE); - status |= vl53l8cx_set_resolution(resolution); + status |= vl53l8cx_set_resolution(p_dev, resolution); return status; } -uint8_t VL53L8CX::vl53l8cx_get_xtalk_margin(uint32_t *p_xtalk_margin) +uint8_t vl53l8cx_get_xtalk_margin( + VL53L8CX_Configuration *p_dev, + uint32_t *p_xtalk_margin) { uint8_t status = VL53L8CX_STATUS_OK; - status |= vl53l8cx_dci_read_data((uint8_t *)p_dev->temp_buffer, + status |= vl53l8cx_dci_read_data(p_dev, (uint8_t *)p_dev->temp_buffer, VL53L8CX_DCI_XTALK_CFG, 16); (void)memcpy(p_xtalk_margin, p_dev->temp_buffer, 4); @@ -341,7 +325,9 @@ uint8_t VL53L8CX::vl53l8cx_get_xtalk_margin(uint32_t *p_xtalk_margin) return status; } -uint8_t VL53L8CX::vl53l8cx_set_xtalk_margin(uint32_t xtalk_margin) +uint8_t vl53l8cx_set_xtalk_margin( + VL53L8CX_Configuration *p_dev, + uint32_t xtalk_margin) { uint8_t status = VL53L8CX_STATUS_OK; uint32_t margin_kcps = xtalk_margin; @@ -350,7 +336,7 @@ uint8_t VL53L8CX::vl53l8cx_set_xtalk_margin(uint32_t xtalk_margin) status |= VL53L8CX_STATUS_INVALID_PARAM; } else { margin_kcps = margin_kcps * (uint32_t)2048; - status |= vl53l8cx_dci_replace_data(p_dev->temp_buffer, + status |= vl53l8cx_dci_replace_data(p_dev, p_dev->temp_buffer, VL53L8CX_DCI_XTALK_CFG, 16, (uint8_t *)&margin_kcps, 4, 0x00); } diff --git a/src/vl53l8cx_plugin_xtalk.h b/src/vl53l8cx_plugin_xtalk.h index 21b5578..53355da 100644 --- a/src/vl53l8cx_plugin_xtalk.h +++ b/src/vl53l8cx_plugin_xtalk.h @@ -1,53 +1,33 @@ /** - ****************************************************************************** - * @file vl53l8cx_plugin_xtalk.h - * @author STMicroelectronics - * @version V1.0.0 - * @date 13 January 2023 - * @brief Header file for the VL53L8CX xtalk structures. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2021 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ + * + * Copyright (c) 2021 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ #ifndef VL53L8CX_PLUGIN_XTALK_H_ #define VL53L8CX_PLUGIN_XTALK_H_ -#include "vl53l8cx_class.h" +#ifdef __cplusplus +extern "C" { +#endif + + +#include "vl53l8cx_api.h" /** * @brief Inner internal number of targets. */ #if VL53L8CX_NB_TARGET_PER_ZONE == 1 - #define VL53L8CX_FW_NBTAR_XTALK 2 +#define VL53L8CX_FW_NBTAR_XTALK 2 #else - #define VL53L8CX_FW_NBTAR_XTALK VL53L8CX_NB_TARGET_PER_ZONE +#define VL53L8CX_FW_NBTAR_XTALK VL53L8CX_NB_TARGET_PER_ZONE #endif /** @@ -57,6 +37,84 @@ #define VL53L8CX_DCI_CAL_CFG ((uint16_t)0x5470U) #define VL53L8CX_DCI_XTALK_CFG ((uint16_t)0xAD94U) + +/** + * @brief This function starts the VL53L8CX sensor in order to calibrate Xtalk. + * This calibration is recommended is user wants to use a coverglass. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint16_t) reflectance_percent : Target reflectance in percent. This + * value is include between 1 and 99%. For a better efficiency, ST recommends a + * 3% target reflectance. + * @param (uint8_t) nb_samples : Nb of samples used for calibration. A higher + * number of samples means a higher accuracy, but it increases the calibration + * time. Minimum is 1 and maximum is 16. + * @param (uint16_t) distance_mm : Target distance in mm. The minimum allowed + * distance is 600mm, and maximum is 3000mm. The target must stay in Full FOV, + * so short distance are easier for calibration. + * @return (uint8_t) status : 0 if calibration OK, 127 if an argument has an + * incorrect value, or 255 is something failed. + */ + +uint8_t vl53l8cx_calibrate_xtalk( + VL53L8CX_Configuration *p_dev, + uint16_t reflectance_percent, + uint8_t nb_samples, + uint16_t distance_mm); + +/** + * @brief This function gets the Xtalk buffer. The buffer is available after + * using the function vl53l8cx_calibrate_xtalk(). + * @param (VL53L8CX_Configuration) *p_dev : VL53L5 configuration structure. + * @param (uint8_t) *p_xtalk_data : Buffer with a size defined by + * macro VL53L8CX_XTALK_SIZE. + * @return (uint8_t) status : 0 if buffer reading OK + */ + +uint8_t vl53l8cx_get_caldata_xtalk( + VL53L8CX_Configuration *p_dev, + uint8_t *p_xtalk_data); + +/** + * @brief This function sets the Xtalk buffer. This function can be used to + * override default Xtalk buffer. + * @param (VL53L8CX_Configuration) *p_dev : VL53L5 configuration structure. + * @param (uint8_t) *p_xtalk_data : Buffer with a size defined by + * macro VL53L8CX_XTALK_SIZE. + * @return (uint8_t) status : 0 if buffer OK + */ + +uint8_t vl53l8cx_set_caldata_xtalk( + VL53L8CX_Configuration *p_dev, + uint8_t *p_xtalk_data); + +/** + * @brief This function gets the Xtalk margin. This margin is used to increase + * the Xtalk threshold. It can also be used to avoid false positives after the + * Xtalk calibration. The default value is 50 kcps/spads. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) *p_xtalk_margin : Xtalk margin in kcps/spads. + * @return (uint8_t) status : 0 if reading OK + */ + +uint8_t vl53l8cx_get_xtalk_margin( + VL53L8CX_Configuration *p_dev, + uint32_t *p_xtalk_margin); + +/** + * @brief This function sets the Xtalk margin. This margin is used to increase + * the Xtalk threshold. It can also be used to avoid false positives after the + * Xtalk calibration. The default value is 50 kcps/spads. + * @param (VL53L8CX_Configuration) *p_dev : VL53L8CX configuration structure. + * @param (uint32_t) xtalk_margin : New Xtalk margin in kcps/spads. Min value is + * 0 kcps/spads, and max is 10.000 kcps/spads + * @return (uint8_t) status : 0 if set margin is OK, or 127 is the margin is + * invalid. + */ + +uint8_t vl53l8cx_set_xtalk_margin( + VL53L8CX_Configuration *p_dev, + uint32_t xtalk_margin); + /** * @brief Command used to get Xtalk calibration data */ @@ -335,4 +393,8 @@ static const uint8_t VL53L8CX_CALIBRATE_XTALK[] = { 0x00, 0x01, 0x03, 0xD4 }; +#ifdef __cplusplus +} +#endif + #endif /* VL53L8CX_PLUGIN_XTALK_H_ */