Skip to content

Commit 3061869

Browse files
committed
ad4880: add pyadi support
Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
1 parent 80796c5 commit 3061869

File tree

6 files changed

+137
-0
lines changed

6 files changed

+137
-0
lines changed

adi/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from adi.ad4170 import ad4170
2121
from adi.ad4630 import ad4630, adaq42xx
2222
from adi.ad4858 import ad4858
23+
from adi.ad4880 import ad4880
2324
from adi.ad5592r import ad5592r
2425
from adi.ad5686 import ad5686
2526
from adi.ad5754r import ad5754r

adi/ad4880.py

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# Copyright (C) 2022-2025 Analog Devices, Inc.
2+
#
3+
# SPDX short identifier: ADIBSD
4+
5+
from adi.attribute import attribute
6+
from adi.context_manager import context_manager
7+
from adi.rx_tx import rx
8+
9+
10+
class ad4880(rx, context_manager):
11+
12+
""" AD4880 ADC """
13+
14+
_complex_data = False
15+
channel = [] # type: ignore
16+
_device_name = ""
17+
18+
def __init__(self, uri="", device_name="ad4880"):
19+
20+
"""Initialize."""
21+
context_manager.__init__(self, uri, self._device_name)
22+
23+
compatible_part = "ad4880"
24+
self._ctrl = None
25+
26+
if not device_name:
27+
device_name = compatible_parts
28+
else:
29+
if device_name != compatible_part:
30+
raise Exception(f"Not a compatible device: {device_name}")
31+
32+
# Select the device matching device_name as working device
33+
for device in self._ctx.devices:
34+
if device.name == device_name:
35+
self._ctrl = device
36+
self._rxadc = device
37+
break
38+
39+
if not self._ctrl:
40+
raise Exception("Error in selecting matching device")
41+
42+
if not self._rxadc:
43+
raise Exception("Error in selecting matching device")
44+
45+
self._rx_channel_names = []
46+
self.channel = []
47+
for ch in self._ctrl.channels:
48+
name = ch._id
49+
self._rx_channel_names.append(name)
50+
self.channel.append(self._channel(self._ctrl, name))
51+
52+
rx.__init__(self)
53+
54+
class _channel(attribute):
55+
def __init__(self, ctrl, channel_name):
56+
self.name = channel_name
57+
self._ctrl = ctrl
58+
59+
@property
60+
def scale(self):
61+
"""scale: Scale value"""
62+
return self._get_iio_attr(self.name, "scale", False)
63+
64+
@property
65+
def lvds_cnv(self):
66+
"""scale: Scale value"""
67+
return self._get_iio_attr(self.name, "lvds_cnv", False)
68+
69+
@lvds_cnv.setter
70+
def lvds_cnv(self, calibscale):
71+
""""""
72+
self._set_iio_attr(self.name, "lvds_cnv", False, calibscale, self._ctrl)
73+
74+
@property
75+
def lvds_sync(self):
76+
""""""
77+
return self._get_iio_attr(self.name, "lvds_sync", False)
78+
79+
@lvds_sync.setter
80+
def calibscale(self, calibscale):
81+
"""Set calibration scale value."""
82+
self._set_iio_attr(self.name, "lvds_sync", False, calibscale, self._ctrl)
83+
84+
@property
85+
def sampling_frequency(self):
86+
"""sampling_frequency: Sampling frequency value"""
87+
return self._get_iio_dev_attr("sampling_frequency", False)
88+
89+
@property
90+
def sinc_dec_rate_available(self):
91+
""""""
92+
return self._get_iio_dev_attr("sinc_dec_rate_available", False)
93+
94+
@property
95+
def sinc_dec_rate(self):
96+
""""""
97+
return self._get_iio_dev_attr("sinc_dec_rate", False)
98+
99+
@sinc_dec_rate.setter
100+
def sinc_dec_rate(self, value):
101+
self._set_iio_dev_attr("sinc_dec_rate", value)
102+
103+
@property
104+
def filter_sel_available(self):
105+
""""""
106+
return self._get_iio_dev_attr_str("filter_sel_available", False)
107+
108+
@property
109+
def filter_sel(self):
110+
""""""
111+
return self._get_iio_dev_attr_str("filter_sel", False)
112+
113+
@filter_sel.setter
114+
def filter_sel(self, value):
115+
self._set_iio_dev_attr_str("filter_sel", value)

doc/source/devices/adi.ad4880.rst

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
ad4880
2+
=================
3+
4+
.. automodule:: adi.ad4880
5+
:members:
6+
:undoc-members:
7+
:show-inheritance:

doc/source/devices/index.rst

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Supported Devices
1818
adi.ad4170
1919
adi.ad4630
2020
adi.ad469x
21+
adi.ad4880
2122
adi.ad5592r
2223
adi.ad5627
2324
adi.ad5686

supported_parts.md

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
- AD4696
3535
- AD4697
3636
- AD4698
37+
- AD4880
3738
- AD5310R
3839
- AD5311R
3940
- AD5592R

test/test_ad4880.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import pytest
2+
3+
hardware = ["ad4880"]
4+
classname = ["adi.ad4880"]
5+
6+
7+
#########################################
8+
@pytest.mark.iio_hardware(hardware, True)
9+
@pytest.mark.parametrize("classname", [(classname)])
10+
@pytest.mark.parametrize("channel", [0, 1])
11+
def test_ad4880_rx_data(test_dma_rx, iio_uri, classname, channel):
12+
test_dma_rx(iio_uri, classname, channel)

0 commit comments

Comments
 (0)