src/lte/model/lte-harq-phy.cc
author Nicola Baldo <nbaldo@cttc.es>
Mon, 04 Feb 2013 18:47:25 +0100
changeset 9653 382d27da8905
parent 9361 4b1130527bbf
child 10410 4d4eb8097fa3
permissions -rw-r--r--
merged lena-dev with ns-3-dev
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     2
/*
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     3
 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     4
 *
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     7
 * published by the Free Software Foundation;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     8
 *
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    12
 * GNU General Public License for more details.
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    13
 *
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    17
 *
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    18
 * Author: Marco Miozzo  <marco.miozzo@cttc.es>
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    19
 */
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    20
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    21
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    22
#include <ns3/lte-harq-phy.h>
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    23
#include <ns3/log.h>
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    24
#include <ns3/assert.h>
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    25
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    26
NS_LOG_COMPONENT_DEFINE ("LteHarqPhy");
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    27
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    28
namespace ns3 {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    29
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    30
//NS_OBJECT_ENSURE_REGISTERED (LteHarqPhy);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    31
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    32
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    33
LteHarqPhy::LteHarqPhy ()
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    34
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    35
  // Create DL Decodification HARQ buffers
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    36
  std::vector <HarqProcessInfoList_t> dlHarqLayer0;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    37
  dlHarqLayer0.resize (8);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    38
  std::vector <HarqProcessInfoList_t> dlHarqLayer1;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    39
  dlHarqLayer1.resize (8);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    40
  m_miDlHarqProcessesInfoMap.push_back (dlHarqLayer0);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    41
  m_miDlHarqProcessesInfoMap.push_back (dlHarqLayer1);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    42
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    43
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    44
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    45
LteHarqPhy::~LteHarqPhy ()
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    46
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    47
  m_miDlHarqProcessesInfoMap.clear ();
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    48
  m_miUlHarqProcessesInfoMap.clear ();
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    49
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    50
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    51
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    52
void
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    53
LteHarqPhy::SubframeIndication (uint32_t frameNo, uint32_t subframeNo)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    54
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    55
  NS_LOG_FUNCTION (this);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    56
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    57
  // left shift UL HARQ buffers
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    58
  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >:: iterator it;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    59
  for (it = m_miUlHarqProcessesInfoMap.begin (); it != m_miUlHarqProcessesInfoMap.end (); it++)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    60
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    61
      (*it).second.erase ((*it).second.begin ());
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    62
      HarqProcessInfoList_t h;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    63
      (*it).second.push_back (h);      
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    64
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    65
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    66
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    67
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    68
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    69
double
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    70
LteHarqPhy::GetAccumulatedMiDl (uint8_t harqProcId, uint8_t layer)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    71
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    72
  NS_LOG_FUNCTION (this << (uint32_t)harqProcId << (uint16_t)layer);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    73
  HarqProcessInfoList_t list = m_miDlHarqProcessesInfoMap.at (layer).at (harqProcId);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    74
  double mi = 0.0;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    75
  for (uint8_t i = 0; i < list.size (); i++)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    76
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    77
      mi += list.at (i).m_mi;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    78
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    79
  return (mi);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    80
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    81
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    82
HarqProcessInfoList_t
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    83
LteHarqPhy::GetHarqProcessInfoDl (uint8_t harqProcId, uint8_t layer)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    84
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    85
  NS_LOG_FUNCTION (this << (uint32_t)harqProcId << (uint16_t)layer);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    86
  return (m_miDlHarqProcessesInfoMap.at (layer).at (harqProcId));   
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    87
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    88
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    89
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    90
double
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    91
LteHarqPhy::GetAccumulatedMiUl (uint16_t rnti)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    92
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    93
  NS_LOG_FUNCTION (this << rnti);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    94
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    95
  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >::iterator it;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    96
  it = m_miUlHarqProcessesInfoMap.find (rnti);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    97
  NS_ASSERT_MSG (it!=m_miUlHarqProcessesInfoMap.end (), " Does not find MI for RNTI");
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    98
  HarqProcessInfoList_t list = (*it).second.at (0);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
    99
  double mi = 0.0;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   100
  for (uint8_t i = 0; i < list.size (); i++)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   101
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   102
      mi += list.at (i).m_mi;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   103
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   104
  return (mi);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   105
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   106
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   107
HarqProcessInfoList_t
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   108
LteHarqPhy::GetHarqProcessInfoUl (uint16_t rnti, uint8_t harqProcId)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   109
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   110
  NS_LOG_FUNCTION (this << rnti << (uint16_t)harqProcId);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   111
  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >::iterator it;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   112
  it = m_miUlHarqProcessesInfoMap.find (rnti);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   113
  if (it==m_miUlHarqProcessesInfoMap.end ())
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   114
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   115
      // new entry
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   116
      std::vector <HarqProcessInfoList_t> harqList;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   117
      harqList.resize (8);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   118
      m_miUlHarqProcessesInfoMap.insert (std::pair <uint16_t, std::vector <HarqProcessInfoList_t> > (rnti, harqList));
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   119
      return (harqList.at (harqProcId));
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   120
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   121
  else
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   122
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   123
      return ((*it).second.at (harqProcId));
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   124
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   125
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   126
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   127
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   128
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   129
void
9361
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   130
LteHarqPhy::UpdateDlHarqProcessStatus (uint8_t id, uint8_t layer, double mi, uint16_t infoBytes, uint16_t codeBytes)
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   131
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   132
  NS_LOG_FUNCTION (this << (uint16_t) id << mi);
9355
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   133
  if (m_miDlHarqProcessesInfoMap.at (layer).at (id).size () == 3)  // MAX HARQ RETX
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   134
    {
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   135
      // HARQ should be disabled -> discard info
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   136
      return;
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   137
    }
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   138
  HarqProcessInfoElement_t el;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   139
  el.m_mi = mi;
9361
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   140
  el.m_infoBits = infoBytes * 8;
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   141
  el.m_codeBits = codeBytes * 8;
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   142
  m_miDlHarqProcessesInfoMap.at (layer).at (id).push_back (el);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   143
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   144
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   145
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   146
void
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   147
LteHarqPhy::ResetDlHarqProcessStatus (uint8_t id)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   148
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   149
  NS_LOG_FUNCTION (this << (uint16_t) id);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   150
  for (uint8_t i = 0; i < m_miDlHarqProcessesInfoMap.size (); i++)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   151
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   152
      m_miDlHarqProcessesInfoMap.at (i).at (id).clear ();
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   153
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   154
  
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   155
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   156
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   157
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   158
void
9361
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   159
LteHarqPhy::UpdateUlHarqProcessStatus (uint16_t rnti, double mi, uint16_t infoBytes, uint16_t codeBytes)
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   160
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   161
  NS_LOG_FUNCTION (this << rnti << mi);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   162
  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >::iterator it;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   163
  it = m_miUlHarqProcessesInfoMap.find (rnti);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   164
  if (it==m_miUlHarqProcessesInfoMap.end ())
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   165
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   166
      // new entry
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   167
      std::vector <HarqProcessInfoList_t> harqList;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   168
      harqList.resize (8);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   169
      HarqProcessInfoElement_t el;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   170
      el.m_mi = mi;
9361
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   171
      el.m_infoBits = infoBytes * 8;
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   172
      el.m_codeBits = codeBytes * 8;
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   173
      harqList.at (7).push_back (el);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   174
      m_miUlHarqProcessesInfoMap.insert (std::pair <uint16_t, std::vector <HarqProcessInfoList_t> > (rnti, harqList));
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   175
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   176
  else
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   177
    {
9355
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   178
      if ((*it).second.at (7).size () == 3) // MAX HARQ RETX
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   179
        {
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   180
          // HARQ should be disabled -> discard info
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   181
          return;
1da2c1fd7dbb Limit HARQ buffers in LteHarqPhy (in order to limit buffers size in no HARQ mode)
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9351
diff changeset
   182
        }
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   183
      HarqProcessInfoElement_t el;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   184
      el.m_mi = mi;
9361
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   185
      el.m_infoBits = infoBytes * 8;
4b1130527bbf Bug-fix LteHarqPhy::UpdateHarqProcessInfo sizes in bits instead of bytes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9355
diff changeset
   186
      el.m_codeBits = codeBytes * 8;
9351
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   187
      (*it).second.at (7).push_back (el);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   188
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   189
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   190
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   191
void
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   192
LteHarqPhy::ResetUlHarqProcessStatus (uint16_t rnti, uint8_t id)
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   193
{
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   194
  NS_LOG_FUNCTION (this << rnti << (uint16_t)id);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   195
  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >::iterator it;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   196
  it = m_miUlHarqProcessesInfoMap.find (rnti);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   197
  if (it==m_miUlHarqProcessesInfoMap.end ())
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   198
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   199
      // new entry
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   200
      std::vector <HarqProcessInfoList_t> harqList;
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   201
      harqList.resize (8);
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   202
      m_miUlHarqProcessesInfoMap.insert (std::pair <uint16_t, std::vector <HarqProcessInfoList_t> > (rnti, harqList));
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   203
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   204
  else
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   205
    {
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   206
      (*it).second.at (id).clear ();
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   207
    }
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   208
}
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   209
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   210
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   211
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   212
6e074e67a1ad HARQ first draft version: RR works, PF todo, LteMiErrorModel on-going
mmiozzo
parents:
diff changeset
   213
} // end namespace