Test program to send MAX!-Messages with a RFM22-Module

Dependencies:   RF22 TextLCD TextLCDScroll mbed RF22Max

Revision:
0:94dd393bd9bb
Child:
1:b71f9a293c54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jan 16 19:06:53 2012 +0000
@@ -0,0 +1,306 @@
+
+// Test code used during library development, showing how
+// to do various things, and how to call various functions
+// ported to mbed by Karl Zweimueller
+
+#include "mbed.h"
+
+#include <RF22.h>
+
+Serial pc(USBTX, USBRX);
+
+// mbed LEDs
+//DigitalOut led1(LED1);
+//DigitalOut led2(LED2);
+//DigitalOut led3(LED3);
+//DigitalOut led4(LED4);
+
+
+// Singleton instance of the radio
+//rf22(PinName slaveSelectPin , PinName mosi, PinName miso, PinName sclk, PinName interrupt );
+RF22 rf22(p14,p11,p12,p13,p15);
+
+void setup() {
+
+    if (!rf22.init())
+        pc.printf("RF22 init failed\n\r");
+}
+
+void
+test_read_write() {
+    uint8_t val;
+    rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 10);
+    val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
+    pc.printf("%n\r\n",val);
+
+    rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 5);
+    val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
+    pc.printf("%n\r\n", val);
+    pc.printf("-----");
+}
+
+void
+test_adc() {
+    uint8_t val = rf22.adcRead(RF22_ADCSEL_GND);
+    pc.printf("%n\r\n", val);
+}
+
+void test_temp() {
+    float val = rf22.temperatureRead();
+    pc.printf("%3.1f\r\n", (val/2)-64);
+}
+
+void
+test_burst_read() {
+    uint8_t buf[127];
+    rf22.spiBurstRead(0, buf, sizeof(buf));
+    uint8_t i;
+    for (i = 0; i < 127; i++) {
+        pc.printf("%x : %x\n\r",i,buf[i]);
+    }
+}
+
+void test_burst_write() {
+    uint8_t buf[] = "Hello";
+    rf22.spiBurstWrite(RF22_REG_7F_FIFO_ACCESS, buf, sizeof(buf));
+}
+
+void
+test_wut() {
+    pc.printf("WUT Start");
+    rf22.setWutPeriod(10000); // 10000, 0, 0 -> 1 secs
+    rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, RF22_ENWT);
+    // Wait for the interrupt to occur
+    while (1) {
+        uint8_t val = rf22.spiRead(RF22_REG_04_INTERRUPT_STATUS2);
+        if (val & RF22_IWUT)
+            break;
+    }
+    rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, 0);
+
+    pc.printf("WUT Interrupt bit detected OK");
+}
+
+void
+test_set_frequency() {
+    if (!rf22.setFHStepSize(0))
+        pc.printf("setFHStepSize 1 Fail");
+    if (!rf22.setFHChannel(0))
+        pc.printf("setFHChannel 1 Fail");
+    if (!rf22.setFrequency(434.0))
+        pc.printf("setFrequency 1 Fail");
+    if (!rf22.setFrequency(240.0))
+        pc.printf("setFrequency 2 Fail");
+    if (!rf22.setFrequency(929.9999)) // Higher than this produces FREQERR on my 06 silicon
+        pc.printf("setFrequency 3 Fail");
+    if (rf22.setFrequency(960.1)) // Should fail
+        pc.printf("setFrequency 4 Fail");
+
+    pc.printf("-------------");
+}
+
+void
+test_rssi() {
+    rf22.setModeRx();
+    pc.printf("Start\n\r");
+    float f = 848.0;
+    while (f < 888.0) {
+        rf22.setFrequency(f);
+        wait_ms(200); // Wait for freq to settle
+        uint8_t rssi = rf22.rssiRead();
+
+        pc.printf("%f: %i\n\r",f,rssi);
+        f += 1.0;
+    }
+    pc.printf("End\n\r");
+    rf22.setModeIdle();
+    pc.printf("\n\r-------------\n\r");
+}
+
+// Sends 0.5 secs of PN9 modulated with with GFSK at full power
+void test_tx_pn9() {
+    rf22.setFrequency(434.0);
+    rf22.setTxPower(RF22_TXPOW_17DBM);
+    rf22.setModeRx();
+    // Takes a little while to start
+    wait(1);
+    pc.printf("%x \n\r",rf22.statusRead());
+    rf22.setModemConfig(RF22::FSK_PN9_Rb2Fd5);
+//  rf22.setModemConfig(RF22::UnmodulatedCarrier);
+    rf22.setModeTx(); // Turns off Rx
+    // Takes a little while to start
+    wait(1);
+    pc.printf("%x \n\r",rf22.statusRead());
+    wait_ms(500);
+    rf22.setModeIdle();
+    // Takes a little while to turn off the transmitter
+    wait_ms(10);
+    pc.printf("%x \n\r",rf22.statusRead());
+    pc.printf("-------------");
+    wait_ms(500);
+}
+
+// Connect analog test points to GPIO1 and GPIO2
+void test_analog_gpio() {
+    rf22.setFrequency(434.0);
+    rf22.setModeRx();
+    // GPIO1 for Test N output
+    rf22.spiWrite(RF22_REG_0C_GPIO_CONFIGURATION1, 0x0c);
+    // GPIO2 for Test P output
+    rf22.spiWrite(RF22_REG_0D_GPIO_CONFIGURATION2, 0x0d);
+    rf22.spiWrite(RF22_REG_50_ANALOG_TEST_BUS_SELECT, 15); // Detector?
+    while (1);
+}
+
+void test_modem_config() {
+    if (rf22.setModemConfig((RF22::ModemConfigChoice)255)) // Should fail
+        pc.printf("setModemConfig 1 failed");
+    if (!rf22.setModemConfig(RF22::FSK_Rb2Fd5))
+        pc.printf("setModemConfig 2 failed");
+    if (!rf22.setModemConfig(RF22::FSK_Rb2_4Fd36))
+        pc.printf("setModemConfig 3 failed");
+    if (!rf22.setModemConfig(RF22::GFSK_Rb2_4Fd36))
+        pc.printf("setModemConfig 3 failed");
+    if (!rf22.setModemConfig(RF22::OOK_Rb40Bw335))
+        pc.printf("setModemConfig 4 failed");
+
+    pc.printf("-------------");
+}
+
+// This works with test_rx below
+void test_tx() {
+    pc.printf("Start Send...\n\r");
+    if (!rf22.setFrequency(869.50))
+        pc.printf("setFrequency failed");
+    if (!rf22.setModemConfig(RF22::GFSK_Rb2Fd5))
+        pc.printf("setModemConfig failed");
+    //uint8_t data[] = "hello";
+    // 255 octets:
+    uint8_t data[] = "12345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012345";
+    rf22.send(data, sizeof(data));
+    rf22.waitPacketSent();
+    pc.printf("Send OK\n\r");
+
+}
+
+// This works with test_tx above
+void test_rx() {
+    pc.printf("Start Receive...\n\r");
+    //if (!rf22.setFrequency(869.50))
+    if (!rf22.setFrequency(869.49))      //          sending frequesnce doesn't work!!!  Seems to be a problem if combining RFM22B-S1 with -S2
+        pc.printf("setFrequency failed\n\r");
+    if (!rf22.setModemConfig(RF22::GFSK_Rb2Fd5))
+        pc.printf("setModemConfig failed\n\r");
+
+    //while (1) {
+        uint8_t buf[RF22_MAX_MESSAGE_LEN];
+        uint8_t len = sizeof(buf);
+        if (rf22.recv(buf, &len)) // Should fail, no message available
+            pc.printf("recv 1 failed\n\r");
+
+        //rf22.waitAvailable();
+        if (rf22.waitAvailableTimeout(6000)) {
+            if (rf22.recv(buf, &len))
+                pc.printf("got one in user: >%s<\n\r",(char*)buf);
+
+            else
+                pc.printf("recv 2 failed\n\r");
+        } else
+            pc.printf("recv timeout\n\r");
+
+    //}
+}
+
+void loop() {
+//  test_read_write();
+//  test_adc();
+//  test_temp();
+//  test_burst_read();
+//  test_burst_write();
+//  test_wut();
+//  test_set_frequency();
+//  test_rssi();
+    test_tx_pn9();
+//  test_analog_gpio();
+//  test_modem_config();
+//  test_tx();
+//  test_rx();
+
+//  while (1);
+    wait_ms(1000);
+}
+
+/*float start = 868.0;
+  float end = 868.8;
+*/
+//869,40 - 869,65     Allgemein
+float start = 869.4;
+float end = 869.65;
+float step = 0.02;
+
+void spec() {
+    rf22.setModeRx();
+    float freq;
+    pc.printf("\033[H"); // Home
+    pc.printf("\033[2J"); // Clear Screen
+    for (freq = start; freq < end; freq += step) {
+        rf22.setFrequency(freq);
+        wait_ms(10); // Let the freq settle
+        uint8_t rssi = rf22.rssiRead();
+        uint8_t stars = rssi / 8;
+
+        pc.printf("%f: ",freq);
+
+//    Serial.print(rssi, DEC);
+        uint8_t i;
+        for (i = 0; i < stars; i++)
+            pc.putc('*');
+        pc.printf("\033[K\n\r"); // DElete to EOL
+
+    }
+    pc.printf("------------------\n\r");
+}
+
+
+int main() {
+    pc.baud(115200);
+
+    pc.printf("\n\rConnected to mbed\n\r");
+
+    pc.printf("Pre-setup|");
+    setup();
+    pc.printf("Post-setup\n\r");
+    
+
+    //pc.printf("Pre-test_temp|");
+    //test_temp();
+    //pc.printf("Post-test_temp\n\r");
+
+    //pc.printf("Pre-test_set_frequency|");
+    //test_set_frequency();
+    //pc.printf("Post-test_set_frequency\n\r");
+
+    /*    while (1){
+        pc.printf("Pre-test_rssi|");
+        test_rssi();
+        pc.printf("Post-test_rssi\n\r");
+        }
+     
+    while (1) {
+        spec();
+    }
+    */
+    
+    while (1) {
+        test_tx();
+        rf22.setModeRx();
+        wait(0.5);
+        test_rx();
+        wait(2);
+        spec();
+    }
+    
+    //pc.printf("Ready.\n\r");
+}
+
+