Skip to content

Commit

Permalink
Merge pull request #2651 from particle-iot/fix/sc-117838/wifi_select_…
Browse files Browse the repository at this point in the history
…antenna

[rtl872x] Implement WiFi.selectAntenna
  • Loading branch information
scott-brust committed Apr 20, 2023
2 parents 6faf893 + 63781b1 commit 2700304
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 10 deletions.
2 changes: 1 addition & 1 deletion hal/inc/radio_hal.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@
typedef enum radio_antenna_type {
RADIO_ANT_DEFAULT = 0, ///< Default antenna (platform-specific).
RADIO_ANT_INTERNAL = 1, ///< Internal antenna.
RADIO_ANT_EXTERNAL = 2 ///< External antenna.
RADIO_ANT_EXTERNAL = 2, ///< External antenna.
} radio_antenna_type;
27 changes: 24 additions & 3 deletions hal/network/ncp/wifi/wlan_hal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/

#include "wlan_hal.h"
#include "radio_common.h"

#include "network/ncp/wifi/ncp.h"
#include "network/ncp/wifi/wifi_network_manager.h"
Expand Down Expand Up @@ -289,14 +290,34 @@ void HAL_WLAN_notify_simple_config_done() {
}

int wlan_select_antenna(WLanSelectAntenna_TypeDef antenna) {
if (antenna != ANT_AUTO) {
return SYSTEM_ERROR_NOT_SUPPORTED;
radio_antenna_type new_antenna;

if (antenna == ANT_AUTO) {
new_antenna = RADIO_ANT_DEFAULT;
} else if (antenna == ANT_INTERNAL) {
new_antenna = RADIO_ANT_INTERNAL;
} else if (antenna == ANT_EXTERNAL) {
new_antenna = RADIO_ANT_EXTERNAL;
} else {
return SYSTEM_ERROR_NOT_SUPPORTED;
}

CHECK(selectRadioAntenna(new_antenna));
return 0;
}

WLanSelectAntenna_TypeDef wlan_get_antenna(void* reserved) {
return ANT_AUTO;
radio_antenna_type antenna;

if (getRadioAntenna(&antenna) || antenna == RADIO_ANT_DEFAULT) {
return ANT_AUTO;
} else if (antenna == RADIO_ANT_INTERNAL) {
return ANT_INTERNAL;
} else if (antenna == RADIO_ANT_EXTERNAL) {
return ANT_EXTERNAL;
} else {
return ANT_AUTO;
}
}

void wlan_connect_cancel(bool called_from_isr) {
Expand Down
16 changes: 14 additions & 2 deletions hal/src/nRF52840/radio_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ int selectAntenna(radio_antenna_type antenna) {

} // namespace

int initRadioAntenna() {
radio_antenna_type readRadioAntenna(){
auto antenna = RADIO_ANT_DEFAULT;
uint8_t dctAntenna = 0xff;
if (dct_read_app_data_copy(DCT_RADIO_ANTENNA_OFFSET, &dctAntenna, DCT_RADIO_ANTENNA_SIZE) < 0) {
Expand All @@ -119,7 +119,11 @@ int initRadioAntenna() {
} else if (dctAntenna == RADIO_ANT_INTERNAL || dctAntenna == RADIO_ANT_EXTERNAL) {
antenna = (radio_antenna_type)dctAntenna;
}
CHECK(selectAntenna(antenna));
return antenna;
}

int initRadioAntenna() {
CHECK(selectAntenna(readRadioAntenna()));
return SYSTEM_ERROR_NONE;
}

Expand Down Expand Up @@ -161,4 +165,12 @@ int selectRadioAntenna(radio_antenna_type antenna) {
return SYSTEM_ERROR_NONE;
}

int getRadioAntenna(radio_antenna_type* antenna) {
if (!antenna) {
return SYSTEM_ERROR_INVALID_ARGUMENT;
}
*antenna = readRadioAntenna();
return 0;
}

} // namespace particle
8 changes: 8 additions & 0 deletions hal/src/nRF52840/radio_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,12 @@ int enableRadioAntenna();
*/
int selectRadioAntenna(radio_antenna_type antenna);

/**
* Return the currently configured antenna type from DCT.
*
* @param antenna Currently configured Antenna type.
* @return 0 on success or a negative result code in case of an error.
*/
int getRadioAntenna(radio_antenna_type* antenna);

} // particle
20 changes: 16 additions & 4 deletions hal/src/rtl872x/radio_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,14 @@ int selectAntenna(radio_antenna_type antenna) {
#if HAL_PLATFORM_RADIO_ANTENNA_INTERNAL
case RADIO_ANT_INTERNAL: {
CHECK(selectInternalAntenna());
LOG(TRACE, "Using internal BLE antenna");
LOG(TRACE, "Using internal antenna");
break;
}
#endif
#if HAL_PLATFORM_RADIO_ANTENNA_EXTERNAL
case RADIO_ANT_EXTERNAL: {
CHECK(selectExtenalAntenna());
LOG(TRACE, "Using external BLE antenna");
LOG(TRACE, "Using external antenna");
break;
}
#endif
Expand All @@ -86,7 +86,7 @@ int selectAntenna(radio_antenna_type antenna) {

} // namespace

int initRadioAntenna() {
radio_antenna_type readRadioAntenna(){
auto antenna = RADIO_ANT_DEFAULT;
uint8_t dctAntenna = 0xff;
if (dct_read_app_data_copy(DCT_RADIO_ANTENNA_OFFSET, &dctAntenna, DCT_RADIO_ANTENNA_SIZE) < 0) {
Expand All @@ -95,7 +95,11 @@ int initRadioAntenna() {
} else if (dctAntenna == RADIO_ANT_INTERNAL || dctAntenna == RADIO_ANT_EXTERNAL) {
antenna = (radio_antenna_type)dctAntenna;
}
CHECK(selectAntenna(antenna));
return antenna;
}

int initRadioAntenna() {
CHECK(selectAntenna(readRadioAntenna()));
return SYSTEM_ERROR_NONE;
}

Expand All @@ -122,4 +126,12 @@ int selectRadioAntenna(radio_antenna_type antenna) {
return SYSTEM_ERROR_NONE;
}

int getRadioAntenna(radio_antenna_type* antenna) {
if (!antenna) {
return SYSTEM_ERROR_INVALID_ARGUMENT;
}
*antenna = readRadioAntenna();
return 0;
}

} // namespace particle
8 changes: 8 additions & 0 deletions hal/src/rtl872x/radio_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,12 @@ int enableRadioAntenna();
*/
int selectRadioAntenna(radio_antenna_type antenna);

/**
* Return the currently configured antenna type from DCT.
*
* @param antenna Currently configured Antenna type.
* @return 0 on success or a negative result code in case of an error.
*/
int getRadioAntenna(radio_antenna_type* antenna);

} // particle

0 comments on commit 2700304

Please sign in to comment.