Попробовал. Результат тот же. Ничего не выводится. Пока с не выводом названием файла можно смириться. Пока даже при получении кода MU+01 QM+02 или MU+03 QM+03 не происходит смена иконки на USB или SDCARD, а там кодировка не причем. Там цифры. Почему?
Не знаю. Вход аудиопроцессора, на котором висит BT201, должен быть отмечен в настройках как "Bluetooth".
Это активирует переключение "виртуальных" входов по приходу соответствующих сообщение по uart:
"MU+01" - USB смонтирован, в список активных входов добавляется USB (иконка не меняется) "MU+02' - USB отмонтирован, из списка активных входов удаляется USB (иконка не меняется) "MU+03" - SD смонтирована, в список активных входов добавляется SDCARD (иконка не меняется) "MU+04" - SD отмонтирована, в список активных входов добавляется SDCARD (иконка не меняется)
"QM+01" - на модуле активирован Bluetooth, меняется иконка на BLUETOOTH "QM+02" - на модуле активирован USB, меняется иконка на USB "QM+03" - на модуле активирована SD, меняется иконка на SDCARD "QM+00" - входы USB и SD удаляются из списка, иконка возвращается на BLUETOOTH.
Проще говоря, для того, чтобы иконка сменилась на USB, должно прийти два сообщения - "MU+01" и "QM+02"
В вашем случае, похоже, модуль не отправляет первое из сообщений.
Я пробовал из терминала отправлять на amp последовательно эти коды и ни какой реакции. Когда вставляешь флешку в USB при выбранном входе Bluetooth она активируется и начинает воспроизводится amp. То есть вход выбран правильно, да и управление всеми режимами BT201 со стороны amp проходит. Можно ли для теста вывести на экран содержимое char *line отвечающей за переключение иконок? Может тогда станет понятно в парсинге дело или в чем то другом.
Можно, почему бы и нет. Я иногда и сам так делаю для отладки. glcdSetXY() и glcdWriteString() в помощь. Или посмотрите, как это сделано в функциях canvasDebugFPS() и canvasDebugTimers() - для того, чтобы задействовать - уберите return в начале функции.
Добавлено after 2 hours 27 minutes 1 second: Создал ловушку в виде вывода на дисплей тестового текста. Похоже не вызывается функция controlParseLine(LineParse *lp). В функции btGetData(void) вне цикла while ловушка еще работает а дальше не идет. Что проверять дальше пока не пойму. Может подскажите?
Ну да, btGetData() вызывается из основного цикла программы, так что там будет работать. Если же внутрь цикла программа вообще не входит, значит, кольцевой буфер rbuf пустой - его ничто не наполняет.
Ну а наполнение его происходит из обработчика прерывания чуть выше по коду.
Возможно, просто на RX USART1 ничего не приходит?
Или данные на экран всё-таки выводятся, но ввиду большого FPS это сложно заметить.
Да не наступает прерывание. Функция USART_BT_HANDLER не вызывается! Прозвонил еще раз всю разводку от BT201 до ножек stm32, все соединено. Скорее всего у STMки накрылся вход.
Добавлено after 3 hours 17 minutes 33 seconds: Заменил STMку все завелось иконки в режиме Bluetooth при выборе USB или SDCARD меняются. А вывод названия файла по прежнему нет. Но это уже другая история. Спасибо всем.
Для отображения имени файлов попробовал вместо utf16To8(line, buffer, size / 2); вызвать простое strncpy(btCtx.songName, line, size); (как выше просил WiseLord). Результат не дал никаких изменений. Зато получилось изменив функцию: static void controlParseLine(LineParse *lp) {
char *line = lp->line;
// BT201 control if (utilIsPrefix(line, "QM+")) { bt201ParseInput(line + strlen("QM+")); if (btGetInput() & (BT_IN_USB | BT_IN_SDCARD)) { ampActionQueue(ACTION_AUDIO_INPUT_SET_TYPE, IN_BLUETOOTH); } } else if (utilIsPrefix(line, "MU+")) { bt201ParseMount(line + strlen("MU+")); } else if (utilIsPrefix(line, "MF+")) {
if (my_tester == false) { // Запрос полного имени текущего файла usartSendString(USART_BT, "AT+MF\r\n"); my_tester = true; }else{ bt201ParseSongName(line + strlen("MF+"), lp->size - (int16_t)strlen("MF+")); my_tester = false; } } } то есть на первый полученный, урезанный, ответ от BT201 "MF+" я отправляю запрос "AT+MF", и получаю повторный ответ с полным именем текущего файла. Вроде в первом приближении даже работает. Есть момент связанный с первоночальным отображением имени. Но после переключения на следующий или предыдущий файл все работает. Прошу нашего гуру помочь советом и оценкой. Может сделать как то по другому?
Еще заметил что на команду "AT+CM00\r\n" BT201 не всегда дает полный адекватный ответ. Зато на конкретные команды "AT+CM01\r\n", "AT+CM02\r\n" или "AT+CM03\r\n" отвечает вполне конкретно, полной информацией о смонтированных и выбранных устройствах. Поэтому изменил функцию btNextInput() следующим образом:
void btNextInput() { // Query current mode usartSendString(USART_BT, "AT+QM\r\n");
if (btCtx.input & BT_IN_USB) { usartSendString(USART_BT, "AT+CM03\r\n"); //Specify the mode of operation as "TF Card" playback. i2cExpGpioKeyPress(BT_NEXT_INPUT); } else if (btCtx.input & BT_IN_SDCARD) { usartSendString(USART_BT, "AT+CM01\r\n"); //Specify working mode as Bluetooth i2cExpGpioKeyPress(BT_NEXT_INPUT); } else if (btCtx.input & BT_IN_BLUETOOTH) { usartSendString(USART_BT, "AT+CM02\r\n"); //Specify the mode of operation as "U disk" play. i2cExpGpioKeyPress(BT_NEXT_INPUT); }
// Запрос полного имени текущего файла usartSendString(USART_BT, "AT+MF\r\n"); }
В конце делаю запрос на имя текущего файла. Это позволило избавится от некорректного начального отображения имени файла, о чем я сообщал выше. В таком виде все отлично отображается и выбирается.
Еще заметил что на команду "AT+CM00\r\n" BT201 не всегда дает полный адекватный ответ. Зато на конкретные команды "AT+CM01\r\n", "AT+CM02\r\n" или "AT+CM03\r\n" отвечает вполне конкретно, полной информацией о смонтированных и выбранных устройствах. Поэтому изменил функцию btNextInput() следующим образом:
void btNextInput() { // Query current mode usartSendString(USART_BT, "AT+QM\r\n");
if (btCtx.input & BT_IN_USB) { usartSendString(USART_BT, "AT+CM03\r\n"); //Specify the mode of operation as "TF Card" playback. i2cExpGpioKeyPress(BT_NEXT_INPUT); } else if (btCtx.input & BT_IN_SDCARD) { usartSendString(USART_BT, "AT+CM01\r\n"); //Specify working mode as Bluetooth i2cExpGpioKeyPress(BT_NEXT_INPUT); } else if (btCtx.input & BT_IN_BLUETOOTH) { usartSendString(USART_BT, "AT+CM02\r\n"); //Specify the mode of operation as "U disk" play. i2cExpGpioKeyPress(BT_NEXT_INPUT); }
// Запрос полного имени текущего файла usartSendString(USART_BT, "AT+MF\r\n"); }
В конце делаю запрос на имя текущего файла. Это позволило избавится от некорректного начального отображения имени файла, о чем я сообщал выше. В таком виде все отлично отображается и выбирается.
Можно фото? Интересно как выглядит текст. Может когда то куда присобачу другие модули, которые на этой прошивке не дают полного названия
Заголовок сообщения: Re: Темброблок - анализатор спектра на STM32F103
Добавлено: Пт ноя 29, 2024 23:13:22
Первый раз сказал Мяу!
Зарегистрирован: Чт май 15, 2014 12:34:31 Сообщений: 24
Рейтинг сообщения:0
Вот такая коробочка получается, ещё не допилил, но концепция в целом такая, не хватает ещё несколько индикаторов, типа селектора входов и т.д. За основу взят корпус от старого видика))) Туда почти влезает усилитель. Огромная благодарность автору за проект!
А расширитель хоть запитан-то постоянно? Или в ждущем режиме обесточивается?
По коду всё должно работать корректно. Вход в ждущий режим:
amp_main.c: ampEnterStby() => inputSetPower(false) => priv.inputStatus = 0x00; => i2cExpSend(i2cAddrIdx, priv.inputStatus); - Все линии должны выставляться в лог. 0.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения