Updated the MBPeripheral logic to make use of the LoRa transceiver
This commit is contained in:
parent
b5a3045f7e
commit
e1d67b9b7a
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
void defaultExtIntIsr(void){}
|
void defaultExtIntIsr(void){}
|
||||||
|
|
||||||
MBPeripherals::MBPeripherals(const BoardConfig &boardConfig, void (*extIntIsr)(void)): _boardConfig(boardConfig), _NRF(boardConfig.NRFCe, boardConfig.NRFCs)
|
MBPeripherals::MBPeripherals(const BoardConfig &boardConfig, void (*extIntIsr)(void)): _boardConfig(boardConfig)
|
||||||
{
|
{
|
||||||
if(!extIntIsr)
|
if(!extIntIsr)
|
||||||
_extIntIsr = &(defaultExtIntIsr); //We provide a default ISR
|
_extIntIsr = &(defaultExtIntIsr); //We provide a default ISR
|
||||||
@ -22,23 +22,34 @@ uint8_t MBPeripherals::init()
|
|||||||
//Unused pins are set as inputs with internal pullup enabled to reduce power consumption during sleep
|
//Unused pins are set as inputs with internal pullup enabled to reduce power consumption during sleep
|
||||||
pinMode(0,INPUT_PULLUP);
|
pinMode(0,INPUT_PULLUP);
|
||||||
//pinMode(1,INPUT_PULLUP); TX pin for serial
|
//pinMode(1,INPUT_PULLUP); TX pin for serial
|
||||||
pinMode(6,INPUT_PULLUP);
|
pinMode(3, INPUT_PULLUP);
|
||||||
pinMode(7,INPUT_PULLUP);
|
// Set to input pull up because it is its rest state
|
||||||
pinMode(8,INPUT_PULLUP);
|
pinMode(_boardConfig.SwitchVSensEnable, INPUT_PULLUP);
|
||||||
pinMode(9,INPUT_PULLUP);
|
pinMode(9, INPUT_PULLUP);
|
||||||
pinMode(10,INPUT_PULLUP);
|
|
||||||
pinMode(11,INPUT_PULLUP);
|
//RFM95W control pins, these are set in the deinitExternalPeripherals method.
|
||||||
pinMode(12,INPUT_PULLUP);
|
//pinMode(6, INPUT_PULLUP);
|
||||||
pinMode(A2,INPUT_PULLUP);
|
//pinMode(8, INPUT_PULLUP);
|
||||||
pinMode(A3,INPUT_PULLUP);
|
//pinMode(10, INPUT_PULLUP);
|
||||||
pinMode(A4,INPUT_PULLUP);
|
//pinMode(11, INPUT_PULLUP);
|
||||||
pinMode(A5,INPUT_PULLUP);
|
//pinMode(12, INPUT_PULLUP);
|
||||||
pinMode(A6,INPUT_PULLUP);
|
//pinMode(13, INPUT_PULLUP);
|
||||||
pinMode(A7,INPUT_PULLUP);
|
|
||||||
|
//These pins are all unused
|
||||||
|
pinMode(A2, INPUT_PULLUP);
|
||||||
|
pinMode(A3, INPUT_PULLUP);
|
||||||
|
pinMode(A4, INPUT_PULLUP);
|
||||||
|
pinMode(A5, INPUT_PULLUP);
|
||||||
|
pinMode(A6, INPUT_PULLUP);
|
||||||
|
pinMode(A7, INPUT_PULLUP);
|
||||||
|
|
||||||
|
//Defines the RFM95W IOs for the class (does not physically set pin states)
|
||||||
|
_RFM95W.setPins(_boardConfig.RFMCs, _boardConfig.RFMRst, _boardConfig.RFMDI0);
|
||||||
|
|
||||||
//We check that every external devices are responding
|
//We check that every external devices are responding
|
||||||
_3V3PowerRail(ON);
|
_3V3PowerRail(ON);
|
||||||
toReturn |= _NRF.begin();
|
toReturn |= initExternalPeripherals();
|
||||||
|
deinitExternalPeripherals();
|
||||||
_3V3PowerRail(OFF);
|
_3V3PowerRail(OFF);
|
||||||
|
|
||||||
attachInterrupt(digitalPinToInterrupt(_boardConfig.ExternalInt), _extIntIsr, FALLING);
|
attachInterrupt(digitalPinToInterrupt(_boardConfig.ExternalInt), _extIntIsr, FALLING);
|
||||||
@ -50,11 +61,24 @@ uint8_t MBPeripherals::initExternalPeripherals(void)
|
|||||||
{
|
{
|
||||||
uint8_t toReturn(0);
|
uint8_t toReturn(0);
|
||||||
|
|
||||||
toReturn |= _NRF.begin();
|
toReturn |= _RFM95W.begin(LORA_BAND);
|
||||||
|
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MBPeripherals::deinitExternalPeripherals(void)
|
||||||
|
{
|
||||||
|
//Let's properly turn the deinitialize the RFM95W module
|
||||||
|
_RFM95W.end();
|
||||||
|
//Don't forget to set associated radio IO's to input WITHOUT PULLUPS resistors (current leak when the module is not powered...)
|
||||||
|
pinMode(_boardConfig.RFMRst, INPUT);
|
||||||
|
pinMode(_boardConfig.RFMDI0, INPUT);
|
||||||
|
pinMode(_boardConfig.RFMCs, INPUT);
|
||||||
|
pinMode(_boardConfig.MOSI, INPUT);
|
||||||
|
pinMode(_boardConfig.MISO, INPUT);
|
||||||
|
pinMode(_boardConfig.SCK, INPUT);
|
||||||
|
}
|
||||||
|
|
||||||
float MBPeripherals::batteryVoltage(void)
|
float MBPeripherals::batteryVoltage(void)
|
||||||
{
|
{
|
||||||
//We close the voltage divider bridge and we do the measurement
|
//We close the voltage divider bridge and we do the measurement
|
||||||
@ -72,13 +96,13 @@ void MBPeripherals::_3V3PowerRail(State state)
|
|||||||
delay(10);
|
delay(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
const RF24 &MBPeripherals::getRadio(void){return _NRF;}
|
LoRaClass &MBPeripherals::getRadio(void) {return _RFM95W;}
|
||||||
|
|
||||||
void MBPeripherals::applyRadioConfig(uint8_t channel, uint8_t paLevel, bool enableLNA, rf24_datarate_e datarate)
|
void MBPeripherals::applyRadioConfig(int spreadingFactor, bool enableCRC, int txPower)
|
||||||
{
|
{
|
||||||
_NRF.setChannel(channel);
|
_RFM95W.setSpreadingFactor(spreadingFactor);
|
||||||
_NRF.setPALevel(paLevel, enableLNA);
|
enableCRC ? _RFM95W.enableCrc() : _RFM95W.disableCrc();
|
||||||
_NRF.setDataRate(datarate);
|
_RFM95W.setTxPower(txPower);
|
||||||
}
|
}
|
||||||
|
|
||||||
MAILBOX_EVENT_e MBPeripherals::readMailboxEvent(void)
|
MAILBOX_EVENT_e MBPeripherals::readMailboxEvent(void)
|
||||||
@ -93,8 +117,9 @@ MAILBOX_EVENT_e MBPeripherals::readMailboxEvent(void)
|
|||||||
return MAILBOX_EVENT_e::MAILBOX_LETTER;
|
return MAILBOX_EVENT_e::MAILBOX_LETTER;
|
||||||
else if(analogValue >= 526 && analogValue < 711)
|
else if(analogValue >= 526 && analogValue < 711)
|
||||||
return MAILBOX_EVENT_e::MAILBOX_PACKAGE;
|
return MAILBOX_EVENT_e::MAILBOX_PACKAGE;
|
||||||
|
//The collected event is not used for the moment.
|
||||||
else if(analogValue >= 711 && analogValue < 1000)
|
else if(analogValue >= 711 && analogValue < 1000)
|
||||||
return MAILBOX_EVENT_e::MAILBOX_COLLECTED;
|
return MAILBOX_EVENT_e::MAILBOX_TEST;
|
||||||
else return MAILBOX_EVENT_e::MAILBOX_UNKNOWN;
|
else return MAILBOX_EVENT_e::MAILBOX_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
#ifndef MBPERIPHERALS_H
|
#ifndef MBPERIPHERALS_H
|
||||||
#define MBPERIPHERALS_H
|
#define MBPERIPHERALS_H
|
||||||
|
|
||||||
#include <RF24.h>
|
#include <LoRa.h>
|
||||||
#include <LowPower.h>
|
#include <LowPower.h>
|
||||||
|
|
||||||
#include "BoardConfig.h"
|
#include "BoardConfig.h"
|
||||||
@ -28,14 +28,20 @@ class MBPeripherals
|
|||||||
uint8_t init(void);
|
uint8_t init(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* After calling this methode , you need to execute initExternalPeripherals() to init the peripherals.
|
* After calling this method with the ON parameter, you'll need to execute initExternalPeripherals() to init the peripherals.
|
||||||
|
* Don't forget to properly deinit devices using the deinitExternalPeripherals() method before turning off power to the external peripherals
|
||||||
*/
|
*/
|
||||||
void externalPeripherals(State state){_3V3PowerRail(state);}
|
void externalPeripherals(State state){_3V3PowerRail(state);}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used to init devices after each LDO powerup, external devices need to be turned one externalPeripherals(ON) before calling this function.
|
* Used to init devices after each LDO powerups, external devices need to be turned on with externalPeripherals(ON) before calling this function.
|
||||||
*/
|
*/
|
||||||
uint8_t initExternalPeripherals(void);
|
uint8_t initExternalPeripherals(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Used to properly deinitialize devices before each LDO powerdowns.
|
||||||
|
*/
|
||||||
|
void deinitExternalPeripherals(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Starts a battery voltage measurement and returns a float value in Volts.
|
* Starts a battery voltage measurement and returns a float value in Volts.
|
||||||
@ -44,9 +50,9 @@ class MBPeripherals
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Before calling this method, externalPeripherals(ON) and initExternalPeripherals() must be called respectively.
|
* Before calling this method, externalPeripherals(ON) and initExternalPeripherals() must be called respectively.
|
||||||
* This methods applies the NRF radio configuration.
|
* This methods applies the RFM95W radio base configuration.
|
||||||
*/
|
*/
|
||||||
void applyRadioConfig(uint8_t channel = RADIO_CHANNEL, uint8_t paLevel = RADIO_PA_LEVEL, bool enableLNA = ENABLE_LNA, rf24_datarate_e datarate = RADIO_DATARATE);
|
void applyRadioConfig(int spreadingFactor = LORA_SPREADING_FACTOR, bool enableCRC = RFM95W_ENABLE_CRC, int txPower = RFM95W_TX_POWER);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use this function just after the interrupt wake up retrieve the wake up event.
|
* Use this function just after the interrupt wake up retrieve the wake up event.
|
||||||
@ -65,15 +71,15 @@ class MBPeripherals
|
|||||||
void unmaskExtInt(void);
|
void unmaskExtInt(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Gets the NRF radio object to access it's api.
|
* Gets the LoRaClass object to access its api.
|
||||||
*/
|
*/
|
||||||
const RF24 &getRadio(void);
|
LoRaClass &getRadio(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
private:
|
private:
|
||||||
void _3V3PowerRail(State state);
|
void _3V3PowerRail(State state);
|
||||||
const BoardConfig &_boardConfig;
|
const BoardConfig &_boardConfig;
|
||||||
const RF24 _NRF;
|
LoRaClass _RFM95W;
|
||||||
ExtIntIsr _extIntIsr;
|
ExtIntIsr _extIntIsr;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user