Update platform drivers

Revision:
8:70fc373a5f46
Child:
9:9e247b9c9abf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/i2c.cpp	Wed Feb 26 06:09:13 2020 +0000
@@ -0,0 +1,174 @@
+/***************************************************************************//**
+ *   @file   i2c.cpp
+ *   @brief  Implementation of I2C No-OS platform driver interfaces
+********************************************************************************
+ * Copyright (c) 2019, 2020 Analog Devices, Inc.
+ *
+ * All rights reserved.
+ *
+ * This software is proprietary to Analog Devices, Inc. and its licensors.
+ * By using this software you agree to the terms of the associated
+ * Analog Devices Software License Agreement.
+*******************************************************************************/
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+
+#include <stdio.h>
+#include <mbed.h>
+
+#include "platform_drivers.h"
+#include "i2c_extra.h"
+
+/******************************************************************************/
+/********************** Macros and Constants Definitions **********************/
+/******************************************************************************/
+
+/******************************************************************************/
+/************************ Functions Declarations ******************************/
+/******************************************************************************/
+
+/******************************************************************************/
+/************************ Functions Definitions *******************************/
+/******************************************************************************/
+
+/**
+ * @brief Initialize the I2C communication peripheral.
+ * @param desc - The I2C descriptor.
+ * @param param - The structure that contains the I2C parameters.
+ * @return SUCCESS in case of success, FAILURE otherwise.
+ */
+int32_t i2c_init_noos(struct i2c_desc **desc,
+		      const struct i2c_init_param *param)
+{
+	mbed::I2C *i2c;		// pointer to new I2C instance
+	mbed_i2c_desc *mbed_desc;	// pointer to mbed i2c desc
+
+	if (desc) {
+		// Create an i2c descriptor object for the device
+		i2c_desc *new_desc = (i2c_desc *)malloc(sizeof(i2c_desc));
+		if (new_desc == NULL) {
+			return FAILURE;
+		}
+
+		new_desc->slave_address = param->slave_address;
+
+		// Configure and instantiate I2C protocol
+		i2c = new I2C(
+			(PinName)(((mbed_i2c_init_param *)param->extra)->i2c_sda_pin),
+			(PinName)(((mbed_i2c_init_param *)param->extra)->i2c_scl_pin));
+
+		if (i2c == NULL) {
+			return FAILURE;
+		}
+
+		// Create the i2c mbed descriptor object to store new i2c instance
+		mbed_desc = (mbed_i2c_desc *)malloc(sizeof(mbed_i2c_desc));
+		if (mbed_desc == NULL) {
+			return FAILURE;
+		}
+
+		mbed_desc->i2c_port = (I2C *)i2c;
+		new_desc->extra = (mbed_i2c_desc *)mbed_desc;
+
+		*desc = new_desc;
+
+		return SUCCESS;
+	}
+
+	return FAILURE;
+}
+
+
+/**
+ * @brief Free the resources allocated by i2c_init_noos().
+ * @param desc - The I2C descriptor.
+ * @return SUCCESS in case of success, FAILURE otherwise.
+ */
+int32_t i2c_remove(struct i2c_desc *desc)
+{
+	if (desc) {
+		// Free the I2C port object
+		if ((I2C *)(((mbed_i2c_desc *)(desc->extra))->i2c_port)) {
+			delete((I2C *)(((mbed_i2c_desc *)(desc->extra))->i2c_port));
+		}
+
+		// Free the I2C extra descriptor object
+		if ((mbed_i2c_desc *)(desc->extra)) {
+			free((mbed_i2c_desc *)(desc->extra));
+		}
+
+		// Free the I2C descriptor object
+		free(desc);
+
+		return SUCCESS;
+	}
+
+	return FAILURE;
+}
+
+
+/**
+ * @brief Write data to a slave device.
+ * @param desc - The I2C descriptor.
+ * @param data - Buffer that stores the transmission data.
+ * @param bytes_number - Number of bytes to write.
+ * @param stop_bit - Stop condition control.
+ *                   Example: 0 - A stop condition will not be generated;
+ *                            1 - A stop condition will be generated.
+ * @return SUCCESS in case of success, FAILURE otherwise.
+ */
+
+int32_t i2c_write_noos(struct i2c_desc *desc,
+		       uint8_t *data,
+		       uint8_t bytes_number,
+		       uint8_t stop_bit)
+{
+	mbed::I2C *i2c;
+	i2c = (I2C *)(((mbed_i2c_desc *)(desc->extra))->i2c_port);
+
+	/**
+	    The MBED I2C API is reversed for parameter 4
+	    Instead of stop_bit - it has
+	    @param repeated   - Repeated start, true - don't send stop at end default value is false.
+	    Inverting here to keep the no-OS/platform_drivers API
+	 */
+	if (!(i2c->write(desc->slave_address, (char *)data, bytes_number, !stop_bit))) {
+		return SUCCESS;
+	} else {
+		return FAILURE;
+	}
+}
+
+
+/**
+ * @brief Read data from a slave device.
+ * @param desc - The I2C descriptor.
+ * @param data - Buffer that will store the received data.
+ * @param bytes_number - Number of bytes to read.
+ * @param stop_bit - Stop condition control.
+ *                   Example: 0 - A stop condition will not be generated;
+ *                            1 - A stop condition will be generated.
+ * @return SUCCESS in case of success, FAILURE otherwise.
+ */
+int32_t i2c_read_noos(struct i2c_desc *desc,
+		      uint8_t *data,
+		      uint8_t bytes_number,
+		      uint8_t stop_bit)
+{
+	mbed::I2C *i2c;
+	i2c = (I2C *)(((mbed_i2c_desc *)(desc->extra))->i2c_port);
+
+	/**
+	    The MBED I2C API is reversed for parameter 4
+	    Instead of stop_bit - it has
+	    @param repeated   - Repeated start, true - don't send stop at end default value is false.
+	    Inverting here to keep the no-OS/platform_drivers API
+	 */
+	if (!(i2c->read(desc->slave_address, (char *)data, bytes_number, !stop_bit))) {
+		return SUCCESS;
+	} else {
+		return FAILURE;
+	}
+}