- Sep 18, 2018
-
-
Bob Ham authored
-
- Sep 17, 2018
-
-
Bob Ham authored
We don't want the audio TTY port probed so we set ID_MM_CANDIDATE to 0 just for that TTY. We also want it in the audio group instead of the dialout group.
-
- Sep 13, 2018
-
-
Bob Ham authored
This adds a new QMI-based Simtech class, used to add support for voice call audio to SIMCom modems, in particular the SIM7100.
-
- Aug 10, 2018
-
-
Aleksander Morgado authored
USB sticks only support voice if ^CVOICE returns 0. And to enable audio streaming on the "Application" port (whatever is returned by AT^DDSETEX=?) we need to send AT^DDSETEX=<port> after starting the call. After that the serial port will send and accept signed 16-bit 8000hz PCM audio, or whatever format is returned by ^CVOICE?. This patch is a rework of the original implementation by: Dan Williams <dcbw@redhat.com>
-
-
Aleksander Morgado authored
Modems that require specific commands to setup or cleanup the audio channel as soon as a call is ongoing can subclass these two new methods. The setup() method is considered part of the call start/accept process, and so if it fails, the whole operation will fail. The failures in the cleanup() method will be reported in the log, but otherwise ignored, as this operation may be executed without any user intervention (e.g. if the remote party hangs up).
-
Aleksander Morgado authored
-
-
- Jul 27, 2018
-
-
Aleksander Morgado authored
Among other things, we now support: * Dialing to Ringing Out transition. * Ringing Out to Active transition.
-
Aleksander Morgado authored
-
Aleksander Morgado authored
Allow creating a new incoming call object also when we receive +CLIP, so that we can have the remote caller number as soon as the object is created.
-
Aleksander Morgado authored
So that we setup in-call events as soon as we get the incoming call ringing in. This allows us to have plugin-specific implementations e.g. reporting call termination when the remote caller hangs up.
-
Aleksander Morgado authored
Calls created from property bundles are always outgoing, while calls created as input events from URCs during runtime are always incoming. This change makes it mandatory to provide at least direction of the call when the object is created, leaving the number as an optional property that may or may not be known in advance (e.g. it would be optional only for incoming calls).
-
Aleksander Morgado authored
The Voice interface logic must always use the create_call() object from its own interface to create call objects, as that is the method that plugins can subclass to provide plugin-specific call objects. This applies to both incoming and outgoing calls.
-
Aleksander Morgado authored
Instead of handling the URCs in the modem object and using the MMIfaceModem as a bridge to report the status read from the URC to a call obtained from the MMCallList... just handle the URCs in the call object itself.
-
Aleksander Morgado authored
These are not used for anything, so just simplify code.
-
Aleksander Morgado authored
-
Aleksander Morgado authored
Totally equivalent to the default one in the MMBaseCall object.
-
Aleksander Morgado authored
-
Aleksander Morgado authored
In order to detect state changes while we're in-call, we have to monitor the standard connection errors we're used to, but have them processed as URCs instead of as responses to ATD requests.
-
Aleksander Morgado authored
Try to automatically detect when the caller finishes the attempt to establish the call.
-
Aleksander Morgado authored
The most detailed call state transition flow for a new outgoing call would be: UNKNOWN -> DIALING -> RINGING -> ACTIVE But, if the modem doesn't support reporting intermediate states (e.g. DIALING or RINGING) then a successful start() should imply getting into ACTIVE state right away. For now, only the Huawei plugin implements the detailed transition support, so make them configurable via call object properties.
-
Aleksander Morgado authored
-
Aleksander Morgado authored
The mm_gdbus_call_set_() methods update the properties in the same way as via g_object_set(), no need to do it twice.
-
Aleksander Morgado authored
Don't do any call state update on the generic implementation of the commands, do it in the common interface logic exclusively. We were doing the state updates in both places.
-
Aleksander Morgado authored
-
Aleksander Morgado authored
Call information only lives in the ModemManager logic, there is no associated date stored within the device itself. Therefore, simplify everything by assuming there is nothing to remove. Looks like this logic was implemented because it was originally based on the SMS management logic, but for SMS we do have to remove them (the stored PDU parts) from the device.
-
Aleksander Morgado authored
Make sure the async task is always finished, even when mm_base_modem_at_command_finish() returns an error which is not MM_SERIAL_ERROR_RESPONSE_TIMEOUT.
-
Aleksander Morgado authored
Don't return FALSE when call is successfully accepted, otherwise the caller will get very confused: ModemManager[19952]: <debug> [1528968478.344338] (ttyACM2): --> 'ATA<CR>' ModemManager[19952]: <debug> [1528968478.361986] (ttyACM2): <-- '<CR><LF>OK<CR><LF>' (ModemManager:19952): GLib-GIO-CRITICAL **: 11:27:58.387: g_dbus_method_invocation_take_error: assertion 'error != NULL' failed And also, make sure the async task is always finished, even when mm_base_modem_at_command_finish() returns an error which is not MM_SERIAL_ERROR_RESPONSE_TIMEOUT.
-
To have proper ordering in the D-Bus signals, the skeleton's property changes must be flushed before the Call{Add,Delet}ed signals are emitted. Without this flush, the emission of the PropertiesChanged signal is delayed until the main loop is idle. This causes problems on the client side, for example the CallAdded signal being received before the Calls property contains the call. Closes: #81
-
Aleksander Morgado authored
Reported by: Matthew Stanger <stangerm2@gmail.com>
-
This info comes from PLS8-X/E/J/V/US, HC25 & PHS8 references, the last two can be found publicly via Google search. Swapped bit-mask locations for G850 & PCS bands as they may have changed with FW or where accidently put in the wrong place. Updated many 3G & 4G bit-mask fields.
-
- Jul 19, 2018
-
-
Aleksander Morgado authored
-
Aleksander Morgado authored
-
Aleksander Morgado authored
-
- Jul 10, 2018
-
-
Aleksander Morgado authored
-
Aleksander Morgado authored
Not all modems support AT command concatenation (e.g. u-blox TOBY-L4 doesn't, according to a specific note about it in the AT command reference). So just skip concatenation in the few places where it's used.
-
Aleksander Morgado authored
The TOBY-L2 allowed to skup the user/pass string fields when no authentication was requested, but according to the AT command reference, all the remaining u-blox modules do require these two fields given always (e.g. just as empty strings). As per this sequence in a TOBY-L4: (ttyACM2): --> 'AT+UAUTHREQ=?<CR>' (ttyACM2): <-- '<CR><LF>+UAUTHREQ: (1-4),(0-2),,<CR><LF><CR><LF>OK<CR><LF>' (ttyACM2): --> 'AT+UAUTHREQ=1,0<CR>' (ttyACM2): <-- '<CR><LF>+CME ERROR: 4<CR><LF>' It should have been: AT+UAUTHREQ=1,0,"",""
-
Aleksander Morgado authored
-
Aleksander Morgado authored
If we're going to overwrite the timezone context, make sure everything is cleaned up, including the signal handler. Otherwise, we may end up running the signal handler without a context attached: (gdb) bt #0 network_timezone_state_changed (self=0x6aa1e8) at mm-iface-modem-time.c:266 #1 0x76a8d418 in g_closure_invoke (closure=0x6c9810, return_value=0x0, return_value@entry=0x1, n_param_values=2, param_values=0x7edb58c0, param_values@entry=0x6cdab8, invocation_hint=invocation_hint@entry=0x7edb585c) at gclosure.c:804 #2 0x76a9e674 in signal_emit_unlocked_R (node=node@entry=0x6794d0, detail=0, detail@entry=391, instance=instance@entry=0x6aa1e8, emission_return=0x6794a8, emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7edb58c0) at gsignal.c:3629 #3 0x76aa31f4 in g_signal_emit_valist (instance=instance@entry=0x6aa1e8, signal_id=signal_id@entry=1, detail=detail@entry=6767564, var_args=..., var_args@entry=...) at gsignal.c:3385 #4 0x76aa34ec in g_signal_emit (instance=instance@entry=0x6aa1e8, signal_id=signal_id@entry=1, detail=391) at gsignal.c:3441 #5 0x76a91698 in g_object_dispatch_properties_changed (object=0x6aa1e8, n_pspecs=1, pspecs=<optimized out>) at gobject.c:1062 #6 0x76a90e7c in g_object_notify_queue_thaw (object=object@entry=0x6aa1e8, nqueue=nqueue@entry=0x75409418) at gobject.c:296 #7 0x76a9470c in g_object_set_valist (object=object@entry=0x6aa1e8, first_property_name=first_property_name@entry=0xad566 "iface-modem-state", var_args=..., var_args@entry=...) at gobject.c:2171 #8 0x76a94b18 in g_object_set (_object=_object@entry=0x6aa1e8, first_property_name=0xad566 "iface-modem-state") at gobject.c:2275 #9 0x0004b8a4 in __iface_modem_update_state_internal (self=0x6aa1e8, new_state=MM_MODEM_STATE_DISABLED, reason=MM_MODEM_STATE_CHANGE_REASON_USER_REQUESTED, failed_reason=MM_MODEM_STATE_FAILED_REASON_NONE) at mm-iface-modem.c:1487 #10 0x0007047c in disabling_context_free (ctx=0x6ba850) at mm-broadband-modem.c:9053 #11 0x76b4e538 in g_task_finalize (object=0x682488) at gtask.c:636 #12 0x76a92800 in g_object_unref (_object=0x682488) at gobject.c:3183 #13 0x00072154 in iface_modem_disable_ready (self=0x6aa1e8, result=0x7011b0, task=0x682488) at mm-broadband-modem.c:9101 #14 0x76b4e6ec in g_task_return_now (task=0x7011b0) at gtask.c:1107 #15 0x76b4e720 in complete_in_idle_cb (task=0x7011b0) at gtask.c:1121 #16 0x7694d144 in g_main_dispatch (context=0x6765a8) at gmain.c:3154 #17 g_main_context_dispatch (context=context@entry=0x6765a8) at gmain.c:3769 #18 0x7694d40c in g_main_context_iterate (context=0x6765a8, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3840 #19 0x7694d838 in g_main_loop_run (loop=0x6750d0) at gmain.c:4034 #20 0x0002bec0 in main (argc=<optimized out>, argv=<optimized out>) at main.c:181
-