diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-04-11 16:22:04 +0200 |
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-04-11 16:22:04 +0200 |
| commit | eed7072d6336a3cfdc8b52eb20166529a4de4d81 (patch) | |
| tree | 1505819a1216406e6f15c4315bed93750c7ed68d /src/common | |
| parent | 3555e921a0c743dbc2cc10d8655827be975c61e0 (diff) | |
| download | glutte-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.h | 15 | ||||
| -rw-r--r-- | src/common/includes/Audio/tone.h | 7 | ||||
| -rw-r--r-- | src/common/includes/Core/common.h | 1 | ||||
| -rw-r--r-- | src/common/src/Audio/audio_in.c | 26 | ||||
| -rw-r--r-- | src/common/src/Audio/tone.c | 24 | ||||
| -rw-r--r-- | src/common/src/Core/main.c | 60 | ||||
| -rw-r--r-- | src/common/src/GPIO/usart.c | 3 |
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); |
