jetson-SX126X 1.0.0
Semtech SX126X LoRa driver for Jetson TX2
Requires Python: >=3.6

# jetson-SX126X
Semtech SX126X LoRa driver for Jetson TX2.  
This library is ported and modified from [micropySX126X](https://github.com/ehong-tl/micropySX126X) by ehong-tl.  

## Constructors (Similar for SX1261 and SX1268)  
***class*** **sx1262.SX1262(cs, irq, rst, gpio, device='/dev/spidev3.0', baudrate=2000000)**  
Create and initialize SX1262 object.

The parameters are:  
- cs : NSS pin
- irq : DIO1 pin
- rst : RESET pin
- gpio : BUSY pin
- device : spidev device path
- baudrate : SPI bus baud rate

## Methods (Similar for SX1261 and SX1268)  

### General  
**SX1262.setFrequency(freq)**  
Set frequency in MHz.  
Return: Status (Refer to **Constants** Status dictionary)

**SX1262.setOutputPower(power)**  
Set TX power in dBm.  
Return: Status

**SX1262.setBlockingCallback(blocking, callback=None)**  
Set TX/RX blocking mode and interrupt callback.  
If blocking = True, TX/RX is set to blocking mode and callback function will be ignored.  
If blocking = False, TX/RX is set to non blocking mode and callback function will be triggered with events argument upon TX/RX events.  
If callback = None, events callback function will be disabled.

**SX1262.getRSSI()**  
Get RX RSSI in dBm.  
Return: RSSI value

**SX1262.getTimeOnAir(len)**  
Get RX time on air according to message length, len = message length.  
Return: Time on air value

**SX1262.send(data)**  
Send message, data type must be bytes or bytearray.  
Return: Payload length, status

**SX1262.recv(len=0, timeout_en=False, timeout_ms=0)**  
Read RX message.  
len = Message length, if 0, default to SX126X_MAX_PACKET_LENGTH  
timeout_en = Enable RX timeout, if False, function blocking indefinitely until message received (Only in blocking mode)  
timeout_ms = RX timeout in ms, 0 means timeout = 100 LoRa symbols length for LoRa or timeout = 500% expected time-on-air for FSK  (Only in blocking mode)  
Return: Payload, status

### LoRa  
**SX1262.begin(freq=434.0, bw=125.0, sf=9, cr=7, syncWord=0x12, power=14, currentLimit=60.0  
preambleLength=8, implicit=False, implicitLen=0xFF, crcOn=True, txIq=False, rxIq=False,  
tcxoVoltage=1.6, useRegulatorLDO=False, blocking=True)**  
This method is used to set LoRa configuration.

The parameters are:  
- freq : Frequency in MHz
- bw : Bandwidth in kHz
- sf : Spreading factor, 5 to 12
- cr : Coding rate, 5 to 8
- syncWord : Sync word, private = 0x12, public = 0x34
- power : TX power in dBm
- currentLimit : Current limit in mA
- preambleLength : Preamble length
- implicit : Implicit or explicit header, implicit = True
- implicitLen : Implicit header payload length
- crcOn : CRC on or off
- txIq : TX invert IQ
- rxIq : RX invert IQ
- tcxoVoltage : TCXO input voltage in V
- useRegulatorLDO : Use LDO regulator = True, use DC-DC regulator = False
- blocking : Blocking TX/RX = True, non blocking TX/RX = False

Return: Status

**SX1262.setBandwidth(bw)**  
Set LoRa bandwidth in kHz.  
Return: Status

**SX1262.setCodingRate(cr)**  
Set LoRa coding rate, 5 to 8.  
Return: Status

**SX1262.setPreambleLength(preambleLength)**  
Set LoRa preamble length.  
Return: Status

**SX1262.setSpreadingFactor(sf)**  
Set LoRa spreading factor, 5 to 12.  
Return: Status

**SX1262.setSyncWord(syncWord, [controlBits])**  
Set LoRa sync word, private = 0x12, public = 0x34.  
Optional parameter controlBits, default value is 0x44.  
e.g. syncWord = 0xAB, controlBits = 0xCD -> SX126x 2 bytes sync word = 0xACBD  
e.g. syncWord = 0x12, controlBits = 0x44 -> SX126x 2 bytes sync word = 0x1424  
Return: Status

**SX1262.explicitHeader()**  
Enable LoRa explicit header mode.  
Return: Status

**SX1262.implicitHeader(implicitLen)**  
Enable LoRa implicit header mode with implicit length parameter.  
Return: Status

**SX1262.forceLDRO(enable)**  
Force enable Low Data Rate Optimization.  
Return: Status

**SX1262.autoLDRO()**  
Enable auto Low Data Rate Optimization.  
Return: Status

**SX1262.setCRC(crcOn)**  
Set LoRa CRC mode.  
Return: Status

**SX1262.setTxIq(txIq)**  
Set LoRa TX invert IQ mode.

**SX1262.setRxIq(rxIq)**  
Set LoRa RX invert IQ mode.

**SX1262.getSNR()**  
Get LoRa RX SNR in dB.  
Return: SNR value

### FSK  
**SX1262.beginFSK(freq=434.0, br=48.0, freqDev=50.0, rxBw=156.2, power=14, currentLimit=60.0,  
preambleLength=16, dataShaping=0.5, syncWord=[0x2D, 0x01], syncBitsLength=16,  
addrFilter=SX1262.ADDR_FILT_OFF, addr=0x00, crcLength=2, crcInitial=0x1D0F, crcPolynomial=0x1021,  
crcInverted=True, whiteningOn=True, whiteningInitial=0x0100,  
fixedPacketLength=False, packetLength=0xFF, preambleDetectorLength=SX1262.PREAMBLE_DETECT_16,  
tcxoVoltage=1.6, useRegulatorLDO=False,  
blocking=True)**  
This method is used to set FSK configuration.

The parameters are:  
- freq : Frequency in MHz
- br : Bit rate in kbps
- freqDev : Frequency deviation in kHz
- rxBW : RX bandwidth in kHz
- power : TX power in dBm
- currentLimit : Current limit in mA
- preambleLength : Preamble length
- dataShaping : Time-bandwidth product of the Gaussian filter to be used for shaping
- syncWord : Sync word
- syncBitsLength : Sync word length in bit
- addrFilter : Address filtering, refer to **Constants** FSK address filtering
- addr : Address for address filtering
- crcLength : CRC length, 0, 1 or 2
- crcInitial: CRC initial value
- crcPolynomial : Polynomial for CRC calculation
- crcInverted : Invert CRC bytes
- whiteningOn : Enable whitening
- whiteningInitial : Initial value used for whitening LFSR
- fixedPacketLength : Enable fixed packet length mode
- packetLength : Packet length in bytes (fixed packet length mode) or maximum packet length in bytes (variable packet length mode)
- preambleDetectorLength : Minimum preamble detection length, refer to **Constants** FSK preamble detector length
- tcxoVoltage : TCXO input voltage in V
- useRegulatorLDO : Use LDO regulator = True, use DC-DC regulator = False
- blocking : Blocking TX/RX = True, non blocking TX/RX = False

Return: Status

**SX1262.setBitRate(br)**  
Set FSK bit rate in kbps.  
Return: Status

**SX1262.setFrequencyDeviation(freqDev)**  
Set FSK frequency deviation in kHz.  
Return: Status

**SX1262.setRxBandwidth(rxBw)**  
Set FSK RX bandwidth in kHz.  
Return: Status

**SX1262.setDataShaping(dataShaping)**  
Set FSK time-bandwidth product of the Gaussian filter to be used for shaping.  
Return: Status

**SX1262.setSyncBits(syncWord, bitsLen)**  
Set FSK sync word and sync bits length.  
syncWord = Sync word in list  
bitsLen = Sync word bit length  
Return: Status

**SX1262.setPreambleLength(preambleLength)**  
Set FSK preamble length.  
Return: Status

**SX1262.setPreambleDetectorLength(preambleDetectorLength)**  
Set minimum preamble detection length, refer to **Constants** FSK preamble detector length.  

**SX1262.setNodeAddress(addr)**  
Activate address filtering on node address addr.  
Return: Status

**SX1262.setBroadcastAddress(addr)**  
Activate address filtering on node and broadcast address addr.  
Return: Status

**SX1262.disableAddressFiltering()**  
Disable address filtering.  
Return: Status

**SX1262.setCRC(len, initial=0x1D0F, polynomial=0x1021, inverted=True)**  
Set FSK CRC.  
len = CRC length, 0, 1 or 2  
initial = CRC initial  
polynomial = Polynomial used for CRC calculation  
inverted = Enable CRC bytes inversion  
Return: Status

**SX1262.setWhitening(enabled, initial=0x0100)**  
Set FSK whitening.  
initial = Initial value for whitening LFSR  
Return: Status

**SX1262.fixedPacketLengthMode(len)**  
Set FSK fixed packet length mode.  
len = Packet length in bytes  
Return: Status

**SX1262.variablePacketLengthMode(maxLen)**  
Set FSK variable packet length mode.  
maxLen = Max packet length in bytes  
Return: Status

## Constants (Similar for SX1261 and SX1268)  
Events: SX1262.TX_DONE, SX1262.RX_DONE  
FSK address filter: SX1262.ADDR_FILT_OFF, SX1262.ADDR_FILT_NODE, SX1262.ADDR_FILT_NODE_BROAD  
FSK preamble detector length: SX1262.PREAMBLE_DETECT_OFF, SX1262.PREAMBLE_DETECT_X -> X = 8, 16, 24, 32  
Status dictionary: SX1262.STATUS