This program enables the use of the Semtech "SX1276 Starter Kit A" application to be used with the FRDM-KL25Z board. At the time of writing this, this app was available on Semtech's SX1276 page, in the "Docs & Resources"* tab, via the link "PC GUI (1.0.0Beta5)". This program was tested with the FRDM-KL25Z board, with a Modtronix inAir9 SX1276 board mounted in a Modtronix SHD3I shield. The inAir9 module is mounted in iMod port 3 of the SHD3I module. The SHD3I shield is mounted on the FRDM-KL25Z board.

Dependencies:   SX127x_modtronix USBDevice_Semtech_GUI mbed

Fork of hid_test by wayne roberts

Committer:
dudmuck
Date:
Mon Apr 14 22:01:41 2014 +0000
Revision:
0:f8bc33804548
Child:
1:d25ba61cd2f3
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 0:f8bc33804548 1 #include "mbed.h"
dudmuck 0:f8bc33804548 2 #include "USBHID.h"
dudmuck 0:f8bc33804548 3 #include "sx127x.h"
dudmuck 0:f8bc33804548 4
dudmuck 0:f8bc33804548 5 // pin: 3 8 1 7 10 12 5 20 18
dudmuck 0:f8bc33804548 6 // mosi, miso, sclk, cs, rst, dio0, dio1, fctx, fcps
dudmuck 0:f8bc33804548 7 SX127x radio(PTD2, PTD3, PTD1, PTD0, PTD5, PTA13, PTD4, PTC9, PTC8);
dudmuck 0:f8bc33804548 8
dudmuck 0:f8bc33804548 9 //We declare a USBHID device. By default input and output reports are 64 bytes long.
dudmuck 0:f8bc33804548 10 USBHID hid(64, 64, 0x47a, 0x0b);
dudmuck 0:f8bc33804548 11 //USBHID (uint8_t output_report_length=64, uint8_t input_report_length=64, uint16_t vendor_id=0x1234, uint16_t product_id=0x0006, uint16_t product_release=0x0001, bool connect=true)
dudmuck 0:f8bc33804548 12
dudmuck 0:f8bc33804548 13 Serial pc(USBTX, USBRX);
dudmuck 0:f8bc33804548 14
dudmuck 0:f8bc33804548 15 //This report will contain data to be sent
dudmuck 0:f8bc33804548 16 HID_REPORT send_report;
dudmuck 0:f8bc33804548 17 HID_REPORT recv_report;
dudmuck 0:f8bc33804548 18
dudmuck 0:f8bc33804548 19 DigitalOut l1(LED1);
dudmuck 0:f8bc33804548 20
dudmuck 0:f8bc33804548 21 #define FW_VERSION "3.1.0"
dudmuck 0:f8bc33804548 22 #define SK_NAME "mbed"
dudmuck 0:f8bc33804548 23
dudmuck 0:f8bc33804548 24 #define HID_SK_RESET 0x00
dudmuck 0:f8bc33804548 25 #define HID_SK_GET_VERSION 0x01
dudmuck 0:f8bc33804548 26 #define HID_SK_GET_NAME 0x02
dudmuck 0:f8bc33804548 27 #define HID_SK_GET_PIN 0x10
dudmuck 0:f8bc33804548 28 #define HID_SK_SET_PIN 0x11
dudmuck 0:f8bc33804548 29 #define HID_SK_GET_PINS 0x14
dudmuck 0:f8bc33804548 30 #define HID_DEVICE_READ 0x80
dudmuck 0:f8bc33804548 31 #define HID_DEVICE_WRITE 0x81
dudmuck 0:f8bc33804548 32 #define HID_DEVICE_INIT 0x88
dudmuck 0:f8bc33804548 33 #define HID_DEVICE_RESET 0x89
dudmuck 0:f8bc33804548 34 #define HID_SK_CMD_NONE 0xFF
dudmuck 0:f8bc33804548 35
dudmuck 0:f8bc33804548 36 typedef struct sHidCommand
dudmuck 0:f8bc33804548 37 {
dudmuck 0:f8bc33804548 38 uint8_t Cmd;
dudmuck 0:f8bc33804548 39 uint8_t CmdOpt;
dudmuck 0:f8bc33804548 40 uint8_t CmdDataSize;
dudmuck 0:f8bc33804548 41 uint8_t *CmdData;
dudmuck 0:f8bc33804548 42 } tHidCommand;
dudmuck 0:f8bc33804548 43
dudmuck 0:f8bc33804548 44 typedef enum
dudmuck 0:f8bc33804548 45 {
dudmuck 0:f8bc33804548 46 SX_OK,
dudmuck 0:f8bc33804548 47 SX_ERROR,
dudmuck 0:f8bc33804548 48 SX_BUSY,
dudmuck 0:f8bc33804548 49 SX_EMPTY,
dudmuck 0:f8bc33804548 50 SX_DONE,
dudmuck 0:f8bc33804548 51 SX_TIMEOUT,
dudmuck 0:f8bc33804548 52 SX_UNSUPPORTED,
dudmuck 0:f8bc33804548 53 SX_WAIT,
dudmuck 0:f8bc33804548 54 SX_CLOSE,
dudmuck 0:f8bc33804548 55 SX_YES,
dudmuck 0:f8bc33804548 56 SX_NO,
dudmuck 0:f8bc33804548 57 } tReturnCodes;
dudmuck 0:f8bc33804548 58
dudmuck 0:f8bc33804548 59 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 60 char verbose = 0;
dudmuck 0:f8bc33804548 61 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 62
dudmuck 0:f8bc33804548 63 void HidDecodeCommand( uint8_t *hidReport, tHidCommand *cmd )
dudmuck 0:f8bc33804548 64 {
dudmuck 0:f8bc33804548 65 cmd->Cmd = hidReport[0];
dudmuck 0:f8bc33804548 66 cmd->CmdOpt = hidReport[1];
dudmuck 0:f8bc33804548 67 cmd->CmdDataSize = hidReport[2];
dudmuck 0:f8bc33804548 68 cmd->CmdData = hidReport + 3;
dudmuck 0:f8bc33804548 69 }
dudmuck 0:f8bc33804548 70
dudmuck 0:f8bc33804548 71 void HidEncodeCommandAns( uint8_t cmd, uint8_t stat, uint8_t dataSize, uint8_t *data )
dudmuck 0:f8bc33804548 72 {
dudmuck 0:f8bc33804548 73 send_report.data[0] = cmd;
dudmuck 0:f8bc33804548 74 send_report.data[1] = stat;
dudmuck 0:f8bc33804548 75
dudmuck 0:f8bc33804548 76 // TimeStamp
dudmuck 0:f8bc33804548 77 memset( send_report.data + 2, 0, 8 );
dudmuck 0:f8bc33804548 78
dudmuck 0:f8bc33804548 79 send_report.data[10] = dataSize;
dudmuck 0:f8bc33804548 80 memcpy( send_report.data + 11, ( const void* )data, dataSize );
dudmuck 0:f8bc33804548 81
dudmuck 0:f8bc33804548 82 //send_report.length = 11 + dataSize;
dudmuck 0:f8bc33804548 83 send_report.length = 64;
dudmuck 0:f8bc33804548 84 hid.send(&send_report);
dudmuck 0:f8bc33804548 85 }
dudmuck 0:f8bc33804548 86
dudmuck 0:f8bc33804548 87 void HidCmdProcess(void)
dudmuck 0:f8bc33804548 88 {
dudmuck 0:f8bc33804548 89 uint8_t stat = SX_OK;
dudmuck 0:f8bc33804548 90 uint8_t size = 0;
dudmuck 0:f8bc33804548 91 uint8_t dataBuffer[64];
dudmuck 0:f8bc33804548 92 tHidCommand cmd = { HID_SK_CMD_NONE, 0, 0, NULL };
dudmuck 0:f8bc33804548 93 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 94 int i;
dudmuck 0:f8bc33804548 95 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 96
dudmuck 0:f8bc33804548 97 HidDecodeCommand(recv_report.data, &cmd);
dudmuck 0:f8bc33804548 98
dudmuck 0:f8bc33804548 99 switch (cmd.Cmd) {
dudmuck 0:f8bc33804548 100 case HID_DEVICE_RESET:
dudmuck 0:f8bc33804548 101 radio.hw_reset();
dudmuck 0:f8bc33804548 102 break;
dudmuck 0:f8bc33804548 103 case HID_SK_RESET:
dudmuck 0:f8bc33804548 104 case HID_DEVICE_INIT:
dudmuck 0:f8bc33804548 105 radio.hw_reset();
dudmuck 0:f8bc33804548 106 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 107 if (verbose)
dudmuck 0:f8bc33804548 108 printf("reset-init\r\n");
dudmuck 0:f8bc33804548 109 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 110 radio.init(); //SX1272Init( );
dudmuck 0:f8bc33804548 111 // Set FSK modem ON
dudmuck 0:f8bc33804548 112 radio.SetLoRaOn( false ); //SX1272SetLoRaOn( false ); // Default radio setting
dudmuck 0:f8bc33804548 113 // Default answer settings
dudmuck 0:f8bc33804548 114 break;
dudmuck 0:f8bc33804548 115 case HID_SK_GET_VERSION:
dudmuck 0:f8bc33804548 116 strcpy( ( char* )dataBuffer, FW_VERSION );
dudmuck 0:f8bc33804548 117 size = strlen( FW_VERSION );
dudmuck 0:f8bc33804548 118 break;
dudmuck 0:f8bc33804548 119 case HID_DEVICE_READ:
dudmuck 0:f8bc33804548 120 // cmd.CmdData[0] = size
dudmuck 0:f8bc33804548 121 // cmd.CmdData[1] = address
dudmuck 0:f8bc33804548 122 size = cmd.CmdData[0];
dudmuck 0:f8bc33804548 123 radio.ReadBuffer( cmd.CmdData[1], dataBuffer, size );
dudmuck 0:f8bc33804548 124 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 125 if (verbose) {
dudmuck 0:f8bc33804548 126 pc.printf("read %d bytes from %02x: ", size, cmd.CmdData[1]);
dudmuck 0:f8bc33804548 127 for (i = 0; i < size; i++)
dudmuck 0:f8bc33804548 128 pc.printf("%02x ", dataBuffer[i]);
dudmuck 0:f8bc33804548 129 pc.printf("\r\n");
dudmuck 0:f8bc33804548 130 }
dudmuck 0:f8bc33804548 131 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 132 stat = SX_OK;
dudmuck 0:f8bc33804548 133 break;
dudmuck 0:f8bc33804548 134 case HID_SK_GET_PINS:
dudmuck 0:f8bc33804548 135 dataBuffer[0] = 0;
dudmuck 0:f8bc33804548 136 if (radio.dio0)
dudmuck 0:f8bc33804548 137 dataBuffer[0] |= 0x01;
dudmuck 0:f8bc33804548 138 if (radio.dio1)
dudmuck 0:f8bc33804548 139 dataBuffer[0] |= 0x02;
dudmuck 0:f8bc33804548 140 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 141 if (verbose && dataBuffer[0] != 0)
dudmuck 0:f8bc33804548 142 printf("HID_SK_GET_PINS:%02x\r\n", dataBuffer[0]);
dudmuck 0:f8bc33804548 143 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 144 /*dataBuffer[0] |= DIO1 << 1;
dudmuck 0:f8bc33804548 145 dataBuffer[0] |= DIO2 << 2;
dudmuck 0:f8bc33804548 146 dataBuffer[0] |= DIO3 << 3;
dudmuck 0:f8bc33804548 147 dataBuffer[0] |= DIO4 << 4;
dudmuck 0:f8bc33804548 148 dataBuffer[0] |= DIO5 << 5;*/
dudmuck 0:f8bc33804548 149 size = 1;
dudmuck 0:f8bc33804548 150 break;
dudmuck 0:f8bc33804548 151 case HID_SK_GET_PIN:
dudmuck 0:f8bc33804548 152 // cmd.CmdData[0] = Pin id
dudmuck 0:f8bc33804548 153 switch( cmd.CmdData[0] ) {
dudmuck 0:f8bc33804548 154 case 11: // FEM_CPS_PIN
dudmuck 0:f8bc33804548 155 dataBuffer[0] = radio.femcps;
dudmuck 0:f8bc33804548 156 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 157 if (verbose)
dudmuck 0:f8bc33804548 158 printf("HID_SK_GET_PIN femcps:%02x\r\n", dataBuffer[0]);
dudmuck 0:f8bc33804548 159 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 160 break;
dudmuck 0:f8bc33804548 161 case 12: // FEM_CTX_PIN
dudmuck 0:f8bc33804548 162 dataBuffer[0] = radio.femctx;
dudmuck 0:f8bc33804548 163 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 164 if (verbose)
dudmuck 0:f8bc33804548 165 printf("HID_SK_GET_PIN femctx:%02x\r\n", dataBuffer[0]);
dudmuck 0:f8bc33804548 166 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 167 break;
dudmuck 0:f8bc33804548 168 default:
dudmuck 0:f8bc33804548 169 dataBuffer[0] = 0xFF; // Signal ID error
dudmuck 0:f8bc33804548 170 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 171 printf("HID_SK_GET_PIN %d\r\n", cmd.CmdData[0]);
dudmuck 0:f8bc33804548 172 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 173 break;
dudmuck 0:f8bc33804548 174 } // ...switch( cmd.CmdData[0] )
dudmuck 0:f8bc33804548 175 break;
dudmuck 0:f8bc33804548 176 case HID_SK_SET_PIN:
dudmuck 0:f8bc33804548 177 // cmd.CmdData[0] = Pin id
dudmuck 0:f8bc33804548 178 // cmd.CmdData[1] = Pin state
dudmuck 0:f8bc33804548 179 switch( cmd.CmdData[0] ) {
dudmuck 0:f8bc33804548 180 case 6:
dudmuck 0:f8bc33804548 181 case 7:
dudmuck 0:f8bc33804548 182 case 8:
dudmuck 0:f8bc33804548 183 // ignore LEDs
dudmuck 0:f8bc33804548 184 break;
dudmuck 0:f8bc33804548 185 case 11: // FEM_CPS_PIN
dudmuck 0:f8bc33804548 186 radio.femcps = cmd.CmdData[1];
dudmuck 0:f8bc33804548 187 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 188 if (verbose)
dudmuck 0:f8bc33804548 189 printf("HID_SK_SET_PIN femcps:%d\r\n", (int)radio.femcps);
dudmuck 0:f8bc33804548 190 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 191 break;
dudmuck 0:f8bc33804548 192 case 12: // FEM_CTX_PIN
dudmuck 0:f8bc33804548 193 radio.femctx = cmd.CmdData[1];
dudmuck 0:f8bc33804548 194 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 195 if (verbose)
dudmuck 0:f8bc33804548 196 printf("HID_SK_SET_PIN femctx:%d\r\n", (int)radio.femctx);
dudmuck 0:f8bc33804548 197 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 198 break;
dudmuck 0:f8bc33804548 199 default:
dudmuck 0:f8bc33804548 200 stat = SX_UNSUPPORTED;
dudmuck 0:f8bc33804548 201 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 202 pc.printf("HID_SK_SET_PIN %d %d\r\n", cmd.CmdData[0], cmd.CmdData[1]);
dudmuck 0:f8bc33804548 203 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 204 break;
dudmuck 0:f8bc33804548 205 } // ...switch( cmd.CmdData[0] )
dudmuck 0:f8bc33804548 206
dudmuck 0:f8bc33804548 207 break;
dudmuck 0:f8bc33804548 208 case HID_DEVICE_WRITE:
dudmuck 0:f8bc33804548 209 // cmd.CmdData[0] = size
dudmuck 0:f8bc33804548 210 // cmd.CmdData[1] = address
dudmuck 0:f8bc33804548 211 // cmd.CmdData[2] = Buffer first byte
dudmuck 0:f8bc33804548 212 // cmd.CmdData[2+(size-1)] = Buffer last byte
dudmuck 0:f8bc33804548 213 radio.WriteBuffer( cmd.CmdData[1], cmd.CmdData + 2, cmd.CmdData[0] );
dudmuck 0:f8bc33804548 214 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 215 if (verbose) {
dudmuck 0:f8bc33804548 216 pc.printf("write %d bytes to %02x: ", cmd.CmdData[0], cmd.CmdData[1]);
dudmuck 0:f8bc33804548 217 for (i = 0; i < cmd.CmdData[0]; i++)
dudmuck 0:f8bc33804548 218 pc.printf("%02x ", cmd.CmdData[2+i]);
dudmuck 0:f8bc33804548 219 pc.printf("\r\n");
dudmuck 0:f8bc33804548 220 }
dudmuck 0:f8bc33804548 221 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 222 stat = SX_OK;
dudmuck 0:f8bc33804548 223 break;
dudmuck 0:f8bc33804548 224 case HID_SK_GET_NAME:
dudmuck 0:f8bc33804548 225 strcpy( ( char* )dataBuffer, SK_NAME );
dudmuck 0:f8bc33804548 226 size = strlen( SK_NAME );
dudmuck 0:f8bc33804548 227 break;
dudmuck 0:f8bc33804548 228 default:
dudmuck 0:f8bc33804548 229 pc.printf("%d: ", recv_report.length);
dudmuck 0:f8bc33804548 230 for(int i = 0; i < recv_report.length; i++) {
dudmuck 0:f8bc33804548 231 pc.printf("%02x ", recv_report.data[i]);
dudmuck 0:f8bc33804548 232 }
dudmuck 0:f8bc33804548 233 pc.printf("\r\n");
dudmuck 0:f8bc33804548 234 stat = SX_UNSUPPORTED;
dudmuck 0:f8bc33804548 235 break;
dudmuck 0:f8bc33804548 236 } // ...switch (cmd.Cmd)
dudmuck 0:f8bc33804548 237
dudmuck 0:f8bc33804548 238 HidEncodeCommandAns( cmd.Cmd, stat, size, dataBuffer);
dudmuck 0:f8bc33804548 239 }
dudmuck 0:f8bc33804548 240
dudmuck 0:f8bc33804548 241 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 242 void printOpMode()
dudmuck 0:f8bc33804548 243 {
dudmuck 0:f8bc33804548 244 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:f8bc33804548 245 switch (radio.RegOpMode.bits.Mode) {
dudmuck 0:f8bc33804548 246 case RF_OPMODE_SLEEP: printf("sleep"); break;
dudmuck 0:f8bc33804548 247 case RF_OPMODE_STANDBY: printf("stby"); break;
dudmuck 0:f8bc33804548 248 case RF_OPMODE_SYNTHESIZER_TX: printf("fstx"); break;
dudmuck 0:f8bc33804548 249 case RF_OPMODE_TRANSMITTER: printf("tx"); break;
dudmuck 0:f8bc33804548 250 case RF_OPMODE_SYNTHESIZER_RX: printf("fsrx"); break;
dudmuck 0:f8bc33804548 251 case RF_OPMODE_RECEIVER: printf("rx"); break;
dudmuck 0:f8bc33804548 252 case 6:
dudmuck 0:f8bc33804548 253 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:f8bc33804548 254 printf("rxs");
dudmuck 0:f8bc33804548 255 else
dudmuck 0:f8bc33804548 256 printf("-6-");
dudmuck 0:f8bc33804548 257 break; // todo: different lora/fsk
dudmuck 0:f8bc33804548 258 case 7:
dudmuck 0:f8bc33804548 259 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:f8bc33804548 260 printf("cad");
dudmuck 0:f8bc33804548 261 else
dudmuck 0:f8bc33804548 262 printf("-7-");
dudmuck 0:f8bc33804548 263 break; // todo: different lora/fsk
dudmuck 0:f8bc33804548 264 }
dudmuck 0:f8bc33804548 265 }
dudmuck 0:f8bc33804548 266 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 267
dudmuck 0:f8bc33804548 268 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 269 void
dudmuck 0:f8bc33804548 270 printPa()
dudmuck 0:f8bc33804548 271 {
dudmuck 0:f8bc33804548 272 radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
dudmuck 0:f8bc33804548 273 if (radio.RegPaConfig.bits.PaSelect) {
dudmuck 0:f8bc33804548 274 float output_dBm = 17 - (15-radio.RegPaConfig.bits.OutputPower);
dudmuck 0:f8bc33804548 275 printf(" PABOOST OutputPower=%.1fdBm", output_dBm);
dudmuck 0:f8bc33804548 276 } else {
dudmuck 0:f8bc33804548 277 float pmax = (0.6*radio.RegPaConfig.bits.MaxPower) + 10.8;
dudmuck 0:f8bc33804548 278 float output_dBm = pmax - (15-radio.RegPaConfig.bits.OutputPower);
dudmuck 0:f8bc33804548 279 printf(" RFO pmax=%.1fdBm OutputPower=%.1fdBm", pmax, output_dBm);
dudmuck 0:f8bc33804548 280 }
dudmuck 0:f8bc33804548 281 }
dudmuck 0:f8bc33804548 282 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 283
dudmuck 0:f8bc33804548 284 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 285 void /* things always present, whether lora or fsk */
dudmuck 0:f8bc33804548 286 common_print_status()
dudmuck 0:f8bc33804548 287 {
dudmuck 0:f8bc33804548 288 printf("version:0x%02x %.3fMHz ", radio.read_reg(REG_VERSION), radio.get_frf_MHz());
dudmuck 0:f8bc33804548 289 printOpMode();
dudmuck 0:f8bc33804548 290
dudmuck 0:f8bc33804548 291 printPa();
dudmuck 0:f8bc33804548 292
dudmuck 0:f8bc33804548 293 radio.RegOcp.octet = radio.read_reg(REG_OCP);
dudmuck 0:f8bc33804548 294 if (radio.RegOcp.bits.OcpOn) {
dudmuck 0:f8bc33804548 295 int imax = 0;
dudmuck 0:f8bc33804548 296 if (radio.RegOcp.bits.OcpTrim < 16)
dudmuck 0:f8bc33804548 297 imax = 45 + (5 * radio.RegOcp.bits.OcpTrim);
dudmuck 0:f8bc33804548 298 else if (radio.RegOcp.bits.OcpTrim < 28)
dudmuck 0:f8bc33804548 299 imax = -30 + (10 * radio.RegOcp.bits.OcpTrim);
dudmuck 0:f8bc33804548 300 else
dudmuck 0:f8bc33804548 301 imax = 240;
dudmuck 0:f8bc33804548 302 printf(" OcpOn %dmA ", imax);
dudmuck 0:f8bc33804548 303 } else
dudmuck 0:f8bc33804548 304 printf(" OcpOFF ");
dudmuck 0:f8bc33804548 305
dudmuck 0:f8bc33804548 306 printf("\r\n");
dudmuck 0:f8bc33804548 307
dudmuck 0:f8bc33804548 308 }
dudmuck 0:f8bc33804548 309 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 310
dudmuck 0:f8bc33804548 311 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 312 void lora_print_dio()
dudmuck 0:f8bc33804548 313 {
dudmuck 0:f8bc33804548 314 radio.RegDioMapping2.octet = radio.read_reg(REG_DIOMAPPING2);
dudmuck 0:f8bc33804548 315 printf("DIO5:");
dudmuck 0:f8bc33804548 316 switch (radio.RegDioMapping2.bits.Dio5Mapping) {
dudmuck 0:f8bc33804548 317 case 0: printf("ModeReady"); break;
dudmuck 0:f8bc33804548 318 case 1: printf("ClkOut"); break;
dudmuck 0:f8bc33804548 319 case 2: printf("ClkOut"); break;
dudmuck 0:f8bc33804548 320 }
dudmuck 0:f8bc33804548 321 printf(" DIO4:");
dudmuck 0:f8bc33804548 322 switch (radio.RegDioMapping2.bits.Dio4Mapping) {
dudmuck 0:f8bc33804548 323 case 0: printf("CadDetected"); break;
dudmuck 0:f8bc33804548 324 case 1: printf("PllLock"); break;
dudmuck 0:f8bc33804548 325 case 2: printf("PllLock"); break;
dudmuck 0:f8bc33804548 326 }
dudmuck 0:f8bc33804548 327 radio.RegDioMapping1.octet = radio.read_reg(REG_DIOMAPPING1);
dudmuck 0:f8bc33804548 328 printf(" DIO3:");
dudmuck 0:f8bc33804548 329 switch (radio.RegDioMapping1.bits.Dio3Mapping) {
dudmuck 0:f8bc33804548 330 case 0: printf("CadDone"); break;
dudmuck 0:f8bc33804548 331 case 1: printf("ValidHeader"); break;
dudmuck 0:f8bc33804548 332 case 2: printf("PayloadCrcError"); break;
dudmuck 0:f8bc33804548 333 }
dudmuck 0:f8bc33804548 334 printf(" DIO2:");
dudmuck 0:f8bc33804548 335 switch (radio.RegDioMapping1.bits.Dio2Mapping) {
dudmuck 0:f8bc33804548 336 case 0:
dudmuck 0:f8bc33804548 337 case 1:
dudmuck 0:f8bc33804548 338 case 2:
dudmuck 0:f8bc33804548 339 printf("FhssChangeChannel");
dudmuck 0:f8bc33804548 340 break;
dudmuck 0:f8bc33804548 341 }
dudmuck 0:f8bc33804548 342 printf(" DIO1:");
dudmuck 0:f8bc33804548 343 switch (radio.RegDioMapping1.bits.Dio1Mapping) {
dudmuck 0:f8bc33804548 344 case 0: printf("RxTimeout"); break;
dudmuck 0:f8bc33804548 345 case 1: printf("FhssChangeChannel"); break;
dudmuck 0:f8bc33804548 346 case 2: printf("CadDetected"); break;
dudmuck 0:f8bc33804548 347 }
dudmuck 0:f8bc33804548 348 printf(" DIO0:");
dudmuck 0:f8bc33804548 349 switch (radio.RegDioMapping1.bits.Dio0Mapping) {
dudmuck 0:f8bc33804548 350 case 0: printf("RxDone"); break;
dudmuck 0:f8bc33804548 351 case 1: printf("TxDone"); break;
dudmuck 0:f8bc33804548 352 case 2: printf("CadDone"); break;
dudmuck 0:f8bc33804548 353 }
dudmuck 0:f8bc33804548 354
dudmuck 0:f8bc33804548 355 printf("\r\n");
dudmuck 0:f8bc33804548 356 }
dudmuck 0:f8bc33804548 357 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 358
dudmuck 0:f8bc33804548 359 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 360 void
dudmuck 0:f8bc33804548 361 printCodingRate(bool from_rx)
dudmuck 0:f8bc33804548 362 {
dudmuck 0:f8bc33804548 363 uint8_t d = radio.getCodingRate(from_rx);
dudmuck 0:f8bc33804548 364 printf("CodingRate:");
dudmuck 0:f8bc33804548 365 switch (d) {
dudmuck 0:f8bc33804548 366 case 1: printf("4/5 "); break;
dudmuck 0:f8bc33804548 367 case 2: printf("4/6 "); break;
dudmuck 0:f8bc33804548 368 case 3: printf("4/7 "); break;
dudmuck 0:f8bc33804548 369 case 4: printf("4/8 "); break;
dudmuck 0:f8bc33804548 370 default:
dudmuck 0:f8bc33804548 371 printf("%d ", d);
dudmuck 0:f8bc33804548 372 break;
dudmuck 0:f8bc33804548 373 }
dudmuck 0:f8bc33804548 374 }
dudmuck 0:f8bc33804548 375 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 376
dudmuck 0:f8bc33804548 377 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 378 void printHeaderMode()
dudmuck 0:f8bc33804548 379 {
dudmuck 0:f8bc33804548 380 if (radio.getHeaderMode())
dudmuck 0:f8bc33804548 381 printf("implicit ");
dudmuck 0:f8bc33804548 382 else
dudmuck 0:f8bc33804548 383 printf("explicit ");
dudmuck 0:f8bc33804548 384 }
dudmuck 0:f8bc33804548 385 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 386
dudmuck 0:f8bc33804548 387 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 388 void printBw()
dudmuck 0:f8bc33804548 389 {
dudmuck 0:f8bc33804548 390 uint8_t bw = radio.getBw();
dudmuck 0:f8bc33804548 391
dudmuck 0:f8bc33804548 392 printf("Bw:");
dudmuck 0:f8bc33804548 393 if (radio.type == SX1276) {
dudmuck 0:f8bc33804548 394 switch (radio.RegModemConfig.sx1276bits.Bw) {
dudmuck 0:f8bc33804548 395 case 0: printf("7.8KHz "); break;
dudmuck 0:f8bc33804548 396 case 1: printf("10.4KHz "); break;
dudmuck 0:f8bc33804548 397 case 2: printf("15.6KHz "); break;
dudmuck 0:f8bc33804548 398 case 3: printf("20.8KHz "); break;
dudmuck 0:f8bc33804548 399 case 4: printf("31.25KHz "); break;
dudmuck 0:f8bc33804548 400 case 5: printf("41.7KHz "); break;
dudmuck 0:f8bc33804548 401 case 6: printf("62.5KHz "); break;
dudmuck 0:f8bc33804548 402 case 7: printf("125KHz "); break;
dudmuck 0:f8bc33804548 403 case 8: printf("250KHz "); break;
dudmuck 0:f8bc33804548 404 case 9: printf("500KHz "); break;
dudmuck 0:f8bc33804548 405 default: printf("%x ", radio.RegModemConfig.sx1276bits.Bw); break;
dudmuck 0:f8bc33804548 406 }
dudmuck 0:f8bc33804548 407 } else if (radio.type == SX1272) {
dudmuck 0:f8bc33804548 408 switch (radio.RegModemConfig.sx1272bits.Bw) {
dudmuck 0:f8bc33804548 409 case 0: printf("125KHz "); break;
dudmuck 0:f8bc33804548 410 case 1: printf("250KHz "); break;
dudmuck 0:f8bc33804548 411 case 2: printf("500KHz "); break;
dudmuck 0:f8bc33804548 412 case 3: printf("11b "); break;
dudmuck 0:f8bc33804548 413 }
dudmuck 0:f8bc33804548 414 }
dudmuck 0:f8bc33804548 415 }
dudmuck 0:f8bc33804548 416 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 417
dudmuck 0:f8bc33804548 418 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 419 void printSf()
dudmuck 0:f8bc33804548 420 {
dudmuck 0:f8bc33804548 421 // spreading factor same between sx127[26]
dudmuck 0:f8bc33804548 422 printf("sf:%d ", radio.getSf());
dudmuck 0:f8bc33804548 423 }
dudmuck 0:f8bc33804548 424 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 425
dudmuck 0:f8bc33804548 426 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 427 void printTxContinuousMode()
dudmuck 0:f8bc33804548 428 {
dudmuck 0:f8bc33804548 429 printf("TxContinuousMode:%d ", radio.RegModemConfig2.sx1276bits.TxContinuousMode); // same for sx1272 and sx1276
dudmuck 0:f8bc33804548 430 }
dudmuck 0:f8bc33804548 431 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 432
dudmuck 0:f8bc33804548 433 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 434 void printAgcAutoOn()
dudmuck 0:f8bc33804548 435 {
dudmuck 0:f8bc33804548 436 printf("AgcAutoOn:%d", radio.getAgcAutoOn());
dudmuck 0:f8bc33804548 437 }
dudmuck 0:f8bc33804548 438 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 439
dudmuck 0:f8bc33804548 440 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 441 void printRxPayloadCrcOn()
dudmuck 0:f8bc33804548 442 {
dudmuck 0:f8bc33804548 443 bool on = radio.getRxPayloadCrcOn();
dudmuck 0:f8bc33804548 444 //printf("RxPayloadCrcOn:%s ", on ? "on" : "off");
dudmuck 0:f8bc33804548 445 if (on)
dudmuck 0:f8bc33804548 446 printf("RxPayloadCrcOn:1 = Tx CRC Enabled\r\n");
dudmuck 0:f8bc33804548 447 else
dudmuck 0:f8bc33804548 448 printf("RxPayloadCrcOn:1 = no Tx CRC\r\n");
dudmuck 0:f8bc33804548 449 }
dudmuck 0:f8bc33804548 450 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 451
dudmuck 0:f8bc33804548 452 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 453 void printLoraIrqs_(bool clear)
dudmuck 0:f8bc33804548 454 {
dudmuck 0:f8bc33804548 455 //in radio class -- RegIrqFlags_t RegIrqFlags;
dudmuck 0:f8bc33804548 456
dudmuck 0:f8bc33804548 457 //already read RegIrqFlags.octet = radio.read_reg(REG_LR_IRQFLAGS);
dudmuck 0:f8bc33804548 458 printf("\r\nIrqFlags:");
dudmuck 0:f8bc33804548 459 if (radio.RegIrqFlags.bits.CadDetected)
dudmuck 0:f8bc33804548 460 printf("CadDetected ");
dudmuck 0:f8bc33804548 461 if (radio.RegIrqFlags.bits.FhssChangeChannel) {
dudmuck 0:f8bc33804548 462 //radio.RegHopChannel.octet = radio.read_reg(REG_LR_HOPCHANNEL);
dudmuck 0:f8bc33804548 463 printf("FhssChangeChannel:%d ", radio.RegHopChannel.bits.FhssPresentChannel);
dudmuck 0:f8bc33804548 464 }
dudmuck 0:f8bc33804548 465 if (radio.RegIrqFlags.bits.CadDone)
dudmuck 0:f8bc33804548 466 printf("CadDone ");
dudmuck 0:f8bc33804548 467 if (radio.RegIrqFlags.bits.TxDone)
dudmuck 0:f8bc33804548 468 printf("TxDone ");
dudmuck 0:f8bc33804548 469 if (radio.RegIrqFlags.bits.ValidHeader)
dudmuck 0:f8bc33804548 470 printf("ValidHeader ");
dudmuck 0:f8bc33804548 471 if (radio.RegIrqFlags.bits.PayloadCrcError)
dudmuck 0:f8bc33804548 472 printf("PayloadCrcError ");
dudmuck 0:f8bc33804548 473 if (radio.RegIrqFlags.bits.RxDone)
dudmuck 0:f8bc33804548 474 printf("RxDone ");
dudmuck 0:f8bc33804548 475 if (radio.RegIrqFlags.bits.RxTimeout)
dudmuck 0:f8bc33804548 476 printf("RxTimeout ");
dudmuck 0:f8bc33804548 477
dudmuck 0:f8bc33804548 478 printf("\r\n");
dudmuck 0:f8bc33804548 479
dudmuck 0:f8bc33804548 480 if (clear)
dudmuck 0:f8bc33804548 481 radio.write_reg(REG_LR_IRQFLAGS, radio.RegIrqFlags.octet);
dudmuck 0:f8bc33804548 482
dudmuck 0:f8bc33804548 483 }
dudmuck 0:f8bc33804548 484 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 485
dudmuck 0:f8bc33804548 486 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 487 void lora_print_status()
dudmuck 0:f8bc33804548 488 {
dudmuck 0:f8bc33804548 489 uint8_t d;
dudmuck 0:f8bc33804548 490
dudmuck 0:f8bc33804548 491 if (radio.type == SX1276)
dudmuck 0:f8bc33804548 492 printf("\r\nSX1276 ");
dudmuck 0:f8bc33804548 493 else if (radio.type == SX1272)
dudmuck 0:f8bc33804548 494 printf("\r\nSX1272 ");
dudmuck 0:f8bc33804548 495
dudmuck 0:f8bc33804548 496 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:f8bc33804548 497 if (!radio.RegOpMode.bits.LongRangeMode) {
dudmuck 0:f8bc33804548 498 printf("FSK\r\n");
dudmuck 0:f8bc33804548 499 return;
dudmuck 0:f8bc33804548 500 }
dudmuck 0:f8bc33804548 501
dudmuck 0:f8bc33804548 502 lora_print_dio();
dudmuck 0:f8bc33804548 503 printf("LoRa ");
dudmuck 0:f8bc33804548 504
dudmuck 0:f8bc33804548 505 // printing LoRa registers at 0x0d -> 0x3f
dudmuck 0:f8bc33804548 506
dudmuck 0:f8bc33804548 507 radio.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:f8bc33804548 508 radio.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
dudmuck 0:f8bc33804548 509
dudmuck 0:f8bc33804548 510 printCodingRate(false); // false: transmitted coding rate
dudmuck 0:f8bc33804548 511 printHeaderMode();
dudmuck 0:f8bc33804548 512 printBw();
dudmuck 0:f8bc33804548 513 printSf();
dudmuck 0:f8bc33804548 514 printRxPayloadCrcOn();
dudmuck 0:f8bc33804548 515 // RegModemStat
dudmuck 0:f8bc33804548 516 printf("ModemStat:0x%02x\r\n", radio.read_reg(REG_LR_MODEMSTAT));
dudmuck 0:f8bc33804548 517
dudmuck 0:f8bc33804548 518 // fifo ptrs:
dudmuck 0:f8bc33804548 519 radio.RegPayloadLength = radio.read_reg(REG_LR_PAYLOADLENGTH);
dudmuck 0:f8bc33804548 520 radio.RegRxMaxPayloadLength = radio.read_reg(REG_LR_RX_MAX_PAYLOADLENGTH);
dudmuck 0:f8bc33804548 521 printf("fifoptr=0x%02x txbase=0x%02x rxbase=0x%02x payloadLength=0x%02x maxlen=0x%02x",
dudmuck 0:f8bc33804548 522 radio.read_reg(REG_LR_FIFOADDRPTR),
dudmuck 0:f8bc33804548 523 radio.read_reg(REG_LR_FIFOTXBASEADDR),
dudmuck 0:f8bc33804548 524 radio.read_reg(REG_LR_FIFORXBASEADDR),
dudmuck 0:f8bc33804548 525 radio.RegPayloadLength,
dudmuck 0:f8bc33804548 526 radio.RegRxMaxPayloadLength
dudmuck 0:f8bc33804548 527 );
dudmuck 0:f8bc33804548 528
dudmuck 0:f8bc33804548 529 radio.RegIrqFlags.octet = radio.read_reg(REG_LR_IRQFLAGS);
dudmuck 0:f8bc33804548 530 printLoraIrqs_(false);
dudmuck 0:f8bc33804548 531
dudmuck 0:f8bc33804548 532 radio.RegHopPeriod = radio.read_reg(REG_LR_HOPPERIOD);
dudmuck 0:f8bc33804548 533 if (radio.RegHopPeriod != 0) {
dudmuck 0:f8bc33804548 534 printf("\r\nHopPeriod:0x%02x\r\n", radio.RegHopPeriod);
dudmuck 0:f8bc33804548 535 }
dudmuck 0:f8bc33804548 536
dudmuck 0:f8bc33804548 537 printf("SymbTimeout:0x%03x ", radio.read_u16(REG_LR_MODEMCONFIG2) & 0x3ff);
dudmuck 0:f8bc33804548 538
dudmuck 0:f8bc33804548 539 radio.RegPreamble = radio.read_u16(REG_LR_PREAMBLEMSB);
dudmuck 0:f8bc33804548 540 printf("PreambleLength:0x%03x ", radio.RegPreamble);
dudmuck 0:f8bc33804548 541
dudmuck 0:f8bc33804548 542
dudmuck 0:f8bc33804548 543 if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE) {
dudmuck 0:f8bc33804548 544 d = radio.read_reg(REG_LR_RSSIVALUE);
dudmuck 0:f8bc33804548 545 printf("rssi:%ddBm ", d-120);
dudmuck 0:f8bc33804548 546 }
dudmuck 0:f8bc33804548 547
dudmuck 0:f8bc33804548 548 printTxContinuousMode();
dudmuck 0:f8bc33804548 549
dudmuck 0:f8bc33804548 550 printf("\r\n");
dudmuck 0:f8bc33804548 551 printAgcAutoOn();
dudmuck 0:f8bc33804548 552 if (radio.type == SX1272) {
dudmuck 0:f8bc33804548 553 printf(" LowDataRateOptimize:%d\r\n", radio.RegModemConfig.sx1272bits.LowDataRateOptimize);
dudmuck 0:f8bc33804548 554 }
dudmuck 0:f8bc33804548 555
dudmuck 0:f8bc33804548 556 printf("\r\nHeaderCount:%d PacketCount:%d, ",
dudmuck 0:f8bc33804548 557 radio.read_u16(REG_LR_RXHEADERCNTVALUE_MSB), radio.read_u16(REG_LR_RXPACKETCNTVALUE_MSB));
dudmuck 0:f8bc33804548 558
dudmuck 0:f8bc33804548 559 printf("Lora detection threshold:%02x\r\n", radio.read_reg(REG_LR_DETECTION_THRESHOLD));
dudmuck 0:f8bc33804548 560 radio.RegTest31.octet = radio.read_reg(REG_LR_TEST31);
dudmuck 0:f8bc33804548 561 printf("detect_trig_same_peaks_nb:%d\r\n", radio.RegTest31.bits.detect_trig_same_peaks_nb);
dudmuck 0:f8bc33804548 562
dudmuck 0:f8bc33804548 563 if (radio.type == SX1272) {
dudmuck 0:f8bc33804548 564 radio.RegModemConfig.octet = radio.read_reg(REG_LR_MODEMCONFIG);
dudmuck 0:f8bc33804548 565 printf("LowDataRateOptimize:%d\r\n", radio.RegModemConfig.sx1272bits.LowDataRateOptimize);
dudmuck 0:f8bc33804548 566 } else if (radio.type == SX1276) {
dudmuck 0:f8bc33804548 567 radio.RegModemConfig3.octet = radio.read_reg(REG_LR_MODEMCONFIG3);
dudmuck 0:f8bc33804548 568 printf("LowDataRateOptimize:%d\r\n", radio.RegModemConfig3.sx1276bits.LowDataRateOptimize);
dudmuck 0:f8bc33804548 569 }
dudmuck 0:f8bc33804548 570
dudmuck 0:f8bc33804548 571 printf("\r\n");
dudmuck 0:f8bc33804548 572 //printf("A %02x\r\n", radio.RegModemConfig2.octet);
dudmuck 0:f8bc33804548 573 }
dudmuck 0:f8bc33804548 574 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 575
dudmuck 0:f8bc33804548 576 void
dudmuck 0:f8bc33804548 577 service_radio()
dudmuck 0:f8bc33804548 578 {
dudmuck 0:f8bc33804548 579 service_action_e act = radio.service();
dudmuck 0:f8bc33804548 580
dudmuck 0:f8bc33804548 581 switch (act) {
dudmuck 0:f8bc33804548 582 case SERVICE_READ_FIFO:
dudmuck 0:f8bc33804548 583 printf("SERVICE_READ_FIFO\r\n");
dudmuck 0:f8bc33804548 584 // clear Irq flags
dudmuck 0:f8bc33804548 585 radio.write_reg(REG_LR_IRQFLAGS, radio.RegIrqFlags.octet);
dudmuck 0:f8bc33804548 586 break;
dudmuck 0:f8bc33804548 587 case SERVICE_TX_DONE:
dudmuck 0:f8bc33804548 588 printf("SERVICE_TX_DONE\r\n");
dudmuck 0:f8bc33804548 589 break;
dudmuck 0:f8bc33804548 590 case SERVICE_ERROR:
dudmuck 0:f8bc33804548 591 printf("error\r\n");
dudmuck 0:f8bc33804548 592 break;
dudmuck 0:f8bc33804548 593 } // ...switch (act)
dudmuck 0:f8bc33804548 594 }
dudmuck 0:f8bc33804548 595
dudmuck 0:f8bc33804548 596 int
dudmuck 0:f8bc33804548 597 main(void)
dudmuck 0:f8bc33804548 598 {
dudmuck 0:f8bc33804548 599 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 600 pc.baud(57600);
dudmuck 0:f8bc33804548 601 pc.printf("\r\nstart\r\n");
dudmuck 0:f8bc33804548 602 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 603
dudmuck 0:f8bc33804548 604 while (1) {
dudmuck 0:f8bc33804548 605 //try to read a msg
dudmuck 0:f8bc33804548 606 if (hid.readNB(&recv_report)) {
dudmuck 0:f8bc33804548 607 HidCmdProcess();
dudmuck 0:f8bc33804548 608 }
dudmuck 0:f8bc33804548 609
dudmuck 0:f8bc33804548 610 #ifdef _DEBUG_
dudmuck 0:f8bc33804548 611 if (pc.readable()) {
dudmuck 0:f8bc33804548 612 char c = pc.getc();
dudmuck 0:f8bc33804548 613 if (c == 'v') {
dudmuck 0:f8bc33804548 614 pc.printf("verbose ");
dudmuck 0:f8bc33804548 615 if (verbose) {
dudmuck 0:f8bc33804548 616 verbose = 0;
dudmuck 0:f8bc33804548 617 pc.printf("off");
dudmuck 0:f8bc33804548 618 } else {
dudmuck 0:f8bc33804548 619 verbose = 1;
dudmuck 0:f8bc33804548 620 pc.printf("on");
dudmuck 0:f8bc33804548 621 }
dudmuck 0:f8bc33804548 622 pc.printf("\r\n");
dudmuck 0:f8bc33804548 623 } else if (c == '.') {
dudmuck 0:f8bc33804548 624 common_print_status();
dudmuck 0:f8bc33804548 625 if (radio.RegOpMode.bits.LongRangeMode)
dudmuck 0:f8bc33804548 626 lora_print_status();
dudmuck 0:f8bc33804548 627 else
dudmuck 0:f8bc33804548 628 printf("FSK\r\n");
dudmuck 0:f8bc33804548 629 } else if (c == 't') {
dudmuck 0:f8bc33804548 630 int i;
dudmuck 0:f8bc33804548 631 printf("tx\r\n");
dudmuck 0:f8bc33804548 632 radio.set_opmode(RF_OPMODE_TRANSMITTER);
dudmuck 0:f8bc33804548 633 for (i = 0; i < 20; i++) {
dudmuck 0:f8bc33804548 634 radio.RegOpMode.octet = radio.read_reg(REG_OPMODE);
dudmuck 0:f8bc33804548 635 printf("opmode:%02x\r\n", radio.RegOpMode.octet);
dudmuck 0:f8bc33804548 636 }
dudmuck 0:f8bc33804548 637 } else if (c == 'T') {
dudmuck 0:f8bc33804548 638 printf("start_tx\r\n");
dudmuck 0:f8bc33804548 639 radio.RegPayloadLength = 8;
dudmuck 0:f8bc33804548 640 radio.write_reg(REG_LR_PAYLOADLENGTH, radio.RegPayloadLength);
dudmuck 0:f8bc33804548 641 radio.lora_start_tx(8);
dudmuck 0:f8bc33804548 642 } else if (c == 'e') {
dudmuck 0:f8bc33804548 643 printf("service_radio\r\n");
dudmuck 0:f8bc33804548 644 service_radio();
dudmuck 0:f8bc33804548 645 } else if (c == 's') {
dudmuck 0:f8bc33804548 646 radio.set_opmode(RF_OPMODE_STANDBY);
dudmuck 0:f8bc33804548 647 printf("standby\r\n");
dudmuck 0:f8bc33804548 648 } else if (c == 'h') {
dudmuck 0:f8bc33804548 649 printf("hwreset\r\n");
dudmuck 0:f8bc33804548 650 radio.hw_reset();
dudmuck 0:f8bc33804548 651 radio.init(); //SX1272Init( );
dudmuck 0:f8bc33804548 652 } else if (c == 'l') {
dudmuck 0:f8bc33804548 653 radio.SetLoRaOn(!radio.RegOpMode.bits.LongRangeMode);
dudmuck 0:f8bc33804548 654 printf("LongRangeMode:%d\r\n", radio.RegOpMode.bits.LongRangeMode);
dudmuck 0:f8bc33804548 655 } else if (c == '?') {
dudmuck 0:f8bc33804548 656 printf("s standby\r\n");
dudmuck 0:f8bc33804548 657 printf("T lora_start_tx(8)\r\n");
dudmuck 0:f8bc33804548 658 printf(". print status\r\n");
dudmuck 0:f8bc33804548 659 printf("v toggle verbose\r\n");
dudmuck 0:f8bc33804548 660 printf("t tx mode test\r\n");
dudmuck 0:f8bc33804548 661 printf("e manualy service radio once\r\n");
dudmuck 0:f8bc33804548 662 printf("h hwreset, init\r\n");
dudmuck 0:f8bc33804548 663 printf("l toggle lora mode\r\n");
dudmuck 0:f8bc33804548 664 }
dudmuck 0:f8bc33804548 665 } // ...if (pc.readable())
dudmuck 0:f8bc33804548 666 #endif /* _DEBUG_ */
dudmuck 0:f8bc33804548 667
dudmuck 0:f8bc33804548 668 } // ...while (1)
dudmuck 0:f8bc33804548 669 }