/*
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2018 Ericsson Telecom 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
///////////////////////////////////////////////////////////////////////////////
//
//  File:          Revised_Freephone_Operations.asn
//  Description:   Functional protocol for ISDN
//
//  References:    ETSI EN 300 210-1 
//                 Integrated Services Digital Network (ISDN);
//                 Generic functional protocol for the support
//                 of supplementary services;
//  Rev:          R3C
//  Prodnr:       CNL 113 435
//  Updated:      2012.04.19.
//  Contact:      http://ttcn.ericsson.se
*/

Revised-Freephone-Operations  {itu-t identified-organization etsi (0) 210 operations-and-errors (1)}

DEFINITIONS EXPLICIT TAGS ::=

BEGIN


 
  EXPORTS
      callFPH -- ,
--      Monitor-T-FPH,
--      Free-T-FPH,
--      Call-T-FPH -- ;

 
  IMPORTS
      OPERATION -- ,
--      ERROR
    FROM Remote-Operations-Information-Objects
    {joint-iso-itu-t remote-operations (4) notation (0)}    

 
--      notAvailable,
--      notImplemented
--        FROM General-Errors
--        {ccitt identified-organisation etsi (0) 196 general-errors (2)}

 
      PartyNumber
    FROM Revised-Addressing-Data-Elements
    {itu-t identified-organisation etsi (0) 196 addressing-data-elements
         (6)}

 
--      Q931InformationElement
--        FROM Embedded-Q931-Types
--        {ccitt identified-organisation etsi (0) 196 embedded-q931-types
--         (7)} --;

 
  callFPH OPERATION::=
    {
        ARGUMENT CalledFreephoneNr -- optional    
        
        CODE global:{fPHOID callFPH-operation (1)}   
    }

 
--  Monitor-T-FPH ::=
--      OPERATION
--        ARGUMENT SEQUENCE {
--          q931InfoElement         Q931InformationElement,
--          servedUserDestination   PartyNumber,
--          queueIdentity           QueueIdentity OPTIONAL }
          -- the Bearer capability, High layer compatibility (optional)
          -- and Low layer compatibility (optional) information elements
          -- shall be embedded in q931InfoElement.

 
--        RESULT

 
--        ERRORS {
--          notAvailable,
--          notImplemented }

 
--  Free-T-FPH ::=
--      OPERATION
--        ARGUMENT SEQUENCE {
--          servedUserDestination   PartyNumber,
--          fPHReference            FPHReference }

 
--  Call-T-FPH ::=
--      OPERATION
--        ARGUMENT SEQUENCE {
--          fPHReference            FPHReference,
--          calledFreephoneNr       CalledFreephoneNr OPTIONAL }

 
--  FPHReference      ::= INTEGER (0..127)
  CalledFreephoneNr ::= PartyNumber
--  QueueIdentity     ::= INTEGER (0..127)

 
  fPHOID OBJECT IDENTIFIER ::= {itu-t identified-organization etsi (0) 210 freephone-operations (1)}

 


--  monitor-T-FPH Monitor-T-FPH ::= globalValue
--                                  {fPHOID monitor-T-FPH-operation (2)}
--  free-T-FPH Free-T-FPH       ::= globalValue
--                                  {fPHOID free-T-FPH-operation (3)}
--  call-T-FPH Call-T-FPH       ::= globalValue
--                                  {fPHOID call-T-FPH-operation (4)}

 
END -- of Freephone-Operations
