Kenji Arai / 6180XA1_simple

Dependents:   Check_VL6180XA1_ToF

Fork of X_NUCLEO_6180XA1 by ST

Committer:
kenjiArai
Date:
Sun Jan 28 02:07:05 2018 +0000
Revision:
59:81afbb75311d
use VL6180XA1 chip wothout  X-NUCLEO-6180XA1 Board. Simple way to use the chip.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 59:81afbb75311d 1 /**
kenjiArai 59:81afbb75311d 2 ******************************************************************************
kenjiArai 59:81afbb75311d 3 * @file DevI2C.h
kenjiArai 59:81afbb75311d 4 * @author AST / EST
kenjiArai 59:81afbb75311d 5 * @version V1.1.0
kenjiArai 59:81afbb75311d 6 * @date 21-January-2016
kenjiArai 59:81afbb75311d 7 * @brief Header file for a special I2C class DevI2C which provides some
kenjiArai 59:81afbb75311d 8 * helper function for on-board communication
kenjiArai 59:81afbb75311d 9 ******************************************************************************
kenjiArai 59:81afbb75311d 10 * @attention
kenjiArai 59:81afbb75311d 11 *
kenjiArai 59:81afbb75311d 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
kenjiArai 59:81afbb75311d 13 *
kenjiArai 59:81afbb75311d 14 * Redistribution and use in source and binary forms, with or without modification,
kenjiArai 59:81afbb75311d 15 * are permitted provided that the following conditions are met:
kenjiArai 59:81afbb75311d 16 * 1. Redistributions of source code must retain the above copyright notice,
kenjiArai 59:81afbb75311d 17 * this list of conditions and the following disclaimer.
kenjiArai 59:81afbb75311d 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
kenjiArai 59:81afbb75311d 19 * this list of conditions and the following disclaimer in the documentation
kenjiArai 59:81afbb75311d 20 * and/or other materials provided with the distribution.
kenjiArai 59:81afbb75311d 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
kenjiArai 59:81afbb75311d 22 * may be used to endorse or promote products derived from this software
kenjiArai 59:81afbb75311d 23 * without specific prior written permission.
kenjiArai 59:81afbb75311d 24 *
kenjiArai 59:81afbb75311d 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
kenjiArai 59:81afbb75311d 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
kenjiArai 59:81afbb75311d 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
kenjiArai 59:81afbb75311d 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
kenjiArai 59:81afbb75311d 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
kenjiArai 59:81afbb75311d 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
kenjiArai 59:81afbb75311d 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
kenjiArai 59:81afbb75311d 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
kenjiArai 59:81afbb75311d 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
kenjiArai 59:81afbb75311d 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
kenjiArai 59:81afbb75311d 35 *
kenjiArai 59:81afbb75311d 36 ******************************************************************************
kenjiArai 59:81afbb75311d 37 */
kenjiArai 59:81afbb75311d 38
kenjiArai 59:81afbb75311d 39 /* Define to prevent from recursive inclusion --------------------------------*/
kenjiArai 59:81afbb75311d 40 #ifndef __DEV_I2C_H
kenjiArai 59:81afbb75311d 41 #define __DEV_I2C_H
kenjiArai 59:81afbb75311d 42
kenjiArai 59:81afbb75311d 43 /* Includes ------------------------------------------------------------------*/
kenjiArai 59:81afbb75311d 44 #include "mbed.h"
kenjiArai 59:81afbb75311d 45 #include "pinmap.h"
kenjiArai 59:81afbb75311d 46
kenjiArai 59:81afbb75311d 47 /* Classes -------------------------------------------------------------------*/
kenjiArai 59:81afbb75311d 48 /** Helper class DevI2C providing functions for multi-register I2C communication
kenjiArai 59:81afbb75311d 49 * common for a series of I2C devices
kenjiArai 59:81afbb75311d 50 */
kenjiArai 59:81afbb75311d 51 class DevI2C : public I2C
kenjiArai 59:81afbb75311d 52 {
kenjiArai 59:81afbb75311d 53 public:
kenjiArai 59:81afbb75311d 54 /** Create a DevI2C Master interface, connected to the specified pins
kenjiArai 59:81afbb75311d 55 *
kenjiArai 59:81afbb75311d 56 * @param sda I2C data line pin
kenjiArai 59:81afbb75311d 57 * @param scl I2C clock line pin
kenjiArai 59:81afbb75311d 58 */
kenjiArai 59:81afbb75311d 59 DevI2C(PinName sda, PinName scl) : I2C(sda, scl) {}
kenjiArai 59:81afbb75311d 60
kenjiArai 59:81afbb75311d 61 /**
kenjiArai 59:81afbb75311d 62 * @brief Writes a buffer towards the I2C peripheral device.
kenjiArai 59:81afbb75311d 63 * @param pBuffer pointer to the byte-array data to send
kenjiArai 59:81afbb75311d 64 * @param DeviceAddr specifies the peripheral device slave address.
kenjiArai 59:81afbb75311d 65 * @param RegisterAddr specifies the internal address register
kenjiArai 59:81afbb75311d 66 * where to start writing to (must be correctly masked).
kenjiArai 59:81afbb75311d 67 * @param NumByteToWrite number of bytes to be written.
kenjiArai 59:81afbb75311d 68 * @retval 0 if ok,
kenjiArai 59:81afbb75311d 69 * @retval -1 if an I2C error has occured, or
kenjiArai 59:81afbb75311d 70 * @retval -2 on temporary buffer overflow (i.e. NumByteToWrite was too high)
kenjiArai 59:81afbb75311d 71 * @note On some devices if NumByteToWrite is greater
kenjiArai 59:81afbb75311d 72 * than one, the RegisterAddr must be masked correctly!
kenjiArai 59:81afbb75311d 73 */
kenjiArai 59:81afbb75311d 74 int i2c_write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
kenjiArai 59:81afbb75311d 75 uint16_t NumByteToWrite) {
kenjiArai 59:81afbb75311d 76 int ret;
kenjiArai 59:81afbb75311d 77 uint8_t tmp[TEMP_BUF_SIZE];
kenjiArai 59:81afbb75311d 78
kenjiArai 59:81afbb75311d 79 if(NumByteToWrite >= TEMP_BUF_SIZE) return -2;
kenjiArai 59:81afbb75311d 80
kenjiArai 59:81afbb75311d 81 /* First, send device address. Then, send data and STOP condition */
kenjiArai 59:81afbb75311d 82 tmp[0] = RegisterAddr;
kenjiArai 59:81afbb75311d 83 memcpy(tmp+1, pBuffer, NumByteToWrite);
kenjiArai 59:81afbb75311d 84
kenjiArai 59:81afbb75311d 85 ret = write(DeviceAddr, (const char*)tmp, NumByteToWrite+1, false);
kenjiArai 59:81afbb75311d 86
kenjiArai 59:81afbb75311d 87 if(ret) return -1;
kenjiArai 59:81afbb75311d 88 return 0;
kenjiArai 59:81afbb75311d 89 }
kenjiArai 59:81afbb75311d 90
kenjiArai 59:81afbb75311d 91 /**
kenjiArai 59:81afbb75311d 92 * @brief Reads a buffer from the I2C peripheral device.
kenjiArai 59:81afbb75311d 93 * @param pBuffer pointer to the byte-array to read data in to
kenjiArai 59:81afbb75311d 94 * @param DeviceAddr specifies the peripheral device slave address.
kenjiArai 59:81afbb75311d 95 * @param RegisterAddr specifies the internal address register
kenjiArai 59:81afbb75311d 96 * where to start reading from (must be correctly masked).
kenjiArai 59:81afbb75311d 97 * @param NumByteToRead number of bytes to be read.
kenjiArai 59:81afbb75311d 98 * @retval 0 if ok,
kenjiArai 59:81afbb75311d 99 * @retval -1 if an I2C error has occured
kenjiArai 59:81afbb75311d 100 * @note On some devices if NumByteToWrite is greater
kenjiArai 59:81afbb75311d 101 * than one, the RegisterAddr must be masked correctly!
kenjiArai 59:81afbb75311d 102 */
kenjiArai 59:81afbb75311d 103 int i2c_read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,
kenjiArai 59:81afbb75311d 104 uint16_t NumByteToRead) {
kenjiArai 59:81afbb75311d 105 int ret;
kenjiArai 59:81afbb75311d 106
kenjiArai 59:81afbb75311d 107 /* Send device address, with no STOP condition */
kenjiArai 59:81afbb75311d 108 ret = write(DeviceAddr, (const char*)&RegisterAddr, 1, true);
kenjiArai 59:81afbb75311d 109 if(!ret) {
kenjiArai 59:81afbb75311d 110 /* Read data, with STOP condition */
kenjiArai 59:81afbb75311d 111 ret = read(DeviceAddr, (char*)pBuffer, NumByteToRead, false);
kenjiArai 59:81afbb75311d 112 }
kenjiArai 59:81afbb75311d 113
kenjiArai 59:81afbb75311d 114 if(ret) return -1;
kenjiArai 59:81afbb75311d 115 return 0;
kenjiArai 59:81afbb75311d 116 }
kenjiArai 59:81afbb75311d 117
kenjiArai 59:81afbb75311d 118 private:
kenjiArai 59:81afbb75311d 119 static const unsigned int TEMP_BUF_SIZE = 32;
kenjiArai 59:81afbb75311d 120 };
kenjiArai 59:81afbb75311d 121
kenjiArai 59:81afbb75311d 122 #endif /* __DEV_I2C_H */