Text menu driven ANSI/VT100 console test utility for LoRa transceivers

radio chip selection

Radio chip driver is not included, allowing choice of radio device.
If you're using SX1272 or SX1276, then import sx127x driver into your program.
if you're using SX1261 or SX1262, then import sx126x driver into your program.
if you're using SX1280, then import sx1280 driver into your program.
if you're using LR1110, then import LR1110 driver into your program.
If you're using NAmote72 or Murata discovery, then you must import only sx127x driver.
If you're using Type1SJ select target DISCO_L072CZ_LRWAN1 and import sx126x driver into your program.

This is VT100 text-based menu driven test program for SX12xx transceiver devices.
Serial console is divided into horizontally into top half and bottom half.
The bottom half serves as scrolling area to log activity.
The top half serves as menu, to configure the radio.
For all devices, the serial console operates at 115200 8N1, and requires terminal with ANSI-VT100 capability, such as putty/teraterm/minicom etc.
Use program only with keyboard up/down/left/right keys. Enter to change an item, or number for value item. Some items are single bit, requiring only enter key to toggle. Others with fixed choices give a drop-down menu.

Committer:
dudmuck
Date:
Mon Aug 05 20:07:16 2024 +0000
Revision:
15:703ca340d0fb
Parent:
13:8ce61a1897ab
add reading of RSSI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 1:0817a150122b 1 #include "radio.h"
Wayne Roberts 1:0817a150122b 2 #ifdef SX127x_H
Wayne Roberts 1:0817a150122b 3
Wayne Roberts 1:0817a150122b 4 const char* const Radio::chipNum_str = "SX127x";
Wayne Roberts 1:0817a150122b 5
Wayne Roberts 1:0817a150122b 6 const RadioEvents_t* Radio::RadioEvents;
Wayne Roberts 1:0817a150122b 7 LowPowerTimer Radio::lpt;
Wayne Roberts 1:0817a150122b 8 uint8_t Radio::bw_idx;
Wayne Roberts 1:0817a150122b 9
Wayne Roberts 1:0817a150122b 10 RegPaRamp_t Radio::RegPaRamp;
Wayne Roberts 1:0817a150122b 11
Wayne Roberts 1:0817a150122b 12 const char* opModes[] = {
Wayne Roberts 1:0817a150122b 13 "SLEEP ", // 0
Wayne Roberts 1:0817a150122b 14 "STANDBY ", // 1
Wayne Roberts 1:0817a150122b 15 "FS_TX ", // 2
Wayne Roberts 1:0817a150122b 16 "TX ", // 3
Wayne Roberts 1:0817a150122b 17 "FS_RX ", // 4
Wayne Roberts 1:0817a150122b 18 "RX ", // 5
Wayne Roberts 1:0817a150122b 19 "RX_SINGLE", // 6
Wayne Roberts 1:0817a150122b 20 "CAD " // 7
Wayne Roberts 1:0817a150122b 21 };
Wayne Roberts 1:0817a150122b 22
Wayne Roberts 1:0817a150122b 23 const char* Radio::tx_ramp_strs[] = {
Wayne Roberts 1:0817a150122b 24 "3400", // 0
Wayne Roberts 1:0817a150122b 25 "2000", // 1
Wayne Roberts 1:0817a150122b 26 "1000", // 2
Wayne Roberts 1:0817a150122b 27 "500 ", // 3
Wayne Roberts 1:0817a150122b 28 "250 ", // 4
Wayne Roberts 1:0817a150122b 29 "125 ", // 5
Wayne Roberts 1:0817a150122b 30 "100 ", // 6
Wayne Roberts 1:0817a150122b 31 "62 ", // 7
Wayne Roberts 1:0817a150122b 32 "50 ", // 8
Wayne Roberts 1:0817a150122b 33 "40 ", // 9
Wayne Roberts 1:0817a150122b 34 "31 ", // 10
Wayne Roberts 1:0817a150122b 35 "25 ", // 11
Wayne Roberts 1:0817a150122b 36 "20 ", // 12
Wayne Roberts 1:0817a150122b 37 "15 ", // 13
Wayne Roberts 1:0817a150122b 38 "12 ", // 14
Wayne Roberts 1:0817a150122b 39 "10 ", // 15
Wayne Roberts 1:0817a150122b 40 NULL
Wayne Roberts 1:0817a150122b 41 };
Wayne Roberts 1:0817a150122b 42
Wayne Roberts 2:ea9245bb1c53 43 unsigned Radio::tx_ramp_read(bool fw)
Wayne Roberts 1:0817a150122b 44 {
Wayne Roberts 1:0817a150122b 45 RegPaRamp.octet = radio.read_reg(REG_PARAMP);
Wayne Roberts 1:0817a150122b 46 return RegPaRamp.bits.PaRamp;
Wayne Roberts 1:0817a150122b 47 }
Wayne Roberts 1:0817a150122b 48
Wayne Roberts 2:ea9245bb1c53 49 menuMode_e Radio::tx_ramp_write(unsigned val)
Wayne Roberts 1:0817a150122b 50 {
Wayne Roberts 1:0817a150122b 51 RegPaRamp.octet = radio.read_reg(REG_PARAMP);
Wayne Roberts 1:0817a150122b 52
Wayne Roberts 1:0817a150122b 53 RegPaRamp.bits.PaRamp = val;
Wayne Roberts 1:0817a150122b 54 radio.write_reg(REG_PARAMP, RegPaRamp.octet);
Wayne Roberts 1:0817a150122b 55
Wayne Roberts 1:0817a150122b 56 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 57 }
Wayne Roberts 1:0817a150122b 58
Wayne Roberts 1:0817a150122b 59 const char* const Radio::pktType_strs[] = {
Wayne Roberts 1:0817a150122b 60 "FSK ", // 0
Wayne Roberts 1:0817a150122b 61 "OOK ", // 1
Wayne Roberts 1:0817a150122b 62 "LORA", // 2
Wayne Roberts 1:0817a150122b 63 NULL
Wayne Roberts 1:0817a150122b 64 };
Wayne Roberts 1:0817a150122b 65
Wayne Roberts 2:ea9245bb1c53 66 unsigned Radio::pktType_read(bool fw)
Wayne Roberts 1:0817a150122b 67 {
Wayne Roberts 1:0817a150122b 68 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
Wayne Roberts 1:0817a150122b 69 if (radio.RegOpMode.bits.LongRangeMode)
Wayne Roberts 1:0817a150122b 70 return 2;
Wayne Roberts 1:0817a150122b 71 else
Wayne Roberts 1:0817a150122b 72 return radio.RegOpMode.bits.ModulationType;
Wayne Roberts 1:0817a150122b 73 }
Wayne Roberts 1:0817a150122b 74
Wayne Roberts 2:ea9245bb1c53 75 menuMode_e Radio::pktType_write(unsigned idx)
Wayne Roberts 1:0817a150122b 76 {
Wayne Roberts 1:0817a150122b 77 if (idx == 2) {
Wayne Roberts 1:0817a150122b 78 if (!radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 79 /* to lora */
Wayne Roberts 1:0817a150122b 80 radio.set_opmode(RF_OPMODE_SLEEP);
Wayne Roberts 1:0817a150122b 81 radio.RegOpMode.bits.LongRangeMode = 1;
Wayne Roberts 1:0817a150122b 82 wait_us(1000);
Wayne Roberts 1:0817a150122b 83 radio.write_reg(REG_OPMODE, radio.RegOpMode.octet);
Wayne Roberts 1:0817a150122b 84 }
Wayne Roberts 1:0817a150122b 85 } else {
Wayne Roberts 1:0817a150122b 86 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 87 /* from lora */
Wayne Roberts 1:0817a150122b 88 radio.set_opmode(RF_OPMODE_SLEEP);
Wayne Roberts 1:0817a150122b 89 radio.RegOpMode.bits.LongRangeMode = 0;
Wayne Roberts 1:0817a150122b 90 wait_us(1000);
Wayne Roberts 1:0817a150122b 91 radio.write_reg(REG_OPMODE, radio.RegOpMode.octet);
Wayne Roberts 1:0817a150122b 92 }
Wayne Roberts 1:0817a150122b 93
Wayne Roberts 1:0817a150122b 94 if (radio.RegOpMode.bits.ModulationType != idx) {
Wayne Roberts 1:0817a150122b 95 radio.RegOpMode.bits.ModulationType = idx;
Wayne Roberts 1:0817a150122b 96 radio.write_reg(REG_OPMODE, radio.RegOpMode.octet);
Wayne Roberts 1:0817a150122b 97 }
Wayne Roberts 1:0817a150122b 98 }
Wayne Roberts 1:0817a150122b 99
Wayne Roberts 1:0817a150122b 100 return MENUMODE_REINIT_MENU;
Wayne Roberts 1:0817a150122b 101 }
Wayne Roberts 1:0817a150122b 102
Wayne Roberts 1:0817a150122b 103 void Radio::hw_reset()
Wayne Roberts 1:0817a150122b 104 {
Wayne Roberts 1:0817a150122b 105 radio.hw_reset();
Wayne Roberts 1:0817a150122b 106 }
Wayne Roberts 1:0817a150122b 107
Wayne Roberts 1:0817a150122b 108 void Radio::clearIrqFlags()
Wayne Roberts 1:0817a150122b 109 {
Wayne Roberts 1:0817a150122b 110 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 111 radio.write_reg(REG_LR_IRQFLAGS, 0xff); // clear flags in radio
Wayne Roberts 1:0817a150122b 112 } else {
Wayne Roberts 1:0817a150122b 113 radio.write_reg(REG_FSK_IRQFLAGS1, 0x0b);
Wayne Roberts 1:0817a150122b 114 radio.write_reg(REG_FSK_IRQFLAGS2, 0x11);
Wayne Roberts 1:0817a150122b 115 }
Wayne Roberts 1:0817a150122b 116 }
Wayne Roberts 1:0817a150122b 117
Wayne Roberts 1:0817a150122b 118 void Radio::readChip()
Wayne Roberts 1:0817a150122b 119 {
Wayne Roberts 1:0817a150122b 120 }
Wayne Roberts 1:0817a150122b 121
Wayne Roberts 1:0817a150122b 122 uint8_t Radio::get_payload_length()
Wayne Roberts 1:0817a150122b 123 {
Wayne Roberts 1:0817a150122b 124 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 125 lora.RegPayloadLength = radio.read_reg(REG_LR_PAYLOADLENGTH);
Wayne Roberts 1:0817a150122b 126 return lora.RegPayloadLength;
Wayne Roberts 1:0817a150122b 127 } else {
Wayne Roberts 1:0817a150122b 128 fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
Wayne Roberts 1:0817a150122b 129 return fsk.RegPktConfig2.bits.PayloadLength;
Wayne Roberts 1:0817a150122b 130 }
Wayne Roberts 1:0817a150122b 131 }
Wayne Roberts 1:0817a150122b 132
Wayne Roberts 1:0817a150122b 133 void Radio::set_payload_length(uint8_t len)
Wayne Roberts 1:0817a150122b 134 {
Wayne Roberts 1:0817a150122b 135 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 136 lora.RegPayloadLength = len;
Wayne Roberts 1:0817a150122b 137 radio.write_reg(REG_LR_PAYLOADLENGTH, lora.RegPayloadLength);
Wayne Roberts 1:0817a150122b 138 } else {
Wayne Roberts 1:0817a150122b 139 fsk.RegPktConfig2.bits.PayloadLength = len;
Wayne Roberts 5:1e5cb7139acb 140 radio.write_u16(REG_FSK_PACKETCONFIG2, fsk.RegPktConfig2.word);
Wayne Roberts 1:0817a150122b 141 }
Wayne Roberts 1:0817a150122b 142 }
Wayne Roberts 1:0817a150122b 143
Wayne Roberts 1:0817a150122b 144 void Radio::Rx()
Wayne Roberts 1:0817a150122b 145 {
Wayne Roberts 1:0817a150122b 146 if (radio.RegOpMode.bits.LongRangeMode)
Wayne Roberts 1:0817a150122b 147 lora.start_rx(RF_OPMODE_RECEIVER);
Wayne Roberts 1:0817a150122b 148 else
Wayne Roberts 1:0817a150122b 149 fsk.start_rx();
Wayne Roberts 1:0817a150122b 150 }
Wayne Roberts 1:0817a150122b 151
Wayne Roberts 1:0817a150122b 152 void Radio::txPkt()
Wayne Roberts 1:0817a150122b 153 {
Wayne Roberts 1:0817a150122b 154 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 155 lora.RegPayloadLength = radio.read_reg(REG_LR_PAYLOADLENGTH);
Wayne Roberts 1:0817a150122b 156 lora.start_tx(lora.RegPayloadLength);
Wayne Roberts 1:0817a150122b 157 } else {
Wayne Roberts 1:0817a150122b 158 fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
Wayne Roberts 1:0817a150122b 159 //log_printf("fsk payLen %u\r\n", fsk.RegPktConfig2.bits.PayloadLength);
Wayne Roberts 1:0817a150122b 160 fsk.start_tx(fsk.RegPktConfig2.bits.PayloadLength);
Wayne Roberts 5:1e5cb7139acb 161 }
Wayne Roberts 1:0817a150122b 162 }
Wayne Roberts 1:0817a150122b 163
Wayne Roberts 1:0817a150122b 164 void Radio::tx_carrier()
Wayne Roberts 1:0817a150122b 165 {
Wayne Roberts 1:0817a150122b 166 radio.set_opmode(RF_OPMODE_SLEEP);
Wayne Roberts 1:0817a150122b 167 fsk.enable(false);
Wayne Roberts 1:0817a150122b 168 radio.write_u16(REG_FSK_FDEVMSB, 0);
Wayne Roberts 1:0817a150122b 169 radio.write_u16(REG_FSK_PREAMBLEMSB, 0xffff);
Wayne Roberts 1:0817a150122b 170 fsk.start_tx(8);
Wayne Roberts 1:0817a150122b 171 }
Wayne Roberts 1:0817a150122b 172
Wayne Roberts 1:0817a150122b 173 void Radio::tx_preamble()
Wayne Roberts 1:0817a150122b 174 {
Wayne Roberts 1:0817a150122b 175 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 176 radio.write_u16(REG_LR_PREAMBLEMSB, 0xffff);
Wayne Roberts 1:0817a150122b 177 lora.start_tx(8);
Wayne Roberts 1:0817a150122b 178 } else {
Wayne Roberts 1:0817a150122b 179 radio.write_u16(REG_FSK_PREAMBLEMSB, 0xffff);
Wayne Roberts 1:0817a150122b 180 fsk.start_tx(8);
Wayne Roberts 1:0817a150122b 181 }
Wayne Roberts 1:0817a150122b 182 }
Wayne Roberts 1:0817a150122b 183
dudmuck 15:703ca340d0fb 184 void Radio::get_rssi()
dudmuck 15:703ca340d0fb 185 {
dudmuck 15:703ca340d0fb 186 //uint8_t buf[3];
dudmuck 15:703ca340d0fb 187 //radio.xfer(OPCODE_GET_RSSIINST, 0, 3, buf);
dudmuck 15:703ca340d0fb 188 //log_printf("-%0.1f dBm\r\n", buf[1]/2.0);
dudmuck 15:703ca340d0fb 189 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 15:703ca340d0fb 190 log_printf("lora rssi %d dBm", lora.get_current_rssi());
dudmuck 15:703ca340d0fb 191 //REG_LR_RSSIVALUE
dudmuck 15:703ca340d0fb 192 } else {
dudmuck 15:703ca340d0fb 193 uint8_t v = radio.read_reg(REG_FSK_RSSIVALUE);
dudmuck 15:703ca340d0fb 194 log_printf("-%0.1f dBm\r\n", v/2.0);
dudmuck 15:703ca340d0fb 195 }
dudmuck 15:703ca340d0fb 196 }
dudmuck 15:703ca340d0fb 197
Wayne Roberts 1:0817a150122b 198 bool Radio::service(int8_t statusRow)
Wayne Roberts 1:0817a150122b 199 {
Wayne Roberts 1:0817a150122b 200 bool ret = false;
Wayne Roberts 1:0817a150122b 201 static RegIrqFlags1_t prevRegIrqFlags1;
Wayne Roberts 1:0817a150122b 202 static RegIrqFlags2_t prevRegIrqFlags2;
Wayne Roberts 1:0817a150122b 203 static us_timestamp_t prev_now;
Wayne Roberts 1:0817a150122b 204 us_timestamp_t now = lpt.read_us();
Wayne Roberts 1:0817a150122b 205
Wayne Roberts 1:0817a150122b 206 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 207 const float bws[] = {7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125, 250, 500};
Wayne Roberts 1:0817a150122b 208 int32_t est_freq_error;
Wayne Roberts 1:0817a150122b 209 int idx, hz;
Wayne Roberts 1:0817a150122b 210 service_action_e act = lora.service();
Wayne Roberts 1:0817a150122b 211 switch (act) {
Wayne Roberts 1:0817a150122b 212 case SERVICE_READ_FIFO:
Wayne Roberts 1:0817a150122b 213 est_freq_error = radio.read_reg(REG_LR_TEST28);
Wayne Roberts 1:0817a150122b 214 est_freq_error <<= 8;
Wayne Roberts 1:0817a150122b 215 est_freq_error += radio.read_reg(REG_LR_TEST29);
Wayne Roberts 1:0817a150122b 216 est_freq_error <<= 8;
Wayne Roberts 1:0817a150122b 217 est_freq_error += radio.read_reg(REG_LR_TEST2A);
Wayne Roberts 1:0817a150122b 218
Wayne Roberts 1:0817a150122b 219 if (est_freq_error & 0x80000)
Wayne Roberts 1:0817a150122b 220 est_freq_error |= 0xfff00000; // extend sign from 20bit to 32bit
Wayne Roberts 1:0817a150122b 221
Wayne Roberts 1:0817a150122b 222 //log_printf("est_freq_error:%08x\r\n", est_freq_error);
Wayne Roberts 1:0817a150122b 223 if (radio.type == SX1272)
Wayne Roberts 1:0817a150122b 224 idx = bw_idx + 7;
Wayne Roberts 1:0817a150122b 225 else
Wayne Roberts 1:0817a150122b 226 idx = bw_idx;
Wayne Roberts 1:0817a150122b 227
Wayne Roberts 1:0817a150122b 228 hz = est_freq_error * -0.524288 * bws[idx] / 500;
Wayne Roberts 1:0817a150122b 229 log_printf("hz:%d\r\n", hz);
Wayne Roberts 1:0817a150122b 230
Wayne Roberts 1:0817a150122b 231 RadioEvents->RxDone(lora.RegRxNbBytes, lora.get_pkt_rssi(), lora.RegPktSnrValue / 4.0);
Wayne Roberts 1:0817a150122b 232 break;
Wayne Roberts 1:0817a150122b 233 case SERVICE_TX_DONE:
Wayne Roberts 1:0817a150122b 234 if (RadioEvents->TxDone_botHalf)
Wayne Roberts 1:0817a150122b 235 RadioEvents->TxDone_botHalf();
Wayne Roberts 1:0817a150122b 236 break;
Wayne Roberts 1:0817a150122b 237 case SERVICE_ERROR:
Wayne Roberts 1:0817a150122b 238 case SERVICE_NONE:
Wayne Roberts 1:0817a150122b 239 break;
Wayne Roberts 1:0817a150122b 240 }
Wayne Roberts 2:ea9245bb1c53 241
Wayne Roberts 2:ea9245bb1c53 242 if (radio.RegOpMode.bits.Mode == RF_OPMODE_CAD) {
Wayne Roberts 2:ea9245bb1c53 243 if (radio.dio1 || radio.dio0) {
Wayne Roberts 2:ea9245bb1c53 244 RegIrqFlags_t irqFlags;
Wayne Roberts 2:ea9245bb1c53 245 irqFlags.octet = 0;
Wayne Roberts 2:ea9245bb1c53 246 log_printf("Cad: ");
Wayne Roberts 2:ea9245bb1c53 247 if (radio.dio0) {
dudmuck 13:8ce61a1897ab 248 printf("Done ");
Wayne Roberts 2:ea9245bb1c53 249 radio.RegOpMode.bits.Mode = RF_OPMODE_STANDBY;
Wayne Roberts 2:ea9245bb1c53 250 irqFlags.bits.CadDone = 1;
Wayne Roberts 2:ea9245bb1c53 251 }
Wayne Roberts 2:ea9245bb1c53 252 if (radio.dio1) {
dudmuck 13:8ce61a1897ab 253 printf("Detected");
Wayne Roberts 2:ea9245bb1c53 254 irqFlags.bits.CadDetected = 1;
Wayne Roberts 2:ea9245bb1c53 255 }
dudmuck 13:8ce61a1897ab 256 printf("\r\n");
Wayne Roberts 2:ea9245bb1c53 257 radio.write_reg(REG_LR_IRQFLAGS, irqFlags.octet);
Wayne Roberts 2:ea9245bb1c53 258 }
Wayne Roberts 2:ea9245bb1c53 259 }
Wayne Roberts 1:0817a150122b 260 } else {
Wayne Roberts 1:0817a150122b 261 service_action_e act = fsk.service();
Wayne Roberts 1:0817a150122b 262 switch (act) {
Wayne Roberts 1:0817a150122b 263 case SERVICE_READ_FIFO:
Wayne Roberts 1:0817a150122b 264 /*if (fsk.RegRxConfig.bits.AfcAutoOn) {
Wayne Roberts 5:1e5cb7139acb 265 printf("%dHz ", (int)(FREQ_STEP_HZ * fsk.RegAfcValue));
Wayne Roberts 1:0817a150122b 266 if (rssi != 0) {
Wayne Roberts 1:0817a150122b 267 printf("pkt:-%.1fdBm ", rssi / 2.0);
Wayne Roberts 1:0817a150122b 268 rssi = 0;
Wayne Roberts 5:1e5cb7139acb 269 }
Wayne Roberts 1:0817a150122b 270 }*/
Wayne Roberts 1:0817a150122b 271 if (fsk.RegRxConfig.bits.AfcAutoOn)
Wayne Roberts 1:0817a150122b 272 log_printf("%dHz\r\n", (int)(FREQ_STEP_HZ * fsk.RegAfcValue));
Wayne Roberts 1:0817a150122b 273
Wayne Roberts 1:0817a150122b 274 RadioEvents->RxDone(fsk.rx_buf_length, /*TODO rssi*/0, 0);
Wayne Roberts 5:1e5cb7139acb 275 break;
Wayne Roberts 1:0817a150122b 276 case SERVICE_TX_DONE:
Wayne Roberts 1:0817a150122b 277 if (RadioEvents->TxDone_botHalf)
Wayne Roberts 1:0817a150122b 278 RadioEvents->TxDone_botHalf();
Wayne Roberts 5:1e5cb7139acb 279 break;
Wayne Roberts 1:0817a150122b 280 case SERVICE_ERROR:
Wayne Roberts 1:0817a150122b 281 case SERVICE_NONE:
Wayne Roberts 5:1e5cb7139acb 282 break;
Wayne Roberts 1:0817a150122b 283 }
Wayne Roberts 1:0817a150122b 284
Wayne Roberts 1:0817a150122b 285 if (statusRow > 0 && now-prev_now > 50000) {
Wayne Roberts 1:0817a150122b 286 RegIrqFlags1_t RegIrqFlags1;
Wayne Roberts 1:0817a150122b 287 RegIrqFlags2_t RegIrqFlags2;
Wayne Roberts 1:0817a150122b 288
Wayne Roberts 1:0817a150122b 289 RegIrqFlags1.octet = radio.read_reg(REG_FSK_IRQFLAGS1);
Wayne Roberts 1:0817a150122b 290 RegIrqFlags2.octet = radio.read_reg(REG_FSK_IRQFLAGS2);
Wayne Roberts 1:0817a150122b 291 prev_now = now;
Wayne Roberts 1:0817a150122b 292
Wayne Roberts 1:0817a150122b 293 if (RegIrqFlags1.octet != prevRegIrqFlags1.octet || RegIrqFlags2.octet != prevRegIrqFlags2.octet) {
Wayne Roberts 1:0817a150122b 294
dudmuck 13:8ce61a1897ab 295 printf("\e[%u;1f", statusRow); // set (force) cursor to row;column
Wayne Roberts 1:0817a150122b 296
Wayne Roberts 1:0817a150122b 297 if (RegIrqFlags1.bits.ModeReady)
dudmuck 13:8ce61a1897ab 298 printf("ModeReady ");
Wayne Roberts 1:0817a150122b 299 if (RegIrqFlags1.bits.RxReady)
dudmuck 13:8ce61a1897ab 300 printf("RxReady ");
Wayne Roberts 1:0817a150122b 301 if (RegIrqFlags1.bits.TxReady)
dudmuck 13:8ce61a1897ab 302 printf("TxReady ");
Wayne Roberts 1:0817a150122b 303 if (RegIrqFlags1.bits.PllLock)
dudmuck 13:8ce61a1897ab 304 printf("PllLock ");
Wayne Roberts 1:0817a150122b 305 if (RegIrqFlags1.bits.Rssi)
dudmuck 13:8ce61a1897ab 306 printf("Rssi ");
Wayne Roberts 1:0817a150122b 307 if (RegIrqFlags1.bits.Timeout)
dudmuck 13:8ce61a1897ab 308 printf("Timeout ");
Wayne Roberts 1:0817a150122b 309 if (RegIrqFlags1.bits.PreambleDetect)
dudmuck 13:8ce61a1897ab 310 printf("PreambleDetect ");
Wayne Roberts 1:0817a150122b 311 if (RegIrqFlags1.bits.SyncAddressMatch)
dudmuck 13:8ce61a1897ab 312 printf("SyncAddressMatch ");
Wayne Roberts 1:0817a150122b 313
dudmuck 13:8ce61a1897ab 314 printf(" | ");
Wayne Roberts 1:0817a150122b 315 if (RegIrqFlags2.bits.FifoFull)
dudmuck 13:8ce61a1897ab 316 printf("FifoFull ");
Wayne Roberts 1:0817a150122b 317 if (RegIrqFlags2.bits.FifoEmpty)
dudmuck 13:8ce61a1897ab 318 printf("FifoEmpty ");
Wayne Roberts 1:0817a150122b 319 if (RegIrqFlags2.bits.FifoLevel)
dudmuck 13:8ce61a1897ab 320 printf("FifoLevel ");
Wayne Roberts 1:0817a150122b 321 if (RegIrqFlags2.bits.FifoOverrun)
dudmuck 13:8ce61a1897ab 322 printf("FifoOverrun ");
Wayne Roberts 1:0817a150122b 323 if (RegIrqFlags2.bits.PacketSent)
dudmuck 13:8ce61a1897ab 324 printf("PacketSent ");
Wayne Roberts 1:0817a150122b 325 if (RegIrqFlags2.bits.PayloadReady)
dudmuck 13:8ce61a1897ab 326 printf("PayloadReady ");
Wayne Roberts 1:0817a150122b 327 if (RegIrqFlags2.bits.CrcOk)
dudmuck 13:8ce61a1897ab 328 printf("CrcOk ");
Wayne Roberts 1:0817a150122b 329 if (RegIrqFlags2.bits.LowBat)
dudmuck 13:8ce61a1897ab 330 printf("LowBat ");
Wayne Roberts 1:0817a150122b 331
Wayne Roberts 1:0817a150122b 332 prevRegIrqFlags1.octet = RegIrqFlags1.octet;
Wayne Roberts 1:0817a150122b 333 prevRegIrqFlags2.octet = RegIrqFlags2.octet;
Wayne Roberts 1:0817a150122b 334
dudmuck 13:8ce61a1897ab 335 printf("\e[K");
Wayne Roberts 1:0817a150122b 336 ret = true;
Wayne Roberts 1:0817a150122b 337 } // ..if irq flag changed
Wayne Roberts 1:0817a150122b 338 } // ..if (++cnt > X)
Wayne Roberts 1:0817a150122b 339 } // ..!radio.RegOpMode.bits.LongRangeMode
Wayne Roberts 1:0817a150122b 340
Wayne Roberts 1:0817a150122b 341 return ret;
Wayne Roberts 1:0817a150122b 342 }
Wayne Roberts 1:0817a150122b 343
Wayne Roberts 1:0817a150122b 344 void Radio::setFS()
Wayne Roberts 1:0817a150122b 345 {
Wayne Roberts 1:0817a150122b 346 radio.set_opmode(RF_OPMODE_SYNTHESIZER_RX);
Wayne Roberts 1:0817a150122b 347 }
Wayne Roberts 1:0817a150122b 348
Wayne Roberts 1:0817a150122b 349 const menu_t* Radio::get_modem_sub_menu()
Wayne Roberts 1:0817a150122b 350 {
Wayne Roberts 1:0817a150122b 351 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
Wayne Roberts 1:0817a150122b 352 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 353 return NULL;
Wayne Roberts 1:0817a150122b 354 } else {
Wayne Roberts 1:0817a150122b 355 if (radio.RegOpMode.bits.ModulationType == 1) {
Wayne Roberts 1:0817a150122b 356 fsk.RegOokPeak.octet = radio.read_reg(REG_FSK_OOKPEAK);
Wayne Roberts 1:0817a150122b 357 if (fsk.RegOokPeak.bits.OokThreshType == 0) {
Wayne Roberts 1:0817a150122b 358 return ook_fixed_menu;
Wayne Roberts 1:0817a150122b 359 } else if (fsk.RegOokPeak.bits.OokThreshType == 1) {
Wayne Roberts 1:0817a150122b 360 return ook_peak_menu;
Wayne Roberts 1:0817a150122b 361 } else if (fsk.RegOokPeak.bits.OokThreshType == 2) {
Wayne Roberts 1:0817a150122b 362 return ook_average_menu;
Wayne Roberts 1:0817a150122b 363 }
Wayne Roberts 1:0817a150122b 364 } else
Wayne Roberts 1:0817a150122b 365 return NULL;
Wayne Roberts 1:0817a150122b 366 }
Wayne Roberts 1:0817a150122b 367
Wayne Roberts 1:0817a150122b 368 return NULL;
Wayne Roberts 1:0817a150122b 369 }
Wayne Roberts 1:0817a150122b 370
Wayne Roberts 1:0817a150122b 371 const menu_t* Radio::get_modem_menu()
Wayne Roberts 1:0817a150122b 372 {
Wayne Roberts 1:0817a150122b 373 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
Wayne Roberts 1:0817a150122b 374
Wayne Roberts 1:0817a150122b 375 if (radio.RegOpMode.bits.LongRangeMode) {
Wayne Roberts 1:0817a150122b 376 return lora_menu;
Wayne Roberts 1:0817a150122b 377 } else {
Wayne Roberts 1:0817a150122b 378 if (radio.RegOpMode.bits.ModulationType == 0)
Wayne Roberts 1:0817a150122b 379 return fsk_menu;
Wayne Roberts 1:0817a150122b 380 else {
Wayne Roberts 1:0817a150122b 381 return ook_menu;
Wayne Roberts 1:0817a150122b 382 }
Wayne Roberts 1:0817a150122b 383 }
Wayne Roberts 1:0817a150122b 384 }
Wayne Roberts 1:0817a150122b 385
Wayne Roberts 1:0817a150122b 386 void Radio::tx_payload_length_print()
Wayne Roberts 1:0817a150122b 387 {
dudmuck 13:8ce61a1897ab 388 printf("%u", get_payload_length());
Wayne Roberts 1:0817a150122b 389 }
Wayne Roberts 1:0817a150122b 390
Wayne Roberts 1:0817a150122b 391 bool Radio::tx_payload_length_write(const char* txt)
Wayne Roberts 1:0817a150122b 392 {
Wayne Roberts 1:0817a150122b 393 unsigned len;
Wayne Roberts 1:0817a150122b 394
Wayne Roberts 1:0817a150122b 395 sscanf(txt, "%u", &len);
Wayne Roberts 1:0817a150122b 396 //log_printf("scanned %u from \"%s\"\r\n", len, txt);
Wayne Roberts 1:0817a150122b 397
Wayne Roberts 1:0817a150122b 398 set_payload_length(len);
Wayne Roberts 1:0817a150122b 399
Wayne Roberts 1:0817a150122b 400 return false;
Wayne Roberts 1:0817a150122b 401 }
Wayne Roberts 1:0817a150122b 402
Wayne Roberts 1:0817a150122b 403 const char* const Radio::opmode_status_strs[] = {
Wayne Roberts 1:0817a150122b 404 "SLEEP ", // 0
Wayne Roberts 1:0817a150122b 405 "STANDBY ", // 1
Wayne Roberts 1:0817a150122b 406 "FS_TX ", // 2
Wayne Roberts 1:0817a150122b 407 "TX ", // 3
Wayne Roberts 1:0817a150122b 408 "FS_RX ", // 4
Wayne Roberts 1:0817a150122b 409 "RX ", // 5
Wayne Roberts 1:0817a150122b 410 "RX_SINGLE", // 6
Wayne Roberts 1:0817a150122b 411 "CAD ", // 7
Wayne Roberts 1:0817a150122b 412 NULL
Wayne Roberts 1:0817a150122b 413 };
Wayne Roberts 1:0817a150122b 414
Wayne Roberts 1:0817a150122b 415 const char* const Radio::opmode_select_strs[] = {
Wayne Roberts 1:0817a150122b 416 "SLEEP ", // 0
Wayne Roberts 1:0817a150122b 417 "STANDBY ", // 1
Wayne Roberts 1:0817a150122b 418 "FS_TX ", // 2
Wayne Roberts 1:0817a150122b 419 "TX ", // 3
Wayne Roberts 1:0817a150122b 420 "FS_RX ", // 4
Wayne Roberts 1:0817a150122b 421 "RX ", // 5
Wayne Roberts 1:0817a150122b 422 "RX_SINGLE", // 6
Wayne Roberts 1:0817a150122b 423 "CAD ", // 7
Wayne Roberts 1:0817a150122b 424 NULL
Wayne Roberts 1:0817a150122b 425 };
Wayne Roberts 1:0817a150122b 426
Wayne Roberts 2:ea9245bb1c53 427 unsigned Radio::opmode_read(bool forWriting)
Wayne Roberts 1:0817a150122b 428 {
Wayne Roberts 1:0817a150122b 429 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
Wayne Roberts 1:0817a150122b 430 return radio.RegOpMode.bits.Mode;
Wayne Roberts 1:0817a150122b 431 }
Wayne Roberts 1:0817a150122b 432
Wayne Roberts 2:ea9245bb1c53 433 menuMode_e Radio::opmode_write(unsigned sel)
Wayne Roberts 1:0817a150122b 434 {
Wayne Roberts 1:0817a150122b 435 radio.RegOpMode.bits.Mode = sel;
Wayne Roberts 1:0817a150122b 436 radio.write_reg(REG_OPMODE, radio.RegOpMode.octet);
Wayne Roberts 1:0817a150122b 437
Wayne Roberts 1:0817a150122b 438 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 439 }
Wayne Roberts 1:0817a150122b 440
Wayne Roberts 1:0817a150122b 441 void Radio::ocp_print(void)
Wayne Roberts 1:0817a150122b 442 {
Wayne Roberts 1:0817a150122b 443 unsigned i;
Wayne Roberts 1:0817a150122b 444
Wayne Roberts 1:0817a150122b 445 radio.RegOcp.octet = radio.read_reg(REG_OCP);
Wayne Roberts 1:0817a150122b 446 if (radio.RegOcp.bits.OcpTrim < 16)
Wayne Roberts 1:0817a150122b 447 i = 45 + (5 * radio.RegOcp.bits.OcpTrim);
Wayne Roberts 1:0817a150122b 448 else if (radio.RegOcp.bits.OcpTrim < 28)
Wayne Roberts 1:0817a150122b 449 i = (10 * radio.RegOcp.bits.OcpTrim) - 30;
Wayne Roberts 1:0817a150122b 450 else
Wayne Roberts 1:0817a150122b 451 i = 240;
Wayne Roberts 1:0817a150122b 452
dudmuck 13:8ce61a1897ab 453 printf("%u", i);
Wayne Roberts 1:0817a150122b 454 }
Wayne Roberts 1:0817a150122b 455
Wayne Roberts 1:0817a150122b 456 bool Radio::ocp_write(const char* txt)
Wayne Roberts 1:0817a150122b 457 {
Wayne Roberts 1:0817a150122b 458 unsigned i;
Wayne Roberts 1:0817a150122b 459
Wayne Roberts 1:0817a150122b 460 sscanf(txt, "%u", &i);
Wayne Roberts 1:0817a150122b 461
Wayne Roberts 1:0817a150122b 462 if (i < 130)
Wayne Roberts 1:0817a150122b 463 radio.RegOcp.bits.OcpTrim = (i - 45) / 5;
Wayne Roberts 1:0817a150122b 464 else
Wayne Roberts 1:0817a150122b 465 radio.RegOcp.bits.OcpTrim = (i + 30) / 10;
Wayne Roberts 1:0817a150122b 466
Wayne Roberts 1:0817a150122b 467 radio.write_reg(REG_OCP, radio.RegOcp.octet);
Wayne Roberts 1:0817a150122b 468
Wayne Roberts 10:db4e11a55bda 469 return false;
Wayne Roberts 1:0817a150122b 470 }
Wayne Roberts 1:0817a150122b 471
Wayne Roberts 1:0817a150122b 472 const value_item_t Radio::ocp_item = { _ITEM_VALUE, 4, ocp_print, ocp_write};
Wayne Roberts 1:0817a150122b 473
Wayne Roberts 1:0817a150122b 474 static const char* const lora_bws_1276[] = {
Wayne Roberts 1:0817a150122b 475 " 7.8KHz", // 0
Wayne Roberts 1:0817a150122b 476 " 10.4KHz", // 1
Wayne Roberts 1:0817a150122b 477 " 15.6KHz", // 2
Wayne Roberts 1:0817a150122b 478 " 20.8KHz", // 3
Wayne Roberts 1:0817a150122b 479 "31.25KHz", // 4
Wayne Roberts 1:0817a150122b 480 " 41.7KHz", // 5
Wayne Roberts 1:0817a150122b 481 " 62.5KHz", // 6
Wayne Roberts 1:0817a150122b 482 " 125KHz", // 7
Wayne Roberts 1:0817a150122b 483 " 250KHz", // 8
Wayne Roberts 1:0817a150122b 484 " 500KHz", // 9
Wayne Roberts 1:0817a150122b 485 NULL
Wayne Roberts 1:0817a150122b 486 };
Wayne Roberts 1:0817a150122b 487 static const char* const lora_bws_1272[] = {
Wayne Roberts 1:0817a150122b 488 "125KHz", // 0
Wayne Roberts 1:0817a150122b 489 "250KHz", // 1
Wayne Roberts 1:0817a150122b 490 "500KHz", // 2
Wayne Roberts 1:0817a150122b 491 NULL
Wayne Roberts 1:0817a150122b 492 };
Wayne Roberts 1:0817a150122b 493
Wayne Roberts 2:ea9245bb1c53 494 unsigned Radio::lora_bw_read(bool fw)
Wayne Roberts 1:0817a150122b 495 {
Wayne Roberts 1:0817a150122b 496 bw_idx = lora.getBw();
Wayne Roberts 1:0817a150122b 497 return bw_idx;
Wayne Roberts 1:0817a150122b 498 }
Wayne Roberts 1:0817a150122b 499
Wayne Roberts 2:ea9245bb1c53 500 menuMode_e Radio::lora_bw_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 501 {
Wayne Roberts 1:0817a150122b 502 lora.setBw(sidx);
Wayne Roberts 1:0817a150122b 503 bw_idx = sidx;
Wayne Roberts 1:0817a150122b 504
Wayne Roberts 1:0817a150122b 505 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 506 }
Wayne Roberts 1:0817a150122b 507
Wayne Roberts 2:ea9245bb1c53 508 dropdown_item_t Radio::lora_bw_item = { _ITEM_DROPDOWN, NULL, NULL, lora_bw_read, lora_bw_write};
Wayne Roberts 1:0817a150122b 509
Wayne Roberts 1:0817a150122b 510 void Radio::lora_sf_print()
Wayne Roberts 1:0817a150122b 511 {
dudmuck 13:8ce61a1897ab 512 printf("%u", lora.getSf());
Wayne Roberts 1:0817a150122b 513 }
Wayne Roberts 1:0817a150122b 514
Wayne Roberts 1:0817a150122b 515 bool Radio::lora_sf_write(const char* txt)
Wayne Roberts 1:0817a150122b 516 {
Wayne Roberts 1:0817a150122b 517 unsigned sf;
Wayne Roberts 1:0817a150122b 518
Wayne Roberts 1:0817a150122b 519 sscanf(txt, "%u", &sf);
Wayne Roberts 1:0817a150122b 520 lora.setSf(sf);
Wayne Roberts 1:0817a150122b 521
Wayne Roberts 1:0817a150122b 522 return false;
Wayne Roberts 1:0817a150122b 523 }
Wayne Roberts 1:0817a150122b 524
Wayne Roberts 2:ea9245bb1c53 525 const value_item_t Radio::lora_sf_item = { _ITEM_VALUE, 3, lora_sf_print, lora_sf_write };
Wayne Roberts 1:0817a150122b 526
Wayne Roberts 1:0817a150122b 527 const char* const lora_crs[] = {
Wayne Roberts 1:0817a150122b 528 "4/5", // 0
Wayne Roberts 1:0817a150122b 529 "4/6", // 1
Wayne Roberts 1:0817a150122b 530 "4/7", // 2
Wayne Roberts 1:0817a150122b 531 "4/8", // 3
Wayne Roberts 1:0817a150122b 532 NULL
Wayne Roberts 1:0817a150122b 533 };
Wayne Roberts 1:0817a150122b 534
Wayne Roberts 2:ea9245bb1c53 535 unsigned Radio::lora_cr_read(bool)
Wayne Roberts 1:0817a150122b 536 {
Wayne Roberts 1:0817a150122b 537 return lora.getCodingRate(false);
Wayne Roberts 1:0817a150122b 538 }
Wayne Roberts 1:0817a150122b 539
Wayne Roberts 2:ea9245bb1c53 540 menuMode_e Radio::lora_cr_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 541 {
Wayne Roberts 1:0817a150122b 542 lora.setCodingRate(sidx);
Wayne Roberts 1:0817a150122b 543
Wayne Roberts 1:0817a150122b 544 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 545 }
Wayne Roberts 1:0817a150122b 546
Wayne Roberts 2:ea9245bb1c53 547 const dropdown_item_t Radio::lora_cr_item = { _ITEM_DROPDOWN, lora_crs, lora_crs, lora_cr_read, lora_cr_write};
Wayne Roberts 1:0817a150122b 548
Wayne Roberts 1:0817a150122b 549 void Radio::lora_pblLen_print()
Wayne Roberts 1:0817a150122b 550 {
Wayne Roberts 1:0817a150122b 551 lora.RegPreamble = radio.read_u16(REG_LR_PREAMBLEMSB);
dudmuck 13:8ce61a1897ab 552 printf("%u", lora.RegPreamble);
Wayne Roberts 1:0817a150122b 553 }
Wayne Roberts 1:0817a150122b 554
Wayne Roberts 1:0817a150122b 555 bool Radio::lora_pblLen_write(const char* str)
Wayne Roberts 1:0817a150122b 556 {
Wayne Roberts 1:0817a150122b 557 unsigned n;
Wayne Roberts 1:0817a150122b 558
Wayne Roberts 1:0817a150122b 559 sscanf(str, "%u", &n);
Wayne Roberts 1:0817a150122b 560
Wayne Roberts 1:0817a150122b 561 lora.RegPreamble = n;
Wayne Roberts 1:0817a150122b 562 radio.write_u16(REG_LR_PREAMBLEMSB, lora.RegPreamble);
Wayne Roberts 5:1e5cb7139acb 563
Wayne Roberts 1:0817a150122b 564 return false;
Wayne Roberts 1:0817a150122b 565 }
Wayne Roberts 1:0817a150122b 566
Wayne Roberts 1:0817a150122b 567 const value_item_t Radio::lora_pblLen_item = { _ITEM_VALUE, 5, lora_pblLen_print, lora_pblLen_write};
Wayne Roberts 1:0817a150122b 568
Wayne Roberts 3:56fc764dee0a 569 static const char* const lora_fixlen[] = {
Wayne Roberts 1:0817a150122b 570 "EXPLICIT", // 0
Wayne Roberts 1:0817a150122b 571 "IMPLICIT", // 1
Wayne Roberts 1:0817a150122b 572 NULL
Wayne Roberts 1:0817a150122b 573 };
Wayne Roberts 1:0817a150122b 574
Wayne Roberts 2:ea9245bb1c53 575 unsigned Radio::lora_fixlen_read(bool f)
Wayne Roberts 1:0817a150122b 576 {
Wayne Roberts 1:0817a150122b 577 if (lora.getHeaderMode())
Wayne Roberts 1:0817a150122b 578 return 1;
Wayne Roberts 1:0817a150122b 579 else
Wayne Roberts 1:0817a150122b 580 return 0;
Wayne Roberts 1:0817a150122b 581 }
Wayne Roberts 1:0817a150122b 582
Wayne Roberts 2:ea9245bb1c53 583 menuMode_e Radio::lora_fixlen_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 584 {
Wayne Roberts 1:0817a150122b 585 lora.setHeaderMode(sidx == 1); // true = implicit
Wayne Roberts 1:0817a150122b 586
Wayne Roberts 1:0817a150122b 587 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 588 }
Wayne Roberts 1:0817a150122b 589
Wayne Roberts 2:ea9245bb1c53 590 const dropdown_item_t Radio::lora_fixlen_item = { _ITEM_DROPDOWN, lora_fixlen, lora_fixlen, lora_fixlen_read, lora_fixlen_write};
Wayne Roberts 1:0817a150122b 591
Wayne Roberts 1:0817a150122b 592 bool Radio::lora_crcon_read()
Wayne Roberts 1:0817a150122b 593 {
Wayne Roberts 1:0817a150122b 594 return lora.getRxPayloadCrcOn();
Wayne Roberts 1:0817a150122b 595 }
Wayne Roberts 1:0817a150122b 596
Wayne Roberts 1:0817a150122b 597 bool Radio::lora_crcon_push()
Wayne Roberts 1:0817a150122b 598 {
Wayne Roberts 1:0817a150122b 599 lora.setRxPayloadCrcOn(!lora.getRxPayloadCrcOn());
Wayne Roberts 1:0817a150122b 600 return lora.getRxPayloadCrcOn();
Wayne Roberts 1:0817a150122b 601 }
Wayne Roberts 1:0817a150122b 602
Wayne Roberts 1:0817a150122b 603 const toggle_item_t Radio::lora_crcon_item = { _ITEM_TOGGLE, "CrcOn", NULL, lora_crcon_read, lora_crcon_push};
Wayne Roberts 1:0817a150122b 604
Wayne Roberts 1:0817a150122b 605 bool Radio::lora_iqinvTX_read()
Wayne Roberts 1:0817a150122b 606 {
Wayne Roberts 1:0817a150122b 607 lora.RegTest33.octet = radio.read_reg(REG_LR_TEST33);
Wayne Roberts 1:0817a150122b 608 return !lora.RegTest33.bits.chirp_invert_tx;
Wayne Roberts 1:0817a150122b 609 }
Wayne Roberts 1:0817a150122b 610
Wayne Roberts 1:0817a150122b 611 bool Radio::lora_iqinvTX_push()
Wayne Roberts 1:0817a150122b 612 {
Wayne Roberts 1:0817a150122b 613 lora.invert_tx(lora.RegTest33.bits.chirp_invert_tx);
Wayne Roberts 1:0817a150122b 614 return !lora.RegTest33.bits.chirp_invert_tx;
Wayne Roberts 1:0817a150122b 615 }
Wayne Roberts 1:0817a150122b 616
Wayne Roberts 1:0817a150122b 617 const toggle_item_t Radio::lora_iqinvTX_item = { _ITEM_TOGGLE, "iqInvTX", NULL, lora_iqinvTX_read, lora_iqinvTX_push};
Wayne Roberts 1:0817a150122b 618
Wayne Roberts 1:0817a150122b 619 bool Radio::lora_iqinvRX_read()
Wayne Roberts 1:0817a150122b 620 {
Wayne Roberts 1:0817a150122b 621 lora.RegTest33.octet = radio.read_reg(REG_LR_TEST33);
Wayne Roberts 1:0817a150122b 622 return lora.RegTest33.bits.invert_i_q;
Wayne Roberts 1:0817a150122b 623 }
Wayne Roberts 1:0817a150122b 624
Wayne Roberts 1:0817a150122b 625 bool Radio::lora_iqinvRX_push()
Wayne Roberts 1:0817a150122b 626 {
Wayne Roberts 1:0817a150122b 627 lora.invert_rx(!lora.RegTest33.bits.invert_i_q);
Wayne Roberts 1:0817a150122b 628 lora.RegTest33.octet = radio.read_reg(REG_LR_TEST33);
Wayne Roberts 1:0817a150122b 629 return lora.RegTest33.bits.invert_i_q;
Wayne Roberts 1:0817a150122b 630 }
Wayne Roberts 1:0817a150122b 631
Wayne Roberts 1:0817a150122b 632 const toggle_item_t Radio::lora_iqinvRX_item = { _ITEM_TOGGLE, "iqInvRX", NULL, lora_iqinvRX_read, lora_iqinvRX_push};
Wayne Roberts 1:0817a150122b 633
Wayne Roberts 3:56fc764dee0a 634 void Radio::lora_ppg_print()
Wayne Roberts 3:56fc764dee0a 635 {
dudmuck 13:8ce61a1897ab 636 printf("%02x", radio.read_reg(REG_LR_SYNC_BYTE));
Wayne Roberts 3:56fc764dee0a 637 }
Wayne Roberts 3:56fc764dee0a 638
Wayne Roberts 3:56fc764dee0a 639 bool Radio::lora_ppg_write(const char* str)
Wayne Roberts 3:56fc764dee0a 640 {
Wayne Roberts 3:56fc764dee0a 641 unsigned ppg;
Wayne Roberts 3:56fc764dee0a 642 sscanf(str, "%x", &ppg);
Wayne Roberts 3:56fc764dee0a 643
Wayne Roberts 3:56fc764dee0a 644 radio.write_reg(REG_LR_SYNC_BYTE, ppg);
Wayne Roberts 3:56fc764dee0a 645
Wayne Roberts 3:56fc764dee0a 646 return false;
Wayne Roberts 3:56fc764dee0a 647 }
Wayne Roberts 3:56fc764dee0a 648
Wayne Roberts 3:56fc764dee0a 649 const value_item_t Radio::lora_ppg_item = { _ITEM_VALUE, 4, lora_ppg_print, lora_ppg_write};
Wayne Roberts 3:56fc764dee0a 650
Wayne Roberts 2:ea9245bb1c53 651 void Radio::cadrx_push()
Wayne Roberts 2:ea9245bb1c53 652 {
Wayne Roberts 2:ea9245bb1c53 653 if (radio.RegDioMapping1.bits.Dio0Mapping != 2 || radio.RegDioMapping1.bits.Dio1Mapping != 2) {
Wayne Roberts 2:ea9245bb1c53 654 radio.RegDioMapping1.bits.Dio0Mapping = 2; // DIO0 to CadDone
Wayne Roberts 2:ea9245bb1c53 655 radio.RegDioMapping1.bits.Dio1Mapping = 2; // DIO1 to CadDetected
Wayne Roberts 2:ea9245bb1c53 656 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
Wayne Roberts 2:ea9245bb1c53 657 }
Wayne Roberts 2:ea9245bb1c53 658
Wayne Roberts 2:ea9245bb1c53 659 radio.set_opmode(RF_OPMODE_CAD);
Wayne Roberts 2:ea9245bb1c53 660 }
Wayne Roberts 2:ea9245bb1c53 661
Wayne Roberts 2:ea9245bb1c53 662 const button_item_t Radio::lora_cadrx_item = { _ITEM_BUTTON, "CADRX", cadrx_push };
Wayne Roberts 1:0817a150122b 663
Wayne Roberts 10:db4e11a55bda 664 bool Radio::lora_ppm_offset_read()
Wayne Roberts 10:db4e11a55bda 665 {
Wayne Roberts 10:db4e11a55bda 666 if (radio.type == SX1276) {
Wayne Roberts 10:db4e11a55bda 667 lora.RegModemConfig3.octet = radio.read_reg(REG_LR_MODEMCONFIG3);
Wayne Roberts 10:db4e11a55bda 668 return lora.RegModemConfig3.sx1276bits.LowDataRateOptimize;
Wayne Roberts 10:db4e11a55bda 669 } else if (radio.type == SX1272) {
Wayne Roberts 10:db4e11a55bda 670 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
Wayne Roberts 10:db4e11a55bda 671 return lora.RegModemConfig.sx1272bits.LowDataRateOptimize;
Wayne Roberts 10:db4e11a55bda 672 } else
Wayne Roberts 10:db4e11a55bda 673 return false;
Wayne Roberts 10:db4e11a55bda 674 }
Wayne Roberts 10:db4e11a55bda 675
Wayne Roberts 10:db4e11a55bda 676 bool Radio::lora_ppm_offset_push()
Wayne Roberts 10:db4e11a55bda 677 {
Wayne Roberts 10:db4e11a55bda 678 if (radio.type == SX1276) {
Wayne Roberts 10:db4e11a55bda 679 lora.RegModemConfig3.octet = radio.read_reg(REG_LR_MODEMCONFIG3);
Wayne Roberts 10:db4e11a55bda 680 lora.RegModemConfig3.sx1276bits.LowDataRateOptimize ^= 1;
Wayne Roberts 10:db4e11a55bda 681 radio.write_reg(REG_LR_MODEMCONFIG3, lora.RegModemConfig3.octet);
Wayne Roberts 10:db4e11a55bda 682 return lora.RegModemConfig3.sx1276bits.LowDataRateOptimize;
Wayne Roberts 10:db4e11a55bda 683 } else if (radio.type == SX1272) {
Wayne Roberts 10:db4e11a55bda 684 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
Wayne Roberts 10:db4e11a55bda 685 lora.RegModemConfig.sx1272bits.LowDataRateOptimize ^= 1;
Wayne Roberts 10:db4e11a55bda 686 radio.write_reg(REG_LR_MODEMCONFIG, lora.RegModemConfig.octet);
Wayne Roberts 10:db4e11a55bda 687 return lora.RegModemConfig.sx1272bits.LowDataRateOptimize;
Wayne Roberts 10:db4e11a55bda 688 } else
Wayne Roberts 10:db4e11a55bda 689 return false;
Wayne Roberts 10:db4e11a55bda 690 }
Wayne Roberts 10:db4e11a55bda 691
Wayne Roberts 10:db4e11a55bda 692 const toggle_item_t Radio::lora_ppm_offset_item = { _ITEM_TOGGLE, "LowDatarateOptimize", NULL, lora_ppm_offset_read, lora_ppm_offset_push};
Wayne Roberts 10:db4e11a55bda 693
Wayne Roberts 1:0817a150122b 694 const menu_t Radio::lora_menu[] = {
Wayne Roberts 1:0817a150122b 695 { {FIRST_CHIP_MENU_ROW, 22}, "bw:", &lora_bw_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 696 { {FIRST_CHIP_MENU_ROW, 35}, "sf:", &lora_sf_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 697 { {FIRST_CHIP_MENU_ROW, 42}, "cr:", &lora_cr_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 698 { {FIRST_CHIP_MENU_ROW, 50}, "PreambleLength:", &lora_pblLen_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 699
Wayne Roberts 10:db4e11a55bda 700 { {FIRST_CHIP_MENU_ROW+1, 1}, NULL, &lora_fixlen_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 10:db4e11a55bda 701 { {FIRST_CHIP_MENU_ROW+1, 10}, NULL, &lora_crcon_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 10:db4e11a55bda 702 { {FIRST_CHIP_MENU_ROW+1, 20}, NULL, &lora_iqinvTX_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 10:db4e11a55bda 703 { {FIRST_CHIP_MENU_ROW+1, 30}, NULL, &lora_iqinvRX_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 3:56fc764dee0a 704 { {FIRST_CHIP_MENU_ROW+1, 40}, "ppg:", &lora_ppg_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 10:db4e11a55bda 705 { {FIRST_CHIP_MENU_ROW+1, 48}, NULL, &lora_ppm_offset_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 2:ea9245bb1c53 706
Wayne Roberts 10:db4e11a55bda 707 { {FIRST_CHIP_MENU_ROW+2, 1}, NULL, &lora_cadrx_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 2:ea9245bb1c53 708
Wayne Roberts 1:0817a150122b 709 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 710 };
Wayne Roberts 1:0817a150122b 711
Wayne Roberts 1:0817a150122b 712 void Radio::fsk_ook_bps_print(void)
Wayne Roberts 1:0817a150122b 713 {
dudmuck 15:703ca340d0fb 714 printf("%u", fsk.get_bitrate());
Wayne Roberts 1:0817a150122b 715 }
Wayne Roberts 1:0817a150122b 716
Wayne Roberts 1:0817a150122b 717 bool Radio::fsk_ook_bps_write(const char* txt)
Wayne Roberts 1:0817a150122b 718 {
Wayne Roberts 1:0817a150122b 719 unsigned bps;
Wayne Roberts 1:0817a150122b 720
Wayne Roberts 1:0817a150122b 721 sscanf(txt, "%u", &bps);
Wayne Roberts 1:0817a150122b 722 fsk.set_bitrate(bps);
Wayne Roberts 1:0817a150122b 723
Wayne Roberts 1:0817a150122b 724 return false;
Wayne Roberts 1:0817a150122b 725 }
Wayne Roberts 1:0817a150122b 726
Wayne Roberts 1:0817a150122b 727 const value_item_t Radio::fsk_ook_bitrate_item = { _ITEM_VALUE, 8, fsk_ook_bps_print, fsk_ook_bps_write };
Wayne Roberts 1:0817a150122b 728
Wayne Roberts 1:0817a150122b 729 void Radio::gfsk_fdev_print(void)
Wayne Roberts 1:0817a150122b 730 {
dudmuck 15:703ca340d0fb 731 printf("%u", fsk.get_tx_fdev_hz());
Wayne Roberts 1:0817a150122b 732
Wayne Roberts 1:0817a150122b 733 }
Wayne Roberts 1:0817a150122b 734
Wayne Roberts 1:0817a150122b 735 bool Radio::gfsk_fdev_write(const char* txt)
Wayne Roberts 1:0817a150122b 736 {
Wayne Roberts 1:0817a150122b 737 unsigned hz;
Wayne Roberts 1:0817a150122b 738
Wayne Roberts 1:0817a150122b 739 sscanf(txt, "%u", &hz);
Wayne Roberts 1:0817a150122b 740
Wayne Roberts 1:0817a150122b 741 fsk.set_tx_fdev_hz(hz);
Wayne Roberts 1:0817a150122b 742
Wayne Roberts 1:0817a150122b 743 return false;
Wayne Roberts 1:0817a150122b 744 }
Wayne Roberts 1:0817a150122b 745
Wayne Roberts 1:0817a150122b 746 const value_item_t Radio::gfsk_fdev_item = { _ITEM_VALUE, 8, gfsk_fdev_print, gfsk_fdev_write};
Wayne Roberts 1:0817a150122b 747
Wayne Roberts 1:0817a150122b 748 const char* const gfsk_bts[] = {
Wayne Roberts 1:0817a150122b 749 "off", // 0
Wayne Roberts 1:0817a150122b 750 "1.0", // 1
Wayne Roberts 1:0817a150122b 751 "0.5", // 2
Wayne Roberts 1:0817a150122b 752 "0.3", // 3
Wayne Roberts 1:0817a150122b 753 NULL
Wayne Roberts 1:0817a150122b 754 };
Wayne Roberts 1:0817a150122b 755
Wayne Roberts 1:0817a150122b 756 const char* const ook_bts[] = {
Wayne Roberts 1:0817a150122b 757 "off ", // 0
Wayne Roberts 1:0817a150122b 758 "bitRate ", // 1
Wayne Roberts 1:0817a150122b 759 "2*bitRate", // 2
Wayne Roberts 1:0817a150122b 760 NULL
Wayne Roberts 1:0817a150122b 761 };
Wayne Roberts 1:0817a150122b 762
Wayne Roberts 2:ea9245bb1c53 763 unsigned Radio::bt_read(bool forWriting)
Wayne Roberts 1:0817a150122b 764 {
Wayne Roberts 1:0817a150122b 765 if (radio.type == SX1276) {
Wayne Roberts 1:0817a150122b 766 RegPaRamp.octet = radio.read_reg(REG_PARAMP);
Wayne Roberts 1:0817a150122b 767 return RegPaRamp.bits.ModulationShaping;
Wayne Roberts 1:0817a150122b 768 } else if (radio.type == SX1272) {
Wayne Roberts 1:0817a150122b 769 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
Wayne Roberts 1:0817a150122b 770 return radio.RegOpMode.bits.ModulationShaping;
Wayne Roberts 1:0817a150122b 771 }
Wayne Roberts 1:0817a150122b 772 return 3;
Wayne Roberts 1:0817a150122b 773 }
Wayne Roberts 1:0817a150122b 774
Wayne Roberts 2:ea9245bb1c53 775 menuMode_e Radio::bt_write(unsigned sel)
Wayne Roberts 1:0817a150122b 776 {
Wayne Roberts 1:0817a150122b 777 if (radio.type == SX1276) {
Wayne Roberts 1:0817a150122b 778 RegPaRamp.bits.ModulationShaping = sel;
Wayne Roberts 1:0817a150122b 779 radio.write_reg(REG_PARAMP, RegPaRamp.octet);
Wayne Roberts 1:0817a150122b 780 } else if (radio.type == SX1272) {
Wayne Roberts 1:0817a150122b 781 radio.RegOpMode.bits.ModulationShaping = sel;
Wayne Roberts 1:0817a150122b 782 radio.write_reg(REG_OPMODE, radio.RegOpMode.octet);
Wayne Roberts 1:0817a150122b 783 }
Wayne Roberts 1:0817a150122b 784 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 785 }
Wayne Roberts 1:0817a150122b 786
Wayne Roberts 2:ea9245bb1c53 787 const dropdown_item_t Radio::gfsk_bt_item = { _ITEM_DROPDOWN, gfsk_bts, gfsk_bts, bt_read, bt_write};
Wayne Roberts 2:ea9245bb1c53 788 const dropdown_item_t Radio::ook_bt_item = { _ITEM_DROPDOWN, ook_bts, ook_bts, bt_read, bt_write};
Wayne Roberts 1:0817a150122b 789
Wayne Roberts 1:0817a150122b 790 bool Radio::paSelect_read()
Wayne Roberts 1:0817a150122b 791 {
Wayne Roberts 1:0817a150122b 792 radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
Wayne Roberts 1:0817a150122b 793 return radio.RegPaConfig.bits.PaSelect;
Wayne Roberts 1:0817a150122b 794 }
Wayne Roberts 1:0817a150122b 795
Wayne Roberts 1:0817a150122b 796 bool Radio::paSelect_push()
Wayne Roberts 1:0817a150122b 797 {
Wayne Roberts 1:0817a150122b 798 radio.RegPaConfig.bits.PaSelect ^= 1;
Wayne Roberts 5:1e5cb7139acb 799 radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
Wayne Roberts 1:0817a150122b 800 return radio.RegPaConfig.bits.PaSelect;
Wayne Roberts 1:0817a150122b 801 }
Wayne Roberts 1:0817a150122b 802
Wayne Roberts 1:0817a150122b 803 const toggle_item_t Radio::paSelect_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 804 "RFO ", // 0
Wayne Roberts 1:0817a150122b 805 "PA_BOOST", // 1
Wayne Roberts 1:0817a150122b 806 paSelect_read, paSelect_push
Wayne Roberts 1:0817a150122b 807 };
Wayne Roberts 1:0817a150122b 808
Wayne Roberts 1:0817a150122b 809 const char* const rxbws[] = {
Wayne Roberts 1:0817a150122b 810 " 2.6", // 0
Wayne Roberts 1:0817a150122b 811 " 3.1", // 1
Wayne Roberts 1:0817a150122b 812 " 3.9", // 2
Wayne Roberts 1:0817a150122b 813 " 5.2", // 3
Wayne Roberts 1:0817a150122b 814 " 6.3", // 4
Wayne Roberts 1:0817a150122b 815 " 7.8", // 5
Wayne Roberts 1:0817a150122b 816 " 10.4", // 6
Wayne Roberts 1:0817a150122b 817 " 12.5", // 7
Wayne Roberts 1:0817a150122b 818 " 15.6", // 8
Wayne Roberts 1:0817a150122b 819 " 20.8", // 9
Wayne Roberts 1:0817a150122b 820 " 25.0", // 10
Wayne Roberts 1:0817a150122b 821 " 31.3", // 11
Wayne Roberts 1:0817a150122b 822 " 41.7", // 12
Wayne Roberts 1:0817a150122b 823 " 50.0", // 13
Wayne Roberts 1:0817a150122b 824 " 62.5", // 14
Wayne Roberts 1:0817a150122b 825 " 83.3", // 15
Wayne Roberts 1:0817a150122b 826 "100.0", // 16
Wayne Roberts 1:0817a150122b 827 "125.0", // 17
Wayne Roberts 1:0817a150122b 828 "166.7", // 18
Wayne Roberts 1:0817a150122b 829 "200.0", // 19
Wayne Roberts 1:0817a150122b 830 "250.0", // 20
Wayne Roberts 1:0817a150122b 831 NULL
Wayne Roberts 1:0817a150122b 832 };
Wayne Roberts 1:0817a150122b 833
Wayne Roberts 2:ea9245bb1c53 834 unsigned Radio::bw_read(uint8_t regAddr)
Wayne Roberts 1:0817a150122b 835 {
Wayne Roberts 1:0817a150122b 836 RegRxBw_t reg_bw;
Wayne Roberts 1:0817a150122b 837
Wayne Roberts 1:0817a150122b 838 reg_bw.octet = radio.read_reg(regAddr);
Wayne Roberts 1:0817a150122b 839
Wayne Roberts 1:0817a150122b 840 switch (reg_bw.bits.Exponent) {
Wayne Roberts 1:0817a150122b 841 case 7:
Wayne Roberts 1:0817a150122b 842 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 843 return 0;
Wayne Roberts 1:0817a150122b 844 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 845 return 1;
Wayne Roberts 1:0817a150122b 846 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 847 return 2;
Wayne Roberts 1:0817a150122b 848 break;
Wayne Roberts 1:0817a150122b 849 case 6:
Wayne Roberts 1:0817a150122b 850 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 851 return 3;
Wayne Roberts 1:0817a150122b 852 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 853 return 4;
Wayne Roberts 1:0817a150122b 854 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 855 return 5;
Wayne Roberts 1:0817a150122b 856 break;
Wayne Roberts 1:0817a150122b 857 case 5:
Wayne Roberts 1:0817a150122b 858 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 859 return 6;
Wayne Roberts 1:0817a150122b 860 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 861 return 7;
Wayne Roberts 1:0817a150122b 862 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 863 return 8;
Wayne Roberts 1:0817a150122b 864 break;
Wayne Roberts 1:0817a150122b 865 case 4:
Wayne Roberts 1:0817a150122b 866 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 867 return 9;
Wayne Roberts 1:0817a150122b 868 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 869 return 10;
Wayne Roberts 1:0817a150122b 870 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 871 return 11;
Wayne Roberts 1:0817a150122b 872 break;
Wayne Roberts 1:0817a150122b 873 case 3:
Wayne Roberts 1:0817a150122b 874 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 875 return 12;
Wayne Roberts 1:0817a150122b 876 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 877 return 13;
Wayne Roberts 1:0817a150122b 878 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 879 return 14;
Wayne Roberts 1:0817a150122b 880 break;
Wayne Roberts 1:0817a150122b 881 case 2:
Wayne Roberts 1:0817a150122b 882 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 883 return 15;
Wayne Roberts 1:0817a150122b 884 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 885 return 16;
Wayne Roberts 1:0817a150122b 886 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 887 return 17;
Wayne Roberts 1:0817a150122b 888 break;
Wayne Roberts 1:0817a150122b 889 case 1:
Wayne Roberts 1:0817a150122b 890 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 1:0817a150122b 891 return 18;
Wayne Roberts 1:0817a150122b 892 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 1:0817a150122b 893 return 19;
Wayne Roberts 1:0817a150122b 894 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 1:0817a150122b 895 return 20;
Wayne Roberts 1:0817a150122b 896 break;
Wayne Roberts 1:0817a150122b 897 }
Wayne Roberts 1:0817a150122b 898
Wayne Roberts 1:0817a150122b 899 return 21;
Wayne Roberts 1:0817a150122b 900 }
Wayne Roberts 1:0817a150122b 901
Wayne Roberts 2:ea9245bb1c53 902 unsigned Radio::rxbw_read(bool)
Wayne Roberts 1:0817a150122b 903 {
Wayne Roberts 2:ea9245bb1c53 904 return bw_read(REG_FSK_RXBW);
Wayne Roberts 1:0817a150122b 905 }
Wayne Roberts 1:0817a150122b 906
Wayne Roberts 2:ea9245bb1c53 907 unsigned Radio::afcbw_read(bool)
Wayne Roberts 1:0817a150122b 908 {
Wayne Roberts 2:ea9245bb1c53 909 return bw_read(REG_FSK_AFCBW);
Wayne Roberts 1:0817a150122b 910 }
Wayne Roberts 1:0817a150122b 911
Wayne Roberts 2:ea9245bb1c53 912 void Radio::bw_write(unsigned sidx, uint8_t regAddr)
Wayne Roberts 1:0817a150122b 913 {
Wayne Roberts 1:0817a150122b 914 RegRxBw_t reg_bw;
Wayne Roberts 1:0817a150122b 915
Wayne Roberts 1:0817a150122b 916 reg_bw.octet = radio.read_reg(regAddr);
Wayne Roberts 1:0817a150122b 917
Wayne Roberts 1:0817a150122b 918 switch (sidx) {
Wayne Roberts 1:0817a150122b 919 case 0:
Wayne Roberts 1:0817a150122b 920 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 921 reg_bw.bits.Exponent = 7;
Wayne Roberts 1:0817a150122b 922 break;
Wayne Roberts 1:0817a150122b 923 case 1:
Wayne Roberts 1:0817a150122b 924 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 925 reg_bw.bits.Exponent = 7;
Wayne Roberts 1:0817a150122b 926 break;
Wayne Roberts 1:0817a150122b 927 case 2:
Wayne Roberts 1:0817a150122b 928 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 929 reg_bw.bits.Exponent = 7;
Wayne Roberts 1:0817a150122b 930 break;
Wayne Roberts 1:0817a150122b 931 case 3:
Wayne Roberts 1:0817a150122b 932 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 933 reg_bw.bits.Exponent = 6;
Wayne Roberts 1:0817a150122b 934 break;
Wayne Roberts 1:0817a150122b 935 case 4:
Wayne Roberts 1:0817a150122b 936 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 937 reg_bw.bits.Exponent = 6;
Wayne Roberts 1:0817a150122b 938 break;
Wayne Roberts 1:0817a150122b 939 case 5:
Wayne Roberts 1:0817a150122b 940 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 941 reg_bw.bits.Exponent = 6;
Wayne Roberts 1:0817a150122b 942 break;
Wayne Roberts 1:0817a150122b 943 case 6:
Wayne Roberts 1:0817a150122b 944 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 945 reg_bw.bits.Exponent = 5;
Wayne Roberts 1:0817a150122b 946 break;
Wayne Roberts 1:0817a150122b 947 case 7:
Wayne Roberts 1:0817a150122b 948 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 949 reg_bw.bits.Exponent = 5;
Wayne Roberts 1:0817a150122b 950 break;
Wayne Roberts 1:0817a150122b 951 case 8:
Wayne Roberts 1:0817a150122b 952 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 953 reg_bw.bits.Exponent = 5;
Wayne Roberts 1:0817a150122b 954 break;
Wayne Roberts 1:0817a150122b 955 case 9:
Wayne Roberts 1:0817a150122b 956 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 957 reg_bw.bits.Exponent = 4;
Wayne Roberts 1:0817a150122b 958 break;
Wayne Roberts 1:0817a150122b 959 case 10:
Wayne Roberts 1:0817a150122b 960 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 961 reg_bw.bits.Exponent = 4;
Wayne Roberts 1:0817a150122b 962 break;
Wayne Roberts 1:0817a150122b 963 case 11:
Wayne Roberts 1:0817a150122b 964 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 965 reg_bw.bits.Exponent = 4;
Wayne Roberts 1:0817a150122b 966 break;
Wayne Roberts 1:0817a150122b 967 case 12:
Wayne Roberts 1:0817a150122b 968 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 969 reg_bw.bits.Exponent = 3;
Wayne Roberts 1:0817a150122b 970 break;
Wayne Roberts 1:0817a150122b 971 case 13:
Wayne Roberts 1:0817a150122b 972 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 973 reg_bw.bits.Exponent = 3;
Wayne Roberts 1:0817a150122b 974 break;
Wayne Roberts 1:0817a150122b 975 case 14:
Wayne Roberts 1:0817a150122b 976 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 977 reg_bw.bits.Exponent = 3;
Wayne Roberts 1:0817a150122b 978 break;
Wayne Roberts 1:0817a150122b 979 case 15:
Wayne Roberts 1:0817a150122b 980 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 981 reg_bw.bits.Exponent = 2;
Wayne Roberts 1:0817a150122b 982 break;
Wayne Roberts 1:0817a150122b 983 case 16:
Wayne Roberts 1:0817a150122b 984 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 985 reg_bw.bits.Exponent = 2;
Wayne Roberts 1:0817a150122b 986 break;
Wayne Roberts 1:0817a150122b 987 case 17:
Wayne Roberts 1:0817a150122b 988 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 989 reg_bw.bits.Exponent = 2;
Wayne Roberts 1:0817a150122b 990 break;
Wayne Roberts 1:0817a150122b 991 case 18:
Wayne Roberts 1:0817a150122b 992 reg_bw.bits.Mantissa = 2;
Wayne Roberts 1:0817a150122b 993 reg_bw.bits.Exponent = 1;
Wayne Roberts 1:0817a150122b 994 break;
Wayne Roberts 1:0817a150122b 995 case 19:
Wayne Roberts 1:0817a150122b 996 reg_bw.bits.Mantissa = 1;
Wayne Roberts 1:0817a150122b 997 reg_bw.bits.Exponent = 1;
Wayne Roberts 1:0817a150122b 998 break;
Wayne Roberts 1:0817a150122b 999 case 20:
Wayne Roberts 1:0817a150122b 1000 reg_bw.bits.Mantissa = 0;
Wayne Roberts 1:0817a150122b 1001 reg_bw.bits.Exponent = 1;
Wayne Roberts 1:0817a150122b 1002 break;
Wayne Roberts 1:0817a150122b 1003 }
Wayne Roberts 1:0817a150122b 1004
Wayne Roberts 1:0817a150122b 1005 radio.write_reg(regAddr, reg_bw.octet);
Wayne Roberts 1:0817a150122b 1006 }
Wayne Roberts 1:0817a150122b 1007
Wayne Roberts 2:ea9245bb1c53 1008 menuMode_e Radio::rxbw_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1009 {
Wayne Roberts 2:ea9245bb1c53 1010 bw_write(sidx, REG_FSK_RXBW);
Wayne Roberts 1:0817a150122b 1011 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1012 }
Wayne Roberts 1:0817a150122b 1013
Wayne Roberts 2:ea9245bb1c53 1014 menuMode_e Radio::afcbw_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1015 {
Wayne Roberts 2:ea9245bb1c53 1016 bw_write(sidx, REG_FSK_AFCBW);
Wayne Roberts 1:0817a150122b 1017 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1018 }
Wayne Roberts 1:0817a150122b 1019
Wayne Roberts 2:ea9245bb1c53 1020 const dropdown_item_t Radio::rxbw_item = { _ITEM_DROPDOWN, rxbws, rxbws, rxbw_read, rxbw_write};
Wayne Roberts 2:ea9245bb1c53 1021 const dropdown_item_t Radio::afcbw_item = { _ITEM_DROPDOWN, rxbws, rxbws, afcbw_read, afcbw_write};
Wayne Roberts 1:0817a150122b 1022
Wayne Roberts 1:0817a150122b 1023 void Radio::pblLen_print()
Wayne Roberts 1:0817a150122b 1024 {
dudmuck 13:8ce61a1897ab 1025 printf("%u", radio.read_u16(REG_FSK_PREAMBLEMSB));
Wayne Roberts 1:0817a150122b 1026 }
Wayne Roberts 1:0817a150122b 1027
Wayne Roberts 1:0817a150122b 1028 bool Radio::pblLen_write(const char* txt)
Wayne Roberts 1:0817a150122b 1029 {
Wayne Roberts 1:0817a150122b 1030 unsigned n;
Wayne Roberts 1:0817a150122b 1031 sscanf(txt, "%u", &n);
Wayne Roberts 1:0817a150122b 1032 radio.write_u16(REG_FSK_PREAMBLEMSB, n);
Wayne Roberts 1:0817a150122b 1033 return false;
Wayne Roberts 1:0817a150122b 1034 }
Wayne Roberts 1:0817a150122b 1035
Wayne Roberts 1:0817a150122b 1036 const value_item_t Radio::pblLen_item = { _ITEM_VALUE, 6, pblLen_print, pblLen_write};
Wayne Roberts 1:0817a150122b 1037
Wayne Roberts 1:0817a150122b 1038
Wayne Roberts 1:0817a150122b 1039 const char* const rxTriggers[] = {
Wayne Roberts 1:0817a150122b 1040 "off ", // 0
Wayne Roberts 1:0817a150122b 1041 "RSSI ", // 1
Wayne Roberts 1:0817a150122b 1042 "Preamble ", // 2
Wayne Roberts 1:0817a150122b 1043 "RSSI+Preamble", // 3
Wayne Roberts 1:0817a150122b 1044 NULL
Wayne Roberts 1:0817a150122b 1045 };
Wayne Roberts 1:0817a150122b 1046
Wayne Roberts 2:ea9245bb1c53 1047 unsigned Radio::rxTrigger_read(bool fw)
Wayne Roberts 1:0817a150122b 1048 {
Wayne Roberts 1:0817a150122b 1049 fsk.RegRxConfig.octet = radio.read_reg(REG_FSK_RXCONFIG);
Wayne Roberts 1:0817a150122b 1050 return fsk.RegRxConfig.bits.RxTrigger;
Wayne Roberts 1:0817a150122b 1051 }
Wayne Roberts 1:0817a150122b 1052
Wayne Roberts 2:ea9245bb1c53 1053 menuMode_e Radio::rxTrigger_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1054 {
Wayne Roberts 1:0817a150122b 1055 fsk.RegRxConfig.bits.RxTrigger = sidx;
Wayne Roberts 1:0817a150122b 1056 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1057 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1058 }
Wayne Roberts 1:0817a150122b 1059
Wayne Roberts 2:ea9245bb1c53 1060 const dropdown_item_t Radio::rxTrigger_item = { _ITEM_DROPDOWN, rxTriggers, rxTriggers, rxTrigger_read, rxTrigger_write};
Wayne Roberts 1:0817a150122b 1061
Wayne Roberts 1:0817a150122b 1062 bool Radio::AgcAutoOn_read()
Wayne Roberts 1:0817a150122b 1063 {
Wayne Roberts 1:0817a150122b 1064 fsk.RegRxConfig.octet = radio.read_reg(REG_FSK_RXCONFIG);
Wayne Roberts 1:0817a150122b 1065 return fsk.RegRxConfig.bits.AgcAutoOn;
Wayne Roberts 1:0817a150122b 1066 }
Wayne Roberts 1:0817a150122b 1067
Wayne Roberts 1:0817a150122b 1068 bool Radio::AgcAutoOn_push()
Wayne Roberts 1:0817a150122b 1069 {
Wayne Roberts 1:0817a150122b 1070 fsk.RegRxConfig.bits.AgcAutoOn ^= 1;
Wayne Roberts 1:0817a150122b 1071 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1072 return fsk.RegRxConfig.bits.AgcAutoOn;
Wayne Roberts 1:0817a150122b 1073 }
Wayne Roberts 1:0817a150122b 1074
Wayne Roberts 1:0817a150122b 1075 bool Radio::AfcAutoOn_read()
Wayne Roberts 1:0817a150122b 1076 {
Wayne Roberts 5:1e5cb7139acb 1077 fsk.RegRxConfig.octet = radio.read_reg(REG_FSK_RXCONFIG);
Wayne Roberts 1:0817a150122b 1078 return fsk.RegRxConfig.bits.AfcAutoOn;
Wayne Roberts 1:0817a150122b 1079 }
Wayne Roberts 1:0817a150122b 1080
Wayne Roberts 1:0817a150122b 1081 bool Radio::AfcAutoOn_push()
Wayne Roberts 1:0817a150122b 1082 {
Wayne Roberts 1:0817a150122b 1083 fsk.RegRxConfig.bits.AfcAutoOn ^= 1;
Wayne Roberts 1:0817a150122b 1084 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1085 return fsk.RegRxConfig.bits.AfcAutoOn;
Wayne Roberts 1:0817a150122b 1086 }
Wayne Roberts 1:0817a150122b 1087
Wayne Roberts 1:0817a150122b 1088 const toggle_item_t Radio::agcautoon_item = { _ITEM_TOGGLE, "AgcAutoOn", NULL, AgcAutoOn_read, AgcAutoOn_push};
Wayne Roberts 1:0817a150122b 1089
Wayne Roberts 1:0817a150122b 1090 const toggle_item_t Radio::afcautoon_item = { _ITEM_TOGGLE, "AfcAutoOn", NULL, AfcAutoOn_read, AfcAutoOn_push};
Wayne Roberts 1:0817a150122b 1091
Wayne Roberts 1:0817a150122b 1092 bool Radio::RestartRxOnCollision_read()
Wayne Roberts 1:0817a150122b 1093 {
Wayne Roberts 5:1e5cb7139acb 1094 fsk.RegRxConfig.octet = radio.read_reg(REG_FSK_RXCONFIG);
Wayne Roberts 1:0817a150122b 1095 return fsk.RegRxConfig.bits.RestartRxOnCollision;
Wayne Roberts 1:0817a150122b 1096 }
Wayne Roberts 1:0817a150122b 1097
Wayne Roberts 1:0817a150122b 1098 bool Radio::RestartRxOnCollision_push()
Wayne Roberts 1:0817a150122b 1099 {
Wayne Roberts 1:0817a150122b 1100 fsk.RegRxConfig.bits.RestartRxOnCollision ^= 1;
Wayne Roberts 1:0817a150122b 1101 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1102 return fsk.RegRxConfig.bits.RestartRxOnCollision;
Wayne Roberts 1:0817a150122b 1103 }
Wayne Roberts 1:0817a150122b 1104
Wayne Roberts 1:0817a150122b 1105 const toggle_item_t Radio::RestartRxOnCollision_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1106 "RestartRxOnCollision", NULL,
Wayne Roberts 1:0817a150122b 1107 RestartRxOnCollision_read, RestartRxOnCollision_push
Wayne Roberts 1:0817a150122b 1108 };
Wayne Roberts 1:0817a150122b 1109
Wayne Roberts 1:0817a150122b 1110 void Radio::RestartRxWithPllLock_push()
Wayne Roberts 1:0817a150122b 1111 {
Wayne Roberts 1:0817a150122b 1112 fsk.RegRxConfig.bits.RestartRxWithPllLock = 1;
Wayne Roberts 1:0817a150122b 1113 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1114 fsk.RegRxConfig.bits.RestartRxWithPllLock = 0;
Wayne Roberts 1:0817a150122b 1115 }
Wayne Roberts 1:0817a150122b 1116
Wayne Roberts 1:0817a150122b 1117 const button_item_t Radio::RestartRxWithPllLock_item = { _ITEM_BUTTON,
Wayne Roberts 1:0817a150122b 1118 "RestartRxWithPllLock",
Wayne Roberts 1:0817a150122b 1119 RestartRxWithPllLock_push
Wayne Roberts 1:0817a150122b 1120 };
Wayne Roberts 1:0817a150122b 1121
Wayne Roberts 1:0817a150122b 1122 void Radio::RestartRxWithoutPllLock_push()
Wayne Roberts 1:0817a150122b 1123 {
Wayne Roberts 1:0817a150122b 1124 fsk.RegRxConfig.bits.RestartRxWithoutPllLock = 1;
Wayne Roberts 1:0817a150122b 1125 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
Wayne Roberts 1:0817a150122b 1126 fsk.RegRxConfig.bits.RestartRxWithoutPllLock = 0;
Wayne Roberts 1:0817a150122b 1127 }
Wayne Roberts 1:0817a150122b 1128
Wayne Roberts 1:0817a150122b 1129 const button_item_t Radio::RestartRxWithoutPllLock_item = { _ITEM_BUTTON,
Wayne Roberts 1:0817a150122b 1130 "RestartRxWithoutPllLock",
Wayne Roberts 1:0817a150122b 1131 RestartRxWithoutPllLock_push
Wayne Roberts 1:0817a150122b 1132 };
Wayne Roberts 1:0817a150122b 1133
Wayne Roberts 1:0817a150122b 1134 bool Radio::AfcAutoClearOn_read(void)
Wayne Roberts 1:0817a150122b 1135 {
Wayne Roberts 1:0817a150122b 1136 fsk.RegAfcFei.octet = radio.read_reg(REG_FSK_AFCFEI);
Wayne Roberts 1:0817a150122b 1137 return fsk.RegAfcFei.bits.AfcAutoClearOn;
Wayne Roberts 1:0817a150122b 1138 }
Wayne Roberts 1:0817a150122b 1139
Wayne Roberts 1:0817a150122b 1140 bool Radio::AfcAutoClearOn_push(void)
Wayne Roberts 1:0817a150122b 1141 {
Wayne Roberts 1:0817a150122b 1142 fsk.RegAfcFei.bits.AfcAutoClearOn ^= 1;
Wayne Roberts 1:0817a150122b 1143 radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet);
Wayne Roberts 1:0817a150122b 1144 return fsk.RegAfcFei.bits.AfcAutoClearOn;
Wayne Roberts 1:0817a150122b 1145 }
Wayne Roberts 1:0817a150122b 1146
Wayne Roberts 1:0817a150122b 1147 const toggle_item_t Radio::AfcAutoClearOn_item = { _ITEM_TOGGLE, "AfcAutoClearOn", NULL, AfcAutoClearOn_read, AfcAutoClearOn_push};
Wayne Roberts 1:0817a150122b 1148
Wayne Roberts 1:0817a150122b 1149 void Radio::AgcStart_push()
Wayne Roberts 1:0817a150122b 1150 {
Wayne Roberts 1:0817a150122b 1151 fsk.RegAfcFei.bits.AgcStart = 1;
Wayne Roberts 1:0817a150122b 1152 radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet);
Wayne Roberts 1:0817a150122b 1153 fsk.RegAfcFei.bits.AgcStart = 1;
Wayne Roberts 1:0817a150122b 1154 }
Wayne Roberts 1:0817a150122b 1155
Wayne Roberts 1:0817a150122b 1156 const button_item_t Radio::AgcStart_item = { _ITEM_BUTTON, "AgcStart", AgcStart_push};
Wayne Roberts 1:0817a150122b 1157
Wayne Roberts 1:0817a150122b 1158 void Radio::AfcClear_push()
Wayne Roberts 1:0817a150122b 1159 {
Wayne Roberts 1:0817a150122b 1160 fsk.RegAfcFei.bits.AfcClear = 1;
Wayne Roberts 1:0817a150122b 1161 radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet);
Wayne Roberts 1:0817a150122b 1162 fsk.RegAfcFei.bits.AfcClear = 0;
Wayne Roberts 1:0817a150122b 1163 }
Wayne Roberts 1:0817a150122b 1164 const button_item_t Radio::AfcClear_item = { _ITEM_BUTTON, "AfcClear", AfcClear_push};
Wayne Roberts 1:0817a150122b 1165
Wayne Roberts 1:0817a150122b 1166 void Radio::syncWord_print(void)
Wayne Roberts 1:0817a150122b 1167 {
Wayne Roberts 1:0817a150122b 1168 unsigned n, stop;
Wayne Roberts 1:0817a150122b 1169
Wayne Roberts 1:0817a150122b 1170 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
Wayne Roberts 1:0817a150122b 1171
Wayne Roberts 1:0817a150122b 1172 stop = fsk.RegSyncConfig.bits.SyncSize + 1;
Wayne Roberts 1:0817a150122b 1173 for (n = 0; n < stop; n++) {
dudmuck 13:8ce61a1897ab 1174 printf("%02x", radio.read_reg(REG_FSK_SYNCVALUE1+n));
Wayne Roberts 1:0817a150122b 1175 }
Wayne Roberts 1:0817a150122b 1176 }
Wayne Roberts 1:0817a150122b 1177
Wayne Roberts 1:0817a150122b 1178 bool Radio::syncWord_write(const char* txt)
Wayne Roberts 1:0817a150122b 1179 {
Wayne Roberts 1:0817a150122b 1180 const char* ptr;
Wayne Roberts 1:0817a150122b 1181 const char* endPtr;
Wayne Roberts 1:0817a150122b 1182 unsigned o, n = 0;
Wayne Roberts 1:0817a150122b 1183
Wayne Roberts 1:0817a150122b 1184 endPtr = txt + strlen(txt);
Wayne Roberts 1:0817a150122b 1185 for (ptr = txt; sscanf(ptr, "%02x", &o) == 1; ) {
Wayne Roberts 1:0817a150122b 1186 radio.write_reg(REG_FSK_SYNCVALUE1+n, o);
Wayne Roberts 1:0817a150122b 1187 n++;
Wayne Roberts 1:0817a150122b 1188 ptr += 2;
Wayne Roberts 1:0817a150122b 1189 if (ptr >= endPtr)
Wayne Roberts 1:0817a150122b 1190 break;
Wayne Roberts 1:0817a150122b 1191 }
Wayne Roberts 1:0817a150122b 1192
Wayne Roberts 1:0817a150122b 1193 fsk.RegSyncConfig.bits.SyncSize = n - 1;
Wayne Roberts 1:0817a150122b 1194 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
Wayne Roberts 1:0817a150122b 1195
Wayne Roberts 1:0817a150122b 1196 return false;
Wayne Roberts 1:0817a150122b 1197 }
Wayne Roberts 1:0817a150122b 1198
Wayne Roberts 1:0817a150122b 1199 const value_item_t Radio::syncWord_item = { _ITEM_VALUE, 17, syncWord_print, syncWord_write};
Wayne Roberts 1:0817a150122b 1200
Wayne Roberts 1:0817a150122b 1201 void Radio::syncSize_print(void)
Wayne Roberts 1:0817a150122b 1202 {
Wayne Roberts 1:0817a150122b 1203 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
Wayne Roberts 1:0817a150122b 1204
dudmuck 13:8ce61a1897ab 1205 printf("%u", fsk.RegSyncConfig.bits.SyncSize + 1);
Wayne Roberts 1:0817a150122b 1206 }
Wayne Roberts 1:0817a150122b 1207
Wayne Roberts 1:0817a150122b 1208 bool Radio::syncSize_write(const char* txt)
Wayne Roberts 1:0817a150122b 1209 {
Wayne Roberts 1:0817a150122b 1210 unsigned n;
Wayne Roberts 1:0817a150122b 1211 sscanf(txt, "%u", &n);
Wayne Roberts 1:0817a150122b 1212 if (n > 0) {
Wayne Roberts 1:0817a150122b 1213 fsk.RegSyncConfig.bits.SyncSize = n - 1;
Wayne Roberts 1:0817a150122b 1214 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
Wayne Roberts 1:0817a150122b 1215 }
Wayne Roberts 1:0817a150122b 1216 return false;
Wayne Roberts 1:0817a150122b 1217 }
Wayne Roberts 1:0817a150122b 1218
Wayne Roberts 1:0817a150122b 1219 const value_item_t Radio::syncSize_item = { _ITEM_VALUE, 2, syncSize_print, syncSize_write};
Wayne Roberts 1:0817a150122b 1220
Wayne Roberts 1:0817a150122b 1221 bool Radio::SyncOn_read()
Wayne Roberts 1:0817a150122b 1222 {
Wayne Roberts 1:0817a150122b 1223 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
Wayne Roberts 1:0817a150122b 1224 return fsk.RegSyncConfig.bits.SyncOn;
Wayne Roberts 1:0817a150122b 1225 }
Wayne Roberts 1:0817a150122b 1226
Wayne Roberts 1:0817a150122b 1227 bool Radio::SyncOn_push()
Wayne Roberts 1:0817a150122b 1228 {
Wayne Roberts 1:0817a150122b 1229 fsk.RegSyncConfig.bits.SyncOn ^= 1;
Wayne Roberts 1:0817a150122b 1230 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
Wayne Roberts 1:0817a150122b 1231 return fsk.RegSyncConfig.bits.SyncOn;
Wayne Roberts 1:0817a150122b 1232 }
Wayne Roberts 1:0817a150122b 1233
Wayne Roberts 1:0817a150122b 1234 const toggle_item_t Radio::syncOn_item = { _ITEM_TOGGLE, "SyncOn", NULL, SyncOn_read, SyncOn_push};
Wayne Roberts 1:0817a150122b 1235
Wayne Roberts 1:0817a150122b 1236 bool Radio::fsk_pktfmt_read()
Wayne Roberts 1:0817a150122b 1237 {
Wayne Roberts 1:0817a150122b 1238 fsk.RegPktConfig1.octet = radio.read_reg(REG_FSK_PACKETCONFIG1);
Wayne Roberts 1:0817a150122b 1239 return fsk.RegPktConfig1.bits.PacketFormatVariable;
Wayne Roberts 1:0817a150122b 1240 }
Wayne Roberts 1:0817a150122b 1241
Wayne Roberts 1:0817a150122b 1242 bool Radio::fsk_pktfmt_push()
Wayne Roberts 1:0817a150122b 1243 {
Wayne Roberts 1:0817a150122b 1244 fsk.RegPktConfig1.bits.PacketFormatVariable ^= 1;
Wayne Roberts 1:0817a150122b 1245 radio.write_reg(REG_FSK_PACKETCONFIG1, fsk.RegPktConfig1.octet);
Wayne Roberts 1:0817a150122b 1246 return fsk.RegPktConfig1.bits.PacketFormatVariable;
Wayne Roberts 1:0817a150122b 1247 }
Wayne Roberts 1:0817a150122b 1248
Wayne Roberts 1:0817a150122b 1249 const toggle_item_t Radio::fskook_pktfmt_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1250 "fixed ",
Wayne Roberts 1:0817a150122b 1251 "variable",
Wayne Roberts 1:0817a150122b 1252 fsk_pktfmt_read, fsk_pktfmt_push
Wayne Roberts 1:0817a150122b 1253 };
Wayne Roberts 1:0817a150122b 1254
Wayne Roberts 1:0817a150122b 1255
Wayne Roberts 1:0817a150122b 1256 void Radio::rssiOffset_print(void)
Wayne Roberts 1:0817a150122b 1257 {
Wayne Roberts 1:0817a150122b 1258 int ro;
Wayne Roberts 5:1e5cb7139acb 1259 fsk.RegRssiConfig.octet = radio.read_reg(REG_FSK_RSSICONFIG);
Wayne Roberts 1:0817a150122b 1260 ro = fsk.RegRssiConfig.bits.RssiOffset;
dudmuck 13:8ce61a1897ab 1261 printf("%d", ro);
Wayne Roberts 1:0817a150122b 1262 }
Wayne Roberts 1:0817a150122b 1263
Wayne Roberts 1:0817a150122b 1264 bool Radio::rssiOffset_write(const char* txt)
Wayne Roberts 1:0817a150122b 1265 {
Wayne Roberts 1:0817a150122b 1266 int ro;
Wayne Roberts 1:0817a150122b 1267 sscanf(txt, "%d", &ro);
Wayne Roberts 1:0817a150122b 1268 fsk.RegRssiConfig.bits.RssiOffset = ro;
Wayne Roberts 1:0817a150122b 1269 radio.write_reg(REG_FSK_RSSICONFIG, fsk.RegRssiConfig.octet);
Wayne Roberts 1:0817a150122b 1270 return false;
Wayne Roberts 1:0817a150122b 1271 }
Wayne Roberts 1:0817a150122b 1272
Wayne Roberts 1:0817a150122b 1273 const value_item_t Radio::rssiOffset_item = { _ITEM_VALUE, 2, rssiOffset_print, rssiOffset_write};
Wayne Roberts 1:0817a150122b 1274
Wayne Roberts 1:0817a150122b 1275 const char* const rssiSmoothings[] = {
Wayne Roberts 1:0817a150122b 1276 "2 ", // 0
Wayne Roberts 1:0817a150122b 1277 "4 ", // 1
Wayne Roberts 1:0817a150122b 1278 "8 ", // 2
Wayne Roberts 1:0817a150122b 1279 "16 ", // 3
Wayne Roberts 1:0817a150122b 1280 "32 ", // 4
Wayne Roberts 1:0817a150122b 1281 "64 ", // 5
Wayne Roberts 1:0817a150122b 1282 "128", // 6
Wayne Roberts 1:0817a150122b 1283 "256", // 7
Wayne Roberts 1:0817a150122b 1284 NULL
Wayne Roberts 1:0817a150122b 1285 };
Wayne Roberts 1:0817a150122b 1286
Wayne Roberts 1:0817a150122b 1287 unsigned Radio::rssiSmoothing_read(bool fw)
Wayne Roberts 1:0817a150122b 1288 {
Wayne Roberts 1:0817a150122b 1289 fsk.RegRssiConfig.octet = radio.read_reg(REG_FSK_RSSICONFIG);
Wayne Roberts 1:0817a150122b 1290 return fsk.RegRssiConfig.bits.RssiSmoothing;
Wayne Roberts 1:0817a150122b 1291 }
Wayne Roberts 1:0817a150122b 1292
Wayne Roberts 1:0817a150122b 1293 menuMode_e Radio::rssiSmoothing_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1294 {
Wayne Roberts 1:0817a150122b 1295 radio.write_reg(REG_FSK_RSSICONFIG, fsk.RegRssiConfig.octet);
Wayne Roberts 1:0817a150122b 1296 fsk.RegRssiConfig.bits.RssiSmoothing = sidx;
Wayne Roberts 1:0817a150122b 1297 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1298 }
Wayne Roberts 1:0817a150122b 1299
Wayne Roberts 1:0817a150122b 1300 const dropdown_item_t Radio::rssiSmoothing_item = { _ITEM_DROPDOWN, rssiSmoothings, rssiSmoothings, rssiSmoothing_read, rssiSmoothing_write};
Wayne Roberts 1:0817a150122b 1301
Wayne Roberts 1:0817a150122b 1302 bool Radio::dataMode_read()
Wayne Roberts 1:0817a150122b 1303 {
Wayne Roberts 1:0817a150122b 1304 fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
Wayne Roberts 1:0817a150122b 1305 return fsk.RegPktConfig2.bits.DataModePacket;
Wayne Roberts 1:0817a150122b 1306 }
Wayne Roberts 1:0817a150122b 1307
Wayne Roberts 1:0817a150122b 1308 bool Radio::dataMode_push()
Wayne Roberts 1:0817a150122b 1309 {
Wayne Roberts 1:0817a150122b 1310 fsk.RegPktConfig2.bits.DataModePacket ^= 1;
Wayne Roberts 5:1e5cb7139acb 1311 radio.write_u16(REG_FSK_PACKETCONFIG2, fsk.RegPktConfig2.word);
Wayne Roberts 1:0817a150122b 1312 return fsk.RegPktConfig2.bits.DataModePacket;
Wayne Roberts 1:0817a150122b 1313 }
Wayne Roberts 1:0817a150122b 1314
Wayne Roberts 1:0817a150122b 1315 const toggle_item_t Radio::dataMode_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1316 "continuous",
Wayne Roberts 1:0817a150122b 1317 "packet ",
Wayne Roberts 1:0817a150122b 1318 dataMode_read, dataMode_push
Wayne Roberts 1:0817a150122b 1319 };
Wayne Roberts 1:0817a150122b 1320
Wayne Roberts 1:0817a150122b 1321 bool Radio::bitSyncOn_read(void)
Wayne Roberts 1:0817a150122b 1322 {
Wayne Roberts 1:0817a150122b 1323 fsk.RegOokPeak.octet = radio.read_reg(REG_FSK_OOKPEAK);
Wayne Roberts 1:0817a150122b 1324 return fsk.RegOokPeak.bits.BitSyncOn;
Wayne Roberts 1:0817a150122b 1325 }
Wayne Roberts 1:0817a150122b 1326
Wayne Roberts 1:0817a150122b 1327 bool Radio::bitSyncOn_push(void)
Wayne Roberts 1:0817a150122b 1328 {
Wayne Roberts 1:0817a150122b 1329 fsk.RegOokPeak.bits.BitSyncOn ^= 1;
Wayne Roberts 1:0817a150122b 1330 radio.write_reg(REG_FSK_OOKPEAK, fsk.RegOokPeak.octet);
Wayne Roberts 1:0817a150122b 1331 return fsk.RegOokPeak.bits.BitSyncOn;
Wayne Roberts 1:0817a150122b 1332 }
Wayne Roberts 1:0817a150122b 1333
Wayne Roberts 1:0817a150122b 1334 const toggle_item_t Radio::bitSyncOn_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1335 "BitSyncOn", NULL,
Wayne Roberts 1:0817a150122b 1336 bitSyncOn_read, bitSyncOn_push
Wayne Roberts 1:0817a150122b 1337 };
Wayne Roberts 1:0817a150122b 1338
Wayne Roberts 1:0817a150122b 1339 const button_item_t Radio::pdLabel_item = { _ITEM_BUTTON, "PreambleDetector", NULL};
Wayne Roberts 1:0817a150122b 1340
Wayne Roberts 1:0817a150122b 1341 bool Radio::pdOn_read(void)
Wayne Roberts 1:0817a150122b 1342 {
Wayne Roberts 1:0817a150122b 1343 fsk.RegPreambleDetect.octet = radio.read_reg(REG_FSK_PREAMBLEDETECT);
Wayne Roberts 1:0817a150122b 1344 return fsk.RegPreambleDetect.bits.PreambleDetectorOn;
Wayne Roberts 1:0817a150122b 1345 }
Wayne Roberts 1:0817a150122b 1346
Wayne Roberts 1:0817a150122b 1347 bool Radio::pdOn_push(void)
Wayne Roberts 1:0817a150122b 1348 {
Wayne Roberts 1:0817a150122b 1349 fsk.RegPreambleDetect.bits.PreambleDetectorOn ^= 1;
Wayne Roberts 1:0817a150122b 1350 radio.write_reg(REG_FSK_PREAMBLEDETECT, fsk.RegPreambleDetect.octet);
Wayne Roberts 1:0817a150122b 1351 return fsk.RegPreambleDetect.bits.PreambleDetectorOn;
Wayne Roberts 1:0817a150122b 1352 }
Wayne Roberts 1:0817a150122b 1353
Wayne Roberts 1:0817a150122b 1354 const toggle_item_t Radio::pdOn_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1355 "On", NULL,
Wayne Roberts 1:0817a150122b 1356 pdOn_read, pdOn_push
Wayne Roberts 1:0817a150122b 1357 };
Wayne Roberts 1:0817a150122b 1358
Wayne Roberts 1:0817a150122b 1359 const char* const pdsizes[] = {
Wayne Roberts 1:0817a150122b 1360 "1 byte ", // 0
Wayne Roberts 1:0817a150122b 1361 "2 bytes", // 1
Wayne Roberts 1:0817a150122b 1362 "3 bytes", // 2
Wayne Roberts 1:0817a150122b 1363 NULL
Wayne Roberts 1:0817a150122b 1364 };
Wayne Roberts 1:0817a150122b 1365
Wayne Roberts 1:0817a150122b 1366 unsigned Radio::pdSize_read(bool)
Wayne Roberts 1:0817a150122b 1367 {
Wayne Roberts 1:0817a150122b 1368 fsk.RegPreambleDetect.octet = radio.read_reg(REG_FSK_PREAMBLEDETECT);
Wayne Roberts 1:0817a150122b 1369 return fsk.RegPreambleDetect.bits.PreambleDetectorSize;
Wayne Roberts 1:0817a150122b 1370 }
Wayne Roberts 1:0817a150122b 1371
Wayne Roberts 1:0817a150122b 1372 menuMode_e Radio::pdSize_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1373 {
Wayne Roberts 1:0817a150122b 1374 fsk.RegPreambleDetect.bits.PreambleDetectorSize = sidx;
Wayne Roberts 5:1e5cb7139acb 1375 radio.write_reg(REG_FSK_PREAMBLEDETECT, fsk.RegPreambleDetect.octet);
Wayne Roberts 1:0817a150122b 1376 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1377 }
Wayne Roberts 1:0817a150122b 1378
Wayne Roberts 1:0817a150122b 1379 const dropdown_item_t Radio::pdSize_item = { _ITEM_DROPDOWN, pdsizes, pdsizes, pdSize_read, pdSize_write};
Wayne Roberts 1:0817a150122b 1380
Wayne Roberts 1:0817a150122b 1381 void Radio::pdTol_print(void)
Wayne Roberts 1:0817a150122b 1382 {
Wayne Roberts 1:0817a150122b 1383 fsk.RegPreambleDetect.octet = radio.read_reg(REG_FSK_PREAMBLEDETECT);
dudmuck 13:8ce61a1897ab 1384 printf("%u", fsk.RegPreambleDetect.bits.PreambleDetectorTol);
Wayne Roberts 1:0817a150122b 1385 }
Wayne Roberts 1:0817a150122b 1386
Wayne Roberts 1:0817a150122b 1387 bool Radio::pdTol_write(const char* txt)
Wayne Roberts 1:0817a150122b 1388 {
Wayne Roberts 1:0817a150122b 1389 unsigned n;
Wayne Roberts 1:0817a150122b 1390 sscanf(txt, "%u", &n);
Wayne Roberts 1:0817a150122b 1391 fsk.RegPreambleDetect.bits.PreambleDetectorTol = n;
Wayne Roberts 5:1e5cb7139acb 1392 radio.write_reg(REG_FSK_PREAMBLEDETECT, fsk.RegPreambleDetect.octet);
Wayne Roberts 1:0817a150122b 1393 return false;
Wayne Roberts 1:0817a150122b 1394 }
Wayne Roberts 1:0817a150122b 1395
Wayne Roberts 1:0817a150122b 1396 const value_item_t Radio::pdTol_item = { _ITEM_VALUE, 3, pdTol_print, pdTol_write};
Wayne Roberts 1:0817a150122b 1397
Wayne Roberts 1:0817a150122b 1398 bool Radio::TxStartCondition_read()
Wayne Roberts 1:0817a150122b 1399 {
Wayne Roberts 5:1e5cb7139acb 1400 fsk.RegFifoThreshold.octet = radio.read_reg(REG_FSK_FIFOTHRESH);
Wayne Roberts 1:0817a150122b 1401 return fsk.RegFifoThreshold.bits.TxStartCondition;
Wayne Roberts 1:0817a150122b 1402 }
Wayne Roberts 1:0817a150122b 1403
Wayne Roberts 1:0817a150122b 1404 bool Radio::TxStartCondition_push()
Wayne Roberts 1:0817a150122b 1405 {
Wayne Roberts 1:0817a150122b 1406 fsk.RegFifoThreshold.bits.TxStartCondition ^= 1;
Wayne Roberts 1:0817a150122b 1407 radio.write_reg(REG_FSK_FIFOTHRESH, fsk.RegFifoThreshold.octet);
Wayne Roberts 1:0817a150122b 1408 return fsk.RegFifoThreshold.bits.TxStartCondition;
Wayne Roberts 1:0817a150122b 1409 }
Wayne Roberts 1:0817a150122b 1410
Wayne Roberts 1:0817a150122b 1411 const toggle_item_t Radio::TxStartCondition_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1412 "FifoLevel ", // 0
Wayne Roberts 1:0817a150122b 1413 "FifoNotEmpty", // 1
Wayne Roberts 1:0817a150122b 1414 TxStartCondition_read, TxStartCondition_push
Wayne Roberts 1:0817a150122b 1415 };
Wayne Roberts 1:0817a150122b 1416
Wayne Roberts 1:0817a150122b 1417 void Radio::FifoThreshold_print(void)
Wayne Roberts 1:0817a150122b 1418 {
Wayne Roberts 5:1e5cb7139acb 1419 fsk.RegFifoThreshold.octet = radio.read_reg(REG_FSK_FIFOTHRESH);
dudmuck 13:8ce61a1897ab 1420 printf("%u", fsk.RegFifoThreshold.bits.FifoThreshold);
Wayne Roberts 1:0817a150122b 1421 }
Wayne Roberts 1:0817a150122b 1422
Wayne Roberts 1:0817a150122b 1423 bool Radio::FifoThreshold_write(const char* txt)
Wayne Roberts 1:0817a150122b 1424 {
Wayne Roberts 1:0817a150122b 1425 unsigned n;
Wayne Roberts 1:0817a150122b 1426 sscanf(txt, "%u", &n);
Wayne Roberts 1:0817a150122b 1427 fsk.RegFifoThreshold.bits.FifoThreshold = n;
Wayne Roberts 1:0817a150122b 1428 radio.write_reg(REG_FSK_FIFOTHRESH, fsk.RegFifoThreshold.octet);
Wayne Roberts 1:0817a150122b 1429 return false;
Wayne Roberts 1:0817a150122b 1430 }
Wayne Roberts 1:0817a150122b 1431
Wayne Roberts 1:0817a150122b 1432 const value_item_t Radio::FifoThreshold_item = { _ITEM_VALUE, 3, FifoThreshold_print, FifoThreshold_write};
Wayne Roberts 1:0817a150122b 1433
Wayne Roberts 1:0817a150122b 1434 const char* const dcFrees[] = {
Wayne Roberts 1:0817a150122b 1435 "none ", // 0
Wayne Roberts 1:0817a150122b 1436 "manchester", // 1
Wayne Roberts 1:0817a150122b 1437 "whitening ", // 2
Wayne Roberts 1:0817a150122b 1438 NULL
Wayne Roberts 1:0817a150122b 1439 };
Wayne Roberts 1:0817a150122b 1440
Wayne Roberts 1:0817a150122b 1441 unsigned Radio::dcFree_read(bool fw)
Wayne Roberts 1:0817a150122b 1442 {
Wayne Roberts 1:0817a150122b 1443 fsk.RegPktConfig1.octet = radio.read_reg(REG_FSK_PACKETCONFIG1);
Wayne Roberts 1:0817a150122b 1444 return fsk.RegPktConfig1.bits.DcFree;
Wayne Roberts 1:0817a150122b 1445 }
Wayne Roberts 1:0817a150122b 1446
Wayne Roberts 1:0817a150122b 1447 menuMode_e Radio::dcFree_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1448 {
Wayne Roberts 1:0817a150122b 1449 fsk.RegPktConfig1.bits.DcFree = sidx;
Wayne Roberts 1:0817a150122b 1450 radio.write_reg(REG_FSK_PACKETCONFIG1, fsk.RegPktConfig1.octet);
Wayne Roberts 1:0817a150122b 1451 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1452 }
Wayne Roberts 1:0817a150122b 1453
Wayne Roberts 1:0817a150122b 1454 const dropdown_item_t Radio::dcFree_item = { _ITEM_DROPDOWN, dcFrees, dcFrees, dcFree_read, dcFree_write};
Wayne Roberts 1:0817a150122b 1455
Wayne Roberts 1:0817a150122b 1456 bool Radio::fskook_crcon_read()
Wayne Roberts 1:0817a150122b 1457 {
Wayne Roberts 1:0817a150122b 1458 fsk.RegPktConfig1.octet = radio.read_reg(REG_FSK_PACKETCONFIG1);
Wayne Roberts 1:0817a150122b 1459 return fsk.RegPktConfig1.bits.CrcOn;
Wayne Roberts 1:0817a150122b 1460 }
Wayne Roberts 1:0817a150122b 1461
Wayne Roberts 1:0817a150122b 1462 bool Radio::fskook_crcon_push()
Wayne Roberts 1:0817a150122b 1463 {
Wayne Roberts 1:0817a150122b 1464 fsk.RegPktConfig1.bits.CrcOn ^= 1;
Wayne Roberts 1:0817a150122b 1465 radio.write_reg(REG_FSK_PACKETCONFIG1, fsk.RegPktConfig1.octet);
Wayne Roberts 1:0817a150122b 1466
Wayne Roberts 1:0817a150122b 1467 if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER)
Wayne Roberts 1:0817a150122b 1468 fsk.config_dio0_for_pktmode_rx();
Wayne Roberts 1:0817a150122b 1469
Wayne Roberts 1:0817a150122b 1470 return fsk.RegPktConfig1.bits.CrcOn;
Wayne Roberts 1:0817a150122b 1471 }
Wayne Roberts 1:0817a150122b 1472
Wayne Roberts 1:0817a150122b 1473 const toggle_item_t Radio::fskook_crcon_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1474 "CrcOn", NULL,
Wayne Roberts 1:0817a150122b 1475 fskook_crcon_read, fskook_crcon_push
Wayne Roberts 1:0817a150122b 1476 };
Wayne Roberts 1:0817a150122b 1477
Wayne Roberts 1:0817a150122b 1478 void Radio::rssiThresh_print()
Wayne Roberts 1:0817a150122b 1479 {
Wayne Roberts 1:0817a150122b 1480 fsk.RegRssiThresh = radio.read_reg(REG_FSK_RSSITHRESH);
dudmuck 13:8ce61a1897ab 1481 printf("%.1f", fsk.RegRssiThresh / -2.0);
Wayne Roberts 1:0817a150122b 1482 }
Wayne Roberts 1:0817a150122b 1483
Wayne Roberts 1:0817a150122b 1484 bool Radio::rssiThresh_write(const char* txt)
Wayne Roberts 1:0817a150122b 1485 {
Wayne Roberts 1:0817a150122b 1486 float dbm;
Wayne Roberts 1:0817a150122b 1487 sscanf(txt, "%f", &dbm);
Wayne Roberts 1:0817a150122b 1488 fsk.RegRssiThresh = dbm * -2.0;
Wayne Roberts 1:0817a150122b 1489 radio.write_reg(REG_FSK_RSSITHRESH, fsk.RegRssiThresh);
Wayne Roberts 1:0817a150122b 1490 return false;
Wayne Roberts 1:0817a150122b 1491 }
Wayne Roberts 1:0817a150122b 1492
Wayne Roberts 1:0817a150122b 1493 const value_item_t Radio::rssiThresh_item = { _ITEM_VALUE, 3, rssiThresh_print, rssiThresh_write};
Wayne Roberts 1:0817a150122b 1494
Wayne Roberts 1:0817a150122b 1495 bool Radio::pblPol_read()
Wayne Roberts 1:0817a150122b 1496 {
Wayne Roberts 1:0817a150122b 1497 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
Wayne Roberts 1:0817a150122b 1498 return fsk.RegSyncConfig.bits.PreamblePolarity;
Wayne Roberts 1:0817a150122b 1499 }
Wayne Roberts 1:0817a150122b 1500
Wayne Roberts 1:0817a150122b 1501 bool Radio::pblPol_push()
Wayne Roberts 1:0817a150122b 1502 {
Wayne Roberts 1:0817a150122b 1503 fsk.RegSyncConfig.bits.PreamblePolarity ^= 1;
Wayne Roberts 1:0817a150122b 1504 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
Wayne Roberts 1:0817a150122b 1505 return fsk.RegSyncConfig.bits.PreamblePolarity;
Wayne Roberts 1:0817a150122b 1506 }
Wayne Roberts 1:0817a150122b 1507
Wayne Roberts 1:0817a150122b 1508 const toggle_item_t Radio::pblPol_item = { _ITEM_TOGGLE,
Wayne Roberts 1:0817a150122b 1509 "0xaa",
Wayne Roberts 1:0817a150122b 1510 "0x55",
Wayne Roberts 1:0817a150122b 1511 pblPol_read, pblPol_push
Wayne Roberts 1:0817a150122b 1512 };
Wayne Roberts 1:0817a150122b 1513
Wayne Roberts 1:0817a150122b 1514 const menu_t Radio::fsk_menu[] = {
Wayne Roberts 1:0817a150122b 1515 { {FIRST_CHIP_MENU_ROW, 22}, "bps:", &fsk_ook_bitrate_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1516 { {FIRST_CHIP_MENU_ROW, 34}, "fdev:", &gfsk_fdev_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1517 { {FIRST_CHIP_MENU_ROW, 47}, "BT:", &gfsk_bt_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1518 { {FIRST_CHIP_MENU_ROW, 57}, "length:", &fskook_pktfmt_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1519
Wayne Roberts 1:0817a150122b 1520 { {FIRST_CHIP_MENU_ROW+1, 1}, "rxbw:", &rxbw_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1521 { {FIRST_CHIP_MENU_ROW+1, 14}, "afcbw:", &afcbw_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1522 { {FIRST_CHIP_MENU_ROW+1, 27}, "preambleLen:", &pblLen_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1523 { {FIRST_CHIP_MENU_ROW+1, 47}, "RxTrigger:", &rxTrigger_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1524 { {FIRST_CHIP_MENU_ROW+1, 72}, NULL, &pblPol_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1525
Wayne Roberts 1:0817a150122b 1526 { {FIRST_CHIP_MENU_ROW+2, 1}, "syncWord:", &syncWord_item, FLAG_MSGTYPE_ALL, &syncSize_item},
Wayne Roberts 1:0817a150122b 1527 { {FIRST_CHIP_MENU_ROW+2, 27}, "syncSize:", &syncSize_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1528 { {FIRST_CHIP_MENU_ROW+2, 39}, NULL, &syncOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1529 { {FIRST_CHIP_MENU_ROW+2, 47}, "DataMode:", &dataMode_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1530 { {FIRST_CHIP_MENU_ROW+2, 69}, NULL, &bitSyncOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1531
Wayne Roberts 1:0817a150122b 1532 { {FIRST_CHIP_MENU_ROW+3, 1}, NULL, &pdLabel_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1533 { {FIRST_CHIP_MENU_ROW+3, 18}, NULL, &pdOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1534 { {FIRST_CHIP_MENU_ROW+3, 23}, "size:", &pdSize_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1535 { {FIRST_CHIP_MENU_ROW+3, 36}, "tol:", &pdTol_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1536 { {FIRST_CHIP_MENU_ROW+3, 48}, "rssiThresh:", &rssiThresh_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1537
Wayne Roberts 1:0817a150122b 1538 { {FIRST_CHIP_MENU_ROW+4, 1}, NULL, &agcautoon_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1539 { {FIRST_CHIP_MENU_ROW+4, 11}, NULL, &afcautoon_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1540 { {FIRST_CHIP_MENU_ROW+4, 22}, NULL, &RestartRxOnCollision_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1541 { {FIRST_CHIP_MENU_ROW+4, 43}, NULL, &RestartRxWithPllLock_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1542 { {FIRST_CHIP_MENU_ROW+4, 64}, NULL, &RestartRxWithoutPllLock_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1543
Wayne Roberts 1:0817a150122b 1544 { {FIRST_CHIP_MENU_ROW+5, 1}, NULL, &AfcAutoClearOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1545 { {FIRST_CHIP_MENU_ROW+5, 17}, NULL, &AgcStart_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1546 { {FIRST_CHIP_MENU_ROW+5, 27}, NULL, &AfcClear_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1547 { {FIRST_CHIP_MENU_ROW+5, 37}, "rssiOffset:", &rssiOffset_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1548 { {FIRST_CHIP_MENU_ROW+5, 52}, "rssiSmoothing:", &rssiSmoothing_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1549
Wayne Roberts 1:0817a150122b 1550 { {FIRST_CHIP_MENU_ROW+6, 1}, "TxStartCondition:", &TxStartCondition_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1551 { {FIRST_CHIP_MENU_ROW+6, 32}, "FifoThreshold:", &FifoThreshold_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1552 { {FIRST_CHIP_MENU_ROW+6, 50}, "dcFree:", &dcFree_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1553 { {FIRST_CHIP_MENU_ROW+6, 68}, NULL, &fskook_crcon_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1554
Wayne Roberts 1:0817a150122b 1555 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1556 };
Wayne Roberts 1:0817a150122b 1557
Wayne Roberts 1:0817a150122b 1558 const button_item_t Radio::ookLabel_item = { _ITEM_BUTTON, "Ook", NULL};
Wayne Roberts 1:0817a150122b 1559
Wayne Roberts 1:0817a150122b 1560 const menu_t Radio::common_menu[] = {
Wayne Roberts 1:0817a150122b 1561 { {FIRST_CHIP_MENU_ROW, 1}, NULL, &paSelect_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1562 { {FIRST_CHIP_MENU_ROW, 10}, "ocp mA:", &ocp_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1563 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1564 };
Wayne Roberts 1:0817a150122b 1565
Wayne Roberts 1:0817a150122b 1566 const char* const ook_peak_steps[] = {
Wayne Roberts 1:0817a150122b 1567 "0.5", // 0
Wayne Roberts 1:0817a150122b 1568 "1.0", // 1
Wayne Roberts 1:0817a150122b 1569 "1.5", // 2
Wayne Roberts 1:0817a150122b 1570 "2.0", // 3
Wayne Roberts 1:0817a150122b 1571 "3.0", // 4
Wayne Roberts 1:0817a150122b 1572 "4.0", // 5
Wayne Roberts 1:0817a150122b 1573 "5.0", // 6
Wayne Roberts 1:0817a150122b 1574 "6.0", // 7
Wayne Roberts 1:0817a150122b 1575 NULL
Wayne Roberts 1:0817a150122b 1576 };
Wayne Roberts 1:0817a150122b 1577
Wayne Roberts 1:0817a150122b 1578 unsigned Radio::ook_peak_step_read(bool fw)
Wayne Roberts 1:0817a150122b 1579 {
Wayne Roberts 1:0817a150122b 1580 fsk.RegOokPeak.octet = radio.read_reg(REG_FSK_OOKPEAK);
Wayne Roberts 1:0817a150122b 1581 return fsk.RegOokPeak.bits.OokPeakThreshStep;
Wayne Roberts 1:0817a150122b 1582 }
Wayne Roberts 1:0817a150122b 1583
Wayne Roberts 1:0817a150122b 1584 menuMode_e Radio::ook_peak_step_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1585 {
Wayne Roberts 1:0817a150122b 1586 fsk.RegOokPeak.bits.OokPeakThreshStep = sidx;
Wayne Roberts 1:0817a150122b 1587 radio.write_reg(REG_FSK_OOKPEAK, fsk.RegOokPeak.octet);
Wayne Roberts 1:0817a150122b 1588 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1589 }
Wayne Roberts 1:0817a150122b 1590
Wayne Roberts 1:0817a150122b 1591 const dropdown_item_t Radio::ook_peak_step_item = { _ITEM_DROPDOWN, ook_peak_steps, ook_peak_steps, ook_peak_step_read, ook_peak_step_write};
Wayne Roberts 1:0817a150122b 1592
Wayne Roberts 1:0817a150122b 1593 const char* const ook_peak_decs[] = {
Wayne Roberts 1:0817a150122b 1594 "once per chip ", // 0
Wayne Roberts 1:0817a150122b 1595 "once every 2 chips ", // 1
Wayne Roberts 1:0817a150122b 1596 "once every 4 chips ", // 2
Wayne Roberts 1:0817a150122b 1597 "once every 8 chips ", // 3
Wayne Roberts 1:0817a150122b 1598 "twice in each chip ", // 4
Wayne Roberts 1:0817a150122b 1599 "4 times in each chip ", // 5
Wayne Roberts 1:0817a150122b 1600 "8 times in each chip ", // 6
Wayne Roberts 1:0817a150122b 1601 "16 times in each chip", // 7
Wayne Roberts 1:0817a150122b 1602 NULL
Wayne Roberts 1:0817a150122b 1603 };
Wayne Roberts 1:0817a150122b 1604
Wayne Roberts 1:0817a150122b 1605 unsigned Radio::ook_peak_dec_read(bool fw)
Wayne Roberts 1:0817a150122b 1606 {
Wayne Roberts 1:0817a150122b 1607 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1608 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1609 return RegOokAvg.bits.OokPeakThreshDec;
Wayne Roberts 1:0817a150122b 1610 }
Wayne Roberts 1:0817a150122b 1611
Wayne Roberts 1:0817a150122b 1612 menuMode_e Radio::ook_peak_dec_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1613 {
Wayne Roberts 1:0817a150122b 1614 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1615 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1616 RegOokAvg.bits.OokPeakThreshDec = sidx;
Wayne Roberts 1:0817a150122b 1617 radio.write_reg(REG_FSK_OOKAVG, RegOokAvg.octet);
Wayne Roberts 1:0817a150122b 1618 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1619 }
Wayne Roberts 1:0817a150122b 1620
Wayne Roberts 1:0817a150122b 1621 const dropdown_item_t Radio::ook_peak_dec_item = { _ITEM_DROPDOWN, ook_peak_decs, ook_peak_decs, ook_peak_dec_read, ook_peak_dec_write};
Wayne Roberts 1:0817a150122b 1622
Wayne Roberts 1:0817a150122b 1623 void Radio::ookFixedThresh_print()
Wayne Roberts 1:0817a150122b 1624 {
dudmuck 13:8ce61a1897ab 1625 printf("%u", radio.read_reg(REG_FSK_OOKFIX));
Wayne Roberts 1:0817a150122b 1626 }
Wayne Roberts 1:0817a150122b 1627
Wayne Roberts 1:0817a150122b 1628 bool Radio::ookFixedThresh_write(const char* txt)
Wayne Roberts 1:0817a150122b 1629 {
Wayne Roberts 1:0817a150122b 1630 unsigned n;
Wayne Roberts 1:0817a150122b 1631 sscanf(txt, "%u", &n);
Wayne Roberts 1:0817a150122b 1632 radio.write_reg(REG_FSK_OOKFIX, n);
Wayne Roberts 1:0817a150122b 1633 return false;
Wayne Roberts 1:0817a150122b 1634 }
Wayne Roberts 1:0817a150122b 1635
Wayne Roberts 1:0817a150122b 1636 const value_item_t Radio::ookFixedThresh_item = { _ITEM_VALUE, 3, ookFixedThresh_print, ookFixedThresh_write};
Wayne Roberts 1:0817a150122b 1637
Wayne Roberts 1:0817a150122b 1638 const char* const ook_avgOffsets[] = {
Wayne Roberts 1:0817a150122b 1639 "0.0dB", // 0
Wayne Roberts 1:0817a150122b 1640 "2.0dB", // 1
Wayne Roberts 1:0817a150122b 1641 "4.0dB", // 2
Wayne Roberts 1:0817a150122b 1642 "6.0dB", // 3
Wayne Roberts 1:0817a150122b 1643 NULL
Wayne Roberts 1:0817a150122b 1644 };
Wayne Roberts 1:0817a150122b 1645
Wayne Roberts 1:0817a150122b 1646 unsigned Radio::ook_avgOffset_read(bool fw)
Wayne Roberts 1:0817a150122b 1647 {
Wayne Roberts 1:0817a150122b 1648 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1649 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1650 return RegOokAvg.bits.OokAverageOffset;
Wayne Roberts 1:0817a150122b 1651 }
Wayne Roberts 1:0817a150122b 1652
Wayne Roberts 1:0817a150122b 1653 menuMode_e Radio::ook_avgOffset_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1654 {
Wayne Roberts 1:0817a150122b 1655 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1656 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1657 RegOokAvg.bits.OokAverageOffset = sidx;
Wayne Roberts 1:0817a150122b 1658 radio.write_reg(REG_FSK_OOKAVG, RegOokAvg.octet);
Wayne Roberts 1:0817a150122b 1659 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1660 }
Wayne Roberts 1:0817a150122b 1661
Wayne Roberts 1:0817a150122b 1662 const dropdown_item_t Radio::ook_avgOffset_item = { _ITEM_DROPDOWN, ook_avgOffsets, ook_avgOffsets, ook_avgOffset_read, ook_avgOffset_write};
Wayne Roberts 1:0817a150122b 1663
Wayne Roberts 1:0817a150122b 1664 const char* const ook_avgFilters[] = {
Wayne Roberts 1:0817a150122b 1665 "chip rate / 32.π", // 0
Wayne Roberts 1:0817a150122b 1666 "chip rate / 8.π ", // 1
Wayne Roberts 1:0817a150122b 1667 "chip rate / 4.π ", // 2
Wayne Roberts 1:0817a150122b 1668 "chip rate / 2.π ", // 3
Wayne Roberts 1:0817a150122b 1669 NULL
Wayne Roberts 1:0817a150122b 1670 };
Wayne Roberts 1:0817a150122b 1671
Wayne Roberts 1:0817a150122b 1672 unsigned Radio::ook_avgFilter_read(bool fw)
Wayne Roberts 1:0817a150122b 1673 {
Wayne Roberts 1:0817a150122b 1674 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1675 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1676 return RegOokAvg.bits.OokAverageThreshFilt;
Wayne Roberts 1:0817a150122b 1677 }
Wayne Roberts 1:0817a150122b 1678
Wayne Roberts 1:0817a150122b 1679 menuMode_e Radio::ook_avgFilter_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1680 {
Wayne Roberts 1:0817a150122b 1681 RegOokAvg_t RegOokAvg;
Wayne Roberts 1:0817a150122b 1682 RegOokAvg.octet = radio.read_reg(REG_FSK_OOKAVG);
Wayne Roberts 1:0817a150122b 1683 RegOokAvg.bits.OokAverageThreshFilt = sidx;
Wayne Roberts 1:0817a150122b 1684 radio.write_reg(REG_FSK_OOKAVG, RegOokAvg.octet);
Wayne Roberts 1:0817a150122b 1685 return MENUMODE_REDRAW;
Wayne Roberts 1:0817a150122b 1686 }
Wayne Roberts 1:0817a150122b 1687
Wayne Roberts 1:0817a150122b 1688 const dropdown_item_t Radio::ook_avgFilter_item = { _ITEM_DROPDOWN, ook_avgFilters, ook_avgFilters, ook_avgFilter_read, ook_avgFilter_write};
Wayne Roberts 1:0817a150122b 1689
Wayne Roberts 1:0817a150122b 1690 const char* const ookthreshs[] = {
Wayne Roberts 1:0817a150122b 1691 "fixed ", // 0
Wayne Roberts 1:0817a150122b 1692 "peak ", // 1
Wayne Roberts 1:0817a150122b 1693 "average", // 2
Wayne Roberts 1:0817a150122b 1694 NULL
Wayne Roberts 1:0817a150122b 1695 };
Wayne Roberts 1:0817a150122b 1696
Wayne Roberts 1:0817a150122b 1697
Wayne Roberts 1:0817a150122b 1698 unsigned Radio::ookthreshtype_read(bool)
Wayne Roberts 1:0817a150122b 1699 {
Wayne Roberts 1:0817a150122b 1700 fsk.RegOokPeak.octet = radio.read_reg(REG_FSK_OOKPEAK);
Wayne Roberts 1:0817a150122b 1701
Wayne Roberts 1:0817a150122b 1702 return fsk.RegOokPeak.bits.OokThreshType;
Wayne Roberts 1:0817a150122b 1703 }
Wayne Roberts 1:0817a150122b 1704
Wayne Roberts 1:0817a150122b 1705 menuMode_e Radio::ookthreshtype_write(unsigned sidx)
Wayne Roberts 1:0817a150122b 1706 {
Wayne Roberts 1:0817a150122b 1707 fsk.RegOokPeak.bits.OokThreshType = sidx;
Wayne Roberts 1:0817a150122b 1708 radio.write_reg(REG_FSK_OOKPEAK, fsk.RegOokPeak.octet);
Wayne Roberts 1:0817a150122b 1709
Wayne Roberts 1:0817a150122b 1710 return MENUMODE_REINIT_MENU;
Wayne Roberts 1:0817a150122b 1711 }
Wayne Roberts 1:0817a150122b 1712
Wayne Roberts 1:0817a150122b 1713 const dropdown_item_t Radio::ookthreshtype_item = { _ITEM_DROPDOWN, ookthreshs, ookthreshs, ookthreshtype_read, ookthreshtype_write};
Wayne Roberts 1:0817a150122b 1714
Wayne Roberts 1:0817a150122b 1715 const menu_t Radio::ook_menu[] = {
Wayne Roberts 1:0817a150122b 1716 { {FIRST_CHIP_MENU_ROW, 22}, "bps:", &fsk_ook_bitrate_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1717 { {FIRST_CHIP_MENU_ROW, 34}, "Fcutoff=", &ook_bt_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1718 { {FIRST_CHIP_MENU_ROW, 56}, "length:", &fskook_pktfmt_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1719
Wayne Roberts 1:0817a150122b 1720 { {FIRST_CHIP_MENU_ROW+1, 1}, "rxbw:", &rxbw_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1721 { {FIRST_CHIP_MENU_ROW+1, 12}, "afcbw:", &afcbw_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1722 { {FIRST_CHIP_MENU_ROW+1, 25}, "preambleLen:", &pblLen_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1723 { {FIRST_CHIP_MENU_ROW+1, 47}, "RxTrigger:", &rxTrigger_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1724
Wayne Roberts 1:0817a150122b 1725 { {FIRST_CHIP_MENU_ROW+2, 1}, "syncWord:", &syncWord_item, FLAG_MSGTYPE_ALL, &syncSize_item},
Wayne Roberts 1:0817a150122b 1726 { {FIRST_CHIP_MENU_ROW+2, 27}, "syncSize:", &syncSize_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1727 { {FIRST_CHIP_MENU_ROW+2, 39}, NULL, &syncOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1728 { {FIRST_CHIP_MENU_ROW+2, 47}, "DataMode:", &dataMode_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1729 { {FIRST_CHIP_MENU_ROW+2, 69}, NULL, &bitSyncOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1730
Wayne Roberts 1:0817a150122b 1731 { {FIRST_CHIP_MENU_ROW+3, 1}, NULL, &pdLabel_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1732 { {FIRST_CHIP_MENU_ROW+3, 18}, NULL, &pdOn_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1733 { {FIRST_CHIP_MENU_ROW+3, 23}, "size:", &pdSize_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1734 { {FIRST_CHIP_MENU_ROW+3, 36}, "tol:", &pdTol_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1735 { {FIRST_CHIP_MENU_ROW+3, 48}, "rssiThresh:", &rssiThresh_item , FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1736
Wayne Roberts 1:0817a150122b 1737 { {FIRST_CHIP_MENU_ROW+4, 1}, "TxStartCondition:", &TxStartCondition_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1738 { {FIRST_CHIP_MENU_ROW+4, 32}, "FifoThreshold:", &FifoThreshold_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1739 { {FIRST_CHIP_MENU_ROW+4, 50}, "dcFree:", &dcFree_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1740 { {FIRST_CHIP_MENU_ROW+4, 68}, NULL, &fskook_crcon_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1741
Wayne Roberts 1:0817a150122b 1742 { {FIRST_CHIP_MENU_ROW+5, 1}, NULL, &ookLabel_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1743 { {FIRST_CHIP_MENU_ROW+5, 5}, "threshType:", &ookthreshtype_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1744
Wayne Roberts 1:0817a150122b 1745 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1746 };
Wayne Roberts 1:0817a150122b 1747
Wayne Roberts 1:0817a150122b 1748 const menu_t Radio::ook_fixed_menu[] = {
Wayne Roberts 1:0817a150122b 1749 { {FIRST_CHIP_MENU_ROW+5, 25}, "threshold:", &ookFixedThresh_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1750 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1751 };
Wayne Roberts 1:0817a150122b 1752
Wayne Roberts 1:0817a150122b 1753 const menu_t Radio::ook_peak_menu[] = {
Wayne Roberts 1:0817a150122b 1754 { {FIRST_CHIP_MENU_ROW+5, 25}, "step:", &ook_peak_step_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1755 { {FIRST_CHIP_MENU_ROW+5, 40}, "dec:", &ook_peak_dec_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1756 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1757 };
Wayne Roberts 1:0817a150122b 1758
Wayne Roberts 1:0817a150122b 1759 const menu_t Radio::ook_average_menu[] = {
Wayne Roberts 1:0817a150122b 1760 { {FIRST_CHIP_MENU_ROW+5, 25}, "offset:", &ook_avgOffset_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1761 { {FIRST_CHIP_MENU_ROW+5, 45}, "filter:", &ook_avgFilter_item, FLAG_MSGTYPE_ALL },
Wayne Roberts 1:0817a150122b 1762 { {0, 0}, NULL, NULL }
Wayne Roberts 1:0817a150122b 1763 };
Wayne Roberts 1:0817a150122b 1764
Wayne Roberts 1:0817a150122b 1765 void Radio::boardInit(const RadioEvents_t* e)
Wayne Roberts 1:0817a150122b 1766 {
Wayne Roberts 1:0817a150122b 1767 targetInit();
Wayne Roberts 1:0817a150122b 1768
Wayne Roberts 1:0817a150122b 1769 RadioEvents = e;
Wayne Roberts 1:0817a150122b 1770
Wayne Roberts 1:0817a150122b 1771 RegPaRamp.octet = radio.read_reg(REG_PARAMP);
Wayne Roberts 1:0817a150122b 1772
Wayne Roberts 1:0817a150122b 1773 if (radio.type == SX1276) {
Wayne Roberts 1:0817a150122b 1774 lora_bw_item.printed_strs = lora_bws_1276;
Wayne Roberts 1:0817a150122b 1775 lora_bw_item.selectable_strs = lora_bws_1276;
Wayne Roberts 1:0817a150122b 1776 } else if (radio.type == SX1272) {
Wayne Roberts 1:0817a150122b 1777 lora_bw_item.printed_strs = lora_bws_1272;
Wayne Roberts 1:0817a150122b 1778 lora_bw_item.selectable_strs = lora_bws_1272;
Wayne Roberts 1:0817a150122b 1779 }
Wayne Roberts 1:0817a150122b 1780
Wayne Roberts 1:0817a150122b 1781 lpt.start();
Wayne Roberts 1:0817a150122b 1782 }
Wayne Roberts 1:0817a150122b 1783
Wayne Roberts 4:fa31fdf4ec8d 1784 unsigned Radio::read_register(unsigned addr)
Wayne Roberts 4:fa31fdf4ec8d 1785 {
Wayne Roberts 4:fa31fdf4ec8d 1786 return radio.read_reg(addr);
Wayne Roberts 4:fa31fdf4ec8d 1787 }
Wayne Roberts 4:fa31fdf4ec8d 1788
Wayne Roberts 4:fa31fdf4ec8d 1789 void Radio::write_register(unsigned addr, unsigned val)
Wayne Roberts 4:fa31fdf4ec8d 1790 {
Wayne Roberts 4:fa31fdf4ec8d 1791 radio.write_reg(addr, val);
Wayne Roberts 4:fa31fdf4ec8d 1792 }
Wayne Roberts 4:fa31fdf4ec8d 1793
Wayne Roberts 1:0817a150122b 1794 void Radio::test() { }
Wayne Roberts 1:0817a150122b 1795
Wayne Roberts 1:0817a150122b 1796 #endif /* ..SX127x_H */
Wayne Roberts 1:0817a150122b 1797