Code for Technion Formula car sensors reader

Dependencies:   mbed Buffer FATFileSystem

Fork of SX1272PingPong by Semtech

This is code is part of a Technion course project in advanced IoT, implementing a device to read and transmit sensors data from a Formula racing car built by students at Technion - Israel Institute of Technology.

How to install

  • Create an account on Mbed: https://os.mbed.com/account/signup/
  • Import project into Compiler
  • In the Program Workspace select "Formula_Nucleo_Reader"
  • Select a Platform like so:
  1. Click button at top-left
  2. Add Board
  3. Search "NUCLEO F103RB" and then "Add to your Mbed Compiler"
  • Finally click "Compile", if the build was successful, the binary would download automatically
  • To install it on device simply plug it in to a PC, open device drive and drag then drop binary file in it
Committer:
wardm
Date:
Thu May 17 20:37:41 2018 +0000
Revision:
15:2e0d977dbb31
V1.0.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wardm 15:2e0d977dbb31 1 /*
wardm 15:2e0d977dbb31 2 / _____) _ | |
wardm 15:2e0d977dbb31 3 ( (____ _____ ____ _| |_ _____ ____| |__
wardm 15:2e0d977dbb31 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
wardm 15:2e0d977dbb31 5 _____) ) ____| | | || |_| ____( (___| | | |
wardm 15:2e0d977dbb31 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
wardm 15:2e0d977dbb31 7 (C) 2015 Semtech
wardm 15:2e0d977dbb31 8
wardm 15:2e0d977dbb31 9 Description: -
wardm 15:2e0d977dbb31 10
wardm 15:2e0d977dbb31 11 License: Revised BSD License, see LICENSE.TXT file include in the project
wardm 15:2e0d977dbb31 12
wardm 15:2e0d977dbb31 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
wardm 15:2e0d977dbb31 14 */
wardm 15:2e0d977dbb31 15 #include "sx1272-hal.h"
wardm 15:2e0d977dbb31 16
wardm 15:2e0d977dbb31 17 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 18 /*
wardm 15:2e0d977dbb31 19 PD_2=0 PD_2=1
wardm 15:2e0d977dbb31 20 op PaB rfo rfo
wardm 15:2e0d977dbb31 21 0 4.6 18.5 27.0
wardm 15:2e0d977dbb31 22 1 5.6 21.1 28.1
wardm 15:2e0d977dbb31 23 2 6.7 23.3 29.1
wardm 15:2e0d977dbb31 24 3 7.7 25.3 30.1
wardm 15:2e0d977dbb31 25 4 8.8 26.2 30.7
wardm 15:2e0d977dbb31 26 5 9.8 27.3 31.2
wardm 15:2e0d977dbb31 27 6 10.7 28.1 31.6
wardm 15:2e0d977dbb31 28 7 11.7 28.6 32.2
wardm 15:2e0d977dbb31 29 8 12.8 29.2 32.4
wardm 15:2e0d977dbb31 30 9 13.7 29.9 32.9
wardm 15:2e0d977dbb31 31 10 14.7 30.5 33.1
wardm 15:2e0d977dbb31 32 11 15.6 30.8 33.4
wardm 15:2e0d977dbb31 33 12 16.4 30.9 33.6
wardm 15:2e0d977dbb31 34 13 17.1 31.0 33.7
wardm 15:2e0d977dbb31 35 14 17.8 31.1 33.7
wardm 15:2e0d977dbb31 36 15 18.4 31.1 33.7
wardm 15:2e0d977dbb31 37 */
wardm 15:2e0d977dbb31 38 // txpow: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
wardm 15:2e0d977dbb31 39 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 };
wardm 15:2e0d977dbb31 40
wardm 15:2e0d977dbb31 41 // txpow: 20 21 22 23 24 25 26 27 28 29 30
wardm 15:2e0d977dbb31 42 static const uint8_t RfoTable[11] = { 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 9 };
wardm 15:2e0d977dbb31 43
wardm 15:2e0d977dbb31 44 #endif
wardm 15:2e0d977dbb31 45
wardm 15:2e0d977dbb31 46 const RadioRegisters_t SX1272MB2xAS::RadioRegsInit[] = RADIO_INIT_REGISTERS_VALUE;
wardm 15:2e0d977dbb31 47
wardm 15:2e0d977dbb31 48 SX1272MB2xAS::SX1272MB2xAS( RadioEvents_t *events,
wardm 15:2e0d977dbb31 49 PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
wardm 15:2e0d977dbb31 50 PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
wardm 15:2e0d977dbb31 51 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 52 PinName rfSwitchCntr1, PinName rfSwitchCntr2 )
wardm 15:2e0d977dbb31 53 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 54 PinName txctl, PinName rxctl )
wardm 15:2e0d977dbb31 55 #else
wardm 15:2e0d977dbb31 56 PinName antSwitch )
wardm 15:2e0d977dbb31 57 #endif
wardm 15:2e0d977dbb31 58 : SX1272( events, mosi, miso, sclk, nss, reset, dio0, dio1, dio2, dio3, dio4, dio5 ),
wardm 15:2e0d977dbb31 59 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 60 RfSwitchCntr1( rfSwitchCntr1 ),
wardm 15:2e0d977dbb31 61 RfSwitchCntr2( rfSwitchCntr2 ),
wardm 15:2e0d977dbb31 62 PwrAmpCntr( PD_2 )
wardm 15:2e0d977dbb31 63 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 64 TxCtl ( txctl ),
wardm 15:2e0d977dbb31 65 RxCtl ( rxctl )
wardm 15:2e0d977dbb31 66 #else
wardm 15:2e0d977dbb31 67 AntSwitch( antSwitch ),
wardm 15:2e0d977dbb31 68 #if( defined ( TARGET_NUCLEO_L152RE ) ) || defined ( TARGET_NUCLEO_L476RG )
wardm 15:2e0d977dbb31 69 Fake( D8 )
wardm 15:2e0d977dbb31 70 #else
wardm 15:2e0d977dbb31 71 Fake( A3 )
wardm 15:2e0d977dbb31 72 #endif
wardm 15:2e0d977dbb31 73 #endif
wardm 15:2e0d977dbb31 74 {
wardm 15:2e0d977dbb31 75 this->RadioEvents = events;
wardm 15:2e0d977dbb31 76
wardm 15:2e0d977dbb31 77 Reset( );
wardm 15:2e0d977dbb31 78
wardm 15:2e0d977dbb31 79 IoInit( );
wardm 15:2e0d977dbb31 80
wardm 15:2e0d977dbb31 81 SetOpMode( RF_OPMODE_SLEEP );
wardm 15:2e0d977dbb31 82
wardm 15:2e0d977dbb31 83 IoIrqInit( dioIrq );
wardm 15:2e0d977dbb31 84
wardm 15:2e0d977dbb31 85 RadioRegistersInit( );
wardm 15:2e0d977dbb31 86
wardm 15:2e0d977dbb31 87 SetModem( MODEM_FSK );
wardm 15:2e0d977dbb31 88
wardm 15:2e0d977dbb31 89 this->settings.State = RF_IDLE ;
wardm 15:2e0d977dbb31 90 }
wardm 15:2e0d977dbb31 91
wardm 15:2e0d977dbb31 92 SX1272MB2xAS::SX1272MB2xAS( RadioEvents_t *events )
wardm 15:2e0d977dbb31 93 #if defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_NUCLEO_L476RG )
wardm 15:2e0d977dbb31 94 : SX1272( events, D11, D12, D13, D10, A0, D2, D3, D4, D5, A3, D9 ), // For NUCLEO L152RE dio4 is on port A3
wardm 15:2e0d977dbb31 95 AntSwitch( A4 ),
wardm 15:2e0d977dbb31 96 Fake( D8 )
wardm 15:2e0d977dbb31 97 #elif defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 98 : SX1272( events, PB_15, PB_14, PB_13, PB_12, PC_2, PC_6, PC_10, PC_11, PC_8, PC_9, PC_12 ),
wardm 15:2e0d977dbb31 99 RfSwitchCntr1( PC_4 ),
wardm 15:2e0d977dbb31 100 RfSwitchCntr2( PC_13 ),
wardm 15:2e0d977dbb31 101 PwrAmpCntr( PD_2 )
wardm 15:2e0d977dbb31 102 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 103 : SX1272( events, LORA_MOSI, LORA_MISO, LORA_SCK, LORA_NSS, LORA_RESET, LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5 ),
wardm 15:2e0d977dbb31 104 TxCtl( LORA_TXCTL ),
wardm 15:2e0d977dbb31 105 RxCtl( LORA_RXCTL )
wardm 15:2e0d977dbb31 106 #else
wardm 15:2e0d977dbb31 107 : SX1272( events, D11, D12, D13, D10, A0, D2, D3, D4, D5, D8, D9 ),
wardm 15:2e0d977dbb31 108 AntSwitch( A4 ),
wardm 15:2e0d977dbb31 109 Fake( A3 )
wardm 15:2e0d977dbb31 110 #endif
wardm 15:2e0d977dbb31 111 {
wardm 15:2e0d977dbb31 112 this->RadioEvents = events;
wardm 15:2e0d977dbb31 113
wardm 15:2e0d977dbb31 114 Reset( );
wardm 15:2e0d977dbb31 115
wardm 15:2e0d977dbb31 116 boardConnected = UNKNOWN;
wardm 15:2e0d977dbb31 117
wardm 15:2e0d977dbb31 118 DetectBoardType( );
wardm 15:2e0d977dbb31 119
wardm 15:2e0d977dbb31 120 IoInit( );
wardm 15:2e0d977dbb31 121
wardm 15:2e0d977dbb31 122 SetOpMode( RF_OPMODE_SLEEP );
wardm 15:2e0d977dbb31 123 IoIrqInit( dioIrq );
wardm 15:2e0d977dbb31 124
wardm 15:2e0d977dbb31 125 RadioRegistersInit( );
wardm 15:2e0d977dbb31 126
wardm 15:2e0d977dbb31 127 SetModem( MODEM_FSK );
wardm 15:2e0d977dbb31 128
wardm 15:2e0d977dbb31 129 this->settings.State = RF_IDLE ;
wardm 15:2e0d977dbb31 130 }
wardm 15:2e0d977dbb31 131
wardm 15:2e0d977dbb31 132 //-------------------------------------------------------------------------
wardm 15:2e0d977dbb31 133 // Board relative functions
wardm 15:2e0d977dbb31 134 //-------------------------------------------------------------------------
wardm 15:2e0d977dbb31 135 uint8_t SX1272MB2xAS::DetectBoardType( void )
wardm 15:2e0d977dbb31 136 {
wardm 15:2e0d977dbb31 137 if( boardConnected == UNKNOWN )
wardm 15:2e0d977dbb31 138 {
wardm 15:2e0d977dbb31 139 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 140 boardConnected = NA_MOTE_72;
wardm 15:2e0d977dbb31 141 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 142 boardConnected = MDOT_F411RE;
wardm 15:2e0d977dbb31 143 #else
wardm 15:2e0d977dbb31 144 this->AntSwitch.input( );
wardm 15:2e0d977dbb31 145 wait_ms( 1 );
wardm 15:2e0d977dbb31 146 if( this->AntSwitch == 1 )
wardm 15:2e0d977dbb31 147 {
wardm 15:2e0d977dbb31 148 boardConnected = SX1272MB1DCS;
wardm 15:2e0d977dbb31 149 }
wardm 15:2e0d977dbb31 150 else
wardm 15:2e0d977dbb31 151 {
wardm 15:2e0d977dbb31 152 boardConnected = SX1272MB2XAS;
wardm 15:2e0d977dbb31 153 }
wardm 15:2e0d977dbb31 154 this->AntSwitch.output( );
wardm 15:2e0d977dbb31 155 wait_ms( 1 );
wardm 15:2e0d977dbb31 156 #endif
wardm 15:2e0d977dbb31 157 }
wardm 15:2e0d977dbb31 158 return ( boardConnected );
wardm 15:2e0d977dbb31 159 }
wardm 15:2e0d977dbb31 160
wardm 15:2e0d977dbb31 161 void SX1272MB2xAS::IoInit( void )
wardm 15:2e0d977dbb31 162 {
wardm 15:2e0d977dbb31 163 AntSwInit( );
wardm 15:2e0d977dbb31 164 SpiInit( );
wardm 15:2e0d977dbb31 165 }
wardm 15:2e0d977dbb31 166
wardm 15:2e0d977dbb31 167 void SX1272MB2xAS::RadioRegistersInit( )
wardm 15:2e0d977dbb31 168 {
wardm 15:2e0d977dbb31 169 uint8_t i = 0;
wardm 15:2e0d977dbb31 170 for( i = 0; i < sizeof( RadioRegsInit ) / sizeof( RadioRegisters_t ); i++ )
wardm 15:2e0d977dbb31 171 {
wardm 15:2e0d977dbb31 172 SetModem( RadioRegsInit[i].Modem );
wardm 15:2e0d977dbb31 173 Write( RadioRegsInit[i].Addr, RadioRegsInit[i].Value );
wardm 15:2e0d977dbb31 174 }
wardm 15:2e0d977dbb31 175 }
wardm 15:2e0d977dbb31 176
wardm 15:2e0d977dbb31 177 void SX1272MB2xAS::SpiInit( void )
wardm 15:2e0d977dbb31 178 {
wardm 15:2e0d977dbb31 179 nss = 1;
wardm 15:2e0d977dbb31 180 spi.format( 8,0 );
wardm 15:2e0d977dbb31 181 uint32_t frequencyToSet = 8000000;
wardm 15:2e0d977dbb31 182 #if( defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_MOTE_L152RC ) || defined ( TARGET_NUCLEO_L476RG ) || defined ( TARGET_LPC11U6X ) || defined ( TARGET_MTS_MDOT_F411RE ) )
wardm 15:2e0d977dbb31 183 spi.frequency( frequencyToSet );
wardm 15:2e0d977dbb31 184 #elif( defined ( TARGET_KL25Z ) ) //busclock frequency is halved -> double the spi frequency to compensate
wardm 15:2e0d977dbb31 185 spi.frequency( frequencyToSet * 2 );
wardm 15:2e0d977dbb31 186 #else
wardm 15:2e0d977dbb31 187 #warning "Check the board's SPI frequency"
wardm 15:2e0d977dbb31 188 #endif
wardm 15:2e0d977dbb31 189 wait(0.1);
wardm 15:2e0d977dbb31 190 }
wardm 15:2e0d977dbb31 191
wardm 15:2e0d977dbb31 192 void SX1272MB2xAS::IoIrqInit( DioIrqHandler *irqHandlers )
wardm 15:2e0d977dbb31 193 {
wardm 15:2e0d977dbb31 194 #if( defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_MOTE_L152RC ) || defined ( TARGET_NUCLEO_L476RG ) || defined ( TARGET_NUCLEO_L476RG ) || defined ( TARGET_LPC11U6X ) )
wardm 15:2e0d977dbb31 195 dio0.mode( PullDown );
wardm 15:2e0d977dbb31 196 dio1.mode( PullDown );
wardm 15:2e0d977dbb31 197 dio2.mode( PullDown );
wardm 15:2e0d977dbb31 198 dio3.mode( PullDown );
wardm 15:2e0d977dbb31 199 dio4.mode( PullDown );
wardm 15:2e0d977dbb31 200 #endif
wardm 15:2e0d977dbb31 201 dio0.rise( mbed::callback( this, static_cast< TriggerMB2xAS > ( irqHandlers[0] ) ) );
wardm 15:2e0d977dbb31 202 dio1.rise( mbed::callback( this, static_cast< TriggerMB2xAS > ( irqHandlers[1] ) ) );
wardm 15:2e0d977dbb31 203 dio2.rise( mbed::callback( this, static_cast< TriggerMB2xAS > ( irqHandlers[2] ) ) );
wardm 15:2e0d977dbb31 204 dio3.rise( mbed::callback( this, static_cast< TriggerMB2xAS > ( irqHandlers[3] ) ) );
wardm 15:2e0d977dbb31 205 dio4.rise( mbed::callback( this, static_cast< TriggerMB2xAS > ( irqHandlers[4] ) ) );
wardm 15:2e0d977dbb31 206 }
wardm 15:2e0d977dbb31 207
wardm 15:2e0d977dbb31 208 void SX1272MB2xAS::IoDeInit( void )
wardm 15:2e0d977dbb31 209 {
wardm 15:2e0d977dbb31 210 //nothing
wardm 15:2e0d977dbb31 211 }
wardm 15:2e0d977dbb31 212
wardm 15:2e0d977dbb31 213 void SX1272MB2xAS::SetRfTxPower( int8_t power )
wardm 15:2e0d977dbb31 214 {
wardm 15:2e0d977dbb31 215 uint8_t paConfig = 0;
wardm 15:2e0d977dbb31 216 uint8_t paDac = 0;
wardm 15:2e0d977dbb31 217
wardm 15:2e0d977dbb31 218 paConfig = Read( REG_PACONFIG );
wardm 15:2e0d977dbb31 219 paDac = Read( REG_PADAC );
wardm 15:2e0d977dbb31 220
wardm 15:2e0d977dbb31 221 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 222 if( power > 19 )
wardm 15:2e0d977dbb31 223 {
wardm 15:2e0d977dbb31 224 paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | RF_PACONFIG_PASELECT_RFO;
wardm 15:2e0d977dbb31 225 paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | RfoTable[power - 20];
wardm 15:2e0d977dbb31 226 }
wardm 15:2e0d977dbb31 227 else
wardm 15:2e0d977dbb31 228 {
wardm 15:2e0d977dbb31 229 paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | RF_PACONFIG_PASELECT_PABOOST;
wardm 15:2e0d977dbb31 230 paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | PaBTable[power];
wardm 15:2e0d977dbb31 231 }
wardm 15:2e0d977dbb31 232 #else
wardm 15:2e0d977dbb31 233 paConfig = ( paConfig & RF_PACONFIG_PASELECT_MASK ) | GetPaSelect( this->settings.Channel );
wardm 15:2e0d977dbb31 234
wardm 15:2e0d977dbb31 235 if( ( paConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
wardm 15:2e0d977dbb31 236 {
wardm 15:2e0d977dbb31 237 if( power > 17 )
wardm 15:2e0d977dbb31 238 {
wardm 15:2e0d977dbb31 239 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_ON;
wardm 15:2e0d977dbb31 240 }
wardm 15:2e0d977dbb31 241 else
wardm 15:2e0d977dbb31 242 {
wardm 15:2e0d977dbb31 243 paDac = ( paDac & RF_PADAC_20DBM_MASK ) | RF_PADAC_20DBM_OFF;
wardm 15:2e0d977dbb31 244 }
wardm 15:2e0d977dbb31 245 if( ( paDac & RF_PADAC_20DBM_ON ) == RF_PADAC_20DBM_ON )
wardm 15:2e0d977dbb31 246 {
wardm 15:2e0d977dbb31 247 if( power < 5 )
wardm 15:2e0d977dbb31 248 {
wardm 15:2e0d977dbb31 249 power = 5;
wardm 15:2e0d977dbb31 250 }
wardm 15:2e0d977dbb31 251 if( power > 20 )
wardm 15:2e0d977dbb31 252 {
wardm 15:2e0d977dbb31 253 power = 20;
wardm 15:2e0d977dbb31 254 }
wardm 15:2e0d977dbb31 255 paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
wardm 15:2e0d977dbb31 256 }
wardm 15:2e0d977dbb31 257 else
wardm 15:2e0d977dbb31 258 {
wardm 15:2e0d977dbb31 259 if( power < 2 )
wardm 15:2e0d977dbb31 260 {
wardm 15:2e0d977dbb31 261 power = 2;
wardm 15:2e0d977dbb31 262 }
wardm 15:2e0d977dbb31 263 if( power > 17 )
wardm 15:2e0d977dbb31 264 {
wardm 15:2e0d977dbb31 265 power = 17;
wardm 15:2e0d977dbb31 266 }
wardm 15:2e0d977dbb31 267 paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
wardm 15:2e0d977dbb31 268 }
wardm 15:2e0d977dbb31 269 }
wardm 15:2e0d977dbb31 270 else
wardm 15:2e0d977dbb31 271 {
wardm 15:2e0d977dbb31 272 if( power < -1 )
wardm 15:2e0d977dbb31 273 {
wardm 15:2e0d977dbb31 274 power = -1;
wardm 15:2e0d977dbb31 275 }
wardm 15:2e0d977dbb31 276 if( power > 14 )
wardm 15:2e0d977dbb31 277 {
wardm 15:2e0d977dbb31 278 power = 14;
wardm 15:2e0d977dbb31 279 }
wardm 15:2e0d977dbb31 280 paConfig = ( paConfig & RFLR_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
wardm 15:2e0d977dbb31 281 }
wardm 15:2e0d977dbb31 282 #endif
wardm 15:2e0d977dbb31 283 Write( REG_PACONFIG, paConfig );
wardm 15:2e0d977dbb31 284 Write( REG_PADAC, paDac );
wardm 15:2e0d977dbb31 285 }
wardm 15:2e0d977dbb31 286
wardm 15:2e0d977dbb31 287 uint8_t SX1272MB2xAS::GetPaSelect( uint32_t channel )
wardm 15:2e0d977dbb31 288 {
wardm 15:2e0d977dbb31 289 if( boardConnected == SX1272MB1DCS || boardConnected == MDOT_F411RE )
wardm 15:2e0d977dbb31 290 {
wardm 15:2e0d977dbb31 291 return RF_PACONFIG_PASELECT_PABOOST;
wardm 15:2e0d977dbb31 292 }
wardm 15:2e0d977dbb31 293 else
wardm 15:2e0d977dbb31 294 {
wardm 15:2e0d977dbb31 295 return RF_PACONFIG_PASELECT_RFO;
wardm 15:2e0d977dbb31 296 }
wardm 15:2e0d977dbb31 297 }
wardm 15:2e0d977dbb31 298
wardm 15:2e0d977dbb31 299 void SX1272MB2xAS::SetAntSwLowPower( bool status )
wardm 15:2e0d977dbb31 300 {
wardm 15:2e0d977dbb31 301 if( isRadioActive != status )
wardm 15:2e0d977dbb31 302 {
wardm 15:2e0d977dbb31 303 isRadioActive = status;
wardm 15:2e0d977dbb31 304
wardm 15:2e0d977dbb31 305 if( status == false )
wardm 15:2e0d977dbb31 306 {
wardm 15:2e0d977dbb31 307 AntSwInit( );
wardm 15:2e0d977dbb31 308 }
wardm 15:2e0d977dbb31 309 else
wardm 15:2e0d977dbb31 310 {
wardm 15:2e0d977dbb31 311 AntSwDeInit( );
wardm 15:2e0d977dbb31 312 }
wardm 15:2e0d977dbb31 313 }
wardm 15:2e0d977dbb31 314 }
wardm 15:2e0d977dbb31 315
wardm 15:2e0d977dbb31 316 void SX1272MB2xAS::AntSwInit( void )
wardm 15:2e0d977dbb31 317 {
wardm 15:2e0d977dbb31 318 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 319 this->RfSwitchCntr1 = 0;
wardm 15:2e0d977dbb31 320 this->RfSwitchCntr2 = 0;
wardm 15:2e0d977dbb31 321 this->PwrAmpCntr = 0;
wardm 15:2e0d977dbb31 322 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 323 this->TxCtl = 0;
wardm 15:2e0d977dbb31 324 this->RxCtl = 0;
wardm 15:2e0d977dbb31 325 #else
wardm 15:2e0d977dbb31 326 this->AntSwitch = 0;
wardm 15:2e0d977dbb31 327 #endif
wardm 15:2e0d977dbb31 328 }
wardm 15:2e0d977dbb31 329
wardm 15:2e0d977dbb31 330 void SX1272MB2xAS::AntSwDeInit( void )
wardm 15:2e0d977dbb31 331 {
wardm 15:2e0d977dbb31 332 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 333 this->RfSwitchCntr1 = 0;
wardm 15:2e0d977dbb31 334 this->RfSwitchCntr2 = 0;
wardm 15:2e0d977dbb31 335 this->PwrAmpCntr = 0;
wardm 15:2e0d977dbb31 336 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 337 this->TxCtl = 0;
wardm 15:2e0d977dbb31 338 this->RxCtl = 0;
wardm 15:2e0d977dbb31 339 #else
wardm 15:2e0d977dbb31 340 this->AntSwitch = 0;
wardm 15:2e0d977dbb31 341 #endif
wardm 15:2e0d977dbb31 342 }
wardm 15:2e0d977dbb31 343
wardm 15:2e0d977dbb31 344 void SX1272MB2xAS::SetAntSw( uint8_t opMode )
wardm 15:2e0d977dbb31 345 {
wardm 15:2e0d977dbb31 346 switch( opMode )
wardm 15:2e0d977dbb31 347 {
wardm 15:2e0d977dbb31 348 case RFLR_OPMODE_TRANSMITTER:
wardm 15:2e0d977dbb31 349 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 350 if( ( Read( REG_PACONFIG ) & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
wardm 15:2e0d977dbb31 351 {
wardm 15:2e0d977dbb31 352 this->RfSwitchCntr1 = 1;
wardm 15:2e0d977dbb31 353 this->RfSwitchCntr2 = 0;
wardm 15:2e0d977dbb31 354 }
wardm 15:2e0d977dbb31 355 else
wardm 15:2e0d977dbb31 356 {
wardm 15:2e0d977dbb31 357 this->RfSwitchCntr1 = 0;
wardm 15:2e0d977dbb31 358 this->RfSwitchCntr2 = 1;
wardm 15:2e0d977dbb31 359 }
wardm 15:2e0d977dbb31 360 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 361 /* SKY13350 */
wardm 15:2e0d977dbb31 362 this->TxCtl = 1;
wardm 15:2e0d977dbb31 363 this->RxCtl = 0;
wardm 15:2e0d977dbb31 364 #else
wardm 15:2e0d977dbb31 365 this->AntSwitch = 1;
wardm 15:2e0d977dbb31 366 #endif
wardm 15:2e0d977dbb31 367 break;
wardm 15:2e0d977dbb31 368 case RFLR_OPMODE_RECEIVER:
wardm 15:2e0d977dbb31 369 case RFLR_OPMODE_RECEIVER_SINGLE:
wardm 15:2e0d977dbb31 370 case RFLR_OPMODE_CAD:
wardm 15:2e0d977dbb31 371 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 372 this->RfSwitchCntr1 = 1;
wardm 15:2e0d977dbb31 373 this->RfSwitchCntr2 = 1;
wardm 15:2e0d977dbb31 374 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 375 /* SKY13350 */
wardm 15:2e0d977dbb31 376 this->TxCtl = 0;
wardm 15:2e0d977dbb31 377 this->RxCtl = 1;
wardm 15:2e0d977dbb31 378 #else
wardm 15:2e0d977dbb31 379 this->AntSwitch = 0;
wardm 15:2e0d977dbb31 380 #endif
wardm 15:2e0d977dbb31 381 break;
wardm 15:2e0d977dbb31 382 default:
wardm 15:2e0d977dbb31 383 #if defined ( TARGET_MOTE_L152RC )
wardm 15:2e0d977dbb31 384 this->RfSwitchCntr1 = 0;
wardm 15:2e0d977dbb31 385 this->RfSwitchCntr2 = 0;
wardm 15:2e0d977dbb31 386 this->PwrAmpCntr = 0;
wardm 15:2e0d977dbb31 387 #elif defined ( TARGET_MTS_MDOT_F411RE )
wardm 15:2e0d977dbb31 388 /* SKY13350 */
wardm 15:2e0d977dbb31 389 this->TxCtl = 0;
wardm 15:2e0d977dbb31 390 this->RxCtl = 0;
wardm 15:2e0d977dbb31 391 #else
wardm 15:2e0d977dbb31 392 this->AntSwitch = 0;
wardm 15:2e0d977dbb31 393 #endif
wardm 15:2e0d977dbb31 394 break;
wardm 15:2e0d977dbb31 395 }
wardm 15:2e0d977dbb31 396 }
wardm 15:2e0d977dbb31 397
wardm 15:2e0d977dbb31 398 bool SX1272MB2xAS::CheckRfFrequency( uint32_t frequency )
wardm 15:2e0d977dbb31 399 {
wardm 15:2e0d977dbb31 400 // Implement check. Currently all frequencies are supported
wardm 15:2e0d977dbb31 401 return true;
wardm 15:2e0d977dbb31 402 }
wardm 15:2e0d977dbb31 403
wardm 15:2e0d977dbb31 404 void SX1272MB2xAS::Reset( void )
wardm 15:2e0d977dbb31 405 {
wardm 15:2e0d977dbb31 406 reset.output( );
wardm 15:2e0d977dbb31 407 reset = 0;
wardm 15:2e0d977dbb31 408 wait_ms( 1 );
wardm 15:2e0d977dbb31 409 reset.input( );
wardm 15:2e0d977dbb31 410 wait_ms( 6 );
wardm 15:2e0d977dbb31 411 }
wardm 15:2e0d977dbb31 412
wardm 15:2e0d977dbb31 413 void SX1272MB2xAS::Write( uint8_t addr, uint8_t data )
wardm 15:2e0d977dbb31 414 {
wardm 15:2e0d977dbb31 415 Write( addr, &data, 1 );
wardm 15:2e0d977dbb31 416 }
wardm 15:2e0d977dbb31 417
wardm 15:2e0d977dbb31 418 uint8_t SX1272MB2xAS::Read( uint8_t addr )
wardm 15:2e0d977dbb31 419 {
wardm 15:2e0d977dbb31 420 uint8_t data;
wardm 15:2e0d977dbb31 421 Read( addr, &data, 1 );
wardm 15:2e0d977dbb31 422 return data;
wardm 15:2e0d977dbb31 423 }
wardm 15:2e0d977dbb31 424
wardm 15:2e0d977dbb31 425 void SX1272MB2xAS::Write( uint8_t addr, uint8_t *buffer, uint8_t size )
wardm 15:2e0d977dbb31 426 {
wardm 15:2e0d977dbb31 427 uint8_t i;
wardm 15:2e0d977dbb31 428
wardm 15:2e0d977dbb31 429 nss = 0;
wardm 15:2e0d977dbb31 430 spi.write( addr | 0x80 );
wardm 15:2e0d977dbb31 431 for( i = 0; i < size; i++ )
wardm 15:2e0d977dbb31 432 {
wardm 15:2e0d977dbb31 433 spi.write( buffer[i] );
wardm 15:2e0d977dbb31 434 }
wardm 15:2e0d977dbb31 435 nss = 1;
wardm 15:2e0d977dbb31 436 }
wardm 15:2e0d977dbb31 437
wardm 15:2e0d977dbb31 438 void SX1272MB2xAS::Read( uint8_t addr, uint8_t *buffer, uint8_t size )
wardm 15:2e0d977dbb31 439 {
wardm 15:2e0d977dbb31 440 uint8_t i;
wardm 15:2e0d977dbb31 441
wardm 15:2e0d977dbb31 442 nss = 0;
wardm 15:2e0d977dbb31 443 spi.write( addr & 0x7F );
wardm 15:2e0d977dbb31 444 for( i = 0; i < size; i++ )
wardm 15:2e0d977dbb31 445 {
wardm 15:2e0d977dbb31 446 buffer[i] = spi.write( 0 );
wardm 15:2e0d977dbb31 447 }
wardm 15:2e0d977dbb31 448 nss = 1;
wardm 15:2e0d977dbb31 449 }
wardm 15:2e0d977dbb31 450
wardm 15:2e0d977dbb31 451 void SX1272MB2xAS::WriteFifo( uint8_t *buffer, uint8_t size )
wardm 15:2e0d977dbb31 452 {
wardm 15:2e0d977dbb31 453 Write( 0, buffer, size );
wardm 15:2e0d977dbb31 454 }
wardm 15:2e0d977dbb31 455
wardm 15:2e0d977dbb31 456 void SX1272MB2xAS::ReadFifo( uint8_t *buffer, uint8_t size )
wardm 15:2e0d977dbb31 457 {
wardm 15:2e0d977dbb31 458 Read( 0, buffer, size );
wardm 15:2e0d977dbb31 459 }