code: def position(msg0, msg1, t0, t1, lat_ref=None, lon_ref=None):
      
      tc0 = typecode(msg0)
      tc1 = typecode(msg1)
  
      if (5<=tc0<=8 and 5<=tc1<=8):
          if (not lat_ref) or (not lon_ref):
              raise RuntimeError("Surface position encountered, a reference \
                                 position lat/lon required. Location of \
                                 receiver can be used.")
          else:
              return surface_position(msg0, msg1, t0, t1, lat_ref, lon_ref)
  
      elif (9<=tc0<=18 and 9<=tc1<=18):
          # Airborne position with barometric height
          return airborne_position(msg0, msg1, t0, t1)
  
      elif (20<=tc0<=22 and 20<=tc1<=22):
          # Airborne position with GNSS height
          return airborne_position(msg0, msg1, t0, t1)
  
      else:
          raise RuntimeError("incorrect or inconsistant message types")
docs: Decode position from a pair of even and odd position message
      (works with both airborne and surface position messages)
  
      Args:
          msg0 (string): even message (28 bytes hexadecimal string)
          msg1 (string): odd message (28 bytes hexadecimal string)
          t0 (int): timestamps for the even message
          t1 (int): timestamps for the odd message
  
      Returns:
          (float, float): (latitude, longitude) of the aircraft