test

Dependents:   Telemetria_RX_SD_GPS_copy Telemetria_RX_SD_GPS Telemetria_TX Telemetria_TX ... more

Committer:
Helmut Tschemernjak
Date:
Thu May 18 11:07:46 2017 +0200
Revision:
52:4d304485eda0
Parent:
46:e78a1d0391ac
Child:
53:6d3adad59633
Added the void * changes into the Arduino HAL version

Who changed what in which revision?

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