Skip to content

Commit a91f225

Browse files
authored
Merge pull request #627 from threexc/tgamblin/ad4000_sign
2 parents 66c69d0 + de686f8 commit a91f225

8 files changed

Lines changed: 142 additions & 29 deletions

File tree

adi/ad4020.py

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
#
33
# SPDX short identifier: ADIBSD
44

5+
from decimal import Decimal
6+
57
import numpy as np
68

9+
from adi.attribute import attribute
710
from adi.context_manager import context_manager
811
from adi.rx_tx import rx
912

@@ -17,10 +20,11 @@ class ad4020(rx, context_manager):
1720
"ad4022",
1821
]
1922

23+
channel = []
2024
_device_name = ""
2125
_rx_data_type = np.int32
2226
_complex_data = False
23-
_rx_channel_names = ["voltage0"]
27+
_rx_channel_names = ["voltage0-voltage1"]
2428

2529
def __init__(self, uri="", device_name="ad4020"):
2630
if not device_name:
@@ -34,17 +38,44 @@ def __init__(self, uri="", device_name="ad4020"):
3438

3539
self._rxadc = self._ctx.find_device(_device_name)
3640
self._ctrl = self._ctx.find_device(_device_name)
41+
self.channel = []
42+
for ch in self._ctrl.channels:
43+
name = ch._id
44+
self._rx_channel_names.append(name)
45+
self.channel.append(self._channel(self._ctrl, name))
3746
rx.__init__(self)
3847

39-
@property
40-
def sampling_frequency(self):
41-
"""Get and set the sampling frequency."""
42-
return self._get_iio_dev_attr("sampling_frequency")
48+
class _channel(attribute):
49+
"""AD4020 channel"""
50+
51+
def __init__(self, ctrl, channel_name):
52+
self.name = channel_name
53+
self._ctrl = ctrl
54+
55+
@property
56+
def raw(self):
57+
"""AD4020 channel raw value"""
58+
return self._get_iio_attr(self.name, "raw", False)
59+
60+
@property
61+
def scale(self):
62+
"""AD4020 channel scale"""
63+
return float(self._get_iio_attr_str(self.name, "scale", False))
64+
65+
@scale.setter
66+
def scale(self, value):
67+
self._set_iio_attr(self.name, "scale", False, str(Decimal(value).real))
4368

44-
@sampling_frequency.setter
45-
def sampling_frequency(self, value):
46-
"""Set the sampling frequency."""
47-
self._set_iio_dev_attr("sampling_frequency", str(value))
69+
@property
70+
def sampling_frequency(self):
71+
"""Get and set the sampling frequency."""
72+
return self._get_iio_attr(self.name, "sampling_frequency", False)
73+
74+
@sampling_frequency.setter
75+
def sampling_frequency(self, value):
76+
"""Set the sampling frequency."""
77+
# self._set_iio_attr("sampling_frequency", str(value))
78+
self._set_iio_attr(self.name, "sampling_frequency", False, value)
4879

4980

5081
class ad4000(ad4020):
@@ -54,7 +85,8 @@ class ad4000(ad4020):
5485
"ad4008",
5586
]
5687

57-
_rx_data_type = np.int16
88+
_rx_channel_names = ["voltage0"]
89+
_rx_data_type = np.uint16
5890

5991
def __init__(self, uri="ip:analog.local", device_name="ad4000"):
6092
super().__init__(uri, device_name)
@@ -79,7 +111,8 @@ class ad4002(ad4020):
79111
"ad4010",
80112
]
81113

82-
_rx_data_type = np.int32
114+
_rx_channel_names = ["voltage0"]
115+
_rx_data_type = np.uint32
83116

84117
def __init__(self, uri="ip:analog.local", device_name="ad4002"):
85118
super().__init__(uri, device_name)

test/emu/devices/ad4000.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +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>
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.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>

0 commit comments

Comments
 (0)