diff --git a/openrtx/include/interfaces/audio.h b/openrtx/include/interfaces/audio.h index ad56118a..8c333a4d 100644 --- a/openrtx/include/interfaces/audio.h +++ b/openrtx/include/interfaces/audio.h @@ -95,26 +95,6 @@ bool audio_checkPathCompatibility(const enum AudioSource p1Source, const enum AudioSource p2Source, const enum AudioSink p2Sink); -/** - * Enable microphone. - */ -void audio_enableMic(); - -/** - * Disable microphone. - */ -void audio_disableMic(); - -/** - * Enable audio PA. - */ -void audio_enableAmp(); - -/** - * Disable audio PA. - */ -void audio_disableAmp(); - #ifdef __cplusplus } #endif diff --git a/platform/drivers/audio/audio_GDx.c b/platform/drivers/audio/audio_GDx.c index c3ab3594..101b3586 100644 --- a/platform/drivers/audio/audio_GDx.c +++ b/platform/drivers/audio/audio_GDx.c @@ -22,33 +22,57 @@ #include #include + +static const uint8_t pathCompatibilityMatrix[9][9] = +{ + // MIC-SPK MIC-RTX MIC-MCU RTX-SPK RTX-RTX RTX-MCU MCU-SPK MCU-RTX MCU-MCU + { 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 }, // MIC-RTX + { 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 }, // MIC-SPK + { 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 }, // MIC-MCU + { 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 }, // RTX-SPK + { 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 }, // RTX-RTX + { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 }, // RTX-MCU + { 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 }, // MCU-SPK + { 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 }, // MCU-RTX + { 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 } // MCU-MCU +}; + + void audio_init() { gpio_setMode(AUDIO_AMP_EN, OUTPUT); - gpio_clearPin(AUDIO_AMP_EN); /* Audio PA off */ + gpio_clearPin(AUDIO_AMP_EN); } void audio_terminate() -{ - gpio_clearPin(AUDIO_AMP_EN); /* Audio PA off */ -} - -void audio_enableMic() -{ - /* No mic control on this family */ -} - -void audio_disableMic() -{ - /* No mic control on this family */ -} - -void audio_enableAmp() -{ - gpio_setPin(AUDIO_AMP_EN); -} - -void audio_disableAmp() { gpio_clearPin(AUDIO_AMP_EN); } + +void audio_connect(const enum AudioSource source, const enum AudioSink sink) +{ + if(sink == SINK_SPK) + { + gpio_setPin(AUDIO_AMP_EN); + } +} + +void audio_disconnect(const enum AudioSource source, const enum AudioSink sink) +{ + if(sink == SINK_SPK) + { + gpio_clearPin(AUDIO_AMP_EN); + } +} + +bool audio_checkPathCompatibility(const enum AudioSource p1Source, + const enum AudioSink p1Sink, + const enum AudioSource p2Source, + const enum AudioSink p2Sink) + +{ + uint8_t p1Index = (p1Source * 3) + p1Sink; + uint8_t p2Index = (p2Source * 3) + p2Sink; + + return pathCompatibilityMatrix[p1Index][p2Index] == 1; +} diff --git a/platform/drivers/audio/audio_MDx.c b/platform/drivers/audio/audio_MDx.c index 06bc7532..32780490 100644 --- a/platform/drivers/audio/audio_MDx.c +++ b/platform/drivers/audio/audio_MDx.c @@ -156,37 +156,3 @@ bool audio_checkPathCompatibility(const enum AudioSource p1Source, return pathCompatibilityMatrix[p1Index][p2Index] == 1; } - - - - -void audio_enableMic() -{ - #if !defined(PLATFORM_MD9600) && !defined(MDx_ENABLE_SWD) - gpio_setPin(MIC_PWR); - #endif -} - -void audio_disableMic() -{ - #if !defined(PLATFORM_MD9600) && !defined(MDx_ENABLE_SWD) - gpio_clearPin(MIC_PWR); - #endif -} - -void audio_enableAmp() -{ - #ifndef PLATFORM_MD9600 - gpio_setPin(AUDIO_AMP_EN); - #endif - sleepFor(0, 10); /* 10ms anti-pop delay */ - gpio_clearPin(SPK_MUTE); -} - -void audio_disableAmp() -{ - gpio_setPin(SPK_MUTE); - #ifndef PLATFORM_MD9600 - gpio_clearPin(AUDIO_AMP_EN); - #endif -} diff --git a/platform/drivers/audio/audio_Mod17.c b/platform/drivers/audio/audio_Mod17.c index 8d465ff7..f7417eff 100644 --- a/platform/drivers/audio/audio_Mod17.c +++ b/platform/drivers/audio/audio_Mod17.c @@ -20,9 +20,24 @@ #include #include -#include #include + +static const uint8_t pathCompatibilityMatrix[9][9] = +{ + // MIC-SPK MIC-RTX MIC-MCU RTX-SPK RTX-RTX RTX-MCU MCU-SPK MCU-RTX MCU-MCU + { 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 }, // MIC-RTX + { 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 }, // MIC-SPK + { 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 }, // MIC-MCU + { 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 }, // RTX-SPK + { 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 }, // RTX-RTX + { 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 }, // RTX-MCU + { 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 }, // MCU-SPK + { 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 }, // MCU-RTX + { 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 } // MCU-MCU +}; + + void audio_init() { gpio_setMode(SPK_MUTE, OUTPUT); @@ -40,22 +55,26 @@ void audio_terminate() gpio_clearPin(MIC_MUTE); } -void audio_enableMic() +void audio_connect(const enum AudioSource source, const enum AudioSink sink) { - gpio_setPin(MIC_MUTE); + if(source == SOURCE_MIC) gpio_setPin(MIC_MUTE); + if(sink == SINK_SPK) gpio_clearPin(SPK_MUTE); } -void audio_disableMic() +void audio_disconnect(const enum AudioSource source, const enum AudioSink sink) { - gpio_clearPin(MIC_MUTE); + if(source == SOURCE_MIC) gpio_clearPin(MIC_MUTE); + if(sink == SINK_SPK) gpio_setPin(SPK_MUTE); } -void audio_enableAmp() -{ - gpio_clearPin(SPK_MUTE); -} +bool audio_checkPathCompatibility(const enum AudioSource p1Source, + const enum AudioSink p1Sink, + const enum AudioSource p2Source, + const enum AudioSink p2Sink) -void audio_disableAmp() { - gpio_setPin(SPK_MUTE); + uint8_t p1Index = (p1Source * 3) + p1Sink; + uint8_t p2Index = (p2Source * 3) + p2Sink; + + return pathCompatibilityMatrix[p1Index][p2Index] == 1; } diff --git a/platform/drivers/audio/audio_linux.c b/platform/drivers/audio/audio_linux.c index 4a0100ce..2e7575e4 100644 --- a/platform/drivers/audio/audio_linux.c +++ b/platform/drivers/audio/audio_linux.c @@ -111,23 +111,3 @@ bool audio_checkPathCompatibility(const enum AudioSource p1Source, return pathCompatibilityMatrix[p1Index][p2Index] == 1; } - -void audio_enableMic() -{ - /* No mic control on this family */ -} - -void audio_disableMic() -{ - /* No mic control on this family */ -} - -void audio_enableAmp() -{ - /* No PA control on this family */ -} - -void audio_disableAmp() -{ - /* No PA control on this family */ -}