E.g. it may be one more layer up:
looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.4/1-8.4:1.1/ttyUSB1/tty/ttyUSB1':
KERNEL=="ttyUSB1"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.4/1-8.4:1.1/ttyUSB1':
KERNELS=="ttyUSB1"
SUBSYSTEMS=="usb-serial"
DRIVERS=="option1"
ATTRS{port_number}=="0"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8.4/1-8.4:1.1':
KERNELS=="1-8.4:1.1"
SUBSYSTEMS=="usb"
DRIVERS=="option"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
ATTRS{bInterfaceNumber}=="01"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="13"
ATTRS{interface}=="Huawei Mobile Connect - Application"
ATTRS{bInterfaceClass}=="ff"
ATTRS{authorized}=="1"
The helper method returning a variant from a MMLocationGpsRaw would
return already a full variant reference instead of a floating one, so
we were really increasing the refcount when doing g_variant_ref_sink()
in the location interface.
Fix this by consolidating all helper methods in libmm-glib that return
variants from the different MMLocationXX objects, so that they all
return full variants instead of floating ones.
The BroadMobi BM818 has inconsitent line endings and the in-call URC
regex can miss events, particularly NO CARRIER, because the regex
doesn't match. To fix this we add an optional carriage return to the
regex. This will match for the BM818's output.
The BroadMobi BM818 can time out with +CLCC calls. When this happens,
active calls are terminated due to reporting an empty list. To fix
this, we only report the call list if the +CLCC didn't result in an
error.
Outgoing calls which ring before the first +CLCC response cannot match
on the direction/state and are terminated, at least on the BroadMobi
BM818. For example:
<debug> 1 calls being established: call list polling required
<debug> (ttyUSB1) device open count is 3 (open)
<debug> (ttyUSB1): --> 'AT+CLCC<CR>'
<debug> (ttyUSB1): <-- '<CR><LF>+CLCC: 1,1,0,1,0,"",128<CR><LF>+CLCC: 2,0,3,0,0,"07763578094",129<CR><LF><CR><LF>OK<CR><LF>'
<debug> Reported 2 ongoing calls
<debug> call at index 1: direction incoming, state active, number n/a
<debug> call at index 2: direction outgoing, state ringing-out, number 07763578094
<info> Call state changed: dialing -> terminated (unknown)
<warn> unexpected incoming call to number 'n/a' reported in call list: state active
<warn> unexpected outgoing call to number '07763578094' reported in call list: state ringing-out
To fix this, we match calls in a +CLCC call list by number as
well.
New devices return a "Missing Argument" error in WDA Get Data Format,
requiring the use of the "Endpoint info" TLV. Given that all these new
devices are raw-ip only anyway, let's use this error to right away
fallback to require raw-ip in the interface.
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/177
It has the same exact format as MMBaseModemAtCommand, but its contents
are assumed heap allocated.
The only real purpose of this type is to allow defining static
constant MMBaseModemAtCommand variables without warnings when using
-Wdiscarded-qualifiers.
Useful when clamping a unsigned integer with low threshold set to 0,
which would give us compiler warnings with -Wtype-limits when using
CLAMP(), e.g.:
via/mm-broadband-modem-via.c: In function ‘handle_evdo_quality_change’:
/usr/include/glib-2.0/glib/gmacros.h:811:63: error: comparison of unsigned expression < 0 is always false [-Werror=type-limits]
811 | #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
| ^
via/mm-broadband-modem-via.c:284:19: note: in expansion of macro ‘CLAMP’
284 | quality = CLAMP (quality, 0, 100);
| ^~~~~
Let's use the suggested compat symbols instead, provided in libqmi 1.22.
mm-sim-qmi.c: In function ‘uim_read’:
mm-sim-qmi.c:170:5: error: ‘qmi_message_uim_read_transparent_input_set_session_information’ is deprecated: Use 'qmi_message_uim_read_transparent_input_set_session' instead [-Werror=deprecated-declarations]
170 | qmi_message_uim_read_transparent_input_set_session_information (
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/libqmi-glib/libqmi-glib.h:40,
from mm-port-qmi.h:23,
from mm-base-modem.h:39,
from mm-base-sim.h:25,
from mm-sim-qmi.h:22,
from mm-sim-qmi.c:29:
/usr/include/libqmi-glib/qmi-compat.h:1154:10: note: declared here
1154 | gboolean qmi_message_uim_read_transparent_input_set_session_information (
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...
test-error-helpers.c: In function ‘test_error_helpers_connection_error’:
test-error-helpers.c:36:39: error: comparison of integer expressions of different signedness: ‘guint’ {aka ‘unsigned int’} and ‘gint’ {aka ‘int’} [-Werror=sign-compare]
36 | for (i = enum_class->minimum; i <= enum_class->maximum; i++) { \
| ^~
test-qcdm-serial-port.c: In function ‘print_buf’:
test-qcdm-serial-port.c:79:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
79 | for (i = 0; i < len; i++) {
| ^
test-qcdm-serial-port.c: In function ‘server_wait_request’:
test-qcdm-serial-port.c:163:20: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
163 | } while (total < sizeof (readbuf));
| ^
test-modem-helpers.c: In function ‘test_cgev_indication’:
test-modem-helpers.c:2165:9: error: enumeration value ‘MM_3GPP_CGEV_UNKNOWN’ not handled in switch [-Werror=switch-enum]
2165 | switch (type) {
| ^~~~~~
cc1: all warnings being treated as errors
test-modem-helpers.c: In function ‘test_creg_match’:
test-modem-helpers.c:1127:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint’ {aka ‘unsigned int’} [-Werror=sign-compare]
1127 | for (i = 0; i < array->len; i++) {
| ^
kerneldevice/mm-kernel-device-udev.c: In function ‘mm_kernel_device_udev_new_from_properties’:
kerneldevice/mm-kernel-device-udev.c:770:70: error: declaration of ‘properties’ shadows a global declaration [-Werror=shadow]
770 | mm_kernel_device_udev_new_from_properties (MMKernelEventProperties *properties,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
kerneldevice/mm-kernel-device-udev.c:38:20: note: shadowed declaration is here
38 | static GParamSpec *properties[PROP_LAST];
| ^~~~~~~~~~
kerneldevice/mm-kernel-device-generic.c: In function ‘mm_kernel_device_generic_new_with_rules’:
kerneldevice/mm-kernel-device-generic.c:954:68: error: declaration of ‘properties’ shadows a global declaration [-Werror=shadow]
954 | mm_kernel_device_generic_new_with_rules (MMKernelEventProperties *properties,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
kerneldevice/mm-kernel-device-generic.c:46:20: note: shadowed declaration is here
46 | static GParamSpec *properties[PROP_LAST];
| ^~~~~~~~~~
kerneldevice/mm-kernel-device-generic.c: In function ‘mm_kernel_device_generic_new’:
kerneldevice/mm-kernel-device-generic.c:971:57: error: declaration of ‘properties’ shadows a global declaration [-Werror=shadow]
971 | mm_kernel_device_generic_new (MMKernelEventProperties *properties,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
kerneldevice/mm-kernel-device-generic.c:46:20: note: shadowed declaration is here
46 | static GParamSpec *properties[PROP_LAST];
| ^~~~~~~~~~
mm-modem-helpers-mbim.c: In function ‘mm_mobile_equipment_error_from_mbim_nw_error’:
mm-modem-helpers-mbim.c:206:5: error: enumeration value ‘MBIM_NW_ERROR_IMEI_NOT_ACCEPTED’ not handled in switch [-Werror=switch-enum]
206 | switch (nw_error) {
| ^~~~~~
mm-modem-helpers-mbim.c: In function ‘mm_bearer_ip_family_from_mbim_context_ip_type’:
mm-modem-helpers-mbim.c:403:5: error: enumeration value ‘MBIM_CONTEXT_IP_TYPE_DEFAULT’ not handled in switch [-Werror=switch-enum]
403 | switch (ip_type) {
| ^~~~~~
mm-modem-helpers-qmi.c: In function ‘mm_qmi_unique_id_to_firmware_unique_id’:
mm-modem-helpers-qmi.c:1653:19: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘guint’ {aka ‘unsigned int’} [-Werror=sign-compare]
1653 | for (i = 0; i < qmi_unique_id->len; i++) {
| ^
mm-modem-helpers-qmi.c:1679:11: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘guint’ {aka ‘unsigned int’} [-Werror=sign-compare]
1679 | if (i != qmi_unique_id->len)
| ^~
mm-modem-helpers-qmi.c: In function ‘mm_3gpp_facility_to_qmi_uim_facility’:
mm-modem-helpers-qmi.c:137:5: error: enumeration value ‘MM_MODEM_3GPP_FACILITY_NONE’ not handled in switch [-Werror=switch-enum]
137 | switch (mm) {
| ^~~~~~
mm-modem-helpers-qmi.c:137:5: error: enumeration value ‘MM_MODEM_3GPP_FACILITY_SIM’ not handled in switch [-Werror=switch-enum]
mm-modem-helpers-qmi.c:137:5: error: enumeration value ‘MM_MODEM_3GPP_FACILITY_FIXED_DIALING’ not handled in switch [-Werror=switch-enum]
mm-modem-helpers-qmi.c:137:5: error: enumeration value ‘MM_MODEM_3GPP_FACILITY_PH_FSIM’ not handled in switch [-Werror=switch-enum]
...
mm-sms-part-3gpp.c: In function ‘mm_sms_part_3gpp_new_from_binary_pdu’:
mm-sms-part-3gpp.c:721:9: error: enumeration value ‘MM_SMS_ENCODING_8BIT’ not handled in switch [-Werror=switch-enum]
721 | switch (user_data_encoding) {
| ^~~~~~
mm-sms-part-3gpp.c: In function ‘mm_sms_part_3gpp_get_submit_pdu’:
mm-sms-part-3gpp.c:917:5: error: enumeration value ‘MM_SMS_ENCODING_UNKNOWN’ not handled in switch [-Werror=switch-enum]
917 | switch (mm_sms_part_get_encoding (part)) {
| ^~~~~~
mm-sms-part-3gpp.c:917:5: error: enumeration value ‘MM_SMS_ENCODING_8BIT’ not handled in switch [-Werror=switch-enum]
mm-sms-part-3gpp.c: In function ‘mm_sms_part_3gpp_new_from_binary_pdu’:
mm-sms-part-3gpp.c:607:9: error: enumeration value ‘MM_SMS_ENCODING_UNKNOWN’ not handled in switch [-Werror=switch-enum]
607 | switch (user_data_encoding) {
| ^~~~~~
mm-sms-part-3gpp.c:714:9: error: enumeration value ‘MM_SMS_ENCODING_UNKNOWN’ not handled in switch [-Werror=switch-enum]
714 | switch (user_data_encoding) {
| ^~~~~~
mm-charsets.c: In function ‘mm_charset_gsm_unpacked_to_utf8’:
mm-charsets.c:423:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
423 | for (i = 0; i < len; i++) {
| ^
mm-charsets.c: In function ‘pccp437_is_subset’:
mm-charsets.c:544:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
544 | for (i = 0; i < G_N_ELEMENTS (t); i++) {
| ^
mm-charsets.c: In function ‘pcdn_is_subset’:
mm-charsets.c:575:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Werror=sign-compare]
575 | for (i = 0; i < sizeof (t) / sizeof (t[0]); i++) {
| ^
mm-charsets.c: In function ‘mm_charset_gsm_unpack’:
mm-charsets.c:657:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
657 | for (i = 0; i < num_septets; i++) {
| ^
mm-charsets.c: In function ‘mm_charset_gsm_pack’:
mm-charsets.c:701:42: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
701 | for (i = 0, lshift = start_offset; i < src_len; i++) {
| ^
mm-modem-helpers.c: In function ‘mm_3gpp_get_pdp_type_from_ip_family’:
mm-modem-helpers.c:4166:5: error: enumeration value ‘MM_BEARER_IP_FAMILY_NONE’ not handled in switch [-Werror=switch-enum]
4166 | switch (family) {
| ^~~~~~
mm-modem-helpers.c:4166:5: error: enumeration value ‘MM_BEARER_IP_FAMILY_ANY’ not handled in switch [-Werror=switch-enum]
mm-port-qmi.c:353:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
353 | ctx->step++;
| ~~~~~~~~~^~
mm-port-qmi.c:356:5: note: here
356 | case PORT_OPEN_STEP_CHECK_OPENING:
| ^~~~
mm-port-qmi.c:366:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
366 | ctx->step++;
| ~~~~~~~~~^~
mm-port-qmi.c:369:5: note: here
369 | case PORT_OPEN_STEP_CHECK_ALREADY_OPEN:
| ^~~~
mm-port-qmi.c:376:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
376 | ctx->step++;
| ~~~~~~~~~^~
mm-port-qmi.c:379:5: note: here
379 | case PORT_OPEN_STEP_DEVICE_NEW: {
| ^~~~
mm-port-qmi.c:424:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
424 | ctx->step++;
| ~~~~~~~~~^~
mm-port-qmi.c:427:5: note: here
427 | case PORT_OPEN_STEP_ALLOCATE_WDA_CLIENT:
| ^~~~
mm-port-qmi.c:474:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
474 | ctx->step++;
| ~~~~~~~~~^~
mm-port-qmi.c:477:5: note: here
477 | case PORT_OPEN_STEP_SET_KERNEL_DATA_FORMAT:
| ^~~~
mm-port-serial-qcdm.c: In function ‘find_qcdm_start’:
mm-port-serial-qcdm.c:51:19: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint’ {aka ‘unsigned int’} [-Werror=sign-compare]
51 | for (i = 0; i < response->len; i++) {
| ^
mm-port-serial.c: In function ‘port_serial_process_command’:
mm-port-serial.c:605:16: error: this statement may fall through [-Werror=implicit-fallthrough=]
605 | if (written > 0) {
| ^
mm-port-serial.c:611:9: note: here
611 | case G_IO_STATUS_AGAIN:
| ^~~~