Skip to content

Added dual antenna for WiFi (based on the ESP32-WROOM-DA module) #6226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Feb 3, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions libraries/WiFi/src/WiFiGeneric.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1192,6 +1192,61 @@ bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uin
return true;
}


/**
* Configure Dual antenna.
* @param gpio_ant1 Configure the GPIO number for the antenna 1 connected to the RF switch (default GPIO2 on ESP32-WROOM-DA)
* @param gpio_ant2 Configure the GPIO number for the antenna 2 connected to the RF switch (default GPIO25 on ESP32-WROOM-DA)
* @param default_rx_ant Set the default RX antenna for rece
* @return true on success
*/
bool WiFiGenericClass::setAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2, uint8_t default_rx_ant) {

wifi_ant_gpio_config_t wifi_ant_io;
wifi_ant_config_t ant_config;

if (ESP_OK != esp_wifi_get_ant_gpio(&wifi_ant_io)) {
log_e("Failed to get antenna configuration");
return false;
}

wifi_ant_io.gpio_cfg[0].gpio_num = gpio_ant1;
wifi_ant_io.gpio_cfg[0].gpio_select = 1;
wifi_ant_io.gpio_cfg[1].gpio_num = gpio_ant2;
wifi_ant_io.gpio_cfg[1].gpio_select = 1;

if (ESP_OK != esp_wifi_set_ant_gpio(&wifi_ant_io)) {
log_e("Failed to set antenna GPIO configuration");
return false;
}

// Set antenna configuration
ant_config.rx_ant_mode = WIFI_ANT_MODE_AUTO;
ant_config.tx_ant_mode = WIFI_ANT_MODE_AUTO;
ant_config.enabled_ant0 = 0;
ant_config.enabled_ant1 = 1;

switch (default_rx_ant)
{
case 0:
ant_config.rx_ant_default = WIFI_ANT_ANT0;
break;
case 1:
ant_config.rx_ant_default = WIFI_ANT_ANT1;
break;
default:
log_e("Invalid default antenna");
break;
}

if (ESP_OK != esp_wifi_set_ant(&ant_config)) {
log_e("Failed to set antenna configuration");
return false;
}

return true;
}

// -----------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------ Generic Network function ---------------------------------------------
// -----------------------------------------------------------------------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions libraries/WiFi/src/WiFiGeneric.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,8 @@ class WiFiGenericClass

bool initiateFTM(uint8_t frm_count=16, uint16_t burst_period=2, uint8_t channel=1, const uint8_t * mac=NULL);

bool setAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2, uint8_t default_rx_ant);

static const char * getHostname();
static bool setHostname(const char * hostname);
static bool hostname(const String& aHostname) { return setHostname(aHostname.c_str()); }
Expand Down