Rename library

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   VL53L3CX_NoShield_1Sensor_poll_Mb06x VL53L3_NoShield_1Sensor_polling_Mb63 X_NUCLEO_53L3A2 53L3A2_Ranging

Committer:
Charles MacNeill
Date:
Wed Jul 14 12:45:49 2021 +0100
Revision:
5:89031b2f5316
The class files now just are wrappers for the files in the "MODULES" directory.The porting directory includes the mbed interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Charles MacNeill 5:89031b2f5316 1 /* Define to prevent from recursive inclusion --------------------------------*/
Charles MacNeill 5:89031b2f5316 2 #ifndef __DEV_ToF_I2C_H
Charles MacNeill 5:89031b2f5316 3 #define __DEV_ToF_I2C_H
Charles MacNeill 5:89031b2f5316 4
Charles MacNeill 5:89031b2f5316 5 /* Includes ------------------------------------------------------------------*/
Charles MacNeill 5:89031b2f5316 6
Charles MacNeill 5:89031b2f5316 7 #include "mbed.h"
Charles MacNeill 5:89031b2f5316 8
Charles MacNeill 5:89031b2f5316 9 #include "pinmap.h"
Charles MacNeill 5:89031b2f5316 10
Charles MacNeill 5:89031b2f5316 11 static int mutex =0;
Charles MacNeill 5:89031b2f5316 12
Charles MacNeill 5:89031b2f5316 13 //Class replacing DevI2C class as it was not implementing a 16bit address registers
Charles MacNeill 5:89031b2f5316 14 class ToF_DevI2C : public I2C
Charles MacNeill 5:89031b2f5316 15 {
Charles MacNeill 5:89031b2f5316 16 public:
Charles MacNeill 5:89031b2f5316 17 /** Create a DevI2C Master interface, connected to the specified pins
Charles MacNeill 5:89031b2f5316 18 *
Charles MacNeill 5:89031b2f5316 19 * @param sda I2C data line pin
Charles MacNeill 5:89031b2f5316 20 * @param scl I2C clock line pin
Charles MacNeill 5:89031b2f5316 21 */
Charles MacNeill 5:89031b2f5316 22 ToF_DevI2C(PinName sda, PinName scl) : I2C(sda, scl) { printf ("ToF_DevI2C\n");}
Charles MacNeill 5:89031b2f5316 23
Charles MacNeill 5:89031b2f5316 24 /**
Charles MacNeill 5:89031b2f5316 25 * @brief Writes a buffer towards the I2C peripheral device.
Charles MacNeill 5:89031b2f5316 26 * @param pBuffer pointer to the byte-array data to send
Charles MacNeill 5:89031b2f5316 27 * @param DeviceAddr specifies the peripheral device slave address.
Charles MacNeill 5:89031b2f5316 28 * @param RegisterAddr specifies the internal address register
Charles MacNeill 5:89031b2f5316 29 * where to start writing to (must be correctly masked).
Charles MacNeill 5:89031b2f5316 30 * @param NumByteToWrite number of bytes to be written.
Charles MacNeill 5:89031b2f5316 31 * @retval 0 if ok,
Charles MacNeill 5:89031b2f5316 32 * @retval -1 if an I2C error has occured, or
Charles MacNeill 5:89031b2f5316 33 * @retval -2 on temporary buffer overflow (i.e. NumByteToWrite was too high)
Charles MacNeill 5:89031b2f5316 34 * @note On some devices if NumByteToWrite is greater
Charles MacNeill 5:89031b2f5316 35 * than one, the RegisterAddr must be masked correctly!
Charles MacNeill 5:89031b2f5316 36 */
Charles MacNeill 5:89031b2f5316 37
Charles MacNeill 5:89031b2f5316 38 int ToF_i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
Charles MacNeill 5:89031b2f5316 39 uint16_t NumByteToWrite) {
Charles MacNeill 5:89031b2f5316 40 int ret;
Charles MacNeill 5:89031b2f5316 41 uint8_t tmp[TEMP_BUF_SIZE];
Charles MacNeill 5:89031b2f5316 42
Charles MacNeill 5:89031b2f5316 43 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
Charles MacNeill 5:89031b2f5316 44
Charles MacNeill 5:89031b2f5316 45 // First, send device address. Then, send data and STOP condition
Charles MacNeill 5:89031b2f5316 46 tmp[0] = RegisterAddr >> 8;
Charles MacNeill 5:89031b2f5316 47 tmp[1] = RegisterAddr & 0x0FF;
Charles MacNeill 5:89031b2f5316 48 memcpy(tmp+2, pBuffer, NumByteToWrite);
Charles MacNeill 5:89031b2f5316 49
Charles MacNeill 5:89031b2f5316 50 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite+2, false);
Charles MacNeill 5:89031b2f5316 51
Charles MacNeill 5:89031b2f5316 52 if(ret) return -1;
Charles MacNeill 5:89031b2f5316 53 return 0;
Charles MacNeill 5:89031b2f5316 54 }
Charles MacNeill 5:89031b2f5316 55
Charles MacNeill 5:89031b2f5316 56 /**
Charles MacNeill 5:89031b2f5316 57 * @brief Reads a buffer from the I2C peripheral device.
Charles MacNeill 5:89031b2f5316 58 * @param pBuffer pointer to the byte-array to read data in to
Charles MacNeill 5:89031b2f5316 59 * @param DeviceAddr specifies the peripheral device slave address.
Charles MacNeill 5:89031b2f5316 60 * @param RegisterAddr specifies the internal address register
Charles MacNeill 5:89031b2f5316 61 * where to start reading from (must be correctly masked).
Charles MacNeill 5:89031b2f5316 62 * @param NumByteToRead number of bytes to be read.
Charles MacNeill 5:89031b2f5316 63 * @retval 0 if ok,
Charles MacNeill 5:89031b2f5316 64 * @retval -1 if an I2C error has occured
Charles MacNeill 5:89031b2f5316 65 * @note On some devices if NumByteToWrite is greater
Charles MacNeill 5:89031b2f5316 66 * than one, the RegisterAddr must be masked correctly!
Charles MacNeill 5:89031b2f5316 67 */
Charles MacNeill 5:89031b2f5316 68 int ToF_i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint16_t RegisterAddr,
Charles MacNeill 5:89031b2f5316 69 uint16_t NumByteToRead) {
Charles MacNeill 5:89031b2f5316 70 int ret;
Charles MacNeill 5:89031b2f5316 71 uint8_t ExpanderData[2];
Charles MacNeill 5:89031b2f5316 72 ExpanderData[0] = RegisterAddr >> 8;
Charles MacNeill 5:89031b2f5316 73 ExpanderData[1] = RegisterAddr & 0x0FF;
Charles MacNeill 5:89031b2f5316 74 /* Send device address, with no STOP condition */
Charles MacNeill 5:89031b2f5316 75 ret = write(DeviceAddr, (const char*)ExpanderData, 2, true);
Charles MacNeill 5:89031b2f5316 76 if(!ret) {
Charles MacNeill 5:89031b2f5316 77 /* Read data, with STOP condition */
Charles MacNeill 5:89031b2f5316 78 ret = read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
Charles MacNeill 5:89031b2f5316 79 }
Charles MacNeill 5:89031b2f5316 80 else
Charles MacNeill 5:89031b2f5316 81 {
Charles MacNeill 5:89031b2f5316 82 printf("ToF_i2c_read write failed %d %d %d %d\n",ret,DeviceAddr,RegisterAddr,NumByteToRead);
Charles MacNeill 5:89031b2f5316 83 }
Charles MacNeill 5:89031b2f5316 84
Charles MacNeill 5:89031b2f5316 85 if(ret) return -1;
Charles MacNeill 5:89031b2f5316 86 return 0;
Charles MacNeill 5:89031b2f5316 87 }
Charles MacNeill 5:89031b2f5316 88
Charles MacNeill 5:89031b2f5316 89
Charles MacNeill 5:89031b2f5316 90 int ToF_i2c_write_direct(uint8_t* pBuffer, uint16_t DeviceAddr,
Charles MacNeill 5:89031b2f5316 91 uint16_t NumByteToWrite) {
Charles MacNeill 5:89031b2f5316 92 int ret;
Charles MacNeill 5:89031b2f5316 93 uint8_t tmp[TEMP_BUF_SIZE];
Charles MacNeill 5:89031b2f5316 94
Charles MacNeill 5:89031b2f5316 95 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
Charles MacNeill 5:89031b2f5316 96
Charles MacNeill 5:89031b2f5316 97 // First, send device address. Then, send data and STOP condition
Charles MacNeill 5:89031b2f5316 98
Charles MacNeill 5:89031b2f5316 99 memcpy(tmp, pBuffer, NumByteToWrite);
Charles MacNeill 5:89031b2f5316 100
Charles MacNeill 5:89031b2f5316 101 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite, false);
Charles MacNeill 5:89031b2f5316 102 //printf("ToF_i2c_write_direct %d %d %d %d %d %d\n",DeviceAddr,tmp[0],(uint8_t)tmp[1],(uint8_t)tmp[2],NumByteToWrite,ret);
Charles MacNeill 5:89031b2f5316 103 if(ret) return -1;
Charles MacNeill 5:89031b2f5316 104 return 0;
Charles MacNeill 5:89031b2f5316 105 }
Charles MacNeill 5:89031b2f5316 106
Charles MacNeill 5:89031b2f5316 107 private:
Charles MacNeill 5:89031b2f5316 108 static const unsigned int TEMP_BUF_SIZE = 256;
Charles MacNeill 5:89031b2f5316 109 };
Charles MacNeill 5:89031b2f5316 110
Charles MacNeill 5:89031b2f5316 111 #endif /* __DEV_53L1X_I2C_H */