Commit Graph
33 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
Eric Shienbrood e7b6b2dc1c core: keep track of all PIN retry counts
Added a PinRetryCounts property on org.freedesktop.ModemManager.Modem.
This is dictionary that records the number of PIN tries remaining
for each of the possible PIN code types for which the modem is
capable of reporting the count. Also, these counts are kept up
to date across ChangePin and EnablePin operations, not just when
an unlock is attempted.
2011-11-16 17:42:50 -06:00
Graham Inggs 71598a6289 huawei: remove padding from USSD responses
Probably needed in generic USSD code.
2011-11-15 11:29:04 -06:00
Graham Inggs add6131edf huawei: pad USSD requests if necessary
ModemManager currently encodes the USSD command *141*0# (for MTN South
Africa) as "AA182DA6828D00".
While this works on some modems, for example the E1820, other modems,
for example the E160, require USSD commands that are a multiple of 7
characters long to be padded with 0x0d.
Huawei Mobile Partner dashboard software for Windows encodes *141*0#
as "AA182DA6828D1A" which works on both the E1820 and the E160.

The attached patch pads the USSD command with 0x0d before encoding if
it is a multiple of 7 characters long.
2011-11-14 17:36:23 -06:00
Nathan Williams 8710820156 core: ensure that GMatchInfo and GRegex objects are freed properly
In particular, g_regex_match() and g_regex_match_full() allocate a
match_info structure on both success and failure, so calling
g_match_info_free() only in the success case is insufficient.

BUG=None
TEST=Inspection

Change-Id: Iea76b5b5dc3ec48120e15601a5e2dd45322133d8
2011-09-27 13:40:39 -05:00
Guido Günther 70715c1c12 huawei: implement ussd encoding/decoding
Huawei wants the USSD as packed GSM.
2011-07-21 15:16:44 -05:00
Aleksander Morgado da55d11e72 plugins: use MMCallbackInfo instead of custom DisableInfo
Implemented using a custom invoke method which doesn't call the callback, and
instead calls parent disable passing the callback as argument.

This fix ensures that if a modem gets removed, no invalid modem reference is
passed to the parent disable, as info->modem would be set to NULL and we can
detect it in the custom invoke method.
2011-06-05 17:51:05 +02:00
Aleksander Morgado 9323daec01 core, plugins: if modem removed don't process response
We try to avoid a memory leak when info->error is reset, as well as a second
re-schedule of the info.
2011-06-05 17:51:00 +02:00
Aleksander Morgado a0c902bdb5 huawei: enable getting and setting more than one band 2011-04-29 12:31:09 +02:00
Dan Williams dc89c0a42d huawei: rework probing and detection
Long ago there were problems where certain Huawei devices would
stop responding on various ports, and sometimes would crash
randomly.  The theory at the time was that touching the secondary
ports made the device angry, thus the plugin simply opened the
ports and listened for unsolicited messages.  But if the device
didn't send any during that 7 second period, MM would not detect
and secondary ports at all.  Plus, it was always a hack.

Instead, the new theory is that the device crashes if unsolicited
messages are enabled (^CURC=1), the secondary port gets touched,
*and* then closed and left for a while.  Fix that by turning
unsolicited messages off at probe time, on when the device is
enabled, and off again when the device is disabled like happens
for other modems.  Thus when MM first detects the modem, it turns
off unsolicited messages and the serial buffer on the secondary
port doesn't fill up and crash the modem.

Second, this allows us to simplify the probing logic quite a bit
so that we can probe all ports we find, but we still wait to probe
the first port so we can turn off unsolicited messages and get
hints about what port is the secondary.
2011-04-27 10:50:32 -05:00
Dan Williams 16039244bb core: rework logging
Make it more flexible, add logging to a file, and absolute and
relative timestamps.
2011-01-23 20:51:48 -06:00
Dan Williams 63cb7f29a9 huawei: quiet annoying log message 2011-01-03 14:42:44 -06:00
Dan Williams a502fd2b19 gsm: add access technology support for HSPA+ 2011-01-01 11:55:41 -06:00
Dan Williams a00966d4aa huawei: don't spam syslog with tx/rx stats (lp:673457) 2010-11-29 11:50:55 -06: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 c95216e575 huawei: add support for UnlockRetries 2010-06-22 14:06:13 -07:00
Dan Williams 23986f8b0e huawei: implement GSM solicited access technology request 2010-03-26 01:15:20 -07:00
Dan Williams 6744e08104 gsm: simplify finding the right serial port for commands 2010-03-16 13:17:14 -07:00
Dan Williams eff1bcc7f3 huawei: simplify setting allowed mode 2010-03-16 11:42:57 -07:00
Dan Williams 8af469ccad huawei: clean up and simplify band handling 2010-03-16 11:38:34 -07:00
Dan Williams e0c3052b0f huawei: handle unsolicited unregistered mode change 2010-03-16 10:29:47 -07:00
Dan Williams 1979512d8d Merge remote branch 'origin/master' into qcdm 2010-03-10 14:50:41 -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 9e231c3d4b huawei: attach unsolicited message handlers to the primary port too 2010-03-08 18:06:10 -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 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 49b5ffd076 core: use G_DEFINE_TYPE_* instead of rolling our own
Use the macro; save some trees.
2009-10-26 17:56:48 -07:00
Dan Williams 21391286fc huawei: rename MMModemHuawei -> MMModemHuaweiGsm 2009-10-11 11:19:00 -07:00