Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Branch:
- dev-RFM69
- Revision:
- 10:6fe476ec05aa
- Parent:
- 9:2a26eec46988
- Child:
- 11:8f3e72f6a1e0
--- a/main.cpp Sat Aug 01 22:59:16 2015 +0000
+++ b/main.cpp Sat Aug 01 23:57:06 2015 +0000
@@ -99,6 +99,47 @@
GAUSSIAN_THIRD
};
+struct ModulationSetting{
+ char mode;
+ char modulation;
+ char shaping;
+};
+
+struct ocpSetting{
+ bool enabled;
+ char maxCurrent;
+};
+
+struct lnaSetting{
+ char ZIn;
+ bool agc;
+ char gain;
+};
+
+struct syncSetting{
+ bool syncOn;
+ bool fifoFillCondition;
+ char syncSize;
+ char syncTol;
+};
+
+struct packetSetting{
+ bool variableLength;
+ char dcFree;
+ bool crcOn;
+ bool crcAutoClearOff;
+ char addressFiltering;
+ char interPacketRxDelay;
+ bool restartRx;
+ bool autoRxRestartOn;
+ bool aesOn;
+};
+
+struct fifoThresholdSetting{
+ char txStartCondition;
+ char threshold;
+};
+
SPI radio(PB_15, PB_14, PB_13);
DigitalOut radioCS(PB_12,1);
Serial pc(USBTX,USBRX);
@@ -169,14 +210,24 @@
return fdev;
}
-void setModulation(DataMode mode, Modulation modul, Shaping shape){
+void setModulation(ModulationSetting settings){
radioCS = 0;
radio.write(REG_DATA_MODULATION | 0x80);
- radio.write((mode << 5)&0x60 | ((modul <<3)&0x18) | (shape&0x03));
+ radio.write((settings.mode << 5)&0x60 | ((settings.modulation <<3)&0x18) | (settings.shaping&0x03));
+ radioCS = 1;
}
-void getModulation(DataMode mode, Modulation modul, Shaping shape){
- //WRITE A GOOD THING HERE
+ModulationSetting getModulation(){
+ ModulationSetting settings;
+ char reg;
+ radioCS = 0;
+ radio.write(REG_DATA_MODULATION);
+ reg= radio.write(0x00)&0xFF;
+ radioCS = 1;
+ settings.mode = (reg&0x60) >> 5;
+ settings.modulation = (reg&0x18) >>3;
+ settings.shaping = (reg&0x03);
+ return settings;
}
void setBitrate(int bitrate){
@@ -239,32 +290,40 @@
return level;
}
-void setOCP(bool enabled, char maxCurrent){
+void setOCP(ocpSetting ocp){
char regOCP = 0;
- if(enabled){
+ if(ocp.enabled){
regOCP = 0x10;
}
- regOCP |= ((maxCurrent - 45)/5) & 0xFF;
+ regOCP |= ((ocp.maxCurrent - 45)/5) & 0x0F;
radioCS = 0;
radio.write(REG_OCP | 0x80);
radio.write(regOCP);
radioCS = 1;
}
-void getOCP(){
- //SOMETHING GOOD HERE
+ocpSetting getOCP(){
+ char reg;
+ ocpSetting ocp;
+ radioCS = 0;
+ radio.write(REG_OCP);
+ reg = radio.write(0x00);
+ radioCS = 1;
+ ocp.enabled = reg>>4;
+ ocp.maxCurrent = (reg & 0x0F)*5+45;
+ return ocp;
}
-void setLNA(char lnaZIn, bool agc, char gain){
+void setLNA(lnaSetting lna){
char regLNA = 0;
- if(lnaZIn == 200){
+ if(lna.ZIn == 200){
regLNA = 0x80;
}
- if(!agc){
- if(gain>48){
+ if(!lna.agc){
+ if(lna.gain>48){
regLNA |= 0x01;
}else{
- regLNA |= (gain&0x07);
+ regLNA |= (lna.gain&0x07);
}
}
radioCS = 0;
@@ -273,8 +332,25 @@
radioCS = 1;
}
-void setLNA(char lnaZIn, bool agc, char gain){
- //SOMETHING GOOD HERE
+lnaSetting getLNA(){
+ char reg;
+ lnaSetting lna;
+ radioCS = 0;
+ radio.write(REG_LNA);
+ reg = radio.write(0x00);
+ radioCS = 1;
+ if(reg&0x80){
+ lna.ZIn = 200;
+ }else{
+ lna.ZIn = 50;
+ }
+ if(reg&0x07==0){
+ lna.agc = 1;
+ }else{
+ lna.agc = 0;
+ }
+ lna.gain = (reg&0x1A)>>3;
+ return lna;
}
void setDIOMapping(int regValue){
@@ -285,7 +361,7 @@
radioCS = 1;
}
-int setDIOMapping(){
+int getDIOMapping(){
int regValue;
radioCS = 0;
radio.write(REG_DIO_MAPPING_1|0x80);
@@ -295,20 +371,42 @@
return regValue;
}
-void setSyncConfig(bool syncOn, bool fifoFillCondition, char syncSize, char syncTol){
+void setSyncConfig(syncSetting sync){
char regSync = 0;
- if(syncOn){
+ if(sync.syncOn){
regSync |= 0x80;
}
- if(fifoFillCondition){
+ if(sync.fifoFillCondition){
regSync |= 0x40;
}
- regSync |= ((syncSize&0x07)<<3);
- regSync |= (syncTol&0x07);
+ regSync |= ((sync.syncSize&0x07)<<3);
+ regSync |= (sync.syncTol&0x07);
+ radioCS = 0;
+ radio.write(REG_SYNC_CONFIG);
+ radio.write(regSync);
+ radioCS = 1;
}
-void getSyncConfig(){
- //SOMETHING GOOD
+syncSetting getSyncConfig(){
+ char reg;
+ syncSetting sync;
+ radioCS = 0;
+ radio.write(REG_SYNC_CONFIG);
+ reg = radio.write(0x00);
+ radioCS = 1;
+ if(reg &= 0x80){
+ sync.syncOn = 1;
+ }else{
+ sync.syncOn = 0;
+ }
+ if(reg&0x40){
+ sync.fifoFillCondition = 1;
+ }else{
+ sync.fifoFillCondition = 0;
+ }
+ sync.syncSize = (reg&0x1A)>>3;
+ sync.syncTol = (reg&0x07);
+ return sync;
}
void setSyncValue(long long value){
@@ -341,34 +439,34 @@
return value;
}
-void setPacketConfig(bool variableLength, char dcFree, bool crcOn, bool crcAutoClearOff, char addressFiltering, char interPacketRxDelay,bool restartRx,bool autoRxRestartOn, bool aesOn){
+void setPacketConfig(packetSetting packetConfig){
char regPacketConfig1 = 0x00;
char regPacketConfig2 = 0x00;
- if(variableLength){
+ if(packetConfig.variableLength){
regPacketConfig1 |= 0x80;
}
- regPacketConfig1 |= (dcFree&0x03)<<5;
- if(crcOn){
+ regPacketConfig1 |= (packetConfig.dcFree&0x03)<<5;
+ if(packetConfig.crcOn){
regPacketConfig1 |= 0x10;
}
- if(crcAutoClearOff){
+ if(packetConfig.crcAutoClearOff){
regPacketConfig1 |= 0x08;
}
- regPacketConfig1 |= ((addressFiltering & 0x03)<<1);
+ regPacketConfig1 |= ((packetConfig.addressFiltering & 0x03)<<1);
radioCS = 0;
radio.write(REG_PACKET_CONFIG_1|0x80);
radio.write(regPacketConfig1);
radioCS = 1;
- regPacketConfig2 |= ((interPacketRxDelay&0x0F)<<4);
- if(restartRx){
+ regPacketConfig2 |= ((packetConfig.interPacketRxDelay&0x0F)<<4);
+ if(packetConfig.restartRx){
regPacketConfig2 |= (1<<2);
}
- if(autoRxRestartOn){
+ if(packetConfig.autoRxRestartOn){
regPacketConfig2 |= (1<<1);
}
- if(aesOn){
+ if(packetConfig.aesOn){
regPacketConfig2 |= 0x01;
}
radioCS = 0;
@@ -377,8 +475,53 @@
radioCS = 1;
}
-void getPacketConfig(){
- //SOMETHING GOOD HERE
+packetSetting getPacketConfig(){
+ packetSetting packetConfig;
+ char regPacketConfig1;
+ char regPacketConfig2;
+ radioCS = 0;
+ radio.write(REG_PACKET_CONFIG_1|0x80);
+ regPacketConfig1 = radio.write(0x00);
+ radioCS = 1;
+ radioCS = 0;
+ radio.write(REG_PACKET_CONFIG_2|0x80);
+ regPacketConfig2 = radio.write(0x00);
+ radioCS = 1;
+ if(regPacketConfig1 & 0x80){
+ packetConfig.variableLength = 1;
+ }else{
+ packetConfig.variableLength = 0;
+ }
+ packetConfig.dcFree = (regPacketConfig1&0x60)>>5;
+ if(regPacketConfig1 & 0x10){
+ packetConfig.crcOn = 1;
+ }else{
+ packetConfig.crcOn = 0;
+ }
+ if(regPacketConfig1 & 0x08){
+ packetConfig.crcAutoClearOff = 1;
+ }else{
+ packetConfig.crcAutoClearOff = 1;
+ }
+ packetConfig.addressFiltering = (regPacketConfig1&0x06)>>1;
+
+ packetConfig.interPacketRxDelay = (regPacketConfig2&0xF0)>>4;
+ if(regPacketConfig2 & 0x04){
+ packetConfig.restartRx = 1;
+ }else{
+ packetConfig.restartRx = 0;
+ }
+ if(regPacketConfig2 & 0x02){
+ packetConfig.autoRxRestartOn = 1;
+ }else{
+ packetConfig.autoRxRestartOn = 0;
+ }
+ if(regPacketConfig2 & 0x01){
+ packetConfig.aesOn = 1;
+ }else{
+ packetConfig.aesOn = 0;
+ }
+ return packetConfig;
}
void setPayloadLength(char payloadLength){
@@ -398,15 +541,23 @@
return payloadLength;
}
-void setFifoThreshold(char txStartCondition, char fifoThreshold){
+void setFifoThreshold(fifoThresholdSetting fifo){
radioCS = 0;
radio.write(REG_FIFO_THRESH | 0x80);
- radio.write((txStartCondition<<7)|(fifoThreshold&0x7F));
+ radio.write((fifo.txStartCondition<<7)|(fifo.threshold&0x7F));
radioCS = 1;
}
-void getFifoThreshold(){
- //SOMETHING GOOD HERE
+fifoThresholdSetting getFifoThreshold(){
+ fifoThresholdSetting fifo;
+ char reg;
+ radioCS = 0;
+ radio.write(REG_FIFO_THRESH);
+ reg = radio.write(0x00);
+ radioCS = 1;
+ fifo.txStartCondition = reg >> 7;
+ fifo.threshold = reg &0x7F;
+ return fifo;
}
int main(){

