aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-07-11broadband-modem: implement call list polling with +CLCCAleksander Morgado
2019-07-11cinterion: disable call list polling if ^SLCC is supportedAleksander Morgado
Early detect that ^SLCC is supported, and disable the call list polling in the interface if so.
2019-07-11iface-modem-voice: setup full call list polling logicAleksander Morgado
If the modem supports call list polling, we'll setup a timeout to poll for the full call list periodically, in order to get detailed call states. The timeout is setup as soon as a new call is created, and it will be kept enabled as long as there is a call being established (i.e. not unknown, not terminated, not active).
2019-07-11cinterion: when ^SLCC is supported, detailed call state updates are implicitAleksander Morgado
2019-07-11broadband-modem: if +CLCC is supported, call supports detailed eventsAleksander Morgado
2019-07-11cinterion: support ^SLCC URCs as part of voice managementAleksander Morgado
This command will give us URCs whenever the extended list of current calls changes, which includes information about the actual state of each call, even for calls in waiting state. Therefore, as this is a URC that applies to all calls, it's enabled and disabled as part of the modem voice interface, instead of doing it as part of the call object itself (i.e. not treated as an in-call URC).
2019-07-11cinterion: implement resetAleksander Morgado
2019-07-11cinterion: port type hints for the PLS8Aleksander Morgado
The first two ports are AT control ports (application/modem). We rely on AT^SQPORT to decide which one is which. The last two ports are unknown and we explicitly ignore them to make port probing much quicker.
2019-07-11iface-modem-voice: allow reporting the state of all ongoing callsAleksander Morgado
E.g. as per the AT+CLCC output.
2019-07-11helpers: new '+CLCC' test response parserAleksander Morgado
2019-07-11base-call: if incoming call is reported terminated, cleanup timeoutAleksander Morgado
2019-07-11base-call: allow skipping the timeout in incoming callsAleksander Morgado
E.g. if the modem supports reporting incoming call updates explicitly.
2019-07-11base-call: allow keeping ongoing call index for easy call matchingAleksander Morgado
2019-07-11base-call: add simple getters for the MmGdbusCall propertiesAleksander Morgado
2019-07-11call-list: allow iterating elementsAleksander Morgado
2019-07-11broadband-modem: implement +CCWA URC handlingAleksander Morgado
2019-07-11iface-modem-voice: allow creating incoming calls in waiting stateAleksander Morgado
2019-07-11broadband-modem,voice: enable/disable call waiting indicationsAleksander Morgado
2019-07-11broadband-modem,voice: disable unsolicited eventsAleksander Morgado
2019-07-11broadband-modem,voice: rework enabling of unsolicited eventsAleksander Morgado
The previous logic would end up returning an error if either +CLIP or +CRC reported an error, and we should really avoid that, because our setup is able to manage the voice calls even without those settings. So, convert the logic into a small state machine and try to configure the settings both in the primary and secondary ports, instead of just in the primary one.
2019-07-11docs: add missing MMCallStateReason documentationAleksander Morgado
2019-07-11docs: add missing MMCallDirection documentationAleksander Morgado
2019-07-11docs: add missing short description for compat sectionAleksander Morgado
2019-07-11docs: add missing MM_CHECK_VERSION documentationAleksander Morgado
2019-07-10misc: use g_regex_match() for simplicityBen Chan
This CL converts a few g_regex_match_full() expressions to their equivalent g_regex_match() in order to simplify the code, i.e. g_regex_match_full (regex, str, strlen (str), 0, 0, &match_info, NULL) is equivalent to: g_regex_match_full (regex, str, -1, 0, 0, &match_info, NULL) or simply: g_regex_match (regex, str, 0, &match_info)
2019-07-09base-sms: wait up to 60s when sending SMS messagesAleksander Morgado
The operation sending the raw data of the SMS may timeout because the current value of 10s is too low. When this happens, we may end up marking the modem as invalid if the operation takes much longer, as in https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/133 <debug> [1561707204.192676] (ttyUSB3): --> 'AT+CMGS=22<CR>' <debug> [1561707204.207212] (ttyUSB3): <-- '<CR><LF>> ' <debug> [1561707204.207562] (ttyUSB3) device open count is 3 (open) <debug> [1561707204.207695] (ttyUSB3) device open count is 2 (close) <debug> [1561707204.207841] (ttyUSB3): --> '0021000B9164xxxxxxxxFx00000AEDF6989D06D1CB733A\26' <debug> [1561707204.261028] (ttyUSB3): <-- '<CR><LF>' <debug> [1561707205.197464] (ttyUSB3) device open count is 3 (open) <debug> [1561707207.197763] loading signal quality... <debug> [1561707207.197990] (ttyUSB3) device open count is 4 (open) <debug> [1561707210.199337] (ttyUSB3) device open count is 5 (open) <debug> [1561707214.197198] (ttyUSB3) device open count is 4 (close) <debug> [1561707214.197443] (ttyUSB3): --> 'AT+CGACT?<CR>' <debug> [1561707215.196530] (ttyUSB3) device open count is 5 (open) <warn> [1561707217.196750] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707217.196928] (ttyUSB3) device open count is 4 (close) <warn> [1561707217.197065] (tty/ttyUSB3) at port timed out 2 consecutive times <debug> [1561707217.197187] (ttyUSB3): --> 'AT+CIND?<CR>' <debug> [1561707220.198180] (ttyUSB3) device open count is 5 (open) <debug> [1561707222.196792] (ttyUSB3) device open count is 6 (open) <debug> [1561707222.196983] (ttyUSB3) device open count is 5 (close) <warn> [1561707222.197125] (tty/ttyUSB3) at port timed out 3 consecutive times <debug> [1561707222.197257] (ttyUSB3): --> 'AT+CGACT?<CR>' <debug> [1561707225.198384] (ttyUSB3) device open count is 6 (open) <warn> [1561707225.198616] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707225.198703] (ttyUSB3) device open count is 5 (close) <warn> [1561707225.198814] (tty/ttyUSB3) at port timed out 4 consecutive times <debug> [1561707225.199437] (ttyUSB3): --> 'AT+CGACT?<CR>' <warn> [1561707228.196747] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707228.196915] (ttyUSB3) device open count is 4 (close) <warn> [1561707228.197050] (tty/ttyUSB3) at port timed out 5 consecutive times <debug> [1561707228.197175] (ttyUSB3): --> 'AT+CGACT?<CR>' <debug> [1561707230.197709] (ttyUSB3) device open count is 5 (open) <warn> [1561707231.197089] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707231.197256] (ttyUSB3) device open count is 4 (close) <warn> [1561707231.197387] (tty/ttyUSB3) at port timed out 6 consecutive times <debug> [1561707231.197519] (ttyUSB3): --> 'AT+CSQ<CR>' <debug> [1561707234.199671] Couldn't refresh signal quality: 'Serial command timed out' <debug> [1561707234.199897] (ttyUSB3) device open count is 5 (open) <debug> [1561707234.200038] (ttyUSB3) device open count is 4 (close) <warn> [1561707234.200161] (tty/ttyUSB3) at port timed out 7 consecutive times <debug> [1561707234.200291] (ttyUSB3): --> 'AT+CGACT?<CR>' <debug> [1561707235.197071] (ttyUSB3) device open count is 5 (open) <debug> [1561707237.198460] Signal quality value not updated in 60s, marking as not being recent <warn> [1561707237.198846] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707237.198949] (ttyUSB3) device open count is 4 (close) <warn> [1561707237.199060] (tty/ttyUSB3) at port timed out 8 consecutive times <debug> [1561707237.199636] (ttyUSB3): --> 'AT+CGACT?<CR>' <debug> [1561707240.198778] (ttyUSB3) device open count is 5 (open) <warn> [1561707240.199031] checking if connected failed: Couldn't check current list of active PDP contexts: Serial command timed out <debug> [1561707240.199127] (ttyUSB3) device open count is 4 (close) <warn> [1561707240.199244] (tty/ttyUSB3) at port timed out 9 consecutive times <debug> [1561707240.199363] (ttyUSB3): --> 'AT+CNSMOD?<CR>' <debug> [1561707243.198163] Couldn't refresh access technologies: 'Serial command timed out' <debug> [1561707243.198294] Periodic signal quality checks scheduled in 30s <debug> [1561707243.198402] (ttyUSB3) device open count is 3 (close) <error> [1561707243.198528] (tty/ttyUSB3) at port timed out 10 consecutive times, marking modem '/org/freedesktop/ModemManager1/Modem/0' as invalid <debug> [1561707243.198699] (ttyUSB3): --> 'AT+CGACT?<CR>' Or we may end up aborting other actions that the modem is doing... <debug> [1560473069.956036] (ttyACM2): --> 'AT+CMGS=70<CR>' <debug> [1560473069.963667] Added CALL at '/org/freedesktop/ModemManager1/Call/1' <debug> [1560473069.977937] (ttyACM2): <-- '<CR><LF>> ' <debug> [1560473069.978558] (ttyACM2) device open count is 3 (open) <debug> [1560473069.978812] (ttyACM2) device open count is 2 (close) <debug> [1560473069.979152] (ttyACM2): --> '0001000D8......................\26' <debug> [1560473080.317049] (ttyACM2): --> 'ATD123456789;<CR>' <debug> [1560473092.293458] (ttyACM2): <-- '<CR><LF>+CMGS: 1<CR><LF><CR><LF>OK<CR><LF>' <warn> [1560473092.293854] Couldn't start call : 'Couldn't start the call: Unhandled response '+CMGS: 1'' <info> [1560473092.293936] Call state changed: dialing -> terminated (unknown) <debug> [1560473092.293987] Cleaning up in-call unsolicited events... So, update the raw data sending timeout to a much longer value.
2019-07-02docs: add deprecated items to sections fileAleksander Morgado
2019-07-02api,location: fix A-GPS MSA/MSB documentation linksAleksander Morgado
2019-07-02po: Add zh_CN translationwi24rd
2019-06-28introspection,voice: fix documentation of CallAdded() signalAleksander Morgado
2019-06-28modem-helpers: ignore format of unneeded fields in +CLIP URCAleksander Morgado
The regex was expecting empty values in several of the fields, which is wrong. Instead of matching empty fields, just ignore all fields that we don't require in our logic.
2019-06-28broadband-modem: fix logging whether enabling or disabling URCsAleksander Morgado
2019-06-24iface-modem-3gpp: use correct finish() method to complete user registrationAleksander Morgado
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/131
2019-06-13cinterion: make custom +CIEV parser much more genericAleksander Morgado
The custom +CIEV parser configured for Cinterion modems was exclusively matching the "psinfo" indicator updates, which were the ones really used afterwards. But, in order to avoid having undesired URCs mixed with other command responses, we should anyway match any +CIEV indicator reported, not only "psinfo". The text indicator ids used in +CIEV seem to bee specific to Cinterion devices when they're configured via AT^SIND, so we do a generic match for any lowercase ascii text as indicator id.
2019-06-13ublox,tests: expect error if empty band list when parsing UACT?Aleksander Morgado
2019-06-13ublox: return error when no bands are parsedAleksander Morgado
If load_current_bands_finish() returns a NULL GArray, we must set the GError or otherwise the daemon will segfault when the caller dereferences the GError: current_bands = MM_IFACE_MODEM_GET_INTERFACE (self)->load_current_bands_finish (self, res, &error); if (!current_bands) { /* Errors when getting current bands won't be critical */ mm_warn ("couldn't load current Bands: '%s'", error->message); g_error_free (error); } This may happen with an empty but balid +UACT response, e.g.: AT+UACT? +UACT: ,,, OK Or when it replies a full empty string: AT+UACT? OK
2019-06-11modem-helpers: minor coding style fixesAleksander Morgado
2019-06-03port-serial-at: raw commands always run nextAleksander Morgado
We use the raw commands exclusively when we're sending SMS data to the device. Until this change, all raw commands were added at the tail of the queue of pending commands, and that meant that if any unrelated AT command was interleaved between e.g. our AT+CGMS and the actual SMS data sent, the operation would have failed. With this fix, we're making sure that all raw commands are added at the head of the queue, so we're making sure that the next command picked after e.g. CGMS is actually the raw SMS data to be sent. We would be avoiding issues like this one, where an outgoing voice call attempt gets in the way before we send the SMS data: [1556246081.786284] (ttyACM2): --> 'AT+CMGS=70<CR>' [1556246081.814861] (ttyACM2): <-- '<CR><LF>> ' [1556246081.819382] (ttyACM2): --> 'ATD1234567890;<CR>' [1556246081.839685] (ttyACM2): <-- '<CR><LF>> ' [1556246081.840123] Couldn't start call : 'Couldn't start the call: Unhandled response '> '' [1556246081.856254] (ttyACM2): --> '0001000D810.............. [1556246081.922470] (ttyACM2): <-- '<CR><LF>+CME ERROR: 4<CR><LF>'
2019-06-03port-serial: allow deciding whether the command is queued last or run nextAleksander Morgado
By default all the commands we were sending through the serial port were added at the tail of the pending queue, but we may want to queue them at the head in very specific cases (e.g. while sending an SMS).
2019-06-01build: allow unconditionally enabling Modem.Command() methodAleksander Morgado
If ModemManager is being used in a custom system, make it easy to unconditionally enable the Modem.Command() method, in case the modem needs to be configured in some way that is not supported via standard modem interfaces.
2019-05-30quectel: add port type hints for the Quectel LTE-A EG06Aleksander Morgado
ttyUSB0 (if #0): QCDM/DIAG port ttyUSB1 (if #1): GPS data port ttyUSB2 (if #2): AT primary port ttyUSB3 (if #3): AT secondary port
2019-05-30iface-modem: fix reporting state while registration is deniedAleksander Morgado
When registration is denied, we should be reporting the modem with 'enabled' state instead of 'registered'. This was not happening because the logic to build the consolidated state (for 3GPP+3GPP2 modems) was using as default initial state the current old state, and so if the old one was 'registered' it never allowed getting a consolidated state of 'enabled', because 'registered' > 'enabled'. Instead of using the old initial state, the consolidated modem state should use 'enabled' as default initial value, which is the lowest among 'enabled, 'searching' and 'registered'.
2019-05-28xmm,shared: don't assume parent object implements location supportAleksander Morgado
E.g. when MM is built without QMI support, the MBIM modem won't have any location support, as the only location implementation is based on QMI over MBIM. https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/125
2019-05-23plugin: ignore unwanted net portsAleksander Morgado
* For QMI modems, make sure we only grab QMI data ports (flag the rest as ignored). * For MBIM modems, make sure we only grab MBIM data ports (flag the rest as ignored). * For other plugins that use NET ports in their logic, make sure we only grab non-QMI and non-MBIM data ports.
2019-05-18base-modem-at: don't ignore allow_cached flag in first command in sequenceAleksander Morgado
2019-05-18telit: loading access tech should never use cached repliesAleksander Morgado
2019-05-14bearer-qmi: do not call cleanup_event_report_unsolicited_events() w/o ↵Lubomir Rintel
indication_id If a disconnection fails (because stop_network() failed), base-bearer flips the state back to CONNECTED. Oops. At that point something is clearly messed up, but it seems correct to assume the bearer is connected. Nevertheless, we will have already have unhooked the unsolicited events reporting. A subsequent attempt to disconnect the bearer will trip the assertion: #0 0x00007ffff75f2eb5 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ffff75dd895 in __GI_abort () at abort.c:79 #2 0x00007ffff77beb53 in g_assertion_message (domain=<optimized out>, file=<optimized out>, line=<optimized out>, func=0x5088e0 <__FUNCTION__.56253> "cleanup_event_report_unsolicited_events", message=<optimized out>) at ../glib/gtestutils.c:2878 #3 0x00007ffff781a96f in g_assertion_message_expr (domain=domain@entry=0x0, file=file@entry=0x507aad "mm-bearer-qmi.c", line=line@entry=1138, func=func@entry=0x5088e0 <__FUNCTION__.56253> "cleanup_event_report_unsolicited_events", expr=expr@entry=0x507ae5 "*indication_id != 0") at ../glib/gtestutils.c:2904 #4 0x00000000004a0c49 in cleanup_event_report_unsolicited_events (client=<optimized out>, indication_id=0x5bb30c, self=<optimized out>) at mm-bearer-qmi.c:1138 #5 0x00000000004a0c49 in cleanup_event_report_unsolicited_events (client=<optimized out>, indication_id=indication_id@entry=0x5bb30c, self=0x5bb420 [MMBearerQmi]) at mm-bearer-qmi.c:1132 #6 0x00000000004a0ee3 in disconnect_context_step (task=0x7fffe8012100 [GTask]) at mm-bearer-qmi.c:1854 #7 0x000000000046e889 in disconnect_auth_ready (self=<optimized out>, res=<optimized out>, ctx=ctx@entry=0x654630) at mm-iface-modem-simple.c:865 #8 0x00007ffff79cfa9a in g_task_return_now (task=0x7fffe8012640 [GTask]) at ../gio/gtask.c:1209 ... Add checks for indication_id to calls to cleanup_event_report_unsolicited_events() on DISCONNECT_STEP_STOP_NETWORK_IPV4 or DISCONNECT_STEP_STOP_NETWORK_IPV6, as is done elsewhere.
2019-05-14base-bearer: fix check for cancellationLubomir Rintel
If we cancel connect_cancellable, the connect task will return a G_IO_ERROR_CANCELLED. We may need to do some cleanup (like, disconnect if the connection went far enough to actually start the network connection), thus it's important we check for cancellation correctly.
2019-05-14bearer-qmi: remove unused DisconnectContext::dataLubomir Rintel
2019-05-08iface-modem-messaging: flush sms list update before notifying added/removedAleksander Morgado
So that clients are able to have the full updated list before the list update notification.