Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SX1272Lib by
Diff: sx1272/sx1272-hal.cpp
- Revision:
- 8:bfdcd5c6ec14
- Parent:
- 6:69d5976b504d
- Child:
- 9:4e1a35fd0ccd
diff -r ea82825968d2 -r bfdcd5c6ec14 sx1272/sx1272-hal.cpp
--- a/sx1272/sx1272-hal.cpp Thu Nov 24 12:22:04 2016 +0000
+++ b/sx1272/sx1272-hal.cpp Wed Nov 30 17:35:51 2016 +0000
@@ -14,6 +14,35 @@
*/
#include "sx1272-hal.h"
+#if defined ( TARGET_MOTE_L152RC )
+/*
+ PD_2=0 PD_2=1
+op PaB rfo rfo
+0 4.6 18.5 27.0
+1 5.6 21.1 28.1
+2 6.7 23.3 29.1
+3 7.7 25.3 30.1
+4 8.8 26.2 30.7
+5 9.8 27.3 31.2
+6 10.7 28.1 31.6
+7 11.7 28.6 32.2
+8 12.8 29.2 32.4
+9 13.7 29.9 32.9
+10 14.7 30.5 33.1
+11 15.6 30.8 33.4
+12 16.4 30.9 33.6
+13 17.1 31.0 33.7
+14 17.8 31.1 33.7
+15 18.4 31.1 33.7
+*/
+// txpow: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+static const uint8_t PaBTable[20] = { 0, 0, 0, 0, 0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15 };
+
+// txpow: 20 21 22 23 24 25 26 27 28 29 30
+static const uint8_t RfoTable[11] = { 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 9 };
+
+#endif
+
const RadioRegisters_t SX1272MB2xAS::RadioRegsInit[] = RADIO_INIT_REGISTERS_VALUE;
SX1272MB2xAS::SX1272MB2xAS( RadioEvents_t *events,
@@ -30,7 +59,7 @@
#if defined ( TARGET_MOTE_L152RC )
RfSwitchCntr1( rfSwitchCntr1 ),
RfSwitchCntr2( rfSwitchCntr2 ),
- PwrAmpCntr( PD_2 )
+ PwrAmpCntr( PD_2 )
#elif defined ( TARGET_MTS_MDOT_F411RE )
TxCtl ( txctl ),
RxCtl ( rxctl )
@@ -181,6 +210,80 @@
//nothing
}
+void SX1272MB2xAS::SetRfTxPower( int8_t power )
+{
+#if defined ( TARGET_MOTE_L152RC )
+ uint8_t paConfig = 0;
+ uint8_t paDac = 0;
+
+ paConfig = Read( REG_PACONFIG );
+ paDac = Read( REG_PADAC );
+
+ if( power > 19 )
+ {
+ paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | RF_PACONFIG_PASELECT_RFO;
+ paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | RfoTable[power - 20];
+ }
+ else
+ {
+ paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | RF_PACONFIG_PASELECT_PABOOST;
+ paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | PaBTable[power];
+ }
+ Write( REG_PACONFIG, paConfig );
+ Write( REG_PADAC, paDac );
+#else
+ paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | GetPaSelect( this->settings.Channel );
+
+ if( ( paConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
+ {
+ if( power > 17 )
+ {
+ paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_ON;
+ }
+ else
+ {
+ paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_OFF;
+ }
+ if( ( paDac & RF_PADAC_20DBM_ON ) == RF_PADAC_20DBM_ON )
+ {
+ if( power < 5 )
+ {
+ power = 5;
+ }
+ if( power > 20 )
+ {
+ power = 20;
+ }
+ paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
+ }
+ else
+ {
+ if( power < 2 )
+ {
+ power = 2;
+ }
+ if( power > 17 )
+ {
+ power = 17;
+ }
+ paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
+ }
+ }
+ else
+ {
+ if( power < -1 )
+ {
+ power = -1;
+ }
+ if( power > 14 )
+ {
+ power = 14;
+ }
+ paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
+ }
+#endif
+}
+
uint8_t SX1272MB2xAS::GetPaSelect( uint32_t channel )
{
if( boardConnected == SX1272MB1DCS || boardConnected == MDOT_F411RE )
@@ -232,18 +335,18 @@
this->PwrAmpCntr = 0;
#elif defined ( TARGET_MTS_MDOT_F411RE )
this->TxCtl = 0;
- this->RxCtl = 0;
+ this->RxCtl = 0;
#else
this->AntSwitch = 0;
#endif
}
-void SX1272MB2xAS::SetAntSw( uint8_t rxTx )
+void SX1272MB2xAS::SetAntSw( uint8_t opMode )
{
-#if defined ( TARGET_MOTE_L152RC )
- switch( this->currentOpMode )
+ switch( opMode )
{
case RFLR_OPMODE_TRANSMITTER:
+#if defined ( TARGET_MOTE_L152RC )
if( ( Read( REG_PACONFIG ) & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
{
this->RfSwitchCntr1 = 1;
@@ -254,47 +357,43 @@
this->RfSwitchCntr1 = 0;
this->RfSwitchCntr2 = 1;
}
+#elif defined ( TARGET_MTS_MDOT_F411RE )
+ /* SKY13350 */
+ this->TxCtl = 1;
+ this->RxCtl = 0;
+#else
+ this->AntSwitch = 1;
+#endif
break;
case RFLR_OPMODE_RECEIVER:
case RFLR_OPMODE_RECEIVER_SINGLE:
case RFLR_OPMODE_CAD:
+#if defined ( TARGET_MOTE_L152RC )
this->RfSwitchCntr1 = 1;
this->RfSwitchCntr2 = 1;
+#elif defined ( TARGET_MTS_MDOT_F411RE )
+ /* SKY13350 */
+ this->TxCtl = 0;
+ this->RxCtl = 1;
+#else
+ this->AntSwitch = 0;
+#endif
+
break;
default:
+#if defined ( TARGET_MOTE_L152RC )
this->RfSwitchCntr1 = 0;
this->RfSwitchCntr2 = 0;
this->PwrAmpCntr = 0;
+#elif defined ( TARGET_MTS_MDOT_F411RE )
+ /* SKY13350 */
+ this->TxCtl = 0;
+ this->RxCtl = 0;
+#else
+ this->AntSwitch = 0;
+#endif
break;
}
-#elif defined ( TARGET_MTS_MDOT_F411RE )
- /* SKY13350 */
- this->rxTx = rxTx;
-
- // 1: Tx, 0: Rx
- if( rxTx != 0 )
- {
- this->TxCtl = 1;
- this->RxCtl = 0;
- }
- else
- {
- this->TxCtl = 0;
- this->RxCtl = 1;
- }
-#else
- this->rxTx = rxTx;
-
- // 1: Tx, 0: Rx
- if( rxTx != 0 )
- {
- this->AntSwitch = 1;
- }
- else
- {
- this->AntSwitch = 0;
- }
-#endif
}
bool SX1272MB2xAS::CheckRfFrequency( uint32_t frequency )
