asyncapi: 2.6.0
info:
  title: u-blox UBX
  version: '34'
  description: GPS/GNSS receiver binary protocol. class+id sit between the sync pattern
    and the length field -- before the length-counted region, unlike MAVLink's after.
servers:
  serial_link:
    url: serial://tty/4800
    protocol: serial
    description: Physical UART Transport (4800 bps, 8N1.0)
    bindings:
      serial:
        baudRate: 4800
        dataBits: 8
        parity: none
        stopBits: 1.0
        framingType: binary
        integrity: fletcher16
channels:
  omniuart/cmd/CFG-PRT-Poll:
    publish:
      summary: 'Send command CFG-PRT-Poll (ID: 0x06)'
      description: Poll vs SetBaud share identical class/id, so they don't disambiguate
        by value at all -- this schema's dispatch algorithm correctly falls back to
        resolved length instead (0 payload bytes here vs SetBaud's fixed 12), which
        is genuinely unambiguous, so no role=discriminator is needed on class/id.
      message:
        name: CFG-PRT-Poll_Message
        title: CFG-PRT-Poll Command
        payload:
          $ref: '#/components/schemas/CFG-PRT-Poll_Request'
  omniuart/cmd/CFG-PRT-SetBaud:
    publish:
      summary: 'Send command CFG-PRT-SetBaud (ID: 0x06)'
      description: Same class=0x06, id=0x00 as CFG-PRT-Poll, but with a payload requesting
        a new port baud rate. The module's own ack is sent at the OLD rate; the host
        must reconfigure its own UART to the new rate immediately afterwards, per
        baudRateNegotiation.
      message:
        name: CFG-PRT-SetBaud_Message
        title: CFG-PRT-SetBaud Command
        payload:
          $ref: '#/components/schemas/CFG-PRT-SetBaud_Request'
  omniuart/cmd/NAV-POSLLH:
    publish:
      summary: 'Send command NAV-POSLLH (ID: 0x01)'
      description: Geodetic Position Solution returning latitude, longitude, and height
        above ellipsoid/MSL.
      message:
        name: NAV-POSLLH_Message
        title: NAV-POSLLH Command
        payload:
          $ref: '#/components/schemas/NAV-POSLLH_Request'
  omniuart/cmd/NAV-PVT:
    publish:
      summary: 'Send command NAV-PVT (ID: 0x01)'
      description: Navigation Position Velocity Time Solution returning fix status,
        time accuracy, and 3D velocity.
      message:
        name: NAV-PVT_Message
        title: NAV-PVT Command
        payload:
          $ref: '#/components/schemas/NAV-PVT_Request'
  omniuart/cmd/MON-VER:
    publish:
      summary: 'Send command MON-VER (ID: 0x0A)'
      description: Receiver Software and Hardware Version Poll.
      message:
        name: MON-VER_Message
        title: MON-VER Command
        payload:
          $ref: '#/components/schemas/MON-VER_Request'
  omniuart/cmd/NAV-STATUS:
    publish:
      summary: 'Send command NAV-STATUS (ID: 0x01)'
      description: Receiver Navigation Status Poll.
      message:
        name: NAV-STATUS_Message
        title: NAV-STATUS Command
        payload:
          $ref: '#/components/schemas/NAV-STATUS_Request'
components:
  messages: {}
  schemas:
    CFG-PRT-Poll_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 6
          description: Opcode ID for CFG-PRT-Poll
        class:
          type: integer
          default: 6
        id:
          type: integer
          default: 0
      description: Poll vs SetBaud share identical class/id, so they don't disambiguate
        by value at all -- this schema's dispatch algorithm correctly falls back to
        resolved length instead (0 payload bytes here vs SetBaud's fixed 12), which
        is genuinely unambiguous, so no role=discriminator is needed on class/id.
    CFG-PRT-SetBaud_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 6
          description: Opcode ID for CFG-PRT-SetBaud
        class:
          type: integer
          default: 6
        id:
          type: integer
          default: 0
        portId:
          type: integer
        reserved:
          type: string
          contentEncoding: base64
        mode:
          type: integer
        baudRate:
          type: integer
      description: Same class=0x06, id=0x00 as CFG-PRT-Poll, but with a payload requesting
        a new port baud rate. The module's own ack is sent at the OLD rate; the host
        must reconfigure its own UART to the new rate immediately afterwards, per
        baudRateNegotiation.
    NAV-POSLLH_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 1
          description: Opcode ID for NAV-POSLLH
        class:
          type: integer
          default: 1
        id:
          type: integer
          default: 2
        iTOW:
          type: integer
        lon:
          type: integer
        lat:
          type: integer
        height:
          type: integer
        hMSL:
          type: integer
        hAcc:
          type: integer
        vAcc:
          type: integer
      description: Geodetic Position Solution returning latitude, longitude, and height
        above ellipsoid/MSL.
    NAV-PVT_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 1
          description: Opcode ID for NAV-PVT
        class:
          type: integer
          default: 1
        id:
          type: integer
          default: 7
        iTOW:
          type: integer
        year:
          type: integer
        month:
          type: integer
        day:
          type: integer
        hour:
          type: integer
        min:
          type: integer
        sec:
          type: integer
        valid:
          type: integer
        tAcc:
          type: integer
        fixType:
          type: integer
        numSV:
          type: integer
        gSpeed:
          type: integer
        heading:
          type: integer
      description: Navigation Position Velocity Time Solution returning fix status,
        time accuracy, and 3D velocity.
    MON-VER_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 10
          description: Opcode ID for MON-VER
        class:
          type: integer
          default: 10
        id:
          type: integer
          default: 4
      description: Receiver Software and Hardware Version Poll.
    NAV-STATUS_Request:
      type: object
      properties:
        command_id:
          type: integer
          const: 1
          description: Opcode ID for NAV-STATUS
        class:
          type: integer
          default: 1
        id:
          type: integer
          default: 3
      description: Receiver Navigation Status Poll.
