Commit Graph

924 Commits

Author SHA1 Message Date
Aleksander Morgado
dff23f57b3 huawei: use a 3s timeout as after-sim-unlock step
Huawei e220 may fail miserably (rebooting itself) if we issue commands just
after having unlocked the PIN.
2013-04-08 18:10:01 +02:00
Aleksander Morgado
a294800c7f icera: create generic bearer when no net port available
https://bugzilla.gnome.org/show_bug.cgi?id=697374
2013-04-05 19:10:53 +02:00
Aleksander Morgado
a2d2f83910 mbm: plug memleaks 2013-04-05 10:27:43 +02:00
Aleksander Morgado
30e2a0f4d0 mbm: don't pass (null) as string when either user or password is empty
E.g. instead of:
  (ttyACM1): --> 'AT*EIAAUW=2,1,"(null)","vodafone"<CR>'
  (ttyACM1): <-- '<CR><LF>OK<CR><LF>'

Better pass:
  (ttyACM1): --> 'AT*EIAAUW=2,1,"","vodafone"<CR>'
  (ttyACM1): <-- '<CR><LF>OK<CR><LF>'
2013-04-05 10:27:43 +02:00
Aleksander Morgado
8c39f2c551 sierra: implement PIN/PUK retry count loading
Not all Sierra modems support it, but those which do reply like this:

    AT+CPINC=?
    OK

    AT+CPINC?
    +CPINC: 3,3,10,10
2013-04-04 19:26:51 +02:00
Aleksander Morgado
464f33f77f sierra: early detect non-AT ports
Detect the parser filter errors during our custom_init(), and set the port as
not being AT if the error found.
2013-04-04 19:26:51 +02:00
Aleksander Morgado
4ea827a3a1 sierra: too many timeout errors during custom init means non-AT port
Reduces probing time of the modem in ~10s.
2013-04-04 19:26:51 +02:00
Aleksander Morgado
e60ad8d8dc mbm: ignore *ESTKSMS unsolicited messages
https://bugzilla.gnome.org/show_bug.cgi?id=697280
2013-04-04 18:32:55 +02:00
Aleksander Morgado
d2b4ab9d9c sierra: 'data' may be NULL if the parent dialling fails 2013-04-04 17:22:45 +02:00
Aleksander Morgado
a62624aa22 sierra: plug memleak 2013-04-04 17:18:23 +02:00
Aleksander Morgado
0d20a7c85a altair-lte: minor style changes 2013-04-04 09:48:54 +02:00
ori inbar
84e68cd4cd altair-lte: initial altair lte plugin 2013-04-04 09:39:37 +02:00
Aleksander Morgado
9ffb424ed4 pantech: skip WMC ports
WMC ports will return "ERROR" to all AT commands, except for "AT" itself. So
just provide a custom AT probing logic, which uses "ATE0" instead, and assumes
the port is not an AT port if an error is returned.
2013-04-02 17:41:54 +02:00
Aleksander Morgado
bb4f4f4e9e pantech: fully skip the SIM storage in the messaging interface
Seems that trying to use the SIM storage hangs a UMW190  modem, so just fully
ignore it for now.

https://bugzilla.gnome.org/show_bug.cgi?id=696724
2013-04-02 09:53:46 +02:00
Aleksander Morgado
a066cc84cf mbm: fix udev rule tagging logic 2013-04-01 17:53:13 +02:00
David Castellanos
2896e711ae x22x: Fix problem in set allowed mode
NM attempts to set allowed and preferred mode during the connection
process. The plugin x220x does not handle properly when NM request
allowed mode to '2g, 3g' and the preferred mode to 'none'.

This commit attempts to solve the problem described above. When this
situation happens, establish the mode of the modem has 'ANY' (which
seems the safest one) instead of just throwing an error.

Signed-off-by: David Castellanos <dcastellanos@indra.es>
2013-04-01 16:03:39 +02:00
Aleksander Morgado
5ffad1f51f mbm: don't tag only tty ports, and also grab cdc-wdm ports
We also need to tag cdc-wdm ports, so that they get grabbed but ignored and
not QMI-probed.

https://bugzilla.gnome.org/show_bug.cgi?id=696701
2013-04-01 14:02:51 +02:00
Aleksander Morgado
b9b5ca39df mbm: wait for unlock reporting READY after PIN/PUK unlock
MBM modems will lie about the unlock status just after having sent a
correct PIN or PUK. So, explicitly wait to get in READY state after having
sent the PIN or PUK, before keeping on.

https://bugzilla.gnome.org/show_bug.cgi?id=696702
2013-03-29 20:17:59 +01:00
Dan Williams
477623f0a0 broadband-modem-novatel: implement CDMA time API (bgo #696739)
Use AT$NWLTIME to get current time and UTC offset.
2013-03-29 08:49:47 -05:00
Aleksander Morgado
a7b8cbb71d port-probe: don't reschedule next probing step when serial port buffer full
When the serial port buffer gets full of non-AT garbage during port probing,
we were re-scheduling the next probing step, which is completely wrong, as we
then would be processing the same probing task twice. If we get a buffer full,
just cancel the AT probing cancellable, which would cancel not only the possible
AT probings, but also the custom init if there is any.

Also, make sure that the custom_init() of the plugins out there don't return an
error if the GCancellable is cancelled. Cancelling the GCancellable means we
should just stop the custom_init(), and actually sending an error in
custom_init() means that the port should be set as unsupported by the plugin, so
completely different things.

Should fix https://bugzilla.gnome.org/show_bug.cgi?id=696695
2013-03-29 12:33:20 +01:00
Aleksander Morgado
effd574a63 option: don't apply both vendor and product filters at the same time
The probing logic expects either one or the other right now. In this case, it is
just simpler to include the Nozomi-related VID in the vendor filter, and remove
the product filter.
2013-03-28 20:06:53 +01:00
Aleksander Morgado
e33fc37ec2 option: ignore PH_SIM facility lock in 'nozomi' based modems
https://bugzilla.gnome.org/show_bug.cgi?id=696593
2013-03-28 20:06:53 +01:00
Dan Williams
fea5b7a670 broadband-modem-icera: make CME 3 errors fail power-up (bgo #696742)
+CME ERROR: 3 (Not Allowed) means airplane mode, at least for the
Samsung Yxxxx devices that I've got.  And if we get this error
on any other devices, chances are they'll fail to power up too.
2013-03-28 12:35:32 -05:00
Aleksander Morgado
d6ac6508d9 plugin: explicitly request QMI probing
Plugins which may support QMI ports need to explicitly request QMI probing
in cdc-wdm devices. This should also avoid probing cdc-wdm ports when we know
that the plugin doesn't support them (e.g. with Ericsson MBM devices).

https://bugzilla.gnome.org/show_bug.cgi?id=696701
2013-03-28 17:33:08 +01:00
Aleksander Morgado
b76dc134bf novatel: try to flip secondary ports to AT as soon as possible
So do it during port probing. If we send this command early enough in the
first AT port being probed, it should flip the secondary ports to AT mode
before their port probing is finished.

https://bugzilla.gnome.org/show_bug.cgi?id=696696
2013-03-28 17:05:48 +01:00
Dan Williams
ca97f0e79f broadband-modem-sierra: fix trivial copy & paste error 2013-03-27 18:02:50 -05:00
Dan Williams
95b46c16f1 broadband-modem-sierra: add after-sim-unlock delay
Older devices may crash if asked to connect right after sending the
PIN and unlocking the SIM; they simply stop responding to AT commands
around the first request for access technology and then reboot.  A
delay seems prevents this behavior.

Since it's not uncommon to require a delay after SIM unlock, add one
for newer sierra_net devices as well, even though we're not quite
sure if they need one or not.  It doesn't hurt, at least.
2013-03-25 15:49:08 -05:00
Dan Williams
8ebce66f96 sierra: fix time check warnings for modems that don't support time
'result' may be NULL even if no error is set.  Errors aren't set
because we want to continue the !TIME/!SYSTIME sequence regardless
of errors, so we can figure out which command the modem supports.

Trying to get a uint32 out of a NULL GVariant makes glib complain,
and it's wrong, so don't do that.
2013-03-25 15:08:31 -05:00
Aleksander Morgado
4e6400d3c8 zte: add port type hints for the ZTE MF195
https://bugzilla.gnome.org/show_bug.cgi?id=691480
2013-03-12 18:48:45 +01:00
Aleksander Morgado
14c03f98ad mbm: fix 3gpp dialling sequence when result comes through polling 2013-03-05 20:47:58 +01:00
Aleksander Morgado
144cc7011e mbm: tag the ttys instead of the parent usb device
We can just tag the ttys instead of the parent usb device, so that the core
logic which looks in the plugin-specified port tags works properly. There is no
need to explicitly tag the net port, as the probing for this port ends when a
plugin suggestion comes from another port probing on the same device.
2013-03-05 20:32:03 +01:00
Gerald Richter
113916beb5 sierra: add MC8790 to APP1 PPP whitelist 2013-03-04 08:32:23 -06:00
Aleksander Morgado
c79d266e62 udev: update all udev rules to always match both VID/PID together
If the rules to tag specific USB interface numbers only apply on the PID, we'll
end up seeing that if the port has a parent with another PID, and that other
PID also has a rule, port will get tagged multiple times. Easier to see with an
example:

The ZTE MF637 (VID 0x19D2, PID 0x0121) had the following rules:

ATTRS{idProduct}=="0121", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1"
ATTRS{idProduct}=="0121", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1"

In our ZTE rules we also have some for the device with PID 0x0002, like:

ATTRS{idProduct}=="0002", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1"
ATTRS{idProduct}=="0002", ENV{.MM_USBIFNUM}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1"

And it seems that we can grab multiple PIDs from a single port, i.e. from the
parent objects in the hierarchy:

udevadm info -a -n /dev/ttyUSB4 | grep idProduct
    ATTRS{idProduct}=="0121"
    ATTRS{idProduct}=="0020"
    ATTRS{idProduct}=="0002"

Where that 0x0002 idProduct is not from the modem, but from the EHCI Host
Controller (with idVendor 0x1d6b in my case).

So... we end up seeing that both set of rules will apply to the ports, and we
misleadingly get:

    (ttyUSB3) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    ZTE: AT port 'tty/ttyUSB2' flagged as primary
    (ttyUSB2) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    ZTE: AT port 'tty/ttyUSB1' flagged as secondary
    (ttyUSB1) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    ZTE: AT port 'tty/ttyUSB4' flagged as primary
    b_port(): (ttyUSB4) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB2 at (primary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB1 at (secondary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB2 data (primary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB0 qcdm

Which is wrong, as ttyUSB4 should have been our primary port, not ttyUSB2.

With this patch on, the rules apply only to the VID/PID pair, and we end up
getting what we really wanted:

    (ttyUSB3) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    (ttyUSB2) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    ZTE: AT port 'tty/ttyUSB1' flagged as secondary
    (ttyUSB1) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    ZTE: AT port 'tty/ttyUSB4' flagged as primary
    b_port(): (ttyUSB4) type 'at' claimed by /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB4 at (primary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB1 at (secondary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB4 data (primary)
    (/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2) tty/ttyUSB0 qcdm

https://bugzilla.gnome.org/show_bug.cgi?id=694759
2013-02-26 23:22:00 +01:00
Aleksander Morgado
3f3950bd12 plugins: log about all port type hints received from udev 2013-02-26 21:02:12 +01:00
Aleksander Morgado
ca49af0c5d mbm: fix CFUN result parsing 2013-02-22 17:54:16 +01:00
Aleksander Morgado
50ecf2a7d9 mbm: implement custom modem_power_down()
Cache last valid allowed mode always, so that we re-use it when powering up
again.
2013-02-22 17:33:49 +01:00
Aleksander Morgado
c0ce165d09 mbm: implement custom load_power_state()
We need to handle modems which appear in low-power mode (e.g. CFUN=4), so
implement a custom check of the power state. We cannot use the default check
as MBM modems use CFUN also for allowed mode handling.
2013-02-22 16:35:56 +01:00
Aleksander Morgado
9bef8531c1 iridium: use generic disconnection logic
The generic disconnection logic now already handles getting the port fully
closed and a wait time before reopening it, so no need for a custom
disconnection logic any more.
2013-02-20 16:07:02 +01:00
Aleksander Morgado
d0c18b4277 bearer-novatel-lte: fix reference counting of the 'data' port 2013-02-20 10:09:42 +01:00
Aleksander Morgado
8fb57bb553 zte: load unlock retries with +ZPINPUK
e.g:

  AT+ZPINPUK=? |
               | ZPINPUK: 3,10
               | OK
2013-02-19 15:37:43 +01:00
Aleksander Morgado
b6402a4e21 bearer,3gpp: dial operation specifies which data port to use
Instead of deciding in advance which data port to use, we let the dialling
operation gather it. For the generic dialling logic, ATD-based, always an
'AT' port will be used as data port, even if we grabbed a 'net' port. Those
plugins that can work with 'net' ports will grab the specific 'net' port
themselves.
2013-02-18 15:41:26 +01:00
Aleksander Morgado
15d34d56fd bearer: new helper 'MMBearerConnectResult' type
Instead of returning 3 variables in connect_finish(), return a single reference
counted struct. This simplifies how the result is built and passed within a
GSimpleAsyncResult to each _finish() method.

This also simplifies the dialling step in the 3GPP connection sequence, as we
can use the same new type.
2013-02-18 15:41:26 +01:00
Aleksander Morgado
1746949277 ports: add port initialization sequences instead of iface-modem's modem_init()
Instead of a custom modem_init() step in the 'Modem' interface, just add a
sequence of port initialization commands in each port.

While enabling for the first time a non-hotplugged modem, we will issue the
port initialization commands only after having run the enabling_modem_init()
step (i.e. after ATZ usually).
2013-02-18 13:47:35 +01:00
Aleksander Morgado
30639606d3 broadband-modem: new step during 'enabling_started' to initialize the modem
We previously had the modem initialization command merged with some other port
setup commands in the 'modem_init' step of the 'Modem' interface. Instead of
doing this, we now split the logic into two separate steps:

A first 'enabling_modem_init' modem initialization step is to be run just after
the ports have been opened, but only during the first enabling operation, and
only if the modem was not hotplugged. A hotplugged modem is assumed to be
properly initialized already, so no need to ATZ-it. Also, we will now wait 500ms
by default after the modem initialization command has been sent, to let it
settle down.

The second 'modem_init' step will be run during the 'Modem' interface
initialization, and it currently only holds specific setup of the primary and
secondary serial ports. We'll be modifying this logic a bit in the next commits,
so no big deal to have that step name unchanged.
2013-02-18 13:47:34 +01:00
Dan Williams
253242256c broadband-modem-longcheer: fix getting and setting of allowed modes
When setting allowed modes, a ",2" crept into the MODODR command when
porting the plugin from 0.6.  That shouldn't be there.

When getting allowed modes, 2 is UMTS preferred and 4 is GSM preferred,
which the previous code combined into only UMTS preferred.
2013-02-15 13:40:01 -06:00
Aleksander Morgado
5860de182d sierra: fix access tech reporting logic 2013-02-08 12:08:44 +01:00
Dan Williams
cd2545c2b6 broadband-modem-mbm: handle HSPA access technology in ERINFO response
HSUPA/HSPA capable devices (ex F5521gw) can report '3' here, which
we'll decide to interpret as HSPA.  It might actually be HSDPA + HSUPA,
but whatever...
2013-02-07 12:49:55 -06:00
Dan Williams
a4ad95e3da broadband-modem-longcheer: fix handling of preferred modes
Treat NONE the same as ANY and handle specific preferred modes too.
2013-02-06 16:18:51 -06:00
Dan Williams
34da83450e anydata: support QMI-based devices
Some devices (like the ADU960S) support QMI, so if the modem has a
QMI port, use it.
2013-02-06 12:00:04 -06:00
Dan Williams
90ecbe325a broadband-modem-novatel: read HDR revision for access technology
Specialize what the superclass gave us, if we can.
2013-02-06 11:57:00 -06:00