Еще одна проблема со звуковыми оповещениями аудиоинтерфейса. В первый раз были непонятки с SDK AC692n, но успешно разрешились тут JL SoC. 杰理芯片
Теперь возникли глюки с воспроизведением звуковых оповещений TONE в SDK AC696n версии 0.2.5 и с чипом 6965A. Свой код в отдельном файле. Звуковые оповещения запускаются вызовом функции tone_play_index(u8 index, u8 preemption). Первый аргумент функции - имя файла определенного звукового сигнала TONE. Второй аргумент 0 или 1, определяющие будет перед воспроизведением сигнала TONE остановлено воспроизведение аудиофайла с телефона или TONE сообщение наложится на звук аудиофайла (второй вариант шляпа, рывками звук воспроизводится и я его не использую).
Ну так вот, при озвучивании кнопок все отлично работает. При нажатии на кнопку в файле key_event_deal.c в селекторе switch (key_event) вызывается нужная функция в коде моего файла, куда включено tone_play_index(u8 index, u8 preemption). Тут все прекрасно, воспроизведение с телефона останавливается, звучит назначенное кнопке TONE оповещение, после чего снова воспроизводится аудиофайл с телефона.
Косяк появился при попытке вызвать упомянутую выше функцию из функции SYS_HI_TIMER_ADD(_func, _priv, _msec), из которой с определенной периодичностью вызывается та или иная функция. В частности, оповещения не воспроизводятся когда вызываются из функций в моем коде, которые в свою очередь вызываются из файла plcnt.c, из функции scan_capkey(void *priv). Последняя функция в том же файле вызывается из scan_capkey(void *priv) с периодичностью 2 ms. В этом случае полная тишина вместо звуковых сигналов. Функция tone_get_status() вызываемая сразу после tone_play_index(u8 index, u8 preemption) возвращает 0, что говорит о молчании ягнят об отсутствии воспроизведения TONE сообщения. Сама функция tone_play_index(u8 index, u8 preemption) возвращает значение 22, чему в файле errno-base.h соответствует ошибка EINVAL - Invalid argument.
Может кто в курсе, чего не так с аргументами при обращении к функции tone_play_index(u8 index, u8 preemption) из SYS_HI_TIMER_ADD(_func, _priv, _msec)?