Terminal for sending and receiving data via Semtech SX1276 chip. It uses the FRDM-KL25Z board, with a Modtronix inAir9 SX1276 board, and 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 mbed
Fork of chat_sx127x by
Diff: main.cpp
- Revision:
- 3:ab386fa756cc
- Parent:
- 2:c6b23a43a9d9
- Child:
- 4:7a9007dfc0e5
--- a/main.cpp Fri May 02 01:19:17 2014 +0000 +++ b/main.cpp Fri May 02 23:35:43 2014 +0000 @@ -20,7 +20,7 @@ app_e app = APP_NONE; -const uint32_t frfs[] = { +const uint32_t frfs[] = { /* frequency hopping table */ MHZ_TO_FRF(903.0), MHZ_TO_FRF(904.0), MHZ_TO_FRF(905.0), @@ -425,22 +425,6 @@ //printf("A %02x\r\n", radio.RegModemConfig2.octet); } -uint32_t fsk_get_bitrate(void) -{ - uint16_t br = radio.read_u16(REG_FSK_BITRATEMSB); - - if (br == 0) - return 0; - else - return XTAL_FREQ / br; -} - -uint32_t fsk_get_tx_fdev_hz(void) -{ - uint16_t fdev = radio.read_u16(REG_FSK_FDEVMSB); - return fdev * FREQ_STEP_HZ; -} - uint16_t fsk_get_PayloadLength(void) { @@ -519,7 +503,7 @@ printf("OOK "); } - printf("%dbps fdev:%dHz\r\n", fsk_get_bitrate(), fsk_get_tx_fdev_hz()); + printf("%dbps fdev:%dHz\r\n", fsk.get_bitrate(), fsk.get_tx_fdev_hz()); fsk.RegPktConfig2.word = radio.read_u16(REG_FSK_PACKETCONFIG2); @@ -983,11 +967,6 @@ } } -void user_init(void) -{ - // set desired spreadingfactor, bandwidth, MHz, etc. -} - int get_kbd_str(char* buf, int size) { char c; @@ -1062,8 +1041,13 @@ if (len == 1) { switch (pcbuf[0]) { case 'i': + printf("init\r\n"); radio.init(); - user_init(); + if (!radio.RegOpMode.bits.LongRangeMode) { + fsk.init(); // put FSK modem to some functioning default + } else { + // lora configuration is more simple + } break; case 'h': printf("hw_reset()\r\n"); @@ -1183,6 +1167,7 @@ printf("C toggle crcOn\r\n"); printf("op[%%d] get/set output power\r\n"); printf("d[0-5] change DIO pin assignment\r\n"); + printf("frf[%%f} get/set operating frequency (MHz)\r\n"); if (radio.RegOpMode.bits.LongRangeMode) { printf("pl[%%d] LORA get/set RegPayloadLength\r\n"); printf("cr[1234] LORA set coding rate \r\n"); @@ -1193,6 +1178,8 @@ printf("hm LORA toggle explicit/explicit header mode\r\n"); } else { printf("bw[a][%%d] FSK get-set rxbw (bwa=afcbw)\r\n"); + printf("br[%%d] FSK get-set bitrate\r\n"); + printf("fdev[%%d] FSK get-set TX frequency deviation (hz)\r\n"); printf("rt FSK change RxTrigger\r\n"); printf("pd FSK enable/disable preamble detector\r\n"); printf("pt FSK get-set PreambleDetectorTol\r\n"); @@ -1206,6 +1193,7 @@ printf("mp FSK toggle MapPreambleDetect\r\n"); printf("ar FSK change AutoRestartRxMode\r\n"); printf("alc FSK toggle AfcAutoClearOn\r\n"); + printf("pre[%%d} FSK get-set TX preamble length\r\n"); } break; case '.': @@ -1336,7 +1324,13 @@ fsk.RegAfcFei.bits.AfcClear = 1; radio.write_reg(REG_FSK_AFCFEI, fsk.RegAfcFei.octet); fsk.RegAfcFei.bits.AfcClear = 0; - printf("%dHz\r\n", (int)(FREQ_STEP_HZ * radio.read_s16(REG_FSK_AFCMSB))); + printf("%dHz\r\n", (int)(FREQ_STEP_HZ * radio.read_s16(REG_FSK_AFCMSB))); + } else if (pcbuf[0] == 'b' && pcbuf[1] == 'r' && !radio.RegOpMode.bits.LongRangeMode) { + if (pcbuf[2] >= '0' && pcbuf[2] <= '9') { + sscanf(&pcbuf[2], "%d", &i); + fsk.set_bitrate(i); + } + printf("%dbps\r\n", fsk.get_bitrate()); } else if (pcbuf[0] == 'b' && pcbuf[1] == 'w') { if (radio.RegOpMode.bits.LongRangeMode) { if (pcbuf[2] >= '0' && pcbuf[2] <= '9') { @@ -1377,19 +1371,19 @@ radio.write_reg(REG_FSK_SYNCVALUE1, ui); } else if (ui < 0x10000) { fsk.RegSyncConfig.bits.SyncSize = 1; - radio.write_reg(REG_FSK_SYNCVALUE1, ui & 0xff); - radio.write_reg(REG_FSK_SYNCVALUE2, ui >> 8); + radio.write_reg(REG_FSK_SYNCVALUE2, ui & 0xff); + radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 8); } else if (ui < 0x1000000) { fsk.RegSyncConfig.bits.SyncSize = 2; - radio.write_reg(REG_FSK_SYNCVALUE1, ui & 0xff); + radio.write_reg(REG_FSK_SYNCVALUE3, ui & 0xff); radio.write_reg(REG_FSK_SYNCVALUE2, (ui >> 8) & 0xff); - radio.write_reg(REG_FSK_SYNCVALUE3, ui >> 16); + radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 16); } else { fsk.RegSyncConfig.bits.SyncSize = 3; - radio.write_reg(REG_FSK_SYNCVALUE1, ui & 0xff); - radio.write_reg(REG_FSK_SYNCVALUE2, (ui >> 8) & 0xff); - radio.write_reg(REG_FSK_SYNCVALUE3, (ui >> 16) & 0xff); - radio.write_reg(REG_FSK_SYNCVALUE4, ui >> 24); + radio.write_reg(REG_FSK_SYNCVALUE4, ui & 0xff); + radio.write_reg(REG_FSK_SYNCVALUE3, (ui >> 8) & 0xff); + radio.write_reg(REG_FSK_SYNCVALUE2, (ui >> 16) & 0xff); + radio.write_reg(REG_FSK_SYNCVALUE1, ui >> 24); } radio.write_reg(REG_FSK_SYNCCONFIG, fsk.RegSyncConfig.octet); } @@ -1418,14 +1412,26 @@ lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2); lora_printSf(); printf("\r\n"); + } else if (pcbuf[0] == 'f' && pcbuf[1] == 'd' && pcbuf[2] == 'e' && !radio.RegOpMode.bits.LongRangeMode) { + if (pcbuf[4] >= '0' && pcbuf[4] <= '9') { + sscanf(pcbuf+4, "%d", &i); + fsk.set_tx_fdev_hz(i); + } + printf("fdev:%dHz\r\n", fsk.get_tx_fdev_hz()); } else if (pcbuf[0] == 'f' && pcbuf[1] == 'r' && pcbuf[2] == 'f') { if (pcbuf[3] >= '0' && pcbuf[3] <= '9') { float MHz; sscanf(pcbuf+3, "%f", &MHz); //printf("MHz:%f\r\n", MHz); radio.set_frf_MHz(MHz); - } else - printf("%fMHz\r\n", radio.get_frf_MHz()); + } + printf("%fMHz\r\n", radio.get_frf_MHz()); + } else if (pcbuf[0] == 'p' && pcbuf[1] == 'r' && pcbuf[2] == 'e' && !radio.RegOpMode.bits.LongRangeMode) { + if (pcbuf[3] >= '0' && pcbuf[3] <= '9') { + sscanf(pcbuf+3, "%d", &i); + radio.write_u16(REG_FSK_PREAMBLEMSB, i); + } + printf("FSK TX PreambleSize:%d ", radio.read_u16(REG_FSK_PREAMBLEMSB)); } else if (pcbuf[0] == 'p' && pcbuf[1] == 't' && !radio.RegOpMode.bits.LongRangeMode) { if (pcbuf[2] >= '0' && pcbuf[2] <= '9') { sscanf(pcbuf+2, "%d", &i); @@ -1500,7 +1506,6 @@ { pc.baud(57600); - user_init(); radio.frfs = frfs;