Add Reliable Packet Transmission with Addressing
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.vscode
|
||||||
22
LICENSE
Normal file
22
LICENSE
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Stuart Robinson
|
||||||
|
Copyright (c) 2024 Hasan Albinsaid
|
||||||
|
|
||||||
|
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.
|
||||||
7
README.md
Normal file
7
README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# SX128x Arduino Library
|
||||||
|
|
||||||
|
This repository is based on the [StuartsProjects](https://github.com/StuartsProjects/SX12XX-LoRa) repository (as of the March 2024 commit) and focuses exclusively on the SX128x library, with additional features and improvements.
|
||||||
|
|
||||||
|
### Additional Features
|
||||||
|
- **Reliable Packet Transmission with Addressing**:
|
||||||
|
New functions `transmitReliableAutoACK_addr` and `receiveReliableAutoACK_addr` have been added to enhance reliable communication with built-in addressing support.
|
||||||
@ -38,9 +38,11 @@ CRCCCITTSX KEYWORD2
|
|||||||
CRCCCITT KEYWORD2
|
CRCCCITT KEYWORD2
|
||||||
printSXBufferASCII KEYWORD2
|
printSXBufferASCII KEYWORD2
|
||||||
receiveAddressed KEYWORD2
|
receiveAddressed KEYWORD2
|
||||||
|
destAddr KEYWORD2
|
||||||
getByteSXBuffer KEYWORD2
|
getByteSXBuffer KEYWORD2
|
||||||
startWriteSXBuffer KEYWORD2
|
startWriteSXBuffer KEYWORD2
|
||||||
transmitAddressed KEYWORD2
|
transmitAddressed KEYWORD2
|
||||||
|
srcAddr KEYWORD2
|
||||||
startReadSXBuffer KEYWORD2
|
startReadSXBuffer KEYWORD2
|
||||||
endReadSXBuffer KEYWORD2
|
endReadSXBuffer KEYWORD2
|
||||||
readBuffer KEYWORD2
|
readBuffer KEYWORD2
|
||||||
|
|||||||
2288
src/SX128XLT.cpp
2288
src/SX128XLT.cpp
File diff suppressed because it is too large
Load Diff
440
src/SX128XLT.h
440
src/SX128XLT.h
@ -1,259 +1,257 @@
|
|||||||
#ifndef SX128XLT_h
|
#ifndef SX128XLT_h
|
||||||
#define SX128XLT_h
|
#define SX128XLT_h
|
||||||
|
|
||||||
#include "Arduino.h"
|
#include <Arduino.h>
|
||||||
#include <SX128XLT_Definitions.h>
|
#include <SX128XLT_Definitions.h>
|
||||||
|
|
||||||
|
class SX128XLT
|
||||||
|
{
|
||||||
|
|
||||||
class SX128XLT {
|
public:
|
||||||
|
SX128XLT();
|
||||||
|
|
||||||
public:
|
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, int8_t pinDIO2, int8_t pinDIO3, int8_t pinRXEN, int8_t pinTXEN, uint8_t device);
|
||||||
|
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, uint8_t device);
|
||||||
|
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, int8_t pinRXEN, int8_t pinTXEN, uint8_t device);
|
||||||
|
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, uint8_t device);
|
||||||
|
bool begin(int8_t pinNSS, int8_t pinRFBUSY, uint8_t device);
|
||||||
|
|
||||||
SX128XLT();
|
void rxEnable();
|
||||||
|
void txEnable();
|
||||||
|
|
||||||
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, int8_t pinDIO2, int8_t pinDIO3, int8_t pinRXEN, int8_t pinTXEN, uint8_t device);
|
void checkBusy();
|
||||||
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, uint8_t device);
|
bool config();
|
||||||
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, int8_t pinDIO1, int8_t pinRXEN, int8_t pinTXEN, uint8_t device);
|
void readRegisters(uint16_t address, uint8_t *buffer, uint16_t size);
|
||||||
bool begin(int8_t pinNSS, int8_t pinNRESET, int8_t pinRFBUSY, uint8_t device);
|
uint8_t readRegister(uint16_t address);
|
||||||
bool begin(int8_t pinNSS, int8_t pinRFBUSY, uint8_t device);
|
void writeRegisters(uint16_t address, uint8_t *buffer, uint16_t size);
|
||||||
|
void writeRegister(uint16_t address, uint8_t value);
|
||||||
|
void writeCommand(uint8_t Opcode, uint8_t *buffer, uint16_t size);
|
||||||
|
void readCommand(uint8_t Opcode, uint8_t *buffer, uint16_t size);
|
||||||
|
void resetDevice();
|
||||||
|
bool checkDevice();
|
||||||
|
void setupLoRa(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
|
||||||
|
void setMode(uint8_t modeconfig);
|
||||||
|
void setRegulatorMode(uint8_t mode);
|
||||||
|
void setPacketType(uint8_t PacketType);
|
||||||
|
void setRfFrequency(uint32_t frequency, int32_t offset);
|
||||||
|
void setBufferBaseAddress(uint8_t txBaseAddress, uint8_t rxBaseAddress);
|
||||||
|
void setModulationParams(uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
|
||||||
|
void setPacketParams(uint8_t packetParam1, uint8_t packetParam2, uint8_t packetParam3, uint8_t packetParam4, uint8_t packetParam5, uint8_t packetParam6, uint8_t packetParam7);
|
||||||
|
void setPacketParams(uint8_t packetParam1, uint8_t packetParam2, uint8_t packetParam3, uint8_t packetParam4, uint8_t packetParam5);
|
||||||
|
void setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask);
|
||||||
|
void setHighSensitivity();
|
||||||
|
void setLowPowerRX();
|
||||||
|
void printModemSettings();
|
||||||
|
void printDevice();
|
||||||
|
uint32_t getFreqInt();
|
||||||
|
uint8_t getLoRaSF();
|
||||||
|
uint32_t returnBandwidth(uint8_t data);
|
||||||
|
uint8_t getLoRaCodingRate();
|
||||||
|
uint8_t getInvertIQ();
|
||||||
|
uint16_t getPreamble();
|
||||||
|
void printOperatingSettings();
|
||||||
|
uint8_t getLNAgain();
|
||||||
|
void printRegisters(uint16_t Start, uint16_t End);
|
||||||
|
void printASCIIPacket(uint8_t *buff, uint8_t tsize);
|
||||||
|
uint8_t transmit(uint8_t *txbuffer, uint8_t size, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint8_t transmitIRQ(uint8_t *txbuffer, uint8_t size, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
void setTxParams(int8_t TXpower, uint8_t RampTime);
|
||||||
|
void setTx(uint16_t timeout);
|
||||||
|
void clearIrqStatus(uint16_t irq);
|
||||||
|
uint16_t readIrqStatus();
|
||||||
|
void printIrqStatus();
|
||||||
|
uint16_t CRCCCITT(uint8_t *buffer, uint32_t size, uint16_t start);
|
||||||
|
uint8_t receive(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
||||||
|
uint8_t receiveIRQ(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
||||||
|
int16_t readPacketRSSI2();
|
||||||
|
int16_t readPacketRSSI();
|
||||||
|
int8_t readPacketSNR();
|
||||||
|
uint8_t readRXPacketL();
|
||||||
|
void setRx(uint16_t timeout);
|
||||||
|
void setSyncWord1(uint32_t syncword);
|
||||||
|
void setSyncWord2(uint32_t syncword);
|
||||||
|
void setSyncWord3(uint32_t syncword);
|
||||||
|
void setSyncWordErrors(uint8_t errors);
|
||||||
|
void setSleep(uint8_t sleepconfig);
|
||||||
|
uint16_t CRCCCITTSX(uint8_t startadd, uint8_t endadd, uint16_t startvalue);
|
||||||
|
uint8_t getByteSXBuffer(uint8_t addr);
|
||||||
|
int32_t getFrequencyErrorRegValue();
|
||||||
|
int32_t getFrequencyErrorHz();
|
||||||
|
void printHEXByte(uint8_t temp);
|
||||||
|
void wake();
|
||||||
|
uint8_t transmitAddressed(uint8_t *txbuffer, uint8_t size, char txpackettype, char txdestination, char txsource, uint32_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint8_t receiveAddressed(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
||||||
|
uint8_t readRXPacketType();
|
||||||
|
uint8_t readPacket(uint8_t *rxbuffer, uint8_t size);
|
||||||
|
void setPeriodBase(uint8_t value);
|
||||||
|
uint8_t getPeriodBase();
|
||||||
|
|
||||||
void rxEnable();
|
//***************************************************************************
|
||||||
void txEnable();
|
// Start direct access SX buffer routines
|
||||||
|
//***************************************************************************
|
||||||
|
void startWriteSXBuffer(uint8_t ptr);
|
||||||
|
uint8_t endWriteSXBuffer();
|
||||||
|
void startReadSXBuffer(uint8_t ptr);
|
||||||
|
uint8_t endReadSXBuffer();
|
||||||
|
|
||||||
|
void writeUint8(uint8_t x);
|
||||||
|
uint8_t readUint8();
|
||||||
|
|
||||||
void checkBusy();
|
void writeInt8(int8_t x);
|
||||||
bool config();
|
int8_t readInt8();
|
||||||
void readRegisters( uint16_t address, uint8_t *buffer, uint16_t size );
|
|
||||||
uint8_t readRegister( uint16_t address );
|
|
||||||
void writeRegisters( uint16_t address, uint8_t *buffer, uint16_t size );
|
|
||||||
void writeRegister( uint16_t address, uint8_t value );
|
|
||||||
void writeCommand(uint8_t Opcode, uint8_t *buffer, uint16_t size );
|
|
||||||
void readCommand( uint8_t Opcode, uint8_t *buffer, uint16_t size );
|
|
||||||
void resetDevice();
|
|
||||||
bool checkDevice();
|
|
||||||
void setupLoRa(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
|
|
||||||
void setMode(uint8_t modeconfig);
|
|
||||||
void setRegulatorMode(uint8_t mode);
|
|
||||||
void setPacketType(uint8_t PacketType);
|
|
||||||
void setRfFrequency( uint32_t frequency, int32_t offset );
|
|
||||||
void setBufferBaseAddress(uint8_t txBaseAddress, uint8_t rxBaseAddress);
|
|
||||||
void setModulationParams(uint8_t modParam1, uint8_t modParam2, uint8_t modParam3);
|
|
||||||
void setPacketParams(uint8_t packetParam1, uint8_t packetParam2, uint8_t packetParam3, uint8_t packetParam4, uint8_t packetParam5, uint8_t packetParam6, uint8_t packetParam7);
|
|
||||||
void setPacketParams(uint8_t packetParam1, uint8_t packetParam2, uint8_t packetParam3, uint8_t packetParam4, uint8_t packetParam5);
|
|
||||||
void setDioIrqParams(uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
|
|
||||||
void setHighSensitivity();
|
|
||||||
void setLowPowerRX();
|
|
||||||
void printModemSettings();
|
|
||||||
void printDevice();
|
|
||||||
uint32_t getFreqInt();
|
|
||||||
uint8_t getLoRaSF();
|
|
||||||
uint32_t returnBandwidth(uint8_t data);
|
|
||||||
uint8_t getLoRaCodingRate();
|
|
||||||
uint8_t getInvertIQ();
|
|
||||||
uint16_t getPreamble();
|
|
||||||
void printOperatingSettings();
|
|
||||||
uint8_t getLNAgain();
|
|
||||||
void printRegisters(uint16_t Start, uint16_t End);
|
|
||||||
void printASCIIPacket(uint8_t *buff, uint8_t tsize);
|
|
||||||
uint8_t transmit(uint8_t *txbuffer, uint8_t size, uint16_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint8_t transmitIRQ(uint8_t *txbuffer, uint8_t size, uint16_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
void setTxParams(int8_t TXpower, uint8_t RampTime);
|
|
||||||
void setTx(uint16_t timeout);
|
|
||||||
void clearIrqStatus( uint16_t irq );
|
|
||||||
uint16_t readIrqStatus();
|
|
||||||
void printIrqStatus();
|
|
||||||
uint16_t CRCCCITT(uint8_t *buffer, uint32_t size, uint16_t start);
|
|
||||||
uint8_t receive(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
|
||||||
uint8_t receiveIRQ(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
|
||||||
int16_t readPacketRSSI2();
|
|
||||||
int16_t readPacketRSSI();
|
|
||||||
int8_t readPacketSNR();
|
|
||||||
uint8_t readRXPacketL();
|
|
||||||
void setRx(uint16_t timeout);
|
|
||||||
void setSyncWord1(uint32_t syncword);
|
|
||||||
void setSyncWord2(uint32_t syncword);
|
|
||||||
void setSyncWord3(uint32_t syncword);
|
|
||||||
void setSyncWordErrors(uint8_t errors);
|
|
||||||
void setSleep(uint8_t sleepconfig);
|
|
||||||
uint16_t CRCCCITTSX(uint8_t startadd, uint8_t endadd, uint16_t startvalue);
|
|
||||||
uint8_t getByteSXBuffer(uint8_t addr);
|
|
||||||
int32_t getFrequencyErrorRegValue();
|
|
||||||
int32_t getFrequencyErrorHz();
|
|
||||||
void printHEXByte(uint8_t temp);
|
|
||||||
void wake();
|
|
||||||
uint8_t transmitAddressed(uint8_t *txbuffer, uint8_t size, char txpackettype, char txdestination, char txsource, uint32_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint8_t receiveAddressed(uint8_t *rxbuffer, uint8_t size, uint16_t timeout, uint8_t wait);
|
|
||||||
uint8_t readRXPacketType();
|
|
||||||
uint8_t readPacket(uint8_t *rxbuffer, uint8_t size);
|
|
||||||
void setPeriodBase(uint8_t value);
|
|
||||||
uint8_t getPeriodBase();
|
|
||||||
|
|
||||||
|
void writeInt16(int16_t x);
|
||||||
|
int16_t readInt16();
|
||||||
|
|
||||||
//***************************************************************************
|
void writeUint16(uint16_t x);
|
||||||
//Start direct access SX buffer routines
|
uint16_t readUint16();
|
||||||
//***************************************************************************
|
|
||||||
void startWriteSXBuffer(uint8_t ptr);
|
|
||||||
uint8_t endWriteSXBuffer();
|
|
||||||
void startReadSXBuffer(uint8_t ptr);
|
|
||||||
uint8_t endReadSXBuffer();
|
|
||||||
|
|
||||||
void writeUint8(uint8_t x);
|
void writeInt32(int32_t x);
|
||||||
uint8_t readUint8();
|
int32_t readInt32();
|
||||||
|
|
||||||
void writeInt8(int8_t x);
|
void writeUint32(uint32_t x);
|
||||||
int8_t readInt8();
|
uint32_t readUint32();
|
||||||
|
|
||||||
void writeInt16(int16_t x);
|
void writeFloat(float x);
|
||||||
int16_t readInt16();
|
float readFloat();
|
||||||
|
|
||||||
void writeUint16(uint16_t x);
|
uint8_t transmitSXBuffer(uint8_t startaddr, uint8_t length, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
uint16_t readUint16();
|
uint8_t transmitSXBufferIRQ(uint8_t startaddr, uint8_t length, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
void writeBuffer(uint8_t *txbuffer, uint8_t size);
|
||||||
|
// void writeBuffer(uint8_t *txbuffer, uint8_t startaddr, uint8_t size);
|
||||||
|
uint8_t receiveSXBuffer(uint8_t startaddr, uint16_t timeout, uint8_t wait);
|
||||||
|
uint8_t receiveSXBufferIRQ(uint8_t startaddr, uint16_t timeout, uint8_t wait);
|
||||||
|
uint8_t readBuffer(uint8_t *rxbuffer);
|
||||||
|
// uint8_t readBuffer(uint8_t *rxbuffer, uint8_t startaddr, uint8_t len);
|
||||||
|
void printSXBufferHEX(uint8_t start, uint8_t end);
|
||||||
|
void writeBufferChar(char *txbuffer, uint8_t size);
|
||||||
|
uint8_t readBufferChar(char *rxbuffer);
|
||||||
|
|
||||||
void writeInt32(int32_t x);
|
//***************************************************************************
|
||||||
int32_t readInt32();
|
// Start ranging routines
|
||||||
|
//***************************************************************************
|
||||||
|
void setRangingSlaveAddress(uint32_t address);
|
||||||
|
void setRangingSlaveAddress(uint32_t address, uint8_t bits);
|
||||||
|
void setRangingMasterAddress(uint32_t address);
|
||||||
|
void setRangingCalibration(uint16_t cal);
|
||||||
|
void setRangingRole(uint8_t role);
|
||||||
|
double getRangingDistance(uint8_t resultType, int32_t regval, float adjust);
|
||||||
|
uint32_t getRangingResultRegValue(uint8_t resultType);
|
||||||
|
int32_t complement2(uint32_t num, uint8_t bitCnt);
|
||||||
|
bool setupRanging(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3, uint32_t address, uint8_t role);
|
||||||
|
bool transmitRanging(uint32_t address, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint8_t receiveRanging(uint32_t address, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint8_t receiveRanging(uint32_t address, uint8_t bits, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint16_t lookupCalibrationValue(uint8_t spreadingfactor, uint8_t bandwidth);
|
||||||
|
uint16_t getSetCalibrationValue();
|
||||||
|
int16_t getRangingRSSI();
|
||||||
|
|
||||||
void writeUint32(uint32_t x);
|
//*******************************************************************************
|
||||||
uint32_t readUint32();
|
// Reliable RX\TX routines
|
||||||
|
//*******************************************************************************
|
||||||
|
uint8_t transmitReliable(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
|
uint8_t receiveReliable(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||||
|
|
||||||
void writeFloat(float x);
|
uint8_t transmitReliableAutoACK(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
float readFloat();
|
uint8_t receiveReliableAutoACK(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint32_t ackdelay, int8_t txpower, uint32_t rxtimeout, uint8_t wait);
|
||||||
|
|
||||||
uint8_t transmitSXBuffer(uint8_t startaddr, uint8_t length, uint16_t timeout, int8_t txpower, uint8_t wait);
|
uint8_t transmitReliableAutoACK_addr(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint16_t destAddr, uint16_t srcAddr, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
uint8_t transmitSXBufferIRQ(uint8_t startaddr, uint8_t length, uint16_t timeout, int8_t txpower, uint8_t wait);
|
uint8_t receiveReliableAutoACK_addr(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint16_t destAddr, uint32_t ackdelay, int8_t txpower, uint32_t rxtimeout, uint8_t wait, uint16_t *srcAddr = nullptr);
|
||||||
void writeBuffer(uint8_t *txbuffer, uint8_t size);
|
|
||||||
//void writeBuffer(uint8_t *txbuffer, uint8_t startaddr, uint8_t size);
|
|
||||||
uint8_t receiveSXBuffer(uint8_t startaddr, uint16_t timeout, uint8_t wait);
|
|
||||||
uint8_t receiveSXBufferIRQ(uint8_t startaddr, uint16_t timeout, uint8_t wait );
|
|
||||||
uint8_t readBuffer(uint8_t *rxbuffer);
|
|
||||||
//uint8_t readBuffer(uint8_t *rxbuffer, uint8_t startaddr, uint8_t len);
|
|
||||||
void printSXBufferHEX(uint8_t start, uint8_t end);
|
|
||||||
void writeBufferChar(char *txbuffer, uint8_t size);
|
|
||||||
uint8_t readBufferChar(char *rxbuffer);
|
|
||||||
|
|
||||||
|
uint8_t sendReliableACK(uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
||||||
|
uint8_t sendReliableACK(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
||||||
|
uint8_t waitReliableACK(uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
||||||
|
uint8_t waitReliableACK(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
||||||
|
|
||||||
//***************************************************************************
|
uint8_t sendReliableACK_addr(uint16_t networkID, uint16_t srcAddr, uint16_t destAddr, uint16_t payloadcrc, int8_t txpower);
|
||||||
//Start ranging routines
|
uint8_t waitReliableACK_addr(uint16_t networkID, uint16_t destAddr, uint16_t srcAddr, uint16_t payloadcrc, uint32_t acktimeout);
|
||||||
//***************************************************************************
|
|
||||||
void setRangingSlaveAddress(uint32_t address);
|
|
||||||
void setRangingSlaveAddress(uint32_t address, uint8_t bits);
|
|
||||||
void setRangingMasterAddress(uint32_t address);
|
|
||||||
void setRangingCalibration(uint16_t cal);
|
|
||||||
void setRangingRole(uint8_t role);
|
|
||||||
double getRangingDistance(uint8_t resultType, int32_t regval, float adjust);
|
|
||||||
uint32_t getRangingResultRegValue(uint8_t resultType);
|
|
||||||
int32_t complement2( uint32_t num, uint8_t bitCnt );
|
|
||||||
bool setupRanging(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3, uint32_t address, uint8_t role);
|
|
||||||
bool transmitRanging(uint32_t address, uint16_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint8_t receiveRanging(uint32_t address, uint16_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint8_t receiveRanging(uint32_t address, uint8_t bits, uint16_t timeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint16_t lookupCalibrationValue(uint8_t spreadingfactor, uint8_t bandwidth);
|
|
||||||
uint16_t getSetCalibrationValue();
|
|
||||||
int16_t getRangingRSSI();
|
|
||||||
|
|
||||||
|
void printASCIIArray(uint8_t *buffer, uint8_t size);
|
||||||
|
uint8_t getReliableConfig(uint8_t bitread);
|
||||||
|
|
||||||
//*******************************************************************************
|
uint16_t getTXPayloadCRC(uint8_t length);
|
||||||
//Reliable RX\TX routines
|
void printReliableStatus();
|
||||||
//*******************************************************************************
|
uint16_t getRXPayloadCRC(uint8_t length);
|
||||||
uint8_t transmitReliable(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
uint16_t getRXNetworkID(uint8_t length);
|
||||||
uint8_t receiveReliable(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
uint16_t getTXNetworkID(uint8_t length);
|
||||||
|
void writeUint16SXBuffer(uint8_t addr, uint16_t regdata);
|
||||||
|
uint16_t readUint16SXBuffer(uint8_t addr);
|
||||||
|
|
||||||
uint8_t transmitReliableAutoACK(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
void printHEXPacket(uint8_t *buffer, uint8_t size);
|
||||||
uint8_t receiveReliableAutoACK(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint32_t ackdelay, int8_t txpower, uint32_t rxtimeout, uint8_t wait );
|
void printHEXPacket(char *buffer, uint8_t size);
|
||||||
|
void printArrayHEX(uint8_t *buffer, uint8_t size);
|
||||||
|
void printArrayHEX(char *buffer, uint8_t size);
|
||||||
|
void setReliableConfig(uint8_t bitset);
|
||||||
|
void clearReliableConfig(uint8_t bitset);
|
||||||
|
|
||||||
uint8_t sendReliableACK(uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
uint8_t getPacketType();
|
||||||
uint8_t sendReliableACK(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
void setReliableRX(uint16_t timeout);
|
||||||
uint8_t waitReliableACK(uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
|
||||||
uint8_t waitReliableACK(uint8_t *rxbuffer, uint8_t size, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
|
||||||
|
|
||||||
void printASCIIArray(uint8_t *buffer, uint8_t size);
|
void setupFLRC(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3, uint32_t syncword);
|
||||||
uint8_t getReliableConfig(uint8_t bitread);
|
void setFLRCPayloadLengthReg(uint8_t length);
|
||||||
|
void setLoRaPayloadLengthReg(uint8_t length);
|
||||||
|
void setPayloadLength(uint8_t length);
|
||||||
|
uint16_t CRCCCITTReliable(uint8_t startadd, uint8_t endadd, uint16_t startvalue);
|
||||||
|
|
||||||
uint16_t getTXPayloadCRC(uint8_t length);
|
uint8_t transmitSXReliable(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
void printReliableStatus();
|
uint8_t transmitSXReliableIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
uint16_t getRXPayloadCRC(uint8_t length);
|
uint8_t receiveSXReliable(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||||
uint16_t getRXNetworkID(uint8_t length);
|
uint8_t receiveSXReliableIRQ(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||||
uint16_t getTXNetworkID(uint8_t length);
|
uint8_t transmitSXReliableAutoACK(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
void writeUint16SXBuffer(uint8_t addr, uint16_t regdata);
|
uint8_t receiveSXReliableAutoACK(uint8_t startaddr, uint16_t networkID, uint32_t ackdelay, int8_t txpower, uint32_t rxtimeout, uint8_t wait);
|
||||||
uint16_t readUint16SXBuffer(uint8_t addr);
|
uint8_t waitSXReliableACK(uint8_t startaddr, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
||||||
|
uint8_t waitSXReliableACKIRQ(uint8_t startaddr, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
||||||
|
uint8_t sendSXReliableACK(uint8_t startaddr, uint8_t length, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
||||||
|
uint8_t sendSXReliableACKIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
||||||
|
uint8_t readReliableErrors();
|
||||||
|
uint8_t readReliableFlags();
|
||||||
|
|
||||||
void printHEXPacket(uint8_t *buffer, uint8_t size);
|
//*******************************************************************************
|
||||||
void printHEXPacket(char *buffer, uint8_t size);
|
// Data Transfer functions
|
||||||
void printArrayHEX(uint8_t *buffer, uint8_t size);
|
//*******************************************************************************
|
||||||
void printArrayHEX(char *buffer, uint8_t size);
|
uint8_t transmitDT(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
void setReliableConfig(uint8_t bitset);
|
uint8_t waitACKDT(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
||||||
void clearReliableConfig(uint8_t bitset);
|
uint8_t receiveDT(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||||
|
uint8_t sendACKDT(uint8_t *header, uint8_t headersize, int8_t txpower);
|
||||||
|
|
||||||
uint8_t getPacketType();
|
uint8_t transmitDTIRQ(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||||
void setReliableRX(uint16_t timeout);
|
uint8_t waitACKDTIRQ(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
||||||
|
uint8_t receiveDTIRQ(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||||
|
uint8_t sendACKDTIRQ(uint8_t *header, uint8_t headersize, int8_t txpower);
|
||||||
|
|
||||||
void setupFLRC(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3, uint32_t syncword);
|
private:
|
||||||
void setFLRCPayloadLengthReg(uint8_t length);
|
int8_t _NSS, _NRESET, _RFBUSY, _DIO1, _DIO2, _DIO3;
|
||||||
void setLoRaPayloadLengthReg(uint8_t length);
|
int8_t _RXEN, _TXEN;
|
||||||
void setPayloadLength(uint8_t length);
|
uint8_t _RXPacketL; // length of packet received
|
||||||
uint16_t CRCCCITTReliable(uint8_t startadd, uint8_t endadd, uint16_t startvalue);
|
uint8_t _RXPacketType; // type number of received packet
|
||||||
|
uint8_t _RXDestination; // destination address of received packet
|
||||||
|
uint8_t _RXSource; // source address of received packet
|
||||||
|
// int8_t _PacketRSSI; //RSSI of received packet - removed November 2021, not used
|
||||||
|
// int8_t _PacketSNR; //signal to noise ratio of received packet - removed November 2021, not used
|
||||||
|
int8_t _TXPacketL; // transmitted packet length
|
||||||
|
uint8_t _RXcount; // used to keep track of the bytes read from SX1280 buffer during readFloat() etc
|
||||||
|
uint8_t _TXcount; // used to keep track of the bytes written to SX1280 buffer during writeFloat() etc
|
||||||
|
uint8_t _OperatingMode; // current operating mode
|
||||||
|
bool _rxtxpinmode = false; // set to true if RX and TX pin mode is used.
|
||||||
|
|
||||||
uint8_t transmitSXReliable(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
uint8_t _Device; // saved device type
|
||||||
uint8_t transmitSXReliableIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
uint8_t _TXDonePin; // the pin that will indicate TX done
|
||||||
uint8_t receiveSXReliable(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
uint8_t _RXDonePin; // the pin that will indicate RX done
|
||||||
uint8_t receiveSXReliableIRQ(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
uint8_t _PERIODBASE = PERIODBASE_01_MS;
|
||||||
uint8_t transmitSXReliableAutoACK(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
|
||||||
uint8_t receiveSXReliableAutoACK(uint8_t startaddr, uint16_t networkID, uint32_t ackdelay, int8_t txpower, uint32_t rxtimeout, uint8_t wait );
|
|
||||||
uint8_t waitSXReliableACK(uint8_t startaddr, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
|
||||||
uint8_t waitSXReliableACKIRQ(uint8_t startaddr, uint16_t networkID, uint16_t payloadcrc, uint32_t acktimeout);
|
|
||||||
uint8_t sendSXReliableACK(uint8_t startaddr, uint8_t length, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
|
||||||
uint8_t sendSXReliableACKIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint16_t payloadcrc, int8_t txpower);
|
|
||||||
uint8_t readReliableErrors();
|
|
||||||
uint8_t readReliableFlags();
|
|
||||||
|
|
||||||
//*******************************************************************************
|
uint8_t savedRegulatorMode;
|
||||||
//Data Transfer functions
|
uint8_t savedPacketType;
|
||||||
//*******************************************************************************
|
uint32_t savedFrequency;
|
||||||
uint8_t transmitDT(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
int32_t savedOffset;
|
||||||
uint8_t waitACKDT(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
uint8_t savedModParam1, savedModParam2, savedModParam3; // sequence is spreading factor, bandwidth, coding rate
|
||||||
uint8_t receiveDT(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
uint8_t savedPacketParam1, savedPacketParam2, savedPacketParam3, savedPacketParam4, savedPacketParam5, savedPacketParam6, savedPacketParam7;
|
||||||
uint8_t sendACKDT(uint8_t *header, uint8_t headersize, int8_t txpower);
|
uint16_t savedIrqMask, savedDio1Mask, savedDio2Mask, savedDio3Mask;
|
||||||
|
int8_t savedTXPower;
|
||||||
uint8_t transmitDTIRQ(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
uint16_t savedCalibration;
|
||||||
uint8_t waitACKDTIRQ(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
uint32_t savedFrequencyReg;
|
||||||
uint8_t receiveDTIRQ(uint8_t *header, uint8_t headersize, uint8_t *dataarray, uint8_t datasize, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
|
||||||
uint8_t sendACKDTIRQ(uint8_t *header, uint8_t headersize, int8_t txpower);
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
int8_t _NSS, _NRESET, _RFBUSY, _DIO1, _DIO2, _DIO3;
|
|
||||||
int8_t _RXEN, _TXEN;
|
|
||||||
uint8_t _RXPacketL; //length of packet received
|
|
||||||
uint8_t _RXPacketType; //type number of received packet
|
|
||||||
uint8_t _RXDestination; //destination address of received packet
|
|
||||||
uint8_t _RXSource; //source address of received packet
|
|
||||||
//int8_t _PacketRSSI; //RSSI of received packet - removed November 2021, not used
|
|
||||||
//int8_t _PacketSNR; //signal to noise ratio of received packet - removed November 2021, not used
|
|
||||||
int8_t _TXPacketL; //transmitted packet length
|
|
||||||
uint8_t _RXcount; //used to keep track of the bytes read from SX1280 buffer during readFloat() etc
|
|
||||||
uint8_t _TXcount; //used to keep track of the bytes written to SX1280 buffer during writeFloat() etc
|
|
||||||
uint8_t _OperatingMode; //current operating mode
|
|
||||||
bool _rxtxpinmode = false; //set to true if RX and TX pin mode is used.
|
|
||||||
|
|
||||||
uint8_t _Device; //saved device type
|
|
||||||
uint8_t _TXDonePin; //the pin that will indicate TX done
|
|
||||||
uint8_t _RXDonePin; //the pin that will indicate RX done
|
|
||||||
uint8_t _PERIODBASE = PERIODBASE_01_MS;
|
|
||||||
|
|
||||||
uint8_t savedRegulatorMode;
|
|
||||||
uint8_t savedPacketType;
|
|
||||||
uint32_t savedFrequency;
|
|
||||||
int32_t savedOffset;
|
|
||||||
uint8_t savedModParam1, savedModParam2, savedModParam3; //sequence is spreading factor, bandwidth, coding rate
|
|
||||||
uint8_t savedPacketParam1, savedPacketParam2, savedPacketParam3, savedPacketParam4, savedPacketParam5, savedPacketParam6, savedPacketParam7;
|
|
||||||
uint16_t savedIrqMask, savedDio1Mask, savedDio2Mask, savedDio3Mask;
|
|
||||||
int8_t savedTXPower;
|
|
||||||
uint16_t savedCalibration;
|
|
||||||
uint32_t savedFrequencyReg;
|
|
||||||
|
|
||||||
uint8_t _ReliableErrors; //Reliable status byte
|
|
||||||
uint8_t _ReliableFlags; //Reliable flags byte
|
|
||||||
uint8_t _ReliableConfig; //Reliable config byte
|
|
||||||
|
|
||||||
|
uint8_t _ReliableErrors; // Reliable status byte
|
||||||
|
uint8_t _ReliableFlags; // Reliable flags byte
|
||||||
|
uint8_t _ReliableConfig; // Reliable config byte
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -405,6 +405,7 @@ const double CH_freq[] = {0E6,
|
|||||||
#define ReliableTimeout 0x04 // bit number set in _ReliableErrors when there is a timeout error
|
#define ReliableTimeout 0x04 // bit number set in _ReliableErrors when there is a timeout error
|
||||||
#define SegmentSequenceError 0x05 // bit number set in _ReliableErrors when there is a segment sequence error
|
#define SegmentSequenceError 0x05 // bit number set in _ReliableErrors when there is a segment sequence error
|
||||||
#define FileError 0x06 // bit number set in _ReliableErrors when there ia a file (SD) error
|
#define FileError 0x06 // bit number set in _ReliableErrors when there ia a file (SD) error
|
||||||
|
#define ReliableAddrError 0x07 // bit number set in _ReliableErrors when there is intended Address is incorrect
|
||||||
|
|
||||||
// These are the bit numbers which when set indicate reliable status flags, variable _ReliableFlags
|
// These are the bit numbers which when set indicate reliable status flags, variable _ReliableFlags
|
||||||
#define ReliableACKSent 0x00 // bit number set in _ReliableFlags when there is a ACK sent
|
#define ReliableACKSent 0x00 // bit number set in _ReliableFlags when there is a ACK sent
|
||||||
|
|||||||
Reference in New Issue
Block a user