tdl-xoa-driver 1.6.3__py3-none-any.whl → 1.7.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tdl_xoa_driver-1.6.3.dist-info → tdl_xoa_driver-1.7.2.dist-info}/METADATA +2 -2
- {tdl_xoa_driver-1.6.3.dist-info → tdl_xoa_driver-1.7.2.dist-info}/RECORD +25 -16
- {tdl_xoa_driver-1.6.3.dist-info → tdl_xoa_driver-1.7.2.dist-info}/WHEEL +1 -1
- xoa_driver/__init__.py +2 -2
- xoa_driver/enums.py +2 -0
- xoa_driver/functions/async_wrapper.py +130 -0
- xoa_driver/functions/layer1_adv.py +340 -0
- xoa_driver/functions/mgmt.py +94 -32
- xoa_driver/functions/xcvr.py +196 -0
- xoa_driver/hlfuncs.py +6 -0
- xoa_driver/internals/commands/__init__.py +1 -0
- xoa_driver/internals/commands/enums.py +11 -1
- xoa_driver/internals/commands/pl1_commands.py +1 -1
- xoa_driver/internals/commands/pl1ad_commands.py +702 -0
- xoa_driver/internals/hli/ports/port_l23/family_freya.py +5 -0
- xoa_driver/internals/hli/ports/port_l23/family_odin.py +1 -1
- xoa_driver/internals/hli/ports/port_l23/layer1_adv/__init__.py +0 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_adv/freq.py +38 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_adv/pcs_fec.py +214 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_adv/rs_fault.py +24 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_freya.py +5 -0
- xoa_driver/internals/hli/ports/port_l23/layer1_freya_adv.py +61 -0
- xoa_driver/internals/hli/ports/port_l23/tcvr/transceiver.py +4 -4
- {tdl_xoa_driver-1.6.3.dist-info → tdl_xoa_driver-1.7.2.dist-info}/licenses/LICENSE +0 -0
- {tdl_xoa_driver-1.6.3.dist-info → tdl_xoa_driver-1.7.2.dist-info}/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@ if TYPE_CHECKING:
|
|
|
14
14
|
|
|
15
15
|
from .bases.port_l23_genuine import BasePortL23Genuine
|
|
16
16
|
from .layer1_freya import Layer1
|
|
17
|
+
from .layer1_freya_adv import Layer1Adv
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class FamilyFreya(BasePortL23Genuine):
|
|
@@ -30,6 +31,10 @@ class FamilyFreya(BasePortL23Genuine):
|
|
|
30
31
|
|
|
31
32
|
self.layer1 = Layer1(self._conn, self)
|
|
32
33
|
"""Layer 1"""
|
|
34
|
+
|
|
35
|
+
self.layer1_adv = Layer1Adv(self._conn, self)
|
|
36
|
+
"""Layer 1 Advanced"""
|
|
37
|
+
|
|
33
38
|
return self
|
|
34
39
|
|
|
35
40
|
on_dynamic_change = functools.partialmethod(utils.on_event, P_DYNAMIC)
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
from xoa_driver.internals.commands import (
|
|
3
|
+
PL1AD_RX_FREQ_CURR,
|
|
4
|
+
PL1AD_RX_FREQ_MAX,
|
|
5
|
+
PL1AD_RX_FREQ_MIN,
|
|
6
|
+
PL1AD_TX_FREQ_CURR,
|
|
7
|
+
)
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FrequencyAdv:
|
|
13
|
+
"""Frequency Management"""
|
|
14
|
+
|
|
15
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
16
|
+
self.rx_curr = PL1AD_RX_FREQ_CURR(conn, module_id, port_id)
|
|
17
|
+
"""Returns the current receive frequency.
|
|
18
|
+
|
|
19
|
+
:type: PL1AD_RX_FREQ_CURR
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
self.rx_max = PL1AD_RX_FREQ_MAX(conn, module_id, port_id)
|
|
23
|
+
"""Returns the maximum receive frequency.
|
|
24
|
+
|
|
25
|
+
:type: PL1AD_RX_FREQ_MAX
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
self.rx_min = PL1AD_RX_FREQ_MIN(conn, module_id, port_id)
|
|
29
|
+
"""Returns the minimum receive frequency.
|
|
30
|
+
|
|
31
|
+
:type: PL1AD_RX_FREQ_MIN
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
self.tx_curr = PL1AD_TX_FREQ_CURR(conn, module_id, port_id)
|
|
35
|
+
"""Returns the current transmit frequency.
|
|
36
|
+
|
|
37
|
+
:type: PL1AD_TX_FREQ_CURR
|
|
38
|
+
"""
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
TYPE_CHECKING,
|
|
3
|
+
Tuple,
|
|
4
|
+
Union,
|
|
5
|
+
Self,
|
|
6
|
+
)
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
9
|
+
from xoa_driver.internals.hli.ports.port_l23.family_freya import FamilyFreya
|
|
10
|
+
|
|
11
|
+
from xoa_driver.internals.commands import (
|
|
12
|
+
PL1AD_RX_HIBER,
|
|
13
|
+
PL1AD_RX_HISER,
|
|
14
|
+
PL1AD_RX_HISER_ALARM,
|
|
15
|
+
PL1AD_RX_ITB_CNT,
|
|
16
|
+
PL1AD_TX_ITB,
|
|
17
|
+
PL1AD_RX_DEG_SER,
|
|
18
|
+
PL1AD_RX_DEG_SER_THRESH,
|
|
19
|
+
PL1AD_RX_ERR_CW_CNT,
|
|
20
|
+
PL1AD_TX_ERR_CW,
|
|
21
|
+
PL1AD_RX_SKEW,
|
|
22
|
+
PL1AD_RX_LOA_CNT,
|
|
23
|
+
PL1AD_RX_LOSYNC_CNT,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class PcsLaneAdv:
|
|
28
|
+
"""PCS Lane Advanced Statistics"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, lane_idx: int) -> None:
|
|
31
|
+
|
|
32
|
+
self.rx_skew = PL1AD_RX_SKEW(conn, module_id, port_id, lane_idx)
|
|
33
|
+
"""Returns the current Rx relative skew of the PCS lane measured in bits.
|
|
34
|
+
|
|
35
|
+
:type: PL1AD_RX_SKEW
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
# self.tx_skew = PL1AD_TX_SKEW(conn, module_id, port_id, lane_idx)
|
|
39
|
+
# """Returns the current Tx relative skew of the PCS lane measured in bits.
|
|
40
|
+
|
|
41
|
+
# :type: PL1AD_TX_SKEW
|
|
42
|
+
# """
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# self.rx_loa_since_last = PL1AD_RX_LOA_CNT(conn, module_id, port_id, lane_idx)
|
|
46
|
+
# """Returns the number of cumulated Loss of Alignment conditions on the PCS lane since last query
|
|
47
|
+
|
|
48
|
+
# :type: PL1AD_RX_LOA_CNT
|
|
49
|
+
# """
|
|
50
|
+
|
|
51
|
+
# self.tx_loa = PL1AD_TX_LOA(conn, module_id, port_id, lane_idx)
|
|
52
|
+
# """Sends a Loss of Alignment from the Tx lane immediately when called.
|
|
53
|
+
|
|
54
|
+
# :type: PL1AD_TX_LOA
|
|
55
|
+
# """
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class HighBer:
|
|
60
|
+
"""High Bit Error Rate (BER) Alarm"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
63
|
+
self.status = PL1AD_RX_HIBER(conn, module_id, port_id)
|
|
64
|
+
"""Returns the current and the latched High BER status of the port.
|
|
65
|
+
|
|
66
|
+
:type: PL1AD_RX_HIBER
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class HighSer:
|
|
71
|
+
"""High Symbol Error Rate (SER) Alarm"""
|
|
72
|
+
|
|
73
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
74
|
+
self.status = PL1AD_RX_HISER(conn, module_id, port_id)
|
|
75
|
+
"""Returns the current and the latched High SER status of the port.
|
|
76
|
+
|
|
77
|
+
:type: PL1AD_RX_HISER
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
self.alarm = PL1AD_RX_HISER_ALARM(conn, module_id, port_id)
|
|
81
|
+
"""High SER Alarm management.
|
|
82
|
+
|
|
83
|
+
:type: PL1AD_RX_HISER_ALARM
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
# self.tx_hi_ser = PL1AD_TX_HISER(conn, module_id, port_id)
|
|
87
|
+
# """Sends a High SER condition from the Tx port immediately when called.
|
|
88
|
+
|
|
89
|
+
# :type: PL1AD_TX_HISER
|
|
90
|
+
# """
|
|
91
|
+
|
|
92
|
+
# self.state = PL1AD_RX_HISER_CTRL(conn, module_id, port_id)
|
|
93
|
+
# """Enable or disable High SER detection.
|
|
94
|
+
|
|
95
|
+
# :type: PL1AD_RX_HISER_CTRL
|
|
96
|
+
# """
|
|
97
|
+
|
|
98
|
+
class InvalidTranscodeBlock:
|
|
99
|
+
"""Invalid Transcode Block (ITB) Management"""
|
|
100
|
+
|
|
101
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
102
|
+
self.rx_itb_since_last = PL1AD_RX_ITB_CNT(conn, module_id, port_id)
|
|
103
|
+
"""Returns the number of cumulated Invalid 256b/257b Transcode Blocks since last query.
|
|
104
|
+
|
|
105
|
+
:type: PL1AD_RX_ITB_CNT
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
self.tx_itb = PL1AD_TX_ITB(conn, module_id, port_id)
|
|
109
|
+
"""Sends an Invalid 256b/257b Transcode Block from the Tx port immediately when called.
|
|
110
|
+
|
|
111
|
+
:type: PL1AD_TX_ITB
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class DegradedSer:
|
|
117
|
+
"""Degraded Symbol Error Rate (SER) Management"""
|
|
118
|
+
|
|
119
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
120
|
+
self.threshold = PL1AD_RX_DEG_SER_THRESH(conn, module_id, port_id)
|
|
121
|
+
"""Configures the thresholds for the Degraded SER Alarm.
|
|
122
|
+
|
|
123
|
+
:type: PL1AD_RX_DEG_SER_THRESH
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
self.status = PL1AD_RX_DEG_SER(conn, module_id, port_id)
|
|
127
|
+
"""The current and latched Degraded SER status of the port.
|
|
128
|
+
|
|
129
|
+
:type: PL1AD_RX_DEG_SER
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
# self.state = PL1AD_RX_DEG_SER_STATE(conn, module_id, port_id)
|
|
133
|
+
# """Enable or disable Degraded SER detection.
|
|
134
|
+
|
|
135
|
+
# :type: PL1AD_RX_DEG_SER_STATE
|
|
136
|
+
# """
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class ErrorCodeword:
|
|
140
|
+
"""Erroneous Codeword (CW) Management"""
|
|
141
|
+
|
|
142
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
143
|
+
self.rx_err_cw_since_last = PL1AD_RX_ERR_CW_CNT(conn, module_id, port_id)
|
|
144
|
+
"""Returns the number of cumulative erroneous 64b/66b codewords since last query.
|
|
145
|
+
|
|
146
|
+
:type: PL1AD_RX_ERR_CW_CNT
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
self.tx_err_cw = PL1AD_TX_ERR_CW(conn, module_id, port_id)
|
|
150
|
+
"""Sends an error 64b/66b codeword from the Tx port immediately when called.
|
|
151
|
+
|
|
152
|
+
:type: PL1AD_TX_ERR_CW
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class PcsLayerAdv:
|
|
157
|
+
"""Adv. Layer-1 - PCS layer configuration and status."""
|
|
158
|
+
|
|
159
|
+
def __init__(self, conn: "itf.IConnection", port: "FamilyFreya") -> None:
|
|
160
|
+
self._conn = conn
|
|
161
|
+
self.__port = port
|
|
162
|
+
module_id, port_id = port.kind
|
|
163
|
+
|
|
164
|
+
self.lane: Tuple["PcsLaneAdv", ...] = tuple(
|
|
165
|
+
PcsLaneAdv(self._conn, module_id, port_id, lane_idx=idx)
|
|
166
|
+
for idx in range(self.__port.info.capabilities.lane_count)
|
|
167
|
+
) # TODO: need to fix, currently port.info.capabilities must be none because lanes are created before awaiting the port
|
|
168
|
+
"""PCS Lane
|
|
169
|
+
|
|
170
|
+
:type: Tuple[PcsLaneAdv, ...]
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
self.deg_ser = DegradedSer(conn, module_id, port_id)
|
|
174
|
+
"""Degraded Symbol Error Rate (SER) Management
|
|
175
|
+
|
|
176
|
+
:type: DegradedSer
|
|
177
|
+
"""
|
|
178
|
+
|
|
179
|
+
self.err_cw = ErrorCodeword(conn, module_id, port_id)
|
|
180
|
+
"""Erroneous Codeword (CW) Management
|
|
181
|
+
|
|
182
|
+
:type: ErrorCodeword
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
self.hi_ber = HighBer(conn, module_id, port_id)
|
|
186
|
+
"""High Bit Error Rate (BER)
|
|
187
|
+
|
|
188
|
+
:type: HighBer
|
|
189
|
+
"""
|
|
190
|
+
|
|
191
|
+
self.hi_ser = HighSer(conn, module_id, port_id)
|
|
192
|
+
"""High Symbol Error Rate (SER)
|
|
193
|
+
|
|
194
|
+
:type: HighSer
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
self.itb = InvalidTranscodeBlock(conn, module_id, port_id)
|
|
198
|
+
"""Invalid Transcode Block (ITB) Management
|
|
199
|
+
|
|
200
|
+
:type: InvalidTranscodeBlock
|
|
201
|
+
"""
|
|
202
|
+
|
|
203
|
+
self.rx_total_loa_since_last = PL1AD_RX_LOA_CNT(conn, module_id, port_id) # TODO: Suggestion for R106 GA: The name of the XMP command is preferred to be changed to PL1AD_RX_LOA_TOTAL_CNT
|
|
204
|
+
"""Returns the number of cumulated Loss of Alignment conditions since last query of the port.
|
|
205
|
+
|
|
206
|
+
:type: PL1AD_RX_LOA_CNT
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
self.rx_link_sync_loss_since_last = PL1AD_RX_LOSYNC_CNT(conn, module_id, port_id)
|
|
210
|
+
"""Returns the number of cumulated Loss of Sync conditions since last query.
|
|
211
|
+
|
|
212
|
+
:type: PL1AD_RX_LOSYNC_CNT
|
|
213
|
+
"""
|
|
214
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
from xoa_driver.internals.commands import (
|
|
3
|
+
PL1AD_RX_LF_CNT,
|
|
4
|
+
PL1AD_RX_RF_CNT,
|
|
5
|
+
)
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class RsFault:
|
|
11
|
+
"""RS Fault Management"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int) -> None:
|
|
14
|
+
self.rx_local_fault_since_last = PL1AD_RX_LF_CNT(conn, module_id, port_id)
|
|
15
|
+
"""Returns the number of cumulated Local Fault conditions since last query.
|
|
16
|
+
|
|
17
|
+
:type: PL1AD_RX_LF_CNT
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
self.rx_remote_fault_since_last = PL1AD_RX_RF_CNT(conn, module_id, port_id)
|
|
21
|
+
"""Returns the number of cumulated Remote Fault conditions since last query.
|
|
22
|
+
|
|
23
|
+
:type: PL1AD_RX_RF_CNT
|
|
24
|
+
"""
|
|
@@ -72,10 +72,15 @@ class FreyaPcsLayer(PcsLayer):
|
|
|
72
72
|
class Layer1:
|
|
73
73
|
def __init__(self, conn: "itf.IConnection", port: "FamilyFreya") -> None:
|
|
74
74
|
module_id, port_id = port.kind
|
|
75
|
+
|
|
75
76
|
self.serdes: Tuple[SerDesFreya, ...] = tuple(
|
|
76
77
|
SerDesFreya(conn, module_id, port_id, serdes_xindex=idx)
|
|
77
78
|
for idx in range(port.info.capabilities.serdes_count)
|
|
78
79
|
)
|
|
80
|
+
"""SerDes Lane
|
|
81
|
+
|
|
82
|
+
:type: Tuple[SerDesFreya, ...]
|
|
83
|
+
"""
|
|
79
84
|
|
|
80
85
|
self.impairment = Impair(conn, module_id, port_id)
|
|
81
86
|
"""Impairment functions
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
TYPE_CHECKING,
|
|
3
|
+
Tuple,
|
|
4
|
+
)
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from xoa_driver.internals.core import interfaces as itf
|
|
7
|
+
from xoa_driver.internals.hli.ports.port_l23.family_freya import FamilyFreya
|
|
8
|
+
|
|
9
|
+
from xoa_driver.internals.commands import (
|
|
10
|
+
PL1AD_RX_LOL,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
from .layer1_adv.freq import FrequencyAdv
|
|
14
|
+
from .layer1_adv.pcs_fec import PcsLayerAdv
|
|
15
|
+
from .layer1_adv.rs_fault import *
|
|
16
|
+
|
|
17
|
+
class SerdesAdv:
|
|
18
|
+
"""Serdes Advanced Statistics"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, conn: "itf.IConnection", module_id: int, port_id: int, serdes_idx: int) -> None:
|
|
21
|
+
|
|
22
|
+
self.rx_cdr_lol_since_last = PL1AD_RX_LOL(conn, module_id, port_id, serdes_idx)
|
|
23
|
+
"""Returns the current and the latched CDR Loss of Lock (LOL) status of the specified Serdes.
|
|
24
|
+
|
|
25
|
+
:type: PL1AD_RX_LOL
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class Layer1Adv:
|
|
30
|
+
def __init__(self, conn: "itf.IConnection", port: "FamilyFreya") -> None:
|
|
31
|
+
module_id, port_id = port.kind
|
|
32
|
+
|
|
33
|
+
self.serdes: Tuple["SerdesAdv", ...] = tuple(
|
|
34
|
+
SerdesAdv(conn, module_id, port_id, serdes_idx=idx)
|
|
35
|
+
for idx in range(port.info.capabilities.serdes_count)
|
|
36
|
+
)
|
|
37
|
+
"""SerDes Lane
|
|
38
|
+
|
|
39
|
+
:type: Tuple[SerdesAdv, ...]
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
self.freq = FrequencyAdv(conn, module_id, port_id)
|
|
43
|
+
"""Frequency Management
|
|
44
|
+
|
|
45
|
+
:type: FrequencyAdv
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
self.rs_fault = RsFault(conn, module_id, port_id)
|
|
49
|
+
"""RS Fault Management
|
|
50
|
+
|
|
51
|
+
:type: RsFault
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
self.pcs = PcsLayerAdv(conn, port)
|
|
55
|
+
"""PCS configuration and status
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
@@ -45,7 +45,7 @@ class Transceiver:
|
|
|
45
45
|
"""
|
|
46
46
|
|
|
47
47
|
def access_rw(self, page_address: int, register_address: int) -> "PX_RW":
|
|
48
|
-
"""
|
|
48
|
+
"""R/W access (4 bytes) to register interface by the transceiver.
|
|
49
49
|
|
|
50
50
|
:param page_address: page address
|
|
51
51
|
:type page_address: int
|
|
@@ -64,7 +64,7 @@ class Transceiver:
|
|
|
64
64
|
)
|
|
65
65
|
|
|
66
66
|
def access_mii(self, register_address: int) -> "PX_MII":
|
|
67
|
-
"""
|
|
67
|
+
"""R/W access (2 bytes) to the register interface supported by MII transceiver.
|
|
68
68
|
|
|
69
69
|
:param register_address: register address
|
|
70
70
|
:type register_address: int
|
|
@@ -79,7 +79,7 @@ class Transceiver:
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
def access_rw_seq(self, page_address: int, register_address: int, byte_count: int) -> "PX_RW_SEQ":
|
|
82
|
-
"""Sequential
|
|
82
|
+
"""Sequential R/W a number of bytes to the register interface.
|
|
83
83
|
|
|
84
84
|
:param page_address: page address (0-255)
|
|
85
85
|
:type page_address: int
|
|
@@ -100,7 +100,7 @@ class Transceiver:
|
|
|
100
100
|
)
|
|
101
101
|
|
|
102
102
|
def access_rw_seq_bank(self, bank_address: int, page_address: int, register_address: int, byte_count: int) -> "PX_RW_SEQ_BANK":
|
|
103
|
-
"""Sequential
|
|
103
|
+
"""Sequential R/W a number of bytes to the register interface.
|
|
104
104
|
|
|
105
105
|
:param bank_address: bank address (0-255)
|
|
106
106
|
:type bank_address: int
|
|
File without changes
|
|
File without changes
|