Skip to content

Commit a5d85bd

Browse files
author
Arto Kinnunen
committed
RF802.11.4 S2LP driver sync with dev repository
Sync with version v1.0.1 in development repository.
1 parent 85e85ee commit a5d85bd

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

components/802.15.4_RF/stm-s2lp-rf-driver/source/NanostackRfPhys2lp.cpp

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,8 @@ static rf_mode_e rf_mode = RF_MODE_NORMAL;
209209
static bool rf_update_config = false;
210210
static uint16_t cur_packet_len = 0xffff;
211211
static uint32_t receiver_ready_timestamp;
212-
213212
static int16_t rssi_threshold = RSSI_THRESHOLD;
213+
static uint32_t tx_start_time = 0;
214214

215215
/* Channel configurations for sub-GHz */
216216
static phy_rf_channel_configuration_s phy_subghz = {
@@ -276,6 +276,20 @@ static uint32_t rf_get_timestamp(void)
276276
return (uint32_t)rf->tx_timer.read_us();
277277
}
278278

279+
static void rf_update_tx_active_time(void)
280+
{
281+
if (device_driver.phy_rf_statistics) {
282+
device_driver.phy_rf_statistics->tx_active_time += rf_get_timestamp() - tx_start_time;
283+
}
284+
}
285+
286+
static void rf_update_rx_active_time(void)
287+
{
288+
if (device_driver.phy_rf_statistics) {
289+
device_driver.phy_rf_statistics->rx_active_time += rf_get_timestamp() - rx_time;
290+
}
291+
}
292+
279293
static void rf_lock(void)
280294
{
281295
platform_enter_critical();
@@ -739,6 +753,7 @@ static void rf_tx_sent_handler(void)
739753
rf_disable_interrupt(TX_DATA_SENT);
740754
if (rf_state != RF_TX_ACK) {
741755
tx_finnish_time = rf_get_timestamp();
756+
rf_update_tx_active_time();
742757
TEST_TX_DONE
743758
rf_state = RF_IDLE;
744759
rf_receive(rf_rx_channel);
@@ -771,6 +786,7 @@ static void rf_start_tx(void)
771786
rf_disable_all_interrupts();
772787
rf_poll_state_change(S2LP_STATE_READY);
773788
rf_state_change(S2LP_STATE_TX, false);
789+
tx_start_time = rf_get_timestamp();
774790
// More TX data to be written in FIFO when TX threshold interrupt occurs
775791
if (tx_data_ptr) {
776792
rf_enable_interrupt(TX_FIFO_ALMOST_EMPTY);
@@ -805,6 +821,7 @@ static void rf_cca_timer_interrupt(void)
805821
}
806822
rf_flush_tx_fifo();
807823
tx_finnish_time = rf_get_timestamp();
824+
rf_update_tx_active_time();
808825
if (device_driver.phy_tx_done_cb) {
809826
device_driver.phy_tx_done_cb(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 0, 0);
810827
}
@@ -825,6 +842,9 @@ static void rf_cca_timer_interrupt(void)
825842
rf_start_tx();
826843
rf_state = RF_TX_STARTED;
827844
TEST_TX_STARTED
845+
if (device_driver.phy_rf_statistics) {
846+
device_driver.phy_rf_statistics->tx_bytes += tx_data_length;
847+
}
828848
}
829849
}
830850
}
@@ -843,10 +863,12 @@ static void rf_backup_timer_interrupt(void)
843863
{
844864
tx_finnish_time = rf_get_timestamp();
845865
if (rf_state == RF_RX_STARTED) {
866+
rf_update_rx_active_time();
846867
if (device_driver.phy_rf_statistics) {
847868
device_driver.phy_rf_statistics->rx_timeouts++;
848869
}
849870
} else {
871+
rf_update_tx_active_time();
850872
if (device_driver.phy_rf_statistics) {
851873
device_driver.phy_rf_statistics->tx_timeouts++;
852874
}
@@ -921,13 +943,17 @@ static void rf_send_ack(uint8_t seq)
921943
rf_start_tx();
922944
TEST_ACK_TX_STARTED
923945
rf_backup_timer_start(ACK_SENDING_TIME);
946+
if (device_driver.phy_rf_statistics) {
947+
device_driver.phy_rf_statistics->tx_bytes += sizeof(ack_frame);
948+
}
924949
}
925950

926951
static void rf_handle_ack(uint8_t seq_number, uint8_t pending)
927952
{
928953
phy_link_tx_status_e phy_status;
929954
if (tx_sequence == (uint16_t)seq_number) {
930955
tx_finnish_time = rf_get_timestamp();
956+
rf_update_tx_active_time();
931957
if (pending) {
932958
phy_status = PHY_LINK_TX_DONE_PENDING;
933959
} else {
@@ -966,6 +992,9 @@ static void rf_rx_ready_handler(void)
966992
rf_send_ack(rx_buffer[2]);
967993
}
968994
}
995+
if (device_driver.phy_rf_statistics) {
996+
device_driver.phy_rf_statistics->rx_bytes += rx_data_length;
997+
}
969998
} else {
970999
rf_state = RF_IDLE;
9711000
int8_t rssi = (rf_read_register(RSSI_LEVEL) - RSSI_OFFSET);
@@ -1072,6 +1101,7 @@ static void rf_irq_task_process_irq(void)
10721101
if ((irq_status & (1 << TX_FIFO_UNF_OVF)) && (enabled_interrupts & (1 << TX_FIFO_UNF_OVF))) {
10731102
rf_backup_timer_stop();
10741103
tx_finnish_time = rf_get_timestamp();
1104+
rf_update_tx_active_time();
10751105
TEST_TX_DONE
10761106
device_driver.phy_tx_done_cb(rf_radio_driver_id, mac_tx_handle, PHY_LINK_CCA_FAIL, 1, 0);
10771107
rf_send_command(S2LP_CMD_SABORT);
@@ -1087,6 +1117,7 @@ static void rf_irq_task_process_irq(void)
10871117
}
10881118
} else if (rf_state == RF_RX_STARTED) {
10891119
if ((irq_status & (1 << RX_DATA_READY)) && (enabled_interrupts & (1 << RX_DATA_READY))) {
1120+
rf_update_rx_active_time();
10901121
if (!(irq_status & (1 << CRC_ERROR))) {
10911122
rf_rx_ready_handler();
10921123
} else {
@@ -1112,6 +1143,7 @@ static void rf_irq_task_process_irq(void)
11121143
}
11131144
}
11141145
if ((irq_status & (1 << RX_FIFO_UNF_OVF)) && (enabled_interrupts & (1 << RX_FIFO_UNF_OVF))) {
1146+
rf_update_rx_active_time();
11151147
TEST_RX_DONE
11161148
rf_backup_timer_stop();
11171149
rf_send_command(S2LP_CMD_SABORT);

0 commit comments

Comments
 (0)