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.
radio_sx127x.cpp@15:703ca340d0fb, 2 months ago (annotated)
- 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?
User | Revision | Line number | New 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 |