#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-8 | 0
|