NAMote72 Utility Application – Serial Terminal Monitor control for NAMote72 (note: this application replaces the previous na_mote1 test code application)

Dependencies:   SX127x lib_gps lib_mma8451q lib_mpl3115a2 lib_sx9500 mbed

Fork of na_mote1 by wayne roberts

See wiki Page for a detailed

This is a link to the wiki page

Committer:
dudmuck
Date:
Mon Oct 06 18:59:49 2014 +0000
Revision:
1:b13a15a34c3f
Parent:
0:9c2b09ecb20f
Child:
2:fb41d1c4b299
added manual control of I2C pins for board testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 0:9c2b09ecb20f 1 #include "sx127x_lora.h"
dudmuck 0:9c2b09ecb20f 2 #include "sx127x_fsk.h"
dudmuck 0:9c2b09ecb20f 3
dudmuck 1:b13a15a34c3f 4 #include "mma8451q.h"
dudmuck 1:b13a15a34c3f 5 #include "mpl3115a2.h"
dudmuck 1:b13a15a34c3f 6 #include "sx9500.h"
dudmuck 0:9c2b09ecb20f 7
dudmuck 1:b13a15a34c3f 8 /*
dudmuck 1:b13a15a34c3f 9 *
dudmuck 1:b13a15a34c3f 10 */
dudmuck 0:9c2b09ecb20f 11 Serial pc(USBTX, USBRX);
dudmuck 1:b13a15a34c3f 12 DigitalInOut pb8(PB_8);
dudmuck 1:b13a15a34c3f 13 DigitalInOut pb9(PB_9);
dudmuck 1:b13a15a34c3f 14 //char _pb8, _pb9;
dudmuck 1:b13a15a34c3f 15 /*I2C i2c(I2C_SDA, I2C_SCL);
dudmuck 1:b13a15a34c3f 16 MMA8451Q mma8451q(i2c);
dudmuck 1:b13a15a34c3f 17 MPL3115A2 mpl3115a2(i2c);
dudmuck 1:b13a15a34c3f 18 SX9500 sx9500(i2c);*/
dudmuck 0:9c2b09ecb20f 19
dudmuck 0:9c2b09ecb20f 20 uint8_t tx_cnt;
dudmuck 0:9c2b09ecb20f 21 char pcbuf[64];
dudmuck 0:9c2b09ecb20f 22
dudmuck 0:9c2b09ecb20f 23 typedef enum {
dudmuck 0:9c2b09ecb20f 24 APP_NONE = 0,
dudmuck 0:9c2b09ecb20f 25 APP_CHAT
dudmuck 0:9c2b09ecb20f 26 } app_e;
dudmuck 0:9c2b09ecb20f 27
dudmuck 0:9c2b09ecb20f 28 app_e app = APP_NONE;
dudmuck 0:9c2b09ecb20f 29
dudmuck 0:9c2b09ecb20f 30
dudmuck 0:9c2b09ecb20f 31 const uint32_t frfs[] = { /* frequency hopping table */
dudmuck 0:9c2b09ecb20f 32 MHZ_TO_FRF(903.0),
dudmuck 0:9c2b09ecb20f 33 MHZ_TO_FRF(904.0),
dudmuck 0:9c2b09ecb20f 34 MHZ_TO_FRF(905.0),
dudmuck 0:9c2b09ecb20f 35 MHZ_TO_FRF(906.0),
dudmuck 0:9c2b09ecb20f 36 MHZ_TO_FRF(907.0),
dudmuck 0:9c2b09ecb20f 37 MHZ_TO_FRF(908.0),
dudmuck 0:9c2b09ecb20f 38 MHZ_TO_FRF(909.0),
dudmuck 0:9c2b09ecb20f 39 MHZ_TO_FRF(910.0),
dudmuck 0:9c2b09ecb20f 40 MHZ_TO_FRF(911.0),
dudmuck 0:9c2b09ecb20f 41 MHZ_TO_FRF(912.0),
dudmuck 0:9c2b09ecb20f 42 MHZ_TO_FRF(913.0),
dudmuck 0:9c2b09ecb20f 43 MHZ_TO_FRF(914.0),
dudmuck 0:9c2b09ecb20f 44 MHZ_TO_FRF(915.0)
dudmuck 0:9c2b09ecb20f 45 };
dudmuck 0:9c2b09ecb20f 46
dudmuck 0:9c2b09ecb20f 47 #define FSK_LARGE_PKT_THRESHOLD 0x3f
dudmuck 0:9c2b09ecb20f 48
dudmuck 0:9c2b09ecb20f 49 /******************************************************************************/
dudmuck 0:9c2b09ecb20f 50 #define RADIO_RESET PC_2 //NorAm_Mote Reset_sx
dudmuck 0:9c2b09ecb20f 51 #define RADIO_MOSI PB_15 //NorAm_Mote SPI2 Mosi
dudmuck 0:9c2b09ecb20f 52 #define RADIO_MISO PB_14 //NorAm_Mote SPI2 Miso
dudmuck 0:9c2b09ecb20f 53 #define RADIO_SCLK PB_13 //NorAm_Mote SPI2 Clk
dudmuck 0:9c2b09ecb20f 54 #define RADIO_NSS PB_12 //NorAm_Mote SPI2 Nss
dudmuck 0:9c2b09ecb20f 55
dudmuck 0:9c2b09ecb20f 56 #define RADIO_DIO_0 PC_6 //NorAm_Mote DIO0
dudmuck 0:9c2b09ecb20f 57 #define RADIO_DIO_1 PC_10 //NorAm_Mote DIO1
dudmuck 0:9c2b09ecb20f 58 #define RADIO_DIO_2 PC_8 //NorAm_Mote DIO2
dudmuck 0:9c2b09ecb20f 59 #define RADIO_DIO_3 PB_4 //NorAm_Mote DIO3
dudmuck 0:9c2b09ecb20f 60 #define RADIO_DIO_4 PB_5 //NorAm_Mote DIO4
dudmuck 0:9c2b09ecb20f 61 #define RADIO_DIO_5 PB_6 //NorAm_Mote DIO5
dudmuck 0:9c2b09ecb20f 62
dudmuck 0:9c2b09ecb20f 63 #define RFSW1 PC_4 //NorAm_Mote RFSwitch_CNTR_1
dudmuck 0:9c2b09ecb20f 64 #define RFSW2 PC_13 //NorAm_Mote RFSwitch_CNTR_2
dudmuck 0:9c2b09ecb20f 65
dudmuck 0:9c2b09ecb20f 66 // pin: 3 8 1 7 10 12 5 20 18
dudmuck 0:9c2b09ecb20f 67 // mosi, miso, sclk, cs, rst, dio0, dio1, fctx, fcps
dudmuck 0:9c2b09ecb20f 68 //SX127x radio(D11, D12, D13, D10, D7, D2, D3, D8, D9); // nucleo-L152RE
dudmuck 0:9c2b09ecb20f 69 SX127x radio(RADIO_MOSI, RADIO_MISO, RADIO_SCLK, RADIO_NSS, RADIO_RESET, RADIO_DIO_0, RADIO_DIO_1, RFSW1, RFSW2); // NA-mote
dudmuck 0:9c2b09ecb20f 70 SX127x_fsk fsk(radio);
dudmuck 0:9c2b09ecb20f 71 SX127x_lora lora(radio);
dudmuck 0:9c2b09ecb20f 72
dudmuck 0:9c2b09ecb20f 73 void printLoraIrqs_(bool clear)
dudmuck 0:9c2b09ecb20f 74 {
dudmuck 0:9c2b09ecb20f 75 //in radio class -- RegIrqFlags_t RegIrqFlags;
dudmuck 0:9c2b09ecb20f 76
dudmuck 0:9c2b09ecb20f 77 //already read RegIrqFlags.octet = radio.read_reg(REG_LR_IRQFLAGS);
dudmuck 0:9c2b09ecb20f 78 printf("\r\nIrqFlags:");
dudmuck 0:9c2b09ecb20f 79 if (lora.RegIrqFlags.bits.CadDetected)
dudmuck 0:9c2b09ecb20f 80 printf("CadDetected ");
dudmuck 0:9c2b09ecb20f 81 if (lora.RegIrqFlags.bits.FhssChangeChannel) {
dudmuck 0:9c2b09ecb20f 82 //radio.RegHopChannel.octet = radio.read_reg(REG_LR_HOPCHANNEL);
dudmuck 0:9c2b09ecb20f 83 printf("FhssChangeChannel:%d ", lora.RegHopChannel.bits.FhssPresentChannel);
dudmuck 0:9c2b09ecb20f 84 }
dudmuck 0:9c2b09ecb20f 85 if (lora.RegIrqFlags.bits.CadDone)
dudmuck 0:9c2b09ecb20f 86 printf("CadDone ");
dudmuck 0:9c2b09ecb20f 87 if (lora.RegIrqFlags.bits.TxDone)
dudmuck 0:9c2b09ecb20f 88 printf("TxDone ");
dudmuck 0:9c2b09ecb20f 89 if (lora.RegIrqFlags.bits.ValidHeader)
dudmuck 0:9c2b09ecb20f 90 printf("ValidHeader ");
dudmuck 0:9c2b09ecb20f 91 if (lora.RegIrqFlags.bits.PayloadCrcError)
dudmuck 0:9c2b09ecb20f 92 printf("PayloadCrcError ");
dudmuck 0:9c2b09ecb20f 93 if (lora.RegIrqFlags.bits.RxDone)
dudmuck 0:9c2b09ecb20f 94 printf("RxDone ");
dudmuck 0:9c2b09ecb20f 95 if (lora.RegIrqFlags.bits.RxTimeout)
dudmuck 0:9c2b09ecb20f 96 printf("RxTimeout ");
dudmuck 0:9c2b09ecb20f 97
dudmuck 0:9c2b09ecb20f 98 printf("\r\n");
dudmuck 0:9c2b09ecb20f 99
dudmuck 0:9c2b09ecb20f 100 if (clear)
dudmuck 0:9c2b09ecb20f 101 radio.write_reg(REG_LR_IRQFLAGS, lora.RegIrqFlags.octet);
dudmuck 0:9c2b09ecb20f 102
dudmuck 0:9c2b09ecb20f 103 }
dudmuck 0:9c2b09ecb20f 104
dudmuck 0:9c2b09ecb20f 105 void lora_printCodingRate(bool from_rx)
dudmuck 0:9c2b09ecb20f 106 {
dudmuck 0:9c2b09ecb20f 107 uint8_t d = lora.getCodingRate(from_rx);
dudmuck 0:9c2b09ecb20f 108 printf("CodingRate:");
dudmuck 0:9c2b09ecb20f 109 switch (d) {
dudmuck 0:9c2b09ecb20f 110 case 1: printf("4/5 "); break;
dudmuck 0:9c2b09ecb20f 111 case 2: printf("4/6 "); break;
dudmuck 0:9c2b09ecb20f 112 case 3: printf("4/7 "); break;
dudmuck 0:9c2b09ecb20f 113 case 4: printf("4/8 "); break;
dudmuck 0:9c2b09ecb20f 114 default:
dudmuck 0:9c2b09ecb20f 115 printf("%d ", d);
dudmuck 0:9c2b09ecb20f 116 break;
dudmuck 0:9c2b09ecb20f 117 }
dudmuck 0:9c2b09ecb20f 118 }
dudmuck 0:9c2b09ecb20f 119
dudmuck 0:9c2b09ecb20f 120 void lora_printHeaderMode()
dudmuck 0:9c2b09ecb20f 121 {
dudmuck 0:9c2b09ecb20f 122 if (lora.getHeaderMode())
dudmuck 0:9c2b09ecb20f 123 printf("implicit ");
dudmuck 0:9c2b09ecb20f 124 else
dudmuck 0:9c2b09ecb20f 125 printf("explicit ");
dudmuck 0:9c2b09ecb20f 126 }
dudmuck 0:9c2b09ecb20f 127
dudmuck 0:9c2b09ecb20f 128 void lora_printBw()
dudmuck 0:9c2b09ecb20f 129 {
dudmuck 0:9c2b09ecb20f 130 uint8_t bw = lora.getBw();
dudmuck 0:9c2b09ecb20f 131
dudmuck 0:9c2b09ecb20f 132 printf("Bw:");
dudmuck 0:9c2b09ecb20f 133 if (radio.type == SX1276) {
dudmuck 0:9c2b09ecb20f 134 switch (lora.RegModemConfig.sx1276bits.Bw) {
dudmuck 0:9c2b09ecb20f 135 case 0: printf("7.8KHz "); break;
dudmuck 0:9c2b09ecb20f 136 case 1: printf("10.4KHz "); break;
dudmuck 0:9c2b09ecb20f 137 case 2: printf("15.6KHz "); break;
dudmuck 0:9c2b09ecb20f 138 case 3: printf("20.8KHz "); break;
dudmuck 0:9c2b09ecb20f 139 case 4: printf("31.25KHz "); break;
dudmuck 0:9c2b09ecb20f 140 case 5: printf("41.7KHz "); break;
dudmuck 0:9c2b09ecb20f 141 case 6: printf("62.5KHz "); break;
dudmuck 0:9c2b09ecb20f 142 case 7: printf("125KHz "); break;
dudmuck 0:9c2b09ecb20f 143 case 8: printf("250KHz "); break;
dudmuck 0:9c2b09ecb20f 144 case 9: printf("500KHz "); break;
dudmuck 0:9c2b09ecb20f 145 default: printf("%x ", lora.RegModemConfig.sx1276bits.Bw); break;
dudmuck 0:9c2b09ecb20f 146 }
dudmuck 0:9c2b09ecb20f 147 } else if (radio.type == SX1272) {
dudmuck 0:9c2b09ecb20f 148 switch (lora.RegModemConfig.sx1272bits.Bw) {
dudmuck 0:9c2b09ecb20f 149 case 0: printf("125KHz "); break;
dudmuck 0:9c2b09ecb20f 150 case 1: printf("250KHz "); break;
dudmuck 0:9c2b09ecb20f 151 case 2: printf("500KHz "); break;
dudmuck 0:9c2b09ecb20f 152 case 3: printf("11b "); break;
dudmuck 0:9c2b09ecb20f 153 }
dudmuck 0:9c2b09ecb20f 154 }
dudmuck 0:9c2b09ecb20f 155 }
dudmuck 0:9c2b09ecb20f 156
dudmuck 0:9c2b09ecb20f 157 void lora_printAllBw()
dudmuck 0:9c2b09ecb20f 158 {
dudmuck 0:9c2b09ecb20f 159 int i, s;
dudmuck 0:9c2b09ecb20f 160
dudmuck 0:9c2b09ecb20f 161 if (radio.type == SX1276) {
dudmuck 0:9c2b09ecb20f 162 s = lora.RegModemConfig.sx1276bits.Bw;
dudmuck 0:9c2b09ecb20f 163 for (i = 0; i < 10; i++ ) {
dudmuck 0:9c2b09ecb20f 164 lora.RegModemConfig.sx1276bits.Bw = i;
dudmuck 0:9c2b09ecb20f 165 printf("%d ", i);
dudmuck 0:9c2b09ecb20f 166 lora_printBw();
dudmuck 0:9c2b09ecb20f 167 printf("\r\n");
dudmuck 0:9c2b09ecb20f 168 }
dudmuck 0:9c2b09ecb20f 169 lora.RegModemConfig.sx1276bits.Bw = s;
dudmuck 0:9c2b09ecb20f 170 } else if (radio.type == SX1272) {
dudmuck 0:9c2b09ecb20f 171 s = lora.RegModemConfig.sx1272bits.Bw;
dudmuck 0:9c2b09ecb20f 172 for (i = 0; i < 3; i++ ) {
dudmuck 0:9c2b09ecb20f 173 lora.RegModemConfig.sx1272bits.Bw = i;
dudmuck 0:9c2b09ecb20f 174 printf("%d ", i);
dudmuck 0:9c2b09ecb20f 175 lora_printBw();
dudmuck 0:9c2b09ecb20f 176 printf("\r\n");
dudmuck 0:9c2b09ecb20f 177 }
dudmuck 0:9c2b09ecb20f 178 lora.RegModemConfig.sx1272bits.Bw = s;
dudmuck 0:9c2b09ecb20f 179 }
dudmuck 0:9c2b09ecb20f 180 }
dudmuck 0:9c2b09ecb20f 181
dudmuck 0:9c2b09ecb20f 182 void lora_printSf()
dudmuck 0:9c2b09ecb20f 183 {
dudmuck 0:9c2b09ecb20f 184 // spreading factor same between sx127[26]
dudmuck 0:9c2b09ecb20f 185 printf("sf:%d ", lora.getSf());
dudmuck 0:9c2b09ecb20f 186 }
dudmuck 0:9c2b09ecb20f 187
dudmuck 0:9c2b09ecb20f 188 void lora_printRxPayloadCrcOn()
dudmuck 0:9c2b09ecb20f 189 {
dudmuck 0:9c2b09ecb20f 190 bool on = lora.getRxPayloadCrcOn();
dudmuck 0:9c2b09ecb20f 191 //printf("RxPayloadCrcOn:%s ", on ? "on" : "off");
dudmuck 0:9c2b09ecb20f 192 if (on)
dudmuck 0:9c2b09ecb20f 193 printf("RxPayloadCrcOn:1 = Tx CRC Enabled\r\n");
dudmuck 0:9c2b09ecb20f 194 else
dudmuck 0:9c2b09ecb20f 195 printf("RxPayloadCrcOn:1 = no Tx CRC\r\n");
dudmuck 0:9c2b09ecb20f 196 }
dudmuck 0:9c2b09ecb20f 197
dudmuck 0:9c2b09ecb20f 198 void lora_printTxContinuousMode()
dudmuck 0:9c2b09ecb20f 199 {
dudmuck 0:9c2b09ecb20f 200 printf("TxContinuousMode:%d ", lora.RegModemConfig2.sx1276bits.TxContinuousMode); // same for sx1272 and sx1276
dudmuck 0:9c2b09ecb20f 201 }
dudmuck 0:9c2b09ecb20f 202
dudmuck 0:9c2b09ecb20f 203 void lora_printAgcAutoOn()
dudmuck 0:9c2b09ecb20f 204 {
dudmuck 0:9c2b09ecb20f 205 printf("AgcAutoOn:%d", lora.getAgcAutoOn());
dudmuck 0:9c2b09ecb20f 206 }
dudmuck 0:9c2b09ecb20f 207
dudmuck 0:9c2b09ecb20f 208 void lora_print_dio()
dudmuck 0:9c2b09ecb20f 209 {
dudmuck 0:9c2b09ecb20f 210 radio.RegDioMapping2.octet = radio.read_reg(REG_DIOMAPPING2);
dudmuck 0:9c2b09ecb20f 211 printf("DIO5:");
dudmuck 0:9c2b09ecb20f 212 switch (radio.RegDioMapping2.bits.Dio5Mapping) {
dudmuck 0:9c2b09ecb20f 213 case 0: printf("ModeReady"); break;
dudmuck 0:9c2b09ecb20f 214 case 1: printf("ClkOut"); break;
dudmuck 0:9c2b09ecb20f 215 case 2: printf("ClkOut"); break;
dudmuck 0:9c2b09ecb20f 216 }
dudmuck 0:9c2b09ecb20f 217 printf(" DIO4:");
dudmuck 0:9c2b09ecb20f 218 switch (radio.RegDioMapping2.bits.Dio4Mapping) {
dudmuck 0:9c2b09ecb20f 219 case 0: printf("CadDetected"); break;
dudmuck 0:9c2b09ecb20f 220 case 1: printf("PllLock"); break;
dudmuck 0:9c2b09ecb20f 221 case 2: printf("PllLock"); break;
dudmuck 0:9c2b09ecb20f 222 }
dudmuck 0:9c2b09ecb20f 223 radio.RegDioMapping1.octet = radio.read_reg(REG_DIOMAPPING1);
dudmuck 0:9c2b09ecb20f 224 printf(" DIO3:");
dudmuck 0:9c2b09ecb20f 225 switch (radio.RegDioMapping1.bits.Dio3Mapping) {
dudmuck 0:9c2b09ecb20f 226 case 0: printf("CadDone"); break;
dudmuck 0:9c2b09ecb20f 227 case 1: printf("ValidHeader"); break;
dudmuck 0:9c2b09ecb20f 228 case 2: printf("PayloadCrcError"); break;
dudmuck 0:9c2b09ecb20f 229 }
dudmuck 0:9c2b09ecb20f 230 printf(" DIO2:");
dudmuck 0:9c2b09ecb20f 231 switch (radio.RegDioMapping1.bits.Dio2Mapping) {
dudmuck 0:9c2b09ecb20f 232 case 0:
dudmuck 0:9c2b09ecb20f 233 case 1:
dudmuck 0:9c2b09ecb20f 234 case 2:
dudmuck 0:9c2b09ecb20f 235 printf("FhssChangeChannel");
dudmuck 0:9c2b09ecb20f 236 break;
dudmuck 0:9c2b09ecb20f 237 }
dudmuck 0:9c2b09ecb20f 238 printf(" DIO1:");
dudmuck 0:9c2b09ecb20f 239 switch (radio.RegDioMapping1.bits.Dio1Mapping) {
dudmuck 0:9c2b09ecb20f 240 case 0: printf("RxTimeout"); break;
dudmuck 0:9c2b09ecb20f 241 case 1: printf("FhssChangeChannel"); break;
dudmuck 0:9c2b09ecb20f 242 case 2: printf("CadDetected"); break;
dudmuck 0:9c2b09ecb20f 243 }
dudmuck 0:9c2b09ecb20f 244 printf(" DIO0:");
dudmuck 0:9c2b09ecb20f 245 switch (radio.RegDioMapping1.bits.Dio0Mapping) {
dudmuck 0:9c2b09ecb20f 246 case 0: printf("RxDone"); break;
dudmuck 0:9c2b09ecb20f 247 case 1: printf("TxDone"); break;
dudmuck 0:9c2b09ecb20f 248 case 2: printf("CadDone"); break;
dudmuck 0:9c2b09ecb20f 249 }
dudmuck 0:9c2b09ecb20f 250
dudmuck 0:9c2b09ecb20f 251 printf("\r\n");
dudmuck 0:9c2b09ecb20f 252 }
dudmuck 0:9c2b09ecb20f 253
dudmuck 0:9c2b09ecb20f 254 void fsk_print_dio()
dudmuck 0:9c2b09ecb20f 255 {
dudmuck 0:9c2b09ecb20f 256 radio.RegDioMapping2.octet = radio.read_reg(REG_DIOMAPPING2);
dudmuck 0:9c2b09ecb20f 257
dudmuck 0:9c2b09ecb20f 258 printf("DIO5:");
dudmuck 0:9c2b09ecb20f 259 switch (radio.RegDioMapping2.bits.Dio5Mapping) {
dudmuck 0:9c2b09ecb20f 260 case 0: printf("ClkOut"); break;
dudmuck 0:9c2b09ecb20f 261 case 1: printf("PllLock"); break;
dudmuck 0:9c2b09ecb20f 262 case 2:
dudmuck 0:9c2b09ecb20f 263 if (fsk.RegPktConfig2.bits.DataModePacket)
dudmuck 0:9c2b09ecb20f 264 printf("data");
dudmuck 0:9c2b09ecb20f 265 else {
dudmuck 0:9c2b09ecb20f 266 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 267 printf("preamble");
dudmuck 0:9c2b09ecb20f 268 else
dudmuck 0:9c2b09ecb20f 269 printf("rssi");
dudmuck 0:9c2b09ecb20f 270 }
dudmuck 0:9c2b09ecb20f 271 break;
dudmuck 0:9c2b09ecb20f 272 case 3: printf("ModeReady"); break;
dudmuck 0:9c2b09ecb20f 273 }
dudmuck 0:9c2b09ecb20f 274
dudmuck 0:9c2b09ecb20f 275 printf(" DIO4:");
dudmuck 0:9c2b09ecb20f 276 switch (radio.RegDioMapping2.bits.Dio4Mapping) {
dudmuck 0:9c2b09ecb20f 277 case 0: printf("temp/eol"); break;
dudmuck 0:9c2b09ecb20f 278 case 1: printf("PllLock"); break;
dudmuck 0:9c2b09ecb20f 279 case 2: printf("TimeOut"); break;
dudmuck 0:9c2b09ecb20f 280 case 3:
dudmuck 0:9c2b09ecb20f 281 if (fsk.RegPktConfig2.bits.DataModePacket) {
dudmuck 0:9c2b09ecb20f 282 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 283 printf("preamble");
dudmuck 0:9c2b09ecb20f 284 else
dudmuck 0:9c2b09ecb20f 285 printf("rssi");
dudmuck 0:9c2b09ecb20f 286 } else
dudmuck 0:9c2b09ecb20f 287 printf("ModeReady");
dudmuck 0:9c2b09ecb20f 288 break;
dudmuck 0:9c2b09ecb20f 289 }
dudmuck 0:9c2b09ecb20f 290
dudmuck 0:9c2b09ecb20f 291 radio.RegDioMapping1.octet = radio.read_reg(REG_DIOMAPPING1);
dudmuck 0:9c2b09ecb20f 292
dudmuck 0:9c2b09ecb20f 293 printf(" DIO3:");
dudmuck 0:9c2b09ecb20f 294 switch (radio.RegDioMapping1.bits.Dio3Mapping) {
dudmuck 0:9c2b09ecb20f 295 case 0: printf("Timeout"); break;
dudmuck 0:9c2b09ecb20f 296 case 1:
dudmuck 0:9c2b09ecb20f 297 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 298 printf("preamble");
dudmuck 0:9c2b09ecb20f 299 else
dudmuck 0:9c2b09ecb20f 300 printf("rssi");
dudmuck 0:9c2b09ecb20f 301 break;
dudmuck 0:9c2b09ecb20f 302 case 2: printf("?automode_status?"); break;
dudmuck 0:9c2b09ecb20f 303 case 3: printf("TempChange/LowBat"); break;
dudmuck 0:9c2b09ecb20f 304 }
dudmuck 0:9c2b09ecb20f 305
dudmuck 0:9c2b09ecb20f 306 printf(" DIO2:");
dudmuck 0:9c2b09ecb20f 307 if (fsk.RegPktConfig2.bits.DataModePacket) {
dudmuck 0:9c2b09ecb20f 308 switch (radio.RegDioMapping1.bits.Dio2Mapping) {
dudmuck 0:9c2b09ecb20f 309 case 0: printf("FifoFull"); break;
dudmuck 0:9c2b09ecb20f 310 case 1: printf("RxReady"); break;
dudmuck 0:9c2b09ecb20f 311 case 2: printf("FifoFull/rx-timeout"); break;
dudmuck 0:9c2b09ecb20f 312 case 3: printf("FifoFull/rx-syncadrs"); break;
dudmuck 0:9c2b09ecb20f 313 }
dudmuck 0:9c2b09ecb20f 314 } else {
dudmuck 0:9c2b09ecb20f 315 printf("Data");
dudmuck 0:9c2b09ecb20f 316 }
dudmuck 0:9c2b09ecb20f 317
dudmuck 0:9c2b09ecb20f 318 printf(" DIO1:");
dudmuck 0:9c2b09ecb20f 319 if (fsk.RegPktConfig2.bits.DataModePacket) {
dudmuck 0:9c2b09ecb20f 320 switch (radio.RegDioMapping1.bits.Dio1Mapping) {
dudmuck 0:9c2b09ecb20f 321 case 0: printf("FifoThresh"); break;
dudmuck 0:9c2b09ecb20f 322 case 1: printf("FifoEmpty"); break;
dudmuck 0:9c2b09ecb20f 323 case 2: printf("FifoFull"); break;
dudmuck 0:9c2b09ecb20f 324 case 3: printf("-3-"); break;
dudmuck 0:9c2b09ecb20f 325 }
dudmuck 0:9c2b09ecb20f 326 } else {
dudmuck 0:9c2b09ecb20f 327 switch (radio.RegDioMapping1.bits.Dio1Mapping) {
dudmuck 0:9c2b09ecb20f 328 case 0: printf("Dclk"); break;
dudmuck 0:9c2b09ecb20f 329 case 1:
dudmuck 0:9c2b09ecb20f 330 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 331 printf("preamble");
dudmuck 0:9c2b09ecb20f 332 else
dudmuck 0:9c2b09ecb20f 333 printf("rssi");
dudmuck 0:9c2b09ecb20f 334 break;
dudmuck 0:9c2b09ecb20f 335 case 2: printf("-2-"); break;
dudmuck 0:9c2b09ecb20f 336 case 3: printf("-3-"); break;
dudmuck 0:9c2b09ecb20f 337 }
dudmuck 0:9c2b09ecb20f 338 }
dudmuck 0:9c2b09ecb20f 339
dudmuck 0:9c2b09ecb20f 340 printf(" DIO0:");
dudmuck 0:9c2b09ecb20f 341 if (fsk.RegPktConfig2.bits.DataModePacket) {
dudmuck 0:9c2b09ecb20f 342 switch (radio.RegDioMapping1.bits.Dio0Mapping) {
dudmuck 0:9c2b09ecb20f 343 case 0: printf("PayloadReady/PacketSent"); break;
dudmuck 0:9c2b09ecb20f 344 case 1: printf("CrcOk"); break;
dudmuck 0:9c2b09ecb20f 345 case 2: printf("-2-"); break;
dudmuck 0:9c2b09ecb20f 346 case 3: printf("TempChange/LowBat"); break;
dudmuck 0:9c2b09ecb20f 347 }
dudmuck 0:9c2b09ecb20f 348 } else {
dudmuck 0:9c2b09ecb20f 349 switch (radio.RegDioMapping1.bits.Dio0Mapping) {
dudmuck 0:9c2b09ecb20f 350 case 0: printf("SyncAdrs/TxReady"); break;
dudmuck 0:9c2b09ecb20f 351 case 1:
dudmuck 0:9c2b09ecb20f 352 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 353 printf("preamble");
dudmuck 0:9c2b09ecb20f 354 else
dudmuck 0:9c2b09ecb20f 355 printf("rssi");
dudmuck 0:9c2b09ecb20f 356 break;
dudmuck 0:9c2b09ecb20f 357 case 2: printf("RxReady"); break;
dudmuck 0:9c2b09ecb20f 358 case 3: printf("-3-"); break;
dudmuck 0:9c2b09ecb20f 359 }
dudmuck 0:9c2b09ecb20f 360 }
dudmuck 0:9c2b09ecb20f 361 printf("\r\n");
dudmuck 0:9c2b09ecb20f 362 }
dudmuck 0:9c2b09ecb20f 363
dudmuck 0:9c2b09ecb20f 364 void lora_print_status()
dudmuck 0:9c2b09ecb20f 365 {
dudmuck 0:9c2b09ecb20f 366 uint8_t d;
dudmuck 0:9c2b09ecb20f 367
dudmuck 0:9c2b09ecb20f 368 if (radio.type == SX1276)
dudmuck 0:9c2b09ecb20f 369 printf("\r\nSX1276 ");
dudmuck 0:9c2b09ecb20f 370 else if (radio.type == SX1272)
dudmuck 0:9c2b09ecb20f 371 printf("\r\nSX1272 ");
dudmuck 0:9c2b09ecb20f 372
dudmuck 0:9c2b09ecb20f 373 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:9c2b09ecb20f 374 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 375 printf("FSK\r\n");
dudmuck 0:9c2b09ecb20f 376 return;
dudmuck 0:9c2b09ecb20f 377 }
dudmuck 0:9c2b09ecb20f 378
dudmuck 0:9c2b09ecb20f 379 lora_print_dio();
dudmuck 0:9c2b09ecb20f 380 printf("LoRa ");
dudmuck 0:9c2b09ecb20f 381
dudmuck 0:9c2b09ecb20f 382 // printing LoRa registers at 0x0d -> 0x3f
dudmuck 0:9c2b09ecb20f 383
dudmuck 0:9c2b09ecb20f 384 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 385 lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
dudmuck 0:9c2b09ecb20f 386
dudmuck 0:9c2b09ecb20f 387 lora_printCodingRate(false); // false: transmitted coding rate
dudmuck 0:9c2b09ecb20f 388 lora_printHeaderMode();
dudmuck 0:9c2b09ecb20f 389 lora_printBw();
dudmuck 0:9c2b09ecb20f 390 lora_printSf();
dudmuck 0:9c2b09ecb20f 391 lora_printRxPayloadCrcOn();
dudmuck 0:9c2b09ecb20f 392 // RegModemStat
dudmuck 0:9c2b09ecb20f 393 printf("ModemStat:0x%02x\r\n", radio.read_reg(REG_LR_MODEMSTAT));
dudmuck 0:9c2b09ecb20f 394
dudmuck 0:9c2b09ecb20f 395 // fifo ptrs:
dudmuck 0:9c2b09ecb20f 396 lora.RegPayloadLength = radio.read_reg(REG_LR_PAYLOADLENGTH);
dudmuck 0:9c2b09ecb20f 397 lora.RegRxMaxPayloadLength = radio.read_reg(REG_LR_RX_MAX_PAYLOADLENGTH);
dudmuck 0:9c2b09ecb20f 398 printf("fifoptr=0x%02x txbase=0x%02x rxbase=0x%02x payloadLength=0x%02x maxlen=0x%02x",
dudmuck 0:9c2b09ecb20f 399 radio.read_reg(REG_LR_FIFOADDRPTR),
dudmuck 0:9c2b09ecb20f 400 radio.read_reg(REG_LR_FIFOTXBASEADDR),
dudmuck 0:9c2b09ecb20f 401 radio.read_reg(REG_LR_FIFORXBASEADDR),
dudmuck 0:9c2b09ecb20f 402 lora.RegPayloadLength,
dudmuck 0:9c2b09ecb20f 403 lora.RegRxMaxPayloadLength
dudmuck 0:9c2b09ecb20f 404 );
dudmuck 0:9c2b09ecb20f 405
dudmuck 0:9c2b09ecb20f 406 lora.RegIrqFlags.octet = radio.read_reg(REG_LR_IRQFLAGS);
dudmuck 0:9c2b09ecb20f 407 printLoraIrqs_(false);
dudmuck 0:9c2b09ecb20f 408
dudmuck 0:9c2b09ecb20f 409 lora.RegHopPeriod = radio.read_reg(REG_LR_HOPPERIOD);
dudmuck 0:9c2b09ecb20f 410 if (lora.RegHopPeriod != 0) {
dudmuck 0:9c2b09ecb20f 411 printf("\r\nHopPeriod:0x%02x\r\n", lora.RegHopPeriod);
dudmuck 0:9c2b09ecb20f 412 }
dudmuck 0:9c2b09ecb20f 413
dudmuck 0:9c2b09ecb20f 414 printf("SymbTimeout:0x%03x ", radio.read_u16(REG_LR_MODEMCONFIG2) & 0x3ff);
dudmuck 0:9c2b09ecb20f 415
dudmuck 0:9c2b09ecb20f 416 lora.RegPreamble = radio.read_u16(REG_LR_PREAMBLEMSB);
dudmuck 0:9c2b09ecb20f 417 printf("PreambleLength:%d ", lora.RegPreamble);
dudmuck 0:9c2b09ecb20f 418
dudmuck 0:9c2b09ecb20f 419 if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE) {
dudmuck 0:9c2b09ecb20f 420 d = radio.read_reg(REG_LR_RSSIVALUE);
dudmuck 0:9c2b09ecb20f 421 printf("rssi:%ddBm ", d-120);
dudmuck 0:9c2b09ecb20f 422 }
dudmuck 0:9c2b09ecb20f 423
dudmuck 0:9c2b09ecb20f 424 lora_printTxContinuousMode();
dudmuck 0:9c2b09ecb20f 425
dudmuck 0:9c2b09ecb20f 426 printf("\r\n");
dudmuck 0:9c2b09ecb20f 427 lora_printAgcAutoOn();
dudmuck 0:9c2b09ecb20f 428 if (radio.type == SX1272) {
dudmuck 0:9c2b09ecb20f 429 printf(" LowDataRateOptimize:%d\r\n", lora.RegModemConfig.sx1272bits.LowDataRateOptimize);
dudmuck 0:9c2b09ecb20f 430 }
dudmuck 0:9c2b09ecb20f 431
dudmuck 0:9c2b09ecb20f 432 printf("\r\nHeaderCount:%d PacketCount:%d, ",
dudmuck 0:9c2b09ecb20f 433 radio.read_u16(REG_LR_RXHEADERCNTVALUE_MSB), radio.read_u16(REG_LR_RXPACKETCNTVALUE_MSB));
dudmuck 0:9c2b09ecb20f 434
dudmuck 0:9c2b09ecb20f 435 printf("Lora detection threshold:%02x\r\n", radio.read_reg(REG_LR_DETECTION_THRESHOLD));
dudmuck 0:9c2b09ecb20f 436 lora.RegTest31.octet = radio.read_reg(REG_LR_TEST31);
dudmuck 0:9c2b09ecb20f 437 printf("detect_trig_same_peaks_nb:%d\r\n", lora.RegTest31.bits.detect_trig_same_peaks_nb);
dudmuck 0:9c2b09ecb20f 438
dudmuck 0:9c2b09ecb20f 439 if (radio.type == SX1272) {
dudmuck 0:9c2b09ecb20f 440 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 441 printf("LowDataRateOptimize:%d\r\n", lora.RegModemConfig.sx1272bits.LowDataRateOptimize);
dudmuck 0:9c2b09ecb20f 442 } else if (radio.type == SX1276) {
dudmuck 0:9c2b09ecb20f 443 lora.RegModemConfig3.octet = radio.read_reg(REG_LR_MODEMCONFIG3);
dudmuck 0:9c2b09ecb20f 444 printf("LowDataRateOptimize:%d\r\n", lora.RegModemConfig3.sx1276bits.LowDataRateOptimize);
dudmuck 0:9c2b09ecb20f 445 }
dudmuck 0:9c2b09ecb20f 446
dudmuck 0:9c2b09ecb20f 447 printf("\r\n");
dudmuck 0:9c2b09ecb20f 448 //printf("A %02x\r\n", radio.RegModemConfig2.octet);
dudmuck 0:9c2b09ecb20f 449 }
dudmuck 0:9c2b09ecb20f 450
dudmuck 0:9c2b09ecb20f 451 uint16_t
dudmuck 0:9c2b09ecb20f 452 fsk_get_PayloadLength(void)
dudmuck 0:9c2b09ecb20f 453 {
dudmuck 0:9c2b09ecb20f 454 fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
dudmuck 0:9c2b09ecb20f 455
dudmuck 0:9c2b09ecb20f 456 return fsk.RegPktConfig2.bits.PayloadLength;
dudmuck 0:9c2b09ecb20f 457 }
dudmuck 0:9c2b09ecb20f 458
dudmuck 0:9c2b09ecb20f 459 void fsk_printAddressFiltering()
dudmuck 0:9c2b09ecb20f 460 {
dudmuck 0:9c2b09ecb20f 461 uint8_t FSKRegNodeAdrs, FSKRegBroadcastAdrs;
dudmuck 0:9c2b09ecb20f 462
dudmuck 0:9c2b09ecb20f 463 printf(" AddressFiltering:");
dudmuck 0:9c2b09ecb20f 464 switch (fsk.RegPktConfig1.bits.AddressFiltering) {
dudmuck 0:9c2b09ecb20f 465 case 0: printf("off"); break;
dudmuck 0:9c2b09ecb20f 466 case 1: // NodeAddress
dudmuck 0:9c2b09ecb20f 467 FSKRegNodeAdrs = radio.read_reg(REG_FSK_NODEADRS);
dudmuck 0:9c2b09ecb20f 468 printf("NodeAdrs:%02x\n", FSKRegNodeAdrs);
dudmuck 0:9c2b09ecb20f 469 break;
dudmuck 0:9c2b09ecb20f 470 case 2: // NodeAddress & BroadcastAddress
dudmuck 0:9c2b09ecb20f 471 FSKRegNodeAdrs = radio.read_reg(REG_FSK_NODEADRS);
dudmuck 0:9c2b09ecb20f 472 printf("NodeAdrs:%02x ", FSKRegNodeAdrs);
dudmuck 0:9c2b09ecb20f 473 FSKRegBroadcastAdrs = radio.read_reg(REG_FSK_BROADCASTADRS);
dudmuck 0:9c2b09ecb20f 474 printf("BroadcastAdrs:%02x\n", FSKRegBroadcastAdrs );
dudmuck 0:9c2b09ecb20f 475 break;
dudmuck 0:9c2b09ecb20f 476 default:
dudmuck 0:9c2b09ecb20f 477 printf("%d", fsk.RegPktConfig1.bits.AddressFiltering);
dudmuck 0:9c2b09ecb20f 478 break;
dudmuck 0:9c2b09ecb20f 479 }
dudmuck 0:9c2b09ecb20f 480 }
dudmuck 0:9c2b09ecb20f 481
dudmuck 0:9c2b09ecb20f 482 void fsk_print_IrqFlags2()
dudmuck 0:9c2b09ecb20f 483 {
dudmuck 0:9c2b09ecb20f 484 RegIrqFlags2_t RegIrqFlags2;
dudmuck 0:9c2b09ecb20f 485
dudmuck 0:9c2b09ecb20f 486 printf("IrqFlags2: ");
dudmuck 0:9c2b09ecb20f 487 RegIrqFlags2.octet = radio.read_reg(REG_FSK_IRQFLAGS2);
dudmuck 0:9c2b09ecb20f 488 if (RegIrqFlags2.bits.FifoFull)
dudmuck 0:9c2b09ecb20f 489 printf("FifoFull ");
dudmuck 0:9c2b09ecb20f 490 if (RegIrqFlags2.bits.FifoEmpty)
dudmuck 0:9c2b09ecb20f 491 printf("FifoEmpty ");
dudmuck 0:9c2b09ecb20f 492 if (RegIrqFlags2.bits.FifoLevel)
dudmuck 0:9c2b09ecb20f 493 printf("FifoLevel ");
dudmuck 0:9c2b09ecb20f 494 if (RegIrqFlags2.bits.FifoOverrun)
dudmuck 0:9c2b09ecb20f 495 printf("FifoOverrun ");
dudmuck 0:9c2b09ecb20f 496 if (RegIrqFlags2.bits.PacketSent)
dudmuck 0:9c2b09ecb20f 497 printf("PacketSent ");
dudmuck 0:9c2b09ecb20f 498 if (RegIrqFlags2.bits.PayloadReady)
dudmuck 0:9c2b09ecb20f 499 printf("PayloadReady ");
dudmuck 0:9c2b09ecb20f 500 if (RegIrqFlags2.bits.CrcOk)
dudmuck 0:9c2b09ecb20f 501 printf("CrcOk ");
dudmuck 0:9c2b09ecb20f 502 if (RegIrqFlags2.bits.LowBat)
dudmuck 0:9c2b09ecb20f 503 printf("LowBat ");
dudmuck 0:9c2b09ecb20f 504 printf("\r\n");
dudmuck 0:9c2b09ecb20f 505 }
dudmuck 0:9c2b09ecb20f 506
dudmuck 0:9c2b09ecb20f 507 void
dudmuck 0:9c2b09ecb20f 508 fsk_print_status()
dudmuck 0:9c2b09ecb20f 509 {
dudmuck 0:9c2b09ecb20f 510 //uint16_t s;
dudmuck 0:9c2b09ecb20f 511 RegIrqFlags1_t RegIrqFlags1;
dudmuck 0:9c2b09ecb20f 512
dudmuck 0:9c2b09ecb20f 513 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 514 printf("LoRa\r\n");
dudmuck 0:9c2b09ecb20f 515 return;
dudmuck 0:9c2b09ecb20f 516 }
dudmuck 0:9c2b09ecb20f 517
dudmuck 0:9c2b09ecb20f 518 if (radio.RegOpMode.bits.ModulationType == 0) {
dudmuck 0:9c2b09ecb20f 519 printf("FSK ");
dudmuck 0:9c2b09ecb20f 520 switch (radio.RegOpMode.bits.ModulationShaping) {
dudmuck 0:9c2b09ecb20f 521 case 1: printf("BT1.0 "); break;
dudmuck 0:9c2b09ecb20f 522 case 2: printf("BT0.5 "); break;
dudmuck 0:9c2b09ecb20f 523 case 3: printf("BT0.3 "); break;
dudmuck 0:9c2b09ecb20f 524 }
dudmuck 0:9c2b09ecb20f 525 } else if (radio.RegOpMode.bits.ModulationType == 1) {
dudmuck 0:9c2b09ecb20f 526 printf("OOK ");
dudmuck 0:9c2b09ecb20f 527 }
dudmuck 0:9c2b09ecb20f 528
dudmuck 0:9c2b09ecb20f 529 printf("%dbps fdev:%dHz\r\n", fsk.get_bitrate(), fsk.get_tx_fdev_hz());
dudmuck 0:9c2b09ecb20f 530
dudmuck 0:9c2b09ecb20f 531 fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2);
dudmuck 0:9c2b09ecb20f 532
dudmuck 0:9c2b09ecb20f 533 fsk_print_dio();
dudmuck 0:9c2b09ecb20f 534
dudmuck 0:9c2b09ecb20f 535 printf("rxbw:%dHz ", fsk.get_rx_bw_hz(REG_FSK_RXBW));
dudmuck 0:9c2b09ecb20f 536 printf("afcbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
dudmuck 0:9c2b09ecb20f 537
dudmuck 0:9c2b09ecb20f 538 fsk.RegRssiConfig.octet = radio.read_reg(REG_FSK_RSSICONFIG);
dudmuck 0:9c2b09ecb20f 539 printf("RssiOffset:%ddB smoothing:%dsamples\r\n", fsk.RegRssiConfig.bits.RssiOffset, 1 << (fsk.RegRssiConfig.bits.RssiSmoothing+1));
dudmuck 0:9c2b09ecb20f 540
dudmuck 0:9c2b09ecb20f 541
dudmuck 0:9c2b09ecb20f 542 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
dudmuck 0:9c2b09ecb20f 543
dudmuck 0:9c2b09ecb20f 544 if (fsk.RegPktConfig2.bits.DataModePacket) {
dudmuck 0:9c2b09ecb20f 545 uint16_t len;
dudmuck 0:9c2b09ecb20f 546 /* packet mode */
dudmuck 0:9c2b09ecb20f 547 len = fsk_get_PayloadLength();
dudmuck 0:9c2b09ecb20f 548 printf("packet RegPayloadLength:0x%03x ", len);
dudmuck 0:9c2b09ecb20f 549
dudmuck 0:9c2b09ecb20f 550 if (fsk.RegPktConfig2.bits.BeaconOn)
dudmuck 0:9c2b09ecb20f 551 printf("BeaconOn ");
dudmuck 0:9c2b09ecb20f 552
dudmuck 0:9c2b09ecb20f 553 fsk.RegFifoThreshold.octet = radio.read_reg(REG_FSK_FIFOTHRESH);
dudmuck 0:9c2b09ecb20f 554 printf("FifoThreshold:%d TxStartCondition:", fsk.RegFifoThreshold.bits.FifoThreshold);
dudmuck 0:9c2b09ecb20f 555 if (fsk.RegFifoThreshold.bits.TxStartCondition)
dudmuck 0:9c2b09ecb20f 556 printf("!FifoEmpty");
dudmuck 0:9c2b09ecb20f 557 else
dudmuck 0:9c2b09ecb20f 558 printf("FifoLevel");
dudmuck 0:9c2b09ecb20f 559
dudmuck 0:9c2b09ecb20f 560 printf("\r\nAutoRestartRxMode:");
dudmuck 0:9c2b09ecb20f 561 switch (fsk.RegSyncConfig.bits.AutoRestartRxMode) {
dudmuck 0:9c2b09ecb20f 562 case 0: printf("off "); break;
dudmuck 0:9c2b09ecb20f 563 case 1: printf("no-pll-wait "); break;
dudmuck 0:9c2b09ecb20f 564 case 2: printf("pll-wait "); break;
dudmuck 0:9c2b09ecb20f 565 case 3: printf("3 "); break;
dudmuck 0:9c2b09ecb20f 566 }
dudmuck 0:9c2b09ecb20f 567 //...todo
dudmuck 0:9c2b09ecb20f 568
dudmuck 0:9c2b09ecb20f 569 printf("PreambleSize:%d ", radio.read_u16(REG_FSK_PREAMBLEMSB));
dudmuck 0:9c2b09ecb20f 570
dudmuck 0:9c2b09ecb20f 571 fsk.RegOokPeak.octet = radio.read_reg(REG_FSK_OOKPEAK);
dudmuck 0:9c2b09ecb20f 572 if (fsk.RegOokPeak.bits.barker_en)
dudmuck 0:9c2b09ecb20f 573 printf("barker ");
dudmuck 0:9c2b09ecb20f 574 if (!fsk.RegOokPeak.bits.BitSyncOn)
dudmuck 0:9c2b09ecb20f 575 printf("BitSyncOff ");
dudmuck 0:9c2b09ecb20f 576 //...todo
dudmuck 0:9c2b09ecb20f 577
dudmuck 0:9c2b09ecb20f 578 fsk.RegPktConfig1.octet = radio.read_reg(REG_FSK_PACKETCONFIG1);
dudmuck 0:9c2b09ecb20f 579 if (fsk.RegPktConfig1.bits.PacketFormatVariable)
dudmuck 0:9c2b09ecb20f 580 printf("variable");
dudmuck 0:9c2b09ecb20f 581 else
dudmuck 0:9c2b09ecb20f 582 printf("fixed");
dudmuck 0:9c2b09ecb20f 583 printf("-length\r\ncrc");
dudmuck 0:9c2b09ecb20f 584 if (fsk.RegPktConfig1.bits.CrcOn) {
dudmuck 0:9c2b09ecb20f 585 printf("On");
dudmuck 0:9c2b09ecb20f 586 } else
dudmuck 0:9c2b09ecb20f 587 printf("Off");
dudmuck 0:9c2b09ecb20f 588 printf(" crctype:");
dudmuck 0:9c2b09ecb20f 589 if (fsk.RegPktConfig1.bits.CrCWhiteningType)
dudmuck 0:9c2b09ecb20f 590 printf("IBM");
dudmuck 0:9c2b09ecb20f 591 else
dudmuck 0:9c2b09ecb20f 592 printf("CCITT");
dudmuck 0:9c2b09ecb20f 593 printf(" dcFree:");
dudmuck 0:9c2b09ecb20f 594 switch (fsk.RegPktConfig1.bits.DcFree) {
dudmuck 0:9c2b09ecb20f 595 case 0: printf("none "); break;
dudmuck 0:9c2b09ecb20f 596 case 1: printf("Manchester "); break;
dudmuck 0:9c2b09ecb20f 597 case 2: printf("Whitening "); break;
dudmuck 0:9c2b09ecb20f 598 case 3: printf("reserved "); break;
dudmuck 0:9c2b09ecb20f 599 }
dudmuck 0:9c2b09ecb20f 600 fsk_printAddressFiltering();
dudmuck 0:9c2b09ecb20f 601
dudmuck 0:9c2b09ecb20f 602 printf("\r\n");
dudmuck 0:9c2b09ecb20f 603 fsk_print_IrqFlags2();
dudmuck 0:9c2b09ecb20f 604 } else {
dudmuck 0:9c2b09ecb20f 605 /* continuous mode */
dudmuck 0:9c2b09ecb20f 606 printf("continuous ");
dudmuck 0:9c2b09ecb20f 607 }
dudmuck 0:9c2b09ecb20f 608
dudmuck 0:9c2b09ecb20f 609 fsk.RegPreambleDetect.octet = radio.read_reg(REG_FSK_PREAMBLEDETECT);
dudmuck 0:9c2b09ecb20f 610 printf("PreambleDetect:");
dudmuck 0:9c2b09ecb20f 611 if (fsk.RegPreambleDetect.bits.PreambleDetectorOn) {
dudmuck 0:9c2b09ecb20f 612 printf("size=%d,tol=%d ",
dudmuck 0:9c2b09ecb20f 613 fsk.RegPreambleDetect.bits.PreambleDetectorSize,
dudmuck 0:9c2b09ecb20f 614 fsk.RegPreambleDetect.bits.PreambleDetectorTol);
dudmuck 0:9c2b09ecb20f 615 } else
dudmuck 0:9c2b09ecb20f 616 printf("Off ");
dudmuck 0:9c2b09ecb20f 617
dudmuck 0:9c2b09ecb20f 618 printf(" syncsize:%d ", fsk.RegSyncConfig.bits.SyncSize);
dudmuck 0:9c2b09ecb20f 619 printf(" : %02x ", radio.read_reg(REG_FSK_SYNCVALUE1));
dudmuck 0:9c2b09ecb20f 620 printf("%02x ", radio.read_reg(REG_FSK_SYNCVALUE2));
dudmuck 0:9c2b09ecb20f 621 printf("%02x ", radio.read_reg(REG_FSK_SYNCVALUE3));
dudmuck 0:9c2b09ecb20f 622 printf("%02x ", radio.read_reg(REG_FSK_SYNCVALUE4));
dudmuck 0:9c2b09ecb20f 623 printf("\r\n"); // end sync config
dudmuck 0:9c2b09ecb20f 624
dudmuck 0:9c2b09ecb20f 625 fsk.RegAfcFei.octet = radio.read_reg(REG_FSK_AFCFEI);
dudmuck 0:9c2b09ecb20f 626 printf("afcAutoClear:");
dudmuck 0:9c2b09ecb20f 627 if (fsk.RegAfcFei.bits.AfcAutoClearOn)
dudmuck 0:9c2b09ecb20f 628 printf("On");
dudmuck 0:9c2b09ecb20f 629 else
dudmuck 0:9c2b09ecb20f 630 printf("OFF");
dudmuck 0:9c2b09ecb20f 631 printf(" afc:%dHz ", (int)(FREQ_STEP_HZ * radio.read_s16(REG_FSK_AFCMSB)));
dudmuck 0:9c2b09ecb20f 632
dudmuck 0:9c2b09ecb20f 633 printf("fei:%dHz\r\n", (int)(FREQ_STEP_HZ * radio.read_s16(REG_FSK_FEIMSB)));
dudmuck 0:9c2b09ecb20f 634
dudmuck 0:9c2b09ecb20f 635 fsk.RegRxConfig.octet = radio.read_reg(REG_FSK_RXCONFIG);
dudmuck 0:9c2b09ecb20f 636 printf("RxTrigger:");
dudmuck 0:9c2b09ecb20f 637 switch (fsk.RegRxConfig.bits.RxTrigger) {
dudmuck 0:9c2b09ecb20f 638 case 0: printf("none "); break;
dudmuck 0:9c2b09ecb20f 639 case 1: printf("rssi "); break;
dudmuck 0:9c2b09ecb20f 640 case 6: printf("preamble "); break;
dudmuck 0:9c2b09ecb20f 641 case 7: printf("both "); break;
dudmuck 0:9c2b09ecb20f 642 default: printf("-%d- ", fsk.RegRxConfig.bits.RxTrigger); break;
dudmuck 0:9c2b09ecb20f 643 }
dudmuck 0:9c2b09ecb20f 644 printf("AfcAuto:");
dudmuck 0:9c2b09ecb20f 645 if (fsk.RegRxConfig.bits.AfcAutoOn)
dudmuck 0:9c2b09ecb20f 646 printf("On ");
dudmuck 0:9c2b09ecb20f 647 else
dudmuck 0:9c2b09ecb20f 648 printf("OFF ");
dudmuck 0:9c2b09ecb20f 649 if (!fsk.RegRxConfig.bits.AgcAutoOn) {
dudmuck 0:9c2b09ecb20f 650 radio.RegLna.octet = radio.read_reg(REG_LNA);
dudmuck 0:9c2b09ecb20f 651 printf("AgcAutoOff:G%d ", radio.RegLna.bits.LnaGain);
dudmuck 0:9c2b09ecb20f 652 }
dudmuck 0:9c2b09ecb20f 653
dudmuck 0:9c2b09ecb20f 654 fsk.RegTimerResol.octet = radio.read_reg(REG_FSK_TIMERRESOL);
dudmuck 0:9c2b09ecb20f 655 if (fsk.RegTimerResol.bits.hlm_started)
dudmuck 0:9c2b09ecb20f 656 printf("hlm_started ");
dudmuck 0:9c2b09ecb20f 657 else
dudmuck 0:9c2b09ecb20f 658 printf("hlm_stopped ");
dudmuck 0:9c2b09ecb20f 659
dudmuck 0:9c2b09ecb20f 660 fsk.RegRssiThresh = radio.read_reg(REG_FSK_RSSITHRESH);
dudmuck 0:9c2b09ecb20f 661 printf("rssiThreshold:-%.1f@%02x ", fsk.RegRssiThresh / 2.0, REG_FSK_RSSITHRESH);
dudmuck 0:9c2b09ecb20f 662
dudmuck 0:9c2b09ecb20f 663 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:9c2b09ecb20f 664 if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER ||
dudmuck 0:9c2b09ecb20f 665 radio.RegOpMode.bits.Mode == RF_OPMODE_SYNTHESIZER_RX)
dudmuck 0:9c2b09ecb20f 666 {
dudmuck 0:9c2b09ecb20f 667 printf("rssi:-%.1f ", radio.read_reg(REG_FSK_RSSIVALUE) / 2.0);
dudmuck 0:9c2b09ecb20f 668 }
dudmuck 0:9c2b09ecb20f 669
dudmuck 0:9c2b09ecb20f 670 fsk.RegSeqConfig1.octet = radio.read_reg(REG_FSK_SEQCONFIG1);
dudmuck 0:9c2b09ecb20f 671 printf("\r\nsequencer: ");
dudmuck 0:9c2b09ecb20f 672 printf("FromStart:");
dudmuck 0:9c2b09ecb20f 673 switch (fsk.RegSeqConfig1.bits.FromStart) {
dudmuck 0:9c2b09ecb20f 674 case 0:
dudmuck 0:9c2b09ecb20f 675 printf("lowPowerSelection-");
dudmuck 0:9c2b09ecb20f 676 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 677 printf("idle");
dudmuck 0:9c2b09ecb20f 678 else
dudmuck 0:9c2b09ecb20f 679 printf("sequencerOff");
dudmuck 0:9c2b09ecb20f 680 break;
dudmuck 0:9c2b09ecb20f 681 case 1: printf("rx"); break;
dudmuck 0:9c2b09ecb20f 682 case 2: printf("tx"); break;
dudmuck 0:9c2b09ecb20f 683 case 3: printf("tx on fifolevel"); break;
dudmuck 0:9c2b09ecb20f 684 }
dudmuck 0:9c2b09ecb20f 685 printf(" lowPowerSelection:");
dudmuck 0:9c2b09ecb20f 686 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 687 printf("idle");
dudmuck 0:9c2b09ecb20f 688 else
dudmuck 0:9c2b09ecb20f 689 printf("SequencerOff");
dudmuck 0:9c2b09ecb20f 690 if (fsk.RegSeqConfig1.bits.FromStart != 0 &&
dudmuck 0:9c2b09ecb20f 691 fsk.RegSeqConfig1.bits.LowPowerSelection != 0)
dudmuck 0:9c2b09ecb20f 692 { // if sequencer enabled:
dudmuck 0:9c2b09ecb20f 693 printf("\r\nsequencer: IdleMode:");
dudmuck 0:9c2b09ecb20f 694 if (fsk.RegSeqConfig1.bits.IdleMode)
dudmuck 0:9c2b09ecb20f 695 printf("Sleep");
dudmuck 0:9c2b09ecb20f 696 else
dudmuck 0:9c2b09ecb20f 697 printf("standby");
dudmuck 0:9c2b09ecb20f 698 printf("\r\nsequencer: FromIdle to:");
dudmuck 0:9c2b09ecb20f 699 if (fsk.RegSeqConfig1.bits.FromIdle)
dudmuck 0:9c2b09ecb20f 700 printf("rx");
dudmuck 0:9c2b09ecb20f 701 else
dudmuck 0:9c2b09ecb20f 702 printf("tx");
dudmuck 0:9c2b09ecb20f 703 printf("\r\nsequencer: FromTransmit to:");
dudmuck 0:9c2b09ecb20f 704 if (fsk.RegSeqConfig1.bits.FromTransmit)
dudmuck 0:9c2b09ecb20f 705 printf("rx-on-PacketSent");
dudmuck 0:9c2b09ecb20f 706 else {
dudmuck 0:9c2b09ecb20f 707 printf("lowPowerSelection-");
dudmuck 0:9c2b09ecb20f 708 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 709 printf("idle");
dudmuck 0:9c2b09ecb20f 710 else
dudmuck 0:9c2b09ecb20f 711 printf("SequencerOff");
dudmuck 0:9c2b09ecb20f 712 printf("-on-PacketSent");
dudmuck 0:9c2b09ecb20f 713 }
dudmuck 0:9c2b09ecb20f 714 fsk.RegSeqConfig2.octet = radio.read_reg(REG_FSK_SEQCONFIG2);
dudmuck 0:9c2b09ecb20f 715 printf("\r\nsequencer: FromReceive:");
dudmuck 0:9c2b09ecb20f 716 switch (fsk.RegSeqConfig2.bits.FromReceive) {
dudmuck 0:9c2b09ecb20f 717 case 1: printf("PacketRecevied on PayloadReady"); break;
dudmuck 0:9c2b09ecb20f 718 case 2:
dudmuck 0:9c2b09ecb20f 719 printf("lowPowerSelection-");
dudmuck 0:9c2b09ecb20f 720 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 721 printf("idle");
dudmuck 0:9c2b09ecb20f 722 else
dudmuck 0:9c2b09ecb20f 723 printf("SequencerOff");
dudmuck 0:9c2b09ecb20f 724 printf("-on-payloadReady");
dudmuck 0:9c2b09ecb20f 725 break;
dudmuck 0:9c2b09ecb20f 726 case 3: printf("PacketRecevied-on-CrcOk"); break;
dudmuck 0:9c2b09ecb20f 727 case 4: printf("SequencerOff-on-Rssi"); break;
dudmuck 0:9c2b09ecb20f 728 case 5: printf("SequencerOff-on-SyncAddress"); break;
dudmuck 0:9c2b09ecb20f 729 case 6: printf("SequencerOff-PreambleDetect"); break;
dudmuck 0:9c2b09ecb20f 730 default: printf("-%d-", fsk.RegSeqConfig2.bits.FromReceive); break;
dudmuck 0:9c2b09ecb20f 731 }
dudmuck 0:9c2b09ecb20f 732 printf("\r\nsequencer: FromRxTimeout:");
dudmuck 0:9c2b09ecb20f 733 switch (fsk.RegSeqConfig2.bits.FromRxTimeout) {
dudmuck 0:9c2b09ecb20f 734 case 0: printf("rx"); break;
dudmuck 0:9c2b09ecb20f 735 case 1: printf("tx"); break;
dudmuck 0:9c2b09ecb20f 736 case 2:
dudmuck 0:9c2b09ecb20f 737 printf("lowPowerSelection-");
dudmuck 0:9c2b09ecb20f 738 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 739 printf("idle");
dudmuck 0:9c2b09ecb20f 740 else
dudmuck 0:9c2b09ecb20f 741 printf("SequencerOff");
dudmuck 0:9c2b09ecb20f 742 break;
dudmuck 0:9c2b09ecb20f 743 case 3: printf("SequencerOff"); break;
dudmuck 0:9c2b09ecb20f 744 }
dudmuck 0:9c2b09ecb20f 745 printf("\r\nsequencer: FromPacketReceived to:");
dudmuck 0:9c2b09ecb20f 746 switch (fsk.RegSeqConfig2.bits.FromPacketReceived) {
dudmuck 0:9c2b09ecb20f 747 case 0: printf("SequencerOff"); break;
dudmuck 0:9c2b09ecb20f 748 case 1: printf("tx on FifoEmpty"); break;
dudmuck 0:9c2b09ecb20f 749 case 2:
dudmuck 0:9c2b09ecb20f 750 printf("lowPowerSelection-");
dudmuck 0:9c2b09ecb20f 751 if (fsk.RegSeqConfig1.bits.LowPowerSelection)
dudmuck 0:9c2b09ecb20f 752 printf("idle");
dudmuck 0:9c2b09ecb20f 753 else
dudmuck 0:9c2b09ecb20f 754 printf("sequencerOff");
dudmuck 0:9c2b09ecb20f 755 break;
dudmuck 0:9c2b09ecb20f 756 case 3: printf("rx via fs"); break;
dudmuck 0:9c2b09ecb20f 757 case 4: printf("rx"); break;
dudmuck 0:9c2b09ecb20f 758 }
dudmuck 0:9c2b09ecb20f 759
dudmuck 0:9c2b09ecb20f 760 fsk.RegTimerResol.octet = radio.read_reg(REG_FSK_TIMERRESOL);
dudmuck 0:9c2b09ecb20f 761 printf("\r\nsequencer: timer1:");
dudmuck 0:9c2b09ecb20f 762 switch (fsk.RegTimerResol.bits.timer1_resol) {
dudmuck 0:9c2b09ecb20f 763 case 0: printf("off"); break;
dudmuck 0:9c2b09ecb20f 764 case 1: printf("%dus", radio.read_reg(REG_FSK_TIMER1COEF) * 64); break;
dudmuck 0:9c2b09ecb20f 765 case 2: printf("%.1fms", radio.read_reg(REG_FSK_TIMER1COEF) * 4.1); break;
dudmuck 0:9c2b09ecb20f 766 case 3: printf("%.1fs", radio.read_reg(REG_FSK_TIMER1COEF) * 0.262); break;
dudmuck 0:9c2b09ecb20f 767 }
dudmuck 0:9c2b09ecb20f 768
dudmuck 0:9c2b09ecb20f 769 printf(" timer2:");
dudmuck 0:9c2b09ecb20f 770 switch (fsk.RegTimerResol.bits.timer2_resol) {
dudmuck 0:9c2b09ecb20f 771 case 0: printf("off"); break;
dudmuck 0:9c2b09ecb20f 772 case 1: printf("%dus", radio.read_reg(REG_FSK_TIMER2COEF) * 64); break;
dudmuck 0:9c2b09ecb20f 773 case 2: printf("%.1fms", radio.read_reg(REG_FSK_TIMER2COEF) * 4.1); break;
dudmuck 0:9c2b09ecb20f 774 case 3: printf("%.1fs", radio.read_reg(REG_FSK_TIMER2COEF) * 0.262); break;
dudmuck 0:9c2b09ecb20f 775 }
dudmuck 0:9c2b09ecb20f 776 } // ..if sequencer enabled
dudmuck 0:9c2b09ecb20f 777
dudmuck 0:9c2b09ecb20f 778 printf("\r\nIrqFlags1:");
dudmuck 0:9c2b09ecb20f 779 RegIrqFlags1.octet = radio.read_reg(REG_FSK_IRQFLAGS1);
dudmuck 0:9c2b09ecb20f 780 if (RegIrqFlags1.bits.ModeReady)
dudmuck 0:9c2b09ecb20f 781 printf("ModeReady ");
dudmuck 0:9c2b09ecb20f 782 if (RegIrqFlags1.bits.RxReady)
dudmuck 0:9c2b09ecb20f 783 printf("RxReady ");
dudmuck 0:9c2b09ecb20f 784 if (RegIrqFlags1.bits.TxReady)
dudmuck 0:9c2b09ecb20f 785 printf("TxReady ");
dudmuck 0:9c2b09ecb20f 786 if (RegIrqFlags1.bits.PllLock)
dudmuck 0:9c2b09ecb20f 787 printf("PllLock ");
dudmuck 0:9c2b09ecb20f 788 if (RegIrqFlags1.bits.Rssi)
dudmuck 0:9c2b09ecb20f 789 printf("Rssi ");
dudmuck 0:9c2b09ecb20f 790 if (RegIrqFlags1.bits.Timeout)
dudmuck 0:9c2b09ecb20f 791 printf("Timeout ");
dudmuck 0:9c2b09ecb20f 792 if (RegIrqFlags1.bits.PreambleDetect)
dudmuck 0:9c2b09ecb20f 793 printf("PreambleDetect ");
dudmuck 0:9c2b09ecb20f 794 if (RegIrqFlags1.bits.SyncAddressMatch)
dudmuck 0:9c2b09ecb20f 795 printf("SyncAddressMatch ");
dudmuck 0:9c2b09ecb20f 796
dudmuck 0:9c2b09ecb20f 797 printf("\r\n");
dudmuck 0:9c2b09ecb20f 798
dudmuck 0:9c2b09ecb20f 799 /* TODO if (!SX1272FSK->RegPktConfig1.bits.PacketFormatVariable) { // if fixed-length packet format:
dudmuck 0:9c2b09ecb20f 800 s = fsk_get_PayloadLength();
dudmuck 0:9c2b09ecb20f 801 if (s > FSK_LARGE_PKT_THRESHOLD)
dudmuck 0:9c2b09ecb20f 802 flags.fifo_flow_ctl = 1;
dudmuck 0:9c2b09ecb20f 803 else
dudmuck 0:9c2b09ecb20f 804 flags.fifo_flow_ctl = 0;
dudmuck 0:9c2b09ecb20f 805 }*/
dudmuck 0:9c2b09ecb20f 806
dudmuck 0:9c2b09ecb20f 807 fsk.RegImageCal.octet = radio.read_reg(REG_FSK_IMAGECAL);
dudmuck 0:9c2b09ecb20f 808 if (fsk.RegImageCal.bits.TempMonitorOff) {
dudmuck 0:9c2b09ecb20f 809 printf("TempMonitorOff[\r0m\n");
dudmuck 0:9c2b09ecb20f 810 } else {
dudmuck 0:9c2b09ecb20f 811 printf("TempThreshold:");
dudmuck 0:9c2b09ecb20f 812 switch (fsk.RegImageCal.bits.TempThreshold) {
dudmuck 0:9c2b09ecb20f 813 case 0: printf("5C"); break;
dudmuck 0:9c2b09ecb20f 814 case 1: printf("10C"); break;
dudmuck 0:9c2b09ecb20f 815 case 2: printf("15C"); break;
dudmuck 0:9c2b09ecb20f 816 case 3: printf("20C"); break;
dudmuck 0:9c2b09ecb20f 817 }
dudmuck 0:9c2b09ecb20f 818 printf("\r\n");
dudmuck 0:9c2b09ecb20f 819 }
dudmuck 0:9c2b09ecb20f 820 if (fsk.RegImageCal.bits.ImageCalRunning)
dudmuck 0:9c2b09ecb20f 821 printf("ImageCalRunning[\r0m\n");
dudmuck 0:9c2b09ecb20f 822
dudmuck 0:9c2b09ecb20f 823 /* printf("flags.fifo_flow_ctl:%d pktidx:%d rx_pktlen:%d", flags.fifo_flow_ctl, pktidx, rx_pktlen);
dudmuck 0:9c2b09ecb20f 824 printf("\n");
dudmuck 0:9c2b09ecb20f 825
dudmuck 0:9c2b09ecb20f 826 //printf("DIO0_PIN:%d\n", digitalRead(DIO0_PIN));
dudmuck 0:9c2b09ecb20f 827 printf("pkt_buf_len=%d remaining=%d\n", pk*/
dudmuck 0:9c2b09ecb20f 828 }
dudmuck 0:9c2b09ecb20f 829
dudmuck 0:9c2b09ecb20f 830 void printOpMode()
dudmuck 0:9c2b09ecb20f 831 {
dudmuck 0:9c2b09ecb20f 832 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:9c2b09ecb20f 833 switch (radio.RegOpMode.bits.Mode) {
dudmuck 0:9c2b09ecb20f 834 case RF_OPMODE_SLEEP: printf("sleep"); break;
dudmuck 0:9c2b09ecb20f 835 case RF_OPMODE_STANDBY: printf("stby"); break;
dudmuck 0:9c2b09ecb20f 836 case RF_OPMODE_SYNTHESIZER_TX: printf("fstx"); break;
dudmuck 0:9c2b09ecb20f 837 case RF_OPMODE_TRANSMITTER: printf("tx"); break;
dudmuck 0:9c2b09ecb20f 838 case RF_OPMODE_SYNTHESIZER_RX: printf("fsrx"); break;
dudmuck 0:9c2b09ecb20f 839 case RF_OPMODE_RECEIVER: printf("rx"); break;
dudmuck 0:9c2b09ecb20f 840 case 6:
dudmuck 0:9c2b09ecb20f 841 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 842 printf("rxs");
dudmuck 0:9c2b09ecb20f 843 else
dudmuck 0:9c2b09ecb20f 844 printf("-6-");
dudmuck 0:9c2b09ecb20f 845 break; // todo: different lora/fsk
dudmuck 0:9c2b09ecb20f 846 case 7:
dudmuck 0:9c2b09ecb20f 847 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 848 printf("cad");
dudmuck 0:9c2b09ecb20f 849 else
dudmuck 0:9c2b09ecb20f 850 printf("-7-");
dudmuck 0:9c2b09ecb20f 851 break; // todo: different lora/fsk
dudmuck 0:9c2b09ecb20f 852 }
dudmuck 0:9c2b09ecb20f 853 }
dudmuck 0:9c2b09ecb20f 854
dudmuck 0:9c2b09ecb20f 855 void
dudmuck 0:9c2b09ecb20f 856 printPa()
dudmuck 0:9c2b09ecb20f 857 {
dudmuck 0:9c2b09ecb20f 858 radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
dudmuck 0:9c2b09ecb20f 859 if (radio.RegPaConfig.bits.PaSelect) {
dudmuck 0:9c2b09ecb20f 860 float output_dBm = 17 - (15-radio.RegPaConfig.bits.OutputPower);
dudmuck 0:9c2b09ecb20f 861 printf(" PABOOST OutputPower=%.1fdBm", output_dBm);
dudmuck 0:9c2b09ecb20f 862 } else {
dudmuck 0:9c2b09ecb20f 863 float pmax = (0.6*radio.RegPaConfig.bits.MaxPower) + 10.8;
dudmuck 0:9c2b09ecb20f 864 float output_dBm = pmax - (15-radio.RegPaConfig.bits.OutputPower);
dudmuck 0:9c2b09ecb20f 865 printf(" RFO pmax=%.1fdBm OutputPower=%.1fdBm", pmax, output_dBm);
dudmuck 0:9c2b09ecb20f 866 }
dudmuck 0:9c2b09ecb20f 867 }
dudmuck 0:9c2b09ecb20f 868
dudmuck 0:9c2b09ecb20f 869 void /* things always present, whether lora or fsk */
dudmuck 0:9c2b09ecb20f 870 common_print_status()
dudmuck 0:9c2b09ecb20f 871 {
dudmuck 0:9c2b09ecb20f 872 printf("version:0x%02x %.3fMHz ", radio.read_reg(REG_VERSION), radio.get_frf_MHz());
dudmuck 0:9c2b09ecb20f 873 printOpMode();
dudmuck 0:9c2b09ecb20f 874
dudmuck 0:9c2b09ecb20f 875 printPa();
dudmuck 0:9c2b09ecb20f 876
dudmuck 0:9c2b09ecb20f 877 radio.RegOcp.octet = radio.read_reg(REG_OCP);
dudmuck 0:9c2b09ecb20f 878 if (radio.RegOcp.bits.OcpOn) {
dudmuck 0:9c2b09ecb20f 879 int imax = 0;
dudmuck 0:9c2b09ecb20f 880 if (radio.RegOcp.bits.OcpTrim < 16)
dudmuck 0:9c2b09ecb20f 881 imax = 45 + (5 * radio.RegOcp.bits.OcpTrim);
dudmuck 0:9c2b09ecb20f 882 else if (radio.RegOcp.bits.OcpTrim < 28)
dudmuck 0:9c2b09ecb20f 883 imax = -30 + (10 * radio.RegOcp.bits.OcpTrim);
dudmuck 0:9c2b09ecb20f 884 else
dudmuck 0:9c2b09ecb20f 885 imax = 240;
dudmuck 0:9c2b09ecb20f 886 printf(" OcpOn %dmA ", imax);
dudmuck 0:9c2b09ecb20f 887 } else
dudmuck 0:9c2b09ecb20f 888 printf(" OcpOFF ");
dudmuck 0:9c2b09ecb20f 889
dudmuck 0:9c2b09ecb20f 890 printf("\r\n");
dudmuck 0:9c2b09ecb20f 891
dudmuck 0:9c2b09ecb20f 892 }
dudmuck 0:9c2b09ecb20f 893
dudmuck 0:9c2b09ecb20f 894 void print_rx_buf(int len)
dudmuck 0:9c2b09ecb20f 895 {
dudmuck 0:9c2b09ecb20f 896 int i;
dudmuck 0:9c2b09ecb20f 897
dudmuck 0:9c2b09ecb20f 898 printf("000:");
dudmuck 0:9c2b09ecb20f 899 for (i = 0; i < len; i++) {
dudmuck 0:9c2b09ecb20f 900 //printf("(%d)%02x ", i % 16, rx_buf[i]);
dudmuck 0:9c2b09ecb20f 901 printf("%02x ", radio.rx_buf[i]);
dudmuck 0:9c2b09ecb20f 902 if (i % 16 == 15 && i != len-1)
dudmuck 0:9c2b09ecb20f 903 printf("\r\n%03d:", i+1);
dudmuck 0:9c2b09ecb20f 904
dudmuck 0:9c2b09ecb20f 905 }
dudmuck 0:9c2b09ecb20f 906 printf("\r\n");
dudmuck 0:9c2b09ecb20f 907 }
dudmuck 0:9c2b09ecb20f 908
dudmuck 0:9c2b09ecb20f 909 void
dudmuck 0:9c2b09ecb20f 910 service_radio()
dudmuck 0:9c2b09ecb20f 911 {
dudmuck 0:9c2b09ecb20f 912 service_action_e act;
dudmuck 0:9c2b09ecb20f 913
dudmuck 0:9c2b09ecb20f 914 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 915
dudmuck 0:9c2b09ecb20f 916 act = lora.service();
dudmuck 0:9c2b09ecb20f 917
dudmuck 0:9c2b09ecb20f 918 switch (act) {
dudmuck 0:9c2b09ecb20f 919 case SERVICE_READ_FIFO:
dudmuck 0:9c2b09ecb20f 920 float dbm;
dudmuck 0:9c2b09ecb20f 921 if (app == APP_NONE) {
dudmuck 0:9c2b09ecb20f 922 printLoraIrqs_(false);
dudmuck 0:9c2b09ecb20f 923 if (lora.RegHopPeriod > 0) {
dudmuck 0:9c2b09ecb20f 924 lora.RegHopChannel.octet = radio.read_reg(REG_LR_HOPCHANNEL);
dudmuck 0:9c2b09ecb20f 925 printf("HopCH:%d ", lora.RegHopChannel.bits.FhssPresentChannel);
dudmuck 0:9c2b09ecb20f 926 }
dudmuck 0:9c2b09ecb20f 927 lora_printCodingRate(true); // true: of received packet
dudmuck 0:9c2b09ecb20f 928 dbm = lora.get_pkt_rssi();
dudmuck 0:9c2b09ecb20f 929 printf(" crc%s %.1fdB %.1fdBm\r\n",
dudmuck 0:9c2b09ecb20f 930 lora.RegHopChannel.bits.RxPayloadCrcOn ? "On" : "OFF",
dudmuck 0:9c2b09ecb20f 931 lora.RegPktSnrValue / 4.0,
dudmuck 0:9c2b09ecb20f 932 dbm
dudmuck 0:9c2b09ecb20f 933 );
dudmuck 0:9c2b09ecb20f 934 print_rx_buf(lora.RegRxNbBytes);
dudmuck 0:9c2b09ecb20f 935 } else if (app == APP_CHAT) {
dudmuck 0:9c2b09ecb20f 936 if (lora.RegHopChannel.bits.RxPayloadCrcOn) {
dudmuck 0:9c2b09ecb20f 937 if (lora.RegIrqFlags.bits.PayloadCrcError)
dudmuck 0:9c2b09ecb20f 938 printf("crcError\r\n");
dudmuck 0:9c2b09ecb20f 939 else {
dudmuck 0:9c2b09ecb20f 940 int n = lora.RegRxNbBytes;
dudmuck 0:9c2b09ecb20f 941 radio.rx_buf[n++] = '\r';
dudmuck 0:9c2b09ecb20f 942 radio.rx_buf[n++] = '\n';
dudmuck 0:9c2b09ecb20f 943 radio.rx_buf[n] = 0; // null terminate
dudmuck 0:9c2b09ecb20f 944 printf((char *)radio.rx_buf);
dudmuck 0:9c2b09ecb20f 945 }
dudmuck 0:9c2b09ecb20f 946 } else
dudmuck 0:9c2b09ecb20f 947 printf("crcOff\r\n");
dudmuck 0:9c2b09ecb20f 948
dudmuck 0:9c2b09ecb20f 949 // clear Irq flags
dudmuck 0:9c2b09ecb20f 950 radio.write_reg(REG_LR_IRQFLAGS, lora.RegIrqFlags.octet);
dudmuck 0:9c2b09ecb20f 951 // should still be in receive mode
dudmuck 0:9c2b09ecb20f 952 }
dudmuck 0:9c2b09ecb20f 953 break;
dudmuck 0:9c2b09ecb20f 954 case SERVICE_TX_DONE:
dudmuck 0:9c2b09ecb20f 955 if (app == APP_CHAT) {
dudmuck 0:9c2b09ecb20f 956 lora.start_rx();
dudmuck 0:9c2b09ecb20f 957 }
dudmuck 0:9c2b09ecb20f 958 break;
dudmuck 0:9c2b09ecb20f 959 case SERVICE_ERROR:
dudmuck 0:9c2b09ecb20f 960 printf("error\r\n");
dudmuck 0:9c2b09ecb20f 961 break;
dudmuck 0:9c2b09ecb20f 962 } // ...switch (act)
dudmuck 0:9c2b09ecb20f 963 } else {
dudmuck 0:9c2b09ecb20f 964 /* FSK: */
dudmuck 0:9c2b09ecb20f 965 act = fsk.service();
dudmuck 0:9c2b09ecb20f 966
dudmuck 0:9c2b09ecb20f 967 switch (act) {
dudmuck 0:9c2b09ecb20f 968 case SERVICE_READ_FIFO:
dudmuck 0:9c2b09ecb20f 969 if (app == APP_CHAT) {
dudmuck 0:9c2b09ecb20f 970 int n = fsk.rx_buf_length;
dudmuck 0:9c2b09ecb20f 971 radio.rx_buf[n++] = '\r';
dudmuck 0:9c2b09ecb20f 972 radio.rx_buf[n++] = '\n';
dudmuck 0:9c2b09ecb20f 973 radio.rx_buf[n] = 0; // null terminate
dudmuck 0:9c2b09ecb20f 974 printf((char *)radio.rx_buf);
dudmuck 0:9c2b09ecb20f 975 } else {
dudmuck 0:9c2b09ecb20f 976 int i;
dudmuck 0:9c2b09ecb20f 977 if (fsk.RegRxConfig.bits.AfcAutoOn)
dudmuck 0:9c2b09ecb20f 978 printf("%dHz ", (int)(FREQ_STEP_HZ * fsk.RegAfcValue));
dudmuck 0:9c2b09ecb20f 979 printf("%d: ", fsk.rx_buf_length);
dudmuck 0:9c2b09ecb20f 980 for (i = 0; i < fsk.rx_buf_length; i++)
dudmuck 0:9c2b09ecb20f 981 printf("%02x ", radio.rx_buf[i]);
dudmuck 0:9c2b09ecb20f 982 printf("\r\n");
dudmuck 0:9c2b09ecb20f 983 }
dudmuck 0:9c2b09ecb20f 984 break;
dudmuck 0:9c2b09ecb20f 985 case SERVICE_TX_DONE:
dudmuck 0:9c2b09ecb20f 986 if (app == APP_CHAT) {
dudmuck 0:9c2b09ecb20f 987 fsk.start_rx();
dudmuck 0:9c2b09ecb20f 988 }
dudmuck 0:9c2b09ecb20f 989 break;
dudmuck 0:9c2b09ecb20f 990 } // ...switch (act)
dudmuck 0:9c2b09ecb20f 991 }
dudmuck 0:9c2b09ecb20f 992 }
dudmuck 0:9c2b09ecb20f 993
dudmuck 0:9c2b09ecb20f 994 int get_kbd_str(char* buf, int size)
dudmuck 0:9c2b09ecb20f 995 {
dudmuck 0:9c2b09ecb20f 996 char c;
dudmuck 0:9c2b09ecb20f 997 int i;
dudmuck 0:9c2b09ecb20f 998 static int prev_len;
dudmuck 0:9c2b09ecb20f 999
dudmuck 0:9c2b09ecb20f 1000 for (i = 0;;) {
dudmuck 0:9c2b09ecb20f 1001 if (pc.readable()) {
dudmuck 0:9c2b09ecb20f 1002 c = pc.getc();
dudmuck 0:9c2b09ecb20f 1003 if (c == 8 && i > 0) {
dudmuck 0:9c2b09ecb20f 1004 pc.putc(8);
dudmuck 0:9c2b09ecb20f 1005 pc.putc(' ');
dudmuck 0:9c2b09ecb20f 1006 pc.putc(8);
dudmuck 0:9c2b09ecb20f 1007 i--;
dudmuck 0:9c2b09ecb20f 1008 } else if (c == '\r') {
dudmuck 0:9c2b09ecb20f 1009 if (i == 0) {
dudmuck 0:9c2b09ecb20f 1010 return prev_len; // repeat previous
dudmuck 0:9c2b09ecb20f 1011 } else {
dudmuck 0:9c2b09ecb20f 1012 buf[i] = 0; // null terminate
dudmuck 0:9c2b09ecb20f 1013 prev_len = i;
dudmuck 0:9c2b09ecb20f 1014 return i;
dudmuck 0:9c2b09ecb20f 1015 }
dudmuck 0:9c2b09ecb20f 1016 } else if (c == 3) {
dudmuck 0:9c2b09ecb20f 1017 // ctrl-C abort
dudmuck 0:9c2b09ecb20f 1018 return -1;
dudmuck 0:9c2b09ecb20f 1019 } else if (i < size) {
dudmuck 0:9c2b09ecb20f 1020 buf[i++] = c;
dudmuck 0:9c2b09ecb20f 1021 pc.putc(c);
dudmuck 0:9c2b09ecb20f 1022 }
dudmuck 0:9c2b09ecb20f 1023 } else {
dudmuck 0:9c2b09ecb20f 1024 service_radio();
dudmuck 0:9c2b09ecb20f 1025 }
dudmuck 0:9c2b09ecb20f 1026 } // ...for()
dudmuck 0:9c2b09ecb20f 1027 }
dudmuck 0:9c2b09ecb20f 1028
dudmuck 0:9c2b09ecb20f 1029 void
dudmuck 0:9c2b09ecb20f 1030 console_chat()
dudmuck 0:9c2b09ecb20f 1031 {
dudmuck 0:9c2b09ecb20f 1032 int i, len = get_kbd_str(pcbuf, sizeof(pcbuf));
dudmuck 0:9c2b09ecb20f 1033 if (len < 0) {
dudmuck 0:9c2b09ecb20f 1034 printf("chat abort\r\n");
dudmuck 0:9c2b09ecb20f 1035 app = APP_NONE;
dudmuck 0:9c2b09ecb20f 1036 return;
dudmuck 0:9c2b09ecb20f 1037 } else {
dudmuck 0:9c2b09ecb20f 1038 for (i = 0; i < len; i++)
dudmuck 0:9c2b09ecb20f 1039 radio.tx_buf[i] = pcbuf[i];
dudmuck 0:9c2b09ecb20f 1040 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1041 lora.RegPayloadLength = len;
dudmuck 0:9c2b09ecb20f 1042 radio.write_reg(REG_LR_PAYLOADLENGTH, lora.RegPayloadLength);
dudmuck 0:9c2b09ecb20f 1043 lora.start_tx(len);
dudmuck 0:9c2b09ecb20f 1044 } else {
dudmuck 0:9c2b09ecb20f 1045 fsk.start_tx(len);
dudmuck 0:9c2b09ecb20f 1046 }
dudmuck 0:9c2b09ecb20f 1047 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1048 }
dudmuck 0:9c2b09ecb20f 1049 }
dudmuck 0:9c2b09ecb20f 1050
dudmuck 0:9c2b09ecb20f 1051 void
dudmuck 0:9c2b09ecb20f 1052 console()
dudmuck 0:9c2b09ecb20f 1053 {
dudmuck 0:9c2b09ecb20f 1054 int len, i;
dudmuck 0:9c2b09ecb20f 1055 uint32_t ui;
dudmuck 0:9c2b09ecb20f 1056 uint8_t a, d;
dudmuck 0:9c2b09ecb20f 1057 static uint16_t fsk_tx_length;
dudmuck 0:9c2b09ecb20f 1058
dudmuck 0:9c2b09ecb20f 1059 len = get_kbd_str(pcbuf, sizeof(pcbuf));
dudmuck 0:9c2b09ecb20f 1060 if (len < 0) {
dudmuck 0:9c2b09ecb20f 1061 printf("abort\r\n");
dudmuck 0:9c2b09ecb20f 1062 return;
dudmuck 0:9c2b09ecb20f 1063 }
dudmuck 0:9c2b09ecb20f 1064
dudmuck 0:9c2b09ecb20f 1065 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1066 if (len == 1) {
dudmuck 0:9c2b09ecb20f 1067 switch (pcbuf[0]) {
dudmuck 0:9c2b09ecb20f 1068 case 'i':
dudmuck 0:9c2b09ecb20f 1069 printf("init\r\n");
dudmuck 0:9c2b09ecb20f 1070 radio.init();
dudmuck 0:9c2b09ecb20f 1071 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1072 fsk.init(); // put FSK modem to some functioning default
dudmuck 0:9c2b09ecb20f 1073 } else {
dudmuck 0:9c2b09ecb20f 1074 // lora configuration is more simple
dudmuck 0:9c2b09ecb20f 1075 }
dudmuck 0:9c2b09ecb20f 1076 break;
dudmuck 0:9c2b09ecb20f 1077 case 'h':
dudmuck 0:9c2b09ecb20f 1078 printf("hw_reset()\r\n");
dudmuck 0:9c2b09ecb20f 1079 radio.hw_reset();
dudmuck 0:9c2b09ecb20f 1080 break;
dudmuck 0:9c2b09ecb20f 1081 case 'R':
dudmuck 0:9c2b09ecb20f 1082 // read all registers
dudmuck 0:9c2b09ecb20f 1083 for (a = 1; a < 0x71; a++) {
dudmuck 0:9c2b09ecb20f 1084 d = radio.read_reg(a);
dudmuck 0:9c2b09ecb20f 1085 //update_shadow_regs(selected_radio, a, d);
dudmuck 0:9c2b09ecb20f 1086 printf("%02x: %02x\r\n", a, d);
dudmuck 0:9c2b09ecb20f 1087 }
dudmuck 0:9c2b09ecb20f 1088 break;
dudmuck 0:9c2b09ecb20f 1089 case 'T':
dudmuck 0:9c2b09ecb20f 1090 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1091 lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
dudmuck 0:9c2b09ecb20f 1092 //printf("a %02x\r\n", radio.RegModemConfig2.octet);
dudmuck 0:9c2b09ecb20f 1093 lora.RegModemConfig2.sx1276bits.TxContinuousMode ^= 1; // same for sx1272 and sx1276
dudmuck 0:9c2b09ecb20f 1094 //printf("b %02x\r\n", radio.RegModemConfig2.octet);
dudmuck 0:9c2b09ecb20f 1095 radio.write_reg(REG_LR_MODEMCONFIG2, lora.RegModemConfig2.octet);
dudmuck 0:9c2b09ecb20f 1096 lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 1097 //printf("c %02x\r\n", radio.RegModemConfig2.octet);
dudmuck 0:9c2b09ecb20f 1098 lora_printTxContinuousMode();
dudmuck 0:9c2b09ecb20f 1099 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1100 }
dudmuck 0:9c2b09ecb20f 1101 break;
dudmuck 0:9c2b09ecb20f 1102 case 'C':
dudmuck 0:9c2b09ecb20f 1103 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1104 lora.setRxPayloadCrcOn(!lora.getRxPayloadCrcOn());
dudmuck 0:9c2b09ecb20f 1105 lora_printRxPayloadCrcOn();
dudmuck 0:9c2b09ecb20f 1106 } else {
dudmuck 0:9c2b09ecb20f 1107 printf("CrcOn:");
dudmuck 0:9c2b09ecb20f 1108 fsk.RegPktConfig1.bits.CrcOn ^= 1;
dudmuck 0:9c2b09ecb20f 1109 radio.write_reg(REG_FSK_PACKETCONFIG1, fsk.RegPktConfig1.octet);
dudmuck 0:9c2b09ecb20f 1110 if (fsk.RegPktConfig1.bits.CrcOn)
dudmuck 0:9c2b09ecb20f 1111 printf("On\r\n");
dudmuck 0:9c2b09ecb20f 1112 else
dudmuck 0:9c2b09ecb20f 1113 printf("Off\r\n");
dudmuck 0:9c2b09ecb20f 1114 if (fsk.RegPktConfig2.bits.DataModePacket && radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER) {
dudmuck 0:9c2b09ecb20f 1115 fsk.config_dio0_for_pktmode_rx();
dudmuck 0:9c2b09ecb20f 1116 }
dudmuck 0:9c2b09ecb20f 1117 }
dudmuck 0:9c2b09ecb20f 1118 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1119 break;
dudmuck 0:9c2b09ecb20f 1120 case 'B':
dudmuck 0:9c2b09ecb20f 1121 radio.RegPaConfig.bits.PaSelect ^= 1;
dudmuck 0:9c2b09ecb20f 1122 radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
dudmuck 0:9c2b09ecb20f 1123 printPa();
dudmuck 0:9c2b09ecb20f 1124 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1125 break;
dudmuck 0:9c2b09ecb20f 1126 case 'L':
dudmuck 0:9c2b09ecb20f 1127 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 1128 fsk.enable();
dudmuck 0:9c2b09ecb20f 1129 else
dudmuck 0:9c2b09ecb20f 1130 lora.enable();
dudmuck 0:9c2b09ecb20f 1131
dudmuck 0:9c2b09ecb20f 1132 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:9c2b09ecb20f 1133 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 1134 printf("LoRa\r\n");
dudmuck 0:9c2b09ecb20f 1135 else
dudmuck 0:9c2b09ecb20f 1136 printf("FSK\r\n");
dudmuck 0:9c2b09ecb20f 1137 break;
dudmuck 0:9c2b09ecb20f 1138 case 's':
dudmuck 0:9c2b09ecb20f 1139 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1140 fsk.RegFifoThreshold.bits.TxStartCondition ^= 1;
dudmuck 0:9c2b09ecb20f 1141 radio.write_reg(REG_FSK_FIFOTHRESH, fsk.RegFifoThreshold.octet);
dudmuck 0:9c2b09ecb20f 1142 printf("TxStartCondition:");
dudmuck 0:9c2b09ecb20f 1143 if (fsk.RegFifoThreshold.bits.TxStartCondition)
dudmuck 0:9c2b09ecb20f 1144 printf("!FifoEmpty\r\n");
dudmuck 0:9c2b09ecb20f 1145 else
dudmuck 0:9c2b09ecb20f 1146 printf("FifoLevel\r\n");
dudmuck 0:9c2b09ecb20f 1147 }
dudmuck 0:9c2b09ecb20f 1148 break;
dudmuck 0:9c2b09ecb20f 1149 case 'f':
dudmuck 0:9c2b09ecb20f 1150 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1151 printf("PacketFormat:");
dudmuck 0:9c2b09ecb20f 1152 fsk.RegPktConfig1.bits.PacketFormatVariable ^= 1;
dudmuck 0:9c2b09ecb20f 1153 radio.write_reg(REG_FSK_PACKETCONFIG1, fsk.RegPktConfig1.octet);
dudmuck 0:9c2b09ecb20f 1154 if (fsk.RegPktConfig1.bits.PacketFormatVariable)
dudmuck 0:9c2b09ecb20f 1155 printf("variable\r\n");
dudmuck 0:9c2b09ecb20f 1156 else
dudmuck 0:9c2b09ecb20f 1157 printf("fixed\r\n");
dudmuck 0:9c2b09ecb20f 1158 /*if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER)
dudmuck 0:9c2b09ecb20f 1159 reset_flow();*/
dudmuck 0:9c2b09ecb20f 1160 }
dudmuck 0:9c2b09ecb20f 1161 break;
dudmuck 0:9c2b09ecb20f 1162 case 'E':
dudmuck 0:9c2b09ecb20f 1163 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1164 RegIrqFlags2_t RegIrqFlags2;
dudmuck 0:9c2b09ecb20f 1165 RegIrqFlags2.octet = radio.read_reg(REG_FSK_IRQFLAGS2);
dudmuck 0:9c2b09ecb20f 1166 while (!RegIrqFlags2.bits.FifoEmpty) {
dudmuck 0:9c2b09ecb20f 1167 if (pc.readable())
dudmuck 0:9c2b09ecb20f 1168 break;
dudmuck 0:9c2b09ecb20f 1169 printf("%02x\r\n", radio.read_reg(REG_FIFO));
dudmuck 0:9c2b09ecb20f 1170 RegIrqFlags2.octet = radio.read_reg(REG_FSK_IRQFLAGS2);
dudmuck 0:9c2b09ecb20f 1171 }
dudmuck 0:9c2b09ecb20f 1172 }
dudmuck 0:9c2b09ecb20f 1173 break;
dudmuck 0:9c2b09ecb20f 1174 case 'A':
dudmuck 0:9c2b09ecb20f 1175 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1176 fsk.RegRxConfig.bits.AfcAutoOn ^= 1;
dudmuck 0:9c2b09ecb20f 1177 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
dudmuck 0:9c2b09ecb20f 1178 printf("AfcAuto:");
dudmuck 0:9c2b09ecb20f 1179 if (fsk.RegRxConfig.bits.AfcAutoOn)
dudmuck 0:9c2b09ecb20f 1180 printf("On\r\n");
dudmuck 0:9c2b09ecb20f 1181 else
dudmuck 0:9c2b09ecb20f 1182 printf("OFF\r\n");
dudmuck 0:9c2b09ecb20f 1183 break;
dudmuck 0:9c2b09ecb20f 1184 }
dudmuck 0:9c2b09ecb20f 1185 break;
dudmuck 0:9c2b09ecb20f 1186 case '?':
dudmuck 0:9c2b09ecb20f 1187 printf("L toggle LongRangeMode/FSK\r\n");
dudmuck 0:9c2b09ecb20f 1188 printf("i radio_init\r\n");
dudmuck 0:9c2b09ecb20f 1189 printf("h hw_reset\r\n");
dudmuck 0:9c2b09ecb20f 1190 printf("tx[%%d] transmit\r\n");
dudmuck 0:9c2b09ecb20f 1191 printf("rx receive\r\n");
dudmuck 0:9c2b09ecb20f 1192 printf("C toggle crcOn\r\n");
dudmuck 0:9c2b09ecb20f 1193 printf("op[%%d] get/set output power\r\n");
dudmuck 0:9c2b09ecb20f 1194 printf("d[0-5] change DIO pin assignment\r\n");
dudmuck 0:9c2b09ecb20f 1195 printf("frf[%%f} get/set operating frequency (MHz)\r\n");
dudmuck 0:9c2b09ecb20f 1196 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1197 printf("pl[%%d] LORA get/set RegPayloadLength\r\n");
dudmuck 0:9c2b09ecb20f 1198 printf("cr[1234] LORA set coding rate \r\n");
dudmuck 0:9c2b09ecb20f 1199 printf("bw[%%d] LORA get/set bandwidth\r\n");
dudmuck 0:9c2b09ecb20f 1200 printf("sf[%%d] LORA get/set spreading factor\r\n");
dudmuck 0:9c2b09ecb20f 1201 printf("T LORA toggle TxContinuousMode\r\n");
dudmuck 0:9c2b09ecb20f 1202 printf("hp[%%d] LORA get/set hop period\r\n");
dudmuck 0:9c2b09ecb20f 1203 printf("hm LORA toggle explicit/explicit header mode\r\n");
dudmuck 0:9c2b09ecb20f 1204 } else {
dudmuck 0:9c2b09ecb20f 1205 printf("bw[a][%%d] FSK get-set rxbw (bwa=afcbw)\r\n");
dudmuck 0:9c2b09ecb20f 1206 printf("br[%%d] FSK get-set bitrate\r\n");
dudmuck 0:9c2b09ecb20f 1207 printf("fdev[%%d] FSK get-set TX frequency deviation (hz)\r\n");
dudmuck 0:9c2b09ecb20f 1208 printf("rt FSK change RxTrigger\r\n");
dudmuck 0:9c2b09ecb20f 1209 printf("pd FSK enable/disable preamble detector\r\n");
dudmuck 0:9c2b09ecb20f 1210 printf("pt FSK get-set PreambleDetectorTol\r\n");
dudmuck 0:9c2b09ecb20f 1211 printf("ss[%%d] FSK get-set SyncSize\r\n");
dudmuck 0:9c2b09ecb20f 1212 printf("S[%%x] FSK get-set sync word\r\n");
dudmuck 0:9c2b09ecb20f 1213 printf("s FSK toggle TxStartCondition\r\n");
dudmuck 0:9c2b09ecb20f 1214 printf("f FSK toggle PacketFormat fixed-variable\r\n");
dudmuck 0:9c2b09ecb20f 1215 printf("E FSK empty out the fifo\r\n");
dudmuck 0:9c2b09ecb20f 1216 printf("ac FSK AfcClear\r\n");
dudmuck 0:9c2b09ecb20f 1217 printf("A FSK toggle AfcAutoOn\r\n");
dudmuck 0:9c2b09ecb20f 1218 printf("mp FSK toggle MapPreambleDetect\r\n");
dudmuck 0:9c2b09ecb20f 1219 printf("ar FSK change AutoRestartRxMode\r\n");
dudmuck 0:9c2b09ecb20f 1220 printf("alc FSK toggle AfcAutoClearOn\r\n");
dudmuck 0:9c2b09ecb20f 1221 printf("pre[%%d} FSK get-set TX preamble length\r\n");
dudmuck 0:9c2b09ecb20f 1222 }
dudmuck 0:9c2b09ecb20f 1223 break;
dudmuck 0:9c2b09ecb20f 1224 case '.':
dudmuck 0:9c2b09ecb20f 1225 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 1226 lora_print_status();
dudmuck 0:9c2b09ecb20f 1227 else
dudmuck 0:9c2b09ecb20f 1228 fsk_print_status();
dudmuck 0:9c2b09ecb20f 1229 common_print_status();
dudmuck 0:9c2b09ecb20f 1230 break;
dudmuck 0:9c2b09ecb20f 1231 } // ...switch (pcbuf[0])
dudmuck 0:9c2b09ecb20f 1232 } else {
dudmuck 0:9c2b09ecb20f 1233 if (pcbuf[0] == 't' && pcbuf[1] == 'x') { // TX
dudmuck 0:9c2b09ecb20f 1234 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1235 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1236 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1237 lora.RegPayloadLength = i;
dudmuck 0:9c2b09ecb20f 1238 }
dudmuck 0:9c2b09ecb20f 1239 tx_cnt++;
dudmuck 0:9c2b09ecb20f 1240 for (i = 0; i < lora.RegPayloadLength; i++)
dudmuck 0:9c2b09ecb20f 1241 radio.tx_buf[i] = tx_cnt;
dudmuck 0:9c2b09ecb20f 1242 lora.start_tx(lora.RegPayloadLength);
dudmuck 0:9c2b09ecb20f 1243 } else { // FSK:
dudmuck 0:9c2b09ecb20f 1244 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1245 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1246 fsk_tx_length = i;
dudmuck 0:9c2b09ecb20f 1247 }
dudmuck 0:9c2b09ecb20f 1248 if (radio.RegOpMode.bits.Mode != RF_OPMODE_TRANSMITTER) { // if not already busy transmitting
dudmuck 0:9c2b09ecb20f 1249 tx_cnt++;
dudmuck 0:9c2b09ecb20f 1250 for (i = 0; i < fsk_tx_length; i++) {
dudmuck 0:9c2b09ecb20f 1251 radio.tx_buf[i] = tx_cnt;
dudmuck 0:9c2b09ecb20f 1252 }
dudmuck 0:9c2b09ecb20f 1253 fsk.start_tx(fsk_tx_length);
dudmuck 0:9c2b09ecb20f 1254 }
dudmuck 0:9c2b09ecb20f 1255 }
dudmuck 0:9c2b09ecb20f 1256 } else if (pcbuf[0] == 'h' && pcbuf[1] == 'p' && radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1257 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1258 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1259 lora.RegHopPeriod = i;
dudmuck 0:9c2b09ecb20f 1260 radio.write_reg(REG_LR_HOPPERIOD, lora.RegHopPeriod);
dudmuck 0:9c2b09ecb20f 1261 if (radio.RegDioMapping1.bits.Dio1Mapping != 1) {
dudmuck 0:9c2b09ecb20f 1262 radio.RegDioMapping1.bits.Dio1Mapping = 1;
dudmuck 0:9c2b09ecb20f 1263 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
dudmuck 0:9c2b09ecb20f 1264 }
dudmuck 0:9c2b09ecb20f 1265 }
dudmuck 0:9c2b09ecb20f 1266 lora.RegHopPeriod = radio.read_reg(REG_LR_HOPPERIOD);
dudmuck 0:9c2b09ecb20f 1267 printf("HopPeriod:0x%02x\r\n", lora.RegHopPeriod);
dudmuck 0:9c2b09ecb20f 1268 } else if (pcbuf[0] == 'r' && pcbuf[1] == 't' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1269 printf("RxTrigger:");
dudmuck 0:9c2b09ecb20f 1270 switch (fsk.RegRxConfig.bits.RxTrigger) {
dudmuck 0:9c2b09ecb20f 1271 case 0: fsk.RegRxConfig.bits.RxTrigger = 1;
dudmuck 0:9c2b09ecb20f 1272 printf("rssi\r\n");
dudmuck 0:9c2b09ecb20f 1273 break;
dudmuck 0:9c2b09ecb20f 1274 case 1: fsk.RegRxConfig.bits.RxTrigger = 6;
dudmuck 0:9c2b09ecb20f 1275 printf("preamble\r\n");
dudmuck 0:9c2b09ecb20f 1276 break;
dudmuck 0:9c2b09ecb20f 1277 case 6: fsk.RegRxConfig.bits.RxTrigger = 7;
dudmuck 0:9c2b09ecb20f 1278 printf("both\r\n");
dudmuck 0:9c2b09ecb20f 1279 break;
dudmuck 0:9c2b09ecb20f 1280 case 7: fsk.RegRxConfig.bits.RxTrigger = 0;
dudmuck 0:9c2b09ecb20f 1281 printf("none\r\n");
dudmuck 0:9c2b09ecb20f 1282 break;
dudmuck 0:9c2b09ecb20f 1283 default: fsk.RegRxConfig.bits.RxTrigger = 0;
dudmuck 0:9c2b09ecb20f 1284 printf("none\r\n");
dudmuck 0:9c2b09ecb20f 1285 break;
dudmuck 0:9c2b09ecb20f 1286 }
dudmuck 0:9c2b09ecb20f 1287 radio.write_reg(REG_FSK_RXCONFIG, fsk.RegRxConfig.octet);
dudmuck 0:9c2b09ecb20f 1288 } else if (pcbuf[0] == 'r' && pcbuf[1] == 'x') { // RX
dudmuck 0:9c2b09ecb20f 1289 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 1290 lora.start_rx();
dudmuck 0:9c2b09ecb20f 1291 else
dudmuck 0:9c2b09ecb20f 1292 fsk.start_rx();
dudmuck 0:9c2b09ecb20f 1293 } else if (pcbuf[0] == 'r' && pcbuf[1] == ' ') { // read single register
dudmuck 0:9c2b09ecb20f 1294 sscanf(pcbuf+2, "%x", &i);
dudmuck 0:9c2b09ecb20f 1295 printf("%02x: %02x\r\n", i, radio.read_reg(i));
dudmuck 0:9c2b09ecb20f 1296 } else if (pcbuf[0] == 'w' && pcbuf[1] == ' ') { // write single register
dudmuck 0:9c2b09ecb20f 1297 sscanf(pcbuf+2, "%x %x", &i, &len);
dudmuck 0:9c2b09ecb20f 1298 radio.write_reg(i, len);
dudmuck 0:9c2b09ecb20f 1299 printf("%02x: %02x\r\n", i, radio.read_reg(i));
dudmuck 1:b13a15a34c3f 1300 } else if (pcbuf[0] == 'b' && pcbuf[1] == '8') {
dudmuck 1:b13a15a34c3f 1301 printf("SCL:");
dudmuck 1:b13a15a34c3f 1302 switch (pcbuf[2]) {
dudmuck 1:b13a15a34c3f 1303 case '0':
dudmuck 1:b13a15a34c3f 1304 pb8.output();
dudmuck 1:b13a15a34c3f 1305 pb8 = 0;
dudmuck 1:b13a15a34c3f 1306 printf("lo");
dudmuck 1:b13a15a34c3f 1307 break;
dudmuck 1:b13a15a34c3f 1308 case '1':
dudmuck 1:b13a15a34c3f 1309 pb8.output();
dudmuck 1:b13a15a34c3f 1310 pb8 = 1;
dudmuck 1:b13a15a34c3f 1311 printf("hi");
dudmuck 1:b13a15a34c3f 1312 break;
dudmuck 1:b13a15a34c3f 1313 case 'z':
dudmuck 1:b13a15a34c3f 1314 pb8.input();
dudmuck 1:b13a15a34c3f 1315 printf("z");
dudmuck 1:b13a15a34c3f 1316 break;
dudmuck 1:b13a15a34c3f 1317 }
dudmuck 1:b13a15a34c3f 1318 printf("\n");
dudmuck 1:b13a15a34c3f 1319 } else if (pcbuf[0] == 'b' && pcbuf[1] == '9') {
dudmuck 1:b13a15a34c3f 1320 printf("SDA:");
dudmuck 1:b13a15a34c3f 1321 switch (pcbuf[2]) {
dudmuck 1:b13a15a34c3f 1322 case '0':
dudmuck 1:b13a15a34c3f 1323 pb9.output();
dudmuck 1:b13a15a34c3f 1324 pb9 = 0;
dudmuck 1:b13a15a34c3f 1325 printf("lo");
dudmuck 1:b13a15a34c3f 1326 break;
dudmuck 1:b13a15a34c3f 1327 case '1':
dudmuck 1:b13a15a34c3f 1328 pb9.output();
dudmuck 1:b13a15a34c3f 1329 pb9 = 1;
dudmuck 1:b13a15a34c3f 1330 printf("hi");
dudmuck 1:b13a15a34c3f 1331 break;
dudmuck 1:b13a15a34c3f 1332 case 'z':
dudmuck 1:b13a15a34c3f 1333 pb9.input();
dudmuck 1:b13a15a34c3f 1334 printf("z");
dudmuck 1:b13a15a34c3f 1335 break;
dudmuck 1:b13a15a34c3f 1336 }
dudmuck 1:b13a15a34c3f 1337 printf("\n");
dudmuck 1:b13a15a34c3f 1338 } /*else if (pcbuf[0] == 'm' && pcbuf[1] == 'm') {
dudmuck 1:b13a15a34c3f 1339 mma8451q.try_read();
dudmuck 1:b13a15a34c3f 1340 } else if (pcbuf[0] == 'm' && pcbuf[1] == 'p' && pcbuf[2] == 'l') {
dudmuck 1:b13a15a34c3f 1341 mpl3115a2.try_read();
dudmuck 1:b13a15a34c3f 1342 } else if (pcbuf[0] == '9' && pcbuf[1] == '5') {
dudmuck 1:b13a15a34c3f 1343 sx9500.try_read();
dudmuck 1:b13a15a34c3f 1344 } */else if (pcbuf[0] == 'm' && pcbuf[1] == 'p' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1345 radio.RegDioMapping2.bits.MapPreambleDetect ^= 1;
dudmuck 0:9c2b09ecb20f 1346 radio.write_reg(REG_DIOMAPPING2, radio.RegDioMapping2.octet);
dudmuck 0:9c2b09ecb20f 1347 printf("MapPreambleDetect:");
dudmuck 0:9c2b09ecb20f 1348 if (radio.RegDioMapping2.bits.MapPreambleDetect)
dudmuck 0:9c2b09ecb20f 1349 printf("preamble\r\n");
dudmuck 0:9c2b09ecb20f 1350 else
dudmuck 0:9c2b09ecb20f 1351 printf("rssi\r\n");
dudmuck 0:9c2b09ecb20f 1352 } else if (pcbuf[0] == 'o' && pcbuf[1] == 'p') {
dudmuck 0:9c2b09ecb20f 1353 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1354 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1355 radio.RegPaConfig.bits.OutputPower = i;
dudmuck 0:9c2b09ecb20f 1356 radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
dudmuck 0:9c2b09ecb20f 1357 }
dudmuck 0:9c2b09ecb20f 1358 radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
dudmuck 0:9c2b09ecb20f 1359 printf("OutputPower:%d\r\n", radio.RegPaConfig.bits.OutputPower);
dudmuck 0:9c2b09ecb20f 1360 } else if (pcbuf[0] == 'c' && pcbuf[1] == 'r' && radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1361 if (pcbuf[2] >= '0' && pcbuf[2] <= '9')
dudmuck 0:9c2b09ecb20f 1362 lora.setCodingRate(pcbuf[2] - '0');
dudmuck 0:9c2b09ecb20f 1363 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 1364 lora_printCodingRate(false); // false: transmitted
dudmuck 0:9c2b09ecb20f 1365 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1366 } else if (pcbuf[0] == 'h' && pcbuf[1] == 'm' && radio.RegOpMode.bits.LongRangeMode) { // toggle implicit/explicit
dudmuck 0:9c2b09ecb20f 1367 lora.setHeaderMode(!lora.getHeaderMode());
dudmuck 0:9c2b09ecb20f 1368 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 1369 lora_printHeaderMode();
dudmuck 0:9c2b09ecb20f 1370 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1371 } else if (pcbuf[0] == 'a' && pcbuf[1] == 'l' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1372 fsk.RegAfcFei.bits.AfcAutoClearOn ^= 1;
dudmuck 0:9c2b09ecb20f 1373 printf("AfcAutoClearOn: ");
dudmuck 0:9c2b09ecb20f 1374 radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet);
dudmuck 0:9c2b09ecb20f 1375 if (fsk.RegAfcFei.bits.AfcAutoClearOn)
dudmuck 0:9c2b09ecb20f 1376 printf("ON\r\n");
dudmuck 0:9c2b09ecb20f 1377 else
dudmuck 0:9c2b09ecb20f 1378 printf("off\r\n");
dudmuck 0:9c2b09ecb20f 1379 } else if (pcbuf[0] == 'a' && pcbuf[1] == 'r' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1380 fsk.RegSyncConfig.bits.AutoRestartRxMode++;
dudmuck 0:9c2b09ecb20f 1381 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
dudmuck 0:9c2b09ecb20f 1382 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
dudmuck 0:9c2b09ecb20f 1383 printf("AutoRestartRxMode:");
dudmuck 0:9c2b09ecb20f 1384 switch (fsk.RegSyncConfig.bits.AutoRestartRxMode) {
dudmuck 0:9c2b09ecb20f 1385 case 0: printf("off "); break;
dudmuck 0:9c2b09ecb20f 1386 case 1: printf("no-pll-wait "); break;
dudmuck 0:9c2b09ecb20f 1387 case 2: printf("pll-wait "); break;
dudmuck 0:9c2b09ecb20f 1388 case 3: printf("3 "); break;
dudmuck 0:9c2b09ecb20f 1389 }
dudmuck 0:9c2b09ecb20f 1390 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1391 } else if (pcbuf[0] == 'a' && pcbuf[1] == 'c' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1392 printf("clear afc: ");
dudmuck 0:9c2b09ecb20f 1393 fsk.RegAfcFei.bits.AfcClear = 1;
dudmuck 0:9c2b09ecb20f 1394 radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet);
dudmuck 0:9c2b09ecb20f 1395 fsk.RegAfcFei.bits.AfcClear = 0;
dudmuck 0:9c2b09ecb20f 1396 printf("%dHz\r\n", (int)(FREQ_STEP_HZ * radio.read_s16(REG_FSK_AFCMSB)));
dudmuck 0:9c2b09ecb20f 1397 } else if (pcbuf[0] == 'b' && pcbuf[1] == 'r' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1398 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1399 sscanf(&pcbuf[2], "%d", &i);
dudmuck 0:9c2b09ecb20f 1400 fsk.set_bitrate(i);
dudmuck 0:9c2b09ecb20f 1401 }
dudmuck 0:9c2b09ecb20f 1402 printf("%dbps\r\n", fsk.get_bitrate());
dudmuck 0:9c2b09ecb20f 1403 } else if (pcbuf[0] == 'b' && pcbuf[1] == 'w') {
dudmuck 0:9c2b09ecb20f 1404 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1405 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1406 radio.set_opmode(RF_OPMODE_STANDBY);
dudmuck 0:9c2b09ecb20f 1407 sscanf(&pcbuf[2], "%d", &i);
dudmuck 0:9c2b09ecb20f 1408 lora.setBw(i);
dudmuck 0:9c2b09ecb20f 1409 } else
dudmuck 0:9c2b09ecb20f 1410 lora_printAllBw();
dudmuck 0:9c2b09ecb20f 1411 lora.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:9c2b09ecb20f 1412 printf("current ");
dudmuck 0:9c2b09ecb20f 1413 lora_printBw();
dudmuck 0:9c2b09ecb20f 1414 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1415 } else { // FSK:
dudmuck 0:9c2b09ecb20f 1416 if (pcbuf[2] == 'a') {
dudmuck 0:9c2b09ecb20f 1417 if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
dudmuck 0:9c2b09ecb20f 1418 radio.set_opmode(RF_OPMODE_STANDBY);
dudmuck 0:9c2b09ecb20f 1419 sscanf(&pcbuf[3], "%d", &i);
dudmuck 0:9c2b09ecb20f 1420 fsk.set_rx_dcc_bw_hz(i, 1);
dudmuck 0:9c2b09ecb20f 1421 }
dudmuck 0:9c2b09ecb20f 1422 printf("afcbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_AFCBW));
dudmuck 0:9c2b09ecb20f 1423 } else {
dudmuck 0:9c2b09ecb20f 1424 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1425 radio.set_opmode(RF_OPMODE_STANDBY);
dudmuck 0:9c2b09ecb20f 1426 sscanf(&pcbuf[2], "%d", &i);
dudmuck 0:9c2b09ecb20f 1427 fsk.set_rx_dcc_bw_hz(i, 0);
dudmuck 0:9c2b09ecb20f 1428 }
dudmuck 0:9c2b09ecb20f 1429 printf("rxbw:%dHz\r\n", fsk.get_rx_bw_hz(REG_FSK_RXBW));
dudmuck 0:9c2b09ecb20f 1430 }
dudmuck 0:9c2b09ecb20f 1431 }
dudmuck 0:9c2b09ecb20f 1432 } else if (pcbuf[0] == 'v' && pcbuf[1] == 'h') {
dudmuck 0:9c2b09ecb20f 1433 lora.poll_vh ^= 1;
dudmuck 0:9c2b09ecb20f 1434 printf("poll_vh:%d\r\n", lora.poll_vh);
dudmuck 0:9c2b09ecb20f 1435 } else if (pcbuf[0] == 'S' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1436 if (pcbuf[1] == '0') {
dudmuck 0:9c2b09ecb20f 1437 sscanf(pcbuf+1, "%x", &ui);
dudmuck 0:9c2b09ecb20f 1438 if (ui < 0x100) {
dudmuck 0:9c2b09ecb20f 1439 fsk.RegSyncConfig.bits.SyncSize = 0;
dudmuck 0:9c2b09ecb20f 1440 radio.write_reg(REG_FSK_SYNCVALUE1, ui);
dudmuck 0:9c2b09ecb20f 1441 } else if (ui < 0x10000) {
dudmuck 0:9c2b09ecb20f 1442 fsk.RegSyncConfig.bits.SyncSize = 1;
dudmuck 0:9c2b09ecb20f 1443 radio.write_reg(REG_FSK_SYNCVALUE2, ui & 0xff);
dudmuck 0:9c2b09ecb20f 1444 radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 8);
dudmuck 0:9c2b09ecb20f 1445 } else if (ui < 0x1000000) {
dudmuck 0:9c2b09ecb20f 1446 fsk.RegSyncConfig.bits.SyncSize = 2;
dudmuck 0:9c2b09ecb20f 1447 radio.write_reg(REG_FSK_SYNCVALUE3, ui & 0xff);
dudmuck 0:9c2b09ecb20f 1448 radio.write_reg(REG_FSK_SYNCVALUE2, (ui >> 8) & 0xff);
dudmuck 0:9c2b09ecb20f 1449 radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 16);
dudmuck 0:9c2b09ecb20f 1450 } else {
dudmuck 0:9c2b09ecb20f 1451 fsk.RegSyncConfig.bits.SyncSize = 3;
dudmuck 0:9c2b09ecb20f 1452 radio.write_reg(REG_FSK_SYNCVALUE4, ui & 0xff);
dudmuck 0:9c2b09ecb20f 1453 radio.write_reg(REG_FSK_SYNCVALUE3, (ui >> 8) & 0xff);
dudmuck 0:9c2b09ecb20f 1454 radio.write_reg(REG_FSK_SYNCVALUE2, (ui >> 16) & 0xff);
dudmuck 0:9c2b09ecb20f 1455 radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 24);
dudmuck 0:9c2b09ecb20f 1456 }
dudmuck 0:9c2b09ecb20f 1457 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
dudmuck 0:9c2b09ecb20f 1458 }
dudmuck 0:9c2b09ecb20f 1459 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
dudmuck 0:9c2b09ecb20f 1460 printf("%d: ", fsk.RegSyncConfig.bits.SyncSize);
dudmuck 0:9c2b09ecb20f 1461 for (i = 0; i <= fsk.RegSyncConfig.bits.SyncSize; i++)
dudmuck 0:9c2b09ecb20f 1462 printf("%02x ", radio.read_reg(REG_FSK_SYNCVALUE1+i));
dudmuck 0:9c2b09ecb20f 1463 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1464 } else if (pcbuf[0] == 's' && pcbuf[1] == 's' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1465 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1466 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1467 fsk.RegSyncConfig.bits.SyncSize = i;
dudmuck 0:9c2b09ecb20f 1468 radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet);
dudmuck 0:9c2b09ecb20f 1469 }
dudmuck 0:9c2b09ecb20f 1470 fsk.RegSyncConfig.octet = radio.read_reg(REG_FSK_SYNCCONFIG);
dudmuck 0:9c2b09ecb20f 1471 printf("SyncSize:%d\r\n", fsk.RegSyncConfig.bits.SyncSize);
dudmuck 0:9c2b09ecb20f 1472 } else if (pcbuf[0] == 's' && pcbuf[1] == 'f' && radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1473 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1474 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1475 lora.setSf(i);
dudmuck 0:9c2b09ecb20f 1476 if (i == 6 && !lora.getHeaderMode()) {
dudmuck 0:9c2b09ecb20f 1477 printf("SF6: to implicit header mode\r\n");
dudmuck 0:9c2b09ecb20f 1478 lora.setHeaderMode(true);
dudmuck 0:9c2b09ecb20f 1479 }
dudmuck 0:9c2b09ecb20f 1480 }
dudmuck 0:9c2b09ecb20f 1481 lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
dudmuck 0:9c2b09ecb20f 1482 lora_printSf();
dudmuck 0:9c2b09ecb20f 1483 printf("\r\n");
dudmuck 0:9c2b09ecb20f 1484 } else if (pcbuf[0] == 'f' && pcbuf[1] == 'd' && pcbuf[2] == 'e' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1485 if (pcbuf[4] >= '0' && pcbuf[4] <= '9') {
dudmuck 0:9c2b09ecb20f 1486 sscanf(pcbuf+4, "%d", &i);
dudmuck 0:9c2b09ecb20f 1487 fsk.set_tx_fdev_hz(i);
dudmuck 0:9c2b09ecb20f 1488 }
dudmuck 0:9c2b09ecb20f 1489 printf("fdev:%dHz\r\n", fsk.get_tx_fdev_hz());
dudmuck 0:9c2b09ecb20f 1490 } else if (pcbuf[0] == 'f' && pcbuf[1] == 'r' && pcbuf[2] == 'f') {
dudmuck 0:9c2b09ecb20f 1491 if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
dudmuck 0:9c2b09ecb20f 1492 float MHz;
dudmuck 0:9c2b09ecb20f 1493 sscanf(pcbuf+3, "%f", &MHz);
dudmuck 0:9c2b09ecb20f 1494 //printf("MHz:%f\r\n", MHz);
dudmuck 0:9c2b09ecb20f 1495 radio.set_frf_MHz(MHz);
dudmuck 0:9c2b09ecb20f 1496 }
dudmuck 0:9c2b09ecb20f 1497 printf("%fMHz\r\n", radio.get_frf_MHz());
dudmuck 0:9c2b09ecb20f 1498 } else if (pcbuf[0] == 'p' && pcbuf[1] == 'r' && pcbuf[2] == 'e') {
dudmuck 0:9c2b09ecb20f 1499 if (radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1500 if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
dudmuck 0:9c2b09ecb20f 1501 sscanf(pcbuf+3, "%d", &i);
dudmuck 0:9c2b09ecb20f 1502 radio.write_u16(REG_LR_PREAMBLEMSB, i);
dudmuck 0:9c2b09ecb20f 1503 }
dudmuck 0:9c2b09ecb20f 1504 lora.RegPreamble = radio.read_u16(REG_LR_PREAMBLEMSB);
dudmuck 0:9c2b09ecb20f 1505 printf("lora PreambleLength:%d\r\n", lora.RegPreamble);
dudmuck 0:9c2b09ecb20f 1506 } else {
dudmuck 0:9c2b09ecb20f 1507 if (pcbuf[3] >= '0' && pcbuf[3] <= '9') {
dudmuck 0:9c2b09ecb20f 1508 sscanf(pcbuf+3, "%d", &i);
dudmuck 0:9c2b09ecb20f 1509 radio.write_u16(REG_FSK_PREAMBLEMSB, i);
dudmuck 0:9c2b09ecb20f 1510 }
dudmuck 0:9c2b09ecb20f 1511 printf("FSK TX PreambleSize:%d\r\n", radio.read_u16(REG_FSK_PREAMBLEMSB));
dudmuck 0:9c2b09ecb20f 1512 }
dudmuck 0:9c2b09ecb20f 1513 } else if (pcbuf[0] == 'p' && pcbuf[1] == 't' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1514 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1515 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1516 fsk.RegPreambleDetect.bits.PreambleDetectorTol = i;
dudmuck 0:9c2b09ecb20f 1517 radio.write_reg(REG_FSK_PREAMBLEDETECT, fsk.RegPreambleDetect.octet);
dudmuck 0:9c2b09ecb20f 1518 }
dudmuck 0:9c2b09ecb20f 1519 fsk.RegPreambleDetect.octet = radio.read_reg(REG_FSK_PREAMBLEDETECT);
dudmuck 0:9c2b09ecb20f 1520 printf("PreambleDetectorTol:%d\r\n", fsk.RegPreambleDetect.bits.PreambleDetectorTol);
dudmuck 0:9c2b09ecb20f 1521 } else if (pcbuf[0] == 'p' && pcbuf[1] == 'd' && !radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1522 fsk.RegPreambleDetect.bits.PreambleDetectorOn ^= 1;
dudmuck 0:9c2b09ecb20f 1523 radio.write_reg(REG_FSK_PREAMBLEDETECT, fsk.RegPreambleDetect.octet);
dudmuck 0:9c2b09ecb20f 1524 printf("PreambleDetector:");
dudmuck 0:9c2b09ecb20f 1525 if (fsk.RegPreambleDetect.bits.PreambleDetectorOn)
dudmuck 0:9c2b09ecb20f 1526 printf("On\r\n");
dudmuck 0:9c2b09ecb20f 1527 else
dudmuck 0:9c2b09ecb20f 1528 printf("OFF\r\n");
dudmuck 0:9c2b09ecb20f 1529 } else if (pcbuf[0] == 'p' && pcbuf[1] == 'l' && radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:9c2b09ecb20f 1530 if (pcbuf[2] >= '0' && pcbuf[2] <= '9') {
dudmuck 0:9c2b09ecb20f 1531 sscanf(pcbuf+2, "%d", &i);
dudmuck 0:9c2b09ecb20f 1532 lora.RegPayloadLength = i;
dudmuck 0:9c2b09ecb20f 1533 radio.write_reg(REG_LR_PAYLOADLENGTH, lora.RegPayloadLength);
dudmuck 0:9c2b09ecb20f 1534 }
dudmuck 0:9c2b09ecb20f 1535 lora.RegPayloadLength = radio.read_reg(REG_LR_PAYLOADLENGTH);
dudmuck 0:9c2b09ecb20f 1536 printf("PayloadLength:%d\r\n", lora.RegPayloadLength);
dudmuck 0:9c2b09ecb20f 1537 } else if (pcbuf[0] == 'd' && pcbuf[1] >= '0' && pcbuf[1] <= '5') {
dudmuck 0:9c2b09ecb20f 1538 switch (pcbuf[1]) {
dudmuck 0:9c2b09ecb20f 1539 case '0':
dudmuck 0:9c2b09ecb20f 1540 radio.RegDioMapping1.bits.Dio0Mapping++;
dudmuck 0:9c2b09ecb20f 1541 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
dudmuck 0:9c2b09ecb20f 1542 break;
dudmuck 0:9c2b09ecb20f 1543 case '1':
dudmuck 0:9c2b09ecb20f 1544 radio.RegDioMapping1.bits.Dio1Mapping++;
dudmuck 0:9c2b09ecb20f 1545 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
dudmuck 0:9c2b09ecb20f 1546 break;
dudmuck 0:9c2b09ecb20f 1547 case '2':
dudmuck 0:9c2b09ecb20f 1548 radio.RegDioMapping1.bits.Dio2Mapping++;
dudmuck 0:9c2b09ecb20f 1549 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
dudmuck 0:9c2b09ecb20f 1550 break;
dudmuck 0:9c2b09ecb20f 1551 case '3':
dudmuck 0:9c2b09ecb20f 1552 radio.RegDioMapping1.bits.Dio3Mapping++;
dudmuck 0:9c2b09ecb20f 1553 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping1.octet);
dudmuck 0:9c2b09ecb20f 1554 break;
dudmuck 0:9c2b09ecb20f 1555 case '4':
dudmuck 0:9c2b09ecb20f 1556 radio.RegDioMapping2.bits.Dio4Mapping++;
dudmuck 0:9c2b09ecb20f 1557 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping2.octet);
dudmuck 0:9c2b09ecb20f 1558 break;
dudmuck 0:9c2b09ecb20f 1559 case '5':
dudmuck 0:9c2b09ecb20f 1560 radio.RegDioMapping2.bits.Dio5Mapping++;
dudmuck 0:9c2b09ecb20f 1561 radio.write_reg(REG_DIOMAPPING1, radio.RegDioMapping2.octet);
dudmuck 0:9c2b09ecb20f 1562 break;
dudmuck 0:9c2b09ecb20f 1563 } // ...switch (pcbuf[1])
dudmuck 0:9c2b09ecb20f 1564 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:9c2b09ecb20f 1565 lora_print_dio();
dudmuck 0:9c2b09ecb20f 1566 else
dudmuck 0:9c2b09ecb20f 1567 fsk_print_dio();
dudmuck 0:9c2b09ecb20f 1568 } else if (pcbuf[0] == 's' && pcbuf[1] == 't' && pcbuf[2] == 'b') {
dudmuck 0:9c2b09ecb20f 1569 radio.set_opmode(RF_OPMODE_STANDBY);
dudmuck 0:9c2b09ecb20f 1570 } else if (pcbuf[0] == 's' && pcbuf[1] == 'l' && pcbuf[2] == 'e') {
dudmuck 0:9c2b09ecb20f 1571 radio.set_opmode(RF_OPMODE_SLEEP);
dudmuck 0:9c2b09ecb20f 1572 } else if (pcbuf[0] == 'c' && pcbuf[1] == 'h' && pcbuf[2] == 'a') {
dudmuck 0:9c2b09ecb20f 1573 app = APP_CHAT;
dudmuck 0:9c2b09ecb20f 1574 lora.start_rx();
dudmuck 0:9c2b09ecb20f 1575 printf("chat start\r\n");
dudmuck 0:9c2b09ecb20f 1576 }
dudmuck 0:9c2b09ecb20f 1577 }
dudmuck 0:9c2b09ecb20f 1578 printf("> ");
dudmuck 0:9c2b09ecb20f 1579 fflush(stdout);
dudmuck 0:9c2b09ecb20f 1580
dudmuck 0:9c2b09ecb20f 1581 }
dudmuck 0:9c2b09ecb20f 1582
dudmuck 0:9c2b09ecb20f 1583 int main()
dudmuck 0:9c2b09ecb20f 1584 {
dudmuck 0:9c2b09ecb20f 1585
dudmuck 0:9c2b09ecb20f 1586 pc.baud(57600);
dudmuck 0:9c2b09ecb20f 1587
dudmuck 0:9c2b09ecb20f 1588 radio.frfs = frfs;
dudmuck 0:9c2b09ecb20f 1589
dudmuck 0:9c2b09ecb20f 1590 while(1) {
dudmuck 0:9c2b09ecb20f 1591 switch (app) {
dudmuck 0:9c2b09ecb20f 1592 case APP_NONE:
dudmuck 0:9c2b09ecb20f 1593 console();
dudmuck 0:9c2b09ecb20f 1594 break;
dudmuck 0:9c2b09ecb20f 1595 case APP_CHAT:
dudmuck 0:9c2b09ecb20f 1596 console_chat();
dudmuck 0:9c2b09ecb20f 1597 break;
dudmuck 0:9c2b09ecb20f 1598 } // ...switch (app)
dudmuck 0:9c2b09ecb20f 1599 } // ...while(1)
dudmuck 0:9c2b09ecb20f 1600 }
dudmuck 0:9c2b09ecb20f 1601
dudmuck 1:b13a15a34c3f 1602 /*
dudmuck 1:b13a15a34c3f 1603 GPS, Pressure sensor, touch sensor etc
dudmuck 1:b13a15a34c3f 1604 3-axis accelerometer: MMA8415IQ peripherials/mma8415..c
dudmuck 1:b13a15a34c3f 1605 SX9500 SAR, peripherials/sx9500.c
dudmuck 1:b13a15a34c3f 1606 altimeter & temperature: MPL3115A2. peripherials/mpl3115.c
dudmuck 1:b13a15a34c3f 1607 GPS: NMEA from system/gps.c, boards/LoRaMote/gps-board.c
dudmuck 1:b13a15a34c3f 1608 *
dudmuck 1:b13a15a34c3f 1609 */