aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2019-04-11 16:22:04 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2019-04-11 16:22:04 +0200
commiteed7072d6336a3cfdc8b52eb20166529a4de4d81 (patch)
tree1505819a1216406e6f15c4315bed93750c7ed68d /src/common
parent3555e921a0c743dbc2cc10d8655827be975c61e0 (diff)
downloadglutte-o-matic-eed7072d6336a3cfdc8b52eb20166529a4de4d81.tar.gz
glutte-o-matic-eed7072d6336a3cfdc8b52eb20166529a4de4d81.tar.bz2
glutte-o-matic-eed7072d6336a3cfdc8b52eb20166529a4de4d81.zip
Add some 1750 detection code to glutt-o-logic
Diffstat (limited to 'src/common')
-rw-r--r--src/common/includes/Audio/audio_in.h15
-rw-r--r--src/common/includes/Audio/tone.h7
-rw-r--r--src/common/includes/Core/common.h1
-rw-r--r--src/common/src/Audio/audio_in.c26
-rw-r--r--src/common/src/Audio/tone.c24
-rw-r--r--src/common/src/Core/main.c60
-rw-r--r--src/common/src/GPIO/usart.c3
7 files changed, 86 insertions, 50 deletions
diff --git a/src/common/includes/Audio/audio_in.h b/src/common/includes/Audio/audio_in.h
index 86c93b2..3bc543c 100644
--- a/src/common/includes/Audio/audio_in.h
+++ b/src/common/includes/Audio/audio_in.h
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
- * Copyright (c) 2018 Maximilien Cuony
+ * Copyright (c) 2019 Matthias P. Braendli, Maximilien Cuony
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -22,19 +22,16 @@
* SOFTWARE.
*/
-#ifndef __AUDIO_IN_H__
-#define __AUDIO_IN_H__
+#pragma once
#include <stdio.h>
#include "FreeRTOS.h"
-#define AUDIO_IN_BUF_LEN 2048
#define AUDIO_IN_RATE 8000
-
-int16_t * audio_in_buffer;
+#define AUDIO_IN_BUF_LEN 32
void audio_in_initialize(int rate);
-void audio_in_initialize_plateform(int rate);
-void audio_in_buffer_ready(void);
-#endif
+// Fill the buffer with AUDIO_IN_BUF_LEN samples.
+void audio_in_get_buffer(int16_t *buffer /*of length AUDIO_IN_BUF_LEN*/ );
+
diff --git a/src/common/includes/Audio/tone.h b/src/common/includes/Audio/tone.h
index 0e80228..861a472 100644
--- a/src/common/includes/Audio/tone.h
+++ b/src/common/includes/Audio/tone.h
@@ -42,6 +42,11 @@ struct tone_detector {
};
void tone_init(int threshold);
-int tone_detect_1750(int16_t sample);
+
+/* Return 1 when 1750 detected, 0 otherwise */
+int tone_1750_status(void);
+
+/* Update 1750 tone detection status */
+void tone_detect_1750(const int16_t *samples, int len);
#endif
diff --git a/src/common/includes/Core/common.h b/src/common/includes/Core/common.h
index b5dc881..3f7dbcc 100644
--- a/src/common/includes/Core/common.h
+++ b/src/common/includes/Core/common.h
@@ -63,6 +63,7 @@ int random_bool(void);
#define FAULT_SOURCE_TASK_OVERFLOW 5
#define FAULT_SOURCE_CW_AUDIO_QUEUE 6
#define FAULT_SOURCE_ADC1 7
+#define FAULT_SOURCE_ADC2 8
void trigger_fault(int source);
int find_last_sunday(const struct tm*);
diff --git a/src/common/src/Audio/audio_in.c b/src/common/src/Audio/audio_in.c
index b046a62..dd1994e 100644
--- a/src/common/src/Audio/audio_in.c
+++ b/src/common/src/Audio/audio_in.c
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
- * Copyright (c) 2018 Maximilien Cuony
+ * Copyright (c) 2019 Matthias P. Braendli, Maximilien Cuony
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -22,27 +22,3 @@
* SOFTWARE.
*/
-#include "Audio/tone.h"
-#include "Audio/audio_in.h"
-
-int16_t audio_in_buffer_0[AUDIO_IN_BUF_LEN];
-int16_t audio_in_buffer_1[AUDIO_IN_BUF_LEN];
-
-void audio_in_initialize(int rate) {
- audio_in_buffer = audio_in_buffer_0;
- audio_in_initialize_plateform(rate);
-}
-
-void audio_in_buffer_ready() {
-
- for (int i = 0; i < AUDIO_IN_BUF_LEN; i++) {
- tone_detect_1750(audio_in_buffer[i]);
- }
-
- if (audio_in_buffer == audio_in_buffer_0) {
- audio_in_buffer = audio_in_buffer_1;
- } else {
- audio_in_buffer = audio_in_buffer_0;
- }
-
-}
diff --git a/src/common/src/Audio/tone.c b/src/common/src/Audio/tone.c
index 60226ce..5065b31 100644
--- a/src/common/src/Audio/tone.c
+++ b/src/common/src/Audio/tone.c
@@ -37,7 +37,12 @@
static struct tone_detector detector_1750;
-int TONE_1750_DETECTED = 0;
+static int tone_1750_detected = 0;
+
+int tone_1750_status()
+{
+ return tone_1750_detected;
+}
static void init_tone(struct tone_detector* detector, int freq, int threshold) {
detector->coef = 2.0f * arm_cos_f32(2.0f * FLOAT_PI * freq / AUDIO_IN_RATE);
@@ -68,6 +73,12 @@ static inline int analyse_sample(int16_t sample, struct tone_detector *detector)
detector->Q2 * detector->Q2 -
detector->coef * detector->Q1 * detector->Q2);
+#ifdef SIMULATOR
+#define FRMT "%- 12.4f"
+ fprintf(stderr, "1750: Q1 " FRMT " Q2 " FRMT " m " FRMT " thresh " FRMT "\n", detector->Q1, detector->Q2, m, detector->threshold);
+#endif
+
+
detector->Q1 = 0;
detector->Q2 = 0;
detector->num_samples_analysed = 0;
@@ -84,12 +95,13 @@ static inline int analyse_sample(int16_t sample, struct tone_detector *detector)
}
}
-int tone_detect_1750(int16_t sample)
+void tone_detect_1750(const int16_t *samples, int len)
{
- int r = analyse_sample(sample, &detector_1750);
- if (r == 0 || r == 1) {
- TONE_1750_DETECTED = r;
+ for (int i = 0; i < len; i++) {
+ int r = analyse_sample(samples[i], &detector_1750);
+ if (r == 0 || r == 1) {
+ tone_1750_detected = r;
+ }
}
- return r;
}
diff --git a/src/common/src/Core/main.c b/src/common/src/Core/main.c
index d303e09..ed3dfef 100644
--- a/src/common/src/Core/main.c
+++ b/src/common/src/Core/main.c
@@ -50,13 +50,15 @@
#include "GPIO/analog.h"
#include "vc.h"
+#ifdef SIMULATOR
+extern int gui_in_tone_1750;
+#endif
+
static int tm_trigger_button = 0;
static struct fsm_input_signals_t fsm_input;
static int hour_is_even = 0;
-extern int TONE_1750_DETECTED;
-
/* Threshold for SWR measurement */
const int swr_refl_threshold = 10; // mV
@@ -79,6 +81,7 @@ void init(void);
// Tasks
static void detect_button_press(void *pvParameters);
static void exercise_fsm(void *pvParameters);
+static void nf_analyse(void *pvParameters);
static void gps_monit_task(void *pvParameters);
static void launcher_task(void *pvParameters);
@@ -198,10 +201,6 @@ static void launcher_task(void __attribute__ ((unused))*pvParameters)
trigger_fault(FAULT_SOURCE_MAIN);
}
- usart_debug_puts("Tone init\r\n");
-#warning TODO
- tone_init(20000);
-
usart_debug_puts("Audio init\r\n");
audio_initialize(Audio16000HzSettings);
@@ -211,9 +210,26 @@ static void launcher_task(void __attribute__ ((unused))*pvParameters)
usart_debug_puts("Audio set callback\r\n");
audio_play_with_callback(audio_callback, NULL);
+ usart_debug_puts("Tone init\r\n");
+ tone_init(120000);
+
usart_debug_puts("Audio in init\r\n");
audio_in_initialize(AUDIO_IN_RATE);
+ usart_debug_puts("TaskNF init\r\n");
+
+ xTaskCreate(
+ nf_analyse,
+ "TaskNF",
+ 1*configMINIMAL_STACK_SIZE,
+ (void*) NULL,
+ tskIDLE_PRIORITY + 2UL,
+ &task_handle);
+
+ if (!task_handle) {
+ trigger_fault(FAULT_SOURCE_MAIN);
+ }
+
usart_debug_puts("Init done.\r\n");
int last_qrp_from_supply = 0;
@@ -489,11 +505,12 @@ static void gps_monit_task(void __attribute__ ((unused))*pvParameters) {
static void exercise_fsm(void __attribute__ ((unused))*pvParameters)
{
+ fsm_init();
+
int cw_last_trigger = 0;
int last_tm_trigger_button = 0;
int last_sq = 0;
- int last_1750 = 0;
int last_qrp = 0;
int last_cw_done = 0;
int last_discrim_d = 0;
@@ -561,8 +578,10 @@ static void exercise_fsm(void __attribute__ ((unused))*pvParameters)
leds_turn_on(LED_ORANGE);
}
-#warning "TODO: from tone detector"
- fsm_input.det_1750 = TONE_1750_DETECTED;
+#ifdef SIMULATOR
+ gui_in_tone_1750 =
+#endif
+ fsm_input.det_1750 = tone_1750_status();
fsm_input.fax_mode = 0;
fsm_input.swr_high = swr_error_flag;
@@ -589,3 +608,26 @@ static void exercise_fsm(void __attribute__ ((unused))*pvParameters)
}
}
+
+static int16_t audio_in_buffer[AUDIO_IN_BUF_LEN];
+static int led_phase = 0;
+static void nf_analyse(void __attribute__ ((unused))*pvParameters)
+{
+ while (1) {
+ if (led_phase == 0) {
+ leds_turn_on(LED_BLUE);
+ }
+ else if (led_phase == 400) {
+ leds_turn_off(LED_BLUE);
+ }
+
+ led_phase++;
+
+ if (led_phase >= 800) {
+ led_phase = 0;
+ }
+
+ audio_in_get_buffer(audio_in_buffer);
+ tone_detect_1750(audio_in_buffer, AUDIO_IN_BUF_LEN);
+ }
+}
diff --git a/src/common/src/GPIO/usart.c b/src/common/src/GPIO/usart.c
index 052c546..535b062 100644
--- a/src/common/src/GPIO/usart.c
+++ b/src/common/src/GPIO/usart.c
@@ -99,6 +99,9 @@ void usart_debug(const char *format, ...) {
}
void usart_debug_puts(const char* str) {
+#ifdef SIMULATOR
+ fprintf(stderr, "DEBUG: %s", str);
+#endif
vTaskSuspendAll();
usart_debug_timestamp();
usart_puts(USART2, str);