diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-02-09 17:55:18 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-02-09 17:55:18 +0800 |
| commit | 27a890cdf09df58c624047927cb97fbe97728c9c (patch) | |
| tree | f6b5da78ac54183d3dc726ed6f1adc73fcd0cc48 | |
| parent | 2d2310b58c34c13212568a2d01c3af7b03c91c48 (diff) | |
| download | smart-home-27a890cdf09df58c624047927cb97fbe97728c9c.tar.gz | |
wip.
| -rw-r--r-- | aliznayem/RFM69.c | 539 | ||||
| -rw-r--r-- | aliznayem/RFM69.h | 107 | ||||
| -rw-r--r-- | aliznayem/RFM69registers.h | 1114 | ||||
| -rw-r--r-- | aliznayem/Recv.Makefile | 43 | ||||
| -rw-r--r-- | aliznayem/Send.Makefile | 44 | ||||
| -rw-r--r-- | aliznayem/gateway.c | 48 | ||||
| -rw-r--r-- | aliznayem/get_millis.c | 45 | ||||
| -rw-r--r-- | aliznayem/get_millis.h | 12 | ||||
| -rw-r--r-- | aliznayem/node.c | 25 | ||||
| -rw-r--r-- | aliznayem/serial.c | 33 | ||||
| -rw-r--r-- | aliznayem/serial.h | 8 | ||||
| -rw-r--r-- | aliznayem/spi.c | 80 | ||||
| -rw-r--r-- | aliznayem/spi.h | 41 | ||||
| -rw-r--r-- | nRF24L01/radio.c | 133 | ||||
| -rw-r--r-- | nRF24L01/serial.h | 8 | ||||
| -rw-r--r-- | nrf24l01/Recv.Makefile (renamed from nRF24L01/Recv.Makefile) | 0 | ||||
| -rw-r--r-- | nrf24l01/Send.Makefile (renamed from nRF24L01/Send.Makefile) | 0 | ||||
| -rw-r--r-- | nrf24l01/nrf24l01.c | 134 | ||||
| -rw-r--r-- | nrf24l01/radio.h (renamed from nRF24L01/radio.h) | 0 | ||||
| -rw-r--r-- | nrf24l01/recv.c (renamed from nRF24L01/recv.c) | 0 | ||||
| -rw-r--r-- | nrf24l01/send.c (renamed from nRF24L01/send.c) | 0 | ||||
| -rw-r--r-- | nrf24l01/uart.c (renamed from nRF24L01/serial.c) | 8 | ||||
| -rw-r--r-- | nrf24l01/uart.h | 8 |
23 files changed, 146 insertions, 2284 deletions
diff --git a/aliznayem/RFM69.c b/aliznayem/RFM69.c deleted file mode 100644 index d92a21b..0000000 --- a/aliznayem/RFM69.c +++ /dev/null @@ -1,539 +0,0 @@ -// ********************************************************************************** -// Driver definition for HopeRF RFM69W/RFM69HW/RFM69CW/RFM69HCW, Semtech SX1231/1231H -// ********************************************************************************** -// Copyright Felix Rusu 2016, http://www.LowPowerLab.com/contact -// ********************************************************************************** -// License -// ********************************************************************************** -// This program is free software; you can redistribute it -// and/or modify it under the terms of the GNU General -// Public License as published by the Free Software -// Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will -// be useful, but WITHOUT ANY WARRANTY; without even the -// implied warranty of MERCHANTABILITY or FITNESS FOR A -// PARTICULAR PURPOSE. See the GNU General Public -// License for more details. -// -// Licence can be viewed at -// http://www.gnu.org/licenses/gpl-3.0.txt -// -// Please maintain this license information along with authorship -// and copyright notices in any redistribution of this code -// ********************************************************************************** - - -// ********************************************************************************** -// Converted to AVR environment by Zulkar Nayem -// ********************************************************************************** - - -#include <avr/io.h> -#include <avr/interrupt.h> -#include "spi.h" -#include "RFM69registers.h" -#include "RFM69.h" -#include "get_millis.h" - -volatile uint8_t DATALEN; -volatile uint8_t SENDERID; -volatile uint8_t TARGETID; // should match _address -volatile uint8_t PAYLOADLEN; -volatile uint8_t ACK_REQUESTED; -volatile uint8_t ACK_RECEIVED; // should be polled immediately after sending a packet with ACK request -volatile int16_t RSSI; // most accurate RSSI during reception (closest to the reception) -volatile uint8_t mode = RF69_MODE_STANDBY; // should be protected? -volatile uint8_t inISR = 0; -uint8_t isRFM69HW = 1; // if RFM69HW model matches high power enable possible -uint8_t address; //nodeID -uint8_t powerLevel = 31; -uint8_t promiscuousMode = 0; -unsigned long millis_current; - -// freqBand must be selected from 315, 433, 868, 915 -void rfm69_init(uint16_t freqBand, uint8_t nodeID, uint8_t networkID) -{ - const uint8_t CONFIG[][2] = - { - /* 0x01 */ { REG_OPMODE, RF_OPMODE_SEQUENCER_ON | RF_OPMODE_LISTEN_OFF | RF_OPMODE_STANDBY }, - /* 0x02 */ { REG_DATAMODUL, RF_DATAMODUL_DATAMODE_PACKET | RF_DATAMODUL_MODULATIONTYPE_FSK | RF_DATAMODUL_MODULATIONSHAPING_00 }, // no shaping - /* 0x03 */ { REG_BITRATEMSB, RF_BITRATEMSB_55555}, // default: 4.8 KBPS - /* 0x04 */ { REG_BITRATELSB, RF_BITRATELSB_55555}, - /* 0x05 */ { REG_FDEVMSB, RF_FDEVMSB_50000}, // default: 5KHz, (FDEV + BitRate / 2 <= 500KHz) - /* 0x06 */ { REG_FDEVLSB, RF_FDEVLSB_50000}, - - //* 0x07 */ { REG_FRFMSB, RF_FRFMSB_433}, - //* 0x08 */ { REG_FRFMID, RF_FRFMID_433}, - //* 0x09 */ { REG_FRFLSB, RF_FRFLSB_433}, - - /* 0x07 */ { REG_FRFMSB, (uint8_t) (freqBand==RF_315MHZ ? RF_FRFMSB_315 : (freqBand==RF_433MHZ ? RF_FRFMSB_433 : (freqBand==RF_868MHZ ? RF_FRFMSB_868 : RF_FRFMSB_915))) }, - /* 0x08 */ { REG_FRFMID, (uint8_t) (freqBand==RF_315MHZ ? RF_FRFMID_315 : (freqBand==RF_433MHZ ? RF_FRFMID_433 : (freqBand==RF_868MHZ ? RF_FRFMID_868 : RF_FRFMID_915))) }, - /* 0x09 */ { REG_FRFLSB, (uint8_t) (freqBand==RF_315MHZ ? RF_FRFLSB_315 : (freqBand==RF_433MHZ ? RF_FRFLSB_433 : (freqBand==RF_868MHZ ? RF_FRFLSB_868 : RF_FRFLSB_915))) }, - - - // looks like PA1 and PA2 are not implemented on RFM69W, hence the max output power is 13dBm - // +17dBm and +20dBm are possible on RFM69HW - // +13dBm formula: Pout = -18 + OutputPower (with PA0 or PA1**) - // +17dBm formula: Pout = -14 + OutputPower (with PA1 and PA2)** - // +20dBm formula: Pout = -11 + OutputPower (with PA1 and PA2)** and high power PA settings (section 3.3.7 in datasheet) - ///* 0x11 */ { REG_PALEVEL, RF_PALEVEL_PA0_ON | RF_PALEVEL_PA1_OFF | RF_PALEVEL_PA2_OFF | RF_PALEVEL_OUTPUTPOWER_11111}, - ///* 0x13 */ { REG_OCP, RF_OCP_ON | RF_OCP_TRIM_95 }, // over current protection (default is 95mA) - - // RXBW defaults are { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_5} (RxBw: 10.4KHz) - /* 0x19 */ { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_16 | RF_RXBW_EXP_2 }, // (BitRate < 2 * RxBw) - //for BR-19200: /* 0x19 */ { REG_RXBW, RF_RXBW_DCCFREQ_010 | RF_RXBW_MANT_24 | RF_RXBW_EXP_3 }, - /* 0x25 */ { REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_01 }, // DIO0 is the only IRQ we're using - /* 0x26 */ { REG_DIOMAPPING2, RF_DIOMAPPING2_CLKOUT_OFF }, // DIO5 ClkOut disable for power saving - /* 0x28 */ { REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN }, // writing to this bit ensures that the FIFO & status flags are reset - /* 0x29 */ { REG_RSSITHRESH, 220 }, // must be set to dBm = (-Sensitivity / 2), default is 0xE4 = 228 so -114dBm - ///* 0x2D */ { REG_PREAMBLELSB, RF_PREAMBLESIZE_LSB_VALUE } // default 3 preamble bytes 0xAAAAAA - /* 0x2E */ { REG_SYNCCONFIG, RF_SYNC_ON | RF_SYNC_FIFOFILL_AUTO | RF_SYNC_SIZE_2 | RF_SYNC_TOL_0 }, - /* 0x2F */ { REG_SYNCVALUE1, 0x2D }, // attempt to make this compatible with sync1 byte of RFM12B lib - /* 0x30 */ { REG_SYNCVALUE2, networkID }, // NETWORK ID - /* 0x37 */ { REG_PACKETCONFIG1, RF_PACKET1_FORMAT_VARIABLE | RF_PACKET1_DCFREE_OFF | RF_PACKET1_CRC_ON | RF_PACKET1_CRCAUTOCLEAR_ON | RF_PACKET1_ADRSFILTERING_OFF }, - /* 0x38 */ { REG_PAYLOADLENGTH, 66 }, // in variable length mode: the max frame size, not used in TX - ///* 0x39 */ { REG_NODEADRS, nodeID }, // turned off because we're not using address filtering - /* 0x3C */ { REG_FIFOTHRESH, RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY | RF_FIFOTHRESH_VALUE }, // TX on FIFO not empty - /* 0x3D */ { REG_PACKETCONFIG2, RF_PACKET2_RXRESTARTDELAY_2BITS | RF_PACKET2_AUTORXRESTART_ON | RF_PACKET2_AES_OFF }, // RXRESTARTDELAY must match transmitter PA ramp-down time (bitrate dependent) - //for BR-19200: /* 0x3D */ { REG_PACKETCONFIG2, RF_PACKET2_RXRESTARTDELAY_NONE | RF_PACKET2_AUTORXRESTART_ON | RF_PACKET2_AES_OFF }, // RXRESTARTDELAY must match transmitter PA ramp-down time (bitrate dependent) - /* 0x6F */ { REG_TESTDAGC, RF_DAGC_IMPROVED_LOWBETA0 }, // run DAGC continuously in RX mode for Fading Margin Improvement, recommended default for AfcLowBetaOn=0 - {255, 0} - }; - - spi_init(); // spi initialize - //DDRC |= 1<<PC6; // temporary for testing LED output - SS_DDR |= 1<<SS_PIN; // setting SS as output - SS_PORT |= 1<<SS_PIN; // setting slave select high - INT_DDR &= ~(1<<INT_PIN_n); // setting interrupt pin input. no problem if not given - INT_PORT &= ~(1<<INT_PIN_n); // setting pull down. because rising will cause interrupt. external pull down is needed. - - while (readReg(REG_SYNCVALUE1) != 0xaa) - { - writeReg(REG_SYNCVALUE1, 0xaa); - } - - while (readReg(REG_SYNCVALUE1) != 0x55) - { - writeReg(REG_SYNCVALUE1, 0x55); - } - - for (uint8_t i = 0; CONFIG[i][0] != 255; i++) - writeReg(CONFIG[i][0], CONFIG[i][1]); - - // Encryption is persistent between resets and can trip you up during debugging. - // Disable it during initialization so we always start from a known state. - encrypt(0); - - setHighPower(isRFM69HW); // called regardless if it's a RFM69W or RFM69HW - setMode(RF69_MODE_STANDBY); - while ((readReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00); - - EICRn |= (1<<ISCn1)|(1<<ISCn0); // setting INTn rising. details datasheet p91. must change with interrupt pin. - EIMSK |= 1<<INTn; // enable INTn - inISR = 0; - //sei(); //not needed because sei() called in millis_init() :) - millis_init(); // to get miliseconds - - address = nodeID; - setAddress(address); // setting this node id - setNetwork(networkID); -} - -// set this node's address -void setAddress(uint8_t addr) -{ - writeReg(REG_NODEADRS, addr); -} - -// set network address -void setNetwork(uint8_t networkID) -{ - writeReg(REG_SYNCVALUE2, networkID); -} - -uint8_t canSend() -{ - if (mode == RF69_MODE_RX && PAYLOADLEN == 0 && readRSSI(0) < CSMA_LIMIT) // if signal stronger than -100dBm is detected assume channel activity - { - setMode(RF69_MODE_STANDBY); - return 1; - } - return 0; -} - -// Transmit data -void send(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t requestACK) -{ - writeReg(REG_PACKETCONFIG2, (readReg(REG_PACKETCONFIG2) & 0xFB) | RF_PACKET2_RXRESTART); // avoid RX deadlocks - millis_current = millis(); - while (!canSend() && millis() - millis_current < RF69_CSMA_LIMIT_MS) receiveDone(); - sendFrame(toAddress, buffer, bufferSize, requestACK, 0); -} - -// check whether an ACK was requested in the last received packet (non-broadcasted packet) -uint8_t ACKRequested() -{ - return ACK_REQUESTED && (TARGETID != RF69_BROADCAST_ADDR); -} - -// should be called immediately after reception in case sender wants ACK -void sendACK(const void* buffer, uint8_t bufferSize) -{ - ACK_REQUESTED = 0; // TWS added to make sure we don't end up in a timing race and infinite loop sending Acks - uint8_t sender = SENDERID; - int16_t _RSSI = RSSI; // save payload received RSSI value - writeReg(REG_PACKETCONFIG2, (readReg(REG_PACKETCONFIG2) & 0xFB) | RF_PACKET2_RXRESTART); // avoid RX deadlocks - millis_current = millis(); - while (!canSend() && millis() - millis_current < RF69_CSMA_LIMIT_MS) receiveDone(); - SENDERID = sender; // TWS: Restore SenderID after it gets wiped out by receiveDone() n.b. actually now there is no receiveDone() :D - sendFrame(sender, buffer, bufferSize, 0, 1); - RSSI = _RSSI; // restore payload RSSI -} - -// set *transmit/TX* output power: 0=min, 31=max -// this results in a "weaker" transmitted signal, and directly results in a lower RSSI at the receiver -// the power configurations are explained in the SX1231H datasheet (Table 10 on p21; RegPaLevel p66): http://www.semtech.com/images/datasheet/sx1231h.pdf -// valid powerLevel parameter values are 0-31 and result in a directly proportional effect on the output/transmission power -// this function implements 2 modes as follows: -// - for RFM69W the range is from 0-31 [-18dBm to 13dBm] (PA0 only on RFIO pin) -// - for RFM69HW the range is from 0-31 [5dBm to 20dBm] (PA1 & PA2 on PA_BOOST pin & high Power PA settings - see section 3.3.7 in datasheet, p22) -void setPowerLevel(uint8_t powerLevel) -{ - uint8_t _powerLevel = powerLevel; - if (isRFM69HW==1) _powerLevel /= 2; - writeReg(REG_PALEVEL, (readReg(REG_PALEVEL) & 0xE0) | _powerLevel); -} - -//put transceiver in sleep mode to save battery - to wake or resume receiving just call receiveDone() -void sleep() -{ - setMode(RF69_MODE_SLEEP); -} - -uint8_t readTemperature(uint8_t calFactor) // returns centigrade -{ - setMode(RF69_MODE_STANDBY); - writeReg(REG_TEMP1, RF_TEMP1_MEAS_START); - while ((readReg(REG_TEMP1) & RF_TEMP1_MEAS_RUNNING)); - return ~readReg(REG_TEMP2) + COURSE_TEMP_COEF + calFactor; // 'complement' corrects the slope, rising temp = rising val -} // COURSE_TEMP_COEF puts reading in the ballpark, user can add additional correction - -// return the frequency (in Hz) -uint32_t getFrequency() -{ - return RF69_FSTEP * (((uint32_t) readReg(REG_FRFMSB) << 16) + ((uint16_t) readReg(REG_FRFMID) << 8) + readReg(REG_FRFLSB)); -} - -// set the frequency (in Hz) -void setFrequency(uint32_t freqHz) -{ - uint8_t oldMode = mode; - if (oldMode == RF69_MODE_TX) { - setMode(RF69_MODE_RX); - } - freqHz /= RF69_FSTEP; // divide down by FSTEP to get FRF - writeReg(REG_FRFMSB, freqHz >> 16); - writeReg(REG_FRFMID, freqHz >> 8); - writeReg(REG_FRFLSB, freqHz); - if (oldMode == RF69_MODE_RX) { - setMode(RF69_MODE_SYNTH); - } - setMode(oldMode); -} - -// Read byte from register -uint8_t readReg(uint8_t addr) -{ - select(); - spi_fast_shift(addr & 0x7F); - uint8_t regval = spi_fast_shift(0); - unselect(); - return regval; -} - -// Write byte to register -void writeReg(uint8_t addr, uint8_t value) -{ - select(); - spi_fast_shift(addr | 0x80); - spi_fast_shift(value); - unselect(); -} - -// To enable encryption: radio.encrypt("ABCDEFGHIJKLMNOP"); -// To disable encryption: encrypt(null) or encrypt(0) -// KEY HAS TO BE 16 bytes !!! -void encrypt(const char* key) -{ - setMode(RF69_MODE_STANDBY); - if (key != 0) - { - select(); - spi_fast_shift(REG_AESKEY1 | 0x80); - for (uint8_t i = 0; i < 16; i++) - spi_fast_shift(key[i]); - unselect(); - } - writeReg(REG_PACKETCONFIG2, (readReg(REG_PACKETCONFIG2) & 0xFE) | (key ? 1:0)); -} - -void setMode(uint8_t newMode) -{ - if (newMode == mode) - return; - - switch (newMode) - { - case RF69_MODE_TX: - writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_TRANSMITTER); - if (isRFM69HW) setHighPowerRegs(1); - break; - case RF69_MODE_RX: - writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_RECEIVER); - if (isRFM69HW) setHighPowerRegs(0); - break; - case RF69_MODE_SYNTH: - writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_SYNTHESIZER); - break; - case RF69_MODE_STANDBY: - writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_STANDBY); - break; - case RF69_MODE_SLEEP: - writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_SLEEP); - break; - default: - return; - } - // we are using packet mode, so this check is not really needed - // but waiting for mode ready is necessary when going from sleep because the FIFO may not be immediately available from previous mode - while (mode == RF69_MODE_SLEEP && (readReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00); // wait for ModeReady - mode = newMode; -} - -// internal function -void setHighPowerRegs(uint8_t onOff) -{ - if(onOff==1) - { - writeReg(REG_TESTPA1, 0x5D); - writeReg(REG_TESTPA2, 0x7C); - } - else - { - writeReg(REG_TESTPA1, 0x55); - writeReg(REG_TESTPA2, 0x70); - } -} - -// for RFM69HW only: you must call setHighPower(1) after rfm69_init() or else transmission won't work -void setHighPower(uint8_t onOff) -{ - isRFM69HW = onOff; - writeReg(REG_OCP, isRFM69HW ? RF_OCP_OFF : RF_OCP_ON); - - if (isRFM69HW == 1) // turning ON - writeReg(REG_PALEVEL, (readReg(REG_PALEVEL) & 0x1F) | RF_PALEVEL_PA1_ON | RF_PALEVEL_PA2_ON); // enable P1 & P2 amplifier stages - else - writeReg(REG_PALEVEL, RF_PALEVEL_PA0_ON | RF_PALEVEL_PA1_OFF | RF_PALEVEL_PA2_OFF | powerLevel); // enable P0 only -} - -// get the received signal strength indicator (RSSI) -int16_t readRSSI(uint8_t forceTrigger) -{ - int16_t rssi = 0; - if (forceTrigger==1) - { - // RSSI trigger not needed if DAGC is in continuous mode - writeReg(REG_RSSICONFIG, RF_RSSI_START); - while ((readReg(REG_RSSICONFIG) & RF_RSSI_DONE) == 0x00); // wait for RSSI_Ready - } - rssi = -readReg(REG_RSSIVALUE); - rssi >>= 1; - return rssi; -} - -// internal function -void sendFrame(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t requestACK, uint8_t sendACK) -{ - setMode(RF69_MODE_STANDBY); // turn off receiver to prevent reception while filling fifo - while ((readReg(REG_IRQFLAGS1) & RF_IRQFLAGS1_MODEREADY) == 0x00); // wait for ModeReady - //writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_00); // DIO0 is "Packet Sent" - if (bufferSize > RF69_MAX_DATA_LEN) - bufferSize = RF69_MAX_DATA_LEN; - - // control byte - uint8_t CTLbyte = 0x00; - if (sendACK==1) - CTLbyte = RFM69_CTL_SENDACK; - else if (requestACK==1) - CTLbyte = RFM69_CTL_REQACK; - - if (toAddress > 0xFF) CTLbyte |= (toAddress & 0x300) >> 6; //assign last 2 bits of address if > 255 - if (address > 0xFF) CTLbyte |= (address & 0x300) >> 8; //assign last 2 bits of address if > 255 - - // write to FIFO - select(); //enable data transfer - spi_fast_shift(REG_FIFO | 0x80); - spi_fast_shift(bufferSize + 3); - spi_fast_shift(toAddress); - spi_fast_shift(address); - spi_fast_shift(CTLbyte); - - for (uint8_t i = 0; i < bufferSize; i++) - spi_fast_shift(((uint8_t*) buffer)[i]); - - unselect(); - - // no need to wait for transmit mode to be ready since its handled by the radio - setMode(RF69_MODE_TX); - //millis_current = millis(); - //_delay_ms(500); - // wait for DIO to high - // for PINE5 - //while (bit_is_clear(INT_PIN, INT_pin_num) && millis() - millis_current < RF69_TX_LIMIT_MS); - while ((readReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PACKETSENT) == 0x00); // wait for PacketSent - setMode(RF69_MODE_STANDBY); -} - -// Calibrate RC -void rcCalibration() -{ - writeReg(REG_OSC1, RF_OSC1_RCCAL_START); - while ((readReg(REG_OSC1) & RF_OSC1_RCCAL_DONE) == 0x00); -} - -uint8_t sendWithRetry(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t retries, uint8_t retryWaitTime) -{ - for (uint8_t i = 0; i <= retries; i++) - { - send(toAddress, buffer, bufferSize, 1); - millis_current = millis(); - while (millis() - millis_current < retryWaitTime) - { - if (ACKReceived(toAddress)) - { - return 1; - } - } - } - return 0; -} - -// should be polled immediately after sending a packet with ACK request -uint8_t ACKReceived(uint8_t fromNodeID) -{ - if (receiveDone()) - return (SENDERID == fromNodeID || fromNodeID == RF69_BROADCAST_ADDR) && ACK_RECEIVED; - return 0; -} - -// checks if a packet was received and/or puts transceiver in receive (ie RX or listen) mode -uint8_t receiveDone() -{ - cli(); - - if (mode == RF69_MODE_RX && PAYLOADLEN > 0) - { - setMode(RF69_MODE_STANDBY); // enables interrupts - return 1; - } - else if (mode == RF69_MODE_RX) // already in RX no payload yet - { - sei(); // explicitly re-enable interrupts - return 0; - } - receiveBegin(); - sei(); - return 0; -} - -// internal function -void receiveBegin() -{ - DATALEN = 0; - SENDERID = 0; - TARGETID = 0; - PAYLOADLEN = 0; - ACK_REQUESTED = 0; - ACK_RECEIVED = 0; - RSSI = 0; - if (readReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PAYLOADREADY) - writeReg(REG_PACKETCONFIG2, (readReg(REG_PACKETCONFIG2) & 0xFB) | RF_PACKET2_RXRESTART); // avoid RX deadlocks - writeReg(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_01); // set DIO0 to "PAYLOADREADY" in receive mode - setMode(RF69_MODE_RX); -} - -// 1 = disable filtering to capture all frames on network -// 0 = enable node/broadcast filtering to capture only frames sent to this/broadcast address -void promiscuous(uint8_t onOff) -{ - promiscuousMode = onOff; - if(promiscuousMode==0) - writeReg(REG_PACKETCONFIG1, (readReg(REG_PACKETCONFIG1) & 0xF9) | RF_PACKET1_ADRSFILTERING_NODEBROADCAST); - else - writeReg(REG_PACKETCONFIG1, (readReg(REG_PACKETCONFIG1) & 0xF9) | RF_PACKET1_ADRSFILTERING_OFF); -} - -// Only reenable interrupts if we're not being called from the ISR -void maybeInterrupts() -{ - if (!inISR) sei(); -} - -// Enable SPI transfer -void select() -{ - SS_PORT &= ~(1<<SS_PIN); - cli(); -} - -// Disable SPI transfer -void unselect() -{ - SS_PORT |= 1<<SS_PIN; - maybeInterrupts(); -} - -// Interrupt Service Routine -ISR(INT_VECT) -{ - inISR = 1; - if (mode == RF69_MODE_RX && (readReg(REG_IRQFLAGS2) & RF_IRQFLAGS2_PAYLOADREADY)) - { - setMode(RF69_MODE_STANDBY); - select(); - spi_fast_shift(REG_FIFO & 0x7F); - PAYLOADLEN = spi_fast_shift(0); - if(PAYLOADLEN>66) PAYLOADLEN=66; - TARGETID = spi_fast_shift(0); - if(!(promiscuousMode || TARGETID == address || TARGETID == RF69_BROADCAST_ADDR) // match this node's address, or broadcast address or anything in promiscuous mode - || PAYLOADLEN < 3) // address situation could receive packets that are malformed and don't fit this libraries extra fields - { - PAYLOADLEN = 0; - unselect(); - receiveBegin(); - return; - } - - DATALEN = PAYLOADLEN - 3; - SENDERID = spi_fast_shift(0); - uint8_t CTLbyte = spi_fast_shift(0); - - ACK_RECEIVED = CTLbyte & RFM69_CTL_SENDACK; // extract ACK-received flag - ACK_REQUESTED = CTLbyte & RFM69_CTL_REQACK; // extract ACK-requested flag - - //interruptHook(CTLbyte); // TWS: hook to derived class interrupt function - - for (uint8_t i = 0; i < DATALEN; i++) - { - DATA[i] = spi_fast_shift(0); - } - if (DATALEN < RF69_MAX_DATA_LEN) DATA[DATALEN] = 0; // add null at end of string - unselect(); - setMode(RF69_MODE_RX); - } - RSSI = readRSSI(0); - inISR = 0; -} diff --git a/aliznayem/RFM69.h b/aliznayem/RFM69.h deleted file mode 100644 index 3f220c9..0000000 --- a/aliznayem/RFM69.h +++ /dev/null @@ -1,107 +0,0 @@ -// ********************************************************************************** -// Driver definition for HopeRF RFM69W/RFM69HW/RFM69CW/RFM69HCW, Semtech SX1231/1231H -// ********************************************************************************** -// Copyright Felix Rusu 2016, http://www.LowPowerLab.com/contact -// ********************************************************************************** -// License -// ********************************************************************************** -// This program is free software; you can redistribute it -// and/or modify it under the terms of the GNU General -// Public License as published by the Free Software -// Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will -// be useful, but WITHOUT ANY WARRANTY; without even the -// implied warranty of MERCHANTABILITY or FITNESS FOR A -// PARTICULAR PURPOSE. See the GNU General Public -// License for more details. -// -// Licence can be viewed at -// http://www.gnu.org/licenses/gpl-3.0.txt -// -// Please maintain this license information along with authorship -// and copyright notices in any redistribution of this code -// ********************************************************************************** - - -// ********************************************************************************** -// Converted to AVR environment by Zulkar Nayem -// ********************************************************************************** - -#include <avr/io.h> - -#ifndef RFM69_h -#define RFM69_h - -// Definitions -# define SS_DDR DDRB -# define SS_PORT PORTB -# define SS_PIN PB2 - -# define INT_DDR DDRD -# define INT_PORT PORTD -# define INT_PIN PIND -# define INT_pin_num 2 -# define INT_PIN_n PD2 -# define INTn INT0 -# define ISCn0 ISC00 -# define ISCn1 ISC01 -# define INT_VECT INT0_vect - -# define EICRn EICRA - - -#define RF69_MAX_DATA_LEN 61 // to take advantage of the built in AES/CRC we want to limit the frame size to the internal FIFO size (66 bytes - 3 bytes overhead - 2 bytes crc) -#define CSMA_LIMIT -90 // upper RX signal sensitivity threshold in dBm for carrier sense access -#define RF69_MODE_SLEEP 0 // XTAL OFF -#define RF69_MODE_STANDBY 1 // XTAL ON -#define RF69_MODE_SYNTH 2 // PLL ON -#define RF69_MODE_RX 3 // RX MODE -#define RF69_MODE_TX 4 // TX MODE -#define null 0 -#define COURSE_TEMP_COEF -90 // puts the temperature reading in the ballpark, user can fine tune the returned value -#define RF69_BROADCAST_ADDR 0 -#define RF69_CSMA_LIMIT_MS 1000 -#define RF69_TX_LIMIT_MS 1000 -#define RF69_FSTEP 61.03515625 // == FXOSC / 2^19 = 32MHz / 2^19 (p13 in datasheet) / FXOSC = module crystal oscillator frequency -// TWS: define CTLbyte bits -#define RFM69_CTL_SENDACK 0x80 -#define RFM69_CTL_REQACK 0x40 - -// Global Variables -volatile uint8_t DATA[RF69_MAX_DATA_LEN+1]; // RX/TX payload buffer, including end of string NULL char - -// Function Declerations -void rfm69_init(uint16_t freqBand, uint8_t nodeID, uint8_t networkID); -void setAddress(uint8_t addr); -void setNetwork(uint8_t networkID); -uint8_t canSend(); -void send(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t requestACK); -uint8_t sendWithRetry(uint8_t toAddress, const void* buffer, uint8_t bufferSize, uint8_t retries, uint8_t retryWaitTime); -uint8_t ACKRequested(); -uint8_t ACKReceived(uint8_t fromNodeID); -void receiveBegin(); -uint8_t receiveDone(); -void sendACK(const void* buffer, uint8_t bufferSize); -uint32_t getFrequency(); -void setFrequency(uint32_t freqHz); -void encrypt(const char* key); -int16_t readRSSI(uint8_t forceTrigger); -void setHighPower(uint8_t onOFF); // has to be called after initialize() for RFM69HW -void setPowerLevel(uint8_t level); // reduce/increase transmit power level -void sleep(); -uint8_t readTemperature(uint8_t calFactor); // get CMOS temperature (8bit) -void rcCalibration(); // calibrate the internal RC oscillator for use in wide temperature variations - see datasheet section [4.3.5. RC Timer Accuracy] -uint8_t readReg(uint8_t addr); -void writeReg(uint8_t addr, uint8_t val); -void sendFrame(uint8_t toAddress, const void* buffer, uint8_t size, uint8_t requestACK, uint8_t sendACK); -void setMode(uint8_t mode); -void setHighPowerRegs(uint8_t onOff); -void promiscuous(uint8_t onOff); -void maybeInterrupts(); -void select(); -void unselect(); -uint8_t receiveDone(); - -#endif diff --git a/aliznayem/RFM69registers.h b/aliznayem/RFM69registers.h deleted file mode 100644 index 18909fa..0000000 --- a/aliznayem/RFM69registers.h +++ /dev/null @@ -1,1114 +0,0 @@ -// ********************************************************************************** -// Registers used in driver definition for HopeRF RFM69W/RFM69HW, Semtech SX1231/1231H -// ********************************************************************************** -// Copyright Felix Rusu (2015), felix@lowpowerlab.com -// http://lowpowerlab.com/ -// ********************************************************************************** -// License -// ********************************************************************************** -// This program is free software; you can redistribute it -// and/or modify it under the terms of the GNU General -// Public License as published by the Free Software -// Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will -// be useful, but WITHOUT ANY WARRANTY; without even the -// implied warranty of MERCHANTABILITY or FITNESS FOR A -// PARTICULAR PURPOSE. See the GNU General Public -// License for more details. -// -// You should have received a copy of the GNU General -// Public License along with this program; if not, write -// to the Free Software Foundation, Inc., -// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// Licence can be viewed at -// http://www.fsf.org/licenses/gpl.txt -// -// Please maintain this license information along with authorship -// and copyright notices in any redistribution of this code -// ********************************************************************************** -// RFM69/SX1231 Internal registers addresses -//************************************************** -#define REG_FIFO 0x00 -#define REG_OPMODE 0x01 -#define REG_DATAMODUL 0x02 -#define REG_BITRATEMSB 0x03 -#define REG_BITRATELSB 0x04 -#define REG_FDEVMSB 0x05 -#define REG_FDEVLSB 0x06 -#define REG_FRFMSB 0x07 -#define REG_FRFMID 0x08 -#define REG_FRFLSB 0x09 -#define REG_OSC1 0x0A -#define REG_AFCCTRL 0x0B -#define REG_LOWBAT 0x0C -#define REG_LISTEN1 0x0D -#define REG_LISTEN2 0x0E -#define REG_LISTEN3 0x0F -#define REG_VERSION 0x10 -#define REG_PALEVEL 0x11 -#define REG_PARAMP 0x12 -#define REG_OCP 0x13 -#define REG_AGCREF 0x14 // not present on RFM69/SX1231 -#define REG_AGCTHRESH1 0x15 // not present on RFM69/SX1231 -#define REG_AGCTHRESH2 0x16 // not present on RFM69/SX1231 -#define REG_AGCTHRESH3 0x17 // not present on RFM69/SX1231 -#define REG_LNA 0x18 -#define REG_RXBW 0x19 -#define REG_AFCBW 0x1A -#define REG_OOKPEAK 0x1B -#define REG_OOKAVG 0x1C -#define REG_OOKFIX 0x1D -#define REG_AFCFEI 0x1E -#define REG_AFCMSB 0x1F -#define REG_AFCLSB 0x20 -#define REG_FEIMSB 0x21 -#define REG_FEILSB 0x22 -#define REG_RSSICONFIG 0x23 -#define REG_RSSIVALUE 0x24 -#define REG_DIOMAPPING1 0x25 -#define REG_DIOMAPPING2 0x26 -#define REG_IRQFLAGS1 0x27 -#define REG_IRQFLAGS2 0x28 -#define REG_RSSITHRESH 0x29 -#define REG_RXTIMEOUT1 0x2A -#define REG_RXTIMEOUT2 0x2B -#define REG_PREAMBLEMSB 0x2C -#define REG_PREAMBLELSB 0x2D -#define REG_SYNCCONFIG 0x2E -#define REG_SYNCVALUE1 0x2F -#define REG_SYNCVALUE2 0x30 -#define REG_SYNCVALUE3 0x31 -#define REG_SYNCVALUE4 0x32 -#define REG_SYNCVALUE5 0x33 -#define REG_SYNCVALUE6 0x34 -#define REG_SYNCVALUE7 0x35 -#define REG_SYNCVALUE8 0x36 -#define REG_PACKETCONFIG1 0x37 -#define REG_PAYLOADLENGTH 0x38 -#define REG_NODEADRS 0x39 -#define REG_BROADCASTADRS 0x3A -#define REG_AUTOMODES 0x3B -#define REG_FIFOTHRESH 0x3C -#define REG_PACKETCONFIG2 0x3D -#define REG_AESKEY1 0x3E -#define REG_AESKEY2 0x3F -#define REG_AESKEY3 0x40 -#define REG_AESKEY4 0x41 -#define REG_AESKEY5 0x42 -#define REG_AESKEY6 0x43 -#define REG_AESKEY7 0x44 -#define REG_AESKEY8 0x45 -#define REG_AESKEY9 0x46 -#define REG_AESKEY10 0x47 -#define REG_AESKEY11 0x48 -#define REG_AESKEY12 0x49 -#define REG_AESKEY13 0x4A -#define REG_AESKEY14 0x4B -#define REG_AESKEY15 0x4C -#define REG_AESKEY16 0x4D -#define REG_TEMP1 0x4E -#define REG_TEMP2 0x4F -#define REG_TESTLNA 0x58 -#define REG_TESTPA1 0x5A // only present on RFM69HW/SX1231H -#define REG_TESTPA2 0x5C // only present on RFM69HW/SX1231H -#define REG_TESTDAGC 0x6F - -//****************************************************** -// RF69/SX1231 bit control definition -//****************************************************** - -// RegOpMode -#define RF_OPMODE_SEQUENCER_OFF 0x80 -#define RF_OPMODE_SEQUENCER_ON 0x00 // Default - -#define RF_OPMODE_LISTEN_ON 0x40 -#define RF_OPMODE_LISTEN_OFF 0x00 // Default - -#define RF_OPMODE_LISTENABORT 0x20 - -#define RF_OPMODE_SLEEP 0x00 -#define RF_OPMODE_STANDBY 0x04 // Default -#define RF_OPMODE_SYNTHESIZER 0x08 -#define RF_OPMODE_TRANSMITTER 0x0C -#define RF_OPMODE_RECEIVER 0x10 - - -// RegDataModul -#define RF_DATAMODUL_DATAMODE_PACKET 0x00 // Default -#define RF_DATAMODUL_DATAMODE_CONTINUOUS 0x40 -#define RF_DATAMODUL_DATAMODE_CONTINUOUSNOBSYNC 0x60 - -#define RF_DATAMODUL_MODULATIONTYPE_FSK 0x00 // Default -#define RF_DATAMODUL_MODULATIONTYPE_OOK 0x08 - -#define RF_DATAMODUL_MODULATIONSHAPING_00 0x00 // Default -#define RF_DATAMODUL_MODULATIONSHAPING_01 0x01 -#define RF_DATAMODUL_MODULATIONSHAPING_10 0x02 -#define RF_DATAMODUL_MODULATIONSHAPING_11 0x03 - - -// RegBitRate (bits/sec) example bit rates -#define RF_BITRATEMSB_1200 0x68 -#define RF_BITRATELSB_1200 0x2B -#define RF_BITRATEMSB_2400 0x34 -#define RF_BITRATELSB_2400 0x15 -#define RF_BITRATEMSB_4800 0x1A // Default -#define RF_BITRATELSB_4800 0x0B // Default -#define RF_BITRATEMSB_9600 0x0D -#define RF_BITRATELSB_9600 0x05 -#define RF_BITRATEMSB_19200 0x06 -#define RF_BITRATELSB_19200 0x83 -#define RF_BITRATEMSB_38400 0x03 -#define RF_BITRATELSB_38400 0x41 - -#define RF_BITRATEMSB_38323 0x03 -#define RF_BITRATELSB_38323 0x43 - -#define RF_BITRATEMSB_34482 0x03 -#define RF_BITRATELSB_34482 0xA0 - -#define RF_BITRATEMSB_76800 0x01 -#define RF_BITRATELSB_76800 0xA1 -#define RF_BITRATEMSB_153600 0x00 -#define RF_BITRATELSB_153600 0xD0 -#define RF_BITRATEMSB_57600 0x02 -#define RF_BITRATELSB_57600 0x2C -#define RF_BITRATEMSB_115200 0x01 -#define RF_BITRATELSB_115200 0x16 -#define RF_BITRATEMSB_12500 0x0A -#define RF_BITRATELSB_12500 0x00 -#define RF_BITRATEMSB_25000 0x05 -#define RF_BITRATELSB_25000 0x00 -#define RF_BITRATEMSB_50000 0x02 -#define RF_BITRATELSB_50000 0x80 -#define RF_BITRATEMSB_100000 0x01 -#define RF_BITRATELSB_100000 0x40 -#define RF_BITRATEMSB_150000 0x00 -#define RF_BITRATELSB_150000 0xD5 -#define RF_BITRATEMSB_200000 0x00 -#define RF_BITRATELSB_200000 0xA0 -#define RF_BITRATEMSB_250000 0x00 -#define RF_BITRATELSB_250000 0x80 -#define RF_BITRATEMSB_300000 0x00 -#define RF_BITRATELSB_300000 0x6B -#define RF_BITRATEMSB_32768 0x03 -#define RF_BITRATELSB_32768 0xD1 -// custom bit rates -#define RF_BITRATEMSB_55555 0x02 -#define RF_BITRATELSB_55555 0x40 -#define RF_BITRATEMSB_200KBPS 0x00 -#define RF_BITRATELSB_200KBPS 0xa0 - - -// RegFdev - frequency deviation (Hz) -#define RF_FDEVMSB_2000 0x00 -#define RF_FDEVLSB_2000 0x21 -#define RF_FDEVMSB_5000 0x00 // Default -#define RF_FDEVLSB_5000 0x52 // Default -#define RF_FDEVMSB_7500 0x00 -#define RF_FDEVLSB_7500 0x7B -#define RF_FDEVMSB_10000 0x00 -#define RF_FDEVLSB_10000 0xA4 -#define RF_FDEVMSB_15000 0x00 -#define RF_FDEVLSB_15000 0xF6 -#define RF_FDEVMSB_20000 0x01 -#define RF_FDEVLSB_20000 0x48 -#define RF_FDEVMSB_25000 0x01 -#define RF_FDEVLSB_25000 0x9A -#define RF_FDEVMSB_30000 0x01 -#define RF_FDEVLSB_30000 0xEC -#define RF_FDEVMSB_35000 0x02 -#define RF_FDEVLSB_35000 0x3D -#define RF_FDEVMSB_40000 0x02 -#define RF_FDEVLSB_40000 0x8F -#define RF_FDEVMSB_45000 0x02 -#define RF_FDEVLSB_45000 0xE1 -#define RF_FDEVMSB_50000 0x03 -#define RF_FDEVLSB_50000 0x33 -#define RF_FDEVMSB_55000 0x03 -#define RF_FDEVLSB_55000 0x85 -#define RF_FDEVMSB_60000 0x03 -#define RF_FDEVLSB_60000 0xD7 -#define RF_FDEVMSB_65000 0x04 -#define RF_FDEVLSB_65000 0x29 -#define RF_FDEVMSB_70000 0x04 -#define RF_FDEVLSB_70000 0x7B -#define RF_FDEVMSB_75000 0x04 -#define RF_FDEVLSB_75000 0xCD -#define RF_FDEVMSB_80000 0x05 -#define RF_FDEVLSB_80000 0x1F -#define RF_FDEVMSB_85000 0x05 -#define RF_FDEVLSB_85000 0x71 -#define RF_FDEVMSB_90000 0x05 -#define RF_FDEVLSB_90000 0xC3 -#define RF_FDEVMSB_95000 0x06 -#define RF_FDEVLSB_95000 0x14 -#define RF_FDEVMSB_100000 0x06 -#define RF_FDEVLSB_100000 0x66 -#define RF_FDEVMSB_110000 0x07 -#define RF_FDEVLSB_110000 0x0A -#define RF_FDEVMSB_120000 0x07 -#define RF_FDEVLSB_120000 0xAE -#define RF_FDEVMSB_130000 0x08 -#define RF_FDEVLSB_130000 0x52 -#define RF_FDEVMSB_140000 0x08 -#define RF_FDEVLSB_140000 0xF6 -#define RF_FDEVMSB_150000 0x09 -#define RF_FDEVLSB_150000 0x9A -#define RF_FDEVMSB_160000 0x0A -#define RF_FDEVLSB_160000 0x3D -#define RF_FDEVMSB_170000 0x0A -#define RF_FDEVLSB_170000 0xE1 -#define RF_FDEVMSB_180000 0x0B -#define RF_FDEVLSB_180000 0x85 -#define RF_FDEVMSB_190000 0x0C -#define RF_FDEVLSB_190000 0x29 -#define RF_FDEVMSB_200000 0x0C -#define RF_FDEVLSB_200000 0xCD -#define RF_FDEVMSB_210000 0x0D -#define RF_FDEVLSB_210000 0x71 -#define RF_FDEVMSB_220000 0x0E -#define RF_FDEVLSB_220000 0x14 -#define RF_FDEVMSB_230000 0x0E -#define RF_FDEVLSB_230000 0xB8 -#define RF_FDEVMSB_240000 0x0F -#define RF_FDEVLSB_240000 0x5C -#define RF_FDEVMSB_250000 0x10 -#define RF_FDEVLSB_250000 0x00 -#define RF_FDEVMSB_260000 0x10 -#define RF_FDEVLSB_260000 0xA4 -#define RF_FDEVMSB_270000 0x11 -#define RF_FDEVLSB_270000 0x48 -#define RF_FDEVMSB_280000 0x11 -#define RF_FDEVLSB_280000 0xEC -#define RF_FDEVMSB_290000 0x12 -#define RF_FDEVLSB_290000 0x8F -#define RF_FDEVMSB_300000 0x13 -#define RF_FDEVLSB_300000 0x33 - -// frequency bands -#define RF_315MHZ 315 -#define RF_433MHZ 433 -#define RF_868MHZ 868 -#define RF_915MHZ 915 - -// RegFrf (MHz) - carrier frequency -// 315Mhz band -#define RF_FRFMSB_314 0x4E -#define RF_FRFMID_314 0x80 -#define RF_FRFLSB_314 0x00 -#define RF_FRFMSB_315 0x4E -#define RF_FRFMID_315 0xC0 -#define RF_FRFLSB_315 0x00 -#define RF_FRFMSB_316 0x4F -#define RF_FRFMID_316 0x00 -#define RF_FRFLSB_316 0x00 -// 433mhz band -#define RF_FRFMSB_433 0x6C -#define RF_FRFMID_433 0x40 -#define RF_FRFLSB_433 0x00 -#define RF_FRFMSB_434 0x6C -#define RF_FRFMID_434 0x80 -#define RF_FRFLSB_434 0x00 -#define RF_FRFMSB_435 0x6C -#define RF_FRFMID_435 0xC0 -#define RF_FRFLSB_435 0x00 -// 868Mhz band -#define RF_FRFMSB_863 0xD7 -#define RF_FRFMID_863 0xC0 -#define RF_FRFLSB_863 0x00 -#define RF_FRFMSB_864 0xD8 -#define RF_FRFMID_864 0x00 -#define RF_FRFLSB_864 0x00 -#define RF_FRFMSB_865 0xD8 -#define RF_FRFMID_865 0x40 -#define RF_FRFLSB_865 0x00 -#define RF_FRFMSB_866 0xD8 -#define RF_FRFMID_866 0x80 -#define RF_FRFLSB_866 0x00 -#define RF_FRFMSB_867 0xD8 -#define RF_FRFMID_867 0xC0 -#define RF_FRFLSB_867 0x00 -#define RF_FRFMSB_868 0xD9 -#define RF_FRFMID_868 0x00 -#define RF_FRFLSB_868 0x00 -#define RF_FRFMSB_869 0xD9 -#define RF_FRFMID_869 0x40 -#define RF_FRFLSB_869 0x00 -#define RF_FRFMSB_870 0xD9 -#define RF_FRFMID_870 0x80 -#define RF_FRFLSB_870 0x00 -// 915Mhz band -#define RF_FRFMSB_902 0xE1 -#define RF_FRFMID_902 0x80 -#define RF_FRFLSB_902 0x00 -#define RF_FRFMSB_903 0xE1 -#define RF_FRFMID_903 0xC0 -#define RF_FRFLSB_903 0x00 -#define RF_FRFMSB_904 0xE2 -#define RF_FRFMID_904 0x00 -#define RF_FRFLSB_904 0x00 -#define RF_FRFMSB_905 0xE2 -#define RF_FRFMID_905 0x40 -#define RF_FRFLSB_905 0x00 -#define RF_FRFMSB_906 0xE2 -#define RF_FRFMID_906 0x80 -#define RF_FRFLSB_906 0x00 -#define RF_FRFMSB_907 0xE2 -#define RF_FRFMID_907 0xC0 -#define RF_FRFLSB_907 0x00 -#define RF_FRFMSB_908 0xE3 -#define RF_FRFMID_908 0x00 -#define RF_FRFLSB_908 0x00 -#define RF_FRFMSB_909 0xE3 -#define RF_FRFMID_909 0x40 -#define RF_FRFLSB_909 0x00 -#define RF_FRFMSB_910 0xE3 -#define RF_FRFMID_910 0x80 -#define RF_FRFLSB_910 0x00 -#define RF_FRFMSB_911 0xE3 -#define RF_FRFMID_911 0xC0 -#define RF_FRFLSB_911 0x00 -#define RF_FRFMSB_912 0xE4 -#define RF_FRFMID_912 0x00 -#define RF_FRFLSB_912 0x00 -#define RF_FRFMSB_913 0xE4 -#define RF_FRFMID_913 0x40 -#define RF_FRFLSB_913 0x00 -#define RF_FRFMSB_914 0xE4 -#define RF_FRFMID_914 0x80 -#define RF_FRFLSB_914 0x00 -#define RF_FRFMSB_915 0xE4 // Default -#define RF_FRFMID_915 0xC0 // Default -#define RF_FRFLSB_915 0x00 // Default -#define RF_FRFMSB_916 0xE5 -#define RF_FRFMID_916 0x00 -#define RF_FRFLSB_916 0x00 -#define RF_FRFMSB_917 0xE5 -#define RF_FRFMID_917 0x40 -#define RF_FRFLSB_917 0x00 -#define RF_FRFMSB_918 0xE5 -#define RF_FRFMID_918 0x80 -#define RF_FRFLSB_918 0x00 -#define RF_FRFMSB_919 0xE5 -#define RF_FRFMID_919 0xC0 -#define RF_FRFLSB_919 0x00 -#define RF_FRFMSB_920 0xE6 -#define RF_FRFMID_920 0x00 -#define RF_FRFLSB_920 0x00 -#define RF_FRFMSB_921 0xE6 -#define RF_FRFMID_921 0x40 -#define RF_FRFLSB_921 0x00 -#define RF_FRFMSB_922 0xE6 -#define RF_FRFMID_922 0x80 -#define RF_FRFLSB_922 0x00 -#define RF_FRFMSB_923 0xE6 -#define RF_FRFMID_923 0xC0 -#define RF_FRFLSB_923 0x00 -#define RF_FRFMSB_924 0xE7 -#define RF_FRFMID_924 0x00 -#define RF_FRFLSB_924 0x00 -#define RF_FRFMSB_925 0xE7 -#define RF_FRFMID_925 0x40 -#define RF_FRFLSB_925 0x00 -#define RF_FRFMSB_926 0xE7 -#define RF_FRFMID_926 0x80 -#define RF_FRFLSB_926 0x00 -#define RF_FRFMSB_927 0xE7 -#define RF_FRFMID_927 0xC0 -#define RF_FRFLSB_927 0x00 -#define RF_FRFMSB_928 0xE8 -#define RF_FRFMID_928 0x00 -#define RF_FRFLSB_928 0x00 - - -// RegOsc1 -#define RF_OSC1_RCCAL_START 0x80 -#define RF_OSC1_RCCAL_DONE 0x40 - - -// RegAfcCtrl -#define RF_AFCCTRL_LOWBETA_OFF 0x00 // Default -#define RF_AFCCTRL_LOWBETA_ON 0x20 - - -// RegLowBat -#define RF_LOWBAT_MONITOR 0x10 -#define RF_LOWBAT_ON 0x08 -#define RF_LOWBAT_OFF 0x00 // Default - -#define RF_LOWBAT_TRIM_1695 0x00 -#define RF_LOWBAT_TRIM_1764 0x01 -#define RF_LOWBAT_TRIM_1835 0x02 // Default -#define RF_LOWBAT_TRIM_1905 0x03 -#define RF_LOWBAT_TRIM_1976 0x04 -#define RF_LOWBAT_TRIM_2045 0x05 -#define RF_LOWBAT_TRIM_2116 0x06 -#define RF_LOWBAT_TRIM_2185 0x07 - - -// RegListen1 -#define RF_LISTEN1_RESOL_64 0x50 -#define RF_LISTEN1_RESOL_4100 0xA0 // Default -#define RF_LISTEN1_RESOL_262000 0xF0 - -#define RF_LISTEN1_RESOL_IDLE_64 0x40 -#define RF_LISTEN1_RESOL_IDLE_4100 0x80 // Default -#define RF_LISTEN1_RESOL_IDLE_262000 0xC0 - -#define RF_LISTEN1_RESOL_RX_64 0x10 -#define RF_LISTEN1_RESOL_RX_4100 0x20 // Default -#define RF_LISTEN1_RESOL_RX_262000 0x30 - -#define RF_LISTEN1_CRITERIA_RSSI 0x00 // Default -#define RF_LISTEN1_CRITERIA_RSSIANDSYNC 0x08 - -#define RF_LISTEN1_END_00 0x00 -#define RF_LISTEN1_END_01 0x02 // Default -#define RF_LISTEN1_END_10 0x04 - - -// RegListen2 -#define RF_LISTEN2_COEFIDLE_VALUE 0xF5 // Default - - -// RegListen3 -#define RF_LISTEN3_COEFRX_VALUE 0x20 // Default - - -// RegVersion -#define RF_VERSION_VER 0x24 // Default - - -// RegPaLevel -#define RF_PALEVEL_PA0_ON 0x80 // Default -#define RF_PALEVEL_PA0_OFF 0x00 -#define RF_PALEVEL_PA1_ON 0x40 -#define RF_PALEVEL_PA1_OFF 0x00 // Default -#define RF_PALEVEL_PA2_ON 0x20 -#define RF_PALEVEL_PA2_OFF 0x00 // Default - -#define RF_PALEVEL_OUTPUTPOWER_00000 0x00 -#define RF_PALEVEL_OUTPUTPOWER_00001 0x01 -#define RF_PALEVEL_OUTPUTPOWER_00010 0x02 -#define RF_PALEVEL_OUTPUTPOWER_00011 0x03 -#define RF_PALEVEL_OUTPUTPOWER_00100 0x04 -#define RF_PALEVEL_OUTPUTPOWER_00101 0x05 -#define RF_PALEVEL_OUTPUTPOWER_00110 0x06 -#define RF_PALEVEL_OUTPUTPOWER_00111 0x07 -#define RF_PALEVEL_OUTPUTPOWER_01000 0x08 -#define RF_PALEVEL_OUTPUTPOWER_01001 0x09 -#define RF_PALEVEL_OUTPUTPOWER_01010 0x0A -#define RF_PALEVEL_OUTPUTPOWER_01011 0x0B -#define RF_PALEVEL_OUTPUTPOWER_01100 0x0C -#define RF_PALEVEL_OUTPUTPOWER_01101 0x0D -#define RF_PALEVEL_OUTPUTPOWER_01110 0x0E -#define RF_PALEVEL_OUTPUTPOWER_01111 0x0F -#define RF_PALEVEL_OUTPUTPOWER_10000 0x10 -#define RF_PALEVEL_OUTPUTPOWER_10001 0x11 -#define RF_PALEVEL_OUTPUTPOWER_10010 0x12 -#define RF_PALEVEL_OUTPUTPOWER_10011 0x13 -#define RF_PALEVEL_OUTPUTPOWER_10100 0x14 -#define RF_PALEVEL_OUTPUTPOWER_10101 0x15 -#define RF_PALEVEL_OUTPUTPOWER_10110 0x16 -#define RF_PALEVEL_OUTPUTPOWER_10111 0x17 -#define RF_PALEVEL_OUTPUTPOWER_11000 0x18 -#define RF_PALEVEL_OUTPUTPOWER_11001 0x19 -#define RF_PALEVEL_OUTPUTPOWER_11010 0x1A -#define RF_PALEVEL_OUTPUTPOWER_11011 0x1B -#define RF_PALEVEL_OUTPUTPOWER_11100 0x1C -#define RF_PALEVEL_OUTPUTPOWER_11101 0x1D -#define RF_PALEVEL_OUTPUTPOWER_11110 0x1E -#define RF_PALEVEL_OUTPUTPOWER_11111 0x1F // Default - - -// RegPaRamp -#define RF_PARAMP_3400 0x00 -#define RF_PARAMP_2000 0x01 -#define RF_PARAMP_1000 0x02 -#define RF_PARAMP_500 0x03 -#define RF_PARAMP_250 0x04 -#define RF_PARAMP_125 0x05 -#define RF_PARAMP_100 0x06 -#define RF_PARAMP_62 0x07 -#define RF_PARAMP_50 0x08 -#define RF_PARAMP_40 0x09 // Default -#define RF_PARAMP_31 0x0A -#define RF_PARAMP_25 0x0B -#define RF_PARAMP_20 0x0C -#define RF_PARAMP_15 0x0D -#define RF_PARAMP_12 0x0E -#define RF_PARAMP_10 0x0F - - -// RegOcp -#define RF_OCP_OFF 0x0F -#define RF_OCP_ON 0x1A // Default - -#define RF_OCP_TRIM_45 0x00 -#define RF_OCP_TRIM_50 0x01 -#define RF_OCP_TRIM_55 0x02 -#define RF_OCP_TRIM_60 0x03 -#define RF_OCP_TRIM_65 0x04 -#define RF_OCP_TRIM_70 0x05 -#define RF_OCP_TRIM_75 0x06 -#define RF_OCP_TRIM_80 0x07 -#define RF_OCP_TRIM_85 0x08 -#define RF_OCP_TRIM_90 0x09 -#define RF_OCP_TRIM_95 0x0A // Default -#define RF_OCP_TRIM_100 0x0B -#define RF_OCP_TRIM_105 0x0C -#define RF_OCP_TRIM_110 0x0D -#define RF_OCP_TRIM_115 0x0E -#define RF_OCP_TRIM_120 0x0F - - -// RegAgcRef - not present on RFM69/SX1231 -#define RF_AGCREF_AUTO_ON 0x40 // Default -#define RF_AGCREF_AUTO_OFF 0x00 - -#define RF_AGCREF_LEVEL_MINUS80 0x00 // Default -#define RF_AGCREF_LEVEL_MINUS81 0x01 -#define RF_AGCREF_LEVEL_MINUS82 0x02 -#define RF_AGCREF_LEVEL_MINUS83 0x03 -#define RF_AGCREF_LEVEL_MINUS84 0x04 -#define RF_AGCREF_LEVEL_MINUS85 0x05 -#define RF_AGCREF_LEVEL_MINUS86 0x06 -#define RF_AGCREF_LEVEL_MINUS87 0x07 -#define RF_AGCREF_LEVEL_MINUS88 0x08 -#define RF_AGCREF_LEVEL_MINUS89 0x09 -#define RF_AGCREF_LEVEL_MINUS90 0x0A -#define RF_AGCREF_LEVEL_MINUS91 0x0B -#define RF_AGCREF_LEVEL_MINUS92 0x0C -#define RF_AGCREF_LEVEL_MINUS93 0x0D -#define RF_AGCREF_LEVEL_MINUS94 0x0E -#define RF_AGCREF_LEVEL_MINUS95 0x0F -#define RF_AGCREF_LEVEL_MINUS96 0x10 -#define RF_AGCREF_LEVEL_MINUS97 0x11 -#define RF_AGCREF_LEVEL_MINUS98 0x12 -#define RF_AGCREF_LEVEL_MINUS99 0x13 -#define RF_AGCREF_LEVEL_MINUS100 0x14 -#define RF_AGCREF_LEVEL_MINUS101 0x15 -#define RF_AGCREF_LEVEL_MINUS102 0x16 -#define RF_AGCREF_LEVEL_MINUS103 0x17 -#define RF_AGCREF_LEVEL_MINUS104 0x18 -#define RF_AGCREF_LEVEL_MINUS105 0x19 -#define RF_AGCREF_LEVEL_MINUS106 0x1A -#define RF_AGCREF_LEVEL_MINUS107 0x1B -#define RF_AGCREF_LEVEL_MINUS108 0x1C -#define RF_AGCREF_LEVEL_MINUS109 0x1D -#define RF_AGCREF_LEVEL_MINUS110 0x1E -#define RF_AGCREF_LEVEL_MINUS111 0x1F -#define RF_AGCREF_LEVEL_MINUS112 0x20 -#define RF_AGCREF_LEVEL_MINUS113 0x21 -#define RF_AGCREF_LEVEL_MINUS114 0x22 -#define RF_AGCREF_LEVEL_MINUS115 0x23 -#define RF_AGCREF_LEVEL_MINUS116 0x24 -#define RF_AGCREF_LEVEL_MINUS117 0x25 -#define RF_AGCREF_LEVEL_MINUS118 0x26 -#define RF_AGCREF_LEVEL_MINUS119 0x27 -#define RF_AGCREF_LEVEL_MINUS120 0x28 -#define RF_AGCREF_LEVEL_MINUS121 0x29 -#define RF_AGCREF_LEVEL_MINUS122 0x2A -#define RF_AGCREF_LEVEL_MINUS123 0x2B -#define RF_AGCREF_LEVEL_MINUS124 0x2C -#define RF_AGCREF_LEVEL_MINUS125 0x2D -#define RF_AGCREF_LEVEL_MINUS126 0x2E -#define RF_AGCREF_LEVEL_MINUS127 0x2F -#define RF_AGCREF_LEVEL_MINUS128 0x30 -#define RF_AGCREF_LEVEL_MINUS129 0x31 -#define RF_AGCREF_LEVEL_MINUS130 0x32 -#define RF_AGCREF_LEVEL_MINUS131 0x33 -#define RF_AGCREF_LEVEL_MINUS132 0x34 -#define RF_AGCREF_LEVEL_MINUS133 0x35 -#define RF_AGCREF_LEVEL_MINUS134 0x36 -#define RF_AGCREF_LEVEL_MINUS135 0x37 -#define RF_AGCREF_LEVEL_MINUS136 0x38 -#define RF_AGCREF_LEVEL_MINUS137 0x39 -#define RF_AGCREF_LEVEL_MINUS138 0x3A -#define RF_AGCREF_LEVEL_MINUS139 0x3B -#define RF_AGCREF_LEVEL_MINUS140 0x3C -#define RF_AGCREF_LEVEL_MINUS141 0x3D -#define RF_AGCREF_LEVEL_MINUS142 0x3E -#define RF_AGCREF_LEVEL_MINUS143 0x3F - - -// RegAgcThresh1 - not present on RFM69/SX1231 -#define RF_AGCTHRESH1_SNRMARGIN_000 0x00 -#define RF_AGCTHRESH1_SNRMARGIN_001 0x20 -#define RF_AGCTHRESH1_SNRMARGIN_010 0x40 -#define RF_AGCTHRESH1_SNRMARGIN_011 0x60 -#define RF_AGCTHRESH1_SNRMARGIN_100 0x80 -#define RF_AGCTHRESH1_SNRMARGIN_101 0xA0 // Default -#define RF_AGCTHRESH1_SNRMARGIN_110 0xC0 -#define RF_AGCTHRESH1_SNRMARGIN_111 0xE0 - -#define RF_AGCTHRESH1_STEP1_0 0x00 -#define RF_AGCTHRESH1_STEP1_1 0x01 -#define RF_AGCTHRESH1_STEP1_2 0x02 -#define RF_AGCTHRESH1_STEP1_3 0x03 -#define RF_AGCTHRESH1_STEP1_4 0x04 -#define RF_AGCTHRESH1_STEP1_5 0x05 -#define RF_AGCTHRESH1_STEP1_6 0x06 -#define RF_AGCTHRESH1_STEP1_7 0x07 -#define RF_AGCTHRESH1_STEP1_8 0x08 -#define RF_AGCTHRESH1_STEP1_9 0x09 -#define RF_AGCTHRESH1_STEP1_10 0x0A -#define RF_AGCTHRESH1_STEP1_11 0x0B -#define RF_AGCTHRESH1_STEP1_12 0x0C -#define RF_AGCTHRESH1_STEP1_13 0x0D -#define RF_AGCTHRESH1_STEP1_14 0x0E -#define RF_AGCTHRESH1_STEP1_15 0x0F -#define RF_AGCTHRESH1_STEP1_16 0x10 // Default -#define RF_AGCTHRESH1_STEP1_17 0x11 -#define RF_AGCTHRESH1_STEP1_18 0x12 -#define RF_AGCTHRESH1_STEP1_19 0x13 -#define RF_AGCTHRESH1_STEP1_20 0x14 -#define RF_AGCTHRESH1_STEP1_21 0x15 -#define RF_AGCTHRESH1_STEP1_22 0x16 -#define RF_AGCTHRESH1_STEP1_23 0x17 -#define RF_AGCTHRESH1_STEP1_24 0x18 -#define RF_AGCTHRESH1_STEP1_25 0x19 -#define RF_AGCTHRESH1_STEP1_26 0x1A -#define RF_AGCTHRESH1_STEP1_27 0x1B -#define RF_AGCTHRESH1_STEP1_28 0x1C -#define RF_AGCTHRESH1_STEP1_29 0x1D -#define RF_AGCTHRESH1_STEP1_30 0x1E -#define RF_AGCTHRESH1_STEP1_31 0x1F - - -// RegAgcThresh2 - not present on RFM69/SX1231 -#define RF_AGCTHRESH2_STEP2_0 0x00 -#define RF_AGCTHRESH2_STEP2_1 0x10 -#define RF_AGCTHRESH2_STEP2_2 0x20 -#define RF_AGCTHRESH2_STEP2_3 0x30 // XXX wrong -- Default -#define RF_AGCTHRESH2_STEP2_4 0x40 -#define RF_AGCTHRESH2_STEP2_5 0x50 -#define RF_AGCTHRESH2_STEP2_6 0x60 -#define RF_AGCTHRESH2_STEP2_7 0x70 // default -#define RF_AGCTHRESH2_STEP2_8 0x80 -#define RF_AGCTHRESH2_STEP2_9 0x90 -#define RF_AGCTHRESH2_STEP2_10 0xA0 -#define RF_AGCTHRESH2_STEP2_11 0xB0 -#define RF_AGCTHRESH2_STEP2_12 0xC0 -#define RF_AGCTHRESH2_STEP2_13 0xD0 -#define RF_AGCTHRESH2_STEP2_14 0xE0 -#define RF_AGCTHRESH2_STEP2_15 0xF0 - -#define RF_AGCTHRESH2_STEP3_0 0x00 -#define RF_AGCTHRESH2_STEP3_1 0x01 -#define RF_AGCTHRESH2_STEP3_2 0x02 -#define RF_AGCTHRESH2_STEP3_3 0x03 -#define RF_AGCTHRESH2_STEP3_4 0x04 -#define RF_AGCTHRESH2_STEP3_5 0x05 -#define RF_AGCTHRESH2_STEP3_6 0x06 -#define RF_AGCTHRESH2_STEP3_7 0x07 -#define RF_AGCTHRESH2_STEP3_8 0x08 -#define RF_AGCTHRESH2_STEP3_9 0x09 -#define RF_AGCTHRESH2_STEP3_10 0x0A -#define RF_AGCTHRESH2_STEP3_11 0x0B // Default -#define RF_AGCTHRESH2_STEP3_12 0x0C -#define RF_AGCTHRESH2_STEP3_13 0x0D -#define RF_AGCTHRESH2_STEP3_14 0x0E -#define RF_AGCTHRESH2_STEP3_15 0x0F - - -// RegAgcThresh3 - not present on RFM69/SX1231 -#define RF_AGCTHRESH3_STEP4_0 0x00 -#define RF_AGCTHRESH3_STEP4_1 0x10 -#define RF_AGCTHRESH3_STEP4_2 0x20 -#define RF_AGCTHRESH3_STEP4_3 0x30 -#define RF_AGCTHRESH3_STEP4_4 0x40 -#define RF_AGCTHRESH3_STEP4_5 0x50 -#define RF_AGCTHRESH3_STEP4_6 0x60 -#define RF_AGCTHRESH3_STEP4_7 0x70 -#define RF_AGCTHRESH3_STEP4_8 0x80 -#define RF_AGCTHRESH3_STEP4_9 0x90 // Default -#define RF_AGCTHRESH3_STEP4_10 0xA0 -#define RF_AGCTHRESH3_STEP4_11 0xB0 -#define RF_AGCTHRESH3_STEP4_12 0xC0 -#define RF_AGCTHRESH3_STEP4_13 0xD0 -#define RF_AGCTHRESH3_STEP4_14 0xE0 -#define RF_AGCTHRESH3_STEP4_15 0xF0 - -#define RF_AGCTHRESH3_STEP5_0 0x00 -#define RF_AGCTHRESH3_STEP5_1 0x01 -#define RF_AGCTHRESH3_STEP5_2 0x02 -#define RF_AGCTHRESH3_STEP5_3 0x03 -#define RF_AGCTHRESH3_STEP5_4 0x04 -#define RF_AGCTHRESH3_STEP5_5 0x05 -#define RF_AGCTHRESH3_STEP5_6 0x06 -#define RF_AGCTHRESH3_STEP5_7 0x07 -#define RF_AGCTHRES33_STEP5_8 0x08 -#define RF_AGCTHRESH3_STEP5_9 0x09 -#define RF_AGCTHRESH3_STEP5_10 0x0A -#define RF_AGCTHRESH3_STEP5_11 0x0B // Default -#define RF_AGCTHRESH3_STEP5_12 0x0C -#define RF_AGCTHRESH3_STEP5_13 0x0D -#define RF_AGCTHRESH3_STEP5_14 0x0E -#define RF_AGCTHRESH3_STEP5_15 0x0F - - -// RegLna -#define RF_LNA_ZIN_50 0x00 // Reset value -#define RF_LNA_ZIN_200 0x80 // Recommended default - -#define RF_LNA_LOWPOWER_OFF 0x00 // Default -#define RF_LNA_LOWPOWER_ON 0x40 - -#define RF_LNA_CURRENTGAIN 0x08 - -#define RF_LNA_GAINSELECT_AUTO 0x00 // Default -#define RF_LNA_GAINSELECT_MAX 0x01 -#define RF_LNA_GAINSELECT_MAXMINUS6 0x02 -#define RF_LNA_GAINSELECT_MAXMINUS12 0x03 -#define RF_LNA_GAINSELECT_MAXMINUS24 0x04 -#define RF_LNA_GAINSELECT_MAXMINUS36 0x05 -#define RF_LNA_GAINSELECT_MAXMINUS48 0x06 - - -// RegRxBw -#define RF_RXBW_DCCFREQ_000 0x00 -#define RF_RXBW_DCCFREQ_001 0x20 -#define RF_RXBW_DCCFREQ_010 0x40 // Recommended default -#define RF_RXBW_DCCFREQ_011 0x60 -#define RF_RXBW_DCCFREQ_100 0x80 // Reset value -#define RF_RXBW_DCCFREQ_101 0xA0 -#define RF_RXBW_DCCFREQ_110 0xC0 -#define RF_RXBW_DCCFREQ_111 0xE0 - -#define RF_RXBW_MANT_16 0x00 // Reset value -#define RF_RXBW_MANT_20 0x08 -#define RF_RXBW_MANT_24 0x10 // Recommended default - -#define RF_RXBW_EXP_0 0x00 -#define RF_RXBW_EXP_1 0x01 -#define RF_RXBW_EXP_2 0x02 -#define RF_RXBW_EXP_3 0x03 -#define RF_RXBW_EXP_4 0x04 -#define RF_RXBW_EXP_5 0x05 // Recommended default -#define RF_RXBW_EXP_6 0x06 // Reset value -#define RF_RXBW_EXP_7 0x07 - - -// RegAfcBw -#define RF_AFCBW_DCCFREQAFC_000 0x00 -#define RF_AFCBW_DCCFREQAFC_001 0x20 -#define RF_AFCBW_DCCFREQAFC_010 0x40 -#define RF_AFCBW_DCCFREQAFC_011 0x60 -#define RF_AFCBW_DCCFREQAFC_100 0x80 // Default -#define RF_AFCBW_DCCFREQAFC_101 0xA0 -#define RF_AFCBW_DCCFREQAFC_110 0xC0 -#define RF_AFCBW_DCCFREQAFC_111 0xE0 - -#define RF_AFCBW_MANTAFC_16 0x00 -#define RF_AFCBW_MANTAFC_20 0x08 // Default -#define RF_AFCBW_MANTAFC_24 0x10 - -#define RF_AFCBW_EXPAFC_0 0x00 -#define RF_AFCBW_EXPAFC_1 0x01 -#define RF_AFCBW_EXPAFC_2 0x02 // Reset value -#define RF_AFCBW_EXPAFC_3 0x03 // Recommended default -#define RF_AFCBW_EXPAFC_4 0x04 -#define RF_AFCBW_EXPAFC_5 0x05 -#define RF_AFCBW_EXPAFC_6 0x06 -#define RF_AFCBW_EXPAFC_7 0x07 - - -// RegOokPeak -#define RF_OOKPEAK_THRESHTYPE_FIXED 0x00 -#define RF_OOKPEAK_THRESHTYPE_PEAK 0x40 // Default -#define RF_OOKPEAK_THRESHTYPE_AVERAGE 0x80 - -#define RF_OOKPEAK_PEAKTHRESHSTEP_000 0x00 // Default -#define RF_OOKPEAK_PEAKTHRESHSTEP_001 0x08 -#define RF_OOKPEAK_PEAKTHRESHSTEP_010 0x10 -#define RF_OOKPEAK_PEAKTHRESHSTEP_011 0x18 -#define RF_OOKPEAK_PEAKTHRESHSTEP_100 0x20 -#define RF_OOKPEAK_PEAKTHRESHSTEP_101 0x28 -#define RF_OOKPEAK_PEAKTHRESHSTEP_110 0x30 -#define RF_OOKPEAK_PEAKTHRESHSTEP_111 0x38 - -#define RF_OOKPEAK_PEAKTHRESHDEC_000 0x00 // Default -#define RF_OOKPEAK_PEAKTHRESHDEC_001 0x01 -#define RF_OOKPEAK_PEAKTHRESHDEC_010 0x02 -#define RF_OOKPEAK_PEAKTHRESHDEC_011 0x03 -#define RF_OOKPEAK_PEAKTHRESHDEC_100 0x04 -#define RF_OOKPEAK_PEAKTHRESHDEC_101 0x05 -#define RF_OOKPEAK_PEAKTHRESHDEC_110 0x06 -#define RF_OOKPEAK_PEAKTHRESHDEC_111 0x07 - - -// RegOokAvg -#define RF_OOKAVG_AVERAGETHRESHFILT_00 0x00 -#define RF_OOKAVG_AVERAGETHRESHFILT_01 0x40 -#define RF_OOKAVG_AVERAGETHRESHFILT_10 0x80 // Default -#define RF_OOKAVG_AVERAGETHRESHFILT_11 0xC0 - - -// RegOokFix -#define RF_OOKFIX_FIXEDTHRESH_VALUE 0x06 // Default - - -// RegAfcFei -#define RF_AFCFEI_FEI_DONE 0x40 -#define RF_AFCFEI_FEI_START 0x20 -#define RF_AFCFEI_AFC_DONE 0x10 -#define RF_AFCFEI_AFCAUTOCLEAR_ON 0x08 -#define RF_AFCFEI_AFCAUTOCLEAR_OFF 0x00 // Default - -#define RF_AFCFEI_AFCAUTO_ON 0x04 -#define RF_AFCFEI_AFCAUTO_OFF 0x00 // Default - -#define RF_AFCFEI_AFC_CLEAR 0x02 -#define RF_AFCFEI_AFC_START 0x01 - - -// RegRssiConfig -#define RF_RSSI_FASTRX_ON 0x08 // not present on RFM69/SX1231 -#define RF_RSSI_FASTRX_OFF 0x00 // Default - -#define RF_RSSI_DONE 0x02 -#define RF_RSSI_START 0x01 - - -// RegDioMapping1 -#define RF_DIOMAPPING1_DIO0_00 0x00 // Default -#define RF_DIOMAPPING1_DIO0_01 0x40 -#define RF_DIOMAPPING1_DIO0_10 0x80 -#define RF_DIOMAPPING1_DIO0_11 0xC0 - -#define RF_DIOMAPPING1_DIO1_00 0x00 // Default -#define RF_DIOMAPPING1_DIO1_01 0x10 -#define RF_DIOMAPPING1_DIO1_10 0x20 -#define RF_DIOMAPPING1_DIO1_11 0x30 - -#define RF_DIOMAPPING1_DIO2_00 0x00 // Default -#define RF_DIOMAPPING1_DIO2_01 0x04 -#define RF_DIOMAPPING1_DIO2_10 0x08 -#define RF_DIOMAPPING1_DIO2_11 0x0C - -#define RF_DIOMAPPING1_DIO3_00 0x00 // Default -#define RF_DIOMAPPING1_DIO3_01 0x01 -#define RF_DIOMAPPING1_DIO3_10 0x02 -#define RF_DIOMAPPING1_DIO3_11 0x03 - - -// RegDioMapping2 -#define RF_DIOMAPPING2_DIO4_00 0x00 // Default -#define RF_DIOMAPPING2_DIO4_01 0x40 -#define RF_DIOMAPPING2_DIO4_10 0x80 -#define RF_DIOMAPPING2_DIO4_11 0xC0 - -#define RF_DIOMAPPING2_DIO5_00 0x00 // Default -#define RF_DIOMAPPING2_DIO5_01 0x10 -#define RF_DIOMAPPING2_DIO5_10 0x20 -#define RF_DIOMAPPING2_DIO5_11 0x30 - -#define RF_DIOMAPPING2_CLKOUT_32MHZ 0x00 -#define RF_DIOMAPPING2_CLKOUT_16MHZ 0x01 -#define RF_DIOMAPPING2_CLKOUT_8MHZ 0x02 -#define RF_DIOMAPPING2_CLKOUT_4MHZ 0x03 -#define RF_DIOMAPPING2_CLKOUT_2MHZ 0x04 -#define RF_DIOMAPPING2_CLKOUT_1MHZ 0x05 // Reset value -#define RF_DIOMAPPING2_CLKOUT_RC 0x06 -#define RF_DIOMAPPING2_CLKOUT_OFF 0x07 // Recommended default - - -// RegIrqFlags1 -#define RF_IRQFLAGS1_MODEREADY 0x80 -#define RF_IRQFLAGS1_RXREADY 0x40 -#define RF_IRQFLAGS1_TXREADY 0x20 -#define RF_IRQFLAGS1_PLLLOCK 0x10 -#define RF_IRQFLAGS1_RSSI 0x08 -#define RF_IRQFLAGS1_TIMEOUT 0x04 -#define RF_IRQFLAGS1_AUTOMODE 0x02 -#define RF_IRQFLAGS1_SYNCADDRESSMATCH 0x01 - - -// RegIrqFlags2 -#define RF_IRQFLAGS2_FIFOFULL 0x80 -#define RF_IRQFLAGS2_FIFONOTEMPTY 0x40 -#define RF_IRQFLAGS2_FIFOLEVEL 0x20 -#define RF_IRQFLAGS2_FIFOOVERRUN 0x10 -#define RF_IRQFLAGS2_PACKETSENT 0x08 -#define RF_IRQFLAGS2_PAYLOADREADY 0x04 -#define RF_IRQFLAGS2_CRCOK 0x02 -#define RF_IRQFLAGS2_LOWBAT 0x01 // not present on RFM69/SX1231 - - -// RegRssiThresh -#define RF_RSSITHRESH_VALUE 0xE4 // Default - - -// RegRxTimeout1 -#define RF_RXTIMEOUT1_RXSTART_VALUE 0x00 // Default - - -// RegRxTimeout2 -#define RF_RXTIMEOUT2_RSSITHRESH_VALUE 0x00 // Default - - -// RegPreamble -#define RF_PREAMBLESIZE_MSB_VALUE 0x00 // Default -#define RF_PREAMBLESIZE_LSB_VALUE 0x03 // Default - - -// RegSyncConfig -#define RF_SYNC_ON 0x80 // Default -#define RF_SYNC_OFF 0x00 - -#define RF_SYNC_FIFOFILL_AUTO 0x00 // Default -- when sync interrupt occurs -#define RF_SYNC_FIFOFILL_MANUAL 0x40 - -#define RF_SYNC_SIZE_1 0x00 -#define RF_SYNC_SIZE_2 0x08 -#define RF_SYNC_SIZE_3 0x10 -#define RF_SYNC_SIZE_4 0x18 // Default -#define RF_SYNC_SIZE_5 0x20 -#define RF_SYNC_SIZE_6 0x28 -#define RF_SYNC_SIZE_7 0x30 -#define RF_SYNC_SIZE_8 0x38 - -#define RF_SYNC_TOL_0 0x00 // Default -#define RF_SYNC_TOL_1 0x01 -#define RF_SYNC_TOL_2 0x02 -#define RF_SYNC_TOL_3 0x03 -#define RF_SYNC_TOL_4 0x04 -#define RF_SYNC_TOL_5 0x05 -#define RF_SYNC_TOL_6 0x06 -#define RF_SYNC_TOL_7 0x07 - - -// RegSyncValue1-8 -#define RF_SYNC_BYTE1_VALUE 0x00 // Default -#define RF_SYNC_BYTE2_VALUE 0x00 // Default -#define RF_SYNC_BYTE3_VALUE 0x00 // Default -#define RF_SYNC_BYTE4_VALUE 0x00 // Default -#define RF_SYNC_BYTE5_VALUE 0x00 // Default -#define RF_SYNC_BYTE6_VALUE 0x00 // Default -#define RF_SYNC_BYTE7_VALUE 0x00 // Default -#define RF_SYNC_BYTE8_VALUE 0x00 // Default - - -// RegPacketConfig1 -#define RF_PACKET1_FORMAT_FIXED 0x00 // Default -#define RF_PACKET1_FORMAT_VARIABLE 0x80 - -#define RF_PACKET1_DCFREE_OFF 0x00 // Default -#define RF_PACKET1_DCFREE_MANCHESTER 0x20 -#define RF_PACKET1_DCFREE_WHITENING 0x40 - -#define RF_PACKET1_CRC_ON 0x10 // Default -#define RF_PACKET1_CRC_OFF 0x00 - -#define RF_PACKET1_CRCAUTOCLEAR_ON 0x00 // Default -#define RF_PACKET1_CRCAUTOCLEAR_OFF 0x08 - -#define RF_PACKET1_ADRSFILTERING_OFF 0x00 // Default -#define RF_PACKET1_ADRSFILTERING_NODE 0x02 -#define RF_PACKET1_ADRSFILTERING_NODEBROADCAST 0x04 - - -// RegPayloadLength -#define RF_PAYLOADLENGTH_VALUE 0x40 // Default - - -// RegBroadcastAdrs -#define RF_BROADCASTADDRESS_VALUE 0x00 - - -// RegAutoModes -#define RF_AUTOMODES_ENTER_OFF 0x00 // Default -#define RF_AUTOMODES_ENTER_FIFONOTEMPTY 0x20 -#define RF_AUTOMODES_ENTER_FIFOLEVEL 0x40 -#define RF_AUTOMODES_ENTER_CRCOK 0x60 -#define RF_AUTOMODES_ENTER_PAYLOADREADY 0x80 -#define RF_AUTOMODES_ENTER_SYNCADRSMATCH 0xA0 -#define RF_AUTOMODES_ENTER_PACKETSENT 0xC0 -#define RF_AUTOMODES_ENTER_FIFOEMPTY 0xE0 - -#define RF_AUTOMODES_EXIT_OFF 0x00 // Default -#define RF_AUTOMODES_EXIT_FIFOEMPTY 0x04 -#define RF_AUTOMODES_EXIT_FIFOLEVEL 0x08 -#define RF_AUTOMODES_EXIT_CRCOK 0x0C -#define RF_AUTOMODES_EXIT_PAYLOADREADY 0x10 -#define RF_AUTOMODES_EXIT_SYNCADRSMATCH 0x14 -#define RF_AUTOMODES_EXIT_PACKETSENT 0x18 -#define RF_AUTOMODES_EXIT_RXTIMEOUT 0x1C - -#define RF_AUTOMODES_INTERMEDIATE_SLEEP 0x00 // Default -#define RF_AUTOMODES_INTERMEDIATE_STANDBY 0x01 -#define RF_AUTOMODES_INTERMEDIATE_RECEIVER 0x02 -#define RF_AUTOMODES_INTERMEDIATE_TRANSMITTER 0x03 - - -// RegFifoThresh -#define RF_FIFOTHRESH_TXSTART_FIFOTHRESH 0x00 // Reset value -#define RF_FIFOTHRESH_TXSTART_FIFONOTEMPTY 0x80 // Recommended default - -#define RF_FIFOTHRESH_VALUE 0x0F // Default - - -// RegPacketConfig2 -#define RF_PACKET2_RXRESTARTDELAY_1BIT 0x00 // Default -#define RF_PACKET2_RXRESTARTDELAY_2BITS 0x10 -#define RF_PACKET2_RXRESTARTDELAY_4BITS 0x20 -#define RF_PACKET2_RXRESTARTDELAY_8BITS 0x30 -#define RF_PACKET2_RXRESTARTDELAY_16BITS 0x40 -#define RF_PACKET2_RXRESTARTDELAY_32BITS 0x50 -#define RF_PACKET2_RXRESTARTDELAY_64BITS 0x60 -#define RF_PACKET2_RXRESTARTDELAY_128BITS 0x70 -#define RF_PACKET2_RXRESTARTDELAY_256BITS 0x80 -#define RF_PACKET2_RXRESTARTDELAY_512BITS 0x90 -#define RF_PACKET2_RXRESTARTDELAY_1024BITS 0xA0 -#define RF_PACKET2_RXRESTARTDELAY_2048BITS 0xB0 -#define RF_PACKET2_RXRESTARTDELAY_NONE 0xC0 -#define RF_PACKET2_RXRESTART 0x04 - -#define RF_PACKET2_AUTORXRESTART_ON 0x02 // Default -#define RF_PACKET2_AUTORXRESTART_OFF 0x00 - -#define RF_PACKET2_AES_ON 0x01 -#define RF_PACKET2_AES_OFF 0x00 // Default - - -// RegAesKey1-16 -#define RF_AESKEY1_VALUE 0x00 // Default -#define RF_AESKEY2_VALUE 0x00 // Default -#define RF_AESKEY3_VALUE 0x00 // Default -#define RF_AESKEY4_VALUE 0x00 // Default -#define RF_AESKEY5_VALUE 0x00 // Default -#define RF_AESKEY6_VALUE 0x00 // Default -#define RF_AESKEY7_VALUE 0x00 // Default -#define RF_AESKEY8_VALUE 0x00 // Default -#define RF_AESKEY9_VALUE 0x00 // Default -#define RF_AESKEY10_VALUE 0x00 // Default -#define RF_AESKEY11_VALUE 0x00 // Default -#define RF_AESKEY12_VALUE 0x00 // Default -#define RF_AESKEY13_VALUE 0x00 // Default -#define RF_AESKEY14_VALUE 0x00 // Default -#define RF_AESKEY15_VALUE 0x00 // Default -#define RF_AESKEY16_VALUE 0x00 // Default - - -// RegTemp1 -#define RF_TEMP1_MEAS_START 0x08 -#define RF_TEMP1_MEAS_RUNNING 0x04 -// not present on RFM69/SX1231 -#define RF_TEMP1_ADCLOWPOWER_ON 0x01 // Default -#define RF_TEMP1_ADCLOWPOWER_OFF 0x00 - - -// RegTestLna -#define RF_TESTLNA_NORMAL 0x1B -#define RF_TESTLNA_HIGH_SENSITIVITY 0x2D - - -// RegTestDagc -#define RF_DAGC_NORMAL 0x00 // Reset value -#define RF_DAGC_IMPROVED_LOWBETA1 0x20 -#define RF_DAGC_IMPROVED_LOWBETA0 0x30 // Recommended default diff --git a/aliznayem/Recv.Makefile b/aliznayem/Recv.Makefile deleted file mode 100644 index 8bf16b8..0000000 --- a/aliznayem/Recv.Makefile +++ /dev/null @@ -1,43 +0,0 @@ -CC = avr-gcc -MCU = atmega328p -TARGET = recv - -SRC = RFM69.c gateway.c spi.c get_millis.c serial.c -OBJ = $(SRC:.c=.o) - -CFLAGS = -std=gnu99 -CFLAGS += -Os -CFLAGS += -Wall -CFLAGS += -mmcu=$(MCU) -CFLAGS += -DBAUD=115200 -CFLAGS += -DF_CPU=16000000UL -CFLAGS += -ffunction-sections -fdata-sections - -LDFLAGS = -mmcu=$(MCU) -LDFLAGS += -Wl,--gc-sections - -HEX_FLAGS = -O ihex -HEX_FLAGS += -j .text -j .data - -AVRDUDE_FLAGS = -p $(MCU) -AVRDUDE_FLAGS += -c arduino -AVRDUDE_FLAGS += -P /dev/cuaU0 -AVRDUDE_FLAGS += -D -U - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - -elf: $(OBJ) - $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf - -hex: elf - avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex - -upload: hex - avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i - -.PHONY: clean - -clean: - rm *.o *.elf *.hex - diff --git a/aliznayem/Send.Makefile b/aliznayem/Send.Makefile deleted file mode 100644 index f8ef026..0000000 --- a/aliznayem/Send.Makefile +++ /dev/null @@ -1,44 +0,0 @@ -CC = avr-gcc -MCU = atmega328p -TARGET = send - -SRC = RFM69.c node.c spi.c get_millis.c serial.c -OBJ = $(SRC:.c=.o) - -CFLAGS = -std=gnu99 -CFLAGS += -Os -CFLAGS += -Wall -CFLAGS += -mmcu=$(MCU) -CFLAGS += -DBAUD=115200 -CFLAGS += -DF_CPU=16000000UL -CFLAGS += -ffunction-sections -fdata-sections - -LDFLAGS = -mmcu=$(MCU) -LDFLAGS += -Wl,--gc-sections - -HEX_FLAGS = -O ihex -HEX_FLAGS += -j .text -j .data - -AVRDUDE_FLAGS = -p $(MCU) -AVRDUDE_FLAGS += -c arduino -AVRDUDE_FLAGS += -P /dev/cuaU0 -AVRDUDE_FLAGS += -D -U - -%.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - -elf: $(OBJ) - $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf - -hex: elf - avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex - -upload: hex - avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i - -.PHONY: clean - -clean: - rm *.o *.elf *.hex - - diff --git a/aliznayem/gateway.c b/aliznayem/gateway.c deleted file mode 100644 index 3579674..0000000 --- a/aliznayem/gateway.c +++ /dev/null @@ -1,48 +0,0 @@ -#include <avr/io.h> -#include <stdlib.h> -#include <util/delay.h> - -#include "RFM69.h" -#include "RFM69registers.h" - -#include "serial.h" - -#define NETWORKID 33 -#define NODEID 4 - -int main(void) -{ - // initialize RFM69 - serial_init(); - - rfm69_init(433, NODEID, NETWORKID); - setHighPower(1); // if model number rfm69hw - setPowerLevel(30); // 0-31; 5dBm to 20 dBm - encrypt(NULL); // if set has to be 16 bytes. example: "1234567890123456" - - // initialize 16x2 LCD - - while (1) - { - if(receiveDone()) - { - _delay_ms(10); - if(ACKRequested()) - { - char ack[0]; - sendACK(ack, 0); - } - char stringData[17]; - for(uint8_t i=0;i<16;i++) // max 16 digit can be shown in this case - { - stringData[i]=DATA[i]; - } - - stringData[16] = 0; - serial_write_line(stringData); - } else { - serial_write_line("No data"); - _delay_ms(500); - } - } -} diff --git a/aliznayem/get_millis.c b/aliznayem/get_millis.c deleted file mode 100644 index c3a7cbd..0000000 --- a/aliznayem/get_millis.c +++ /dev/null @@ -1,45 +0,0 @@ -// Source: https://gist.github.com/adnbr/2439125#file-counting-millis-c - -#include "get_millis.h" -#include <avr/io.h> -#include <avr/interrupt.h> -#include <util/atomic.h> - -volatile unsigned long timer1_millis; - -void millis_init() -{ - // CTC mode, Clock/8 - TCCR1B |= (1 << WGM12) | (1 << CS11); - - // Load the high byte, then the low byte - // into the output compare - OCR1AH = (CTC_MATCH_OVERFLOW >> 8); - OCR1AL = CTC_MATCH_OVERFLOW; - sei(); - - // Enable the compare match interrupt - #if defined (__AVR_ATmega328__) || defined (__AVR_ATmega328P__) - TIMSK1 |= (1 << OCIE1A); - #elif defined (__AVR_ATmega64__) - TIMSK |= (1 << OCIE1A); - #elif defined (__AVR_ATtiny84A__) - TIMSK1 |= (1 << OCIE1A); - #endif -} - -unsigned long millis() -{ - unsigned long millis_return; - // ensure this cannnot be disrupted - ATOMIC_BLOCK(ATOMIC_FORCEON) - { - millis_return = timer1_millis; - } - return millis_return; -} - -ISR (TIMER1_COMPA_vect) -{ - timer1_millis++; -} diff --git a/aliznayem/get_millis.h b/aliznayem/get_millis.h deleted file mode 100644 index d792fa1..0000000 --- a/aliznayem/get_millis.h +++ /dev/null @@ -1,12 +0,0 @@ -// Source: https://gist.github.com/adnbr/2439125#file-counting-millis-c - -#ifndef GET_MILLIS_h -#define GET_MILLIS_h - -// the CTC match value in OCR1A -#define CTC_MATCH_OVERFLOW ((F_CPU/1000)/8) - -void millis_init(); -unsigned long millis(); - -#endif diff --git a/aliznayem/node.c b/aliznayem/node.c deleted file mode 100644 index 7ceae60..0000000 --- a/aliznayem/node.c +++ /dev/null @@ -1,25 +0,0 @@ -#include <avr/io.h> -#include <stdlib.h> -#include <util/delay.h> - -#include "RFM69.h" -#include "RFM69registers.h" - -#define NETWORKID 33 -#define NODEID 3 -#define TONODEID 4 - -int main(void) -{ - // initialize RFM69 - rfm69_init(433, NODEID, NETWORKID); - setHighPower(1); // if model number rfm69hw - setPowerLevel(30); // 0-31; 5dBm to 20 dBm - encrypt(NULL); // if set it has to be 16 bytes. example: "1234567890123456" - - while (1) - { - send(TONODEID, "Awesome!", 8, 0); // (toNodeId,buffer,bufferSize,requestACK?) - _delay_ms(2000); - } -} diff --git a/aliznayem/serial.c b/aliznayem/serial.c deleted file mode 100644 index 782e848..0000000 --- a/aliznayem/serial.c +++ /dev/null @@ -1,33 +0,0 @@ -#include <avr/io.h> -#include <util/setbaud.h> - -#include "serial.h" - -void serial_init(void) -{ - UBRR0H = UBRRH_VALUE; - UBRR0L = UBRRL_VALUE; -#if USE_2X - UCSR0A |= (1 << U2X0); -#else - UCSR0A &= ~(1 << U2X0); -#endif - UCSR0B = (1 << TXEN0) | (1 << RXEN0); - UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); -} - -void serial_write(char data) -{ - while (!(UCSR0A & (1 << UDRE0))) - ; - UDR0 = data; -} - -void serial_write_line(const char *s) -{ - for (; *s; s++) - serial_write(*s); - - serial_write('\r'); - serial_write('\n'); -} diff --git a/aliznayem/serial.h b/aliznayem/serial.h deleted file mode 100644 index 0f9415b..0000000 --- a/aliznayem/serial.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef SA_SERIAL_H -#define SA_SERIAL_H - -void serial_init(void); -void serial_write(char data); -void serial_write_line(const char *s); - -#endif /* SA_SERIAL_H */ diff --git a/aliznayem/spi.c b/aliznayem/spi.c deleted file mode 100644 index 9145109..0000000 --- a/aliznayem/spi.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - Copyright (c) 2007 Stefan Engelke <mbox@stefanengelke.de> - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - $Id$ -*/ - -#include <avr/io.h> -#include "spi.h" - -void spi_init() -// Initialize pins for spi communication -{ - SPI_DDR &= ~((1<<MOSI)|(1<<MISO)|(1<<SS)|(1<<SCK)); - // Define the following pins as output - SPI_DDR |= ((1<<MOSI)|(1<<SS)|(1<<SCK)); - - - SPCR = ((1<<SPE)| // SPI Enable - (0<<SPIE)| // SPI Interupt Enable - (0<<DORD)| // Data Order (0:MSB first / 1:LSB first) - (1<<MSTR)| // Master/Slave select - (0<<SPR1)|(0<<SPR0)| // SPI Clock Rate - (0<<CPOL)| // Clock Polarity (0:SCK low / 1:SCK hi when idle) - (0<<CPHA)); // Clock Phase (0:leading / 1:trailing edge sampling) - - SPSR = (1<<SPI2X); // Double Clock Rate - - // SCK frequency 4MHz with above parameters. Deails in datasheet - -} - -void spi_transfer_sync (uint8_t * dataout, uint8_t * datain, uint8_t len) -// Shift full array through target device -{ - uint8_t i; - for (i = 0; i < len; i++) { - SPDR = dataout[i]; - while((SPSR & (1<<SPIF))==0); - datain[i] = SPDR; - } -} - -void spi_transmit_sync (uint8_t * dataout, uint8_t len) -// Shift full array to target device without receiving any byte -{ - uint8_t i; - for (i = 0; i < len; i++) { - SPDR = dataout[i]; - while((SPSR & (1<<SPIF))==0); - } -} - -uint8_t spi_fast_shift (uint8_t data) -// Clocks only one byte to target device and returns the received one -{ - SPDR = data; - while((SPSR & (1<<SPIF))==0); - return SPDR; -} - diff --git a/aliznayem/spi.h b/aliznayem/spi.h deleted file mode 100644 index 2afb91d..0000000 --- a/aliznayem/spi.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - Copyright (c) 2007 Stefan Engelke <mbox@stefanengelke.de> - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - $Id$ -*/ - -#ifndef SPI_h -#define SPI_h - - #define SPI_DDR DDRB - #define MISO 4 - #define MOSI 3 - #define SCK 5 - #define SS 2 - -void spi_init(); -void spi_transfer_sync (uint8_t * dataout, uint8_t * datain, uint8_t len); -void spi_transmit_sync (uint8_t * dataout, uint8_t len); -uint8_t spi_fast_shift (uint8_t data); - -#endif diff --git a/nRF24L01/radio.c b/nRF24L01/radio.c deleted file mode 100644 index c26e5f7..0000000 --- a/nRF24L01/radio.c +++ /dev/null @@ -1,133 +0,0 @@ -#include <stdlib.h> - -#include <avr/io.h> -#include <util/delay.h> - -#include "radio.h" -#include "serial.h" - -#define SPI_SS PB2 -#define SPI_SCK PB5 -#define SPI_MISO PB4 -#define SPI_MOSI PB3 -#define SPI_DDR DDRB -#define SPI_PORT PORTB - -#define NRF24L01_CE PB0 -#define NRF24L01_CE_DDR DDRB -#define NRF24L01_CE_PORT DDRB - -#define NRF24L01_POWER_ON_RST_DELAY 100 - -#define NRF24L01_REG_CONFIG 0x00 -#define NRF24L01_REG_EN_AA 0x01 -#define NRF24L01_REG_EN_RXADDR 0x02 -#define NRF24L01_REG_SETUP_AW 0x03 -#define NRF24L01_REG_SETUP_RETR 0x04 -#define NRF24L01_REG_RF_CH 0x05 -#define NRF24L01_REG_RF_SETUP 0x06 -#define NRF24L01_REG_STATUS 0x07 -#define NRF24L01_REG_OBSERVE_TX 0x08 -#define NRF24L01_REG_RPD 0x09 -#define NRF24L01_REG_RX_ADDR_P0 0x0A -#define NRF24L01_REG_RX_ADDR_P1 0x0B -#define NRF24L01_REG_RX_ADDR_P2 0x0C -#define NRF24L01_REG_RX_ADDR_P3 0x0D -#define NRF24L01_REG_RX_ADDR_P4 0x0E -#define NRF24L01_REG_RX_ADDR_P5 0x0F -#define NRF24L01_REG_TX_ADDR 0x10 -#define NRF24L01_REG_RX_PW_P0 0x11 -#define NRF24L01_REG_RX_PW_P1 0x12 -#define NRF24L01_REG_RX_PW_P2 0x13 -#define NRF24L01_REG_RX_PW_P3 0x14 -#define NRF24L01_REG_RX_PW_P4 0x15 -#define NRF24L01_REG_RX_PW_P5 0x16 -#define NRF24L01_REG_FIFO_STATUS 0x17 -#define NRF24L01_REG_DYNPD 0x1C -#define NRF24L01_REG_FEATURE 0x1D - -#define NRF24L01_NOP 0xFF -#define NRF24L01_R_REGISTER 0x00 -#define NRF24L01_W_REGISTER 0x20 -#define NRF24L01_R_RX_PAYLOAD 0x60 -#define NRF24L01_W_TX_PAYLOAD 0xA0 -#define NRF24L01_FLUSH_TX 0xE1 -#define NRF24L01_FLUSH_RX 0xE2 - -#define NRF24L01_MASK_RX_DR 6 -#define NRF24L01_MASK_TX_DS 5 -#define NRF24L01_MASK_MAX_RT 4 -#define NRF24L01_PWR_UP 1 -#define NRF24L01_PRIM_RX 0 -#define NRF24L01_ERX_P1 1 -#define NRF24L01_ERX_P0 0 - -static inline uint8_t read_reg(uint8_t reg) -{ - SPI_PORT &= ~(1 << SPI_SS); - SPDR = NRF24L01_R_REGISTER | reg; - while (!(SPSR & (1 << SPIF))) - ; - SPDR = 0; - while (!(SPSR & (1 << SPIF))) - ; - SPI_PORT |= (1 << SPI_SS); - return SPDR; -} - -static inline void write_reg(uint8_t reg, uint8_t val) -{ - SPI_PORT &= ~(1 << SPI_SS); - SPDR = NRF24L01_W_REGISTER | reg; - while (!(SPSR & (1 << SPIF))) - ; - SPDR = val; - while (!(SPSR & (1 << SPIF))) - ; - SPI_PORT |= (1 << SPI_SS); -} - -void radio_send(const char *data, uint8_t n) -{ -} - -uint8_t radio_recv(char *buf, uint8_t n) -{ -} - -void radio_listen(void) -{ -} - -void radio_init(const struct radio_cfg *cfg) -{ - uint8_t conf; - - SPI_DDR |= (1 << SPI_SS) | (1 << SPI_SCK) | (1 << SPI_MOSI); - SPI_PORT |= (1 << SPI_SS); - SPCR |= (1 << SPE) | (1 << MSTR); - - NRF24L01_CE_DDR |= (1 << NRF24L01_CE); - NRF24L01_CE_PORT &= ~(1 << NRF24L01_CE); - - _delay_ms(NRF24L01_POWER_ON_RST_DELAY); - - // disable IRQs, set CRC encoding scheme to 2 bytes - conf = 0; - conf |= (1 << NRF24L01_MASK_RX_DR); - conf |= (1 << NRF24L01_MASK_TX_DS); - conf |= (1 << NRF24L01_MASK_MAX_RT); - conf |= (1 << NRF24L01_CRCO); - write_reg(NRF24L01_REG_CONFIG, conf); - - // only use data pipe 0 - conf = 0; - conf &= ~(1 << NRF24L01_ERX_P1); - conf |= (1 << NRF24L01_ERX_P0); - write_reg(NRF24L01_REG_EN_RXADDR, conf); - - // set address width to 3 bytes - write_reg(NRF24L01_REG_SETUP_AW, 0x01); - - -} diff --git a/nRF24L01/serial.h b/nRF24L01/serial.h deleted file mode 100644 index 0f9415b..0000000 --- a/nRF24L01/serial.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef SA_SERIAL_H -#define SA_SERIAL_H - -void serial_init(void); -void serial_write(char data); -void serial_write_line(const char *s); - -#endif /* SA_SERIAL_H */ diff --git a/nRF24L01/Recv.Makefile b/nrf24l01/Recv.Makefile index 67ac41f..67ac41f 100644 --- a/nRF24L01/Recv.Makefile +++ b/nrf24l01/Recv.Makefile diff --git a/nRF24L01/Send.Makefile b/nrf24l01/Send.Makefile index 06e083b..06e083b 100644 --- a/nRF24L01/Send.Makefile +++ b/nrf24l01/Send.Makefile diff --git a/nrf24l01/nrf24l01.c b/nrf24l01/nrf24l01.c new file mode 100644 index 0000000..3e92ac0 --- /dev/null +++ b/nrf24l01/nrf24l01.c @@ -0,0 +1,134 @@ +#include <stdlib.h> + +#include <avr/io.h> +#include <util/delay.h> + +#include "radio.h" +#include "uart.h" + +#define SPI_DDR DDRB +#define SPI_PORT PORTB +#define SPI_SS_PIN PB2 +#define SPI_SCK_PIN PB5 +#define SPI_MISO_PIN PB4 +#define SPI_MOSI_PIN PB3 + +#define NRF24_CE PB0 +#define NRF24_CE_DDR DDRB +#define NRF24_CE_PORT DDRB + +#define NRF24_POWER_ON_RST_DELAY 100 + +#define NRF24_REG_CONFIG 0x00 +#define NRF24_REG_EN_AA 0x01 +#define NRF24_REG_EN_RXADDR 0x02 +#define NRF24_REG_SETUP_AW 0x03 +#define NRF24_REG_SETUP_RETR 0x04 +#define NRF24_REG_RF_CH 0x05 +#define NRF24_REG_RF_SETUP 0x06 +#define NRF24_REG_STATUS 0x07 +#define NRF24_REG_OBSERVE_TX 0x08 +#define NRF24_REG_RPD 0x09 +#define NRF24_REG_RX_ADDR_P0 0x0A +#define NRF24_REG_RX_ADDR_P1 0x0B +#define NRF24_REG_RX_ADDR_P2 0x0C +#define NRF24_REG_RX_ADDR_P3 0x0D +#define NRF24_REG_RX_ADDR_P4 0x0E +#define NRF24_REG_RX_ADDR_P5 0x0F +#define NRF24_REG_TX_ADDR 0x10 +#define NRF24_REG_RX_PW_P0 0x11 +#define NRF24_REG_RX_PW_P1 0x12 +#define NRF24_REG_RX_PW_P2 0x13 +#define NRF24_REG_RX_PW_P3 0x14 +#define NRF24_REG_RX_PW_P4 0x15 +#define NRF24_REG_RX_PW_P5 0x16 +#define NRF24_REG_FIFO_STATUS 0x17 +#define NRF24_REG_DYNPD 0x1C +#define NRF24_REG_FEATURE 0x1D + +#define NRF24_NOP 0xFF +#define NRF24_R_REGISTER 0x00 +#define NRF24_W_REGISTER 0x20 +#define NRF24_R_RX_PAYLOAD 0x60 +#define NRF24_W_TX_PAYLOAD 0xA0 +#define NRF24_FLUSH_TX 0xE1 +#define NRF24_FLUSH_RX 0xE2 + +#define NRF24_MASK_RX_DR 6 +#define NRF24_MASK_TX_DS 5 +#define NRF24_MASK_MAX_RT 4 +#define NRF24_PWR_UP 1 +#define NRF24_PRIM_RX 0 +#define NRF24_ERX_P1 1 +#define NRF24_ERX_P0 0 + +static inline uint8_t read_reg(uint8_t reg) +{ + SPI_PORT &= ~(1 << SPI_SS); + SPDR = NRF24_R_REGISTER | reg; + while (!(SPSR & (1 << SPIF))) + ; + SPDR = 0; + while (!(SPSR & (1 << SPIF))) + ; + SPI_PORT |= (1 << SPI_SS); + return SPDR; +} + +static inline void write_reg(uint8_t reg, uint8_t val) +{ + SPI_PORT &= ~(1 << SPI_SS); + SPDR = NRF24_W_REGISTER | reg; + while (!(SPSR & (1 << SPIF))) + ; + SPDR = val; + while (!(SPSR & (1 << SPIF))) + ; + SPI_PORT |= (1 << SPI_SS); +} + +void radio_send(const char *data, uint8_t n) +{ +} + +uint8_t radio_recv(char *buf, uint8_t n) +{ +} + +void radio_listen(void) +{ +} + +void radio_init(const struct radio_cfg *cfg) +{ + uint8_t conf; + + SPI_DDR |= (1 << SPI_SS) | (1 << S2PI_SCK) | (1 << SPI_MOSI); + SPI_PORT |= (1 << SPI_SS); + SPCR |= (1 << SPE) | (1 << MSTR); + + NRF24_CE_DDR |= (1 << NRF24_CE); + NRF24_CE_PORT &= ~(1 << NRF24_CE); + + _delay_ms(NRF24_POWER_ON_RST_DELAY); + + // disable IRQs, set CRC encoding scheme to 2 bytes + conf = 0; + conf |= (1 << NRF24_MASK_RX_DR); + conf |= (1 << NRF24_MASK_TX_DS); + conf |= (1 << NRF24_MASK_MAX_RT); + conf |= (1 << NRF24_CRCO); + write_reg(NRF24_REG_CONFIG, conf); + + // only use data pipe 0 + conf = 0; + conf &= ~(1 << NRF24_ERX_P1); + conf |= (1 << NRF24_ERX_P0); + write_reg(NRF24_REG_EN_RXADDR, conf); + + // set address width to 3 bytes + write_reg(NRF24_REG_SETUP_AW, 0x01); + + conf = 0; + conf = +} diff --git a/nRF24L01/radio.h b/nrf24l01/radio.h index a44d67e..a44d67e 100644 --- a/nRF24L01/radio.h +++ b/nrf24l01/radio.h diff --git a/nRF24L01/recv.c b/nrf24l01/recv.c index 1c6ac0f..1c6ac0f 100644 --- a/nRF24L01/recv.c +++ b/nrf24l01/recv.c diff --git a/nRF24L01/send.c b/nrf24l01/send.c index b390cf3..b390cf3 100644 --- a/nRF24L01/send.c +++ b/nrf24l01/send.c diff --git a/nRF24L01/serial.c b/nrf24l01/uart.c index 782e848..e5b6e05 100644 --- a/nRF24L01/serial.c +++ b/nrf24l01/uart.c @@ -1,9 +1,9 @@ #include <avr/io.h> #include <util/setbaud.h> -#include "serial.h" +#include "uart.h" -void serial_init(void) +void uart_init(void) { UBRR0H = UBRRH_VALUE; UBRR0L = UBRRL_VALUE; @@ -16,14 +16,14 @@ void serial_init(void) UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); } -void serial_write(char data) +void uart_write(char c) { while (!(UCSR0A & (1 << UDRE0))) ; UDR0 = data; } -void serial_write_line(const char *s) +void uart_write_line(const char *s) { for (; *s; s++) serial_write(*s); diff --git a/nrf24l01/uart.h b/nrf24l01/uart.h new file mode 100644 index 0000000..81db74b --- /dev/null +++ b/nrf24l01/uart.h @@ -0,0 +1,8 @@ +#ifndef UART_H +#define UART_H + +void uart_init(void); +void uart_write(char c); +void uart_write_line(const char *s); + +#endif /* UART_H */ |
