From 23c6aaee25aa516cda5b12f4b2303b6dee6a4469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Hut=C3=A1r?= Date: Mon, 5 Feb 2024 17:10:06 +0100 Subject: [PATCH] add support for selecting TX antenna --- include/main.h | 1 + src/PacketInjector.cpp | 5 ++++- src/main.cpp | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/include/main.h b/include/main.h index 4b7732a..21f9c06 100644 --- a/include/main.h +++ b/include/main.h @@ -45,6 +45,7 @@ struct Arguments uint16_t channelWidth; uint8_t spatialStreams; uint8_t txPower; + uint32_t antenna; uint16_t guardInterval; uint32_t injectDelay; uint32_t injectRepeat; diff --git a/src/PacketInjector.cpp b/src/PacketInjector.cpp index 05855b9..7033dfc 100644 --- a/src/PacketInjector.cpp +++ b/src/PacketInjector.cpp @@ -63,7 +63,7 @@ void PacketInjector::injectNoHT() { 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); } @@ -78,6 +78,7 @@ void PacketInjector::injectHT() uint32_t rateNFlags = RATE_MCS_HT_MSK | mcs | + arguments.antenna | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.spatialStreams == 2 ? SPATIAL_STREAM : 0) | (arguments.spatialStreams == 2 ? RATE_MCS_ANT_AB_MSK : 0) | @@ -96,6 +97,7 @@ void PacketInjector::injectVHT() uint32_t rateNFlags = RATE_MCS_VHT_MSK | mcs | + arguments.antenna | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) | (arguments.channelWidth == 160 ? RATE_MCS_CHAN_WIDTH_160 : 0) | @@ -137,6 +139,7 @@ void PacketInjector::injectHE() RATE_MCS_HE_MSK | RATE_MCS_LDPC_MSK | mcs | + arguments.antenna | ltf | (arguments.channelWidth == 40 ? RATE_MCS_CHAN_WIDTH_40 : 0) | (arguments.channelWidth == 80 ? RATE_MCS_CHAN_WIDTH_80 : 0) | diff --git a/src/main.cpp b/src/main.cpp index 521d458..a131f5b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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]"}, {"coding", 'c', "CODING", 0, "Coding scheme [LDPC|BCC]"}, {"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]"}, {"inject-delay", 'd', "INJECTDELAY", 0, "Delay between frame injections is us"}, {"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; 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': { int f = std::atoi(arg); @@ -270,6 +292,7 @@ int main(int argc, char *argv[]) .channelWidth = 20, .spatialStreams = 1, .txPower = 10, + .antenna = RATE_MCS_ANT_A_MSK, .guardInterval = 400, .injectDelay = 100000, .injectRepeat = 0,