[SX127x] add getTempRaw method

Signed-off-by: gozu42 <tvguho-tbmh42-tct.76b2756e@hashmail.org>
pull/150/head
gozu42 2020-06-01 14:26:30 +02:00
rodzic f068a15029
commit f534185cfb
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: E2B45FD232377225
3 zmienionych plików z 62 dodań i 2 usunięć

Wyświetl plik

@ -126,6 +126,7 @@ setRSSIConfig KEYWORD2
setEncoding KEYWORD2
getIRQFlags KEYWORD2
getModemStatus KEYWORD2
getTempRaw KEYWORD2
# RF69-specific
setAESKey KEYWORD2

Wyświetl plik

@ -934,6 +934,58 @@ uint8_t SX127x::getModemStatus() {
return(_mod->SPIreadRegister(SX127X_REG_MODEM_STAT));
}
int8_t SX127x::getTempRaw() {
int8_t temp = 0;
uint8_t previousOpMode;
uint8_t ival;
// save current Op Mode
previousOpMode = _mod->SPIgetRegValue(SX127X_REG_OP_MODE);
// check if we need to step out of LoRa mode first
if ((previousOpMode & SX127X_LORA) == SX127X_LORA) {
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, (SX127X_LORA | SX127X_SLEEP));
}
// put device in FSK sleep
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, (SX127X_FSK_OOK | SX127X_SLEEP));
// put device in FSK RxSynth
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, (SX127X_FSK_OOK | SX127X_FSRX));
// enable temperature reading
_mod->SPIsetRegValue(SX127X_REG_IMAGE_CAL, SX127X_TEMP_MONITOR_ON, 0, 0);
// wait
delayMicroseconds(200);
// disable temperature reading
_mod->SPIsetRegValue(SX127X_REG_IMAGE_CAL, SX127X_TEMP_MONITOR_OFF, 0, 0);
// put device in FSK sleep
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, (SX127X_FSK_OOK | SX127X_SLEEP));
// read temperature
ival = _mod->SPIgetRegValue(SX127X_REG_TEMP);
// convert very raw value
if ((ival & 0x80) == 0x80) {
temp = 255 - ival;
} else {
temp = -1 * ival;
}
// check if we need to step back into LoRa mode
if ((previousOpMode & SX127X_LORA) == SX127X_LORA) {
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, (SX127X_LORA | SX127X_SLEEP));
}
// reload previous Op Mode
_mod->SPIsetRegValue(SX127X_REG_OP_MODE, previousOpMode);
return(temp);
}
int16_t SX127x::config() {
// turn off frequency hopping
int16_t state = _mod->SPIsetRegValue(SX127X_REG_HOP_PERIOD, SX127X_HOP_PERIOD_OFF);

Wyświetl plik

@ -459,8 +459,8 @@
#define SX127X_TEMP_THRESHOLD_10_DEG_C 0b00000010 // 2 1 10 deg. C (default)
#define SX127X_TEMP_THRESHOLD_15_DEG_C 0b00000100 // 2 1 15 deg. C
#define SX127X_TEMP_THRESHOLD_20_DEG_C 0b00000110 // 2 1 20 deg. C
#define SX127X_TEMP_MONITOR_OFF 0b00000000 // 0 0 temperature monitoring disabled (default)
#define SX127X_TEMP_MONITOR_ON 0b00000001 // 0 0 temperature monitoring enabled
#define SX127X_TEMP_MONITOR_ON 0b00000000 // 0 0 temperature monitoring enabled (default)
#define SX127X_TEMP_MONITOR_OFF 0b00000001 // 0 0 temperature monitoring disabled
// SX127X_REG_LOW_BAT
#define SX127X_LOW_BAT_OFF 0b00000000 // 3 3 low battery detector disabled
@ -913,6 +913,13 @@ class SX127x: public PhysicalLayer {
*/
uint8_t getModemStatus();
/*!
\brief Reads uncalibrated temperature value.
\returns Uncalibrated temperature sensor reading.
*/
int8_t getTempRaw();
#ifdef RADIOLIB_DEBUG
void regDump();
#endif