SurreyEARS / Mbed 2 deprecated EARS-FlightCTRL

Dependencies:   mbed USBDevice

Committer:
captaingoujon
Date:
Tue Aug 18 12:32:13 2015 +0000
Branch:
dev-RFM69
Revision:
11:8f3e72f6a1e0
Parent:
10:6fe476ec05aa
Changed loads of stuff

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 11:8f3e72f6a1e0 91 MODULATION_FSK = 0x00,
captaingoujon 11:8f3e72f6a1e0 92 MODULATION_OOK = 0x01
captaingoujon 9:2a26eec46988 93 };
captaingoujon 9:2a26eec46988 94
captaingoujon 9:2a26eec46988 95 enum Shaping{
captaingoujon 11:8f3e72f6a1e0 96 SHAPING_NONE = 0x00,
captaingoujon 11:8f3e72f6a1e0 97 SHAPING_GAUSSIAN_FULL = 0x01,
captaingoujon 11:8f3e72f6a1e0 98 SHAPING_GAUSSIAN_HALF = 0x02,
captaingoujon 11:8f3e72f6a1e0 99 SHAPING_GAUSSIAN_THIRD = 0x03
captaingoujon 11:8f3e72f6a1e0 100 };
captaingoujon 11:8f3e72f6a1e0 101
captaingoujon 11:8f3e72f6a1e0 102 enum OperatingMode{
captaingoujon 11:8f3e72f6a1e0 103 MODE_SLEEP = 0x00,
captaingoujon 11:8f3e72f6a1e0 104 MODE_STDBY = 0x01,
captaingoujon 11:8f3e72f6a1e0 105 MODE_FS = 0x02,
captaingoujon 11:8f3e72f6a1e0 106 MODE_TX = 0x03,
captaingoujon 11:8f3e72f6a1e0 107 MODE_RX = 0x04
captaingoujon 9:2a26eec46988 108 };
captaingoujon 9:2a26eec46988 109
captaingoujon 10:6fe476ec05aa 110 struct ModulationSetting{
captaingoujon 10:6fe476ec05aa 111 char mode;
captaingoujon 10:6fe476ec05aa 112 char modulation;
captaingoujon 10:6fe476ec05aa 113 char shaping;
captaingoujon 10:6fe476ec05aa 114 };
captaingoujon 10:6fe476ec05aa 115
captaingoujon 10:6fe476ec05aa 116 struct ocpSetting{
captaingoujon 10:6fe476ec05aa 117 bool enabled;
captaingoujon 10:6fe476ec05aa 118 char maxCurrent;
captaingoujon 10:6fe476ec05aa 119 };
captaingoujon 10:6fe476ec05aa 120
captaingoujon 10:6fe476ec05aa 121 struct lnaSetting{
captaingoujon 10:6fe476ec05aa 122 char ZIn;
captaingoujon 10:6fe476ec05aa 123 bool agc;
captaingoujon 10:6fe476ec05aa 124 char gain;
captaingoujon 10:6fe476ec05aa 125 };
captaingoujon 10:6fe476ec05aa 126
captaingoujon 10:6fe476ec05aa 127 struct syncSetting{
captaingoujon 10:6fe476ec05aa 128 bool syncOn;
captaingoujon 10:6fe476ec05aa 129 bool fifoFillCondition;
captaingoujon 10:6fe476ec05aa 130 char syncSize;
captaingoujon 10:6fe476ec05aa 131 char syncTol;
captaingoujon 10:6fe476ec05aa 132 };
captaingoujon 10:6fe476ec05aa 133
captaingoujon 10:6fe476ec05aa 134 struct packetSetting{
captaingoujon 10:6fe476ec05aa 135 bool variableLength;
captaingoujon 10:6fe476ec05aa 136 char dcFree;
captaingoujon 10:6fe476ec05aa 137 bool crcOn;
captaingoujon 10:6fe476ec05aa 138 bool crcAutoClearOff;
captaingoujon 10:6fe476ec05aa 139 char addressFiltering;
captaingoujon 10:6fe476ec05aa 140 char interPacketRxDelay;
captaingoujon 10:6fe476ec05aa 141 bool restartRx;
captaingoujon 10:6fe476ec05aa 142 bool autoRxRestartOn;
captaingoujon 10:6fe476ec05aa 143 bool aesOn;
captaingoujon 10:6fe476ec05aa 144 };
captaingoujon 10:6fe476ec05aa 145
captaingoujon 10:6fe476ec05aa 146 struct fifoThresholdSetting{
captaingoujon 10:6fe476ec05aa 147 char txStartCondition;
captaingoujon 10:6fe476ec05aa 148 char threshold;
captaingoujon 10:6fe476ec05aa 149 };
captaingoujon 10:6fe476ec05aa 150
captaingoujon 9:2a26eec46988 151 SPI radio(PB_15, PB_14, PB_13);
captaingoujon 9:2a26eec46988 152 DigitalOut radioCS(PB_12,1);
captaingoujon 11:8f3e72f6a1e0 153 DigitalOut led(LED1);
captaingoujon 9:2a26eec46988 154 Serial pc(USBTX,USBRX);
captaingoujon 11:8f3e72f6a1e0 155 InterruptIn dio2(PA_8);
captaingoujon 11:8f3e72f6a1e0 156 DigitalIn fifoNE(PA_8);
captaingoujon 9:2a26eec46988 157
captaingoujon 9:2a26eec46988 158 int getVersion(){
captaingoujon 9:2a26eec46988 159 int version;
captaingoujon 9:2a26eec46988 160 radioCS = 0;
captaingoujon 9:2a26eec46988 161 radio.write(REG_VERSION);
captaingoujon 9:2a26eec46988 162 version = radio.write(0x00);
captaingoujon 9:2a26eec46988 163 radioCS = 1;
captaingoujon 9:2a26eec46988 164 return version;
captaingoujon 9:2a26eec46988 165 }
captaingoujon 9:2a26eec46988 166
captaingoujon 9:2a26eec46988 167 void setFreq(int freq){
captaingoujon 9:2a26eec46988 168 freq /= FSTEP;
captaingoujon 9:2a26eec46988 169 radioCS = 0;
captaingoujon 9:2a26eec46988 170 radio.write(REG_FREQ_MSB | 0x80);
captaingoujon 9:2a26eec46988 171 radio.write((freq>>16)&0xFF);
captaingoujon 9:2a26eec46988 172 radio.write((freq>>8)&0xFF);
captaingoujon 9:2a26eec46988 173 radio.write((freq)&0xFF);
captaingoujon 9:2a26eec46988 174 radioCS=1;
captaingoujon 9:2a26eec46988 175 }
captaingoujon 9:2a26eec46988 176
captaingoujon 9:2a26eec46988 177 int getFreq(){
captaingoujon 9:2a26eec46988 178 int freq;
captaingoujon 9:2a26eec46988 179 radioCS = 0;
captaingoujon 9:2a26eec46988 180 radio.write(REG_FREQ_MSB);
captaingoujon 9:2a26eec46988 181 freq = radio.write(0x00)<<16;
captaingoujon 9:2a26eec46988 182 freq|= radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 183 freq|= radio.write(0x00);
captaingoujon 9:2a26eec46988 184 radioCS = 1;
captaingoujon 9:2a26eec46988 185 return freq*FSTEP;
captaingoujon 9:2a26eec46988 186 }
captaingoujon 9:2a26eec46988 187
captaingoujon 9:2a26eec46988 188 char getMode(){
captaingoujon 9:2a26eec46988 189 char mode;
captaingoujon 9:2a26eec46988 190 radioCS = 0;
captaingoujon 9:2a26eec46988 191 radio.write(REG_OP_MODE);
captaingoujon 9:2a26eec46988 192 mode = radio.write(0x00);
captaingoujon 9:2a26eec46988 193 radioCS = 1;
captaingoujon 9:2a26eec46988 194 return mode;
captaingoujon 9:2a26eec46988 195 }
captaingoujon 9:2a26eec46988 196
captaingoujon 11:8f3e72f6a1e0 197 int getFlags(){
captaingoujon 11:8f3e72f6a1e0 198 int flags;
captaingoujon 11:8f3e72f6a1e0 199 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 200 radio.write(REG_IRQ_FLAGS_1);
captaingoujon 11:8f3e72f6a1e0 201 flags = radio.write(0x00)<<8;
captaingoujon 11:8f3e72f6a1e0 202 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 203 wait_ms(1);
captaingoujon 11:8f3e72f6a1e0 204 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 205 radio.write(REG_IRQ_FLAGS_2);
captaingoujon 11:8f3e72f6a1e0 206 flags |= radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 207 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 208 return flags;
captaingoujon 11:8f3e72f6a1e0 209 }
captaingoujon 11:8f3e72f6a1e0 210 void setMode(char mode){
captaingoujon 11:8f3e72f6a1e0 211 char localMode = getMode();
captaingoujon 11:8f3e72f6a1e0 212 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 213 radio.write(REG_OP_MODE|0x80);
captaingoujon 11:8f3e72f6a1e0 214 radio.write((localMode&0xE3) | (mode<<2));
captaingoujon 11:8f3e72f6a1e0 215 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 216 if(mode!=0x00){
captaingoujon 11:8f3e72f6a1e0 217 while(true){
captaingoujon 11:8f3e72f6a1e0 218 if(mode == MODE_RX && getFlags()&0x8000){
captaingoujon 11:8f3e72f6a1e0 219 break;
captaingoujon 11:8f3e72f6a1e0 220 }
captaingoujon 11:8f3e72f6a1e0 221 if(mode == MODE_TX && getFlags()&0x2000){
captaingoujon 11:8f3e72f6a1e0 222 break;
captaingoujon 11:8f3e72f6a1e0 223 }
captaingoujon 11:8f3e72f6a1e0 224 pc.printf("Target:%02x,Current:%02x,FLags:%04x\n\r",mode,getMode(),getFlags());
captaingoujon 11:8f3e72f6a1e0 225 wait_ms(1000);
captaingoujon 11:8f3e72f6a1e0 226 }
captaingoujon 11:8f3e72f6a1e0 227 }else{
captaingoujon 11:8f3e72f6a1e0 228 pc.printf("%02x,%02x,%04x\n\r",mode,getMode(),getFlags());
captaingoujon 11:8f3e72f6a1e0 229 }
captaingoujon 11:8f3e72f6a1e0 230
captaingoujon 11:8f3e72f6a1e0 231 }
captaingoujon 11:8f3e72f6a1e0 232
captaingoujon 9:2a26eec46988 233 void setFdev(int fdev){
captaingoujon 9:2a26eec46988 234 fdev /= FSTEP;
captaingoujon 9:2a26eec46988 235 radioCS = 0;
captaingoujon 9:2a26eec46988 236 radio.write(REG_FDEV_MSB | 0x80);
captaingoujon 9:2a26eec46988 237 radio.write((fdev >> 8) & 0x1F);
captaingoujon 9:2a26eec46988 238 radio.write(fdev & 0xFF);
captaingoujon 9:2a26eec46988 239 radioCS = 1;
captaingoujon 9:2a26eec46988 240 }
captaingoujon 9:2a26eec46988 241
captaingoujon 9:2a26eec46988 242 int getFdev(){
captaingoujon 9:2a26eec46988 243 int fdev;
captaingoujon 9:2a26eec46988 244 radioCS = 0;
captaingoujon 9:2a26eec46988 245 radio.write(REG_FDEV_MSB);
captaingoujon 9:2a26eec46988 246 fdev = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 247 fdev |= radio.write(fdev)&0xFF;
captaingoujon 9:2a26eec46988 248 radioCS = 1;
captaingoujon 9:2a26eec46988 249 fdev *= FSTEP;
captaingoujon 9:2a26eec46988 250 return fdev;
captaingoujon 9:2a26eec46988 251 }
captaingoujon 9:2a26eec46988 252
captaingoujon 10:6fe476ec05aa 253 void setModulation(ModulationSetting settings){
captaingoujon 9:2a26eec46988 254 radioCS = 0;
captaingoujon 9:2a26eec46988 255 radio.write(REG_DATA_MODULATION | 0x80);
captaingoujon 10:6fe476ec05aa 256 radio.write((settings.mode << 5)&0x60 | ((settings.modulation <<3)&0x18) | (settings.shaping&0x03));
captaingoujon 10:6fe476ec05aa 257 radioCS = 1;
captaingoujon 9:2a26eec46988 258 }
captaingoujon 9:2a26eec46988 259
captaingoujon 10:6fe476ec05aa 260 ModulationSetting getModulation(){
captaingoujon 10:6fe476ec05aa 261 ModulationSetting settings;
captaingoujon 10:6fe476ec05aa 262 char reg;
captaingoujon 10:6fe476ec05aa 263 radioCS = 0;
captaingoujon 10:6fe476ec05aa 264 radio.write(REG_DATA_MODULATION);
captaingoujon 10:6fe476ec05aa 265 reg= radio.write(0x00)&0xFF;
captaingoujon 10:6fe476ec05aa 266 radioCS = 1;
captaingoujon 10:6fe476ec05aa 267 settings.mode = (reg&0x60) >> 5;
captaingoujon 10:6fe476ec05aa 268 settings.modulation = (reg&0x18) >>3;
captaingoujon 10:6fe476ec05aa 269 settings.shaping = (reg&0x03);
captaingoujon 10:6fe476ec05aa 270 return settings;
captaingoujon 9:2a26eec46988 271 }
captaingoujon 9:2a26eec46988 272
captaingoujon 9:2a26eec46988 273 void setBitrate(int bitrate){
captaingoujon 9:2a26eec46988 274 bitrate /= FXOSC;
captaingoujon 9:2a26eec46988 275 radioCS = 1;
captaingoujon 9:2a26eec46988 276 radio.write(REG_BITRATE_MSB | 0x80);
captaingoujon 9:2a26eec46988 277 radio.write((bitrate>>8)&0xFF);
captaingoujon 9:2a26eec46988 278 radio.write(bitrate&0xFF);
captaingoujon 9:2a26eec46988 279 radioCS = 1;
captaingoujon 9:2a26eec46988 280 }
captaingoujon 9:2a26eec46988 281
captaingoujon 11:8f3e72f6a1e0 282 int getBitrate(){
captaingoujon 9:2a26eec46988 283 int bitrate;
captaingoujon 9:2a26eec46988 284 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 285 radio.write(REG_BITRATE_MSB);
captaingoujon 9:2a26eec46988 286 bitrate = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 287 bitrate |= radio.write(0x00)&0xFF;
captaingoujon 9:2a26eec46988 288 radioCS = 1;
captaingoujon 9:2a26eec46988 289 bitrate *= FXOSC;
captaingoujon 11:8f3e72f6a1e0 290 return bitrate;
captaingoujon 9:2a26eec46988 291 }
captaingoujon 9:2a26eec46988 292
captaingoujon 9:2a26eec46988 293 void setPALevel(int level){
captaingoujon 9:2a26eec46988 294 char regPALevel;
captaingoujon 9:2a26eec46988 295 if(level <= -2){//PA0
captaingoujon 9:2a26eec46988 296 regPALevel = 0x80;
captaingoujon 9:2a26eec46988 297 regPALevel |= (level + 18)&0xFF;
captaingoujon 9:2a26eec46988 298 }else if(level <= 13){//PA1
captaingoujon 9:2a26eec46988 299 regPALevel = 0x40;
captaingoujon 11:8f3e72f6a1e0 300 regPALevel |= (level + 18)&0x1F;
captaingoujon 9:2a26eec46988 301 }else if(level<=17){//PA1,PA2
captaingoujon 9:2a26eec46988 302 regPALevel = 0xA0;
captaingoujon 9:2a26eec46988 303 regPALevel |= (level + 14)&0xFF;
captaingoujon 9:2a26eec46988 304 }else{
captaingoujon 9:2a26eec46988 305 return;
captaingoujon 9:2a26eec46988 306 }
captaingoujon 9:2a26eec46988 307 radioCS = 0;
captaingoujon 9:2a26eec46988 308 radio.write(REG_PA_LEVEL | 0x80);
captaingoujon 9:2a26eec46988 309 radio.write(regPALevel);
captaingoujon 9:2a26eec46988 310 radioCS = 1;
captaingoujon 9:2a26eec46988 311 }
captaingoujon 9:2a26eec46988 312
captaingoujon 9:2a26eec46988 313 int getPALevel(){
captaingoujon 11:8f3e72f6a1e0 314 //int level = 0;
captaingoujon 9:2a26eec46988 315 char regPALevel;
captaingoujon 9:2a26eec46988 316 radioCS = 0;
captaingoujon 9:2a26eec46988 317 radio.write(REG_PA_LEVEL);
captaingoujon 9:2a26eec46988 318 regPALevel = radio.write(0x00);
captaingoujon 9:2a26eec46988 319 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 320 /*if((regPALevel&0x80) || (regPALevel&0x40)){//PA1,PA2
captaingoujon 9:2a26eec46988 321 regPALevel = 0xA0;
captaingoujon 9:2a26eec46988 322 regPALevel |= (level + 14)&0xFF;
captaingoujon 9:2a26eec46988 323 }else if(regPALevel&0x80){//PA0
captaingoujon 9:2a26eec46988 324 level |= (regPALevel&0x1F - 18);
captaingoujon 9:2a26eec46988 325 }else if(regPALevel&0x40){//PA1
captaingoujon 9:2a26eec46988 326 regPALevel = 0x40;
captaingoujon 9:2a26eec46988 327 regPALevel |= (level&0x1F - 18);
captaingoujon 9:2a26eec46988 328 }else{
captaingoujon 9:2a26eec46988 329 return 0;
captaingoujon 11:8f3e72f6a1e0 330 }*/
captaingoujon 11:8f3e72f6a1e0 331 return regPALevel;
captaingoujon 9:2a26eec46988 332 }
captaingoujon 9:2a26eec46988 333
captaingoujon 10:6fe476ec05aa 334 void setOCP(ocpSetting ocp){
captaingoujon 9:2a26eec46988 335 char regOCP = 0;
captaingoujon 10:6fe476ec05aa 336 if(ocp.enabled){
captaingoujon 9:2a26eec46988 337 regOCP = 0x10;
captaingoujon 9:2a26eec46988 338 }
captaingoujon 10:6fe476ec05aa 339 regOCP |= ((ocp.maxCurrent - 45)/5) & 0x0F;
captaingoujon 9:2a26eec46988 340 radioCS = 0;
captaingoujon 9:2a26eec46988 341 radio.write(REG_OCP | 0x80);
captaingoujon 9:2a26eec46988 342 radio.write(regOCP);
captaingoujon 9:2a26eec46988 343 radioCS = 1;
captaingoujon 9:2a26eec46988 344 }
captaingoujon 9:2a26eec46988 345
captaingoujon 10:6fe476ec05aa 346 ocpSetting getOCP(){
captaingoujon 10:6fe476ec05aa 347 char reg;
captaingoujon 10:6fe476ec05aa 348 ocpSetting ocp;
captaingoujon 10:6fe476ec05aa 349 radioCS = 0;
captaingoujon 10:6fe476ec05aa 350 radio.write(REG_OCP);
captaingoujon 10:6fe476ec05aa 351 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 352 radioCS = 1;
captaingoujon 10:6fe476ec05aa 353 ocp.enabled = reg>>4;
captaingoujon 10:6fe476ec05aa 354 ocp.maxCurrent = (reg & 0x0F)*5+45;
captaingoujon 10:6fe476ec05aa 355 return ocp;
captaingoujon 9:2a26eec46988 356 }
captaingoujon 9:2a26eec46988 357
captaingoujon 10:6fe476ec05aa 358 void setLNA(lnaSetting lna){
captaingoujon 9:2a26eec46988 359 char regLNA = 0;
captaingoujon 10:6fe476ec05aa 360 if(lna.ZIn == 200){
captaingoujon 9:2a26eec46988 361 regLNA = 0x80;
captaingoujon 9:2a26eec46988 362 }
captaingoujon 10:6fe476ec05aa 363 if(!lna.agc){
captaingoujon 10:6fe476ec05aa 364 if(lna.gain>48){
captaingoujon 11:8f3e72f6a1e0 365 regLNA |= 0x00;
captaingoujon 9:2a26eec46988 366 }else{
captaingoujon 10:6fe476ec05aa 367 regLNA |= (lna.gain&0x07);
captaingoujon 9:2a26eec46988 368 }
captaingoujon 9:2a26eec46988 369 }
captaingoujon 9:2a26eec46988 370 radioCS = 0;
captaingoujon 9:2a26eec46988 371 radio.write(REG_LNA | 0x80);
captaingoujon 9:2a26eec46988 372 radio.write(regLNA);
captaingoujon 9:2a26eec46988 373 radioCS = 1;
captaingoujon 9:2a26eec46988 374 }
captaingoujon 9:2a26eec46988 375
captaingoujon 10:6fe476ec05aa 376 lnaSetting getLNA(){
captaingoujon 10:6fe476ec05aa 377 char reg;
captaingoujon 10:6fe476ec05aa 378 lnaSetting lna;
captaingoujon 10:6fe476ec05aa 379 radioCS = 0;
captaingoujon 10:6fe476ec05aa 380 radio.write(REG_LNA);
captaingoujon 10:6fe476ec05aa 381 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 382 radioCS = 1;
captaingoujon 10:6fe476ec05aa 383 if(reg&0x80){
captaingoujon 10:6fe476ec05aa 384 lna.ZIn = 200;
captaingoujon 10:6fe476ec05aa 385 }else{
captaingoujon 10:6fe476ec05aa 386 lna.ZIn = 50;
captaingoujon 10:6fe476ec05aa 387 }
captaingoujon 10:6fe476ec05aa 388 if(reg&0x07==0){
captaingoujon 10:6fe476ec05aa 389 lna.agc = 1;
captaingoujon 10:6fe476ec05aa 390 }else{
captaingoujon 10:6fe476ec05aa 391 lna.agc = 0;
captaingoujon 10:6fe476ec05aa 392 }
captaingoujon 10:6fe476ec05aa 393 lna.gain = (reg&0x1A)>>3;
captaingoujon 10:6fe476ec05aa 394 return lna;
captaingoujon 9:2a26eec46988 395 }
captaingoujon 9:2a26eec46988 396
captaingoujon 9:2a26eec46988 397 void setDIOMapping(int regValue){
captaingoujon 9:2a26eec46988 398 radioCS = 0;
captaingoujon 9:2a26eec46988 399 radio.write(REG_DIO_MAPPING_1|0x80);
captaingoujon 9:2a26eec46988 400 radio.write((regValue>>8)&0xFF);
captaingoujon 9:2a26eec46988 401 radio.write(regValue&0xFF);
captaingoujon 9:2a26eec46988 402 radioCS = 1;
captaingoujon 9:2a26eec46988 403 }
captaingoujon 9:2a26eec46988 404
captaingoujon 10:6fe476ec05aa 405 int getDIOMapping(){
captaingoujon 9:2a26eec46988 406 int regValue;
captaingoujon 9:2a26eec46988 407 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 408 radio.write(REG_DIO_MAPPING_1);
captaingoujon 9:2a26eec46988 409 regValue = radio.write(0x00)<<8;
captaingoujon 9:2a26eec46988 410 regValue |= radio.write(0x00)&0xFF;
captaingoujon 9:2a26eec46988 411 radioCS = 1;
captaingoujon 9:2a26eec46988 412 return regValue;
captaingoujon 9:2a26eec46988 413 }
captaingoujon 9:2a26eec46988 414
captaingoujon 10:6fe476ec05aa 415 void setSyncConfig(syncSetting sync){
captaingoujon 9:2a26eec46988 416 char regSync = 0;
captaingoujon 10:6fe476ec05aa 417 if(sync.syncOn){
captaingoujon 9:2a26eec46988 418 regSync |= 0x80;
captaingoujon 9:2a26eec46988 419 }
captaingoujon 10:6fe476ec05aa 420 if(sync.fifoFillCondition){
captaingoujon 9:2a26eec46988 421 regSync |= 0x40;
captaingoujon 9:2a26eec46988 422 }
captaingoujon 10:6fe476ec05aa 423 regSync |= ((sync.syncSize&0x07)<<3);
captaingoujon 10:6fe476ec05aa 424 regSync |= (sync.syncTol&0x07);
captaingoujon 10:6fe476ec05aa 425 radioCS = 0;
captaingoujon 10:6fe476ec05aa 426 radio.write(REG_SYNC_CONFIG);
captaingoujon 10:6fe476ec05aa 427 radio.write(regSync);
captaingoujon 10:6fe476ec05aa 428 radioCS = 1;
captaingoujon 9:2a26eec46988 429 }
captaingoujon 9:2a26eec46988 430
captaingoujon 10:6fe476ec05aa 431 syncSetting getSyncConfig(){
captaingoujon 10:6fe476ec05aa 432 char reg;
captaingoujon 10:6fe476ec05aa 433 syncSetting sync;
captaingoujon 10:6fe476ec05aa 434 radioCS = 0;
captaingoujon 10:6fe476ec05aa 435 radio.write(REG_SYNC_CONFIG);
captaingoujon 10:6fe476ec05aa 436 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 437 radioCS = 1;
captaingoujon 10:6fe476ec05aa 438 if(reg &= 0x80){
captaingoujon 10:6fe476ec05aa 439 sync.syncOn = 1;
captaingoujon 10:6fe476ec05aa 440 }else{
captaingoujon 10:6fe476ec05aa 441 sync.syncOn = 0;
captaingoujon 10:6fe476ec05aa 442 }
captaingoujon 10:6fe476ec05aa 443 if(reg&0x40){
captaingoujon 10:6fe476ec05aa 444 sync.fifoFillCondition = 1;
captaingoujon 10:6fe476ec05aa 445 }else{
captaingoujon 10:6fe476ec05aa 446 sync.fifoFillCondition = 0;
captaingoujon 10:6fe476ec05aa 447 }
captaingoujon 10:6fe476ec05aa 448 sync.syncSize = (reg&0x1A)>>3;
captaingoujon 10:6fe476ec05aa 449 sync.syncTol = (reg&0x07);
captaingoujon 10:6fe476ec05aa 450 return sync;
captaingoujon 9:2a26eec46988 451 }
captaingoujon 9:2a26eec46988 452
captaingoujon 11:8f3e72f6a1e0 453 void setSyncValue(unsigned long long value){
captaingoujon 9:2a26eec46988 454 radioCS = 0;
captaingoujon 9:2a26eec46988 455 radio.write(REG_SYNC_VALUE_1 | 0x80);
captaingoujon 11:8f3e72f6a1e0 456 radio.write((value>>56)&0xFF);
captaingoujon 11:8f3e72f6a1e0 457 radio.write((value>>48)&0xFF);
captaingoujon 11:8f3e72f6a1e0 458 radio.write((value>>40)&0xFF);
captaingoujon 11:8f3e72f6a1e0 459 radio.write((value>>32)&0xFF);
captaingoujon 11:8f3e72f6a1e0 460 radio.write((value>>24)&0xFF);
captaingoujon 11:8f3e72f6a1e0 461 radio.write((value>>16)&0xFF);
captaingoujon 11:8f3e72f6a1e0 462 radio.write((value>>8)&0xFF);
captaingoujon 9:2a26eec46988 463 radio.write((value)&0xFF);
captaingoujon 9:2a26eec46988 464 radioCS = 1;
captaingoujon 9:2a26eec46988 465 }
captaingoujon 9:2a26eec46988 466
captaingoujon 11:8f3e72f6a1e0 467 unsigned long long getSyncValue(){
captaingoujon 11:8f3e72f6a1e0 468 unsigned long long value;
captaingoujon 9:2a26eec46988 469 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 470 radio.write(REG_SYNC_VALUE_1);
captaingoujon 9:2a26eec46988 471 value = (radio.write(0x00)&0xFF)<<55;
captaingoujon 9:2a26eec46988 472 value |= (radio.write(0x00)&0xFF)<<47;
captaingoujon 9:2a26eec46988 473 value |= (radio.write(0x00)&0xFF)<<39;
captaingoujon 9:2a26eec46988 474 value |= (radio.write(0x00)&0xFF)<<31;
captaingoujon 9:2a26eec46988 475 value |= (radio.write(0x00)&0xFF)<<23;
captaingoujon 9:2a26eec46988 476 value |= (radio.write(0x00)&0xFF)<<15;
captaingoujon 9:2a26eec46988 477 value |= (radio.write(0x00)&0xFF)<<7;
captaingoujon 9:2a26eec46988 478 value |= (radio.write(0x00)&0xFF);
captaingoujon 9:2a26eec46988 479 radioCS = 1;
captaingoujon 9:2a26eec46988 480 return value;
captaingoujon 9:2a26eec46988 481 }
captaingoujon 9:2a26eec46988 482
captaingoujon 10:6fe476ec05aa 483 void setPacketConfig(packetSetting packetConfig){
captaingoujon 9:2a26eec46988 484 char regPacketConfig1 = 0x00;
captaingoujon 9:2a26eec46988 485 char regPacketConfig2 = 0x00;
captaingoujon 10:6fe476ec05aa 486 if(packetConfig.variableLength){
captaingoujon 9:2a26eec46988 487 regPacketConfig1 |= 0x80;
captaingoujon 9:2a26eec46988 488 }
captaingoujon 10:6fe476ec05aa 489 regPacketConfig1 |= (packetConfig.dcFree&0x03)<<5;
captaingoujon 10:6fe476ec05aa 490 if(packetConfig.crcOn){
captaingoujon 9:2a26eec46988 491 regPacketConfig1 |= 0x10;
captaingoujon 9:2a26eec46988 492 }
captaingoujon 10:6fe476ec05aa 493 if(packetConfig.crcAutoClearOff){
captaingoujon 9:2a26eec46988 494 regPacketConfig1 |= 0x08;
captaingoujon 9:2a26eec46988 495 }
captaingoujon 10:6fe476ec05aa 496 regPacketConfig1 |= ((packetConfig.addressFiltering & 0x03)<<1);
captaingoujon 9:2a26eec46988 497
captaingoujon 9:2a26eec46988 498 radioCS = 0;
captaingoujon 9:2a26eec46988 499 radio.write(REG_PACKET_CONFIG_1|0x80);
captaingoujon 9:2a26eec46988 500 radio.write(regPacketConfig1);
captaingoujon 9:2a26eec46988 501 radioCS = 1;
captaingoujon 9:2a26eec46988 502
captaingoujon 10:6fe476ec05aa 503 regPacketConfig2 |= ((packetConfig.interPacketRxDelay&0x0F)<<4);
captaingoujon 10:6fe476ec05aa 504 if(packetConfig.restartRx){
captaingoujon 9:2a26eec46988 505 regPacketConfig2 |= (1<<2);
captaingoujon 9:2a26eec46988 506 }
captaingoujon 10:6fe476ec05aa 507 if(packetConfig.autoRxRestartOn){
captaingoujon 9:2a26eec46988 508 regPacketConfig2 |= (1<<1);
captaingoujon 9:2a26eec46988 509 }
captaingoujon 10:6fe476ec05aa 510 if(packetConfig.aesOn){
captaingoujon 9:2a26eec46988 511 regPacketConfig2 |= 0x01;
captaingoujon 9:2a26eec46988 512 }
captaingoujon 9:2a26eec46988 513 radioCS = 0;
captaingoujon 9:2a26eec46988 514 radio.write(REG_PACKET_CONFIG_2|0x80);
captaingoujon 9:2a26eec46988 515 radio.write(regPacketConfig2);
captaingoujon 9:2a26eec46988 516 radioCS = 1;
captaingoujon 9:2a26eec46988 517 }
captaingoujon 9:2a26eec46988 518
captaingoujon 10:6fe476ec05aa 519 packetSetting getPacketConfig(){
captaingoujon 10:6fe476ec05aa 520 packetSetting packetConfig;
captaingoujon 10:6fe476ec05aa 521 char regPacketConfig1;
captaingoujon 10:6fe476ec05aa 522 char regPacketConfig2;
captaingoujon 10:6fe476ec05aa 523 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 524 radio.write(REG_PACKET_CONFIG_1);
captaingoujon 10:6fe476ec05aa 525 regPacketConfig1 = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 526 radioCS = 1;
captaingoujon 10:6fe476ec05aa 527 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 528 radio.write(REG_PACKET_CONFIG_2);
captaingoujon 10:6fe476ec05aa 529 regPacketConfig2 = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 530 radioCS = 1;
captaingoujon 10:6fe476ec05aa 531 if(regPacketConfig1 & 0x80){
captaingoujon 10:6fe476ec05aa 532 packetConfig.variableLength = 1;
captaingoujon 10:6fe476ec05aa 533 }else{
captaingoujon 10:6fe476ec05aa 534 packetConfig.variableLength = 0;
captaingoujon 10:6fe476ec05aa 535 }
captaingoujon 10:6fe476ec05aa 536 packetConfig.dcFree = (regPacketConfig1&0x60)>>5;
captaingoujon 10:6fe476ec05aa 537 if(regPacketConfig1 & 0x10){
captaingoujon 10:6fe476ec05aa 538 packetConfig.crcOn = 1;
captaingoujon 10:6fe476ec05aa 539 }else{
captaingoujon 10:6fe476ec05aa 540 packetConfig.crcOn = 0;
captaingoujon 10:6fe476ec05aa 541 }
captaingoujon 10:6fe476ec05aa 542 if(regPacketConfig1 & 0x08){
captaingoujon 10:6fe476ec05aa 543 packetConfig.crcAutoClearOff = 1;
captaingoujon 10:6fe476ec05aa 544 }else{
captaingoujon 10:6fe476ec05aa 545 packetConfig.crcAutoClearOff = 1;
captaingoujon 10:6fe476ec05aa 546 }
captaingoujon 10:6fe476ec05aa 547 packetConfig.addressFiltering = (regPacketConfig1&0x06)>>1;
captaingoujon 10:6fe476ec05aa 548
captaingoujon 10:6fe476ec05aa 549 packetConfig.interPacketRxDelay = (regPacketConfig2&0xF0)>>4;
captaingoujon 10:6fe476ec05aa 550 if(regPacketConfig2 & 0x04){
captaingoujon 10:6fe476ec05aa 551 packetConfig.restartRx = 1;
captaingoujon 10:6fe476ec05aa 552 }else{
captaingoujon 10:6fe476ec05aa 553 packetConfig.restartRx = 0;
captaingoujon 10:6fe476ec05aa 554 }
captaingoujon 10:6fe476ec05aa 555 if(regPacketConfig2 & 0x02){
captaingoujon 10:6fe476ec05aa 556 packetConfig.autoRxRestartOn = 1;
captaingoujon 10:6fe476ec05aa 557 }else{
captaingoujon 10:6fe476ec05aa 558 packetConfig.autoRxRestartOn = 0;
captaingoujon 10:6fe476ec05aa 559 }
captaingoujon 10:6fe476ec05aa 560 if(regPacketConfig2 & 0x01){
captaingoujon 10:6fe476ec05aa 561 packetConfig.aesOn = 1;
captaingoujon 10:6fe476ec05aa 562 }else{
captaingoujon 10:6fe476ec05aa 563 packetConfig.aesOn = 0;
captaingoujon 10:6fe476ec05aa 564 }
captaingoujon 10:6fe476ec05aa 565 return packetConfig;
captaingoujon 9:2a26eec46988 566 }
captaingoujon 9:2a26eec46988 567
captaingoujon 9:2a26eec46988 568 void setPayloadLength(char payloadLength){
captaingoujon 9:2a26eec46988 569 radioCS = 0;
captaingoujon 9:2a26eec46988 570 radio.write(REG_PAYLOAD_LENGTH | 0x80);
captaingoujon 9:2a26eec46988 571 radio.write(payloadLength);
captaingoujon 9:2a26eec46988 572 radioCS = 1;
captaingoujon 9:2a26eec46988 573 }
captaingoujon 9:2a26eec46988 574
captaingoujon 9:2a26eec46988 575
captaingoujon 9:2a26eec46988 576 char setPayloadLength(){
captaingoujon 9:2a26eec46988 577 char payloadLength;
captaingoujon 9:2a26eec46988 578 radioCS = 0;
captaingoujon 9:2a26eec46988 579 radio.write(REG_PAYLOAD_LENGTH);
captaingoujon 9:2a26eec46988 580 payloadLength = radio.write(0x00);
captaingoujon 9:2a26eec46988 581 radioCS = 1;
captaingoujon 9:2a26eec46988 582 return payloadLength;
captaingoujon 9:2a26eec46988 583 }
captaingoujon 9:2a26eec46988 584
captaingoujon 10:6fe476ec05aa 585 void setFifoThreshold(fifoThresholdSetting fifo){
captaingoujon 9:2a26eec46988 586 radioCS = 0;
captaingoujon 9:2a26eec46988 587 radio.write(REG_FIFO_THRESH | 0x80);
captaingoujon 10:6fe476ec05aa 588 radio.write((fifo.txStartCondition<<7)|(fifo.threshold&0x7F));
captaingoujon 9:2a26eec46988 589 radioCS = 1;
captaingoujon 9:2a26eec46988 590 }
captaingoujon 9:2a26eec46988 591
captaingoujon 10:6fe476ec05aa 592 fifoThresholdSetting getFifoThreshold(){
captaingoujon 10:6fe476ec05aa 593 fifoThresholdSetting fifo;
captaingoujon 10:6fe476ec05aa 594 char reg;
captaingoujon 10:6fe476ec05aa 595 radioCS = 0;
captaingoujon 10:6fe476ec05aa 596 radio.write(REG_FIFO_THRESH);
captaingoujon 10:6fe476ec05aa 597 reg = radio.write(0x00);
captaingoujon 10:6fe476ec05aa 598 radioCS = 1;
captaingoujon 10:6fe476ec05aa 599 fifo.txStartCondition = reg >> 7;
captaingoujon 10:6fe476ec05aa 600 fifo.threshold = reg &0x7F;
captaingoujon 10:6fe476ec05aa 601 return fifo;
captaingoujon 9:2a26eec46988 602 }
captaingoujon 9:2a26eec46988 603
captaingoujon 11:8f3e72f6a1e0 604 void writeFifo(char value){
captaingoujon 11:8f3e72f6a1e0 605 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 606 radio.write(REG_FIFO | 0x80);
captaingoujon 11:8f3e72f6a1e0 607 radio.write(value);
captaingoujon 11:8f3e72f6a1e0 608 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 609 }
captaingoujon 11:8f3e72f6a1e0 610
captaingoujon 11:8f3e72f6a1e0 611 char readFifo(){
captaingoujon 11:8f3e72f6a1e0 612 char value;
captaingoujon 11:8f3e72f6a1e0 613 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 614 radio.write(REG_FIFO);
captaingoujon 11:8f3e72f6a1e0 615 value = radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 616 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 617 return value;
captaingoujon 11:8f3e72f6a1e0 618 }
captaingoujon 11:8f3e72f6a1e0 619
captaingoujon 11:8f3e72f6a1e0 620 int getRSSI(){
captaingoujon 11:8f3e72f6a1e0 621
captaingoujon 11:8f3e72f6a1e0 622 int RSSI;
captaingoujon 11:8f3e72f6a1e0 623 bool success = false;
captaingoujon 11:8f3e72f6a1e0 624 char retryCount=0;
captaingoujon 11:8f3e72f6a1e0 625 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 626 radio.write(REG_RSSI_CONFIG|0x80);
captaingoujon 11:8f3e72f6a1e0 627 radio.write(0x01);
captaingoujon 11:8f3e72f6a1e0 628 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 629 wait_ms(10);/*
captaingoujon 11:8f3e72f6a1e0 630 while(retryCount<10){
captaingoujon 11:8f3e72f6a1e0 631 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 632 radio.write(REG_RSSI_CONFIG);
captaingoujon 11:8f3e72f6a1e0 633 RSSI = radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 634 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 635 if(RSSI & 0x02){*/
captaingoujon 11:8f3e72f6a1e0 636 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 637 radio.write(REG_RSSI_VALUE);
captaingoujon 11:8f3e72f6a1e0 638 RSSI = radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 639 radioCS = 1;/*
captaingoujon 11:8f3e72f6a1e0 640 success = true;
captaingoujon 11:8f3e72f6a1e0 641 break;
captaingoujon 11:8f3e72f6a1e0 642 }
captaingoujon 11:8f3e72f6a1e0 643 retryCount++;
captaingoujon 11:8f3e72f6a1e0 644 wait_ms(100);
captaingoujon 11:8f3e72f6a1e0 645 }
captaingoujon 11:8f3e72f6a1e0 646 if(success){*/
captaingoujon 11:8f3e72f6a1e0 647 return RSSI;/*
captaingoujon 11:8f3e72f6a1e0 648 }else{
captaingoujon 11:8f3e72f6a1e0 649 return -999;
captaingoujon 11:8f3e72f6a1e0 650 }*/
captaingoujon 11:8f3e72f6a1e0 651 }
captaingoujon 11:8f3e72f6a1e0 652
captaingoujon 11:8f3e72f6a1e0 653 void setRSSIThreshold(signed char rssiThresh){
captaingoujon 11:8f3e72f6a1e0 654 char local = rssiThresh * (-2);
captaingoujon 11:8f3e72f6a1e0 655 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 656 radio.write(REG_RSSI_THRESH | 0x80);
captaingoujon 11:8f3e72f6a1e0 657 radio.write(local);
captaingoujon 11:8f3e72f6a1e0 658 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 659 }
captaingoujon 11:8f3e72f6a1e0 660
captaingoujon 11:8f3e72f6a1e0 661 signed char getRSSIThreshold(){
captaingoujon 11:8f3e72f6a1e0 662 signed char local;
captaingoujon 11:8f3e72f6a1e0 663 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 664 radio.write(REG_RSSI_THRESH);
captaingoujon 11:8f3e72f6a1e0 665 local = radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 666 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 667 return local / (-2);
captaingoujon 11:8f3e72f6a1e0 668 }
captaingoujon 11:8f3e72f6a1e0 669
captaingoujon 11:8f3e72f6a1e0 670 void setPreamble(int preambleLength){
captaingoujon 11:8f3e72f6a1e0 671 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 672 radio.write(REG_PREAMBLE_MSB | 0x80);
captaingoujon 11:8f3e72f6a1e0 673 radio.write((preambleLength>>8)&0xFF);
captaingoujon 11:8f3e72f6a1e0 674 radio.write(preambleLength&0xFF);
captaingoujon 11:8f3e72f6a1e0 675 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 676 }
captaingoujon 11:8f3e72f6a1e0 677
captaingoujon 11:8f3e72f6a1e0 678 int getPreamble(){
captaingoujon 11:8f3e72f6a1e0 679 int preambleLength;
captaingoujon 11:8f3e72f6a1e0 680 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 681 radio.write(REG_PREAMBLE_MSB);
captaingoujon 11:8f3e72f6a1e0 682 preambleLength = radio.write(0x00)<<8;
captaingoujon 11:8f3e72f6a1e0 683 preambleLength |= radio.write(0x00);
captaingoujon 11:8f3e72f6a1e0 684 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 685 return preambleLength;
captaingoujon 11:8f3e72f6a1e0 686 }
captaingoujon 11:8f3e72f6a1e0 687
captaingoujon 11:8f3e72f6a1e0 688 char pcInBuff[255];
captaingoujon 11:8f3e72f6a1e0 689 char radioInBuff[255];
captaingoujon 11:8f3e72f6a1e0 690
captaingoujon 11:8f3e72f6a1e0 691 void printRegisters(){
captaingoujon 11:8f3e72f6a1e0 692 radioCS = 0;
captaingoujon 11:8f3e72f6a1e0 693 radio.write(0x01);
captaingoujon 11:8f3e72f6a1e0 694 for(int i=1;i<=0x4F;i++){
captaingoujon 11:8f3e72f6a1e0 695 pc.printf("%02x,%02x\n\r",i,radio.write(0x00));
captaingoujon 11:8f3e72f6a1e0 696 }
captaingoujon 11:8f3e72f6a1e0 697 radioCS = 1;
captaingoujon 11:8f3e72f6a1e0 698 }
captaingoujon 11:8f3e72f6a1e0 699
captaingoujon 11:8f3e72f6a1e0 700 void radioInit(){
captaingoujon 11:8f3e72f6a1e0 701 ModulationSetting modSet;
captaingoujon 11:8f3e72f6a1e0 702 modSet.mode = MODE_PACKET;
captaingoujon 11:8f3e72f6a1e0 703 modSet.modulation = MODULATION_FSK;
captaingoujon 11:8f3e72f6a1e0 704 modSet.shaping = SHAPING_NONE;
captaingoujon 11:8f3e72f6a1e0 705 setModulation(modSet);
captaingoujon 11:8f3e72f6a1e0 706 modSet = getModulation();
captaingoujon 11:8f3e72f6a1e0 707 pc.printf("Modulation: %d,%d,%d\n\r",modSet.mode,modSet.modulation,modSet.shaping);
captaingoujon 11:8f3e72f6a1e0 708
captaingoujon 11:8f3e72f6a1e0 709 setBitrate(2000);
captaingoujon 11:8f3e72f6a1e0 710 pc.printf("Bitrate: %d\n\r",getBitrate());
captaingoujon 11:8f3e72f6a1e0 711
captaingoujon 11:8f3e72f6a1e0 712 setFdev(5000);
captaingoujon 11:8f3e72f6a1e0 713 pc.printf("Fdev: %d\n\r",getFdev());
captaingoujon 11:8f3e72f6a1e0 714
captaingoujon 11:8f3e72f6a1e0 715 setFreq(434600000);
captaingoujon 11:8f3e72f6a1e0 716 pc.printf("Frequency: %d\n\r",getFreq());
captaingoujon 11:8f3e72f6a1e0 717
captaingoujon 11:8f3e72f6a1e0 718 //setPALevel(10);
captaingoujon 11:8f3e72f6a1e0 719 pc.printf("PA Level: %02x\n\r",getPALevel());
captaingoujon 11:8f3e72f6a1e0 720
captaingoujon 11:8f3e72f6a1e0 721 ocpSetting ocpSet;
captaingoujon 11:8f3e72f6a1e0 722 ocpSet.enabled = true;
captaingoujon 11:8f3e72f6a1e0 723 ocpSet.maxCurrent = 95;
captaingoujon 11:8f3e72f6a1e0 724 setOCP(ocpSet);
captaingoujon 11:8f3e72f6a1e0 725 ocpSet= getOCP();
captaingoujon 11:8f3e72f6a1e0 726 pc.printf("OCP: %d,%d\n\r",ocpSet.enabled,ocpSet.maxCurrent);
captaingoujon 11:8f3e72f6a1e0 727
captaingoujon 11:8f3e72f6a1e0 728 lnaSetting lnaSet;
captaingoujon 11:8f3e72f6a1e0 729 lnaSet.ZIn = 50;
captaingoujon 11:8f3e72f6a1e0 730 lnaSet.agc = false;
captaingoujon 11:8f3e72f6a1e0 731 lnaSet.gain = 24;
captaingoujon 11:8f3e72f6a1e0 732 setLNA(lnaSet);
captaingoujon 11:8f3e72f6a1e0 733 lnaSet=getLNA();
captaingoujon 11:8f3e72f6a1e0 734 pc.printf("LNA: %d,%d,%d\n\r",lnaSet.ZIn,lnaSet.agc,lnaSet.gain);
captaingoujon 11:8f3e72f6a1e0 735
captaingoujon 11:8f3e72f6a1e0 736 setDIOMapping(0x07);
captaingoujon 11:8f3e72f6a1e0 737 pc.printf("DIO: %02x\n\r",getDIOMapping());
captaingoujon 11:8f3e72f6a1e0 738
captaingoujon 11:8f3e72f6a1e0 739 syncSetting syncSet;
captaingoujon 11:8f3e72f6a1e0 740 syncSet.syncOn = true;
captaingoujon 11:8f3e72f6a1e0 741 syncSet.fifoFillCondition = true;
captaingoujon 11:8f3e72f6a1e0 742 syncSet.syncSize = 3;
captaingoujon 11:8f3e72f6a1e0 743 syncSet.syncTol = 0;
captaingoujon 11:8f3e72f6a1e0 744 setSyncConfig(syncSet);
captaingoujon 11:8f3e72f6a1e0 745 setSyncValue(0xFECFECFECFECFECA);
captaingoujon 11:8f3e72f6a1e0 746 syncSet = getSyncConfig();
captaingoujon 11:8f3e72f6a1e0 747 pc.printf("Sync: %d,%d,%d,%d,%d\n\r",syncSet.syncOn,syncSet.fifoFillCondition,syncSet.syncSize,syncSet.syncTol,getSyncValue());
captaingoujon 11:8f3e72f6a1e0 748
captaingoujon 11:8f3e72f6a1e0 749 packetSetting packetSet;
captaingoujon 11:8f3e72f6a1e0 750 packetSet.variableLength = true;
captaingoujon 11:8f3e72f6a1e0 751 packetSet.dcFree = 0;
captaingoujon 11:8f3e72f6a1e0 752 packetSet.crcOn = true;
captaingoujon 11:8f3e72f6a1e0 753 packetSet.crcAutoClearOff = 0;
captaingoujon 11:8f3e72f6a1e0 754 packetSet.addressFiltering = 0;
captaingoujon 11:8f3e72f6a1e0 755 packetSet.interPacketRxDelay = 0;
captaingoujon 11:8f3e72f6a1e0 756 packetSet.restartRx = false;
captaingoujon 11:8f3e72f6a1e0 757 packetSet.autoRxRestartOn = true;
captaingoujon 11:8f3e72f6a1e0 758 packetSet.aesOn = false;
captaingoujon 11:8f3e72f6a1e0 759 setPacketConfig(packetSet);
captaingoujon 11:8f3e72f6a1e0 760 packetSet=getPacketConfig();
captaingoujon 11:8f3e72f6a1e0 761 pc.printf("Packet: %d,%d,%d,%d,%d,%d,%d,%d,%d\n\r",packetSet.variableLength,packetSet.dcFree,packetSet.crcOn,packetSet.crcAutoClearOff,packetSet.addressFiltering,packetSet.interPacketRxDelay,packetSet.restartRx,packetSet.autoRxRestartOn,packetSet.aesOn);
captaingoujon 11:8f3e72f6a1e0 762
captaingoujon 11:8f3e72f6a1e0 763 setRSSIThreshold(-3);
captaingoujon 11:8f3e72f6a1e0 764
captaingoujon 11:8f3e72f6a1e0 765 setMode(MODE_RX);
captaingoujon 11:8f3e72f6a1e0 766 pc.printf("Mode: %02x\n\r",getMode());
captaingoujon 11:8f3e72f6a1e0 767
captaingoujon 11:8f3e72f6a1e0 768 printRegisters();
captaingoujon 11:8f3e72f6a1e0 769 }
captaingoujon 11:8f3e72f6a1e0 770
captaingoujon 11:8f3e72f6a1e0 771 void radioTransmit(char* stringToSend, unsigned char length){
captaingoujon 11:8f3e72f6a1e0 772 //dio2.disable_irq();
captaingoujon 11:8f3e72f6a1e0 773 //set length
captaingoujon 11:8f3e72f6a1e0 774 setPayloadLength(length);
captaingoujon 11:8f3e72f6a1e0 775 //set tx mode
captaingoujon 11:8f3e72f6a1e0 776 pc.printf("TX ");
captaingoujon 11:8f3e72f6a1e0 777 setMode(MODE_TX);
captaingoujon 11:8f3e72f6a1e0 778 //write to fifo
captaingoujon 11:8f3e72f6a1e0 779 //add length
captaingoujon 11:8f3e72f6a1e0 780 writeFifo(length);
captaingoujon 11:8f3e72f6a1e0 781 for(int i=0;i<length;i++){
captaingoujon 11:8f3e72f6a1e0 782 pc.putc(stringToSend[i]);
captaingoujon 11:8f3e72f6a1e0 783 writeFifo(stringToSend[i]);
captaingoujon 11:8f3e72f6a1e0 784 }
captaingoujon 11:8f3e72f6a1e0 785
captaingoujon 11:8f3e72f6a1e0 786 while(getFlags()&0x04);
captaingoujon 11:8f3e72f6a1e0 787 //set rx mode
captaingoujon 11:8f3e72f6a1e0 788 pc.printf(" RX\n\r");
captaingoujon 11:8f3e72f6a1e0 789 setMode(MODE_RX);
captaingoujon 11:8f3e72f6a1e0 790 //dio2.enable_irq();
captaingoujon 11:8f3e72f6a1e0 791
captaingoujon 11:8f3e72f6a1e0 792 }
captaingoujon 11:8f3e72f6a1e0 793
captaingoujon 11:8f3e72f6a1e0 794 void pcRxISR(){
captaingoujon 11:8f3e72f6a1e0 795 char character = pc.getc();
captaingoujon 11:8f3e72f6a1e0 796 static char counter=0;
captaingoujon 11:8f3e72f6a1e0 797 pc.putc(character);
captaingoujon 11:8f3e72f6a1e0 798 if(character == 13){
captaingoujon 11:8f3e72f6a1e0 799 pcInBuff[counter] = 0;
captaingoujon 11:8f3e72f6a1e0 800 pc.printf("%s\n\r",pcInBuff);
captaingoujon 11:8f3e72f6a1e0 801 radioTransmit(pcInBuff,counter);
captaingoujon 11:8f3e72f6a1e0 802 counter = 0;
captaingoujon 11:8f3e72f6a1e0 803 }else{
captaingoujon 11:8f3e72f6a1e0 804 pcInBuff[counter] = character;
captaingoujon 11:8f3e72f6a1e0 805 counter++;
captaingoujon 11:8f3e72f6a1e0 806 }
captaingoujon 11:8f3e72f6a1e0 807 }
captaingoujon 11:8f3e72f6a1e0 808
captaingoujon 11:8f3e72f6a1e0 809 void radioReceive(){
captaingoujon 11:8f3e72f6a1e0 810 static char counter=0;
captaingoujon 11:8f3e72f6a1e0 811 while(fifoNE){
captaingoujon 11:8f3e72f6a1e0 812 //char character =
captaingoujon 11:8f3e72f6a1e0 813 pc.putc(readFifo());
captaingoujon 11:8f3e72f6a1e0 814 /*if(character == 13){
captaingoujon 11:8f3e72f6a1e0 815 radioInBuff[counter] = 0;
captaingoujon 11:8f3e72f6a1e0 816 counter = 0;
captaingoujon 11:8f3e72f6a1e0 817 pc.printf("\n\rString: %s\n\r",radioInBuff);
captaingoujon 11:8f3e72f6a1e0 818 }else{
captaingoujon 11:8f3e72f6a1e0 819 radioInBuff[counter] = character;
captaingoujon 11:8f3e72f6a1e0 820 counter++;
captaingoujon 11:8f3e72f6a1e0 821 }*/
captaingoujon 11:8f3e72f6a1e0 822 }
captaingoujon 11:8f3e72f6a1e0 823 }
captaingoujon 0:27c53e093a59 824 int main(){
captaingoujon 5:f7c32f548d53 825 //Radio Dev branch
captaingoujon 11:8f3e72f6a1e0 826
captaingoujon 11:8f3e72f6a1e0 827 pc.attach(&pcRxISR,Serial::RxIrq);
captaingoujon 11:8f3e72f6a1e0 828 //dio2.rise(radioReceive);
captaingoujon 11:8f3e72f6a1e0 829
captaingoujon 11:8f3e72f6a1e0 830 //setup radio
captaingoujon 11:8f3e72f6a1e0 831 radioInit();
captaingoujon 11:8f3e72f6a1e0 832
captaingoujon 11:8f3e72f6a1e0 833 //dio2.enable_irq();
captaingoujon 11:8f3e72f6a1e0 834
captaingoujon 9:2a26eec46988 835 while(1){
captaingoujon 11:8f3e72f6a1e0 836 //pc.printf("Mode: %02x,Flags: %04x, RSSI: %d\n\r",getMode(),getFlags(),getRSSI());
captaingoujon 11:8f3e72f6a1e0 837 if((getFlags()&0x04)){
captaingoujon 11:8f3e72f6a1e0 838 led = 1;
captaingoujon 11:8f3e72f6a1e0 839 radioReceive();
captaingoujon 11:8f3e72f6a1e0 840 }else{
captaingoujon 11:8f3e72f6a1e0 841 led=0;
captaingoujon 11:8f3e72f6a1e0 842 }
captaingoujon 11:8f3e72f6a1e0 843 wait(1);
captaingoujon 11:8f3e72f6a1e0 844 //__WFI();
captaingoujon 9:2a26eec46988 845 }
captaingoujon 0:27c53e093a59 846 }