SurreyEARS / Mbed 2 deprecated EARS-FlightCTRL

Dependencies:   mbed USBDevice

Committer:
captaingoujon
Date:
Sat Aug 01 23:57:06 2015 +0000
Branch:
dev-RFM69
Revision:
10:6fe476ec05aa
Parent:
9:2a26eec46988
Child:
11:8f3e72f6a1e0
Functions finished (may need more in future)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
captaingoujon 0:27c53e093a59 1 #include "mbed.h"
captaingoujon 0:27c53e093a59 2
captaingoujon 9:2a26eec46988 3 #define FSTEP 61
captaingoujon 9:2a26eec46988 4 #define FXOSC 32000000
captaingoujon 9:2a26eec46988 5
captaingoujon 9:2a26eec46988 6 enum Registers{
captaingoujon 9:2a26eec46988 7 REG_FIFO = 0x00,
captaingoujon 9:2a26eec46988 8 REG_OP_MODE = 0x01,
captaingoujon 9:2a26eec46988 9 REG_DATA_MODULATION = 0x02,
captaingoujon 9:2a26eec46988 10 REG_BITRATE_MSB = 0x03,
captaingoujon 9:2a26eec46988 11 REG_BITRATE_LSB = 0x04,
captaingoujon 9:2a26eec46988 12 REG_FDEV_MSB = 0x05,
captaingoujon 9:2a26eec46988 13 REG_FDEV_LSB = 0x06,
captaingoujon 9:2a26eec46988 14 REG_FREQ_MSB = 0x07,
captaingoujon 9:2a26eec46988 15 REG_FREQ_MID = 0x08,
captaingoujon 9:2a26eec46988 16 REG_FREQ_LSB = 0x09,
captaingoujon 9:2a26eec46988 17 REG_OSC1 = 0x0A,
captaingoujon 9:2a26eec46988 18 REG_AFC_CTRL = 0x0B,
captaingoujon 9:2a26eec46988 19 REG_LISTEN_1 = 0x0D,
captaingoujon 9:2a26eec46988 20 REG_LISTEN_2 = 0x0E,
captaingoujon 9:2a26eec46988 21 REG_LISTEN_3 = 0x0F,
captaingoujon 9:2a26eec46988 22 REG_VERSION = 0x10,
captaingoujon 9:2a26eec46988 23 REG_PA_LEVEL = 0x11,
captaingoujon 9:2a26eec46988 24 REG_PA_RAMP = 0x12,
captaingoujon 9:2a26eec46988 25 REG_OCP = 0x13,
captaingoujon 9:2a26eec46988 26 REG_LNA = 0x18,
captaingoujon 9:2a26eec46988 27 REG_RX_BW = 0x19,
captaingoujon 9:2a26eec46988 28 REG_AFC_BW = 0x1A,
captaingoujon 9:2a26eec46988 29 REG_OOK_PEAK = 0x1B,
captaingoujon 9:2a26eec46988 30 REG_OOK_AVG = 0x1C,
captaingoujon 9:2a26eec46988 31 REG_OOK_FIX = 0x1D,
captaingoujon 9:2a26eec46988 32 REG_AFC_FEI = 0x1E,
captaingoujon 9:2a26eec46988 33 REG_AFC_MSB = 0x1F,
captaingoujon 9:2a26eec46988 34 REG_AFC_LSB = 0x20,
captaingoujon 9:2a26eec46988 35 REG_FEI_MSB = 0x21,
captaingoujon 9:2a26eec46988 36 REG_FEI_LSB = 0x22,
captaingoujon 9:2a26eec46988 37 REG_RSSI_CONFIG = 0x23,
captaingoujon 9:2a26eec46988 38 REG_RSSI_VALUE = 0x24,
captaingoujon 9:2a26eec46988 39 REG_DIO_MAPPING_1 = 0x25,
captaingoujon 9:2a26eec46988 40 REG_DIO_MAPPING_2 = 0x26,
captaingoujon 9:2a26eec46988 41 REG_IRQ_FLAGS_1 = 0x27,
captaingoujon 9:2a26eec46988 42 REG_IRQ_FLAGS_2 = 0x28,
captaingoujon 9:2a26eec46988 43 REG_RSSI_THRESH = 0x29,
captaingoujon 9:2a26eec46988 44 REG_RX_TIMEOUT_1 = 0x2A,
captaingoujon 9:2a26eec46988 45 REG_RX_TIMEOUT_2 =0x2B,
captaingoujon 9:2a26eec46988 46 REG_PREAMBLE_MSB = 0x2C,
captaingoujon 9:2a26eec46988 47 REG_PREAMBLE_LSB = 0x2D,
captaingoujon 9:2a26eec46988 48 REG_SYNC_CONFIG = 0x2E,
captaingoujon 9:2a26eec46988 49 REG_SYNC_VALUE_1 = 0x2F,
captaingoujon 9:2a26eec46988 50 REG_SYNC_VALUE_2 = 0x30,
captaingoujon 9:2a26eec46988 51 REG_SYNC_VALUE_3 = 0x31,
captaingoujon 9:2a26eec46988 52 REG_SYNC_VALUE_4 = 0x32,
captaingoujon 9:2a26eec46988 53 REG_SYNC_VALUE_5 = 0x33,
captaingoujon 9:2a26eec46988 54 REG_SYNC_VALUE_6 = 0x34,
captaingoujon 9:2a26eec46988 55 REG_SYNC_VALUE_7 = 0x35,
captaingoujon 9:2a26eec46988 56 REG_SYNC_VALUE_8 = 0x36,
captaingoujon 9:2a26eec46988 57 REG_PACKET_CONFIG_1 = 0x37,
captaingoujon 9:2a26eec46988 58 REG_PAYLOAD_LENGTH = 0x38,
captaingoujon 9:2a26eec46988 59 REG_NODE_ADRS = 0x39,
captaingoujon 9:2a26eec46988 60 REG_BROADCAST_ADRS = 0x3A,
captaingoujon 9:2a26eec46988 61 REG_AUTO_MODES = 0x3B,
captaingoujon 9:2a26eec46988 62 REG_FIFO_THRESH = 0x3C,
captaingoujon 9:2a26eec46988 63 REG_PACKET_CONFIG_2 = 0x3D,
captaingoujon 9:2a26eec46988 64 REG_AES_KEY_1 = 0x3E,
captaingoujon 9:2a26eec46988 65 REG_AES_KEY_2 = 0x3F,
captaingoujon 9:2a26eec46988 66 REG_AES_KEY_3 = 0x40,
captaingoujon 9:2a26eec46988 67 REG_AES_KEY_4 = 0x41,
captaingoujon 9:2a26eec46988 68 REG_AES_KEY_5 = 0x42,
captaingoujon 9:2a26eec46988 69 REG_AES_KEY_6 = 0x43,
captaingoujon 9:2a26eec46988 70 REG_AES_KEY_7 = 0x44,
captaingoujon 9:2a26eec46988 71 REG_AES_KEY_8 = 0x45,
captaingoujon 9:2a26eec46988 72 REG_AES_KEY_9 = 0x46,
captaingoujon 9:2a26eec46988 73 REG_AES_KEY_10 = 0x47,
captaingoujon 9:2a26eec46988 74 REG_AES_KEY_11 = 0x48,
captaingoujon 9:2a26eec46988 75 REG_AES_KEY_12 = 0x49,
captaingoujon 9:2a26eec46988 76 REG_AES_KEY_13 = 0x4A,
captaingoujon 9:2a26eec46988 77 REG_AES_KEY_14 = 0x4B,
captaingoujon 9:2a26eec46988 78 REG_AES_KEY_15 = 0x4C,
captaingoujon 9:2a26eec46988 79 REG_AES_KEY_16 = 0x4D,
captaingoujon 9:2a26eec46988 80 REG_TEMP_1 = 0x4E,
captaingoujon 9:2a26eec46988 81 REG_TEMP_2 = 0x4F
captaingoujon 9:2a26eec46988 82 };
captaingoujon 9:2a26eec46988 83
captaingoujon 9:2a26eec46988 84 enum DataMode{
captaingoujon 9:2a26eec46988 85 MODE_PACKET = 0x00,
captaingoujon 9:2a26eec46988 86 MODE_CONTINUOUS_SYNC = 0x02,
captaingoujon 9:2a26eec46988 87 MODE_CONTINUOUS_NOSYNC = 0x03
captaingoujon 9:2a26eec46988 88 };
captaingoujon 9:2a26eec46988 89
captaingoujon 9:2a26eec46988 90 enum Modulation{
captaingoujon 9:2a26eec46988 91 MODULATION_FSK,
captaingoujon 9:2a26eec46988 92 MODULATION_OOK
captaingoujon 9:2a26eec46988 93 };
captaingoujon 9:2a26eec46988 94
captaingoujon 9:2a26eec46988 95 enum Shaping{
captaingoujon 9:2a26eec46988 96 NONE,
captaingoujon 9:2a26eec46988 97 GAUSSIAN_FULL,
captaingoujon 9:2a26eec46988 98 GAUSSIAN_HALF,
captaingoujon 9:2a26eec46988 99 GAUSSIAN_THIRD
captaingoujon 9:2a26eec46988 100 };
captaingoujon 9:2a26eec46988 101
captaingoujon 10:6fe476ec05aa 102 struct ModulationSetting{
captaingoujon 10:6fe476ec05aa 103 char mode;
captaingoujon 10:6fe476ec05aa 104 char modulation;
captaingoujon 10:6fe476ec05aa 105 char shaping;
captaingoujon 10:6fe476ec05aa 106 };
captaingoujon 10:6fe476ec05aa 107
captaingoujon 10:6fe476ec05aa 108 struct ocpSetting{
captaingoujon 10:6fe476ec05aa 109 bool enabled;
captaingoujon 10:6fe476ec05aa 110 char maxCurrent;
captaingoujon 10:6fe476ec05aa 111 };
captaingoujon 10:6fe476ec05aa 112
captaingoujon 10:6fe476ec05aa 113 struct lnaSetting{
captaingoujon 10:6fe476ec05aa 114 char ZIn;
captaingoujon 10:6fe476ec05aa 115 bool agc;
captaingoujon 10:6fe476ec05aa 116 char gain;
captaingoujon 10:6fe476ec05aa 117 };
captaingoujon 10:6fe476ec05aa 118
captaingoujon 10:6fe476ec05aa 119 struct syncSetting{
captaingoujon 10:6fe476ec05aa 120 bool syncOn;
captaingoujon 10:6fe476ec05aa 121 bool fifoFillCondition;
captaingoujon 10:6fe476ec05aa 122 char syncSize;
captaingoujon 10:6fe476ec05aa 123 char syncTol;
captaingoujon 10:6fe476ec05aa 124 };
captaingoujon 10:6fe476ec05aa 125
captaingoujon 10:6fe476ec05aa 126 struct packetSetting{
captaingoujon 10:6fe476ec05aa 127 bool variableLength;
captaingoujon 10:6fe476ec05aa 128 char dcFree;
captaingoujon 10:6fe476ec05aa 129 bool crcOn;
captaingoujon 10:6fe476ec05aa 130 bool crcAutoClearOff;
captaingoujon 10:6fe476ec05aa 131 char addressFiltering;
captaingoujon 10:6fe476ec05aa 132 char interPacketRxDelay;
captaingoujon 10:6fe476ec05aa 133 bool restartRx;
captaingoujon 10:6fe476ec05aa 134 bool autoRxRestartOn;
captaingoujon 10:6fe476ec05aa 135 bool aesOn;
captaingoujon 10:6fe476ec05aa 136 };
captaingoujon 10:6fe476ec05aa 137
captaingoujon 10:6fe476ec05aa 138 struct fifoThresholdSetting{
captaingoujon 10:6fe476ec05aa 139 char txStartCondition;
captaingoujon 10:6fe476ec05aa 140 char threshold;
captaingoujon 10:6fe476ec05aa 141 };
captaingoujon 10:6fe476ec05aa 142
captaingoujon 9:2a26eec46988 143 SPI radio(PB_15, PB_14, PB_13);
captaingoujon 9:2a26eec46988 144 DigitalOut radioCS(PB_12,1);
captaingoujon 9:2a26eec46988 145 Serial pc(USBTX,USBRX);
captaingoujon 9:2a26eec46988 146
captaingoujon 9:2a26eec46988 147 int getVersion(){
captaingoujon 9:2a26eec46988 148 int version;
captaingoujon 9:2a26eec46988 149 radioCS = 0;
captaingoujon 9:2a26eec46988 150 radio.write(REG_VERSION);
captaingoujon 9:2a26eec46988 151 version = radio.write(0x00);
captaingoujon 9:2a26eec46988 152 radioCS = 1;
captaingoujon 9:2a26eec46988 153 return version;
captaingoujon 9:2a26eec46988 154 }
captaingoujon 9:2a26eec46988 155
captaingoujon 9:2a26eec46988 156 void setFreq(int freq){
captaingoujon 9:2a26eec46988 157 freq /= FSTEP;
captaingoujon 9:2a26eec46988 158 radioCS = 0;
captaingoujon 9:2a26eec46988 159 radio.write(REG_FREQ_MSB | 0x80);
captaingoujon 9:2a26eec46988 160 radio.write((freq>>16)&0xFF);
captaingoujon 9:2a26eec46988 161 radio.write((freq>>8)&0xFF);
captaingoujon 9:2a26eec46988 162 radio.write((freq)&0xFF);
captaingoujon 9:2a26eec46988 163 radioCS=1;
captaingoujon 9:2a26eec46988 164 }
captaingoujon 9:2a26eec46988 165
captaingoujon 9:2a26eec46988 166 int getFreq(){
captaingoujon 9:2a26eec46988 167 int freq;
captaingoujon 9:2a26eec46988 168 radioCS = 0;
captaingoujon 9:2a26eec46988 169 radio.write(REG_FREQ_MSB);
captaingoujon 9:2a26eec46988 170 freq = radio.write(0x00)<<16;
captaingoujon 9:2a26eec46988 171 freq|= radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 172 freq|= radio.write(0x00);
captaingoujon 9:2a26eec46988 173 radioCS = 1;
captaingoujon 9:2a26eec46988 174 return freq*FSTEP;
captaingoujon 9:2a26eec46988 175 }
captaingoujon 9:2a26eec46988 176
captaingoujon 9:2a26eec46988 177 void setMode(char mode){
captaingoujon 9:2a26eec46988 178 radioCS = 0;
captaingoujon 9:2a26eec46988 179 radio.write(REG_OP_MODE|0x80);
captaingoujon 9:2a26eec46988 180 radio.write(mode);
captaingoujon 9:2a26eec46988 181 radioCS = 1;
captaingoujon 9:2a26eec46988 182 }
captaingoujon 9:2a26eec46988 183
captaingoujon 9:2a26eec46988 184 char getMode(){
captaingoujon 9:2a26eec46988 185 char mode;
captaingoujon 9:2a26eec46988 186 radioCS = 0;
captaingoujon 9:2a26eec46988 187 radio.write(REG_OP_MODE);
captaingoujon 9:2a26eec46988 188 mode = radio.write(0x00);
captaingoujon 9:2a26eec46988 189 radioCS = 1;
captaingoujon 9:2a26eec46988 190 return mode;
captaingoujon 9:2a26eec46988 191 }
captaingoujon 9:2a26eec46988 192
captaingoujon 9:2a26eec46988 193 void setFdev(int fdev){
captaingoujon 9:2a26eec46988 194 fdev /= FSTEP;
captaingoujon 9:2a26eec46988 195 radioCS = 0;
captaingoujon 9:2a26eec46988 196 radio.write(REG_FDEV_MSB | 0x80);
captaingoujon 9:2a26eec46988 197 radio.write((fdev >> 8) & 0x1F);
captaingoujon 9:2a26eec46988 198 radio.write(fdev & 0xFF);
captaingoujon 9:2a26eec46988 199 radioCS = 1;
captaingoujon 9:2a26eec46988 200 }
captaingoujon 9:2a26eec46988 201
captaingoujon 9:2a26eec46988 202 int getFdev(){
captaingoujon 9:2a26eec46988 203 int fdev;
captaingoujon 9:2a26eec46988 204 radioCS = 0;
captaingoujon 9:2a26eec46988 205 radio.write(REG_FDEV_MSB);
captaingoujon 9:2a26eec46988 206 fdev = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 207 fdev |= radio.write(fdev)&0xFF;
captaingoujon 9:2a26eec46988 208 radioCS = 1;
captaingoujon 9:2a26eec46988 209 fdev *= FSTEP;
captaingoujon 9:2a26eec46988 210 return fdev;
captaingoujon 9:2a26eec46988 211 }
captaingoujon 9:2a26eec46988 212
captaingoujon 10:6fe476ec05aa 213 void setModulation(ModulationSetting settings){
captaingoujon 9:2a26eec46988 214 radioCS = 0;
captaingoujon 9:2a26eec46988 215 radio.write(REG_DATA_MODULATION | 0x80);
captaingoujon 10:6fe476ec05aa 216 radio.write((settings.mode << 5)&0x60 | ((settings.modulation <<3)&0x18) | (settings.shaping&0x03));
captaingoujon 10:6fe476ec05aa 217 radioCS = 1;
captaingoujon 9:2a26eec46988 218 }
captaingoujon 9:2a26eec46988 219
captaingoujon 10:6fe476ec05aa 220 ModulationSetting getModulation(){
captaingoujon 10:6fe476ec05aa 221 ModulationSetting settings;
captaingoujon 10:6fe476ec05aa 222 char reg;
captaingoujon 10:6fe476ec05aa 223 radioCS = 0;
captaingoujon 10:6fe476ec05aa 224 radio.write(REG_DATA_MODULATION);
captaingoujon 10:6fe476ec05aa 225 reg= radio.write(0x00)&0xFF;
captaingoujon 10:6fe476ec05aa 226 radioCS = 1;
captaingoujon 10:6fe476ec05aa 227 settings.mode = (reg&0x60) >> 5;
captaingoujon 10:6fe476ec05aa 228 settings.modulation = (reg&0x18) >>3;
captaingoujon 10:6fe476ec05aa 229 settings.shaping = (reg&0x03);
captaingoujon 10:6fe476ec05aa 230 return settings;
captaingoujon 9:2a26eec46988 231 }
captaingoujon 9:2a26eec46988 232
captaingoujon 9:2a26eec46988 233 void setBitrate(int bitrate){
captaingoujon 9:2a26eec46988 234 bitrate /= FXOSC;
captaingoujon 9:2a26eec46988 235 radioCS = 1;
captaingoujon 9:2a26eec46988 236 radio.write(REG_BITRATE_MSB | 0x80);
captaingoujon 9:2a26eec46988 237 radio.write((bitrate>>8)&0xFF);
captaingoujon 9:2a26eec46988 238 radio.write(bitrate&0xFF);
captaingoujon 9:2a26eec46988 239 radioCS = 1;
captaingoujon 9:2a26eec46988 240 }
captaingoujon 9:2a26eec46988 241
captaingoujon 9:2a26eec46988 242 void getBitrate(){
captaingoujon 9:2a26eec46988 243 int bitrate;
captaingoujon 9:2a26eec46988 244 radioCS = 1;
captaingoujon 9:2a26eec46988 245 radio.write(REG_BITRATE_MSB | 0x80);
captaingoujon 9:2a26eec46988 246 bitrate = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 247 bitrate |= radio.write(0x00)&0xFF;
captaingoujon 9:2a26eec46988 248 radioCS = 1;
captaingoujon 9:2a26eec46988 249 bitrate *= FXOSC;
captaingoujon 9:2a26eec46988 250 }
captaingoujon 9:2a26eec46988 251
captaingoujon 9:2a26eec46988 252 void setPALevel(int level){
captaingoujon 9:2a26eec46988 253 char regPALevel;
captaingoujon 9:2a26eec46988 254 if(level <= -2){//PA0
captaingoujon 9:2a26eec46988 255 regPALevel = 0x80;
captaingoujon 9:2a26eec46988 256 regPALevel |= (level + 18)&0xFF;
captaingoujon 9:2a26eec46988 257 }else if(level <= 13){//PA1
captaingoujon 9:2a26eec46988 258 regPALevel = 0x40;
captaingoujon 9:2a26eec46988 259 regPALevel |= (level + 18)&0xFF;
captaingoujon 9:2a26eec46988 260 }else if(level<=17){//PA1,PA2
captaingoujon 9:2a26eec46988 261 regPALevel = 0xA0;
captaingoujon 9:2a26eec46988 262 regPALevel |= (level + 14)&0xFF;
captaingoujon 9:2a26eec46988 263 }else{
captaingoujon 9:2a26eec46988 264 return;
captaingoujon 9:2a26eec46988 265 }
captaingoujon 9:2a26eec46988 266 radioCS = 0;
captaingoujon 9:2a26eec46988 267 radio.write(REG_PA_LEVEL | 0x80);
captaingoujon 9:2a26eec46988 268 radio.write(regPALevel);
captaingoujon 9:2a26eec46988 269 radioCS = 1;
captaingoujon 9:2a26eec46988 270 }
captaingoujon 9:2a26eec46988 271
captaingoujon 9:2a26eec46988 272 int getPALevel(){
captaingoujon 9:2a26eec46988 273 int level = 0;
captaingoujon 9:2a26eec46988 274 char regPALevel;
captaingoujon 9:2a26eec46988 275 radioCS = 0;
captaingoujon 9:2a26eec46988 276 radio.write(REG_PA_LEVEL);
captaingoujon 9:2a26eec46988 277 regPALevel = radio.write(0x00);
captaingoujon 9:2a26eec46988 278 radioCS = 1;
captaingoujon 9:2a26eec46988 279 if((regPALevel&0x80) || (regPALevel&0x40)){//PA1,PA2
captaingoujon 9:2a26eec46988 280 regPALevel = 0xA0;
captaingoujon 9:2a26eec46988 281 regPALevel |= (level + 14)&0xFF;
captaingoujon 9:2a26eec46988 282 }else if(regPALevel&0x80){//PA0
captaingoujon 9:2a26eec46988 283 level |= (regPALevel&0x1F - 18);
captaingoujon 9:2a26eec46988 284 }else if(regPALevel&0x40){//PA1
captaingoujon 9:2a26eec46988 285 regPALevel = 0x40;
captaingoujon 9:2a26eec46988 286 regPALevel |= (level&0x1F - 18);
captaingoujon 9:2a26eec46988 287 }else{
captaingoujon 9:2a26eec46988 288 return 0;
captaingoujon 9:2a26eec46988 289 }
captaingoujon 9:2a26eec46988 290 return level;
captaingoujon 9:2a26eec46988 291 }
captaingoujon 9:2a26eec46988 292
captaingoujon 10:6fe476ec05aa 293 void setOCP(ocpSetting ocp){
captaingoujon 9:2a26eec46988 294 char regOCP = 0;
captaingoujon 10:6fe476ec05aa 295 if(ocp.enabled){
captaingoujon 9:2a26eec46988 296 regOCP = 0x10;
captaingoujon 9:2a26eec46988 297 }
captaingoujon 10:6fe476ec05aa 298 regOCP |= ((ocp.maxCurrent - 45)/5) & 0x0F;
captaingoujon 9:2a26eec46988 299 radioCS = 0;
captaingoujon 9:2a26eec46988 300 radio.write(REG_OCP | 0x80);
captaingoujon 9:2a26eec46988 301 radio.write(regOCP);
captaingoujon 9:2a26eec46988 302 radioCS = 1;
captaingoujon 9:2a26eec46988 303 }
captaingoujon 9:2a26eec46988 304
captaingoujon 10:6fe476ec05aa 305 ocpSetting getOCP(){
captaingoujon 10:6fe476ec05aa 306 char reg;
captaingoujon 10:6fe476ec05aa 307 ocpSetting ocp;
captaingoujon 10:6fe476ec05aa 308 radioCS = 0;
captaingoujon 10:6fe476ec05aa 309 radio.write(REG_OCP);
captaingoujon 10:6fe476ec05aa 310 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 311 radioCS = 1;
captaingoujon 10:6fe476ec05aa 312 ocp.enabled = reg>>4;
captaingoujon 10:6fe476ec05aa 313 ocp.maxCurrent = (reg & 0x0F)*5+45;
captaingoujon 10:6fe476ec05aa 314 return ocp;
captaingoujon 9:2a26eec46988 315 }
captaingoujon 9:2a26eec46988 316
captaingoujon 10:6fe476ec05aa 317 void setLNA(lnaSetting lna){
captaingoujon 9:2a26eec46988 318 char regLNA = 0;
captaingoujon 10:6fe476ec05aa 319 if(lna.ZIn == 200){
captaingoujon 9:2a26eec46988 320 regLNA = 0x80;
captaingoujon 9:2a26eec46988 321 }
captaingoujon 10:6fe476ec05aa 322 if(!lna.agc){
captaingoujon 10:6fe476ec05aa 323 if(lna.gain>48){
captaingoujon 9:2a26eec46988 324 regLNA |= 0x01;
captaingoujon 9:2a26eec46988 325 }else{
captaingoujon 10:6fe476ec05aa 326 regLNA |= (lna.gain&0x07);
captaingoujon 9:2a26eec46988 327 }
captaingoujon 9:2a26eec46988 328 }
captaingoujon 9:2a26eec46988 329 radioCS = 0;
captaingoujon 9:2a26eec46988 330 radio.write(REG_LNA | 0x80);
captaingoujon 9:2a26eec46988 331 radio.write(regLNA);
captaingoujon 9:2a26eec46988 332 radioCS = 1;
captaingoujon 9:2a26eec46988 333 }
captaingoujon 9:2a26eec46988 334
captaingoujon 10:6fe476ec05aa 335 lnaSetting getLNA(){
captaingoujon 10:6fe476ec05aa 336 char reg;
captaingoujon 10:6fe476ec05aa 337 lnaSetting lna;
captaingoujon 10:6fe476ec05aa 338 radioCS = 0;
captaingoujon 10:6fe476ec05aa 339 radio.write(REG_LNA);
captaingoujon 10:6fe476ec05aa 340 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 341 radioCS = 1;
captaingoujon 10:6fe476ec05aa 342 if(reg&0x80){
captaingoujon 10:6fe476ec05aa 343 lna.ZIn = 200;
captaingoujon 10:6fe476ec05aa 344 }else{
captaingoujon 10:6fe476ec05aa 345 lna.ZIn = 50;
captaingoujon 10:6fe476ec05aa 346 }
captaingoujon 10:6fe476ec05aa 347 if(reg&0x07==0){
captaingoujon 10:6fe476ec05aa 348 lna.agc = 1;
captaingoujon 10:6fe476ec05aa 349 }else{
captaingoujon 10:6fe476ec05aa 350 lna.agc = 0;
captaingoujon 10:6fe476ec05aa 351 }
captaingoujon 10:6fe476ec05aa 352 lna.gain = (reg&0x1A)>>3;
captaingoujon 10:6fe476ec05aa 353 return lna;
captaingoujon 9:2a26eec46988 354 }
captaingoujon 9:2a26eec46988 355
captaingoujon 9:2a26eec46988 356 void setDIOMapping(int regValue){
captaingoujon 9:2a26eec46988 357 radioCS = 0;
captaingoujon 9:2a26eec46988 358 radio.write(REG_DIO_MAPPING_1|0x80);
captaingoujon 9:2a26eec46988 359 radio.write((regValue>>8)&0xFF);
captaingoujon 9:2a26eec46988 360 radio.write(regValue&0xFF);
captaingoujon 9:2a26eec46988 361 radioCS = 1;
captaingoujon 9:2a26eec46988 362 }
captaingoujon 9:2a26eec46988 363
captaingoujon 10:6fe476ec05aa 364 int getDIOMapping(){
captaingoujon 9:2a26eec46988 365 int regValue;
captaingoujon 9:2a26eec46988 366 radioCS = 0;
captaingoujon 9:2a26eec46988 367 radio.write(REG_DIO_MAPPING_1|0x80);
captaingoujon 9:2a26eec46988 368 regValue = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 369 regValue |= radio.write(0x00)&0xFF;
captaingoujon 9:2a26eec46988 370 radioCS = 1;
captaingoujon 9:2a26eec46988 371 return regValue;
captaingoujon 9:2a26eec46988 372 }
captaingoujon 9:2a26eec46988 373
captaingoujon 10:6fe476ec05aa 374 void setSyncConfig(syncSetting sync){
captaingoujon 9:2a26eec46988 375 char regSync = 0;
captaingoujon 10:6fe476ec05aa 376 if(sync.syncOn){
captaingoujon 9:2a26eec46988 377 regSync |= 0x80;
captaingoujon 9:2a26eec46988 378 }
captaingoujon 10:6fe476ec05aa 379 if(sync.fifoFillCondition){
captaingoujon 9:2a26eec46988 380 regSync |= 0x40;
captaingoujon 9:2a26eec46988 381 }
captaingoujon 10:6fe476ec05aa 382 regSync |= ((sync.syncSize&0x07)<<3);
captaingoujon 10:6fe476ec05aa 383 regSync |= (sync.syncTol&0x07);
captaingoujon 10:6fe476ec05aa 384 radioCS = 0;
captaingoujon 10:6fe476ec05aa 385 radio.write(REG_SYNC_CONFIG);
captaingoujon 10:6fe476ec05aa 386 radio.write(regSync);
captaingoujon 10:6fe476ec05aa 387 radioCS = 1;
captaingoujon 9:2a26eec46988 388 }
captaingoujon 9:2a26eec46988 389
captaingoujon 10:6fe476ec05aa 390 syncSetting getSyncConfig(){
captaingoujon 10:6fe476ec05aa 391 char reg;
captaingoujon 10:6fe476ec05aa 392 syncSetting sync;
captaingoujon 10:6fe476ec05aa 393 radioCS = 0;
captaingoujon 10:6fe476ec05aa 394 radio.write(REG_SYNC_CONFIG);
captaingoujon 10:6fe476ec05aa 395 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 396 radioCS = 1;
captaingoujon 10:6fe476ec05aa 397 if(reg &= 0x80){
captaingoujon 10:6fe476ec05aa 398 sync.syncOn = 1;
captaingoujon 10:6fe476ec05aa 399 }else{
captaingoujon 10:6fe476ec05aa 400 sync.syncOn = 0;
captaingoujon 10:6fe476ec05aa 401 }
captaingoujon 10:6fe476ec05aa 402 if(reg&0x40){
captaingoujon 10:6fe476ec05aa 403 sync.fifoFillCondition = 1;
captaingoujon 10:6fe476ec05aa 404 }else{
captaingoujon 10:6fe476ec05aa 405 sync.fifoFillCondition = 0;
captaingoujon 10:6fe476ec05aa 406 }
captaingoujon 10:6fe476ec05aa 407 sync.syncSize = (reg&0x1A)>>3;
captaingoujon 10:6fe476ec05aa 408 sync.syncTol = (reg&0x07);
captaingoujon 10:6fe476ec05aa 409 return sync;
captaingoujon 9:2a26eec46988 410 }
captaingoujon 9:2a26eec46988 411
captaingoujon 9:2a26eec46988 412 void setSyncValue(long long value){
captaingoujon 9:2a26eec46988 413 radioCS = 0;
captaingoujon 9:2a26eec46988 414 radio.write(REG_SYNC_VALUE_1 | 0x80);
captaingoujon 9:2a26eec46988 415 radio.write((value>>55)&0xFF);
captaingoujon 9:2a26eec46988 416 radio.write((value>>47)&0xFF);
captaingoujon 9:2a26eec46988 417 radio.write((value>>39)&0xFF);
captaingoujon 9:2a26eec46988 418 radio.write((value>>31)&0xFF);
captaingoujon 9:2a26eec46988 419 radio.write((value>>23)&0xFF);
captaingoujon 9:2a26eec46988 420 radio.write((value>>15)&0xFF);
captaingoujon 9:2a26eec46988 421 radio.write((value>>7)&0xFF);
captaingoujon 9:2a26eec46988 422 radio.write((value)&0xFF);
captaingoujon 9:2a26eec46988 423 radioCS = 1;
captaingoujon 9:2a26eec46988 424 }
captaingoujon 9:2a26eec46988 425
captaingoujon 9:2a26eec46988 426 long long getSyncValue(){
captaingoujon 9:2a26eec46988 427 long long value;
captaingoujon 9:2a26eec46988 428 radioCS = 0;
captaingoujon 9:2a26eec46988 429 radio.write(REG_SYNC_VALUE_1 | 0x80);
captaingoujon 9:2a26eec46988 430 value = (radio.write(0x00)&0xFF)<<55;
captaingoujon 9:2a26eec46988 431 value |= (radio.write(0x00)&0xFF)<<47;
captaingoujon 9:2a26eec46988 432 value |= (radio.write(0x00)&0xFF)<<39;
captaingoujon 9:2a26eec46988 433 value |= (radio.write(0x00)&0xFF)<<31;
captaingoujon 9:2a26eec46988 434 value |= (radio.write(0x00)&0xFF)<<23;
captaingoujon 9:2a26eec46988 435 value |= (radio.write(0x00)&0xFF)<<15;
captaingoujon 9:2a26eec46988 436 value |= (radio.write(0x00)&0xFF)<<7;
captaingoujon 9:2a26eec46988 437 value |= (radio.write(0x00)&0xFF);
captaingoujon 9:2a26eec46988 438 radioCS = 1;
captaingoujon 9:2a26eec46988 439 return value;
captaingoujon 9:2a26eec46988 440 }
captaingoujon 9:2a26eec46988 441
captaingoujon 10:6fe476ec05aa 442 void setPacketConfig(packetSetting packetConfig){
captaingoujon 9:2a26eec46988 443 char regPacketConfig1 = 0x00;
captaingoujon 9:2a26eec46988 444 char regPacketConfig2 = 0x00;
captaingoujon 10:6fe476ec05aa 445 if(packetConfig.variableLength){
captaingoujon 9:2a26eec46988 446 regPacketConfig1 |= 0x80;
captaingoujon 9:2a26eec46988 447 }
captaingoujon 10:6fe476ec05aa 448 regPacketConfig1 |= (packetConfig.dcFree&0x03)<<5;
captaingoujon 10:6fe476ec05aa 449 if(packetConfig.crcOn){
captaingoujon 9:2a26eec46988 450 regPacketConfig1 |= 0x10;
captaingoujon 9:2a26eec46988 451 }
captaingoujon 10:6fe476ec05aa 452 if(packetConfig.crcAutoClearOff){
captaingoujon 9:2a26eec46988 453 regPacketConfig1 |= 0x08;
captaingoujon 9:2a26eec46988 454 }
captaingoujon 10:6fe476ec05aa 455 regPacketConfig1 |= ((packetConfig.addressFiltering & 0x03)<<1);
captaingoujon 9:2a26eec46988 456
captaingoujon 9:2a26eec46988 457 radioCS = 0;
captaingoujon 9:2a26eec46988 458 radio.write(REG_PACKET_CONFIG_1|0x80);
captaingoujon 9:2a26eec46988 459 radio.write(regPacketConfig1);
captaingoujon 9:2a26eec46988 460 radioCS = 1;
captaingoujon 9:2a26eec46988 461
captaingoujon 10:6fe476ec05aa 462 regPacketConfig2 |= ((packetConfig.interPacketRxDelay&0x0F)<<4);
captaingoujon 10:6fe476ec05aa 463 if(packetConfig.restartRx){
captaingoujon 9:2a26eec46988 464 regPacketConfig2 |= (1<<2);
captaingoujon 9:2a26eec46988 465 }
captaingoujon 10:6fe476ec05aa 466 if(packetConfig.autoRxRestartOn){
captaingoujon 9:2a26eec46988 467 regPacketConfig2 |= (1<<1);
captaingoujon 9:2a26eec46988 468 }
captaingoujon 10:6fe476ec05aa 469 if(packetConfig.aesOn){
captaingoujon 9:2a26eec46988 470 regPacketConfig2 |= 0x01;
captaingoujon 9:2a26eec46988 471 }
captaingoujon 9:2a26eec46988 472 radioCS = 0;
captaingoujon 9:2a26eec46988 473 radio.write(REG_PACKET_CONFIG_2|0x80);
captaingoujon 9:2a26eec46988 474 radio.write(regPacketConfig2);
captaingoujon 9:2a26eec46988 475 radioCS = 1;
captaingoujon 9:2a26eec46988 476 }
captaingoujon 9:2a26eec46988 477
captaingoujon 10:6fe476ec05aa 478 packetSetting getPacketConfig(){
captaingoujon 10:6fe476ec05aa 479 packetSetting packetConfig;
captaingoujon 10:6fe476ec05aa 480 char regPacketConfig1;
captaingoujon 10:6fe476ec05aa 481 char regPacketConfig2;
captaingoujon 10:6fe476ec05aa 482 radioCS = 0;
captaingoujon 10:6fe476ec05aa 483 radio.write(REG_PACKET_CONFIG_1|0x80);
captaingoujon 10:6fe476ec05aa 484 regPacketConfig1 = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 485 radioCS = 1;
captaingoujon 10:6fe476ec05aa 486 radioCS = 0;
captaingoujon 10:6fe476ec05aa 487 radio.write(REG_PACKET_CONFIG_2|0x80);
captaingoujon 10:6fe476ec05aa 488 regPacketConfig2 = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 489 radioCS = 1;
captaingoujon 10:6fe476ec05aa 490 if(regPacketConfig1 & 0x80){
captaingoujon 10:6fe476ec05aa 491 packetConfig.variableLength = 1;
captaingoujon 10:6fe476ec05aa 492 }else{
captaingoujon 10:6fe476ec05aa 493 packetConfig.variableLength = 0;
captaingoujon 10:6fe476ec05aa 494 }
captaingoujon 10:6fe476ec05aa 495 packetConfig.dcFree = (regPacketConfig1&0x60)>>5;
captaingoujon 10:6fe476ec05aa 496 if(regPacketConfig1 & 0x10){
captaingoujon 10:6fe476ec05aa 497 packetConfig.crcOn = 1;
captaingoujon 10:6fe476ec05aa 498 }else{
captaingoujon 10:6fe476ec05aa 499 packetConfig.crcOn = 0;
captaingoujon 10:6fe476ec05aa 500 }
captaingoujon 10:6fe476ec05aa 501 if(regPacketConfig1 & 0x08){
captaingoujon 10:6fe476ec05aa 502 packetConfig.crcAutoClearOff = 1;
captaingoujon 10:6fe476ec05aa 503 }else{
captaingoujon 10:6fe476ec05aa 504 packetConfig.crcAutoClearOff = 1;
captaingoujon 10:6fe476ec05aa 505 }
captaingoujon 10:6fe476ec05aa 506 packetConfig.addressFiltering = (regPacketConfig1&0x06)>>1;
captaingoujon 10:6fe476ec05aa 507
captaingoujon 10:6fe476ec05aa 508 packetConfig.interPacketRxDelay = (regPacketConfig2&0xF0)>>4;
captaingoujon 10:6fe476ec05aa 509 if(regPacketConfig2 & 0x04){
captaingoujon 10:6fe476ec05aa 510 packetConfig.restartRx = 1;
captaingoujon 10:6fe476ec05aa 511 }else{
captaingoujon 10:6fe476ec05aa 512 packetConfig.restartRx = 0;
captaingoujon 10:6fe476ec05aa 513 }
captaingoujon 10:6fe476ec05aa 514 if(regPacketConfig2 & 0x02){
captaingoujon 10:6fe476ec05aa 515 packetConfig.autoRxRestartOn = 1;
captaingoujon 10:6fe476ec05aa 516 }else{
captaingoujon 10:6fe476ec05aa 517 packetConfig.autoRxRestartOn = 0;
captaingoujon 10:6fe476ec05aa 518 }
captaingoujon 10:6fe476ec05aa 519 if(regPacketConfig2 & 0x01){
captaingoujon 10:6fe476ec05aa 520 packetConfig.aesOn = 1;
captaingoujon 10:6fe476ec05aa 521 }else{
captaingoujon 10:6fe476ec05aa 522 packetConfig.aesOn = 0;
captaingoujon 10:6fe476ec05aa 523 }
captaingoujon 10:6fe476ec05aa 524 return packetConfig;
captaingoujon 9:2a26eec46988 525 }
captaingoujon 9:2a26eec46988 526
captaingoujon 9:2a26eec46988 527 void setPayloadLength(char payloadLength){
captaingoujon 9:2a26eec46988 528 radioCS = 0;
captaingoujon 9:2a26eec46988 529 radio.write(REG_PAYLOAD_LENGTH | 0x80);
captaingoujon 9:2a26eec46988 530 radio.write(payloadLength);
captaingoujon 9:2a26eec46988 531 radioCS = 1;
captaingoujon 9:2a26eec46988 532 }
captaingoujon 9:2a26eec46988 533
captaingoujon 9:2a26eec46988 534
captaingoujon 9:2a26eec46988 535 char setPayloadLength(){
captaingoujon 9:2a26eec46988 536 char payloadLength;
captaingoujon 9:2a26eec46988 537 radioCS = 0;
captaingoujon 9:2a26eec46988 538 radio.write(REG_PAYLOAD_LENGTH);
captaingoujon 9:2a26eec46988 539 payloadLength = radio.write(0x00);
captaingoujon 9:2a26eec46988 540 radioCS = 1;
captaingoujon 9:2a26eec46988 541 return payloadLength;
captaingoujon 9:2a26eec46988 542 }
captaingoujon 9:2a26eec46988 543
captaingoujon 10:6fe476ec05aa 544 void setFifoThreshold(fifoThresholdSetting fifo){
captaingoujon 9:2a26eec46988 545 radioCS = 0;
captaingoujon 9:2a26eec46988 546 radio.write(REG_FIFO_THRESH | 0x80);
captaingoujon 10:6fe476ec05aa 547 radio.write((fifo.txStartCondition<<7)|(fifo.threshold&0x7F));
captaingoujon 9:2a26eec46988 548 radioCS = 1;
captaingoujon 9:2a26eec46988 549 }
captaingoujon 9:2a26eec46988 550
captaingoujon 10:6fe476ec05aa 551 fifoThresholdSetting getFifoThreshold(){
captaingoujon 10:6fe476ec05aa 552 fifoThresholdSetting fifo;
captaingoujon 10:6fe476ec05aa 553 char reg;
captaingoujon 10:6fe476ec05aa 554 radioCS = 0;
captaingoujon 10:6fe476ec05aa 555 radio.write(REG_FIFO_THRESH);
captaingoujon 10:6fe476ec05aa 556 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 557 radioCS = 1;
captaingoujon 10:6fe476ec05aa 558 fifo.txStartCondition = reg >> 7;
captaingoujon 10:6fe476ec05aa 559 fifo.threshold = reg &0x7F;
captaingoujon 10:6fe476ec05aa 560 return fifo;
captaingoujon 9:2a26eec46988 561 }
captaingoujon 9:2a26eec46988 562
captaingoujon 0:27c53e093a59 563 int main(){
captaingoujon 5:f7c32f548d53 564 //Radio Dev branch
captaingoujon 9:2a26eec46988 565 radio.format(8,0);
captaingoujon 9:2a26eec46988 566 //radio.frequency(1000000);
captaingoujon 9:2a26eec46988 567 setMode(0x04);
captaingoujon 9:2a26eec46988 568 wait(1);
captaingoujon 9:2a26eec46988 569 pc.printf("Start\n\r");
captaingoujon 9:2a26eec46988 570 pc.printf("%d\n\r",getFreq());
captaingoujon 9:2a26eec46988 571 //wait(1);
captaingoujon 9:2a26eec46988 572 setFreq(434650000);
captaingoujon 9:2a26eec46988 573 wait(1);
captaingoujon 9:2a26eec46988 574 pc.printf("%d\n\r",getFreq());
captaingoujon 9:2a26eec46988 575 while(1){
captaingoujon 9:2a26eec46988 576 //pc.printf("%d\n\r",getFreq());
captaingoujon 9:2a26eec46988 577 //wait(1);
captaingoujon 9:2a26eec46988 578 __WFI();
captaingoujon 9:2a26eec46988 579 }
captaingoujon 0:27c53e093a59 580 }