1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include "fskconfig.h"
void applyFSKConfig(FSKConfig fsk){
// Set preambleDetection
byte reg=readReg(REG_PREAMBLE_DETECT)&0x7F;
writeReg(REG_PREAMBLE_DETECT, fsk.preambleDetection | reg);
// Set preamble size
reg=fsk.preambleSize>>8;
writeReg(REG_PREAMBLE_MSB, reg);
reg=fsk.preambleSize & 0x00ff;
writeReg(REG_PREAMBLE_LSB, reg);
// Set crcOn
reg=readReg(REG_PACKET_CONFIG_1) & 0xEF;
writeReg(REG_PACKET_CONFIG_1,reg|fsk.crcOn);
// Set crc autoclear
reg=readReg(REG_PACKET_CONFIG_1) & 0xF7;
writeReg(REG_PACKET_CONFIG_1,reg|fsk.crcAutoClearOff);
// Set payloadLength
reg=readReg(REG_PACKET_CONFIG_2) & 0xF8;
byte payloadLengthMSB=(fsk.payloadLength >> 8) &0x7;
byte payloadLengthLSB=fsk.payloadLength &0xFF;
writeReg(REG_PACKET_CONFIG_2,payloadLengthMSB|reg);
writeReg(REG_PAYLOAD_LENGTH, payloadLengthLSB);
// Set fifo threshold
reg=readReg(REG_FIFO_THRESH) & 0xC0;
reg=reg| (fsk.fifoThreshold & 0x3F);
writeReg(REG_FIFO_THRESH,reg);
// Set fixedPayloadLength
reg=readReg(REG_PACKET_CONFIG_1) & 0x7F;
writeReg(REG_PACKET_CONFIG_1,reg | fsk.fixedPayloadLength);
// Set frequency dev
short freqDev=fsk.freqDev/FSTEP;
byte freqDevMSB=freqDev>>8;
byte freqDevLSB=freqDev&0x00FF;
writeReg(REG_FDEV_MSB, freqDevMSB);
writeReg(REG_FDEV_LSB, freqDevLSB);
// Apply bitrate //
short bitrate=FXOSC/fsk.bitrate;
byte bitrateMSB=bitrate>>8;
byte bitrateLSB=bitrate & 0x00FF;
writeReg(REG_BITRATE_MSB, bitrateMSB);
writeReg(REG_BITRATE_LSB, bitrate & 0x0F);
// Apply rssi smoothing
reg=readReg(REG_RSSI_CONFIG) & 0xF8;
reg=reg|fsk.rssiSmoothing;
writeReg(REG_RSSI_CONFIG,reg);
}
int fetchRSSI(){
int value=readReg(REG_RSSI_VALUE);
value=(-value)/2; // See SX1276 datasheet page 86
return(value);
}
|