mirror of
https://gitlab.com/mobian1/eg25-manager.git
synced 2025-08-29 15:22:20 +02:00
Merge branch 'ofono' into 'master'
add ofono-iface See merge request mobian1/devices/eg25-manager!6
This commit is contained in:
12
src/at.c
12
src/at.c
@@ -76,12 +76,16 @@ static gboolean send_at_command(struct EG25Manager *manager)
|
|||||||
|
|
||||||
g_message("Sending command: %s", g_strstrip(command));
|
g_message("Sending command: %s", g_strstrip(command));
|
||||||
} else if (manager->modem_state < EG25_STATE_CONFIGURED) {
|
} else if (manager->modem_state < EG25_STATE_CONFIGURED) {
|
||||||
MMModemState modem_state = mm_modem_get_state(manager->mm_modem);
|
if (manager->modem_iface == MODEM_IFACE_MODEMMANAGER) {
|
||||||
|
MMModemState modem_state = mm_modem_get_state(manager->mm_modem);
|
||||||
|
|
||||||
if (manager->mm_modem && modem_state >= MM_MODEM_STATE_REGISTERED)
|
if (manager->mm_modem && modem_state >= MM_MODEM_STATE_REGISTERED)
|
||||||
modem_update_state(manager, modem_state);
|
modem_update_state(manager, modem_state);
|
||||||
else
|
else
|
||||||
|
manager->modem_state = EG25_STATE_CONFIGURED;
|
||||||
|
} else {
|
||||||
manager->modem_state = EG25_STATE_CONFIGURED;
|
manager->modem_state = EG25_STATE_CONFIGURED;
|
||||||
|
}
|
||||||
} else if (manager->modem_state == EG25_STATE_SUSPENDING) {
|
} else if (manager->modem_state == EG25_STATE_SUSPENDING) {
|
||||||
modem_suspend_post(manager);
|
modem_suspend_post(manager);
|
||||||
} else if (manager->modem_state == EG25_STATE_RESETTING) {
|
} else if (manager->modem_state == EG25_STATE_RESETTING) {
|
||||||
|
11
src/libgdbofono/dbus-introspect.sh
Executable file
11
src/libgdbofono/dbus-introspect.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DEST="$1"
|
||||||
|
OBJ_PATH="$2"
|
||||||
|
METHOD="$3"
|
||||||
|
shift 3
|
||||||
|
|
||||||
|
dbus-send "$@" --print-reply --dest="$DEST" "$OBJ_PATH" "$METHOD" | \
|
||||||
|
grep -v '^method return' | \
|
||||||
|
sed -e 's/^[[:space:]]\+string "</</' \
|
||||||
|
-e 's_</node>"_</node>_'
|
13
src/libgdbofono/manager.xml
Normal file
13
src/libgdbofono/manager.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node>
|
||||||
|
|
||||||
|
<interface name="org.ofono.Manager"><method name="GetModems"><arg name="modems" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><signal name="ModemAdded"><arg name="path" type="o"/>
|
||||||
|
<arg name="properties" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="ModemRemoved"><arg name="path" type="o"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
</node>
|
50
src/libgdbofono/meson.build
Normal file
50
src/libgdbofono/meson.build
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2018 Purism SPC
|
||||||
|
#
|
||||||
|
# This file is part of Calls.
|
||||||
|
#
|
||||||
|
# Calls is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Calls is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Calls. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# Author: Bob Ham <bob.ham@puri.sm>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
gnome = import('gnome')
|
||||||
|
dbus_interfaces = ['manager', 'modem']
|
||||||
|
|
||||||
|
gdbofono_src = []
|
||||||
|
gdbofono_headers = []
|
||||||
|
foreach iface: dbus_interfaces
|
||||||
|
src = gnome.gdbus_codegen(
|
||||||
|
'gdbo-' + iface,
|
||||||
|
iface + '.xml',
|
||||||
|
interface_prefix: 'org.ofono.',
|
||||||
|
namespace: 'GDBO'
|
||||||
|
)
|
||||||
|
gdbofono_src += src
|
||||||
|
gdbofono_headers += src[1]
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
gdbofono_deps = [
|
||||||
|
dependency('gio-2.0'),
|
||||||
|
dependency('gio-unix-2.0'),
|
||||||
|
]
|
||||||
|
|
||||||
|
gdbofono_lib = static_library(
|
||||||
|
'gdbofono',
|
||||||
|
gdbofono_src,
|
||||||
|
dependencies: gdbofono_deps
|
||||||
|
)
|
249
src/libgdbofono/modem-full.xml
Normal file
249
src/libgdbofono/modem-full.xml
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node>
|
||||||
|
|
||||||
|
<interface name="org.ofono.Modem"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.SimManager"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><method name="ChangePin"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="oldpin" type="s" direction="in"/>
|
||||||
|
<arg name="newpin" type="s" direction="in"/>
|
||||||
|
</method><method name="EnterPin"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="pin" type="s" direction="in"/>
|
||||||
|
</method><method name="ResetPin"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="puk" type="s" direction="in"/>
|
||||||
|
<arg name="newpin" type="s" direction="in"/>
|
||||||
|
</method><method name="LockPin"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="pin" type="s" direction="in"/>
|
||||||
|
</method><method name="UnlockPin"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="pin" type="s" direction="in"/>
|
||||||
|
</method><method name="GetIcon"><arg name="id" type="y" direction="in"/>
|
||||||
|
<arg name="icon" type="ay" direction="out"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.VoiceCallManager"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="Dial"><arg name="number" type="s" direction="in"/>
|
||||||
|
<arg name="hide_callerid" type="s" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method><method name="DialLast"></method><method name="DialMemory"><arg name="memory_location" type="u" direction="in"/>
|
||||||
|
</method><method name="Transfer"></method><method name="SwapCalls"></method><method name="ReleaseAndAnswer"></method><method name="ReleaseAndSwap"></method><method name="HoldAndAnswer"></method><method name="HangupAll"></method><method name="PrivateChat"><arg name="call" type="o" direction="in"/>
|
||||||
|
<arg name="calls" type="ao" direction="out"/>
|
||||||
|
</method><method name="CreateMultiparty"><arg name="calls" type="ao" direction="out"/>
|
||||||
|
</method><method name="HangupMultiparty"></method><method name="SendTones"><arg name="SendTones" type="s" direction="in"/>
|
||||||
|
</method><method name="GetCalls"><arg name="calls_with_properties" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><signal name="Forwarded"><arg name="type" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="BarringActive"><arg name="type" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="CallAdded"><arg name="path" type="o"/>
|
||||||
|
<arg name="properties" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="CallRemoved"><arg name="path" type="o"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.AllowedAccessPoints"><method name="GetAllowedAccessPoints"><arg name="apnlist" type="as" direction="out"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.SimAuthentication"><method name="GetApplications"><arg name="applications" type="a{oa{sv}}" direction="out"/>
|
||||||
|
</method><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.SimToolkit"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SelectItem"><arg name="item" type="y" direction="in"/>
|
||||||
|
<arg name="agent" type="o" direction="in"/>
|
||||||
|
</method><method name="RegisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><method name="UnregisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CallForwarding"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><method name="DisableAll"><arg name="type" type="s" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.RadioSettings"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.TextTelephony"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.Phonebook"><method name="Import"><arg name="entries" type="s" direction="out"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.MessageManager"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><method name="SendMessage"><arg name="to" type="s" direction="in"/>
|
||||||
|
<arg name="text" type="s" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method><method name="GetMessages"><arg name="messages" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="IncomingMessage"><arg name="message" type="s"/>
|
||||||
|
<arg name="info" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="ImmediateMessage"><arg name="message" type="s"/>
|
||||||
|
<arg name="info" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="MessageAdded"><arg name="path" type="o"/>
|
||||||
|
<arg name="properties" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="MessageRemoved"><arg name="path" type="o"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.PushNotification"><method name="RegisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><method name="UnregisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.SmartMessaging"><method name="RegisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><method name="UnregisterAgent"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><method name="SendBusinessCard"><arg name="to" type="s" direction="in"/>
|
||||||
|
<arg name="card" type="ay" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method><method name="SendAppointment"><arg name="to" type="s" direction="in"/>
|
||||||
|
<arg name="appointment" type="ay" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.MessageWaiting"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CallSettings"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="property" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CallBarring"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
<arg name="pin2" type="s" direction="in"/>
|
||||||
|
</method><method name="DisableAll"><arg name="password" type="s" direction="in"/>
|
||||||
|
</method><method name="DisableAllIncoming"><arg name="password" type="s" direction="in"/>
|
||||||
|
</method><method name="DisableAllOutgoing"><arg name="password" type="s" direction="in"/>
|
||||||
|
</method><method name="ChangePassword"><arg name="old" type="s" direction="in"/>
|
||||||
|
<arg name="new" type="s" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.SupplementaryServices"><method name="Initiate"><arg name="command" type="s" direction="in"/>
|
||||||
|
<arg name="result_name" type="s" direction="out"/>
|
||||||
|
<arg name="value" type="v" direction="out"/>
|
||||||
|
</method><method name="Respond"><arg name="reply" type="s" direction="in"/>
|
||||||
|
<arg name="result" type="s" direction="out"/>
|
||||||
|
</method><method name="Cancel"></method><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><signal name="NotificationReceived"><arg name="message" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="RequestReceived"><arg name="message" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CallMeter"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
<arg name="password" type="s" direction="in"/>
|
||||||
|
</method><method name="Reset"><arg name="passoword" type="s" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="property" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="NearMaximumWarning"></signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CallVolume"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="property" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.NetworkRegistration"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="Register"></method><method name="GetOperators"><arg name="operators_with_properties" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><method name="Scan"><arg name="operators_with_properties" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.CellBroadcast"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="property" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="IncomingBroadcast"><arg name="message" type="s"/>
|
||||||
|
<arg name="channel" type="q"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="EmergencyBroadcast"><arg name="message" type="s"/>
|
||||||
|
<arg name="dict" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.AssistedSatelliteNavigation"><method name="SendPositioningElement"><arg name="xml_elements" type="(null)" direction="in"/>
|
||||||
|
</method><method name="RegisterPositioningRequestAgent"><arg name="agent" type="o" direction="in"/>
|
||||||
|
</method><method name="UnregisterPositioningRequestAgent"><arg name="agent" type="o" direction="in"/>
|
||||||
|
</method></interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.ConnectionManager"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><method name="AddContext"><arg name="type" type="s" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method><method name="RemoveContext"><arg name="path" type="o" direction="in"/>
|
||||||
|
</method><method name="DeactivateAll"></method><method name="GetContexts"><arg name="contexts_with_properties" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><method name="ResetContexts"></method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="ContextAdded"><arg name="path" type="o"/>
|
||||||
|
<arg name="properties" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="ContextRemoved"><arg name="path" type="o"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
</node>
|
37
src/libgdbofono/modem.xml
Normal file
37
src/libgdbofono/modem.xml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
|
||||||
|
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
|
||||||
|
<node>
|
||||||
|
|
||||||
|
<interface name="org.ofono.Modem"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="SetProperty"><arg name="property" type="s" direction="in"/>
|
||||||
|
<arg name="value" type="v" direction="in"/>
|
||||||
|
</method><signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="org.ofono.VoiceCallManager"><method name="GetProperties"><arg name="properties" type="a{sv}" direction="out"/>
|
||||||
|
</method><method name="Dial"><arg name="number" type="s" direction="in"/>
|
||||||
|
<arg name="hide_callerid" type="s" direction="in"/>
|
||||||
|
<arg name="path" type="o" direction="out"/>
|
||||||
|
</method><method name="DialLast"></method><method name="DialMemory"><arg name="memory_location" type="u" direction="in"/>
|
||||||
|
</method><method name="Transfer"></method><method name="SwapCalls"></method><method name="ReleaseAndAnswer"></method><method name="ReleaseAndSwap"></method><method name="HoldAndAnswer"></method><method name="HangupAll"></method><method name="PrivateChat"><arg name="call" type="o" direction="in"/>
|
||||||
|
<arg name="calls" type="ao" direction="out"/>
|
||||||
|
</method><method name="CreateMultiparty"><arg name="calls" type="ao" direction="out"/>
|
||||||
|
</method><method name="HangupMultiparty"></method><method name="SendTones"><arg name="SendTones" type="s" direction="in"/>
|
||||||
|
</method><method name="GetCalls"><arg name="calls_with_properties" type="a(oa{sv})" direction="out"/>
|
||||||
|
</method><signal name="Forwarded"><arg name="type" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="BarringActive"><arg name="type" type="s"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="PropertyChanged"><arg name="name" type="s"/>
|
||||||
|
<arg name="value" type="v"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="CallAdded"><arg name="path" type="o"/>
|
||||||
|
<arg name="properties" type="a{sv}"/>
|
||||||
|
</signal>
|
||||||
|
<signal name="CallRemoved"><arg name="path" type="o"/>
|
||||||
|
</signal>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
</node>
|
@@ -8,6 +8,7 @@
|
|||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "mm-iface.h"
|
#include "mm-iface.h"
|
||||||
|
#include "ofono-iface.h"
|
||||||
#include "suspend.h"
|
#include "suspend.h"
|
||||||
#include "udev.h"
|
#include "udev.h"
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ static gboolean quit_app(struct EG25Manager *manager)
|
|||||||
|
|
||||||
at_destroy(manager);
|
at_destroy(manager);
|
||||||
mm_iface_destroy(manager);
|
mm_iface_destroy(manager);
|
||||||
|
ofono_iface_destroy(manager);
|
||||||
suspend_destroy(manager);
|
suspend_destroy(manager);
|
||||||
udev_destroy(manager);
|
udev_destroy(manager);
|
||||||
|
|
||||||
@@ -131,6 +133,14 @@ void modem_reset(struct EG25Manager *manager)
|
|||||||
if (manager->reset_timer)
|
if (manager->reset_timer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are managing the modem through lets say ofono, we should not
|
||||||
|
* reset the modem based on the availability of USB ID
|
||||||
|
* TODO: Improve ofono plugin and add support for fetching USB ID
|
||||||
|
*/
|
||||||
|
if (manager->modem_iface != MODEM_IFACE_MODEMMANAGER)
|
||||||
|
return;
|
||||||
|
|
||||||
if (manager->modem_recovery_timer) {
|
if (manager->modem_recovery_timer) {
|
||||||
g_source_remove(manager->modem_recovery_timer);
|
g_source_remove(manager->modem_recovery_timer);
|
||||||
manager->modem_recovery_timer = 0;
|
manager->modem_recovery_timer = 0;
|
||||||
@@ -305,6 +315,7 @@ int main(int argc, char *argv[])
|
|||||||
at_init(&manager, toml_table_in(toml_config, "at"));
|
at_init(&manager, toml_table_in(toml_config, "at"));
|
||||||
gpio_init(&manager, toml_table_in(toml_config, "gpio"));
|
gpio_init(&manager, toml_table_in(toml_config, "gpio"));
|
||||||
mm_iface_init(&manager, toml_table_in(toml_config, "mm-iface"));
|
mm_iface_init(&manager, toml_table_in(toml_config, "mm-iface"));
|
||||||
|
ofono_iface_init(&manager);
|
||||||
suspend_init(&manager, toml_table_in(toml_config, "suspend"));
|
suspend_init(&manager, toml_table_in(toml_config, "suspend"));
|
||||||
udev_init(&manager, toml_table_in(toml_config, "udev"));
|
udev_init(&manager, toml_table_in(toml_config, "udev"));
|
||||||
|
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include <gpiod.h>
|
#include <gpiod.h>
|
||||||
#include <gudev/gudev.h>
|
#include <gudev/gudev.h>
|
||||||
#include <libmm-glib.h>
|
#include <libmm-glib.h>
|
||||||
|
#include <libgdbofono/gdbo-manager.h>
|
||||||
|
|
||||||
#include "toml.h"
|
#include "toml.h"
|
||||||
|
|
||||||
@@ -27,6 +28,12 @@ enum EG25State {
|
|||||||
EG25_STATE_FINISHING
|
EG25_STATE_FINISHING
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ModemIface {
|
||||||
|
MODEM_IFACE_NONE = 0,
|
||||||
|
MODEM_IFACE_MODEMMANAGER,
|
||||||
|
MODEM_IFACE_OFONO
|
||||||
|
};
|
||||||
|
|
||||||
struct EG25Manager {
|
struct EG25Manager {
|
||||||
GMainLoop *loop;
|
GMainLoop *loop;
|
||||||
guint reset_timer;
|
guint reset_timer;
|
||||||
@@ -41,10 +48,15 @@ struct EG25Manager {
|
|||||||
enum EG25State modem_state;
|
enum EG25State modem_state;
|
||||||
gchar *modem_usb_id;
|
gchar *modem_usb_id;
|
||||||
|
|
||||||
|
enum ModemIface modem_iface;
|
||||||
guint mm_watch;
|
guint mm_watch;
|
||||||
MMManager *mm_manager;
|
MMManager *mm_manager;
|
||||||
MMModem *mm_modem;
|
MMModem *mm_modem;
|
||||||
|
|
||||||
|
guint ofono_watch;
|
||||||
|
GDBOManager *ofono_manager;
|
||||||
|
GDBusConnection *ofono_connection;
|
||||||
|
|
||||||
GDBusProxy *suspend_proxy;
|
GDBusProxy *suspend_proxy;
|
||||||
int suspend_delay_fd;
|
int suspend_delay_fd;
|
||||||
int suspend_block_fd;
|
int suspend_block_fd;
|
||||||
|
@@ -4,6 +4,9 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
|
subdir('libgdbofono')
|
||||||
|
|
||||||
executable (
|
executable (
|
||||||
'eg25manager',
|
'eg25manager',
|
||||||
[
|
[
|
||||||
@@ -11,10 +14,12 @@ executable (
|
|||||||
'gpio.c', 'gpio.h',
|
'gpio.c', 'gpio.h',
|
||||||
'manager.c', 'manager.h',
|
'manager.c', 'manager.h',
|
||||||
'mm-iface.c', 'mm-iface.h',
|
'mm-iface.c', 'mm-iface.h',
|
||||||
|
'ofono-iface.c', 'ofono-iface.h',
|
||||||
'suspend.c', 'suspend.h',
|
'suspend.c', 'suspend.h',
|
||||||
'toml.c', 'toml.h',
|
'toml.c', 'toml.h',
|
||||||
'udev.c', 'udev.h',
|
'udev.c', 'udev.h',
|
||||||
],
|
],
|
||||||
dependencies : mgr_deps,
|
dependencies : mgr_deps,
|
||||||
|
link_with: gdbofono_lib,
|
||||||
install : true
|
install : true
|
||||||
)
|
)
|
||||||
|
@@ -163,6 +163,12 @@ static void mm_appeared_cb(GDBusConnection *connection,
|
|||||||
{
|
{
|
||||||
g_message("ModemManager appeared on D-Bus");
|
g_message("ModemManager appeared on D-Bus");
|
||||||
|
|
||||||
|
if (manager->modem_iface != MODEM_IFACE_NONE) {
|
||||||
|
g_critical("Modem interface already found! Make sure to only run either of ModemManager or oFono.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
manager->modem_iface = MODEM_IFACE_MODEMMANAGER;
|
||||||
|
|
||||||
mm_manager_new(connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
|
mm_manager_new(connection, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
|
||||||
NULL, (GAsyncReadyCallback)mm_manager_new_cb, manager);
|
NULL, (GAsyncReadyCallback)mm_manager_new_cb, manager);
|
||||||
}
|
}
|
||||||
|
150
src/ofono-iface.c
Normal file
150
src/ofono-iface.c
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Oliver Smith <ollieparanoid@postmarketos.org>
|
||||||
|
* Copyright (C) 2021 Bhushan Shah <bshah@kde.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ofono-iface.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <libgdbofono/gdbo-manager.h>
|
||||||
|
#include <libgdbofono/gdbo-modem.h>
|
||||||
|
|
||||||
|
#define OFONO_SERVICE "org.ofono"
|
||||||
|
|
||||||
|
static void modem_added_cb(GDBOManager *manager_proxy,
|
||||||
|
const gchar *path,
|
||||||
|
GVariant *properties,
|
||||||
|
struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
GVariant *modem_path;
|
||||||
|
g_debug("Adding ofono modem '%s'", path);
|
||||||
|
|
||||||
|
if (manager->modem_state == EG25_STATE_RESUMING) {
|
||||||
|
if (manager->modem_recovery_timer) {
|
||||||
|
g_source_remove(manager->modem_recovery_timer);
|
||||||
|
manager->modem_recovery_timer = 0;
|
||||||
|
}
|
||||||
|
modem_resume_post(manager);
|
||||||
|
manager->modem_state = EG25_STATE_CONFIGURED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (manager->modem_state < EG25_STATE_ACQUIRED)
|
||||||
|
manager->modem_state = EG25_STATE_ACQUIRED;
|
||||||
|
|
||||||
|
if (manager->modem_state < EG25_STATE_CONFIGURED)
|
||||||
|
modem_configure(manager);
|
||||||
|
|
||||||
|
modem_path = g_variant_lookup_value(properties, "SystemPath", G_VARIANT_TYPE_STRING);
|
||||||
|
if (manager->modem_usb_id)
|
||||||
|
g_free(manager->modem_usb_id);
|
||||||
|
manager->modem_usb_id = g_strdup(strrchr(g_variant_dup_string(modem_path, NULL), '/') + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void modem_removed_cb(GDBOManager *manager_proxy,
|
||||||
|
const gchar *path,
|
||||||
|
struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void get_modems_cb(GDBOManager *manager_proxy,
|
||||||
|
GAsyncResult *res,
|
||||||
|
struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
gboolean ok;
|
||||||
|
GVariant *modems;
|
||||||
|
GVariantIter *modems_iter = NULL;
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
|
const gchar *path;
|
||||||
|
GVariant *properties;
|
||||||
|
|
||||||
|
ok = gdbo_manager_call_get_modems_finish(manager_proxy, &modems,
|
||||||
|
res, &error);
|
||||||
|
if (!ok) {
|
||||||
|
g_warning("Error getting modems from ofono manager: %s", error->message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_variant_get(modems, "a(oa{sv})", &modems_iter);
|
||||||
|
while(g_variant_iter_loop(modems_iter, "(&o@a{sv})", &path, &properties)) {
|
||||||
|
g_debug("Got modem object path '%s'", path);
|
||||||
|
modem_added_cb(manager_proxy, path, properties, manager);
|
||||||
|
}
|
||||||
|
g_variant_iter_free(modems_iter);
|
||||||
|
g_variant_unref(modems);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ofono_appeared_cb(GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
const gchar *name_owner,
|
||||||
|
struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_message("oFono appeared on D-Bus");
|
||||||
|
|
||||||
|
if (manager->modem_iface != MODEM_IFACE_NONE) {
|
||||||
|
g_critical("Modem interface already found! Make sure to only run either of ModemManager or oFono.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* now connect to oFono! */
|
||||||
|
manager->ofono_connection = connection;
|
||||||
|
manager->ofono_manager = gdbo_manager_proxy_new_sync(connection,
|
||||||
|
G_DBUS_PROXY_FLAGS_NONE,
|
||||||
|
OFONO_SERVICE,
|
||||||
|
"/",
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
if (!manager->ofono_manager) {
|
||||||
|
g_critical("Error creating ofono object manager proxy: %s", error->message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
manager->modem_iface = MODEM_IFACE_OFONO;
|
||||||
|
|
||||||
|
g_signal_connect(manager->ofono_manager, "modem-added",
|
||||||
|
G_CALLBACK(modem_added_cb), manager);
|
||||||
|
g_signal_connect(manager->ofono_manager, "modem-removed",
|
||||||
|
G_CALLBACK(modem_removed_cb), manager);
|
||||||
|
|
||||||
|
gdbo_manager_call_get_modems(manager->ofono_manager,
|
||||||
|
NULL,
|
||||||
|
(GAsyncReadyCallback) get_modems_cb,
|
||||||
|
manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ofono_vanished_cb(GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
g_message("oFono vanished from D-Bus");
|
||||||
|
|
||||||
|
if (manager->modem_iface == MODEM_IFACE_OFONO) {
|
||||||
|
manager->modem_iface = MODEM_IFACE_NONE;
|
||||||
|
ofono_iface_destroy(manager);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ofono_iface_init(struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
manager->ofono_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM, OFONO_SERVICE,
|
||||||
|
G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
|
||||||
|
(GBusNameAppearedCallback)ofono_appeared_cb,
|
||||||
|
(GBusNameVanishedCallback)ofono_vanished_cb,
|
||||||
|
manager, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ofono_iface_destroy(struct EG25Manager *manager)
|
||||||
|
{
|
||||||
|
if (manager->modem_usb_id) {
|
||||||
|
g_free(manager->modem_usb_id);
|
||||||
|
manager->modem_usb_id = NULL;
|
||||||
|
}
|
||||||
|
if (manager->ofono_watch != 0) {
|
||||||
|
g_bus_unwatch_name(manager->ofono_watch);
|
||||||
|
manager->ofono_watch = 0;
|
||||||
|
}
|
||||||
|
}
|
12
src/ofono-iface.h
Normal file
12
src/ofono-iface.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 Oliver Smith <ollieparanoid@postmarketos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "manager.h"
|
||||||
|
|
||||||
|
void ofono_iface_init(struct EG25Manager *data);
|
||||||
|
void ofono_iface_destroy(struct EG25Manager *data);
|
@@ -170,11 +170,14 @@ static void signal_cb(GDBusProxy *proxy,
|
|||||||
g_message("system is resuming");
|
g_message("system is resuming");
|
||||||
take_inhibitor(manager, FALSE);
|
take_inhibitor(manager, FALSE);
|
||||||
modem_resume_pre(manager);
|
modem_resume_pre(manager);
|
||||||
if (manager->mm_modem) {
|
if (manager->mm_modem || manager->modem_iface == MODEM_IFACE_OFONO) {
|
||||||
/*
|
/*
|
||||||
* On some systems ModemManager doesn't handle suspend/resume, so
|
* On some systems ModemManager doesn't handle suspend/resume, so
|
||||||
* we still have a valid/managed modem when resuming. In this case,
|
* we still have a valid/managed modem when resuming. In this case,
|
||||||
* do the whole resume sequence immediately.
|
* do the whole resume sequence immediately.
|
||||||
|
*
|
||||||
|
* If modem is managed by ofono, we also do resume sequence immediately
|
||||||
|
* as ofono handles resuming from sleep itself.
|
||||||
*/
|
*/
|
||||||
manager->modem_state = EG25_STATE_CONFIGURED;
|
manager->modem_state = EG25_STATE_CONFIGURED;
|
||||||
modem_resume_post(manager);
|
modem_resume_post(manager);
|
||||||
|
Reference in New Issue
Block a user