diff options
-rw-r--r-- | lib/cc1101.c | 48 | ||||
-rw-r--r-- | lib/cc1101.h | 8 |
2 files changed, 46 insertions, 10 deletions
diff --git a/lib/cc1101.c b/lib/cc1101.c index 70234b6..b1ec096 100644 --- a/lib/cc1101.c +++ b/lib/cc1101.c @@ -129,11 +129,11 @@ static uint8_t cc1101_spi_read_register_burst(const uint8_t addr, uint8_t* data, l = (len > l) ? l : len; return cc1101_spi_read_register_burst_raw(addr, data, l); - } else if(CC1101_REG_PATABLE) { + } else if(addr == CC1101_REG_PATABLE) { uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len; return cc1101_spi_read_register_burst_raw(addr, data, l); - } else if(CC1101_REG_FIFO) { + } else if(addr == CC1101_REG_FIFO) { uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len; return cc1101_spi_read_register_burst_raw(addr, data, l); } @@ -162,11 +162,11 @@ static uint8_t cc1101_spi_write_register_burst(const uint8_t addr, const uint8_t l = (len > l) ? l : len; return cc1101_spi_write_register_burst_raw(addr, data, l); - } else if(CC1101_REG_PATABLE) { + } else if(addr == CC1101_REG_PATABLE) { uint8_t l = (len > CC1101_PATABLE_SIZE) ? CC1101_PATABLE_SIZE : len; return cc1101_spi_write_register_burst_raw(addr, data, l); - } else if(CC1101_REG_FIFO) { + } else if(addr == CC1101_REG_FIFO) { uint8_t l = (len > CC1101_FIFO_MAX_LEN) ? CC1101_FIFO_MAX_LEN : len; return cc1101_spi_write_register_burst_raw(addr, data, l); } @@ -232,6 +232,16 @@ void cc1101_tx(void) cc1101_spi_strobe_command(CC1101_CMD_STX); } +void cc1101_reset_rx_fifo(void) +{ + cc1101_spi_strobe_command(CC1101_CMD_SFRX); +} + +void cc1101_reset_tx_fifo(void) +{ + cc1101_spi_strobe_command(CC1101_CMD_SFTX); +} + char* cc1101_state_to_string(cc1101_state_t state) { switch(state) { @@ -791,12 +801,9 @@ uint8_t cc1101_get_marcstate(void) uint16_t cc1101_get_wortime(void) { - uint8_t data[2]; - cc1101_spi_read_register_burst(CC1101_REG_RO_WORTIME1, data, 2); - - uint16_t w = data[0] & CC1101_REG_RO_WORTIME1_MASK; + uint16_t w = cc1101_spi_read_register(CC1101_REG_RO_WORTIME1) & CC1101_REG_RO_WORTIME1_MASK; w = w << 8; - w |= data[1] & CC1101_REG_RO_WORTIME0_MASK; + w |= cc1101_spi_read_register(CC1101_REG_RO_WORTIME0) & CC1101_REG_RO_WORTIME0_MASK; return w; } @@ -831,6 +838,29 @@ uint8_t cc1101_get_rcctrl1_status(void) } +uint8_t cc1101_read_patable(uint8_t* data, const uint8_t len) +{ + return cc1101_spi_read_register_burst(CC1101_REG_PATABLE, data, len); +} + +uint8_t cc1101_write_patable(const uint8_t* data, const uint8_t len) +{ + return cc1101_spi_write_register_burst(CC1101_REG_PATABLE, data, len); +} + +uint8_t cc1101_read_rxfifo(uint8_t* data, const uint8_t len) +{ + uint8_t rx_bytes = cc1101_get_rx_bytes(); + return cc1101_spi_read_register_burst(CC1101_REG_FIFO, data, (len < rx_bytes) ? len : rx_bytes); +} + +uint8_t cc1101_write_txfifo(const uint8_t* data, const uint8_t len) +{ + uint8_t tx_bytes = cc1101_get_tx_bytes(); + uint8_t l = CC1101_FIFO_MAX_LEN - tx_bytes; + return cc1101_spi_write_register_burst(CC1101_REG_FIFO, data, (len < l) ? len : l); +} + static char* cc1101_config_reg_to_string(uint8_t addr) { diff --git a/lib/cc1101.h b/lib/cc1101.h index cb46c6d..b575c96 100644 --- a/lib/cc1101.h +++ b/lib/cc1101.h @@ -52,12 +52,13 @@ void cc1101_calibrate(void); void cc1101_fasttxon(void); void cc1101_rx(void); void cc1101_tx(void); +void cc1101_reset_rx_fifo(void); +void cc1101_reset_tx_fifo(void); cc1101_state_t cc1101_get_state(void); uint32_t cc1101_get_freq_hz(void); void cc1101_set_freq_hz(uint32_t hz); - // normalized register access uint8_t cc1101_get_iocfg0(void); @@ -142,6 +143,11 @@ uint8_t cc1101_get_rx_bytes(void); uint8_t cc1101_get_rcctrl0_status(void); uint8_t cc1101_get_rcctrl1_status(void); +uint8_t cc1101_read_patable(uint8_t* data, const uint8_t len); +uint8_t cc1101_write_patable(const uint8_t* data, const uint8_t len); +uint8_t cc1101_read_rxfifo(uint8_t* data, const uint8_t len); +uint8_t cc1101_write_txfifo(const uint8_t* data, const uint8_t len); + void cc1101_dump_register(void); #endif |