fholin fholin / Mbed 2 deprecated MiniMousetest

Dependencies:   mbed

Committer:
fholin
Date:
Mon Dec 18 16:31:11 2017 +0000
Revision:
1:eda561b01daf
Parent:
0:2325d1d28df3
inline with github repository : ; https://github.com/LoRaWanMiniMouse/Mini-Mouse.git

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 1:eda561b01daf 16 #include "Define.h"
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 1:eda561b01daf 52
fholin 0:2325d1d28df3 53 #define LORA_DIO5 PA_4
fholin 0:2325d1d28df3 54 #define LORA_ANT_RX PA_1
fholin 0:2325d1d28df3 55 #define LORA_ANT_TX PC_2
fholin 0:2325d1d28df3 56 #define LORA_ANT_BOOST PC_1
fholin 0:2325d1d28df3 57
fholin 0:2325d1d28df3 58 SX1276MB1xAS::SX1276MB1xAS( RadioEvents_t *events )
fholin 0:2325d1d28df3 59
fholin 0:2325d1d28df3 60 : 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 61 antSwitch( LORA_ANT_TX ),
fholin 0:2325d1d28df3 62 fake( LORA_ANT_BOOST )
fholin 0:2325d1d28df3 63 {
fholin 0:2325d1d28df3 64 this->RadioEvents = events;
fholin 0:2325d1d28df3 65
fholin 0:2325d1d28df3 66 Reset( );
fholin 0:2325d1d28df3 67
fholin 0:2325d1d28df3 68 boardConnected = UNKNOWN;
fholin 0:2325d1d28df3 69
fholin 0:2325d1d28df3 70 DetectBoardType( );
fholin 0:2325d1d28df3 71
fholin 0:2325d1d28df3 72 RxChainCalibration( );
fholin 0:2325d1d28df3 73
fholin 0:2325d1d28df3 74 IoInit( );
fholin 0:2325d1d28df3 75
fholin 0:2325d1d28df3 76 SetOpMode( RF_OPMODE_SLEEP );
fholin 0:2325d1d28df3 77 IoIrqInit( dioIrq );
fholin 0:2325d1d28df3 78
fholin 0:2325d1d28df3 79 RadioRegistersInit( );
fholin 0:2325d1d28df3 80
fholin 0:2325d1d28df3 81 SetModem( MODEM_FSK );
fholin 0:2325d1d28df3 82
fholin 0:2325d1d28df3 83 this->settings.State = RF_IDLE ;
fholin 0:2325d1d28df3 84 }
fholin 0:2325d1d28df3 85
fholin 0:2325d1d28df3 86 //-------------------------------------------------------------------------
fholin 0:2325d1d28df3 87 // Board relative functions
fholin 0:2325d1d28df3 88 //-------------------------------------------------------------------------
fholin 0:2325d1d28df3 89 uint8_t SX1276MB1xAS::DetectBoardType( void )
fholin 0:2325d1d28df3 90 {
fholin 0:2325d1d28df3 91 /* if( boardConnected == UNKNOWN )
fholin 0:2325d1d28df3 92 {
fholin 0:2325d1d28df3 93 antSwitch.input( );
fholin 0:2325d1d28df3 94 wait_ms( 1 );
fholin 0:2325d1d28df3 95 if( antSwitch == 1 )
fholin 0:2325d1d28df3 96 {
fholin 0:2325d1d28df3 97 boardConnected = SX1276MB1LAS;
fholin 0:2325d1d28df3 98 }
fholin 0:2325d1d28df3 99 else
fholin 0:2325d1d28df3 100 {
fholin 0:2325d1d28df3 101 boardConnected = SX1276MB1MAS;
fholin 0:2325d1d28df3 102 }
fholin 0:2325d1d28df3 103 antSwitch.output( );
fholin 0:2325d1d28df3 104 wait_ms( 1 );
fholin 0:2325d1d28df3 105 }*/
fholin 0:2325d1d28df3 106 return ( boardConnected );
fholin 0:2325d1d28df3 107 }
fholin 0:2325d1d28df3 108
fholin 0:2325d1d28df3 109 void SX1276MB1xAS::IoInit( void )
fholin 0:2325d1d28df3 110 {
fholin 0:2325d1d28df3 111 AntSwInit( );
fholin 0:2325d1d28df3 112 SpiInit( );
fholin 0:2325d1d28df3 113 }
fholin 0:2325d1d28df3 114
fholin 0:2325d1d28df3 115 void SX1276MB1xAS::RadioRegistersInit( )
fholin 0:2325d1d28df3 116 {
fholin 0:2325d1d28df3 117 uint8_t i = 0;
fholin 0:2325d1d28df3 118 for( i = 0; i < sizeof( RadioRegsInit ) / sizeof( RadioRegisters_t ); i++ )
fholin 0:2325d1d28df3 119 {
fholin 0:2325d1d28df3 120 SetModem( RadioRegsInit[i].Modem );
fholin 0:2325d1d28df3 121 Write( RadioRegsInit[i].Addr, RadioRegsInit[i].Value );
fholin 0:2325d1d28df3 122 }
fholin 0:2325d1d28df3 123 }
fholin 0:2325d1d28df3 124
fholin 0:2325d1d28df3 125 void SX1276MB1xAS::SpiInit( void )
fholin 0:2325d1d28df3 126 {
fholin 0:2325d1d28df3 127 nss = 1;
fholin 0:2325d1d28df3 128 spi.format( 8,0 );
fholin 0:2325d1d28df3 129 uint32_t frequencyToSet = 8000000;
fholin 0:2325d1d28df3 130 #if( defined ( TARGET_NUCLEO_L152RE ) || defined ( TARGET_LPC11U6X ) )
fholin 0:2325d1d28df3 131 spi.frequency( frequencyToSet );
fholin 0:2325d1d28df3 132 #elif( defined ( TARGET_KL25Z ) ) //busclock frequency is halved -> double the spi frequency to compensate
fholin 0:2325d1d28df3 133 spi.frequency( frequencyToSet * 2 );
fholin 0:2325d1d28df3 134 #else
fholin 0:2325d1d28df3 135 #warning "Check the board's SPI frequency"
fholin 0:2325d1d28df3 136 #endif
fholin 0:2325d1d28df3 137 wait(0.1);
fholin 0:2325d1d28df3 138 }
fholin 0:2325d1d28df3 139
fholin 0:2325d1d28df3 140 void SX1276MB1xAS::IoIrqInit( DioIrqHandler *irqHandlers )
fholin 0:2325d1d28df3 141 {
fholin 0:2325d1d28df3 142
fholin 0:2325d1d28df3 143 dio0.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[0] ) );
fholin 0:2325d1d28df3 144 dio1.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[1] ) );
fholin 0:2325d1d28df3 145 dio2.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[2] ) );
fholin 0:2325d1d28df3 146 dio3.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[3] ) );
fholin 0:2325d1d28df3 147 dio4.rise( this, static_cast< TriggerMB1xAS > ( irqHandlers[4] ) );
fholin 0:2325d1d28df3 148
fholin 0:2325d1d28df3 149 }
fholin 0:2325d1d28df3 150
fholin 0:2325d1d28df3 151 void SX1276MB1xAS::IoDeInit( void )
fholin 0:2325d1d28df3 152 {
fholin 0:2325d1d28df3 153 //nothing
fholin 0:2325d1d28df3 154 }
fholin 0:2325d1d28df3 155
fholin 0:2325d1d28df3 156 uint8_t SX1276MB1xAS::GetPaSelect( uint32_t channel )
fholin 0:2325d1d28df3 157 {
fholin 0:2325d1d28df3 158 return RF_PACONFIG_PASELECT_PABOOST;
fholin 0:2325d1d28df3 159
fholin 0:2325d1d28df3 160 if( channel > RF_MID_BAND_THRESH )
fholin 0:2325d1d28df3 161 {
fholin 0:2325d1d28df3 162 if( boardConnected == SX1276MB1LAS )
fholin 0:2325d1d28df3 163 {
fholin 0:2325d1d28df3 164 return RF_PACONFIG_PASELECT_PABOOST;
fholin 0:2325d1d28df3 165 }
fholin 0:2325d1d28df3 166 else
fholin 0:2325d1d28df3 167 {
fholin 0:2325d1d28df3 168 return RF_PACONFIG_PASELECT_RFO;
fholin 0:2325d1d28df3 169 }
fholin 0:2325d1d28df3 170 }
fholin 0:2325d1d28df3 171 else
fholin 0:2325d1d28df3 172 {
fholin 0:2325d1d28df3 173 return RF_PACONFIG_PASELECT_RFO;
fholin 0:2325d1d28df3 174 }
fholin 0:2325d1d28df3 175 }
fholin 0:2325d1d28df3 176
fholin 0:2325d1d28df3 177 void SX1276MB1xAS::SetAntSwLowPower( bool status )
fholin 0:2325d1d28df3 178 {
fholin 0:2325d1d28df3 179 if( isRadioActive != status )
fholin 0:2325d1d28df3 180 {
fholin 0:2325d1d28df3 181 isRadioActive = status;
fholin 0:2325d1d28df3 182
fholin 0:2325d1d28df3 183 if( status == false )
fholin 0:2325d1d28df3 184 {
fholin 0:2325d1d28df3 185 AntSwInit( );
fholin 0:2325d1d28df3 186 }
fholin 0:2325d1d28df3 187 else
fholin 0:2325d1d28df3 188 {
fholin 0:2325d1d28df3 189 AntSwDeInit( );
fholin 0:2325d1d28df3 190 }
fholin 0:2325d1d28df3 191 }
fholin 0:2325d1d28df3 192 }
fholin 0:2325d1d28df3 193
fholin 0:2325d1d28df3 194 void SX1276MB1xAS::AntSwInit( void )
fholin 0:2325d1d28df3 195 {
fholin 0:2325d1d28df3 196 // antSwitch = 0;
fholin 0:2325d1d28df3 197 }
fholin 0:2325d1d28df3 198
fholin 0:2325d1d28df3 199 void SX1276MB1xAS::AntSwDeInit( void )
fholin 0:2325d1d28df3 200 {
fholin 0:2325d1d28df3 201 antSwitch = 0;
fholin 0:2325d1d28df3 202 }
fholin 0:2325d1d28df3 203
fholin 0:2325d1d28df3 204 void SX1276MB1xAS::SetAntSw( uint8_t rxTx )
fholin 0:2325d1d28df3 205 {
fholin 0:2325d1d28df3 206 if( this->rxTx == rxTx )
fholin 0:2325d1d28df3 207 {
fholin 0:2325d1d28df3 208 //no need to go further
fholin 0:2325d1d28df3 209 return;
fholin 0:2325d1d28df3 210 }
fholin 0:2325d1d28df3 211
fholin 0:2325d1d28df3 212 this->rxTx = rxTx;
fholin 0:2325d1d28df3 213
fholin 0:2325d1d28df3 214 if( rxTx != 0 )
fholin 0:2325d1d28df3 215 {
fholin 0:2325d1d28df3 216 // antSwitch = 1;
fholin 0:2325d1d28df3 217 }
fholin 0:2325d1d28df3 218 else
fholin 0:2325d1d28df3 219 {
fholin 0:2325d1d28df3 220 // antSwitch = 0;
fholin 0:2325d1d28df3 221 }
fholin 0:2325d1d28df3 222 }
fholin 0:2325d1d28df3 223
fholin 0:2325d1d28df3 224 bool SX1276MB1xAS::CheckRfFrequency( uint32_t frequency )
fholin 0:2325d1d28df3 225 {
fholin 0:2325d1d28df3 226 //TODO: Implement check, currently all frequencies are supported
fholin 0:2325d1d28df3 227 return true;
fholin 0:2325d1d28df3 228 }
fholin 0:2325d1d28df3 229
fholin 0:2325d1d28df3 230
fholin 0:2325d1d28df3 231 void SX1276MB1xAS::Reset( void )
fholin 0:2325d1d28df3 232 {
fholin 0:2325d1d28df3 233 reset.output();
fholin 0:2325d1d28df3 234 reset = 0;
fholin 0:2325d1d28df3 235 wait_ms( 1 );
fholin 0:2325d1d28df3 236 reset.input();
fholin 0:2325d1d28df3 237 wait_ms( 6 );
fholin 0:2325d1d28df3 238 }
fholin 0:2325d1d28df3 239
fholin 0:2325d1d28df3 240 void SX1276MB1xAS::Write( uint8_t addr, uint8_t data )
fholin 0:2325d1d28df3 241 {
fholin 0:2325d1d28df3 242 Write( addr, &data, 1 );
fholin 0:2325d1d28df3 243 }
fholin 0:2325d1d28df3 244
fholin 0:2325d1d28df3 245 uint8_t SX1276MB1xAS::Read( uint8_t addr )
fholin 0:2325d1d28df3 246 {
fholin 0:2325d1d28df3 247 uint8_t data;
fholin 0:2325d1d28df3 248 Read( addr, &data, 1 );
fholin 0:2325d1d28df3 249 return data;
fholin 0:2325d1d28df3 250 }
fholin 0:2325d1d28df3 251
fholin 0:2325d1d28df3 252 void SX1276MB1xAS::Write( uint8_t addr, uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 253 {
fholin 0:2325d1d28df3 254 uint8_t i;
fholin 0:2325d1d28df3 255
fholin 0:2325d1d28df3 256 nss = 0;
fholin 0:2325d1d28df3 257 spi.write( addr | 0x80 );
fholin 0:2325d1d28df3 258 for( i = 0; i < size; i++ )
fholin 0:2325d1d28df3 259 {
fholin 0:2325d1d28df3 260 spi.write( buffer[i] );
fholin 0:2325d1d28df3 261 }
fholin 0:2325d1d28df3 262 nss = 1;
fholin 0:2325d1d28df3 263 }
fholin 0:2325d1d28df3 264
fholin 0:2325d1d28df3 265 void SX1276MB1xAS::Read( uint8_t addr, uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 266 {
fholin 0:2325d1d28df3 267 uint8_t i;
fholin 0:2325d1d28df3 268
fholin 0:2325d1d28df3 269 nss = 0;
fholin 0:2325d1d28df3 270 spi.write( addr & 0x7F );
fholin 0:2325d1d28df3 271 for( i = 0; i < size; i++ )
fholin 0:2325d1d28df3 272 {
fholin 0:2325d1d28df3 273 buffer[i] = spi.write( 0 );
fholin 0:2325d1d28df3 274 }
fholin 0:2325d1d28df3 275 nss = 1;
fholin 0:2325d1d28df3 276 }
fholin 0:2325d1d28df3 277
fholin 0:2325d1d28df3 278 void SX1276MB1xAS::WriteFifo( uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 279 {
fholin 0:2325d1d28df3 280 Write( 0, buffer, size );
fholin 0:2325d1d28df3 281 }
fholin 0:2325d1d28df3 282
fholin 0:2325d1d28df3 283 void SX1276MB1xAS::ReadFifo( uint8_t *buffer, uint8_t size )
fholin 0:2325d1d28df3 284 {
fholin 0:2325d1d28df3 285 Read( 0, buffer, size );
fholin 0:2325d1d28df3 286 }