Source file: /~heha/mb-iwp/Kleinkram/Sandkasten.zip/rf12/rf12.h

#pragma once
typedef unsigned short word;
typedef unsigned char byte;
#ifndef elemof
# define elemof(x) (sizeof(x)/sizeof(*(x)))
#endif
#ifndef NOINIT
# define NOINIT __attribute__((section(".noinit")))
#endif
#include <util/delay.h>

#include "Wireless_ID.h"

namespace rf12{

#include "rf12if.h"

struct packet_t{
  byte type_len;	// Bit 5 = NeedAck (BULK), Bit 4 = IsAck, Bit 3:0 = Länge Daten
  byte sendrecv;	// Bit 7:4 = Sender, Bit 3:0 = Empfänger
  byte data[15];	// max. 15 Bytes Daten
  operator byte*() {return (byte*)this;}	// Ganze Struktur als Byte-Array
};

inline bool data();	// RFM-Modul::SDO abfragen, wirkt als Interruptleitung
word xfer(word);	// transfer 1 word to/from module
void init();		// initialize module

// (3) macro for calculating frequency value out of frequency in MHz
#define RF12FREQ(freq) (0xA000|((freq)-430.0)*4000)

// (4) macro for calculating baudrate (only high baud rates)
#define RF12BAUD(baud) (0xC600+344828UL/(baud)-1)

// (10) macro for calculating transmission settings (misleading name!)
#define RF12POWER(power,mod) (0x9800|(power)&7|(mod)<<4)

// (5) macro for calculating receiver settings
#define RF12BW(bandwidth,gain,drssi) (0x9400|(bandwidth)<<5|(gain)<<3|(drssi))

// transmit number of bytes from array
// Fehlerkodes:	-1  = TimeOut am Anfang (kann nicht senden)
//		-17 = TimeOut beim ACK
//		-18 = Abriss des Datenstroms während ACK
//		-19 = CRC-Fehler im ACK-Paket
//		-20 = empfangenes (gültiges) Paket ist kein ACK-Paket
void txdata(const byte*);

// receive number of bytes into array
// Fehlerkodes:	-1  = TimeOut am Anfang (kein Header {2DD4} erkannt)
//		-2  = Abriss des Datenstroms
//		-3  = CRC-Fehler
// Der Adressat wird hier nicht ausgewertet!
byte rxdata(byte*);

void startrx();

// für Batteriebetrieb 10-MHz-Quarz abschalten
inline void powerdown() {xfer(0x8201);}	// (2)

// Oszillator UND Synthesizer für schnelleres RX/TX-Umschalten
// Einschaltzeit maximal 5 ms
inline void powerup() {xfer(0x8219); _delay_ms(5);}

// Empfangsmodus: TX aus, RX ein, Umschaltzeit 425 µs, Mustersuche EIN
inline void rxmode() {xfer(0x82D9); startrx();}

// Sendemodus: RX aus, TX ein, Umschaltzeit 300 µs
// Zum Debuggen Quarzausgang aktivieren
inline void txmode() {xfer(0x8278);}

// ein verwendbarer Puffer (intern für rf12_poll())
extern packet_t buf;
extern byte channel;	// 1..12
void setfreq();

// liefert TRUE wenn etwas gültiges empfangen wurde, sonst FALSE
byte poll();
}
Detected encoding: UTF-80