From 408d0ef26dee248feffcc6354a69d808f8feaa39 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 17 Feb 2014 14:41:33 +0100 Subject: [PATCH 01/22] Allow 110Hz tones --- radio/src/audio_arm.cpp | 186 +++++++++++++++++++++++++++++----------- radio/src/audio_arm.h | 10 +-- 2 files changed, 142 insertions(+), 54 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 5d2fb1be9..b656ead9c 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,23 +41,112 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 64, 128, 191, 254, 316, 376, 435, 493, 548, - 601, 652, 700, 746, 789, 828, 864, 897, 926, 952, - 973, 991, 1005, 1015, 1021, 1024, 1021, 1015, 1005, 991, - 973, 952, 926, 897, 864, 828, 789, 746, 700, 652, - 601, 548, 493, 435, 376, 316, 254, 191, 128, 64, - 0, -64, -128, -191, -254, -316, -376, -435, -493, -548, - -601, -652, -700, -746, -789, -828, -864, -897, -926, -952, - -973, -991, -1005, -1015, -1021, -1024, -1021, -1015, -1005, -991, - -973, -952, -926, -897, -864, -828, -789, -746, -700, -652, - -601, -548, -493, -435, -376, -316, -254, -191, -128, -64, + 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, + 62, 69, 75, 81, 87, 94, 100, 106, 112, 119, + 125, 131, 137, 144, 150, 156, 162, 168, 175, 181, + 187, 193, 199, 205, 212, 218, 224, 230, 236, 242, + 248, 254, 260, 267, 273, 279, 285, 291, 297, 303, + 309, 315, 321, 327, 333, 339, 344, 350, 356, 362, + 368, 374, 380, 386, 391, 397, 403, 409, 414, 420, + 426, 432, 437, 443, 449, 454, 460, 466, 471, 477, + 482, 488, 493, 499, 504, 510, 515, 521, 526, 531, + 537, 542, 547, 553, 558, 563, 568, 574, 579, 584, + 589, 594, 599, 604, 609, 615, 620, 625, 629, 634, + 639, 644, 649, 654, 659, 664, 668, 673, 678, 683, + 687, 692, 696, 701, 706, 710, 715, 719, 724, 728, + 732, 737, 741, 745, 750, 754, 758, 762, 767, 771, + 775, 779, 783, 787, 791, 795, 799, 803, 807, 811, + 814, 818, 822, 826, 829, 833, 837, 840, 844, 847, + 851, 854, 858, 861, 865, 868, 871, 875, 878, 881, + 884, 887, 890, 894, 897, 900, 903, 906, 908, 911, + 914, 917, 920, 922, 925, 928, 930, 933, 936, 938, + 941, 943, 946, 948, 950, 953, 955, 957, 959, 962, + 964, 966, 968, 970, 972, 974, 976, 978, 979, 981, + 983, 985, 986, 988, 990, 991, 993, 994, 996, 997, + 999, 1000, 1001, 1003, 1004, 1005, 1006, 1007, 1008, 1009, + 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1017, 1018, + 1019, 1019, 1020, 1020, 1021, 1021, 1022, 1022, 1022, 1023, + 1023, 1023, 1023, 1023, 1023, 1023, 1024, 1023, 1023, 1023, + 1023, 1023, 1023, 1023, 1022, 1022, 1022, 1021, 1021, 1020, + 1020, 1019, 1019, 1018, 1017, 1017, 1016, 1015, 1014, 1013, + 1012, 1011, 1010, 1009, 1008, 1007, 1006, 1005, 1004, 1003, + 1001, 1000, 999, 997, 996, 994, 993, 991, 990, 988, + 986, 985, 983, 981, 979, 978, 976, 974, 972, 970, + 968, 966, 964, 962, 959, 957, 955, 953, 950, 948, + 946, 943, 941, 938, 936, 933, 930, 928, 925, 922, + 920, 917, 914, 911, 908, 906, 903, 900, 897, 894, + 890, 887, 884, 881, 878, 875, 871, 868, 865, 861, + 858, 854, 851, 847, 844, 840, 837, 833, 829, 826, + 822, 818, 814, 811, 807, 803, 799, 795, 791, 787, + 783, 779, 775, 771, 767, 762, 758, 754, 750, 745, + 741, 737, 732, 728, 724, 719, 715, 710, 706, 701, + 696, 692, 687, 683, 678, 673, 668, 664, 659, 654, + 649, 644, 639, 634, 629, 625, 620, 615, 609, 604, + 599, 594, 589, 584, 579, 574, 568, 563, 558, 553, + 547, 542, 537, 531, 526, 521, 515, 510, 504, 499, + 493, 488, 482, 477, 471, 466, 460, 454, 449, 443, + 437, 432, 426, 420, 414, 409, 403, 397, 391, 386, + 380, 374, 368, 362, 356, 350, 344, 339, 333, 327, + 321, 315, 309, 303, 297, 291, 285, 279, 273, 267, + 260, 254, 248, 242, 236, 230, 224, 218, 212, 205, + 199, 193, 187, 181, 175, 168, 162, 156, 150, 144, + 137, 131, 125, 119, 112, 106, 100, 94, 87, 81, + 75, 69, 62, 56, 50, 43, 37, 31, 25, 18, + 12, 6, 0, -6, -12, -18, -25, -31, -37, -43, + -50, -56, -62, -69, -75, -81, -87, -94, -100, -106, + -112, -119, -125, -131, -137, -144, -150, -156, -162, -168, + -175, -181, -187, -193, -199, -205, -212, -218, -224, -230, + -236, -242, -248, -254, -260, -267, -273, -279, -285, -291, + -297, -303, -309, -315, -321, -327, -333, -339, -344, -350, + -356, -362, -368, -374, -380, -386, -391, -397, -403, -409, + -414, -420, -426, -432, -437, -443, -449, -454, -460, -466, + -471, -477, -482, -488, -493, -499, -504, -510, -515, -521, + -526, -531, -537, -542, -547, -553, -558, -563, -568, -574, + -579, -584, -589, -594, -599, -604, -609, -615, -620, -625, + -629, -634, -639, -644, -649, -654, -659, -664, -668, -673, + -678, -683, -687, -692, -696, -701, -706, -710, -715, -719, + -724, -728, -732, -737, -741, -745, -750, -754, -758, -762, + -767, -771, -775, -779, -783, -787, -791, -795, -799, -803, + -807, -811, -814, -818, -822, -826, -829, -833, -837, -840, + -844, -847, -851, -854, -858, -861, -865, -868, -871, -875, + -878, -881, -884, -887, -890, -894, -897, -900, -903, -906, + -908, -911, -914, -917, -920, -922, -925, -928, -930, -933, + -936, -938, -941, -943, -946, -948, -950, -953, -955, -957, + -959, -962, -964, -966, -968, -970, -972, -974, -976, -978, + -979, -981, -983, -985, -986, -988, -990, -991, -993, -994, + -996, -997, -999, -1000, -1001, -1003, -1004, -1005, -1006, -1007, + -1008, -1009, -1010, -1011, -1012, -1013, -1014, -1015, -1016, -1017, + -1017, -1018, -1019, -1019, -1020, -1020, -1021, -1021, -1022, -1022, + -1022, -1023, -1023, -1023, -1023, -1023, -1023, -1023, -1024, -1023, + -1023, -1023, -1023, -1023, -1023, -1023, -1022, -1022, -1022, -1021, + -1021, -1020, -1020, -1019, -1019, -1018, -1017, -1017, -1016, -1015, + -1014, -1013, -1012, -1011, -1010, -1009, -1008, -1007, -1006, -1005, + -1004, -1003, -1001, -1000, -999, -997, -996, -994, -993, -991, + -990, -988, -986, -985, -983, -981, -979, -978, -976, -974, + -972, -970, -968, -966, -964, -962, -959, -957, -955, -953, + -950, -948, -946, -943, -941, -938, -936, -933, -930, -928, + -925, -922, -920, -917, -914, -911, -908, -906, -903, -900, + -897, -894, -890, -887, -884, -881, -878, -875, -871, -868, + -865, -861, -858, -854, -851, -847, -844, -840, -837, -833, + -829, -826, -822, -818, -814, -811, -807, -803, -799, -795, + -791, -787, -783, -779, -775, -771, -767, -762, -758, -754, + -750, -745, -741, -737, -732, -728, -724, -719, -715, -710, + -706, -701, -696, -692, -687, -683, -678, -673, -668, -664, + -659, -654, -649, -644, -639, -634, -629, -625, -620, -615, + -609, -604, -599, -594, -589, -584, -579, -574, -568, -563, + -558, -553, -547, -542, -537, -531, -526, -521, -515, -510, + -504, -499, -493, -488, -482, -477, -471, -466, -460, -454, + -449, -443, -437, -432, -426, -420, -414, -409, -403, -397, + -391, -386, -380, -374, -368, -362, -356, -350, -344, -339, + -333, -327, -321, -315, -309, -303, -297, -291, -285, -279, + -273, -267, -260, -254, -248, -242, -236, -230, -224, -218, + -212, -205, -199, -193, -187, -181, -175, -168, -162, -156, + -150, -144, -137, -131, -125, -119, -112, -106, -100, -94, + -87, -81, -75, -69, -62, -56, -50, -43, -37, -31, + -25, -18, -12, -6, }; -#if 1 - const unsigned int toneVolumes[] = { 2, 4, 8, 12, 16 }; -#else - const unsigned int toneVolumes[] = { 4000, 8000, 16000, 24000, 32000 }; -#endif +const unsigned int toneVolumes[] = { 2, 4, 8, 12, 16 }; #if defined(SDCARD) const char * audioFilenames[] = { @@ -459,48 +548,49 @@ int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, int result = 0; if (fragment.tone.duration > 0) { - result = AUDIO_BUFFER_SIZE; - if (fragment.tone.freq && context.state.tone.freq!=fragment.tone.freq && (!fragment.tone.freqIncr || abs(context.state.tone.freq-fragment.tone.freq) > 100)) { - int periods = BEEP_POINTS_COUNT / ((AUDIO_SAMPLE_RATE / fragment.tone.freq) + 1); - context.state.tone.count = (periods * AUDIO_SAMPLE_RATE) / fragment.tone.freq; - if (context.state.tone.idx >= context.state.tone.count) context.state.tone.idx = 0; -#if 1 - for (unsigned int i=0; i DIM(sineValues)) + end -= (end % DIM(sineValues)); + else + end = DIM(sineValues); + points = (double(end) - toneIdx) / context.state.tone.step; + } + else { + duration = AUDIO_BUFFER_DURATION; + fragment.tone.duration -= AUDIO_BUFFER_DURATION; + points = AUDIO_BUFFER_SIZE; } for (int i=0; idata[i], context.state.tone.points[context.state.tone.idx], fade); - context.state.tone.idx = context.state.tone.idx + 1; - if (context.state.tone.idx >= context.state.tone.count) { - context.state.tone.idx = 0; - if (end && i+BEEP_POINTS_COUNT>points) break; - } + int16_t sample = sineValues[int(toneIdx)] * toneVolumes[2+volume]; + mix(&buffer->data[i], sample, fade); + toneIdx += context.state.tone.step; + if ((unsigned int)toneIdx >= DIM(sineValues)) + toneIdx -= DIM(sineValues); } - fragment.tone.duration -= duration; - if (fragment.tone.duration > 0) + if (fragment.tone.duration > 0) { + context.state.tone.idx = toneIdx; return AUDIO_BUFFER_SIZE; + } + else { + context.state.tone.idx = 0; + } } if (fragment.tone.pause > 0) { @@ -548,7 +638,7 @@ void AudioQueue::wakeup() // mix the foreground context result = mixAudioContext(foregroundContext, buffer, g_eeGeneral.beepVolume, g_eeGeneral.wavVolume, fade); if (result > 0) { - size = max(size, result); + size = result; fade += 1; } diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 9b45187b0..fadceeb59 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -47,11 +47,10 @@ #define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE*AUDIO_BUFFER_DURATION/1000) #define AUDIO_BUFFER_COUNT (3) -#define BEEP_MIN_FREQ (440) +#define BEEP_MIN_FREQ (110) #define BEEP_DEFAULT_FREQ (2250) #define BEEP_KEY_UP_FREQ (BEEP_DEFAULT_FREQ+150) #define BEEP_KEY_DOWN_FREQ (BEEP_DEFAULT_FREQ-150) -#define BEEP_POINTS_COUNT 100 #define AUDIO_BUFFER_FREE (0) #define AUDIO_BUFFER_FILLED (1) @@ -105,10 +104,9 @@ class AudioContext { #endif struct { - int16_t points[BEEP_POINTS_COUNT]; - uint8_t count; - uint8_t idx; - uint16_t freq; + double step; + double idx; + double volume; } tone; } state; From 502ea0e9215e35ddb0848ac14fde944b2619d395 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 17 Feb 2014 15:19:05 +0100 Subject: [PATCH 02/22] Lower sounds must have a greater amplitude in order to have the same energy --- radio/src/audio_arm.cpp | 213 ++++++++++++++++++++-------------------- radio/src/audio_arm.h | 2 +- 2 files changed, 108 insertions(+), 107 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index b656ead9c..45b53ba67 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,113 +41,111 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, - 62, 69, 75, 81, 87, 94, 100, 106, 112, 119, - 125, 131, 137, 144, 150, 156, 162, 168, 175, 181, - 187, 193, 199, 205, 212, 218, 224, 230, 236, 242, - 248, 254, 260, 267, 273, 279, 285, 291, 297, 303, - 309, 315, 321, 327, 333, 339, 344, 350, 356, 362, - 368, 374, 380, 386, 391, 397, 403, 409, 414, 420, - 426, 432, 437, 443, 449, 454, 460, 466, 471, 477, - 482, 488, 493, 499, 504, 510, 515, 521, 526, 531, - 537, 542, 547, 553, 558, 563, 568, 574, 579, 584, - 589, 594, 599, 604, 609, 615, 620, 625, 629, 634, - 639, 644, 649, 654, 659, 664, 668, 673, 678, 683, - 687, 692, 696, 701, 706, 710, 715, 719, 724, 728, - 732, 737, 741, 745, 750, 754, 758, 762, 767, 771, - 775, 779, 783, 787, 791, 795, 799, 803, 807, 811, - 814, 818, 822, 826, 829, 833, 837, 840, 844, 847, - 851, 854, 858, 861, 865, 868, 871, 875, 878, 881, - 884, 887, 890, 894, 897, 900, 903, 906, 908, 911, - 914, 917, 920, 922, 925, 928, 930, 933, 936, 938, - 941, 943, 946, 948, 950, 953, 955, 957, 959, 962, - 964, 966, 968, 970, 972, 974, 976, 978, 979, 981, - 983, 985, 986, 988, 990, 991, 993, 994, 996, 997, - 999, 1000, 1001, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1017, 1018, - 1019, 1019, 1020, 1020, 1021, 1021, 1022, 1022, 1022, 1023, - 1023, 1023, 1023, 1023, 1023, 1023, 1024, 1023, 1023, 1023, - 1023, 1023, 1023, 1023, 1022, 1022, 1022, 1021, 1021, 1020, - 1020, 1019, 1019, 1018, 1017, 1017, 1016, 1015, 1014, 1013, - 1012, 1011, 1010, 1009, 1008, 1007, 1006, 1005, 1004, 1003, - 1001, 1000, 999, 997, 996, 994, 993, 991, 990, 988, - 986, 985, 983, 981, 979, 978, 976, 974, 972, 970, - 968, 966, 964, 962, 959, 957, 955, 953, 950, 948, - 946, 943, 941, 938, 936, 933, 930, 928, 925, 922, - 920, 917, 914, 911, 908, 906, 903, 900, 897, 894, - 890, 887, 884, 881, 878, 875, 871, 868, 865, 861, - 858, 854, 851, 847, 844, 840, 837, 833, 829, 826, - 822, 818, 814, 811, 807, 803, 799, 795, 791, 787, - 783, 779, 775, 771, 767, 762, 758, 754, 750, 745, - 741, 737, 732, 728, 724, 719, 715, 710, 706, 701, - 696, 692, 687, 683, 678, 673, 668, 664, 659, 654, - 649, 644, 639, 634, 629, 625, 620, 615, 609, 604, - 599, 594, 589, 584, 579, 574, 568, 563, 558, 553, - 547, 542, 537, 531, 526, 521, 515, 510, 504, 499, - 493, 488, 482, 477, 471, 466, 460, 454, 449, 443, - 437, 432, 426, 420, 414, 409, 403, 397, 391, 386, - 380, 374, 368, 362, 356, 350, 344, 339, 333, 327, - 321, 315, 309, 303, 297, 291, 285, 279, 273, 267, - 260, 254, 248, 242, 236, 230, 224, 218, 212, 205, - 199, 193, 187, 181, 175, 168, 162, 156, 150, 144, - 137, 131, 125, 119, 112, 106, 100, 94, 87, 81, - 75, 69, 62, 56, 50, 43, 37, 31, 25, 18, - 12, 6, 0, -6, -12, -18, -25, -31, -37, -43, - -50, -56, -62, -69, -75, -81, -87, -94, -100, -106, - -112, -119, -125, -131, -137, -144, -150, -156, -162, -168, - -175, -181, -187, -193, -199, -205, -212, -218, -224, -230, - -236, -242, -248, -254, -260, -267, -273, -279, -285, -291, - -297, -303, -309, -315, -321, -327, -333, -339, -344, -350, - -356, -362, -368, -374, -380, -386, -391, -397, -403, -409, - -414, -420, -426, -432, -437, -443, -449, -454, -460, -466, - -471, -477, -482, -488, -493, -499, -504, -510, -515, -521, - -526, -531, -537, -542, -547, -553, -558, -563, -568, -574, - -579, -584, -589, -594, -599, -604, -609, -615, -620, -625, - -629, -634, -639, -644, -649, -654, -659, -664, -668, -673, - -678, -683, -687, -692, -696, -701, -706, -710, -715, -719, - -724, -728, -732, -737, -741, -745, -750, -754, -758, -762, - -767, -771, -775, -779, -783, -787, -791, -795, -799, -803, - -807, -811, -814, -818, -822, -826, -829, -833, -837, -840, - -844, -847, -851, -854, -858, -861, -865, -868, -871, -875, - -878, -881, -884, -887, -890, -894, -897, -900, -903, -906, - -908, -911, -914, -917, -920, -922, -925, -928, -930, -933, - -936, -938, -941, -943, -946, -948, -950, -953, -955, -957, - -959, -962, -964, -966, -968, -970, -972, -974, -976, -978, - -979, -981, -983, -985, -986, -988, -990, -991, -993, -994, - -996, -997, -999, -1000, -1001, -1003, -1004, -1005, -1006, -1007, - -1008, -1009, -1010, -1011, -1012, -1013, -1014, -1015, -1016, -1017, - -1017, -1018, -1019, -1019, -1020, -1020, -1021, -1021, -1022, -1022, - -1022, -1023, -1023, -1023, -1023, -1023, -1023, -1023, -1024, -1023, - -1023, -1023, -1023, -1023, -1023, -1023, -1022, -1022, -1022, -1021, - -1021, -1020, -1020, -1019, -1019, -1018, -1017, -1017, -1016, -1015, - -1014, -1013, -1012, -1011, -1010, -1009, -1008, -1007, -1006, -1005, - -1004, -1003, -1001, -1000, -999, -997, -996, -994, -993, -991, - -990, -988, -986, -985, -983, -981, -979, -978, -976, -974, - -972, -970, -968, -966, -964, -962, -959, -957, -955, -953, - -950, -948, -946, -943, -941, -938, -936, -933, -930, -928, - -925, -922, -920, -917, -914, -911, -908, -906, -903, -900, - -897, -894, -890, -887, -884, -881, -878, -875, -871, -868, - -865, -861, -858, -854, -851, -847, -844, -840, -837, -833, - -829, -826, -822, -818, -814, -811, -807, -803, -799, -795, - -791, -787, -783, -779, -775, -771, -767, -762, -758, -754, - -750, -745, -741, -737, -732, -728, -724, -719, -715, -710, - -706, -701, -696, -692, -687, -683, -678, -673, -668, -664, - -659, -654, -649, -644, -639, -634, -629, -625, -620, -615, - -609, -604, -599, -594, -589, -584, -579, -574, -568, -563, - -558, -553, -547, -542, -537, -531, -526, -521, -515, -510, - -504, -499, -493, -488, -482, -477, -471, -466, -460, -454, - -449, -443, -437, -432, -426, -420, -414, -409, -403, -397, - -391, -386, -380, -374, -368, -362, -356, -350, -344, -339, - -333, -327, -321, -315, -309, -303, -297, -291, -285, -279, - -273, -267, -260, -254, -248, -242, -236, -230, -224, -218, - -212, -205, -199, -193, -187, -181, -175, -168, -162, -156, - -150, -144, -137, -131, -125, -119, -112, -106, -100, -94, - -87, -81, -75, -69, -62, -56, -50, -43, -37, -31, - -25, -18, -12, -6, + 0, 201, 402, 603, 804, 1005, 1206, 1406, 1607, 1808, + 2009, 2209, 2410, 2610, 2811, 3011, 3211, 3411, 3611, 3811, + 4011, 4210, 4409, 4609, 4807, 5006, 5205, 5403, 5601, 5799, + 5997, 6195, 6392, 6589, 6786, 6983, 7179, 7375, 7571, 7766, + 7961, 8156, 8351, 8545, 8739, 8933, 9126, 9319, 9511, 9704, + 9895, 10087, 10278, 10469, 10659, 10849, 11039, 11228, 11416, 11605, + 11792, 11980, 12167, 12353, 12539, 12725, 12910, 13094, 13278, 13462, + 13645, 13827, 14009, 14191, 14372, 14552, 14732, 14911, 15090, 15268, + 15446, 15623, 15799, 15975, 16151, 16325, 16499, 16673, 16845, 17017, + 17189, 17360, 17530, 17700, 17868, 18037, 18204, 18371, 18537, 18703, + 18867, 19031, 19195, 19357, 19519, 19680, 19841, 20000, 20159, 20317, + 20475, 20631, 20787, 20942, 21096, 21250, 21402, 21554, 21705, 21855, + 22005, 22153, 22301, 22448, 22594, 22739, 22884, 23027, 23170, 23311, + 23452, 23592, 23731, 23869, 24007, 24143, 24279, 24413, 24547, 24680, + 24811, 24942, 25072, 25201, 25329, 25456, 25582, 25707, 25832, 25955, + 26077, 26198, 26319, 26438, 26556, 26673, 26790, 26905, 27019, 27132, + 27245, 27356, 27466, 27575, 27683, 27790, 27896, 28001, 28105, 28208, + 28310, 28410, 28510, 28609, 28706, 28803, 28898, 28992, 29085, 29177, + 29268, 29358, 29447, 29534, 29621, 29706, 29791, 29874, 29956, 30037, + 30117, 30195, 30273, 30349, 30424, 30498, 30571, 30643, 30714, 30783, + 30852, 30919, 30985, 31050, 31113, 31176, 31237, 31297, 31356, 31414, + 31470, 31526, 31580, 31633, 31685, 31736, 31785, 31833, 31880, 31926, + 31971, 32014, 32057, 32098, 32137, 32176, 32213, 32250, 32285, 32318, + 32351, 32382, 32412, 32441, 32469, 32495, 32521, 32545, 32567, 32589, + 32609, 32628, 32646, 32663, 32678, 32692, 32705, 32717, 32728, 32737, + 32745, 32752, 32757, 32761, 32765, 32766, 32767, 32766, 32765, 32761, + 32757, 32752, 32745, 32737, 32728, 32717, 32705, 32692, 32678, 32663, + 32646, 32628, 32609, 32589, 32567, 32545, 32521, 32495, 32469, 32441, + 32412, 32382, 32351, 32318, 32285, 32250, 32213, 32176, 32137, 32098, + 32057, 32014, 31971, 31926, 31880, 31833, 31785, 31736, 31685, 31633, + 31580, 31526, 31470, 31414, 31356, 31297, 31237, 31176, 31113, 31050, + 30985, 30919, 30852, 30783, 30714, 30643, 30571, 30498, 30424, 30349, + 30273, 30195, 30117, 30037, 29956, 29874, 29791, 29706, 29621, 29534, + 29447, 29358, 29268, 29177, 29085, 28992, 28898, 28803, 28706, 28609, + 28510, 28410, 28310, 28208, 28105, 28001, 27896, 27790, 27683, 27575, + 27466, 27356, 27245, 27132, 27019, 26905, 26790, 26673, 26556, 26438, + 26319, 26198, 26077, 25955, 25832, 25707, 25582, 25456, 25329, 25201, + 25072, 24942, 24811, 24680, 24547, 24413, 24279, 24143, 24007, 23869, + 23731, 23592, 23452, 23311, 23170, 23027, 22884, 22739, 22594, 22448, + 22301, 22153, 22005, 21855, 21705, 21554, 21402, 21250, 21096, 20942, + 20787, 20631, 20475, 20317, 20159, 20000, 19841, 19680, 19519, 19357, + 19195, 19031, 18867, 18703, 18537, 18371, 18204, 18037, 17868, 17700, + 17530, 17360, 17189, 17017, 16845, 16673, 16499, 16325, 16151, 15975, + 15799, 15623, 15446, 15268, 15090, 14911, 14732, 14552, 14372, 14191, + 14009, 13827, 13645, 13462, 13278, 13094, 12910, 12725, 12539, 12353, + 12167, 11980, 11792, 11605, 11416, 11228, 11039, 10849, 10659, 10469, + 10278, 10087, 9895, 9704, 9511, 9319, 9126, 8933, 8739, 8545, + 8351, 8156, 7961, 7766, 7571, 7375, 7179, 6983, 6786, 6589, + 6392, 6195, 5997, 5799, 5601, 5403, 5205, 5006, 4807, 4609, + 4409, 4210, 4011, 3811, 3611, 3411, 3211, 3011, 2811, 2610, + 2410, 2209, 2009, 1808, 1607, 1406, 1206, 1005, 804, 603, + 402, 201, 0, -201, -402, -603, -804, -1005, -1206, -1406, + -1607, -1808, -2009, -2209, -2410, -2610, -2811, -3011, -3211, -3411, + -3611, -3811, -4011, -4210, -4409, -4609, -4807, -5006, -5205, -5403, + -5601, -5799, -5997, -6195, -6392, -6589, -6786, -6983, -7179, -7375, + -7571, -7766, -7961, -8156, -8351, -8545, -8739, -8933, -9126, -9319, + -9511, -9704, -9895, -10087, -10278, -10469, -10659, -10849, -11039, -11228, + -11416, -11605, -11792, -11980, -12167, -12353, -12539, -12725, -12910, -13094, + -13278, -13462, -13645, -13827, -14009, -14191, -14372, -14552, -14732, -14911, + -15090, -15268, -15446, -15623, -15799, -15975, -16151, -16325, -16499, -16673, + -16845, -17017, -17189, -17360, -17530, -17700, -17868, -18037, -18204, -18371, + -18537, -18703, -18867, -19031, -19195, -19357, -19519, -19680, -19841, -20000, + -20159, -20317, -20475, -20631, -20787, -20942, -21096, -21250, -21402, -21554, + -21705, -21855, -22005, -22153, -22301, -22448, -22594, -22739, -22884, -23027, + -23170, -23311, -23452, -23592, -23731, -23869, -24007, -24143, -24279, -24413, + -24547, -24680, -24811, -24942, -25072, -25201, -25329, -25456, -25582, -25707, + -25832, -25955, -26077, -26198, -26319, -26438, -26556, -26673, -26790, -26905, + -27019, -27132, -27245, -27356, -27466, -27575, -27683, -27790, -27896, -28001, + -28105, -28208, -28310, -28410, -28510, -28609, -28706, -28803, -28898, -28992, + -29085, -29177, -29268, -29358, -29447, -29534, -29621, -29706, -29791, -29874, + -29956, -30037, -30117, -30195, -30273, -30349, -30424, -30498, -30571, -30643, + -30714, -30783, -30852, -30919, -30985, -31050, -31113, -31176, -31237, -31297, + -31356, -31414, -31470, -31526, -31580, -31633, -31685, -31736, -31785, -31833, + -31880, -31926, -31971, -32014, -32057, -32098, -32137, -32176, -32213, -32250, + -32285, -32318, -32351, -32382, -32412, -32441, -32469, -32495, -32521, -32545, + -32567, -32589, -32609, -32628, -32646, -32663, -32678, -32692, -32705, -32717, + -32728, -32737, -32745, -32752, -32757, -32761, -32765, -32766, -32767, -32766, + -32765, -32761, -32757, -32752, -32745, -32737, -32728, -32717, -32705, -32692, + -32678, -32663, -32646, -32628, -32609, -32589, -32567, -32545, -32521, -32495, + -32469, -32441, -32412, -32382, -32351, -32318, -32285, -32250, -32213, -32176, + -32137, -32098, -32057, -32014, -31971, -31926, -31880, -31833, -31785, -31736, + -31685, -31633, -31580, -31526, -31470, -31414, -31356, -31297, -31237, -31176, + -31113, -31050, -30985, -30919, -30852, -30783, -30714, -30643, -30571, -30498, + -30424, -30349, -30273, -30195, -30117, -30037, -29956, -29874, -29791, -29706, + -29621, -29534, -29447, -29358, -29268, -29177, -29085, -28992, -28898, -28803, + -28706, -28609, -28510, -28410, -28310, -28208, -28105, -28001, -27896, -27790, + -27683, -27575, -27466, -27356, -27245, -27132, -27019, -26905, -26790, -26673, + -26556, -26438, -26319, -26198, -26077, -25955, -25832, -25707, -25582, -25456, + -25329, -25201, -25072, -24942, -24811, -24680, -24547, -24413, -24279, -24143, + -24007, -23869, -23731, -23592, -23452, -23311, -23170, -23027, -22884, -22739, + -22594, -22448, -22301, -22153, -22005, -21855, -21705, -21554, -21402, -21250, + -21096, -20942, -20787, -20631, -20475, -20317, -20159, -20000, -19841, -19680, + -19519, -19357, -19195, -19031, -18867, -18703, -18537, -18371, -18204, -18037, + -17868, -17700, -17530, -17360, -17189, -17017, -16845, -16673, -16499, -16325, + -16151, -15975, -15799, -15623, -15446, -15268, -15090, -14911, -14732, -14552, + -14372, -14191, -14009, -13827, -13645, -13462, -13278, -13094, -12910, -12725, + -12539, -12353, -12167, -11980, -11792, -11605, -11416, -11228, -11039, -10849, + -10659, -10469, -10278, -10087, -9895, -9704, -9511, -9319, -9126, -8933, + -8739, -8545, -8351, -8156, -7961, -7766, -7571, -7375, -7179, -6983, + -6786, -6589, -6392, -6195, -5997, -5799, -5601, -5403, -5205, -5006, + -4807, -4609, -4409, -4210, -4011, -3811, -3611, -3411, -3211, -3011, + -2811, -2610, -2410, -2209, -2009, -1808, -1607, -1406, -1206, -1005, + -804, -603, -402, -201, }; -const unsigned int toneVolumes[] = { 2, 4, 8, 12, 16 }; - #if defined(SDCARD) const char * audioFilenames[] = { "tada", @@ -541,6 +539,8 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u } #endif +const unsigned int toneVolumes[] = { 2, 4, 8, 12, 16 }; + int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) { AudioFragment & fragment = context.fragment; @@ -553,6 +553,7 @@ int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, if (fragment.tone.freq) { context.state.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; + context.state.tone.volume = (fragment.tone.freq * fragment.tone.freq * 32) / (110 * 110 * toneVolumes[2+volume]); if (fragment.tone.freqIncr) fragment.tone.freq += AUDIO_BUFFER_DURATION * fragment.tone.freqIncr; else @@ -577,7 +578,7 @@ int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, } for (int i=0; idata[i], sample, fade); toneIdx += context.state.tone.step; if ((unsigned int)toneIdx >= DIM(sineValues)) diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index fadceeb59..6191da79f 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -106,7 +106,7 @@ class AudioContext { struct { double step; double idx; - double volume; + int volume; } tone; } state; From 7164375b7598b45c7e6449d6a85c36c699d8c956 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 17 Feb 2014 15:27:15 +0100 Subject: [PATCH 03/22] 2 harmonics added to the sine wave --- radio/src/audio_arm.cpp | 206 ++++++++++++++++++++-------------------- radio/util/sinus.py | 14 +++ 2 files changed, 117 insertions(+), 103 deletions(-) create mode 100644 radio/util/sinus.py diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 45b53ba67..55c216afa 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,109 +41,109 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 201, 402, 603, 804, 1005, 1206, 1406, 1607, 1808, - 2009, 2209, 2410, 2610, 2811, 3011, 3211, 3411, 3611, 3811, - 4011, 4210, 4409, 4609, 4807, 5006, 5205, 5403, 5601, 5799, - 5997, 6195, 6392, 6589, 6786, 6983, 7179, 7375, 7571, 7766, - 7961, 8156, 8351, 8545, 8739, 8933, 9126, 9319, 9511, 9704, - 9895, 10087, 10278, 10469, 10659, 10849, 11039, 11228, 11416, 11605, - 11792, 11980, 12167, 12353, 12539, 12725, 12910, 13094, 13278, 13462, - 13645, 13827, 14009, 14191, 14372, 14552, 14732, 14911, 15090, 15268, - 15446, 15623, 15799, 15975, 16151, 16325, 16499, 16673, 16845, 17017, - 17189, 17360, 17530, 17700, 17868, 18037, 18204, 18371, 18537, 18703, - 18867, 19031, 19195, 19357, 19519, 19680, 19841, 20000, 20159, 20317, - 20475, 20631, 20787, 20942, 21096, 21250, 21402, 21554, 21705, 21855, - 22005, 22153, 22301, 22448, 22594, 22739, 22884, 23027, 23170, 23311, - 23452, 23592, 23731, 23869, 24007, 24143, 24279, 24413, 24547, 24680, - 24811, 24942, 25072, 25201, 25329, 25456, 25582, 25707, 25832, 25955, - 26077, 26198, 26319, 26438, 26556, 26673, 26790, 26905, 27019, 27132, - 27245, 27356, 27466, 27575, 27683, 27790, 27896, 28001, 28105, 28208, - 28310, 28410, 28510, 28609, 28706, 28803, 28898, 28992, 29085, 29177, - 29268, 29358, 29447, 29534, 29621, 29706, 29791, 29874, 29956, 30037, - 30117, 30195, 30273, 30349, 30424, 30498, 30571, 30643, 30714, 30783, - 30852, 30919, 30985, 31050, 31113, 31176, 31237, 31297, 31356, 31414, - 31470, 31526, 31580, 31633, 31685, 31736, 31785, 31833, 31880, 31926, - 31971, 32014, 32057, 32098, 32137, 32176, 32213, 32250, 32285, 32318, - 32351, 32382, 32412, 32441, 32469, 32495, 32521, 32545, 32567, 32589, - 32609, 32628, 32646, 32663, 32678, 32692, 32705, 32717, 32728, 32737, - 32745, 32752, 32757, 32761, 32765, 32766, 32767, 32766, 32765, 32761, - 32757, 32752, 32745, 32737, 32728, 32717, 32705, 32692, 32678, 32663, - 32646, 32628, 32609, 32589, 32567, 32545, 32521, 32495, 32469, 32441, - 32412, 32382, 32351, 32318, 32285, 32250, 32213, 32176, 32137, 32098, - 32057, 32014, 31971, 31926, 31880, 31833, 31785, 31736, 31685, 31633, - 31580, 31526, 31470, 31414, 31356, 31297, 31237, 31176, 31113, 31050, - 30985, 30919, 30852, 30783, 30714, 30643, 30571, 30498, 30424, 30349, - 30273, 30195, 30117, 30037, 29956, 29874, 29791, 29706, 29621, 29534, - 29447, 29358, 29268, 29177, 29085, 28992, 28898, 28803, 28706, 28609, - 28510, 28410, 28310, 28208, 28105, 28001, 27896, 27790, 27683, 27575, - 27466, 27356, 27245, 27132, 27019, 26905, 26790, 26673, 26556, 26438, - 26319, 26198, 26077, 25955, 25832, 25707, 25582, 25456, 25329, 25201, - 25072, 24942, 24811, 24680, 24547, 24413, 24279, 24143, 24007, 23869, - 23731, 23592, 23452, 23311, 23170, 23027, 22884, 22739, 22594, 22448, - 22301, 22153, 22005, 21855, 21705, 21554, 21402, 21250, 21096, 20942, - 20787, 20631, 20475, 20317, 20159, 20000, 19841, 19680, 19519, 19357, - 19195, 19031, 18867, 18703, 18537, 18371, 18204, 18037, 17868, 17700, - 17530, 17360, 17189, 17017, 16845, 16673, 16499, 16325, 16151, 15975, - 15799, 15623, 15446, 15268, 15090, 14911, 14732, 14552, 14372, 14191, - 14009, 13827, 13645, 13462, 13278, 13094, 12910, 12725, 12539, 12353, - 12167, 11980, 11792, 11605, 11416, 11228, 11039, 10849, 10659, 10469, - 10278, 10087, 9895, 9704, 9511, 9319, 9126, 8933, 8739, 8545, - 8351, 8156, 7961, 7766, 7571, 7375, 7179, 6983, 6786, 6589, - 6392, 6195, 5997, 5799, 5601, 5403, 5205, 5006, 4807, 4609, - 4409, 4210, 4011, 3811, 3611, 3411, 3211, 3011, 2811, 2610, - 2410, 2209, 2009, 1808, 1607, 1406, 1206, 1005, 804, 603, - 402, 201, 0, -201, -402, -603, -804, -1005, -1206, -1406, - -1607, -1808, -2009, -2209, -2410, -2610, -2811, -3011, -3211, -3411, - -3611, -3811, -4011, -4210, -4409, -4609, -4807, -5006, -5205, -5403, - -5601, -5799, -5997, -6195, -6392, -6589, -6786, -6983, -7179, -7375, - -7571, -7766, -7961, -8156, -8351, -8545, -8739, -8933, -9126, -9319, - -9511, -9704, -9895, -10087, -10278, -10469, -10659, -10849, -11039, -11228, - -11416, -11605, -11792, -11980, -12167, -12353, -12539, -12725, -12910, -13094, - -13278, -13462, -13645, -13827, -14009, -14191, -14372, -14552, -14732, -14911, - -15090, -15268, -15446, -15623, -15799, -15975, -16151, -16325, -16499, -16673, - -16845, -17017, -17189, -17360, -17530, -17700, -17868, -18037, -18204, -18371, - -18537, -18703, -18867, -19031, -19195, -19357, -19519, -19680, -19841, -20000, - -20159, -20317, -20475, -20631, -20787, -20942, -21096, -21250, -21402, -21554, - -21705, -21855, -22005, -22153, -22301, -22448, -22594, -22739, -22884, -23027, - -23170, -23311, -23452, -23592, -23731, -23869, -24007, -24143, -24279, -24413, - -24547, -24680, -24811, -24942, -25072, -25201, -25329, -25456, -25582, -25707, - -25832, -25955, -26077, -26198, -26319, -26438, -26556, -26673, -26790, -26905, - -27019, -27132, -27245, -27356, -27466, -27575, -27683, -27790, -27896, -28001, - -28105, -28208, -28310, -28410, -28510, -28609, -28706, -28803, -28898, -28992, - -29085, -29177, -29268, -29358, -29447, -29534, -29621, -29706, -29791, -29874, - -29956, -30037, -30117, -30195, -30273, -30349, -30424, -30498, -30571, -30643, - -30714, -30783, -30852, -30919, -30985, -31050, -31113, -31176, -31237, -31297, - -31356, -31414, -31470, -31526, -31580, -31633, -31685, -31736, -31785, -31833, - -31880, -31926, -31971, -32014, -32057, -32098, -32137, -32176, -32213, -32250, - -32285, -32318, -32351, -32382, -32412, -32441, -32469, -32495, -32521, -32545, - -32567, -32589, -32609, -32628, -32646, -32663, -32678, -32692, -32705, -32717, - -32728, -32737, -32745, -32752, -32757, -32761, -32765, -32766, -32767, -32766, - -32765, -32761, -32757, -32752, -32745, -32737, -32728, -32717, -32705, -32692, - -32678, -32663, -32646, -32628, -32609, -32589, -32567, -32545, -32521, -32495, - -32469, -32441, -32412, -32382, -32351, -32318, -32285, -32250, -32213, -32176, - -32137, -32098, -32057, -32014, -31971, -31926, -31880, -31833, -31785, -31736, - -31685, -31633, -31580, -31526, -31470, -31414, -31356, -31297, -31237, -31176, - -31113, -31050, -30985, -30919, -30852, -30783, -30714, -30643, -30571, -30498, - -30424, -30349, -30273, -30195, -30117, -30037, -29956, -29874, -29791, -29706, - -29621, -29534, -29447, -29358, -29268, -29177, -29085, -28992, -28898, -28803, - -28706, -28609, -28510, -28410, -28310, -28208, -28105, -28001, -27896, -27790, - -27683, -27575, -27466, -27356, -27245, -27132, -27019, -26905, -26790, -26673, - -26556, -26438, -26319, -26198, -26077, -25955, -25832, -25707, -25582, -25456, - -25329, -25201, -25072, -24942, -24811, -24680, -24547, -24413, -24279, -24143, - -24007, -23869, -23731, -23592, -23452, -23311, -23170, -23027, -22884, -22739, - -22594, -22448, -22301, -22153, -22005, -21855, -21705, -21554, -21402, -21250, - -21096, -20942, -20787, -20631, -20475, -20317, -20159, -20000, -19841, -19680, - -19519, -19357, -19195, -19031, -18867, -18703, -18537, -18371, -18204, -18037, - -17868, -17700, -17530, -17360, -17189, -17017, -16845, -16673, -16499, -16325, - -16151, -15975, -15799, -15623, -15446, -15268, -15090, -14911, -14732, -14552, - -14372, -14191, -14009, -13827, -13645, -13462, -13278, -13094, -12910, -12725, - -12539, -12353, -12167, -11980, -11792, -11605, -11416, -11228, -11039, -10849, - -10659, -10469, -10278, -10087, -9895, -9704, -9511, -9319, -9126, -8933, - -8739, -8545, -8351, -8156, -7961, -7766, -7571, -7375, -7179, -6983, - -6786, -6589, -6392, -6195, -5997, -5799, -5601, -5403, -5205, -5006, - -4807, -4609, -4409, -4210, -4011, -3811, -3611, -3411, -3211, -3011, - -2811, -2610, -2410, -2209, -2009, -1808, -1607, -1406, -1206, -1005, - -804, -603, -402, -201, + 0, 207, 414, 621, 829, 1036, 1243, 1450, 1657, 1864, + 2071, 2278, 2485, 2691, 2898, 3104, 3310, 3516, 3722, 3928, + 4133, 4338, 4543, 4748, 4953, 5157, 5361, 5565, 5769, 5972, + 6175, 6378, 6580, 6783, 6984, 7186, 7387, 7588, 7788, 7988, + 8188, 8387, 8586, 8785, 8983, 9180, 9378, 9574, 9771, 9967, + 10162, 10357, 10551, 10745, 10939, 11132, 11324, 11516, 11707, 11898, + 12088, 12278, 12467, 12656, 12844, 13031, 13218, 13404, 13589, 13774, + 13959, 14142, 14325, 14507, 14689, 14870, 15050, 15230, 15409, 15587, + 15764, 15941, 16117, 16293, 16467, 16641, 16814, 16986, 17158, 17329, + 17498, 17668, 17836, 18004, 18170, 18336, 18502, 18666, 18829, 18992, + 19154, 19315, 19475, 19634, 19793, 19950, 20107, 20262, 20417, 20571, + 20724, 20876, 21028, 21178, 21327, 21476, 21623, 21770, 21916, 22060, + 22204, 22347, 22489, 22630, 22770, 22909, 23047, 23184, 23320, 23455, + 23589, 23722, 23854, 23985, 24115, 24244, 24372, 24499, 24624, 24749, + 24873, 24996, 25118, 25239, 25358, 25477, 25595, 25711, 25827, 25941, + 26054, 26167, 26278, 26388, 26497, 26605, 26712, 26818, 26923, 27026, + 27129, 27231, 27331, 27430, 27529, 27626, 27722, 27817, 27910, 28003, + 28095, 28185, 28275, 28363, 28450, 28536, 28621, 28705, 28788, 28869, + 28950, 29029, 29107, 29184, 29260, 29335, 29409, 29481, 29553, 29623, + 29692, 29760, 29827, 29893, 29958, 30021, 30084, 30145, 30205, 30264, + 30322, 30378, 30434, 30488, 30542, 30594, 30645, 30694, 30743, 30791, + 30837, 30882, 30927, 30970, 31011, 31052, 31092, 31130, 31167, 31204, + 31239, 31272, 31305, 31337, 31367, 31397, 31425, 31452, 31478, 31502, + 31526, 31549, 31570, 31590, 31609, 31627, 31644, 31660, 31674, 31688, + 31700, 31711, 31721, 31730, 31738, 31744, 31750, 31754, 31757, 31760, + 31761, 31760, 31759, 31757, 31753, 31749, 31743, 31736, 31728, 31719, + 31709, 31698, 31685, 31672, 31657, 31641, 31624, 31606, 31587, 31567, + 31546, 31524, 31500, 31475, 31450, 31423, 31395, 31366, 31336, 31305, + 31273, 31239, 31205, 31169, 31133, 31095, 31056, 31016, 30975, 30933, + 30890, 30846, 30801, 30754, 30707, 30659, 30609, 30558, 30507, 30454, + 30400, 30345, 30289, 30232, 30174, 30115, 30055, 29994, 29932, 29868, + 29804, 29738, 29672, 29605, 29536, 29466, 29396, 29324, 29252, 29178, + 29103, 29027, 28951, 28873, 28794, 28714, 28633, 28552, 28469, 28385, + 28300, 28214, 28127, 28039, 27950, 27861, 27770, 27678, 27585, 27491, + 27396, 27301, 27204, 27106, 27007, 26908, 26807, 26705, 26603, 26499, + 26395, 26289, 26183, 26076, 25967, 25858, 25748, 25637, 25525, 25412, + 25298, 25183, 25067, 24951, 24833, 24715, 24595, 24475, 24354, 24232, + 24109, 23985, 23860, 23735, 23608, 23481, 23353, 23223, 23093, 22963, + 22831, 22698, 22565, 22431, 22296, 22160, 22023, 21885, 21747, 21608, + 21468, 21327, 21185, 21043, 20899, 20755, 20611, 20465, 20319, 20171, + 20023, 19875, 19725, 19575, 19424, 19272, 19120, 18967, 18813, 18658, + 18503, 18347, 18190, 18032, 17874, 17715, 17556, 17395, 17234, 17073, + 16910, 16747, 16584, 16420, 16255, 16089, 15923, 15756, 15589, 15421, + 15252, 15083, 14913, 14743, 14572, 14400, 14228, 14055, 13882, 13708, + 13534, 13359, 13183, 13007, 12831, 12654, 12476, 12298, 12120, 11941, + 11761, 11581, 11401, 11220, 11039, 10857, 10675, 10492, 10309, 10125, + 9941, 9757, 9572, 9387, 9202, 9016, 8830, 8643, 8456, 8269, + 8081, 7894, 7705, 7517, 7328, 7139, 6949, 6759, 6569, 6379, + 6189, 5998, 5807, 5615, 5424, 5232, 5040, 4848, 4656, 4463, + 4270, 4077, 3884, 3691, 3498, 3304, 3110, 2917, 2723, 2529, + 2334, 2140, 1946, 1752, 1557, 1362, 1168, 973, 779, 584, + 389, 194, 0, -194, -389, -584, -779, -973, -1168, -1362, + -1557, -1752, -1946, -2140, -2334, -2529, -2723, -2917, -3110, -3304, + -3498, -3691, -3884, -4077, -4270, -4463, -4656, -4848, -5040, -5232, + -5424, -5615, -5807, -5998, -6189, -6379, -6569, -6759, -6949, -7139, + -7328, -7517, -7705, -7894, -8081, -8269, -8456, -8643, -8830, -9016, + -9202, -9387, -9572, -9757, -9941, -10125, -10309, -10492, -10675, -10857, + -11039, -11220, -11401, -11581, -11761, -11941, -12120, -12298, -12476, -12654, + -12831, -13007, -13183, -13359, -13534, -13708, -13882, -14055, -14228, -14400, + -14572, -14743, -14913, -15083, -15252, -15421, -15589, -15756, -15923, -16089, + -16255, -16420, -16584, -16747, -16910, -17073, -17234, -17395, -17556, -17715, + -17874, -18032, -18190, -18347, -18503, -18658, -18813, -18967, -19120, -19272, + -19424, -19575, -19725, -19875, -20023, -20171, -20319, -20465, -20611, -20755, + -20899, -21043, -21185, -21327, -21468, -21608, -21747, -21885, -22023, -22160, + -22296, -22431, -22565, -22698, -22831, -22963, -23093, -23223, -23353, -23481, + -23608, -23735, -23860, -23985, -24109, -24232, -24354, -24475, -24595, -24715, + -24833, -24951, -25067, -25183, -25298, -25412, -25525, -25637, -25748, -25858, + -25967, -26076, -26183, -26289, -26395, -26499, -26603, -26705, -26807, -26908, + -27007, -27106, -27204, -27301, -27396, -27491, -27585, -27678, -27770, -27861, + -27950, -28039, -28127, -28214, -28300, -28385, -28469, -28552, -28633, -28714, + -28794, -28873, -28951, -29027, -29103, -29178, -29252, -29324, -29396, -29466, + -29536, -29605, -29672, -29738, -29804, -29868, -29932, -29994, -30055, -30115, + -30174, -30232, -30289, -30345, -30400, -30454, -30507, -30558, -30609, -30659, + -30707, -30754, -30801, -30846, -30890, -30933, -30975, -31016, -31056, -31095, + -31133, -31169, -31205, -31239, -31273, -31305, -31336, -31366, -31395, -31423, + -31450, -31475, -31500, -31524, -31546, -31567, -31587, -31606, -31624, -31641, + -31657, -31672, -31685, -31698, -31709, -31719, -31728, -31736, -31743, -31749, + -31753, -31757, -31759, -31760, -31761, -31760, -31757, -31754, -31750, -31744, + -31738, -31730, -31721, -31711, -31700, -31688, -31674, -31660, -31644, -31627, + -31609, -31590, -31570, -31549, -31526, -31502, -31478, -31452, -31425, -31397, + -31367, -31337, -31305, -31272, -31239, -31204, -31167, -31130, -31092, -31052, + -31011, -30970, -30927, -30882, -30837, -30791, -30743, -30694, -30645, -30594, + -30542, -30488, -30434, -30378, -30322, -30264, -30205, -30145, -30084, -30021, + -29958, -29893, -29827, -29760, -29692, -29623, -29553, -29481, -29409, -29335, + -29260, -29184, -29107, -29029, -28950, -28869, -28788, -28705, -28621, -28536, + -28450, -28363, -28275, -28185, -28095, -28003, -27910, -27817, -27722, -27626, + -27529, -27430, -27331, -27231, -27129, -27026, -26923, -26818, -26712, -26605, + -26497, -26388, -26278, -26167, -26054, -25941, -25827, -25711, -25595, -25477, + -25358, -25239, -25118, -24996, -24873, -24749, -24624, -24499, -24372, -24244, + -24115, -23985, -23854, -23722, -23589, -23455, -23320, -23184, -23047, -22909, + -22770, -22630, -22489, -22347, -22204, -22060, -21916, -21770, -21623, -21476, + -21327, -21178, -21028, -20876, -20724, -20571, -20417, -20262, -20107, -19950, + -19793, -19634, -19475, -19315, -19154, -18992, -18829, -18666, -18502, -18336, + -18170, -18004, -17836, -17668, -17498, -17329, -17158, -16986, -16814, -16641, + -16467, -16293, -16117, -15941, -15764, -15587, -15409, -15230, -15050, -14870, + -14689, -14507, -14325, -14142, -13959, -13774, -13589, -13404, -13218, -13031, + -12844, -12656, -12467, -12278, -12088, -11898, -11707, -11516, -11324, -11132, + -10939, -10745, -10551, -10357, -10162, -9967, -9771, -9574, -9378, -9180, + -8983, -8785, -8586, -8387, -8188, -7988, -7788, -7588, -7387, -7186, + -6984, -6783, -6580, -6378, -6175, -5972, -5769, -5565, -5361, -5157, + -4953, -4748, -4543, -4338, -4133, -3928, -3722, -3516, -3310, -3104, + -2898, -2691, -2485, -2278, -2071, -1864, -1657, -1450, -1243, -1036, + -829, -621, -414, -207, }; #if defined(SDCARD) diff --git a/radio/util/sinus.py b/radio/util/sinus.py new file mode 100644 index 000000000..0eeb135f1 --- /dev/null +++ b/radio/util/sinus.py @@ -0,0 +1,14 @@ +#!/bin/env python + +import math + +samples = 1024 +amplitudes = (63999, 1024, 512) + +for i in range(samples): + sample = 0.0 + for harmonic, amplitude in enumerate(amplitudes): + sample += math.sin(math.pi*2*i*(harmonic+1)/samples) * amplitude / 2 + print "%d," % int(sample), + if i % 10 == 9: + print From 967af60cbe3eb4198caeb93651f3d78a037ff31e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 17 Feb 2014 23:26:12 +0100 Subject: [PATCH 04/22] Vario improvements --- companion/src/eeprominterface.h | 2 + .../src/firmwares/opentx/opentxeeprom.cpp | 2 + radio/src/audio_arm.cpp | 212 +++++++++--------- radio/src/audio_arm.h | 4 +- radio/src/gui/menu_general.cpp | 14 +- radio/src/maths.cpp | 79 ++++--- radio/src/myeeprom.h | 2 + radio/src/opentx.cpp | 6 +- radio/src/opentx.h | 4 + radio/src/telemetry/frsky_sport.cpp | 4 + radio/util/sinus.py | 4 +- 11 files changed, 182 insertions(+), 151 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 60f99b41a..7138836c1 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -462,6 +462,8 @@ class GeneralSettings { int beepVolume; int wavVolume; int varioVolume; + int varioPitch; + int varioRange; int backgroundVolume; unsigned int mavbaud; unsigned int switchUnlockStates; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index 92b5c4b3e..ca70d75f1 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2370,6 +2370,8 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE internalField.Append(new SignedField<8>(generalData.beepVolume)); internalField.Append(new SignedField<8>(generalData.wavVolume)); internalField.Append(new SignedField<8>(generalData.varioVolume)); + internalField.Append(new SignedField<8>(generalData.varioPitch)); + internalField.Append(new SignedField<8>(generalData.varioRange)); internalField.Append(new SignedField<8>(generalData.backgroundVolume)); } if (IS_TARANIS(board) && version >= 216) { diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 55c216afa..371f69ea7 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,109 +41,109 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 207, 414, 621, 829, 1036, 1243, 1450, 1657, 1864, - 2071, 2278, 2485, 2691, 2898, 3104, 3310, 3516, 3722, 3928, - 4133, 4338, 4543, 4748, 4953, 5157, 5361, 5565, 5769, 5972, - 6175, 6378, 6580, 6783, 6984, 7186, 7387, 7588, 7788, 7988, - 8188, 8387, 8586, 8785, 8983, 9180, 9378, 9574, 9771, 9967, - 10162, 10357, 10551, 10745, 10939, 11132, 11324, 11516, 11707, 11898, - 12088, 12278, 12467, 12656, 12844, 13031, 13218, 13404, 13589, 13774, - 13959, 14142, 14325, 14507, 14689, 14870, 15050, 15230, 15409, 15587, - 15764, 15941, 16117, 16293, 16467, 16641, 16814, 16986, 17158, 17329, - 17498, 17668, 17836, 18004, 18170, 18336, 18502, 18666, 18829, 18992, - 19154, 19315, 19475, 19634, 19793, 19950, 20107, 20262, 20417, 20571, - 20724, 20876, 21028, 21178, 21327, 21476, 21623, 21770, 21916, 22060, - 22204, 22347, 22489, 22630, 22770, 22909, 23047, 23184, 23320, 23455, - 23589, 23722, 23854, 23985, 24115, 24244, 24372, 24499, 24624, 24749, - 24873, 24996, 25118, 25239, 25358, 25477, 25595, 25711, 25827, 25941, - 26054, 26167, 26278, 26388, 26497, 26605, 26712, 26818, 26923, 27026, - 27129, 27231, 27331, 27430, 27529, 27626, 27722, 27817, 27910, 28003, - 28095, 28185, 28275, 28363, 28450, 28536, 28621, 28705, 28788, 28869, - 28950, 29029, 29107, 29184, 29260, 29335, 29409, 29481, 29553, 29623, - 29692, 29760, 29827, 29893, 29958, 30021, 30084, 30145, 30205, 30264, - 30322, 30378, 30434, 30488, 30542, 30594, 30645, 30694, 30743, 30791, - 30837, 30882, 30927, 30970, 31011, 31052, 31092, 31130, 31167, 31204, - 31239, 31272, 31305, 31337, 31367, 31397, 31425, 31452, 31478, 31502, - 31526, 31549, 31570, 31590, 31609, 31627, 31644, 31660, 31674, 31688, - 31700, 31711, 31721, 31730, 31738, 31744, 31750, 31754, 31757, 31760, - 31761, 31760, 31759, 31757, 31753, 31749, 31743, 31736, 31728, 31719, - 31709, 31698, 31685, 31672, 31657, 31641, 31624, 31606, 31587, 31567, - 31546, 31524, 31500, 31475, 31450, 31423, 31395, 31366, 31336, 31305, - 31273, 31239, 31205, 31169, 31133, 31095, 31056, 31016, 30975, 30933, - 30890, 30846, 30801, 30754, 30707, 30659, 30609, 30558, 30507, 30454, - 30400, 30345, 30289, 30232, 30174, 30115, 30055, 29994, 29932, 29868, - 29804, 29738, 29672, 29605, 29536, 29466, 29396, 29324, 29252, 29178, - 29103, 29027, 28951, 28873, 28794, 28714, 28633, 28552, 28469, 28385, - 28300, 28214, 28127, 28039, 27950, 27861, 27770, 27678, 27585, 27491, - 27396, 27301, 27204, 27106, 27007, 26908, 26807, 26705, 26603, 26499, - 26395, 26289, 26183, 26076, 25967, 25858, 25748, 25637, 25525, 25412, - 25298, 25183, 25067, 24951, 24833, 24715, 24595, 24475, 24354, 24232, - 24109, 23985, 23860, 23735, 23608, 23481, 23353, 23223, 23093, 22963, - 22831, 22698, 22565, 22431, 22296, 22160, 22023, 21885, 21747, 21608, - 21468, 21327, 21185, 21043, 20899, 20755, 20611, 20465, 20319, 20171, - 20023, 19875, 19725, 19575, 19424, 19272, 19120, 18967, 18813, 18658, - 18503, 18347, 18190, 18032, 17874, 17715, 17556, 17395, 17234, 17073, - 16910, 16747, 16584, 16420, 16255, 16089, 15923, 15756, 15589, 15421, - 15252, 15083, 14913, 14743, 14572, 14400, 14228, 14055, 13882, 13708, - 13534, 13359, 13183, 13007, 12831, 12654, 12476, 12298, 12120, 11941, - 11761, 11581, 11401, 11220, 11039, 10857, 10675, 10492, 10309, 10125, - 9941, 9757, 9572, 9387, 9202, 9016, 8830, 8643, 8456, 8269, - 8081, 7894, 7705, 7517, 7328, 7139, 6949, 6759, 6569, 6379, - 6189, 5998, 5807, 5615, 5424, 5232, 5040, 4848, 4656, 4463, - 4270, 4077, 3884, 3691, 3498, 3304, 3110, 2917, 2723, 2529, - 2334, 2140, 1946, 1752, 1557, 1362, 1168, 973, 779, 584, - 389, 194, 0, -194, -389, -584, -779, -973, -1168, -1362, - -1557, -1752, -1946, -2140, -2334, -2529, -2723, -2917, -3110, -3304, - -3498, -3691, -3884, -4077, -4270, -4463, -4656, -4848, -5040, -5232, - -5424, -5615, -5807, -5998, -6189, -6379, -6569, -6759, -6949, -7139, - -7328, -7517, -7705, -7894, -8081, -8269, -8456, -8643, -8830, -9016, - -9202, -9387, -9572, -9757, -9941, -10125, -10309, -10492, -10675, -10857, - -11039, -11220, -11401, -11581, -11761, -11941, -12120, -12298, -12476, -12654, - -12831, -13007, -13183, -13359, -13534, -13708, -13882, -14055, -14228, -14400, - -14572, -14743, -14913, -15083, -15252, -15421, -15589, -15756, -15923, -16089, - -16255, -16420, -16584, -16747, -16910, -17073, -17234, -17395, -17556, -17715, - -17874, -18032, -18190, -18347, -18503, -18658, -18813, -18967, -19120, -19272, - -19424, -19575, -19725, -19875, -20023, -20171, -20319, -20465, -20611, -20755, - -20899, -21043, -21185, -21327, -21468, -21608, -21747, -21885, -22023, -22160, - -22296, -22431, -22565, -22698, -22831, -22963, -23093, -23223, -23353, -23481, - -23608, -23735, -23860, -23985, -24109, -24232, -24354, -24475, -24595, -24715, - -24833, -24951, -25067, -25183, -25298, -25412, -25525, -25637, -25748, -25858, - -25967, -26076, -26183, -26289, -26395, -26499, -26603, -26705, -26807, -26908, - -27007, -27106, -27204, -27301, -27396, -27491, -27585, -27678, -27770, -27861, - -27950, -28039, -28127, -28214, -28300, -28385, -28469, -28552, -28633, -28714, - -28794, -28873, -28951, -29027, -29103, -29178, -29252, -29324, -29396, -29466, - -29536, -29605, -29672, -29738, -29804, -29868, -29932, -29994, -30055, -30115, - -30174, -30232, -30289, -30345, -30400, -30454, -30507, -30558, -30609, -30659, - -30707, -30754, -30801, -30846, -30890, -30933, -30975, -31016, -31056, -31095, - -31133, -31169, -31205, -31239, -31273, -31305, -31336, -31366, -31395, -31423, - -31450, -31475, -31500, -31524, -31546, -31567, -31587, -31606, -31624, -31641, - -31657, -31672, -31685, -31698, -31709, -31719, -31728, -31736, -31743, -31749, - -31753, -31757, -31759, -31760, -31761, -31760, -31757, -31754, -31750, -31744, - -31738, -31730, -31721, -31711, -31700, -31688, -31674, -31660, -31644, -31627, - -31609, -31590, -31570, -31549, -31526, -31502, -31478, -31452, -31425, -31397, - -31367, -31337, -31305, -31272, -31239, -31204, -31167, -31130, -31092, -31052, - -31011, -30970, -30927, -30882, -30837, -30791, -30743, -30694, -30645, -30594, - -30542, -30488, -30434, -30378, -30322, -30264, -30205, -30145, -30084, -30021, - -29958, -29893, -29827, -29760, -29692, -29623, -29553, -29481, -29409, -29335, - -29260, -29184, -29107, -29029, -28950, -28869, -28788, -28705, -28621, -28536, - -28450, -28363, -28275, -28185, -28095, -28003, -27910, -27817, -27722, -27626, - -27529, -27430, -27331, -27231, -27129, -27026, -26923, -26818, -26712, -26605, - -26497, -26388, -26278, -26167, -26054, -25941, -25827, -25711, -25595, -25477, - -25358, -25239, -25118, -24996, -24873, -24749, -24624, -24499, -24372, -24244, - -24115, -23985, -23854, -23722, -23589, -23455, -23320, -23184, -23047, -22909, - -22770, -22630, -22489, -22347, -22204, -22060, -21916, -21770, -21623, -21476, - -21327, -21178, -21028, -20876, -20724, -20571, -20417, -20262, -20107, -19950, - -19793, -19634, -19475, -19315, -19154, -18992, -18829, -18666, -18502, -18336, - -18170, -18004, -17836, -17668, -17498, -17329, -17158, -16986, -16814, -16641, - -16467, -16293, -16117, -15941, -15764, -15587, -15409, -15230, -15050, -14870, - -14689, -14507, -14325, -14142, -13959, -13774, -13589, -13404, -13218, -13031, - -12844, -12656, -12467, -12278, -12088, -11898, -11707, -11516, -11324, -11132, - -10939, -10745, -10551, -10357, -10162, -9967, -9771, -9574, -9378, -9180, - -8983, -8785, -8586, -8387, -8188, -7988, -7788, -7588, -7387, -7186, - -6984, -6783, -6580, -6378, -6175, -5972, -5769, -5565, -5361, -5157, - -4953, -4748, -4543, -4338, -4133, -3928, -3722, -3516, -3310, -3104, - -2898, -2691, -2485, -2278, -2071, -1864, -1657, -1450, -1243, -1036, - -829, -621, -414, -207, + 0, 218, 437, 655, 874, 1092, 1311, 1529, 1747, 1966, + 2184, 2401, 2619, 2837, 3054, 3271, 3488, 3705, 3921, 4138, + 4354, 4569, 4785, 5000, 5215, 5429, 5643, 5857, 6071, 6284, + 6496, 6709, 6920, 7132, 7343, 7553, 7763, 7973, 8182, 8390, + 8598, 8806, 9012, 9219, 9425, 9630, 9834, 10038, 10242, 10444, + 10646, 10848, 11049, 11249, 11448, 11647, 11845, 12042, 12238, 12434, + 12629, 12823, 13017, 13209, 13401, 13592, 13782, 13972, 14160, 14348, + 14535, 14721, 14906, 15090, 15273, 15456, 15637, 15818, 15997, 16176, + 16354, 16531, 16706, 16881, 17055, 17228, 17400, 17570, 17740, 17909, + 18077, 18243, 18409, 18574, 18737, 18899, 19061, 19221, 19380, 19538, + 19695, 19851, 20006, 20160, 20312, 20464, 20614, 20763, 20911, 21058, + 21204, 21348, 21491, 21634, 21775, 21914, 22053, 22191, 22327, 22462, + 22596, 22728, 22860, 22990, 23119, 23247, 23373, 23499, 23623, 23746, + 23867, 23988, 24107, 24225, 24342, 24457, 24571, 24684, 24796, 24906, + 25016, 25123, 25230, 25336, 25440, 25543, 25644, 25745, 25844, 25942, + 26039, 26134, 26228, 26321, 26412, 26503, 26592, 26680, 26766, 26852, + 26936, 27018, 27100, 27180, 27259, 27337, 27413, 27489, 27563, 27635, + 27707, 27777, 27846, 27914, 27980, 28046, 28110, 28173, 28234, 28295, + 28354, 28412, 28468, 28524, 28578, 28631, 28683, 28733, 28783, 28831, + 28878, 28924, 28968, 29011, 29054, 29095, 29134, 29173, 29210, 29247, + 29282, 29316, 29349, 29380, 29411, 29440, 29468, 29495, 29521, 29545, + 29569, 29591, 29613, 29633, 29652, 29670, 29686, 29702, 29717, 29730, + 29743, 29754, 29764, 29773, 29781, 29788, 29794, 29799, 29802, 29805, + 29806, 29807, 29806, 29805, 29802, 29799, 29794, 29788, 29781, 29773, + 29765, 29755, 29744, 29732, 29719, 29705, 29690, 29675, 29658, 29640, + 29621, 29601, 29580, 29559, 29536, 29512, 29488, 29462, 29435, 29408, + 29379, 29350, 29320, 29288, 29256, 29223, 29189, 29154, 29118, 29081, + 29044, 29005, 28966, 28925, 28884, 28842, 28799, 28755, 28710, 28664, + 28617, 28570, 28522, 28472, 28422, 28371, 28320, 28267, 28214, 28159, + 28104, 28048, 27991, 27934, 27875, 27816, 27756, 27695, 27633, 27570, + 27507, 27443, 27378, 27312, 27245, 27178, 27109, 27040, 26971, 26900, + 26829, 26756, 26683, 26610, 26535, 26460, 26384, 26307, 26229, 26151, + 26072, 25992, 25911, 25830, 25748, 25665, 25581, 25497, 25412, 25326, + 25239, 25152, 25064, 24975, 24885, 24795, 24704, 24612, 24520, 24427, + 24333, 24238, 24143, 24047, 23950, 23853, 23755, 23656, 23556, 23456, + 23355, 23254, 23151, 23048, 22945, 22840, 22735, 22630, 22523, 22416, + 22308, 22200, 22091, 21981, 21871, 21760, 21648, 21536, 21423, 21309, + 21194, 21079, 20964, 20848, 20731, 20613, 20495, 20376, 20257, 20137, + 20016, 19894, 19773, 19650, 19527, 19403, 19279, 19154, 19028, 18902, + 18775, 18647, 18519, 18391, 18262, 18132, 18001, 17870, 17739, 17607, + 17474, 17341, 17207, 17073, 16938, 16802, 16666, 16530, 16393, 16255, + 16117, 15978, 15839, 15699, 15559, 15418, 15277, 15135, 14992, 14850, + 14706, 14562, 14418, 14273, 14128, 13982, 13836, 13689, 13542, 13394, + 13246, 13097, 12948, 12799, 12649, 12498, 12347, 12196, 12044, 11892, + 11740, 11587, 11433, 11280, 11125, 10971, 10816, 10661, 10505, 10349, + 10192, 10036, 9878, 9721, 9563, 9405, 9246, 9087, 8928, 8768, + 8609, 8448, 8288, 8127, 7966, 7805, 7643, 7481, 7319, 7156, + 6994, 6831, 6667, 6504, 6340, 6176, 6012, 5847, 5683, 5518, + 5353, 5188, 5022, 4857, 4691, 4525, 4359, 4192, 4026, 3859, + 3692, 3526, 3358, 3191, 3024, 2857, 2689, 2521, 2354, 2186, + 2018, 1850, 1682, 1514, 1346, 1178, 1009, 841, 673, 505, + 336, 168, 0, -168, -336, -505, -673, -841, -1009, -1178, + -1346, -1514, -1682, -1850, -2018, -2186, -2354, -2521, -2689, -2857, + -3024, -3191, -3358, -3526, -3692, -3859, -4026, -4192, -4359, -4525, + -4691, -4857, -5022, -5188, -5353, -5518, -5683, -5847, -6012, -6176, + -6340, -6504, -6667, -6831, -6994, -7156, -7319, -7481, -7643, -7805, + -7966, -8127, -8288, -8448, -8609, -8768, -8928, -9087, -9246, -9405, + -9563, -9721, -9878, -10036, -10192, -10349, -10505, -10661, -10816, -10971, + -11125, -11280, -11433, -11587, -11740, -11892, -12044, -12196, -12347, -12498, + -12649, -12799, -12948, -13097, -13246, -13394, -13542, -13689, -13836, -13982, + -14128, -14273, -14418, -14562, -14706, -14850, -14992, -15135, -15277, -15418, + -15559, -15699, -15839, -15978, -16117, -16255, -16393, -16530, -16666, -16802, + -16938, -17073, -17207, -17341, -17474, -17607, -17739, -17870, -18001, -18132, + -18262, -18391, -18519, -18647, -18775, -18902, -19028, -19154, -19279, -19403, + -19527, -19650, -19773, -19894, -20016, -20137, -20257, -20376, -20495, -20613, + -20731, -20848, -20964, -21079, -21194, -21309, -21423, -21536, -21648, -21760, + -21871, -21981, -22091, -22200, -22308, -22416, -22523, -22630, -22735, -22840, + -22945, -23048, -23151, -23254, -23355, -23456, -23556, -23656, -23755, -23853, + -23950, -24047, -24143, -24238, -24333, -24427, -24520, -24612, -24704, -24795, + -24885, -24975, -25064, -25152, -25239, -25326, -25412, -25497, -25581, -25665, + -25748, -25830, -25911, -25992, -26072, -26151, -26229, -26307, -26384, -26460, + -26535, -26610, -26683, -26756, -26829, -26900, -26971, -27040, -27109, -27178, + -27245, -27312, -27378, -27443, -27507, -27570, -27633, -27695, -27756, -27816, + -27875, -27934, -27991, -28048, -28104, -28159, -28214, -28267, -28320, -28371, + -28422, -28472, -28522, -28570, -28617, -28664, -28710, -28755, -28799, -28842, + -28884, -28925, -28966, -29005, -29044, -29081, -29118, -29154, -29189, -29223, + -29256, -29288, -29320, -29350, -29379, -29408, -29435, -29462, -29488, -29512, + -29536, -29559, -29580, -29601, -29621, -29640, -29658, -29675, -29690, -29705, + -29719, -29732, -29744, -29755, -29765, -29773, -29781, -29788, -29794, -29799, + -29802, -29805, -29806, -29807, -29806, -29805, -29802, -29799, -29794, -29788, + -29781, -29773, -29764, -29754, -29743, -29730, -29717, -29702, -29686, -29670, + -29652, -29633, -29613, -29591, -29569, -29545, -29521, -29495, -29468, -29440, + -29411, -29380, -29349, -29316, -29282, -29247, -29210, -29173, -29134, -29095, + -29054, -29011, -28968, -28924, -28878, -28831, -28783, -28733, -28683, -28631, + -28578, -28524, -28468, -28412, -28354, -28295, -28234, -28173, -28110, -28046, + -27980, -27914, -27846, -27777, -27707, -27635, -27563, -27489, -27413, -27337, + -27259, -27180, -27100, -27018, -26936, -26852, -26766, -26680, -26592, -26503, + -26412, -26321, -26228, -26134, -26039, -25942, -25844, -25745, -25644, -25543, + -25440, -25336, -25230, -25123, -25016, -24906, -24796, -24684, -24571, -24457, + -24342, -24225, -24107, -23988, -23867, -23746, -23623, -23499, -23373, -23247, + -23119, -22990, -22860, -22728, -22596, -22462, -22327, -22191, -22053, -21914, + -21775, -21634, -21491, -21348, -21204, -21058, -20911, -20763, -20614, -20464, + -20312, -20160, -20006, -19851, -19695, -19538, -19380, -19221, -19061, -18899, + -18737, -18574, -18409, -18243, -18077, -17909, -17740, -17570, -17400, -17228, + -17055, -16881, -16706, -16531, -16354, -16176, -15997, -15818, -15637, -15456, + -15273, -15090, -14906, -14721, -14535, -14348, -14160, -13972, -13782, -13592, + -13401, -13209, -13017, -12823, -12629, -12434, -12238, -12042, -11845, -11647, + -11448, -11249, -11049, -10848, -10646, -10444, -10242, -10038, -9834, -9630, + -9425, -9219, -9012, -8806, -8598, -8390, -8182, -7973, -7763, -7553, + -7343, -7132, -6920, -6709, -6496, -6284, -6071, -5857, -5643, -5429, + -5215, -5000, -4785, -4569, -4354, -4138, -3921, -3705, -3488, -3271, + -3054, -2837, -2619, -2401, -2184, -1966, -1747, -1529, -1311, -1092, + -874, -655, -437, -218, }; #if defined(SDCARD) @@ -539,7 +539,7 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u } #endif -const unsigned int toneVolumes[] = { 2, 4, 8, 12, 16 }; +const unsigned int toneVolumes[] = { 10, 8, 6, 4, 2 }; int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) { @@ -553,7 +553,9 @@ int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, if (fragment.tone.freq) { context.state.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; - context.state.tone.volume = (fragment.tone.freq * fragment.tone.freq * 32) / (110 * 110 * toneVolumes[2+volume]); + context.state.tone.volume = toneVolumes[2+volume]; + if (fragment.tone.freq < 330) + context.state.tone.volume = (context.state.tone.volume * fragment.tone.freq * fragment.tone.freq) / (330 * 330); if (fragment.tone.freqIncr) fragment.tone.freq += AUDIO_BUFFER_DURATION * fragment.tone.freqIncr; else diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 6191da79f..2738be4c2 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -47,7 +47,7 @@ #define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE*AUDIO_BUFFER_DURATION/1000) #define AUDIO_BUFFER_COUNT (3) -#define BEEP_MIN_FREQ (110) +#define BEEP_MIN_FREQ (150) #define BEEP_DEFAULT_FREQ (2250) #define BEEP_KEY_UP_FREQ (BEEP_DEFAULT_FREQ+150) #define BEEP_KEY_DOWN_FREQ (BEEP_DEFAULT_FREQ-150) @@ -106,7 +106,7 @@ class AudioContext { struct { double step; double idx; - int volume; + float volume; } tone; } state; diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index 3b1ae8a7d..c66ae5bb2 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -150,6 +150,8 @@ enum menuGeneralSetupItems { IF_CPUARM(ITEM_SETUP_BEEP_VOLUME) IF_CPUARM(ITEM_SETUP_WAV_VOLUME) IF_CPUARM(ITEM_SETUP_VARIO_VOLUME) + IF_CPUARM(ITEM_SETUP_VARIO_PITCH) + IF_CPUARM(ITEM_SETUP_VARIO_RANGE) IF_CPUARM(ITEM_SETUP_BACKGROUND_VOLUME) ITEM_SETUP_BEEP_LENGTH, IF_AUDIO(ITEM_SETUP_SPEAKER_PITCH) @@ -211,7 +213,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; @@ -360,6 +362,16 @@ void menuGeneralSetup(uint8_t event) case ITEM_SETUP_VARIO_VOLUME: SLIDER_5POS(y, g_eeGeneral.varioVolume, STR_VARIO_VOLUME, event, attr); break; + case ITEM_SETUP_VARIO_PITCH: + lcd_putsLeft(y, "\001Vario Pitch"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|LEFT); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -30, 30); + break; + case ITEM_SETUP_VARIO_RANGE: + lcd_putsLeft(y, "\001Vario Max"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|LEFT); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -30, 30); + break; case ITEM_SETUP_BACKGROUND_VOLUME: SLIDER_5POS(y, g_eeGeneral.backgroundVolume, STR_BG_VOLUME, event, attr); break; diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 93330af1c..f729c4af2 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -123,7 +123,12 @@ void varioWakeup() if (isFunctionActive(FUNCTION_VARIO)) { #if defined(AUDIO) cli(); - int16_t verticalSpeed = frskyData.hub.varioSpeed; +#if 1 + #warning "Ele stick for vario tests" + int verticalSpeed = getValue(MIXSRC_Ele); +#else + int verticalSpeed = frskyData.hub.varioSpeed; +#endif sei(); #if defined(PCBSTD) @@ -135,60 +140,52 @@ void varioWakeup() verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100); if ((int16_t)(s_varioTmr-tmr10ms) < 0) { - uint8_t SoundVarioBeepTime = (1600 - verticalSpeed) / 100; - uint8_t SoundVarioBeepFreq = (verticalSpeed * 10 + 16000) >> 8; - s_varioTmr = tmr10ms + (SoundVarioBeepTime*2); - AUDIO_VARIO(SoundVarioBeepFreq, SoundVarioBeepTime); + uint8_t varioBeepFreq = (verticalSpeed * 10 + 16000) >> 8; + uint8_t varioBeepTime = (1600 - verticalSpeed) / 100; + s_varioTmr = tmr10ms + (varioBeepTime*2); + AUDIO_VARIO(varioBeepFreq, varioBeepTime); } } #else - int16_t varioCenterMax = (int16_t)g_model.frsky.varioCenterMax * 10 + 50; - if (verticalSpeed >= varioCenterMax) { - verticalSpeed = verticalSpeed - varioCenterMax; - int16_t varioMax = (10+(int16_t)g_model.frsky.varioMax) * 100; - if (verticalSpeed > varioMax) verticalSpeed = varioMax; - verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100); - } - else { - int16_t varioCenterMin = (int16_t)g_model.frsky.varioCenterMin * 10 - 50; - if (verticalSpeed <= varioCenterMin) { - verticalSpeed = verticalSpeed - varioCenterMin; - int16_t varioMin = (-10+(int16_t)g_model.frsky.varioMin) * 100; - if (verticalSpeed < varioMin) verticalSpeed = varioMin; - verticalSpeed = (verticalSpeed * 10) / ((varioCenterMin-varioMin) / 100); - } - else { - return; - } - } + int varioCenterMin = (int)g_model.frsky.varioCenterMin * 10 - 50; + int varioCenterMax = (int)g_model.frsky.varioCenterMax * 10 + 50; + int varioMax = (10+(int)g_model.frsky.varioMax) * 100; + int varioMin = (-10+(int)g_model.frsky.varioMin) * 100; - if (verticalSpeed < 0 || (int16_t)(s_varioTmr-tmr10ms) < 0) { + if (verticalSpeed > varioMax) + verticalSpeed = varioMax; + else if (verticalSpeed < varioMin) + verticalSpeed = varioMin; + + if ((int16_t)(s_varioTmr - tmr10ms) < 0) { #if defined(CPUARM) - int SoundVarioBeepTime; - int SoundVarioBeepFreq; - if (verticalSpeed > 0) { - SoundVarioBeepTime = min(5, 320 - (verticalSpeed >> 2)); - SoundVarioBeepFreq = 1000 + verticalSpeed; + int varioBeepFreq, varioBeepTime; + if (verticalSpeed > varioCenterMin) { + varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); + int period = VARIO_PERIOD_ZERO - ((VARIO_PERIOD_ZERO-VARIO_PERIOD_MAX) * verticalSpeed) / varioMax; + // TODO something exponential would be better + varioBeepTime = (verticalSpeed > varioCenterMax ? (period / 4) : (period / 2)); + s_varioTmr = tmr10ms + (period/10); } else { - SoundVarioBeepTime = 80; - SoundVarioBeepFreq = (verticalSpeed * 3 + 8000) >> 3; + varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-BEEP_MIN_FREQ) * verticalSpeed) / varioMin); + varioBeepTime = 80; // TODO 20 // continuous beep: we will enter again here before the tone ends + s_varioTmr = tmr10ms + 1; } - s_varioTmr = tmr10ms + (SoundVarioBeepTime/5); #else - uint8_t SoundVarioBeepTime; - uint8_t SoundVarioBeepFreq; + uint8_t varioBeepFreq, varioBeepTime; if (verticalSpeed > 0) { - SoundVarioBeepTime = (8000 - verticalSpeed * 5) / 100; - SoundVarioBeepFreq = (verticalSpeed * 4 + 8000) >> 7; + varioBeepFreq = (verticalSpeed * 4 + 8000) >> 7; + varioBeepTime = (8000 - verticalSpeed * 5) / 100; } else { - SoundVarioBeepTime = 20; - SoundVarioBeepFreq = (verticalSpeed * 3 + 8000) >> 7; + varioBeepFreq = (verticalSpeed * 3 + 8000) >> 7; + varioBeepTime = 20; } - s_varioTmr = tmr10ms + (SoundVarioBeepTime/2); + s_varioTmr = tmr10ms + (varioBeepTime/2); #endif - AUDIO_VARIO(SoundVarioBeepFreq, SoundVarioBeepTime); + + AUDIO_VARIO(varioBeepFreq, varioBeepTime); } #endif diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index fed0158f4..1b7ae1123 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -239,6 +239,8 @@ enum BeeperMode { int8_t beepVolume; \ int8_t wavVolume; \ int8_t varioVolume; \ + int8_t varioPitch; \ + int8_t varioRange; \ int8_t backgroundVolume; #endif diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 320421007..33c2d82dd 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -4530,7 +4530,7 @@ void perMain() checkBacklight(); -#if defined(FRSKY) || defined(MAVLINK) +#if !defined(CPUARM) && (defined(FRSKY) || defined(MAVLINK)) telemetryWakeup(); #endif @@ -5188,6 +5188,10 @@ void mixerTask(void * pdata) CoLeaveMutexSection(mixerMutex); if (tick10ms) checkTrims(); +#if defined(FRSKY) || defined(MAVLINK) + telemetryWakeup(); +#endif + if (heartbeat == HEART_WDT_CHECK) { wdt_reset(); heartbeat = 0; diff --git a/radio/src/opentx.h b/radio/src/opentx.h index dcfed29a4..ce79231d2 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1331,6 +1331,10 @@ enum FunctionsActive { #endif }; +#define VARIO_FREQUENCY_ZERO 700/*Hz*/ +#define VARIO_FREQUENCY_RANGE 1000/*Hz*/ +#define VARIO_PERIOD_ZERO 250/*ms*/ +#define VARIO_PERIOD_MAX 50/*ms*/ extern MASK_FUNC_TYPE activeFunctions; extern MASK_CFN_TYPE activeFnSwitches; diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index 1f0d53888..66eef97d6 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -655,7 +655,11 @@ void telemetryWakeup() #endif #if defined(VARIO) +#if 1 + #warning "test removed for vario tests" +#else if (TELEMETRY_STREAMING() && !IS_FAI_ENABLED()) +#endif varioWakeup(); #endif diff --git a/radio/util/sinus.py b/radio/util/sinus.py index 0eeb135f1..68c09456d 100644 --- a/radio/util/sinus.py +++ b/radio/util/sinus.py @@ -3,12 +3,14 @@ import math samples = 1024 -amplitudes = (63999, 1024, 512) +amplitudes = (60000, 4096, 1024) for i in range(samples): sample = 0.0 for harmonic, amplitude in enumerate(amplitudes): sample += math.sin(math.pi*2*i*(harmonic+1)/samples) * amplitude / 2 + if sample > 32767 or sample < -32768: + print "erreur" print "%d," % int(sample), if i % 10 == 9: print From 1767de646df2c2b4893a93874adbd0abafe83b7a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 11:33:02 +0100 Subject: [PATCH 05/22] Vario repeat parameter added --- radio/src/gui/menu_general.cpp | 12 +++++++++--- radio/src/maths.cpp | 9 ++++++--- radio/src/myeeprom.h | 1 + radio/src/opentx.h | 4 ++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index c66ae5bb2..14669926a 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -152,6 +152,7 @@ enum menuGeneralSetupItems { IF_CPUARM(ITEM_SETUP_VARIO_VOLUME) IF_CPUARM(ITEM_SETUP_VARIO_PITCH) IF_CPUARM(ITEM_SETUP_VARIO_RANGE) + IF_CPUARM(ITEM_SETUP_VARIO_REPEAT) IF_CPUARM(ITEM_SETUP_BACKGROUND_VOLUME) ITEM_SETUP_BEEP_LENGTH, IF_AUDIO(ITEM_SETUP_SPEAKER_PITCH) @@ -213,7 +214,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; @@ -365,12 +366,17 @@ void menuGeneralSetup(uint8_t event) case ITEM_SETUP_VARIO_PITCH: lcd_putsLeft(y, "\001Vario Pitch"); lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|LEFT); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -30, 30); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -40, 40); break; case ITEM_SETUP_VARIO_RANGE: lcd_putsLeft(y, "\001Vario Max"); lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|LEFT); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -30, 30); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -80, 80); + break; + case ITEM_SETUP_VARIO_REPEAT: + lcd_putsLeft(y, "\001Vario Repeat"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|LEFT); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRepeat, -30, 120); break; case ITEM_SETUP_BACKGROUND_VOLUME: SLIDER_5POS(y, g_eeGeneral.backgroundVolume, STR_BG_VOLUME, event, attr); diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index f729c4af2..9cca70695 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -162,9 +162,12 @@ void varioWakeup() int varioBeepFreq, varioBeepTime; if (verticalSpeed > varioCenterMin) { varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); - int period = VARIO_PERIOD_ZERO - ((VARIO_PERIOD_ZERO-VARIO_PERIOD_MAX) * verticalSpeed) / varioMax; - // TODO something exponential would be better - varioBeepTime = (verticalSpeed > varioCenterMax ? (period / 4) : (period / 2)); + int period = VARIO_REPEAT_ZERO + (g_eeGeneral.varioRepeat*10); + period -= ((period-VARIO_REPEAT_MAX) * verticalSpeed) / varioMax; + if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) + varioBeepTime = period / 4; + else + varioBeepTime = period * (256 - ((verticalSpeed-varioCenterMin) * 172 / (varioCenterMax-varioCenterMin))) / 256; s_varioTmr = tmr10ms + (period/10); } else { diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 1b7ae1123..8732a9f61 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -241,6 +241,7 @@ enum BeeperMode { int8_t varioVolume; \ int8_t varioPitch; \ int8_t varioRange; \ + int8_t varioRepeat; \ int8_t backgroundVolume; #endif diff --git a/radio/src/opentx.h b/radio/src/opentx.h index ce79231d2..b3bd33125 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1333,8 +1333,8 @@ enum FunctionsActive { #define VARIO_FREQUENCY_ZERO 700/*Hz*/ #define VARIO_FREQUENCY_RANGE 1000/*Hz*/ -#define VARIO_PERIOD_ZERO 250/*ms*/ -#define VARIO_PERIOD_MAX 50/*ms*/ +#define VARIO_REPEAT_ZERO 500/*ms*/ +#define VARIO_REPEAT_MAX 50/*ms*/ extern MASK_FUNC_TYPE activeFunctions; extern MASK_CFN_TYPE activeFnSwitches; From ef51b2e6e87e2071e4d49bbb0d788d6df14319a7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 11:55:04 +0100 Subject: [PATCH 06/22] dTE added as a Vario source. Still not added the algorithms to take it into account, we don't have any dTE capable sensor yet --- radio/src/gui/menu_model.cpp | 5 +---- radio/src/myeeprom.h | 6 +++++- radio/src/translations/en.h | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 8d271aa56..5834962fd 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -5627,10 +5627,7 @@ void menuModelTelemetry(uint8_t event) } #else lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz<=0 ? attr : 0)|LEFT); - if (g_model.frsky.varioCenterMin == -16) - lcd_putsAtt(TELEM_COL2+4*FW-2, y, STR_OFF, m_posHorz==1 ? attr : 0); - else - lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((m_posHorz<0 || m_posHorz==1) ? attr : 0)|PREC1); + lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((m_posHorz<0 || m_posHorz==1) ? attr : 0)|PREC1); lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, ((m_posHorz<0 || m_posHorz==2) ? attr : 0)|PREC1); lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, ((m_posHorz<0 || m_posHorz==3) ? attr : 0)); if (attr && (s_editMode>0 || p1valdiff)) { diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 8732a9f61..e19ceddf9 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -998,7 +998,11 @@ enum VarioSource { VARIO_SOURCE_VARIO, VARIO_SOURCE_A1, VARIO_SOURCE_A2, - VARIO_SOURCE_LAST = VARIO_SOURCE_A2 +#if defined(FRSKY_SPORT) + VARIO_SOURCE_DTE, +#endif + VARIO_SOURCE_COUNT, + VARIO_SOURCE_LAST = VARIO_SOURCE_COUNT-1 }; #if defined(FRSKY_HUB) diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 5d8b9dedc..1d1fcd108 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -297,11 +297,11 @@ #define LEN_VOLTSRC "\003" #define TR_VOLTSRC "---""A1\0""A2\0""FAS""Cel" -#define LEN_VARIOSRC "\005" +#define LEN_VARIOSRC "\004" #if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vario""A1\0 ""A2\0" + #define TR_VARIOSRC "VSpd""A1\0 ""A2\0 ""dTE\0" #else - #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" + #define TR_VARIOSRC "Alt\0""Alt+""VSpd""A1\0 ""A2\0" #endif #define LEN_VSCREEN "\004" From 8c5798443ac1578ec80e948729fae7370cb5e233 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 15:01:54 +0100 Subject: [PATCH 07/22] Vario experiments around tone/silence ratio. Now (100% / 75%-50% linear / 25%) --- radio/src/maths.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 9cca70695..5874cece7 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -167,7 +167,7 @@ void varioWakeup() if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) varioBeepTime = period / 4; else - varioBeepTime = period * (256 - ((verticalSpeed-varioCenterMin) * 172 / (varioCenterMax-varioCenterMin))) / 256; + varioBeepTime = period * (172 - ((verticalSpeed-varioCenterMin) * 64 / (varioCenterMax-varioCenterMin))) / 256; s_varioTmr = tmr10ms + (period/10); } else { From ec6d1c1212c860a9995d2cb8d169a917e88522f8 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 15:04:20 +0100 Subject: [PATCH 08/22] Companion import/export for new vario parameters --- companion/src/eeprominterface.h | 1 + companion/src/firmwares/opentx/opentxeeprom.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 7138836c1..13b68339e 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -464,6 +464,7 @@ class GeneralSettings { int varioVolume; int varioPitch; int varioRange; + int varioRepeat; int backgroundVolume; unsigned int mavbaud; unsigned int switchUnlockStates; diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index ca70d75f1..3e740b630 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2370,8 +2370,11 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE internalField.Append(new SignedField<8>(generalData.beepVolume)); internalField.Append(new SignedField<8>(generalData.wavVolume)); internalField.Append(new SignedField<8>(generalData.varioVolume)); - internalField.Append(new SignedField<8>(generalData.varioPitch)); - internalField.Append(new SignedField<8>(generalData.varioRange)); + if (version >= 216) { + internalField.Append(new SignedField<8>(generalData.varioPitch)); + internalField.Append(new SignedField<8>(generalData.varioRange)); + internalField.Append(new SignedField<8>(generalData.varioRepeat)); + } internalField.Append(new SignedField<8>(generalData.backgroundVolume)); } if (IS_TARANIS(board) && version >= 216) { From 0157eebf7cb801a409e3bd9f0db7a7026cd9d39b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 16:08:42 +0100 Subject: [PATCH 09/22] Vario: allows a refresh of tones frequency / duration every 10ms --- companion/src/modeledit/customfunctions.cpp | 3 +- radio/src/audio_arm.cpp | 192 ++++++++++---------- radio/src/audio_arm.h | 21 ++- radio/src/maths.cpp | 6 +- 4 files changed, 116 insertions(+), 106 deletions(-) diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index 49f7630e8..2422477bc 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -255,7 +255,8 @@ void CustomFunctionsPanel::playMusic() clickObject->play(); playBT[index]->setObjectName(QString("stop_%1").arg(index)); playBT[index]->setIcon(CompanionIcon("stop.png")); - } else { + } + else { clickObject->stop(); clickObject->clear(); playBT[index]->setObjectName(QString("play_%1").arg(index)); diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 371f69ea7..f9a9bc38d 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -529,7 +529,7 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u } } - fragment.clear(); + context.clear(); return -result; } #else @@ -540,31 +540,42 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u #endif const unsigned int toneVolumes[] = { 10, 8, 6, 4, 2 }; +inline float evalVolumeRatio(int freq, int volume) +{ + float result = toneVolumes[2+volume]; + if (freq < 330) { + result = (result * freq * freq) / (330 * 330); + } + return result; +} -int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) +int AudioQueue::mixTone(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) { AudioFragment & fragment = context.fragment; int duration = 0; int result = 0; - if (fragment.tone.duration > 0) { + int remainingDuration = fragment.tone.duration - context.state.tone.duration; + if (remainingDuration > 0) { int points; double toneIdx = context.state.tone.idx; - if (fragment.tone.freq) { + if (fragment.tone.freq != context.state.tone.freq) { + context.state.tone.freq = fragment.tone.freq; context.state.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; - context.state.tone.volume = toneVolumes[2+volume]; - if (fragment.tone.freq < 330) - context.state.tone.volume = (context.state.tone.volume * fragment.tone.freq * fragment.tone.freq) / (330 * 330); - if (fragment.tone.freqIncr) - fragment.tone.freq += AUDIO_BUFFER_DURATION * fragment.tone.freqIncr; - else - fragment.tone.freq = 0; + context.state.tone.volume = evalVolumeRatio(fragment.tone.freq, volume); } - if (fragment.tone.duration <= AUDIO_BUFFER_DURATION) { - duration = fragment.tone.duration; - fragment.tone.duration = 0; + if (fragment.tone.freqIncr) { + fragment.tone.freq += AUDIO_BUFFER_DURATION * fragment.tone.freqIncr; + } + + if (remainingDuration > AUDIO_BUFFER_DURATION) { + duration = AUDIO_BUFFER_DURATION; + points = AUDIO_BUFFER_SIZE; + } + else { + duration = remainingDuration; points = (duration * AUDIO_BUFFER_SIZE) / AUDIO_BUFFER_DURATION; unsigned int end = toneIdx + (context.state.tone.step * points); if (end > DIM(sineValues)) @@ -573,11 +584,6 @@ int AudioQueue::mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, end = DIM(sineValues); points = (double(end) - toneIdx) / context.state.tone.step; } - else { - duration = AUDIO_BUFFER_DURATION; - fragment.tone.duration -= AUDIO_BUFFER_DURATION; - points = AUDIO_BUFFER_SIZE; - } for (int i=0; i 0) { + if (remainingDuration > AUDIO_BUFFER_DURATION) { + context.state.tone.duration += AUDIO_BUFFER_DURATION; context.state.tone.idx = toneIdx; return AUDIO_BUFFER_SIZE; } else { + context.state.tone.duration = 32000; // once the tone is finished, it's not possible to update its frequency and duration context.state.tone.idx = 0; } } - if (fragment.tone.pause > 0) { + remainingDuration = fragment.tone.pause - context.state.tone.pause; + if (remainingDuration > 0) { result = AUDIO_BUFFER_SIZE; - fragment.tone.pause -= min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); - if (fragment.tone.pause > 0) - return AUDIO_BUFFER_SIZE; + context.state.tone.pause += min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); + if (fragment.tone.pause > context.state.tone.pause) + return result; } - fragment.clear(); + context.clear(); return result; } @@ -613,7 +622,7 @@ int AudioQueue::mixAudioContext(AudioContext &context, AudioBuffer *buffer, int AudioFragment & fragment = context.fragment; if (fragment.type == FRAGMENT_TONE) { - result = mixBeep(context, buffer, beepVolume, fade); + result = mixTone(context, buffer, beepVolume, fade); } else if (fragment.type == FRAGMENT_FILE) { result = mixWav(context, buffer, wavVolume, fade); @@ -693,7 +702,7 @@ inline unsigned int getToneLength(uint16_t len) void AudioQueue::pause(uint16_t len) { - play(0, 0, len); + playTone(0, 0, len); } bool AudioQueue::isPlaying(uint8_t id) @@ -711,7 +720,7 @@ bool AudioQueue::isPlaying(uint8_t id) return false; } -void AudioQueue::play(uint16_t freq, uint16_t len, uint16_t pause, uint8_t flags, int8_t freqIncr) +void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t flags, int8_t freqIncr) { CoEnterMutexSection(audioMutex); @@ -720,7 +729,6 @@ void AudioQueue::play(uint16_t freq, uint16_t len, uint16_t pause, uint8_t flags if (flags & PLAY_BACKGROUND) { AudioFragment & fragment = backgroundContext.fragment; - backgroundContext.clear(); fragment.type = FRAGMENT_TONE; fragment.tone.freq = freq; fragment.tone.duration = len; @@ -833,7 +841,7 @@ void AudioQueue::stopSD() { sdAvailableSystemAudioFiles = 0; reset(); - play(0, 0, 100, PLAY_NOW); // insert a 100ms pause + playTone(0, 0, 100, PLAY_NOW); // insert a 100ms pause } #endif @@ -875,23 +883,23 @@ void audioEvent(uint8_t e, uint16_t f) switch (e) { // inactivity timer alert case AU_INACTIVITY: - audioQueue.play(2250, 80, 20, PLAY_REPEAT(2)); + audioQueue.playTone(2250, 80, 20, PLAY_REPEAT(2)); break; // low battery in tx case AU_TX_BATTERY_LOW: - audioQueue.play(1950, 160, 20, PLAY_REPEAT(2), 1); - audioQueue.play(2550, 160, 20, PLAY_REPEAT(2), -1); + audioQueue.playTone(1950, 160, 20, PLAY_REPEAT(2), 1); + audioQueue.playTone(2550, 160, 20, PLAY_REPEAT(2), -1); break; #if defined(PCBSKY9X) case AU_TX_MAH_HIGH: // TODO Rob something better here? - audioQueue.play(1950, 160, 20, PLAY_REPEAT(2), 1); - audioQueue.play(2550, 160, 20, PLAY_REPEAT(2), -1); + audioQueue.playTone(1950, 160, 20, PLAY_REPEAT(2), 1); + audioQueue.playTone(2550, 160, 20, PLAY_REPEAT(2), -1); break; case AU_TX_TEMP_HIGH: // TODO Rob something better here? - audioQueue.play(1950, 160, 20, PLAY_REPEAT(2), 1); - audioQueue.play(2550, 160, 20, PLAY_REPEAT(2), -1); + audioQueue.playTone(1950, 160, 20, PLAY_REPEAT(2), 1); + audioQueue.playTone(2550, 160, 20, PLAY_REPEAT(2), -1); break; #endif #if defined(VOICE) @@ -899,43 +907,43 @@ void audioEvent(uint8_t e, uint16_t f) case AU_SWITCH_ALERT: #endif case AU_ERROR: - audioQueue.play(BEEP_DEFAULT_FREQ, 200, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 200, 20, PLAY_NOW); break; // keypad up (seems to be used when going left/right through system menu options. 0-100 scales etc) case AU_KEYPAD_UP: - audioQueue.play(BEEP_KEY_UP_FREQ, 80, 20, PLAY_NOW); + audioQueue.playTone(BEEP_KEY_UP_FREQ, 80, 20, PLAY_NOW); break; // keypad down (seems to be used when going left/right through system menu options. 0-100 scales etc) case AU_KEYPAD_DOWN: - audioQueue.play(BEEP_KEY_DOWN_FREQ, 80, 20, PLAY_NOW); + audioQueue.playTone(BEEP_KEY_DOWN_FREQ, 80, 20, PLAY_NOW); break; // menu display (also used by a few generic beeps) case AU_MENUS: - audioQueue.play(BEEP_DEFAULT_FREQ, 80, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 80, 20, PLAY_NOW); break; // trim move case AU_TRIM_MOVE: - audioQueue.play(f, 40, 20, PLAY_NOW); + audioQueue.playTone(f, 40, 20, PLAY_NOW); break; // trim center case AU_TRIM_MIDDLE: - audioQueue.play(f, 80, 20, PLAY_NOW); + audioQueue.playTone(f, 80, 20, PLAY_NOW); break; // trim center case AU_TRIM_END: - audioQueue.play(f, 80, 20, PLAY_NOW); + audioQueue.playTone(f, 80, 20, PLAY_NOW); break; // warning one case AU_WARNING1: - audioQueue.play(BEEP_DEFAULT_FREQ, 80, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 80, 20, PLAY_NOW); break; // warning two case AU_WARNING2: - audioQueue.play(BEEP_DEFAULT_FREQ, 160, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 160, 20, PLAY_NOW); break; // warning three case AU_WARNING3: - audioQueue.play(BEEP_DEFAULT_FREQ, 200, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 200, 20, PLAY_NOW); break; // pot/stick center case AU_STICK1_MIDDLE: @@ -950,120 +958,120 @@ void audioEvent(uint8_t e, uint16_t f) #else case AU_POT3_MIDDLE: #endif - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 80, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 80, 20, PLAY_NOW); break; // mix warning 1 case AU_MIX_WARNING_1: - audioQueue.play(BEEP_DEFAULT_FREQ+1440, 48, 32); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1440, 48, 32); break; // mix warning 2 case AU_MIX_WARNING_2: - audioQueue.play(BEEP_DEFAULT_FREQ+1560, 48, 32, PLAY_REPEAT(1)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1560, 48, 32, PLAY_REPEAT(1)); break; // mix warning 3 case AU_MIX_WARNING_3: - audioQueue.play(BEEP_DEFAULT_FREQ+1680, 48, 32, PLAY_REPEAT(2)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1680, 48, 32, PLAY_REPEAT(2)); break; // timer == 0 case AU_TIMER_00: - audioQueue.play(BEEP_DEFAULT_FREQ+150, 300, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 300, 20, PLAY_NOW); break; // timer <= 10 seconds left case AU_TIMER_LT10: - audioQueue.play(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_NOW); break; // timer 20 seconds left case AU_TIMER_20: - audioQueue.play(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(1)|PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(1)|PLAY_NOW); break; // timer 30 seconds left case AU_TIMER_30: - audioQueue.play(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW); break; #if defined(PCBTARANIS) case AU_A1_ORANGE: - audioQueue.play(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW); break; case AU_A1_RED: - audioQueue.play(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); break; case AU_A2_ORANGE: - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_NOW); break; case AU_A2_RED: - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); break; case AU_RSSI_ORANGE: - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 800, 20, PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 800, 20, PLAY_NOW); break; case AU_RSSI_RED: - audioQueue.play(BEEP_DEFAULT_FREQ+1800, 800, 20, PLAY_REPEAT(1)|PLAY_NOW); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1800, 800, 20, PLAY_REPEAT(1)|PLAY_NOW); break; case AU_SWR_RED: - audioQueue.play(450, 160, 40, PLAY_REPEAT(2), 1); + audioQueue.playTone(450, 160, 40, PLAY_REPEAT(2), 1); break; #endif case AU_FRSKY_BEEP1: - audioQueue.play(BEEP_DEFAULT_FREQ, 60, 20); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 60, 20); break; case AU_FRSKY_BEEP2: - audioQueue.play(BEEP_DEFAULT_FREQ, 120, 20); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 120, 20); break; case AU_FRSKY_BEEP3: - audioQueue.play(BEEP_DEFAULT_FREQ, 200, 20); + audioQueue.playTone(BEEP_DEFAULT_FREQ, 200, 20); break; case AU_FRSKY_WARN1: - audioQueue.play(BEEP_DEFAULT_FREQ+600, 120, 40, PLAY_REPEAT(2)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 120, 40, PLAY_REPEAT(2)); break; case AU_FRSKY_WARN2: - audioQueue.play(BEEP_DEFAULT_FREQ+900, 120, 40, PLAY_REPEAT(2)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+900, 120, 40, PLAY_REPEAT(2)); break; case AU_FRSKY_CHEEP: - audioQueue.play(BEEP_DEFAULT_FREQ+900, 80, 20, PLAY_REPEAT(2), 2); + audioQueue.playTone(BEEP_DEFAULT_FREQ+900, 80, 20, PLAY_REPEAT(2), 2); break; case AU_FRSKY_RING: - audioQueue.play(BEEP_DEFAULT_FREQ+750, 40, 20, PLAY_REPEAT(10)); - audioQueue.play(BEEP_DEFAULT_FREQ+750, 40, 80, PLAY_REPEAT(1)); - audioQueue.play(BEEP_DEFAULT_FREQ+750, 40, 20, PLAY_REPEAT(10)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+750, 40, 20, PLAY_REPEAT(10)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+750, 40, 80, PLAY_REPEAT(1)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+750, 40, 20, PLAY_REPEAT(10)); break; case AU_FRSKY_SCIFI: - audioQueue.play(2550, 80, 20, PLAY_REPEAT(2), -1); - audioQueue.play(1950, 80, 20, PLAY_REPEAT(2), 1); - audioQueue.play(2250, 80, 20, 0); + audioQueue.playTone(2550, 80, 20, PLAY_REPEAT(2), -1); + audioQueue.playTone(1950, 80, 20, PLAY_REPEAT(2), 1); + audioQueue.playTone(2250, 80, 20, 0); break; case AU_FRSKY_ROBOT: - audioQueue.play(2250, 40, 20, PLAY_REPEAT(1)); - audioQueue.play(1650, 120, 20, PLAY_REPEAT(1)); - audioQueue.play(2550, 120, 20, PLAY_REPEAT(1)); + audioQueue.playTone(2250, 40, 20, PLAY_REPEAT(1)); + audioQueue.playTone(1650, 120, 20, PLAY_REPEAT(1)); + audioQueue.playTone(2550, 120, 20, PLAY_REPEAT(1)); break; case AU_FRSKY_CHIRP: - audioQueue.play(BEEP_DEFAULT_FREQ+1200, 40, 20, PLAY_REPEAT(2)); - audioQueue.play(BEEP_DEFAULT_FREQ+1620, 40, 20, PLAY_REPEAT(3)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1200, 40, 20, PLAY_REPEAT(2)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1620, 40, 20, PLAY_REPEAT(3)); break; case AU_FRSKY_TADA: - audioQueue.play(1650, 80, 40); - audioQueue.play(2850, 80, 40); - audioQueue.play(3450, 64, 36, PLAY_REPEAT(2)); + audioQueue.playTone(1650, 80, 40); + audioQueue.playTone(2850, 80, 40); + audioQueue.playTone(3450, 64, 36, PLAY_REPEAT(2)); break; case AU_FRSKY_CRICKET: - audioQueue.play(2550, 40, 80, PLAY_REPEAT(3)); - audioQueue.play(2550, 40, 160, PLAY_REPEAT(1)); - audioQueue.play(2550, 40, 80, PLAY_REPEAT(3)); + audioQueue.playTone(2550, 40, 80, PLAY_REPEAT(3)); + audioQueue.playTone(2550, 40, 160, PLAY_REPEAT(1)); + audioQueue.playTone(2550, 40, 80, PLAY_REPEAT(3)); break; case AU_FRSKY_SIREN: - audioQueue.play(450, 160, 40, PLAY_REPEAT(2), 2); + audioQueue.playTone(450, 160, 40, PLAY_REPEAT(2), 2); break; case AU_FRSKY_ALARMC: - audioQueue.play(1650, 32, 68, PLAY_REPEAT(2)); - audioQueue.play(2250, 64, 156, PLAY_REPEAT(1)); - audioQueue.play(1650, 64, 76, PLAY_REPEAT(2)); - audioQueue.play(2250, 32, 168, PLAY_REPEAT(1)); + audioQueue.playTone(1650, 32, 68, PLAY_REPEAT(2)); + audioQueue.playTone(2250, 64, 156, PLAY_REPEAT(1)); + audioQueue.playTone(1650, 64, 76, PLAY_REPEAT(2)); + audioQueue.playTone(2250, 32, 168, PLAY_REPEAT(1)); break; case AU_FRSKY_RATATA: - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 40, 80, PLAY_REPEAT(10)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 40, 80, PLAY_REPEAT(10)); break; case AU_FRSKY_TICK: - audioQueue.play(BEEP_DEFAULT_FREQ+1500, 40, 400, PLAY_REPEAT(2)); + audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 40, 400, PLAY_REPEAT(2)); break; default: break; diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 2738be4c2..b6be64126 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -62,9 +62,11 @@ struct AudioBuffer { uint8_t state; }; -#define FRAGMENT_EMPTY 0 -#define FRAGMENT_TONE 1 -#define FRAGMENT_FILE 2 +enum FragmentTypes { + FRAGMENT_EMPTY, + FRAGMENT_TONE, + FRAGMENT_FILE, +}; struct AudioFragment { uint8_t type; @@ -107,12 +109,15 @@ class AudioContext { double step; double idx; float volume; + uint16_t freq; + uint16_t duration; + uint16_t pause; } tone; } state; inline void clear() { - fragment.clear(); + memset(this, 0, sizeof(AudioContext)); } }; @@ -128,7 +133,7 @@ class AudioQueue { void start(); - void play(uint16_t freq, uint16_t len, uint16_t pause=0, uint8_t flags=0, int8_t freqIncr=0); + void playTone(uint16_t freq, uint16_t len, uint16_t pause=0, uint8_t flags=0, int8_t freqIncr=0); void playFile(const char *filename, uint8_t flags=0, uint8_t id=0); @@ -177,7 +182,7 @@ class AudioQueue { void wakeup(); int mixAudioContext(AudioContext &context, AudioBuffer *buffer, int beepVolume, int wavVolume, unsigned int fade); - int mixBeep(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade); + int mixTone(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade); int mixWav(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade); volatile bool state; @@ -252,13 +257,11 @@ void audioStart(); #define AUDIO_INACTIVITY() AUDIO_BUZZER(audioEvent(AU_INACTIVITY), beep(3)) #define AUDIO_MIX_WARNING(x) AUDIO_BUZZER(audioEvent(AU_MIX_WARNING_1+x-1), beep(1)) #define AUDIO_POT_MIDDLE(x) AUDIO_BUZZER(audioEvent(AU_STICK1_MIDDLE+x), beep(2)) -#define AUDIO_VARIO_UP() audioEvent(AU_KEYPAD_UP) -#define AUDIO_VARIO_DOWN() audioEvent(AU_KEYPAD_DOWN) #define AUDIO_TRIM_MIDDLE(f) AUDIO_BUZZER(audioEvent(AU_TRIM_MIDDLE, f), beep(2)) #define AUDIO_TRIM_END(f) AUDIO_BUZZER(audioEvent(AU_TRIM_END, f), beep(2)) #define AUDIO_TRIM(event, f) AUDIO_BUZZER(audioEvent(AU_TRIM_MOVE, f), { if (!IS_KEY_FIRST(event)) warble = true; beep(1); }) #define AUDIO_PLAY(p) audioEvent(p) -#define AUDIO_VARIO(f, t) audioQueue.play(f, t, 0, PLAY_BACKGROUND) +#define AUDIO_VARIO(f, t) audioQueue.playTone(f, t, 0, PLAY_BACKGROUND) #if defined(PCBTARANIS) #define AUDIO_A1_ORANGE() audioEvent(AU_A1_ORANGE) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 5874cece7..ea049823d 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -159,6 +159,7 @@ void varioWakeup() if ((int16_t)(s_varioTmr - tmr10ms) < 0) { #if defined(CPUARM) + s_varioTmr = tmr10ms; int varioBeepFreq, varioBeepTime; if (verticalSpeed > varioCenterMin) { varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); @@ -167,13 +168,11 @@ void varioWakeup() if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) varioBeepTime = period / 4; else - varioBeepTime = period * (172 - ((verticalSpeed-varioCenterMin) * 64 / (varioCenterMax-varioCenterMin))) / 256; - s_varioTmr = tmr10ms + (period/10); + varioBeepTime = period * (85 - ((verticalSpeed-varioCenterMin) * 25 / (varioCenterMax-varioCenterMin))) / 100; } else { varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-BEEP_MIN_FREQ) * verticalSpeed) / varioMin); varioBeepTime = 80; // TODO 20 // continuous beep: we will enter again here before the tone ends - s_varioTmr = tmr10ms + 1; } #else uint8_t varioBeepFreq, varioBeepTime; @@ -187,7 +186,6 @@ void varioWakeup() } s_varioTmr = tmr10ms + (varioBeepTime/2); #endif - AUDIO_VARIO(varioBeepFreq, varioBeepTime); } #endif From 8023606223395cd3521693a47b7f0608dce4855d Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 16:28:25 +0100 Subject: [PATCH 10/22] A little bit expo (x^2) in repeat frequency --- radio/src/maths.cpp | 3 +-- radio/src/opentx.cpp | 2 +- radio/src/opentx.h | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index ea049823d..727814ded 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -163,8 +163,7 @@ void varioWakeup() int varioBeepFreq, varioBeepTime; if (verticalSpeed > varioCenterMin) { varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); - int period = VARIO_REPEAT_ZERO + (g_eeGeneral.varioRepeat*10); - period -= ((period-VARIO_REPEAT_MAX) * verticalSpeed) / varioMax; + int period = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * verticalSpeed * verticalSpeed) / (varioMax * varioMax); if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) varioBeepTime = period / 4; else diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 33c2d82dd..1ddbbf449 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -2538,7 +2538,7 @@ uint8_t checkTrim(uint8_t event) thro = (idx==THR_STICK && g_model.thrTrim); #endif int8_t trimInc = g_model.trimInc + 1; - int8_t v = (trimInc==-1) ? min(32, abs(before)/4+1) : (1 << trimInc); + int8_t v = (trimInc==-1) ? min(32, abs(before)/4+1) : (1 << trimInc); // TODO flash saving if (trimInc < 0) if (thro) v = 4; // if throttle trim and trim trottle then step=4 int16_t after = (k&1) ? before + v : before - v; // positive = k&1 #if defined(CPUARM) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index b3bd33125..3800abe29 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1334,7 +1334,7 @@ enum FunctionsActive { #define VARIO_FREQUENCY_ZERO 700/*Hz*/ #define VARIO_FREQUENCY_RANGE 1000/*Hz*/ #define VARIO_REPEAT_ZERO 500/*ms*/ -#define VARIO_REPEAT_MAX 50/*ms*/ +#define VARIO_REPEAT_MAX 80/*ms*/ extern MASK_FUNC_TYPE activeFunctions; extern MASK_CFN_TYPE activeFnSwitches; From f9590d4141ed295055d87720052e3d8dbc11431b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 18 Feb 2014 20:44:10 +0100 Subject: [PATCH 11/22] Vario bugfixes --- radio/src/audio_arm.cpp | 87 ++++++++++++++++++++------------------ radio/src/audio_arm.h | 49 +++++++++++++--------- radio/src/maths.cpp | 93 ++++++++++++++++++++++++++--------------- 3 files changed, 135 insertions(+), 94 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index f9a9bc38d..4c374dc73 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -452,35 +452,35 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u AudioFragment & fragment = context.fragment; if (fragment.file[1]) { - result = f_open(&context.state.wav.file, fragment.file, FA_OPEN_EXISTING | FA_READ); + result = f_open(&context.wav.file, fragment.file, FA_OPEN_EXISTING | FA_READ); fragment.file[1] = 0; if (result == FR_OK) { - result = f_read(&context.state.wav.file, wavBuffer, RIFF_CHUNK_SIZE+8, &read); + result = f_read(&context.wav.file, wavBuffer, RIFF_CHUNK_SIZE+8, &read); if (result == FR_OK && read == RIFF_CHUNK_SIZE+8 && !memcmp(wavBuffer, "RIFF", 4) && !memcmp(wavBuffer+8, "WAVEfmt ", 8)) { uint32_t size = *((uint32_t *)(wavBuffer+16)); - result = (size < 256 ? f_read(&context.state.wav.file, wavBuffer, size+8, &read) : FR_DENIED); + result = (size < 256 ? f_read(&context.wav.file, wavBuffer, size+8, &read) : FR_DENIED); if (result == FR_OK && read == size+8) { - context.state.wav.codec = ((uint16_t *)wavBuffer)[0]; - context.state.wav.freq = ((uint16_t *)wavBuffer)[2]; + context.wav.codec = ((uint16_t *)wavBuffer)[0]; + context.wav.freq = ((uint16_t *)wavBuffer)[2]; uint32_t *wavSamplesPtr = (uint32_t *)(wavBuffer + size); uint32_t size = wavSamplesPtr[1]; - if (context.state.wav.freq != 0 && context.state.wav.freq * (AUDIO_SAMPLE_RATE / context.state.wav.freq) == AUDIO_SAMPLE_RATE) { - context.state.wav.resampleRatio = (AUDIO_SAMPLE_RATE / context.state.wav.freq); - context.state.wav.readSize = (context.state.wav.codec == CODEC_ID_PCM_S16LE ? 2*AUDIO_BUFFER_SIZE : AUDIO_BUFFER_SIZE) / context.state.wav.resampleRatio; + if (context.wav.freq != 0 && context.wav.freq * (AUDIO_SAMPLE_RATE / context.wav.freq) == AUDIO_SAMPLE_RATE) { + context.wav.resampleRatio = (AUDIO_SAMPLE_RATE / context.wav.freq); + context.wav.readSize = (context.wav.codec == CODEC_ID_PCM_S16LE ? 2*AUDIO_BUFFER_SIZE : AUDIO_BUFFER_SIZE) / context.wav.resampleRatio; } else { result = FR_DENIED; } while (result == FR_OK && memcmp(wavSamplesPtr, "data", 4) != 0) { - result = f_lseek(&context.state.wav.file, f_tell(&context.state.wav.file)+size); + result = f_lseek(&context.wav.file, f_tell(&context.wav.file)+size); if (result == FR_OK) { - result = f_read(&context.state.wav.file, wavBuffer, 8, &read); + result = f_read(&context.wav.file, wavBuffer, 8, &read); if (read != 8) result = FR_DENIED; wavSamplesPtr = (uint32_t *)wavBuffer; size = wavSamplesPtr[1]; } } - context.state.wav.size = size; + context.wav.size = size; } else { result = FR_DENIED; @@ -494,34 +494,34 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u read = 0; if (result == FR_OK) { - result = f_read(&context.state.wav.file, wavBuffer, context.state.wav.readSize, &read); + result = f_read(&context.wav.file, wavBuffer, context.wav.readSize, &read); if (result == FR_OK) { - if (read > context.state.wav.size) { - read = context.state.wav.size; + if (read > context.wav.size) { + read = context.wav.size; } - context.state.wav.size -= read; + context.wav.size -= read; - if (read != context.state.wav.readSize) { - f_close(&context.state.wav.file); + if (read != context.wav.readSize) { + f_close(&context.wav.file); fragment.clear(); } uint16_t * samples = buffer->data; - if (context.state.wav.codec == CODEC_ID_PCM_S16LE) { + if (context.wav.codec == CODEC_ID_PCM_S16LE) { read /= 2; for (uint32_t i=0; i 0) { int points; - double toneIdx = context.state.tone.idx; + double toneIdx = context.tone.idx; - if (fragment.tone.freq != context.state.tone.freq) { - context.state.tone.freq = fragment.tone.freq; - context.state.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; - context.state.tone.volume = evalVolumeRatio(fragment.tone.freq, volume); + if (fragment.tone.reset) { + context.tone.duration = 0; + context.tone.pause = 0; + } + + if (fragment.tone.freq != context.tone.freq) { + context.tone.freq = fragment.tone.freq; + context.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; + context.tone.volume = evalVolumeRatio(fragment.tone.freq, volume); } if (fragment.tone.freqIncr) { @@ -577,38 +582,37 @@ int AudioQueue::mixTone(AudioContext &context, AudioBuffer *buffer, int volume, else { duration = remainingDuration; points = (duration * AUDIO_BUFFER_SIZE) / AUDIO_BUFFER_DURATION; - unsigned int end = toneIdx + (context.state.tone.step * points); + unsigned int end = toneIdx + (context.tone.step * points); if (end > DIM(sineValues)) end -= (end % DIM(sineValues)); else end = DIM(sineValues); - points = (double(end) - toneIdx) / context.state.tone.step; + points = (double(end) - toneIdx) / context.tone.step; } for (int i=0; idata[i], sample, fade); - toneIdx += context.state.tone.step; + toneIdx += context.tone.step; if ((unsigned int)toneIdx >= DIM(sineValues)) toneIdx -= DIM(sineValues); } if (remainingDuration > AUDIO_BUFFER_DURATION) { - context.state.tone.duration += AUDIO_BUFFER_DURATION; - context.state.tone.idx = toneIdx; + context.tone.duration += AUDIO_BUFFER_DURATION; + context.tone.idx = toneIdx; return AUDIO_BUFFER_SIZE; } else { - context.state.tone.duration = 32000; // once the tone is finished, it's not possible to update its frequency and duration - context.state.tone.idx = 0; + context.tone.duration = 32000; // once the tone is finished, it's not possible to update its frequency and duration } } - remainingDuration = fragment.tone.pause - context.state.tone.pause; + remainingDuration = fragment.tone.pause - context.tone.pause; if (remainingDuration > 0) { result = AUDIO_BUFFER_SIZE; - context.state.tone.pause += min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); - if (fragment.tone.pause > context.state.tone.pause) + context.tone.pause += min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); + if (fragment.tone.pause > context.tone.pause) return result; } @@ -729,10 +733,13 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f if (flags & PLAY_BACKGROUND) { AudioFragment & fragment = backgroundContext.fragment; + if (fragment.type != FRAGMENT_TONE) + backgroundContext.clear(); fragment.type = FRAGMENT_TONE; fragment.tone.freq = freq; fragment.tone.duration = len; fragment.tone.pause = pause; + fragment.tone.reset = (flags & PLAY_NOW); } else { freq += g_eeGeneral.speakerPitch * 15; diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index b6be64126..40be7179a 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -78,6 +78,7 @@ struct AudioFragment { uint16_t duration; uint16_t pause; int8_t freqIncr; + uint8_t reset; } tone; char file[AUDIO_FILENAME_MAXLEN+1]; @@ -93,31 +94,39 @@ class AudioContext { public: AudioFragment fragment; - union { #if defined(SDCARD) - struct { - FIL file; - uint8_t codec; - uint32_t freq; - uint32_t size; - uint8_t resampleRatio; - uint16_t readSize; - } wav; + struct { + FIL file; + uint8_t codec; + uint32_t freq; + uint32_t size; + uint8_t resampleRatio; + uint16_t readSize; + } wav; #endif - struct { - double step; - double idx; - float volume; - uint16_t freq; - uint16_t duration; - uint16_t pause; - } tone; - } state; + struct { + double step; + double idx; + float volume; + uint16_t freq; + uint16_t duration; + uint16_t pause; + inline void clear() + { + step = 0; + idx = 0; + volume = 0; + freq = 0; + duration = 0; + pause = 0; + } + } tone; inline void clear() { - memset(this, 0, sizeof(AudioContext)); + fragment.clear(); + tone.clear(); } }; @@ -261,7 +270,7 @@ void audioStart(); #define AUDIO_TRIM_END(f) AUDIO_BUZZER(audioEvent(AU_TRIM_END, f), beep(2)) #define AUDIO_TRIM(event, f) AUDIO_BUZZER(audioEvent(AU_TRIM_MOVE, f), { if (!IS_KEY_FIRST(event)) warble = true; beep(1); }) #define AUDIO_PLAY(p) audioEvent(p) -#define AUDIO_VARIO(f, t) audioQueue.playTone(f, t, 0, PLAY_BACKGROUND) +#define AUDIO_VARIO(fq, t, p, f) audioQueue.playTone(fq, t, p, f) #if defined(PCBTARANIS) #define AUDIO_A1_ORANGE() audioEvent(AU_A1_ORANGE) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 727814ded..67456c95d 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -114,7 +114,53 @@ void getGpsDistance() } #endif -#if defined(FRSKY) && defined(VARIO) +#if defined(CPUARM) + +void varioWakeup() +{ + if (isFunctionActive(FUNCTION_VARIO)) { + int varioFreq, varioDuration, varioPause=0; + uint8_t varioFlags; + +#if 1 + #warning "Ele stick for vario tests" + int verticalSpeed = getValue(MIXSRC_Ele); +#else + int verticalSpeed = frskyData.hub.varioSpeed; +#endif + + int varioCenterMin = (int)g_model.frsky.varioCenterMin * 10 - 50; + int varioCenterMax = (int)g_model.frsky.varioCenterMax * 10 + 50; + int varioMax = (10+(int)g_model.frsky.varioMax) * 100; + int varioMin = (-10+(int)g_model.frsky.varioMin) * 100; + + if (verticalSpeed > varioMax) + verticalSpeed = varioMax; + else if (verticalSpeed < varioMin) + verticalSpeed = varioMin; + + if (verticalSpeed > varioCenterMin) { + varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); + int varioPeriod = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * (varioMax-verticalSpeed) * (varioMax-verticalSpeed)) / (varioMax * varioMax); + if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) + varioDuration = varioPeriod / 4; + else + varioDuration = varioPeriod * (85 - (((verticalSpeed-varioCenterMin) * 25) / (varioCenterMax-varioCenterMin))) / 100; + varioPause = varioPeriod - varioDuration; + varioFlags = PLAY_BACKGROUND; + } + else { + varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-BEEP_MIN_FREQ) * verticalSpeed) / varioMin); + varioDuration = 80; // TODO 20 // continuous beep: we will enter again here before the tone ends + varioFlags = PLAY_BACKGROUND|PLAY_NOW; + } + + AUDIO_VARIO(varioFreq, varioDuration, varioPause, varioFlags); + } +} + +#elif defined(FRSKY) && defined(VARIO) + void varioWakeup() { static tmr10ms_t s_varioTmr; @@ -123,12 +169,7 @@ void varioWakeup() if (isFunctionActive(FUNCTION_VARIO)) { #if defined(AUDIO) cli(); -#if 1 - #warning "Ele stick for vario tests" - int verticalSpeed = getValue(MIXSRC_Ele); -#else int verticalSpeed = frskyData.hub.varioSpeed; -#endif sei(); #if defined(PCBSTD) @@ -140,10 +181,10 @@ void varioWakeup() verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100); if ((int16_t)(s_varioTmr-tmr10ms) < 0) { - uint8_t varioBeepFreq = (verticalSpeed * 10 + 16000) >> 8; - uint8_t varioBeepTime = (1600 - verticalSpeed) / 100; - s_varioTmr = tmr10ms + (varioBeepTime*2); - AUDIO_VARIO(varioBeepFreq, varioBeepTime); + uint8_t varioFreq = (verticalSpeed * 10 + 16000) >> 8; + uint8_t varioDuration = (1600 - verticalSpeed) / 100; + s_varioTmr = tmr10ms + (varioDuration*2); + AUDIO_VARIO(varioFreq, varioDuration); } } #else @@ -158,34 +199,17 @@ void varioWakeup() verticalSpeed = varioMin; if ((int16_t)(s_varioTmr - tmr10ms) < 0) { -#if defined(CPUARM) - s_varioTmr = tmr10ms; - int varioBeepFreq, varioBeepTime; - if (verticalSpeed > varioCenterMin) { - varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); - int period = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * verticalSpeed * verticalSpeed) / (varioMax * varioMax); - if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) - varioBeepTime = period / 4; - else - varioBeepTime = period * (85 - ((verticalSpeed-varioCenterMin) * 25 / (varioCenterMax-varioCenterMin))) / 100; - } - else { - varioBeepFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-BEEP_MIN_FREQ) * verticalSpeed) / varioMin); - varioBeepTime = 80; // TODO 20 // continuous beep: we will enter again here before the tone ends - } -#else - uint8_t varioBeepFreq, varioBeepTime; + uint8_t varioFreq, varioDuration; if (verticalSpeed > 0) { - varioBeepFreq = (verticalSpeed * 4 + 8000) >> 7; - varioBeepTime = (8000 - verticalSpeed * 5) / 100; + varioFreq = (verticalSpeed * 4 + 8000) >> 7; + varioDuration = (8000 - verticalSpeed * 5) / 100; } else { - varioBeepFreq = (verticalSpeed * 3 + 8000) >> 7; - varioBeepTime = 20; + varioFreq = (verticalSpeed * 3 + 8000) >> 7; + varioDuration = 20; } - s_varioTmr = tmr10ms + (varioBeepTime/2); -#endif - AUDIO_VARIO(varioBeepFreq, varioBeepTime); + s_varioTmr = tmr10ms + (varioDuration/2); + AUDIO_VARIO(varioFreq, varioDuration); } #endif @@ -217,4 +241,5 @@ void varioWakeup() s_varioTmr = tmr10ms; } } + #endif From 481e312ae3598b960415874f45eafc4c710e1651 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 17:47:21 +0100 Subject: [PATCH 12/22] Vario part in Global Settings page reworked --- radio/src/gui/menu_general.cpp | 54 ++++++++++++++++++++-------------- radio/src/translations/en.h | 4 +-- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index 14669926a..e8bd44897 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -149,13 +149,14 @@ enum menuGeneralSetupItems { IF_VOICE(ITEM_SETUP_SPEAKER_VOLUME) IF_CPUARM(ITEM_SETUP_BEEP_VOLUME) IF_CPUARM(ITEM_SETUP_WAV_VOLUME) + IF_CPUARM(ITEM_SETUP_BACKGROUND_VOLUME) + ITEM_SETUP_BEEP_LENGTH, + IF_AUDIO(ITEM_SETUP_SPEAKER_PITCH) + IF_CPUARM(ITEM_SETUP_VARIO_LABEL) IF_CPUARM(ITEM_SETUP_VARIO_VOLUME) IF_CPUARM(ITEM_SETUP_VARIO_PITCH) IF_CPUARM(ITEM_SETUP_VARIO_RANGE) IF_CPUARM(ITEM_SETUP_VARIO_REPEAT) - IF_CPUARM(ITEM_SETUP_BACKGROUND_VOLUME) - ITEM_SETUP_BEEP_LENGTH, - IF_AUDIO(ITEM_SETUP_SPEAKER_PITCH) IF_HAPTIC(ITEM_SETUP_HAPTIC_LABEL) IF_HAPTIC(ITEM_SETUP_HAPTIC_MODE) IF_HAPTIC(ITEM_SETUP_HAPTIC_LENGTH) @@ -214,7 +215,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); + MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), IF_AUDIO(0) IF_BUZZER(0) IF_VOICE(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) 0, IF_AUDIO(0) IF_CPUARM(LABEL(VARIO)) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_CPUARM(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, IF_CPUARM(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_GPS(0) IF_GPS(0) IF_PXX(0) IF_CPUARM(0) IF_CPUARM(0) IF_FAI_CHOICE(0) 0, LABEL(TX_MODE), CASE_PCBTARANIS(0) 1/*to force edit mode*/}); uint8_t sub = m_posVert - 1; @@ -360,24 +361,6 @@ void menuGeneralSetup(uint8_t event) case ITEM_SETUP_WAV_VOLUME: SLIDER_5POS(y, g_eeGeneral.wavVolume, STR_WAV_VOLUME, event, attr); break; - case ITEM_SETUP_VARIO_VOLUME: - SLIDER_5POS(y, g_eeGeneral.varioVolume, STR_VARIO_VOLUME, event, attr); - break; - case ITEM_SETUP_VARIO_PITCH: - lcd_putsLeft(y, "\001Vario Pitch"); - lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|LEFT); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -40, 40); - break; - case ITEM_SETUP_VARIO_RANGE: - lcd_putsLeft(y, "\001Vario Max"); - lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|LEFT); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -80, 80); - break; - case ITEM_SETUP_VARIO_REPEAT: - lcd_putsLeft(y, "\001Vario Repeat"); - lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|LEFT); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRepeat, -30, 120); - break; case ITEM_SETUP_BACKGROUND_VOLUME: SLIDER_5POS(y, g_eeGeneral.backgroundVolume, STR_BG_VOLUME, event, attr); break; @@ -397,6 +380,33 @@ void menuGeneralSetup(uint8_t event) break; #endif +#if defined(CPUARM) + case ITEM_SETUP_VARIO_LABEL: + lcd_putsLeft(y, STR_VARIO); + break; + case ITEM_SETUP_VARIO_VOLUME: + SLIDER_5POS(y, g_eeGeneral.varioVolume, TR_SPEAKER_VOLUME, event, attr); + break; + case ITEM_SETUP_VARIO_PITCH: + lcd_putsLeft(y, "\001Pitch at Zero"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10), attr|LEFT); + lcd_putsAtt(lcdLastPos, y, "Hz", attr); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioPitch, -40, 40); + break; + case ITEM_SETUP_VARIO_RANGE: + lcd_putsLeft(y, "\001Pitch at Max"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)+VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10), attr|LEFT); + lcd_putsAtt(lcdLastPos, y, "Hz", attr); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRange, -80, 80); + break; + case ITEM_SETUP_VARIO_REPEAT: + lcd_putsLeft(y, "\001Repeat at Zero"); + lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|LEFT); + lcd_putsAtt(lcdLastPos, y, "ms", attr); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRepeat, -30, 50); + break; +#endif + #if defined(HAPTIC) case ITEM_SETUP_HAPTIC_LABEL: lcd_putsLeft(y, STR_HAPTIC_LABEL); diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 1d1fcd108..898f94080 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -614,7 +614,7 @@ #define TR_ALARMSWARN "ALARMS" #define TR_SWITCHWARN TR("SWITCH","CONTROL") #define TR_INVERT_THR TR("Invert Thr?","Invert Throttle?") -#define TR_SPEAKER_VOLUME INDENT "Volume" +#define TR_SPEAKER_VOLUME INDENT "Volume" // TODO could be TR_VOLUME ? #define TR_LCD "LCD" #define TR_BRIGHTNESS INDENT "Brightness" #define TR_CPU_TEMP "CPU Temp.\016>" @@ -791,7 +791,7 @@ #define TR_BEEP_VOLUME "Beep Volume" #define TR_WAV_VOLUME "Wav Volume" -#define TR_VARIO_VOLUME "Vario Volume" +#define TR_VARIO_VOLUME "Vario Volume" // TODO may be removed #define TR_BG_VOLUME "Bg Volume" #define TR_TOP_BAR "Top Bar" From 4d1df6a166e9dee91d66a408680f476e62fbdc16 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 19 Feb 2014 20:31:50 +0100 Subject: [PATCH 13/22] 4 stages mixer. Now vario can be used with a background music! --- radio/src/audio_arm.cpp | 166 +++++++++++++++++++--------------------- radio/src/audio_arm.h | 70 +++++++++-------- radio/src/maths.cpp | 10 +-- 3 files changed, 123 insertions(+), 123 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 4c374dc73..c93597304 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -435,7 +435,7 @@ void AudioQueue::pushBuffer(AudioBuffer *buffer) __enable_irq(); } -void mix(uint16_t * result, int sample, unsigned int fade) +void mixSample(uint16_t * result, int sample, unsigned int fade) { *result = limit(0, *result + ((sample >> fade) >> 4), 4095); } @@ -445,42 +445,41 @@ void mix(uint16_t * result, int sample, unsigned int fade) #define RIFF_CHUNK_SIZE 12 uint8_t wavBuffer[AUDIO_BUFFER_SIZE*2]; -int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) +int WavContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade) { FRESULT result = FR_OK; UINT read = 0; - AudioFragment & fragment = context.fragment; if (fragment.file[1]) { - result = f_open(&context.wav.file, fragment.file, FA_OPEN_EXISTING | FA_READ); + result = f_open(&state.file, fragment.file, FA_OPEN_EXISTING | FA_READ); fragment.file[1] = 0; if (result == FR_OK) { - result = f_read(&context.wav.file, wavBuffer, RIFF_CHUNK_SIZE+8, &read); + result = f_read(&state.file, wavBuffer, RIFF_CHUNK_SIZE+8, &read); if (result == FR_OK && read == RIFF_CHUNK_SIZE+8 && !memcmp(wavBuffer, "RIFF", 4) && !memcmp(wavBuffer+8, "WAVEfmt ", 8)) { uint32_t size = *((uint32_t *)(wavBuffer+16)); - result = (size < 256 ? f_read(&context.wav.file, wavBuffer, size+8, &read) : FR_DENIED); + result = (size < 256 ? f_read(&state.file, wavBuffer, size+8, &read) : FR_DENIED); if (result == FR_OK && read == size+8) { - context.wav.codec = ((uint16_t *)wavBuffer)[0]; - context.wav.freq = ((uint16_t *)wavBuffer)[2]; + state.codec = ((uint16_t *)wavBuffer)[0]; + state.freq = ((uint16_t *)wavBuffer)[2]; uint32_t *wavSamplesPtr = (uint32_t *)(wavBuffer + size); uint32_t size = wavSamplesPtr[1]; - if (context.wav.freq != 0 && context.wav.freq * (AUDIO_SAMPLE_RATE / context.wav.freq) == AUDIO_SAMPLE_RATE) { - context.wav.resampleRatio = (AUDIO_SAMPLE_RATE / context.wav.freq); - context.wav.readSize = (context.wav.codec == CODEC_ID_PCM_S16LE ? 2*AUDIO_BUFFER_SIZE : AUDIO_BUFFER_SIZE) / context.wav.resampleRatio; + if (state.freq != 0 && state.freq * (AUDIO_SAMPLE_RATE / state.freq) == AUDIO_SAMPLE_RATE) { + state.resampleRatio = (AUDIO_SAMPLE_RATE / state.freq); + state.readSize = (state.codec == CODEC_ID_PCM_S16LE ? 2*AUDIO_BUFFER_SIZE : AUDIO_BUFFER_SIZE) / state.resampleRatio; } else { result = FR_DENIED; } while (result == FR_OK && memcmp(wavSamplesPtr, "data", 4) != 0) { - result = f_lseek(&context.wav.file, f_tell(&context.wav.file)+size); + result = f_lseek(&state.file, f_tell(&state.file)+size); if (result == FR_OK) { - result = f_read(&context.wav.file, wavBuffer, 8, &read); + result = f_read(&state.file, wavBuffer, 8, &read); if (read != 8) result = FR_DENIED; wavSamplesPtr = (uint32_t *)wavBuffer; size = wavSamplesPtr[1]; } } - context.wav.size = size; + state.size = size; } else { result = FR_DENIED; @@ -494,46 +493,46 @@ int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, u read = 0; if (result == FR_OK) { - result = f_read(&context.wav.file, wavBuffer, context.wav.readSize, &read); + result = f_read(&state.file, wavBuffer, state.readSize, &read); if (result == FR_OK) { - if (read > context.wav.size) { - read = context.wav.size; + if (read > state.size) { + read = state.size; } - context.wav.size -= read; + state.size -= read; - if (read != context.wav.readSize) { - f_close(&context.wav.file); + if (read != state.readSize) { + f_close(&state.file); fragment.clear(); } uint16_t * samples = buffer->data; - if (context.wav.codec == CODEC_ID_PCM_S16LE) { + if (state.codec == CODEC_ID_PCM_S16LE) { read /= 2; for (uint32_t i=0; idata; } } - context.clear(); + clear(); return -result; } #else -int AudioQueue::mixWav(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) +int WavContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade) { return 0; } @@ -549,26 +548,25 @@ inline float evalVolumeRatio(int freq, int volume) return result; } -int AudioQueue::mixTone(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade) +int ToneContext::mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade) { - AudioFragment & fragment = context.fragment; int duration = 0; int result = 0; - int remainingDuration = fragment.tone.duration - context.tone.duration; + int remainingDuration = fragment.tone.duration - state.duration; if (remainingDuration > 0) { int points; - double toneIdx = context.tone.idx; + double toneIdx = state.idx; if (fragment.tone.reset) { - context.tone.duration = 0; - context.tone.pause = 0; + state.duration = 0; + state.pause = 0; } - if (fragment.tone.freq != context.tone.freq) { - context.tone.freq = fragment.tone.freq; - context.tone.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; - context.tone.volume = evalVolumeRatio(fragment.tone.freq, volume); + if (fragment.tone.freq != state.freq) { + state.freq = fragment.tone.freq; + state.step = double(DIM(sineValues)*fragment.tone.freq) / AUDIO_SAMPLE_RATE; + state.volume = evalVolumeRatio(fragment.tone.freq, volume); } if (fragment.tone.freqIncr) { @@ -582,59 +580,41 @@ int AudioQueue::mixTone(AudioContext &context, AudioBuffer *buffer, int volume, else { duration = remainingDuration; points = (duration * AUDIO_BUFFER_SIZE) / AUDIO_BUFFER_DURATION; - unsigned int end = toneIdx + (context.tone.step * points); + unsigned int end = toneIdx + (state.step * points); if (end > DIM(sineValues)) end -= (end % DIM(sineValues)); else end = DIM(sineValues); - points = (double(end) - toneIdx) / context.tone.step; + points = (double(end) - toneIdx) / state.step; } for (int i=0; idata[i], sample, fade); - toneIdx += context.tone.step; + int16_t sample = sineValues[int(toneIdx)] / state.volume; + mixSample(&buffer->data[i], sample, fade); + toneIdx += state.step; if ((unsigned int)toneIdx >= DIM(sineValues)) toneIdx -= DIM(sineValues); } if (remainingDuration > AUDIO_BUFFER_DURATION) { - context.tone.duration += AUDIO_BUFFER_DURATION; - context.tone.idx = toneIdx; + state.duration += AUDIO_BUFFER_DURATION; + state.idx = toneIdx; return AUDIO_BUFFER_SIZE; } else { - context.tone.duration = 32000; // once the tone is finished, it's not possible to update its frequency and duration + state.duration = 32000; // once the tone is finished, it's not possible to update its frequency and duration } } - remainingDuration = fragment.tone.pause - context.tone.pause; + remainingDuration = fragment.tone.pause - state.pause; if (remainingDuration > 0) { result = AUDIO_BUFFER_SIZE; - context.tone.pause += min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); - if (fragment.tone.pause > context.tone.pause) + state.pause += min(AUDIO_BUFFER_DURATION-duration, fragment.tone.pause); + if (fragment.tone.pause > state.pause) return result; } - context.clear(); - return result; -} - -int AudioQueue::mixAudioContext(AudioContext &context, AudioBuffer *buffer, int beepVolume, int wavVolume, unsigned int fade) -{ - int result; - AudioFragment & fragment = context.fragment; - - if (fragment.type == FRAGMENT_TONE) { - result = mixTone(context, buffer, beepVolume, fade); - } - else if (fragment.type == FRAGMENT_FILE) { - result = mixWav(context, buffer, wavVolume, fade); - } - else { - result = 0; - } - + clear(); return result; } @@ -651,15 +631,20 @@ void AudioQueue::wakeup() buffer->data[i] = 0x8000 >> 4; /* silence */ } - // mix the foreground context - result = mixAudioContext(foregroundContext, buffer, g_eeGeneral.beepVolume, g_eeGeneral.wavVolume, fade); + // mix the priority context (only tones) + result = priorityContext.mixBuffer(buffer, g_eeGeneral.beepVolume, fade); if (result > 0) { size = result; fade += 1; } - // mix the normal context - result = mixAudioContext(currentContext, buffer, g_eeGeneral.beepVolume, g_eeGeneral.wavVolume, fade); + // mix the normal context (tones and wavs) + if (normalContext.fragment.type == FRAGMENT_TONE) + result = normalContext.tone.mixBuffer(buffer, g_eeGeneral.beepVolume, fade); + else if (normalContext.fragment.type == FRAGMENT_FILE) + result = normalContext.wav.mixBuffer(buffer, g_eeGeneral.wavVolume, fade); + else + result = 0; if (result > 0) { size = max(size, result); fade += 1; @@ -667,8 +652,7 @@ void AudioQueue::wakeup() else { CoEnterMutexSection(audioMutex); if (ridx != widx) { - currentContext.clear(); - currentContext.fragment = fragments[ridx]; + normalContext.fragment = fragments[ridx]; if (!fragments[ridx].repeat--) { ridx = (ridx + 1) % AUDIO_QUEUE_LENGTH; } @@ -676,9 +660,16 @@ void AudioQueue::wakeup() CoLeaveMutexSection(audioMutex); } + // mix the vario context + result = varioContext.mixBuffer(buffer, g_eeGeneral.varioVolume, fade); + if (result > 0) { + size = max(size, result); + fade += 1; + } + // mix the background context if (!isFunctionActive(FUNCTION_BACKGND_MUSIC_PAUSE)) { - result = mixAudioContext(backgroundContext, buffer, g_eeGeneral.varioVolume, g_eeGeneral.backgroundVolume, fade); + result = backgroundContext.mixBuffer(buffer, g_eeGeneral.backgroundVolume, fade); if (result > 0) { size = max(size, result); } @@ -711,7 +702,7 @@ void AudioQueue::pause(uint16_t len) bool AudioQueue::isPlaying(uint8_t id) { - if (currentContext.fragment.id == id || backgroundContext.fragment.id == id) + if (normalContext.fragment.id == id || backgroundContext.fragment.id == id) return true; uint8_t i = ridx; @@ -732,9 +723,7 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f freq = BEEP_MIN_FREQ; if (flags & PLAY_BACKGROUND) { - AudioFragment & fragment = backgroundContext.fragment; - if (fragment.type != FRAGMENT_TONE) - backgroundContext.clear(); + AudioFragment & fragment = varioContext.fragment; fragment.type = FRAGMENT_TONE; fragment.tone.freq = freq; fragment.tone.duration = len; @@ -746,9 +735,9 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f len = getToneLength(len); if (flags & PLAY_NOW) { - AudioFragment & fragment = foregroundContext.fragment; + AudioFragment & fragment = priorityContext.fragment; if (fragment.type == FRAGMENT_EMPTY) { - foregroundContext.clear(); + priorityContext.clear(); fragment.type = FRAGMENT_TONE; fragment.repeat = flags & 0x0f; fragment.tone.freq = freq; @@ -805,9 +794,9 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id) fragment.id = id; } else if (flags & PLAY_NOW) { - AudioFragment & fragment = foregroundContext.fragment; + AudioFragment & fragment = priorityContext.fragment; if (fragment.type == FRAGMENT_EMPTY) { - foregroundContext.clear(); + priorityContext.clear(); fragment.type = FRAGMENT_FILE; strcpy(fragment.file, filename); fragment.repeat = flags & 0x0f; @@ -857,8 +846,9 @@ void AudioQueue::reset() { CoEnterMutexSection(audioMutex); widx = ridx; // clean the queue - foregroundContext.clear(); - currentContext.clear(); + priorityContext.clear(); + normalContext.tone.clear(); + varioContext.clear(); backgroundContext.clear(); CoLeaveMutexSection(audioMutex); } diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 40be7179a..14dbc666a 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -90,21 +90,10 @@ struct AudioFragment { } }; -class AudioContext { +class ToneContext { public: AudioFragment fragment; -#if defined(SDCARD) - struct { - FIL file; - uint8_t codec; - uint32_t freq; - uint32_t size; - uint8_t resampleRatio; - uint16_t readSize; - } wav; -#endif - struct { double step; double idx; @@ -112,22 +101,46 @@ class AudioContext { uint16_t freq; uint16_t duration; uint16_t pause; - inline void clear() - { - step = 0; - idx = 0; - volume = 0; - freq = 0; - duration = 0; - pause = 0; - } - } tone; + } state; + + inline void clear() + { + memset(this, 0, sizeof(ToneContext)); + } + + int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade); +}; + +class WavContext { + public: + AudioFragment fragment; + + struct { + FIL file; + uint8_t codec; + uint32_t freq; + uint32_t size; + uint8_t resampleRatio; + uint16_t readSize; + } state; inline void clear() { fragment.clear(); - tone.clear(); } + + int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade); +}; + +class MixedContext { + public: + union { + AudioFragment fragment; + ToneContext tone; + WavContext wav; + }; + + int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade); }; bool dacQueue(AudioBuffer *buffer); @@ -190,19 +203,16 @@ class AudioQueue { void wakeup(); - int mixAudioContext(AudioContext &context, AudioBuffer *buffer, int beepVolume, int wavVolume, unsigned int fade); - int mixTone(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade); - int mixWav(AudioContext &context, AudioBuffer *buffer, int volume, unsigned int fade); - volatile bool state; uint8_t ridx; uint8_t widx; AudioFragment fragments[AUDIO_QUEUE_LENGTH]; - AudioContext backgroundContext; // for background music / vario - AudioContext currentContext; - AudioContext foregroundContext; // for important beeps + MixedContext normalContext; + WavContext backgroundContext; + ToneContext priorityContext; + ToneContext varioContext; AudioBuffer buffers[AUDIO_BUFFER_COUNT]; uint8_t bufferRIdx; diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 67456c95d..e05877fbe 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -140,18 +140,18 @@ void varioWakeup() verticalSpeed = varioMin; if (verticalSpeed > varioCenterMin) { - varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * verticalSpeed) / varioMax); - int varioPeriod = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * (varioMax-verticalSpeed) * (varioMax-verticalSpeed)) / (varioMax * varioMax); + varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) + (((VARIO_FREQUENCY_RANGE+(g_eeGeneral.varioRange*10)) * (verticalSpeed-varioCenterMin)) / varioMax); + int varioPeriod = VARIO_REPEAT_MAX + ((VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10)-VARIO_REPEAT_MAX) * (varioMax-verticalSpeed) * (varioMax-verticalSpeed)) / ((varioMax-varioCenterMin) * (varioMax-varioCenterMin)); if (verticalSpeed >= varioCenterMax || varioCenterMin == varioCenterMax) - varioDuration = varioPeriod / 4; + varioDuration = varioPeriod / 5; else varioDuration = varioPeriod * (85 - (((verticalSpeed-varioCenterMin) * 25) / (varioCenterMax-varioCenterMin))) / 100; varioPause = varioPeriod - varioDuration; varioFlags = PLAY_BACKGROUND; } else { - varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-BEEP_MIN_FREQ) * verticalSpeed) / varioMin); - varioDuration = 80; // TODO 20 // continuous beep: we will enter again here before the tone ends + varioFreq = VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10) - (((VARIO_FREQUENCY_ZERO+(g_eeGeneral.varioPitch*10)-((VARIO_FREQUENCY_ZERO + (g_eeGeneral.varioPitch*10))/2)) * (verticalSpeed-varioCenterMin)) / varioMin); + varioDuration = 80; // continuous beep: we will enter again here before the tone ends varioFlags = PLAY_BACKGROUND|PLAY_NOW; } From be203882780233efc45fbad169eb0d3a5174c9cc Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 16:51:25 +0100 Subject: [PATCH 14/22] Now the Ele stick can be used for tests when vario source is dTE --- radio/src/maths.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index e05877fbe..570669b9a 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -122,12 +122,14 @@ void varioWakeup() int varioFreq, varioDuration, varioPause=0; uint8_t varioFlags; -#if 1 - #warning "Ele stick for vario tests" - int verticalSpeed = getValue(MIXSRC_Ele); -#else - int verticalSpeed = frskyData.hub.varioSpeed; -#endif + int verticalSpeed; + if (g_model.frsky.varioSource == VARIO_SOURCE_DTE) { + #warning "Ele stick for vario tests" + verticalSpeed = getValue(MIXSRC_Ele); + } + else { + verticalSpeed = frskyData.hub.varioSpeed; + } int varioCenterMin = (int)g_model.frsky.varioCenterMin * 10 - 50; int varioCenterMax = (int)g_model.frsky.varioCenterMax * 10 + 50; From 1f318844f06874f3174ed1b5aa254bce442f45c4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 17:01:34 +0100 Subject: [PATCH 15/22] Compilation error (thanks Jenkins) --- radio/src/maths.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 570669b9a..1b87e4437 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -122,14 +122,14 @@ void varioWakeup() int varioFreq, varioDuration, varioPause=0; uint8_t varioFlags; - int verticalSpeed; + int verticalSpeed = frskyData.hub.varioSpeed; + +#if defined(PCBTARANIS) if (g_model.frsky.varioSource == VARIO_SOURCE_DTE) { #warning "Ele stick for vario tests" verticalSpeed = getValue(MIXSRC_Ele); } - else { - verticalSpeed = frskyData.hub.varioSpeed; - } +#endif int varioCenterMin = (int)g_model.frsky.varioCenterMin * 10 - 50; int varioCenterMax = (int)g_model.frsky.varioCenterMax * 10 + 50; From 901c5339ff55b799922e2345decb724c245a8ab1 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 22:47:14 +0100 Subject: [PATCH 16/22] 1000bytes RAM saved --- radio/src/audio_arm.cpp | 51 ++--------------------------------------- radio/util/codecs.py | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 49 deletions(-) create mode 100644 radio/util/codecs.py diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index c93597304..ee7ef7d01 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -330,54 +330,8 @@ bool isAudioFileAvailable(uint32_t i, char * filename) #define isAudioFileAvailable(i, f) false #endif -int16_t alawTable[256]; -int16_t ulawTable[256]; - -#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ -#define QUANT_MASK (0xf) /* Quantization field mask. */ -#define SEG_SHIFT (4) /* Left shift for segment number. */ -#define SEG_MASK (0x70) /* Segment field mask. */ -#define BIAS (0x84) /* Bias for linear code. */ - -static short alaw2linear(unsigned char a_val) -{ - int t; - int seg; - - a_val ^= 0x55; - - t = a_val & QUANT_MASK; - seg = ((unsigned)a_val & SEG_MASK) >> SEG_SHIFT; - if(seg) t= (t + t + 1 + 32) << (seg + 2); - else t= (t + t + 1 ) << 3; - - return (a_val & SIGN_BIT) ? t : -t; -} - -static short ulaw2linear(unsigned char u_val) -{ - int t; - - /* Complement to obtain normal u-law value. */ - u_val = ~u_val; - - /* - * Extract and bias the quantization bits. Then - * shift up by the segment number and subtract out the bias. - */ - t = ((u_val & QUANT_MASK) << 3) + BIAS; - t <<= ((unsigned)u_val & SEG_MASK) >> SEG_SHIFT; - - return (u_val & SIGN_BIT) ? (BIAS - t) : (t - BIAS); -} - -void codecsInit() -{ - for (uint32_t i=0; i<256; i++) { - alawTable[i] = alaw2linear(i); - ulawTable[i] = ulaw2linear(i); - } -} +const int16_t alawTable[256] = { -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736, -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784, -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368, -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392, -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944, -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136, -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472, -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568, -344, -328, -376, -360, -280, -264, -312, -296, -472, -456, -504, -488, -408, -392, -440, -424, -88, -72, -120, -104, -24, -8, -56, -40, -216, -200, -248, -232, -152, -136, -184, -168, -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184, -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696, -688, -656, -752, -720, -560, -528, -624, -592, -944, -912, -1008, -976, -816, -784, -880, -848, 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736, 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784, 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368, 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392, 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944, 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136, 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472, 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568, 344, 328, 376, 360, 280, 264, 312, 296, 472, 456, 504, 488, 408, 392, 440, 424, 88, 72, 120, 104, 24, 8, 56, 40, 216, 200, 248, 232, 152, 136, 184, 168, 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184, 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696, 688, 656, 752, 720, 560, 528, 624, 592, 944, 912, 1008, 976, 816, 784, 880, 848 }; +const int16_t ulawTable[256] = { -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956, -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764, -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412, -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316, -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140, -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092, -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004, -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980, -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436, -1372, -1308, -1244, -1180, -1116, -1052, -988, -924, -876, -844, -812, -780, -748, -716, -684, -652, -620, -588, -556, -524, -492, -460, -428, -396, -372, -356, -340, -324, -308, -292, -276, -260, -244, -228, -212, -196, -180, -164, -148, -132, -120, -112, -104, -96, -88, -80, -72, -64, -56, -48, -40, -32, -24, -16, -8, 0, 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956, 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764, 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412, 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316, 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140, 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092, 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004, 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980, 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436, 1372, 1308, 1244, 1180, 1116, 1052, 988, 924, 876, 844, 812, 780, 748, 716, 684, 652, 620, 588, 556, 524, 492, 460, 428, 396, 372, 356, 340, 324, 308, 292, 276, 260, 244, 228, 212, 196, 180, 164, 148, 132, 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0 }; AudioQueue audioQueue; @@ -407,7 +361,6 @@ void audioTask(void* pdata) #if defined(SDCARD) if (!unexpectedShutdown) { - codecsInit(); sdInit(); AUDIO_TADA(); } diff --git a/radio/util/codecs.py b/radio/util/codecs.py new file mode 100644 index 000000000..4c75a6ed6 --- /dev/null +++ b/radio/util/codecs.py @@ -0,0 +1,51 @@ +#!/bin/env python + +SIGN_BIT = (0x80) # Sign bit for a A-law byte. +QUANT_MASK = (0xf) # Quantization field mask. +SEG_SHIFT = (4) # Left shift for segment number. +SEG_MASK = (0x70) # Segment field mask. +BIAS = (0x84) # Bias for linear code. + +def alaw2linear(a_val): + a_val ^= 0x55 + + t = a_val & QUANT_MASK + seg = (a_val & SEG_MASK) >> SEG_SHIFT + if (seg): + t = (t + t + 1 + 32) << (seg + 2) + else: + t = (t + t + 1 ) << 3 + + if a_val & SIGN_BIT: + return t + else: + return -t + +def ulaw2linear(u_val): + # Complement to obtain normal u-law value. + u_val = ~u_val + + # Extract and bias the quantization bits. Then + # shift up by the segment number and subtract out the bias. + t = ((u_val & QUANT_MASK) << 3) + BIAS + t <<= (u_val & SEG_MASK) >> SEG_SHIFT + + if u_val & SIGN_BIT: + return (BIAS - t) + else: + return (t - BIAS) + +def pcmTable(fn): + result = [] + for i in range(256): + result.append(fn(i)) + return result + +def tableToString(name, table): + result = 'const int16_t ' + name + '[256] = { ' + result += ', '.join([str(i) for i in table]) + result += ' };' + return result + +print tableToString('alawTable', pcmTable(alaw2linear)) +print tableToString('ulawTable', pcmTable(ulaw2linear)) From 99e42ceeb24d45909c1f2cade17bacf5aed30f32 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 20 Feb 2014 23:26:34 +0100 Subject: [PATCH 17/22] Different harmonics. Seem to be better. I would say that: - all beeps from the radio need to be lowered. - perhaps the low frequencies don't need to be amplified any more? --- radio/src/audio_arm.cpp | 206 ++++++++++++++++++++-------------------- radio/util/sinus.py | 2 +- 2 files changed, 104 insertions(+), 104 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index ee7ef7d01..5e3fd7ef6 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,109 +41,109 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 218, 437, 655, 874, 1092, 1311, 1529, 1747, 1966, - 2184, 2401, 2619, 2837, 3054, 3271, 3488, 3705, 3921, 4138, - 4354, 4569, 4785, 5000, 5215, 5429, 5643, 5857, 6071, 6284, - 6496, 6709, 6920, 7132, 7343, 7553, 7763, 7973, 8182, 8390, - 8598, 8806, 9012, 9219, 9425, 9630, 9834, 10038, 10242, 10444, - 10646, 10848, 11049, 11249, 11448, 11647, 11845, 12042, 12238, 12434, - 12629, 12823, 13017, 13209, 13401, 13592, 13782, 13972, 14160, 14348, - 14535, 14721, 14906, 15090, 15273, 15456, 15637, 15818, 15997, 16176, - 16354, 16531, 16706, 16881, 17055, 17228, 17400, 17570, 17740, 17909, - 18077, 18243, 18409, 18574, 18737, 18899, 19061, 19221, 19380, 19538, - 19695, 19851, 20006, 20160, 20312, 20464, 20614, 20763, 20911, 21058, - 21204, 21348, 21491, 21634, 21775, 21914, 22053, 22191, 22327, 22462, - 22596, 22728, 22860, 22990, 23119, 23247, 23373, 23499, 23623, 23746, - 23867, 23988, 24107, 24225, 24342, 24457, 24571, 24684, 24796, 24906, - 25016, 25123, 25230, 25336, 25440, 25543, 25644, 25745, 25844, 25942, - 26039, 26134, 26228, 26321, 26412, 26503, 26592, 26680, 26766, 26852, - 26936, 27018, 27100, 27180, 27259, 27337, 27413, 27489, 27563, 27635, - 27707, 27777, 27846, 27914, 27980, 28046, 28110, 28173, 28234, 28295, - 28354, 28412, 28468, 28524, 28578, 28631, 28683, 28733, 28783, 28831, - 28878, 28924, 28968, 29011, 29054, 29095, 29134, 29173, 29210, 29247, - 29282, 29316, 29349, 29380, 29411, 29440, 29468, 29495, 29521, 29545, - 29569, 29591, 29613, 29633, 29652, 29670, 29686, 29702, 29717, 29730, - 29743, 29754, 29764, 29773, 29781, 29788, 29794, 29799, 29802, 29805, - 29806, 29807, 29806, 29805, 29802, 29799, 29794, 29788, 29781, 29773, - 29765, 29755, 29744, 29732, 29719, 29705, 29690, 29675, 29658, 29640, - 29621, 29601, 29580, 29559, 29536, 29512, 29488, 29462, 29435, 29408, - 29379, 29350, 29320, 29288, 29256, 29223, 29189, 29154, 29118, 29081, - 29044, 29005, 28966, 28925, 28884, 28842, 28799, 28755, 28710, 28664, - 28617, 28570, 28522, 28472, 28422, 28371, 28320, 28267, 28214, 28159, - 28104, 28048, 27991, 27934, 27875, 27816, 27756, 27695, 27633, 27570, - 27507, 27443, 27378, 27312, 27245, 27178, 27109, 27040, 26971, 26900, - 26829, 26756, 26683, 26610, 26535, 26460, 26384, 26307, 26229, 26151, - 26072, 25992, 25911, 25830, 25748, 25665, 25581, 25497, 25412, 25326, - 25239, 25152, 25064, 24975, 24885, 24795, 24704, 24612, 24520, 24427, - 24333, 24238, 24143, 24047, 23950, 23853, 23755, 23656, 23556, 23456, - 23355, 23254, 23151, 23048, 22945, 22840, 22735, 22630, 22523, 22416, - 22308, 22200, 22091, 21981, 21871, 21760, 21648, 21536, 21423, 21309, - 21194, 21079, 20964, 20848, 20731, 20613, 20495, 20376, 20257, 20137, - 20016, 19894, 19773, 19650, 19527, 19403, 19279, 19154, 19028, 18902, - 18775, 18647, 18519, 18391, 18262, 18132, 18001, 17870, 17739, 17607, - 17474, 17341, 17207, 17073, 16938, 16802, 16666, 16530, 16393, 16255, - 16117, 15978, 15839, 15699, 15559, 15418, 15277, 15135, 14992, 14850, - 14706, 14562, 14418, 14273, 14128, 13982, 13836, 13689, 13542, 13394, - 13246, 13097, 12948, 12799, 12649, 12498, 12347, 12196, 12044, 11892, - 11740, 11587, 11433, 11280, 11125, 10971, 10816, 10661, 10505, 10349, - 10192, 10036, 9878, 9721, 9563, 9405, 9246, 9087, 8928, 8768, - 8609, 8448, 8288, 8127, 7966, 7805, 7643, 7481, 7319, 7156, - 6994, 6831, 6667, 6504, 6340, 6176, 6012, 5847, 5683, 5518, - 5353, 5188, 5022, 4857, 4691, 4525, 4359, 4192, 4026, 3859, - 3692, 3526, 3358, 3191, 3024, 2857, 2689, 2521, 2354, 2186, - 2018, 1850, 1682, 1514, 1346, 1178, 1009, 841, 673, 505, - 336, 168, 0, -168, -336, -505, -673, -841, -1009, -1178, - -1346, -1514, -1682, -1850, -2018, -2186, -2354, -2521, -2689, -2857, - -3024, -3191, -3358, -3526, -3692, -3859, -4026, -4192, -4359, -4525, - -4691, -4857, -5022, -5188, -5353, -5518, -5683, -5847, -6012, -6176, - -6340, -6504, -6667, -6831, -6994, -7156, -7319, -7481, -7643, -7805, - -7966, -8127, -8288, -8448, -8609, -8768, -8928, -9087, -9246, -9405, - -9563, -9721, -9878, -10036, -10192, -10349, -10505, -10661, -10816, -10971, - -11125, -11280, -11433, -11587, -11740, -11892, -12044, -12196, -12347, -12498, - -12649, -12799, -12948, -13097, -13246, -13394, -13542, -13689, -13836, -13982, - -14128, -14273, -14418, -14562, -14706, -14850, -14992, -15135, -15277, -15418, - -15559, -15699, -15839, -15978, -16117, -16255, -16393, -16530, -16666, -16802, - -16938, -17073, -17207, -17341, -17474, -17607, -17739, -17870, -18001, -18132, - -18262, -18391, -18519, -18647, -18775, -18902, -19028, -19154, -19279, -19403, - -19527, -19650, -19773, -19894, -20016, -20137, -20257, -20376, -20495, -20613, - -20731, -20848, -20964, -21079, -21194, -21309, -21423, -21536, -21648, -21760, - -21871, -21981, -22091, -22200, -22308, -22416, -22523, -22630, -22735, -22840, - -22945, -23048, -23151, -23254, -23355, -23456, -23556, -23656, -23755, -23853, - -23950, -24047, -24143, -24238, -24333, -24427, -24520, -24612, -24704, -24795, - -24885, -24975, -25064, -25152, -25239, -25326, -25412, -25497, -25581, -25665, - -25748, -25830, -25911, -25992, -26072, -26151, -26229, -26307, -26384, -26460, - -26535, -26610, -26683, -26756, -26829, -26900, -26971, -27040, -27109, -27178, - -27245, -27312, -27378, -27443, -27507, -27570, -27633, -27695, -27756, -27816, - -27875, -27934, -27991, -28048, -28104, -28159, -28214, -28267, -28320, -28371, - -28422, -28472, -28522, -28570, -28617, -28664, -28710, -28755, -28799, -28842, - -28884, -28925, -28966, -29005, -29044, -29081, -29118, -29154, -29189, -29223, - -29256, -29288, -29320, -29350, -29379, -29408, -29435, -29462, -29488, -29512, - -29536, -29559, -29580, -29601, -29621, -29640, -29658, -29675, -29690, -29705, - -29719, -29732, -29744, -29755, -29765, -29773, -29781, -29788, -29794, -29799, - -29802, -29805, -29806, -29807, -29806, -29805, -29802, -29799, -29794, -29788, - -29781, -29773, -29764, -29754, -29743, -29730, -29717, -29702, -29686, -29670, - -29652, -29633, -29613, -29591, -29569, -29545, -29521, -29495, -29468, -29440, - -29411, -29380, -29349, -29316, -29282, -29247, -29210, -29173, -29134, -29095, - -29054, -29011, -28968, -28924, -28878, -28831, -28783, -28733, -28683, -28631, - -28578, -28524, -28468, -28412, -28354, -28295, -28234, -28173, -28110, -28046, - -27980, -27914, -27846, -27777, -27707, -27635, -27563, -27489, -27413, -27337, - -27259, -27180, -27100, -27018, -26936, -26852, -26766, -26680, -26592, -26503, - -26412, -26321, -26228, -26134, -26039, -25942, -25844, -25745, -25644, -25543, - -25440, -25336, -25230, -25123, -25016, -24906, -24796, -24684, -24571, -24457, - -24342, -24225, -24107, -23988, -23867, -23746, -23623, -23499, -23373, -23247, - -23119, -22990, -22860, -22728, -22596, -22462, -22327, -22191, -22053, -21914, - -21775, -21634, -21491, -21348, -21204, -21058, -20911, -20763, -20614, -20464, - -20312, -20160, -20006, -19851, -19695, -19538, -19380, -19221, -19061, -18899, - -18737, -18574, -18409, -18243, -18077, -17909, -17740, -17570, -17400, -17228, - -17055, -16881, -16706, -16531, -16354, -16176, -15997, -15818, -15637, -15456, - -15273, -15090, -14906, -14721, -14535, -14348, -14160, -13972, -13782, -13592, - -13401, -13209, -13017, -12823, -12629, -12434, -12238, -12042, -11845, -11647, - -11448, -11249, -11049, -10848, -10646, -10444, -10242, -10038, -9834, -9630, - -9425, -9219, -9012, -8806, -8598, -8390, -8182, -7973, -7763, -7553, - -7343, -7132, -6920, -6709, -6496, -6284, -6071, -5857, -5643, -5429, - -5215, -5000, -4785, -4569, -4354, -4138, -3921, -3705, -3488, -3271, - -3054, -2837, -2619, -2401, -2184, -1966, -1747, -1529, -1311, -1092, - -874, -655, -437, -218, + 0, 773, 1545, 2317, 3087, 3855, 4620, 5383, 6142, 6898, + 7649, 8395, 9135, 9870, 10599, 11321, 12035, 12742, 13441, 14132, + 14813, 15485, 16148, 16800, 17441, 18072, 18691, 19299, 19894, 20478, + 21048, 21605, 22149, 22680, 23196, 23698, 24185, 24658, 25116, 25558, + 25985, 26396, 26791, 27170, 27533, 27879, 28209, 28522, 28818, 29098, + 29360, 29605, 29833, 30044, 30237, 30414, 30573, 30714, 30839, 30946, + 31036, 31109, 31165, 31204, 31226, 31231, 31220, 31192, 31147, 31087, + 31011, 30918, 30811, 30687, 30549, 30396, 30227, 30045, 29848, 29637, + 29413, 29176, 28925, 28662, 28386, 28098, 27799, 27488, 27166, 26833, + 26491, 26138, 25776, 25404, 25024, 24636, 24240, 23836, 23425, 23007, + 22584, 22154, 21719, 21279, 20834, 20385, 19933, 19477, 19018, 18557, + 18094, 17630, 17164, 16698, 16231, 15764, 15298, 14834, 14370, 13908, + 13449, 12992, 12538, 12087, 11641, 11198, 10760, 10327, 9899, 9477, + 9060, 8650, 8247, 7850, 7460, 7079, 6704, 6338, 5981, 5632, + 5291, 4960, 4639, 4326, 4024, 3732, 3449, 3177, 2916, 2665, + 2425, 2196, 1978, 1771, 1575, 1391, 1218, 1056, 906, 767, + 640, 525, 421, 329, 248, 178, 121, 74, 39, 15, + 2, 0, 9, 29, 60, 101, 152, 214, 285, 367, + 458, 558, 668, 786, 914, 1050, 1194, 1346, 1506, 1674, + 1849, 2030, 2219, 2413, 2614, 2821, 3033, 3250, 3472, 3699, + 3929, 4164, 4402, 4644, 4888, 5135, 5384, 5635, 5887, 6141, + 6396, 6651, 6906, 7161, 7416, 7670, 7923, 8175, 8424, 8672, + 8917, 9160, 9399, 9635, 9868, 10097, 10321, 10541, 10757, 10967, + 11172, 11372, 11565, 11753, 11935, 12110, 12279, 12440, 12595, 12742, + 12882, 13014, 13139, 13255, 13364, 13464, 13556, 13640, 13715, 13781, + 13839, 13888, 13928, 13959, 13982, 13995, 14000, 13995, 13982, 13959, + 13928, 13888, 13839, 13781, 13715, 13640, 13556, 13464, 13364, 13255, + 13139, 13014, 12882, 12742, 12595, 12440, 12279, 12110, 11935, 11753, + 11565, 11372, 11172, 10967, 10757, 10541, 10321, 10097, 9868, 9635, + 9399, 9160, 8917, 8672, 8424, 8175, 7923, 7670, 7416, 7161, + 6906, 6651, 6396, 6141, 5887, 5635, 5384, 5135, 4888, 4644, + 4402, 4164, 3929, 3699, 3472, 3250, 3033, 2821, 2614, 2413, + 2219, 2030, 1849, 1674, 1506, 1346, 1194, 1050, 914, 786, + 668, 558, 458, 367, 285, 214, 152, 101, 60, 29, + 9, 0, 2, 15, 39, 74, 121, 178, 248, 329, + 421, 525, 640, 767, 906, 1056, 1218, 1391, 1575, 1771, + 1978, 2196, 2425, 2665, 2916, 3177, 3449, 3732, 4024, 4326, + 4639, 4960, 5291, 5632, 5981, 6338, 6704, 7079, 7460, 7850, + 8247, 8650, 9060, 9477, 9899, 10327, 10760, 11198, 11641, 12087, + 12538, 12992, 13449, 13908, 14370, 14834, 15298, 15764, 16231, 16698, + 17164, 17630, 18094, 18557, 19018, 19477, 19933, 20385, 20834, 21279, + 21719, 22154, 22584, 23007, 23425, 23836, 24240, 24636, 25024, 25404, + 25776, 26138, 26491, 26833, 27166, 27488, 27799, 28098, 28386, 28662, + 28925, 29176, 29413, 29637, 29848, 30045, 30227, 30396, 30549, 30687, + 30811, 30918, 31011, 31087, 31147, 31192, 31220, 31231, 31226, 31204, + 31165, 31109, 31036, 30946, 30839, 30714, 30573, 30414, 30237, 30044, + 29833, 29605, 29360, 29098, 28818, 28522, 28209, 27879, 27533, 27170, + 26791, 26396, 25985, 25558, 25116, 24658, 24185, 23698, 23196, 22680, + 22149, 21605, 21048, 20478, 19894, 19299, 18691, 18072, 17441, 16800, + 16148, 15485, 14813, 14132, 13441, 12742, 12035, 11321, 10599, 9870, + 9135, 8395, 7649, 6898, 6142, 5383, 4620, 3855, 3087, 2317, + 1545, 773, 0, -773, -1545, -2317, -3087, -3855, -4620, -5383, + -6142, -6898, -7649, -8395, -9135, -9870, -10599, -11321, -12035, -12742, + -13441, -14132, -14813, -15485, -16148, -16800, -17441, -18072, -18691, -19299, + -19894, -20478, -21048, -21605, -22149, -22680, -23196, -23698, -24185, -24658, + -25116, -25558, -25985, -26396, -26791, -27170, -27533, -27879, -28209, -28522, + -28818, -29098, -29360, -29605, -29833, -30044, -30237, -30414, -30573, -30714, + -30839, -30946, -31036, -31109, -31165, -31204, -31226, -31231, -31220, -31192, + -31147, -31087, -31011, -30918, -30811, -30687, -30549, -30396, -30227, -30045, + -29848, -29637, -29413, -29176, -28925, -28662, -28386, -28098, -27799, -27488, + -27166, -26833, -26491, -26138, -25776, -25404, -25024, -24636, -24240, -23836, + -23425, -23007, -22584, -22154, -21719, -21279, -20834, -20385, -19933, -19477, + -19018, -18557, -18094, -17630, -17164, -16698, -16231, -15764, -15298, -14834, + -14370, -13908, -13449, -12992, -12538, -12087, -11641, -11198, -10760, -10327, + -9899, -9477, -9060, -8650, -8247, -7850, -7460, -7079, -6704, -6338, + -5981, -5632, -5291, -4960, -4639, -4326, -4024, -3732, -3449, -3177, + -2916, -2665, -2425, -2196, -1978, -1771, -1575, -1391, -1218, -1056, + -906, -767, -640, -525, -421, -329, -248, -178, -121, -74, + -39, -15, -2, 0, -9, -29, -60, -101, -152, -214, + -285, -367, -458, -558, -668, -786, -914, -1050, -1194, -1346, + -1506, -1674, -1849, -2030, -2219, -2413, -2614, -2821, -3033, -3250, + -3472, -3699, -3929, -4164, -4402, -4644, -4888, -5135, -5384, -5635, + -5887, -6141, -6396, -6651, -6906, -7161, -7416, -7670, -7923, -8175, + -8424, -8672, -8917, -9160, -9399, -9635, -9868, -10097, -10321, -10541, + -10757, -10967, -11172, -11372, -11565, -11753, -11935, -12110, -12279, -12440, + -12595, -12742, -12882, -13014, -13139, -13255, -13364, -13464, -13556, -13640, + -13715, -13781, -13839, -13888, -13928, -13959, -13982, -13995, -14000, -13995, + -13982, -13959, -13928, -13888, -13839, -13781, -13715, -13640, -13556, -13464, + -13364, -13255, -13139, -13014, -12882, -12742, -12595, -12440, -12279, -12110, + -11935, -11753, -11565, -11372, -11172, -10967, -10757, -10541, -10321, -10097, + -9868, -9635, -9399, -9160, -8917, -8672, -8424, -8175, -7923, -7670, + -7416, -7161, -6906, -6651, -6396, -6141, -5887, -5635, -5384, -5135, + -4888, -4644, -4402, -4164, -3929, -3699, -3472, -3250, -3033, -2821, + -2614, -2413, -2219, -2030, -1849, -1674, -1506, -1346, -1194, -1050, + -914, -786, -668, -558, -458, -367, -285, -214, -152, -101, + -60, -29, -9, 0, -2, -15, -39, -74, -121, -178, + -248, -329, -421, -525, -640, -767, -906, -1056, -1218, -1391, + -1575, -1771, -1978, -2196, -2425, -2665, -2916, -3177, -3449, -3732, + -4024, -4326, -4639, -4960, -5291, -5632, -5981, -6338, -6704, -7079, + -7460, -7850, -8247, -8650, -9060, -9477, -9899, -10327, -10760, -11198, + -11641, -12087, -12538, -12992, -13449, -13908, -14370, -14834, -15298, -15764, + -16231, -16698, -17164, -17630, -18094, -18557, -19018, -19477, -19933, -20385, + -20834, -21279, -21719, -22154, -22584, -23007, -23425, -23836, -24240, -24636, + -25024, -25404, -25776, -26138, -26491, -26833, -27166, -27488, -27799, -28098, + -28386, -28662, -28925, -29176, -29413, -29637, -29848, -30045, -30227, -30396, + -30549, -30687, -30811, -30918, -31011, -31087, -31147, -31192, -31220, -31231, + -31226, -31204, -31165, -31109, -31036, -30946, -30839, -30714, -30573, -30414, + -30237, -30044, -29833, -29605, -29360, -29098, -28818, -28522, -28209, -27879, + -27533, -27170, -26791, -26396, -25985, -25558, -25116, -24658, -24185, -23698, + -23196, -22680, -22149, -21605, -21048, -20478, -19894, -19299, -18691, -18072, + -17441, -16800, -16148, -15485, -14813, -14132, -13441, -12742, -12035, -11321, + -10599, -9870, -9135, -8395, -7649, -6898, -6142, -5383, -4620, -3855, + -3087, -2317, -1545, -773, }; #if defined(SDCARD) diff --git a/radio/util/sinus.py b/radio/util/sinus.py index 68c09456d..cce2efce3 100644 --- a/radio/util/sinus.py +++ b/radio/util/sinus.py @@ -3,7 +3,7 @@ import math samples = 1024 -amplitudes = (60000, 4096, 1024) +amplitudes = (28000, 0, 28000, 0, 28000) for i in range(samples): sample = 0.0 From 6955a492d7fc9756f1d3ba8e301e29fcee5d8718 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 11:52:02 +0100 Subject: [PATCH 18/22] A new set of amplitudes for the sine wave ... --- radio/src/audio_arm.cpp | 207 ++++++++++++++++++++-------------------- radio/util/sinus.py | 31 ++++-- 2 files changed, 126 insertions(+), 112 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 5e3fd7ef6..1340ccd7d 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,109 +41,110 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 773, 1545, 2317, 3087, 3855, 4620, 5383, 6142, 6898, - 7649, 8395, 9135, 9870, 10599, 11321, 12035, 12742, 13441, 14132, - 14813, 15485, 16148, 16800, 17441, 18072, 18691, 19299, 19894, 20478, - 21048, 21605, 22149, 22680, 23196, 23698, 24185, 24658, 25116, 25558, - 25985, 26396, 26791, 27170, 27533, 27879, 28209, 28522, 28818, 29098, - 29360, 29605, 29833, 30044, 30237, 30414, 30573, 30714, 30839, 30946, - 31036, 31109, 31165, 31204, 31226, 31231, 31220, 31192, 31147, 31087, - 31011, 30918, 30811, 30687, 30549, 30396, 30227, 30045, 29848, 29637, - 29413, 29176, 28925, 28662, 28386, 28098, 27799, 27488, 27166, 26833, - 26491, 26138, 25776, 25404, 25024, 24636, 24240, 23836, 23425, 23007, - 22584, 22154, 21719, 21279, 20834, 20385, 19933, 19477, 19018, 18557, - 18094, 17630, 17164, 16698, 16231, 15764, 15298, 14834, 14370, 13908, - 13449, 12992, 12538, 12087, 11641, 11198, 10760, 10327, 9899, 9477, - 9060, 8650, 8247, 7850, 7460, 7079, 6704, 6338, 5981, 5632, - 5291, 4960, 4639, 4326, 4024, 3732, 3449, 3177, 2916, 2665, - 2425, 2196, 1978, 1771, 1575, 1391, 1218, 1056, 906, 767, - 640, 525, 421, 329, 248, 178, 121, 74, 39, 15, - 2, 0, 9, 29, 60, 101, 152, 214, 285, 367, - 458, 558, 668, 786, 914, 1050, 1194, 1346, 1506, 1674, - 1849, 2030, 2219, 2413, 2614, 2821, 3033, 3250, 3472, 3699, - 3929, 4164, 4402, 4644, 4888, 5135, 5384, 5635, 5887, 6141, - 6396, 6651, 6906, 7161, 7416, 7670, 7923, 8175, 8424, 8672, - 8917, 9160, 9399, 9635, 9868, 10097, 10321, 10541, 10757, 10967, - 11172, 11372, 11565, 11753, 11935, 12110, 12279, 12440, 12595, 12742, - 12882, 13014, 13139, 13255, 13364, 13464, 13556, 13640, 13715, 13781, - 13839, 13888, 13928, 13959, 13982, 13995, 14000, 13995, 13982, 13959, - 13928, 13888, 13839, 13781, 13715, 13640, 13556, 13464, 13364, 13255, - 13139, 13014, 12882, 12742, 12595, 12440, 12279, 12110, 11935, 11753, - 11565, 11372, 11172, 10967, 10757, 10541, 10321, 10097, 9868, 9635, - 9399, 9160, 8917, 8672, 8424, 8175, 7923, 7670, 7416, 7161, - 6906, 6651, 6396, 6141, 5887, 5635, 5384, 5135, 4888, 4644, - 4402, 4164, 3929, 3699, 3472, 3250, 3033, 2821, 2614, 2413, - 2219, 2030, 1849, 1674, 1506, 1346, 1194, 1050, 914, 786, - 668, 558, 458, 367, 285, 214, 152, 101, 60, 29, - 9, 0, 2, 15, 39, 74, 121, 178, 248, 329, - 421, 525, 640, 767, 906, 1056, 1218, 1391, 1575, 1771, - 1978, 2196, 2425, 2665, 2916, 3177, 3449, 3732, 4024, 4326, - 4639, 4960, 5291, 5632, 5981, 6338, 6704, 7079, 7460, 7850, - 8247, 8650, 9060, 9477, 9899, 10327, 10760, 11198, 11641, 12087, - 12538, 12992, 13449, 13908, 14370, 14834, 15298, 15764, 16231, 16698, - 17164, 17630, 18094, 18557, 19018, 19477, 19933, 20385, 20834, 21279, - 21719, 22154, 22584, 23007, 23425, 23836, 24240, 24636, 25024, 25404, - 25776, 26138, 26491, 26833, 27166, 27488, 27799, 28098, 28386, 28662, - 28925, 29176, 29413, 29637, 29848, 30045, 30227, 30396, 30549, 30687, - 30811, 30918, 31011, 31087, 31147, 31192, 31220, 31231, 31226, 31204, - 31165, 31109, 31036, 30946, 30839, 30714, 30573, 30414, 30237, 30044, - 29833, 29605, 29360, 29098, 28818, 28522, 28209, 27879, 27533, 27170, - 26791, 26396, 25985, 25558, 25116, 24658, 24185, 23698, 23196, 22680, - 22149, 21605, 21048, 20478, 19894, 19299, 18691, 18072, 17441, 16800, - 16148, 15485, 14813, 14132, 13441, 12742, 12035, 11321, 10599, 9870, - 9135, 8395, 7649, 6898, 6142, 5383, 4620, 3855, 3087, 2317, - 1545, 773, 0, -773, -1545, -2317, -3087, -3855, -4620, -5383, - -6142, -6898, -7649, -8395, -9135, -9870, -10599, -11321, -12035, -12742, - -13441, -14132, -14813, -15485, -16148, -16800, -17441, -18072, -18691, -19299, - -19894, -20478, -21048, -21605, -22149, -22680, -23196, -23698, -24185, -24658, - -25116, -25558, -25985, -26396, -26791, -27170, -27533, -27879, -28209, -28522, - -28818, -29098, -29360, -29605, -29833, -30044, -30237, -30414, -30573, -30714, - -30839, -30946, -31036, -31109, -31165, -31204, -31226, -31231, -31220, -31192, - -31147, -31087, -31011, -30918, -30811, -30687, -30549, -30396, -30227, -30045, - -29848, -29637, -29413, -29176, -28925, -28662, -28386, -28098, -27799, -27488, - -27166, -26833, -26491, -26138, -25776, -25404, -25024, -24636, -24240, -23836, - -23425, -23007, -22584, -22154, -21719, -21279, -20834, -20385, -19933, -19477, - -19018, -18557, -18094, -17630, -17164, -16698, -16231, -15764, -15298, -14834, - -14370, -13908, -13449, -12992, -12538, -12087, -11641, -11198, -10760, -10327, - -9899, -9477, -9060, -8650, -8247, -7850, -7460, -7079, -6704, -6338, - -5981, -5632, -5291, -4960, -4639, -4326, -4024, -3732, -3449, -3177, - -2916, -2665, -2425, -2196, -1978, -1771, -1575, -1391, -1218, -1056, - -906, -767, -640, -525, -421, -329, -248, -178, -121, -74, - -39, -15, -2, 0, -9, -29, -60, -101, -152, -214, - -285, -367, -458, -558, -668, -786, -914, -1050, -1194, -1346, - -1506, -1674, -1849, -2030, -2219, -2413, -2614, -2821, -3033, -3250, - -3472, -3699, -3929, -4164, -4402, -4644, -4888, -5135, -5384, -5635, - -5887, -6141, -6396, -6651, -6906, -7161, -7416, -7670, -7923, -8175, - -8424, -8672, -8917, -9160, -9399, -9635, -9868, -10097, -10321, -10541, - -10757, -10967, -11172, -11372, -11565, -11753, -11935, -12110, -12279, -12440, - -12595, -12742, -12882, -13014, -13139, -13255, -13364, -13464, -13556, -13640, - -13715, -13781, -13839, -13888, -13928, -13959, -13982, -13995, -14000, -13995, - -13982, -13959, -13928, -13888, -13839, -13781, -13715, -13640, -13556, -13464, - -13364, -13255, -13139, -13014, -12882, -12742, -12595, -12440, -12279, -12110, - -11935, -11753, -11565, -11372, -11172, -10967, -10757, -10541, -10321, -10097, - -9868, -9635, -9399, -9160, -8917, -8672, -8424, -8175, -7923, -7670, - -7416, -7161, -6906, -6651, -6396, -6141, -5887, -5635, -5384, -5135, - -4888, -4644, -4402, -4164, -3929, -3699, -3472, -3250, -3033, -2821, - -2614, -2413, -2219, -2030, -1849, -1674, -1506, -1346, -1194, -1050, - -914, -786, -668, -558, -458, -367, -285, -214, -152, -101, - -60, -29, -9, 0, -2, -15, -39, -74, -121, -178, - -248, -329, -421, -525, -640, -767, -906, -1056, -1218, -1391, - -1575, -1771, -1978, -2196, -2425, -2665, -2916, -3177, -3449, -3732, - -4024, -4326, -4639, -4960, -5291, -5632, -5981, -6338, -6704, -7079, - -7460, -7850, -8247, -8650, -9060, -9477, -9899, -10327, -10760, -11198, - -11641, -12087, -12538, -12992, -13449, -13908, -14370, -14834, -15298, -15764, - -16231, -16698, -17164, -17630, -18094, -18557, -19018, -19477, -19933, -20385, - -20834, -21279, -21719, -22154, -22584, -23007, -23425, -23836, -24240, -24636, - -25024, -25404, -25776, -26138, -26491, -26833, -27166, -27488, -27799, -28098, - -28386, -28662, -28925, -29176, -29413, -29637, -29848, -30045, -30227, -30396, - -30549, -30687, -30811, -30918, -31011, -31087, -31147, -31192, -31220, -31231, - -31226, -31204, -31165, -31109, -31036, -30946, -30839, -30714, -30573, -30414, - -30237, -30044, -29833, -29605, -29360, -29098, -28818, -28522, -28209, -27879, - -27533, -27170, -26791, -26396, -25985, -25558, -25116, -24658, -24185, -23698, - -23196, -22680, -22149, -21605, -21048, -20478, -19894, -19299, -18691, -18072, - -17441, -16800, -16148, -15485, -14813, -14132, -13441, -12742, -12035, -11321, - -10599, -9870, -9135, -8395, -7649, -6898, -6142, -5383, -4620, -3855, - -3087, -2317, -1545, -773, + 0, 763, 1527, 2289, 3050, 3810, 4567, 5322, 6073, 6821, + 7565, 8305, 9039, 9769, 10493, 11211, 11922, 12626, 13324, 14013, + 14695, 15368, 16032, 16688, 17333, 17969, 18595, 19210, 19814, 20408, + 20989, 21559, 22117, 22663, 23196, 23716, 24223, 24717, 25197, 25664, + 26116, 26555, 26979, 27388, 27783, 28163, 28529, 28879, 29214, 29534, + 29838, 30127, 30401, 30659, 30901, 31128, 31340, 31535, 31716, 31880, + 32029, 32163, 32281, 32384, 32472, 32545, 32602, 32645, 32673, 32686, + 32685, 32670, 32640, 32596, 32539, 32468, 32384, 32287, 32176, 32054, + 31918, 31771, 31612, 31441, 31259, 31066, 30863, 30649, 30424, 30191, + 29947, 29695, 29434, 29165, 28887, 28602, 28309, 28010, 27704, 27392, + 27074, 26750, 26421, 26088, 25750, 25408, 25063, 24715, 24363, 24010, + 23654, 23296, 22938, 22578, 22218, 21857, 21497, 21138, 20779, 20422, + 20067, 19713, 19362, 19013, 18668, 18326, 17988, 17653, 17324, 16998, + 16678, 16363, 16054, 15750, 15453, 15162, 14877, 14600, 14329, 14066, + 13811, 13563, 13324, 13092, 12869, 12654, 12449, 12252, 12064, 11885, + 11715, 11555, 11404, 11263, 11132, 11010, 10898, 10796, 10704, 10622, + 10549, 10487, 10435, 10392, 10359, 10337, 10324, 10321, 10327, 10344, + 10369, 10405, 10449, 10503, 10566, 10638, 10719, 10808, 10906, 11013, + 11127, 11250, 11380, 11518, 11664, 11816, 11976, 12142, 12315, 12495, + 12680, 12871, 13067, 13269, 13476, 13688, 13904, 14124, 14348, 14576, + 14807, 15041, 15278, 15517, 15759, 16002, 16247, 16493, 16740, 16988, + 17236, 17484, 17732, 17979, 18225, 18471, 18714, 18957, 19197, 19435, + 19670, 19902, 20132, 20358, 20580, 20798, 21013, 21222, 21427, 21628, + 21823, 22012, 22196, 22375, 22547, 22713, 22873, 23026, 23172, 23311, + 23444, 23569, 23687, 23797, 23899, 23994, 24081, 24160, 24231, 24293, + 24348, 24394, 24432, 24461, 24483, 24495, 24500, 24495, 24483, 24461, + 24432, 24394, 24348, 24293, 24231, 24160, 24081, 23994, 23899, 23797, + 23687, 23569, 23444, 23311, 23172, 23026, 22873, 22713, 22547, 22375, + 22196, 22012, 21823, 21628, 21427, 21222, 21013, 20798, 20580, 20358, + 20132, 19902, 19670, 19435, 19197, 18957, 18714, 18471, 18225, 17979, + 17732, 17484, 17236, 16988, 16740, 16493, 16247, 16002, 15759, 15517, + 15278, 15041, 14807, 14576, 14348, 14124, 13904, 13688, 13476, 13269, + 13067, 12871, 12680, 12495, 12315, 12142, 11976, 11816, 11664, 11518, + 11380, 11250, 11127, 11013, 10906, 10808, 10719, 10638, 10566, 10503, + 10449, 10405, 10369, 10344, 10327, 10321, 10324, 10337, 10359, 10392, + 10435, 10487, 10549, 10622, 10704, 10796, 10898, 11010, 11132, 11263, + 11404, 11555, 11715, 11885, 12064, 12252, 12449, 12654, 12869, 13092, + 13324, 13563, 13811, 14066, 14329, 14600, 14877, 15162, 15453, 15750, + 16054, 16363, 16678, 16998, 17324, 17653, 17988, 18326, 18668, 19013, + 19362, 19713, 20067, 20422, 20779, 21138, 21497, 21857, 22218, 22578, + 22938, 23296, 23654, 24010, 24363, 24715, 25063, 25408, 25750, 26088, + 26421, 26750, 27074, 27392, 27704, 28010, 28309, 28602, 28887, 29165, + 29434, 29695, 29947, 30191, 30424, 30649, 30863, 31066, 31259, 31441, + 31612, 31771, 31918, 32054, 32176, 32287, 32384, 32468, 32539, 32596, + 32640, 32670, 32685, 32686, 32673, 32645, 32602, 32545, 32472, 32384, + 32281, 32163, 32029, 31880, 31716, 31535, 31340, 31128, 30901, 30659, + 30401, 30127, 29838, 29534, 29214, 28879, 28529, 28163, 27783, 27388, + 26979, 26555, 26116, 25664, 25197, 24717, 24223, 23716, 23196, 22663, + 22117, 21559, 20989, 20408, 19814, 19210, 18595, 17969, 17333, 16688, + 16032, 15368, 14695, 14013, 13324, 12626, 11922, 11211, 10493, 9769, + 9039, 8305, 7565, 6821, 6073, 5322, 4567, 3810, 3050, 2289, + 1527, 763, 0, -763, -1527, -2289, -3050, -3810, -4567, -5322, + -6073, -6821, -7565, -8305, -9039, -9769, -10493, -11211, -11922, -12626, + -13324, -14013, -14695, -15368, -16032, -16688, -17333, -17969, -18595, -19210, + -19814, -20408, -20989, -21559, -22117, -22663, -23196, -23716, -24223, -24717, + -25197, -25664, -26116, -26555, -26979, -27388, -27783, -28163, -28529, -28879, + -29214, -29534, -29838, -30127, -30401, -30659, -30901, -31128, -31340, -31535, + -31716, -31880, -32029, -32163, -32281, -32384, -32472, -32545, -32602, -32645, + -32673, -32686, -32685, -32670, -32640, -32596, -32539, -32468, -32384, -32287, + -32176, -32054, -31918, -31771, -31612, -31441, -31259, -31066, -30863, -30649, + -30424, -30191, -29947, -29695, -29434, -29165, -28887, -28602, -28309, -28010, + -27704, -27392, -27074, -26750, -26421, -26088, -25750, -25408, -25063, -24715, + -24363, -24010, -23654, -23296, -22938, -22578, -22218, -21857, -21497, -21138, + -20779, -20422, -20067, -19713, -19362, -19013, -18668, -18326, -17988, -17653, + -17324, -16998, -16678, -16363, -16054, -15750, -15453, -15162, -14877, -14600, + -14329, -14066, -13811, -13563, -13324, -13092, -12869, -12654, -12449, -12252, + -12064, -11885, -11715, -11555, -11404, -11263, -11132, -11010, -10898, -10796, + -10704, -10622, -10549, -10487, -10435, -10392, -10359, -10337, -10324, -10321, + -10327, -10344, -10369, -10405, -10449, -10503, -10566, -10638, -10719, -10808, + -10906, -11013, -11127, -11250, -11380, -11518, -11664, -11816, -11976, -12142, + -12315, -12495, -12680, -12871, -13067, -13269, -13476, -13688, -13904, -14124, + -14348, -14576, -14807, -15041, -15278, -15517, -15759, -16002, -16247, -16493, + -16740, -16988, -17236, -17484, -17732, -17979, -18225, -18471, -18714, -18957, + -19197, -19435, -19670, -19902, -20132, -20358, -20580, -20798, -21013, -21222, + -21427, -21628, -21823, -22012, -22196, -22375, -22547, -22713, -22873, -23026, + -23172, -23311, -23444, -23569, -23687, -23797, -23899, -23994, -24081, -24160, + -24231, -24293, -24348, -24394, -24432, -24461, -24483, -24495, -24500, -24495, + -24483, -24461, -24432, -24394, -24348, -24293, -24231, -24160, -24081, -23994, + -23899, -23797, -23687, -23569, -23444, -23311, -23172, -23026, -22873, -22713, + -22547, -22375, -22196, -22012, -21823, -21628, -21427, -21222, -21013, -20798, + -20580, -20358, -20132, -19902, -19670, -19435, -19197, -18957, -18714, -18471, + -18225, -17979, -17732, -17484, -17236, -16988, -16740, -16493, -16247, -16002, + -15759, -15517, -15278, -15041, -14807, -14576, -14348, -14124, -13904, -13688, + -13476, -13269, -13067, -12871, -12680, -12495, -12315, -12142, -11976, -11816, + -11664, -11518, -11380, -11250, -11127, -11013, -10906, -10808, -10719, -10638, + -10566, -10503, -10449, -10405, -10369, -10344, -10327, -10321, -10324, -10337, + -10359, -10392, -10435, -10487, -10549, -10622, -10704, -10796, -10898, -11010, + -11132, -11263, -11404, -11555, -11715, -11885, -12064, -12252, -12449, -12654, + -12869, -13092, -13324, -13563, -13811, -14066, -14329, -14600, -14877, -15162, + -15453, -15750, -16054, -16363, -16678, -16998, -17324, -17653, -17988, -18326, + -18668, -19013, -19362, -19713, -20067, -20422, -20779, -21138, -21497, -21857, + -22218, -22578, -22938, -23296, -23654, -24010, -24363, -24715, -25063, -25408, + -25750, -26088, -26421, -26750, -27074, -27392, -27704, -28010, -28309, -28602, + -28887, -29165, -29434, -29695, -29947, -30191, -30424, -30649, -30863, -31066, + -31259, -31441, -31612, -31771, -31918, -32054, -32176, -32287, -32384, -32468, + -32539, -32596, -32640, -32670, -32685, -32686, -32673, -32645, -32602, -32545, + -32472, -32384, -32281, -32163, -32029, -31880, -31716, -31535, -31340, -31128, + -30901, -30659, -30401, -30127, -29838, -29534, -29214, -28879, -28529, -28163, + -27783, -27388, -26979, -26555, -26116, -25664, -25197, -24717, -24223, -23716, + -23196, -22663, -22117, -21559, -20989, -20408, -19814, -19210, -18595, -17969, + -17333, -16688, -16032, -15368, -14695, -14013, -13324, -12626, -11922, -11211, + -10493, -9769, -9039, -8305, -7565, -6821, -6073, -5322, -4567, -3810, + -3050, -2289, -1527, -763, + }; #if defined(SDCARD) diff --git a/radio/util/sinus.py b/radio/util/sinus.py index cce2efce3..e852b7427 100644 --- a/radio/util/sinus.py +++ b/radio/util/sinus.py @@ -3,14 +3,27 @@ import math samples = 1024 -amplitudes = (28000, 0, 28000, 0, 28000) +amplitudes = (49000, 0, 25000, 0, 25000) + +max = 0 +min = 0 for i in range(samples): - sample = 0.0 - for harmonic, amplitude in enumerate(amplitudes): - sample += math.sin(math.pi*2*i*(harmonic+1)/samples) * amplitude / 2 - if sample > 32767 or sample < -32768: - print "erreur" - print "%d," % int(sample), - if i % 10 == 9: - print + sample = 0.0 + for harmonic, amplitude in enumerate(amplitudes): + sample += math.sin(math.pi*2*i*(harmonic+1)/samples) * amplitude / 2 + sample = int(sample) + if sample > max: + max = sample + elif sample < min: + min = sample + print "%d," % sample, + if i % 10 == 9: + print + +print +print 'Range is:', min, max + +if max > 32767 or min < -32768: + print "Invalid range!" + From 23b3ea18564315be8a57c34f3135e2762f6fdae6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 21 Feb 2014 11:58:19 +0100 Subject: [PATCH 19/22] Background Music should now stop correctly when switch is OFF --- radio/src/audio_arm.cpp | 2 +- radio/src/opentx.cpp | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 1340ccd7d..7a2bb3468 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -622,7 +622,7 @@ void AudioQueue::wakeup() } // mix the background context - if (!isFunctionActive(FUNCTION_BACKGND_MUSIC_PAUSE)) { + if (isFunctionActive(FUNCTION_BACKGND_MUSIC) && !isFunctionActive(FUNCTION_BACKGND_MUSIC_PAUSE)) { result = backgroundContext.mixBuffer(buffer, g_eeGeneral.backgroundVolume, fade); if (result > 0) { size = max(size, result); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 3fbd2d5e6..2be47461e 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -3259,7 +3259,7 @@ void evalFunctions() if (active || IS_PLAY_BOTH_FUNC(CFN_FUNC(sd))) { - switch(CFN_FUNC(sd)) { + switch (CFN_FUNC(sd)) { case FUNC_SAFETY_CHANNEL: safetyCh[CFN_CH_INDEX(sd)] = CFN_PARAM(sd); @@ -3479,11 +3479,6 @@ void evalFunctions() lastFunctionTime[i] = 0; #if defined(CPUARM) fnSwitchDuration[i] = 0; -#endif -#if defined(CPUARM) && defined(SDCARD) - if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC && isFunctionActive(FUNCTION_BACKGND_MUSIC)) { - STOP_PLAY(i+1); - } #endif } } From 10a1250496a20b3e42b5f919e09c9fbb1902037f Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 22 Feb 2014 19:55:18 +0100 Subject: [PATCH 20/22] I like these harmonics (63000, 0, 20000, 0, 20000) --- radio/src/audio_arm.cpp | 207 ++++++++++++++++++++-------------------- radio/util/sinus.py | 2 +- 2 files changed, 104 insertions(+), 105 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 7a2bb3468..139b17f45 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,110 +41,109 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 763, 1527, 2289, 3050, 3810, 4567, 5322, 6073, 6821, - 7565, 8305, 9039, 9769, 10493, 11211, 11922, 12626, 13324, 14013, - 14695, 15368, 16032, 16688, 17333, 17969, 18595, 19210, 19814, 20408, - 20989, 21559, 22117, 22663, 23196, 23716, 24223, 24717, 25197, 25664, - 26116, 26555, 26979, 27388, 27783, 28163, 28529, 28879, 29214, 29534, - 29838, 30127, 30401, 30659, 30901, 31128, 31340, 31535, 31716, 31880, - 32029, 32163, 32281, 32384, 32472, 32545, 32602, 32645, 32673, 32686, - 32685, 32670, 32640, 32596, 32539, 32468, 32384, 32287, 32176, 32054, - 31918, 31771, 31612, 31441, 31259, 31066, 30863, 30649, 30424, 30191, - 29947, 29695, 29434, 29165, 28887, 28602, 28309, 28010, 27704, 27392, - 27074, 26750, 26421, 26088, 25750, 25408, 25063, 24715, 24363, 24010, - 23654, 23296, 22938, 22578, 22218, 21857, 21497, 21138, 20779, 20422, - 20067, 19713, 19362, 19013, 18668, 18326, 17988, 17653, 17324, 16998, - 16678, 16363, 16054, 15750, 15453, 15162, 14877, 14600, 14329, 14066, - 13811, 13563, 13324, 13092, 12869, 12654, 12449, 12252, 12064, 11885, - 11715, 11555, 11404, 11263, 11132, 11010, 10898, 10796, 10704, 10622, - 10549, 10487, 10435, 10392, 10359, 10337, 10324, 10321, 10327, 10344, - 10369, 10405, 10449, 10503, 10566, 10638, 10719, 10808, 10906, 11013, - 11127, 11250, 11380, 11518, 11664, 11816, 11976, 12142, 12315, 12495, - 12680, 12871, 13067, 13269, 13476, 13688, 13904, 14124, 14348, 14576, - 14807, 15041, 15278, 15517, 15759, 16002, 16247, 16493, 16740, 16988, - 17236, 17484, 17732, 17979, 18225, 18471, 18714, 18957, 19197, 19435, - 19670, 19902, 20132, 20358, 20580, 20798, 21013, 21222, 21427, 21628, - 21823, 22012, 22196, 22375, 22547, 22713, 22873, 23026, 23172, 23311, - 23444, 23569, 23687, 23797, 23899, 23994, 24081, 24160, 24231, 24293, - 24348, 24394, 24432, 24461, 24483, 24495, 24500, 24495, 24483, 24461, - 24432, 24394, 24348, 24293, 24231, 24160, 24081, 23994, 23899, 23797, - 23687, 23569, 23444, 23311, 23172, 23026, 22873, 22713, 22547, 22375, - 22196, 22012, 21823, 21628, 21427, 21222, 21013, 20798, 20580, 20358, - 20132, 19902, 19670, 19435, 19197, 18957, 18714, 18471, 18225, 17979, - 17732, 17484, 17236, 16988, 16740, 16493, 16247, 16002, 15759, 15517, - 15278, 15041, 14807, 14576, 14348, 14124, 13904, 13688, 13476, 13269, - 13067, 12871, 12680, 12495, 12315, 12142, 11976, 11816, 11664, 11518, - 11380, 11250, 11127, 11013, 10906, 10808, 10719, 10638, 10566, 10503, - 10449, 10405, 10369, 10344, 10327, 10321, 10324, 10337, 10359, 10392, - 10435, 10487, 10549, 10622, 10704, 10796, 10898, 11010, 11132, 11263, - 11404, 11555, 11715, 11885, 12064, 12252, 12449, 12654, 12869, 13092, - 13324, 13563, 13811, 14066, 14329, 14600, 14877, 15162, 15453, 15750, - 16054, 16363, 16678, 16998, 17324, 17653, 17988, 18326, 18668, 19013, - 19362, 19713, 20067, 20422, 20779, 21138, 21497, 21857, 22218, 22578, - 22938, 23296, 23654, 24010, 24363, 24715, 25063, 25408, 25750, 26088, - 26421, 26750, 27074, 27392, 27704, 28010, 28309, 28602, 28887, 29165, - 29434, 29695, 29947, 30191, 30424, 30649, 30863, 31066, 31259, 31441, - 31612, 31771, 31918, 32054, 32176, 32287, 32384, 32468, 32539, 32596, - 32640, 32670, 32685, 32686, 32673, 32645, 32602, 32545, 32472, 32384, - 32281, 32163, 32029, 31880, 31716, 31535, 31340, 31128, 30901, 30659, - 30401, 30127, 29838, 29534, 29214, 28879, 28529, 28163, 27783, 27388, - 26979, 26555, 26116, 25664, 25197, 24717, 24223, 23716, 23196, 22663, - 22117, 21559, 20989, 20408, 19814, 19210, 18595, 17969, 17333, 16688, - 16032, 15368, 14695, 14013, 13324, 12626, 11922, 11211, 10493, 9769, - 9039, 8305, 7565, 6821, 6073, 5322, 4567, 3810, 3050, 2289, - 1527, 763, 0, -763, -1527, -2289, -3050, -3810, -4567, -5322, - -6073, -6821, -7565, -8305, -9039, -9769, -10493, -11211, -11922, -12626, - -13324, -14013, -14695, -15368, -16032, -16688, -17333, -17969, -18595, -19210, - -19814, -20408, -20989, -21559, -22117, -22663, -23196, -23716, -24223, -24717, - -25197, -25664, -26116, -26555, -26979, -27388, -27783, -28163, -28529, -28879, - -29214, -29534, -29838, -30127, -30401, -30659, -30901, -31128, -31340, -31535, - -31716, -31880, -32029, -32163, -32281, -32384, -32472, -32545, -32602, -32645, - -32673, -32686, -32685, -32670, -32640, -32596, -32539, -32468, -32384, -32287, - -32176, -32054, -31918, -31771, -31612, -31441, -31259, -31066, -30863, -30649, - -30424, -30191, -29947, -29695, -29434, -29165, -28887, -28602, -28309, -28010, - -27704, -27392, -27074, -26750, -26421, -26088, -25750, -25408, -25063, -24715, - -24363, -24010, -23654, -23296, -22938, -22578, -22218, -21857, -21497, -21138, - -20779, -20422, -20067, -19713, -19362, -19013, -18668, -18326, -17988, -17653, - -17324, -16998, -16678, -16363, -16054, -15750, -15453, -15162, -14877, -14600, - -14329, -14066, -13811, -13563, -13324, -13092, -12869, -12654, -12449, -12252, - -12064, -11885, -11715, -11555, -11404, -11263, -11132, -11010, -10898, -10796, - -10704, -10622, -10549, -10487, -10435, -10392, -10359, -10337, -10324, -10321, - -10327, -10344, -10369, -10405, -10449, -10503, -10566, -10638, -10719, -10808, - -10906, -11013, -11127, -11250, -11380, -11518, -11664, -11816, -11976, -12142, - -12315, -12495, -12680, -12871, -13067, -13269, -13476, -13688, -13904, -14124, - -14348, -14576, -14807, -15041, -15278, -15517, -15759, -16002, -16247, -16493, - -16740, -16988, -17236, -17484, -17732, -17979, -18225, -18471, -18714, -18957, - -19197, -19435, -19670, -19902, -20132, -20358, -20580, -20798, -21013, -21222, - -21427, -21628, -21823, -22012, -22196, -22375, -22547, -22713, -22873, -23026, - -23172, -23311, -23444, -23569, -23687, -23797, -23899, -23994, -24081, -24160, - -24231, -24293, -24348, -24394, -24432, -24461, -24483, -24495, -24500, -24495, - -24483, -24461, -24432, -24394, -24348, -24293, -24231, -24160, -24081, -23994, - -23899, -23797, -23687, -23569, -23444, -23311, -23172, -23026, -22873, -22713, - -22547, -22375, -22196, -22012, -21823, -21628, -21427, -21222, -21013, -20798, - -20580, -20358, -20132, -19902, -19670, -19435, -19197, -18957, -18714, -18471, - -18225, -17979, -17732, -17484, -17236, -16988, -16740, -16493, -16247, -16002, - -15759, -15517, -15278, -15041, -14807, -14576, -14348, -14124, -13904, -13688, - -13476, -13269, -13067, -12871, -12680, -12495, -12315, -12142, -11976, -11816, - -11664, -11518, -11380, -11250, -11127, -11013, -10906, -10808, -10719, -10638, - -10566, -10503, -10449, -10405, -10369, -10344, -10327, -10321, -10324, -10337, - -10359, -10392, -10435, -10487, -10549, -10622, -10704, -10796, -10898, -11010, - -11132, -11263, -11404, -11555, -11715, -11885, -12064, -12252, -12449, -12654, - -12869, -13092, -13324, -13563, -13811, -14066, -14329, -14600, -14877, -15162, - -15453, -15750, -16054, -16363, -16678, -16998, -17324, -17653, -17988, -18326, - -18668, -19013, -19362, -19713, -20067, -20422, -20779, -21138, -21497, -21857, - -22218, -22578, -22938, -23296, -23654, -24010, -24363, -24715, -25063, -25408, - -25750, -26088, -26421, -26750, -27074, -27392, -27704, -28010, -28309, -28602, - -28887, -29165, -29434, -29695, -29947, -30191, -30424, -30649, -30863, -31066, - -31259, -31441, -31612, -31771, -31918, -32054, -32176, -32287, -32384, -32468, - -32539, -32596, -32640, -32670, -32685, -32686, -32673, -32645, -32602, -32545, - -32472, -32384, -32281, -32163, -32029, -31880, -31716, -31535, -31340, -31128, - -30901, -30659, -30401, -30127, -29838, -29534, -29214, -28879, -28529, -28163, - -27783, -27388, -26979, -26555, -26116, -25664, -25197, -24717, -24223, -23716, - -23196, -22663, -22117, -21559, -20989, -20408, -19814, -19210, -18595, -17969, - -17333, -16688, -16032, -15368, -14695, -14013, -13324, -12626, -11922, -11211, - -10493, -9769, -9039, -8305, -7565, -6821, -6073, -5322, -4567, -3810, - -3050, -2289, -1527, -763, - + 0, 684, 1367, 2050, 2732, 3413, 4092, 4768, 5442, 6113, + 6782, 7446, 8107, 8763, 9415, 10062, 10704, 11340, 11970, 12595, + 13212, 13823, 14427, 15024, 15613, 16194, 16766, 17330, 17886, 18432, + 18970, 19497, 20015, 20523, 21021, 21509, 21986, 22452, 22907, 23351, + 23784, 24206, 24616, 25014, 25400, 25775, 26137, 26487, 26825, 27151, + 27464, 27765, 28053, 28329, 28592, 28843, 29081, 29306, 29519, 29719, + 29906, 30081, 30244, 30394, 30532, 30657, 30770, 30872, 30961, 31038, + 31104, 31157, 31200, 31231, 31251, 31260, 31258, 31245, 31222, 31188, + 31144, 31091, 31027, 30955, 30873, 30782, 30682, 30574, 30457, 30333, + 30200, 30061, 29914, 29760, 29599, 29432, 29259, 29080, 28895, 28706, + 28511, 28312, 28108, 27900, 27689, 27474, 27256, 27035, 26812, 26586, + 26359, 26130, 25899, 25668, 25436, 25203, 24971, 24738, 24506, 24275, + 24045, 23816, 23588, 23363, 23140, 22919, 22701, 22485, 22273, 22065, + 21860, 21659, 21462, 21269, 21081, 20898, 20719, 20546, 20378, 20216, + 20059, 19909, 19764, 19626, 19494, 19368, 19249, 19137, 19032, 18934, + 18842, 18758, 18681, 18612, 18550, 18495, 18448, 18408, 18376, 18351, + 18334, 18324, 18322, 18328, 18341, 18362, 18390, 18426, 18469, 18519, + 18577, 18641, 18713, 18792, 18878, 18970, 19070, 19176, 19288, 19406, + 19531, 19662, 19798, 19941, 20088, 20242, 20400, 20563, 20731, 20904, + 21081, 21263, 21448, 21637, 21830, 22026, 22226, 22428, 22633, 22840, + 23050, 23261, 23475, 23690, 23906, 24123, 24342, 24560, 24779, 24998, + 25217, 25436, 25654, 25871, 26087, 26302, 26515, 26726, 26935, 27142, + 27347, 27549, 27747, 27943, 28135, 28324, 28509, 28690, 28867, 29039, + 29207, 29370, 29528, 29681, 29829, 29972, 30109, 30240, 30365, 30484, + 30598, 30705, 30805, 30899, 30987, 31068, 31142, 31210, 31270, 31324, + 31370, 31410, 31442, 31467, 31485, 31496, 31500, 31496, 31485, 31467, + 31442, 31410, 31370, 31324, 31270, 31210, 31142, 31068, 30987, 30899, + 30805, 30705, 30598, 30484, 30365, 30240, 30109, 29972, 29829, 29681, + 29528, 29370, 29207, 29039, 28867, 28690, 28509, 28324, 28135, 27943, + 27747, 27549, 27347, 27142, 26935, 26726, 26515, 26302, 26087, 25871, + 25654, 25436, 25217, 24998, 24779, 24560, 24342, 24123, 23906, 23690, + 23475, 23261, 23050, 22840, 22633, 22428, 22226, 22026, 21830, 21637, + 21448, 21263, 21081, 20904, 20731, 20563, 20400, 20242, 20088, 19941, + 19798, 19662, 19531, 19406, 19288, 19176, 19070, 18970, 18878, 18792, + 18713, 18641, 18577, 18519, 18469, 18426, 18390, 18362, 18341, 18328, + 18322, 18324, 18334, 18351, 18376, 18408, 18448, 18495, 18550, 18612, + 18681, 18758, 18842, 18934, 19032, 19137, 19249, 19368, 19494, 19626, + 19764, 19909, 20059, 20216, 20378, 20546, 20719, 20898, 21081, 21269, + 21462, 21659, 21860, 22065, 22273, 22485, 22701, 22919, 23140, 23363, + 23588, 23816, 24045, 24275, 24506, 24738, 24971, 25203, 25436, 25668, + 25899, 26130, 26359, 26586, 26812, 27035, 27256, 27474, 27689, 27900, + 28108, 28312, 28511, 28706, 28895, 29080, 29259, 29432, 29599, 29760, + 29914, 30061, 30200, 30333, 30457, 30574, 30682, 30782, 30873, 30955, + 31027, 31091, 31144, 31188, 31222, 31245, 31258, 31260, 31251, 31231, + 31200, 31157, 31104, 31038, 30961, 30872, 30770, 30657, 30532, 30394, + 30244, 30081, 29906, 29719, 29519, 29306, 29081, 28843, 28592, 28329, + 28053, 27765, 27464, 27151, 26825, 26487, 26137, 25775, 25400, 25014, + 24616, 24206, 23784, 23351, 22907, 22452, 21986, 21509, 21021, 20523, + 20015, 19497, 18970, 18432, 17886, 17330, 16766, 16194, 15613, 15024, + 14427, 13823, 13212, 12595, 11970, 11340, 10704, 10062, 9415, 8763, + 8107, 7446, 6782, 6113, 5442, 4768, 4092, 3413, 2732, 2050, + 1367, 684, 0, -684, -1367, -2050, -2732, -3413, -4092, -4768, + -5442, -6113, -6782, -7446, -8107, -8763, -9415, -10062, -10704, -11340, + -11970, -12595, -13212, -13823, -14427, -15024, -15613, -16194, -16766, -17330, + -17886, -18432, -18970, -19497, -20015, -20523, -21021, -21509, -21986, -22452, + -22907, -23351, -23784, -24206, -24616, -25014, -25400, -25775, -26137, -26487, + -26825, -27151, -27464, -27765, -28053, -28329, -28592, -28843, -29081, -29306, + -29519, -29719, -29906, -30081, -30244, -30394, -30532, -30657, -30770, -30872, + -30961, -31038, -31104, -31157, -31200, -31231, -31251, -31260, -31258, -31245, + -31222, -31188, -31144, -31091, -31027, -30955, -30873, -30782, -30682, -30574, + -30457, -30333, -30200, -30061, -29914, -29760, -29599, -29432, -29259, -29080, + -28895, -28706, -28511, -28312, -28108, -27900, -27689, -27474, -27256, -27035, + -26812, -26586, -26359, -26130, -25899, -25668, -25436, -25203, -24971, -24738, + -24506, -24275, -24045, -23816, -23588, -23363, -23140, -22919, -22701, -22485, + -22273, -22065, -21860, -21659, -21462, -21269, -21081, -20898, -20719, -20546, + -20378, -20216, -20059, -19909, -19764, -19626, -19494, -19368, -19249, -19137, + -19032, -18934, -18842, -18758, -18681, -18612, -18550, -18495, -18448, -18408, + -18376, -18351, -18334, -18324, -18322, -18328, -18341, -18362, -18390, -18426, + -18469, -18519, -18577, -18641, -18713, -18792, -18878, -18970, -19070, -19176, + -19288, -19406, -19531, -19662, -19798, -19941, -20088, -20242, -20400, -20563, + -20731, -20904, -21081, -21263, -21448, -21637, -21830, -22026, -22226, -22428, + -22633, -22840, -23050, -23261, -23475, -23690, -23906, -24123, -24342, -24560, + -24779, -24998, -25217, -25436, -25654, -25871, -26087, -26302, -26515, -26726, + -26935, -27142, -27347, -27549, -27747, -27943, -28135, -28324, -28509, -28690, + -28867, -29039, -29207, -29370, -29528, -29681, -29829, -29972, -30109, -30240, + -30365, -30484, -30598, -30705, -30805, -30899, -30987, -31068, -31142, -31210, + -31270, -31324, -31370, -31410, -31442, -31467, -31485, -31496, -31500, -31496, + -31485, -31467, -31442, -31410, -31370, -31324, -31270, -31210, -31142, -31068, + -30987, -30899, -30805, -30705, -30598, -30484, -30365, -30240, -30109, -29972, + -29829, -29681, -29528, -29370, -29207, -29039, -28867, -28690, -28509, -28324, + -28135, -27943, -27747, -27549, -27347, -27142, -26935, -26726, -26515, -26302, + -26087, -25871, -25654, -25436, -25217, -24998, -24779, -24560, -24342, -24123, + -23906, -23690, -23475, -23261, -23050, -22840, -22633, -22428, -22226, -22026, + -21830, -21637, -21448, -21263, -21081, -20904, -20731, -20563, -20400, -20242, + -20088, -19941, -19798, -19662, -19531, -19406, -19288, -19176, -19070, -18970, + -18878, -18792, -18713, -18641, -18577, -18519, -18469, -18426, -18390, -18362, + -18341, -18328, -18322, -18324, -18334, -18351, -18376, -18408, -18448, -18495, + -18550, -18612, -18681, -18758, -18842, -18934, -19032, -19137, -19249, -19368, + -19494, -19626, -19764, -19909, -20059, -20216, -20378, -20546, -20719, -20898, + -21081, -21269, -21462, -21659, -21860, -22065, -22273, -22485, -22701, -22919, + -23140, -23363, -23588, -23816, -24045, -24275, -24506, -24738, -24971, -25203, + -25436, -25668, -25899, -26130, -26359, -26586, -26812, -27035, -27256, -27474, + -27689, -27900, -28108, -28312, -28511, -28706, -28895, -29080, -29259, -29432, + -29599, -29760, -29914, -30061, -30200, -30333, -30457, -30574, -30682, -30782, + -30873, -30955, -31027, -31091, -31144, -31188, -31222, -31245, -31258, -31260, + -31251, -31231, -31200, -31157, -31104, -31038, -30961, -30872, -30770, -30657, + -30532, -30394, -30244, -30081, -29906, -29719, -29519, -29306, -29081, -28843, + -28592, -28329, -28053, -27765, -27464, -27151, -26825, -26487, -26137, -25775, + -25400, -25014, -24616, -24206, -23784, -23351, -22907, -22452, -21986, -21509, + -21021, -20523, -20015, -19497, -18970, -18432, -17886, -17330, -16766, -16194, + -15613, -15024, -14427, -13823, -13212, -12595, -11970, -11340, -10704, -10062, + -9415, -8763, -8107, -7446, -6782, -6113, -5442, -4768, -4092, -3413, + -2732, -2050, -1367, -684, }; #if defined(SDCARD) diff --git a/radio/util/sinus.py b/radio/util/sinus.py index e852b7427..0754c4447 100644 --- a/radio/util/sinus.py +++ b/radio/util/sinus.py @@ -3,7 +3,7 @@ import math samples = 1024 -amplitudes = (49000, 0, 25000, 0, 25000) +amplitudes = (63000, 0, 20000, 0, 20000) max = 0 min = 0 From c63a29ef97dd9a1259311f265538bf32590e4f45 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 22 Feb 2014 19:57:25 +0100 Subject: [PATCH 21/22] Debug mods removed for pull request --- radio/src/maths.cpp | 2 +- radio/src/telemetry/frsky_sport.cpp | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 7010444a5..63e57eaeb 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -124,7 +124,7 @@ void varioWakeup() int verticalSpeed = frskyData.hub.varioSpeed; -#if defined(PCBTARANIS) +#if 0 if (g_model.frsky.varioSource == VARIO_SOURCE_DTE) { #warning "Ele stick for vario tests" verticalSpeed = getValue(MIXSRC_Ele); diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index beb852cdf..646dd2246 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -654,12 +654,9 @@ void telemetryWakeup() #endif #if defined(VARIO) -#if 1 - #warning "test removed for vario tests" -#else - if (TELEMETRY_STREAMING() && !IS_FAI_ENABLED()) -#endif + if (TELEMETRY_STREAMING() && !IS_FAI_ENABLED()) { varioWakeup(); + } #endif static tmr10ms_t alarmsCheckTime = 0; From 3ac1a03d96c594380bf9ea04ec3b7330d1296aa7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 24 Feb 2014 07:06:26 +0100 Subject: [PATCH 22/22] This sine wave is reported as better than the previous one --- radio/src/audio_arm.cpp | 206 ++++++++++++++++++++-------------------- radio/util/sinus.py | 2 +- 2 files changed, 104 insertions(+), 104 deletions(-) diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 139b17f45..ba0c4ed94 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -41,109 +41,109 @@ extern OS_MutexID audioMutex; const int16_t sineValues[] = { - 0, 684, 1367, 2050, 2732, 3413, 4092, 4768, 5442, 6113, - 6782, 7446, 8107, 8763, 9415, 10062, 10704, 11340, 11970, 12595, - 13212, 13823, 14427, 15024, 15613, 16194, 16766, 17330, 17886, 18432, - 18970, 19497, 20015, 20523, 21021, 21509, 21986, 22452, 22907, 23351, - 23784, 24206, 24616, 25014, 25400, 25775, 26137, 26487, 26825, 27151, - 27464, 27765, 28053, 28329, 28592, 28843, 29081, 29306, 29519, 29719, - 29906, 30081, 30244, 30394, 30532, 30657, 30770, 30872, 30961, 31038, - 31104, 31157, 31200, 31231, 31251, 31260, 31258, 31245, 31222, 31188, - 31144, 31091, 31027, 30955, 30873, 30782, 30682, 30574, 30457, 30333, - 30200, 30061, 29914, 29760, 29599, 29432, 29259, 29080, 28895, 28706, - 28511, 28312, 28108, 27900, 27689, 27474, 27256, 27035, 26812, 26586, - 26359, 26130, 25899, 25668, 25436, 25203, 24971, 24738, 24506, 24275, - 24045, 23816, 23588, 23363, 23140, 22919, 22701, 22485, 22273, 22065, - 21860, 21659, 21462, 21269, 21081, 20898, 20719, 20546, 20378, 20216, - 20059, 19909, 19764, 19626, 19494, 19368, 19249, 19137, 19032, 18934, - 18842, 18758, 18681, 18612, 18550, 18495, 18448, 18408, 18376, 18351, - 18334, 18324, 18322, 18328, 18341, 18362, 18390, 18426, 18469, 18519, - 18577, 18641, 18713, 18792, 18878, 18970, 19070, 19176, 19288, 19406, - 19531, 19662, 19798, 19941, 20088, 20242, 20400, 20563, 20731, 20904, - 21081, 21263, 21448, 21637, 21830, 22026, 22226, 22428, 22633, 22840, - 23050, 23261, 23475, 23690, 23906, 24123, 24342, 24560, 24779, 24998, - 25217, 25436, 25654, 25871, 26087, 26302, 26515, 26726, 26935, 27142, - 27347, 27549, 27747, 27943, 28135, 28324, 28509, 28690, 28867, 29039, - 29207, 29370, 29528, 29681, 29829, 29972, 30109, 30240, 30365, 30484, - 30598, 30705, 30805, 30899, 30987, 31068, 31142, 31210, 31270, 31324, - 31370, 31410, 31442, 31467, 31485, 31496, 31500, 31496, 31485, 31467, - 31442, 31410, 31370, 31324, 31270, 31210, 31142, 31068, 30987, 30899, - 30805, 30705, 30598, 30484, 30365, 30240, 30109, 29972, 29829, 29681, - 29528, 29370, 29207, 29039, 28867, 28690, 28509, 28324, 28135, 27943, - 27747, 27549, 27347, 27142, 26935, 26726, 26515, 26302, 26087, 25871, - 25654, 25436, 25217, 24998, 24779, 24560, 24342, 24123, 23906, 23690, - 23475, 23261, 23050, 22840, 22633, 22428, 22226, 22026, 21830, 21637, - 21448, 21263, 21081, 20904, 20731, 20563, 20400, 20242, 20088, 19941, - 19798, 19662, 19531, 19406, 19288, 19176, 19070, 18970, 18878, 18792, - 18713, 18641, 18577, 18519, 18469, 18426, 18390, 18362, 18341, 18328, - 18322, 18324, 18334, 18351, 18376, 18408, 18448, 18495, 18550, 18612, - 18681, 18758, 18842, 18934, 19032, 19137, 19249, 19368, 19494, 19626, - 19764, 19909, 20059, 20216, 20378, 20546, 20719, 20898, 21081, 21269, - 21462, 21659, 21860, 22065, 22273, 22485, 22701, 22919, 23140, 23363, - 23588, 23816, 24045, 24275, 24506, 24738, 24971, 25203, 25436, 25668, - 25899, 26130, 26359, 26586, 26812, 27035, 27256, 27474, 27689, 27900, - 28108, 28312, 28511, 28706, 28895, 29080, 29259, 29432, 29599, 29760, - 29914, 30061, 30200, 30333, 30457, 30574, 30682, 30782, 30873, 30955, - 31027, 31091, 31144, 31188, 31222, 31245, 31258, 31260, 31251, 31231, - 31200, 31157, 31104, 31038, 30961, 30872, 30770, 30657, 30532, 30394, - 30244, 30081, 29906, 29719, 29519, 29306, 29081, 28843, 28592, 28329, - 28053, 27765, 27464, 27151, 26825, 26487, 26137, 25775, 25400, 25014, - 24616, 24206, 23784, 23351, 22907, 22452, 21986, 21509, 21021, 20523, - 20015, 19497, 18970, 18432, 17886, 17330, 16766, 16194, 15613, 15024, - 14427, 13823, 13212, 12595, 11970, 11340, 10704, 10062, 9415, 8763, - 8107, 7446, 6782, 6113, 5442, 4768, 4092, 3413, 2732, 2050, - 1367, 684, 0, -684, -1367, -2050, -2732, -3413, -4092, -4768, - -5442, -6113, -6782, -7446, -8107, -8763, -9415, -10062, -10704, -11340, - -11970, -12595, -13212, -13823, -14427, -15024, -15613, -16194, -16766, -17330, - -17886, -18432, -18970, -19497, -20015, -20523, -21021, -21509, -21986, -22452, - -22907, -23351, -23784, -24206, -24616, -25014, -25400, -25775, -26137, -26487, - -26825, -27151, -27464, -27765, -28053, -28329, -28592, -28843, -29081, -29306, - -29519, -29719, -29906, -30081, -30244, -30394, -30532, -30657, -30770, -30872, - -30961, -31038, -31104, -31157, -31200, -31231, -31251, -31260, -31258, -31245, - -31222, -31188, -31144, -31091, -31027, -30955, -30873, -30782, -30682, -30574, - -30457, -30333, -30200, -30061, -29914, -29760, -29599, -29432, -29259, -29080, - -28895, -28706, -28511, -28312, -28108, -27900, -27689, -27474, -27256, -27035, - -26812, -26586, -26359, -26130, -25899, -25668, -25436, -25203, -24971, -24738, - -24506, -24275, -24045, -23816, -23588, -23363, -23140, -22919, -22701, -22485, - -22273, -22065, -21860, -21659, -21462, -21269, -21081, -20898, -20719, -20546, - -20378, -20216, -20059, -19909, -19764, -19626, -19494, -19368, -19249, -19137, - -19032, -18934, -18842, -18758, -18681, -18612, -18550, -18495, -18448, -18408, - -18376, -18351, -18334, -18324, -18322, -18328, -18341, -18362, -18390, -18426, - -18469, -18519, -18577, -18641, -18713, -18792, -18878, -18970, -19070, -19176, - -19288, -19406, -19531, -19662, -19798, -19941, -20088, -20242, -20400, -20563, - -20731, -20904, -21081, -21263, -21448, -21637, -21830, -22026, -22226, -22428, - -22633, -22840, -23050, -23261, -23475, -23690, -23906, -24123, -24342, -24560, - -24779, -24998, -25217, -25436, -25654, -25871, -26087, -26302, -26515, -26726, - -26935, -27142, -27347, -27549, -27747, -27943, -28135, -28324, -28509, -28690, - -28867, -29039, -29207, -29370, -29528, -29681, -29829, -29972, -30109, -30240, - -30365, -30484, -30598, -30705, -30805, -30899, -30987, -31068, -31142, -31210, - -31270, -31324, -31370, -31410, -31442, -31467, -31485, -31496, -31500, -31496, - -31485, -31467, -31442, -31410, -31370, -31324, -31270, -31210, -31142, -31068, - -30987, -30899, -30805, -30705, -30598, -30484, -30365, -30240, -30109, -29972, - -29829, -29681, -29528, -29370, -29207, -29039, -28867, -28690, -28509, -28324, - -28135, -27943, -27747, -27549, -27347, -27142, -26935, -26726, -26515, -26302, - -26087, -25871, -25654, -25436, -25217, -24998, -24779, -24560, -24342, -24123, - -23906, -23690, -23475, -23261, -23050, -22840, -22633, -22428, -22226, -22026, - -21830, -21637, -21448, -21263, -21081, -20904, -20731, -20563, -20400, -20242, - -20088, -19941, -19798, -19662, -19531, -19406, -19288, -19176, -19070, -18970, - -18878, -18792, -18713, -18641, -18577, -18519, -18469, -18426, -18390, -18362, - -18341, -18328, -18322, -18324, -18334, -18351, -18376, -18408, -18448, -18495, - -18550, -18612, -18681, -18758, -18842, -18934, -19032, -19137, -19249, -19368, - -19494, -19626, -19764, -19909, -20059, -20216, -20378, -20546, -20719, -20898, - -21081, -21269, -21462, -21659, -21860, -22065, -22273, -22485, -22701, -22919, - -23140, -23363, -23588, -23816, -24045, -24275, -24506, -24738, -24971, -25203, - -25436, -25668, -25899, -26130, -26359, -26586, -26812, -27035, -27256, -27474, - -27689, -27900, -28108, -28312, -28511, -28706, -28895, -29080, -29259, -29432, - -29599, -29760, -29914, -30061, -30200, -30333, -30457, -30574, -30682, -30782, - -30873, -30955, -31027, -31091, -31144, -31188, -31222, -31245, -31258, -31260, - -31251, -31231, -31200, -31157, -31104, -31038, -30961, -30872, -30770, -30657, - -30532, -30394, -30244, -30081, -29906, -29719, -29519, -29306, -29081, -28843, - -28592, -28329, -28053, -27765, -27464, -27151, -26825, -26487, -26137, -25775, - -25400, -25014, -24616, -24206, -23784, -23351, -22907, -22452, -21986, -21509, - -21021, -20523, -20015, -19497, -18970, -18432, -17886, -17330, -16766, -16194, - -15613, -15024, -14427, -13823, -13212, -12595, -11970, -11340, -10704, -10062, - -9415, -8763, -8107, -7446, -6782, -6113, -5442, -4768, -4092, -3413, - -2732, -2050, -1367, -684, + 0, 196, 392, 588, 784, 980, 1175, 1370, 1564, 1758, + 1951, 2143, 2335, 2525, 2715, 2904, 3091, 3278, 3463, 3647, + 3829, 4011, 4190, 4369, 4545, 4720, 4894, 5065, 5235, 5403, + 5569, 5733, 5895, 6055, 6213, 6369, 6522, 6673, 6822, 6969, + 7113, 7255, 7395, 7532, 7667, 7799, 7929, 8056, 8180, 8302, + 8422, 8539, 8653, 8765, 8874, 8980, 9084, 9185, 9283, 9379, + 9472, 9562, 9650, 9735, 9818, 9898, 9975, 10050, 10123, 10192, + 10260, 10324, 10387, 10447, 10504, 10559, 10612, 10663, 10711, 10757, + 10801, 10843, 10882, 10920, 10955, 10989, 11020, 11050, 11078, 11104, + 11128, 11151, 11172, 11191, 11209, 11225, 11240, 11254, 11266, 11277, + 11287, 11296, 11303, 11310, 11316, 11320, 11324, 11327, 11330, 11331, + 11332, 11333, 11333, 11333, 11332, 11331, 11329, 11328, 11326, 11324, + 11323, 11321, 11319, 11318, 11316, 11315, 11314, 11313, 11313, 11313, + 11314, 11315, 11317, 11319, 11323, 11326, 11331, 11336, 11342, 11349, + 11356, 11365, 11375, 11385, 11397, 11409, 11423, 11437, 11453, 11470, + 11488, 11507, 11527, 11548, 11571, 11595, 11620, 11646, 11673, 11702, + 11732, 11763, 11795, 11828, 11863, 11899, 11936, 11974, 12013, 12054, + 12095, 12138, 12182, 12227, 12273, 12320, 12368, 12417, 12467, 12518, + 12570, 12623, 12676, 12731, 12786, 12842, 12898, 12956, 13014, 13072, + 13131, 13191, 13251, 13311, 13372, 13433, 13495, 13556, 13618, 13680, + 13743, 13805, 13867, 13929, 13991, 14053, 14115, 14177, 14238, 14299, + 14359, 14419, 14479, 14538, 14597, 14655, 14712, 14768, 14824, 14879, + 14933, 14986, 15039, 15090, 15140, 15189, 15237, 15284, 15330, 15375, + 15418, 15460, 15500, 15539, 15577, 15614, 15648, 15682, 15714, 15744, + 15772, 15799, 15825, 15849, 15871, 15891, 15910, 15927, 15942, 15955, + 15967, 15977, 15985, 15991, 15996, 15999, 16000, 15999, 15996, 15991, + 15985, 15977, 15967, 15955, 15942, 15927, 15910, 15891, 15871, 15849, + 15825, 15799, 15772, 15744, 15714, 15682, 15648, 15614, 15577, 15539, + 15500, 15460, 15418, 15375, 15330, 15284, 15237, 15189, 15140, 15090, + 15039, 14986, 14933, 14879, 14824, 14768, 14712, 14655, 14597, 14538, + 14479, 14419, 14359, 14299, 14238, 14177, 14115, 14053, 13991, 13929, + 13867, 13805, 13743, 13680, 13618, 13556, 13495, 13433, 13372, 13311, + 13251, 13191, 13131, 13072, 13014, 12956, 12898, 12842, 12786, 12731, + 12676, 12623, 12570, 12518, 12467, 12417, 12368, 12320, 12273, 12227, + 12182, 12138, 12095, 12054, 12013, 11974, 11936, 11899, 11863, 11828, + 11795, 11763, 11732, 11702, 11673, 11646, 11620, 11595, 11571, 11548, + 11527, 11507, 11488, 11470, 11453, 11437, 11423, 11409, 11397, 11385, + 11375, 11365, 11356, 11349, 11342, 11336, 11331, 11326, 11323, 11319, + 11317, 11315, 11314, 11313, 11313, 11313, 11314, 11315, 11316, 11318, + 11319, 11321, 11323, 11324, 11326, 11328, 11329, 11331, 11332, 11333, + 11333, 11333, 11332, 11331, 11330, 11327, 11324, 11320, 11316, 11310, + 11303, 11296, 11287, 11277, 11266, 11254, 11240, 11225, 11209, 11191, + 11172, 11151, 11128, 11104, 11078, 11050, 11020, 10989, 10955, 10920, + 10882, 10843, 10801, 10757, 10711, 10663, 10612, 10559, 10504, 10447, + 10387, 10324, 10260, 10192, 10123, 10050, 9975, 9898, 9818, 9735, + 9650, 9562, 9472, 9379, 9283, 9185, 9084, 8980, 8874, 8765, + 8653, 8539, 8422, 8302, 8180, 8056, 7929, 7799, 7667, 7532, + 7395, 7255, 7113, 6969, 6822, 6673, 6522, 6369, 6213, 6055, + 5895, 5733, 5569, 5403, 5235, 5065, 4894, 4720, 4545, 4369, + 4190, 4011, 3829, 3647, 3463, 3278, 3091, 2904, 2715, 2525, + 2335, 2143, 1951, 1758, 1564, 1370, 1175, 980, 784, 588, + 392, 196, 0, -196, -392, -588, -784, -980, -1175, -1370, + -1564, -1758, -1951, -2143, -2335, -2525, -2715, -2904, -3091, -3278, + -3463, -3647, -3829, -4011, -4190, -4369, -4545, -4720, -4894, -5065, + -5235, -5403, -5569, -5733, -5895, -6055, -6213, -6369, -6522, -6673, + -6822, -6969, -7113, -7255, -7395, -7532, -7667, -7799, -7929, -8056, + -8180, -8302, -8422, -8539, -8653, -8765, -8874, -8980, -9084, -9185, + -9283, -9379, -9472, -9562, -9650, -9735, -9818, -9898, -9975, -10050, + -10123, -10192, -10260, -10324, -10387, -10447, -10504, -10559, -10612, -10663, + -10711, -10757, -10801, -10843, -10882, -10920, -10955, -10989, -11020, -11050, + -11078, -11104, -11128, -11151, -11172, -11191, -11209, -11225, -11240, -11254, + -11266, -11277, -11287, -11296, -11303, -11310, -11316, -11320, -11324, -11327, + -11330, -11331, -11332, -11333, -11333, -11333, -11332, -11331, -11329, -11328, + -11326, -11324, -11323, -11321, -11319, -11318, -11316, -11315, -11314, -11313, + -11313, -11313, -11314, -11315, -11317, -11319, -11323, -11326, -11331, -11336, + -11342, -11349, -11356, -11365, -11375, -11385, -11397, -11409, -11423, -11437, + -11453, -11470, -11488, -11507, -11527, -11548, -11571, -11595, -11620, -11646, + -11673, -11702, -11732, -11763, -11795, -11828, -11863, -11899, -11936, -11974, + -12013, -12054, -12095, -12138, -12182, -12227, -12273, -12320, -12368, -12417, + -12467, -12518, -12570, -12623, -12676, -12731, -12786, -12842, -12898, -12956, + -13014, -13072, -13131, -13191, -13251, -13311, -13372, -13433, -13495, -13556, + -13618, -13680, -13743, -13805, -13867, -13929, -13991, -14053, -14115, -14177, + -14238, -14299, -14359, -14419, -14479, -14538, -14597, -14655, -14712, -14768, + -14824, -14879, -14933, -14986, -15039, -15090, -15140, -15189, -15237, -15284, + -15330, -15375, -15418, -15460, -15500, -15539, -15577, -15614, -15648, -15682, + -15714, -15744, -15772, -15799, -15825, -15849, -15871, -15891, -15910, -15927, + -15942, -15955, -15967, -15977, -15985, -15991, -15996, -15999, -16000, -15999, + -15996, -15991, -15985, -15977, -15967, -15955, -15942, -15927, -15910, -15891, + -15871, -15849, -15825, -15799, -15772, -15744, -15714, -15682, -15648, -15614, + -15577, -15539, -15500, -15460, -15418, -15375, -15330, -15284, -15237, -15189, + -15140, -15090, -15039, -14986, -14933, -14879, -14824, -14768, -14712, -14655, + -14597, -14538, -14479, -14419, -14359, -14299, -14238, -14177, -14115, -14053, + -13991, -13929, -13867, -13805, -13743, -13680, -13618, -13556, -13495, -13433, + -13372, -13311, -13251, -13191, -13131, -13072, -13014, -12956, -12898, -12842, + -12786, -12731, -12676, -12623, -12570, -12518, -12467, -12417, -12368, -12320, + -12273, -12227, -12182, -12138, -12095, -12054, -12013, -11974, -11936, -11899, + -11863, -11828, -11795, -11763, -11732, -11702, -11673, -11646, -11620, -11595, + -11571, -11548, -11527, -11507, -11488, -11470, -11453, -11437, -11423, -11409, + -11397, -11385, -11375, -11365, -11356, -11349, -11342, -11336, -11331, -11326, + -11323, -11319, -11317, -11315, -11314, -11313, -11313, -11313, -11314, -11315, + -11316, -11318, -11319, -11321, -11323, -11324, -11326, -11328, -11329, -11331, + -11332, -11333, -11333, -11333, -11332, -11331, -11330, -11327, -11324, -11320, + -11316, -11310, -11303, -11296, -11287, -11277, -11266, -11254, -11240, -11225, + -11209, -11191, -11172, -11151, -11128, -11104, -11078, -11050, -11020, -10989, + -10955, -10920, -10882, -10843, -10801, -10757, -10711, -10663, -10612, -10559, + -10504, -10447, -10387, -10324, -10260, -10192, -10123, -10050, -9975, -9898, + -9818, -9735, -9650, -9562, -9472, -9379, -9283, -9185, -9084, -8980, + -8874, -8765, -8653, -8539, -8422, -8302, -8180, -8056, -7929, -7799, + -7667, -7532, -7395, -7255, -7113, -6969, -6822, -6673, -6522, -6369, + -6213, -6055, -5895, -5733, -5569, -5403, -5235, -5065, -4894, -4720, + -4545, -4369, -4190, -4011, -3829, -3647, -3463, -3278, -3091, -2904, + -2715, -2525, -2335, -2143, -1951, -1758, -1564, -1370, -1175, -980, + -784, -588, -392, -196, }; #if defined(SDCARD) diff --git a/radio/util/sinus.py b/radio/util/sinus.py index 0754c4447..727090e49 100644 --- a/radio/util/sinus.py +++ b/radio/util/sinus.py @@ -3,7 +3,7 @@ import math samples = 1024 -amplitudes = (63000, 0, 20000, 0, 20000) +amplitudes = (32000, 0, 4000, 0, 4000) max = 0 min = 0