XOSS NAV & NAV+ RO File Format

This guide documents the XZRoutes v2 binary layout recovered from authentic XOSS NAV/NAV+ files and explains how GPX becomes RO.

The .ro format is proprietary and undocumented. The verified layout is XZRoutes version 2; compatibility with every XOSS NAV or XOSS NAV+ firmware release is not guaranteed.

File layout

All multi-byte numbers use little-endian byte order. Coordinates are signed 32-bit integers in millionths of a degree. A file contains these sections in order:

  1. A fixed 96-byte header.
  2. A table of 44-byte maneuver records.
  3. Maneuver geometry as latitude/longitude pairs.
  4. A zero-filled 32-byte reserved slot per maneuver.
  5. An ELEV marker and elevation samples.
  6. A two-byte CRC-16/MODBUS checksum.

Header

Offset Type Meaning
0x00 8 ASCII bytes XZRoutes signature
0x08 uint32 Route ID
0x10 uint32 Complete file size including CRC
0x14 uint16 Format version; verified value is 2
0x16 uint16 Maneuver count
0x18 uint32 Offset of the first elevation sample
0x1C uint32 Elevation sample count
0x20–0x2F 4 × int32 Route coordinate bounds
0x30 uint32 End of maneuver geometry
0x34 uint32 Likely smoothed ascent; inferred
0x38 uint32 Route distance in metres
0x3C uint16 Unknown flag; observed value is 1
0x3E uint16 Likely route-name byte limit; observed value is 31
0x40–0x5F 32 bytes NUL-terminated UTF-8 route name

Maneuvers and geometry

Each 44-byte maneuver stores its start and end coordinates, direct distance, turn code, uint16 point count, absolute geometry offset, and coordinate bounding box. Its geometry contains repeated endpoints where adjacent maneuvers meet. The reader removes only adjacent boundary duplicates.

After geometry, authentic files contain 32 zero bytes for every maneuver. These bytes appear reserved for instructions or street names, but that interpretation remains unverified.

Elevation and checksum

Twelve bytes before the first elevation sample are the ASCII marker ELEV, a uint32 sample count, and an observed zero uint32. Each sample is a uint32 elevation in metres followed by uint32 distance from the previous sample.

The final two bytes are CRC-16/MODBUS over every preceding byte: reflected polynomial 0xA001, initial value 0xFFFF, and little-endian output.

Some authentic files do not provide an unambiguous one-to-one elevation match after geometry deduplication. RO-to-GPX conversion then preserves geometry and omits elevation rather than guessing.

How GPX becomes RO

  1. Read TRK points, or fall back to RTE and WPT points.
  2. Convert coordinates to millionths of a degree, interpolate missing elevation, and merge adjacent duplicate coordinates.
  3. Optionally simplify geometry to the editable point target shown under Advanced options.
  4. Detect turns up to the editable maneuver target, or create one breadcrumb maneuver.
  5. Write the header, maneuver table, geometry, reserved slots, and ELEV samples.
  6. Calculate CRC-16/MODBUS and parse the completed binary again before download.

The controls are targets, not hidden device limits. The converter reports only actual binary-field or browser-resource constraints and never silently clamps an entered maximum.