Skip to content

Commit 645b923

Browse files
author
Alexander Merkle
committed
exporter/driver: allow to select tcp/udp protocol for NetworkLauterbachDebugger
Devices support always UDP, the most recent devices e.g. PowerDebug X50 have an option to use TCP which enables LG_PROXY support.
1 parent 67ec2a9 commit 645b923

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

doc/configuration.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,7 @@ PowerDebug debugger device connected via Ethernet.
818818
819819
Arguments:
820820
- node : Lauterbach NODENAME e.g. IP/NODENAME (factory default: serial number)
821+
- protocol : optional, allows to select TCP instead of UDP, required for LG_PROXY support
821822

822823
Used by:
823824
- `LauterbachDriver`_

labgrid/driver/lauterbachdriver.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import attr
88

9+
from .exception import ExecutionError
910
from ..factory import target_factory
1011
from ..protocol import DebuggerProtocol
1112
from ..resource.lauterbach import NetworkLauterbachDebugger, NetworkUSBLauterbachDebugger
@@ -34,7 +35,8 @@ class LauterbachDriver(Driver, DebuggerProtocol):
3435
t32_bin = attr.ib(default="t32marm", validator=attr.validators.instance_of(str))
3536
t32_sys = attr.ib(
3637
default=None,
37-
validator=attr.validators.optional(attr.validators.instance_of(str)))
38+
validator=attr.validators.optional(attr.validators.instance_of(str))
39+
)
3840

3941
def __attrs_post_init__(self):
4042
super().__attrs_post_init__()
@@ -56,7 +58,14 @@ def on_activate(self):
5658
if isinstance(self.interface, USBLauterbachDebugger):
5759
self.connection = self._pystart.USBConnection(f"{self.interface.busnum:03d}:{self.interface.devnum:03d}")
5860
elif isinstance(self.interface, NetworkLauterbachDebugger):
59-
self.connection = self._pystart.UDPConnection(self.interface.node)
61+
if self.interface.protocol.lower() == "udp":
62+
host, port = proxymanager.get_host_and_port(self.interface, default_port=9187)
63+
if host != self.interface.host:
64+
raise ExecutionError("Proxy support not available for legacy Lauterbach devices")
65+
self.connection = self._pystart.UDPConnection(self.interface.host)
66+
else:
67+
host, port = proxymanager.get_host_and_port(self.interface, default_port=9187)
68+
self.connection = self._pystart.TCPConnection(host, port)
6069
elif isinstance(self.interface, NetworkUSBLauterbachDebugger):
6170

6271
path = os.path.join(self.t32sys, self.pathmap.get(self.interface.architecture), "t32tcpusb")

labgrid/resource/lauterbach.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
from .common import Resource
55
from .remote import RemoteUSBResource
66

7+
def validate_protocol(instance, attribute, value):
8+
if not value.lower() in ("udp", "tcp"):
9+
raise ValueError("Invalid protocol value - allowed values are 'udp/tcp'")
710

811
@target_factory.reg_resource
912
@attr.s(eq=False)
@@ -12,8 +15,14 @@ class NetworkLauterbachDebugger(Resource):
1215
1316
Args:
1417
node (str): Lauterbach NODENAME e.g. IP/NODENAME (factory default: serial number)
18+
protocol (str): Protocol to use, choice of 'udp/tcp' (default: udp)
1519
"""
1620
node = attr.ib(validator=attr.validators.instance_of(str))
21+
protocol = attr.ib(default="udp", validator=attr.validators.in_(("udp", "UDP", "tcp", "TCP")))
22+
23+
def __attrs_post_init__(self):
24+
self.host = self.node
25+
super().__attrs_post_init__()
1726

1827

1928
@target_factory.reg_resource

0 commit comments

Comments
 (0)