From e4462dce331d56510c794143be8ed7d1c62b4742 Mon Sep 17 00:00:00 2001 From: Lukasz Skrzypczak Date: Tue, 2 Feb 2021 09:21:03 -0800 Subject: [PATCH] [EGD-5298] Microphone Adjust Changed parameters for mic GSM path to get clear voice --- .../board/rt1051/bsp/audio/CodecMAX98090.cpp | 35 +++++++++++++++++-- .../board/rt1051/bsp/audio/CodecMAX98090.hpp | 29 ++++++++++++++- module-cellular/Modem/TS0710/TS0710.cpp | 6 ++-- module-cellular/at/Commands.hpp | 10 ++++-- .../service-audio/ServiceAudio.cpp | 6 ++-- 5 files changed, 75 insertions(+), 11 deletions(-) diff --git a/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp b/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp index 8d0cf656f3a172d2bb7393cd4d6942d3200cb3d0..a84afc4f15385bcb6717b64d145676dc3ce173c2 100644 --- a/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp +++ b/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "CodecMAX98090.hpp" @@ -191,6 +191,7 @@ CodecRetCode CodecMAX98090::Start(const CodecParams ¶m) case bsp::AudioDevice::InputPath::Microphone: { max98090_reg_input_to_record_quick_t q_input_setup = {0}; max98090_reg_digmic_enable_t digena = {0}; + max98090_reg_digmic_conf_t digconf = {0}; // Enable left and right digital mic interface digena.digmicl = 1; @@ -198,9 +199,37 @@ CodecRetCode CodecMAX98090::Start(const CodecParams ¶m) // Harman Kardon dig microphones specify valid clock range as 1.024MHz - 4.8MHz, typical ~2.4MHz digena.dmicclk = 3; // fDMC = fPCLK/5 - > fPCLK=12.288MHz fDMC = 2.458MHz + // Table 17 from datasheet + digconf.dmicfreq = 0; + switch (currentParams.GetSampleRateVal()) { + case 8000: + digconf.dmiccomp = + static_cast(CodecParamsMAX98090::DigitalMicrophoneCompensationFilter::DMIC_COMP_7); + break; + case 16000: + digconf.dmiccomp = + static_cast(CodecParamsMAX98090::DigitalMicrophoneCompensationFilter::DMIC_COMP_8); + break; + case 32000: + case 44100: + case 48000: + digconf.dmiccomp = + static_cast(CodecParamsMAX98090::DigitalMicrophoneCompensationFilter::DMIC_COMP_6); + break; + case 96000: + case 0: + default: + digconf.dmiccomp = + static_cast(CodecParamsMAX98090::DigitalMicrophoneCompensationFilter::DMIC_COMP_6); + break; + } + i2cAddr.subAddress = MAX98090_REG_DIG_MIC_ENABLE; i2c->Write(i2cAddr, (uint8_t *)&digena, 1); + i2cAddr.subAddress = MAX98090_REG_DIG_MIC_CONF; + i2c->Write(i2cAddr, (uint8_t *)&digconf, 1); + q_input_setup.in12sab = 1; i2cAddr.subAddress = MAX98090_REG_LINE_INPUT_TO_RECORD_QUICK; i2c->Write(i2cAddr, (uint8_t *)&q_input_setup, 1); @@ -382,7 +411,7 @@ CodecRetCode CodecMAX98090::SetInputGain(const float gain) } max98090_reg_lrec_dig_gain_t lgain = {0}; - lgain.avl = 0xF; // fine gain - 0xF: -12dB + lgain.avl = static_cast(CodecParamsMAX98090::RecordPathDigitalFineGain::Gain_p3dB); // fine gain lgain.avlg = gainToSet * 0.7; // coarse gain (0.7 used as scaling factor) i2cAddr.subAddress = MAX98090_REG_LREC_DIG_GAIN; @@ -390,7 +419,7 @@ CodecRetCode CodecMAX98090::SetInputGain(const float gain) // coarse gain - 18dB, fine gain - 0dB max98090_reg_rrec_dig_gain_t rgain = {0}; - rgain.avr = 0xF; // fine gain - 0xF: -12dB + rgain.avr = static_cast(CodecParamsMAX98090::RecordPathDigitalFineGain::Gain_p3dB); // fine gain rgain.avrg = gainToSet * 0.7; // coarse gain (0.7 used as scaling factor) i2cAddr.subAddress = MAX98090_REG_RREC_DIG_GAIN; diff --git a/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.hpp b/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.hpp index cd3df45d8299b18d9b921846b0b1d9fe8ba3ca8d..0ef4556b4d600daacf07d11e46950538bc1c1204 100644 --- a/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.hpp +++ b/module-bsp/board/rt1051/bsp/audio/CodecMAX98090.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #ifndef PUREPHONE_CODECMAX98090_HPP @@ -40,6 +40,33 @@ class CodecParamsMAX98090 : public CodecParams Stereoq }; + enum class DigitalMicrophoneCompensationFilter + { + DMIC_COMP_6 = 6, + DMIC_COMP_7 = 7, + DMIC_COMP_8 = 8 + }; + + enum class RecordPathDigitalFineGain + { + Gain_p3dB = 0, + Gain_p2dB, + Gain_p1dB, + Gain_0dB, + Gain_n1dB0, + Gain_n2dB, + Gain_n3dB, + Gain_n4dB, + Gain_n5dB, + Gain_n6dB, + Gain_n7dB, + Gain_n8dB, + Gain_n9dB, + Gain_n10dB, + Gain_n11dB, + Gain_n12dB + }; + static SampleRate ValToSampleRate(uint32_t rate) { switch (rate) { diff --git a/module-cellular/Modem/TS0710/TS0710.cpp b/module-cellular/Modem/TS0710/TS0710.cpp index 25e1fa82d61f0b43f7b9cebd1274bf4cc8852fdb..c63ed0e3a700a505aad214262afdbd732326442f 100644 --- a/module-cellular/Modem/TS0710/TS0710.cpp +++ b/module-cellular/Modem/TS0710/TS0710.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "TS0710.h" @@ -271,7 +271,9 @@ TS0710::ConfState TS0710::AudioConfProcedure() if (!ret) { return ConfState ::Failure; } - else if (ret.response[0].compare("+QDAI: 1,0,0,5,0,1,1,1") == 0) { + else if (ret.response[0].compare("+QDAI: 1,0,0,3,0,1,1,1") == 0) { + parser->cmd(at::AT::CLVL); + parser->cmd(at::AT::QMIC); return ConfState ::Success; } else { diff --git a/module-cellular/at/Commands.hpp b/module-cellular/at/Commands.hpp index 4f7cb01a0321dc31e4364e21df510cb998ffea42..3ddf89ebc01837a4f0da8a233caf879f5d666790 100644 --- a/module-cellular/at/Commands.hpp +++ b/module-cellular/at/Commands.hpp @@ -129,6 +129,9 @@ namespace at QIACT, /// Activate a PDP Context QIDEACT, /// Deactivate a PDP Context CSCA, /// check SMS Center + QRXGAIN, /// Set Downlink Gains of RX + CLVL, /// Loudspeaker Volume Level Selection + QMIC, /// Set Uplink Gains of MIC }; // below timeouts are defined in Quectel_EC25&EC21_AT_Commands_Manual_V1.3.pdf @@ -158,7 +161,7 @@ namespace at {AT::SMS_GSM, {"AT+CSCS=\"GSM\""}}, {AT::QSCLK_ON, {"AT+QSCLK=1", 3000ms}}, {AT::QDAI, {"AT+QDAI?"}}, - {AT::QDAI_INIT, {"AT+QDAI=1,0,0,5,0,1"}}, + {AT::QDAI_INIT, {"AT+QDAI=1,0,0,3,0,1,1,1"}}, {AT::SET_URC_CHANNEL, {"AT+QCFG=\"cmux/urcport\",2", default_doc_timeout}}, {AT::CSQ, {"AT+CSQ", default_doc_timeout}}, {AT::CLCC, {"AT+CLCC", default_doc_timeout}}, @@ -228,7 +231,10 @@ namespace at {AT::CSSN, {"AT+CSSN=\"", default_doc_timeout}}, {AT::QICSGP, {"AT+QICSGP", default_timeout}}, {AT::QIACT, {"AT+QIACT", 150000ms}}, - {AT::QIDEACT, {"AT+QIDEACT", 40000ms}}}; + {AT::QIDEACT, {"AT+QIDEACT", 40000ms}}, + {AT::QRXGAIN, {"AT+QRXGAIN=65535", default_timeout}}, + {AT::CLVL, {"AT+CLVL=3", default_timeout}}, + {AT::QMIC, {"AT+QMIC=15000,15000", default_timeout}}}; if (fact.count(at) != 0u) { return fact.at(at); diff --git a/module-services/service-audio/ServiceAudio.cpp b/module-services/service-audio/ServiceAudio.cpp index 22009caeacad0e524536e3ba4d536873b1aa5a9c..a2d009c2254efe111bf94329492270cac43d632c 100644 --- a/module-services/service-audio/ServiceAudio.cpp +++ b/module-services/service-audio/ServiceAudio.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "service-audio/AudioMessage.hpp" @@ -66,8 +66,8 @@ sys::ReturnCodes ServiceAudio::InitHandler() // ROUTING {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingBluetoothHSP), "20"}, - {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingEarspeaker), "0"}, - {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingLoudspeaker), "20"}, + {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingEarspeaker), "3"}, + {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingLoudspeaker), "10"}, {dbPath(Setting::Gain, PlaybackType::None, Profile::Type::RoutingHeadphones), "0"}, {dbPath(Setting::Volume, PlaybackType::None, Profile::Type::RoutingBluetoothHSP), defaultVolumeHigh},