Library for use with VL53L0X, cut 1.1, based on mass-market API v1.1.
Dependencies: ST_INTERFACES X_NUCLEO_COMMON
Dependents: ConcorsoFinal HelloWorld_IHM01A1 m3pi_BT m3pi_LIDAR ... more
Fork of X_NUCLEO_53L0A1 by
X-NUCLEO-53L0A1 Proximity Sensor Expansion Board Firmware Package
Introduction
This firmware package includes Component Device Drivers and the Board Support Package for STMicroelectronics' X-NUCLEO-53L0A1 Proximity sensor expansion board based on VL53L0X.
Firmware Library
Class X_NUCLEO_53L0A1 is intended to represent the Proximity sensor expansion board with the same name.
The expansion board provides support for the following components:
- on-board VL53L0X proximity sensor,
- up to two additional VL53L0X Satellites,
- on-board 4-digit display
It is intentionally implemented as a singleton because only one X-NUCLEO-VL53L0A1 may be deployed at a time in a HW component stack. In order to get the singleton instance you have to call class method `Instance()`, e.g.:
// Sensors expansion board singleton instance static X_NUCLEO_53L0A1 *board = X_NUCLEO_53L0A1::Instance(device_i2c, A2, D8, D2);
Example Applications
- Hello World 53L0
- Display 53L0A1
- Display 53L0A1 Interrupts
- Display 53L0A1 with satellites
- 53L0A1 Satellites with Interrupts
- 53L0A1_HandGestureRecognition
The library and sample application code were tested against mbed revision 143, dated 26th May 2017.
Diff: Components/VL53L0X/vl53l0x_i2c_platform.h
- Revision:
- 16:27d3d95c8593
- Parent:
- 14:8320b5ff96fa
- Child:
- 17:f8187a3fa36e
--- a/Components/VL53L0X/vl53l0x_i2c_platform.h Mon Aug 07 14:30:21 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,417 +0,0 @@
-/*
- * COPYRIGHT (C) STMicroelectronics 2014. All rights reserved.
- *
- * This software is the confidential and proprietary information of
- * STMicroelectronics ("Confidential Information"). You shall not
- * disclose such Confidential Information and shall use it only in
- * accordance with the terms of the license agreement you entered into
- * with STMicroelectronics
- *
- * Programming Golden Rule: Keep it Simple!
- *
- */
-
-/**
- * @file VL53L0X_platform.h
- * @brief Function prototype definitions for Ewok Platform layer.
- *
- */
-
-
-#ifndef _VL53L0X_I2C_PLATFORM_H_
-#define _VL53L0X_I2C_PLATFORM_H_
-
-#include "vl53l0x_def.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Include uint8_t, unit16_t etc definitions
-
-#include <stdint.h>
-#include <stdarg.h>
-
-
-/**
- * @brief Typedef defining .\n
- * The developer shoud modify this to suit the platform being deployed.
- *
- */
-
-// enum {TRUE = true, FALSE = false};
-
-/**
- * @brief Typedef defining 8 bit unsigned char type.\n
- * The developer shoud modify this to suit the platform being deployed.
- *
- */
-
-#ifndef bool_t
-typedef unsigned char bool_t;
-#endif
-
-
-#define I2C 0x01
-#define SPI 0x00
-
-#define COMMS_BUFFER_SIZE 64 // MUST be the same size as the SV task buffer
-
-#define BYTES_PER_WORD 2
-#define BYTES_PER_DWORD 4
-
-#define VL53L0X_MAX_STRING_LENGTH_PLT 256
-
-/**
- * @brief Initialise platform comms.
- *
- * @param comms_type - selects between I2C and SPI
- * @param comms_speed_khz - unsigned short containing the I2C speed in kHz
- *
- * @return status - status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_comms_initialise(uint8_t comms_type,
- uint16_t comms_speed_khz);
-
- /**
- * @brief Initialise platform serial comms.
- *
- * @param comPortStr - String to indicate the comm port
- * @param baudRate - Bau rate
- *
- * @return status - status 0 = ok, 1 = error
- *
- */
-int VL53L0_i2c_init(char *comPortStr, unsigned int baudRate);
-
-
-/**
- * @brief Close platform comms.
- *
- * @return status - status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_comms_close(void);
-
-/**
- * @brief Cycle Power to Device
- *
- * @return status - status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_cycle_power(void);
-
-
-/**
- * @brief Writes the supplied byte buffer to the device
- *
- * Wrapper for SystemVerilog Write Multi task
- *
- * @code
- *
- * Example:
- *
- * uint8_t *spad_enables;
- *
- * int status = VL53L0X_write_multi(RET_SPAD_EN_0, spad_enables, 36);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param pdata - pointer to uint8_t buffer containing the data to be written
- * @param count - number of bytes in the supplied byte buffer
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_write_multi(uint8_t address, uint8_t index, uint8_t *pdata, int32_t count);
-
-
-/**
- * @brief Reads the requested number of bytes from the device
- *
- * Wrapper for SystemVerilog Read Multi task
- *
- * @code
- *
- * Example:
- *
- * uint8_t buffer[COMMS_BUFFER_SIZE];
- *
- * int status = status = VL53L0X_read_multi(DEVICE_ID, buffer, 2)
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param pdata - pointer to the uint8_t buffer to store read data
- * @param count - number of uint8_t's to read
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_read_multi(uint8_t address, uint8_t index, uint8_t *pdata, int32_t count);
-
-
-/**
- * @brief Writes a single byte to the device
- *
- * Wrapper for SystemVerilog Write Byte task
- *
- * @code
- *
- * Example:
- *
- * uint8_t page_number = MAIN_SELECT_PAGE;
- *
- * int status = VL53L0X_write_byte(PAGE_SELECT, page_number);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param data - uint8_t data value to write
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_write_byte(uint8_t address, uint8_t index, uint8_t data);
-
-
-/**
- * @brief Writes a single word (16-bit unsigned) to the device
- *
- * Manages the big-endian nature of the device (first byte written is the MS byte).
- * Uses SystemVerilog Write Multi task.
- *
- * @code
- *
- * Example:
- *
- * uint16_t nvm_ctrl_pulse_width = 0x0004;
- *
- * int status = VL53L0X_write_word(NVM_CTRL__PULSE_WIDTH_MSB, nvm_ctrl_pulse_width);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param data - uin16_t data value write
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_write_word(uint8_t address, uint8_t index, uint16_t data);
-
-
-/**
- * @brief Writes a single dword (32-bit unsigned) to the device
- *
- * Manages the big-endian nature of the device (first byte written is the MS byte).
- * Uses SystemVerilog Write Multi task.
- *
- * @code
- *
- * Example:
- *
- * uint32_t nvm_data = 0x0004;
- *
- * int status = VL53L0X_write_dword(NVM_CTRL__DATAIN_MMM, nvm_data);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param data - uint32_t data value to write
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_write_dword(uint8_t address, uint8_t index, uint32_t data);
-
-
-
-/**
- * @brief Reads a single byte from the device
- *
- * Uses SystemVerilog Read Byte task.
- *
- * @code
- *
- * Example:
- *
- * uint8_t device_status = 0;
- *
- * int status = VL53L0X_read_byte(STATUS, &device_status);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param pdata - pointer to uint8_t data value
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_read_byte(uint8_t address, uint8_t index, uint8_t *pdata);
-
-
-/**
- * @brief Reads a single word (16-bit unsigned) from the device
- *
- * Manages the big-endian nature of the device (first byte read is the MS byte).
- * Uses SystemVerilog Read Multi task.
- *
- * @code
- *
- * Example:
- *
- * uint16_t timeout = 0;
- *
- * int status = VL53L0X_read_word(TIMEOUT_OVERALL_PERIODS_MSB, &timeout);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param pdata - pointer to uint16_t data value
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_read_word(uint8_t address, uint8_t index, uint16_t *pdata);
-
-
-/**
- * @brief Reads a single dword (32-bit unsigned) from the device
- *
- * Manages the big-endian nature of the device (first byte read is the MS byte).
- * Uses SystemVerilog Read Multi task.
- *
- * @code
- *
- * Example:
- *
- * uint32_t range_1 = 0;
- *
- * int status = VL53L0X_read_dword(RANGE_1_MMM, &range_1);
- *
- * @endcode
- *
- * @param address - uint8_t device address value
- * @param index - uint8_t register index value
- * @param pdata - pointer to uint32_t data value
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_read_dword(uint8_t address, uint8_t index, uint32_t *pdata);
-
-
-/**
- * @brief Implements a programmable wait in us
- *
- * Wrapper for SystemVerilog Wait in micro seconds task
- *
- * @param wait_us - integer wait in micro seconds
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_platform_wait_us(int32_t wait_us);
-
-
-/**
- * @brief Implements a programmable wait in ms
- *
- * Wrapper for SystemVerilog Wait in milli seconds task
- *
- * @param wait_ms - integer wait in milli seconds
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_wait_ms(int32_t wait_ms);
-
-
-/**
- * @brief Set GPIO value
- *
- * @param level - input level - either 0 or 1
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_set_gpio(uint8_t level);
-
-
-/**
- * @brief Get GPIO value
- *
- * @param plevel - uint8_t pointer to store GPIO level (0 or 1)
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_get_gpio(uint8_t *plevel);
-
-/**
- * @brief Release force on GPIO
- *
- * @return status - SystemVerilog status 0 = ok, 1 = error
- *
- */
-
-int32_t VL53L0X_release_gpio(void);
-
-
-/**
-* @brief Get the frequency of the timer used for ranging results time stamps
-*
-* @param[out] ptimer_freq_hz : pointer for timer frequency
-*
-* @return status : 0 = ok, 1 = error
-*
-*/
-
-int32_t VL53L0X_get_timer_frequency(int32_t *ptimer_freq_hz);
-
-/**
-* @brief Get the timer value in units of timer_freq_hz (see VL53L0X_get_timestamp_frequency())
-*
-* @param[out] ptimer_count : pointer for timer count value
-*
-* @return status : 0 = ok, 1 = error
-*
-*/
-
-int32_t VL53L0X_get_timer_value(int32_t *ptimer_count);
-
-
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //_VL53L0X_I2C_PLATFORM_H_
-
-

X-NUCLEO-53L0A1 Ranging Sensor Expansion Board