Skip to content

Commit 6cdeddd

Browse files
Szynkaarlubos
authored andcommitted
esb: clean up in code
Rename some functions. Minimal code changes not affecting logic. Format parts of code to ease reading. Signed-off-by: Szymon Antkowiak <[email protected]>
1 parent 641a246 commit 6cdeddd

File tree

1 file changed

+129
-133
lines changed

1 file changed

+129
-133
lines changed

subsys/esb/esb.c

Lines changed: 129 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -237,14 +237,14 @@ struct esb_radio_pdu {
237237
* guide for more information.
238238
*/
239239
struct esb_address {
240-
uint8_t base_addr_p0[4]; /* Base address for pipe 0, in big endian. */
240+
uint8_t base_addr_p0[4]; /* Base address for pipe 0, in big endian. */
241241
uint8_t base_addr_p1[4]; /* Base address for pipe 1-7, in big endian. */
242-
uint8_t pipe_prefixes[8]; /* Address prefix for pipe 0 to 7. */
243-
uint8_t num_pipes; /* Number of pipes available. */
244-
uint8_t addr_length; /* Length of the address plus the prefix. */
245-
uint8_t rx_pipes_enabled; /* Bitfield for enabled pipes. */
246-
uint8_t rf_channel; /* Channel to use (between 0 and 100). */
247-
atomic_t rf_channel_flags; /* Flags for setting the channel. */
242+
uint8_t pipe_prefixes[8]; /* Address prefix for pipe 0 to 7. */
243+
uint8_t num_pipes; /* Number of pipes available. */
244+
uint8_t addr_length; /* Length of the address plus the prefix. */
245+
uint8_t rx_pipes_enabled; /* Bitfield for enabled pipes. */
246+
uint8_t rf_channel; /* Channel to use (between 0 and 100). */
247+
atomic_t rf_channel_flags; /* Flags for setting the channel. */
248248
};
249249

250250
static nrfx_timer_t esb_timer = ESB_NRFX_TIMER_INSTANCE;
@@ -355,8 +355,8 @@ static void on_radio_disabled_tx_noack(void);
355355
static void on_radio_disabled_tx(void);
356356
static void on_radio_disabled_tx_wait_for_ack(void);
357357
static void on_radio_disabled_rx(void);
358-
static void on_radio_disabled_rx_ack(void);
359-
static void on_radio_end_tx_noack(void);
358+
static void on_radio_disabled_rx_send_ack(void);
359+
static void on_timer_compare1_tx_noack(void);
360360

361361
/* Function to do bytewise bit-swap on an unsigned 32-bit value */
362362
static uint32_t bytewise_bit_swap(const uint8_t *input)
@@ -1139,7 +1139,7 @@ static bool rx_fifo_push_rfbuf(uint8_t pipe, uint8_t pid)
11391139

11401140
static void esb_timer_handler(nrf_timer_event_t event_type, void *context)
11411141
{
1142-
if (nrf_timer_int_enable_check(esb_timer.p_reg, NRF_TIMER_INT_COMPARE1_MASK)) {
1142+
if (event_type == NRF_TIMER_EVENT_COMPARE1) {
11431143
if (on_timer_compare1 != NULL) {
11441144
on_timer_compare1();
11451145
}
@@ -1236,9 +1236,7 @@ static void start_tx_transaction(void)
12361236

12371237
memcpy(pdu->data, current_payload->data, current_payload->length);
12381238

1239-
/* Handling ack if noack is set to false or if
1240-
* selective auto ack is turned off
1241-
*/
1239+
/* Handling ack if noack is set to false or if selective auto ack is turned off */
12421240
if (ack) {
12431241
if (fast_switching) {
12441242
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common);
@@ -1269,10 +1267,10 @@ static void start_tx_transaction(void)
12691267
/* Configure PPI to start the timer when transmission ends */
12701268
esb_ppi_for_wait_for_rx_set();
12711269

1272-
on_timer_compare1 = on_radio_end_tx_noack;
1270+
on_timer_compare1 = on_timer_compare1_tx_noack;
12731271
on_radio_disabled = NULL;
12741272
is_tx_idle = ((esb_state == ESB_STATE_PTX_TXIDLE) ||
1275-
(esb_state == ESB_STATE_PTX_TX));
1273+
(esb_state == ESB_STATE_PTX_TX));
12761274
esb_state = ESB_STATE_PTX_TX;
12771275
} else {
12781276
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common |
@@ -1327,10 +1325,10 @@ static void set_evt_interrupt(void)
13271325
}
13281326
}
13291327

1330-
static void on_radio_end_tx_noack(void)
1328+
static void on_timer_compare1_tx_noack(void)
13311329
{
13321330
/* Timer compare is cleared by PPI - we still need to disable Interrupt flag */
1333-
nrf_timer_int_disable(esb_timer.p_reg, nrf_timer_compare_int_get(NRF_TIMER_CC_CHANNEL1));
1331+
nrf_timer_int_disable(esb_timer.p_reg, NRF_TIMER_INT_COMPARE1_MASK);
13341332
esb_ppi_for_wait_for_rx_clear();
13351333

13361334
interrupt_flags |= INT_TX_SUCCESS_MSK;
@@ -1463,89 +1461,129 @@ static void on_radio_disabled_tx_wait_for_ack(void)
14631461
set_evt_interrupt();
14641462
start_tx_transaction();
14651463
}
1466-
} else {
1467-
if (retransmits_remaining-- == 0) {
1464+
} else if (retransmits_remaining-- == 0) {
1465+
/* All retransmits are expended, and the TX operation is suspended */
14681466
#if NRF_TIMER_HAS_SHUTDOWN
1469-
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_SHUTDOWN);
1467+
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_SHUTDOWN);
14701468
#else
1471-
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_STOP);
1472-
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_CLEAR);
1469+
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_STOP);
1470+
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_CLEAR);
14731471
#endif
14741472

1475-
/* All retransmits are expended, and the TX operation is
1476-
* suspended
1477-
*/
1478-
last_tx_attempts = esb_cfg.retransmit_count + 1;
1479-
interrupt_flags |= INT_TX_FAILED_MSK;
1473+
last_tx_attempts = esb_cfg.retransmit_count + 1;
1474+
interrupt_flags |= INT_TX_FAILED_MSK;
14801475

1481-
esb_state = ESB_STATE_IDLE;
1482-
errata_216_off();
1483-
set_evt_interrupt();
1484-
} else {
1485-
bool radio_started = true;
1476+
esb_state = ESB_STATE_IDLE;
1477+
errata_216_off();
1478+
set_evt_interrupt();
1479+
} else {
1480+
/* There are still more retransmits left, TX mode should
1481+
* be entered again as soon as the system timer reaches
1482+
* CC[1].
1483+
*/
14861484

1487-
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_READY);
1485+
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_READY);
14881486

1489-
/* There are still more retransmits left, TX mode should
1490-
* be entered again as soon as the system timer reaches
1491-
* CC[1].
1492-
*/
1493-
if (fast_switching) {
1494-
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common);
1495-
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
1496-
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
1497-
} else {
1498-
nrf_radio_shorts_set(NRF_RADIO,
1499-
(radio_shorts_common | NRF_RADIO_SHORT_DISABLED_RXEN_MASK));
1500-
}
1501-
update_rf_payload_format(current_payload->length);
1487+
if (fast_switching) {
1488+
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common);
1489+
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
1490+
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
1491+
} else {
1492+
nrf_radio_shorts_set(NRF_RADIO,
1493+
(radio_shorts_common | NRF_RADIO_SHORT_DISABLED_RXEN_MASK));
1494+
}
1495+
update_rf_payload_format(current_payload->length);
15021496

1503-
nrf_radio_packetptr_set(NRF_RADIO, tx_payload_buffer);
1497+
nrf_radio_packetptr_set(NRF_RADIO, tx_payload_buffer);
15041498

1505-
on_radio_disabled = on_radio_disabled_tx;
1506-
esb_state = ESB_STATE_PTX_TX_ACK;
1499+
on_radio_disabled = on_radio_disabled_tx;
1500+
esb_state = ESB_STATE_PTX_TX_ACK;
15071501

1508-
update_radio_tx_power();
1502+
update_radio_tx_power();
15091503

1510-
/* Transmission is armed on TIMER's CC1. */
1511-
esb_fem_for_tx_retry();
1512-
esb_ppi_for_retransmission_set();
1504+
/* Transmission is armed on TIMER's CC1. */
1505+
esb_fem_for_tx_retry();
1506+
esb_ppi_for_retransmission_set();
15131507

1514-
/* Check if PPI worked. If not we are to late with retransmission but it is
1515-
* ok to start retransmission here.
1516-
*/
1517-
if (nrf_timer_event_check(esb_timer.p_reg, NRF_TIMER_EVENT_COMPARE1)) {
1518-
radio_started =
1519-
(nrf_radio_state_get(NRF_RADIO) == NRF_RADIO_STATE_TXRU) ||
1508+
/* Check if PPI worked. If not we are to late with retransmission but it is
1509+
* ok to start retransmission here.
1510+
*/
1511+
bool radio_started = true;
1512+
1513+
if (nrf_timer_event_check(esb_timer.p_reg, NRF_TIMER_EVENT_COMPARE1)) {
1514+
radio_started = (nrf_radio_state_get(NRF_RADIO) == NRF_RADIO_STATE_TXRU) ||
15201515
(nrf_radio_event_check(NRF_RADIO, NRF_RADIO_EVENT_READY));
1521-
} else {
1522-
/* Resume timer in case of CRC errors. */
1523-
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_START);
1524-
}
1516+
} else {
1517+
/* Resume timer in case of CRC errors. */
1518+
nrf_timer_task_trigger(esb_timer.p_reg, NRF_TIMER_TASK_START);
1519+
}
15251520

1526-
if (!radio_started) {
1527-
/* Clear retransmission configuration. */
1528-
esb_fem_for_tx_retry_clear();
1529-
esb_ppi_for_retransmission_clear();
1530-
1531-
/* Start radio here. */
1532-
esb_ppi_for_txrx_set(false, true);
1533-
esb_fem_for_tx_set(true);
1534-
1535-
radio_start();
1536-
} else if (nrf54h_errata_216()) {
1537-
uint16_t ramp_up = esb_cfg.use_fast_ramp_up ?
1538-
TX_FAST_RAMP_UP_TIME_US : TX_RAMP_UP_TIME_US;
1539-
int32_t min_time = esb_cfg.retransmit_delay - ramp_up -
1540-
wait_for_ack_timeout_us - ADDR_EVENT_LATENCY_US;
1541-
if (min_time > ERRATA_216_MIN_TIME_TO_DISABLE_US) {
1542-
errata_216_off();
1543-
}
1521+
if (!radio_started) {
1522+
/* Clear retransmission configuration. */
1523+
esb_fem_for_tx_retry_clear();
1524+
esb_ppi_for_retransmission_clear();
1525+
1526+
/* Start radio here. */
1527+
esb_ppi_for_txrx_set(false, true);
1528+
esb_fem_for_tx_set(true);
1529+
1530+
radio_start();
1531+
} else if (nrf54h_errata_216()) {
1532+
uint16_t ramp_up = esb_cfg.use_fast_ramp_up ? TX_FAST_RAMP_UP_TIME_US
1533+
: TX_RAMP_UP_TIME_US;
1534+
int32_t min_time = esb_cfg.retransmit_delay - ramp_up -
1535+
wait_for_ack_timeout_us - ADDR_EVENT_LATENCY_US;
1536+
if (min_time > ERRATA_216_MIN_TIME_TO_DISABLE_US) {
1537+
errata_216_off();
15441538
}
15451539
}
15461540
}
15471541
}
15481542

1543+
static void start_rx_listening(void)
1544+
{
1545+
nrf_radio_int_disable(NRF_RADIO, 0xFFFFFFFF);
1546+
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_DISABLED);
1547+
1548+
if (esb_cfg.mode == ESB_MODE_MONITOR) {
1549+
nrf_radio_shorts_set(NRF_RADIO, RADIO_SHORTS_MONITOR);
1550+
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
1551+
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
1552+
on_radio_disabled = NULL;
1553+
} else {
1554+
if (fast_switching) {
1555+
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common);
1556+
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
1557+
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
1558+
} else {
1559+
nrf_radio_shorts_set(NRF_RADIO, (radio_shorts_common |
1560+
NRF_RADIO_SHORT_DISABLED_TXEN_MASK));
1561+
}
1562+
1563+
on_radio_disabled = on_radio_disabled_rx;
1564+
nrf_radio_int_enable(NRF_RADIO, NRF_RADIO_INT_DISABLED_MASK);
1565+
}
1566+
1567+
esb_state = ESB_STATE_PRX;
1568+
1569+
nrf_radio_rxaddresses_set(NRF_RADIO, esb_addr.rx_pipes_enabled);
1570+
nrf_radio_frequency_set(NRF_RADIO, (RADIO_BASE_FREQUENCY + esb_addr.rf_channel));
1571+
atomic_clear_bit(&esb_addr.rf_channel_flags, RF_CHANNEL_UPDATE_FLAG);
1572+
nrf_radio_packetptr_set(NRF_RADIO, rx_payload_buffer);
1573+
1574+
NVIC_ClearPendingIRQ(ESB_RADIO_IRQ_NUMBER);
1575+
irq_enable(ESB_RADIO_IRQ_NUMBER);
1576+
1577+
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_ADDRESS);
1578+
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_PAYLOAD);
1579+
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_DISABLED);
1580+
1581+
esb_ppi_for_txrx_set(true, false);
1582+
esb_fem_for_rx_set();
1583+
1584+
radio_start();
1585+
}
1586+
15491587
static void clear_events_restart_rx(void)
15501588
{
15511589
esb_fem_lna_reset();
@@ -1574,8 +1612,7 @@ static void clear_events_restart_rx(void)
15741612
radio_start();
15751613
}
15761614

1577-
static void on_radio_disabled_rx_dpl(bool retransmit_payload,
1578-
struct pipe_info *pipe_info)
1615+
static void prepare_ack_pdu_dpl(bool retransmit_payload, struct pipe_info *pipe_info)
15791616
{
15801617
struct esb_radio_pdu *tx_pdu = (struct esb_radio_pdu *)tx_payload_buffer;
15811618
struct esb_radio_pdu *rx_pdu = (struct esb_radio_pdu *)rx_payload_buffer;
@@ -1658,7 +1695,7 @@ static void on_radio_disabled_rx(void)
16581695

16591696
switch (esb_cfg.protocol) {
16601697
case ESB_PROTOCOL_ESB_DPL:
1661-
on_radio_disabled_rx_dpl(retransmit_payload, pipe_info);
1698+
prepare_ack_pdu_dpl(retransmit_payload, pipe_info);
16621699
break;
16631700

16641701
case ESB_PROTOCOL_ESB:
@@ -1685,7 +1722,7 @@ static void on_radio_disabled_rx(void)
16851722
(radio_shorts_common | NRF_RADIO_SHORT_DISABLED_RXEN_MASK));
16861723
}
16871724

1688-
on_radio_disabled = on_radio_disabled_rx_ack;
1725+
on_radio_disabled = on_radio_disabled_rx_send_ack;
16891726
} else {
16901727
clear_events_restart_rx();
16911728
}
@@ -1702,7 +1739,7 @@ static void on_radio_disabled_rx(void)
17021739
}
17031740
}
17041741

1705-
static void on_radio_disabled_rx_ack(void)
1742+
static void on_radio_disabled_rx_send_ack(void)
17061743
{
17071744
esb_fem_for_ack_rx();
17081745

@@ -1733,7 +1770,7 @@ static void on_radio_end_monitor(void)
17331770
}
17341771
}
17351772

1736-
static void fast_switchinng_set_channel(uint8_t channel)
1773+
static void fast_switching_set_channel(uint8_t channel)
17371774
{
17381775
*(volatile uint32_t *)((uint8_t *)(NRF_RADIO) + 0x70C) &= ~(1 << 31);
17391776
nrf_radio_frequency_set(NRF_RADIO, (RADIO_BASE_FREQUENCY + channel));
@@ -1791,7 +1828,7 @@ static void radio_irq_handler(void)
17911828
nrf_radio_event_check(NRF_RADIO, NRF_RADIO_EVENT_RXREADY)) {
17921829
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_RXREADY);
17931830
if (atomic_test_and_clear_bit(&esb_addr.rf_channel_flags, RF_CHANNEL_UPDATE_FLAG)) {
1794-
fast_switchinng_set_channel(esb_addr.rf_channel);
1831+
fast_switching_set_channel(esb_addr.rf_channel);
17951832
}
17961833
}
17971834
#endif /* defined(CONFIG_ESB_FAST_CHANNEL_SWITCHING) */
@@ -2197,11 +2234,9 @@ int esb_write_payload(const struct esb_payload *payload)
21972234

21982235
irq_unlock(key);
21992236

2200-
if (esb_cfg.mode == ESB_MODE_PTX &&
2201-
esb_cfg.tx_mode == ESB_TXMODE_AUTO &&
2237+
if (esb_cfg.mode == ESB_MODE_PTX && esb_cfg.tx_mode == ESB_TXMODE_AUTO &&
22022238
(esb_state == ESB_STATE_IDLE ||
2203-
(IS_ENABLED(CONFIG_ESB_NEVER_DISABLE_TX) ?
2204-
esb_state == ESB_STATE_PTX_TXIDLE : 0))) {
2239+
(IS_ENABLED(CONFIG_ESB_NEVER_DISABLE_TX) && esb_state == ESB_STATE_PTX_TXIDLE))) {
22052240
start_tx_transaction();
22062241
}
22072242

@@ -2267,46 +2302,7 @@ int esb_start_rx(void)
22672302
return -EBUSY;
22682303
}
22692304

2270-
nrf_radio_int_disable(NRF_RADIO, 0xFFFFFFFF);
2271-
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_DISABLED);
2272-
2273-
if (esb_cfg.mode == ESB_MODE_MONITOR) {
2274-
nrf_radio_shorts_set(NRF_RADIO, RADIO_SHORTS_MONITOR);
2275-
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
2276-
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
2277-
on_radio_disabled = NULL;
2278-
} else {
2279-
if (fast_switching) {
2280-
nrf_radio_shorts_set(NRF_RADIO, radio_shorts_common);
2281-
nrf_radio_event_clear(NRF_RADIO, ESB_RADIO_EVENT_END);
2282-
nrf_radio_int_enable(NRF_RADIO, ESB_RADIO_INT_END_MASK);
2283-
} else {
2284-
nrf_radio_shorts_set(NRF_RADIO, (radio_shorts_common |
2285-
NRF_RADIO_SHORT_DISABLED_TXEN_MASK));
2286-
}
2287-
2288-
on_radio_disabled = on_radio_disabled_rx;
2289-
nrf_radio_int_enable(NRF_RADIO, NRF_RADIO_INT_DISABLED_MASK);
2290-
}
2291-
2292-
esb_state = ESB_STATE_PRX;
2293-
2294-
nrf_radio_rxaddresses_set(NRF_RADIO, esb_addr.rx_pipes_enabled);
2295-
nrf_radio_frequency_set(NRF_RADIO, (RADIO_BASE_FREQUENCY + esb_addr.rf_channel));
2296-
atomic_clear_bit(&esb_addr.rf_channel_flags, RF_CHANNEL_UPDATE_FLAG);
2297-
nrf_radio_packetptr_set(NRF_RADIO, rx_payload_buffer);
2298-
2299-
NVIC_ClearPendingIRQ(ESB_RADIO_IRQ_NUMBER);
2300-
irq_enable(ESB_RADIO_IRQ_NUMBER);
2301-
2302-
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_ADDRESS);
2303-
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_PAYLOAD);
2304-
nrf_radio_event_clear(NRF_RADIO, NRF_RADIO_EVENT_DISABLED);
2305-
2306-
esb_ppi_for_txrx_set(true, false);
2307-
esb_fem_for_rx_set();
2308-
2309-
radio_start();
2305+
start_rx_listening();
23102306

23112307
return 0;
23122308
}
@@ -2521,7 +2517,7 @@ int esb_set_rf_channel(uint32_t channel)
25212517
if (esb_state != ESB_STATE_IDLE) {
25222518
if (IS_ENABLED(CONFIG_ESB_FAST_CHANNEL_SWITCHING)) {
25232519
if (esb_state == ESB_STATE_PRX) {
2524-
fast_switchinng_set_channel(channel);
2520+
fast_switching_set_channel(channel);
25252521
} else {
25262522
atomic_set_bit(&esb_addr.rf_channel_flags, RF_CHANNEL_UPDATE_FLAG);
25272523
}

0 commit comments

Comments
 (0)