Skip to content

Commit

Permalink
WIP: ad4020.py: refactor code, tests for ad400x changes
Browse files Browse the repository at this point in the history
The latest driver has sampling_frequency as a per-channel attribute
instead of device-level, so the code has to be modified to access it in
that way. Also adjust the test files to match.

This still needs a new ad4002.xml file generated.

Signed-off-by: Trevor Gamblin <[email protected]>
  • Loading branch information
threexc committed Jan 24, 2025
1 parent d4d8a8d commit 61bfd42
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 23 deletions.
48 changes: 38 additions & 10 deletions adi/ad4020.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import numpy as np

from adi.attribute import attribute
from adi.context_manager import context_manager
from adi.rx_tx import rx

Expand All @@ -17,6 +18,7 @@ class ad4020(rx, context_manager):
"ad4022",
]

channel = []
_device_name = ""
_rx_data_type = np.int32
_complex_data = False
Expand All @@ -34,18 +36,44 @@ def __init__(self, uri="", device_name="ad4020"):

self._rxadc = self._ctx.find_device(_device_name)
self._ctrl = self._ctx.find_device(_device_name)
self.channel = []
for ch in self._ctrl.channels:
name = ch._id
self._rx_channel_names.append(name)
self.channel.append(self._channel(self._ctrl, name))
rx.__init__(self)

@property
def sampling_frequency(self):
"""Get and set the sampling frequency."""
return self._get_iio_dev_attr("sampling_frequency")

@sampling_frequency.setter
def sampling_frequency(self, value):
"""Set the sampling frequency."""
self._set_iio_dev_attr("sampling_frequency", str(value))

class _channel(attribute):
"""AD4020 channel"""

def __init__(self, ctrl, channel_name):
self.name = channel_name
self._ctrl = ctrl

@property
def raw(self):
"""AD4020 channel raw value"""
return self._get_iio_attr(self.name, "raw", False)

@property
def scale(self):
"""AD4020 channel scale"""
return float(self._get_iio_attr_str(self.name, "scale", False))

@scale.setter
def scale(self, value):
self._set_iio_attr(self.name, "scale", False, str(Decimal(value).real))

@property
def sampling_frequency(self):
"""Get and set the sampling frequency."""
return self._get_iio_attr(self.name, "sampling_frequency", False)

@sampling_frequency.setter
def sampling_frequency(self, value):
"""Set the sampling frequency."""
#self._set_iio_attr("sampling_frequency", str(value))
self._set_iio_attr(self.name, "sampling_frequency", False, value)

class ad4000(ad4020):
_compatible_parts = [
Expand Down
2 changes: 1 addition & 1 deletion test/emu/devices/ad4000.xml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE context [<!ELEMENT context (device | context-attribute)*><!ELEMENT context-attribute EMPTY><!ELEMENT device (channel | attribute | debug-attribute | buffer-attribute)*><!ELEMENT channel (scan-element?, attribute*)><!ELEMENT attribute EMPTY><!ELEMENT scan-element EMPTY><!ELEMENT debug-attribute EMPTY><!ELEMENT buffer-attribute EMPTY><!ATTLIST context name CDATA #REQUIRED description CDATA #IMPLIED><!ATTLIST context-attribute name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST device id CDATA #REQUIRED name CDATA #IMPLIED><!ATTLIST channel id CDATA #REQUIRED type (input|output) #REQUIRED name CDATA #IMPLIED><!ATTLIST scan-element index CDATA #REQUIRED format CDATA #REQUIRED scale CDATA #IMPLIED><!ATTLIST attribute name CDATA #REQUIRED filename CDATA #IMPLIED value CDATA #IMPLIED><!ATTLIST debug-attribute name CDATA #REQUIRED value CDATA #IMPLIED><!ATTLIST buffer-attribute name CDATA #REQUIRED value CDATA #IMPLIED>]><context name="network" description="10.2.5.210 Linux zed-4 6.1.0-ad400x-dev-22242-gfa89d198ebcf #2 SMP PREEMPT Thu Feb 1 09:14:17 EST 2024 armv7l" ><context-attribute name="hw_carrier" value="Xilinx Zynq ZED" /><context-attribute name="hw_model" value="EVAL-AD4000FMCZ on Xilinx Zynq ZED" /><context-attribute name="hw_mezzanine" value="EVAL-AD4000FMCZ" /><context-attribute name="hw_name" value="AD4000" /><context-attribute name="hw_vendor" value="Analog Devices" /><context-attribute name="hw_serial" value="Empty Field" /><context-attribute name="hdl_system_id" value="[pulsar_adc_pmdz] [ad40xx: 1] on [zed] git branch [dev_ad7944_ad798x] git [c704018b1db9be0eb30ca4c62b6ed38492fd4a63] dirty [2023-11-06 08:00:56] UTC" /><context-attribute name="local,kernel" value="6.1.0-ad400x-dev-22242-gfa89d198ebcf" /><context-attribute name="uri" value="ip:10.2.5.210" /><context-attribute name="ip,ip-addr" value="10.2.5.210" /><device id="hwmon0" name="e000b000ethernetffffffff00" ><channel id="temp1" type="input" ><attribute name="crit" filename="temp1_crit" value="100000" /><attribute name="input" filename="temp1_input" value="43000" /><attribute name="max_alarm" filename="temp1_max_alarm" value="0" /></channel></device><device id="iio:device0" name="xadc" ><channel id="voltage5" name="vccoddr" type="input" ><attribute name="label" filename="in_voltage5_vccoddr_label" value="vccoddr" /><attribute name="raw" filename="in_voltage5_vccoddr_raw" value="2046" /><attribute name="scale" filename="in_voltage5_vccoddr_scale" value="0.732421875" /></channel><channel id="voltage0" name="vccint" type="input" ><attribute name="label" filename="in_voltage0_vccint_label" value="vccint" /><attribute name="raw" filename="in_voltage0_vccint_raw" value="1386" /><attribute name="scale" filename="in_voltage0_vccint_scale" value="0.732421875" /></channel><channel id="voltage4" name="vccpaux" type="input" ><attribute name="label" filename="in_voltage4_vccpaux_label" value="vccpaux" /><attribute name="raw" filename="in_voltage4_vccpaux_raw" value="2457" /><attribute name="scale" filename="in_voltage4_vccpaux_scale" value="0.732421875" /></channel><channel id="temp0" type="input" ><attribute name="offset" filename="in_temp0_offset" value="-2219" /><attribute name="raw" filename="in_temp0_raw" value="2593" /><attribute name="scale" filename="in_temp0_scale" value="123.040771484" /></channel><channel id="voltage7" name="vrefn" type="input" ><attribute name="label" filename="in_voltage7_vrefn_label" value="vrefn" /><attribute name="raw" filename="in_voltage7_vrefn_raw" value="3" /><attribute name="scale" filename="in_voltage7_vrefn_scale" value="0.732421875" /></channel><channel id="voltage1" name="vccaux" type="input" ><attribute name="label" filename="in_voltage1_vccaux_label" value="vccaux" /><attribute name="raw" filename="in_voltage1_vccaux_raw" value="2453" /><attribute name="scale" filename="in_voltage1_vccaux_scale" value="0.732421875" /></channel><channel id="voltage2" name="vccbram" type="input" ><attribute name="label" filename="in_voltage2_vccbram_label" value="vccbram" /><attribute name="raw" filename="in_voltage2_vccbram_raw" value="1392" /><attribute name="scale" filename="in_voltage2_vccbram_scale" value="0.732421875" /></channel><channel id="voltage3" name="vccpint" type="input" ><attribute name="label" filename="in_voltage3_vccpint_label" value="vccpint" /><attribute name="raw" filename="in_voltage3_vccpint_raw" value="1389" /><attribute name="scale" filename="in_voltage3_vccpint_scale" value="0.732421875" /></channel><channel id="voltage6" name="vrefp" type="input" ><attribute name="label" filename="in_voltage6_vrefp_label" value="vrefp" /><attribute name="raw" filename="in_voltage6_vrefp_raw" value="1706" /><attribute name="scale" filename="in_voltage6_vrefp_scale" value="0.732421875" /></channel><attribute name="sampling_frequency" value="961538" /><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device1" name="ad4000" ><channel id="voltage0" type="input" ><scan-element index="0" format="le:s16/16&gt;&gt;0" scale="0.009537" /><attribute name="offset" filename="in_voltage0_offset" value="-262144" /><attribute name="raw" filename="in_voltage0_raw" value="114631" /><attribute name="scale" filename="in_voltage0_scale" value="0.009536743" /></channel><attribute name="sampling_frequency" value="2000000" /><attribute name="waiting_for_supplier" value="0" /><buffer-attribute name="data_available" value="0" /><buffer-attribute name="direction" value="in" /><buffer-attribute name="length_align_bytes" value="8" /><debug-attribute name="direct_reg_access" value="0xEE" /></device><device id="iio_sysfs_trigger" ><attribute name="add_trigger" value="ERROR" /><attribute name="remove_trigger" value="ERROR" /></device></context>
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE context [<!ELEMENT context (device | context-attribute)*><!ELEMENT context-attribute EMPTY><!ELEMENT device (channel | attribute | debug-attribute | buffer-attribute)*><!ELEMENT channel (scan-element?, attribute*)><!ELEMENT attribute EMPTY><!ELEMENT scan-element EMPTY><!ELEMENT debug-attribute EMPTY><!ELEMENT buffer-attribute EMPTY><!ATTLIST context name CDATA #REQUIRED description CDATA #IMPLIED><!ATTLIST context-attribute name CDATA #REQUIRED value CDATA #REQUIRED><!ATTLIST device id CDATA #REQUIRED name CDATA #IMPLIED><!ATTLIST channel id CDATA #REQUIRED type (input|output) #REQUIRED name CDATA #IMPLIED><!ATTLIST scan-element index CDATA #REQUIRED format CDATA #REQUIRED scale CDATA #IMPLIED><!ATTLIST attribute name CDATA #REQUIRED filename CDATA #IMPLIED value CDATA #IMPLIED><!ATTLIST debug-attribute name CDATA #REQUIRED value CDATA #IMPLIED><!ATTLIST buffer-attribute name CDATA #REQUIRED value CDATA #IMPLIED>]><context name="network" description="10.2.5.213 Linux zed-8 6.6.0-ad4000-adi-24855-g9c953e02badc #1 SMP PREEMPT Fri Jan 24 11:54:39 EST 2025 armv7l" ><context-attribute name="hw_carrier" value="Xilinx Zynq ZED" /><context-attribute name="hw_model" value="EVAL-AD4000FMCZ on Xilinx Zynq ZED" /><context-attribute name="hw_mezzanine" value="EVAL-AD4000FMCZ" /><context-attribute name="hw_name" value="AD4000" /><context-attribute name="hw_vendor" value="Analog Devices" /><context-attribute name="hw_serial" value="Empty Field" /><context-attribute name="local,kernel" value="6.6.0-ad4000-adi-24855-g9c953e02badc" /><context-attribute name="uri" value="ip:10.2.5.213" /><context-attribute name="ip,ip-addr" value="10.2.5.213" /><device id="hwmon0" name="e000b000ethernetffffffff00" ><channel id="temp1" type="input" ><attribute name="crit" filename="temp1_crit" value="100000" /><attribute name="input" filename="temp1_input" value="39000" /><attribute name="max_alarm" filename="temp1_max_alarm" value="0" /></channel></device><device id="iio:device0" name="xadc" ><channel id="voltage5" name="vccoddr" type="input" ><attribute name="label" filename="in_voltage5_vccoddr_label" value="vccoddr" /><attribute name="raw" filename="in_voltage5_vccoddr_raw" value="2054" /><attribute name="scale" filename="in_voltage5_vccoddr_scale" value="0.732421875" /></channel><channel id="voltage0" name="vccint" type="input" ><attribute name="label" filename="in_voltage0_vccint_label" value="vccint" /><attribute name="raw" filename="in_voltage0_vccint_raw" value="1379" /><attribute name="scale" filename="in_voltage0_vccint_scale" value="0.732421875" /></channel><channel id="voltage4" name="vccpaux" type="input" ><attribute name="label" filename="in_voltage4_vccpaux_label" value="vccpaux" /><attribute name="raw" filename="in_voltage4_vccpaux_raw" value="2456" /><attribute name="scale" filename="in_voltage4_vccpaux_scale" value="0.732421875" /></channel><channel id="temp0" type="input" ><attribute name="offset" filename="in_temp0_offset" value="-2219" /><attribute name="raw" filename="in_temp0_raw" value="2595" /><attribute name="scale" filename="in_temp0_scale" value="123.040771484" /></channel><channel id="voltage7" name="vrefn" type="input" ><attribute name="label" filename="in_voltage7_vrefn_label" value="vrefn" /><attribute name="raw" filename="in_voltage7_vrefn_raw" value="-2" /><attribute name="scale" filename="in_voltage7_vrefn_scale" value="0.732421875" /></channel><channel id="voltage1" name="vccaux" type="input" ><attribute name="label" filename="in_voltage1_vccaux_label" value="vccaux" /><attribute name="raw" filename="in_voltage1_vccaux_raw" value="2449" /><attribute name="scale" filename="in_voltage1_vccaux_scale" value="0.732421875" /></channel><channel id="voltage2" name="vccbram" type="input" ><attribute name="label" filename="in_voltage2_vccbram_label" value="vccbram" /><attribute name="raw" filename="in_voltage2_vccbram_raw" value="1379" /><attribute name="scale" filename="in_voltage2_vccbram_scale" value="0.732421875" /></channel><channel id="voltage3" name="vccpint" type="input" ><attribute name="label" filename="in_voltage3_vccpint_label" value="vccpint" /><attribute name="raw" filename="in_voltage3_vccpint_raw" value="1374" /><attribute name="scale" filename="in_voltage3_vccpint_scale" value="0.732421875" /></channel><channel id="voltage6" name="vrefp" type="input" ><attribute name="label" filename="in_voltage6_vrefp_label" value="vrefp" /><attribute name="raw" filename="in_voltage6_vrefp_raw" value="1703" /><attribute name="scale" filename="in_voltage6_vrefp_scale" value="0.732421875" /></channel><attribute name="sampling_frequency" value="961538" /><attribute name="waiting_for_supplier" value="0" /></device><device id="iio:device1" name="ad4000" ><channel id="voltage0" type="input" ><scan-element index="0" format="le:u16/32&gt;&gt;0" scale="0.076294" /><attribute name="offset" filename="in_voltage0_offset" value="0" /><attribute name="raw" filename="in_voltage0_raw" value="28576" /><attribute name="sampling_frequency" filename="in_voltage0_sampling_frequency" value="1494768" /><attribute name="scale" filename="in_voltage0_scale" value="0.076293945" /><attribute name="scale_available" filename="in_voltage0_scale_available" value="0.076293945 0.068664551" /></channel><attribute name="waiting_for_supplier" value="0" /><buffer-attribute name="data_available" value="0" /><buffer-attribute name="direction" value="in" /><buffer-attribute name="length_align_bytes" value="8" /></device><device id="iio_sysfs_trigger" ><attribute name="add_trigger" value="ERROR" /><attribute name="remove_trigger" value="ERROR" /></device></context>
12 changes: 9 additions & 3 deletions test/test_ad4000.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,22 @@
@pytest.mark.iio_hardware(hardware)
@pytest.mark.parametrize("classname", [(classname)])
@pytest.mark.parametrize(
"attr, val",
"attr, val, tol, repeats, sleep, sub_channel",
[
(
"sampling_frequency",
[10000, 50000, 100000, 200000, 500000, 1000000, 2000000],
1,
1,
0,
"_channel",
),
],
)
def test_ad4000_attr(test_attribute_multiple_values, iio_uri, classname, attr, val):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1)
def test_ad4000_attr(test_attribute_multiple_values, iio_uri, classname, attr,
val, tol, repeats, sleep, sub_channel):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1, repeats,
sleep, sub_channel)


#########################################
Expand Down
12 changes: 9 additions & 3 deletions test/test_ad4001.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,22 @@
@pytest.mark.iio_hardware(hardware)
@pytest.mark.parametrize("classname", [(classname)])
@pytest.mark.parametrize(
"attr, val",
"attr, val, tol, repeats, sleep, sub_channel",
[
(
"sampling_frequency",
[10000, 50000, 100000, 200000, 500000, 1000000, 2000000],
1,
1,
0,
"_channel",
),
],
)
def test_ad4001_attr(test_attribute_multiple_values, iio_uri, classname, attr, val):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1)
def test_ad4001_attr(test_attribute_multiple_values, iio_uri, classname, attr,
val, tol, repeats, sleep, sub_channel):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1, repeats,
sleep, sub_channel)


#########################################
Expand Down
12 changes: 9 additions & 3 deletions test/test_ad4002.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,22 @@
@pytest.mark.iio_hardware(hardware)
@pytest.mark.parametrize("classname", [(classname)])
@pytest.mark.parametrize(
"attr, val",
"attr, val, tol, repeats, sleep, sub_channel",
[
(
"sampling_frequency",
[10000, 50000, 100000, 200000, 500000, 1000000, 2000000],
1,
1,
0,
"_channel",
),
],
)
def test_ad4002_attr(test_attribute_multiple_values, iio_uri, classname, attr, val):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1)
def test_ad4002_attr(test_attribute_multiple_values, iio_uri, classname, attr,
val, tol, repeats, sleep, sub_channel):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1, repeats,
sleep, sub_channel)


#########################################
Expand Down
12 changes: 9 additions & 3 deletions test/test_ad4003.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,22 @@
@pytest.mark.iio_hardware(hardware)
@pytest.mark.parametrize("classname", [(classname)])
@pytest.mark.parametrize(
"attr, val",
"attr, val, tol, repeats, sleep, sub_channel",
[
(
"sampling_frequency",
[10000, 50000, 100000, 200000, 500000, 1000000, 2000000],
1,
1,
0,
"_channel",
),
],
)
def test_ad4003_attr(test_attribute_multiple_values, iio_uri, classname, attr, val):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1)
def test_ad4003_attr(test_attribute_multiple_values, iio_uri, classname, attr,
val, tol, repeats, sleep, sub_channel):
test_attribute_multiple_values(iio_uri, classname, attr, val, 1, repeats,
sleep, sub_channel)


#########################################
Expand Down

0 comments on commit 61bfd42

Please sign in to comment.