diff -Nru libqmi-1.28.6/debian/changelog libqmi-1.28.6/debian/changelog --- libqmi-1.28.6/debian/changelog 2021-06-22 19:38:23.000000000 +0800 +++ libqmi-1.28.6/debian/changelog 2021-10-06 16:21:40.000000000 +0800 @@ -1,3 +1,9 @@ +libqmi (1.28.6-2~22.04) experimental; urgency=medium + + * Apply upstream patch to display the 5G NSA status. + + -- Jerry Lee Wed, 06 Oct 2021 16:21:40 +0800 + libqmi (1.28.6-1) experimental; urgency=medium * New upstream version diff -Nru libqmi-1.28.6/debian/patches/01_qmi.patch libqmi-1.28.6/debian/patches/01_qmi.patch --- libqmi-1.28.6/debian/patches/01_qmi.patch 1970-01-01 08:00:00.000000000 +0800 +++ libqmi-1.28.6/debian/patches/01_qmi.patch 2021-10-06 16:21:03.000000000 +0800 @@ -0,0 +1,351 @@ +Description: nas: Implement NR5G TLV in "Get System Info" +Origin: upstream, https://gitlab.freedesktop.org/mobile-broadband/libqmi/-/commit/29905223c5ae6e5e4ef9246dd9dd4d01b2819d9a +Applied-Upstream: 1.30.2, https://gitlab.freedesktop.org/mobile-broadband/libqmi/-/commits/1.30.2 +Last-Update: 2021-10-05 +--- a/data/qmi-service-nas.json ++++ b/data/qmi-service-nas.json +@@ -2761,7 +2761,101 @@ + "type" : "TLV", + "since" : "1.24", + "format" : "guint32", +- "public-format" : "QmiNasLteCellAccessStatus" } ] }, ++ "public-format" : "QmiNasLteCellAccessStatus" }, ++ { "name" : "NR5G Service Status Info", ++ "id" : "0x4A", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "sequence", ++ "contents" : [ { "name" : "Service Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasServiceStatus" }, ++ { "name" : "True Service Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasServiceStatus" }, ++ { "name" : "Preferred Data Path", ++ "format" : "guint8", ++ "public-format" : "gboolean" } ] }, ++ { "name" : "NR5G System Info", ++ "id" : "0x4B", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "sequence", ++ "contents" : [ { "name" : "Domain Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Domain", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Service Capability Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Service Capability", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Roaming Status Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Roaming Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasRoamingStatus" }, ++ { "name" : "Forbidden Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Forbidden", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "LAC Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "LAC", ++ "format" : "guint16" }, ++ { "name" : "CID Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "CID", ++ "format" : "guint32" }, ++ { "name" : "Registration Reject Info Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Registration Reject Domain", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Registration Reject Cause", ++ "format" : "guint8" }, ++ { "name" : "Network ID Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "MCC", ++ "format" : "string", ++ "fixed-size" : "3" }, ++ { "name" : "MNC", ++ "format" : "string", ++ "fixed-size" : "3" }, ++ { "name" : "TAC Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "TAC", ++ "format" : "guint16" } ] }, ++ { "name" : "EUTRA with NR5G availability", ++ "id" : "0x4E", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "DCNR restriction Info", ++ "id" : "0x4F", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "NR5G Tracking Area Code", ++ "id" : "0x50", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "array", ++ "fixed-size" : "3", ++ "array-element" : { "format" : "guint8" } } ] }, + + // ********************************************************************************* + { "name" : "System Info", +@@ -3380,7 +3474,101 @@ + "type" : "TLV", + "since" : "1.0", + "format" : "guint32", +- "public-format" : "QmiNasSimRejectState" } ] }, ++ "public-format" : "QmiNasSimRejectState" }, ++ { "name" : "NR5G Service Status Info", ++ "id" : "0x4C", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "sequence", ++ "contents" : [ { "name" : "Service Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasServiceStatus" }, ++ { "name" : "True Service Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasServiceStatus" }, ++ { "name" : "Preferred Data Path", ++ "format" : "guint8", ++ "public-format" : "gboolean" } ] }, ++ { "name" : "NR5G System Info", ++ "id" : "0x4D", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "sequence", ++ "contents" : [ { "name" : "Domain Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Domain", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Service Capability Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Service Capability", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Roaming Status Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Roaming Status", ++ "format" : "guint8", ++ "public-format" : "QmiNasRoamingStatus" }, ++ { "name" : "Forbidden Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Forbidden", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "LAC Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "LAC", ++ "format" : "guint16" }, ++ { "name" : "CID Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "CID", ++ "format" : "guint32" }, ++ { "name" : "Registration Reject Info Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "Registration Reject Domain", ++ "format" : "guint8", ++ "public-format" : "QmiNasNetworkServiceDomain" }, ++ { "name" : "Registration Reject Cause", ++ "format" : "guint8" }, ++ { "name" : "Network ID Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "MCC", ++ "format" : "string", ++ "fixed-size" : "3" }, ++ { "name" : "MNC", ++ "format" : "string", ++ "fixed-size" : "3" }, ++ { "name" : "TAC Valid", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "TAC", ++ "format" : "guint16" } ] }, ++ { "name" : "EUTRA with NR5G availability", ++ "id" : "0x50", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "DCNR restriction Info", ++ "id" : "0x51", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "guint8", ++ "public-format" : "gboolean" }, ++ { "name" : "NR5G Tracking Area Code", ++ "id" : "0x52", ++ "type" : "TLV", ++ "since" : "1.30", ++ "format" : "array", ++ "fixed-size" : "3", ++ "array-element" : { "format" : "guint8" } } ] }, + + // ********************************************************************************* + { "name" : "Get Signal Info", +--- a/src/qmicli/qmicli-nas.c ++++ b/src/qmicli/qmicli-nas.c +@@ -1937,6 +1937,8 @@ + QmiNasNetworkSelectionRegistrationRestriction registration_restriction; + QmiNasLteCellAccessStatus cell_access_status; + QmiNasLteRegistrationDomain registration_domain; ++ gboolean endc_available; ++ gboolean restrict_dcnr; + + if (qmi_message_nas_get_system_info_output_get_lte_service_status ( + output, +@@ -2047,6 +2049,20 @@ + NULL)) { + g_print ("\t\tRegistration domain: '%s'\n", qmi_nas_lte_registration_domain_get_string (registration_domain)); + } ++ ++ if (qmi_message_nas_get_system_info_output_get_eutra_with_nr5g_availability ( ++ output, ++ &endc_available, ++ NULL)) { ++ g_print ("\t\t5G NSA Available: '%s'\n", endc_available ? "yes" : "no"); ++ } ++ ++ if (qmi_message_nas_get_system_info_output_get_dcnr_restriction_info ( ++ output, ++ &restrict_dcnr, ++ NULL)) { ++ g_print ("\t\tDCNR Restriction: '%s'\n", restrict_dcnr ? "yes" : "no"); ++ } + } + } + +@@ -2173,6 +2189,106 @@ + } + } + ++ /* 5G SA */ ++ { ++ QmiNasServiceStatus service_status; ++ QmiNasServiceStatus true_service_status; ++ gboolean preferred_data_path; ++ gboolean domain_valid; ++ QmiNasNetworkServiceDomain domain; ++ gboolean service_capability_valid; ++ QmiNasNetworkServiceDomain service_capability; ++ gboolean roaming_status_valid; ++ QmiNasRoamingStatus roaming_status; ++ gboolean forbidden_valid; ++ gboolean forbidden; ++ gboolean lac_valid; ++ guint16 lac; ++ gboolean cid_valid; ++ guint32 cid; ++ gboolean registration_reject_info_valid; ++ QmiNasNetworkServiceDomain registration_reject_domain; ++ guint8 registration_reject_cause; ++ gboolean network_id_valid; ++ const gchar *mcc; ++ const gchar *mnc; ++ gboolean tac_valid; ++ guint16 tac; ++ ++ if (qmi_message_nas_get_system_info_output_get_nr5g_service_status_info ( ++ output, ++ &service_status, ++ &true_service_status, ++ &preferred_data_path, ++ NULL)) { ++ g_print ("\t5G SA service:\n" ++ "\t\tStatus: '%s'\n" ++ "\t\tTrue Status: '%s'\n" ++ "\t\tPreferred data path: '%s'\n", ++ qmi_nas_service_status_get_string (service_status), ++ qmi_nas_service_status_get_string (true_service_status), ++ preferred_data_path ? "yes" : "no"); ++ ++ if (qmi_message_nas_get_system_info_output_get_nr5g_system_info ( ++ output, ++ &domain_valid, &domain, ++ &service_capability_valid, &service_capability, ++ &roaming_status_valid, &roaming_status, ++ &forbidden_valid, &forbidden, ++ &lac_valid, &lac, ++ &cid_valid, &cid, ++ ®istration_reject_info_valid,®istration_reject_domain,®istration_reject_cause, ++ &network_id_valid, &mcc, &mnc, ++ &tac_valid, &tac, ++ NULL)) { ++ if (domain_valid) ++ g_print ("\t\tDomain: '%s'\n", qmi_nas_network_service_domain_get_string (domain)); ++ if (service_capability_valid) ++ g_print ("\t\tService capability: '%s'\n", qmi_nas_network_service_domain_get_string (service_capability)); ++ if (roaming_status_valid) ++ g_print ("\t\tRoaming status: '%s'\n", qmi_nas_roaming_status_get_string (roaming_status)); ++ if (forbidden_valid) ++ g_print ("\t\tForbidden: '%s'\n", forbidden ? "yes" : "no"); ++ if (lac_valid) ++ g_print ("\t\tLocation Area Code: '%" G_GUINT16_FORMAT"'\n", lac); ++ if (cid_valid) ++ g_print ("\t\tCell ID: '%u'\n", cid); ++ if (registration_reject_info_valid) ++ g_print ("\t\tRegistration reject: '%s' (%u)\n", ++ qmi_nas_network_service_domain_get_string (registration_reject_domain), ++ registration_reject_cause); ++ if (network_id_valid) { ++ g_print ("\t\tMCC: '%s'\n", mcc); ++ if ((guchar)mnc[2] == 0xFF) ++ g_print ("\t\tMNC: '%.2s'\n", mnc); ++ else ++ g_print ("\t\tMNC: '%.3s'\n", mnc); ++ } ++ if (tac_valid) ++ g_print ("\t\tTracking Area Code: '%" G_GUINT16_FORMAT"'\n", tac); ++ } ++ } ++ } ++ ++ { ++ GArray *nr5g_tracking_area_code; ++ ++ if (qmi_message_nas_get_system_info_output_get_nr5g_tracking_area_code ( ++ output, ++ &nr5g_tracking_area_code, ++ NULL)) { ++ guint32 tac; ++ ++ g_assert (nr5g_tracking_area_code->len == 3); ++ tac = ((((g_array_index (nr5g_tracking_area_code, guint8, 0) << 8) | ++ g_array_index (nr5g_tracking_area_code, guint8, 1)) << 8) | ++ g_array_index (nr5g_tracking_area_code, guint8, 2)); ++ ++ g_print ("\t5GNR Tracking Area Code: '%" G_GUINT32_FORMAT "'\n", ++ tac); ++ } ++ } ++ + qmi_message_nas_get_system_info_output_unref (output); + operation_shutdown (TRUE); + } diff -Nru libqmi-1.28.6/debian/patches/02_qmi.patch libqmi-1.28.6/debian/patches/02_qmi.patch --- libqmi-1.28.6/debian/patches/02_qmi.patch 1970-01-01 08:00:00.000000000 +0800 +++ libqmi-1.28.6/debian/patches/02_qmi.patch 2021-10-06 16:21:34.000000000 +0800 @@ -0,0 +1,40 @@ +Description: qmicli,nas: flag as 'n/a' the 5G NSA signal quality if not connected +Origin: upstream, https://gitlab.freedesktop.org/mobile-broadband/libqmi/-/commit/b05df7b658f9cfb4c5e74a3e07913de689914a8f +Applied-Upstream: 1.30.2, https://gitlab.freedesktop.org/mobile-broadband/libqmi/-/commits/1.30.2 +Last-Update: 2021-10-05 +--- a/src/qmicli/qmicli-nas.c ++++ b/src/qmicli/qmicli-nas.c +@@ -464,19 +464,26 @@ + &rsrp, + &snr, + NULL)) { +- g_print ("5G:\n" +- "\tRSRP: '%d dBm'\n" +- "\tSNR: '%.1lf dB'\n", +- rsrp, +- (0.1) * ((gdouble)snr)); ++ g_print ("5G:\n"); ++ if (rsrp == (gint16)(0x8000)) ++ g_print ("\tRSRP: 'n/a'\n"); ++ else ++ g_print ("\tRSRP: '%d dBm'\n", rsrp); ++ if (snr == (gint16)(0x8000)) ++ g_print ("\tSNR: 'n/a'\n"); ++ else ++ g_print ("\tSNR: '%.1lf dB'\n", (0.1) * ((gdouble)snr)); + } + + /* 5G extended... */ + if (qmi_message_nas_get_signal_info_output_get_5g_signal_strength_extended (output, + &rsrq_5g, + NULL)) { +- g_print ("\tRSRQ: '%d dB'\n", +- rsrq_5g); ++ if (rsrq_5g == (gint16)(0x8000)) ++ g_print ("\tRSRQ: 'n/a'\n"); ++ else ++ g_print ("\tRSRQ: '%d dB'\n", ++ rsrq_5g); + } + + qmi_message_nas_get_signal_info_output_unref (output); diff -Nru libqmi-1.28.6/debian/patches/series libqmi-1.28.6/debian/patches/series --- libqmi-1.28.6/debian/patches/series 2021-06-22 19:38:23.000000000 +0800 +++ libqmi-1.28.6/debian/patches/series 2021-10-06 16:21:09.000000000 +0800 @@ -1 +1,3 @@ versioned_python_binary.patch +01_qmi.patch +02_qmi.patch