Skip to content

Commit b6ad975

Browse files
authored
Merge pull request #34 from uutzinger/main
ES8388 input volume
2 parents e7fdea9 + 2d66ab3 commit b6ad975

File tree

4 files changed

+42
-24
lines changed

4 files changed

+42
-24
lines changed

src/Driver.h

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ class AudioDriverAC101Class : public AudioDriver {
339339
public:
340340
bool setMute(bool mute) { return ac101_set_voice_mute(mute); }
341341
bool setVolume(int volume) {
342-
return ac101_set_voice_volume(limitValue(volume));
342+
return ac101_set_voice_volume(limitValue(volume, 0, 100));
343343
};
344344
int getVolume() {
345345
int vol;
@@ -608,7 +608,7 @@ class AudioDriverES7210Class : public AudioDriver {
608608
bool setMute(bool mute) { return es7210_set_mute(mute) == RESULT_OK; }
609609
bool setVolume(int volume) {
610610
this->volume = volume;
611-
return es7210_adc_set_volume(limitValue(volume)) == RESULT_OK;
611+
return es7210_adc_set_volume(limitValue(volume, 0, 100)) == RESULT_OK;
612612
}
613613
int getVolume() { return volume; }
614614

@@ -639,7 +639,7 @@ class AudioDriverES7243Class : public AudioDriver {
639639
return es7243_adc_set_voice_mute(mute) == RESULT_OK;
640640
}
641641
bool setVolume(int volume) {
642-
return es7243_adc_set_voice_volume(limitValue(volume)) == RESULT_OK;
642+
return es7243_adc_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
643643
}
644644
int getVolume() {
645645
int vol;
@@ -674,7 +674,7 @@ class AudioDriverES7243eClass : public AudioDriver {
674674
}
675675
bool setVolume(int volume) {
676676
this->volume = volume;
677-
return es7243e_adc_set_voice_volume(limitValue(volume)) == RESULT_OK;
677+
return es7243e_adc_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
678678
}
679679
int getVolume() {
680680
int vol;
@@ -710,7 +710,7 @@ class AudioDriverES8156Class : public AudioDriver {
710710
}
711711
bool setVolume(int volume) {
712712
AD_LOGD("volume %d", volume);
713-
return es8156_codec_set_voice_volume(limitValue(volume)) == RESULT_OK;
713+
return es8156_codec_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
714714
}
715715
int getVolume() {
716716
int vol;
@@ -742,7 +742,7 @@ class AudioDriverES8311Class : public AudioDriver {
742742
AudioDriverES8311Class(int i2cAddr = 0) { i2c_address = i2cAddr; }
743743
bool setMute(bool mute) { return es8311_set_voice_mute(mute) == RESULT_OK; }
744744
bool setVolume(int volume) {
745-
return es8311_codec_set_voice_volume(limitValue(volume)) == RESULT_OK;
745+
return es8311_codec_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
746746
}
747747
int getVolume() {
748748
int vol;
@@ -787,7 +787,7 @@ class AudioDriverES8374Class : public AudioDriver {
787787
bool setMute(bool mute) { return es8374_set_voice_mute(mute) == RESULT_OK; }
788788
bool setVolume(int volume) {
789789
AD_LOGD("volume %d", volume);
790-
return es8374_codec_set_voice_volume(limitValue(volume)) == RESULT_OK;
790+
return es8374_codec_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
791791
}
792792
int getVolume() {
793793
int vol;
@@ -849,7 +849,7 @@ class AudioDriverES8388Class : public AudioDriver {
849849
}
850850
bool setVolume(int volume) {
851851
AD_LOGD("volume %d", volume);
852-
return es8388_set_voice_volume(limitValue(volume)) == RESULT_OK;
852+
return es8388_set_voice_volume(limitValue(volume, 0, 100)) == RESULT_OK;
853853
}
854854
int getVolume() {
855855
int vol;
@@ -858,14 +858,36 @@ class AudioDriverES8388Class : public AudioDriver {
858858
}
859859

860860
bool setInputVolume(int volume) {
861-
// map values from 0 - 100 to 0 to 9 MIC_GAIN_MIN = -1,
861+
// map values from 0 - 100 to 0 to 8
862+
863+
// es_mic_gain_t: MIC_GAIN_MIN = -1, 0,3,6,9,12,15,18,21,24 MIC_GAIN_MAX = 25
864+
865+
// Vol: 0, 12.5, 25, 37.5, 50, 62.5, 75, 87.5, 100
866+
// idx: 0, 1, 2, 3, 4, 5, 6, 7, 8
867+
// dB/gain: 0, 3, 6, 9, 12, 15, 18, 21, 24
868+
// factor: 1, 2, 4, 8, 16, 32, 63, 126, 252
869+
870+
// es8388 Register 9 – ADC Control 1
871+
//dB MicL MicR
872+
// 0 0000 0000
873+
// 3 0001 0001
874+
// 6 0010 0010
875+
// 9 0011 0011
876+
//12 0100 0100
877+
//15 0101 0101
878+
//18 0110 0110
879+
//21 0111 0111
880+
//24 1000 1000
881+
862882
es_mic_gain_t gains[] = {MIC_GAIN_0DB, MIC_GAIN_3DB, MIC_GAIN_6DB,
863883
MIC_GAIN_9DB, MIC_GAIN_12DB, MIC_GAIN_15DB,
864-
MIC_GAIN_18DB, MIC_GAIN_21DB, MIC_GAIN_24DB,
865-
MIC_GAIN_MAX};
866-
int idx = limitValue(volume / 10, 0, 9);
884+
MIC_GAIN_18DB, MIC_GAIN_21DB, MIC_GAIN_24DB};
885+
886+
int vol = limitValue(volume, 0, 100);
887+
int idx = map(vol, 0, 100, 0, 8);
888+
867889
es_mic_gain_t gain = gains[idx];
868-
AD_LOGD("input volume: %d -> gain %d", volume, gain);
890+
AD_LOGD("input volume: %d -> gain %d [dB] (idx: %d of 0..8)", volume, gain, idx);
869891
return setMicrophoneGain(gain);
870892
}
871893

@@ -901,7 +923,7 @@ class AudioDriverTAS5805MClass : public AudioDriver {
901923
bool setMute(bool mute) { return tas5805m_set_mute(mute) == RESULT_OK; }
902924
bool setVolume(int volume) {
903925
AD_LOGD("volume %d", volume);
904-
return tas5805m_set_volume(limitValue(volume)) == RESULT_OK;
926+
return tas5805m_set_volume(limitValue(volume, 0, 100)) == RESULT_OK;
905927
}
906928
int getVolume() {
907929
int vol;

src/Driver/es8388/es8388.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,12 +413,13 @@ error_t es8388_set_voice_volume(int volume) {
413413
else if (volume > 100)
414414
volume = 100;
415415
volume /= 3;
416+
// DAC LDACVOL RDACVOL default 0 = 0DB; Default value 192 = – -96 dB
416417
res = es_write_reg(ES8388_ADDR, ES8388_DACCONTROL4, 0);
417418
res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL5, 0);
418419
// LOUT1 RLOUT1 volume: dataheet says only 6 bits
419420
res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL24, volume);
420421
res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL25, volume);
421-
// DAC LDACVOL RDACVOL default 0 = 0DB; Default value 192 = – -96 dB
422+
// LOUT2 ROUT2 volume: datasheet says only 6 bits
422423
res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL26, volume);
423424
res |= es_write_reg(ES8388_ADDR, ES8388_DACCONTROL27, volume);
424425
return res;

src/DriverCommon.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
#define RESULT_OK 0 /*!< error_t value indicating success (no error) */
1616
#define RESULT_FAIL -1 /*!< Generic error_t code indicating failure */
1717
#define ERROR_INVALID_ARG 1
18-
#define I2C_END true
18+
19+
#define I2C_END true // wether to send a stop bit at the end of the transmission
1920

2021
#ifdef __cplusplus
2122
namespace audio_driver {

src/Utils/I2C.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,10 @@ error_t i2c_bus_write_bytes(i2c_bus_handle_t bus, int addr, uint8_t *reg,
1111
addr, reglen, datalen, reg[0], data[0]);
1212
TwoWire *p_wire = (TwoWire *)bus;
1313
assert(p_wire!=nullptr);
14-
//assert(reglen == 1);
15-
//assert(datalen == 1);
16-
1714
int result = RESULT_OK;
1815
p_wire->beginTransmission(addr);
1916
p_wire->write(reg, reglen);
2017
p_wire->write(data, datalen);
21-
//p_wire->write(reg[0]);
22-
//p_wire->write(data[0]);
23-
2418
int rc = p_wire->endTransmission(I2C_END);
2519
if (rc != 0) {
2620
AD_LOGE("->p_wire->endTransmission: %d", rc);
@@ -45,7 +39,7 @@ error_t i2c_bus_check(i2c_bus_handle_t bus, int addr) {
4539
}
4640

4741

48-
/// This method is used
42+
// this method is used !
4943
error_t i2c_bus_read_bytes(i2c_bus_handle_t bus, int addr, uint8_t *reg,
5044
int reglen, uint8_t *outdata, int datalen) {
5145
AD_LOGD("i2c_bus_read_bytes: addr=%d reglen=%d datalen=%d - reg=%d", addr,
@@ -64,7 +58,7 @@ error_t i2c_bus_read_bytes(i2c_bus_handle_t bus, int addr, uint8_t *reg,
6458
AD_LOGE("->p_wire->endTransmission: %d", rc);
6559
}
6660

67-
uint8_t result_len = p_wire->requestFrom((addr), datalen, (int) true);
61+
uint8_t result_len = p_wire->requestFrom((addr), datalen, I2C_END);
6862
if (result_len > 0) {
6963
result_len = p_wire->readBytes(outdata, datalen);
7064
} else {

0 commit comments

Comments
 (0)