Програмная часть: модули режимовПлейер поддерживает четыре основных режима работы:
Номер текущего режима сохраняется в энергонезависимой памяти (но только, если это не режим главного меню) и при включении плейер сразу переходит в него. Главное меню (модуль menu_mode.asm.inc)Изначально предполагалось, что это будет единственное меню в плейере, поэтому здесь сосредоточены все пункты управления: переход к меню выбора файла, выбор носителя информации и раздела на нём, управление флажками декодера. Однако постепенно, при добавлении новых возможностей в прошивку, это меню стало просто одним из режимов работы плейера. Единственная его особенность: координатор не запомнинает этот режим в энергонезависимой памяти, поэтому при включении плейера текущим становится режим, который был последним до перехода к menu_mode. Воспроизведение mp3-файлов (music_mode.asm.inc)Текущий файл, в данный момент указанный в памяти модуля файловых систем, проверяется на похожесть на mp3-поток и модуль пытается его воспроизвести. Здесь никаких особенностей нет, если не считать того, что этот режим имеет самый длинный (а ради чего всё затевалось ? :) ) список комбинаций клавиш управления. В общем, этот модуль только координирует взаимодействие между уровнем файловой подсистемы и уровнем драйвера mp3-декодера. При этом некоторые данные выводятся на экран и постоянно анализируется клавиатура. Единственный случай проявления "интеллекта" модуля в переходах между файлами: после вызова соответствующей функции файловой системы модуль проверяет - является ли выбранный файл mp3-потоком и если это не так, пытается вызывать file_Next (file_Prev) вновь. В последних версия программного обеспечения в этот модуль добавлена возможность сохранения и восстановления дополнительной закладки в энергонезависимой памяти (помимо основной, которая сохраняется на уровне модуля файловых систем). Все остальные параметры (например, уровень громкости) сохраняются и восстанавливаются соответствующими модулями. Чтение текстов (text_mode.asm.inc)Как ни странно, этот модуль, делавшийся по остаточному принципу (чтобы был) и - вообще - мысль о котором возникла уже в процессе написания управляющего кода, стал самым крупным (крупнее него только модуль поддержки ФС FAT) и весьма востребованным. Многие люди, кто видел плейер живьём, удивлялись, что с него вообще можно что-то читать - имея ввиду очень маленький размер знаков и всего шесть строк - высоту дисплея. Мне сначала тоже казалось, что это будет крайне неудобно, но, как ни странно, никаких проблем не возникло - за полгода я прочитал с плейера уже несколько миллионов знаков (несколько толстеньких книжек) и мне это весьма нравится. Практика лишь внесла несколько дополнений в програмный код модуля, которые при первоначальной разработке были совсем не очевидны. Серьёзным конкурентом Orfey стал даже ноутбуку просто потому, что время его включения, в том числе в режим чтения текстов (с учётом времени поиска закладки) - около секунды. Модуль чтения понимает только plain/text в кодировке КОИ-8. Для приведения к этому виду других форматов (doc, html...) я набросал несколько скриптов. Они не сложные (поэтому не опубликованы) и используют известные программы, вроде lynx, catdoc, iconv. Модуль ожидает, что абзацы текста будут разделятся символом перевода строки (char(10)), разбивка абзаца на строки выполняется кодом модуля (т.е. он старается переносить строки по пробелам). Модуль может формировать отступ красной строки заданного размера (поэтому пробелы в начале абзацев лучше удалять... Их вообще лучше удалять везде, где их слишком много). Возможность воспроизводить музыку во время чтения текста не реализована по двум причинам: если я читаю, музыку слышать перестаю. Особенность мозгов такая. С другой стороны, файловая система может оперировать только с одним файлом в одно время. Оба ограничения вроде бы можно снять, но мне это пока не нужно. Во время работы этого модуля mp3-декодер переводится в режим пониженного энергопотребления, кроме того, меняется режим работы ATmega32: между опросами клавиатуры (следующими 10 раз в секунду) процессор переводится в режим idle. Это позволяет снизить потребляемый схемой ток с 30-50 мА до 10-20 мА. Часть параметров (в том числе две закладки) модуль может сохранять в энергонезависимой памяти. Тонгенератор (sine_mode.asm.inc)Опять же - остаточный принцип, поэтому никаких сложностей, просто ловкость рук. VS1001 имеет несколько режимов самотестирования, один из которых состоит в воспроизведении фиксированного тона. Модуль просто выводит менюшку с возможностью выбора уровня правого и левого канала (здесь балланс не используются, каждый канал регулируется в отдельности) и выбора частот из фиксированного ряда, который поддерживает VS1001. Выбранные частоты и уровни могут быть сохранены в энергонезависимой памяти. |