summaryrefslogtreecommitdiff
path: root/software/hhd70dongle/hhd70dongle.c
diff options
context:
space:
mode:
Diffstat (limited to 'software/hhd70dongle/hhd70dongle.c')
-rw-r--r--software/hhd70dongle/hhd70dongle.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/software/hhd70dongle/hhd70dongle.c b/software/hhd70dongle/hhd70dongle.c
index 3db3c5c..2c239b4 100644
--- a/software/hhd70dongle/hhd70dongle.c
+++ b/software/hhd70dongle/hhd70dongle.c
@@ -44,7 +44,8 @@
#include "cc1101.h"
#include "cc1101_defines.h"
-#define DEFAULT_FREQ 437525
+#define DEFAULT_FREQ 437525000
+int32_t current_freq_hz = DEFAULT_FREQ;
static void reset_hhd70(void)
{
@@ -58,6 +59,32 @@ static void reinit_hhd70(void)
cc1101_reg_init();
}
+static uint32_t print_actual_freq(void)
+{
+ uint32_t f = cc1101_get_freq_hz();
+ uint16_t hz = f % 1000;
+ uint16_t mhz = f / 1000000;
+ uint16_t khz = (f % 1000000)/1000;
+ printf("actual frequency: %d.%03d%03d MHz\r\n", mhz, khz, hz);
+ return f;
+}
+
+static void update_current_freq(void)
+{
+ uint16_t hz = current_freq_hz % 1000;
+ uint16_t mhz = current_freq_hz / 1000000;
+ uint16_t khz = (current_freq_hz % 1000000)/1000;
+ printf("setting frequency to %d.%03d%03d MHz\r\n", mhz, khz, hz);
+
+ // TODO: goto idle mode
+
+ cc1101_set_freq_hz(current_freq_hz);
+
+ // TODO: if old mode wasn't idle go back to this mode
+
+ print_actual_freq();
+}
+
static void print_status(void)
{
printf("HHD70 status:\r\n");
@@ -71,9 +98,22 @@ static void handle_cmd(uint8_t cmd)
case '1': led_on(); printf("led ON\r\n"); break;
case 't': led_toggle(); printf("led TOGGLE\r\n"); break;
case '!': cc1101_soft_reset(); reset2bootloader(); break;
+
case 'r': reset_hhd70(); break;
case 'i': reinit_hhd70(); break;
+ case 'F': current_freq_hz = DEFAULT_FREQ; update_current_freq(); break;
+
+ case '#': current_freq_hz+=100000; update_current_freq(); break;
+ case '+': current_freq_hz+=10000; update_current_freq(); break;
+ case ':': current_freq_hz+=1000; update_current_freq(); break;
+ case '.': current_freq_hz-=1000; update_current_freq(); break;
+ case '-': current_freq_hz-=10000; update_current_freq(); break;
+ case '_': current_freq_hz-=100000; update_current_freq(); break;
+
case 'P': cc1101_powerdown(); print_status(); break;
+
+ case 'f': print_actual_freq(); break;
+ case 's': print_status(); break;
case 'D': cc1101_dump_register(); break;
default: printf("unknown command\r\n"); return;