aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-10-12build: include telit helpers in TELIT_COMMON_LIBADD_FLAGSAleksander Morgado
The dell plugin needs them. ModemManager[727]: <warn> [1476194360.614829] [mm-plugin-manager.c:1494] load_plugin(): [plugin manager] could not load plugin '/usr/lib64/ModemManager/libmm-plugin-dell.so': /usr/lib64/ModemManager/libmm-plugin-dell.so: undefined symbol: mm_telit_get_band_flag https://bugs.freedesktop.org/show_bug.cgi?id=98207 Reported-by: Lubomir Rintel <lkundrak@v3.sk>
2016-10-12plugins: only export useful symbolsLubomir Rintel
This should avoid poluting the name space and also make module loading faster.
2016-10-12build: limit the available glib functionality to the version we supportLubomir Rintel
Otherwise we can accidentally use something that we ought not. Also, there's deprecation warnings for stuff that's not deprecated in the version we support yet: mm-modem-simple.c: In function 'mm_modem_simple_connect_finish': mm-modem-simple.c:117:5: warning: 'g_simple_async_result_propagate_error' is deprecated [-Wdeprecated-declarations] if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) ^~
2016-10-11telit: fix supported and current bands query with GE910Daniele Palmas
GE910 is a 2g only modem and when queried for bands it returns only a 2g set of bands: --> 'AT#BND=?<CR>' <-- '<CR><LF>#BND: (0-3)<CR><LF><CR><LF>OK<CR><LF>' Current regex fails, since it considers the 3g bands block mandatory. A similar problem happens for current bands. This patch modifies the regular expressions for properly supporting GE910 and updates tests.
2016-10-06telit: add GE910 #PORTCFG layoutsDaniele Palmas
GE910 family supports #PORTCFG layouts different than HE910 family ones. This patch properly tags GE910 ports according to Telit document "GE910 Family Ports Arrangements, 1vv0301049"
2016-10-06telit: add udev rules for supporting GE910Daniele Palmas
This patch adds the udev rules for supporting GE910 (PID 0x22)
2016-10-05huawei: handle some weird SYSCFG acquisition ordersDan Williams
<debug> (ttyUSB2): --> 'AT^SYSCFG?<CR>' <debug> (ttyUSB2): <-- '<CR><LF>^SYSCFG:14,2,400380,1,2<CR><LF><CR><LF>OK<CR><LF>' <warn> couldn't load current allowed/preferred modes: 'No SYSCFG combination found matching the current one (14,2)' 14,2 means "WCDMA-only; acquire WCDMA then GSM" which is somewhat non-sensical. The supported modes parsing doesn't generate this combination because it doesn't really make sense, so current mode matching failed. Just fix up the non-sensical acquisition order to 0 (automatic).
2016-10-04kerneldevice,generic: support ID_USB_INTERFACE_NUM and some other udev ↵Aleksander Morgado
properties We need at least ID_USB_INTERFACE_NUM, as some plugins (Huawei, Telit, Option) require this property when gathering port type hints. We also add support for other properties (ID_VENDOR_ID, ID_MODEL_ID...) as we already have those values preloaded.
2016-09-29core: allow building and running without udevAleksander Morgado
Instead of relying on the udev daemon and GUDev to manage the devices reported by the kernel, we can now run ModemManager relying solely on the kernel events reported via the new ReportKernelEvent() API. Therefore, the '--no-auto-scan' option is implicit for the ModemManager daemon when udev is disabled in the build. Additionally, a new custom implementation of the kernel device object is provided, which uses sysfs to load the properties and attributes required in each kernel device, instead of using a GUdevDevice. The udev rule files are kept in place, and a simple custom parser is provided which preloads all rules in memory once and then applies them to the different kernel objects reported via ReportKernelEvent(), e.g. to set port type hints. A simple unit test setup is prepared to validate the udev rules during the `check' Makefile target.
2016-09-29core: use the kernel device object in the port object and the plugin interfaceAleksander Morgado
The mm_base_modem_grab_port() now receives a MMKernelDevice directly from the plugin, which is then stored in the MMPort corresponding to the port. This means that we have direct access to e.g. all properties set by udev rules everywhere, and we don't need additional GUdevClient objects (e.g. like the one used in the Huawei plugin to detect NDISDUP support during runtime). For virtual ports (e.g. generated during unit tests), we have a new 'generic' kernel device object which just provides the values from the kernel device properties given during its creation.
2016-09-29core: allow disabling auto-scan and notifying ports one by one via APIAleksander Morgado
This commit enables a new core ModemManager daemon option, so that automatic detection of available modems is totally disabled: '--no-auto-scan'. Note that this option also replaces the previously used '--test-no-auto-scan' option, which was only used during tests. Along with the new ModemManager option, a new ReportKernelEvent() method in the API is defined, which allows notifying the daemon of which interfaces it should be accessing, as well as the main details of each interface. The only mandatory parameters in the new method are 'action' (add/remove), 'name' (the name of the interface) and 'subsystem' (the subsystem of the interface). The mmcli tool has support for using the new api method via several new options: * The '--report-kernel-event' option allows specifying device ports one by one, and is a direct mapping of the ReportKernelEvent() method: $ sudo mmcli --report-kernel-event="action=add,name=wwan0,subsystem=net" $ sudo mmcli --report-kernel-event="action=add,name=cdc-wdm0,subsystem=usbmisc" * The '--report-kernel-event-auto-scan' option uses udev monitoring to notify events automatically to the daemon. This allows to operate in a way equivalent to the default daemon operation (with implicit auto-scan). Worth noting that the ReportKernelEvent() method is only usable when '--no-auto-scan' is explicitly used in the daemon. An error will be reported if the method is tried while standard udev monitoring is enabled (implicit if auto scan isn't explicitly disabled in the daemon). If mmcli is going to be used only to report 'real time' events, an optional '--initial-kernel-events=[PATH]' may be given in the ModemManager call to automatically process a set of port kernel events one by one on boot. The file may e.g. contain: action=add,name=wwan0,subsystem=net action=add,name=cdc-wdm0,subsystem=usbmisc
2016-09-29core: new kernel device object instead of an explicit GUdevDeviceAleksander Morgado
Instead of relying constantly on GUdevDevice objects reported by GUdev, we now use a new generic object (MMKernelDevice) for which we provide an initial GUdev based backend.
2016-09-29core: allow identifying devices by a user-provided 'uid'Aleksander Morgado
All ports of the same modem reported by the kernel will all be associated with a common 'uid' (unique id), which uniquely identifies the physical device. This logic was already in place, what we do now is avoid calling it the 'sysfs path' of the physical device, because we may not want to use that to identify a device. This logic now also enables the possibility of "naming" the modems in a unique way by setting the "ID_MM_PHYSDEV_UID" property in the "usb_device" that owns all the ports. E.g. a custom device has 4 modems in 4 different USB ports. The device path of each USB device will always be the same, so the naming rules could go like this: $ vim /usr/lib/udev/rules.d/78-mm-naming.rules ACTION!="add|change|move", GOTO="mm_naming_rules_end" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.1", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-1" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.2", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-2" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.3", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-3" DEVPATH=="/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5.4", ENV{ID_MM_PHYSDEV_UID}="USB-MODEM-4" LABEL="mm_naming_rules_end" Each of the modems found will have a unique UID retrieved from the previous list of rules. Then, "mmcli" has also been updated to allow using the UID instead of the modem DBus path or index, e.g.: $ sudo mmcli -m USB-MODEM-1 /org/freedesktop/ModemManager1/Modem/0 (device id '988d83252c0598f670c2d69d5f41e077204a92fd') ------------------------- Hardware | manufacturer: 'ZTE CORPORATION' | model: 'MF637' | revision: 'BD_W7P673A3F3V1.0.0B04' | supported: 'gsm-umts' | current: 'gsm-umts' | equipment id: '356516027657837' ------------------------- System | device: 'USB-MODEM-1' | drivers: 'option' | plugin: 'ZTE' | primary port: 'ttyUSB5' | ports: 'ttyUSB5 (at)' ... $ sudo mmcli -m USB-MODEM-1 --enable ...
2016-09-28mmcli,ussd: don't rely on lock status to allow actionsAleksander Morgado
Commit 001f35234e16d7aeb2ed1282ba3b57aea73c5a9e fixed this very same thing in all the other interface actions, but 3GPP USSD actions were not fixed. https://bugs.freedesktop.org/show_bug.cgi?id=97954
2016-09-22base-modem: add missing 'reprobe' property setupAleksander Morgado
The sim hotswap logic likely just uses the getter/setter methods, but we should anyway fix the property definition bits.
2016-09-22blacklist: add another Infineon flashloader deviceDaniele Palmas
This patch adds another Infineon flashloader device 0x8087/0x0801 to the blacklist Reference to the kernel commit: github.com/torvalds/linux/commit/f190fd92458da3e869b4e2c6289e2c617490ae53
2016-09-18huawei: fix interface class/subclass/protocol matchingAleksander Morgado
Commit a66871a2876be2236f634ff6b5e59d20de1ce5df introduced an additional ATTRS{idVendor} match condition in the same rules matching by interface class, subclass and protocol. We shouldn't be doing that because we cannot mix parent attribute matchings from different parents.
2016-09-18dell,telit: set one tag per rule matchAleksander Morgado
2016-09-18udev: fix tagging per interface numberAleksander Morgado
Commit 7ff57f9808f35d434b638a67b84481271c67c90e introduced a change to try to use ATTRS{bInterfaceNumber} as a common way to match by interface number, but this logic is broken because all the rules that we use to match by interface number (attribute in the interface device) also require matching by idVendor and idProduct (attributes in the physdev device), and udev rules forbid matches from more than one parent device at a time. We could use ATTR{bInterfaceNumber} (instead of ATTRS) to tag the actual USB interface device, but that would require a change in all the plugins to look for the tag not in the TTY device, but in its parent. So, recover the original behavior, where a hidden property is created containing the first bInterfaceNumber found in the list of parent devices, and then run the matches against idVendor and idProduct only if the hidden property is found with the expected value.
2016-09-18udev: fix SUBSYSTEMS and ATTRS{idVendor} checksAleksander Morgado
Rules with a single condition where a parent property is checked with != don't work properly. E.g.: SUBSYSTEMS!="usb", GOTO="end" or: ATTRS{idVendor}!="abcd", GOTO="end" Instead, we can mix both those previous parent rules and match them: SUBSYSTEMS=="usb",ATTRS{idVendor}=="abcd", GOTO="next" GOTO="end" LABEL="next" # Apply rules here LABEL="end" In this case both SUBSYSTEMS and ATTRS conditions apply to the parent usb_device (idVendor attribute is only available in the usb_device), so they apply to all ports of the same device.
2016-09-08broadband-modem-huawei: fix missing return in unsolicited voice message enableDan Williams
2016-08-31broadband-modem-huawei: implement Modem.Signal extended signal info interfaceDan Williams
Implement the detailed signal info interface for some Huawei 3GPP modems including those based on HiSilicon chipsets like the E3276. Known not to work on many Qualcomm-based Huawei modems like E392, E397, and E367 as they don't support the ^HCSQ command, but they do support QMI and so have access to the extended signal interface via QMI.
2016-08-29blacklist: add blacklist udev rule for U-blox7 GPS/GLOSNASS USB dongle.Tabor Kelly
Signed-off-by: Tabor Kelly <t.kelly@trailtech.net>
2016-08-15core: use MM-specific logging methods always instead of the generic GLib onesAleksander Morgado
2016-08-12api,signal: fix LTE signal dictionary docstringDan Williams
2016-08-10core: minor coding style changesAleksander Morgado
2016-08-10telit: add support to SIM hot swapCarlo Lobrano
MMBroadbandModemTelit: * added logic to set MMBroadbandModem's SIM_HOT_SWAP property to TRUE * added function to enable QSS unsolicited * added QSS unsolicited handler
2016-08-10modem: support SIM hot swapCarlo Lobrano
BaseModem added reprobe property. MMDevice added logic to recreate the modem if it is set invalid and "to reprobe" MMBroadbandModem * added initialization step for SIM hot swap: 1. keep dedicated ports open to listen to modem's unsolicited 2. dedicated error management in case of initialization failure due to SIM missing * added function to be called in order to act upon SIM insertion/removal: 1. close dedicated ports 2. set the modem to be reprobed 3. disable modem * added SIM HOT SWAP boolean property MMIfaceModem * added initialization step for SIM hot swap, if supported by the plugin * dedicated error management in case of initialization failure due to SIM missing
2016-08-10api,signal: Ec/Io is in dB, not dBmAleksander Morgado
2016-08-10libmm-glib,helpers: don't warn when trying to read invalid match info indexAleksander Morgado
We may want to use the mm_get_()_from_match_info() calls to read optional items, so that the method returns FALSE if the item index doesn't apply. So, avoid the implicit warning issued by g_return_val_if_fail().
2016-08-06device: ignored ports are also owned by the device, so include them in lookupAleksander Morgado
2016-08-06mtk,udev: single 'usb' subsystems checkAleksander Morgado
2016-08-06udev: simpler check for rfcomm device namesAleksander Morgado
Just the same kind of match we use for cdc-wdm devices.
2016-08-06zte,udev: avoid making the rules tty-only, and simplify single vendor checkAleksander Morgado
The rules were matched only against devices with an exact 'tty' subsystem, and that means that we were not properly adding additional tags on e.g. wwan or cdc-wdm devices.
2016-08-06simtech,udev: simplify single vendor checkAleksander Morgado
2016-08-06nokia,udev: simplify single vendor checkAleksander Morgado
2016-08-06telit,udev: single 'usb' subsystems check and simplified single vendor checkAleksander Morgado
2016-08-06mbm,udev: additional per-vendor conditions for quicker processingAleksander Morgado
2016-08-06huawei,udev: single 'usb' systems check, and per-rule vendor-specific conditionsAleksander Morgado
2016-08-06longcheer,udev: single 'usb' subsystems checkAleksander Morgado
2016-08-06cinterion,udev: ensure 'usb' subsystems before idVendor/idProduct rulesAleksander Morgado
2016-08-06haier,udev: simplify single vendor checkAleksander Morgado
2016-08-06x22x,udev: single 'usb' subsystems checkAleksander Morgado
2016-08-06udev: replace ENV{.MM_USBIFNUM} conditions with ATTRS{bInterfaceNumber}Aleksander Morgado
2016-08-06udev: replace ENV{ID_VENDOR_ID} conditions with ATTRS{idVendor}Aleksander Morgado
2016-08-06udev: remove ENV{DEVTYPE}!="usb_device" rulesAleksander Morgado
They're actually a subcase of SUBSYSTEM!="usb", which we apply just before.
2016-08-02base-call: formatting cleanupsDan Williams
2016-07-27broadband-modem/libqcdm: add signal strength from QCDM EVDO Pilot Sets log ↵Dan Williams
messages When a CDMA-only modem is registered with the EVDO network, its not possible to read signal strength in the following cases: 1) while a data connection is active on single-AT-port modems, because the AT port is used for PPP and not available for AT+CSQ, AT+CIND or vendor-specific signal strength commands 2) when the modem reports only CDMA 1x signal strength with AT+CSQ Now that we have a reasonable interpretation of RSSI from the QCDM EVDO Pilot Sets V2 log messgae, use that when other means of getting signal strength aren't available.
2016-07-27blacklist: include some more ArduinosLubomir Rintel
All "2a03 dog hunter AG" devices seem to be Arduinos. https://bugzilla.redhat.com/show_bug.cgi?id=1261040
2016-07-26telit: adding a short delay after SIM unlockCarlo Lobrano
A short delay is necessary with some SIMs when they have just been unlocked. Using 1 second as secure margin.