M module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp => module-bsp/board/rt1051/bsp/audio/CodecMAX98090.cpp +0 -5
@@ 130,8 130,6 @@ CodecRetCode CodecMAX98090::Start(const CodecParams ¶m)
i2cAddr.subAddress = MAX98090_REG_PLAYBACK_QUICK_SETUP;
i2c->Write(i2cAddr, (uint8_t *)&q_playback_setup, 1);
- SetupEarspeakerEqualizer();
-
} break;
case bsp::AudioDevice::OutputPath::Loudspeaker: {
@@ 151,8 149,6 @@ CodecRetCode CodecMAX98090::Start(const CodecParams ¶m)
i2cAddr.subAddress = MAX98090_REG_OUTPUT_ENABLE;
i2c->Write(i2cAddr, (uint8_t *)&outputenable, 1);
- SetupLoudspeakerEqualizer();
-
} break;
case bsp::AudioDevice::OutputPath::LoudspeakerMono: {
@@ 168,7 164,6 @@ CodecRetCode CodecMAX98090::Start(const CodecParams ¶m)
i2cAddr.subAddress = MAX98090_REG_OUTPUT_ENABLE;
i2c->Write(i2cAddr, (uint8_t *)&outputenable, 1);
- SetupLoudspeakerEqualizer();
} break;
default:
M module-cellular/Modem/TS0710/TS0710.cpp => module-cellular/Modem/TS0710/TS0710.cpp +38 -0
@@ 271,8 271,10 @@ TS0710::ConfState TS0710::AudioConfProcedure()
return ConfState ::Failure;
}
else if (ret.response[0].compare("+QDAI: 1,0,0,3,0,1,1,1") == 0) {
+ parser->cmd(at::AT::QRXGAIN);
parser->cmd(at::AT::CLVL);
parser->cmd(at::AT::QMIC);
+ SetupEchoCalceller(EchoCancellerStrength::Aggressive);
return ConfState ::Success;
}
else {
@@ 557,3 559,39 @@ void TS0710::ExitSleepMode(void)
{
return pv_cellular->ExitSleep();
}
+
+void TS0710::SetupEchoCalceller(EchoCancellerStrength strength)
+{
+ switch (strength) {
+ case EchoCancellerStrength::LeastAggressive:
+ // Aggressive settings
+ parser->cmd(at::factory(at::AT::QEEC) + "0,2048");
+ parser->cmd(at::factory(at::AT::QEEC) + "5,14");
+ parser->cmd(at::factory(at::AT::QEEC) + "10,140");
+ parser->cmd(at::factory(at::AT::QEEC) + "21,16000");
+ parser->cmd(at::factory(at::AT::QEEC) + "22,300");
+ parser->cmd(at::factory(at::AT::QEEC) + "24,450");
+ parser->cmd(at::factory(at::AT::QEEC) + "33,640");
+ break;
+ case EchoCancellerStrength::Medium:
+ // Aggressive settings
+ parser->cmd(at::factory(at::AT::QEEC) + "0,2048");
+ parser->cmd(at::factory(at::AT::QEEC) + "5,14");
+ parser->cmd(at::factory(at::AT::QEEC) + "10,160");
+ parser->cmd(at::factory(at::AT::QEEC) + "21,19000");
+ parser->cmd(at::factory(at::AT::QEEC) + "22,600");
+ parser->cmd(at::factory(at::AT::QEEC) + "24,600");
+ parser->cmd(at::factory(at::AT::QEEC) + "33,768");
+ break;
+ case EchoCancellerStrength::Aggressive:
+ // Aggressive settings
+ parser->cmd(at::factory(at::AT::QEEC) + "0,2048");
+ parser->cmd(at::factory(at::AT::QEEC) + "5,14");
+ parser->cmd(at::factory(at::AT::QEEC) + "10,160");
+ parser->cmd(at::factory(at::AT::QEEC) + "21,25000");
+ parser->cmd(at::factory(at::AT::QEEC) + "22,12000");
+ parser->cmd(at::factory(at::AT::QEEC) + "24,768");
+ parser->cmd(at::factory(at::AT::QEEC) + "33,896");
+ break;
+ };
+}<
\ No newline at end of file
M module-cellular/Modem/TS0710/TS0710.h => module-cellular/Modem/TS0710/TS0710.h +9 -0
@@ 283,6 283,15 @@ class TS0710
DLC_channel::Callback_t controlCallback = nullptr;
std::queue<uint8_t> RXFifo;
+
+ enum class EchoCancellerStrength
+ {
+ LeastAggressive,
+ Medium,
+ Aggressive
+ };
+ void SetupEchoCalceller(EchoCancellerStrength strength);
+
public:
enum class ConfState
{
M module-cellular/at/Commands.hpp => module-cellular/at/Commands.hpp +4 -2
@@ 132,6 132,7 @@ namespace at
QRXGAIN, /// Set Downlink Gains of RX
CLVL, /// Loudspeaker Volume Level Selection
QMIC, /// Set Uplink Gains of MIC
+ QEEC, /// Echo cancellation parameters
};
// below timeouts are defined in Quectel_EC25&EC21_AT_Commands_Manual_V1.3.pdf
@@ 232,9 233,10 @@ namespace at
{AT::QICSGP, {"AT+QICSGP", default_timeout}},
{AT::QIACT, {"AT+QIACT", 150000ms}},
{AT::QIDEACT, {"AT+QIDEACT", 40000ms}},
- {AT::QRXGAIN, {"AT+QRXGAIN=65535", default_timeout}},
+ {AT::QRXGAIN, {"AT+QRXGAIN=40000", default_timeout}},
{AT::CLVL, {"AT+CLVL=3", default_timeout}},
- {AT::QMIC, {"AT+QMIC=15000,15000", default_timeout}}};
+ {AT::QMIC, {"AT+QMIC=15000,15000", default_timeout}},
+ {AT::QEEC, {"AT+QEEC=", default_timeout}}};
if (fact.count(at) != 0u) {
return fact.at(at);