Fork Charles's library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3ExpansionBoard

Committer:
johnAlexander
Date:
Tue Nov 03 15:16:36 2020 +0000
Revision:
3:316175f392f7
Parent:
vl53l3inc/vl53L3_I2c.h@0:0be0bd219e72
Add ST common libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charlesmn 0:0be0bd219e72 1 /* Define to prevent from recursive inclusion --------------------------------*/
charlesmn 0:0be0bd219e72 2 #ifndef __DEV_53L1X_I2C_H
charlesmn 0:0be0bd219e72 3 #define __DEV_53L1X_I2C_H
charlesmn 0:0be0bd219e72 4
charlesmn 0:0be0bd219e72 5 /* Includes ------------------------------------------------------------------*/
charlesmn 0:0be0bd219e72 6
charlesmn 0:0be0bd219e72 7 #include "mbed.h"
charlesmn 0:0be0bd219e72 8
charlesmn 0:0be0bd219e72 9 #include "pinmap.h"
charlesmn 0:0be0bd219e72 10
charlesmn 0:0be0bd219e72 11 static int mutex =0;
charlesmn 0:0be0bd219e72 12
charlesmn 0:0be0bd219e72 13 //Class replacing DevI2C class as it was not implementing a 16bit address registers
charlesmn 0:0be0bd219e72 14 class vl53L3_DevI2C : public I2C
charlesmn 0:0be0bd219e72 15 {
charlesmn 0:0be0bd219e72 16 public:
charlesmn 0:0be0bd219e72 17 /** Create a DevI2C Master interface, connected to the specified pins
charlesmn 0:0be0bd219e72 18 *
charlesmn 0:0be0bd219e72 19 * @param sda I2C data line pin
charlesmn 0:0be0bd219e72 20 * @param scl I2C clock line pin
charlesmn 0:0be0bd219e72 21 */
charlesmn 0:0be0bd219e72 22 vl53L3_DevI2C(PinName sda, PinName scl) : I2C(sda, scl) { printf ("hello\n");}
charlesmn 0:0be0bd219e72 23
charlesmn 0:0be0bd219e72 24
charlesmn 0:0be0bd219e72 25 int VL53L3_i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
charlesmn 0:0be0bd219e72 26 uint16_t NumByteToWrite) {
charlesmn 0:0be0bd219e72 27 int ret;
charlesmn 0:0be0bd219e72 28 uint8_t tmp[TEMP_BUF_SIZE];
charlesmn 0:0be0bd219e72 29
charlesmn 0:0be0bd219e72 30 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
charlesmn 0:0be0bd219e72 31
charlesmn 0:0be0bd219e72 32 // First, send device address. Then, send data and STOP condition
charlesmn 0:0be0bd219e72 33 tmp[0] = RegisterAddr >> 8;
charlesmn 0:0be0bd219e72 34 tmp[1] = RegisterAddr & 0x0FF;
charlesmn 0:0be0bd219e72 35 memcpy(tmp+2, pBuffer, NumByteToWrite);
charlesmn 0:0be0bd219e72 36
charlesmn 0:0be0bd219e72 37 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite+2, false);
charlesmn 0:0be0bd219e72 38
charlesmn 0:0be0bd219e72 39 if(ret) return -1;
charlesmn 0:0be0bd219e72 40 return 0;
charlesmn 0:0be0bd219e72 41 }
charlesmn 0:0be0bd219e72 42
charlesmn 0:0be0bd219e72 43 /**
charlesmn 0:0be0bd219e72 44 * @brief Reads a buffer from the I2C peripheral device.
charlesmn 0:0be0bd219e72 45 * @param pBuffer pointer to the byte-array to read data in to
charlesmn 0:0be0bd219e72 46 * @param DeviceAddr specifies the peripheral device slave address.
charlesmn 0:0be0bd219e72 47 * @param RegisterAddr specifies the internal address register
charlesmn 0:0be0bd219e72 48 * where to start reading from (must be correctly masked).
charlesmn 0:0be0bd219e72 49 * @param NumByteToRead number of bytes to be read.
charlesmn 0:0be0bd219e72 50 * @retval 0 if ok,
charlesmn 0:0be0bd219e72 51 * @retval -1 if an I2C error has occured
charlesmn 0:0be0bd219e72 52 * @note On some devices if NumByteToWrite is greater
charlesmn 0:0be0bd219e72 53 * than one, the RegisterAddr must be masked correctly!
charlesmn 0:0be0bd219e72 54 */
charlesmn 0:0be0bd219e72 55 int VL53L3_i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
charlesmn 0:0be0bd219e72 56 uint16_t NumByteToRead) {
charlesmn 0:0be0bd219e72 57 int ret;
charlesmn 0:0be0bd219e72 58 uint8_t ExpanderData[2];
charlesmn 0:0be0bd219e72 59 ExpanderData[0] = RegisterAddr >> 8;
charlesmn 0:0be0bd219e72 60 ExpanderData[1] = RegisterAddr & 0x0FF;
charlesmn 0:0be0bd219e72 61 /* Send device address, with no STOP condition */
charlesmn 0:0be0bd219e72 62
charlesmn 0:0be0bd219e72 63 ret = write(DeviceAddr, (const char*)ExpanderData, 2, true);
charlesmn 0:0be0bd219e72 64
charlesmn 0:0be0bd219e72 65 if(!ret) {
charlesmn 0:0be0bd219e72 66 /* Read data, with STOP condition */
charlesmn 0:0be0bd219e72 67 ret = read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
charlesmn 0:0be0bd219e72 68 }
charlesmn 0:0be0bd219e72 69
charlesmn 0:0be0bd219e72 70 if(ret) return -1;
charlesmn 0:0be0bd219e72 71 return 0;
charlesmn 0:0be0bd219e72 72 }
charlesmn 0:0be0bd219e72 73
charlesmn 0:0be0bd219e72 74 private:
charlesmn 0:0be0bd219e72 75 static const unsigned int TEMP_BUF_SIZE = 256;
charlesmn 0:0be0bd219e72 76 };
charlesmn 0:0be0bd219e72 77
charlesmn 0:0be0bd219e72 78 #endif /* __DEV_53L1X_I2C_H */