Quelltext /~heha/mb-iwp/FlyStick/Firmware.zip/rf12/rf12.h

typedef unsigned short WORD;
typedef unsigned char BYTE;
#define elemof(x) (sizeof(x)/sizeof(*(x)))

#include "Wireless_ID.h"

typedef union{
 struct{
  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
 };
 BYTE all[17];
}rf12dat;

extern WORD rf12_xfer(WORD wert);		// transfer 1 word to/from module
extern void rf12_init(void);			// 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
extern void rf12_txdata(const BYTE *data);

// 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!
extern BYTE rf12_rxdata(BYTE *data);

extern void rf12_startrx();

// für USB-Standby oder Batteriebetrieb 10-MHz-Quarz abschalten
#define rf12_powerdown() rf12_xfer(0x8201)	// (2)

// Oszillator UND Synthesizer für schnelleres RX/TX-Umschalten
// Einschaltzeit maximal 5 ms
#define rf12_powerup() rf12_xfer(0x8219), _delay_ms(5)

// Empfangsmodus: TX aus, RX ein, Umschaltzeit 425 µs, Mustersuche EIN
#define rf12_rxmode() rf12_xfer(0x82D9), rf12_startrx()

// Sendemodus: RX aus, TX ein, Umschaltzeit 300 µs
// Zum Debuggen Quarzausgang aktivieren
#define rf12_txmode() rf12_xfer(0x8278)

// ein verwendbarer Puffer (intern für rf12_poll())
extern rf12dat rf12buf;
extern BYTE rf12_channel;	// 1..12
extern void rf12_setfreq();

// liefert TRUE wenn etwas gültiges empfangen wurde, sonst FALSE
extern BYTE rf12_poll();
Vorgefundene Kodierung: UTF-80