Skip to content

Commit ab08153

Browse files
authored
Expose more port metadata when listing serial ports (#169336)
1 parent b47b7fa commit ab08153

3 files changed

Lines changed: 36 additions & 13 deletions

File tree

homeassistant/components/usb/models.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class SerialDevice:
1313
serial_number: str | None
1414
manufacturer: str | None
1515
description: str | None
16+
interface_description: str | None = None
17+
interface_num: int | None = None
1618

1719

1820
@dataclass(slots=True, frozen=True, kw_only=True)
@@ -21,3 +23,6 @@ class USBDevice(SerialDevice):
2123

2224
vid: str
2325
pid: str
26+
27+
# bcdDevice descriptor, often the firmware revision
28+
bcd_device: int | None = None

homeassistant/components/usb/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def usb_device_from_port(port: SerialPortInfo) -> USBDevice:
2626
serial_number=port.serial_number,
2727
manufacturer=port.manufacturer,
2828
description=port.product,
29+
bcd_device=port.bcd_device,
30+
interface_description=port.interface_description,
31+
interface_num=port.interface_num,
2932
)
3033

3134

@@ -36,6 +39,8 @@ def serial_device_from_port(port: SerialPortInfo) -> SerialDevice:
3639
serial_number=port.serial_number,
3740
manufacturer=port.manufacturer,
3841
description=port.product,
42+
interface_description=port.interface_description,
43+
interface_num=port.interface_num,
3944
)
4045

4146

tests/components/usb/test_init.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,9 @@ async def test_async_scan_serial_ports(hass: HomeAssistant) -> None:
13421342
serial_number="10B41DE589FC",
13431343
manufacturer="Nabu Casa",
13441344
description="ZBT-2",
1345+
bcd_device=257,
1346+
interface_description="Nabu Casa ZBT-2",
1347+
interface_num=0,
13451348
),
13461349
]
13471350

@@ -1690,6 +1693,9 @@ async def test_list_serial_ports(
16901693
serial_number="001234",
16911694
manufacturer="Silicon Labs",
16921695
description="CP2102 USB to UART",
1696+
bcd_device=257,
1697+
interface_description="CP2102 USB to UART Bridge",
1698+
interface_num=0,
16931699
),
16941700
SerialDevice(
16951701
device="/dev/ttyS0",
@@ -1707,19 +1713,26 @@ async def test_list_serial_ports(
17071713
result = response["result"]
17081714
assert len(result) == 2
17091715

1710-
assert result[0]["device"] == "/dev/ttyUSB0"
1711-
assert result[0]["vid"] == "10C4"
1712-
assert result[0]["pid"] == "EA60"
1713-
assert result[0]["serial_number"] == "001234"
1714-
assert result[0]["manufacturer"] == "Silicon Labs"
1715-
assert result[0]["description"] == "CP2102 USB to UART"
1716-
1717-
assert result[1]["device"] == "/dev/ttyS0"
1718-
assert result[1]["serial_number"] is None
1719-
assert result[1]["manufacturer"] is None
1720-
assert result[1]["description"] == "ttyS0"
1721-
assert "vid" not in result[1]
1722-
assert "pid" not in result[1]
1716+
assert result[0] == {
1717+
"device": "/dev/ttyUSB0",
1718+
"vid": "10C4",
1719+
"pid": "EA60",
1720+
"serial_number": "001234",
1721+
"manufacturer": "Silicon Labs",
1722+
"description": "CP2102 USB to UART",
1723+
"bcd_device": 257,
1724+
"interface_description": "CP2102 USB to UART Bridge",
1725+
"interface_num": 0,
1726+
}
1727+
1728+
assert result[1] == {
1729+
"device": "/dev/ttyS0",
1730+
"serial_number": None,
1731+
"manufacturer": None,
1732+
"description": "ttyS0",
1733+
"interface_description": None,
1734+
"interface_num": None,
1735+
}
17231736

17241737

17251738
async def test_list_serial_ports_require_admin(

0 commit comments

Comments
 (0)