Commit Graph
54 Commits
Author SHA1 Message Date
Dan Williams 4dad94d500 core: rework port grabbing and organization
Make port roles more flexible.  We have modems that do PPP
on interfaces other than the primary interface, and that
wasn't possible with the old code.  So clean up all that
logic and move the port organization code into the core
so we can reduce code in the plugins.

In the new world order, the plugins say whether the port
is a QCDM port, an AT port, or ignored.  If it's an AT
port the plugins get to tag it as primary, secondary, or
PPP, or any combination of the 3.  This allows for modems
where PPP should really be done on the secondary port
(Huawei E220, Sierra devices) so that the primary port
stays open for command and status.

Modem subclasses no longer get asked to handle port grabbing
themselves.  Instead, that's now done by the generic classes
(MMGenericCdma and MMGenericGsm) and the plugins are notified
when a port is grabbed so they can add unsolicited response
handlers for it.  After all ports are grabbed by the generic
classes, they get "organized", which assigns various ports
to the roles of PRIMARY, SECONDARY, DATA, and QCDM based
on specific rules and hints that the plugin provided (which
are expressed as MMAtPortFlags).  The plugins then have
a chance to perform fixups on the primary port if they choose.

The plugin code is responsible for determining the port
hints (ie MMAtPortFlags) at probe time, instead of having
a combination of the plugin and the modem class do the
job.  This simplifies things greatly for the plugins at
the expense of more complicated logic in the core.
2012-02-28 10:06:04 -06:00
Aleksander Morgado 3a7f970931 gsm: let plugins override the operator name and code retrieval 2012-02-17 13:25:02 +01:00
Aleksander Morgado 740680fd3b generic: query PS network registration status only if PS network supported by the modem 2012-02-17 13:25:02 +01:00
Eric Shienbrood eede5bb621 gsm: add new property to track which facility locks are enabled
The property EnabledFacilityLocks on the .Modem.Gsm.Card interface
is a bit mask that indicates which of the various personalization
codes from 3GPP TS 22.022, plus the SIM PIN lock and SIM PIN2 lock,
are enabled. The set of facility locks supported by the modem is
determined at the time the modem is initialized, and the state of
each supported lock (enabled or disabled) is determined. When the
state of a lock changes, a property-change signal is sent out. Note
that ModemManager only supports enabling and disabling SIM-PIN, via
the EnablePin method on Modem.Gsm.Card.
2011-11-16 23:41:49 -06:00
Aleksander Morgado ea23851326 api: use common ModemManager.h for API, core and plugins 2011-08-19 22:54:48 +02:00
Aleksander Morgado 6e9d980e8c gsm: allow plugins to check if they need to issue the power-up command
Some modems only like the power-up command if not already in full functionality
mode. If the power-up is sent while already in full functionality mode, they get
rebooted and reseted.

With this changes, plugins can check whether they need the power-up and ask
the generic gsm code base to skip the command or not.

By default, power-up command (if any given) is never skipped.
2011-06-22 13:08:53 +02:00
Dan Williams 51c409d1eb ussd: fix reception, network notifications, and network requests
Because the code was sending the USSD request with a "notify me via
unsolicited result code" tag, the response could come from any port,
and in was coming from other ports on various devices.  But the code
expected the response on the main port, thus it got lost.

So turn the USSD response processing into an unsolicited command handler
instead, which allows us to process the response no matter where it
comes from.  This patch also enables network-initiated USSD
notifications and requests since that's easy to add once the first thing
here is done.
2011-06-15 13:06:37 -05:00
Aleksander Morgado 1e507824c6 gsm: let plugins use their own command for CMER enabling 2011-06-06 17:20:16 +02:00
Aleksander Morgado 85569f77e9 gsm: let plugins use their own commands for SMS indications and storage configuration 2011-06-06 17:20:16 +02:00
Aleksander Morgado e520c2d448 generic-gsm: make flow control setup command a property 2011-04-04 21:46:51 -05:00
Guido Günther 3c13d9aec8 gsm: add preliminary USSD support (bgo #590798)
We currently convert to and from the modem's set charset and always pass
'15' as the data coding scheme. Passing the correct data coding scheme
as third argument to CUSD only upsets the network. This contradicts 3GPP
TS 23.038. Other tools like gsm-ussd handle it the same way.

Network responses that require further actions are not yet implemented.

(some fixes and cleanups by Dan Williams)
2010-11-05 14:50:50 -05:00
Dan Williams 6921a9f71d core: unconditionally enable the Location Services API
This required dbus-glib 0.86 or later, which was released 2010-03-24.
2010-11-05 14:03:44 -05:00
Dan Williams 1684d8b173 gsm: add SimIdentifier property
An obfuscated SimIdentifier that may be available before the PIN has
been entered, for use in auto-unlocking a device.  If this value is
present, it should be used in preference to DeviceIdentifier as it
is SIM-specific like the PIN code.
2010-10-25 17:41:08 -05:00
Dan Williams 7ae8ffe21b core: use hardware IDs as part of DeviceIdentifier
Pass the device's hardware IDs through modem creation and use them
when calculating the device's identifier.  Add a bunch of testcases
for real hardware to ensure we don't break the device ID in the
future unless we really want to.
2010-10-22 11:06:48 -05:00
Dan Williams 88ee478bb6 gsm: implement location API
Depends on dbus-glib 0.86 + this patch:

https://bugs.freedesktop.org/show_bug.cgi?id=28835

Still have to do the bits that allow plugins to add other
location capabilities, but that can come later.
2010-06-29 22:47:40 -07:00
Dan Williams 72a1a6caf6 gsm: use PS registration status if CS isn't available
Some devices (Blackberries) always respond to AT+CREG with ERROR,
but will respond to AT+CGREG normally.  Ugh.  Handle that by
using the PS registration status from AT+CGREG if we don't have
a valid CS registration status at all.
2010-06-07 22:21:01 -07:00
Dan Williams 6744e08104 gsm: simplify finding the right serial port for commands 2010-03-16 13:17:14 -07:00
Dan Williams 882a86040e gsm: make mm_generic_gsm_check_pin() static
No more external users of it.
2010-03-16 11:52:01 -07:00
Dan Williams 2dd7e12f72 gsm: allow subclasses to retrieve current character set 2010-03-15 14:24:59 -07:00
Dan Williams 479937cbbb Merge remote branch 'origin/master' into qcdm 2010-03-10 15:04:49 -08:00
Dan Williams 1979512d8d Merge remote branch 'origin/master' into qcdm 2010-03-10 14:50:41 -08:00
Dan Williams 59b75b5194 gsm: clean up disconnect handling
Allow subclasses to override disconnect more cleanly so that
modem state gets handled correctly when the disconnect is complete.
Also fix up PDP Context ID handle (cid) so that subclasses can
get the previously-activated context ID when disconnecting, and let
the cid be an int since '0' is a valid context number.

For the generic devices, this also attempts to actually deactivate
the PDP context to ensure that the data session is terminated.
2010-03-10 14:39:10 -08:00
Dan Williams 38514db896 gsm: let generic class handle signal quality caching and updates 2010-03-09 21:31:57 -08:00
Dan Williams f3721a5674 Merge remote branch 'origin/master' into qcdm 2010-03-08 20:01:22 -08:00
Dan Williams cdf9279ee8 api+gsm: split out access technology
As with allowed modes, make things clearer and simpler by giving
access technology it's own values.
2010-03-08 18:02:14 -08:00
Dan Williams c5a897d0ae api+gsm: clean up AllowedMode values
Instead of trying to stuff everything into the mode bitfield it
turns out it's just easier, clearer, and simpler to use different
values for each of the following:

1) the device's supported access technologies and allowed modes
2) the device's current access technology
3) the device's allowed mode preference

Since none of the AccessTechnology or AllowedMode stuff has hit a
release yet, let's make sure we're doing it the right way early on.
2010-03-08 17:27:56 -08:00
Dan Williams aeac17a81e gsm: implement allowed mode 2010-03-08 15:13:14 -08:00
Dan Williams 343245fc21 gsm: add AccessTechnology property and associated infrastructure
AccessTechnology takes over half of what NetworkMode was supposed to
do, but we'll keep NetworkMode around for a while for compatibility
anyway.  Create async updaters that subclasses can use to update
the access tech when they get unsolicited messages.
2010-03-08 11:40:54 -08:00
Dan Williams 54c1d069eb gsm: rework registration handling
First, generically handle registration polling if the device does
not support unsolicited registration.  Second, using the new
creg/cgreg parsing functions from mm-modem-helpers.c, handle
CREG=2 unsolicited registration replies to capture the GSM LAC/CI
for the location information API.

Because of these changes we can simplify the registration polling
during connection as well by using the common registration parsing
code and the cached registration state.
2010-03-06 10:28:11 -08:00
Dan Williams c915de5512 gsm: add ability for subclasses to handle power-on response
This lets subclasses handle errors when they know the device supports
the power-up command.  Also will let us simplify a number of plugins.
2010-03-04 20:06:17 -08:00
Dan Williams 3457adefef gsm: clarify generic GSM subclass API a bit 2010-03-04 17:28:36 -08:00
Dan Williams a8c7bba19e serial: refactor MMSerialPort into a base class and an AT-capable serial port
For QCDM devices we want most of what MMSerialPort does, but not
the AT command handling stuff since the commands and responses
aren't AT commands nor are they even strings.  So convert everything
that MMSerialPort does into a GByteArray, and let MMAtSerialPort
handle the conversion to strings when necessary.
2010-02-20 14:55:10 -08:00
Dan Williams 5bdabaabec gsm: implement enable/connecting/disconnecting state handling
And consolidate generic port enable code in one place since pretty
much every modem needs that.
2009-12-02 14:43:09 -08:00
Dan Williams bb6f997fb8 gsm: update for new states and state flow fixes 2009-12-01 16:46:23 -08:00
Dan Williams 3c6e4056e7 Merge commit 'origin/master' into states 2009-11-06 15:11:01 -08:00
Dan Williams 54901933fe gsm: make "X4 &C1" init arguments optional (lp:455031)
At least don't error out of the fail since they aren't really
necessary, just nice to have.
2009-10-30 16:55:04 -07:00
Dan Williams 9bbc6ab53b core: initial implementation of modem states
Needs more work for GSM, but should be reasonably complete for CDMA.
2009-10-27 15:01:00 -07:00
Dan Williams ca767e4037 gsm: update for D-Bus interface specification changes
Specifically, SupportedModes, SupportedBands, and SMS completeness changes.
2009-08-17 13:16:41 -05:00
Alexander Sack 12ac98e9f6 license: add license header to all files and set copyright based on git log 2009-08-06 12:43:51 +02:00
Dan Williams 2d194a5798 gsm: harmonize band/mode enums
Use the same enum for set/get of band and mode, as for exposing the
device's capabilities.
2009-08-05 13:03:59 -04:00
Dan Williams 4e7548e496 gsm: fix init for modems for which ATZ does not play well with others 2009-06-29 23:11:43 -04:00
Dan Williams d5a43aa862 udev: modem port refactor; convert 'hso' to udev
Create a base MMPort class to handle both tty and net ports generically,
and move plugins over to that.  Also port the 'hso' plugin to udev.
2009-06-20 10:49:09 -04:00
Dan Williams 73e536c3c3 huawei: convert to udev and new API 2009-06-19 22:59:43 -04:00
Dan Williams aa8d3241e5 moto-c: add plugin for Motorola C-series phones and BUSlink SCWi275u 2009-06-18 22:48:51 -04:00
Dan Williams 924814c101 udev: move device probing and detection to udev
Get rid of dependency on HAL, using libgudev instead.  Fix up the plugin API
to no longer use either HAL or udev defines, but let plugins use whatever
mechanism they want for getting more information out of the device given the
subsystem and device node name.

Modems are now defined as "master" devices which "own" a one or more ports.
A port could be a serial tty device or a network device or whatever.  The
plugin figures out whether it supports a given port or not and then assigns
it to a new or existing modem.  Modems now have a 'valid' property that
should be set to TRUE when the modem has enough ports to operate correctly.
For devices (ex. 'hso') that use a network device for data transfer, the
modem would need to grab at least one TTY and the network device associated
with that physical device to be 'valid'.

Also move the generic modem support code to a plugin like other modem plugins,
and change the I-support-this-device mechanism to return a number indicating
the level of support.  For example, the generic plugin would return a quite
low number if the device indicates via probing that it can do GSM or CDMA, but
a more specific plugin can indicate better support for the device, and thus
the more specific plugin would win control.
2009-06-18 14:25:30 -04:00
Tambet Ingo ddbeb41829 Make pending_registration_stop() accessible to inherited implementations. 2009-05-14 13:14:45 +03:00
Tambet Ingo 1215bd6a9d Rework unsolicited message handling.
Implement registration using unsolicited messages for generic GSM class (which
is disabled by default, HSO and Huawei plugins enable it).

Modify all GSM modem subclasses that used unsolicited messages to use the new
method.
2009-02-18 14:48:08 +02:00
Tambet Ingo 56bd8994ee Implement Huawei modem registration with unsolicited messages (no polling).
Keep registration info in sync correctly. Emit signal when it changes.
2008-12-17 13:37:57 +02:00
Tambet Ingo 3d84a60ab1 Fix HSO modem plugin. 2008-12-02 15:48:52 +02:00
Tambet Ingo 1455c424c2 Implement smarter APN choosing.
If the APN chosen by user is already configured in card, use that. If not,
find the highest used CID, the allowed range of CIDs and add new (or overwrite
the highest one).
2008-09-15 13:07:03 +03:00