wayne roberts
/
iq_sx126x
IQ modulation on sx126x
main.cpp@1:061c7250788a, 2018-07-24 (annotated)
- Committer:
- Wayne Roberts
- Date:
- Tue Jul 24 17:08:26 2018 -0700
- Revision:
- 1:061c7250788a
add main.cpp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wayne Roberts |
1:061c7250788a | 1 | #include "sx12xx.h" |
Wayne Roberts |
1:061c7250788a | 2 | |
Wayne Roberts |
1:061c7250788a | 3 | RawSerial pc(USBTX, USBRX); |
Wayne Roberts |
1:061c7250788a | 4 | |
Wayne Roberts |
1:061c7250788a | 5 | #ifdef TARGET_FF_ARDUINO |
Wayne Roberts |
1:061c7250788a | 6 | SPI spi(D11, D12, D13); // mosi, miso, sclk |
Wayne Roberts |
1:061c7250788a | 7 | //spi, nss, busy, dio1 |
Wayne Roberts |
1:061c7250788a | 8 | SX126x radio(spi, D7, D3, D5); |
Wayne Roberts |
1:061c7250788a | 9 | |
Wayne Roberts |
1:061c7250788a | 10 | DigitalOut antswPower(D8); |
Wayne Roberts |
1:061c7250788a | 11 | AnalogIn xtalSel(A3); |
Wayne Roberts |
1:061c7250788a | 12 | |
Wayne Roberts |
1:061c7250788a | 13 | DigitalIn chipType(A2); |
Wayne Roberts |
1:061c7250788a | 14 | |
Wayne Roberts |
1:061c7250788a | 15 | #define PINNAME_NRST A0 |
Wayne Roberts |
1:061c7250788a | 16 | |
Wayne Roberts |
1:061c7250788a | 17 | #define LED_ON 1 |
Wayne Roberts |
1:061c7250788a | 18 | #define LED_OFF 0 |
Wayne Roberts |
1:061c7250788a | 19 | DigitalOut tx_led(A4); |
Wayne Roberts |
1:061c7250788a | 20 | DigitalOut rx_led(A5); |
Wayne Roberts |
1:061c7250788a | 21 | |
Wayne Roberts |
1:061c7250788a | 22 | void chipModeChange() |
Wayne Roberts |
1:061c7250788a | 23 | { |
Wayne Roberts |
1:061c7250788a | 24 | if (radio.chipMode == CHIPMODE_NONE) { |
Wayne Roberts |
1:061c7250788a | 25 | tx_led = LED_OFF; |
Wayne Roberts |
1:061c7250788a | 26 | rx_led = LED_OFF; |
Wayne Roberts |
1:061c7250788a | 27 | } else if (radio.chipMode == CHIPMODE_TX) { |
Wayne Roberts |
1:061c7250788a | 28 | tx_led = LED_ON; |
Wayne Roberts |
1:061c7250788a | 29 | rx_led = LED_OFF; |
Wayne Roberts |
1:061c7250788a | 30 | } else if (radio.chipMode == CHIPMODE_RX) { |
Wayne Roberts |
1:061c7250788a | 31 | tx_led = LED_OFF; |
Wayne Roberts |
1:061c7250788a | 32 | rx_led = LED_ON; |
Wayne Roberts |
1:061c7250788a | 33 | } |
Wayne Roberts |
1:061c7250788a | 34 | } |
Wayne Roberts |
1:061c7250788a | 35 | #endif /* TARGET_FF_ARDUINO */ |
Wayne Roberts |
1:061c7250788a | 36 | |
Wayne Roberts |
1:061c7250788a | 37 | volatile bool tx_done; |
Wayne Roberts |
1:061c7250788a | 38 | |
Wayne Roberts |
1:061c7250788a | 39 | void txDoneBottom() |
Wayne Roberts |
1:061c7250788a | 40 | { |
Wayne Roberts |
1:061c7250788a | 41 | printf("txDone\r\n"); |
Wayne Roberts |
1:061c7250788a | 42 | tx_done = true; |
Wayne Roberts |
1:061c7250788a | 43 | } |
Wayne Roberts |
1:061c7250788a | 44 | |
Wayne Roberts |
1:061c7250788a | 45 | PacketParams_t pp; |
Wayne Roberts |
1:061c7250788a | 46 | |
Wayne Roberts |
1:061c7250788a | 47 | void startTx() |
Wayne Roberts |
1:061c7250788a | 48 | { |
Wayne Roberts |
1:061c7250788a | 49 | uint8_t buf[2]; |
Wayne Roberts |
1:061c7250788a | 50 | |
Wayne Roberts |
1:061c7250788a | 51 | buf[0] = 0; // TX base address |
Wayne Roberts |
1:061c7250788a | 52 | buf[1] = 0; // RX base address |
Wayne Roberts |
1:061c7250788a | 53 | radio.xfer(OPCODE_SET_BUFFER_BASE_ADDR, 2, 0, buf); |
Wayne Roberts |
1:061c7250788a | 54 | |
Wayne Roberts |
1:061c7250788a | 55 | tx_done = false; |
Wayne Roberts |
1:061c7250788a | 56 | radio.start_tx(pp.gfsk.PayloadLength); |
Wayne Roberts |
1:061c7250788a | 57 | } |
Wayne Roberts |
1:061c7250788a | 58 | |
Wayne Roberts |
1:061c7250788a | 59 | unsigned lfsr; |
Wayne Roberts |
1:061c7250788a | 60 | #define LFSR_INIT 0x1ff |
Wayne Roberts |
1:061c7250788a | 61 | |
Wayne Roberts |
1:061c7250788a | 62 | uint8_t get_pn9_byte() |
Wayne Roberts |
1:061c7250788a | 63 | { |
Wayne Roberts |
1:061c7250788a | 64 | uint8_t ret = 0; |
Wayne Roberts |
1:061c7250788a | 65 | int xor_out; |
Wayne Roberts |
1:061c7250788a | 66 | |
Wayne Roberts |
1:061c7250788a | 67 | xor_out = ((lfsr >> 5) & 0xf) ^ (lfsr & 0xf); // four bits at a time |
Wayne Roberts |
1:061c7250788a | 68 | lfsr = (lfsr >> 4) | (xor_out << 5); // four bits at a time |
Wayne Roberts |
1:061c7250788a | 69 | |
Wayne Roberts |
1:061c7250788a | 70 | ret |= (lfsr >> 5) & 0x0f; |
Wayne Roberts |
1:061c7250788a | 71 | |
Wayne Roberts |
1:061c7250788a | 72 | xor_out = ((lfsr >> 5) & 0xf) ^ (lfsr & 0xf); // four bits at a time |
Wayne Roberts |
1:061c7250788a | 73 | lfsr = (lfsr >> 4) | (xor_out << 5); // four bits at a time |
Wayne Roberts |
1:061c7250788a | 74 | |
Wayne Roberts |
1:061c7250788a | 75 | ret |= ((lfsr >> 1) & 0xf0); |
Wayne Roberts |
1:061c7250788a | 76 | |
Wayne Roberts |
1:061c7250788a | 77 | return ret; |
Wayne Roberts |
1:061c7250788a | 78 | } |
Wayne Roberts |
1:061c7250788a | 79 | |
Wayne Roberts |
1:061c7250788a | 80 | uint8_t I[2]; |
Wayne Roberts |
1:061c7250788a | 81 | uint8_t Q[2]; |
Wayne Roberts |
1:061c7250788a | 82 | |
Wayne Roberts |
1:061c7250788a | 83 | void rx_callback() |
Wayne Roberts |
1:061c7250788a | 84 | { |
Wayne Roberts |
1:061c7250788a | 85 | uint8_t ch = pc.getc(); |
Wayne Roberts |
1:061c7250788a | 86 | |
Wayne Roberts |
1:061c7250788a | 87 | pc.putc(ch); |
Wayne Roberts |
1:061c7250788a | 88 | |
Wayne Roberts |
1:061c7250788a | 89 | switch (ch) { |
Wayne Roberts |
1:061c7250788a | 90 | case 'q': |
Wayne Roberts |
1:061c7250788a | 91 | radio.writeReg(REG_ADDR_MODCFG+1, ++I[0], 1); |
Wayne Roberts |
1:061c7250788a | 92 | printf("I[0]:%02x\r\n", I[0]); |
Wayne Roberts |
1:061c7250788a | 93 | break; |
Wayne Roberts |
1:061c7250788a | 94 | case 'a': |
Wayne Roberts |
1:061c7250788a | 95 | radio.writeReg(REG_ADDR_MODCFG+1, --I[0], 1); |
Wayne Roberts |
1:061c7250788a | 96 | printf("I[0]:%02x\r\n", I[0]); |
Wayne Roberts |
1:061c7250788a | 97 | break; |
Wayne Roberts |
1:061c7250788a | 98 | |
Wayne Roberts |
1:061c7250788a | 99 | case 'w': |
Wayne Roberts |
1:061c7250788a | 100 | radio.writeReg(REG_ADDR_MODCFG+2, ++Q[0], 1); |
Wayne Roberts |
1:061c7250788a | 101 | printf("Q[0]:%02x\r\n", Q[0]); |
Wayne Roberts |
1:061c7250788a | 102 | break; |
Wayne Roberts |
1:061c7250788a | 103 | case 's': |
Wayne Roberts |
1:061c7250788a | 104 | radio.writeReg(REG_ADDR_MODCFG+2, --Q[0], 1); |
Wayne Roberts |
1:061c7250788a | 105 | printf("Q[0]:%02x\r\n", Q[0]); |
Wayne Roberts |
1:061c7250788a | 106 | break; |
Wayne Roberts |
1:061c7250788a | 107 | |
Wayne Roberts |
1:061c7250788a | 108 | case 'e': |
Wayne Roberts |
1:061c7250788a | 109 | radio.writeReg(REG_ADDR_MODCFG+3, ++I[1], 1); |
Wayne Roberts |
1:061c7250788a | 110 | printf("I[1]:%02x\r\n", I[1]); |
Wayne Roberts |
1:061c7250788a | 111 | break; |
Wayne Roberts |
1:061c7250788a | 112 | case 'd': |
Wayne Roberts |
1:061c7250788a | 113 | radio.writeReg(REG_ADDR_MODCFG+3, --I[1], 1); |
Wayne Roberts |
1:061c7250788a | 114 | printf("I[1]:%02x\r\n", I[1]); |
Wayne Roberts |
1:061c7250788a | 115 | break; |
Wayne Roberts |
1:061c7250788a | 116 | |
Wayne Roberts |
1:061c7250788a | 117 | case 'r': |
Wayne Roberts |
1:061c7250788a | 118 | radio.writeReg(REG_ADDR_MODCFG+4, ++Q[1], 1); |
Wayne Roberts |
1:061c7250788a | 119 | printf("Q[1]:%02x\r\n", Q[1]); |
Wayne Roberts |
1:061c7250788a | 120 | break; |
Wayne Roberts |
1:061c7250788a | 121 | case 'f': |
Wayne Roberts |
1:061c7250788a | 122 | radio.writeReg(REG_ADDR_MODCFG+4, --Q[1], 1); |
Wayne Roberts |
1:061c7250788a | 123 | printf("Q[1]:%02x\r\n", Q[1]); |
Wayne Roberts |
1:061c7250788a | 124 | break; |
Wayne Roberts |
1:061c7250788a | 125 | |
Wayne Roberts |
1:061c7250788a | 126 | default: |
Wayne Roberts |
1:061c7250788a | 127 | break; |
Wayne Roberts |
1:061c7250788a | 128 | } // ..switch (ch) |
Wayne Roberts |
1:061c7250788a | 129 | } |
Wayne Roberts |
1:061c7250788a | 130 | |
Wayne Roberts |
1:061c7250788a | 131 | void |
Wayne Roberts |
1:061c7250788a | 132 | init_syncaddr(uint8_t syncNum) |
Wayne Roberts |
1:061c7250788a | 133 | { |
Wayne Roberts |
1:061c7250788a | 134 | uint32_t sa; |
Wayne Roberts |
1:061c7250788a | 135 | |
Wayne Roberts |
1:061c7250788a | 136 | sa = get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 137 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 138 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 139 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 140 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 141 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 142 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 143 | |
Wayne Roberts |
1:061c7250788a | 144 | printf("sa %08lx\r\n", sa); |
Wayne Roberts |
1:061c7250788a | 145 | radio.writeReg(REG_ADDR_SYNCADDR, sa, 4); |
Wayne Roberts |
1:061c7250788a | 146 | |
Wayne Roberts |
1:061c7250788a | 147 | sa = get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 148 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 149 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 150 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 151 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 152 | sa <<= 8; |
Wayne Roberts |
1:061c7250788a | 153 | sa += get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 154 | |
Wayne Roberts |
1:061c7250788a | 155 | printf("sa %08lx\r\n", sa); |
Wayne Roberts |
1:061c7250788a | 156 | radio.writeReg(REG_ADDR_SYNCADDR+4, sa, 4); |
Wayne Roberts |
1:061c7250788a | 157 | } |
Wayne Roberts |
1:061c7250788a | 158 | |
Wayne Roberts |
1:061c7250788a | 159 | int main() |
Wayne Roberts |
1:061c7250788a | 160 | { |
Wayne Roberts |
1:061c7250788a | 161 | modCfg_t modCfg; |
Wayne Roberts |
1:061c7250788a | 162 | uint8_t buf[8]; |
Wayne Roberts |
1:061c7250788a | 163 | unsigned svcCnt = 0; |
Wayne Roberts |
1:061c7250788a | 164 | unsigned preambleLen = 32; |
Wayne Roberts |
1:061c7250788a | 165 | ModulationParams_t mp; |
Wayne Roberts |
1:061c7250788a | 166 | uint32_t u32; |
Wayne Roberts |
1:061c7250788a | 167 | unsigned bps = 1200; |
Wayne Roberts |
1:061c7250788a | 168 | bool crcOn = true; |
Wayne Roberts |
1:061c7250788a | 169 | unsigned i, fdev_hz; |
Wayne Roberts |
1:061c7250788a | 170 | |
Wayne Roberts |
1:061c7250788a | 171 | printf("\r\nreset\r\n"); |
Wayne Roberts |
1:061c7250788a | 172 | |
Wayne Roberts |
1:061c7250788a | 173 | lfsr = LFSR_INIT; |
Wayne Roberts |
1:061c7250788a | 174 | |
Wayne Roberts |
1:061c7250788a | 175 | radio.hw_reset(PINNAME_NRST); |
Wayne Roberts |
1:061c7250788a | 176 | |
Wayne Roberts |
1:061c7250788a | 177 | init_syncaddr(1); |
Wayne Roberts |
1:061c7250788a | 178 | |
Wayne Roberts |
1:061c7250788a | 179 | radio.txDone = txDoneBottom; |
Wayne Roberts |
1:061c7250788a | 180 | // radio.rxDone = rx_done; |
Wayne Roberts |
1:061c7250788a | 181 | // radio.timeout = timeout_callback; |
Wayne Roberts |
1:061c7250788a | 182 | radio.chipModeChange = chipModeChange; |
Wayne Roberts |
1:061c7250788a | 183 | // radio.dio1_topHalf = dio1_top_half; |
Wayne Roberts |
1:061c7250788a | 184 | |
Wayne Roberts |
1:061c7250788a | 185 | radio.SetDIO2AsRfSwitchCtrl(1); |
Wayne Roberts |
1:061c7250788a | 186 | |
Wayne Roberts |
1:061c7250788a | 187 | |
Wayne Roberts |
1:061c7250788a | 188 | //if (radio.getPacketType() != PACKET_TYPE_GFSK) |
Wayne Roberts |
1:061c7250788a | 189 | radio.setPacketType(PACKET_TYPE_GFSK); |
Wayne Roberts |
1:061c7250788a | 190 | |
Wayne Roberts |
1:061c7250788a | 191 | /*************************************************************/ |
Wayne Roberts |
1:061c7250788a | 192 | pp.gfsk.PreambleLengthHi = preambleLen >> 8; |
Wayne Roberts |
1:061c7250788a | 193 | pp.gfsk.PreambleLengthLo = preambleLen; |
Wayne Roberts |
1:061c7250788a | 194 | pp.gfsk.PreambleDetectorLength = GFSK_PREAMBLE_DETECTOR_LENGTH_16BITS; |
Wayne Roberts |
1:061c7250788a | 195 | pp.gfsk.SyncWordLength = 24; // 0xC194C1 |
Wayne Roberts |
1:061c7250788a | 196 | pp.gfsk.AddrComp = 0; |
Wayne Roberts |
1:061c7250788a | 197 | pp.gfsk.PacketType = HEADER_TYPE_VARIABLE_LENGTH ; |
Wayne Roberts |
1:061c7250788a | 198 | if (crcOn) |
Wayne Roberts |
1:061c7250788a | 199 | pp.gfsk.CRCType = GFSK_CRC_2_BYTE; |
Wayne Roberts |
1:061c7250788a | 200 | else |
Wayne Roberts |
1:061c7250788a | 201 | pp.gfsk.CRCType = GFSK_CRC_OFF; |
Wayne Roberts |
1:061c7250788a | 202 | |
Wayne Roberts |
1:061c7250788a | 203 | pp.gfsk.PayloadLength = 192; |
Wayne Roberts |
1:061c7250788a | 204 | |
Wayne Roberts |
1:061c7250788a | 205 | radio.xfer(OPCODE_SET_PACKET_PARAMS, 8, 0, pp.buf); |
Wayne Roberts |
1:061c7250788a | 206 | /*************************************************************/ |
Wayne Roberts |
1:061c7250788a | 207 | |
Wayne Roberts |
1:061c7250788a | 208 | u32 = 32 * (XTAL_FREQ_HZ / bps); |
Wayne Roberts |
1:061c7250788a | 209 | mp.gfsk.bitrateHi = u32 >> 16; // param1 |
Wayne Roberts |
1:061c7250788a | 210 | mp.gfsk.bitrateMid = u32 >> 8; // param2 |
Wayne Roberts |
1:061c7250788a | 211 | mp.gfsk.bitrateLo = u32; // param3 |
Wayne Roberts |
1:061c7250788a | 212 | mp.gfsk.PulseShape = GFSK_SHAPE_BT1_0; // param4 |
Wayne Roberts |
1:061c7250788a | 213 | // param5: |
Wayne Roberts |
1:061c7250788a | 214 | /* if (bw_hz < 5800) |
Wayne Roberts |
1:061c7250788a | 215 | mp.gfsk.bandwidth = GFSK_RX_BW_4800; |
Wayne Roberts |
1:061c7250788a | 216 | else if (bw_hz < 7300) |
Wayne Roberts |
1:061c7250788a | 217 | mp.gfsk.bandwidth = GFSK_RX_BW_5800; |
Wayne Roberts |
1:061c7250788a | 218 | else if (bw_hz < 9700) |
Wayne Roberts |
1:061c7250788a | 219 | mp.gfsk.bandwidth = GFSK_RX_BW_7300; |
Wayne Roberts |
1:061c7250788a | 220 | else if (bw_hz < 11700) |
Wayne Roberts |
1:061c7250788a | 221 | mp.gfsk.bandwidth = GFSK_RX_BW_9700; |
Wayne Roberts |
1:061c7250788a | 222 | else if (bw_hz < 14600) |
Wayne Roberts |
1:061c7250788a | 223 | mp.gfsk.bandwidth = GFSK_RX_BW_11700; |
Wayne Roberts |
1:061c7250788a | 224 | else if (bw_hz < 19500) |
Wayne Roberts |
1:061c7250788a | 225 | mp.gfsk.bandwidth = GFSK_RX_BW_14600; |
Wayne Roberts |
1:061c7250788a | 226 | else if (bw_hz < 23400) |
Wayne Roberts |
1:061c7250788a | 227 | mp.gfsk.bandwidth = GFSK_RX_BW_19500; |
Wayne Roberts |
1:061c7250788a | 228 | else if (bw_hz < 29300) |
Wayne Roberts |
1:061c7250788a | 229 | mp.gfsk.bandwidth = GFSK_RX_BW_23400; |
Wayne Roberts |
1:061c7250788a | 230 | else if (bw_hz < 39000) |
Wayne Roberts |
1:061c7250788a | 231 | mp.gfsk.bandwidth = GFSK_RX_BW_29300; |
Wayne Roberts |
1:061c7250788a | 232 | else if (bw_hz < 46900) |
Wayne Roberts |
1:061c7250788a | 233 | mp.gfsk.bandwidth = GFSK_RX_BW_39000; |
Wayne Roberts |
1:061c7250788a | 234 | else if (bw_hz < 58600) |
Wayne Roberts |
1:061c7250788a | 235 | mp.gfsk.bandwidth = GFSK_RX_BW_46900; |
Wayne Roberts |
1:061c7250788a | 236 | else if (bw_hz < 78200) |
Wayne Roberts |
1:061c7250788a | 237 | mp.gfsk.bandwidth = GFSK_RX_BW_58600; |
Wayne Roberts |
1:061c7250788a | 238 | els`e if (bw_hz < 93800) |
Wayne Roberts |
1:061c7250788a | 239 | mp.gfsk.bandwidth = GFSK_RX_BW_78200; |
Wayne Roberts |
1:061c7250788a | 240 | else if (bw_hz < 117300) |
Wayne Roberts |
1:061c7250788a | 241 | mp.gfsk.bandwidth = GFSK_RX_BW_93800; |
Wayne Roberts |
1:061c7250788a | 242 | else if (bw_hz < 156200) |
Wayne Roberts |
1:061c7250788a | 243 | mp.gfsk.bandwidth = GFSK_RX_BW_117300; |
Wayne Roberts |
1:061c7250788a | 244 | else if (bw_hz < 187200) |
Wayne Roberts |
1:061c7250788a | 245 | mp.gfsk.bandwidth = GFSK_RX_BW_156200; |
Wayne Roberts |
1:061c7250788a | 246 | else if (bw_hz < 234300) |
Wayne Roberts |
1:061c7250788a | 247 | mp.gfsk.bandwidth = GFSK_RX_BW_187200; |
Wayne Roberts |
1:061c7250788a | 248 | else if (bw_hz < 312000) |
Wayne Roberts |
1:061c7250788a | 249 | mp.gfsk.bandwidth = GFSK_RX_BW_234300; |
Wayne Roberts |
1:061c7250788a | 250 | else if (bw_hz < 373600) |
Wayne Roberts |
1:061c7250788a | 251 | mp.gfsk.bandwidth = GFSK_RX_BW_312000; |
Wayne Roberts |
1:061c7250788a | 252 | else if (bw_hz < 467000) |
Wayne Roberts |
1:061c7250788a | 253 | mp.gfsk.bandwidth = GFSK_RX_BW_373600; |
Wayne Roberts |
1:061c7250788a | 254 | else |
Wayne Roberts |
1:061c7250788a | 255 | mp.gfsk.bandwidth = GFSK_RX_BW_467000;*/ |
Wayne Roberts |
1:061c7250788a | 256 | |
Wayne Roberts |
1:061c7250788a | 257 | mp.gfsk.bandwidth = GFSK_RX_BW_11700; |
Wayne Roberts |
1:061c7250788a | 258 | /* |
Wayne Roberts |
1:061c7250788a | 259 | fdev_hz = 10000; |
Wayne Roberts |
1:061c7250788a | 260 | |
Wayne Roberts |
1:061c7250788a | 261 | u32 = fdev_hz / FREQ_STEP; |
Wayne Roberts |
1:061c7250788a | 262 | mp.gfsk.fdevHi = u32 >> 16; // param6 |
Wayne Roberts |
1:061c7250788a | 263 | mp.gfsk.fdevMid = u32 >> 8; // param7 |
Wayne Roberts |
1:061c7250788a | 264 | mp.gfsk.fdevLo = u32; // param8 |
Wayne Roberts |
1:061c7250788a | 265 | */ |
Wayne Roberts |
1:061c7250788a | 266 | mp.gfsk.fdevHi = 0; // param6 |
Wayne Roberts |
1:061c7250788a | 267 | mp.gfsk.fdevMid = 0; // param7 |
Wayne Roberts |
1:061c7250788a | 268 | mp.gfsk.fdevLo = 0; // param8 |
Wayne Roberts |
1:061c7250788a | 269 | |
Wayne Roberts |
1:061c7250788a | 270 | radio.xfer(OPCODE_SET_MODULATION_PARAMS, 8, 0, mp.buf); |
Wayne Roberts |
1:061c7250788a | 271 | /*************************************************************/ |
Wayne Roberts |
1:061c7250788a | 272 | |
Wayne Roberts |
1:061c7250788a | 273 | I[0] = radio.readReg(REG_ADDR_MODCFG+1, 1), |
Wayne Roberts |
1:061c7250788a | 274 | Q[0] = radio.readReg(REG_ADDR_MODCFG+2, 1), |
Wayne Roberts |
1:061c7250788a | 275 | I[1] = radio.readReg(REG_ADDR_MODCFG+3, 1), |
Wayne Roberts |
1:061c7250788a | 276 | Q[1] = radio.readReg(REG_ADDR_MODCFG+3, 1), |
Wayne Roberts |
1:061c7250788a | 277 | |
Wayne Roberts |
1:061c7250788a | 278 | modCfg.octet = radio.readReg(REG_ADDR_MODCFG, 1); |
Wayne Roberts |
1:061c7250788a | 279 | modCfg.bits.mod_type = 0; |
Wayne Roberts |
1:061c7250788a | 280 | radio.writeReg(REG_ADDR_MODCFG, modCfg.octet, 1); |
Wayne Roberts |
1:061c7250788a | 281 | |
Wayne Roberts |
1:061c7250788a | 282 | /*************************************************************/ |
Wayne Roberts |
1:061c7250788a | 283 | |
Wayne Roberts |
1:061c7250788a | 284 | radio.setMHz(915.0); |
Wayne Roberts |
1:061c7250788a | 285 | radio.set_tx_dbm(true, 14); |
Wayne Roberts |
1:061c7250788a | 286 | |
Wayne Roberts |
1:061c7250788a | 287 | { |
Wayne Roberts |
1:061c7250788a | 288 | IrqFlags_t irqEnable; |
Wayne Roberts |
1:061c7250788a | 289 | irqEnable.word = 0; |
Wayne Roberts |
1:061c7250788a | 290 | irqEnable.bits.TxDone = 1; |
Wayne Roberts |
1:061c7250788a | 291 | irqEnable.bits.Timeout = 1; |
Wayne Roberts |
1:061c7250788a | 292 | |
Wayne Roberts |
1:061c7250788a | 293 | buf[0] = irqEnable.word >> 8; // enable bits |
Wayne Roberts |
1:061c7250788a | 294 | buf[1] = irqEnable.word; // enable bits |
Wayne Roberts |
1:061c7250788a | 295 | buf[2] = irqEnable.word >> 8; // dio1 |
Wayne Roberts |
1:061c7250788a | 296 | buf[3] = irqEnable.word; // dio1 |
Wayne Roberts |
1:061c7250788a | 297 | buf[4] = 0; // dio2 |
Wayne Roberts |
1:061c7250788a | 298 | buf[5] = 0; // dio2 |
Wayne Roberts |
1:061c7250788a | 299 | buf[6] = 0; // dio3 |
Wayne Roberts |
1:061c7250788a | 300 | buf[7] = 0; // dio3 |
Wayne Roberts |
1:061c7250788a | 301 | radio.xfer(OPCODE_SET_DIO_IRQ_PARAMS, 8, 0, buf); |
Wayne Roberts |
1:061c7250788a | 302 | } |
Wayne Roberts |
1:061c7250788a | 303 | |
Wayne Roberts |
1:061c7250788a | 304 | for (i = 0; i < pp.gfsk.PayloadLength; i++) { |
Wayne Roberts |
1:061c7250788a | 305 | radio.tx_buf[i] = get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 306 | } |
Wayne Roberts |
1:061c7250788a | 307 | |
Wayne Roberts |
1:061c7250788a | 308 | antswPower = 1; |
Wayne Roberts |
1:061c7250788a | 309 | |
Wayne Roberts |
1:061c7250788a | 310 | startTx(); |
Wayne Roberts |
1:061c7250788a | 311 | |
Wayne Roberts |
1:061c7250788a | 312 | for (;;) { |
Wayne Roberts |
1:061c7250788a | 313 | if (pc.readable()) |
Wayne Roberts |
1:061c7250788a | 314 | rx_callback(); |
Wayne Roberts |
1:061c7250788a | 315 | |
Wayne Roberts |
1:061c7250788a | 316 | radio.service(); |
Wayne Roberts |
1:061c7250788a | 317 | |
Wayne Roberts |
1:061c7250788a | 318 | if (!tx_done) { |
Wayne Roberts |
1:061c7250788a | 319 | // |
Wayne Roberts |
1:061c7250788a | 320 | } else { |
Wayne Roberts |
1:061c7250788a | 321 | wait(0.02); |
Wayne Roberts |
1:061c7250788a | 322 | |
Wayne Roberts |
1:061c7250788a | 323 | for (i = 0; i < pp.gfsk.PayloadLength; i++) { |
Wayne Roberts |
1:061c7250788a | 324 | radio.tx_buf[i] = get_pn9_byte(); |
Wayne Roberts |
1:061c7250788a | 325 | } |
Wayne Roberts |
1:061c7250788a | 326 | |
Wayne Roberts |
1:061c7250788a | 327 | printf("modCfg:%02x\t\t", modCfg.octet); |
Wayne Roberts |
1:061c7250788a | 328 | printf("I:%02x Q:%02x\t\t\tI:%02x Q:%02x\r\n", |
Wayne Roberts |
1:061c7250788a | 329 | (uint8_t)radio.readReg(REG_ADDR_MODCFG+1, 1), |
Wayne Roberts |
1:061c7250788a | 330 | (uint8_t)radio.readReg(REG_ADDR_MODCFG+2, 1), |
Wayne Roberts |
1:061c7250788a | 331 | (uint8_t)radio.readReg(REG_ADDR_MODCFG+3, 1), |
Wayne Roberts |
1:061c7250788a | 332 | (uint8_t)radio.readReg(REG_ADDR_MODCFG+4, 1) |
Wayne Roberts |
1:061c7250788a | 333 | ); |
Wayne Roberts |
1:061c7250788a | 334 | startTx(); |
Wayne Roberts |
1:061c7250788a | 335 | } |
Wayne Roberts |
1:061c7250788a | 336 | } // ..for (;;) |
Wayne Roberts |
1:061c7250788a | 337 | } |
Wayne Roberts |
1:061c7250788a | 338 |