add support for selecting TX antenna

This commit is contained in:
Miroslav Hutár 2024-02-05 17:10:06 +01:00
parent 1975789026
commit 23c6aaee25
3 changed files with 28 additions and 1 deletions

View File

@ -45,6 +45,7 @@ struct Arguments
uint16_t channelWidth; uint16_t channelWidth;
uint8_t spatialStreams; uint8_t spatialStreams;
uint8_t txPower; uint8_t txPower;
uint32_t antenna;
uint16_t guardInterval; uint16_t guardInterval;
uint32_t injectDelay; uint32_t injectDelay;
uint32_t injectRepeat; uint32_t injectRepeat;

View File

@ -63,7 +63,7 @@ void PacketInjector::injectNoHT()
{ {
mcs = RATE_LEGACY_RATE_MSK & arguments.mcs; mcs = RATE_LEGACY_RATE_MSK & arguments.mcs;
} }
uint32_t rateNFlags = RATE_MCS_LEGACY_OFDM_MSK | mcs; uint32_t rateNFlags = RATE_MCS_LEGACY_OFDM_MSK | mcs | arguments.antenna;
this->send(rateNFlags); this->send(rateNFlags);
} }
@ -78,6 +78,7 @@ void PacketInjector::injectHT()
uint32_t rateNFlags = uint32_t rateNFlags =
RATE_MCS_HT_MSK | RATE_MCS_HT_MSK |
mcs | mcs |
arguments.antenna |
(arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) |
(arguments.spatialStreams == 2 ? SPATIAL_STREAM : 0) | (arguments.spatialStreams == 2 ? SPATIAL_STREAM : 0) |
(arguments.spatialStreams == 2 ? RATE_MCS_ANT_AB_MSK : 0) | (arguments.spatialStreams == 2 ? RATE_MCS_ANT_AB_MSK : 0) |
@ -96,6 +97,7 @@ void PacketInjector::injectVHT()
uint32_t rateNFlags = uint32_t rateNFlags =
RATE_MCS_VHT_MSK | RATE_MCS_VHT_MSK |
mcs | mcs |
arguments.antenna |
(arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) |
(arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) | (arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) |
(arguments.channelWidth == 160 ? RATE_MCS_CHAN_WIDTH_160 : 0) | (arguments.channelWidth == 160 ? RATE_MCS_CHAN_WIDTH_160 : 0) |
@ -137,6 +139,7 @@ void PacketInjector::injectHE()
RATE_MCS_HE_MSK | RATE_MCS_HE_MSK |
RATE_MCS_LDPC_MSK | RATE_MCS_LDPC_MSK |
mcs | mcs |
arguments.antenna |
ltf | ltf |
(arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) |
(arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) | (arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) |

View File

@ -55,6 +55,7 @@ static struct argp_option options[] = {
{"ltf", 'l', "LTF", 0, "HE LTF [2xLTF+0.8|2xLTF+1.6|4xLTF+3.2|4xLTF+0.8]"}, {"ltf", 'l', "LTF", 0, "HE LTF [2xLTF+0.8|2xLTF+1.6|4xLTF+3.2|4xLTF+0.8]"},
{"coding", 'c', "CODING", 0, "Coding scheme [LDPC|BCC]"}, {"coding", 'c', "CODING", 0, "Coding scheme [LDPC|BCC]"},
{"tx-power", 't', "TXPOWER", 0, "TX power of antenna in dBm [1-22]"}, {"tx-power", 't', "TXPOWER", 0, "TX power of antenna in dBm [1-22]"},
{"antenna", 'a', "ANTENNA", 0, "Transmitting antenna 1, 2 or 12 for both"},
{"mode", 'i', "MODE", 0, "Mode of program[measure|inject|measureinject]"}, {"mode", 'i', "MODE", 0, "Mode of program[measure|inject|measureinject]"},
{"inject-delay", 'd', "INJECTDELAY", 0, "Delay between frame injections is us"}, {"inject-delay", 'd', "INJECTDELAY", 0, "Delay between frame injections is us"},
{"inject-repeat", 'j', "INJECTREPEAT", 0, "How many times inject frame"}, {"inject-repeat", 'j', "INJECTREPEAT", 0, "How many times inject frame"},
@ -214,6 +215,27 @@ parse_opt(int key, char *arg, struct argp_state *state)
args->txPower = (uint8_t)tx; args->txPower = (uint8_t)tx;
break; break;
} }
case 'a':
{
int a = std::atoi(arg);
if (a == 1)
{
args->antenna = RATE_MCS_ANT_A_MSK;
}
else if (a == 2)
{
args->antenna = RATE_MCS_ANT_B_MSK;
}
else if (a == 12)
{
args->antenna = RATE_MCS_ANT_AB_MSK;
}
else {
argp_failure(state, 1, 0, "Bad transmitting antenna value. Possible values 1, 2 or 12 for both");
exit(ARGP_ERR_UNKNOWN);
}
break;
}
case 'f': case 'f':
{ {
int f = std::atoi(arg); int f = std::atoi(arg);
@ -270,6 +292,7 @@ int main(int argc, char *argv[])
.channelWidth = 20, .channelWidth = 20,
.spatialStreams = 1, .spatialStreams = 1,
.txPower = 10, .txPower = 10,
.antenna = RATE_MCS_ANT_A_MSK,
.guardInterval = 400, .guardInterval = 400,
.injectDelay = 100000, .injectDelay = 100000,
.injectRepeat = 0, .injectRepeat = 0,