5G-MAG Reference Tools - MBMS Modem
Rrc.h
Go to the documentation of this file.
1 // 5G-MAG Reference Tools
2 // MBMS Modem Process
3 //
4 // Copyright (C) 2021 Klaus Kühnhammer (Österreichische Rundfunksender GmbH & Co KG)
5 //
6 // This program is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU Affero General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU Affero General Public License for more details.
15 //
16 // You should have received a copy of the GNU Affero General Public License
17 // along with this program. If not, see <http://www.gnu.org/licenses/>.
18 //
19 
20 #pragma once
21 #include <string>
22 #include <libconfig.h++>
23 #include "srsran/srsran.h"
24 #include "srsran/rlc/rlc.h"
25 #include "srsran/asn1/rrc.h"
26 
27 #include "Phy.h"
28 
34 class Rrc : public srsue::rrc_interface_rlc, public srsue::rrc_interface_pdcp {
35  public:
43  Rrc(const libconfig::Config& cfg, Phy& phy, srsran::rlc& rlc)
44  : _cfg(cfg)
45  , _rlc(rlc)
46  , _phy(phy) {}
47  virtual ~Rrc() = default;
48 
49  void max_retx_attempted() override {}; // Unused
50 
51  typedef enum {
54  STREAMING
56  rrc_state_t state() { return _state; }
57  void reset() { _state = ACQUIRE_SIB; }
58 
59 
66  void write_pdu_mch(uint32_t lcid, srsran::unique_byte_buffer_t pdu) override;
67 
71  void write_pdu_bcch_dlsch(srsran::unique_byte_buffer_t pdu) override;
72  void write_pdu(uint32_t lcid, srsran::unique_byte_buffer_t pdu) override {}; // Unused
73  void write_pdu_bcch_bch(srsran::unique_byte_buffer_t pdu) override {}; // Unused
74  void write_pdu_pcch(srsran::unique_byte_buffer_t pdu) override {}; // Unused
75  const char* get_rb_name(uint32_t lcid) override { return "RB" + lcid; };
76  void protocol_failure() override {};
77  void notify_pdcp_integrity_error(uint32_t lcid) override {};
78 
79  private:
80  void handle_sib1(const asn1::rrc::sib_type1_mbms_r14_s& sib1);
82 
83  const libconfig::Config& _cfg;
84  srsran::rlc& _rlc;
86 };
The PHY component.
Definition: Phy.h:42
Simple RRC component between PHY and RLC.
Definition: Rrc.h:34
void write_pdu_mch(uint32_t lcid, srsran::unique_byte_buffer_t pdu) override
Handle a MCH PDU.
Definition: Rrc.cpp:34
void write_pdu_bcch_dlsch(srsran::unique_byte_buffer_t pdu) override
Handle SIB1(SIB13) from BCCH/DLSCH, and set the scheduling info in PHY.
Definition: Rrc.cpp:67
rrc_state_t _state
Definition: Rrc.h:81
Rrc(const libconfig::Config &cfg, Phy &phy, srsran::rlc &rlc)
Default constructor.
Definition: Rrc.h:43
void write_pdu_pcch(srsran::unique_byte_buffer_t pdu) override
Definition: Rrc.h:74
rrc_state_t
Definition: Rrc.h:51
@ ACQUIRE_AREA_CONFIG
Definition: Rrc.h:53
@ ACQUIRE_SIB
Definition: Rrc.h:52
@ STREAMING
Definition: Rrc.h:54
const char * get_rb_name(uint32_t lcid) override
Definition: Rrc.h:75
virtual ~Rrc()=default
void write_pdu_bcch_bch(srsran::unique_byte_buffer_t pdu) override
Definition: Rrc.h:73
void notify_pdcp_integrity_error(uint32_t lcid) override
Definition: Rrc.h:77
void handle_sib1(const asn1::rrc::sib_type1_mbms_r14_s &sib1)
Definition: Rrc.cpp:121
Phy & _phy
Definition: Rrc.h:85
rrc_state_t state()
Definition: Rrc.h:56
const libconfig::Config & _cfg
Definition: Rrc.h:83
void reset()
Definition: Rrc.h:57
srsran::rlc & _rlc
Definition: Rrc.h:84
void max_retx_attempted() override
Definition: Rrc.h:49
void protocol_failure() override
Definition: Rrc.h:76
void write_pdu(uint32_t lcid, srsran::unique_byte_buffer_t pdu) override
Definition: Rrc.h:72
static Config cfg
Global configuration object.
Definition: main.cpp:165