Тема: TDA7719
ИМС TDA7719 представляет собой Hi-Fi аудиопроцессор с программируемой матрицей входов, имеет 6 аудио выходов, независимый аттенюатор для каждого выхода и входа, три полосы регулировки тембра с изменяемой центральной частотой и добротностью, полосовой фильтр для сабвуферов (два выхода) с фазоинвертором, тонкомпенсация. При подачи на вход стерео сигнала аудиопроцессор после обработки преобразует его в квадро и дополнительные два канала для сабвуферов.
TDA7719.h
#ifndef TDA7719_H
#define TDA7719_H
// address 7 bit
#define TDA7719_address 0x44 // адрес HEX 88 > 0b10001000 > 7 bit = 0b1000100 = 0x44
//Sub addresses
#define TDA7719_INPUT 0b00000000 // Input Configuration / Main Source Selector
#define TDA7719_INPUT_2 0b00000001 // 2nd Source Selector / Direct Path
#define TDA7719_MIX_SOUR 0b00000010 // Mixing Source / Mixing Gain
#define TDA7719_MIX_CONT 0b00000011 // Mix Control / Level Meter / DC Offset Detector Config
#define TDA7719_MUTE 0b00000100 // Soft Mute / Others
#define TDA7719_SOFT_1 0b00000101 // Soft Step I
#define TDA7719_SOFT_2 0b00000110 // Soft Step II / DC-detector
#define TDA7719_LOUD 0b00000111 // Loudness
#define TDA7719_VOL 0b00001000 // Volume / Output Gain
#define TDA7719_TRBLE 0b00001001 // Treble
#define TDA7719_MIDDLE 0b00001010 // Middle
#define TDA7719_BASS 0b00001011 // Bass
#define TDA7719_SUB_M_B 0b00001100 // Subwoofer / Middle / Bass
#define TDA7719_ATT_LF 0b00001101 // Speaker Attenuator Left Front
#define TDA7719_ATT_RF 0b00001110 // Speaker Attenuator Right Front
#define TDA7719_ATT_LR 0b00001111 // Speaker Attenuator Left Rear
#define TDA7719_ATT_RR 0b00010000 // Speaker Attenuator Right Rear
#define TDA7719_ATT_SUB_L 0b00010001 // Subwoofer Attenuator Left
#define TDA7719_ATT_SUB_R 0b00010010 // Subwoofer Attenuator Right
#define TDA7719_TEST_1 0b00010011 // Testing Audio Processor 1
#define TDA7719_TEST_2 0b00010100 // Testing Audio Processor 2
#include <Arduino.h>
class TDA7719
{
public:
TDA7719();
/// Input configuration / main selector ///
void setInput(int input, int md, int input_gain, int input_conf); // int 0...7, 0...1, 0...1, 0...7
// IN0...IN7, MD1 MD2, 0dB 3dB, CFG0...CFG7
/// 2nd Source selector / direct path ///
void setInput_2(int sell, int md_2, int input_gain_2, int bypass_front, int bypass_rear, int bypass_sub); // int 0...7, 0...1, 0...1, 0...1, 0...1, 0...1
// IN0...IN7, MD1 MD2, 0dB 3dB, ON OFF, ON OFF, ON OFF
/// Mixing source / mixing gain ///
void setMix_source(int mix_sell, int mix_att); // int 0...7, -31...0
// IN0...IN7, -31dB...0dB
/// Mix control / level meter / dc offset detector configure ///
void setMix_cont(int mix_fl, int mix_fr, int mix_rl, int mix_rr, int rear_speak, int ref_out_sell, int level_metr, int dc); // all 0...1
// ON OFF, ON OFF, ON OFF, ON OFF, DIRECT_PATH MAIN_IGNAL, 3.3V 4V, NORMAL RESET, LEVEL_METER _DC_OFFSET_DETECTOR
/// Soft mute / others ///
void setMute(int mute, int pin_mute, int time_mute, int sub_in_conf, int sub_eneble, int fast, int filter); // ON OFF, PIN_IIC IIC, 0.48 0.96 7.68 15.36, IN_MUX BASS_OUT, ON OFF, ON OFF
/// SoftStep I //
void setSoft_1(int soft_loun, int soft_vol, int soft_treb, int soft_mid, int soft_bass, int soft_lf, int soft_fr, int soft_lr); // all ON OFF 1,1,1,1,1,1,1,1
/// SoftStep II / DC detector ///
void setSoft_2(int soft_rr, int soft_sub_l, int soft_sub_r, int soft_time, int soft_zero, int soft_time_cons); // 1,1,1,1,0,3
/// Loudness ///
void setLoudness(int loud_att, int loud_f, int loud_b, int loud_s); // int -15...0, 0...3, 0...1, 0...1
/// Volume / output gain ///
void setVol(int gain, int out_gain, int soft_step); // int -15...+15, 0...1, 0...1
/// Treble filter ///
void setTreble(int gain_treb, int treb_f, int soft_treb); // int -15...+15, 0...3, 0...1
/// Treble filter ///
void setMiddle(int gain_mid, int mid_q, int soft_mid); // int -15...+15, 0...3, 0...1
/// Bass filter ///
void setBass(int gain_bass, int bass_q, int soft_bass); // int -15...+15, 0...3, 0...1
/// Subwoofer / middle / bass ///
void setSMB(int sub_f, int sub_out, int mid_f, int bass_f, int bass_dc); // int 0...3, 0...1, 0...3, 0...3, 0...1
/// Speaker attenuation (LF/RF/LR/RR) ///
void setVol_LF(int lf, int soft_lf); // -79...0, 0..1
void setVol_RF(int rf, int soft_rf);
void setVol_LR(int lr, int soft_lr);
void setVol_RR(int rr, int soft_rr);
/// Subwoofer attenuation (subwoofer L/subwoofer R) ///
void setVol_SUB_L(int sl, int soft_sl); // -79...+15, 0...1
void setVol_SUB_R(int sr, int soft_sr);
/// Testing audio processor 1 ///
void setTest1(int x0, int x1, int x2, int x3);
void setTest2(int y0, int y1, int y2, int y3);
private:
void writeWire(char a, char b);
};
#endif //TDA7719_H
TDA7719.cpp
#include <Arduino.h>
#include <Wire.h>
#include "TDA7719.h"
TDA7719::TDA7719(){
Wire.begin();
}
void TDA7719::setInput(int input, int md, int input_gain, int input_conf){
switch (input) {
case 0: input = 0b00000000;break;
case 1: input = 0b00000001;break;
case 2: input = 0b00000010;break;
case 3: input = 0b00000011;break;
case 4: input = 0b00000100;break;
case 5: input = 0b00000101;break;
case 6: input = 0b00000110;break;
case 7: input = 0b00000111;break;
}
switch (md) {
case 0: md = 0b00000000;break;
case 1: md = 0b00001000;break;
}
switch (input_gain) {
case 0: input_gain = 0b00000000;break;
case 1: input_gain = 0b00010000;break;
}
switch (input_conf) {
case 0: input_conf = 0b00000000;break;
case 1: input_conf = 0b00100000;break;
case 2: input_conf = 0b01000000;break;
case 3: input_conf = 0b01100000;break;
case 4: input_conf = 0b10000000;break;
case 5: input_conf = 0b10100000;break;
case 6: input_conf = 0b11000000;break;
case 7: input_conf = 0b11100000;break;
}
int input_sum = input + md + input_gain + input_conf;
writeWire(TDA7719_INPUT, input_sum);
}
void TDA7719::setInput_2(int sell, int md_2, int input_gain_2, int bypass_front, int bypass_rear, int bypass_sub) {
switch (sell) {
case 0: sell = 0b00000000;break;
case 1: sell = 0b00000001;break;
case 2: sell = 0b00000010;break;
case 3: sell = 0b00000011;break;
case 4: sell = 0b00000100;break;
case 5: sell = 0b00000101;break;
case 6: sell = 0b00000110;break;
case 7: sell = 0b00000111;break;
}
switch (md_2) {
case 0: md_2 = 0b00000000;break;
case 1: md_2 = 0b00001000;break;
}
switch (input_gain_2) {
case 0: input_gain_2 = 0b00000000;break;
case 1: input_gain_2 = 0b00010000;break;
}
switch (bypass_front) {
case 0: bypass_front = 0b00000000;break;
case 1: bypass_front = 0b00100000;break;
}
switch (bypass_rear) {
case 0: bypass_rear = 0b00000000;break;
case 1: bypass_rear = 0b01000000;break;
}
switch (bypass_sub) {
case 0: bypass_sub = 0b00000000;break;
case 1: bypass_sub = 0b10000000;break;
}
int input_2_sum = sell + md_2 + input_gain_2 + bypass_front + bypass_rear + bypass_sub;
writeWire(TDA7719_INPUT_2, input_2_sum);
}
void TDA7719::setMix_source(int mix_sell, int mix_att){
switch (mix_sell) {
case 0: mix_sell = 0b00000000;break;
case 1: mix_sell = 0b00000001;break;
case 2: mix_sell = 0b00000010;break;
case 3: mix_sell = 0b00000011;break;
case 4: mix_sell = 0b00000100;break;
case 5: mix_sell = 0b00000101;break;
case 6: mix_sell = 0b00000110;break;
case 7: mix_sell = 0b00000111;break;
}
switch (mix_att) {
case 0: mix_att = 0b00000000;break;
case -1: mix_att = 0b00001000;break;
case -2: mix_att = 0b00010000;break;
case -3: mix_att = 0b00011000;break;
case -4: mix_att = 0b00100000;break;
case -5: mix_att = 0b00101000;break;
case -6: mix_att = 0b00110000;break;
case -7: mix_att = 0b00111000;break;
case -8: mix_att = 0b01000000;break;
case -9: mix_att = 0b01001000;break;
case -10: mix_att= 0b01010000;break;
case -11: mix_att= 0b01011000;break;
case -12: mix_att= 0b01100000;break;
case -13: mix_att= 0b01101000;break;
case -14: mix_att= 0b01110000;break;
case -15: mix_att= 0b01111000;break;
case -16: mix_att= 0b10000000;break;
case -17: mix_att= 0b10001000;break;
case -18: mix_att= 0b10010000;break;
case -19: mix_att= 0b10011000;break;
case -20: mix_att= 0b10100000;break;
case -21: mix_att= 0b10101000;break;
case -22: mix_att= 0b10110000;break;
case -23: mix_att= 0b10111000;break;
case -24: mix_att= 0b11000000;break;
case -25: mix_att= 0b11001000;break;
case -26: mix_att= 0b11010000;break;
case -27: mix_att= 0b11011000;break;
case -28: mix_att= 0b11100000;break;
case -29: mix_att= 0b11101000;break;
case -30: mix_att= 0b11110000;break;
case -31: mix_att= 0b11111000;break;
}
int mix_source_sum = mix_sell + mix_att;
writeWire(TDA7719_MIX_SOUR, mix_source_sum);
}
void TDA7719::setMix_cont(int mix_fl, int mix_fr, int mix_rl, int mix_rr, int rear_speak, int ref_out_sell, int level_metr, int dc) {
switch (mix_fl){
case 0: mix_fl = 0b00000000;break;
case 1: mix_fl = 0b00000001;break;
}
switch (mix_fr){
case 0: mix_fr = 0b00000000;break;
case 1: mix_fr = 0b00000010;break;
}
switch (mix_rl){
case 0: mix_rl = 0b00000000;break;
case 1: mix_rl = 0b00000100;break;
}
switch (mix_rr){
case 0: mix_rr = 0b00000000;break;
case 1: mix_rr = 0b00001000;break;
}
switch (rear_speak){
case 0: rear_speak = 0b00000000;break;
case 1: rear_speak = 0b00010000;break;
}
switch (ref_out_sell){
case 0: ref_out_sell = 0b00000000;break;
case 1: ref_out_sell = 0b00100000;break;
}
switch (level_metr){
case 0: level_metr = 0b00000000;break;
case 1: level_metr = 0b01000000;break;
}
switch (dc){
case 0: dc = 0b00000000;break;
case 1: dc = 0b10000000;break;
}
int mix_cont_sum = mix_fl + mix_fr + mix_rl + mix_rr + rear_speak +ref_out_sell +level_metr + dc;
writeWire(TDA7719_MIX_CONT, mix_cont_sum);
}
void TDA7719::setMute(int mute, int pin_mute, int time_mute, int sub_in_conf, int sub_eneble, int fast, int filter) {
switch (mute){
case 0: mute = 0b00000000;break;
case 1: mute = 0b00000001;break;
}
switch (pin_mute){
case 0: pin_mute = 0b00000000;break;
case 1: pin_mute = 0b00000010;break;
}
switch (time_mute){
case 0: time_mute = 0b00000000;break;
case 1: time_mute = 0b00000100;break;
case 2: time_mute = 0b00001000;break;
case 3: time_mute = 0b00001100;break;
}
switch (sub_in_conf){
case 0: sub_in_conf = 0b00000000;break;
case 1: sub_in_conf = 0b00010000;break;
}
switch (sub_eneble){
case 0: sub_eneble = 0b00000000;break;
case 1: sub_eneble = 0b00100000;break;
}
switch (fast){
case 0: fast = 0b00000000;break;
case 1: fast = 0b01000000;break;
}
switch (filter){
case 0: filter = 0b00000000;break;
case 1: filter = 0b10000000;break;
}
int mute_sum = mute + pin_mute + time_mute + sub_in_conf + sub_eneble + fast + filter;
writeWire(TDA7719_MUTE, mute_sum);
}
void TDA7719::setSoft_1(int soft_loun, int soft_vol, int soft_treb, int soft_mid, int soft_bass, int soft_lf, int soft_fr, int soft_lr) {
switch (soft_loun){
case 0: soft_loun = 0b00000000;break;
case 1: soft_loun = 0b00000001;break;
}
switch (soft_vol){
case 0: soft_vol = 0b00000000;break;
case 1: soft_vol = 0b00000010;break;
}
switch (soft_treb){
case 0: soft_treb = 0b00000000;break;
case 1: soft_treb = 0b00000100;break;
}
switch (soft_mid){
case 0: soft_mid = 0b00000000;break;
case 1: soft_mid = 0b00001000;break;
}
switch (soft_bass){
case 0: soft_bass = 0b00000000;break;
case 1: soft_bass = 0b00010000;break;
}
switch (soft_lf){
case 0: soft_lf = 0b00000000;break;
case 1: soft_lf = 0b00100000;break;
}
switch (soft_fr){
case 0: soft_fr = 0b00000000;break;
case 1: soft_fr = 0b01000000;break;
}
switch (soft_lr){
case 0: soft_lr = 0b00000000;break;
case 1: soft_lr = 0b00000100;break;
}
int soft_sum = soft_loun + soft_vol + soft_treb + soft_mid + soft_bass + soft_lf + soft_fr + soft_lr;
writeWire(TDA7719_SOFT_1, soft_sum);
}
void TDA7719::setSoft_2(int soft_rr, int soft_sub_l, int soft_sub_r, int soft_time, int soft_zero, int soft_time_cons){
switch (soft_rr){
case 0: soft_rr = 0b00000000;break;
case 1: soft_rr = 0b00000001;break;
}
switch (soft_sub_l){
case 0: soft_sub_l = 0b00000000;break;
case 1: soft_sub_l = 0b00000010;break;
}
switch (soft_sub_r){
case 0: soft_sub_r = 0b00000000;break;
case 1: soft_sub_r = 0b00000100;break;
}
switch (soft_time){
case 0: soft_time = 0b00000000;break;
case 1: soft_time = 0b00001000;break;
}
switch (soft_zero){
case 0: soft_zero = 0b00000000;break;
case 1: soft_zero = 0b00010000;break;
case 2: soft_zero = 0b00100000;break;
}
switch (soft_time_cons){
case 0: soft_time_cons = 0b00000000;break;
case 1: soft_time_cons = 0b01000000;break;
case 2: soft_time_cons = 0b10000000;break;
case 3: soft_time_cons = 0b11000000;break;
}
int soft_2_sum = soft_rr + soft_sub_l + soft_sub_r + soft_time + soft_zero + soft_time_cons;
writeWire(TDA7719_SOFT_2, soft_2_sum);
}
void TDA7719::setLoudness(int loud_att, int loud_f, int loud_b, int loud_s){
loud_att = abs(loud_att);
switch (loud_f){
case 0: loud_f = 0b00000000;break;
case 1: loud_f = 0b00010000;break;
case 2: loud_f = 0b00100000;break;
case 3: loud_f = 0b00110000;break;
}
switch (loud_b){
case 0: loud_b = 0b00000000;break;
case 1: loud_b = 0b01000000;break;
}
switch (loud_s){
case 0: loud_s = 0b00000000;break;
case 1: loud_s = 0b10000000;break;
}
int loud_sum = loud_att + loud_f + loud_b + loud_s;
writeWire(TDA7719_LOUD, loud_sum);
}
void TDA7719::setVol(int gain, int out_gain, int soft_step){
switch (gain){
case -15: gain = 0b00000000;break;
case -14: gain = 0b00000001;break;
case -13: gain = 0b00000010;break;
case -12: gain = 0b00000011;break;
case -11: gain = 0b00000100;break;
case -10: gain = 0b00000101;break;
case -9: gain = 0b00000110;break;
case -8: gain = 0b00000111;break;
case -7: gain = 0b00001000;break;
case -6: gain = 0b00001001;break;
case -5: gain = 0b00001010;break;
case -4: gain = 0b00001011;break;
case -3: gain = 0b00001100;break;
case -2: gain = 0b00001101;break;
case -1: gain = 0b00001110;break;
case 0: gain = 0b00001111;break;
case 1: gain = 0b00011110;break;
case 2: gain = 0b00011101;break;
case 3: gain = 0b00011100;break;
case 4: gain = 0b00011011;break;
case 5: gain = 0b00011010;break;
case 6: gain = 0b00011001;break;
case 7: gain = 0b00011000;break;
case 8: gain = 0b00010111;break;
case 9: gain = 0b00010110;break;
case 10: gain = 0b00010101;break;
case 11: gain = 0b00010100;break;
case 12: gain = 0b00010011;break;
case 13: gain = 0b00010010;break;
case 14: gain = 0b00010001;break;
case 15: gain = 0b00010000;break;
}
switch (out_gain){
case 0: out_gain = 0b00000000;break;
case 1: out_gain = 0b01000000;break;
}
switch (soft_step){
case 0: soft_step = 0b00000000;break;
case 1: soft_step = 0b10000000;break;
}
int vol_sum = gain + out_gain + soft_step;
writeWire(TDA7719_VOL, vol_sum);
}
void TDA7719::setTreble(int gain_treb, int treb_f, int soft_treb){
switch (gain_treb){
case -15: gain_treb = 0b00000000;break;
case -14: gain_treb = 0b00000001;break;
case -13: gain_treb = 0b00000010;break;
case -12: gain_treb = 0b00000011;break;
case -11: gain_treb = 0b00000100;break;
case -10: gain_treb = 0b00000101;break;
case -9: gain_treb = 0b00000110;break;
case -8: gain_treb = 0b00000111;break;
case -7: gain_treb = 0b00001000;break;
case -6: gain_treb = 0b00001001;break;
case -5: gain_treb = 0b00001010;break;
case -4: gain_treb = 0b00001011;break;
case -3: gain_treb = 0b00001100;break;
case -2: gain_treb = 0b00001101;break;
case -1: gain_treb = 0b00001110;break;
case 0: gain_treb = 0b00001111;break;
case 1: gain_treb = 0b00011110;break;
case 2: gain_treb = 0b00011101;break;
case 3: gain_treb = 0b00011100;break;
case 4: gain_treb = 0b00011011;break;
case 5: gain_treb = 0b00011010;break;
case 6: gain_treb = 0b00011001;break;
case 7: gain_treb = 0b00011000;break;
case 8: gain_treb = 0b00010111;break;
case 9: gain_treb = 0b00010110;break;
case 10: gain_treb = 0b00010101;break;
case 11: gain_treb = 0b00010100;break;
case 12: gain_treb = 0b00010011;break;
case 13: gain_treb = 0b00010010;break;
case 14: gain_treb = 0b00010001;break;
case 15: gain_treb = 0b00010000;break;
}
switch (treb_f){
case 0: treb_f = 0b00000000;break;
case 1: treb_f = 0b00100000;break;
case 2: treb_f = 0b01000000;break;
case 3: treb_f = 0b01100000;break;
}
switch (soft_treb){
case 0: soft_treb = 0b00000000;break;
case 1: soft_treb = 0b10000000;break;
}
int treb_sum = gain_treb + treb_f + soft_treb;
writeWire(TDA7719_TRBLE, treb_sum);
}
void TDA7719::setMiddle(int gain_mid, int mid_q, int soft_mid){
switch (gain_mid){
case -15: gain_mid = 0b00000000;break;
case -14: gain_mid = 0b00000001;break;
case -13: gain_mid = 0b00000010;break;
case -12: gain_mid = 0b00000011;break;
case -11: gain_mid = 0b00000100;break;
case -10: gain_mid = 0b00000101;break;
case -9: gain_mid = 0b00000110;break;
case -8: gain_mid = 0b00000111;break;
case -7: gain_mid = 0b00001000;break;
case -6: gain_mid = 0b00001001;break;
case -5: gain_mid = 0b00001010;break;
case -4: gain_mid = 0b00001011;break;
case -3: gain_mid = 0b00001100;break;
case -2: gain_mid = 0b00001101;break;
case -1: gain_mid = 0b00001110;break;
case 0: gain_mid = 0b00001111;break;
case 1: gain_mid = 0b00011110;break;
case 2: gain_mid = 0b00011101;break;
case 3: gain_mid = 0b00011100;break;
case 4: gain_mid = 0b00011011;break;
case 5: gain_mid = 0b00011010;break;
case 6: gain_mid = 0b00011001;break;
case 7: gain_mid = 0b00011000;break;
case 8: gain_mid = 0b00010111;break;
case 9: gain_mid = 0b00010110;break;
case 10: gain_mid = 0b00010101;break;
case 11: gain_mid = 0b00010100;break;
case 12: gain_mid = 0b00010011;break;
case 13: gain_mid = 0b00010010;break;
case 14: gain_mid = 0b00010001;break;
case 15: gain_mid = 0b00010000;break;
}
switch (mid_q){
case 0: mid_q = 0b00000000;break;
case 1: mid_q = 0b00100000;break;
case 2: mid_q = 0b01000000;break;
case 3: mid_q = 0b01100000;break;
}
switch (soft_mid){
case 0: soft_mid = 0b00000000;break;
case 1: soft_mid = 0b10000000;break;
}
int mid_sum = gain_mid + mid_q + soft_mid;
writeWire(TDA7719_MIDDLE, mid_sum);
}
void TDA7719::setBass(int gain_bass, int bass_q, int soft_bass){
switch (gain_bass){
case -15: gain_bass = 0b00000000;break;
case -14: gain_bass = 0b00000001;break;
case -13: gain_bass = 0b00000010;break;
case -12: gain_bass = 0b00000011;break;
case -11: gain_bass = 0b00000100;break;
case -10: gain_bass = 0b00000101;break;
case -9: gain_bass = 0b00000110;break;
case -8: gain_bass = 0b00000111;break;
case -7: gain_bass = 0b00001000;break;
case -6: gain_bass = 0b00001001;break;
case -5: gain_bass = 0b00001010;break;
case -4: gain_bass = 0b00001011;break;
case -3: gain_bass = 0b00001100;break;
case -2: gain_bass = 0b00001101;break;
case -1: gain_bass = 0b00001110;break;
case 0: gain_bass = 0b00001111;break;
case 1: gain_bass = 0b00011110;break;
case 2: gain_bass = 0b00011101;break;
case 3: gain_bass = 0b00011100;break;
case 4: gain_bass = 0b00011011;break;
case 5: gain_bass = 0b00011010;break;
case 6: gain_bass = 0b00011001;break;
case 7: gain_bass = 0b00011000;break;
case 8: gain_bass = 0b00010111;break;
case 9: gain_bass = 0b00010110;break;
case 10: gain_bass = 0b00010101;break;
case 11: gain_bass = 0b00010100;break;
case 12: gain_bass = 0b00010011;break;
case 13: gain_bass = 0b00010010;break;
case 14: gain_bass = 0b00010001;break;
case 15: gain_bass = 0b00010000;break;
}
switch (bass_q){
case 0: bass_q = 0b00000000;break;
case 1: bass_q = 0b00100000;break;
case 2: bass_q = 0b01000000;break;
case 3: bass_q = 0b01100000;break;
}
switch (soft_bass){
case 0: soft_bass = 0b00000000;break;
case 1: soft_bass = 0b10000000;break;
}
int bass_sum = gain_bass + bass_q + soft_bass;
writeWire(TDA7719_BASS, bass_sum);
}
void TDA7719::setSMB(int sub_f, int sub_out, int mid_f, int bass_f, int bass_dc) {
switch (sub_f){
case 0: sub_f = 0b00000000;break;
case 1: sub_f = 0b00000001;break;
case 2: sub_f = 0b00000010;break;
case 3: sub_f = 0b00000011;break;
}
switch (sub_out){
case 0: sub_out = 0b00000000;break;
case 1: sub_out = 0b00000100;break;
}
switch (mid_f){
case 0: mid_f = 0b00000000;break;
case 1: mid_f = 0b00001000;break;
case 2: mid_f = 0b00010000;break;
case 3: mid_f = 0b00011000;break;
}
switch (bass_f){
case 0: bass_f = 0b00000000;break;
case 1: bass_f = 0b00100000;break;
case 2: bass_f = 0b01000000;break;
case 3: bass_f = 0b01100000;break;
}
switch (bass_dc){
case 0: bass_dc = 0b00000000;break;
case 1: bass_dc = 0b10000000;break;
}
int smb_sum = sub_f + sub_out + mid_f + bass_f + bass_dc;
writeWire(TDA7719_SUB_M_B, smb_sum);
}
void TDA7719::setVol_LF(int lf, int soft_lf){
lf = abs(lf)+0b00010000;
switch (soft_lf){
case 0: soft_lf = 0b00000000;break;
case 1: soft_lf = 0b10000000;break;
}
int lf_sum = lf + soft_lf;
writeWire(TDA7719_ATT_LF, lf_sum);
}
void TDA7719::setVol_RF(int rf, int soft_rf){
rf = abs(rf)+0b00010000;
switch (soft_rf){
case 0: soft_rf = 0b00000000;break;
case 1: soft_rf = 0b10000000;break;
}
int rf_sum = rf + soft_rf;
writeWire(TDA7719_ATT_RF, rf_sum);
}
void TDA7719::setVol_LR(int lr, int soft_lr){
lr = abs(lr)+0b00010000;
switch (soft_lr){
case 0: soft_lr = 0b00000000;break;
case 1: soft_lr = 0b10000000;break;
}
int lr_sum = lr + soft_lr;
writeWire(TDA7719_ATT_LR, lr_sum);
}
void TDA7719::setVol_RR(int rr, int soft_rr){
rr = abs(rr)+0b00010000;
switch (soft_rr){
case 0: soft_rr = 0b00000000;break;
case 1: soft_rr = 0b10000000;break;
}
int rr_sum = rr + soft_rr;
writeWire(TDA7719_ATT_RR, rr_sum);
}
void TDA7719::setVol_SUB_L(int sl, int soft_sl){
sl = abs(sl)+0b00010000;
switch (soft_sl){
case 0: soft_sl = 0b00000000;break;
case 1: soft_sl = 0b10000000;break;
}
int sl_sum = sl + soft_sl;
writeWire(TDA7719_ATT_SUB_L, sl_sum);
}
void TDA7719::setVol_SUB_R(int sr, int soft_sr){
sr = abs(sr)+0b00010000;
switch (soft_sr){
case 0: soft_sr = 0b00000000;break;
case 1: soft_sr = 0b10000000;break;
}
int sr_sum = sr + soft_sr;
writeWire(TDA7719_ATT_SUB_R, sr_sum);
}
void TDA7719::setTest1(int x0, int x1, int x2, int x3){
switch (x0){
case 0: x0 = 0b00000000;break;
case 1: x0 = 0b00000001;break;
}
switch (x1){
case 0: x1 = 0b00000000;break;
case 1: x1 = 0b00000010;break;
case 2: x1 = 0b00000100;break;
case 3: x1 = 0b00000110;break;
case 4: x1 = 0b00001000;break;
case 5: x1 = 0b00001010;break;
case 6: x1 = 0b00001100;break;
case 7: x1 = 0b00001110;break;
case 8: x1 = 0b00010000;break;
case 9: x1 = 0b00010010;break;
case 10: x1 = 0b00010100;break;
case 11: x1 = 0b00010110;break;
case 12: x1 = 0b00011000;break;
case 13: x1 = 0b00011010;break;
case 14: x1 = 0b00011100;break;
case 15: x1 = 0b00011110;break;
}
switch (x2){
case 0: x2 = 0b00000000;break;
case 1: x2 = 0b00100000;break;
}
switch (x3){
case 0: x3 = 0b00000000;break;
case 1: x3 = 0b01000000;break;
}
int x_sum = x0 + x1 + x2 + x3;
writeWire(TDA7719_TEST_1, x_sum);
}
void TDA7719::setTest2(int y0, int y1, int y2, int y3){
switch (y0){
case 0: y0 = 0b00000000;break;
case 1: y0 = 0b00000001;break;
}
switch (y1){
case 0: y1 = 0b00000000;break;
case 1: y1 = 0b00000010;break;
}
switch (y2){
case 0: y2 = 0b00000000;break;
case 1: y2 = 0b00000100;break;
}
switch (y3){
case 0: y3 = 0b00000000;break;
case 1: y3 = 0b00001000;break;
case 2: y3 = 0b00010000;break;
case 3: y3 = 0b00011000;break;
}
int y_sum = y0 + y1 + y2 + y3;
writeWire(TDA7719_TEST_2, y_sum);
}
void TDA7719::writeWire(char a, char b){
Wire.beginTransmission(TDA7719_address);
Wire.write (a);
Wire.write (b);
Wire.endTransmission();
}