SX1276GenericLib to support sx1276 bassed LoRa modules, including HopeRF RFM95, Murata CMWX1ZZABZ and Semtech SX1276MB1MAS/SX1276MB1LAS modules

Dependents:   DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_PingPong DISCO-L072CZ-LRWAN1_LoRa_USB_Rx ... more

Fork of SX1276Lib by Semtech

Committer:
Helmut Tschemernjak
Date:
Sun May 07 18:09:10 2017 +0200
Revision:
38:d9189d958db8
Parent:
36:f2b885b6f33e
Child:
39:706c32eda7e7
Migrated typedefs.h into the sx1276 source.
Migrated radio init register values and settings into sx1276.cpp
where it belongs to.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:e6ceb13d2d05 1 /*
GregCr 0:e6ceb13d2d05 2 / _____) _ | |
GregCr 0:e6ceb13d2d05 3 ( (____ _____ ____ _| |_ _____ ____| |__
GregCr 0:e6ceb13d2d05 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
GregCr 0:e6ceb13d2d05 5 _____) ) ____| | | || |_| ____( (___| | | |
GregCr 0:e6ceb13d2d05 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
mluis 22:7f3aab69cca9 7 (C) 2014 Semtech
GregCr 0:e6ceb13d2d05 8
GregCr 0:e6ceb13d2d05 9 Description: -
GregCr 0:e6ceb13d2d05 10
GregCr 0:e6ceb13d2d05 11 License: Revised BSD License, see LICENSE.TXT file include in the project
GregCr 0:e6ceb13d2d05 12
GregCr 0:e6ceb13d2d05 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
GregCr 0:e6ceb13d2d05 14 */
Helmut Tschemernjak 34:07e89f23c734 15
Helmut Tschemernjak 34:07e89f23c734 16 /*
Helmut Tschemernjak 38:d9189d958db8 17 * additional development to make it more generic across multiple OS versions
Helmut Tschemernjak 34:07e89f23c734 18 * (c) 2017 Helmut Tschemernjak
Helmut Tschemernjak 34:07e89f23c734 19 * 30826 Garbsen (Hannover) Germany
Helmut Tschemernjak 34:07e89f23c734 20 */
Helmut Tschemernjak 34:07e89f23c734 21
Helmut64 36:f2b885b6f33e 22 #include "sx1276-mbed-hal.h"
GregCr 0:e6ceb13d2d05 23
Helmut Tschemernjak 38:d9189d958db8 24
GregCr 0:e6ceb13d2d05 25
Helmut Tschemernjak 34:07e89f23c734 26 SX1276Generic::SX1276Generic( RadioEvents_t *events, BoardType_t board,
GregCr 0:e6ceb13d2d05 27 PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
GregCr 0:e6ceb13d2d05 28 PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
Helmut Tschemernjak 34:07e89f23c734 29 PinName antSwitch, PinName antSwitchTX, PinName antSwitchTXBoost, PinName tcxo)
Helmut Tschemernjak 34:07e89f23c734 30 : SX1276( events)
GregCr 0:e6ceb13d2d05 31 {
mluis 21:2e496deb7858 32 this->RadioEvents = events;
Helmut Tschemernjak 34:07e89f23c734 33 boardConnected = board;
Helmut Tschemernjak 34:07e89f23c734 34
Helmut Tschemernjak 34:07e89f23c734 35 _antSwitch = NULL;
Helmut Tschemernjak 34:07e89f23c734 36 _antSwitchTX = NULL;
Helmut Tschemernjak 34:07e89f23c734 37 _antSwitchTXBoost = NULL;
Helmut Tschemernjak 34:07e89f23c734 38
Helmut Tschemernjak 34:07e89f23c734 39 _tcxo = NULL;
Helmut Tschemernjak 34:07e89f23c734 40 if (tcxo != NC)
Helmut Tschemernjak 34:07e89f23c734 41 _tcxo = new DigitalOut(tcxo);
Helmut Tschemernjak 34:07e89f23c734 42
Helmut Tschemernjak 34:07e89f23c734 43 switch(boardConnected) {
Helmut Tschemernjak 34:07e89f23c734 44 case SX1276MB1MAS:
Helmut Tschemernjak 34:07e89f23c734 45 case SX1276MB1LAS:
Helmut Tschemernjak 34:07e89f23c734 46 _antSwitch = new DigitalInOut(antSwitch);
Helmut Tschemernjak 34:07e89f23c734 47 break;
Helmut Tschemernjak 34:07e89f23c734 48 case RFM95_SX1276:
Helmut Tschemernjak 34:07e89f23c734 49 break;
Helmut Tschemernjak 34:07e89f23c734 50 case MURATA_SX1276:
Helmut Tschemernjak 34:07e89f23c734 51 _antSwitch = new DigitalInOut(antSwitch);
Helmut Tschemernjak 34:07e89f23c734 52 _antSwitchTX = new DigitalInOut(antSwitchTX);
Helmut Tschemernjak 34:07e89f23c734 53 _antSwitchTXBoost = new DigitalInOut(antSwitchTXBoost);
Helmut Tschemernjak 34:07e89f23c734 54 break;
Helmut Tschemernjak 34:07e89f23c734 55 default:
Helmut Tschemernjak 34:07e89f23c734 56 break;
Helmut Tschemernjak 34:07e89f23c734 57 }
Helmut Tschemernjak 34:07e89f23c734 58 _spi = new SPI(mosi, miso, sclk );
Helmut Tschemernjak 34:07e89f23c734 59 _nss = new DigitalOut(nss);
Helmut Tschemernjak 34:07e89f23c734 60
Helmut Tschemernjak 34:07e89f23c734 61 _reset = new DigitalInOut(reset);
Helmut Tschemernjak 34:07e89f23c734 62
Helmut Tschemernjak 34:07e89f23c734 63 _dio0 = NULL;
Helmut Tschemernjak 34:07e89f23c734 64 _dio1 = NULL;
Helmut Tschemernjak 34:07e89f23c734 65 _dio2 = NULL;
Helmut Tschemernjak 34:07e89f23c734 66 _dio3 = NULL;
Helmut Tschemernjak 34:07e89f23c734 67 _dio4 = NULL;
Helmut Tschemernjak 34:07e89f23c734 68 _dio5 = NULL;
Helmut Tschemernjak 34:07e89f23c734 69 if (dio0 != NC)
Helmut Tschemernjak 34:07e89f23c734 70 _dio0 = new InterruptIn(dio0);
Helmut Tschemernjak 34:07e89f23c734 71 if (dio1 != NC)
Helmut Tschemernjak 34:07e89f23c734 72 _dio1 = new InterruptIn(dio1);
Helmut Tschemernjak 34:07e89f23c734 73 if (dio2 != NC)
Helmut Tschemernjak 34:07e89f23c734 74 _dio2 = new InterruptIn(dio2);
Helmut Tschemernjak 34:07e89f23c734 75 if (dio3 != NC)
Helmut Tschemernjak 34:07e89f23c734 76 _dio3 = new InterruptIn(dio3);
Helmut Tschemernjak 34:07e89f23c734 77 if (dio4 != NC)
Helmut Tschemernjak 34:07e89f23c734 78 _dio4 = new InterruptIn(dio4);
Helmut Tschemernjak 34:07e89f23c734 79 if (dio5 != NC)
Helmut Tschemernjak 34:07e89f23c734 80 _dio5 = new DigitalIn(dio5);
Helmut Tschemernjak 34:07e89f23c734 81
GregCr 0:e6ceb13d2d05 82 Reset( );
mluis 25:3778e6204cc1 83
GregCr 0:e6ceb13d2d05 84 IoInit( );
mluis 25:3778e6204cc1 85
Helmut Tschemernjak 34:07e89f23c734 86 RxChainCalibration( );
Helmut Tschemernjak 34:07e89f23c734 87
GregCr 0:e6ceb13d2d05 88 SetOpMode( RF_OPMODE_SLEEP );
mluis 25:3778e6204cc1 89
GregCr 0:e6ceb13d2d05 90 IoIrqInit( dioIrq );
mluis 25:3778e6204cc1 91
GregCr 0:e6ceb13d2d05 92 RadioRegistersInit( );
GregCr 0:e6ceb13d2d05 93
GregCr 0:e6ceb13d2d05 94 SetModem( MODEM_FSK );
GregCr 0:e6ceb13d2d05 95
mluis 21:2e496deb7858 96 this->settings.State = RF_IDLE ;
GregCr 0:e6ceb13d2d05 97 }
GregCr 0:e6ceb13d2d05 98
Helmut Tschemernjak 34:07e89f23c734 99 SX1276Generic::~SX1276Generic()
GregCr 0:e6ceb13d2d05 100 {
Helmut Tschemernjak 34:07e89f23c734 101 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 102 delete _antSwitch;
Helmut Tschemernjak 34:07e89f23c734 103 if (_antSwitchTX)
Helmut Tschemernjak 34:07e89f23c734 104 delete _antSwitchTX;
Helmut Tschemernjak 34:07e89f23c734 105 if (_antSwitchTXBoost)
Helmut Tschemernjak 34:07e89f23c734 106 delete _antSwitchTXBoost;
Helmut Tschemernjak 34:07e89f23c734 107
Helmut Tschemernjak 34:07e89f23c734 108 if (_tcxo) {
Helmut Tschemernjak 34:07e89f23c734 109 *_tcxo = 0;
Helmut Tschemernjak 34:07e89f23c734 110 delete (_tcxo);
Helmut Tschemernjak 34:07e89f23c734 111 }
Helmut Tschemernjak 34:07e89f23c734 112 delete _reset;
Helmut Tschemernjak 34:07e89f23c734 113 delete _spi;
Helmut Tschemernjak 34:07e89f23c734 114 delete _nss;
Helmut Tschemernjak 34:07e89f23c734 115
Helmut Tschemernjak 34:07e89f23c734 116 if (_dio0)
Helmut Tschemernjak 34:07e89f23c734 117 delete _dio0;
Helmut Tschemernjak 34:07e89f23c734 118 if (_dio1)
Helmut Tschemernjak 34:07e89f23c734 119 delete _dio1;
Helmut Tschemernjak 34:07e89f23c734 120 if (_dio2)
Helmut Tschemernjak 34:07e89f23c734 121 delete _dio2;
Helmut Tschemernjak 34:07e89f23c734 122 if (_dio3)
Helmut Tschemernjak 34:07e89f23c734 123 delete _dio3;
Helmut Tschemernjak 34:07e89f23c734 124 if (_dio4)
Helmut Tschemernjak 34:07e89f23c734 125 delete _dio4;
Helmut Tschemernjak 34:07e89f23c734 126 if (_dio5)
Helmut Tschemernjak 34:07e89f23c734 127 delete _dio5;
GregCr 0:e6ceb13d2d05 128 }
GregCr 0:e6ceb13d2d05 129
Helmut Tschemernjak 38:d9189d958db8 130
GregCr 0:e6ceb13d2d05 131 //-------------------------------------------------------------------------
GregCr 0:e6ceb13d2d05 132 // Board relative functions
GregCr 0:e6ceb13d2d05 133 //-------------------------------------------------------------------------
Helmut Tschemernjak 34:07e89f23c734 134 uint8_t SX1276Generic::DetectBoardType( void )
GregCr 1:f979673946c0 135 {
Helmut Tschemernjak 34:07e89f23c734 136 return boardConnected;
GregCr 1:f979673946c0 137 }
GregCr 0:e6ceb13d2d05 138
Helmut Tschemernjak 34:07e89f23c734 139 void SX1276Generic::IoInit( void )
GregCr 0:e6ceb13d2d05 140 {
Helmut Tschemernjak 34:07e89f23c734 141 if (_tcxo)
Helmut Tschemernjak 34:07e89f23c734 142 *_tcxo = 1;
GregCr 0:e6ceb13d2d05 143 AntSwInit( );
GregCr 0:e6ceb13d2d05 144 SpiInit( );
GregCr 0:e6ceb13d2d05 145 }
GregCr 0:e6ceb13d2d05 146
GregCr 0:e6ceb13d2d05 147
Helmut Tschemernjak 34:07e89f23c734 148 void SX1276Generic::SpiInit( void )
GregCr 0:e6ceb13d2d05 149 {
Helmut Tschemernjak 34:07e89f23c734 150 *_nss = 1;
Helmut Tschemernjak 34:07e89f23c734 151 _spi->format( 8,0 );
GregCr 0:e6ceb13d2d05 152 uint32_t frequencyToSet = 8000000;
Helmut Tschemernjak 34:07e89f23c734 153 #ifdef TARGET_KL25Z //busclock frequency is halved -> double the spi frequency to compensate
Helmut Tschemernjak 34:07e89f23c734 154 _spi->frequency( frequencyToSet * 2 );
Helmut Tschemernjak 34:07e89f23c734 155 #else
Helmut Tschemernjak 34:07e89f23c734 156 _spi->frequency( frequencyToSet );
Helmut Tschemernjak 34:07e89f23c734 157 #endif
Helmut Tschemernjak 34:07e89f23c734 158 wait_ms(100);
GregCr 0:e6ceb13d2d05 159 }
GregCr 0:e6ceb13d2d05 160
Helmut Tschemernjak 34:07e89f23c734 161 void SX1276Generic::IoIrqInit( DioIrqHandler *irqHandlers )
GregCr 0:e6ceb13d2d05 162 {
mluis 25:3778e6204cc1 163 #if( defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_LPC11U6X ) )
mluis 25:3778e6204cc1 164 dio0.mode( PullDown );
mluis 25:3778e6204cc1 165 dio1.mode( PullDown );
mluis 25:3778e6204cc1 166 dio2.mode( PullDown );
mluis 25:3778e6204cc1 167 dio3.mode( PullDown );
mluis 25:3778e6204cc1 168 dio4.mode( PullDown );
mluis 22:7f3aab69cca9 169 #endif
Helmut Tschemernjak 34:07e89f23c734 170 if (_dio0)
Helmut Tschemernjak 34:07e89f23c734 171 _dio0->rise(callback(this, static_cast< TriggerMB1xAS > ( irqHandlers[0] )));
Helmut Tschemernjak 34:07e89f23c734 172 if (_dio1)
Helmut Tschemernjak 34:07e89f23c734 173 _dio1->rise(callback(this, static_cast< TriggerMB1xAS > ( irqHandlers[1] )));
Helmut Tschemernjak 34:07e89f23c734 174 if (_dio2)
Helmut Tschemernjak 34:07e89f23c734 175 _dio2->rise(callback(this, static_cast< TriggerMB1xAS > ( irqHandlers[2] )));
Helmut Tschemernjak 34:07e89f23c734 176 if (_dio3)
Helmut Tschemernjak 34:07e89f23c734 177 _dio3->rise(callback(this, static_cast< TriggerMB1xAS > ( irqHandlers[3] )));
Helmut Tschemernjak 34:07e89f23c734 178 if (_dio4)
Helmut Tschemernjak 34:07e89f23c734 179 _dio4->rise(callback(this, static_cast< TriggerMB1xAS > ( irqHandlers[4] )));
GregCr 0:e6ceb13d2d05 180 }
GregCr 0:e6ceb13d2d05 181
Helmut Tschemernjak 34:07e89f23c734 182 void SX1276Generic::IoDeInit( void )
GregCr 0:e6ceb13d2d05 183 {
GregCr 0:e6ceb13d2d05 184 //nothing
GregCr 0:e6ceb13d2d05 185 }
GregCr 0:e6ceb13d2d05 186
Helmut Tschemernjak 34:07e89f23c734 187 void SX1276Generic::SetRfTxPower( int8_t power )
Helmut Tschemernjak 31:e50929bd3f32 188 {
Helmut Tschemernjak 31:e50929bd3f32 189 uint8_t paConfig = 0;
Helmut Tschemernjak 31:e50929bd3f32 190 uint8_t paDac = 0;
Helmut Tschemernjak 31:e50929bd3f32 191
Helmut Tschemernjak 31:e50929bd3f32 192 paConfig = Read( REG_PACONFIG );
Helmut Tschemernjak 31:e50929bd3f32 193 paDac = Read( REG_PADAC );
Helmut Tschemernjak 31:e50929bd3f32 194
Helmut Tschemernjak 31:e50929bd3f32 195 paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | GetPaSelect( this->settings.Channel );
Helmut Tschemernjak 31:e50929bd3f32 196 paConfig = ( paConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
Helmut Tschemernjak 31:e50929bd3f32 197
Helmut Tschemernjak 31:e50929bd3f32 198 if( ( paConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
Helmut Tschemernjak 31:e50929bd3f32 199 {
Helmut Tschemernjak 31:e50929bd3f32 200 if( power > 17 )
Helmut Tschemernjak 31:e50929bd3f32 201 {
Helmut Tschemernjak 31:e50929bd3f32 202 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_ON;
Helmut Tschemernjak 31:e50929bd3f32 203 }
Helmut Tschemernjak 31:e50929bd3f32 204 else
Helmut Tschemernjak 31:e50929bd3f32 205 {
Helmut Tschemernjak 31:e50929bd3f32 206 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_OFF;
Helmut Tschemernjak 31:e50929bd3f32 207 }
Helmut Tschemernjak 31:e50929bd3f32 208 if( ( paDac & RF_PADAC_20DBM_ON ) == RF_PADAC_20DBM_ON )
Helmut Tschemernjak 31:e50929bd3f32 209 {
Helmut Tschemernjak 31:e50929bd3f32 210 if( power < 5 )
Helmut Tschemernjak 31:e50929bd3f32 211 {
Helmut Tschemernjak 31:e50929bd3f32 212 power = 5;
Helmut Tschemernjak 31:e50929bd3f32 213 }
Helmut Tschemernjak 31:e50929bd3f32 214 if( power > 20 )
Helmut Tschemernjak 31:e50929bd3f32 215 {
Helmut Tschemernjak 31:e50929bd3f32 216 power = 20;
Helmut Tschemernjak 31:e50929bd3f32 217 }
Helmut Tschemernjak 31:e50929bd3f32 218 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
Helmut Tschemernjak 31:e50929bd3f32 219 }
Helmut Tschemernjak 31:e50929bd3f32 220 else
Helmut Tschemernjak 31:e50929bd3f32 221 {
Helmut Tschemernjak 31:e50929bd3f32 222 if( power < 2 )
Helmut Tschemernjak 31:e50929bd3f32 223 {
Helmut Tschemernjak 31:e50929bd3f32 224 power = 2;
Helmut Tschemernjak 31:e50929bd3f32 225 }
Helmut Tschemernjak 31:e50929bd3f32 226 if( power > 17 )
Helmut Tschemernjak 31:e50929bd3f32 227 {
Helmut Tschemernjak 31:e50929bd3f32 228 power = 17;
Helmut Tschemernjak 31:e50929bd3f32 229 }
Helmut Tschemernjak 31:e50929bd3f32 230 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
Helmut Tschemernjak 31:e50929bd3f32 231 }
Helmut Tschemernjak 31:e50929bd3f32 232 }
Helmut Tschemernjak 31:e50929bd3f32 233 else
Helmut Tschemernjak 31:e50929bd3f32 234 {
Helmut Tschemernjak 31:e50929bd3f32 235 if( power < -1 )
Helmut Tschemernjak 31:e50929bd3f32 236 {
Helmut Tschemernjak 31:e50929bd3f32 237 power = -1;
Helmut Tschemernjak 31:e50929bd3f32 238 }
Helmut Tschemernjak 31:e50929bd3f32 239 if( power > 14 )
Helmut Tschemernjak 31:e50929bd3f32 240 {
Helmut Tschemernjak 31:e50929bd3f32 241 power = 14;
Helmut Tschemernjak 31:e50929bd3f32 242 }
Helmut Tschemernjak 31:e50929bd3f32 243 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
Helmut Tschemernjak 31:e50929bd3f32 244 }
Helmut Tschemernjak 31:e50929bd3f32 245 Write( REG_PACONFIG, paConfig );
Helmut Tschemernjak 31:e50929bd3f32 246 Write( REG_PADAC, paDac );
Helmut Tschemernjak 31:e50929bd3f32 247 }
Helmut Tschemernjak 31:e50929bd3f32 248
Helmut Tschemernjak 31:e50929bd3f32 249
Helmut Tschemernjak 34:07e89f23c734 250 uint8_t SX1276Generic::GetPaSelect( uint32_t channel )
GregCr 0:e6ceb13d2d05 251 {
GregCr 0:e6ceb13d2d05 252 if( channel > RF_MID_BAND_THRESH )
GregCr 0:e6ceb13d2d05 253 {
Helmut Tschemernjak 34:07e89f23c734 254 if( boardConnected == SX1276MB1LAS || boardConnected == RFM95_SX1276)
GregCr 1:f979673946c0 255 {
GregCr 1:f979673946c0 256 return RF_PACONFIG_PASELECT_PABOOST;
GregCr 1:f979673946c0 257 }
GregCr 1:f979673946c0 258 else
GregCr 1:f979673946c0 259 {
GregCr 1:f979673946c0 260 return RF_PACONFIG_PASELECT_RFO;
GregCr 1:f979673946c0 261 }
GregCr 0:e6ceb13d2d05 262 }
GregCr 0:e6ceb13d2d05 263 else
GregCr 0:e6ceb13d2d05 264 {
GregCr 0:e6ceb13d2d05 265 return RF_PACONFIG_PASELECT_RFO;
GregCr 0:e6ceb13d2d05 266 }
GregCr 0:e6ceb13d2d05 267 }
GregCr 0:e6ceb13d2d05 268
Helmut Tschemernjak 34:07e89f23c734 269 void SX1276Generic::SetAntSwLowPower( bool status )
GregCr 0:e6ceb13d2d05 270 {
GregCr 0:e6ceb13d2d05 271 if( isRadioActive != status )
GregCr 0:e6ceb13d2d05 272 {
GregCr 0:e6ceb13d2d05 273 isRadioActive = status;
GregCr 0:e6ceb13d2d05 274
GregCr 0:e6ceb13d2d05 275 if( status == false )
GregCr 0:e6ceb13d2d05 276 {
GregCr 0:e6ceb13d2d05 277 AntSwInit( );
GregCr 0:e6ceb13d2d05 278 }
GregCr 0:e6ceb13d2d05 279 else
GregCr 0:e6ceb13d2d05 280 {
GregCr 0:e6ceb13d2d05 281 AntSwDeInit( );
GregCr 0:e6ceb13d2d05 282 }
GregCr 0:e6ceb13d2d05 283 }
GregCr 0:e6ceb13d2d05 284 }
GregCr 0:e6ceb13d2d05 285
Helmut Tschemernjak 34:07e89f23c734 286 void SX1276Generic::AntSwInit( void )
GregCr 0:e6ceb13d2d05 287 {
Helmut Tschemernjak 34:07e89f23c734 288 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 289 *_antSwitch = 0;
Helmut Tschemernjak 34:07e89f23c734 290 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 34:07e89f23c734 291 *_antSwitchTX = 0;
Helmut Tschemernjak 34:07e89f23c734 292 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 34:07e89f23c734 293 }
GregCr 0:e6ceb13d2d05 294 }
GregCr 0:e6ceb13d2d05 295
Helmut Tschemernjak 34:07e89f23c734 296 void SX1276Generic::AntSwDeInit( void )
GregCr 0:e6ceb13d2d05 297 {
Helmut Tschemernjak 34:07e89f23c734 298 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 299 *_antSwitch = 0;
Helmut Tschemernjak 34:07e89f23c734 300 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 34:07e89f23c734 301 *_antSwitchTX = 0;
Helmut Tschemernjak 34:07e89f23c734 302 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 34:07e89f23c734 303 }
GregCr 0:e6ceb13d2d05 304 }
GregCr 0:e6ceb13d2d05 305
Helmut Tschemernjak 31:e50929bd3f32 306
Helmut Tschemernjak 34:07e89f23c734 307 void SX1276Generic::SetAntSw( uint8_t opMode )
GregCr 0:e6ceb13d2d05 308 {
Helmut Tschemernjak 31:e50929bd3f32 309 switch( opMode )
GregCr 0:e6ceb13d2d05 310 {
Helmut Tschemernjak 31:e50929bd3f32 311 case RFLR_OPMODE_TRANSMITTER:
Helmut Tschemernjak 34:07e89f23c734 312 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 34:07e89f23c734 313 *_antSwitch = 0;// Murata-RX
Helmut Tschemernjak 34:07e89f23c734 314 *_antSwitchTX = 1; // alternate: antSwitchTXBoost = 1
Helmut Tschemernjak 35:c278a826a8e2 315 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 35:c278a826a8e2 316 } else {
Helmut Tschemernjak 34:07e89f23c734 317 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 318 *_antSwitch = 1;
Helmut Tschemernjak 34:07e89f23c734 319 }
Helmut Tschemernjak 31:e50929bd3f32 320 break;
Helmut Tschemernjak 31:e50929bd3f32 321 case RFLR_OPMODE_RECEIVER:
Helmut Tschemernjak 31:e50929bd3f32 322 case RFLR_OPMODE_RECEIVER_SINGLE:
Helmut Tschemernjak 31:e50929bd3f32 323 case RFLR_OPMODE_CAD:
Helmut Tschemernjak 34:07e89f23c734 324 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 34:07e89f23c734 325 *_antSwitch = 1; // Murata-RX
Helmut Tschemernjak 34:07e89f23c734 326 *_antSwitchTX = 0;
Helmut Tschemernjak 34:07e89f23c734 327 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 34:07e89f23c734 328 } else {
Helmut Tschemernjak 34:07e89f23c734 329 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 330 _antSwitch = 0;
Helmut Tschemernjak 34:07e89f23c734 331 }
Helmut Tschemernjak 31:e50929bd3f32 332 break;
Helmut Tschemernjak 31:e50929bd3f32 333 default:
Helmut Tschemernjak 34:07e89f23c734 334 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 34:07e89f23c734 335 *_antSwitch = 0; //Murata-RX
Helmut Tschemernjak 34:07e89f23c734 336 *_antSwitchTX = 0;
Helmut Tschemernjak 34:07e89f23c734 337 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 34:07e89f23c734 338 } else {
Helmut Tschemernjak 34:07e89f23c734 339 if (_antSwitch)
Helmut Tschemernjak 34:07e89f23c734 340 *_antSwitch = 0;
Helmut Tschemernjak 34:07e89f23c734 341 }
Helmut Tschemernjak 31:e50929bd3f32 342 break;
GregCr 0:e6ceb13d2d05 343 }
GregCr 0:e6ceb13d2d05 344 }
GregCr 0:e6ceb13d2d05 345
Helmut Tschemernjak 38:d9189d958db8 346 void SX1276Generic::SetTimeout(Timeout_t timer, int timeout_ms)
Helmut Tschemernjak 38:d9189d958db8 347 {
Helmut Tschemernjak 38:d9189d958db8 348
Helmut Tschemernjak 38:d9189d958db8 349 }
Helmut Tschemernjak 38:d9189d958db8 350
Helmut Tschemernjak 34:07e89f23c734 351 bool SX1276Generic::CheckRfFrequency( uint32_t frequency )
GregCr 0:e6ceb13d2d05 352 {
Helmut Tschemernjak 31:e50929bd3f32 353 // Implement check. Currently all frequencies are supported
GregCr 0:e6ceb13d2d05 354 return true;
GregCr 0:e6ceb13d2d05 355 }
GregCr 0:e6ceb13d2d05 356
Helmut Tschemernjak 34:07e89f23c734 357 void SX1276Generic::Reset( void )
GregCr 0:e6ceb13d2d05 358 {
Helmut Tschemernjak 34:07e89f23c734 359 _reset->output();
Helmut Tschemernjak 34:07e89f23c734 360 *_reset = 0;
Helmut Tschemernjak 31:e50929bd3f32 361 wait_ms( 1 );
Helmut Tschemernjak 34:07e89f23c734 362 *_reset = 1;
Helmut Tschemernjak 34:07e89f23c734 363 _reset->input(); // I don't know my input again, maybe to save power (Helmut T)
Helmut Tschemernjak 31:e50929bd3f32 364 wait_ms( 6 );
GregCr 0:e6ceb13d2d05 365 }
Helmut Tschemernjak 31:e50929bd3f32 366
Helmut Tschemernjak 34:07e89f23c734 367 void SX1276Generic::Write( uint8_t addr, uint8_t data )
GregCr 0:e6ceb13d2d05 368 {
GregCr 0:e6ceb13d2d05 369 Write( addr, &data, 1 );
GregCr 0:e6ceb13d2d05 370 }
GregCr 0:e6ceb13d2d05 371
Helmut Tschemernjak 34:07e89f23c734 372 uint8_t SX1276Generic::Read( uint8_t addr )
GregCr 0:e6ceb13d2d05 373 {
GregCr 0:e6ceb13d2d05 374 uint8_t data;
GregCr 0:e6ceb13d2d05 375 Read( addr, &data, 1 );
GregCr 0:e6ceb13d2d05 376 return data;
GregCr 0:e6ceb13d2d05 377 }
GregCr 0:e6ceb13d2d05 378
Helmut Tschemernjak 34:07e89f23c734 379 void SX1276Generic::Write( uint8_t addr, uint8_t *buffer, uint8_t size )
GregCr 0:e6ceb13d2d05 380 {
GregCr 0:e6ceb13d2d05 381 uint8_t i;
GregCr 0:e6ceb13d2d05 382
Helmut Tschemernjak 34:07e89f23c734 383 *_nss = 0; // what about SPI hold/release timing on fast MCUs? Helmut
Helmut Tschemernjak 34:07e89f23c734 384 _spi->write( addr | 0x80 );
GregCr 0:e6ceb13d2d05 385 for( i = 0; i < size; i++ )
GregCr 0:e6ceb13d2d05 386 {
Helmut Tschemernjak 34:07e89f23c734 387 _spi->write( buffer[i] );
GregCr 0:e6ceb13d2d05 388 }
Helmut Tschemernjak 34:07e89f23c734 389 *_nss = 1;
GregCr 0:e6ceb13d2d05 390 }
GregCr 0:e6ceb13d2d05 391
Helmut Tschemernjak 34:07e89f23c734 392 void SX1276Generic::Read( uint8_t addr, uint8_t *buffer, uint8_t size )
GregCr 0:e6ceb13d2d05 393 {
GregCr 0:e6ceb13d2d05 394 uint8_t i;
GregCr 0:e6ceb13d2d05 395
Helmut Tschemernjak 34:07e89f23c734 396 *_nss = 0; // what about SPI hold/release timing on fast MCUs? Helmut
Helmut Tschemernjak 34:07e89f23c734 397 _spi->write( addr & 0x7F );
GregCr 0:e6ceb13d2d05 398 for( i = 0; i < size; i++ )
GregCr 0:e6ceb13d2d05 399 {
Helmut Tschemernjak 34:07e89f23c734 400 buffer[i] = _spi->write( 0 );
GregCr 0:e6ceb13d2d05 401 }
Helmut Tschemernjak 34:07e89f23c734 402 *_nss = 1;
GregCr 0:e6ceb13d2d05 403 }
GregCr 0:e6ceb13d2d05 404
Helmut Tschemernjak 34:07e89f23c734 405 void SX1276Generic::WriteFifo( uint8_t *buffer, uint8_t size )
GregCr 0:e6ceb13d2d05 406 {
GregCr 0:e6ceb13d2d05 407 Write( 0, buffer, size );
GregCr 0:e6ceb13d2d05 408 }
GregCr 0:e6ceb13d2d05 409
Helmut Tschemernjak 34:07e89f23c734 410 void SX1276Generic::ReadFifo( uint8_t *buffer, uint8_t size )
GregCr 0:e6ceb13d2d05 411 {
GregCr 0:e6ceb13d2d05 412 Read( 0, buffer, size );
GregCr 0:e6ceb13d2d05 413 }