This is a copy of the community maintained fork of the open firmware which powers RNode devices. This version will have support for the hardware made by Mees Electronics.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.4 KiB

2 months ago
// Copyright Sandeep Mistry, Mark Qvist and Jacob Eva.
// Licensed under the MIT license.
#ifndef SX1276_H
#define SX1276_H
7 years ago
#include <Arduino.h>
#include <SPI.h>
#include "Modem.h"
7 years ago
#define LORA_DEFAULT_SS_PIN 10
#define LORA_DEFAULT_RESET_PIN 9
#define LORA_DEFAULT_DIO0_PIN 2
#define LORA_DEFAULT_BUSY_PIN -1
7 years ago
#define PA_OUTPUT_RFO_PIN 0
#define PA_OUTPUT_PA_BOOST_PIN 1
#define RSSI_OFFSET 157
class sx127x : public Stream {
7 years ago
public:
sx127x();
7 years ago
int begin(long frequency);
void end();
int beginPacket(int implicitHeader = false);
int endPacket();
int parsePacket(int size = 0);
int packetRssi();
int packetRssi(uint8_t pkt_snr_raw);
int currentRssi();
uint8_t packetRssiRaw();
uint8_t currentRssiRaw();
uint8_t packetSnrRaw();
7 years ago
float packetSnr();
long packetFrequencyError();
// from Print
virtual size_t write(uint8_t byte);
virtual size_t write(const uint8_t *buffer, size_t size);
// from Stream
virtual int available();
virtual int read();
virtual int peek();
virtual void flush();
void onReceive(void(*callback)(int));
void receive(int size = 0);
void standby();
7 years ago
void sleep();
bool preInit();
uint8_t getTxPower();
7 years ago
void setTxPower(int level, int outputPin = PA_OUTPUT_PA_BOOST_PIN);
uint32_t getFrequency();
void setFrequency(unsigned long frequency);
7 years ago
void setSpreadingFactor(int sf);
long getSignalBandwidth();
void setSignalBandwidth(long sbw);
void setCodingRate4(int denominator);
void setPreambleLength(long preamble_symbols);
void setSyncWord(uint8_t sw);
uint8_t modemStatus();
7 years ago
void enableCrc();
void disableCrc();
void enableTCXO();
void disableTCXO();
7 years ago
byte random();
void setPins(int ss = LORA_DEFAULT_SS_PIN, int reset = LORA_DEFAULT_RESET_PIN, int dio0 = LORA_DEFAULT_DIO0_PIN, int busy = LORA_DEFAULT_BUSY_PIN);
7 years ago
void setSPIFrequency(uint32_t frequency);
private:
void explicitHeaderMode();
void implicitHeaderMode();
void handleDio0Rise();
uint8_t readRegister(uint8_t address);
void writeRegister(uint8_t address, uint8_t value);
uint8_t singleTransfer(uint8_t address, uint8_t value);
7 years ago
static void onDio0Rise();
void handleLowDataRate();
void optimizeModemSensitivity();
7 years ago
private:
SPISettings _spiSettings;
int _ss;
int _reset;
int _dio0;
int _busy;
7 years ago
long _frequency;
int _packetIndex;
int _implicitHeaderMode;
bool _preinit_done;
7 years ago
void (*_onReceive)(int);
};
extern sx127x sx127x_modem;
7 years ago
#endif