示例#1
0
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
示例#2
0
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
示例#3
0
    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
示例#4
0
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"
示例#5
0
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")