def init_gps(panda): def add_nmea_checksum(msg): d = msg[1:] cs = 0 for i in d: cs ^= ord(i) return msg + "*%02X" % cs ser = PandaSerial(panda, 1, INIT_GPS_BAUD) # Power cycle the gps by toggling reset print("Resetting GPS") panda.set_esp_power(0) time.sleep(0.5) panda.set_esp_power(1) time.sleep(0.5) # Upping baud rate print("Upping GPS baud rate") msg = add_nmea_checksum("$PUBX,41,1,0007,0003,%d,0" % GPS_BAUD)+"\r\n" ser.write(msg) time.sleep(1) # needs a wait for it to actually send # Reconnecting with the correct baud ser = PandaSerial(panda, 1, GPS_BAUD) # Sending all config messages boardd sends print("Sending config") ser.write("\xB5\x62\x06\x00\x14\x00\x03\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x1E\x7F") ser.write("\xB5\x62\x06\x3E\x00\x00\x44\xD2") ser.write("\xB5\x62\x06\x00\x14\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x35") ser.write("\xB5\x62\x06\x00\x14\x00\x01\x00\x00\x00\xC0\x08\x00\x00\x00\x08\x07\x00\x01\x00\x01\x00\x00\x00\x00\x00\xF4\x80") ser.write("\xB5\x62\x06\x00\x14\x00\x04\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1D\x85") ser.write("\xB5\x62\x06\x00\x00\x00\x06\x18") ser.write("\xB5\x62\x06\x00\x01\x00\x01\x08\x22") ser.write("\xB5\x62\x06\x00\x01\x00\x02\x09\x23") ser.write("\xB5\x62\x06\x00\x01\x00\x03\x0A\x24") ser.write("\xB5\x62\x06\x08\x06\x00\x64\x00\x01\x00\x00\x00\x79\x10") ser.write("\xB5\x62\x06\x24\x24\x00\x05\x00\x04\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5A\x63") ser.write("\xB5\x62\x06\x1E\x14\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3C\x37") ser.write("\xB5\x62\x06\x24\x00\x00\x2A\x84") ser.write("\xB5\x62\x06\x23\x00\x00\x29\x81") ser.write("\xB5\x62\x06\x1E\x00\x00\x24\x72") ser.write("\xB5\x62\x06\x01\x03\x00\x01\x07\x01\x13\x51") ser.write("\xB5\x62\x06\x01\x03\x00\x02\x15\x01\x22\x70") ser.write("\xB5\x62\x06\x01\x03\x00\x02\x13\x01\x20\x6C") print("Initialized GPS")
def gps_read_thread(panda): global received_messages, received_bytes, send_something ser = PandaSerial(panda, 1, GPS_BAUD) while True: ret = ser.read(1024) time.sleep(0.001) if len(ret): received_messages += 1 received_bytes += len(ret) if send_something: ser.write("test") send_something = False
def test_gps_version(p): serial = PandaSerial(p, 1, 9600) # Reset and check twice to make sure the enabling works for i in range(2): # Reset GPS p.set_esp_power(0) time.sleep(0.5) p.set_esp_power(1) time.sleep(1) # Read startup message and check if version is contained dat = serial.read(0x1000) # Read one full panda DMA buffer. This should include the startup message assert b'HPG 1.40ROV' in dat
def __init__(self, port, baudrate=115200, timeout=0, panda=False, grey=False): self.serial_device = port self.baudrate = baudrate self.use_sendrecv = False self.read_only = False self.debug_level = 0 if panda: from panda import Panda, PandaSerial self.panda = Panda() # resetting U-Blox module self.panda.set_esp_power(0) time.sleep(0.1) self.panda.set_esp_power(1) time.sleep(0.5) # can't set above 9600 now... self.baudrate = 9600 self.dev = PandaSerial(self.panda, 1, self.baudrate) self.baudrate = 460800 print("upping baud:", self.baudrate) self.send_nmea("$PUBX,41,1,0007,0003,%u,0" % self.baudrate) time.sleep(0.1) self.dev = PandaSerial(self.panda, 1, self.baudrate) elif grey: import cereal.messaging as messaging class BoarddSerial(): def __init__(self): self.ubloxRaw = messaging.sub_sock('ubloxRaw') self.buf = "" def read(self, n): for msg in messaging.drain_sock(self.ubloxRaw, len(self.buf) < n): self.buf += msg.ubloxRaw ret = self.buf[:n] self.buf = self.buf[n:] return ret def write(self, dat): pass self.dev = BoarddSerial() else: if self.serial_device.startswith("tcp:"): import socket a = self.serial_device.split(':') destination_addr = (a[1], int(a[2])) self.dev = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.dev.connect(destination_addr) self.dev.setblocking(1) self.dev.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) self.use_sendrecv = True elif os.path.isfile(self.serial_device): self.read_only = True self.dev = open(self.serial_device, mode='rb') else: import serial self.dev = serial.Serial(self.serial_device, baudrate=self.baudrate, dsrdtr=False, rtscts=False, xonxoff=False, timeout=timeout) self.logfile = None self.log = None self.preferred_dynamic_model = None self.preferred_usePPP = None self.preferred_dgps_timeout = None
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")) from panda import Panda, PandaSerial def add_nmea_checksum(msg): d = msg[1:] cs = 0 for i in d: cs ^= ord(i) return msg + "*%02X" % cs if __name__ == "__main__": panda = Panda() ser = PandaSerial(panda, 1, 9600) # power cycle by toggling reset print "resetting" panda.set_esp_power(0) time.sleep(0.5) panda.set_esp_power(1) time.sleep(0.5) print "done" print ser.read(1024) # upping baud rate # 460800 has issues baudrate = 460800 print "upping baud rate"