/*
                                 platform_constants.h
                             -------------------
  AUTHOR  : Lionel GAUTHIER
  COMPANY : EURECOM
  EMAIL   : Lionel.Gauthier@eurecom.fr

 ***************************************************************************/

#include "RRC/LITE/MESSAGES/asn1_constants.h"

#ifndef __PLATFORM_CONSTANTS_H__
#    define __PLATFORM_CONSTANTS_H__

#define NL_MAX_PAYLOAD 4096  /* this should cover the max mtu size*/

#ifdef USER_MODE
#ifdef LARGE_SCALE
#    define NB_MODULES_MAX 128
#    define NB_NODE_MAX    128
#else
#    define NB_MODULES_MAX 32
#    define NB_NODE_MAX    32
#endif
#else
#    define NB_MODULES_MAX 1
#    define NB_NODE_MAX    1
#endif //PHY_EMUL


#ifdef JUMBO_FRAME
#    define MAX_IP_PACKET_SIZE         9000
#else
# if defined(OAI_NW_DRIVER_TYPE_ETHERNET)
/* SR: When using ethernet network driver the packet size is 1512 :
 * 1500 bytes IP packet + 12 bytes ethernet header
 */
#   define MAX_IP_PACKET_SIZE          1512
# else
#   define MAX_IP_PACKET_SIZE          1500 // 3000
# endif
#endif
// overwrite the previous deinitions

#    define MAX_MODULES                NB_MODULES_MAX

#ifdef LARGE_SCALE
#    define MAX_MOBILES_PER_RG         128
#    define MAX_RG                     2
#else
#    define MAX_MOBILES_PER_RG         16
#    define MAX_RG                     2
#endif

#    define MAX_MANAGED_RG_PER_MOBILE  2

#    define DEFAULT_RAB_ID             3
#    define NB_RB_MAX  11
#    define NB_RAB_MAX 8 // 4
#    define RAB_SHIFT1 9
#    define RAB_SHIFT2 3
#    define RAB_OFFSET  0x0007
#    define RAB_OFFSET1 0x7E00
#    define RAB_OFFSET2 0x01F8
#    define DIR_OFFSET  0x8000
#    define DIR_SHIFT   15
#    define CH_OFFSET   0x0004
#    define CH_SHIFT    2
#ifdef MESH

#    define MAX_RB_MOBILE              NB_RB_MAX  * ( MAX_MANAGED_RG_PER_MOBILE + MAX_MOBILES_PER_RG - 1 )
#    define MAX_RAB_MOBILE             NB_RAB_MAX * ( MAX_MANAGED_RG_PER_MOBILE + MAX_MOBILES_PER_RG - 1 )
#    define MAX_RB_RG                  MAX_RB_MOBILE //NB_RB_MAX  *  MAX_MOBILES_PER_RG
#    define MAX_RAB_RG                 (NB_RB_MAX+1) * (MAX_MOBILES_PER_RG + 1)
#    define MAX_RAB                    MAX_RAB_RG
#    define MAX_RB                     MAX_RB_RG
#else

#    define MAX_RB_MOBILE              NB_RB_MAX * MAX_MANAGED_RG_PER_MOBILE
#    define MAX_RAB_MOBILE             NB_RAB_MAX * MAX_MANAGED_RG_PER_MOBILE
#    define MAX_RB_RG                  NB_RB_MAX * MAX_MOBILES_PER_RG
#    define MAX_RAB_RG                 NB_RB_MAX * MAX_MOBILES_PER_RG
#    //ifdef NODE_RG
#        define MAX_RAB                MAX_RAB_RG
#        define MAX_RB                 MAX_RB_RG
#    //else
#      //  ifdef NODE_MT
#        //    define MAX_RAB            MAX_RAB_MOBILE
#          //  define MAX_RB             MAX_RB_MOBILE
#        //else
#          //error NODE_RG or NODE_MT must be defined
#        //endif
//#    endif
#endif //MESH

// RLC_MODE
#        define RLC_NONE     0
#        define RLC_MODE_AM  1
#        define RLC_MODE_TM  2
#        define RLC_MODE_UM  3

//E_R
#        define E_R_RLC_ER_RELEASE          1
#        define E_R_RLC_ER_MODIFICATION     2
#        define E_R_RLC_ER_RE_ESTABLISHMENT 4
#        define E_R_RLC_ER_STOP             8
#        define E_R_RLC_ER_CONTINUE         16
#        define E_R_RLC_ER_NONE             0

// RLC_AM_SEND_MRW
#        define SEND_MRW_OFF    15
#        define SEND_MRW_ON     240

// RLC_SEGMENTATION_INDICATION
#        define SEGMENTATION_NOT_ALLOWED  0
#        define SEGMENTATION_ALLOWED      1

// RLC_DELIVERY_OF_ERRONEOUS_SDU
#        define DELIVERY_OF_ERRONEOUS_SDU_NO           0
#        define DELIVERY_OF_ERRONEOUS_SDU_YES          1
#        define DELIVERY_OF_ERRONEOUS_SDU_NO_DETECT    2


// CBA constant
#define NUM_MAX_CBA_GROUP 4

#    ifndef __cplusplus
#        ifndef NULL
#            define NULL 0
#        endif
#        ifndef null
#            define null 0
#        endif
#    endif



#ifdef USER_MODE
#define printk printf
#endif

#define UNUSED_VARIABLE(vARIABLE)   (void)(vARIABLE)

#endif /* __PLATFORM_CONSTANTS_H__ */
