Придумал один вариант. Делаем драйвер блочного устройства и эмулируем там файловую систему в которой файл mp3 с названием радиомтанции максимального для fat32 размера 4Гб, указываем его в качестве параметров модулю "File-backed Storage Gadget". В таблице FAT этот файл представляем как идущие друг за другом секторы. Когда внешнее устройство читает секторы где хранится служебная информация - подставляем заранее подготовленный буфер со служебной информацией фс, когда запрашиваются секторы из области данных файла - отдаем данные из буфера в который пишет из юзерспейс например wget или mplayer в режиме дампа потока. При качестве mp3 128 kbps виртуальный файл mp3 будет содержать данных ~9 часов непрерывного воспроизведения, при этом внутренний буфер записи/чтения может быть например пару сотен килобайт и представлять некое "окно" которе перемещается от начала файла к концу.
Jury093, жесткий диск с музыкой - я замучаюсь качать, набивать этот жесткий диск. Я уже это проходил и удалил все свои mp3. Нужно зарядить плеер перед поездкой, скачал что захотел и тут же засунул, без хранения.
А вот в машине, дома, в офисе перешел полностью на Интернет-радио. Нашел интересные для себя. Плюс подкасты. Если надо слушать что-то конкретное, то Pandora, Last.fm, Yandex.Музыка.
Не зря же сейчас много чего "двигается" в облака. Для меня теперь музыка - не файлы, коллекции, а сервис.
Я сбросил с себя груз хранения mp3, организации музыки и т.п. Освободил кучу времени и нервов.
В Самаре 3G работает прекрасно. Выбранный низкий битрейт с настроенным буфером - затыков практически нет. Стоит 190 рублей в месяц.
Напишите пожалуйста в личку адрес почтовый - я вышлю Webradio, у меня их два, я купил 2 по цене одного. Вы сами сможете посмотреть, разберемся какие железки там установлены. Конечно, в прошивку и во все, то что потребует несопоставимых затрат - не полезем.
По поводу драйвера файловой системы для device mode - сможете написать ТЗ? Я его предлагаю разместить на free-lance (например) и найти разработчика, я финансирую - вместе проверяем, проект изначально сделаем opensource, выложим на github. Постараемся найти участников для развития.
Спасибо, мне это не нужно, какие там резисторы и конденсаторы не интересно :) на то он и SoC что там все самое главное внутри. Тут подойдет любой процессор для которого есть порт Linux и нужные аппаратные возможности.
мне проще самому драйвер написать, чем объяснять как это сделать. Пока вопрос только в том как балансировать запросы на запись и чтение. На блочных устройствах вызывающий процесс никогда не обращается напрямую к драйверу, все вызовы идут через планировщик I/O, поэтому заблокировать пишущий процесс чтобы он "притормозил" просто так не получится, нужно как-то планиовщиком управлять. Надо исходники драйверов посмотреть и погуглить как это вообще делается. Попробую что-нибуть соорудить если на выходных время будет, а то тут масленица придет, чучела надо жечь :)
Саш, может упростить задачу.. допустим взять один поток пишуший (с эфира оцифровка) в кольцо из буферов..
второй поток изображает файл, побуферно отдает и переключает буфера по мере опустошения.. этакая карусель..
кольцевой буфер и надо делать, только кольцо то не резиновое :) если ты будешь писать быстрее чем читать (а это так и будет если не сбалансировать) рано или поздно начнешь затирать то что еще не прочитано.
так и фик с ним.. допустим считывалка затупила или клиент нажал паузу/стоп - (мы же изобретаем фейковый mp3 файл).. можно остановить оцифровку, можно погасить 3G, можно дальше цифровать по кругу в буфера..
кнопка пауза отжата и тогда скармливается самый старый буфер в кольце :)
вот и говорю - мне проще самому сделать чем объяснить, если долго не считывают - тогда смело затираем или вообще прибиваем писателя в юзерспейс - нафига хранить неактуальные данные, у тебя кнопки пауза/стоп на радиоприемниках есть ? :) я имею ввиду когда идет нормальный процесс - в юзерспейсе писатель пишет, на стороне гаджета читатель читает
В Webradio при отсутствии связи оно подсовывает в mp3-поток озвучку своих действий, например, "Connecting", "Buffering", "Error" и т.п. Понятно, что это проигрывает магнитола и тем самым образуется интерфейс с пользователем, хотя бы односторонний.
Я на андроиде установил AutomateIt и настроил следующие задачи (банально):
1. Подключилось питание (значит включил зажигание) - выключить режим самолета
2. Выключилось питание - включить режим самолета
3. Загрузился телефон - стартуем плеер, выключаем режим самолета.
Плеер при пропадании связи висит в режиме ожидания соединения.
В итоге я даже не касаюсь андроид-телефона - оно у меня само работает, только станции переключаю или вдруг что заглючит - перезапускаю. И батарея не тратится когда машина на стоянке.