|
1 | 1 | from .base import LoRaSpi, LoRaGpio, BaseLoRa
|
2 | 2 | from typing import Optional
|
3 | 3 | import time
|
| 4 | +from threading import Thread |
4 | 5 |
|
5 | 6 | class SX127x(BaseLoRa) :
|
6 | 7 | """Class for SX1276/77/78/79 LoRa chipsets from Semtech"""
|
@@ -468,7 +469,13 @@ def endPacket(self, timeout: int = 0) -> bool :
|
468 | 469 | self._transmitTime = time.time()
|
469 | 470 |
|
470 | 471 | # set TX done interrupt on DIO0 and attach TX interrupt handler
|
471 |
| - |
| 472 | + if self._irq != None : |
| 473 | + self.writeRegister(self.REG_DIO_MAPPING_1, self.DIO0_TX_DONE) |
| 474 | + if isinstance(self._monitoring, Thread): |
| 475 | + self._monitoring.join() |
| 476 | + to = self._irqTimeout/1000 if timeout == 0 else timeout/1000 |
| 477 | + self._monitoring = Thread(target=self._irq.monitor, args=(self._interruptTx, to)) |
| 478 | + self._monitoring.start() |
472 | 479 | return True
|
473 | 480 |
|
474 | 481 | def write(self, data, length: int = 0) :
|
@@ -539,7 +546,17 @@ def request(self, timeout: int = 0) -> bool :
|
539 | 546 | self.writeRegister(self.REG_OP_MODE, self._modem | rxMode)
|
540 | 547 |
|
541 | 548 | # set RX done interrupt on DIO0 and attach RX interrupt handler
|
542 |
| - |
| 549 | + if self._irq != None : |
| 550 | + self.writeRegister(self.REG_DIO_MAPPING_1, self.DIO0_RX_DONE) |
| 551 | + if isinstance(self._monitoring, Thread): |
| 552 | + self._monitoring.join() |
| 553 | + to = self._irqTimeout/1000 if timeout == 0 else timeout/1000 |
| 554 | + if timeout == self.RX_CONTINUOUS: |
| 555 | + self._monitoring = Thread(target=self._irq.monitor_continuous, args=(self._interruptRxContinuous, to)) |
| 556 | + self._monitoring.setDaemon(True) |
| 557 | + else: |
| 558 | + self._monitoring = Thread(target=self._irq.monitor, args=(self._interruptRx, to)) |
| 559 | + self._monitoring.start() |
543 | 560 | return True
|
544 | 561 |
|
545 | 562 | def available(self) :
|
@@ -779,14 +796,16 @@ def writeRegister(self, address: int, data: int) :
|
779 | 796 |
|
780 | 797 | self._transfer(address | 0x80, data)
|
781 | 798 |
|
782 |
| - def readRegister(self, address: int) ->int: |
| 799 | + def readRegister(self, address: int) -> int : |
783 | 800 |
|
784 | 801 | return self._transfer(address & 0x7F, 0x00)
|
785 | 802 |
|
786 |
| - def _transfer(self, address: int, data: int) ->int: |
| 803 | + def _transfer(self, address: int, data: int) -> int : |
787 | 804 |
|
788 | 805 | buf = [address, data]
|
789 |
| - feedback = self._spi.xfer2(buf) |
| 806 | + self._cs.output(LoRaGpio.LOW) |
| 807 | + feedback = self._spi.transfer(buf) |
| 808 | + self._cs.output(LoRaGpio.HIGH) |
790 | 809 | if (len(feedback) == 2) :
|
791 | 810 | return int(feedback[1])
|
792 | 811 | return -1
|
0 commit comments