99# Both serial and RTT backends are supported.
1010
1111from serial .tools import list_ports
12+ from serial .tools .list_ports_common import ListPortInfo
1213import serial
1314from collections import defaultdict
1415import sys
1920import coloredlogs , logging
2021import re
2122import platform
22- from typing import Tuple , List , Union
23+ from typing import Tuple , List , Union , Optional
2324
2425logger = logging .getLogger (__name__ )
2526
@@ -103,7 +104,7 @@ def parser_add_comms_args(parser):
103104
104105
105106# Returns a list of printable name, serial number and serial port for connected Nordic boards
106- def get_connected_nordic_boards () -> List [Tuple [str , Union [str , int ], serial . Serial ]]:
107+ def get_connected_nordic_boards () -> List [Tuple [str , Union [str , int ], ListPortInfo ]]:
107108 if platform .system () == 'Darwin' :
108109 ports = sorted (list_ports .comports (), key = lambda x : x .device )
109110 else :
@@ -129,7 +130,7 @@ def get_connected_jlinks() -> List[int]:
129130
130131
131132# For a serial device, return the serial number
132- def extract_serial_number_from_serial_device (dev : serial . Serial ) -> Union [str , int , None ]:
133+ def extract_serial_number_from_serial_device (dev : ListPortInfo ) -> Union [str , int , None ]:
133134 hwid = dev .hwid
134135 # Get serial number from hwid, because port.serial_number is not always available
135136 serial = [x [4 :] for x in hwid .split (" " ) if x .startswith ("SER=" )]
@@ -142,7 +143,7 @@ def extract_serial_number_from_serial_device(dev : serial.Serial) -> Union[str,
142143
143144 return serial
144145
145- def extract_product_name_from_serial_device (dev : serial . Serial ) -> str :
146+ def extract_product_name_from_serial_device (dev : ListPortInfo ) -> str :
146147 for pattern , name , main_port in usb_patterns :
147148 if f"SER={ pattern } " in dev .hwid :
148149 return name
@@ -151,16 +152,16 @@ def extract_product_name_from_serial_device(dev : serial.Serial) -> str:
151152 return text
152153 return ''
153154
154- def extract_product_name_from_jlink_serial (serial : str ) -> str :
155- serial = f"{ serial :012} "
155+ def extract_product_name_from_jlink_serial (serial : int ) -> str :
156+ serial_str = f"{ serial :012} "
156157 for pattern , name , main_port in usb_patterns :
157- if pattern in serial :
158+ if pattern in serial_str :
158159 return name
159160 return ''
160161
161162
162163# Find the main port for a device if it's a Nordic board
163- def get_port_index (dev : serial . Serial ) -> Union [int , None ]:
164+ def get_port_index (dev : ListPortInfo ) -> Optional [int ]:
164165 for pattern , name , main_port in usb_patterns :
165166 if f"SER={ pattern } " in dev .hwid :
166167 return main_port
@@ -195,7 +196,7 @@ def select_jlink(jlinks : List[int], list_all: bool) -> int:
195196 return answer ["serial" ]
196197
197198
198- def select_device_by_serial (serial_number : Union [str , int ], list_all : bool ) -> Tuple [serial . Serial , Union [str , int ]]:
199+ def select_device_by_serial (serial_number : Union [str , int ], list_all : bool ) -> Tuple [ListPortInfo , Union [str , int ]]:
199200 serial_devices = [
200201 x
201202 for x in list_ports .comports ()
@@ -222,7 +223,7 @@ def select_device_by_serial(serial_number : Union[str, int], list_all : bool) ->
222223
223224
224225# Returns serial_port, serial_number of selected device
225- def select_device (rtt : bool , serial_number : Union [None , int , str ] , port : Union [ None , serial . Serial ], list_all : bool ) -> Tuple [serial . Serial , Union [str , int ]]:
226+ def select_device (rtt : bool , serial_number : Optional [ Union [str , int ]] , port : Optional [ ListPortInfo ], list_all : bool ) -> Tuple [Optional [ ListPortInfo ], Optional [ Union [str , int ] ]]:
226227 if type (serial_number ) == str and serial_number .isdigit ():
227228 serial_number = int (serial_number )
228229
@@ -372,7 +373,7 @@ def write_line(self, data : str):
372373 logger .debug (f"> { data } " )
373374 self .write ((data + self .line_ending ).encode ('ascii' ))
374375
375- def _readline_rtt (self ) -> str :
376+ def _readline_rtt (self ) -> Optional [ str ] :
376377 time_end = time .time () + self .timeout
377378 while time .time () < time_end :
378379 self ._rtt_line_buffer += self .jlink_api .rtt_read (channel_index = 0 , length = 4096 )
@@ -387,7 +388,7 @@ def _readline_rtt(self) -> str:
387388 time .sleep (0.1 )
388389 return None
389390
390- def _readline_serial (self ) -> str :
391+ def _readline_serial (self ) -> Optional [ str ] :
391392 # Read a line from the serial port
392393 line = self .serial_api .readline ()
393394 if line :
0 commit comments