@@ -172,7 +172,6 @@ RFPins::RFPins(PinName spi_sdi, PinName spi_sdo,
172
172
static uint8_t rf_read_register (uint8_t addr);
173
173
static s2lp_states_e rf_read_state (void );
174
174
static void rf_write_register (uint8_t addr, uint8_t data);
175
- static void rf_print_registers (void );
176
175
static void rf_interrupt_handler (void );
177
176
static void rf_receive (uint8_t rx_channel);
178
177
static void rf_cca_timer_stop (void );
@@ -211,6 +210,8 @@ static bool rf_update_config = false;
211
210
static uint16_t cur_packet_len = 0xffff ;
212
211
static uint32_t receiver_ready_timestamp;
213
212
213
+ static int16_t rssi_threshold = RSSI_THRESHOLD;
214
+
214
215
/* Channel configurations for sub-GHz */
215
216
static phy_rf_channel_configuration_s phy_subghz = {
216
217
.channel_0_center_frequency = 868300000U ,
@@ -501,6 +502,10 @@ static uint32_t read_irq_status(void)
501
502
502
503
static void rf_set_channel_configuration_registers (void )
503
504
{
505
+ // Set RSSI threshold
506
+ uint8_t rssi_th;
507
+ rf_conf_calculate_rssi_threshold_registers (rssi_threshold, &rssi_th);
508
+ rf_write_register (RSSI_TH, rssi_th);
504
509
// Set deviation
505
510
uint32_t deviation = rf_conf_calculate_deviation (phy_subghz.modulation_index , phy_subghz.datarate );
506
511
if (!deviation) {
@@ -557,10 +562,6 @@ static void rf_init_registers(void)
557
562
rf_write_register_field (QI, SQI_EN_FIELD, SQI_EN);
558
563
rf_write_register (SYNC0, SFD0);
559
564
rf_write_register (SYNC1, SFD1);
560
- // Set RSSI threshold
561
- uint8_t rssi_th;
562
- rf_conf_calculate_rssi_threshold_registers (RSSI_THRESHOLD, &rssi_th);
563
- rf_write_register (RSSI_TH, rssi_th);
564
565
rf_set_channel_configuration_registers ();
565
566
}
566
567
@@ -666,6 +667,16 @@ static int8_t rf_extension(phy_extension_type_e extension_type, uint8_t *data_pt
666
667
rf_receive (rf_rx_channel);
667
668
}
668
669
break ;
670
+ case PHY_EXTENSION_SET_TX_POWER:
671
+ // TODO: Set TX output power
672
+ break ;
673
+ case PHY_EXTENSION_SET_CCA_THRESHOLD:
674
+ rssi_threshold = rf_conf_cca_threshold_percent_to_rssi (*data_ptr);
675
+ rf_update_config = true ;
676
+ if (rf_state == RF_IDLE) {
677
+ rf_receive (rf_rx_channel);
678
+ }
679
+ break ;
669
680
default :
670
681
break ;
671
682
}
@@ -683,6 +694,14 @@ static int8_t rf_interface_state_control(phy_interface_state_e new_state, uint8_
683
694
break ;
684
695
/* Disable PHY Interface driver*/
685
696
case PHY_INTERFACE_DOWN:
697
+ rf_lock ();
698
+ rf_send_command (S2LP_CMD_SABORT);
699
+ rf_disable_all_interrupts ();
700
+ rf_poll_state_change (S2LP_STATE_READY);
701
+ rf_flush_rx_fifo ();
702
+ rf_flush_tx_fifo ();
703
+ rf_state = RF_IDLE;
704
+ rf_unlock ();
686
705
break ;
687
706
/* Enable PHY Interface driver*/
688
707
case PHY_INTERFACE_UP:
@@ -810,6 +829,15 @@ static void rf_cca_timer_start(uint32_t slots)
810
829
static void rf_backup_timer_interrupt (void )
811
830
{
812
831
tx_finnish_time = rf_get_timestamp ();
832
+ if (rf_state == RF_RX_STARTED) {
833
+ if (device_driver.phy_rf_statistics ) {
834
+ device_driver.phy_rf_statistics ->rx_timeouts ++;
835
+ }
836
+ } else {
837
+ if (device_driver.phy_rf_statistics ) {
838
+ device_driver.phy_rf_statistics ->tx_timeouts ++;
839
+ }
840
+ }
813
841
if (rf_state == RF_TX_STARTED) {
814
842
if (device_driver.phy_tx_done_cb ) {
815
843
device_driver.phy_tx_done_cb (rf_radio_driver_id, mac_tx_handle, PHY_LINK_TX_SUCCESS, 0 , 0 );
@@ -1054,6 +1082,9 @@ static void rf_irq_task_process_irq(void)
1054
1082
rf_state = RF_IDLE;
1055
1083
// In case the channel change was called during reception, driver is responsible to change the channel if CRC failed.
1056
1084
rf_receive (rf_new_channel);
1085
+ if (device_driver.phy_rf_statistics ) {
1086
+ device_driver.phy_rf_statistics ->crc_fails ++;
1087
+ }
1057
1088
}
1058
1089
}
1059
1090
if ((irq_status & (1 << RX_FIFO_ALMOST_FULL)) && (enabled_interrupts & (1 << RX_FIFO_ALMOST_FULL))) {
@@ -1103,7 +1134,6 @@ static void rf_init(void)
1103
1134
rf_enable_gpio_interrupt ();
1104
1135
rf_calculate_symbol_rate (phy_subghz.datarate , phy_subghz.modulation );
1105
1136
rf->tx_timer .start ();
1106
- rf_print_registers ();
1107
1137
}
1108
1138
1109
1139
static int8_t rf_device_register (const uint8_t *mac_addr)
@@ -1199,7 +1229,6 @@ int8_t NanostackRfPhys2lp::rf_register()
1199
1229
s2lp_MAC[0 ] &= ~1 ; // Clear multicast bit
1200
1230
#endif
1201
1231
set_mac_address (s2lp_MAC);
1202
- tr_info (" MAC address: %s" , trace_array (_mac_addr, 8 ));
1203
1232
}
1204
1233
1205
1234
rf = _rf;
@@ -1349,137 +1378,6 @@ static bool rf_rx_filter(uint8_t *mac_header, uint8_t *mac_64bit_addr, uint8_t *
1349
1378
return true ;
1350
1379
}
1351
1380
1352
- static void rf_print_registers (void )
1353
- {
1354
- tr_debug (" GPIO0_CONF: %x" , rf_read_register (GPIO0_CONF));
1355
- tr_debug (" GPIO1_CONF: %x" , rf_read_register (GPIO1_CONF));
1356
- tr_debug (" GPIO2_CONF: %x" , rf_read_register (GPIO2_CONF));
1357
- tr_debug (" GPIO3_CONF: %x" , rf_read_register (GPIO3_CONF));
1358
- tr_debug (" SYNT3: %x" , rf_read_register (SYNT3));
1359
- tr_debug (" SYNT2: %x" , rf_read_register (SYNT2));
1360
- tr_debug (" SYNT1: %x" , rf_read_register (SYNT1));
1361
- tr_debug (" SYNT0: %x" , rf_read_register (SYNT0));
1362
- tr_debug (" IF_OFFSET_ANA: %x" , rf_read_register (IF_OFFSET_ANA));
1363
- tr_debug (" IF_OFFSET_DIG: %x" , rf_read_register (IF_OFFSET_DIG));
1364
- tr_debug (" CHSPACE: %x" , rf_read_register (CHSPACE));
1365
- tr_debug (" CHNUM: %x" , rf_read_register (CHNUM));
1366
- tr_debug (" MOD4: %x" , rf_read_register (MOD4));
1367
- tr_debug (" MOD3: %x" , rf_read_register (MOD3));
1368
- tr_debug (" MOD2: %x" , rf_read_register (MOD2));
1369
- tr_debug (" MOD1: %x" , rf_read_register (MOD1));
1370
- tr_debug (" MOD0: %x" , rf_read_register (MOD0));
1371
- tr_debug (" CHFLT: %x" , rf_read_register (CHFLT));
1372
- tr_debug (" AFC2: %x" , rf_read_register (AFC2));
1373
- tr_debug (" AFC1: %x" , rf_read_register (AFC1));
1374
- tr_debug (" AFC0: %x" , rf_read_register (AFC0));
1375
- tr_debug (" RSSI_FLT: %x" , rf_read_register (RSSI_FLT));
1376
- tr_debug (" RSSI_TH: %x" , rf_read_register (RSSI_TH));
1377
- tr_debug (" AGCCTRL4: %x" , rf_read_register (AGCCTRL4));
1378
- tr_debug (" AGCCTRL3: %x" , rf_read_register (AGCCTRL3));
1379
- tr_debug (" AGCCTRL2: %x" , rf_read_register (AGCCTRL2));
1380
- tr_debug (" AGCCTRL1: %x" , rf_read_register (AGCCTRL1));
1381
- tr_debug (" AGCCTRL0: %x" , rf_read_register (AGCCTRL0));
1382
- tr_debug (" ANT_SELECT_CONF: %x" , rf_read_register (ANT_SELECT_CONF));
1383
- tr_debug (" CLOCKREC2: %x" , rf_read_register (CLOCKREC2));
1384
- tr_debug (" CLOCKREC1: %x" , rf_read_register (CLOCKREC1));
1385
- tr_debug (" PCKTCTRL6: %x" , rf_read_register (PCKTCTRL6));
1386
- tr_debug (" PCKTCTRL5: %x" , rf_read_register (PCKTCTRL5));
1387
- tr_debug (" PCKTCTRL4: %x" , rf_read_register (PCKTCTRL4));
1388
- tr_debug (" PCKTCTRL3: %x" , rf_read_register (PCKTCTRL3));
1389
- tr_debug (" PCKTCTRL2: %x" , rf_read_register (PCKTCTRL2));
1390
- tr_debug (" PCKTCTRL1: %x" , rf_read_register (PCKTCTRL1));
1391
- tr_debug (" PCKTLEN1: %x" , rf_read_register (PCKTLEN1));
1392
- tr_debug (" PCKTLEN0: %x" , rf_read_register (PCKTLEN0));
1393
- tr_debug (" SYNC3: %x" , rf_read_register (SYNC3));
1394
- tr_debug (" SYNC2: %x" , rf_read_register (SYNC2));
1395
- tr_debug (" SYNC1: %x" , rf_read_register (SYNC1));
1396
- tr_debug (" SYNC0: %x" , rf_read_register (SYNC0));
1397
- tr_debug (" QI: %x" , rf_read_register (QI));
1398
- tr_debug (" PCKT_PSTMBL: %x" , rf_read_register (PCKT_PSTMBL));
1399
- tr_debug (" PROTOCOL2: %x" , rf_read_register (PROTOCOL2));
1400
- tr_debug (" PROTOCOL1: %x" , rf_read_register (PROTOCOL1));
1401
- tr_debug (" PROTOCOL0: %x" , rf_read_register (PROTOCOL0));
1402
- tr_debug (" FIFO_CONFIG3: %x" , rf_read_register (FIFO_CONFIG3));
1403
- tr_debug (" FIFO_CONFIG2: %x" , rf_read_register (FIFO_CONFIG2));
1404
- tr_debug (" FIFO_CONFIG1: %x" , rf_read_register (FIFO_CONFIG1));
1405
- tr_debug (" FIFO_CONFIG0: %x" , rf_read_register (FIFO_CONFIG0));
1406
- tr_debug (" PCKT_FLT_OPTIONS: %x" , rf_read_register (PCKT_FLT_OPTIONS));
1407
- tr_debug (" PCKT_FLT_GOALS4: %x" , rf_read_register (PCKT_FLT_GOALS4));
1408
- tr_debug (" PCKT_FLT_GOALS3: %x" , rf_read_register (PCKT_FLT_GOALS3));
1409
- tr_debug (" PCKT_FLT_GOALS2: %x" , rf_read_register (PCKT_FLT_GOALS2));
1410
- tr_debug (" PCKT_FLT_GOALS1: %x" , rf_read_register (PCKT_FLT_GOALS1));
1411
- tr_debug (" PCKT_FLT_GOALS0: %x" , rf_read_register (PCKT_FLT_GOALS0));
1412
- tr_debug (" TIMERS5: %x" , rf_read_register (TIMERS5));
1413
- tr_debug (" TIMERS4: %x" , rf_read_register (TIMERS4));
1414
- tr_debug (" TIMERS3: %x" , rf_read_register (TIMERS3));
1415
- tr_debug (" TIMERS2: %x" , rf_read_register (TIMERS2));
1416
- tr_debug (" TIMERS1: %x" , rf_read_register (TIMERS1));
1417
- tr_debug (" TIMERS0: %x" , rf_read_register (TIMERS0));
1418
- tr_debug (" CSMA_CONF3: %x" , rf_read_register (CSMA_CONF3));
1419
- tr_debug (" CSMA_CONF2: %x" , rf_read_register (CSMA_CONF2));
1420
- tr_debug (" CSMA_CONF1: %x" , rf_read_register (CSMA_CONF1));
1421
- tr_debug (" CSMA_CONF0: %x" , rf_read_register (CSMA_CONF0));
1422
- tr_debug (" IRQ_MASK3: %x" , rf_read_register (IRQ_MASK3));
1423
- tr_debug (" IRQ_MASK2: %x" , rf_read_register (IRQ_MASK2));
1424
- tr_debug (" IRQ_MASK1: %x" , rf_read_register (IRQ_MASK1));
1425
- tr_debug (" IRQ_MASK0: %x" , rf_read_register (IRQ_MASK0));
1426
- tr_debug (" FAST_RX_TIMER: %x" , rf_read_register (FAST_RX_TIMER));
1427
- tr_debug (" PA_POWER8: %x" , rf_read_register (PA_POWER8));
1428
- tr_debug (" PA_POWER7: %x" , rf_read_register (PA_POWER7));
1429
- tr_debug (" PA_POWER6: %x" , rf_read_register (PA_POWER6));
1430
- tr_debug (" PA_POWER5: %x" , rf_read_register (PA_POWER5));
1431
- tr_debug (" PA_POWER4: %x" , rf_read_register (PA_POWER4));
1432
- tr_debug (" PA_POWER3: %x" , rf_read_register (PA_POWER3));
1433
- tr_debug (" PA_POWER2: %x" , rf_read_register (PA_POWER2));
1434
- tr_debug (" PA_POWER1: %x" , rf_read_register (PA_POWER1));
1435
- tr_debug (" PA_POWER0: %x" , rf_read_register (PA_POWER0));
1436
- tr_debug (" PA_CONFIG1: %x" , rf_read_register (PA_CONFIG1));
1437
- tr_debug (" PA_CONFIG0: %x" , rf_read_register (PA_CONFIG0));
1438
- tr_debug (" SYNTH_CONFIG2: %x" , rf_read_register (SYNTH_CONFIG2));
1439
- tr_debug (" VCO_CONFIG: %x" , rf_read_register (VCO_CONFIG));
1440
- tr_debug (" VCO_CALIBR_IN2: %x" , rf_read_register (VCO_CALIBR_IN2));
1441
- tr_debug (" VCO_CALIBR_IN1: %x" , rf_read_register (VCO_CALIBR_IN1));
1442
- tr_debug (" VCO_CALIBR_IN0: %x" , rf_read_register (VCO_CALIBR_IN0));
1443
- tr_debug (" XO_RCO_CONF1: %x" , rf_read_register (XO_RCO_CONF1));
1444
- tr_debug (" XO_RCO_CONF0: %x" , rf_read_register (XO_RCO_CONF0));
1445
- tr_debug (" RCO_CALIBR_CONF3: %x" , rf_read_register (RCO_CALIBR_CONF3));
1446
- tr_debug (" RCO_CALIBR_CONF2: %x" , rf_read_register (RCO_CALIBR_CONF2));
1447
- tr_debug (" PM_CONF4: %x" , rf_read_register (PM_CONF4));
1448
- tr_debug (" PM_CONF3: %x" , rf_read_register (PM_CONF3));
1449
- tr_debug (" PM_CONF2: %x" , rf_read_register (PM_CONF2));
1450
- tr_debug (" PM_CONF1: %x" , rf_read_register (PM_CONF1));
1451
- tr_debug (" PM_CONF0: %x" , rf_read_register (PM_CONF0));
1452
- tr_debug (" MC_STATE1: %x" , rf_read_register (MC_STATE1));
1453
- tr_debug (" MC_STATE0: %x" , rf_read_register (MC_STATE0));
1454
- tr_debug (" TX_FIFO_STATUS: %x" , rf_read_register (TX_FIFO_STATUS));
1455
- tr_debug (" RX_FIFO_STATUS: %x" , rf_read_register (RX_FIFO_STATUS));
1456
- tr_debug (" RCO_CALIBR_OUT4: %x" , rf_read_register (RCO_CALIBR_OUT4));
1457
- tr_debug (" RCO_CALIBR_OUT3: %x" , rf_read_register (RCO_CALIBR_OUT3));
1458
- tr_debug (" VCO_CALIBR_OUT1: %x" , rf_read_register (VCO_CALIBR_OUT1));
1459
- tr_debug (" VCO_CALIBR_OUT0: %x" , rf_read_register (VCO_CALIBR_OUT0));
1460
- tr_debug (" TX_PCKT_INFO: %x" , rf_read_register (TX_PCKT_INFO));
1461
- tr_debug (" RX_PCKT_INFO: %x" , rf_read_register (RX_PCKT_INFO));
1462
- tr_debug (" AFC_CORR: %x" , rf_read_register (AFC_CORR));
1463
- tr_debug (" LINK_QUALIF2: %x" , rf_read_register (LINK_QUALIF2));
1464
- tr_debug (" LINK_QUALIF1: %x" , rf_read_register (LINK_QUALIF1));
1465
- tr_debug (" RSSI_LEVEL: %x" , rf_read_register (RSSI_LEVEL));
1466
- tr_debug (" RX_PCKT_LEN1: %x" , rf_read_register (RX_PCKT_LEN1));
1467
- tr_debug (" RX_PCKT_LEN0: %x" , rf_read_register (RX_PCKT_LEN0));
1468
- tr_debug (" CRC_FIELD3: %x" , rf_read_register (CRC_FIELD3));
1469
- tr_debug (" CRC_FIELD2: %x" , rf_read_register (CRC_FIELD2));
1470
- tr_debug (" CRC_FIELD1: %x" , rf_read_register (CRC_FIELD1));
1471
- tr_debug (" CRC_FIELD0: %x" , rf_read_register (CRC_FIELD0));
1472
- tr_debug (" RX_ADDRE_FIELD1: %x" , rf_read_register (RX_ADDRE_FIELD1));
1473
- tr_debug (" RX_ADDRE_FIELD0: %x" , rf_read_register (RX_ADDRE_FIELD0));
1474
- tr_debug (" RSSI_LEVEL_RUN: %x" , rf_read_register (RSSI_LEVEL_RUN));
1475
- tr_debug (" DEVICE_INFO1: %x" , rf_read_register (DEVICE_INFO1));
1476
- tr_debug (" DEVICE_INFO0: %x" , rf_read_register (DEVICE_INFO0));
1477
- tr_debug (" IRQ_STATUS3: %x" , rf_read_register (IRQ_STATUS3));
1478
- tr_debug (" IRQ_STATUS2: %x" , rf_read_register (IRQ_STATUS2));
1479
- tr_debug (" IRQ_STATUS1: %x" , rf_read_register (IRQ_STATUS1));
1480
- tr_debug (" IRQ_STATUS0: %x" , rf_read_register (IRQ_STATUS0));
1481
- }
1482
-
1483
1381
#if MBED_CONF_S2LP_PROVIDE_DEFAULT
1484
1382
NanostackRfPhy &NanostackRfPhy::get_default_instance ()
1485
1383
{
0 commit comments