From: sjlongland Date: Thu, 24 Sep 2015 08:11:46 +0000 (+0000) Subject: sm1000_main: Add morse announcements. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=9c37405e2b8cf7b3f3a631091ce0bd480383cec4;p=freetel-svn-tracking.git sm1000_main: Add morse announcements. This adds morse code announcements as you select the different modes with the SELECT button. There is a 1.5 second delay between the selection (acknowledged with a beep) and the actual annoucement of that selection. PTT cancels any announcement. git-svn-id: https://svn.code.sf.net/p/freetel/code@2357 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/stm32/src/sm1000_main.c b/codec2-dev/stm32/src/sm1000_main.c index 391406e7..3287c4a9 100644 --- a/codec2-dev/stm32/src/sm1000_main.c +++ b/codec2-dev/stm32/src/sm1000_main.c @@ -37,9 +37,14 @@ #include #include +#include "sfx.h" +#include "sounds.h" +#include "morse.h" + #define FREEDV_NSAMPLES_16K (2*FREEDV_NSAMPLES) #define FIFTY_MS 50 +#define ANNOUNCE_DELAY 300000 /* Supposed to be msec, seems not */ #define MAX_MODES 3 #define ANALOG 0 #define DV 1 @@ -55,7 +60,11 @@ typedef struct { int mode; } SWITCH_STATE; -unsigned int downTicker; +unsigned int downTicker = 0; +unsigned int announceTicker = 0; + +struct sfx_player_t sfx_player; +struct morse_player_t morse_player; void SysTick_Handler(void); void iterate_select_state_machine(SWITCH_STATE *ss); @@ -105,17 +114,57 @@ int main(void) { for(i=0; i n_samples_16k) + sz_free = n_samples_16k; + for (i=0; i < sz_free; i++) { + dac16k[i] = sfx_next(&sfx_player) >> 2; /* -6dB */ + samples++; + if (!sfx_player.note) + break; + } + dac2_write(dac16k, samples); + if (!sfx_player.note && morse_player.msg) + announceTicker = ANNOUNCE_DELAY; + } + else if (!announceTicker && morse_player.msg) { + int samples = 0; + int sz_free = dac2_free(); + if (sz_free > n_samples_16k) + sz_free = n_samples_16k; + for (i=0; i < sz_free; i++) { + dac16k[i] = morse_next(&morse_player) >> 2; /* -6dB */ + samples++; + if (!morse_player.msg) + break; + } + dac2_write(dac16k, samples); + } + else if (switch_ptt() || (ext_ptt() == 0)) { /* Transmit -------------------------------------------------------------------------*/ + /* Cancel any announcement if scheduled */ + if (announceTicker && morse_player.msg) { + announceTicker = 0; + morse_play(&morse_player, NULL); + } + /* ADC2 is the SM1000 microphone, DAC1 is the modulator signal we send to radio tx */ if (adc2_read(&adc16k[FDMDV_OS_TAPS_16K], n_samples_16k) == 0) { @@ -206,6 +255,9 @@ void SysTick_Handler(void) if (downTicker > 0) { downTicker--; } + if (announceTicker > 0) { + announceTicker--; + } } /* Select button state machine. Debounces switches and enables cycling @@ -225,8 +277,15 @@ void iterate_select_state_machine(SWITCH_STATE *ss) { case SS_DEBOUNCE_DOWN: if (downTicker == 0) { ss->mode++; + sfx_play(&sfx_player, sound_click); if (ss->mode >= MAX_MODES) ss->mode = 0; + if (ss->mode == ANALOG) + morse_play(&morse_player, "ANALOG"); + else if (ss->mode == DV) + morse_play(&morse_player, "DV"); + else if (ss->mode == TONE) + morse_play(&morse_player, "TONE"); next_state = SS_WAIT_BUTTON_UP; } break;