summaryrefslogtreecommitdiff
path: root/software/avr.lib/cc1101.c
diff options
context:
space:
mode:
authorChristian Pointner <equinox@mur.at>2015-02-17 16:08:29 +0100
committerChristian Pointner <equinox@mur.at>2015-02-17 16:08:29 +0100
commit44dda8f30750d0cb2915e9cfadec4798caf88e0c (patch)
tree76b56ffcc1d43a828778795f6d14862572626a45 /software/avr.lib/cc1101.c
parenthhd70: added idle command (diff)
hhd70: reading state works now
Diffstat (limited to 'software/avr.lib/cc1101.c')
-rw-r--r--software/avr.lib/cc1101.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/software/avr.lib/cc1101.c b/software/avr.lib/cc1101.c
index 833adff..e846551 100644
--- a/software/avr.lib/cc1101.c
+++ b/software/avr.lib/cc1101.c
@@ -123,6 +123,62 @@ void cc1101_idle(void)
cc1101_spi_strobe_command(CC1101_CMD_SIDLE);
}
+char* cc1101_state_to_string(cc1101_state_t state)
+{
+ switch(state) {
+ case sleep: return "sleep";
+ case idle: return "idle";
+ case xoff: return "xoff";
+ case mancal: return "mancal";
+ case fs_wakeup: return "fs_wakeup";
+ case calibrate: return "calibrate";
+ case settling: return "settling";
+ case rx: return "rx";
+ case txrx_settling: return "txrx_settling";
+ case rxfifo_overflow: return "rxfifo_overflow";
+ case fstxon: return "fstxon";
+ case tx: return "tx";
+ case rxtx_settling: return "rxtx_settling";
+ case txfifo_underflow: return "txfifo_underflow";
+ default: return "unknown";
+ }
+}
+
+static cc1101_state_t cc1101_marcstate_to_state(uint8_t marcstate)
+{
+ switch(marcstate) {
+ case CC1101_MARCSTATE_SLEEP: return sleep;
+ case CC1101_MARCSTATE_IDLE: return idle;
+ case CC1101_MARCSTATE_XOFF: return xoff;
+ case CC1101_MARCSTATE_VCOON_MC:
+ case CC1101_MARCSTATE_REGON_MC:
+ case CC1101_MARCSTATE_MANCAL: return mancal;
+ case CC1101_MARCSTATE_VCOON:
+ case CC1101_MARCSTATE_REGON: return fs_wakeup;
+ case CC1101_MARCSTATE_STARTCAL: return calibrate;
+ case CC1101_MARCSTATE_BWBOOST:
+ case CC1101_MARCSTATE_FS_LOCK:
+ case CC1101_MARCSTATE_IFADCON: return settling;
+ case CC1101_MARCSTATE_ENDCAL: return calibrate;
+ case CC1101_MARCSTATE_RX:
+ case CC1101_MARCSTATE_RX_END:
+ case CC1101_MARCSTATE_RX_RST: return rx;
+ case CC1101_MARCSTATE_TXRX_SWITCH: return txrx_settling;
+ case CC1101_MARCSTATE_RXFIFO_OVERFLOW: return rxfifo_overflow;
+ case CC1101_MARCSTATE_FSTXON: return fstxon;
+ case CC1101_MARCSTATE_TX:
+ case CC1101_MARCSTATE_TX_END: return tx;
+ case CC1101_MARCSTATE_RXTX_SWITCH: return rxtx_settling;
+ case CC1101_MARCSTATE_TXFIFO_UNDERFLOW: return txfifo_underflow;
+ default: return unknown;
+ }
+}
+
+cc1101_state_t cc1101_get_state(void)
+{
+ return cc1101_marcstate_to_state(cc1101_spi_read_register(CC1101_REG_RO_MARCSTATE));
+}
+
void cc1101_set_freq_hz(uint32_t hz)
{
uint32_t freq = (uint32_t)((float)hz / drv.freq_corr);