summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2015-03-03 05:12:44 +0100
committerChristian Pointner <equinox@spreadspace.org>2015-03-03 05:12:44 +0100
commit4f689051aa460f422201159211e9e7464048c76d (patch)
treec23608c8487fdae5dfc2ddb2597330a0fd6e9154
parentconst correctness... yeah! (diff)
fixed address check for burst read and write
status registor WORTIME is not burst-accessable implemented reset RX/TX - fifo commands implemented read/write functions for patable and rx/tx fifo
-rw-r--r--lib/cc1101.c48
-rw-r--r--lib/cc1101.h8
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