this is testing

Revision:
0:e8a1ba50c46b
diff -r 000000000000 -r e8a1ba50c46b noos_mbed/drivers/dac/ad5686/ad5686.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/noos_mbed/drivers/dac/ad5686/ad5686.h	Thu Jan 14 19:12:57 2021 +0530
@@ -0,0 +1,274 @@
+/***************************************************************************//**
+*   @file   ad5686.h
+*   @brief  Header file of AD5686 Driver. This driver supporting the following
+*              devices: AD5684R, AD5685R, AD5686R, AD5694R, AD5695R, AD5696R,
+*
+*   @author Istvan Csomortani (istvan.csomortani@analog.com)
+********************************************************************************
+* Copyright 2013, 2020(c) Analog Devices, Inc.
+*
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification,
+* are permitted provided that the following conditions are met:
+*  - Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+*  - Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in
+*    the documentation and/or other materials provided with the
+*    distribution.
+*  - Neither the name of Analog Devices, Inc. nor the names of its
+*    contributors may be used to endorse or promote products derived
+*    from this software without specific prior written permission.
+*  - The use of this software may or may not infringe the patent rights
+*    of one or more patent holders.  This license does not release you
+*    from the requirement that you obtain separate licenses from these
+*    patent holders to use this software.
+*  - Use of the software either in source or binary form, must be run
+*    on or directly connected to an Analog Devices Inc. component.
+*
+* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
+* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
+* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+* IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS
+* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*
+*******************************************************************************/
+
+/*****************************************************************************/
+/***************************** Include Files *********************************/
+/*****************************************************************************/
+#include <stdint.h>
+#include "i2c.h"
+
+/* Control Bits */
+#define AD5686_CTRL_NOP          0
+#define AD5686_CTRL_WRITE        1
+#define AD5686_CTRL_UPDATE       2
+#define AD5686_CTRL_WRITEUPDATE  3
+#define AD5686_CTRL_PWR          4
+#define AD5686_CTRL_LDAC_MASK    5
+#define AD5686_CTRL_SWRESET      6
+#define AD5686_CTRL_IREF_REG     7
+#define AD5686_CTRL_DCEN         8
+#define AD5686_CTRL_RB_REG       9
+
+#define AD5683_CMD_WR_CTRL_REG   4
+#define AD5683_CTRL_RB_REG       5
+
+/* Power-down operation modes masks */
+#define AD5686_PWRM_NORMAL       0
+#define AD5686_PWRM_1K           1
+#define AD5686_PWRM_100K         2
+#define AD5686_PWRM_THREESTATE   3
+
+#define AD5686_PWRM_MASK         3
+
+/* Enable/disable defines */
+#define AD5686_INTREF_EN        1
+#define AD5686_INTREF_DIS       0
+#define AD5686_DC_EN            1
+#define AD5686_DC_DIS           0
+#define AD5686_RB_EN            1
+#define AD5686_RB_DIS           0
+
+#define MAX_RESOLUTION  16     // Maximum resolution of the supported devices
+
+#define PKT_LENGTH               3      // SPI packet length in byte
+
+#define ADDR_MASK                0xFF   // Mask for Address bits
+#define CMD_OFFSET               4      // Offset for Command
+
+#define AD5686_CMD_MASK          0xFF
+#define AD5686_MSB_MASK          0xFF00 // Most significant byte of the data word
+#define AD5686_MSB_OFFSET        8
+#define AD5686_LSB_MASK          0x00FF // Least significant byte of the data word
+#define AD5686_LSB_OFFSET        0
+
+#define AD5683_MIDB_OFFSET       4	   // Offset for middle bits
+#define AD5683_MIDB_MASK         0xFF
+#define AD5683_MSB_OFFSET        12
+#define AD5683_MSB_MASK          0xF
+#define AD5683_CMD_MASK          0xF
+#define AD5683_LSB_MASK          0xF
+#define AD5683_LSB_OFFSET        4
+
+#define AD5683_REG_MAP           0
+#define AD5686_REG_MAP           1
+
+/********************** AD5683 Write Control Register Bits ********************/
+
+#define AD5683_CTRL_DCEN(x)      (((((x) & 0x1) << 0) << 10) & 0xFC00)
+#define AD5683_CTRL_GM(x)        (((((x) & 0x1) << 1) << 10) & 0xFC00)
+#define AD5683_CTRL_INT_REF(x)   (((((x) & 0x1) << 2) << 10) & 0xFC00)
+#define AD5683_CTRL_PWRM(x)      (((((x) & 0x3) << 3) << 10) & 0xFC00)
+#define AD5683_SW_RESET          ((((0x1) << 5) << 10) & 0xFC00)
+
+/******************************************************************************/
+/*************************** Types Declarations *******************************/
+/******************************************************************************/
+
+/* Supported devices */
+enum ad5686_type {
+	ID_AD5671R,
+	ID_AD5672R,
+	ID_AD5673R,
+	ID_AD5674,
+	ID_AD5674R,
+	ID_AD5675R,
+	ID_AD5676,
+	ID_AD5676R,
+	ID_AD5677R,
+	ID_AD5679,
+	ID_AD5679R,
+	ID_AD5686,
+	ID_AD5684R,
+	ID_AD5685R,
+	ID_AD5686R,
+	ID_AD5687,
+	ID_AD5687R,
+	ID_AD5689,
+	ID_AD5689R,
+	ID_AD5697R,
+	ID_AD5694,
+	ID_AD5694R,
+	ID_AD5695R,
+	ID_AD5696,
+	ID_AD5696R,
+	ID_AD5681R,
+	ID_AD5682R,
+	ID_AD5683R,
+	ID_AD5683,
+	ID_AD5691R,
+	ID_AD5692R,
+	ID_AD5693R,
+	ID_AD5693
+};
+
+enum comm_type {
+	SPI,
+	I2C,
+};
+
+enum ad5686_dac_channels {
+	AD5686_CH_0 = 0,
+	AD5686_CH_1,
+	AD5686_CH_2,
+	AD5686_CH_3,
+	AD5686_CH_4,
+	AD5686_CH_5,
+	AD5686_CH_6,
+	AD5686_CH_7,
+	AD5686_CH_8,
+	AD5686_CH_9,
+	AD5686_CH_10,
+	AD5686_CH_11,
+	AD5686_CH_12,
+	AD5686_CH_13,
+	AD5686_CH_14,
+	AD5686_CH_15,
+};
+
+struct ad5686_chip_info {
+	uint8_t		resolution;
+	uint8_t		register_map;
+	enum comm_type	communication;
+	const uint32_t *channel_addr;
+};
+
+struct ad5686_dev {
+	/* I2C */
+	i2c_desc	*i2c_desc;
+	/* SPI */
+	spi_desc	*spi_desc;
+	/* GPIO */
+	struct gpio_desc	*gpio_reset;
+	struct gpio_desc	*gpio_ldac;
+	struct gpio_desc	*gpio_gain;
+	/* Device Settings */
+	enum ad5686_type	act_device;
+	uint32_t power_down_mask;
+	uint32_t ldac_mask;
+};
+
+struct ad5686_init_param {
+	/* I2C */
+	i2c_init_param	i2c_init;
+	/* SPI */
+	spi_init_param	spi_init;
+	/* GPIO */
+	struct gpio_init_param	gpio_reset;
+	struct gpio_init_param	gpio_ldac;
+	struct gpio_init_param	gpio_gain;
+	/* Device Settings */
+	enum ad5686_type	act_device;
+};
+
+/******************************************************************************/
+/************************ Functions Declarations ******************************/
+/******************************************************************************/
+/* Initialize SPI and Initial Values for AD5686 Board. */
+int32_t ad5686_init(struct ad5686_dev **device,
+		    struct ad5686_init_param init_param);
+
+/* Free the resources allocated by ad5686_init(). */
+int32_t ad5686_remove(struct ad5686_dev *dev);
+
+/* Write to input register */
+uint16_t ad5686_set_shift_reg(struct ad5686_dev *dev,
+			      uint8_t command,
+			      uint8_t address,
+			      uint16_t data);
+
+/* Write to Input Register n (dependent on LDAC) */
+void ad5686_write_register(struct ad5686_dev *dev,
+			   enum ad5686_dac_channels channel,
+			   uint16_t data);
+
+/* Update DAC Register n with contents of Input Register n */
+void ad5686_update_register(struct ad5686_dev *dev,
+			    enum ad5686_dac_channels channel);
+
+/* Write to and update DAC channel n */
+void ad5686_write_update_register(struct ad5686_dev *dev,
+				  enum ad5686_dac_channels channel,
+				  uint16_t data);
+
+/* Read back Input Register n */
+uint16_t ad5686_read_back_register(struct ad5686_dev *dev,
+				   enum ad5686_dac_channels channel);
+
+/* Power down / power up DAC */
+void ad5686_power_mode(struct ad5686_dev *dev,
+		       enum ad5686_dac_channels channel,
+		       uint8_t mode);
+
+/* Set up LDAC mask register */
+void ad5686_ldac_mask(struct ad5686_dev *dev,
+		      enum ad5686_dac_channels channel,
+		      uint8_t enable);
+
+/* Software reset (power-on reset) */
+void ad5686_software_reset(struct ad5686_dev *dev);
+
+/* Write to Internal reference setup register */
+void ad5686_internal_reference(struct ad5686_dev *dev,
+			       uint8_t value);
+
+/* Set up DCEN register (daisy-chain enable) */
+void ad5686_daisy_chain_en(struct ad5686_dev *dev,
+			   uint8_t value);
+
+/* Set up readback register (readback enable) */
+void ad5686_read_back_en(struct ad5686_dev *dev,
+			 uint8_t value);
+
+/* Set Gain mode */
+int32_t ad5686_gain_mode(struct ad5686_dev *dev, uint8_t value);