fholin fholin / Mbed 2 deprecated MiniMousetest

Dependencies:   mbed

Committer:
fholin
Date:
Fri Dec 15 13:15:04 2017 +0000
Revision:
0:2325d1d28df3
Child:
1:eda561b01daf
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fholin 0:2325d1d28df3 1 /*
fholin 0:2325d1d28df3 2 / _____) _ | |
fholin 0:2325d1d28df3 3 ( (____ _____ ____ _| |_ _____ ____| |__
fholin 0:2325d1d28df3 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
fholin 0:2325d1d28df3 5 _____) ) ____| | | || |_| ____( (___| | | |
fholin 0:2325d1d28df3 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
fholin 0:2325d1d28df3 7 (C) 2014 Semtech
fholin 0:2325d1d28df3 8
fholin 0:2325d1d28df3 9 Description: -
fholin 0:2325d1d28df3 10
fholin 0:2325d1d28df3 11 License: Revised BSD License, see LICENSE.TXT file include in the project
fholin 0:2325d1d28df3 12
fholin 0:2325d1d28df3 13 Maintainers: Miguel Luis, Gregory Cristian and Nicolas Huguenin
fholin 0:2325d1d28df3 14 */
fholin 0:2325d1d28df3 15 #include "sx1276-hal.h"
fholin 0:2325d1d28df3 16
fholin 0:2325d1d28df3 17 const RadioRegisters_t SX1276MB1xAS::RadioRegsInit[] = RADIO_INIT_REGISTERS_VALUE;
fholin 0:2325d1d28df3 18
fholin 0:2325d1d28df3 19
fholin 0:2325d1d28df3 20
fholin 0:2325d1d28df3 21 SX1276MB1xAS::SX1276MB1xAS( RadioEvents_t *events,
fholin 0:2325d1d28df3 22 PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset,
fholin 0:2325d1d28df3 23 PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5,
fholin 0:2325d1d28df3 24 PinName antSwitch )
fholin 0:2325d1d28df3 25 : SX1276( events, mosi, miso, sclk, nss, reset, dio0, dio1, dio2, dio3, dio4, dio5 ),
fholin 0:2325d1d28df3 26 antSwitch( antSwitch ),
fholin 0:2325d1d28df3 27 #if( defined ( TARGET_NUCLEO_L152RE ) )
fholin 0:2325d1d28df3 28 // fake( D9 )
fholin 0:2325d1d28df3 29 #else
fholin 0:2325d1d28df3 30 fake( A3 )
fholin 0:2325d1d28df3 31 #endif
fholin 0:2325d1d28df3 32 {
fholin 0:2325d1d28df3 33 this->RadioEvents = events;
fholin 0:2325d1d28df3 34
fholin 0:2325d1d28df3 35 Reset( );
fholin 0:2325d1d28df3 36
fholin 0:2325d1d28df3 37 RxChainCalibration( );
fholin 0:2325d1d28df3 38
fholin 0:2325d1d28df3 39 IoInit( );
fholin 0:2325d1d28df3 40
fholin 0:2325d1d28df3 41 SetOpMode( RF_OPMODE_SLEEP );
fholin 0:2325d1d28df3 42
fholin 0:2325d1d28df3 43 IoIrqInit( dioIrq );
fholin 0:2325d1d28df3 44
fholin 0:2325d1d28df3 45 RadioRegistersInit( );
fholin 0:2325d1d28df3 46
fholin 0:2325d1d28df3 47 SetModem( MODEM_FSK );
fholin 0:2325d1d28df3 48
fholin 0:2325d1d28df3 49 this->settings.State = RF_IDLE ;
fholin 0:2325d1d28df3 50 }
fholin 0:2325d1d28df3 51
fholin 0:2325d1d28df3 52 #define LORA_SPI_MOSI PA_7
fholin 0:2325d1d28df3 53 #define LORA_SPI_MISO PA_6
fholin 0:2325d1d28df3 54 #define LORA_SPI_SCLK PB_3
fholin 0:2325d1d28df3 55 #define LORA_CS PA_15
fholin 0:2325d1d28df3 56 #define LORA_RESET PC_0
fholin 0:2325d1d28df3 57 #define LORA_DIO0 PB_4
fholin 0:2325d1d28df3 58 #define LORA_DIO1 PB_1
fholin 0:2325d1d28df3 59 #define LORA_DIO2 PB_0
fholin 0:2325d1d28df3 60 #define LORA_DIO3 PC_13
fholin 0:2325d1d28df3 61 #define LORA_DIO4 PA_5
fholin 0:2325d1d28df3 62 #define LORA_DIO5 PA_4
fholin 0:2325d1d28df3 63 #define LORA_ANT_RX PA_1
fholin 0:2325d1d28df3 64 #define LORA_ANT_TX PC_2
fholin 0:2325d1d28df3 65 #define LORA_ANT_BOOST PC_1
fholin 0:2325d1d28df3 66
fholin 0:2325d1d28df3 67 SX1276MB1xAS::SX1276MB1xAS( RadioEvents_t *events )
fholin 0:2325d1d28df3 68
fholin 0:2325d1d28df3 69 : SX1276( events, LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK ,LORA_CS, LORA_RESET, LORA_DIO5, LORA_DIO5, LORA_DIO5, LORA_DIO5, LORA_DIO5, LORA_DIO5 ),//SX1276( events, D11, D12, D13, D10, A0, D8, D9, D9, D9, D9, D9 )
fholin 0:2325d1d28df3 70 antSwitch( LORA_ANT_TX ),
fholin 0:2325d1d28df3 71 fake( LORA_ANT_BOOST )
fholin 0:2325d1d28df3 72 {
fholin 0:2325d1d28df3 73 this->RadioEvents = events;
fholin 0:2325d1d28df3 74
fholin 0:2325d1d28df3 75 Reset( );
fholin 0:2325d1d28df3 76
fholin 0:2325d1d28df3 77 boardConnected = UNKNOWN;
fholin 0:2325d1d28df3 78
fholin 0:2325d1d28df3 79 DetectBoardType( );
fholin 0:2325d1d28df3 80
fholin 0:2325d1d28df3 81 RxChainCalibration( );
fholin 0:2325d1d28df3 82
fholin 0:2325d1d28df3 83 IoInit( );
fholin 0:2325d1d28df3 84
fholin 0:2325d1d28df3 85 SetOpMode( RF_OPMODE_SLEEP );
fholin 0:2325d1d28df3 86 IoIrqInit( dioIrq );
fholin 0:2325d1d28df3 87
fholin 0:2325d1d28df3 88 RadioRegistersInit( );
fholin 0:2325d1d28df3 89
fholin 0:2325d1d28df3 90 SetModem( MODEM_FSK );
fholin 0:2325d1d28df3 91
fholin 0:2325d1d28df3 92 this->settings.State = RF_IDLE ;
fholin 0:2325d1d28df3 93 }
fholin 0:2325d1d28df3 94
fholin 0:2325d1d28df3 95 //-------------------------------------------------------------------------
fholin 0:2325d1d28df3 96 // Board relative functions
fholin 0:2325d1d28df3 97 //-------------------------------------------------------------------------
fholin 0:2325d1d28df3 98 uint8_t SX1276MB1xAS::DetectBoardType( void )
fholin 0:2325d1d28df3 99 {
fholin 0:2325d1d28df3 100 /* if( boardConnected == UNKNOWN )
fholin 0:2325d1d28df3 101 {
fholin 0:2325d1d28df3 102 antSwitch.input( );
fholin 0:2325d1d28df3 103 wait_ms( 1 );
fholin 0:2325d1d28df3 104 if( antSwitch == 1 )
fholin 0:2325d1d28df3 105 {
fholin 0:2325d1d28df3 106 boardConnected = SX1276MB1LAS;
fholin 0:2325d1d28df3 107 }
fholin 0:2325d1d28df3 108 else
fholin 0:2325d1d28df3 109 {
fholin 0:2325d1d28df3 110 boardConnected = SX1276MB1MAS;
fholin 0:2325d1d28df3 111 }
fholin 0:2325d1d28df3 112 antSwitch.output( );
fholin 0:2325d1d28df3 113 wait_ms( 1 );
fholin 0:2325d1d28df3 114 }*/
fholin 0:2325d1d28df3 115 return ( boardConnected );
fholin 0:2325d1d28df3 116 }
fholin 0:2325d1d28df3 117
fholin 0:2325d1d28df3 118 void SX1276MB1xAS::IoInit( void )
fholin 0:2325d1d28df3 119 {
fholin 0:2325d1d28df3 120 AntSwInit( );
fholin 0:2325d1d28df3 121 SpiInit( );
fholin 0:2325d1d28df3 122 }
fholin 0:2325d1d28df3 123
fholin 0:2325d1d28df3 124 void SX1276MB1xAS::RadioRegistersInit( )
fholin 0:2325d1d28df3 125 {
fholin 0:2325d1d28df3 126 uint8_t i = 0;
fholin 0:2325d1d28df3 127 for( i = 0; i < sizeof( RadioRegsInit ) / sizeof( RadioRegisters_t ); i++ )
fholin 0:2325d1d28df3 128 {
fholin 0:2325d1d28df3 129 SetModem( RadioRegsInit[i].Modem );
fholin 0:2325d1d28df3 130 Write( RadioRegsInit[i].Addr, RadioRegsInit[i].Value );
fholin 0:2325d1d28df3 131 }
fholin 0:2325d1d28df3 132 }
fholin 0:2325d1d28df3 133
fholin 0:2325d1d28df3 134 void SX1276MB1xAS::SpiInit( void )
fholin 0:2325d1d28df3 135 {
fholin 0:2325d1d28df3 136 nss = 1;
fholin 0:2325d1d28df3 137 spi.format( 8,0 );
fholin 0:2325d1d28df3 138 uint32_t frequencyToSet = 8000000;
fholin 0:2325d1d28df3 139 #if( defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_LPC11U6X ) )
fholin 0:2325d1d28df3 140 spi.frequency( frequencyToSet );
fholin 0:2325d1d28df3 141 #elif( defined ( TARGET_KL25Z ) ) //busclock frequency is halved -> double the spi frequency to compensate
fholin 0:2325d1d28df3 142 spi.frequency( frequencyToSet * 2 );
fholin 0:2325d1d28df3 143 #else
fholin 0:2325d1d28df3 144 #warning "Check the board's SPI frequency"
fholin 0:2325d1d28df3 145 #endif
fholin 0:2325d1d28df3 146 wait(0.1);
fholin 0:2325d1d28df3 147 }
fholin 0:2325d1d28df3 148
fholin 0:2325d1d28df3 149 void SX1276MB1xAS::IoIrqInit( DioIrqHandler *irqHandlers )
fholin 0:2325d1d28df3 150 {
fholin 0:2325d1d28df3 151
fholin 0:2325d1d28df3 152 dio0.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[0] ) );
fholin 0:2325d1d28df3 153 dio1.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[1] ) );
fholin 0:2325d1d28df3 154 dio2.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[2] ) );
fholin 0:2325d1d28df3 155 dio3.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[3] ) );
fholin 0:2325d1d28df3 156 dio4.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[4] ) );
fholin 0:2325d1d28df3 157
fholin 0:2325d1d28df3 158 }
fholin 0:2325d1d28df3 159
fholin 0:2325d1d28df3 160 void SX1276MB1xAS::IoDeInit( void )
fholin 0:2325d1d28df3 161 {
fholin 0:2325d1d28df3 162 //nothing
fholin 0:2325d1d28df3 163 }
fholin 0:2325d1d28df3 164
fholin 0:2325d1d28df3 165 uint8_t SX1276MB1xAS::GetPaSelect( uint32_t channel )
fholin 0:2325d1d28df3 166 {
fholin 0:2325d1d28df3 167 return RF_PACONFIG_PASELECT_PABOOST;
fholin 0:2325d1d28df3 168
fholin 0:2325d1d28df3 169 if( channel > RF_MID_BAND_THRESH )
fholin 0:2325d1d28df3 170 {
fholin 0:2325d1d28df3 171 if( boardConnected == SX1276MB1LAS )
fholin 0:2325d1d28df3 172 {
fholin 0:2325d1d28df3 173 return RF_PACONFIG_PASELECT_PABOOST;
fholin 0:2325d1d28df3 174 }
fholin 0:2325d1d28df3 175 else
fholin 0:2325d1d28df3 176 {
fholin 0:2325d1d28df3 177 return RF_PACONFIG_PASELECT_RFO;
fholin 0:2325d1d28df3 178 }
fholin 0:2325d1d28df3 179 }
fholin 0:2325d1d28df3 180 else
fholin 0:2325d1d28df3 181 {
fholin 0:2325d1d28df3 182 return RF_PACONFIG_PASELECT_RFO;
fholin 0:2325d1d28df3 183 }
fholin 0:2325d1d28df3 184 }
fholin 0:2325d1d28df3 185
fholin 0:2325d1d28df3 186 void SX1276MB1xAS::SetAntSwLowPower( bool status )
fholin 0:2325d1d28df3 187 {
fholin 0:2325d1d28df3 188 if( isRadioActive != status )
fholin 0:2325d1d28df3 189 {
fholin 0:2325d1d28df3 190 isRadioActive = status;
fholin 0:2325d1d28df3 191
fholin 0:2325d1d28df3 192 if( status == false )
fholin 0:2325d1d28df3 193 {
fholin 0:2325d1d28df3 194 AntSwInit( );
fholin 0:2325d1d28df3 195 }
fholin 0:2325d1d28df3 196 else
fholin 0:2325d1d28df3 197 {
fholin 0:2325d1d28df3 198 AntSwDeInit( );
fholin 0:2325d1d28df3 199 }
fholin 0:2325d1d28df3 200 }
fholin 0:2325d1d28df3 201 }
fholin 0:2325d1d28df3 202
fholin 0:2325d1d28df3 203 void SX1276MB1xAS::AntSwInit( void )
fholin 0:2325d1d28df3 204 {
fholin 0:2325d1d28df3 205 // antSwitch = 0;
fholin 0:2325d1d28df3 206 }
fholin 0:2325d1d28df3 207
fholin 0:2325d1d28df3 208 void SX1276MB1xAS::AntSwDeInit( void )
fholin 0:2325d1d28df3 209 {
fholin 0:2325d1d28df3 210 antSwitch = 0;
fholin 0:2325d1d28df3 211 }
fholin 0:2325d1d28df3 212
fholin 0:2325d1d28df3 213 void SX1276MB1xAS::SetAntSw( uint8_t rxTx )
fholin 0:2325d1d28df3 214 {
fholin 0:2325d1d28df3 215 if( this->rxTx == rxTx )
fholin 0:2325d1d28df3 216 {
fholin 0:2325d1d28df3 217 //no need to go further
fholin 0:2325d1d28df3 218 return;
fholin 0:2325d1d28df3 219 }
fholin 0:2325d1d28df3 220
fholin 0:2325d1d28df3 221 this->rxTx = rxTx;
fholin 0:2325d1d28df3 222
fholin 0:2325d1d28df3 223 if( rxTx != 0 )
fholin 0:2325d1d28df3 224 {
fholin 0:2325d1d28df3 225 // antSwitch = 1;
fholin 0:2325d1d28df3 226 }
fholin 0:2325d1d28df3 227 else
fholin 0:2325d1d28df3 228 {
fholin 0:2325d1d28df3 229 // antSwitch = 0;
fholin 0:2325d1d28df3 230 }
fholin 0:2325d1d28df3 231 }
fholin 0:2325d1d28df3 232
fholin 0:2325d1d28df3 233 bool SX1276MB1xAS::CheckRfFrequency( uint32_t frequency )
fholin 0:2325d1d28df3 234 {
fholin 0:2325d1d28df3 235 //TODO: Implement check, currently all frequencies are supported
fholin 0:2325d1d28df3 236 return true;
fholin 0:2325d1d28df3 237 }
fholin 0:2325d1d28df3 238
fholin 0:2325d1d28df3 239
fholin 0:2325d1d28df3 240 void SX1276MB1xAS::Reset( void )
fholin 0:2325d1d28df3 241 {
fholin 0:2325d1d28df3 242 reset.output();
fholin 0:2325d1d28df3 243 reset = 0;
fholin 0:2325d1d28df3 244 wait_ms( 1 );
fholin 0:2325d1d28df3 245 reset.input();
fholin 0:2325d1d28df3 246 wait_ms( 6 );
fholin 0:2325d1d28df3 247 }
fholin 0:2325d1d28df3 248
fholin 0:2325d1d28df3 249 void SX1276MB1xAS::Write( uint8_t addr, uint8_t data )
fholin 0:2325d1d28df3 250 {
fholin 0:2325d1d28df3 251 Write( addr, &data, 1 );
fholin 0:2325d1d28df3 252 }
fholin 0:2325d1d28df3 253
fholin 0:2325d1d28df3 254 uint8_t SX1276MB1xAS::Read( uint8_t addr )
fholin 0:2325d1d28df3 255 {
fholin 0:2325d1d28df3 256 uint8_t data;
fholin 0:2325d1d28df3 257 Read( addr, &data, 1 );
fholin 0:2325d1d28df3 258 return data;
fholin 0:2325d1d28df3 259 }
fholin 0:2325d1d28df3 260
fholin 0:2325d1d28df3 261 void SX1276MB1xAS::Write( uint8_t addr, uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 262 {
fholin 0:2325d1d28df3 263 uint8_t i;
fholin 0:2325d1d28df3 264
fholin 0:2325d1d28df3 265 nss = 0;
fholin 0:2325d1d28df3 266 spi.write( addr | 0x80 );
fholin 0:2325d1d28df3 267 for( i = 0; i < size; i++ )
fholin 0:2325d1d28df3 268 {
fholin 0:2325d1d28df3 269 spi.write( buffer[i] );
fholin 0:2325d1d28df3 270 }
fholin 0:2325d1d28df3 271 nss = 1;
fholin 0:2325d1d28df3 272 }
fholin 0:2325d1d28df3 273
fholin 0:2325d1d28df3 274 void SX1276MB1xAS::Read( uint8_t addr, uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 275 {
fholin 0:2325d1d28df3 276 uint8_t i;
fholin 0:2325d1d28df3 277
fholin 0:2325d1d28df3 278 nss = 0;
fholin 0:2325d1d28df3 279 spi.write( addr & 0x7F );
fholin 0:2325d1d28df3 280 for( i = 0; i < size; i++ )
fholin 0:2325d1d28df3 281 {
fholin 0:2325d1d28df3 282 buffer[i] = spi.write( 0 );
fholin 0:2325d1d28df3 283 }
fholin 0:2325d1d28df3 284 nss = 1;
fholin 0:2325d1d28df3 285 }
fholin 0:2325d1d28df3 286
fholin 0:2325d1d28df3 287 void SX1276MB1xAS::WriteFifo( uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 288 {
fholin 0:2325d1d28df3 289 Write( 0, buffer, size );
fholin 0:2325d1d28df3 290 }
fholin 0:2325d1d28df3 291
fholin 0:2325d1d28df3 292 void SX1276MB1xAS::ReadFifo( uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 293 {
fholin 0:2325d1d28df3 294 Read( 0, buffer, size );
fholin 0:2325d1d28df3 295 }