AD4130 Mbed IIO Firmware
Dependencies: tempsensors sdp_k1_sdram
app/ad4130_iio.c@2:871d585d96ee, 2022-07-15 (annotated)
- Committer:
- MPhalke@MPHALKE-L02.ad.analog.com
- Date:
- Fri Jul 15 17:47:44 2022 +0530
- Revision:
- 2:871d585d96ee
AD4130 firmware - initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1 | /***************************************************************************//** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 2 | * @file ad4130_iio.c |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 3 | * @brief Implementation of AD4130 IIO application interfaces |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 4 | * @details This module acts as an interface for AD4130 IIO application |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 5 | ******************************************************************************** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 6 | * Copyright (c) 2020-2022 Analog Devices, Inc. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 7 | * All rights reserved. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 8 | * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 9 | * This software is proprietary to Analog Devices, Inc. and its licensors. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 10 | * By using this software you agree to the terms of the associated |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 11 | * Analog Devices Software License Agreement. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 12 | *******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 13 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 14 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 15 | /***************************** Include Files **********************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 16 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 17 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 18 | #include <stdint.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 19 | #include <string.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 20 | #include <stdio.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 21 | #include <errno.h> |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 22 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 23 | #include "app_config.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 24 | #include "ad4130_iio.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 25 | #include "ad4130_data_capture.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 26 | #include "ad4130_support.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 27 | #include "ad4130_user_config.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 28 | #include "ad4130_temperature_sensor.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 29 | #include "ad4130_regs.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 30 | #include "no_os_error.h" |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 31 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 32 | /******** Forward declaration of getter/setter functions ********/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 33 | static int iio_ad4130_attr_get(void *device, char *buf, uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 34 | const struct iio_ch_info *channel, intptr_t priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 35 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 36 | static int iio_ad4130_attr_set(void *device, char *buf, uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 37 | const struct iio_ch_info *channel, intptr_t priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 38 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 39 | static int iio_ad4130_attr_available_get(void *device, char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 40 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 41 | const struct iio_ch_info *channel, intptr_t priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 42 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 43 | static int iio_ad4130_attr_available_set(void *device, char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 44 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 45 | const struct iio_ch_info *channel, intptr_t priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 46 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 47 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 48 | /************************ Macros/Constants ************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 49 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 50 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 51 | #define AD4130_CHN_ATTR(_name, _priv) {\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 52 | .name = _name,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 53 | .priv = _priv,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 54 | .show = iio_ad4130_attr_get,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 55 | .store = iio_ad4130_attr_set\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 56 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 57 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 58 | #define AD4130_CHN_AVAIL_ATTR(_name, _priv) {\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 59 | .name = _name,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 60 | .priv = _priv,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 61 | .show = iio_ad4130_attr_available_get,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 62 | .store = iio_ad4130_attr_available_set\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 63 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 64 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 65 | #define AD4130_CH(_name, _idx, _type) {\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 66 | .name = _name, \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 67 | .ch_type = _type,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 68 | .ch_out = 0,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 69 | .indexed = true,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 70 | .channel = _idx,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 71 | .scan_index = _idx,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 72 | .scan_type = &chn_scan,\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 73 | .attributes = ad4130_iio_ch_attributes\ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 74 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 75 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 76 | /* Minimum sampling frequency supported/configured in the firmware. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 77 | * Note: This is not an actual device sampling frequency. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 78 | * It is just used for IIO oscilloscope timeout calculations. */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 79 | #define AD4130_MIN_SAMPLING_FREQ (50 / ADC_USER_CHANNELS) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 80 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 81 | /* Default offset value for AD4130 */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 82 | #define AD4130_DEFAULT_OFFSET 0x800000 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 83 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 84 | /* Bytes per sample. This count should divide the total 256 bytes into 'n' equivalent |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 85 | * ADC samples as IIO library requests only 256bytes of data at a time in a given |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 86 | * data read query. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 87 | * For 1 to 8-bit ADC, bytes per sample = 1 (2^0) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 88 | * For 9 to 16-bit ADC, bytes per sample = 2 (2^1) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 89 | * For 17 to 32-bit ADC, bytes per sample = 4 (2^2) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 90 | **/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 91 | #define BYTES_PER_SAMPLE sizeof(uint32_t) // For ADC resolution of 24-bits |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 92 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 93 | /* Number of data storage bits (needed for IIO client to plot ADC data) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 94 | #define CHN_STORAGE_BITS (BYTES_PER_SAMPLE * 8) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 95 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 96 | /* Number of adc samples for loadcell calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 97 | #define LOADCELL_SAMPLES_COUNT 10 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 98 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 99 | /* CJC channel is 1 (common sensor for all Thermocouples). |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 100 | * Chn0 is used for TC connections */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 101 | #define CJC_CHANNEL 1 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 102 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 103 | /* Shunt resistance (in ohms) for AVDD/IOVDD current calculation */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 104 | #define I_RSENSE 10 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 105 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 106 | /* Multiplier for AVDD/IOVDD voltage calculation */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 107 | #define V_SCALE 6 |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 108 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 109 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 110 | /*************************** Types Declarations *******************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 111 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 112 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 113 | /* IIO interface descriptor */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 114 | static struct iio_desc *p_ad4130_iio_desc; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 115 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 116 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 117 | * Device name. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 118 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 119 | static const char dev_name[] = ACTIVE_DEVICE_NAME; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 120 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 121 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 122 | * Pointer to the struct representing the AD4130 IIO device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 123 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 124 | struct ad413x_dev *ad4130_dev_inst = NULL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 125 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 126 | /* Device attributes with default values */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 127 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 128 | /* Scale attribute value per channel */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 129 | static float attr_scale_val[ADC_USER_CHANNELS]; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 130 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 131 | /* IIOD channels scan structure */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 132 | static struct scan_type chn_scan; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 133 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 134 | /* AD4130 Attribute IDs */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 135 | enum ad4130_attribute_id { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 136 | RAW_ATTR_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 137 | SCALE_ATTR_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 138 | OFFSET_ATTR_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 139 | SAMPLING_FREQ_ATTR_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 140 | DEMO_CONFIG_ATTR_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 141 | INTERNAL_CALIB_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 142 | SYSTEM_CALIB_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 143 | LOADCELL_GAIN_CALIB_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 144 | LOADCELL_OFFSET_CALIB_ID, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 145 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 146 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 147 | /* Calibration state */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 148 | enum calibration_state { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 149 | FULL_SCALE_CALIB_STATE, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 150 | ZERO_SCALE_CALIB_STATE, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 151 | CALIB_COMPLETE_STATE |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 152 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 153 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 154 | /* Calibration status */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 155 | enum calib_status { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 156 | CALIB_NOT_DONE, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 157 | CALIB_IN_PROGRESS, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 158 | CALIB_DONE, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 159 | CALIB_ERROR, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 160 | CALIB_SKIPPED |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 161 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 162 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 163 | /* ADC calibration configs */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 164 | typedef struct { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 165 | uint32_t gain_before_calib; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 166 | uint32_t gain_after_calib; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 167 | uint32_t offset_before_calib; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 168 | uint32_t offset_after_calib; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 169 | } adc_calibration_configs; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 170 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 171 | /* ADC calibration variables */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 172 | static enum calibration_state system_calibration_state = ZERO_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 173 | static enum calibration_state internal_calibration_state = |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 174 | FULL_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 175 | static enum calib_status adc_calibration_status[ADC_USER_CHANNELS]; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 176 | static adc_calibration_configs adc_calibration_config[ADC_USER_CHANNELS]; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 177 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 178 | /* IIOD channels attributes list */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 179 | static struct iio_attribute ad4130_iio_ch_attributes[] = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 180 | AD4130_CHN_ATTR("raw", RAW_ATTR_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 181 | AD4130_CHN_ATTR("scale", SCALE_ATTR_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 182 | AD4130_CHN_ATTR("offset", OFFSET_ATTR_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 183 | AD4130_CHN_ATTR("internal_calibration", INTERNAL_CALIB_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 184 | AD4130_CHN_ATTR("system_calibration", SYSTEM_CALIB_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 185 | #if (ACTIVE_DEMO_MODE_CONFIG == LOADCELL_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 186 | AD4130_CHN_ATTR("loadcell_gain_calibration", LOADCELL_GAIN_CALIB_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 187 | AD4130_CHN_ATTR("loadcell_offset_calibration", LOADCELL_OFFSET_CALIB_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 188 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 189 | END_ATTRIBUTES_ARRAY |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 190 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 191 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 192 | /* IIOD device (global) attributes list */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 193 | static struct iio_attribute ad4130_iio_global_attributes[] = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 194 | AD4130_CHN_ATTR("sampling_frequency", SAMPLING_FREQ_ATTR_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 195 | AD4130_CHN_ATTR("demo_config", DEMO_CONFIG_ATTR_ID), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 196 | END_ATTRIBUTES_ARRAY |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 197 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 198 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 199 | /* IIOD context attributes list */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 200 | static struct iio_context_attribute ad4130_iio_context_attributes[] = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 201 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 202 | .name = "hw_mezzanine", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 203 | .value = HW_MEZZANINE_NAME |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 204 | }, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 205 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 206 | .name = "hw_carrier", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 207 | .value = HW_CARRIER_NAME |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 208 | }, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 209 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 210 | .name = "hw_name", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 211 | .value = HW_NAME |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 212 | }, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 213 | END_ATTRIBUTES_ARRAY |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 214 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 215 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 216 | static struct iio_channel ad4130_iio_channels[] = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 217 | #if (ACTIVE_DEMO_MODE_CONFIG == THERMISTOR_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 218 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_TEMP) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 219 | #elif (ACTIVE_DEMO_MODE_CONFIG == RTD_3WIRE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 220 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_TEMP) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 221 | #elif (ACTIVE_DEMO_MODE_CONFIG == RTD_2WIRE_CONFIG || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 222 | ACTIVE_DEMO_MODE_CONFIG == RTD_4WIRE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 223 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_TEMP) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 224 | #elif (ACTIVE_DEMO_MODE_CONFIG == THERMOCOUPLE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 225 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_TEMP), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 226 | AD4130_CH("CJC", CJC_CHANNEL, IIO_TEMP), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 227 | #elif (ACTIVE_DEMO_MODE_CONFIG == LOADCELL_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 228 | /* Note: Channel type is considered as voltage as IIO |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 229 | * oscilloscope doesn't support loadcell unit fomat of gram */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 230 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 231 | #elif (ACTIVE_DEMO_MODE_CONFIG == ECG_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 232 | AD4130_CH("Sensor1", SENSOR_CHANNEL0, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 233 | #elif (ACTIVE_DEMO_MODE_CONFIG == NOISE_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 234 | AD4130_CH("Chn0", 0, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 235 | #elif (ACTIVE_DEMO_MODE_CONFIG == POWER_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 236 | AD4130_CH("V_AVDD", POWER_TEST_V_AVDD_CHN, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 237 | AD4130_CH("V_IOVDD", POWER_TEST_V_IOVDD_CHN, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 238 | AD4130_CH("I_AVDD", POWER_TEST_I_AVDD_CHN, IIO_CURRENT), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 239 | AD4130_CH("I_IOVDD", POWER_TEST_I_IOVDD_CHN, IIO_CURRENT), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 240 | AD4130_CH("V_AVSS-DGND", POWER_TEST_V_AVSS_DGND_CHN, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 241 | AD4130_CH("V_REF", POWER_TEST_V_REF_CHN, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 242 | #else |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 243 | /* User default config */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 244 | AD4130_CH("Chn0", 0, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 245 | AD4130_CH("Chn1", 1, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 246 | AD4130_CH("Chn2", 2, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 247 | AD4130_CH("Chn3", 3, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 248 | AD4130_CH("Chn4", 4, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 249 | AD4130_CH("Chn5", 5, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 250 | AD4130_CH("Chn6", 6, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 251 | AD4130_CH("Chn7", 7, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 252 | #if (ADC_USER_CHANNELS > 8) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 253 | AD4130_CH("Chn8", 8, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 254 | AD4130_CH("Chn9", 9, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 255 | AD4130_CH("Chn10", 10, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 256 | AD4130_CH("Chn11", 11, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 257 | AD4130_CH("Chn12", 12, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 258 | AD4130_CH("Chn13", 13, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 259 | AD4130_CH("Chn14", 14, IIO_VOLTAGE), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 260 | AD4130_CH("Chn15", 15, IIO_VOLTAGE) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 261 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 262 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 263 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 264 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 265 | /* ADC raw averaged values from loadcell calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 266 | static uint32_t adc_raw_offset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 267 | static uint32_t adc_raw_gain; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 268 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 269 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 270 | /************************ Functions Prototypes ********************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 271 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 272 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 273 | static void update_vltg_conv_scale_factor(uint8_t chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 274 | static void perform_sensor_measurement_and_update_scale(uint32_t adc_raw, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 275 | uint16_t chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 276 | static int get_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 277 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 278 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 279 | intptr_t id); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 280 | static int set_calibration_routine(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 281 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 282 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 283 | intptr_t id); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 284 | static int get_loadcell_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 285 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 286 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 287 | intptr_t id); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 288 | static int set_loadcell_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 289 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 290 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 291 | intptr_t id); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 292 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 293 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 294 | /************************ Functions Definitions *******************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 295 | /******************************************************************************/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 296 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 297 | static char *get_demo_mode_config(void) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 298 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 299 | #if (ACTIVE_DEMO_MODE_CONFIG == RTD_2WIRE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 300 | return "2-Wire RTD"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 301 | #elif (ACTIVE_DEMO_MODE_CONFIG == RTD_3WIRE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 302 | return "3-Wire RTD"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 303 | #elif (ACTIVE_DEMO_MODE_CONFIG == RTD_4WIRE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 304 | return "4-Wire RTD"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 305 | #elif (ACTIVE_DEMO_MODE_CONFIG == THERMISTOR_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 306 | return "Thermistor"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 307 | #elif (ACTIVE_DEMO_MODE_CONFIG == THERMOCOUPLE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 308 | return "Thermocouple"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 309 | #elif (ACTIVE_DEMO_MODE_CONFIG == LOADCELL_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 310 | return "Loadcell"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 311 | #elif (ACTIVE_DEMO_MODE_CONFIG == ECG_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 312 | return "ECG"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 313 | #elif (ACTIVE_DEMO_MODE_CONFIG == NOISE_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 314 | return "Noise Test"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 315 | #elif (ACTIVE_DEMO_MODE_CONFIG == POWER_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 316 | return "Power Test"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 317 | #else |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 318 | return "User Default"; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 319 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 320 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 321 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 322 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 323 | * @brief Getter functions for AD4130 attributes |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 324 | * @param device[in]- Pointer to IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 325 | * @param buf[in]- IIO input data buffer |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 326 | * @param len[in]- Number of input bytes |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 327 | * @param channel[in] - Input channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 328 | * @param priv[in] - Attribute private ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 329 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 330 | * @Note This sampling_frequency attribute is used to define the |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 331 | * timeout period in IIO client during data capture. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 332 | * Timeout (1 chn) = (requested samples * sampling frequency) + 1sec |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 333 | * Timeout (n chns) = ((requested samples * n) / sampling frequency) + 1sec |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 334 | * e.g. If sampling frequency = 31.5KSPS, requested samples = 4000, n=1min or 8max |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 335 | * Timeout (1 chn) = (4000 / 315000) + 1 = ~1.13sec |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 336 | * Timeout (8 chns) = ((4000 * 8) / 315000) + 1 = ~2.01sec |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 337 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 338 | static int iio_ad4130_attr_get(void *device, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 339 | char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 340 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 341 | const struct iio_ch_info *channel, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 342 | intptr_t priv) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 343 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 344 | uint32_t adc_data_raw; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 345 | int32_t offset = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 346 | uint8_t bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 347 | uint32_t val; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 348 | int32_t ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 349 | uint8_t preset = ad4130_dev_inst->ch[channel->ch_num].preset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 350 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 351 | val = no_os_str_to_uint32(buf); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 352 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 353 | switch (priv) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 354 | case RAW_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 355 | /* Apply calibrated coefficients before new sampling */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 356 | if (adc_calibration_status[channel->ch_num] == CALIB_DONE) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 357 | ret = ad413x_reg_write(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 358 | AD413X_REG_OFFSET(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 359 | adc_calibration_config[channel->ch_num].offset_after_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 360 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 361 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 362 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 363 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 364 | ret = ad413x_reg_write(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 365 | AD413X_REG_GAIN(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 366 | adc_calibration_config[channel->ch_num].gain_after_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 367 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 368 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 369 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 370 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 371 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 372 | /* Capture the raw adc data */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 373 | ret = read_single_sample((uint8_t)channel->ch_num, &adc_data_raw); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 374 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 375 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 376 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 377 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 378 | perform_sensor_measurement_and_update_scale(adc_data_raw, channel->ch_num); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 379 | return sprintf(buf, "%d", adc_data_raw); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 380 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 381 | case SCALE_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 382 | return snprintf(buf, len, "%.10f", attr_scale_val[channel->ch_num]); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 383 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 384 | case OFFSET_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 385 | #if (ACTIVE_DEMO_MODE_CONFIG == USER_DEFAULT_CONFIG || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 386 | ACTIVE_DEMO_MODE_CONFIG == LOADCELL_CONFIG || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 387 | ACTIVE_DEMO_MODE_CONFIG == ECG_CONFIG || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 388 | ACTIVE_DEMO_MODE_CONFIG == NOISE_TEST_CONFIG || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 389 | ACTIVE_DEMO_MODE_CONFIG == POWER_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 390 | /* Note: For temperature type channels, the offset |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 391 | * is ignored, as signed conversion needed for IIO client |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 392 | * is done through perform_sensor_measurement_and_update_scale() */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 393 | bipolar = ad4130_dev_inst->bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 394 | if (bipolar) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 395 | /* For IIO clients, the raw to voltage conversion happens |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 396 | * using formula: voltage = (adc_raw + offset) * scale |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 397 | * Offset is determined based on the coding scheme of device. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 398 | * 'Offset binary coding' is used in bipolar mode while |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 399 | * 'Streight binary coding' is used in unipolar mode. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 400 | * */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 401 | offset = -ADC_MAX_COUNT_BIPOLAR; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 402 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 403 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 404 | return sprintf(buf, "%d", offset); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 405 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 406 | case SAMPLING_FREQ_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 407 | /* Sampling frequency for IIO oscilloscope timeout purpose. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 408 | * Does not indicate an actual sampling rate of device. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 409 | * Refer the 'note' in function description above for timeout calculations */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 410 | return sprintf(buf, "%d", AD4130_MIN_SAMPLING_FREQ); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 411 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 412 | case DEMO_CONFIG_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 413 | return sprintf(buf, "%s", get_demo_mode_config()); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 414 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 415 | case INTERNAL_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 416 | case SYSTEM_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 417 | return get_calibration_status(buf, len, channel->ch_num, priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 418 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 419 | case LOADCELL_GAIN_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 420 | case LOADCELL_OFFSET_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 421 | return get_loadcell_calibration_status(buf, len, channel->ch_num, priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 422 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 423 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 424 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 425 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 426 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 427 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 428 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 429 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 430 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 431 | * @brief Setter functions for AD4130 attributes |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 432 | * @param device[in]- Pointer to IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 433 | * @param buf[in]- IIO input data buffer |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 434 | * @param len[in]- Number of input bytes |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 435 | * @param channel[in] - Input channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 436 | * @param priv[in] - Attribute private ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 437 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 438 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 439 | static int iio_ad4130_attr_set(void *device, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 440 | char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 441 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 442 | const struct iio_ch_info *channel, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 443 | intptr_t priv) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 444 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 445 | switch (priv) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 446 | case RAW_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 447 | case SCALE_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 448 | case SAMPLING_FREQ_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 449 | case DEMO_CONFIG_ATTR_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 450 | /* All are read-only attributes */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 451 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 452 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 453 | case INTERNAL_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 454 | case SYSTEM_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 455 | return set_calibration_routine(buf, len, channel->ch_num, priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 456 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 457 | case LOADCELL_GAIN_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 458 | case LOADCELL_OFFSET_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 459 | return set_loadcell_calibration_status(buf, len, channel->ch_num, priv); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 460 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 461 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 462 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 463 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 464 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 465 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 466 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 467 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 468 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 469 | * @brief Perform the ADC internal/system calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 470 | * @param chn[in] - ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 471 | * @param calib_mode[in] - ADC calibration mode |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 472 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 473 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 474 | static int32_t perform_adc_calibration(uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 475 | enum ad413x_adc_mode calib_mode) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 476 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 477 | int32_t ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 478 | uint32_t data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 479 | uint8_t preset = ad4130_dev_inst->ch[chn].preset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 480 | uint8_t pga = ad4130_dev_inst->preset[preset].gain; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 481 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 482 | /* Put ADC into standby mode */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 483 | ret = ad413x_set_adc_mode(ad4130_dev_inst, AD413X_STANDBY_MODE); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 484 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 485 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 486 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 487 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 488 | /* Read the gain/offset coefficient values before calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 489 | if ((calib_mode == AD413X_INT_GAIN_CAL) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 490 | || (calib_mode == AD413X_SYS_GAIN_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 491 | if (calib_mode == AD413X_INT_GAIN_CAL) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 492 | /* Write offset default value before internal gain calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 493 | * as internal offset calibration is performed after internal |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 494 | * gain calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 495 | ret = ad413x_reg_write(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 496 | AD413X_REG_OFFSET(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 497 | AD4130_DEFAULT_OFFSET); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 498 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 499 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 500 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 501 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 502 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 503 | ret = ad413x_reg_read(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 504 | AD413X_REG_GAIN(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 505 | &data); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 506 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 507 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 508 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 509 | adc_calibration_config[chn].gain_before_calib = data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 510 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 511 | ret = ad413x_reg_read(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 512 | AD413X_REG_OFFSET(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 513 | &data); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 514 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 515 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 516 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 517 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 518 | adc_calibration_config[chn].offset_before_calib = data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 519 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 520 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 521 | /* Enable channel for calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 522 | ret = ad413x_ch_en(ad4130_dev_inst, chn, 1); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 523 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 524 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 525 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 526 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 527 | if ((calib_mode == AD413X_INT_GAIN_CAL) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 528 | || (calib_mode == AD413X_SYS_GAIN_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 529 | if ((calib_mode == AD413X_INT_GAIN_CAL) && (pga == AD413X_GAIN_1)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 530 | /* Internal gain calibration is not supported at gain of 1 */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 531 | adc_calibration_config[chn].gain_after_calib = |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 532 | adc_calibration_config[chn].gain_before_calib; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 533 | adc_calibration_status[chn] = CALIB_SKIPPED; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 534 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 535 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 536 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 537 | /* Perform internal/system gain (full-scale) calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 538 | ret = ad413x_set_adc_mode(ad4130_dev_inst, calib_mode); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 539 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 540 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 541 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 542 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 543 | /* Wait for conversion to finish */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 544 | no_os_mdelay(200); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 545 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 546 | /* Read the gain coefficient value (post calibrated) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 547 | ret = ad413x_reg_read(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 548 | AD413X_REG_GAIN(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 549 | &data); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 550 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 551 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 552 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 553 | adc_calibration_config[chn].gain_after_calib = data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 554 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 555 | /* Compare the pre and post adc calibration gain coefficients to check calibration status */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 556 | if (adc_calibration_config[chn].gain_after_calib == |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 557 | adc_calibration_config[chn].gain_before_calib) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 558 | /* Error in gain calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 559 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 560 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 561 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 562 | /* Perform internal/system offset (zero-scale) calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 563 | ret = ad413x_set_adc_mode(ad4130_dev_inst, calib_mode); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 564 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 565 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 566 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 567 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 568 | /* Wait for conversion to finish */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 569 | no_os_mdelay(200); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 570 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 571 | /* Read the coefficient value (post calibrated) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 572 | ret = ad413x_reg_read(ad4130_dev_inst, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 573 | AD413X_REG_OFFSET(preset), |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 574 | &data); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 575 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 576 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 577 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 578 | adc_calibration_config[chn].offset_after_calib = data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 579 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 580 | /* Compare the pre and post adc calibration offset coefficients to check calibration status */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 581 | if (adc_calibration_config[chn].offset_after_calib == |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 582 | adc_calibration_config[chn].offset_before_calib) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 583 | /* Error in offset calibration */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 584 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 585 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 586 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 587 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 588 | /* Disable previously enabled channel */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 589 | ret = ad413x_ch_en(ad4130_dev_inst, chn, 0); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 590 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 591 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 592 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 593 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 594 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 595 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 596 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 597 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 598 | * @brief Getter for the ADC internal/system calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 599 | * @param buf[in]- pointer to buffer holding attribute value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 600 | * @param len[in]- length of buffer string data |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 601 | * @param chn[in]- ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 602 | * @param id[in]- Attribute ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 603 | * @return Number of characters read/written |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 604 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 605 | static int get_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 606 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 607 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 608 | intptr_t id) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 609 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 610 | uint8_t buf_offset = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 611 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 612 | switch (id) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 613 | case SYSTEM_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 614 | case INTERNAL_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 615 | if (id == SYSTEM_CALIB_ID && system_calibration_state == CALIB_COMPLETE_STATE) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 616 | system_calibration_state = ZERO_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 617 | } else if (id == INTERNAL_CALIB_ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 618 | && internal_calibration_state == CALIB_COMPLETE_STATE) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 619 | internal_calibration_state = FULL_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 620 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 621 | if (adc_calibration_status[chn] != CALIB_ERROR |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 622 | && adc_calibration_status[chn] != CALIB_SKIPPED |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 623 | && adc_calibration_status[chn] != CALIB_IN_PROGRESS) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 624 | /* Return NA to indicate that system calibration is not supported |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 625 | * using IIO oscilloscope. Pyadi-iio script needs to be executed |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 626 | * to perform a system calibration due to manual intervention |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 627 | **/ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 628 | return snprintf(buf, len, "%s", "NA"); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 629 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 630 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 631 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 632 | sprintf(buf + buf_offset, "%08x", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 633 | adc_calibration_config[chn].gain_before_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 634 | buf_offset += 8; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 635 | sprintf(buf + buf_offset, "%08x", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 636 | adc_calibration_config[chn].gain_after_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 637 | buf_offset += 8; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 638 | sprintf(buf + buf_offset, "%08x", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 639 | adc_calibration_config[chn].offset_before_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 640 | buf_offset += 8; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 641 | sprintf(buf + buf_offset, "%08x", |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 642 | adc_calibration_config[chn].offset_after_calib); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 643 | buf_offset += 8; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 644 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 645 | if (adc_calibration_status[chn] == CALIB_ERROR) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 646 | sprintf(buf + buf_offset, "%s", "calibration_failed"); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 647 | buf_offset += (strlen("calibration_failed") + 1); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 648 | adc_calibration_status[chn] = CALIB_NOT_DONE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 649 | } else if (adc_calibration_status[chn] == CALIB_SKIPPED) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 650 | sprintf(buf + buf_offset, "%s", "calibration_skipped"); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 651 | buf_offset += (strlen("calibration_skipped") + 1); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 652 | adc_calibration_status[chn] = CALIB_NOT_DONE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 653 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 654 | sprintf(buf + buf_offset, "%s", "calibration_done"); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 655 | buf_offset += (strlen("calibration_done") + 1); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 656 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 657 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 658 | return buf_offset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 659 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 660 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 661 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 662 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 663 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 664 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 665 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 666 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 667 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 668 | * @brief Setter for the ADC internal/system calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 669 | * @param buf[in]- pointer to buffer holding attribute value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 670 | * @param len[in]- length of buffer string data |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 671 | * @param chn[in]- ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 672 | * @param id[in]- Attribute ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 673 | * @return Number of characters read/written |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 674 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 675 | static int set_calibration_routine(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 676 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 677 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 678 | intptr_t id) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 679 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 680 | switch (id) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 681 | case INTERNAL_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 682 | if (!strncmp(buf, "start_calibration", strlen(buf))) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 683 | switch (internal_calibration_state) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 684 | case FULL_SCALE_CALIB_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 685 | adc_calibration_status[chn] = CALIB_IN_PROGRESS; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 686 | if (perform_adc_calibration(chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 687 | AD413X_INT_GAIN_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 688 | adc_calibration_status[chn] = CALIB_ERROR; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 689 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 690 | internal_calibration_state = ZERO_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 691 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 692 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 693 | case ZERO_SCALE_CALIB_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 694 | if (perform_adc_calibration(chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 695 | AD413X_INT_OFFSET_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 696 | adc_calibration_status[chn] = CALIB_ERROR; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 697 | internal_calibration_state = FULL_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 698 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 699 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 700 | adc_calibration_status[chn] = CALIB_DONE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 701 | internal_calibration_state = CALIB_COMPLETE_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 702 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 703 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 704 | case CALIB_COMPLETE_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 705 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 706 | internal_calibration_state = FULL_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 707 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 708 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 709 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 710 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 711 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 712 | case SYSTEM_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 713 | if (!strncmp(buf, "start_calibration", strlen(buf))) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 714 | switch (system_calibration_state) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 715 | case ZERO_SCALE_CALIB_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 716 | adc_calibration_status[chn] = CALIB_IN_PROGRESS; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 717 | if (perform_adc_calibration(chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 718 | AD413X_SYS_OFFSET_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 719 | adc_calibration_status[chn] = CALIB_ERROR; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 720 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 721 | system_calibration_state = FULL_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 722 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 723 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 724 | case FULL_SCALE_CALIB_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 725 | if (perform_adc_calibration(chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 726 | AD413X_SYS_GAIN_CAL)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 727 | adc_calibration_status[chn] = CALIB_ERROR; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 728 | system_calibration_state = ZERO_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 729 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 730 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 731 | adc_calibration_status[chn] = CALIB_DONE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 732 | system_calibration_state = CALIB_COMPLETE_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 733 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 734 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 735 | case CALIB_COMPLETE_STATE: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 736 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 737 | system_calibration_state = ZERO_SCALE_CALIB_STATE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 738 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 739 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 740 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 741 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 742 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 743 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 744 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 745 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 746 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 747 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 748 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 749 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 750 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 751 | * @brief Getter for the Loadcell offset/gain calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 752 | * @param buf[in]- pointer to buffer holding attribute value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 753 | * @param len[in]- length of buffer string data |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 754 | * @param chn[in]- ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 755 | * @param id[in]- Attribute ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 756 | * @return Number of characters read/written |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 757 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 758 | static int get_loadcell_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 759 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 760 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 761 | intptr_t id) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 762 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 763 | switch (id) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 764 | case LOADCELL_OFFSET_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 765 | return sprintf(buf, "%d", adc_raw_offset); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 766 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 767 | case LOADCELL_GAIN_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 768 | return sprintf(buf, "%d", adc_raw_gain); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 769 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 770 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 771 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 772 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 773 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 774 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 775 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 776 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 777 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 778 | * @brief Setter for the Loadcell offset/gain calibration |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 779 | * @param buf[in]- pointer to buffer holding attribute value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 780 | * @param len[in]- length of buffer string data |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 781 | * @param chn[in]- ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 782 | * @param id[in]- Attribute ID |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 783 | * @return Number of characters read/written |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 784 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 785 | static int set_loadcell_calibration_status(char *buf, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 786 | uint32_t len, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 787 | uint8_t chn, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 788 | intptr_t id) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 789 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 790 | uint32_t adc_raw; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 791 | uint8_t sample_cnt; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 792 | uint64_t adc_raw_avg = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 793 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 794 | if (!strncmp(buf, "start_calibration", strlen(buf))) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 795 | switch (id) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 796 | case LOADCELL_OFFSET_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 797 | for (sample_cnt = 0; sample_cnt < LOADCELL_SAMPLES_COUNT; sample_cnt++) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 798 | read_single_sample(chn, &adc_raw); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 799 | adc_raw_avg += adc_raw; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 800 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 801 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 802 | adc_raw_avg /= LOADCELL_SAMPLES_COUNT; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 803 | adc_raw_offset = (uint32_t)adc_raw_avg; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 804 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 805 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 806 | case LOADCELL_GAIN_CALIB_ID: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 807 | for (sample_cnt = 0; sample_cnt < LOADCELL_SAMPLES_COUNT; sample_cnt++) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 808 | read_single_sample(chn, &adc_raw); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 809 | adc_raw_avg += adc_raw; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 810 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 811 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 812 | adc_raw_avg /= LOADCELL_SAMPLES_COUNT; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 813 | adc_raw_gain = (uint32_t)adc_raw_avg; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 814 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 815 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 816 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 817 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 818 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 819 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 820 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 821 | return len; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 822 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 823 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 824 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 825 | * @brief Read the debug register value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 826 | * @param dev[in]- Pointer to IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 827 | * @param reg[in]- Register address to read from |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 828 | * @param readval[in,out]- Pointer to variable to read data into |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 829 | * @return 0 in case of success or negative value otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 830 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 831 | int32_t debug_reg_read(void *dev, uint32_t reg, uint32_t *readval) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 832 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 833 | int32_t ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 834 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 835 | if (!dev || !readval || (reg > MAX_REGISTER_ADDRESS)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 836 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 837 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 838 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 839 | ret = ad413x_reg_read(dev, ad413x_regs[reg], readval); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 840 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 841 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 842 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 843 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 844 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 845 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 846 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 847 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 848 | * @brief Write into the debug register |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 849 | * @param dev[in]- Pointer to IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 850 | * @param reg[in]- Register address to write into |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 851 | * @param writeval[in]- Register value to write |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 852 | * @return 0 in case of success or negative value otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 853 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 854 | int32_t debug_reg_write(void *dev, uint32_t reg, uint32_t writeval) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 855 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 856 | int32_t ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 857 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 858 | if (!dev || (reg > MAX_REGISTER_ADDRESS)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 859 | return -EINVAL; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 860 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 861 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 862 | ret = ad413x_reg_write(dev, ad413x_regs[reg], writeval); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 863 | if (ret) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 864 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 865 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 866 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 867 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 868 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 869 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 870 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 871 | * @brief Read buffer data corresponding to AD4130 ADC IIO device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 872 | * @param iio_dev_data[in] - IIO device data instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 873 | * @return 0 in case of success or negative value otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 874 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 875 | static int32_t iio_ad4130_submit_buffer(struct iio_device_data *iio_dev_data) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 876 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 877 | uint32_t ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 878 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 879 | /* Read the samples counts equal to buffer size/block */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 880 | ret = read_buffered_data(&iio_dev_data->buffer->buf->buff, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 881 | iio_dev_data->buffer->size); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 882 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 883 | /* Increment the write spin count as buffer reads all 'n' samples |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 884 | * in one go which is also the size of buffer block for a given instance. |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 885 | * The read spin count is incremented from IIO library during buffer |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 886 | * write/offloading into transmit buffer */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 887 | if (iio_dev_data->buffer->buf->write.spin_count >= UINT32_MAX) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 888 | iio_dev_data->buffer->buf->write.spin_count = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 889 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 890 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 891 | iio_dev_data->buffer->buf->write.spin_count += 1; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 892 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 893 | return ret; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 894 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 895 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 896 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 897 | * @brief Prepare for data transfer |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 898 | * @param dev[in] - IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 899 | * @param ch_mask[in] - Channels select mask |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 900 | * @return 0 in case of success or negative value otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 901 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 902 | static int32_t iio_ad4130_prepare_transfer(void *dev, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 903 | uint32_t ch_mask) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 904 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 905 | return prepare_data_transfer(ch_mask, BYTES_PER_SAMPLE); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 906 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 907 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 908 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 909 | * @brief Terminate current data transfer |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 910 | * @param dev[in] - IIO device instance |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 911 | * @return 0 in case of success or negative value otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 912 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 913 | static int32_t iio_ad4130_end_transfer(void *dev) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 914 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 915 | return end_data_transfer(); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 916 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 917 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 918 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 919 | * @brief Perform the sensor measurement as per current demo config and update |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 920 | * the adc_raw value to sensor conversion scale factor for IIO client |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 921 | * @param adc_raw[in] - ADC raw value |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 922 | * @param chn[in] - ADC channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 923 | * @return none |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 924 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 925 | static void perform_sensor_measurement_and_update_scale(uint32_t adc_raw, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 926 | uint16_t chn) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 927 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 928 | float temperature = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 929 | int32_t cjc_raw_data; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 930 | float cjc_temp; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 931 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 932 | #if (ACTIVE_DEMO_MODE_CONFIG == THERMISTOR_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 933 | temperature = get_ntc_thermistor_temperature(ad4130_dev_inst, adc_raw, chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 934 | attr_scale_val[chn] = (temperature / adc_raw) * 1000.0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 935 | #elif ((ACTIVE_DEMO_MODE_CONFIG == RTD_2WIRE_CONFIG) || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 936 | (ACTIVE_DEMO_MODE_CONFIG == RTD_3WIRE_CONFIG) || \ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 937 | (ACTIVE_DEMO_MODE_CONFIG == RTD_4WIRE_CONFIG)) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 938 | temperature = get_rtd_temperature(ad4130_dev_inst, adc_raw, chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 939 | attr_scale_val[chn] = (temperature / adc_raw) * 1000.0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 940 | #elif (ACTIVE_DEMO_MODE_CONFIG == THERMOCOUPLE_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 941 | if (chn != CJC_CHANNEL) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 942 | /* Sample the CJC channel (TC channel is already sampled through |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 943 | * get_raw() function) */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 944 | if (read_single_sample(CJC_CHANNEL, (uint32_t *)&cjc_raw_data)) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 945 | return; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 946 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 947 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 948 | /* For calculating CJC temperature, TC raw data is not used */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 949 | chn = SENSOR_CHANNEL0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 950 | cjc_raw_data = adc_raw; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 951 | adc_raw = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 952 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 953 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 954 | /* Calculate the TC and CJC temperature and update scale factor */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 955 | temperature = get_tc_temperature(ad4130_dev_inst, adc_raw, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 956 | cjc_raw_data, chn, CJC_CHANNEL, &cjc_temp); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 957 | attr_scale_val[chn] = (temperature / adc_raw) * 1000.0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 958 | attr_scale_val[CJC_CHANNEL] = (cjc_temp / cjc_raw_data) * 1000.0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 959 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 960 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 961 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 962 | /*! |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 963 | * @brief Update scale factor for adc data to voltage conversion |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 964 | * for IIO client |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 965 | * @param chn[in] - Input channel |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 966 | * @return none |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 967 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 968 | static void update_vltg_conv_scale_factor(uint8_t chn) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 969 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 970 | enum ad413x_gain pga; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 971 | uint8_t preset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 972 | uint8_t bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 973 | float vref; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 974 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 975 | preset = ad4130_dev_inst->ch[chn].preset; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 976 | pga = ad4130_dev_inst->preset[preset].gain; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 977 | bipolar = ad4130_dev_inst->bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 978 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 979 | vref = ad4130_get_reference_voltage(ad4130_dev_inst, chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 980 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 981 | /* Get the scale factor for voltage conversion */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 982 | if (bipolar) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 983 | attr_scale_val[chn] = (vref / (ADC_MAX_COUNT_BIPOLAR * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 984 | (1 << pga))) * 1000; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 985 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 986 | attr_scale_val[chn] = (vref / (ADC_MAX_COUNT_UNIPOLAR * |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 987 | (1 << pga))) * 1000; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 988 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 989 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 990 | #if (ACTIVE_DEMO_MODE_CONFIG == POWER_TEST_CONFIG) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 991 | switch (chn) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 992 | case POWER_TEST_I_AVDD_CHN: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 993 | case POWER_TEST_I_IOVDD_CHN: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 994 | attr_scale_val[chn] /= I_RSENSE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 995 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 996 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 997 | case POWER_TEST_V_AVDD_CHN: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 998 | case POWER_TEST_V_IOVDD_CHN: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 999 | attr_scale_val[chn] *= V_SCALE; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1000 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1001 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1002 | default: |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1003 | break; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1004 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1005 | #endif |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1006 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1007 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1008 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1009 | * @brief Init for reading/writing and parameterization of a |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1010 | * ad4130 IIO device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1011 | * @param desc[in,out] - IIO device descriptor |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1012 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1013 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1014 | int32_t ad4130_iio_init(struct iio_device **desc) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1015 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1016 | struct iio_device *iio_ad4130_inst; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1017 | uint8_t chn; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1018 | uint8_t bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1019 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1020 | iio_ad4130_inst = calloc(1, sizeof(struct iio_device)); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1021 | if (!iio_ad4130_inst) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1022 | return -ENOMEM; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1023 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1024 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1025 | /* Update IIO device init parameters */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1026 | for (chn = 0; chn < ADC_USER_CHANNELS; chn++) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1027 | update_vltg_conv_scale_factor(chn); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1028 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1029 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1030 | /* Get the polarity of device */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1031 | bipolar = ad4130_dev_inst->bipolar; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1032 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1033 | if (bipolar) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1034 | /* Using offset-binary coding for bipolar mode */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1035 | chn_scan.sign = 's'; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1036 | chn_scan.realbits = CHN_STORAGE_BITS; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1037 | } else { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1038 | /* Using streight-binary coding for bipolar mode */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1039 | chn_scan.sign = 'u'; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1040 | chn_scan.realbits = ADC_RESOLUTION; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1041 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1042 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1043 | chn_scan.storagebits = CHN_STORAGE_BITS; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1044 | chn_scan.shift = 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1045 | chn_scan.is_big_endian = false; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1046 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1047 | iio_ad4130_inst->num_ch = NO_OS_ARRAY_SIZE(ad4130_iio_channels); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1048 | iio_ad4130_inst->channels = ad4130_iio_channels; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1049 | iio_ad4130_inst->attributes = ad4130_iio_global_attributes; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1050 | iio_ad4130_inst->context_attributes = ad4130_iio_context_attributes; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1051 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1052 | iio_ad4130_inst->submit = iio_ad4130_submit_buffer; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1053 | iio_ad4130_inst->pre_enable = iio_ad4130_prepare_transfer; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1054 | iio_ad4130_inst->post_disable = iio_ad4130_end_transfer; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1055 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1056 | iio_ad4130_inst->debug_reg_read = debug_reg_read; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1057 | iio_ad4130_inst->debug_reg_write = debug_reg_write; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1058 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1059 | *desc = iio_ad4130_inst; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1060 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1061 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1062 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1063 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1064 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1065 | * @brief Release resources allocated for IIO device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1066 | * @param desc[in] - IIO device descriptor |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1067 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1068 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1069 | int32_t ad4130_iio_remove(struct iio_desc *desc) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1070 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1071 | int32_t status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1072 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1073 | if (!desc) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1074 | return -ENOMEM; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1075 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1076 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1077 | status = iio_remove(desc); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1078 | if (status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1079 | return status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1080 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1081 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1082 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1083 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1084 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1085 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1086 | * @brief Initialize the IIO interface for AD4130 IIO device |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1087 | * @return 0 in case of success, negative error code otherwise |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1088 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1089 | int32_t ad4130_iio_initialize(void) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1090 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1091 | int32_t init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1092 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1093 | /* IIO device descriptor */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1094 | struct iio_device *p_iio_ad4130_dev; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1095 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1096 | /* IIO interface init parameters */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1097 | struct iio_init_param iio_init_params = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1098 | .phy_type = USE_UART, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1099 | .nb_devs = 1, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1100 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1101 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1102 | /* IIOD init parameters */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1103 | struct iio_device_init iio_device_init_params = { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1104 | .name = (char *)dev_name, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1105 | .raw_buf = adc_data_buffer, |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1106 | .raw_buf_len = DATA_BUFFER_SIZE |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1107 | }; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1108 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1109 | /* Init the system peripherals */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1110 | init_status = init_system(); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1111 | if (init_status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1112 | return init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1113 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1114 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1115 | /* Initialize AD4130 device and peripheral interface */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1116 | init_status = ad413x_init(&ad4130_dev_inst, ad4130_init_params); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1117 | if (init_status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1118 | return init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1119 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1120 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1121 | /* Initialize the AD4130 IIO application interface */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1122 | init_status = ad4130_iio_init(&p_iio_ad4130_dev); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1123 | if (init_status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1124 | return init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1125 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1126 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1127 | /* Initialize the IIO interface */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1128 | iio_init_params.uart_desc = uart_desc; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1129 | iio_device_init_params.dev = ad4130_dev_inst; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1130 | iio_device_init_params.dev_descriptor = p_iio_ad4130_dev; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1131 | iio_init_params.devs = &iio_device_init_params; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1132 | init_status = iio_init(&p_ad4130_iio_desc, &iio_init_params); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1133 | if (init_status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1134 | return init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1135 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1136 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1137 | /* Perform data capture initialization */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1138 | init_status = ad4130_data_capture_init(); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1139 | if (init_status) { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1140 | return init_status; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1141 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1142 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1143 | return 0; |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1144 | } |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1145 | |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1146 | /** |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1147 | * @brief Run the AD4130 IIO event handler |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1148 | * @return none |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1149 | * @details This function monitors the new IIO client event |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1150 | */ |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1151 | void ad4130_iio_event_handler(void) |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1152 | { |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1153 | (void)iio_step(p_ad4130_iio_desc); |
MPhalke@MPHALKE-L02.ad.analog.com | 2:871d585d96ee | 1154 | } |