@@ -306,7 +306,6 @@ void SX1272_LoRaRadio::sleep()
306
306
{
307
307
// stop timers
308
308
tx_timeout_timer.detach ();
309
- rx_timeout_timer.detach ();
310
309
311
310
// put module in sleep mode
312
311
set_operation_mode (RF_OPMODE_SLEEP);
@@ -415,8 +414,7 @@ void SX1272_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
415
414
_rf_settings.fsk .iq_inverted = iq_inverted;
416
415
_rf_settings.fsk .rx_continuous = rx_continuous;
417
416
_rf_settings.fsk .preamble_len = preamble_len;
418
- _rf_settings.fsk .rx_single_timeout =
419
- symb_timeout * ((1.0 / (double ) datarate) * 8.0 ) * 1e3 ;
417
+ _rf_settings.fsk .rx_single_timeout = (symb_timeout + 1 ) / 2 ; // dividing by 2 as our detector size is 2 symbols (16 bytes)
420
418
421
419
datarate = (uint16_t ) ((double ) XTAL_FREQ / (double ) datarate);
422
420
write_to_register (REG_BITRATEMSB, (uint8_t ) (datarate >> 8 ));
@@ -867,19 +865,13 @@ void SX1272_LoRaRadio::transmit(uint32_t timeout)
867
865
* and finally a DIO0 interrupt let's the state machine know that a packet is
868
866
* ready to be read from the FIFO
869
867
*/
870
- void SX1272_LoRaRadio::receive (uint32_t timeout)
868
+ void SX1272_LoRaRadio::receive (uint32_t /* * timeout* */ )
871
869
{
872
870
switch (_rf_settings.modem ) {
873
871
case MODEM_FSK:
874
- if (timeout == 0 && _rf_settings.fsk .rx_continuous == false ) {
875
- // user messed up probably timeout was 0 but mode was not
876
- // continuous, force it to be continuous
877
- _rf_settings.fsk .rx_continuous = true ;
878
- }
879
-
880
872
// DIO0=PayloadReady
881
873
// DIO1=FifoLevel
882
- // DIO2=SyncAddr
874
+ // DIO2=RxTimeout
883
875
// DIO3=FifoEmpty
884
876
// DIO4=Preamble
885
877
// DIO5=ModeReady
@@ -889,7 +881,7 @@ void SX1272_LoRaRadio::receive(uint32_t timeout)
889
881
RF_DIOMAPPING1_DIO2_MASK) |
890
882
RF_DIOMAPPING1_DIO0_00 |
891
883
RF_DIOMAPPING1_DIO1_00 |
892
- RF_DIOMAPPING1_DIO2_11 );
884
+ RF_DIOMAPPING1_DIO2_10 );
893
885
894
886
write_to_register (REG_DIOMAPPING2, (read_register (REG_DIOMAPPING2) &
895
887
RF_DIOMAPPING2_DIO4_MASK &
@@ -904,6 +896,11 @@ void SX1272_LoRaRadio::receive(uint32_t timeout)
904
896
RF_RXCONFIG_AGCAUTO_ON |
905
897
RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT);
906
898
899
+ write_to_register (REG_RXTIMEOUT2, _rf_settings.fsk .rx_single_timeout <= 255 ?
900
+ _rf_settings.fsk .rx_single_timeout : 255 );
901
+ write_to_register (REG_RXTIMEOUT3, 0x00 );
902
+ write_to_register (REG_RXTIMEOUT1, 0x00 );
903
+
907
904
_rf_settings.fsk_packet_handler .preamble_detected = 0 ;
908
905
_rf_settings.fsk_packet_handler .sync_word_detected = 0 ;
909
906
_rf_settings.fsk_packet_handler .nb_bytes = 0 ;
@@ -912,11 +909,6 @@ void SX1272_LoRaRadio::receive(uint32_t timeout)
912
909
break ;
913
910
914
911
case MODEM_LORA:
915
- if (timeout == 0 && _rf_settings.lora .rx_continuous == false ) {
916
- // user messed up probably timeout was 0 but mode was not
917
- // continuous, force it to be continuous
918
- _rf_settings.lora .rx_continuous = true ;
919
- }
920
912
921
913
if (_rf_settings.lora .iq_inverted == true ) {
922
914
write_to_register (REG_LR_INVERTIQ, ((read_register (REG_LR_INVERTIQ) &
@@ -971,21 +963,8 @@ void SX1272_LoRaRadio::receive(uint32_t timeout)
971
963
972
964
_rf_settings.state = RF_RX_RUNNING;
973
965
974
- if (timeout != 0 ) {
975
- rx_timeout_timer.attach_us (callback (this ,
976
- &SX1272_LoRaRadio::timeout_irq_isr),
977
- timeout*1e3 );
978
- }
979
-
980
966
if (_rf_settings.modem == MODEM_FSK) {
981
967
set_operation_mode (RF_OPMODE_RECEIVER);
982
-
983
- if (_rf_settings.fsk .rx_continuous == false ) {
984
- rx_timeout_sync_word.attach_us (callback (this ,
985
- &SX1272_LoRaRadio::timeout_irq_isr),
986
- _rf_settings.fsk .rx_single_timeout * 1e3 );
987
- }
988
-
989
968
return ;
990
969
}
991
970
@@ -1144,8 +1123,6 @@ void SX1272_LoRaRadio::set_tx_continuous_wave(uint32_t freq, int8_t power,
1144
1123
void SX1272_LoRaRadio::standby ( void )
1145
1124
{
1146
1125
tx_timeout_timer.detach ();
1147
- rx_timeout_timer.detach ();
1148
-
1149
1126
set_operation_mode (RF_OPMODE_STANDBY);
1150
1127
_rf_settings.state = RF_IDLE;
1151
1128
}
@@ -1732,7 +1709,6 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1732
1709
1733
1710
1734
1711
if (_rf_settings.fsk .rx_continuous == false ) {
1735
- rx_timeout_sync_word.detach ();
1736
1712
_rf_settings.state = RF_IDLE;
1737
1713
} else {
1738
1714
// Continuous mode restart Rx chain
@@ -1741,8 +1717,6 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1741
1717
RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK);
1742
1718
}
1743
1719
1744
- rx_timeout_timer.detach ();
1745
-
1746
1720
if ((_radio_events != NULL )
1747
1721
&& (_radio_events->rx_error )) {
1748
1722
_radio_events->rx_error ();
@@ -1757,6 +1731,15 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1757
1731
}
1758
1732
}
1759
1733
1734
+ // This block was moved from dio2_handler.
1735
+ // We can have a snapshot of RSSI here as at this point it
1736
+ // should be more smoothed out.
1737
+ _rf_settings.fsk_packet_handler .rssi_value = -(read_register (REG_RSSIVALUE) >> 1 );
1738
+ _rf_settings.fsk_packet_handler .afc_value = (int32_t )(double )(((uint16_t )read_register (REG_AFCMSB) << 8 ) |
1739
+ (uint16_t )read_register (REG_AFCLSB)) *
1740
+ (double )FREQ_STEP;
1741
+ _rf_settings.fsk_packet_handler .rx_gain = (read_register (REG_LNA) >> 5 ) & 0x07 ;
1742
+
1760
1743
// Read received packet size
1761
1744
if ((_rf_settings.fsk_packet_handler .size == 0 )
1762
1745
&& (_rf_settings.fsk_packet_handler .nb_bytes == 0 )) {
@@ -1778,15 +1761,12 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1778
1761
1779
1762
if (_rf_settings.fsk .rx_continuous == false ) {
1780
1763
_rf_settings.state = RF_IDLE;
1781
- rx_timeout_sync_word.detach ();
1782
1764
} else {
1783
1765
// Continuous mode restart Rx chain
1784
1766
write_to_register (REG_RXCONFIG, read_register (REG_RXCONFIG)
1785
1767
| RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK);
1786
1768
}
1787
1769
1788
- rx_timeout_timer.detach ();
1789
-
1790
1770
if ((_radio_events != NULL ) && (_radio_events->rx_done )) {
1791
1771
_radio_events->rx_done (
1792
1772
_data_buffer,
@@ -1814,7 +1794,6 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1814
1794
if (_rf_settings.lora .rx_continuous == false ) {
1815
1795
_rf_settings.state = RF_IDLE;
1816
1796
}
1817
- rx_timeout_timer.detach ();
1818
1797
1819
1798
if ((_radio_events != NULL )
1820
1799
&& (_radio_events->rx_error )) {
@@ -1849,7 +1828,6 @@ void SX1272_LoRaRadio::handle_dio0_irq()
1849
1828
if (_rf_settings.lora .rx_continuous == false ) {
1850
1829
_rf_settings.state = RF_IDLE;
1851
1830
}
1852
- rx_timeout_timer.detach ();
1853
1831
1854
1832
if ((_radio_events != NULL )
1855
1833
&& (_radio_events->rx_done )) {
@@ -1923,7 +1901,6 @@ void SX1272_LoRaRadio::handle_dio1_irq()
1923
1901
break ;
1924
1902
case MODEM_LORA:
1925
1903
// Sync time out
1926
- rx_timeout_timer.detach ( );
1927
1904
_rf_settings.state = RF_IDLE;
1928
1905
if ((_radio_events != NULL ) && (_radio_events->rx_timeout )) {
1929
1906
_radio_events->rx_timeout ();
@@ -1969,23 +1946,33 @@ void SX1272_LoRaRadio::handle_dio2_irq(void)
1969
1946
switch ( _rf_settings.modem )
1970
1947
{
1971
1948
case MODEM_FSK:
1949
+ _rf_settings.fsk_packet_handler .preamble_detected = 0 ;
1950
+ _rf_settings.fsk_packet_handler .sync_word_detected = 0 ;
1951
+ _rf_settings.fsk_packet_handler .nb_bytes = 0 ;
1952
+ _rf_settings.fsk_packet_handler .size = 0 ;
1953
+
1954
+ // Clear Irqs
1955
+ write_to_register (REG_IRQFLAGS1, RF_IRQFLAGS1_RSSI |
1956
+ RF_IRQFLAGS1_PREAMBLEDETECT |
1957
+ RF_IRQFLAGS1_SYNCADDRESSMATCH |
1958
+ RF_IRQFLAGS1_TIMEOUT);
1959
+
1960
+ write_to_register ( REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN);
1961
+
1962
+ if (_rf_settings.fsk .rx_continuous == true ) {
1963
+ // Continuous mode restart Rx chain
1964
+ write_to_register ( REG_RXCONFIG,
1965
+ read_register (REG_RXCONFIG) |
1966
+ RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK);
1967
+ } else {
1968
+ _rf_settings.state = RF_IDLE;
1969
+ }
1972
1970
1973
- // DIO4 must have been asserted to set preamble_detected to true
1974
- if ( ( _rf_settings.fsk_packet_handler .preamble_detected == 1 ) && ( _rf_settings.fsk_packet_handler .sync_word_detected == 0 ) )
1975
- {
1976
- if (_rf_settings.fsk .rx_continuous == false ) {
1977
- rx_timeout_sync_word.detach ( );
1978
- }
1979
-
1980
- _rf_settings.fsk_packet_handler .sync_word_detected = 1 ;
1981
-
1982
- _rf_settings.fsk_packet_handler .rssi_value = -( read_register ( REG_RSSIVALUE ) >> 1 );
1983
-
1984
- _rf_settings.fsk_packet_handler .afc_value = ( int32_t )( double )( ( ( uint16_t )read_register ( REG_AFCMSB ) << 8 ) |
1985
- ( uint16_t )read_register ( REG_AFCLSB ) ) *
1986
- ( double )FREQ_STEP;
1987
- _rf_settings.fsk_packet_handler .rx_gain = ( read_register ( REG_LNA ) >> 5 ) & 0x07 ;
1971
+ if ((_radio_events != NULL )
1972
+ && (_radio_events->rx_timeout )) {
1973
+ _radio_events->rx_timeout ();
1988
1974
}
1975
+
1989
1976
break ;
1990
1977
case MODEM_LORA:
1991
1978
if ( _rf_settings.lora .freq_hop_on == true )
@@ -2117,8 +2104,6 @@ void SX1272_LoRaRadio::handle_timeout_irq()
2117
2104
else
2118
2105
{
2119
2106
_rf_settings.state = RF_IDLE;
2120
- rx_timeout_sync_word.attach_us (callback (this , &SX1272_LoRaRadio::timeout_irq_isr),
2121
- _rf_settings.fsk .rx_single_timeout * 1e3 );
2122
2107
}
2123
2108
}
2124
2109
0 commit comments