maksim писал(а):
Сегодня играли ,тестировал новую прошивку )) У меня лично пропал звук и у одного игрока )))За всю игру 1 раз ))) Свистят над головой пули и я нажал на перезарядку и звук пропал....Но это же пули ,а не команда новая игра )))Как в домашних условиях с имитировать пока нне знаю...
Мне то легко имитировать - по блютусу послать символ 'e'.
Баг зафиксирован - звук пропал с n-адцатой попытки!
Офигенный косяк нашёл в функции
Код:
void playback_sound(TSOUND_ROLE sound_role)//воспроизводим звук через прерывание
она почти в самом конце файла
тут
//звук "пролетающей пули"
case flying_bullet_sound:
simples_in_queue = eeprom_read_word(&sound_8_size); {
curr_sound.role = sound_role;
curr_sound.adress = eeprom_read_word(&sound_8_adress);
curr_sound.size = eeprom_read_word(&sound_8_size);
curr_sound.simples_in_queue = curr_sound.size;
curr_sound.play_now = true;
}
break;
simples_in_queue = eeprom_read_word(&sound_8_size); - этого тут не должно было быть!
Как оно сюда попало?
Видимо случайный копи паст, в общем удаляем
Код:
//звук "пролетающей пули"
case flying_bullet_sound:
{
curr_sound.role = sound_role;
curr_sound.adress = eeprom_read_word(&sound_8_adress);
curr_sound.size = eeprom_read_word(&sound_8_size);
curr_sound.simples_in_queue = curr_sound.size;
curr_sound.play_now = true;
}
break;
Ну и наша пилюля
Код:
case RX_ERROR: //ошибка приема
{
if((reload_state!=nothing_to_do)||(simples_in_queue!=0))
{
rx_event = NOT_EVENT;
break;
}
if((!ir_error_ignore)&&(!eeprom_is_open))//если не надо игнорировать ошибку и звук не воспроизводиться уже
{
playback_sound(flying_bullet_sound);
}
rx_event = NOT_EVENT;
break;
}
Я пускал "пролетающие пули" и долбил перезаряд, пока обоймы не кончились - не глючил.
Если нужна вспышка светодиода при этом, то так
Код:
case RX_ERROR: //ошибка приема
{
if((reload_state!=nothing_to_do)||(simples_in_queue!=0))
{
rx_event = NOT_EVENT;
break;
}
if((!ir_error_ignore)&&(!eeprom_is_open))//если не надо игнорировать ошибку и звук не воспроизводиться уже
{
BULLETS_OUT_LED_ON;
playback_sound(flying_bullet_sound);
timer2=0;
while(timer2 < 4000);
BULLETS_OUT_LED_OFF;
}
rx_event = NOT_EVENT;
// sei();
break;
}
Радикальный способ - полностью выключить озвучку пролёта пули
Код:
case RX_ERROR: //ошибка приема
{
rx_event = NOT_EVENT;
break;
}