Skip to content

Commit 42efa4e

Browse files
authored
Merge pull request #285 from SiLab-Bonn/stdregister-readback
Implement StdRegister readback
2 parents d10729e + 436e379 commit 42efa4e

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

basil/RL/StdRegister.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ def write(self, size=None):
127127
self._drv.start()
128128

129129
def read(self):
130-
raise NotImplementedError("read() not implemented")
130+
"""Read the backing hardware layer and update all named fields."""
131+
data = self._drv.get_data()
132+
self.frombytes(data)
133+
return data
131134

132135
def _construct_reg(self):
133136
for field in self._fields:

tests/test_StdRegister.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
#
77

88
import unittest
9+
from unittest.mock import Mock
910

1011
import yaml
1112
from bitarray import bitarray
1213

1314
from basil.dut import Dut
15+
from basil.RL.StdRegister import StdRegister
1416

1517
cnfg_yaml = """
1618
transfer_layer:
@@ -76,6 +78,29 @@ def test_mem_bytes(self):
7678
self.assertEqual(4, self.dut["spi_module"].MEM_BYTES)
7779
self.assertRaises(ValueError, self.dut["spi_module"].set_data, [1, 2, 3, 4, 5])
7880

81+
def test_read(self):
82+
driver = Mock()
83+
data = [0xA5, 0x5A]
84+
driver.get_data.return_value = data
85+
register = StdRegister(
86+
driver,
87+
{
88+
"name": "READBACK",
89+
"size": 16,
90+
"fields": [
91+
{"name": "UPPER", "size": 8, "offset": 15},
92+
{"name": "LOWER", "size": 8, "offset": 7},
93+
],
94+
},
95+
)
96+
97+
result = register.read()
98+
99+
driver.get_data.assert_called_once_with()
100+
self.assertIs(result, data)
101+
self.assertEqual(register["UPPER"].tovalue(), 0xA5)
102+
self.assertEqual(register["LOWER"].tovalue(), 0x5A)
103+
79104
def test_init_simple(self):
80105
self.dut["TEST1"].write()
81106
mem = dict()

0 commit comments

Comments
 (0)