May 2021 test

Dependencies:   sx128x sx12xx_hal

Revision:
0:b6ec8db2edbf
Child:
1:6a3a48d657a9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Aug 22 10:16:06 2017 -0700
@@ -0,0 +1,127 @@
+#include "sx127x_lora.h"
+ 
+DigitalOut myled(LED1);
+ 
+SPI spi(D11, D12, D13); // mosi, miso, sclk
+//           dio0, dio1, nss, spi, rst
+SX127x radio(  D2,   D3, D10, spi, A0); // sx1276 arduino shield
+ 
+SX127x_lora lora(radio);
+DigitalInOut rfsw(A4);    // for SX1276 arduino shield
+ 
+void rfsw_callback()
+{
+    if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER)
+        rfsw = 1;
+    else
+        rfsw = 0;
+}
+/**********************************************************************/
+DigitalOut pc_3(PC_3);
+Timeout to;
+
+#define PIN_ASSERT_us       200000
+#define CMD_ALARM       0x01
+
+void alarm_pin_clr()
+{
+    pc_3 = 0;
+}
+
+void alarm_pin_set()
+{
+    pc_3 = 1;
+    to.attach_us(&alarm_pin_clr, PIN_ASSERT_us);
+}
+
+static uint16_t crc_ccitt( uint8_t *buffer, uint16_t length )
+{
+    // The CRC calculation follows CCITT
+    const uint16_t polynom = 0x1021;
+    // CRC initial value
+    uint16_t crc = 0x0000;
+
+    if( buffer == NULL )
+    {
+        return 0;
+    }
+
+    for( uint16_t i = 0; i < length; ++i )
+    {
+        crc ^= ( uint16_t ) buffer[i] << 8;
+        for( uint16_t j = 0; j < 8; ++j )
+        {
+            crc = ( crc & 0x8000 ) ? ( crc << 1 ) ^ polynom : ( crc << 1 );
+        }
+    }
+
+    return crc;
+}
+
+void get_alarm()
+{
+    uint16_t rx_crc, crc = crc_ccitt(radio.rx_buf, 5);
+    rx_crc = radio.rx_buf[5];
+    rx_crc <<= 8;
+    rx_crc += radio.rx_buf[6];
+    //printf("%u) crc rx:%04x, calc:%04x\r\n", lora.RegRxNbBytes, rx_crc, crc);
+    if (crc == rx_crc) {
+        if (radio.rx_buf[0] == CMD_ALARM) {
+            unsigned delay;
+            delay = radio.rx_buf[1];
+            delay <<= 8;
+            delay += radio.rx_buf[2];
+            delay <<= 8;
+            delay += radio.rx_buf[3];
+            delay <<= 8;
+            delay += radio.rx_buf[4];
+            to.attach_us(&alarm_pin_set, delay);
+            printf("delay:%u\r\n", delay);
+        } else
+            printf("cmd? %02x\r\n", radio.rx_buf[0]);
+    } else
+        printf("crc fail %04x, %04x\r\n", rx_crc, crc);
+}
+ 
+int main()
+{   
+    printf("\r\nreset-rx\r\n");
+    radio.rf_switch = rfsw_callback;
+    
+    radio.set_frf_MHz(910.8);
+    lora.enable();
+    lora.setBw_KHz(500);
+    lora.setSf(11);
+    
+    /* RFO or PABOOST choice:
+     * SX1276 shield: RFO if using 900MHz, or PA_BOOST if using 433MHz
+     */
+    rfsw.input();
+    if (rfsw.read()) {
+        printf("LAS\r\n");
+        /* LAS HF=PA_BOOST  LF=RFO */
+        if (radio.HF)
+            radio.RegPaConfig.bits.PaSelect = 1;
+        else
+            radio.RegPaConfig.bits.PaSelect = 0;
+    } else {
+        /* MAS shield board, only RFO TX */
+        radio.RegPaConfig.bits.PaSelect = 0;
+        printf("MAS\r\n");
+    }
+    rfsw.output();
+    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
+                
+    lora.start_rx(RF_OPMODE_RECEIVER);
+    
+    for (;;) {     
+        if (lora.service() == SERVICE_READ_FIFO) {
+            /*int i;
+            for (i = 0; i < lora.RegRxNbBytes; i++) {
+                printf("%02x ", radio.rx_buf[i]);
+            }
+            printf("\r\n");*/
+            get_alarm();
+        }
+    }
+}