/******************************************************************************
* Copyright (c) 2000-2019  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
*   Gabor Szalai - initial implementation and initial documentation
******************************************************************************/
//
//  File:               TS29572_Nlmf_Location.ttcn
//  Description:	      Type definitions for 3GPP TS29572
/////////////////////////////////////////////// 
module TS29572_Nlmf_Location {

  import from TS29571_CommonData all

  external function f_enc_InputData(in InputData pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_InputData(in octetstring stream, out InputData pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }

  external function f_enc_LocationData(in LocationData pdu) return octetstring 
  with { extension "prototype(convert) encode(JSON)" }

  external function f_dec_LocationData(in octetstring stream, out LocationData pdu) return integer 
  with { extension "prototype(backtrack) decode(JSON)" }


  type set InputData {
    ExternalClientType    externalClientType optional,
    CorrelationID    correlationID optional,
    LocationQoS    locationQoS optional,
    set of       SupportedGADShapes    supportedGADShapes optional,
    TS29571_CommonData.Supi    supi optional,
    TS29571_CommonData.Pei    pei optional,
    TS29571_CommonData.Gpsi    gpsi optional,
    TS29571_CommonData.Ecgi    ecgi optional,
    TS29571_CommonData.Ncgi    ncgi optional,
    LcsPriority    priority optional,
    VelocityRequested    velocityRequested optional
  }

  type set LocationData {
    GeographicArea    locationEstimate,
    AccuracyFulfilmentIndicator    accuracyFulfilmentIndicator optional,
    AgeOfLocationEstimate    ageOfLocationEstimate optional,
    VelocityEstimate    velocityEstimate optional,
    CivicAddress    civicAddress optional,
    set of       PositioningMethodAndUsage    positioningDataList optional,
    set of       GnssPositioningMethodAndUsage    gnssPositioningDataList optional,
    TS29571_CommonData.Ecgi    ecgi optional,
    TS29571_CommonData.Ncgi    ncgi optional,
    Altitude    altitude optional
  }

  type union GeographicArea {
    Point    point,
    PointUncertaintyCircle    pointUncertaintyCircle,
    PointUncertaintyEllipse    pointUncertaintyEllipse,
    Polygon    polygon,
    PointAltitude    pointAltitude,
    PointAltitudeUncertainty    pointAltitudeUncertainty,
    EllipsoidArc    ellipsoidArc
  } with {
    variant "JSON: as value"
  }


  type set GADShape {
    SupportedGADShapes    shape
  }

  type set Point {
    enumerated {POINT} shape,
    GeographicalCoordinates    point
  }

  type set PointUncertaintyCircle {
    enumerated {POINT_UNCERTAINTY_CIRCLE} shape,
    GeographicalCoordinates    point,
    Uncertainty    uncertainty
  }

  type set PointUncertaintyEllipse {
    enumerated {POINT_UNCERTAINTY_ELLIPSE} shape,
    GeographicalCoordinates    point,
    UncertaintyEllipse    uncertaintyEllipse,
    Confidence    confidence
  }

  type set Polygon {
    enumerated {POLYGON} shape,
    PointList    pointList
  }

  type set PointAltitude {
    enumerated {POINT_ALTITUDE} shape,
    GeographicalCoordinates    point,
    Altitude    altitude
  }

  type set PointAltitudeUncertainty {
    enumerated {POINT_ALTITUDE_UNCERTAINTY} shape,
    GeographicalCoordinates    point,
    Altitude    altitude,
    UncertaintyEllipse    uncertaintyEllipse,
    Uncertainty    uncertaintyAltitude,
    Confidence    confidence
  }

  type set EllipsoidArc {
    enumerated {ELLIPSOID_ARC} shape,
    GeographicalCoordinates    point,
    InnerRadius    innerRadius,
    Uncertainty    uncertaintyRadius,
    Angle    offsetAngle,
    Angle    includedAngle,
    Confidence    confidence
  }

  type set GeographicalCoordinates {
    float lon,
    float lat
  }

  type set UncertaintyEllipse {
    Uncertainty    semiMajor,
    Uncertainty    semiMinor,
    Orientation    orientationMajor
  }

  type set of     GeographicalCoordinates    PointList

  type set LocationQoS {
    Accuracy    hAccuracy optional,
    Accuracy    vAccuracy optional,
    boolean verticalRequested optional,
    ResponseTime    responseTime optional
  }

  type set PositioningMethodAndUsage {
    PositioningMethod    method,
    PositioningMode    mode,
    Usage    usage
  }

  type set GnssPositioningMethodAndUsage {
    PositioningMode    mode,
    GnssId    gnss,
    Usage    usage
  }

  type set CivicAddress {
    charstring country optional,
    charstring A1 optional,
    charstring A2 optional,
    charstring A3 optional,
    charstring A4 optional,
    charstring A5 optional,
    charstring A6 optional,
    charstring PRD optional,
    charstring POD optional,
    charstring STS optional,
    charstring HNO optional,
    charstring HNS optional,
    charstring LMK optional,
    charstring LOC optional,
    charstring NAM optional,
    charstring PC optional,
    charstring BLD optional,
    charstring UNIT optional,
    charstring ROOM optional,
    charstring PLC optional,
    charstring PCN optional,
    charstring POBOX optional,
    charstring ADDCODE optional,
    charstring SEAT optional,
    charstring RD optional,
    charstring RDSEC optional,
    charstring RDBR optional,
    charstring RDSUBBR optional,
    charstring PRM optional,
    charstring POM optional
  }

  type union VelocityEstimate {
    HorizontalVelocity    field1,
    HorizontalWithVerticalVelocity    field2,
    HorizontalVelocityWithUncertainty    field3,
    HorizontalWithVerticalVelocityAndUncertainty    field4
  } with {
    variant "JSON: as value"
  }


  type set HorizontalVelocity {
    HorizontalSpeed    hSpeed,
    Angle    bearing
  }

  type set HorizontalWithVerticalVelocity {
    HorizontalSpeed    hSpeed,
    Angle    bearing,
    VerticalSpeed    vSpeed,
    VerticalDirection    vDirection
  }

  type set HorizontalVelocityWithUncertainty {
    HorizontalSpeed    hSpeed,
    Angle    bearing,
    SpeedUncertainty    hUncertainty
  }

  type set HorizontalWithVerticalVelocityAndUncertainty {
    HorizontalSpeed    hSpeed,
    Angle    bearing,
    VerticalSpeed    vSpeed,
    VerticalDirection    vDirection,
    SpeedUncertainty    hUncertainty,
    SpeedUncertainty    vUncertainty
  }

  type float Altitude

  type integer Angle (0..360)

  type float Uncertainty

  type integer Orientation (0..180)

  type integer Confidence (0..100)

  type float Accuracy

  type integer InnerRadius (0..infinity)

  type charstring CorrelationID

  type integer AgeOfLocationEstimate (0..32767)

  type float HorizontalSpeed

  type float VerticalSpeed

  type float SpeedUncertainty

  type enumerated ExternalClientType_enum { EMERGENCY_SERVICES, VALUE_ADDED_SERVICES, PLMN_OPERATOR_SERVICES, LAWFUL_INTERCEPT_SERVICES, PLMN_OPERATOR_BROADCAST_SERVICES, PLMN_OPERATOR_OM, PLMN_OPERATOR_ANONYMOUS_STATISTICS, PLMN_OPERATOR_TARGET_MS_SERVICE_SUPPORT}

  type union ExternalClientType {
    ExternalClientType_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated SupportedGADShapes_enum { POINT, POINT_UNCERTAINTY_CIRCLE, POINT_UNCERTAINTY_ELLIPSE, POLYGON, POINT_ALTITUDE, POINT_ALTITUDE_UNCERTAINTY, ELLIPSOID_ARC}

  type union SupportedGADShapes {
    SupportedGADShapes_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated ResponseTime_enum { LOW_DELAY, DELAY_TOLERANT}

  type union ResponseTime {
    ResponseTime_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated PositioningMethod_enum { CELLID, ECID, OTDOA, BAROMETRIC_PRESSURE, WLAN, BLUETOOTH, MBS}

  type union PositioningMethod {
    PositioningMethod_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated PositioningMode_enum { UE_BASED, UE_ASSISTED, CONVENTIONAL}

  type union PositioningMode {
    PositioningMode_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated GnssId_enum { GPS, GALILEO, SBAS, MODERNIZED_GPS, QZSS, GLONASS}

  type union GnssId {
    GnssId_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated Usage_enum { UNSUCCESS, SUCCESS_RESULTS_NOT_USED, SUCCESS_RESULTS_USED_TO_VERIFY_LOCATION, SUCCESS_RESULTS_USED_TO_GENERATE_LOCATION, SUCCESS_METHOD_NOT_DETERMINED}

  type union Usage {
    Usage_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated LcsPriority_enum { HIGHEST_PRIORITY, NORMAL_PRIORITY}

  type union LcsPriority {
    LcsPriority_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated VelocityRequested_enum { VELOCITY_IS_NOT_REQUESTED, VELOCITY_IS_REQUESTED}

  type union VelocityRequested {
    VelocityRequested_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated AccuracyFulfilmentIndicator_enum { REQUESTED_ACCURACY_FULFILLED, REQUESTED_ACCURACY_NOT_FULFILLED}

  type union AccuracyFulfilmentIndicator {
    AccuracyFulfilmentIndicator_enum  enum_val,
    charstring           other_val
  } with {
    variant "JSON: as value"
  }


  type enumerated VerticalDirection { UPWARD, DOWNWARD}






} with {
  encode "JSON"
}
