From 2de047cbbcf0d8d0f204274e75b432e60015c879 Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Thu, 8 Dec 2022 14:35:33 +0100 Subject: [PATCH] nimble/fem: Add runtime default antenna selection to SKY66112 This allows to configure default antenna at runtime. --- .../fem/sky66112/include/sky66112/sky66112.h | 5 +++++ nimble/drivers/fem/sky66112/src/sky66112.c | 22 ++++++++++++++++--- nimble/drivers/fem/sky66112/syscfg.yml | 13 ++++++----- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/nimble/drivers/fem/sky66112/include/sky66112/sky66112.h b/nimble/drivers/fem/sky66112/include/sky66112/sky66112.h index 6bdf59f74..4b995b616 100644 --- a/nimble/drivers/fem/sky66112/include/sky66112/sky66112.h +++ b/nimble/drivers/fem/sky66112/include/sky66112/sky66112.h @@ -30,6 +30,11 @@ extern "C" { void sky66112_tx_hp_mode(uint8_t enabled); void sky66112_rx_bypass(uint8_t enabled); void sky66112_tx_bypass(uint8_t enabled); + +#if MYNEWT_VAL_CHOICE(SKY66112_ANTENNA_PORT, runtime) +uint8_t sky66112_default_antenna_get(void); +#endif + #ifdef __cplusplus } #endif diff --git a/nimble/drivers/fem/sky66112/src/sky66112.c b/nimble/drivers/fem/sky66112/src/sky66112.c index c9760171e..615055c75 100644 --- a/nimble/drivers/fem/sky66112/src/sky66112.c +++ b/nimble/drivers/fem/sky66112/src/sky66112.c @@ -31,6 +31,18 @@ static struct { .tx_bypass = MYNEWT_VAL(SKY66112_TX_BYPASS), }; +#if !MYNEWT_VAL_CHOICE(SKY66112_ANTENNA_PORT, runtime) +static uint8_t +sky66112_default_antenna_get(void) +{ + if (MYNEWT_VAL_CHOICE(SKY66112_ANTENNA_PORT, ANT2)) { + return 2; + } else { + return 1; + } +} +#endif + static void sky66112_bypass(uint8_t enabled) { @@ -46,7 +58,7 @@ ble_fem_pa_init(void) sky66112_tx_hp_mode(MYNEWT_VAL(SKY66112_TX_HP_MODE)); sky66112_tx_bypass(0); #if MYNEWT_VAL(BLE_FEM_ANTENNA) - ble_fem_antenna(MYNEWT_VAL(SKY66112_ANTENNA_PORT)); + ble_fem_antenna(0); #endif } @@ -71,7 +83,7 @@ ble_fem_lna_init(void) { sky66112_rx_bypass(0); #if MYNEWT_VAL(BLE_FEM_ANTENNA) - ble_fem_antenna(MYNEWT_VAL(SKY66112_ANTENNA_PORT)); + ble_fem_antenna(0); #endif } @@ -105,10 +117,14 @@ int ble_fem_antenna(uint8_t port) { int pin = MYNEWT_VAL(SKY66112_PIN_SEL); + uint8_t ant; if (pin >= 0) { switch (port) { case 0: + ant = sky66112_default_antenna_get(); + assert(ant == 1 || ant == 2); + return ble_fem_antenna(ant); case 1: hal_gpio_write(pin, 0); break; @@ -171,7 +187,7 @@ sky66112_init(void) /* configure default antenna */ pin = MYNEWT_VAL(SKY66112_PIN_SEL); if (pin >= 0) { - switch (MYNEWT_VAL(SKY66112_ANTENNA_PORT)) { + switch (sky66112_default_antenna_get()) { case 1: hal_gpio_init_out(pin, 0); break; diff --git a/nimble/drivers/fem/sky66112/syscfg.yml b/nimble/drivers/fem/sky66112/syscfg.yml index d946831f0..120fd4e51 100644 --- a/nimble/drivers/fem/sky66112/syscfg.yml +++ b/nimble/drivers/fem/sky66112/syscfg.yml @@ -58,11 +58,14 @@ syscfg.defs: value: 0 SKY66112_ANTENNA_PORT: description: > - Selects which antenna port should be enabled: - 1 for ANT1 port enabled - 2 for ANT2 port enabled - range: 1, 2 - value: 1 + Selects which antenna port should be enabled. If 'runtime' is + selected sky66112_default_antenna_get() (see sky66112/sky66112.h) + shall be implemeneted by application. + choices: + - ANT1 + - ANT2 + - runtime + value: ANT1 syscfg.vals.!BLE_FEM_PA: # Enable TX bypass by default if PA is disabled