oFono: абстракция сотового модема Mer

Абстракция сотового модема является частью общей архитектуры сотовой телефонии. Она включает:

  • oFono — демон, который обеспечивает адаптацию модема с модем-независимым интерфейсом D-Bus;
  • libqofono — библиотеку для доступа к демону oFono.

Слой абстракции сотового модема скрывает модем-специфичные функции и зависимости от других слоев ПО.

Он образует центральный элемент в стеке телефонии, и в платформе Mer эта абстракция состоит из двух модулей: Libqofono и oFono.

В современной мобильной программной платформе существуют и другие технологии, которые используются совместно с сотовой телефонией. Эти технологии могут использовать телефонию, чтобы расширить свои функциональные возможности, или они используются для расширения функциональных возможностей телефонии. Некоторые расширения:

и следующие применения:

oFono

oFono — демон, который фактически обеспечивает адаптацию модема с модем-независимым интерфейсом D-Bus для разработки приложений телефонии. Целью программного проекта oFono является предоставление 3GPP GSM/UMTS-совместимого стандартизированного фреймворка. Следует отметить, что oFono явно не поддерживает все функции GSM, прежде всего запись телефонной книги на SIM. Совместимость включает в себя такие элементы как декодирование и дефрагментация SMS-сообщения. Проект Mer имеет свое собственное ответвление (форк) oFono, которое отличается от родительского (upstream) проекта наличием дополнительных функций. На платформе Mer добавлена поддержка такой функции как идентификация сети и часового пояса — NITZ (Network Identity and Time Zone) и дополнительная обработка SMS для поддержки MMS, а также платформо-специфичные исправления.

oFono состоит из следующих основных компонентов:

  • основной демон;
  • атомы (atoms);
  • драйверы;
  • плагины.

Ядро oFono предоставляет собой внутренний интерфейс, в котором должны быть реализованы плагины и драйверы, обеспечивая общий API D-BUS. Оно также загружает плагины и драйверы. Ядро управляет независимо каждым устройством, таким образом обеспечивая поддержку нескольких модемов и SIM-карт одновременно. Помимо этого базового функционала, оно также обеспечивает общие функции утилит для чтения и записи SIM-карты и интерпретации содержания файла низкоуровневого элемента SIM.

Также имеются функции утилит для декодирования, кодирования и фрагментации бинарных единиц данных SMS-протокола, а также функции для декодирования, обнаружения дубликатов, разбивки текста широковещательных сообщений сети на страницы и преобразования набора символов. Ядро также обеспечивает функции для обнаружения атомов oFono и взаимодействия между ними.

Атомы oFono являются важной частью ядра. Атом oFono — это концепция, поскольку нет отдельных библиотек, папок или файлов для атомов. Существует атом для каждой основной функции телефонии/модема, такой как SMS, CBS (Cell Broadcast Service, система широковещания сообщений сети) и SIM, но атомы также могут представлять другие объекты. Такие атомы обеспечивают интерфейс D-Bus для oFono. Каждый драйвер oFono соединен с атомом, а атом присоединен к модему. Атомы обнаруживают друг друга и связываются между собой, используя информацию, предоставленную другими атомами для своих собственных потребностей. Например, атом GPRS запрашивает атом Network Registration для уведомления об изменениях состояния регистрации в сети.

Драйверы oFono позволяют интегрировать многие аппаратные технологии. Драйверы обрабатывают адаптацию определенных протоколов. Они транслируют обычные запросы oFono, такие как запрос набора телефонного номера, в запрос, специфичный протоколу, и перенаправляют запрос соответствующему устройству. Например, в модеме, основанном на AT-командах, запрос голосового вызова на номер 1234567 будет переведен в команду «ATD1234567;». Благодаря этому, oFono может поддерживать различные типы устройств на основе множества протоколов связи. В upstream-версии oFono с помощью набора AT-команд поддерживаются различные модемы, и oFono включает драйвер на основе протокола ISI и драйвер модема Qualcomm QMI. Плагины oFono позволяют разработчикам адаптировать oFono под свои цели. Основная цель плагинов состоит в том, чтобы предоставить возможность распознать доступный модем или модемы и обеспечить их использование, загрузив соответствующий протокол связи, атомы и драйверы. Помимо этого, плагин может быть создан для обеспечения поддержки опциональных интерфейсов, таких как поддержка времени по сети, или просто для расширения имеющегося функционала, такого как инициализация контекста GPRS.

Также структуру oFono можно разделить на пять областей: ядро, плагины, общий модем и протокол-независимый интерфейс D-Bus, модем- или вендор-специфичные драйверы и протокол-специфичный уровень коммуникаций.

При таком разделении ядро считается таким же, как ранее объясненное, но концепция атомов рассматривается как часть него. Интерфейс D-Bus реализуется в ядре или как плагин, но рассматривается как отдельная сущность. Драйверы и плагины объясняются так же, как ранее, но самое большое различие заключается в рассмотрении коммуникационного слоя и драйверов как отдельных сущностей.

Коммуникационный слой обеспечивает планирование сообщений и механизм очереди, а также предоставляет протокол-специфичный канал передачи данных. Смысл данного разделения заключается в том, что может быть несколько модемов со своим собственным набором команд, нуждающихся в своих собственных реализациях драйверов, но которые могут использовать одинаковую реализацию коммуникационного слоя.

Проект Mer изменил и добавил функции к своему ответвлению (форку) oFono. Они включают улучшенное обеспечение контекста GPRS, сигнализацию изменения списка операторов, интерфейс для отправки массивов необработанных байтов к модему, сигнализацию получения отчетов об отправке SMS-сообщений и поддержку перенаправления push-сообщений WAP к подсистеме MMS, а также поддержку мелодии вместо гудка (RBT, Ringback Tone) и сетевого времени (NITZ, Network Identity and Time Zone). Однако основное дополнение — это поддержка RIL. Это означает, что oFono может использовать RIL для связи с модемом. Поддержка RIL oFono Mer первоначально была основана на реализации от Canonical, но с тех пор отклонилась от той версии. Поддержка RIL состоит из драйверов, обеспечивающих поддержку интерфейса RIL, коммуникационного слоя, реализующего связь с демоном RIL через сокеты и набор плагинов для распознавания наличия демона RIL, загрузки связанных драйверов и запуска взаимодействия, используя коммуникационный слой.

libqofono

Пакет libqofono является библиотекой для доступа к демону oFono и плагином, позволяющим QML-приложениям получать доступ к oFono с помощью модуля Qt Quick. Libqofono является, как правило, только оберткой Qt для oFono.

Несмотря на то, что приложения UI QML могут использовать Libqofono, чтобы связаться с oFono, это может быть проблематично в некоторых случаях. Первая причина состоит в том, что обычно приложение UI QML закрыто, когда конечный пользователь выходит из приложения, следовательно, приложение прекращает получать индикации и ответы на запросы, которые это выполняло. Вторая причина — поведение интерфейса oFono. Например, если приложение выполняет запрос, чтобы начать сетевое сканирование, и перезапускается, в то время как сканирование все еще происходит, в некоторых случаях невозможно понять, что сканирование все еще происходит. При вызове методов Scan или Register интерфейса D-Bus NetworkRegistration oFono или метода Register интерфейса NetworkOperator, в то время как метод Scan все еще выполняется, возвратится ошибка InProgress. Таким образом, несмотря на то, что Scan все еще выполняется, его нельзя отличить от вызова метода Register интерфейса NetworkRegistration.

Время сети сотовой связи

Время сети сотовой связи является частью общей архитектуры сотовой телефонии.

timed (определение времени) является демоном, позволяющим управлять системным временем, часовым поясом, временными событиями устройства и связывать используемые настройки, например, в приложении часов. timed обеспечивает интерфейс D-Bus, который может использоваться непосредственно или через Qt-биндинги C++.

Подробная информация представлена в статье «timed».

Тетеринг по USB

Тетеринг по USB является частью общей архитектуры сотовой телефонии.

usb_moded является демоном, который активирует профиль USB на основе состояния соединения USB-кабеля, которое он отслеживает.

usb_moded использует систему D-Bus для всех передач данных в масштабе всей системы. В том числе функциональная возможность usb_moded может установить тетеринг по USB, то есть можно совместно использовать информационное соединение устройства с другим устройством. Например, ноутбук использует мобильный телефон для подключения к сети Интернет. Когда сотовая сеть используется для получения доступа к сети Интернет, применяется oFono, чтобы проверить, находится ли устройство в роуминге и, если так, проверить, что роуминг разрешен (роуминг означает использование сотового соединения вне домашней сети абонента).

Использование мобильных данных для обновления ПО «по воздуху» (SSU)

Использование SSU является частью общей архитектуры сотовой телефонии. Подробная информация об использовании мобильных данных для обновления ПО «по воздуху» (SSU) представлена в статье.

Использование мобильных данных по Bluetooth

Использование мобильных данных по Bluetooth является частью общей архитектуры сотовой телефонии.

Беспроводные гарнитуры Bluetooth могут использоваться для получения и передачи аудио во время речевого вызова и для управления вызовами. Управление вызовами может состоять из получения, отклонения или завершения вызова, а также выполнения вызова последнего номера вызванного абонента. Также возможно выполнение голосового вызова в форме речевого набора номера, что предполагает использование распознавания речи для создания вызова.

Bluez использует oFono в качестве сотового поставщика услуг технической поддержки телефонии. Например, когда Bluetooth-устройство используется для инициирования речевого вызова, Bluez отправляет сообщение в интерфейс oFono, чтобы выполнить запрос набора номера, и во время вызова он продолжает получать состояния вызова. Если Bluetooth-устройство соединено, пока входящий вызов принят, Bluez получит соответствующую отметку, и, если Bluetooth-устройство используется для ответа на звонок, Bluez сообщит, чтобы oFono ответил.