Library to send and receive data using RF12B transceiver modules Big thanks to the tutorial at https://loee.jottit.com/rfm12b_and_avr_-_quick_start and madcowswe

Dependents:   Measure_system Quadcopter_copy

Revision:
3:e72ad65868ab
Parent:
2:99cf337cd23e
Child:
4:2a295db9ba1a
--- a/RF12B.cpp	Thu Mar 10 12:48:08 2011 +0000
+++ b/RF12B.cpp	Thu Mar 10 13:14:48 2011 +0000
@@ -1,117 +1,117 @@
-#include "RF12B.h"
-
-RF12B::RF12B(PinName SDI,
-             PinName SDO,
-             PinName SCK,
-             PinName NCS,
-             PinName NIRQ):spi(SDI, SDO, SCK),
-        NCS(NCS), NIRQ(NIRQ) {
-    this->initialized = false;
-    this->trans = false;
-
-    this->spi.format(16,0);
-    this->spi.frequency(2000000);
-    this->NCS = 1;
-
-    init(); 
-    mode(false);// Receiver
-    flush();
-}
-
-
-/* Reads a byte of data from the RF module's buffer
-    This is a blocking call */
-unsigned char RF12B::read() {
-    if (!initialized || trans) {
-        mode(false); //Receiver
-        trans = false;
-        initialized = true;
-    }
-
-    unsigned int data;
-    while (1) {
-        data = writeCmd(0x0000);
-        if ( (data&0x8000) ) {
-            data = writeCmd(0xB000);
-            return (data&0x00FF);
-        }
-    }
-}
-
-/* Sends a byte of data to the RF module for transmission */
-void RF12B::write(unsigned char *data) {
-    if (!initialized || !trans) {
-        mode(true); //Transmitter
-        trans = true;
-        initialized = true;
-    }
-    writeCmd(0x0000);
-    send(0xAA); // PREAMBLE
-    send(0xAA);
-    send(0xAA);
-    send(0x2D); // SYNC
-    send(0xD4);
-    for (int i=0; i<16; i++) {
-        send(data[i]);
-    }
-    send(0xAA); // DUMMY BYTES
-    send(0xAA);
-    send(0xAA);
-    
-    mode(false);
-    trans = false;
-}
-
-void RF12B::send(unsigned char data) {
-    while (NIRQ);
-    writeCmd(0xB800 + data);
-}
-
-/* Flushes all data from the RF module's buffer */
-void RF12B::flush() {
-    if (!trans) {
-        writeCmd(0xCA81);
-        writeCmd(0xCA83);
-    }
-};
-
-/* Initialises the RF12B module as transmitter
-    or receiver. This should be called after the
-    RF module has fully started up (give it a
-    few hundred ms) */
-void RF12B::init() {
-
-    writeCmd(0x80E7); //EL,EF,868band,12.0pF
-    mode(false);
-    trans = false;
-    writeCmd(0xA640); //frequency select
-    writeCmd(0xC647); //4.8kbps
-    writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
-    writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
-    writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
-    writeCmd(0xCED4); //SYNC=2DD4
-    writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
-    writeCmd(0x9850); //!mp,90kHz,MAX OUT
-    writeCmd(0xCC17); //OB1, COB0, LPX, Iddy, CDDITCBW0
-    writeCmd(0xE000); //NOT USED
-    writeCmd(0xC800); //NOT USED
-    writeCmd(0xC040); //1.66MHz,2.2V
-
-    initialized = true;
-}
-
-void RF12B::mode(bool trans) {
-    if (trans) {
-        writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
-    } else {
-        writeCmd(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
-    }
-}
-
-unsigned int RF12B::writeCmd(unsigned int cmd) {
-    unsigned int recv;
-    NCS = 0;
-    recv = spi.write(cmd);
-    NCS = 1;
-    return recv;
-}
+#include "RF12B.h"
+
+RF12B::RF12B(PinName SDI,
+             PinName SDO,
+             PinName SCK,
+             PinName NCS,
+             PinName NIRQ):spi(SDI, SDO, SCK),
+        NCS(NCS), NIRQ(NIRQ) {
+    this->initialized = false;
+    this->trans = false;
+
+    this->spi.format(16,0);
+    this->spi.frequency(2000000);
+    this->NCS = 1;
+
+    init();
+    mode(false);// Receiver
+    flush();
+}
+
+
+/* Reads a byte of data from the RF module's buffer
+    This is a blocking call */
+unsigned char RF12B::read() {
+    if (!initialized || trans) {
+        mode(false); //Receiver
+        trans = false;
+        initialized = true;
+    }
+
+    unsigned int data;
+    while (1) {
+        data = writeCmd(0x0000);
+        if ( (data&0x8000) ) {
+            data = writeCmd(0xB000);
+            return (data&0x00FF);
+        }
+    }
+}
+
+/* Sends a byte of data to the RF module for transmission */
+void RF12B::write(unsigned char *data, unsigned int length) {
+    if (!initialized || !trans) {
+        mode(true); //Transmitter
+        trans = true;
+        initialized = true;
+    }
+    writeCmd(0x0000);
+    send(0xAA); // PREAMBLE
+    send(0xAA);
+    send(0xAA);
+    send(0x2D); // SYNC
+    send(0xD4);
+    for (int i=0; i<length; i++) {
+        send(data[i]);
+    }
+    send(0xAA); // DUMMY BYTES
+    send(0xAA);
+    send(0xAA);
+
+    mode(false);
+    trans = false;
+}
+
+void RF12B::send(unsigned char data) {
+    while (NIRQ);
+    writeCmd(0xB800 + data);
+}
+
+/* Flushes all data from the RF module's buffer */
+void RF12B::flush() {
+    if (!trans) {
+        writeCmd(0xCA81);
+        writeCmd(0xCA83);
+    }
+};
+
+/* Initialises the RF12B module as transmitter
+    or receiver. This should be called after the
+    RF module has fully started up (give it a
+    few hundred ms) */
+void RF12B::init() {
+
+    writeCmd(0x80E7); //EL,EF,868band,12.0pF
+    mode(false);
+    trans = false;
+    writeCmd(0xA640); //frequency select
+    writeCmd(0xC647); //4.8kbps
+    writeCmd(0x94A0); //VDI,FAST,134kHz,0dBm,-103dBm
+    writeCmd(0xC2AC); //AL,!ml,DIG,DQD4
+    writeCmd(0xCA81); //FIFO8,SYNC,!ff,DR
+    writeCmd(0xCED4); //SYNC=2DD4
+    writeCmd(0xC483); //@PWR,NO RSTRIC,!st,!fi,OE,EN
+    writeCmd(0x9850); //!mp,90kHz,MAX OUT
+    writeCmd(0xCC17); //OB1, COB0, LPX, Iddy, CDDITCBW0
+    writeCmd(0xE000); //NOT USED
+    writeCmd(0xC800); //NOT USED
+    writeCmd(0xC040); //1.66MHz,2.2V
+
+    initialized = true;
+}
+
+void RF12B::mode(bool trans) {
+    if (trans) {
+        writeCmd(0x8239); //!er,!ebb,ET,ES,EX,!eb,!ew,DC
+    } else {
+        writeCmd(0x8299); //er,!ebb,ET,ES,EX,!eb,!ew,DC
+    }
+}
+
+unsigned int RF12B::writeCmd(unsigned int cmd) {
+    unsigned int recv;
+    NCS = 0;
+    recv = spi.write(cmd);
+    NCS = 1;
+    return recv;
+}