From d44a0a126e6f3868463a88bfff011a0d6dcf7572 Mon Sep 17 00:00:00 2001 From: bsongis Date: Tue, 26 Jun 2012 20:37:28 +0000 Subject: [PATCH] Sirens again on ersky9x board. Length were not good. --- src/ersky9x/audio.cpp | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/ersky9x/audio.cpp b/src/ersky9x/audio.cpp index 9fa56e909..b515519c4 100644 --- a/src/ersky9x/audio.cpp +++ b/src/ersky9x/audio.cpp @@ -39,7 +39,7 @@ uint8_t t_queueRidx; uint8_t t_queueWidx; uint8_t toneFreq; -//int8_t toneFreqIncr; +int8_t toneFreqIncr; uint8_t toneTimeLeft; uint8_t tonePause; @@ -51,7 +51,7 @@ char toneWavFile[32+1] = ""; // queue arrays uint8_t queueToneFreq[AUDIO_QUEUE_LENGTH]; -// int8_t queueToneFreqIncr[AUDIO_QUEUE_LENGTH]; +int8_t queueToneFreqIncr[AUDIO_QUEUE_LENGTH]; uint8_t queueToneLength[AUDIO_QUEUE_LENGTH]; uint8_t queueTonePause[AUDIO_QUEUE_LENGTH]; uint8_t queueToneRepeat[AUDIO_QUEUE_LENGTH]; @@ -111,6 +111,10 @@ void audioTask(void* pdata) toneWavFile[0] = '\0'; f_close(&wavFile); toneStop(); + DACC->DACC_TPR = CONVERT_PTR(Sine_values); + DACC->DACC_TCR = 50 ; // words, 100 16 bit values + DACC->DACC_TNPR = CONVERT_PTR(Sine_values); + DACC->DACC_TNCR = 50 ; // words, 100 16 bit values } #if 1 else { @@ -133,19 +137,22 @@ void audioTask(void* pdata) else #endif if (toneTimeLeft > 0) { - CoSetTmrCnt(audioTimer, toneTimeLeft, 0); - toneTimeLeft = 0; // TODO function for that ... - DACC->DACC_TPR = CONVERT_PTR(Sine_values); - DACC->DACC_TCR = 50 ; // words, 100 16 bit values - DACC->DACC_TNPR = CONVERT_PTR(Sine_values); - DACC->DACC_TNCR = 50 ; // words, 100 16 bit values setFrequency(toneFreq * 6100 / 2); + if (toneFreqIncr) { + CoSetTmrCnt(audioTimer, 5/*10ms*/, 0); + toneFreq += toneFreqIncr; + toneTimeLeft--; + } + else { + CoSetTmrCnt(audioTimer, toneTimeLeft*5, 0); + toneTimeLeft = 0; + } toneStart(); CoStartTmr(audioTimer); } else if (tonePause > 0) { - CoSetTmrCnt(audioTimer, tonePause, 0); + CoSetTmrCnt(audioTimer, tonePause*5, 0); tonePause = 0; toneStop(); CoStartTmr(audioTimer); @@ -153,7 +160,7 @@ void audioTask(void* pdata) else if (t_queueRidx != t_queueWidx) { toneFreq = queueToneFreq[t_queueRidx]; toneTimeLeft = queueToneLength[t_queueRidx]; - // TODO ? toneFreqIncr = queueToneFreqIncr[t_queueRidx]; + toneFreqIncr = queueToneFreqIncr[t_queueRidx]; tonePause = queueTonePause[t_queueRidx]; if (!queueToneRepeat[t_queueRidx]--) { t_queueRidx = (t_queueRidx + 1) % AUDIO_QUEUE_LENGTH; @@ -161,13 +168,8 @@ void audioTask(void* pdata) CoSetFlag(audioFlag); } else if (tone2TimeLeft > 0) { - CoSetTmrCnt(audioTimer, tone2TimeLeft, 0); + CoSetTmrCnt(audioTimer, tone2TimeLeft*5, 0); tone2TimeLeft = 0; - // TODO function for that ... - DACC->DACC_TPR = CONVERT_PTR(Sine_values); - DACC->DACC_TCR = 50 ; // words, 100 16 bit values - DACC->DACC_TNPR = CONVERT_PTR(Sine_values); - DACC->DACC_TNCR = 50 ; // words, 100 16 bit values setFrequency(tone2Freq * 6100 / 2); toneStart(); CoStartTmr(audioTimer); @@ -210,12 +212,12 @@ void play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, tFreq += g_eeGeneral.speakerPitch + BEEP_OFFSET; // add pitch compensator } tLen = getToneLength(tLen); - if ((tFlags & PLAY_NOW) || audioState == 0) { + if ((tFlags & PLAY_NOW) || (audioState == 0 && audioEmpty())) { toneWavFile[0] = '\0'; toneFreq = tFreq; toneTimeLeft = tLen; tonePause = tPause; - // toneFreqIncr = tFreqIncr; + toneFreqIncr = tFreqIncr; t_queueWidx = t_queueRidx; CoSetFlag(audioFlag); } @@ -231,7 +233,7 @@ void play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, queueToneLength[t_queueWidx] = tLen; queueTonePause[t_queueWidx] = tPause; queueToneRepeat[t_queueWidx] = tFlags - 1; - // queueToneFreqIncr[t_queueWidx] = tFreqIncr; + queueToneFreqIncr[t_queueWidx] = tFreqIncr; t_queueWidx = next_queueWidx; } }