wifi: Convert WifiCodeRate to enum

This commit is contained in:
Eduardo Almeida
2023-04-17 19:22:58 +01:00
parent 31b67e8cdd
commit 1d59888a5b
2 changed files with 62 additions and 16 deletions

View File

@@ -54,6 +54,7 @@ Changes from ns-3.38 to ns-3-dev
* (wifi) The QosBlockedDestinations class has been removed and its functionality is now provided via a new framework for blocking/unblocking packets that is based on the queue scheduler.
* (internet) The function signature of `Ipv4RoutingProtocol::RouteInput` and `Ipv6RoutingProtocol::RouteInput` have changed. The `UnicastForwardCallback` (ucb), `MulticastForwardCallback` (mcb), `LocalDeliverCallback` (lcb) and `ErrorCallback` (ecb) should now be passed as const references.
* (olsr) The defines `OLSR_WILL_*` have been replaced by enum `Willingness`.
* (wifi) The `WifiCodeRate` typedef was converted to an enum.
### Changes to build system

View File

@@ -48,28 +48,73 @@ class WifiMode;
class Time;
/**
* \ingroup wifi
* These constants define the various convolutional coding rates
* used for the OFDM transmission modes in the IEEE 802.11
* standard. DSSS (for example) rates which do not have an explicit
* coding stage in their generation should have this parameter set to
* WIFI_CODE_RATE_UNDEFINED.
* \note This typedef and constants could be converted to an enum or scoped
* enum if pybindgen is upgraded to support Callback<WifiCodeRate>
*/
typedef uint16_t WifiCodeRate;
const uint16_t WIFI_CODE_RATE_UNDEFINED = 0; //!< undefined coding rate
const uint16_t WIFI_CODE_RATE_1_2 = 1; //!< 1/2 coding rate
const uint16_t WIFI_CODE_RATE_2_3 = 2; //!< 2/3 coding rate
const uint16_t WIFI_CODE_RATE_3_4 = 3; //!< 3/4 coding rate
const uint16_t WIFI_CODE_RATE_5_6 = 4; //!< 5/6 coding rate
const uint16_t WIFI_CODE_RATE_5_8 = 5; //!< 5/8 coding rate
const uint16_t WIFI_CODE_RATE_13_16 = 6; //!< 13/16 coding rate
const uint16_t WIFI_CODE_RATE_1_4 = 7; //!< 1/4 coding rate
const uint16_t WIFI_CODE_RATE_13_28 = 8; //!< 13/28 coding rate
const uint16_t WIFI_CODE_RATE_13_21 = 9; //!< 13/21 coding rate
const uint16_t WIFI_CODE_RATE_52_63 = 10; //!< 52/63 coding rate
const uint16_t WIFI_CODE_RATE_13_14 = 11; //!< 13/14 coding rate
const uint16_t WIFI_CODE_RATE_7_8 = 12; //!< 7/8 coding rate
enum WifiCodeRate : uint16_t
{
WIFI_CODE_RATE_UNDEFINED, //!< undefined coding rate
WIFI_CODE_RATE_1_2, //!< 1/2 coding rate
WIFI_CODE_RATE_2_3, //!< 2/3 coding rate
WIFI_CODE_RATE_3_4, //!< 3/4 coding rate
WIFI_CODE_RATE_5_6, //!< 5/6 coding rate
WIFI_CODE_RATE_5_8, //!< 5/8 coding rate
WIFI_CODE_RATE_13_16, //!< 13/16 coding rate
WIFI_CODE_RATE_1_4, //!< 1/4 coding rate
WIFI_CODE_RATE_13_28, //!< 13/28 coding rate
WIFI_CODE_RATE_13_21, //!< 13/21 coding rate
WIFI_CODE_RATE_52_63, //!< 52/63 coding rate
WIFI_CODE_RATE_13_14, //!< 13/14 coding rate
WIFI_CODE_RATE_7_8, //!< 7/8 coding rate
};
/**
* \brief Stream insertion operator.
*
* \param os the stream
* \param codeRate the code rate
* \returns a reference to the stream
*/
inline std::ostream&
operator<<(std::ostream& os, const WifiCodeRate& codeRate)
{
switch (codeRate)
{
case WIFI_CODE_RATE_UNDEFINED:
return (os << "Code rate undefined");
case WIFI_CODE_RATE_1_2:
return (os << "Code rate 1/2");
case WIFI_CODE_RATE_2_3:
return (os << "Code rate 2/3");
case WIFI_CODE_RATE_3_4:
return (os << "Code rate 3/4");
case WIFI_CODE_RATE_5_6:
return (os << "Code rate 5/6");
case WIFI_CODE_RATE_5_8:
return (os << "Code rate 5/8");
case WIFI_CODE_RATE_13_16:
return (os << "Code rate 13/16");
case WIFI_CODE_RATE_1_4:
return (os << "Code rate 1/4");
case WIFI_CODE_RATE_13_28:
return (os << "Code rate 13/28");
case WIFI_CODE_RATE_13_21:
return (os << "Code rate 13/21");
case WIFI_CODE_RATE_52_63:
return (os << "Code rate 52/63");
case WIFI_CODE_RATE_13_14:
return (os << "Code rate 13/14");
case WIFI_CODE_RATE_7_8:
return (os << "Code rate 7/8");
default:
NS_FATAL_ERROR("Unknown code rate");
return (os << "Unknown");
}
}
/**
* \ingroup wifi