| |
---|
| | def warning(msg): |
---|
| | print("warning:" + str(msg)) |
---|
| | |
---|
| | def trace(msg): |
---|
| | pass #print(str(msg)) |
---|
| | print(str(msg)) |
---|
| | |
---|
| | |
---|
| | #----- REGISTER ACCESS -------------------------------------------------------- |
---|
| | |
---|
| |
---|
| | |
---|
| | |
---|
| | def HRF_writefifo_burst(buf): |
---|
| | """Write all bytes in buf to the payload FIFO, in a single burst""" |
---|
| | # Don't modify buf, in case caller reuses it |
---|
| | #txbuf = [ADDR_FIFO | MASK_WRITE_DATA] |
---|
| | #for b in buf: |
---|
| | # txbuf.append(b) |
---|
| | #print("write FIFO %s" % ashex(txbuf)) |
---|
| | |
---|
| | # This is buggy as it modifies user buffer, but it works at present |
---|
| | spi.select() |
---|
| | # Don't modify buf, in case caller reuses it |
---|
| | txbuf = [ADDR_FIFO | MASK_WRITE_DATA] |
---|
| | for b in buf: |
---|
| | txbuf.append(b) |
---|
| | spi.frame(txbuf) |
---|
| | buf.insert(0, ADDR_FIFO | MASK_WRITE_DATA) |
---|
| | spi.frame(buf) |
---|
| | spi.deselect() |
---|
| | |
---|
| | print("written: %s" % ashex(buf)) |
---|
| | |
---|
| | def ashex(buf): |
---|
| | result = [] |
---|
| | for b in buf: |
---|
| |
---|
| | |
---|
| | #----- HRF REGISTER PROTOCOL -------------------------------------------------- |
---|
| | |
---|
| | # HopeRF register addresses |
---|
| | # Precise register description can be found on: |
---|
| | # Precise register descriptions can be found on: |
---|
| | # www.hoperf.com/upload/rf/RFM69W-V1.3.pdf |
---|
| | # on page 63 - 74 |
---|
| | |
---|
| | ADDR_FIFO = 0x00 |
---|
| | ADDR_OPMODE = 0x01 |
---|
| | ADDR_REGDATAMODUL = 0x02 |
---|
| | ADDR_BITRATEMSB = 0x03 |
---|
| | ADDR_BITRATELSB = 0x04 |
---|
| | ADDR_FDEVMSB = 0x05 |
---|
| | ADDR_FDEVLSB = 0x06 |
---|
| | ADDR_FRMSB = 0x07 |
---|
| | ADDR_FRMID = 0x08 |
---|
| | ADDR_FRLSB = 0x09 |
---|
| | ADDR_AFCCTRL = 0x0B |
---|
| | ADDR_LNA = 0x18 |
---|
| | ADDR_RXBW = 0x19 |
---|
| | ADDR_AFCFEI = 0x1E |
---|
| | ADDR_IRQFLAGS1 = 0x27 |
---|
| | ADDR_IRQFLAGS2 = 0x28 |
---|
| | ADDR_RSSITHRESH = 0x29 |
---|
| | ADDR_PREAMBLELSB = 0x2D |
---|
| | ADDR_SYNCCONFIG = 0x2E |
---|
| | ADDR_SYNCVALUE1 = 0x2F |
---|
| | ADDR_SYNCVALUE2 = 0x30 |
---|
| | ADDR_SYNCVALUE3 = 0x31 |
---|
| | ADDR_SYNCVALUE4 = 0x32 |
---|
| | ADDR_PACKETCONFIG1 = 0x37 |
---|
| | ADDR_PAYLOADLEN = 0x38 |
---|
| | ADDR_NODEADDRESS = 0x39 |
---|
| | ADDR_FIFOTHRESH = 0x3C |
---|
| | ADDR_FIFO = 0x00 |
---|
| | ADDR_OPMODE = 0x01 |
---|
| | ADDR_REGDATAMODUL = 0x02 |
---|
| | ADDR_BITRATEMSB = 0x03 |
---|
| | ADDR_BITRATELSB = 0x04 |
---|
| | ADDR_FDEVMSB = 0x05 |
---|
| | ADDR_FDEVLSB = 0x06 |
---|
| | ADDR_FRMSB = 0x07 |
---|
| | ADDR_FRMID = 0x08 |
---|
| | ADDR_FRLSB = 0x09 |
---|
| | ADDR_AFCCTRL = 0x0B |
---|
| | ADDR_LNA = 0x18 |
---|
| | ADDR_RXBW = 0x19 |
---|
| | ADDR_AFCFEI = 0x1E |
---|
| | ADDR_IRQFLAGS1 = 0x27 |
---|
| | ADDR_IRQFLAGS2 = 0x28 |
---|
| | ADDR_RSSITHRESH = 0x29 |
---|
| | ADDR_PREAMBLELSB = 0x2D |
---|
| | ADDR_SYNCCONFIG = 0x2E |
---|
| | ADDR_SYNCVALUE1 = 0x2F |
---|
| | ADDR_SYNCVALUE2 = 0x30 |
---|
| | ADDR_SYNCVALUE3 = 0x31 |
---|
| | ADDR_SYNCVALUE4 = 0x32 |
---|
| | ADDR_PACKETCONFIG1 = 0x37 |
---|
| | ADDR_PAYLOADLEN = 0x38 |
---|
| | ADDR_NODEADDRESS = 0x39 |
---|
| | ADDR_FIFOTHRESH = 0x3C |
---|
| | |
---|
| | # HopeRF masks to set and clear bits |
---|
| | MASK_REGDATAMODUL_OOK = 0x08 |
---|
| | MASK_REGDATAMODUL_FSK = 0x00 |
---|
| | MASK_WRITE_DATA = 0x80 |
---|
| | MASK_MODEREADY = 0x80 |
---|
| | MASK_FIFONOTEMPTY = 0x40 |
---|
| | MASK_FIFOLEVEL = 0x20 |
---|
| | MASK_FIFOOVERRUN = 0x10 |
---|
| | MASK_PACKETSENT = 0x08 |
---|
| | MASK_TXREADY = 0x20 |
---|
| | MASK_PACKETMODE = 0x60 |
---|
| | MASK_MODULATION = 0x18 |
---|
| | MASK_PAYLOADRDY = 0x04 |
---|
| | |
---|
| | MODE_STANDBY = 0x04 # Standby |
---|
| | MODE_TRANSMITER = 0x0C # Transmiter |
---|
| | MODE_RECEIVER = 0x10 # Receiver |
---|
| | VAL_REGDATAMODUL_FSK = 0x00 # Modulation scheme FSK |
---|
| | VAL_REGDATAMODUL_OOK = 0x08 # Modulation scheme OOK |
---|
| | VAL_FDEVMSB30 = 0x01 # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | VAL_FDEVLSB30 = 0xEC # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | VAL_FRMSB434 = 0x6C # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRMID434 = 0x93 # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRLSB434 = 0x33 # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRMSB433 = 0x6C # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_FRMID433 = 0x7A # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_FRLSB433 = 0xE1 # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_AFCCTRLS = 0x00 # standard AFC routine |
---|
| | VAL_AFCCTRLI = 0x20 # improved AFC routine |
---|
| | VAL_LNA50 = 0x08 # LNA input impedance 50 ohms |
---|
| | VAL_LNA50G = 0x0E # LNA input impedance 50 ohms, LNA gain -> 48db |
---|
| | VAL_LNA200 = 0x88 # LNA input impedance 200 ohms |
---|
| | VAL_RXBW60 = 0x43 # channel filter bandwidth 10kHz -> 60kHz page:26 |
---|
| | VAL_RXBW120 = 0x41 # channel filter bandwidth 120kHz |
---|
| | VAL_AFCFEIRX = 0x04 # AFC is performed each time RX mode is entered |
---|
| | VAL_RSSITHRESH220 = 0xDC # RSSI threshold 0xE4 -> 0xDC (220) |
---|
| | VAL_PREAMBLELSB3 = 0x03 # preamble size LSB 3 |
---|
| | VAL_PREAMBLELSB5 = 0x05 # preamble size LSB 5 |
---|
| | VAL_SYNCCONFIG2 = 0x88 # Size of the Synch word = 2 (SyncSize + 1) |
---|
| | VAL_SYNCCONFIG4 = 0x98 # Size of the Synch word = 4 (SyncSize + 1) |
---|
| | VAL_SYNCVALUE1FSK = 0x2D # 1st byte of Sync word |
---|
| | VAL_SYNCVALUE2FSK = 0xD4 # 2nd byte of Sync word |
---|
| | VAL_SYNCVALUE1OOK = 0x80 # 1nd byte of Sync word |
---|
| | VAL_PACKETCONFIG1FSK = 0xA2 # Variable length, Manchester coding, Addr must match NodeAddress |
---|
| | VAL_PACKETCONFIG1FSKNO = 0xA0 # Variable length, Manchester coding |
---|
| | VAL_PACKETCONFIG1OOK = 0 # Fixed length, no Manchester coding |
---|
| | VAL_PAYLOADLEN255 = 0xFF # max Length in RX, not used in Tx |
---|
| | VAL_PAYLOADLEN66 = 66 # max Length in RX, not used in Tx |
---|
| | VAL_PAYLOADLEN_OOK = (13 + 8 * 17) # Payload Length |
---|
| | VAL_NODEADDRESS01 = 0x01 # Node address used in address filtering |
---|
| | VAL_NODEADDRESS04 = 0x04 # Node address used in address filtering |
---|
| | VAL_FIFOTHRESH1 = 0x81 # Condition to start packet transmission: at least one byte in FIFO |
---|
| | VAL_FIFOTHRESH30 = 0x1E # Condition to start packet transmission: wait for 30 bytes in FIFO |
---|
| | MASK_REGDATAMODUL_OOK = 0x08 |
---|
| | MASK_REGDATAMODUL_FSK = 0x00 |
---|
| | MASK_WRITE_DATA = 0x80 |
---|
| | MASK_MODEREADY = 0x80 |
---|
| | MASK_FIFONOTEMPTY = 0x40 |
---|
| | MASK_FIFOLEVEL = 0x20 |
---|
| | MASK_FIFOOVERRUN = 0x10 |
---|
| | MASK_PACKETSENT = 0x08 |
---|
| | MASK_TXREADY = 0x20 |
---|
| | MASK_PACKETMODE = 0x60 |
---|
| | MASK_MODULATION = 0x18 |
---|
| | MASK_PAYLOADRDY = 0x04 |
---|
| | |
---|
| | MODE_STANDBY = 0x04 # Standby |
---|
| | MODE_TRANSMITER = 0x0C # Transmiter |
---|
| | MODE_RECEIVER = 0x10 # Receiver |
---|
| | VAL_REGDATAMODUL_FSK = 0x00 # Modulation scheme FSK |
---|
| | VAL_REGDATAMODUL_OOK = 0x08 # Modulation scheme OOK |
---|
| | VAL_FDEVMSB30 = 0x01 # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | VAL_FDEVLSB30 = 0xEC # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | VAL_FRMSB434 = 0x6C # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRMID434 = 0x93 # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRLSB434 = 0x33 # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | VAL_FRMSB433 = 0x6C # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_FRMID433 = 0x7A # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_FRLSB433 = 0xE1 # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | VAL_AFCCTRLS = 0x00 # standard AFC routine |
---|
| | VAL_AFCCTRLI = 0x20 # improved AFC routine |
---|
| | VAL_LNA50 = 0x08 # LNA input impedance 50 ohms |
---|
| | VAL_LNA50G = 0x0E # LNA input impedance 50 ohms, LNA gain -> 48db |
---|
| | VAL_LNA200 = 0x88 # LNA input impedance 200 ohms |
---|
| | VAL_RXBW60 = 0x43 # channel filter bandwidth 10kHz -> 60kHz page:26 |
---|
| | VAL_RXBW120 = 0x41 # channel filter bandwidth 120kHz |
---|
| | VAL_AFCFEIRX = 0x04 # AFC is performed each time RX mode is entered |
---|
| | VAL_RSSITHRESH220 = 0xDC # RSSI threshold 0xE4 -> 0xDC (220) |
---|
| | VAL_PREAMBLELSB3 = 0x03 # preamble size LSB 3 |
---|
| | VAL_PREAMBLELSB5 = 0x05 # preamble size LSB 5 |
---|
| | VAL_SYNCCONFIG2 = 0x88 # Size of the Synch word = 2 (SyncSize + 1) |
---|
| | VAL_SYNCCONFIG4 = 0x98 # Size of the Synch word = 4 (SyncSize + 1) |
---|
| | VAL_SYNCVALUE1FSK = 0x2D # 1st byte of Sync word |
---|
| | VAL_SYNCVALUE2FSK = 0xD4 # 2nd byte of Sync word |
---|
| | VAL_SYNCVALUE1OOK = 0x80 # 1nd byte of Sync word |
---|
| | VAL_PACKETCONFIG1FSK = 0xA2 # Variable length, Manchester coding, Addr must match NodeAddress |
---|
| | VAL_PACKETCONFIG1FSKNO = 0xA0 # Variable length, Manchester coding |
---|
| | VAL_PACKETCONFIG1OOK = 0 # Fixed length, no Manchester coding |
---|
| | VAL_PAYLOADLEN255 = 0xFF # max Length in RX, not used in Tx |
---|
| | VAL_PAYLOADLEN66 = 66 # max Length in RX, not used in Tx |
---|
| | VAL_PAYLOADLEN_OOK = (13 + 8 * 17) # Payload Length |
---|
| | VAL_NODEADDRESS01 = 0x01 # Node address used in address filtering |
---|
| | VAL_NODEADDRESS04 = 0x04 # Node address used in address filtering |
---|
| | VAL_FIFOTHRESH1 = 0x81 # Condition to start packet transmission: at least one byte in FIFO |
---|
| | VAL_FIFOTHRESH30 = 0x1E # Condition to start packet transmission: wait for 30 bytes in FIFO |
---|
| | |
---|
| | |
---|
| | #----- CONFIGURATION TABLES ------------------------------------------------------------ |
---|
| | |
---|
| | config_FSK = [ |
---|
| | [ADDR_REGDATAMODUL, VAL_REGDATAMODUL_FSK], # modulation scheme FSK |
---|
| | [ADDR_FDEVMSB, VAL_FDEVMSB30], # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | [ADDR_FDEVLSB, VAL_FDEVLSB30], # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | [ADDR_FRMSB, VAL_FRMSB434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_FRMID, VAL_FRMID434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_FRLSB, VAL_FRLSB434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_AFCCTRL, VAL_AFCCTRLS], # standard AFC routine |
---|
| | [ADDR_LNA, VAL_LNA50], # 200ohms, gain by AGC loop -> 50ohms |
---|
| | [ADDR_RXBW, VAL_RXBW60], # channel filter bandwidth 10kHz -> 60kHz page:26 |
---|
| | [ADDR_BITRATEMSB, 0x1A], # 4800b/s |
---|
| | [ADDR_BITRATELSB, 0x0B], # 4800b/s |
---|
| | #[ADDR_AFCFEI, VAL_AFCFEIRX], # AFC is performed each time rx mode is entered |
---|
| | #[ADDR_RSSITHRESH, VAL_RSSITHRESH220], # RSSI threshold 0xE4 -> 0xDC (220) |
---|
| | #[ADDR_PREAMBLELSB, VAL_PREAMBLELSB5], # preamble size LSB set to 5 |
---|
| | [ADDR_SYNCCONFIG, VAL_SYNCCONFIG2], # Size of the Synch word = 2 (SyncSize + 1) |
---|
| | [ADDR_SYNCVALUE1, VAL_SYNCVALUE1FSK], # 1st byte of Sync word |
---|
| | [ADDR_SYNCVALUE2, VAL_SYNCVALUE2FSK], # 2nd byte of Sync word |
---|
| | #[ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1FSK], # Variable length, Manchester coding, Addr must match NodeAddress |
---|
| | [ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1FSKNO], # Variable length, Manchester coding |
---|
| | [ADDR_PAYLOADLEN, VAL_PAYLOADLEN66], # max Length in RX, not used in Tx |
---|
| | #[ADDR_NODEADDRESS, VAL_NODEADDRESS01], # Node address used in address filtering |
---|
| | [ADDR_NODEADDRESS, 0x06], # Node address used in address filtering |
---|
| | [ADDR_FIFOTHRESH, VAL_FIFOTHRESH1], # Condition to start packet transmission: at least one byte in FIFO |
---|
| | [ADDR_OPMODE, MODE_RECEIVER] # Operating mode to Receiver |
---|
| | [ADDR_REGDATAMODUL, VAL_REGDATAMODUL_FSK], # modulation scheme FSK |
---|
| | [ADDR_FDEVMSB, VAL_FDEVMSB30], # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | [ADDR_FDEVLSB, VAL_FDEVLSB30], # frequency deviation 5kHz 0x0052 -> 30kHz 0x01EC |
---|
| | [ADDR_FRMSB, VAL_FRMSB434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_FRMID, VAL_FRMID434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_FRLSB, VAL_FRLSB434], # carrier freq -> 434.3MHz 0x6C9333 |
---|
| | [ADDR_AFCCTRL, VAL_AFCCTRLS], # standard AFC routine |
---|
| | [ADDR_LNA, VAL_LNA50], # 200ohms, gain by AGC loop -> 50ohms |
---|
| | [ADDR_RXBW, VAL_RXBW60], # channel filter bandwidth 10kHz -> 60kHz page:26 |
---|
| | [ADDR_BITRATEMSB, 0x1A], # 4800b/s |
---|
| | [ADDR_BITRATELSB, 0x0B], # 4800b/s |
---|
| | #[ADDR_AFCFEI, VAL_AFCFEIRX], # AFC is performed each time rx mode is entered |
---|
| | #[ADDR_RSSITHRESH, VAL_RSSITHRESH220], # RSSI threshold 0xE4 -> 0xDC (220) |
---|
| | #[ADDR_PREAMBLELSB, VAL_PREAMBLELSB5], # preamble size LSB set to 5 |
---|
| | [ADDR_SYNCCONFIG, VAL_SYNCCONFIG2], # Size of the Synch word = 2 (SyncSize + 1) |
---|
| | [ADDR_SYNCVALUE1, VAL_SYNCVALUE1FSK], # 1st byte of Sync word |
---|
| | [ADDR_SYNCVALUE2, VAL_SYNCVALUE2FSK], # 2nd byte of Sync word |
---|
| | #[ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1FSK], # Variable length, Manchester coding, Addr must match NodeAddress |
---|
| | [ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1FSKNO], # Variable length, Manchester coding |
---|
| | [ADDR_PAYLOADLEN, VAL_PAYLOADLEN66], # max Length in RX, not used in Tx |
---|
| | #[ADDR_NODEADDRESS, VAL_NODEADDRESS01], # Node address used in address filtering |
---|
| | [ADDR_NODEADDRESS, 0x06], # Node address used in address filtering |
---|
| | [ADDR_FIFOTHRESH, VAL_FIFOTHRESH1], # Condition to start packet transmission: at least one byte in FIFO |
---|
| | [ADDR_OPMODE, MODE_RECEIVER] # Operating mode to Receiver |
---|
| | ] |
---|
| | |
---|
| | config_OOK = [ |
---|
| | [ADDR_REGDATAMODUL, VAL_REGDATAMODUL_OOK], # modulation scheme OOK |
---|
| | [ADDR_FDEVMSB, 0], # frequency deviation -> 0kHz |
---|
| | [ADDR_FDEVLSB, 0], # frequency deviation -> 0kHz |
---|
| | [ADDR_FRMSB, VAL_FRMSB433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_FRMID, VAL_FRMID433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_FRLSB, VAL_FRLSB433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_RXBW, VAL_RXBW120], # channel filter bandwidth 120kHz |
---|
| | [ADDR_BITRATEMSB, 0x40], # 1938b/s |
---|
| | [ADDR_BITRATELSB, 0x80], # 1938b/s |
---|
| | #[ADDR_BITRATEMSB, 0x1A], # 4800b/s |
---|
| | #[ADDR_BITRATELSB, 0x0B], # 4800b/s |
---|
| | [ADDR_PREAMBLELSB, 0], # preamble size LSB 3 |
---|
| | [ADDR_SYNCCONFIG, VAL_SYNCCONFIG4], # Size of the Synch word = 4 (SyncSize + 1) |
---|
| | [ADDR_SYNCVALUE1, VAL_SYNCVALUE1OOK], # sync value 1 |
---|
| | [ADDR_SYNCVALUE2, 0], # sync value 2 |
---|
| | [ADDR_SYNCVALUE3, 0], # sync value 3 |
---|
| | [ADDR_SYNCVALUE4, 0], # sync value 4 |
---|
| | [ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1OOK], # Fixed length, no Manchester coding, OOK |
---|
| | [ADDR_PAYLOADLEN, VAL_PAYLOADLEN_OOK], # Payload Length |
---|
| | [ADDR_FIFOTHRESH, VAL_FIFOTHRESH30], # Condition to start packet transmission: wait for 30 bytes in FIFO |
---|
| | #[ADDR_OPMODE, MODE_TRANSMITER] # Transmitter mode |
---|
| | [ADDR_REGDATAMODUL, VAL_REGDATAMODUL_OOK], # modulation scheme OOK |
---|
| | [ADDR_FDEVMSB, 0], # frequency deviation -> 0kHz |
---|
| | [ADDR_FDEVLSB, 0], # frequency deviation -> 0kHz |
---|
| | [ADDR_FRMSB, VAL_FRMSB433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_FRMID, VAL_FRMID433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_FRLSB, VAL_FRLSB433], # carrier freq -> 433.92MHz 0x6C7AE1 |
---|
| | [ADDR_RXBW, VAL_RXBW120], # channel filter bandwidth 120kHz |
---|
| | [ADDR_BITRATEMSB, 0x40], # 1938b/s |
---|
| | [ADDR_BITRATELSB, 0x80], # 1938b/s |
---|
| | [ADDR_PREAMBLELSB, 0], # preamble size LSB 3 |
---|
| | [ADDR_SYNCCONFIG, VAL_SYNCCONFIG4], # Size of the Sync word = 4 (SyncSize + 1) |
---|
| | [ADDR_SYNCVALUE1, VAL_SYNCVALUE1OOK], # sync value 1 |
---|
| | [ADDR_SYNCVALUE2, 0], # sync value 2 |
---|
| | [ADDR_SYNCVALUE3, 0], # sync value 3 |
---|
| | [ADDR_SYNCVALUE4, 0], # sync value 4 |
---|
| | [ADDR_PACKETCONFIG1, VAL_PACKETCONFIG1OOK], # Fixed length, no Manchester coding, OOK |
---|
| | [ADDR_PAYLOADLEN, VAL_PAYLOADLEN_OOK], # Payload Length |
---|
| | [ADDR_FIFOTHRESH, VAL_FIFOTHRESH30], # Condition to start packet transmission: wait for 30 bytes in FIFO |
---|
| | ] |
---|
| | |
---|
| | |
---|
| | def HRF_wait_ready(): |
---|
| |
---|
| | # Wait until we get the OOK spec from Energenie to better document this. |
---|
| | |
---|
| | # Looks like: 0000 00BA gets encoded as: |
---|
| | # 128 64 32 16 8 4 2 1 |
---|
| | # 1 0 B B 1 A A 0 |
---|
| | # 1 B B 0 1 A A 0 |
---|
| | |
---|
| | #payload = [] |
---|
| | #for i in range(10): |
---|
| | # j = i + 5 |
---|
| |
---|
| | |
---|
| | return payload |
---|
| | |
---|
| | |
---|
| | def OLD_send_payload_repeat(payload, times=0): |
---|
| | def OLD_send_payload_repeat(payload): |
---|
| | """Send a payload multiple times""" |
---|
| | |
---|
| | # 32 bits enclosed in sync words |
---|
| | #print("waiting for mode and tx ready") |
---|
| | HRF_pollreg(ADDR_IRQFLAGS1, MASK_MODEREADY|MASK_TXREADY, MASK_MODEREADY|MASK_TXREADY) |
---|
| | |
---|
| | #write first payload without sync preamble |
---|
| | HRF_writefifo_burst(payload) |
---|
| | |
---|
| | # preceed all future payloads with a sync-word preamble |
---|
| | if times > 0: |
---|
| | preamble = [0x00,0x80,0x00,0x00,0x00] |
---|
| | preamble_payload = preamble + payload |
---|
| | for i in range(times): # Repeat the message a number of times |
---|
| | HRF_pollreg(ADDR_IRQFLAGS2, MASK_FIFOLEVEL, 0) |
---|
| | HRF_writefifo_burst(preamble_payload) |
---|
| | |
---|
| | preamble = [0x00,0x80,0x00,0x00,0x00] |
---|
| | preamble_payload = preamble + payload |
---|
| | # Note, payload length configured in OOK table is based on this |
---|
| | for i in range(8): # Repeat the message a number of times |
---|
| | #print("waiting for fifo empty") |
---|
| | HRF_pollreg(ADDR_IRQFLAGS2, MASK_FIFOLEVEL, 0) |
---|
| | HRF_writefifo_burst(preamble_payload) |
---|
| | |
---|
| | #print("waiting for fifo empty") |
---|
| | HRF_pollreg(ADDR_IRQFLAGS2, MASK_FIFOLEVEL, 0) |
---|
| | #print("waiting for packet sent") |
---|
| | HRF_pollreg(ADDR_IRQFLAGS2, MASK_PACKETSENT, MASK_PACKETSENT) # wait for Packet sent |
---|
| | |
---|
| | reg = HRF_readreg(ADDR_IRQFLAGS2) |
---|
| | trace(" irqflags2=%s" % hex(reg)) |
---|
| |
---|
| | |