aboutsummaryrefslogtreecommitdiff
path: root/GEOLOC/lib/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'GEOLOC/lib/config.c')
-rw-r--r--GEOLOC/lib/config.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/GEOLOC/lib/config.c b/GEOLOC/lib/config.c
new file mode 100644
index 0000000..b086628
--- /dev/null
+++ b/GEOLOC/lib/config.c
@@ -0,0 +1,51 @@
+#include "config.h"
+
+void applyConfig(Config config){
+
+ // Apply modulation and mode
+ byte reg=readReg(REG_OP_MODE) &0x3F ; // Fetch opmode register and clear modulation and mode bits
+ reg=reg | config.mod; // Apply modulation and mode
+ writeReg(REG_OP_MODE,reg); // Send register back to module
+
+ // Apply carrier frequency
+ int cFreq=config.cFreq/FSTEP;
+ reg=cFreq >> 16 ;
+ writeReg(REG_FRF_MSB,reg); // Send register to module
+ reg=(cFreq&0x00FFFF) >> 8 ;
+ writeReg(REG_FRF_MID,reg); /// Send register to module
+ reg=(cFreq&0x0000FF);
+ writeReg(REG_FRF_LSB,reg); // Send register to module
+
+ // Set LNAGain
+ reg=readReg(REG_LNA) & 0x7F;
+ writeReg(REG_LNA, reg|config.lnaGain);
+
+
+ // Apply PaBoost, max output power and outputPower
+ byte Pmax=round((config.maxPower-10.8)/0.6);
+ Pmax=(Pmax & 0x07)<<4;
+ byte outputPower;
+ if(config.paSelect==PA_SELECT_ON){
+ outputPower=config.outputPower-32;
+ }
+ else{
+ outputPower=config.outputPower-Pmax+15;
+ }
+ outputPower=config.outputPower & 0x0F;
+ reg=config.paSelect|outputPower|Pmax;
+ writeReg(REG_PA_CONFIG, reg);
+
+
+ // Apply FSK configuration
+ if(config.mod==MOD_FSK){
+ applyFSKConfig(config.fsk);
+ }
+}
+
+void applyMode(Config config){
+ // Apply modulation and mode
+ byte reg=readReg(REG_OP_MODE) &0xF8 ; // Fetch opmode register and clear mode
+ reg=config.mode | reg; // Apply mode
+ writeReg(REG_OP_MODE,reg); // Send register back to module
+
+}