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.
main.cpp@11:8f3e72f6a1e0, 2015-08-18 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |

