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 wayne roberts

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;