mac_rrc_primitives.h 19 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.0  (the "License"); you may not use this file
 * except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.openairinterface.org/?page_id=698
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef __MAC_RRC_PRIMITIVES_H__
#    define __MAC_RRC_PRIMITIVES_H__



#ifndef OPENAIR2_IN
#include "LAYER2/RLC/rlc.h"
#endif
#include "COMMON/platform_types.h"
#include "COMMON/platform_constants.h"

#include "RadioResourceConfigCommonSIB.h"
#include "RadioResourceConfigDedicated.h"
#include "MeasGapConfig.h"
Cedric Roux's avatar
Cedric Roux committed
36
#if defined(Rel10) || defined(Rel14)
37
38
39
40
41
#include "MBSFN-AreaInfoList-r9.h"
#include "MBSFN-SubframeConfigList.h"
#endif
//#include "rrm_config_structs.h"
//#include "platform_types.h"
42
/** @defgroup _mac_rrc_primitives_ MAC Layer Primitives for Communications with RRC
43
44
 * @ingroup _openair_mac_layer_specs_
 * @{
45
This subclause describes the primitives for communications between the RRC and MAC sub-layers.
46
47
48
49
50
51
52
53
54


This subclause describes the primitives for communications between the RRC and MAC sub-layers.
The RRC sequence diagrams are shown below.

The primitives responsible for relaying of radio and traffic measurements to the radio resource manager via
RRC signaling are :
-# MAC_MEAS_REQ: enables RRC to request a measurement process in the MAC (one-shot, periodic or event-driven). This configures
a measurement process in the MAC.
55
-# MAC_MEAS_IND: indicates to RRC that a (periodic) measurement request is available.
56
57
58
59
60
61
62
63
-# MAC_MEAS_CONFIRM: enables RRC to acknowledge a MAC-MEAS-Ind.

These associate a set of measurements (described by the MAC_MEAS_t structure) to a particular logical channel.  Each measurement has
an associated period (which can be infinite in the case of a one-shot measurement) and a set of triggers for generating event-driven
instantaneous measurement reports. The latter is typically used to signal events that correspond to degradation or loss of links with respect to
negotiated QoS values.  These consequently trigger reconfiguration of services by the network. The averaging parameters used by the
MAC measurement process is described by the structure MAC_AVG_t. Note that it is the responsibility
of the MAC-layer to relay PHY measurements which are directly available to the scheduling entity in the MAC-layer.
64
RRC does not directly act on the PHY measurement sub-system.
65
66
67
68

The primitives responsible for logical channel MAC configuration by the radio resource manager via RRC signaling are

-# MAC_CONFIG_REQ: enables RRC to configure a new logical channel description at the MAC layer.  The associated QoS
69
descriptor (MAC_LCHAN_DESC contains the parameters defining the logical channel resource scheduling.
70
71
72
73
74
-# MAC_CONFIG_CONFIRM: indicates to RRC that a given logical channel has or has not been configured.

The primitives responsible for indicating data synchronization (or loss of) to RRC are
-# MAC_SYNC : indicates to RRC that a physical link for a newly established logical channel has been used (reception) with
success.  The parameter passed indicates the logical channel id.  This represents the event of successfully decoding a particular logical
75
channel for the first time.  In the event that several logical channels share the same physical resources (e.g. BCCH and CCCH), it
76
77
78
shall only be sent for the logical channel with the lowest id.
-# MAC_OUT_OF_SYNC : UE primitive indicating to RRC that a physical link for a particular Node-B has been lossed.  The parameter
passed indicates the id of the Node-B.  This represents the event of detecting an unacceptable error rate on the CHBCH of the Node-B in question.
79
and can be used in the case of handover between Node-B's.  Note that this message is redundant since an equivalent way of obtaining the same
80
81
82
83
result could be based on an event-driven measurement report.
*/

#        define NB_SIG_CNX_CH 1
84
#        define NB_CNX_CH MAX_MOBILES_PER_ENB
85
86

#        define NB_SIG_CNX_UE 2 //MAX_MANAGED_RG_PER_MOBILE
87
#        define NB_CNX_UE 2//MAX_MANAGED_RG_PER_MOBILE
88
89
90
91
92
93
94
95
96

#define NUMBER_OF_MEASUREMENT_SUBBANDS 16

#define RRC_RACH_ASS_REQ 0
#define MAC_RACH_BW_REQ 1

typedef enum {
  RRC_OK=0,
  RRC_ConnSetup_failed,
97
98
99
  RRC_PHY_RESYNCH,
  RRC_Handover_failed,
  RRC_HO_STARTED
100
101
102
103
104
} RRC_status_t;


/*! MAC/PHY Measurement Structure*/
/*! \brief Logical Channel ID structure */
105
typedef struct {
106
  unsigned short    Index __attribute__ ((packed));       //QOS CLASS?          /*!< \brief Index of logical channel*/
107
} LCHAN_ID;
108
109


110
typedef struct {
111
112
  char Rssi;                        /*!< \brief RSSI (dBm) on physical resources corresponding to logical channel*/
  char Sinr[NUMBER_OF_MEASUREMENT_SUBBANDS];                        /*!< \brief Average SINR (dB) on physical resources corresponding to logical channel*/
gauthier's avatar
gauthier committed
113
  uint8_t Harq_delay;         /*!< \brief Average number of transmission rounds (times 10) on transport channel associated with
114
              logical channel*/
115
  unsigned short Bler;              /*!< \brief Average block error rate (times 1000) on transport channel associated with logical channel*/
gauthier's avatar
gauthier committed
116
  uint8_t Spec_eff;           /*!< \brief Actual Spectral efficiency (bits/symbol times 10) of transport channel associated with logical channel*/
117
118
119
120
  uint8_t Qdepth;
  //uint8_t Tx_rate;
  //uint8_t Rx_rate;
} __attribute__ ((__packed__)) MAC_MEAS_T;
121
122
123
124
#define MAC_MEAS_T_SIZE sizeof(MAC_MEAS_T)

/*!\brief MAC/RLC Measurement Information
 */
125
typedef struct {
126
127
  char Rssi;                        /*!< \brief RSSI (dBm) on physical resources corresponding to logical channel*/
  char Sinr[NUMBER_OF_MEASUREMENT_SUBBANDS];                        /*!< \brief Average SINR (dB) on physical resources corresponding to logical channel*/
gauthier's avatar
gauthier committed
128
  uint8_t Harq_delay;         /*!< \brief Average number of transmission rounds (times 10) on transport channel associated with
129
              logical channel*/
130
  unsigned short Bler;              /*!< \brief Average block error rate (times 1000) on transport channel associated with logical channel*/
gauthier's avatar
gauthier committed
131
132
  uint8_t Spec_eff;           /*!< \brief Actual Spectral efficiency (bits/symbol times 10) of transport channel associated with logical channel*/
  uint8_t  rlc_sdu_buffer_occ;    /*!< \brief RLC SDU buffer occupancy */
133
  unsigned short rlc_sdu_loss_indicator; /*!< \brief RLC SDU Loss indicator */
134
} __attribute__ ((__packed__)) MAC_RLC_MEAS_T;
135
136
137
138
139
140
141
142
143
#define MAC_RLC_MEAS_T_SIZE sizeof(MAC_RLC_MEAS_T)





/*! MAC/PHY Measurement Averaging Parameters.  These are fixed-point 16-bit representations of the interval [0,1)*/

typedef struct {
144
145
146
147
148
149
  unsigned short Rssi_forgetting_factor;                        /*!< \brief Forgetting factor for RSSI averaging*/
  unsigned short Sinr_forgetting_factor;                        /*!< \brief Forgetting factor for SINR averaging*/
  unsigned short Harq_delay_forgetting_factor;         /*!< \brief Forgetting factor for HARQ delay averaging*/
  unsigned short Bler_forgetting_factor;              /*!< \brief Forgetting factor for block error rate (times 1000) averaging*/
  unsigned short Spec_eff_forgetting_factor;           /*!< \brief Forgetting factor for Spectral efficiency averaging*/
} __attribute__ ((__packed__))  MAC_AVG_T;
150
151
152
153
154
155
156
157

/*!\brief This primitive indicates to RRC that a measurement request is available */

typedef struct {
  LCHAN_ID  Lchan_id;           /*!< \brief Logical Channel ID*/
  unsigned short Process_id;         /*!< \brief Id of MAC measurement process*/
  MAC_MEAS_T Meas;
  char Meas_status;              /*!< \brief Latest set of MAC measurements performed in the current process*/
158
} __attribute__ ((__packed__))  MAC_MEAS_IND;
159
160
161
162
163
164
165
166

#define MAC_MEAS_IND_SIZE sizeof(MAC_MEAS_IND)

/*!\brief This primitive indicates to MAC that a measurement request was received
 */
typedef struct {
  //LCHAN_ID  Lchan_id;           /*!< \brief Logical Channel ID*/
  //unsigned short       Process_id;         /*!< \brief Id of new MAC measurement process*/
167
  char     Meas_status;           /*!< \brief Status (0-positive, 1-negative)*/
168
} __attribute__ ((__packed__))  MAC_MEAS_CONFIRM;
169
170
171
172
173
174
175
176
177
178

/*!\brief This primitive parametrizes a MAC measurement process
 */
typedef struct {
  MAC_MEAS_T Meas_trigger;      /*!< \brief Thresholds to trigger event driven measurement reports*/
  MAC_AVG_T Mac_avg;            /*!< \brief Set of forgetting factors for the averaging of the MAC measurement process*/
  unsigned int bo_forgetting_factor; /*!< \brief Forgetting factor for RLC buffer occupancy averaging*/
  unsigned int sdu_loss_trigger; /*!< \brief Trigger for RLC SDU losses*/
  unsigned short Rep_amount;    /*!< \brief Number of Measurements for this process, 0 means infinite*/
  unsigned short Rep_interval;  /*!< \brief Reporting interval between successive measurement reports in this process*/
179
} __attribute__ ((__packed__))  MAC_RLC_MEAS_DESC;
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194



/*!\brief This primitive indicates to MAC that a (periodic) measurement request is requested for a particular logical channel
 */
typedef struct {
  LCHAN_ID Lchan_id;            /*!< \brief Logical Channel ID*/
  unsigned short  UE_eNB_index;
  unsigned short Process_id;         /*!< \brief Id of new MAC measurement process*/
  //  MAC_MEAS_DESC Meas_desc;/*!< \brief Measurement descriptor associated with Logical channel*/
  MAC_MEAS_T Meas_trigger;      /*!< \brief Thresholds to trigger event driven measurement reports*/
  MAC_AVG_T Mac_avg;            /*!< \brief Set of forgetting factors for the averaging of the MAC measurement process*/
  unsigned short Rep_amount;    /*!< \brief Number of Measurements for this process, 0 means infinite*/
  unsigned short Rep_interval;  /*!< \brief Reporting interval between successive measurement reports in this process*/
  MAC_MEAS_T Mac_meas;      /*!< \brief Measure structure to be filled by the MAC  */
195
} __attribute__ ((__packed__))  MAC_MEAS_REQ;
196
197
#define MAC_MEAS_REQ_SIZE sizeof(MAC_MEAS_REQ)

198
typedef struct MEAS_REQ_TABLE_ENTRY {
199
200
201
  MAC_MEAS_REQ Mac_meas_req;
  unsigned int Last_report_frame;
  unsigned int Next_check_frame;
gauthier's avatar
gauthier committed
202
203
204
205
  uint8_t Status;
  uint8_t Meas_req_status;
  uint8_t Rx_activity;
  //uint8_t Meas_Direction;//???
206
207
  struct MEAS_REQ_TABLE_ENTRY *Next_entry;
  struct MEAS_REQ_TABLE_ENTRY *Prev_entry;
208
} __attribute__ ((__packed__)) MAC_MEAS_REQ_ENTRY;
209
210
211
212


/*!\brief This primitive parametrizes an RLC measurement process
 */
213
typedef struct {
214
215
  unsigned int bo_forgetting_factor; /*!< \brief Forgetting factor for buffer occupancy averaging*/
  unsigned int sdu_loss_trigger; /*!< \brief Trigger for RLC sdu losses*/
216
} __attribute__ ((__packed__))  RLC_MEAS_DESC;
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231

//#define NUM_MEAS_REQ_MAX 100 //from rrm






/*! \brief MAC Logical Channel Descriptor
 */
typedef struct {
  unsigned short transport_block_size;                  /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */
  unsigned short max_transport_blocks;                  /*!< \brief Maximum PDU size in bytes provided by RLC to MAC layer interface */
  unsigned long  Guaranteed_bit_rate;           /*!< \brief Guaranteed Bit Rate (average) to be offered by MAC layer scheduling*/
  unsigned long  Max_bit_rate;                  /*!< \brief Maximum Bit Rate that can be offered by MAC layer scheduling*/
gauthier's avatar
gauthier committed
232
233
234
  uint8_t  Delay_class;                  /*!< \brief Delay class offered by MAC layer scheduling*/
  uint8_t  Target_bler;                  /*!< \brief Target Average Transport Block Error rate*/
  uint8_t  Lchan_t;                      /*!< \brief Logical Channel Type (BCCH,CCCH,DCCH,DTCH_B,DTCH,MRBCH)*/
235
} __attribute__ ((__packed__))  LCHAN_DESC;
236

237
#define LCHAN_DESC_SIZE sizeof(LCHAN_DESC)
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255

/*!\brief This primitive indicates to RRC that a particular logical channel has been established and that successful transmission has
been received.  The parameter passed is the logical channel id.
 */
typedef struct MAC_SYNC {
  LCHAN_ID Lchan_id;       /*!< \brief Logical Channel ID*/
} MAC_SYNC;

/*!\brief This primitive indicates to RRC (UE) that a particular Node-B has been lossed and passes CHBCH logical channel
node_id as parameter
 */
typedef struct MAC_OUT_OF_SYNC {
  unsigned short  Node_id;       /*!< \brief Logical Channel ID*/
} MAC_OUT_OF_SYNC;


/*!\brief This primitive enables RRC to configure a new logical channel description at the MAC layer.
 */
256
typedef struct {
257
258
  LCHAN_ID   Lchan_id;              /*!< \brief Logical Channel ID*/
  //   unsigned short UE_eNB_index; //ID of CH who configued the LC (Need this to identify LC in the UE side)
gauthier's avatar
gauthier committed
259
  uint8_t Lchan_type; // DCCH_LCHAN, DTCH_LCHAN
260
261
262
263
264
265
266
  LCHAN_DESC  Lchan_desc[2];  /*!< \brief Logical Channel QoS Descriptor (MAC component) */
  uint8_t L3_info_type;
  uint8_t L3_info[16];
  //#ifndef CELLULAR
  unsigned short UE_eNB_index;
  //#endif
} __attribute__ ((__packed__))  MAC_CONFIG_REQ;
267
268
269
270
271
272
273
#define MAC_CONFIG_REQ_SIZE sizeof(MAC_CONFIG_REQ)


/*!\brief This primitive indicates to RRC that a given logical channel has or has not been configured.
*/
typedef struct {
  LCHAN_ID Lchan_id;        /*!< \brief Logical Channel ID*/
gauthier's avatar
gauthier committed
274
  uint8_t    Config_status;   /*!< \brief Configuration status (0-positive, 1-negative)*/
275
} __attribute__ ((__packed__))  MAC_CONFIG_CONFIRM;
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291

/**@}*/


/*
** @addtogroup _mac_impl_ MAC Layer (MAC) Reference Implementation
 *@{
 */

//#include "LAYER2/MAC/defs.h"



typedef struct {
  char Sinr_meas[NB_CNX_CH+1][NUMBER_OF_MEASUREMENT_SUBBANDS];
  char Wideband_sinr;
gauthier's avatar
gauthier committed
292
  uint8_t Forg_fact;
293
  unsigned short Rep_interval;
gauthier's avatar
gauthier committed
294
  uint8_t Status;
295
  unsigned int Last_report_frame;
296
  unsigned int Next_check_frame;
gauthier's avatar
gauthier committed
297
  uint8_t Active;
298
} __attribute__ ((__packed__)) DEFAULT_UE_MEAS;
299
300
301
302
#define DEFAULT_UE_MEAS_SIZE sizeof(DEFAULT_UE_MEAS)

typedef struct {  //From RRC
  unsigned short UE_index;
gauthier's avatar
gauthier committed
303
  uint8_t Forg_fact;
304
  unsigned short Rep_interval;;
305
} __attribute__ ((__packed__)) DEFAULT_MEAS_REQ;
306
307
308
309
310
#define DEFAULT_MEAS_REQ_SIZE sizeof(DEFAULT_MEAS_REQ)

typedef struct {  //To RRC
  unsigned short UE_index __attribute__ ((packed));
  char Sinr_meas[NB_CNX_CH+1];
gauthier's avatar
gauthier committed
311
  uint8_t Rb_active[NB_RAB_MAX];
312
} __attribute__ ((__packed__)) DEFAULT_MEAS_IND;
313
314
315
316
317
318
319
#define DEFAULT_MEAS_IND_SIZE sizeof(DEFAULT_MEAS_IND)


typedef struct {
  char Sinr_meas[NB_CNX_CH+1][NUMBER_OF_MEASUREMENT_SUBBANDS];
  char Wideband_sinr;
  unsigned int cqi;
gauthier's avatar
gauthier committed
320
  uint8_t Forg_fact;
321
322
  unsigned short Rep_interval;
  unsigned int Last_report_frame;
323
  unsigned int Next_check_frame;
gauthier's avatar
gauthier committed
324
325
  uint8_t Status; //IDLE,NEED_rADIO_CONFIG, RADIO_CONFIG_TX, RADIO_CONFIG_ok
  uint8_t Active;
326
} __attribute__ ((__packed__)) DEFAULT_CH_MEAS;
327
328
329
330
331
332
333
334
335
336
#define DEFAULT_eNB_MEAS_SIZE sizeof(DEFAULT_eNB_MEAS)



#ifndef OPENAIR2_IN

#ifndef CELLULAR
//#include "L3_rrc_defs.h"
#endif

337
typedef struct {  //RRC_INTERFACE_FUNCTIONS
338
339
  unsigned int Frame_index;
  unsigned short UE_index[NB_MODULES_MAX][NB_SIG_CNX_UE];
gauthier's avatar
gauthier committed
340
  uint8_t  eNB_id[NB_MODULES_MAX][NB_CNX_UE];
341
342
#ifndef CELLULAR
  //  L2_ID UE_id[NB_MODULES_MAX][NB_CNX_CH];
gauthier's avatar
gauthier committed
343
  uint8_t UE_id[NB_MODULES_MAX][NB_CNX_CH][5];
344
#endif
345
  void (*openair_rrc_top_init)(void);
gauthier's avatar
gauthier committed
346
347
348
349
350
351
352
  char (*openair_rrc_eNB_init)(uint8_t );
  char (*openair_rrc_UE_init)(uint8_t, uint8_t);
  RRC_status_t (*rrc_rx_tx)(uint8_t,uint32_t,uint8_t,uint8_t);
  uint8_t (*mac_rrc_data_ind)(uint8_t,uint32_t,uint16_t,uint8_t *,uint16_t,eNB_flag_t eNB_flag, uint8_t eNB_index);
  uint8_t (*mac_rrc_data_req)(uint8_t,uint32_t,uint16_t,uint8_t,uint8_t *,eNB_flag_t eNB_flag, uint8_t eNB_index);
  void (*mac_rrc_meas_ind)(uint8_t,MAC_MEAS_REQ_ENTRY*);
  void  (*def_meas_ind)(uint8_t, uint8_t);
353
354
  void (*rrc_data_indP)  (module_id_t , rb_id_t , sdu_size_t , char*);
  void (*fn_rrc)  (void);
gauthier's avatar
gauthier committed
355
  uint8_t (*get_rrc_status)(uint8_t Mod_id,uint8_t eNB_flag,uint8_t eNB_index);
356
  double (*rrc_get_estimated_ue_distance) (module_id_t Mod_id, uint8_t UE_id, uint8_t CC_id, uint8_t loc_type);
357
} RRC_XFACE;
358
359


360
typedef struct {
361
362
363
364
365
  //MAC_INTERFACE_FUNCTIONS
  unsigned int frame;
  unsigned short Node_id[NB_MODULES_MAX];
  char Is_cluster_head[NB_MODULES_MAX];
  void (*macphy_exit)(const char *);          /*  Pointer function that stops the low-level scheduler due an exit condition */
gauthier's avatar
gauthier committed
366
367
368
  unsigned short (*mac_config_req)(uint8_t,uint8_t,MAC_CONFIG_REQ*);
  MAC_MEAS_REQ_ENTRY* (*mac_meas_req)(uint8_t ,  MAC_MEAS_REQ*);
  void (*mac_out_of_sync_ind)(uint8_t,uint32_t,unsigned short);
369
370
  //RLC_INTERFACE_FUNCTIONS
  void (*pdcp_run)(void);
371
  void (*pdcp_data_req)(module_id_t, rb_id_t, sdu_size_t, char*);
372
  signed int (*rrc_rlc_config_req)(unsigned int, unsigned int, unsigned int, unsigned int, rlc_info_t );
gauthier's avatar
gauthier committed
373
  int (*rrc_mac_config_req)(uint8_t Mod_id,uint8_t eNB_flag,uint8_t UE_id,uint8_t eNB_index,
374
375
376
377
378
379
380
381
382
                            RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
                            struct PhysicalConfigDedicated *physicalConfigDedicated,
                            MAC_MainConfig_t *mac_MainConfig,
                            long logicalChannelIdentity,
                            LogicalChannelConfig_t *logicalChannelConfig,
                            MeasGapConfig_t *measGapConfig,
                            TDD_Config_t *tdd_Config,
                            uint8_t *SIwindowsize,
                            uint16_t *SIperiod
Cedric Roux's avatar
Cedric Roux committed
383
#if defined(Rel10) || defined(Rel14)
384
385
386
387
388
                            ,
                            MBMS_flag_t MBMS_Flag,
                            struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList,
                            MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList,
                            struct PMCH_InfoList_r9 *pmch_InfoList
389
#endif
390
                           );
391
  unsigned int (*mac_rlc_data_req)(module_id_t, unsigned int, char*);
gauthier's avatar
gauthier committed
392
  void (*mac_rlc_data_ind)(module_id_t, logical_chan_id_t, char*, tb_size_t, num_tb_t, crc_t* );
393
394
  mac_rlc_status_resp_t (*mac_rlc_status_ind)     (module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t eNB_flagP, MBMS_flag_t MBMS_flagP,
      logical_chan_id_t channel_idP, tb_size_t tb_sizeP);
395
396
  signed int (*rrc_rlc_data_req)(module_id_t, rb_id_t, mui_t, confirm_t, sdu_size_t, char *);
  void (*rrc_rlc_register_rrc) (void (*rrc_data_indP)(module_id_t , rb_id_t , sdu_size_t , char* ),
397
                                void  (*rrc_data_confP) (module_id_t , rb_id_t , mui_t ) ) ;
gauthier's avatar
gauthier committed
398
399
  void (*mrbch_phy_sync_failure) (uint8_t Mod_id, frame_t frame, uint8_t Free_ch_index);
  void (*dl_phy_sync_success) (uint8_t Mod_id, frame_t frame, uint8_t eNB_index);
400
} MAC_RLC_XFACE;
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415


#endif



#define IDLE 0
#define NEED_RADIO_CONFIG 3
#define RADIO_CONFIG_TX 2
#define RADIO_CONFIG_OK 1

#define MEAS_CONFIGURED 4
#define MEAS_OK 5
#define MEAS_TRIGGER 6
#define RRC_MEAS_REPORT_REQ 7
416
#define MEAS_REPORT 8
417
418
419
420
421
422
423
424
425
426

#define RAB_MEAS_IND 0
#define DEF_MEAS_IND 1

#define ADD_LC 0
#define REMOVE_LC 1

#endif