Browse Source

transmit: expect payload as bytes instead of List[int] to avoid "bytes" > 0xff

Fabian Peter Hammerle 3 years ago
parent
commit
ffdea3cbd0
2 changed files with 14 additions and 7 deletions
  1. 9 5
      cc1101/__init__.py
  2. 5 2
      examples/transmit.py

+ 9 - 5
cc1101/__init__.py

@@ -429,14 +429,14 @@ class CC1101:
         _LOGGER.debug("flushing tx fifo buffer")
         self._command_strobe(StrobeAddress.SFTX)
 
-    def transmit(self, payload: typing.List[int]) -> None:
+    def transmit(self, payload: bytes) -> None:
         # see "15.2 Packet Format"
         # > In variable packet length mode, [...]
         # > The first byte written to the TXFIFO must be different from 0.
         if payload[0] == 0:
             raise ValueError(
                 "in variable packet length mode the first byte of payload must not be null"
-                + "\npayload: {}".format(payload)
+                + "\npayload: {!r}".format(payload)
             )
         marcstate = self.get_main_radio_control_state_machine_state()
         if marcstate != MainRadioControlStateMachineState.IDLE:
@@ -451,11 +451,15 @@ class CC1101:
                 "payload exceeds maximum payload length of {} bytes".format(
                     max_packet_length
                 )
-                + "\npayload: {}".format(payload)
+                + "\npayload: {!r}".format(payload)
             )
         self._flush_tx_fifo_buffer()
-        self._write_burst(FIFORegisterAddress.TX, payload)
-        _LOGGER.info("transmitting %s", payload)
+        self._write_burst(FIFORegisterAddress.TX, list(payload))
+        _LOGGER.info(
+            "transmitting 0x%s (%r)",
+            "".join("{:02x}".format(b) for b in payload),
+            payload,
+        )
         self._command_strobe(StrobeAddress.STX)
 
     @contextlib.contextmanager

+ 5 - 2
examples/transmit.py

@@ -17,6 +17,9 @@ with cc1101.CC1101() as transceiver:
     print("symbol rate", transceiver.get_symbol_rate_baud(), "Baud")
     print("modulation format", transceiver.get_modulation_format().name)
     print("starting transmission")
+    transceiver.transmit(b"\x01\xff\x00 message")
+    time.sleep(1.0)
+    transceiver.transmit(bytes([0x01, 0b10101010, 0xFF]))
     while True:
-        transceiver.transmit(list(range(1, 32)))
-        time.sleep(2.0)
+        time.sleep(1.0)
+        transceiver.transmit(bytes(range(1, 16)))