firmware: implement muting of inputs
This commit is contained in:
parent
d28508f7bf
commit
cc6e747b3f
@ -55,6 +55,7 @@ void Error_Handler(void);
|
||||
|
||||
void set_input(uint8_t channel);
|
||||
void set_attenuation(uint8_t left, uint8_t right);
|
||||
void set_mute(uint8_t mute);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
|
@ -102,23 +102,55 @@ int test_button_pressed() {
|
||||
#undef TEST_BUTTON
|
||||
}
|
||||
|
||||
struct ui_state {
|
||||
uint8_t oldchannel;
|
||||
uint8_t mute;
|
||||
} ui_state = {
|
||||
.oldchannel = -1,
|
||||
.mute = 0,
|
||||
};
|
||||
|
||||
void set_input(uint8_t channel) {
|
||||
static uint8_t oldchannel = -1;
|
||||
if (channel == oldchannel || channel >= 6)
|
||||
if (ui_state.oldchannel == channel || channel >= 6)
|
||||
return;
|
||||
|
||||
channel = channel;
|
||||
set_input_led(oldchannel, 0);
|
||||
set_input_led(ui_state.oldchannel, 0);
|
||||
|
||||
// do not disturb the mute mode
|
||||
if (!ui_state.mute)
|
||||
{
|
||||
set_input_led(channel, 1);
|
||||
|
||||
// invert bd inputs to match the numbers on the case
|
||||
bd_set_input(&hi2c1, 5-channel);
|
||||
oldchannel = channel;
|
||||
}
|
||||
|
||||
ui_state.oldchannel = channel;
|
||||
|
||||
printf("C%d\n", channel);
|
||||
}
|
||||
|
||||
void set_mute(uint8_t mute) {
|
||||
if(ui_state.mute == mute)
|
||||
return;
|
||||
|
||||
if (0 == (ui_state.mute = mute)) {
|
||||
// hack to make reactivation of the last channel easier
|
||||
uint8_t old_input = ui_state.oldchannel;
|
||||
ui_state.oldchannel = -1;
|
||||
|
||||
set_input(old_input);
|
||||
HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, 0);
|
||||
}
|
||||
else {
|
||||
HAL_GPIO_WritePin(USER_LED_GPIO_Port, USER_LED_Pin, 1);
|
||||
set_input_led(ui_state.oldchannel, 0);
|
||||
bd_set_input(&hi2c1, BD_INPUT_MUTE);
|
||||
}
|
||||
|
||||
printf("M%d\n", ui_state.mute?1:0);
|
||||
}
|
||||
|
||||
void set_attenuation(uint8_t left, uint8_t right) {
|
||||
bd_set_attenuation(&hi2c1, 0, left);
|
||||
bd_set_attenuation(&hi2c1, 1, right);
|
||||
@ -168,6 +200,8 @@ int main(void)
|
||||
// reset set input
|
||||
set_input(input);
|
||||
set_attenuation(0,0);
|
||||
int count = 0;
|
||||
int button_timeout = 0;
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@ -180,8 +214,25 @@ int main(void)
|
||||
|
||||
// handle button inputs
|
||||
input = test_button_pressed();
|
||||
if (0 <= input) {
|
||||
if (6 > input) {
|
||||
set_input(input);
|
||||
|
||||
if (100 < ++count) {
|
||||
count = 0;
|
||||
button_timeout++;
|
||||
}
|
||||
|
||||
//printf("%d\n", count);
|
||||
|
||||
if (1000 < button_timeout) {
|
||||
// long press, toggle mute
|
||||
set_mute(!ui_state.mute);
|
||||
button_timeout = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
count = 0;
|
||||
button_timeout = 0;
|
||||
}
|
||||
|
||||
// parse serial commands
|
||||
|
@ -150,6 +150,14 @@ int parse_buffer() {
|
||||
printf("%c%d\n", temp, bd_set_attenuation(&hi2c1, temp == 'R', att&0xFF));
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
{
|
||||
uint16_t mute;
|
||||
if (next_arg_unsigned(&mute)) break;
|
||||
|
||||
set_mute(mute);
|
||||
}
|
||||
break;
|
||||
case 'B':
|
||||
case 'T':
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user