![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
this is testing
Diff: app/src/iio_ad7606_attr.h
- Revision:
- 0:3afcd581558d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/src/iio_ad7606_attr.h Thu Jan 14 18:54:16 2021 +0530 @@ -0,0 +1,580 @@ +/***************************************************************************//** +* @file iio_ad7606_attr.h +* @brief File for AD7606 IIO Attributes +******************************************************************************** +* Copyright (c) 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. +*******************************************************************************/ +#ifndef IIO_AD7606_ATTR_H_ +#define IIO_AD7606_ATTR_H_ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ + +#include <stdio.h> +#include <stdbool.h> + +#include "app_config.h" +#include "iio.h" +#include "iio_types.h" + +/******************************************************************************/ +/****************************** Macros ****************************************/ +/******************************************************************************/ + +extern ssize_t get_chn_scale(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_scale(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_range(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_range(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_gain(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_gain(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_offset(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_offset(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_phase_offset(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_phase_offset(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_temperature(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_temperature(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_vref(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_vref(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_vdrive(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_vdrive(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_aldo(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_aldo(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_dldo(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_dldo(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_bandwidth(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_bandwidth(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_open_wire_detect(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_open_wire_detect(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_calibrate_adc(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_calibrate_adc(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_chn_raw(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_chn_raw(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_operating_mode(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_operating_mode(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_power_down_mode(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_power_down_mode(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_range(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_range(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_oversampling(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_oversampling(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +extern ssize_t get_direct_reg_access(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); +extern ssize_t set_direct_reg_access(void *device, char *buf, size_t len, + const struct iio_ch_info *channel); + +/******************************************************************************/ +/*************************** Types Declarations *******************************/ +/******************************************************************************/ + +// XML describes the IIO context hierarchy for AD7606 family devices +static const char * const ad7606_phy_xml = +#if defined(DEV_AD7605_4) + "<device id=\"AD7605-4-phy\" name=\"ID_AD7605-4-phy\" >" +#elif defined(DEV_AD7606_4) + "<device id=\"AD7606-4-phy\" name=\"AD7606-4-phy\" >" +#elif defined(DEV_AD7606_6) + "<device id=\"AD7606-6-phy\" name=\"AD7606-6-phy\" >" +#elif defined(DEV_AD7606_8) + "<device id=\"AD7606-8-phy\" name=\"AD7606-8-phy\" >" +#elif defined(DEV_AD7606B) + "<device id=\"AD7606B-phy\" name=\"AD7606B-phy\" >" +#elif defined(DEV_AD7606C_16) + "<device id=\"AD7606C-phy\" name=\"AD7606C-16-phy\" >" +#elif defined(DEV_AD7606C_18) + "<device id=\"AD7606C-phy\" name=\"AD7606C-18-phy\" >" +#elif defined(DEV_AD7608) + "<device id=\"AD7608-phy\" name=\"AD7608-phy\" >" +#elif defined(DEV_AD7609) + "<device id=\"AD7609-phy\" name=\"AD7609-phy\" >" +#else +#endif + "<channel id=\"voltage1\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"0\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"0\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" + "<channel id=\"voltage2\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"1\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"1\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" + "<channel id=\"voltage3\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"2\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"2\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" + "<channel id=\"voltage4\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"3\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"3\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" +#if (NO_OF_CHANNELS > 4) + "<channel id=\"voltage5\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"4\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"4\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_oversampling\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" + "<channel id=\"voltage6\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"5\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"5\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" +#endif +#if (NO_OF_CHANNELS > 6) + "<channel id=\"voltage7\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"6\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"6\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" + "<channel id=\"voltage8\" type=\"input\" >" +#if (ADC_RESOLUTION > 16) + "<scan-element scale=\"0.1525\" format=\"le:s18/18>>0\" index =\"7\" />" +#else + "<scan-element scale=\"0.1525\" format=\"le:s16/16>>0\" index =\"7\" />" +#endif + "<attribute name=\"raw\" />" + "<attribute name=\"scale\" />" +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"chn_range\" />" + "<attribute name=\"chn_gain\" />" + "<attribute name=\"chn_offset\" />" + "<attribute name=\"Temperature\" />" + "<attribute name=\"Vref\" />" + "<attribute name=\"Vdrive\" />" + "<attribute name=\"ALDO\" />" + "<attribute name=\"DLDO\" />" + "<attribute name=\"perform_open_wire_detect\" />" + "<attribute name=\"do_calibration_(Vin_must_be_0)\" />" +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"bandwidth\" />" +#endif +#endif + "</channel>" +#endif +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + "<attribute name=\"operating_mode\" />" + "<attribute name=\"oversampling\" />" + "<debug-attribute name =\"direct_reg_access\" />" +#else + "<attribute name=\"power_down_mode\" />" + "<attribute name=\"range\" />" +#endif + "</device>"; + + +/* Channels IIO attribute structures */ + +static struct iio_attribute iio_attr_chn_scale = { + .name = "scale", + .show = get_chn_scale, + .store = set_chn_scale, +}; + +static struct iio_attribute iio_attr_chn_raw = { + .name = "raw", + .show = get_chn_raw, + .store = set_chn_raw, +}; + +static struct iio_attribute iio_attr_chn_range = { + .name = "chn_range", + .show = get_chn_range, + .store = set_chn_range, +}; + +static struct iio_attribute iio_attr_chn_gain = { + .name = "chn_gain", + .show = get_chn_gain, + .store = set_chn_gain, +}; + +static struct iio_attribute iio_attr_chn_offset = { + .name = "chn_offset", + .show = get_chn_offset, + .store = set_chn_offset, +}; + +static struct iio_attribute iio_attr_chn_phase_offset = { + .name = "chn_phase offset", + .show = get_chn_phase_offset, + .store = set_chn_phase_offset, +}; + +static struct iio_attribute iio_attr_chn_temperature = { + .name = "Temperature", + .show = get_chn_temperature, + .store = set_chn_temperature, +}; + +static struct iio_attribute iio_attr_chn_vref = { + .name = "Vref", + .show = get_chn_vref, + .store = set_chn_vref, +}; + +static struct iio_attribute iio_attr_chn_vdrive = { + .name = "Vdrive", + .show = get_chn_vdrive, + .store = set_chn_vdrive, +}; + +static struct iio_attribute iio_attr_chn_aldo = { + .name = "ALDO", + .show = get_chn_aldo, + .store = set_chn_aldo, +}; + +static struct iio_attribute iio_attr_chn_dldo = { + .name = "DLDO", + .show = get_chn_dldo, + .store = set_chn_dldo, +}; + +static struct iio_attribute iio_attr_bandwidth = { + .name = "bandwidth", + .show = get_bandwidth, + .store = set_bandwidth, +}; + +static struct iio_attribute iio_attr_chn_open_wire_detect = { + .name = "perform_open_wire_detect", + .show = get_chn_open_wire_detect, + .store = set_chn_open_wire_detect, +}; + +static struct iio_attribute iio_attr_calibrate_adc= { + .name = "do_calibration_(Vin_must_be_0)", + .show = get_chn_calibrate_adc, + .store = set_chn_calibrate_adc, +}; + + +struct iio_attribute *channel_input_attributes[] = { + &iio_attr_chn_raw, + &iio_attr_chn_scale, +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + &iio_attr_chn_range, + &iio_attr_chn_gain, + &iio_attr_chn_offset, + &iio_attr_chn_phase_offset, + &iio_attr_chn_temperature, + &iio_attr_chn_vref, + &iio_attr_chn_vdrive, + &iio_attr_chn_aldo, + &iio_attr_chn_dldo, + &iio_attr_chn_open_wire_detect, + &iio_attr_calibrate_adc, +#if defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + &iio_attr_bandwidth +#endif +#endif +}; + + +/* Device IIO attribute structures */ + +static struct iio_attribute iio_attr_operating_mode = { + .name = "operating_mode", + .show = get_operating_mode, + .store = set_operating_mode, +}; + +static struct iio_attribute iio_attr_power_down_mode = { + .name = "power_down_mode", + .show = get_power_down_mode, + .store = set_power_down_mode, +}; + +static struct iio_attribute iio_attr_range = { + .name = "range", + .show = get_range, + .store = set_range, +}; + +static struct iio_attribute iio_attr_oversampling = { + .name = "oversampling", + .show = get_oversampling, + .store = set_oversampling, +}; + +static struct iio_attribute iio_attr_direct_reg_access = { + .name = "direct_reg_access", + .show = get_direct_reg_access, + .store = set_direct_reg_access, +}; + +static struct iio_attribute *global_attributes[] = { +#if defined(DEV_AD7606B) || defined(DEV_AD7606C_18) || defined(DEV_AD7606C_16) + &iio_attr_operating_mode, + &iio_attr_oversampling, + &iio_attr_direct_reg_access, +#else + &iio_attr_power_down_mode, + &iio_attr_range, +#endif +}; + + +static struct iio_channel iio_channel_ch1_in = { + .name = "voltage1", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch2_in = { + .name = "voltage2", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch3_in = { + .name = "voltage3", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch4_in = { + .name = "voltage4", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch5_in = { + .name = "voltage5", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch6_in = { + .name = "voltage6", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch7_in = { + .name = "voltage7", + .attributes = channel_input_attributes, + .ch_out = false, +}; + +static struct iio_channel iio_channel_ch8_in = { + .name = "voltage8", + .attributes = channel_input_attributes, + .ch_out = false, +}; + + +static struct iio_channel *iio_ad7606_channels[] = { + &iio_channel_ch1_in, + &iio_channel_ch2_in, + &iio_channel_ch3_in, + &iio_channel_ch4_in, +#if (NO_OF_CHANNELS > 4) + &iio_channel_ch5_in, + &iio_channel_ch6_in, +#endif +#if (NO_OF_CHANNELS > 6) + &iio_channel_ch7_in, + &iio_channel_ch8_in, +#endif +}; + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +#endif /* IIO_AD7606_ATTR_H_ */