1 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  * Author: Marco Miozzo <mmiozzo@cttc.es>
19  */
20 
21 
22 
23 #ifndef LTE_ENB_PHY_SAP_H
24 #define LTE_ENB_PHY_SAP_H
25 
26 #include <ns3/packet.h>
27 #include <ns3/ff-mac-common.h>
28 #include <ns3/ff-mac-sched-sap.h>
29 
30 namespace ns3 {
31 
32 class LteControlMessage;
33 
34 /**
35  * Service Access Point (SAP) offered by the eNB-PHY to the eNB-MAC
36  *
37  * This is the PHY SAP Provider, i.e., the part of the SAP that contains
38  * the PHY methods called by the MAC
39  */
40 class LteEnbPhySapProvider
41 {
42 public:
43   virtual ~LteEnbPhySapProvider ();
44 
45   /**
46    * \brief Send the MAC PDU to the channel
47    * \param p the MAC PDU to send
48    * \return true if
49    */
50   virtual void SendMacPdu (Ptr<Packet> p) = 0;
51 
52   /**
53    * \brief Send SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel
54    * \param msg the Ideal Control Message to send
55    */
56   virtual void SendLteControlMessage (Ptr<LteControlMessage> msg) = 0;
57 
58   /**
59   * \brief Get the delay from MAC to Channel expressed in TTIs
60   * \returns MAC channel TTI delay
61   */
62   virtual uint8_t GetMacChTtiDelay () = 0;
63 
64 
65 };
66 
67 
68 /**
69  * Service Access Point (SAP) offered by the eNB-PHY to the eNB-MAC
70  *
71  * This is the MAC SAP User, i.e., the part of the SAP that contains the MAC
72  * methods called by the PHY
73  */
74 class LteEnbPhySapUser
75 {
76 public:
77   virtual ~LteEnbPhySapUser ();
78 
79 
80   /**
81    * Called by the Phy to notify the MAC of the reception of a new PHY-PDU
82    *
83    * \param p
84    */
85   virtual void ReceivePhyPdu (Ptr<Packet> p) = 0;
86 
87   /**
88    * \brief Trigger the start from a new frame (input from Phy layer)
89    * \param frameNo frame number
90    * \param subframeNo subframe number
91    */
92   virtual void SubframeIndication (uint32_t frameNo, uint32_t subframeNo) = 0;
93 
94   /**
95    * \brief Receive SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel
96    * \param msg the Ideal Control Message to receive
97    */
98   virtual void ReceiveLteControlMessage (Ptr<LteControlMessage> msg) = 0;
99 
100   /**
101    * notify the reception of a RACH preamble on the PRACH
102    *
103    * \param prachId the ID of the preamble
104    */
105   virtual void ReceiveRachPreamble (uint32_t prachId) = 0;
106 
107   /**
108    * \brief Returns to MAC level the UL-CQI evaluated
109    * \param ulcqi the UL-CQI (see FF MAC API 4.3.29)
110    */
111   virtual void UlCqiReport (FfMacSchedSapProvider::SchedUlCqiInfoReqParameters ulcqi) = 0;
112 
113   /**
114    * Notify the HARQ on the UL tranmission status
115    *
116    * \param params
117    */
118   virtual void UlInfoListElementHarqFeeback (UlInfoListElement_s params) = 0;
119 
120 
121   /**
122    * Notify the HARQ on the DL tranmission status
123    *
124    * \param params
125    */
126   virtual void DlInfoListElementHarqFeeback (DlInfoListElement_s params) = 0;
127 
128 };
129 
130 
131 
132 } // namespace ns3
133 
134 
135 #endif // LTE_ENB_PHY_SAP_H
136