summaryrefslogtreecommitdiff
path: root/lib/cc1101.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cc1101.c')
-rw-r--r--lib/cc1101.c48
1 files changed, 39 insertions, 9 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)
{