diff options
Diffstat (limited to 'GEOLOC/lib/config.c')
| -rw-r--r-- | GEOLOC/lib/config.c | 51 |
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 + +} |
