diff options
Diffstat (limited to 'software/hhd70dongle/c1101lib.c')
-rw-r--r-- | software/hhd70dongle/c1101lib.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/software/hhd70dongle/c1101lib.c b/software/hhd70dongle/c1101lib.c index 3ccd86b..60a3b4d 100644 --- a/software/hhd70dongle/c1101lib.c +++ b/software/hhd70dongle/c1101lib.c @@ -299,13 +299,33 @@ char c1101_getStatus(void) } -//max len: 64 bytes -void c1101_writeTXFifo(char *buffer, unsigned int len) +void c1101_transmitData(char *buffer, unsigned int len) { //check TXBYTES.NUM_TXBYTES // never write more bytes than avaiblabe or doom ensues - - + uint8_t num_written = 0; + uint8_t mcsm1 = spi_c1101_read_register(SPIC1101_ADDR_MCSM1); + //configure state machine to automatically go to IDLE, once packet was transmitted + mcsm1 = (mcsm1 & 0b11111100) | 0b00; + spi_c1101_write_register(SPIC1101_ADDR_MCSM1, 0x18); + //fill buffer + do + { + num_written = spi_c1101_write_txfifo(buffer, len); + buffer += num_written; + len -= num_written; + } while (num_written > 0); + //start transmitting + spi_c1101_strobe_command(SPIC1101_ADDR_STX); + //keep buffer filled + do + { + num_written = spi_c1101_write_txfifo(buffer, len); + buffer += num_written; + len -= num_written; + if (num_written == 0 && len > 0) + _delay_ms(1); + } while (len > 0); } //max returned: 64 bytes |