Skip to content

Commit

Permalink
Merge pull request #257 from gcivil-nyu-org/feat/port_search
Browse files Browse the repository at this point in the history
Added port searching functionality
  • Loading branch information
PrabhanshuAttri committed Apr 1, 2020
2 parents 74b80cd + fd3883f commit bec0de5
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
47 changes: 43 additions & 4 deletions hardware/CommunicationsPi/radio_transceiver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
import serial
import json
import serial.tools.list_ports

from .utils import get_logger, get_serial_stream

Expand All @@ -10,25 +11,63 @@ def __init__(self, log_file_name=None, port=None):
if log_file_name is None:
self.logging = get_logger("TRANSMITTER_LOG_FILE")
else:
self.logging = get_logger(log_file_name)
self.logging = get_logger(log_file_name, log_file_name)

self.port = os.environ["RADIO_TRANSMITTER_PORT"] if port is None else port

if not self.port:
self.port_vid = None
self.port_pid = None
self.port_vendor = None
self.port_intf = None
self.port_serial_number = None
self.find_port()

port = os.environ["RADIO_TRANSMITTER_PORT"] if port is None else port
baudrate = 9600
parity = serial.PARITY_NONE
stopbits = serial.STOPBITS_ONE
bytesize = serial.EIGHTBITS
timeout = 1

self.logging.info("Opening serial")
self.logging.info("Opening serial on: " + str(self.port))
self.serial = serial.Serial(
port=port,
port=self.port,
baudrate=baudrate,
parity=parity,
stopbits=stopbits,
bytesize=bytesize,
timeout=timeout,
)

def find_port(self):
for port in serial.tools.list_ports.comports():
if self.is_usb_serial(port):
self.logging.info("Port device found: " + str(port.device))
self.port = port.device
return

return

def is_usb_serial(self, port):
if port.vid is None:
return False
if self.port_vid is not None:
if port.vid != self.port_vid:
return False
if self.port_pid is not None:
if port.pid != self.port_pid:
return False
if self.port_vendor is not None:
if not port.manufacturer.startswith(self.port_vendor):
return False
if self.port_serial_number is not None:
if not port.serial_number.startswith(self.port_serial_number):
return False
if self.port_intf is not None:
if port.interface is None or self.port_intf not in port.interface:
return False
return True

def send(self, payload):
self.logging.info("sending")
self.serial.write(get_serial_stream(payload))
Expand Down
6 changes: 4 additions & 2 deletions hardware/CommunicationsPi/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ def get_serial_stream(s):
return (json.dumps(s) + "\n").encode()


def get_logger(key):
logger = Logger(name=key, filename=os.environ[key])
def get_logger(key, file_name=None):
if file_name is None:
file_name = key
logger = Logger(name=key, filename=os.environ[file_name])
return logger

0 comments on commit bec0de5

Please sign in to comment.