Skip to content

Commit 9dad3fe

Browse files
committed
Simplify temp attribute
Signed-off-by: Macy Libed <macy.libed@analog.com>
1 parent 9a08d3b commit 9dad3fe

File tree

3 files changed

+102
-131
lines changed

3 files changed

+102
-131
lines changed

adi/adt7420.py

Lines changed: 95 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,95 @@
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-
8-
9-
class adt7420(attribute, context_manager):
10-
11-
_device_name = "adt7420"
12-
13-
def __init__(self, uri=""):
14-
15-
context_manager.__init__(self, uri, self._device_name)
16-
17-
self._ctrl = self._ctx.find_device(self._device_name)
18-
19-
if not self._ctrl:
20-
raise Exception("ADT7420 device not found")
21-
22-
self.channel = []
23-
self._rx_channel_names = []
24-
25-
for ch in self._ctrl.channels:
26-
name = ch._id
27-
28-
self._rx_channel_names.append(name)
29-
self.channel.append(name)
30-
31-
if name == "temp":
32-
# no-OS
33-
setattr(self, name, self.channel_temp(self._ctrl, name))
34-
self.temp = self.channel_temp(self._ctrl, "temp")
35-
elif name == "temp1":
36-
# Linux
37-
setattr(self, name, self.channel_temp1(self._ctrl, name))
38-
self.temp = self.channel_temp1(self._ctrl, "temp1")
39-
else:
40-
raise Exception(f"Unsupported: {name}")
41-
42-
class channel_temp(attribute):
43-
"""Channel for no-OS driver"""
44-
45-
def __init__(self, ctrl, channel_name):
46-
self._ctrl = ctrl
47-
self.name = channel_name
48-
49-
@property
50-
def temp_val(self):
51-
""" Read temperature value """
52-
return self._get_iio_attr(self.name, "temp", False)
53-
54-
@property
55-
def temp_max(self):
56-
return self._get_iio_attr(self.name, "temp_max", False)
57-
58-
@temp_max.setter
59-
def temp_max(self, value):
60-
return self._set_iio_attr(self.name, "temp_max", False, value)
61-
62-
@property
63-
def temp_min(self):
64-
return self._get_iio_attr(self.name, "temp_min", False)
65-
66-
@temp_min.setter
67-
def temp_min(self, value):
68-
return self._set_iio_attr(self.name, "temp_min", False, value)
69-
70-
@property
71-
def temp_crit(self):
72-
return self._get_iio_attr(self.name, "temp_crit", False)
73-
74-
@temp_crit.setter
75-
def temp_crit(self, value):
76-
return self._set_iio_attr(self.name, "temp_crit", False, value)
77-
78-
@property
79-
def temp_hyst(self):
80-
return self._get_iio_attr(self.name, "temp_hyst", False)
81-
82-
@temp_hyst.setter
83-
def temp_hyst(self, value):
84-
return self._set_iio_attr(self.name, "temp_hyst", False, value)
85-
86-
class channel_temp1(attribute):
87-
"""Channel for Linux driver"""
88-
89-
def __init__(self, ctrl, channel_name):
90-
self._ctrl = ctrl
91-
self.name = channel_name
92-
93-
@property
94-
def temp_val(self):
95-
return self._get_iio_attr(self.name, "input", False)
96-
97-
@property
98-
def temp_max(self):
99-
return self._get_iio_attr(self.name, "max", False)
100-
101-
@temp_max.setter
102-
def temp_max(self, value):
103-
return self._set_iio_attr(self.name, "max", False, value)
104-
105-
@property
106-
def temp_min(self):
107-
return self._get_iio_attr(self.name, "min", False)
108-
109-
@temp_min.setter
110-
def temp_min(self, value):
111-
return self._set_iio_attr(self.name, "min", False, value)
112-
113-
@property
114-
def temp_crit(self):
115-
return self._get_iio_attr(self.name, "crit", False)
116-
117-
@temp_crit.setter
118-
def temp_crit(self, value):
119-
return self._set_iio_attr(self.name, "crit", False, value)
120-
121-
@property
122-
def temp_hyst(self):
123-
return self._get_iio_attr(self.name, "max_hyst", False)
124-
125-
@temp_hyst.setter
126-
def temp_hyst(self, value):
127-
return self._set_iio_attr(self.name, "max_hyst", False, value)
1+
# Copyright (C) 2022-2025 Analog Devices, Inc.
2+
#
3+
# SPDX short identifier: ADIBSD
4+
from adi.attribute import attribute
5+
from adi.context_manager import context_manager
6+
7+
8+
class adt7420(attribute, context_manager):
9+
_device_name = "adt7420"
10+
11+
def __init__(self, uri=""):
12+
context_manager.__init__(self, uri, self._device_name)
13+
self._ctrl = self._ctx.find_device(self._device_name)
14+
if not self._ctrl:
15+
raise Exception("ADT7420 device not found")
16+
17+
self.channel = []
18+
self._rx_channel_names = []
19+
for ch in self._ctrl.channels:
20+
name = ch._id
21+
self._rx_channel_names.append(name)
22+
self.channel.append(name)
23+
if name == "temp":
24+
# no-OS version
25+
chan = self.channel_temp(self._ctrl, name, is_linux=False)
26+
elif name == "temp1":
27+
# Linux version
28+
chan = self.channel_temp(self._ctrl, name, is_linux=True)
29+
else:
30+
raise Exception(f"Unsupported: {name}")
31+
32+
setattr(self, name, chan)
33+
self.temp = chan
34+
35+
class channel_temp(attribute):
36+
"""ADT7420 Channel for no-OS"""
37+
38+
def __init__(self, ctrl, channel_name, is_linux):
39+
self._ctrl = ctrl
40+
self.name = channel_name
41+
self.is_linux = is_linux
42+
43+
@property
44+
def temp_val(self):
45+
""" ADT7420 Channel Temperature Value """
46+
pname = "input" if self.is_linux else "temp"
47+
return self._get_iio_attr(self.name, pname, False)
48+
49+
@property
50+
def temp_max(self):
51+
""" ADT7420 Channel Max Temperature """
52+
pname = "max" if self.is_linux else "temp_max"
53+
return self._get_iio_attr(self.name, pname, False)
54+
55+
@temp_max.setter
56+
def temp_max(self, value):
57+
""" ADT7420 Channel Max Temperature """
58+
pname = "max" if self.is_linux else "temp_max"
59+
return self._set_iio_attr(self.name, pname, False, value)
60+
61+
@property
62+
def temp_min(self):
63+
""" ADT7420 Channel Min Temperature """
64+
pname = "min" if self.is_linux else "temp_min"
65+
return self._get_iio_attr(self.name, pname, False)
66+
67+
@temp_min.setter
68+
def temp_min(self, value):
69+
""" ADT7420 Channel Min Temperature """
70+
pname = "min" if self.is_linux else "temp_min"
71+
return self._set_iio_attr(self.name, pname, False, value)
72+
73+
@property
74+
def temp_crit(self):
75+
""" ADT7420 Channel Critical Temperature """
76+
pname = "crit" if self.is_linux else "temp_crit"
77+
return self._get_iio_attr(self.name, pname, False)
78+
79+
@temp_crit.setter
80+
def temp_crit(self, value):
81+
""" ADT7420 Channel Critical Temperature """
82+
pname = "crit" if self.is_linux else "temp_crit"
83+
return self._set_iio_attr(self.name, pname, False, value)
84+
85+
@property
86+
def temp_hyst(self):
87+
""" ADT7420 Channel Hysteresis Temperature """
88+
pname = "max_hyst" if self.is_linux else "temp_hyst"
89+
return self._get_iio_attr(self.name, pname, False)
90+
91+
@temp_hyst.setter
92+
def temp_hyst(self, value):
93+
""" ADT7420 Channel Hysteresis Temperature """
94+
pname = "max_hyst" if self.is_linux else "temp_hyst"
95+
return self._set_iio_attr(self.name, pname, False, value)

test/common.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ def dev_interface_sub_channel(
183183
print(f"Failed to set: {attr}")
184184
print(f"Set: {str(val)}")
185185
print(f"Got: {str(rval)}")
186+
else:
187+
print(f"Set: {val}")
188+
print(f"Got: {rval}")
186189
return abs_val <= tol
187190
return val == str(rval)
188191

test/test_adt7420.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
@pytest.mark.parametrize(
1111
"attr, start, stop, step, tol, repeats, sub_channel",
1212
[
13-
("temp_max", 5, 50, 5, 1, 2, "_channel"),
14-
("temp_min", 0, 40, 5, 1, 1, "_channel"),
15-
("temp_crit", 80, 150, 5, 10, 1, "_channel"),
16-
("temp_hyst", 5, 20, 1, 1, 1, "_channel"),
13+
("temp_max", 5, 50, 5, 5, 1, "temp"),
14+
("temp_min", 0, 40, 5, 5, 1, "temp"),
15+
("temp_crit", 80, 150, 5, 10, 1, "temp"),
16+
("temp_hyst", 20, 40, 5, 20, 1, "temp"),
1717
],
1818
)
1919
def test_adt7420_attrs(

0 commit comments

Comments
 (0)