51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
#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
|
|
|
|
}
|