openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
1.4 KiB

import zmq
from cereal import log
from common import realtime
def new_message():
dat = log.Event.new_message()
dat.logMonoTime = int(realtime.sec_since_boot() * 1e9)
return dat
def pub_sock(context, port, addr="*"):
sock = context.socket(zmq.PUB)
sock.bind("tcp://%s:%d" % (addr, port))
return sock
def sub_sock(context, port, poller=None, addr="127.0.0.1", conflate=False):
sock = context.socket(zmq.SUB)
if conflate:
sock.setsockopt(zmq.CONFLATE, 1)
sock.connect("tcp://%s:%d" % (addr, port))
sock.setsockopt(zmq.SUBSCRIBE, b"")
if poller is not None:
poller.register(sock, zmq.POLLIN)
return sock
def drain_sock(sock, wait_for_one=False):
ret = []
while 1:
try:
if wait_for_one and len(ret) == 0:
dat = sock.recv()
else:
dat = sock.recv(zmq.NOBLOCK)
dat = log.Event.from_bytes(dat)
ret.append(dat)
except zmq.error.Again:
break
return ret
# TODO: print when we drop packets?
def recv_sock(sock, wait=False):
dat = None
while 1:
try:
if wait and dat is None:
dat = sock.recv()
else:
dat = sock.recv(zmq.NOBLOCK)
except zmq.error.Again:
break
if dat is not None:
dat = log.Event.from_bytes(dat)
return dat
def recv_one(sock):
return log.Event.from_bytes(sock.recv())
def recv_one_or_none(sock):
try:
return log.Event.from_bytes(sock.recv(zmq.NOBLOCK))
except zmq.error.Again:
return None