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
|
||||
printSXBufferASCII KEYWORD2
|
||||
receiveAddressed KEYWORD2
|
||||
destAddr KEYWORD2
|
||||
getByteSXBuffer KEYWORD2
|
||||
startWriteSXBuffer KEYWORD2
|
||||
transmitAddressed KEYWORD2
|
||||
srcAddr KEYWORD2
|
||||
startReadSXBuffer KEYWORD2
|
||||
endReadSXBuffer 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
|
||||
#define SX128XLT_h
|
||||
|
||||
#include "Arduino.h"
|
||||
#include <Arduino.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);
|
||||
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);
|
||||
void checkBusy();
|
||||
bool config();
|
||||
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 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();
|
||||
bool config();
|
||||
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 writeInt8(int8_t x);
|
||||
int8_t readInt8();
|
||||
|
||||
void writeInt16(int16_t x);
|
||||
int16_t readInt16();
|
||||
|
||||
//***************************************************************************
|
||||
//Start direct access SX buffer routines
|
||||
//***************************************************************************
|
||||
void startWriteSXBuffer(uint8_t ptr);
|
||||
uint8_t endWriteSXBuffer();
|
||||
void startReadSXBuffer(uint8_t ptr);
|
||||
uint8_t endReadSXBuffer();
|
||||
void writeUint16(uint16_t x);
|
||||
uint16_t readUint16();
|
||||
|
||||
void writeUint8(uint8_t x);
|
||||
uint8_t readUint8();
|
||||
void writeInt32(int32_t x);
|
||||
int32_t readInt32();
|
||||
|
||||
void writeInt8(int8_t x);
|
||||
int8_t readInt8();
|
||||
void writeUint32(uint32_t x);
|
||||
uint32_t readUint32();
|
||||
|
||||
void writeInt16(int16_t x);
|
||||
int16_t readInt16();
|
||||
void writeFloat(float x);
|
||||
float readFloat();
|
||||
|
||||
void writeUint16(uint16_t x);
|
||||
uint16_t readUint16();
|
||||
uint8_t transmitSXBuffer(uint8_t startaddr, uint8_t length, uint16_t timeout, int8_t txpower, uint8_t wait);
|
||||
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);
|
||||
float readFloat();
|
||||
uint8_t transmitReliableAutoACK(uint8_t *txbuffer, uint8_t size, uint16_t networkID, uint32_t acktimeout, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||
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 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);
|
||||
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 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);
|
||||
|
||||
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);
|
||||
|
||||
//***************************************************************************
|
||||
//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();
|
||||
uint8_t sendReliableACK_addr(uint16_t networkID, uint16_t srcAddr, uint16_t destAddr, uint16_t payloadcrc, int8_t txpower);
|
||||
uint8_t waitReliableACK_addr(uint16_t networkID, uint16_t destAddr, uint16_t srcAddr, uint16_t payloadcrc, uint32_t acktimeout);
|
||||
|
||||
void printASCIIArray(uint8_t *buffer, uint8_t size);
|
||||
uint8_t getReliableConfig(uint8_t bitread);
|
||||
|
||||
//*******************************************************************************
|
||||
//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 );
|
||||
uint16_t getTXPayloadCRC(uint8_t length);
|
||||
void printReliableStatus();
|
||||
uint16_t getRXPayloadCRC(uint8_t length);
|
||||
uint16_t getRXNetworkID(uint8_t length);
|
||||
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);
|
||||
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(uint8_t *buffer, uint8_t size);
|
||||
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 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 getPacketType();
|
||||
void setReliableRX(uint16_t timeout);
|
||||
|
||||
void printASCIIArray(uint8_t *buffer, uint8_t size);
|
||||
uint8_t getReliableConfig(uint8_t bitread);
|
||||
void setupFLRC(uint32_t frequency, int32_t offset, uint8_t modParam1, uint8_t modParam2, uint8_t modParam3, uint32_t syncword);
|
||||
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);
|
||||
void printReliableStatus();
|
||||
uint16_t getRXPayloadCRC(uint8_t length);
|
||||
uint16_t getRXNetworkID(uint8_t length);
|
||||
uint16_t getTXNetworkID(uint8_t length);
|
||||
void writeUint16SXBuffer(uint8_t addr, uint16_t regdata);
|
||||
uint16_t readUint16SXBuffer(uint8_t addr);
|
||||
uint8_t transmitSXReliable(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||
uint8_t transmitSXReliableIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||
uint8_t receiveSXReliable(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||
uint8_t receiveSXReliableIRQ(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait);
|
||||
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();
|
||||
|
||||
void printHEXPacket(uint8_t *buffer, uint8_t size);
|
||||
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);
|
||||
//*******************************************************************************
|
||||
// Data Transfer functions
|
||||
//*******************************************************************************
|
||||
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);
|
||||
uint8_t waitACKDT(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
||||
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();
|
||||
void setReliableRX(uint16_t timeout);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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 transmitSXReliable(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||
uint8_t transmitSXReliableIRQ(uint8_t startaddr, uint8_t length, uint16_t networkID, uint32_t txtimeout, int8_t txpower, uint8_t wait);
|
||||
uint8_t receiveSXReliable(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
||||
uint8_t receiveSXReliableIRQ(uint8_t startaddr, uint16_t networkID, uint32_t rxtimeout, uint8_t wait );
|
||||
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 _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;
|
||||
|
||||
//*******************************************************************************
|
||||
//Data Transfer functions
|
||||
//*******************************************************************************
|
||||
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);
|
||||
uint8_t waitACKDT(uint8_t *header, uint8_t headersize, uint32_t acktimeout);
|
||||
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 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);
|
||||
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);
|
||||
|
||||
|
||||
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 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
|
||||
};
|
||||
#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 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 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
|
||||
#define ReliableACKSent 0x00 // bit number set in _ReliableFlags when there is a ACK sent
|
||||
|
||||
Reference in New Issue
Block a user