//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / testing/pducoder
//
//File: uniframecoding.cpp
//
//Version: $Revision: 1.4 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/08/21 08:28:56 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Timo Kokkonen
//
//Description:
//      See corresponding header file.
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History:
//
#include "pf/bytes.h"
#include "uniframecoding.h"


void makeUniFramePDUheader(pfUlong pduType_, pfFrame &frame_)
{
    frame_.putFirst16bit(frame_.length()); // length
    frame_.putFirst(B1001_0010); // type oct. 2 (Instruction field)
    frame_.putFirst(pduType_); // type
    frame_.putFirst24bit(0); // Call reference
    frame_.putFirst(B0000_0011); // Call length & spares
    frame_.putFirst(B0000_1001); // Protocol Discriminator

    return;
}

//----------------------------------------------------------------------

void makeUniFrameCA_IE(pfFrame &frame_) // Cause
{
    frame_.putFirst(B0010_1111);
    frame_.putFirst(B0100_0010);
    frame_.putFirst(B1010_0011);
    frame_.putFirst(B1000_1011);
    frame_.putFirst16bit(4);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0000_1000);

    return;
}

void makeUniFrameCS_IE(pfFrame &frame_) // Call state
{
    frame_.putFirst(B0010_1011);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0001_0100);

    return;
}

void makeUniFrameAAL_IE(pfFrame &frame_) // ATM adaptation layer parameters
{
    frame_.putFirst(B0011_0010);
    frame_.putFirst(B1000_0100);
    frame_.putFirst16bit(12345);
    frame_.putFirst16bit(11111);
    frame_.putFirst(B1000_0010);
    frame_.putFirst16bit(22222);
    frame_.putFirst(B1000_0001);
    frame_.putFirst16bit(33333);
    frame_.putFirst(B1000_1100);
    frame_.putFirst(B0010_1011);
    frame_.putFirst16bit(14);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1000);

    return;
}

void makeUniFrameATD_IE(pfFrame &frame_) // ATM traffic descriptor
{
    frame_.putFirst(B0000_0010);
    frame_.putFirst(B1011_1111);
    frame_.putFirst(B1011_1110);
    frame_.putFirst24bit(1231114);
    frame_.putFirst(B1011_0001);
    frame_.putFirst24bit(1231111);
    frame_.putFirst(B1011_0000);
    frame_.putFirst24bit(1213111);
    frame_.putFirst(B1010_0001);
    frame_.putFirst24bit(1211311);
    frame_.putFirst(B1010_0000);
    frame_.putFirst24bit(1211131);
    frame_.putFirst(B1001_0001);
    frame_.putFirst24bit(1211113);
    frame_.putFirst(B1001_0000);
    frame_.putFirst24bit(1211111);
    frame_.putFirst(B1000_1001);
    frame_.putFirst24bit(1121111);
    frame_.putFirst(B1000_1000);
    frame_.putFirst24bit(1112111);
    frame_.putFirst(B1000_0101);
    frame_.putFirst24bit(1111211);
    frame_.putFirst(B1000_0100);
    frame_.putFirst24bit(1111121);
    frame_.putFirst(B1000_0011);
    frame_.putFirst24bit(1111112);
    frame_.putFirst(B1000_0010);
    frame_.putFirst16bit(51);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1001);    

    return;
}

void makeUniFrameCI_IE(pfFrame &frame_) // Connection identifier
{
    frame_.putFirst16bit(155);
    frame_.putFirst16bit(43);
    frame_.putFirst(B1000_1000);
    frame_.putFirst16bit(5);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1010);

    return;
}

void makeUniFrameQOS_IE(pfFrame &frame_) // Quality of service parameter
{
    frame_.putFirst(B1000_0001);
    frame_.putFirst(B0001_1000);
    frame_.putFirst16bit(2);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1100);

    return;
}

void makeUniFrameBHL_IE(pfFrame &frame_) // Broadband high layer information
{
    frame_.putFirst(B1000_0000);
    frame_.putFirst(B0100_0000);
    frame_.putFirst(B0010_0000);
    frame_.putFirst(B0001_0000);
    frame_.putFirst(B0000_1000);
    frame_.putFirst(B0000_0100);
    frame_.putFirst(B0000_0010);
    frame_.putFirst(B0000_0001);
    frame_.putFirst(B1001_1000);
    frame_.putFirst16bit(9);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1101);

    return;
}

void makeUniFrameBBC_IE(pfFrame &frame_) // Broadband bearer capability
{
    frame_.putFirst(B1010_0001);
    frame_.putFirst(B1000_1001);
    frame_.putFirst(B0001_0000);
    frame_.putFirst16bit(3);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1110);

    return;
}

void makeUniFrameBLL_IE(pfFrame &frame_) // Broadband low-layer information
{
    frame_.putFirst(B1111_0010);
    frame_.putFirst(B1100_1011);
    frame_.putFirst(B1010_0001);
    frame_.putFirst(B1000_1001);
    frame_.putFirst(B0001_0000);
    frame_.putFirst16bit(5);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0101_1111);

    return;
}

void makeUniFrameBLSH_IE(pfFrame &frame_) // Broadband locking shift
{
    frame_.putFirst(B1000_0011);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_0000);

    return;
}

void makeUniFrameBNSH_IE(pfFrame &frame_) // Broadband non-locking shift
{
    frame_.putFirst(B1000_0100);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_0001);

    return;
}

void makeUniFrameBSC_IE(pfFrame &frame_) // Broadband sending complete
{
    frame_.putFirst(B1010_0001);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_0010);

    return;
}

void makeUniFrameBRI_IE(pfFrame &frame_) // Broadband repeat indicator
{
    frame_.putFirst(B1000_0101);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_0011);

    return;
}

void makeUniFrameCGN_IE(pfFrame &frame_) // Calling party number
{
    frame_.putFirst(B0101_0111);
    frame_.putFirst(B0101_0101);
    frame_.putFirst(B0101_0011);
    frame_.putFirst(B0000_0010);
    frame_.putFirst(B1100_0010);
    frame_.putFirst(B0101_0100);
    frame_.putFirst16bit(6);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_1100);

    return;
}

void makeUniFrameCGS_IE(pfFrame &frame_) // Calling party subaddress
{
    frame_.putFirst(B0101_1010);
    frame_.putFirst(B0000_1111);
    frame_.putFirst(B1001_0110);
    frame_.putFirst(B0011_1100);
    frame_.putFirst(B1100_0011);
    frame_.putFirst(B1101_0000);
    frame_.putFirst16bit(6);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0110_1101);

    return;
}

void makeUniFrameCDN_IE(pfFrame &frame_) // Called party number
{
    frame_.putFirst(B0101_1010);
    frame_.putFirst(B0000_1111);
    frame_.putFirst(B0011_1100);
    frame_.putFirst(B0100_0011);
    frame_.putFirst(B1101_0100);
    frame_.putFirst16bit(5);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0111_0000);

    return;
}

void makeUniFrameCDS_IE(pfFrame &frame_) // Called party subaddress
{
    frame_.putFirst(B0000_1111);
    frame_.putFirst(B0011_1100);
    frame_.putFirst(B0100_0011);
    frame_.putFirst(B1101_0000);
    frame_.putFirst16bit(4);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0111_0001);

    return;
}

void makeUniFrameTNS_IE(pfFrame &frame_) // Transit network selection
{
    frame_.putFirst(B0000_1000);
    frame_.putFirst(B0000_0111);
    frame_.putFirst(B0000_0110);
    frame_.putFirst(B0000_0000);
    frame_.putFirst(B0000_0011);
    frame_.putFirst(B0000_0010);
    frame_.putFirst(B0000_0001);
    frame_.putFirst(B1001_1100);
    frame_.putFirst16bit(8);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0111_1000);

    return;
}

void makeUniFrameRI_IE(pfFrame &frame_) // Restart indicator
{
    frame_.putFirst(B1000_0111);
    frame_.putFirst16bit(1);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B0111_1001);

    return;
}

void makeUniFrameUN_IE(pfFrame &frame_) // Unknown IE
{
    frame_.putFirst(B1100_0011);
    frame_.putFirst(B1111_1110);
    frame_.putFirst(B1101_1100);
    frame_.putFirst(B1011_1010);
    frame_.putFirst(B1001_1000);
    frame_.putFirst(B0111_0110);
    frame_.putFirst(B0101_0100);
    frame_.putFirst(B0011_0010);
    frame_.putFirst(B0001_0000);
    frame_.putFirst16bit(9);
    frame_.putFirst(B1111_1000);
    frame_.putFirst(B1111_1111);

    return;
}
