/***************************************************************************
                          rrc_msg_class.h  -  description
                             -------------------
    begin                : Jan 6, 2003
    copyright            : (C) 2003, 2010 by Eurecom
    email                : Michelle.Wetterwald@eurecom.fr
 **************************************************************************
  Define structures for RRC peer-to-peer messages
 ***************************************************************************/  
#ifndef __RRC_MSG_CLASS_H__
#define __RRC_MSG_CLASS_H__
#include "rrc_msg_pdus.h"
#include "rrc_mbms_pdus.h"

/**************************************************************/ 
/*  DL_DCCH_MessageType                                       */ 
/**************************************************************/ 
  typedef struct DL_DCCH_MessageType {
    unsigned char  type;
    union {
      /* type = 4 */
//      CellUpdateConfirm *cellUpdateConfirm;
      /* type = 6 */ 
      DownlinkDirectTransfer *downlinkDirectTransfer;
      /* type = 9 */
      MeasurementControl *measurementControl;
      /* type = 10 */
      PagingType2 *pagingType2;
      /* type = 14 */
      RadioBearerRelease *radioBearerRelease;
      /* type = 15 */
      RadioBearerSetup *radioBearerSetup;
      /* type = 16 */
//      RRCConnectionRelease *rrcConnectionRelease;
      /* type = 22 */
      UECapabilityInformationConfirm *ueCapabilityInformationConfirm;
      /* type = 23 */
      //ULPCHControl *ulPchControl;
      /* type = 27 */
      MBMSModifiedServicesInformation *mbmsModifiedServicesInformation;
    } content;
  } DL_DCCH_MessageType;


/**************************************************************/ 
/*  DL DCCH Message                                           */ 
/**************************************************************/ 
  typedef struct DL_DCCH_Message {
    IntegrityCheckInfo integrityCheckInfo;
    DL_DCCH_MessageType message;
  } DL_DCCH_Message;


/**************************************************************/ 
/*  UL_DCCH_MessageType                                       */ 
/**************************************************************/ 
  typedef struct UL_DCCH_MessageType {
    unsigned char  type;
    union {
      /* type = 6 */
      InitialDirectTransfer *initialDirectTransfer;
      /* type = 9 */
      MeasurementReport *measurementReport;
      /* type = 14 */
      RadioBearerReleaseComplete *radioBearerReleaseComplete;
      /* type = 15 */
      RadioBearerReleaseFailure *radioBearerReleaseFailure;
      /* type = 16 */
      RadioBearerSetupComplete *radioBearerSetupComplete;
      /* type = 17 */
      RadioBearerSetupFailure *radioBearerSetupFailure;
      /* type = 18 */
//      RRCConnectionReleaseComplete *rrcConnectionReleaseComplete;
      /* type = 19 */ 
      RRCConnectionSetupComplete *rrcConnectionSetupComplete;
      /*type = 27 */
      UECapabilityInformation	 *ueCapabilityInformation;
      /* type = 28 */
      UplinkDirectTransfer *uplinkDirectTransfer;
      /* type = 31 */
      RRCConnectionRelease_UL *rrcConnectionRelease_UL;
    } content;
  } UL_DCCH_MessageType;

/**************************************************************/ 
/*  UL DCCH Message                                           */ 
/**************************************************************/ 
  typedef struct UL_DCCH_Message {
    IntegrityCheckInfo integrityCheckInfo;
    UL_DCCH_MessageType message;
  } UL_DCCH_Message;


/**************************************************************/ 
/*  DL_CCCH_MessageType                                       */
/**************************************************************/
  typedef struct DL_CCCH_MessageType {
    unsigned char  type;
    union {
      /* type = 1 */
      CellUpdateConfirm_CCCH *cellUpdateConfirm;
      /* type = 2 */
      RRCConnectionReject *rrcConnectionReject;
      /* type = 3 */
//      RRCConnectionRelease_CCCH *rrcConnectionRelease;
      /* type = 4 */
      RRCConnectionSetup *rrcConnectionSetup;
    } content;
  } DL_CCCH_MessageType;

/**************************************************************/ 
/*  DL CCCH Message                                           */ 
/**************************************************************/ 
  typedef struct DL_CCCH_Message {
    IntegrityCheckInfo integrityCheckInfo;
    DL_CCCH_MessageType message;
  } DL_CCCH_Message;


/**************************************************************/ 
/*  UL CCCH MessageType                                       */ 
/**************************************************************/ 
  typedef struct UL_CCCH_MessageType {
    unsigned char  type;
    union {
      /* type = 1 */
      CellUpdate cellUpdate;
      /* type = 2 */
      RRCConnectionRequest rrcConnectionRequest;
    } content;
  } UL_CCCH_MessageType;

/**************************************************************/ 
/*  UL CCCH Message                                           */ 
/**************************************************************/ 
  typedef struct UL_CCCH_Message {
    IntegrityCheckInfo integrityCheckInfo;
    UL_CCCH_MessageType message;
  } UL_CCCH_Message;


/**************************************************************/
/*  DL MCCH MessageType                                       */
/**************************************************************/
  typedef struct MCCH_MessageType {
    unsigned char type;
    union {
      /* type = 1 */
      MBMSAccessInformation   *mbmsAccessInformation;
      /* type = 2 */
      MBMSCommonPTMRBInformation  *mbmsCommonPTMRBInformation;
      /* type = 3 */
      MBMSCurrentCellPTMRBInformation  *mbmsCurrentCellPTMRBInformation;
      /* type = 4 */
      MBMSGeneralInformation  *mbmsGeneralInformation;
      /* type = 5 */
      MBMSModifiedServicesInformation  *mbmsModifiedServicesInformation;
      /* type = 6 */
      MBMSNeighbouringCellPTMRBInformation  *mbmsNeighbouringCellPTMRBInformation;
      /* type = 7 */
      MBMSUnmodifiedServicesInformation  *mbmsUnmodifiedServicesInformation;
    } content;
  } MCCH_MessageType;

/**************************************************************/
/*  DL MCCH Message                                           */
/**************************************************************/
  typedef struct MCCH_Message {
    MCCH_MessageType  message;
  } MCCH_Message;


/**************************************************************/
/*  DL MSCH MessageType                                       */
/**************************************************************/
  typedef struct MSCH_MessageType {
    unsigned char type; //reserved for the future extension
    union {
      /* type = 1 */
      MBMSSchedulingInformation	*mbmsSchedulingInformation;
    } content;
  } MSCH_MessageType;

/**************************************************************/
/*  DL MSCH Message                                           */
/**************************************************************/
  typedef struct MSCH_Message {
    IntegrityCheckInfo  integrityCheckInfo;
    MSCH_MessageType  message;
  } MSCH_Message;

#endif
