this is testing

Revision:
0:e8a1ba50c46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/noos_mbed/drivers/adc/ad717x/ad717x.h	Thu Jan 14 19:12:57 2021 +0530
@@ -0,0 +1,334 @@
+/**************************************************************************//**
+*   @file    AD717X.h
+*   @brief   AD717X header file.
+*   	     Devices: AD7172-2, AD7172-4, AD7173-8, AD7175-2, AD7175-8, AD7176-2,
+*            AD7177-2, AD4111, AD4112, AD4114, AD4115
+*   @author  acozma (andrei.cozma@analog.com)
+*            dnechita (dan.nechita@analog.com)
+*******************************************************************************
+* Copyright 2015, 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.
+******************************************************************************/
+
+#ifndef __AD717X_H__
+#define __AD717X_H__
+
+/******************************************************************************/
+/***************************** Include Files **********************************/
+/******************************************************************************/
+#include <stdint.h>
+#include "platform_drivers.h"
+
+/******************************************************************************/
+/*************************** Types Declarations *******************************/
+/******************************************************************************/
+
+typedef enum {
+	AD717X_DISABLE,
+	AD717X_USE_CRC,
+	AD717X_USE_XOR,
+} ad717x_crc_mode;
+
+/*! AD717X register info */
+typedef struct {
+	int32_t addr;
+	int32_t value;
+	int32_t size;
+} ad717x_st_reg;
+
+/*
+ * The structure describes the device and is used with the ad717x driver.
+ * @slave_select_id: The ID of the Slave Select to be passed to the SPI calls.
+ * @regs: A reference to the register list of the device that the user must
+ *       provide when calling the Setup() function.
+ * @num_regs: The length of the register list.
+ * @userCRC: Error check type to use on SPI transfers.
+ */
+typedef struct {
+	/* SPI */
+	spi_desc		*spi_desc;
+	/* Device Settings */
+	ad717x_st_reg		*regs;
+	uint8_t			num_regs;
+	ad717x_crc_mode		useCRC;
+} ad717x_dev;
+
+typedef struct {
+	/* SPI */
+	spi_init_param		spi_init;
+	/* Device Settings */
+	ad717x_st_reg		*regs;
+	uint8_t			num_regs;
+} ad717x_init_param;
+
+/*****************************************************************************/
+/***************** AD717X Register Definitions *******************************/
+/*****************************************************************************/
+
+/* AD717X Register Map */
+#define AD717X_COMM_REG       0x00
+#define AD717X_STATUS_REG     0x00
+#define AD717X_ADCMODE_REG    0x01
+#define AD717X_IFMODE_REG     0x02
+#define AD717X_REGCHECK_REG   0x03
+#define AD717X_DATA_REG       0x04
+#define AD717X_GPIOCON_REG    0x06
+#define AD717X_ID_REG         0x07
+#define AD717X_CHMAP0_REG     0x10
+#define AD717X_CHMAP1_REG     0x11
+#define AD717X_CHMAP2_REG     0x12
+#define AD717X_CHMAP3_REG     0x13
+#define AD717X_CHMAP4_REG     0x14
+#define AD717X_CHMAP5_REG     0x15
+#define AD717X_CHMAP6_REG     0x16
+#define AD717X_CHMAP7_REG     0x17
+#define AD717X_CHMAP8_REG     0x18
+#define AD717X_CHMAP9_REG     0x19
+#define AD717X_CHMAP10_REG    0x1A
+#define AD717X_CHMAP11_REG    0x1B
+#define AD717X_CHMAP12_REG    0x1C
+#define AD717X_CHMAP13_REG    0x1D
+#define AD717X_CHMAP14_REG    0x1E
+#define AD717X_CHMAP15_REG    0x1F
+#define AD717X_SETUPCON0_REG  0x20
+#define AD717X_SETUPCON1_REG  0x21
+#define AD717X_SETUPCON2_REG  0x22
+#define AD717X_SETUPCON3_REG  0x23
+#define AD717X_SETUPCON4_REG  0x24
+#define AD717X_SETUPCON5_REG  0x25
+#define AD717X_SETUPCON6_REG  0x26
+#define AD717X_SETUPCON7_REG  0x27
+#define AD717X_FILTCON0_REG   0x28
+#define AD717X_FILTCON1_REG   0x29
+#define AD717X_FILTCON2_REG   0x2A
+#define AD717X_FILTCON3_REG   0x2B
+#define AD717X_FILTCON4_REG   0x2C
+#define AD717X_FILTCON5_REG   0x2D
+#define AD717X_FILTCON6_REG   0x2E
+#define AD717X_FILTCON7_REG   0x2F
+#define AD717X_OFFSET0_REG    0x30
+#define AD717X_OFFSET1_REG    0x31
+#define AD717X_OFFSET2_REG    0x32
+#define AD717X_OFFSET3_REG    0x33
+#define AD717X_OFFSET4_REG    0x34
+#define AD717X_OFFSET5_REG    0x35
+#define AD717X_OFFSET6_REG    0x36
+#define AD717X_OFFSET7_REG    0x37
+#define AD717X_GAIN0_REG      0x38
+#define AD717X_GAIN1_REG      0x39
+#define AD717X_GAIN2_REG      0x3A
+#define AD717X_GAIN3_REG      0x3B
+#define AD717X_GAIN4_REG      0x3C
+#define AD717X_GAIN5_REG      0x3D
+#define AD717X_GAIN6_REG      0x3E
+#define AD717X_GAIN7_REG      0x3F
+
+/* Communication Register bits */
+#define AD717X_COMM_REG_WEN    (0 << 7)
+#define AD717X_COMM_REG_WR     (0 << 6)
+#define AD717X_COMM_REG_RD     (1 << 6)
+#define AD717X_COMM_REG_RA(x)  ((x) & 0x3F)
+
+/* Status Register bits */
+#define AD717X_STATUS_REG_RDY      (1 << 7)
+#define AD717X_STATUS_REG_ADC_ERR  (1 << 6)
+#define AD717X_STATUS_REG_CRC_ERR  (1 << 5)
+#define AD717X_STATUS_REG_REG_ERR  (1 << 4)
+#define AD717X_STATUS_REG_CH(x)    ((x) & 0x0F)
+
+/* ADC Mode Register bits */
+#define AD717X_ADCMODE_REG_REF_EN     (1 << 15)
+#define AD717X_ADCMODE_SING_CYC       (1 << 13)
+#define AD717X_ADCMODE_REG_DELAY(x)   (((x) & 0x7) << 8)
+#define AD717X_ADCMODE_REG_MODE(x)    (((x) & 0x7) << 4)
+#define AD717X_ADCMODE_REG_CLKSEL(x)  (((x) & 0x3) << 2)
+
+/* ADC Mode Register additional bits for AD7172-2, AD7172-4, AD4111 and AD4112 */
+#define AD717X_ADCMODE_REG_HIDE_DELAY   (1 << 14)
+
+/* Interface Mode Register bits */
+#define AD717X_IFMODE_REG_ALT_SYNC      (1 << 12)
+#define AD717X_IFMODE_REG_IOSTRENGTH    (1 << 11)
+#define AD717X_IFMODE_REG_HIDE_DELAY    (1 << 10)
+#define AD717X_IFMODE_REG_DOUT_RESET    (1 << 8)
+#define AD717X_IFMODE_REG_CONT_READ     (1 << 7)
+#define AD717X_IFMODE_REG_DATA_STAT     (1 << 6)
+#define AD717X_IFMODE_REG_REG_CHECK     (1 << 5)
+#define AD717X_IFMODE_REG_XOR_EN        (0x01 << 2)
+#define AD717X_IFMODE_REG_CRC_EN        (0x02 << 2)
+#define AD717X_IFMODE_REG_XOR_STAT(x)   (((x) & AD717X_IFMODE_REG_XOR_EN) == AD717X_IFMODE_REG_XOR_EN)
+#define AD717X_IFMODE_REG_CRC_STAT(x)   (((x) & AD717X_IFMODE_REG_CRC_EN) == AD717X_IFMODE_REG_CRC_EN)
+#define AD717X_IFMODE_REG_DATA_WL16     (1 << 0)
+
+/* GPIO Configuration Register bits */
+#define AD717X_GPIOCON_REG_MUX_IO      (1 << 12)
+#define AD717X_GPIOCON_REG_SYNC_EN     (1 << 11)
+#define AD717X_GPIOCON_REG_ERR_EN(x)   (((x) & 0x3) << 9)
+#define AD717X_GPIOCON_REG_ERR_DAT     (1 << 8)
+#define AD717X_GPIOCON_REG_IP_EN1      (1 << 5)
+#define AD717X_GPIOCON_REG_IP_EN0      (1 << 4)
+#define AD717X_GPIOCON_REG_OP_EN1      (1 << 3)
+#define AD717X_GPIOCON_REG_OP_EN0      (1 << 2)
+#define AD717X_GPIOCON_REG_DATA1       (1 << 1)
+#define AD717X_GPIOCON_REG_DATA0       (1 << 0)
+
+/* GPIO Configuration Register additional bits for AD7172-4, AD7173-8 */
+#define AD717X_GPIOCON_REG_GP_DATA3    (1 << 7)
+#define AD717X_GPIOCON_REG_GP_DATA2    (1 << 6)
+#define AD717X_GPIOCON_REG_GP_DATA1    (1 << 1)
+#define AD717X_GPIOCON_REG_GP_DATA0    (1 << 0)
+
+/* GPIO Configuration Register additional bits for AD7173-8 */
+#define AD717X_GPIOCON_REG_PDSW        (1 << 14)
+#define AD717X_GPIOCON_REG_OP_EN2_3    (1 << 13)
+
+/* GPIO Configuration Register additional bits for AD4111, AD4112, AD4114, AD4115 */
+#define AD4111_GPIOCON_REG_OP_EN0_1    (1 << 13)
+#define AD4111_GPIOCON_REG_DATA1       (1 << 7)
+#define AD4111_GPIOCON_REG_DATA0       (1 << 6)
+
+/* GPIO Configuration Register additional bits for AD4111 */
+#define AD4111_GPIOCON_REG_OW_EN       (1 << 12)
+
+/* Channel Map Register 0-3 bits */
+#define AD717X_CHMAP_REG_CH_EN         (1 << 15)
+#define AD717X_CHMAP_REG_SETUP_SEL(x)  (((x) & 0x7) << 12)
+#define AD717X_CHMAP_REG_AINPOS(x)     (((x) & 0x1F) << 5)
+#define AD717X_CHMAP_REG_AINNEG(x)     (((x) & 0x1F) << 0)
+
+/* Channel Map Register additional bits for AD4111, AD4112 */
+#define AD4111_CHMAP_REG_INPUT(x)      (((x) & 0x3FF) << 0)
+
+/* Setup Configuration Register 0-3 bits */
+#define AD717X_SETUP_CONF_REG_BI_UNIPOLAR  (1 << 12)
+#define AD717X_SETUP_CONF_REG_REF_SEL(x)   (((x) & 0x3) << 4)
+
+/* Setup Configuration Register additional bits for AD7173-8 */
+#define AD717X_SETUP_CONF_REG_REF_BUF(x)  (((x) & 0x3) << 10)
+#define AD717X_SETUP_CONF_REG_AIN_BUF(x)  (((x) & 0x3) << 8)
+#define AD717X_SETUP_CONF_REG_BURNOUT_EN  (1 << 7)
+#define AD717X_SETUP_CONF_REG_BUFCHOPMAX  (1 << 6)
+
+/* Setup Configuration Register additional bits for AD7172-2, AD7172-4, AD7175-2 */
+#define AD717X_SETUP_CONF_REG_REFBUF_P    (1 << 11)
+#define AD717X_SETUP_CONF_REG_REFBUF_N    (1 << 10)
+#define AD717X_SETUP_CONF_REG_AINBUF_P    (1 << 9)
+#define AD717X_SETUP_CONF_REG_AINBUF_N    (1 << 8)
+
+/* Setup Configuration Register additional bits for AD4111, AD4112 */
+#define AD4111_SETUP_CONF_REG_REFPOS_BUF   (1 << 11)
+#define AD4111_SETUP_CONF_REG_REFNEG_BUF   (1 << 10)
+#define AD4111_SETUP_CONF_REG_AIN_BUF(x)   (((x) & 0x3) << 8)
+#define AD4111_SETUP_CONF_REG_BUFCHOPMAX   (1 << 6)
+
+/* Filter Configuration Register 0-3 bits */
+#define AD717X_FILT_CONF_REG_SINC3_MAP    (1 << 15)
+#define AD717X_FILT_CONF_REG_ENHFILTEN    (1 << 11)
+#define AD717X_FILT_CONF_REG_ENHFILT(x)   (((x) & 0x7) << 8)
+#define AD717X_FILT_CONF_REG_ORDER(x)     (((x) & 0x3) << 5)
+#define AD717X_FILT_CONF_REG_ODR(x)       (((x) & 0x1F) << 0)
+
+/* ID register mask for relevant bits */
+#define AD717X_ID_REG_MASK	  0xFFF0
+/* AD7172-2 ID */
+#define AD7172_2_ID_REG_VALUE 0x00D0
+/* AD7172-4 ID */
+#define AD7172_4_ID_REG_VALUE 0x2050
+/* AD7173-8 ID */
+#define AD7173_8_ID_REG_VALUE 0x30D0
+/* AD7175-2 ID */
+#define AD7175_2_ID_REG_VALUE 0x0CD0
+/* AD7175-8 ID */
+#define AD7175_8_ID_REG_VALUE 0x3CD0
+/* AD7176-2 ID */
+#define AD7176_2_ID_REG_VALUE 0x0C90
+/* AD7177-2 ID */
+#define AD7177_2_ID_REG_VALUE 0x4FD0
+/* AD411x ID */
+#define AD411X_ID_REG_VALUE   0x30D0
+
+/*****************************************************************************/
+/******************* AD717X Constants ****************************************/
+/*****************************************************************************/
+#define AD717X_CRC8_POLYNOMIAL_REPRESENTATION 0x07 /* x8 + x2 + x + 1 */
+
+/*****************************************************************************/
+/************************ Functions Declarations *****************************/
+/*****************************************************************************/
+
+/*! Retrieves a pointer to the register that matches the given address */
+ad717x_st_reg *AD717X_GetReg(ad717x_dev *device,
+			     uint8_t reg_address);
+
+/*! Reads the value of the specified register. */
+int32_t AD717X_ReadRegister(ad717x_dev *device,
+			    uint8_t addr);
+
+/*! Writes the value of the specified register. */
+int32_t AD717X_WriteRegister(ad717x_dev *device,
+			     uint8_t);
+
+/*! Resets the device. */
+int32_t AD717X_Reset(ad717x_dev *device);
+
+/*! Waits until a new conversion result is available. */
+int32_t AD717X_WaitForReady(ad717x_dev *device,
+			    uint32_t timeout);
+
+/*! Reads the conversion result from the device. */
+int32_t AD717X_ReadData(ad717x_dev *device,
+			int32_t* pData);
+
+/*! Computes data register read size to account for bit number and status
+ *  read. */
+int32_t AD717X_ComputeDataregSize(ad717x_dev *device);
+
+/*! Computes the CRC checksum for a data buffer. */
+uint8_t AD717X_ComputeCRC8(uint8_t* pBuf,
+			   uint8_t bufSize);
+
+/*! Computes the XOR checksum for a data buffer. */
+uint8_t AD717X_ComputeXOR8(uint8_t * pBuf,
+			   uint8_t bufSize);
+
+/*! Updates the CRC settings. */
+int32_t AD717X_UpdateCRCSetting(ad717x_dev *device);
+
+/*! Initializes the AD717X. */
+int32_t AD717X_Init(ad717x_dev **device,
+		    ad717x_init_param init_param);
+
+/*! Free the resources allocated by AD717X_Init(). */
+int32_t AD717X_remove(ad717x_dev *dev);
+
+#endif /* __AD717X_H__ */