test

Dependents:   Telemetria_RX_SD_GPS_copy Telemetria_RX_SD_GPS Telemetria_TX Telemetria_TX ... more

Committer:
Helmut Tschemernjak
Date:
Thu May 25 21:56:39 2017 +0200
Revision:
58:113d2ef978d2
Parent:
53:6d3adad59633
Child:
61:08b50780eb91
Removed duplicate timer definitions (left over from previous cleanup)
zapping the receive buffer makes no sense, keeping the content is better
and allows coping the data while we are receiving the next packet.
The State = RF_IDLE is already done in the sx1276 constructor,
no need to do it in the HAL layer.

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
Helmut Tschemernjak 46:e78a1d0391ac 98 SX1276Generic::~SX1276Generic()
Helmut Tschemernjak 46:e78a1d0391ac 99 {
Helmut Tschemernjak 46:e78a1d0391ac 100 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 101 delete _antSwitch;
Helmut Tschemernjak 46:e78a1d0391ac 102 if (_antSwitchTX)
Helmut Tschemernjak 46:e78a1d0391ac 103 delete _antSwitchTX;
Helmut Tschemernjak 46:e78a1d0391ac 104 if (_antSwitchTXBoost)
Helmut Tschemernjak 46:e78a1d0391ac 105 delete _antSwitchTXBoost;
Helmut Tschemernjak 46:e78a1d0391ac 106
Helmut Tschemernjak 46:e78a1d0391ac 107 if (_tcxo) {
Helmut Tschemernjak 46:e78a1d0391ac 108 *_tcxo = 0;
Helmut Tschemernjak 46:e78a1d0391ac 109 delete (_tcxo);
Helmut Tschemernjak 46:e78a1d0391ac 110 }
Helmut Tschemernjak 46:e78a1d0391ac 111 delete _reset;
Helmut Tschemernjak 46:e78a1d0391ac 112 delete _spi;
Helmut Tschemernjak 46:e78a1d0391ac 113 delete _nss;
Helmut Tschemernjak 46:e78a1d0391ac 114
Helmut Tschemernjak 46:e78a1d0391ac 115 if (_dio0)
Helmut Tschemernjak 46:e78a1d0391ac 116 delete _dio0;
Helmut Tschemernjak 46:e78a1d0391ac 117 if (_dio1)
Helmut Tschemernjak 46:e78a1d0391ac 118 delete _dio1;
Helmut Tschemernjak 46:e78a1d0391ac 119 if (_dio2)
Helmut Tschemernjak 46:e78a1d0391ac 120 delete _dio2;
Helmut Tschemernjak 46:e78a1d0391ac 121 if (_dio3)
Helmut Tschemernjak 46:e78a1d0391ac 122 delete _dio3;
Helmut Tschemernjak 46:e78a1d0391ac 123 if (_dio4)
Helmut Tschemernjak 46:e78a1d0391ac 124 delete _dio4;
Helmut Tschemernjak 46:e78a1d0391ac 125 if (_dio5)
Helmut Tschemernjak 46:e78a1d0391ac 126 delete _dio5;
Helmut Tschemernjak 46:e78a1d0391ac 127 }
Helmut Tschemernjak 46:e78a1d0391ac 128
Helmut Tschemernjak 46:e78a1d0391ac 129
Helmut Tschemernjak 46:e78a1d0391ac 130 //-------------------------------------------------------------------------
Helmut Tschemernjak 46:e78a1d0391ac 131 // Board relative functions
Helmut Tschemernjak 46:e78a1d0391ac 132 //-------------------------------------------------------------------------
Helmut Tschemernjak 46:e78a1d0391ac 133 uint8_t SX1276Generic::DetectBoardType( void )
Helmut Tschemernjak 46:e78a1d0391ac 134 {
Helmut Tschemernjak 46:e78a1d0391ac 135 return boardConnected;
Helmut Tschemernjak 46:e78a1d0391ac 136 }
Helmut Tschemernjak 46:e78a1d0391ac 137
Helmut Tschemernjak 46:e78a1d0391ac 138 void SX1276Generic::IoInit( void )
Helmut Tschemernjak 46:e78a1d0391ac 139 {
Helmut Tschemernjak 46:e78a1d0391ac 140 if (_tcxo)
Helmut Tschemernjak 46:e78a1d0391ac 141 *_tcxo = 1;
Helmut Tschemernjak 46:e78a1d0391ac 142 AntSwInit( );
Helmut Tschemernjak 46:e78a1d0391ac 143 SpiInit( );
Helmut Tschemernjak 46:e78a1d0391ac 144 }
Helmut Tschemernjak 46:e78a1d0391ac 145
Helmut Tschemernjak 46:e78a1d0391ac 146
Helmut Tschemernjak 46:e78a1d0391ac 147 void SX1276Generic::SpiInit( void )
Helmut Tschemernjak 46:e78a1d0391ac 148 {
Helmut Tschemernjak 46:e78a1d0391ac 149 *_nss = 1;
Helmut Tschemernjak 46:e78a1d0391ac 150 _spi->format( 8,0 );
Helmut Tschemernjak 46:e78a1d0391ac 151 uint32_t frequencyToSet = 8000000;
Helmut Tschemernjak 46:e78a1d0391ac 152 _spi->frequency( frequencyToSet );
Helmut Tschemernjak 46:e78a1d0391ac 153 wait_ms(100);
Helmut Tschemernjak 46:e78a1d0391ac 154 }
Helmut Tschemernjak 46:e78a1d0391ac 155
Helmut Tschemernjak 46:e78a1d0391ac 156 void SX1276Generic::IoIrqInit( DioIrqHandler *irqHandlers )
Helmut Tschemernjak 46:e78a1d0391ac 157 {
Helmut Tschemernjak 46:e78a1d0391ac 158 if (_dio0)
Helmut Tschemernjak 46:e78a1d0391ac 159 _dio0->rise(callback(this, static_cast< Trigger > ( irqHandlers[0] )));
Helmut Tschemernjak 46:e78a1d0391ac 160 if (_dio1)
Helmut Tschemernjak 46:e78a1d0391ac 161 _dio1->rise(callback(this, static_cast< Trigger > ( irqHandlers[1] )));
Helmut Tschemernjak 46:e78a1d0391ac 162 if (_dio2)
Helmut Tschemernjak 46:e78a1d0391ac 163 _dio2->rise(callback(this, static_cast< Trigger > ( irqHandlers[2] )));
Helmut Tschemernjak 46:e78a1d0391ac 164 if (_dio3)
Helmut Tschemernjak 46:e78a1d0391ac 165 _dio3->rise(callback(this, static_cast< Trigger > ( irqHandlers[3] )));
Helmut Tschemernjak 46:e78a1d0391ac 166 if (_dio4)
Helmut Tschemernjak 46:e78a1d0391ac 167 _dio4->rise(callback(this, static_cast< Trigger > ( irqHandlers[4] )));
Helmut Tschemernjak 46:e78a1d0391ac 168 }
Helmut Tschemernjak 46:e78a1d0391ac 169
Helmut Tschemernjak 46:e78a1d0391ac 170 void SX1276Generic::IoDeInit( void )
Helmut Tschemernjak 46:e78a1d0391ac 171 {
Helmut Tschemernjak 46:e78a1d0391ac 172 //nothing
Helmut Tschemernjak 46:e78a1d0391ac 173 }
Helmut Tschemernjak 46:e78a1d0391ac 174
Helmut Tschemernjak 46:e78a1d0391ac 175 void SX1276Generic::SetRfTxPower( int8_t power )
Helmut Tschemernjak 46:e78a1d0391ac 176 {
Helmut Tschemernjak 46:e78a1d0391ac 177 uint8_t paConfig = 0;
Helmut Tschemernjak 46:e78a1d0391ac 178 uint8_t paDac = 0;
Helmut Tschemernjak 46:e78a1d0391ac 179
Helmut Tschemernjak 46:e78a1d0391ac 180 paConfig = Read( REG_PACONFIG );
Helmut Tschemernjak 46:e78a1d0391ac 181 paDac = Read( REG_PADAC );
Helmut Tschemernjak 46:e78a1d0391ac 182
Helmut Tschemernjak 46:e78a1d0391ac 183 paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | GetPaSelect( this->settings.Channel );
Helmut Tschemernjak 46:e78a1d0391ac 184 paConfig = ( paConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
Helmut Tschemernjak 46:e78a1d0391ac 185
Helmut Tschemernjak 46:e78a1d0391ac 186 if( ( paConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
Helmut Tschemernjak 46:e78a1d0391ac 187 {
Helmut Tschemernjak 46:e78a1d0391ac 188 if( power > 17 )
Helmut Tschemernjak 46:e78a1d0391ac 189 {
Helmut Tschemernjak 46:e78a1d0391ac 190 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_ON;
Helmut Tschemernjak 46:e78a1d0391ac 191 }
Helmut Tschemernjak 46:e78a1d0391ac 192 else
Helmut Tschemernjak 46:e78a1d0391ac 193 {
Helmut Tschemernjak 46:e78a1d0391ac 194 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_OFF;
Helmut Tschemernjak 46:e78a1d0391ac 195 }
Helmut Tschemernjak 46:e78a1d0391ac 196 if( ( paDac & RF_PADAC_20DBM_ON ) == RF_PADAC_20DBM_ON )
Helmut Tschemernjak 46:e78a1d0391ac 197 {
Helmut Tschemernjak 46:e78a1d0391ac 198 if( power < 5 )
Helmut Tschemernjak 46:e78a1d0391ac 199 {
Helmut Tschemernjak 46:e78a1d0391ac 200 power = 5;
Helmut Tschemernjak 46:e78a1d0391ac 201 }
Helmut Tschemernjak 46:e78a1d0391ac 202 if( power > 20 )
Helmut Tschemernjak 46:e78a1d0391ac 203 {
Helmut Tschemernjak 46:e78a1d0391ac 204 power = 20;
Helmut Tschemernjak 46:e78a1d0391ac 205 }
Helmut Tschemernjak 46:e78a1d0391ac 206 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
Helmut Tschemernjak 46:e78a1d0391ac 207 }
Helmut Tschemernjak 46:e78a1d0391ac 208 else
Helmut Tschemernjak 46:e78a1d0391ac 209 {
Helmut Tschemernjak 46:e78a1d0391ac 210 if( power < 2 )
Helmut Tschemernjak 46:e78a1d0391ac 211 {
Helmut Tschemernjak 46:e78a1d0391ac 212 power = 2;
Helmut Tschemernjak 46:e78a1d0391ac 213 }
Helmut Tschemernjak 46:e78a1d0391ac 214 if( power > 17 )
Helmut Tschemernjak 46:e78a1d0391ac 215 {
Helmut Tschemernjak 46:e78a1d0391ac 216 power = 17;
Helmut Tschemernjak 46:e78a1d0391ac 217 }
Helmut Tschemernjak 46:e78a1d0391ac 218 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
Helmut Tschemernjak 46:e78a1d0391ac 219 }
Helmut Tschemernjak 46:e78a1d0391ac 220 }
Helmut Tschemernjak 46:e78a1d0391ac 221 else
Helmut Tschemernjak 46:e78a1d0391ac 222 {
Helmut Tschemernjak 46:e78a1d0391ac 223 if( power < -1 )
Helmut Tschemernjak 46:e78a1d0391ac 224 {
Helmut Tschemernjak 46:e78a1d0391ac 225 power = -1;
Helmut Tschemernjak 46:e78a1d0391ac 226 }
Helmut Tschemernjak 46:e78a1d0391ac 227 if( power > 14 )
Helmut Tschemernjak 46:e78a1d0391ac 228 {
Helmut Tschemernjak 46:e78a1d0391ac 229 power = 14;
Helmut Tschemernjak 46:e78a1d0391ac 230 }
Helmut Tschemernjak 46:e78a1d0391ac 231 paConfig = ( paConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
Helmut Tschemernjak 46:e78a1d0391ac 232 }
Helmut Tschemernjak 46:e78a1d0391ac 233 Write( REG_PACONFIG, paConfig );
Helmut Tschemernjak 46:e78a1d0391ac 234 Write( REG_PADAC, paDac );
Helmut Tschemernjak 46:e78a1d0391ac 235 }
Helmut Tschemernjak 46:e78a1d0391ac 236
Helmut Tschemernjak 46:e78a1d0391ac 237
Helmut Tschemernjak 46:e78a1d0391ac 238 uint8_t SX1276Generic::GetPaSelect( uint32_t channel )
Helmut Tschemernjak 46:e78a1d0391ac 239 {
Helmut Tschemernjak 46:e78a1d0391ac 240 if( channel > RF_MID_BAND_THRESH )
Helmut Tschemernjak 46:e78a1d0391ac 241 {
Helmut Tschemernjak 46:e78a1d0391ac 242 if( boardConnected == SX1276MB1LAS || boardConnected == RFM95_SX1276)
Helmut Tschemernjak 46:e78a1d0391ac 243 {
Helmut Tschemernjak 46:e78a1d0391ac 244 return RF_PACONFIG_PASELECT_PABOOST;
Helmut Tschemernjak 46:e78a1d0391ac 245 }
Helmut Tschemernjak 46:e78a1d0391ac 246 else
Helmut Tschemernjak 46:e78a1d0391ac 247 {
Helmut Tschemernjak 46:e78a1d0391ac 248 return RF_PACONFIG_PASELECT_RFO;
Helmut Tschemernjak 46:e78a1d0391ac 249 }
Helmut Tschemernjak 46:e78a1d0391ac 250 }
Helmut Tschemernjak 46:e78a1d0391ac 251 else
Helmut Tschemernjak 46:e78a1d0391ac 252 {
Helmut Tschemernjak 46:e78a1d0391ac 253 return RF_PACONFIG_PASELECT_RFO;
Helmut Tschemernjak 46:e78a1d0391ac 254 }
Helmut Tschemernjak 46:e78a1d0391ac 255 }
Helmut Tschemernjak 46:e78a1d0391ac 256
Helmut Tschemernjak 46:e78a1d0391ac 257 void SX1276Generic::SetAntSwLowPower( bool status )
Helmut Tschemernjak 46:e78a1d0391ac 258 {
Helmut Tschemernjak 46:e78a1d0391ac 259 if( isRadioActive != status )
Helmut Tschemernjak 46:e78a1d0391ac 260 {
Helmut Tschemernjak 46:e78a1d0391ac 261 isRadioActive = status;
Helmut Tschemernjak 46:e78a1d0391ac 262
Helmut Tschemernjak 46:e78a1d0391ac 263 if( status == false )
Helmut Tschemernjak 46:e78a1d0391ac 264 {
Helmut Tschemernjak 46:e78a1d0391ac 265 AntSwInit( );
Helmut Tschemernjak 46:e78a1d0391ac 266 }
Helmut Tschemernjak 46:e78a1d0391ac 267 else
Helmut Tschemernjak 46:e78a1d0391ac 268 {
Helmut Tschemernjak 46:e78a1d0391ac 269 AntSwDeInit( );
Helmut Tschemernjak 46:e78a1d0391ac 270 }
Helmut Tschemernjak 46:e78a1d0391ac 271 }
Helmut Tschemernjak 46:e78a1d0391ac 272 }
Helmut Tschemernjak 46:e78a1d0391ac 273
Helmut Tschemernjak 46:e78a1d0391ac 274 void SX1276Generic::AntSwInit( void )
Helmut Tschemernjak 46:e78a1d0391ac 275 {
Helmut Tschemernjak 46:e78a1d0391ac 276 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 277 *_antSwitch = 0;
Helmut Tschemernjak 46:e78a1d0391ac 278 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 46:e78a1d0391ac 279 *_antSwitchTX = 0;
Helmut Tschemernjak 46:e78a1d0391ac 280 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 46:e78a1d0391ac 281 }
Helmut Tschemernjak 46:e78a1d0391ac 282 }
Helmut Tschemernjak 46:e78a1d0391ac 283
Helmut Tschemernjak 46:e78a1d0391ac 284 void SX1276Generic::AntSwDeInit( void )
Helmut Tschemernjak 46:e78a1d0391ac 285 {
Helmut Tschemernjak 46:e78a1d0391ac 286 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 287 *_antSwitch = 0;
Helmut Tschemernjak 46:e78a1d0391ac 288 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 46:e78a1d0391ac 289 *_antSwitchTX = 0;
Helmut Tschemernjak 46:e78a1d0391ac 290 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 46:e78a1d0391ac 291 }
Helmut Tschemernjak 46:e78a1d0391ac 292 }
Helmut Tschemernjak 46:e78a1d0391ac 293
Helmut Tschemernjak 46:e78a1d0391ac 294
Helmut Tschemernjak 46:e78a1d0391ac 295 void SX1276Generic::SetAntSw( uint8_t opMode )
Helmut Tschemernjak 46:e78a1d0391ac 296 {
Helmut Tschemernjak 46:e78a1d0391ac 297 switch( opMode )
Helmut Tschemernjak 46:e78a1d0391ac 298 {
Helmut Tschemernjak 46:e78a1d0391ac 299 case RFLR_OPMODE_TRANSMITTER:
Helmut Tschemernjak 46:e78a1d0391ac 300 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 46:e78a1d0391ac 301 *_antSwitch = 0;// Murata-RX
Helmut Tschemernjak 46:e78a1d0391ac 302 if (Read( REG_PACONFIG) & RF_PACONFIG_PASELECT_PABOOST)
Helmut Tschemernjak 46:e78a1d0391ac 303 *_antSwitchTXBoost = 1;
Helmut Tschemernjak 46:e78a1d0391ac 304 else
Helmut Tschemernjak 46:e78a1d0391ac 305 *_antSwitchTX = 1; // alternate: antSwitchTXBoost = 1
Helmut Tschemernjak 46:e78a1d0391ac 306 } else {
Helmut Tschemernjak 46:e78a1d0391ac 307 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 308 *_antSwitch = 1;
Helmut Tschemernjak 46:e78a1d0391ac 309 }
Helmut Tschemernjak 46:e78a1d0391ac 310 break;
Helmut Tschemernjak 46:e78a1d0391ac 311 case RFLR_OPMODE_RECEIVER:
Helmut Tschemernjak 46:e78a1d0391ac 312 case RFLR_OPMODE_RECEIVER_SINGLE:
Helmut Tschemernjak 46:e78a1d0391ac 313 case RFLR_OPMODE_CAD:
Helmut Tschemernjak 46:e78a1d0391ac 314 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 46:e78a1d0391ac 315 *_antSwitch = 1; // Murata-RX
Helmut Tschemernjak 46:e78a1d0391ac 316 *_antSwitchTX = 0;
Helmut Tschemernjak 46:e78a1d0391ac 317 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 46:e78a1d0391ac 318 } else {
Helmut Tschemernjak 46:e78a1d0391ac 319 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 320 _antSwitch = 0;
Helmut Tschemernjak 46:e78a1d0391ac 321 }
Helmut Tschemernjak 46:e78a1d0391ac 322 break;
Helmut Tschemernjak 46:e78a1d0391ac 323 case RFLR_OPMODE_SLEEP:
Helmut Tschemernjak 46:e78a1d0391ac 324 case RFLR_OPMODE_STANDBY:
Helmut Tschemernjak 46:e78a1d0391ac 325 default:
Helmut Tschemernjak 46:e78a1d0391ac 326 if (boardConnected == MURATA_SX1276) {
Helmut Tschemernjak 46:e78a1d0391ac 327 *_antSwitch = 0; //Murata-RX
Helmut Tschemernjak 46:e78a1d0391ac 328 *_antSwitchTX = 0;
Helmut Tschemernjak 46:e78a1d0391ac 329 *_antSwitchTXBoost = 0;
Helmut Tschemernjak 46:e78a1d0391ac 330 } else {
Helmut Tschemernjak 46:e78a1d0391ac 331 if (_antSwitch)
Helmut Tschemernjak 46:e78a1d0391ac 332 *_antSwitch = 0;
Helmut Tschemernjak 46:e78a1d0391ac 333 }
Helmut Tschemernjak 46:e78a1d0391ac 334 break;
Helmut Tschemernjak 46:e78a1d0391ac 335 }
Helmut Tschemernjak 46:e78a1d0391ac 336 }
Helmut Tschemernjak 46:e78a1d0391ac 337
Helmut Tschemernjak 46:e78a1d0391ac 338 void SX1276Generic::SetTimeout(TimeoutTimer_t timer, timeoutFuncPtr func, int timeout_ms)
Helmut Tschemernjak 46:e78a1d0391ac 339 {
Helmut Tschemernjak 46:e78a1d0391ac 340 switch(timer) {
Helmut Tschemernjak 46:e78a1d0391ac 341 case RXTimeoutTimer:
Helmut Tschemernjak 46:e78a1d0391ac 342 if (func)
Helmut Tschemernjak 46:e78a1d0391ac 343 rxTimeoutTimer.attach_us(callback(this, func), timeout_ms);
Helmut Tschemernjak 46:e78a1d0391ac 344 else
Helmut Tschemernjak 46:e78a1d0391ac 345 rxTimeoutTimer.detach();
Helmut Tschemernjak 46:e78a1d0391ac 346 break;
Helmut Tschemernjak 46:e78a1d0391ac 347 case TXTimeoutTimer:
Helmut Tschemernjak 46:e78a1d0391ac 348 if (func)
Helmut Tschemernjak 46:e78a1d0391ac 349 txTimeoutTimer.attach_us(callback(this, func), timeout_ms);
Helmut Tschemernjak 46:e78a1d0391ac 350 else
Helmut Tschemernjak 46:e78a1d0391ac 351 txTimeoutTimer.detach();
Helmut Tschemernjak 46:e78a1d0391ac 352 break;
Helmut Tschemernjak 53:6d3adad59633 353 case RXTimeoutSyncWordTimer:
Helmut Tschemernjak 46:e78a1d0391ac 354 if (func)
Helmut Tschemernjak 46:e78a1d0391ac 355 rxTimeoutSyncWord.attach_us(callback(this, func), timeout_ms);
Helmut Tschemernjak 46:e78a1d0391ac 356 else
Helmut Tschemernjak 46:e78a1d0391ac 357 rxTimeoutSyncWord.detach();
Helmut Tschemernjak 46:e78a1d0391ac 358 break;
Helmut Tschemernjak 46:e78a1d0391ac 359 }
Helmut Tschemernjak 46:e78a1d0391ac 360 }
Helmut Tschemernjak 46:e78a1d0391ac 361
Helmut Tschemernjak 46:e78a1d0391ac 362 bool SX1276Generic::CheckRfFrequency( uint32_t frequency )
Helmut Tschemernjak 46:e78a1d0391ac 363 {
Helmut Tschemernjak 46:e78a1d0391ac 364 // Implement check. Currently all frequencies are supported
Helmut Tschemernjak 46:e78a1d0391ac 365 return true;
Helmut Tschemernjak 46:e78a1d0391ac 366 }
Helmut Tschemernjak 46:e78a1d0391ac 367
Helmut Tschemernjak 46:e78a1d0391ac 368 void SX1276Generic::Reset( void )
Helmut Tschemernjak 46:e78a1d0391ac 369 {
Helmut Tschemernjak 46:e78a1d0391ac 370 _reset->output();
Helmut Tschemernjak 46:e78a1d0391ac 371 *_reset = 0;
Helmut Tschemernjak 46:e78a1d0391ac 372 wait_ms( 1 );
Helmut Tschemernjak 46:e78a1d0391ac 373 *_reset = 1;
Helmut Tschemernjak 46:e78a1d0391ac 374 _reset->input(); // I don't know my input again, maybe to save power (Helmut T)
Helmut Tschemernjak 46:e78a1d0391ac 375 wait_ms( 6 );
Helmut Tschemernjak 46:e78a1d0391ac 376 }
Helmut Tschemernjak 46:e78a1d0391ac 377
Helmut Tschemernjak 46:e78a1d0391ac 378 void SX1276Generic::Write( uint8_t addr, uint8_t data )
Helmut Tschemernjak 46:e78a1d0391ac 379 {
Helmut Tschemernjak 46:e78a1d0391ac 380 Write( addr, &data, 1 );
Helmut Tschemernjak 46:e78a1d0391ac 381 }
Helmut Tschemernjak 46:e78a1d0391ac 382
Helmut Tschemernjak 46:e78a1d0391ac 383 uint8_t SX1276Generic::Read( uint8_t addr )
Helmut Tschemernjak 46:e78a1d0391ac 384 {
Helmut Tschemernjak 46:e78a1d0391ac 385 uint8_t data;
Helmut Tschemernjak 46:e78a1d0391ac 386 Read( addr, &data, 1 );
Helmut Tschemernjak 46:e78a1d0391ac 387 return data;
Helmut Tschemernjak 46:e78a1d0391ac 388 }
Helmut Tschemernjak 46:e78a1d0391ac 389
Helmut Tschemernjak 52:4d304485eda0 390 void SX1276Generic::Write( uint8_t addr, void *buffer, uint8_t size )
Helmut Tschemernjak 46:e78a1d0391ac 391 {
Helmut Tschemernjak 46:e78a1d0391ac 392 uint8_t i;
Helmut Tschemernjak 52:4d304485eda0 393 uint8_t *p = (uint8_t *)buffer;
Helmut Tschemernjak 46:e78a1d0391ac 394
Helmut Tschemernjak 46:e78a1d0391ac 395 *_nss = 0; // what about SPI hold/release timing on fast MCUs? Helmut
Helmut Tschemernjak 46:e78a1d0391ac 396 _spi->write( addr | 0x80 );
Helmut Tschemernjak 46:e78a1d0391ac 397 for( i = 0; i < size; i++ )
Helmut Tschemernjak 46:e78a1d0391ac 398 {
Helmut Tschemernjak 52:4d304485eda0 399 _spi->write(*p++);
Helmut Tschemernjak 46:e78a1d0391ac 400 }
Helmut Tschemernjak 46:e78a1d0391ac 401 *_nss = 1;
Helmut Tschemernjak 46:e78a1d0391ac 402 }
Helmut Tschemernjak 46:e78a1d0391ac 403
Helmut Tschemernjak 52:4d304485eda0 404 void SX1276Generic::Read( uint8_t addr, void *buffer, uint8_t size )
Helmut Tschemernjak 46:e78a1d0391ac 405 {
Helmut Tschemernjak 46:e78a1d0391ac 406 uint8_t i;
Helmut Tschemernjak 52:4d304485eda0 407 uint8_t *p = (uint8_t *)buffer;
Helmut Tschemernjak 46:e78a1d0391ac 408
Helmut Tschemernjak 46:e78a1d0391ac 409 *_nss = 0; // what about SPI hold/release timing on fast MCUs? Helmut
Helmut Tschemernjak 46:e78a1d0391ac 410 _spi->write( addr & 0x7F );
Helmut Tschemernjak 46:e78a1d0391ac 411 for( i = 0; i < size; i++ )
Helmut Tschemernjak 46:e78a1d0391ac 412 {
Helmut Tschemernjak 52:4d304485eda0 413 *p++ = _spi->write( 0 );
Helmut Tschemernjak 46:e78a1d0391ac 414 }
Helmut Tschemernjak 46:e78a1d0391ac 415 *_nss = 1;
Helmut Tschemernjak 46:e78a1d0391ac 416 }
Helmut Tschemernjak 46:e78a1d0391ac 417
Helmut Tschemernjak 52:4d304485eda0 418 void SX1276Generic::WriteFifo( void *buffer, uint8_t size )
Helmut Tschemernjak 46:e78a1d0391ac 419 {
Helmut Tschemernjak 46:e78a1d0391ac 420 Write( 0, buffer, size );
Helmut Tschemernjak 46:e78a1d0391ac 421 }
Helmut Tschemernjak 46:e78a1d0391ac 422
Helmut Tschemernjak 52:4d304485eda0 423 void SX1276Generic::ReadFifo( void *buffer, uint8_t size )
Helmut Tschemernjak 46:e78a1d0391ac 424 {
Helmut Tschemernjak 46:e78a1d0391ac 425 Read( 0, buffer, size );
Helmut Tschemernjak 46:e78a1d0391ac 426 }
Helmut Tschemernjak 46:e78a1d0391ac 427
Helmut Tschemernjak 46:e78a1d0391ac 428
Helmut Tschemernjak 46:e78a1d0391ac 429
Helmut Tschemernjak 46:e78a1d0391ac 430
Helmut Tschemernjak 46:e78a1d0391ac 431 #endif // ARDUINO