[PATCH] nas: Implement vendor specific "Swi Get Status"
Dan Williams
dcbw at redhat.com
Wed Aug 21 21:54:12 UTC 2019
On Wed, 2019-08-21 at 16:29 -0500, Dan Williams wrote:
> On Tue, 2019-08-20 at 12:19 +0200, Bjørn Mork wrote:
> > This Sierra Wireless (swi) specific request returns some of the
> > system
> > info known from the swi specific AT command "!GSTATUS?".
>
> Thanks, submitted as an MR here:
>
> https://gitlab.freedesktop.org/mobile-broadband/libqmi/merge_requests/62
Merged.
Dan
> Dan
>
> > [/dev/cdc-wdm0] Successfully got status:
> > Common Info:
> > Temperature: '32'
> > Modem mode: 'online'
> > System mode: 'lte'
> > IMS registration state: 'no-srv'
> > Packet service state: 'attached'
> > LTE info:
> > Band: 'bc-3'
> > Bandwidth: '20'
> > RX channel: '1450'
> > TX channel: '19450'
> > EMM state: 'registered'
> > EMM sub state: '0'
> > EMM connection state: 'rrc-connecting'
> >
> > Signed-off-by: Bjørn Mork <bjorn at mork.no>
> > ---
> > data/qmi-service-nas.json | 56 ++++++++++++-
> > src/libqmi-glib/qmi-enums-nas.h | 138
> > ++++++++++++++++++++++++++++++++
> > src/qmicli/qmicli-nas.c | 110 +++++++++++++++++++++++++
> > 3 files changed, 303 insertions(+), 1 deletion(-)
> >
> > diff --git a/data/qmi-service-nas.json b/data/qmi-service-nas.json
> > index 1c5ab545a5e2..07763a16d4bc 100644
> > --- a/data/qmi-service-nas.json
> > +++ b/data/qmi-service-nas.json
> > @@ -3579,5 +3579,59 @@
> > "p
> > ub
> > lic-format" : "QmiNasScellState" },
> > {
> > "name" : "Cell Index",
> > "f
> > or
> > mat" : "guint8" } ] },
> > - "prerequisites" : [ { "common-ref" :
> > "Success" } ] } ] }
> > + "prerequisites" : [ { "common-ref" :
> > "Success" } ] } ] },
> > +
> > + //
> > *******************************************************************
> > **
> > ************
> > + { "name" : "Swi Get Status",
> > + "type" : "Message",
> > + "service" : "NAS",
> > + "id" : "0x5556",
> > + "vendor" : "0x1199",
> > + "since" : "1.20",
> > + "output" : [ { "common-ref" : "Operation Result" },
> > + { "name" : "Common Info",
> > + "id" : "0x01",
> > + "type" : "TLV",
> > + "since" : "1.20",
> > + "format" : "sequence",
> > + "contents" : [ { "name" : "Temperature",
> > + "format" : "guint8"},
> > + { "name" : "Modem
> > Mode",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiModemMode"},
> > + { "name" : "System
> > Mode",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiSystemMode"},
> > + { "name" : "IMS
> > Registration State",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiImsRegState"},
> > + { "name" : "Packet
> > Service State",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiPsState" } ],
> > + "prerequisites" : [ { "common-ref" :
> > "Success"
> > } ] },
> > + { "name" : "LTE Info",
> > + "id" : "0x10",
> > + "type" : "TLV",
> > + "since" : "1.20",
> > + "format" : "sequence",
> > + "contents" : [ { "name" : "Band",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasActiveBand" },
> > + { "name" :
> > "Bandwidth",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasDLBandwidth"},
> > + { "name" : "RX
> > Channel",
> > + "format" :
> > "guint16"
> > },
> > + { "name" : "TX
> > Channel",
> > + "format" :
> > "guint16"
> > },
> > + { "name" : "EMM
> > State",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiEmmState"},
> > + { "name" : "EMM Sub
> > State",
> > + "format" : "guint8"
> > },
> > + { "name" : "EMM
> > Connection State",
> > + "format" :
> > "guint8",
> > + "public-format" :
> > "QmiNasSwiEmmConnectionState" } ],
> > + "prerequisites" : [ { "common-ref" :
> > "Success"
> > } ] } ] }
> > +
> > ]
> > diff --git a/src/libqmi-glib/qmi-enums-nas.h b/src/libqmi-glib/qmi-
> > enums-nas.h
> > index 4f7f2544e8ca..b30e2efb8827 100644
> > --- a/src/libqmi-glib/qmi-enums-nas.h
> > +++ b/src/libqmi-glib/qmi-enums-nas.h
> > @@ -1525,4 +1525,142 @@ typedef enum {
> > QMI_NAS_USAGE_PREFERENCE_DATA_CENTRIC = 0x02
> > } QmiNasUsagePreference;
> >
> > +/**
> > + * QmiNasSwiModemMode:
> > + * @QMI_NAS_SWI_MODEM_MODE_POWERING_OFF: Powering off
> > + * @QMI_NAS_SWI_MODEM_MODE_FACTORY_TEST: Factory test
> > + * @QMI_NAS_SWI_MODEM_MODE_OFFLINE: Offline
> > + * @QMI_NAS_SWI_MODEM_MODE_OFFLINE_AMPS: Offline AMPS
> > + * @QMI_NAS_SWI_MODEM_MODE_OFFLINE_CDMA: Offline CDMA
> > + * @QMI_NAS_SWI_MODEM_MODE_ONLINE: Online
> > + * @QMI_NAS_SWI_MODEM_MODE_LOW_POWER: Low power
> > + * @QMI_NAS_SWI_MODEM_MODE_RESETTING: Resetting
> > + * @QMI_NAS_SWI_MODEM_MODE_NETWORK_TEST: Network test
> > + * @QMI_NAS_SWI_MODEM_MODE_OFFLINE_REQUEST: Offline request
> > + * @QMI_NAS_SWI_MODEM_MODE_PSEUDO_ONLINE: Pseudo online
> > + * @QMI_NAS_SWI_MODEM_MODE_RESETTING_MODEM: Resetting modem
> > + * @QMI_NAS_SWI_MODEM_MODE_UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_MODEM_MODE_POWERING_OFF = 0x00,
> > + QMI_NAS_SWI_MODEM_MODE_FACTORY_TEST = 0x01,
> > + QMI_NAS_SWI_MODEM_MODE_OFFLINE = 0x02,
> > + QMI_NAS_SWI_MODEM_MODE_OFFLINE_AMPS = 0x03,
> > + QMI_NAS_SWI_MODEM_MODE_OFFLINE_CDMA = 0x04,
> > + QMI_NAS_SWI_MODEM_MODE_ONLINE = 0x05,
> > + QMI_NAS_SWI_MODEM_MODE_LOW_POWER = 0x06,
> > + QMI_NAS_SWI_MODEM_MODE_RESETTING = 0x07,
> > + QMI_NAS_SWI_MODEM_MODE_NETWORK_TEST = 0x08,
> > + QMI_NAS_SWI_MODEM_MODE_OFFLINE_REQUEST = 0x09,
> > + QMI_NAS_SWI_MODEM_MODE_PSEUDO_ONLINE = 0x0a,
> > + QMI_NAS_SWI_MODEM_MODE_RESETTING_MODEM = 0x0b,
> > + QMI_NAS_SWI_MODEM_MODE_UNKNOWN = 0xff
> > +} QmiNasSwiModemMode;
> > +
> > +/**
> > + * QmiNasSwiSystemMode:
> > + * @QMI_NAS_SWI_SYSTEM_MODE_NO_SERVICE: No service
> > + * @QMI_NAS_SWI_SYSTEM_MODE_AMPS: AMPS
> > + * @QMI_NAS_SWI_SYSTEM_MODE_CDMA: CDMA
> > + * @QMI_NAS_SWI_SYSTEM_MODE_GSM: GSM
> > + * @QMI_NAS_SWI_SYSTEM_MODE_HDR: HDR
> > + * @QMI_NAS_SWI_SYSTEM_MODE_WCDMA: WCDMA
> > + * @QMI_NAS_SWI_SYSTEM_MODE_GPS: GPS
> > + * @QMI_NAS_SWI_SYSTEM_MODE_WLAN: WLAN
> > + * @QMI_NAS_SWI_SYSTEM_MODE_LTE: LTE
> > + * @QMI_NAS_SWI_SYSTEM_MODE_UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_SYSTEM_MODE_NO_SERVICE = 0x00,
> > + QMI_NAS_SWI_SYSTEM_MODE_AMPS = 0x01,
> > + QMI_NAS_SWI_SYSTEM_MODE_CDMA = 0x02,
> > + QMI_NAS_SWI_SYSTEM_MODE_GSM = 0x03,
> > + QMI_NAS_SWI_SYSTEM_MODE_HDR = 0x04,
> > + QMI_NAS_SWI_SYSTEM_MODE_WCDMA = 0x05,
> > + QMI_NAS_SWI_SYSTEM_MODE_GPS = 0x06,
> > + QMI_NAS_SWI_SYSTEM_MODE_WLAN = 0x08,
> > + QMI_NAS_SWI_SYSTEM_MODE_LTE = 0x09,
> > + QMI_NAS_SWI_SYSTEM_MODE_UNKNOWN = 0xff
> > +} QmiNasSwiSystemMode;
> > +
> > +/**
> > + * QmiNasSwiImsRegState:
> > + * @QMI_NAS_SWI_IMS_REG_NO_SRV: No service
> > + * @QMI_NAS_SWI_IMS_REG_IN_PROG: In prog
> > + * @QMI_NAS_SWI_IMS_REG_FAILED: Failed
> > + * @QMI_NAS_SWI_IMS_REG_LIMITED: Limited
> > + * @QMI_NAS_SWI_IMS_REG_FULL_SRV: Full service
> > + * @QMI_NAS_SWI_IMS_REG__UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_IMS_REG_NO_SRV = 0x00,
> > + QMI_NAS_SWI_IMS_REG_IN_PROG = 0x01,
> > + QMI_NAS_SWI_IMS_REG_FAILED = 0x02,
> > + QMI_NAS_SWI_IMS_REG_LIMITED = 0x03,
> > + QMI_NAS_SWI_IMS_REG_FULL_SRV = 0x04,
> > + QMI_NAS_SWI_IMS_REG__UNKNOWN = 0xff
> > +} QmiNasSwiImsRegState;
> > +
> > +/**
> > + * QmiNasSwiPsState:
> > + * @QMI_NAS_SWI_PS_STATE_ATTACHED: Attached
> > + * @QMI_NAS_SWI_PS_STATE_DETACHED: Detached
> > + * @QMI_NAS_SWI_PS_STATE_UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_PS_STATE_ATTACHED = 0x00,
> > + QMI_NAS_SWI_PS_STATE_DETACHED = 0x01,
> > + QMI_NAS_SWI_PS_STATE_UNKNOWN = 0xff
> > +} QmiNasSwiPsState;
> > +
> > +/**
> > + * QmiNasSwiEmmState:
> > + * @QMI_NAS_SWI_EMM_STATE_DEREGISTERED: Deregistered
> > + * @QMI_NAS_SWI_EMM_STATE_REG_INITIATED: Registration initiated
> > + * @QMI_NAS_SWI_EMM_STATE_REGISTERED: Registered
> > + * @QMI_NAS_SWI_EMM_STATE_TAU_INITIATED: TAU initiated
> > + * @QMI_NAS_SWI_EMM_STATE_SR_INITIATED: SR initiated
> > + * @QMI_NAS_SWI_EMM_STATE_DEREG_INITIATED: Deregistration
> > initiated
> > + * @QMI_NAS_SWI_EMM_STATE_INVALID: Invalid
> > + * @QMI_NAS_SWI_EMM_STATE_UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_EMM_STATE_DEREGISTERED = 0x00,
> > + QMI_NAS_SWI_EMM_STATE_REG_INITIATED = 0x01,
> > + QMI_NAS_SWI_EMM_STATE_REGISTERED = 0x02,
> > + QMI_NAS_SWI_EMM_STATE_TAU_INITIATED = 0x03,
> > + QMI_NAS_SWI_EMM_STATE_SR_INITIATED = 0x04,
> > + QMI_NAS_SWI_EMM_STATE_DEREG_INITIATED = 0x05,
> > + QMI_NAS_SWI_EMM_STATE_INVALID = 0x06,
> > + QMI_NAS_SWI_EMM_STATE_UNKNOWN = 0xff
> > +} QmiNasSwiEmmState;
> > +
> > +/**
> > + * QmiNasSwiEmmConnectionState:
> > + * @QMI_NAS_SWI_EMM_CONN_STATE_RRC_IDLE: RRC idle
> > + * @QMI_NAS_SWI_EMM_CONN_STATE_WAITING_RRC_CFM: Waiting RRC Cfm
> > + * @QMI_NAS_SWI_EMM_CONN_STATE_RRC_CONNECTING: RRC connecting
> > + * @QMI_NAS_SWI_EMM_CONN_STATE_RRC_RELEASING: RRC releasing
> > + * @QMI_NAS_SWI_EMM_CONN_STATE_UNKNOWN: Unknown
> > + *
> > + * Since: 1.20
> > + */
> > +typedef enum {
> > + QMI_NAS_SWI_EMM_CONN_STATE_RRC_IDLE = 0x00,
> > + QMI_NAS_SWI_EMM_CONN_STATE_WAITING_RRC_CFM = 0x01,
> > + QMI_NAS_SWI_EMM_CONN_STATE_RRC_CONNECTING = 0x02,
> > + QMI_NAS_SWI_EMM_CONN_STATE_RRC_RELEASING = 0x03,
> > + QMI_NAS_SWI_EMM_CONN_STATE_UNKNOWN = 0xff
> > +} QmiNasSwiEmmConnectionState;
> > +
> > #endif /* _LIBQMI_GLIB_QMI_ENUMS_NAS_H_ */
> > diff --git a/src/qmicli/qmicli-nas.c b/src/qmicli/qmicli-nas.c
> > index caf5609050a9..527f327f066f 100644
> > --- a/src/qmicli/qmicli-nas.c
> > +++ b/src/qmicli/qmicli-nas.c
> > @@ -59,6 +59,7 @@ static gboolean get_operator_name_flag;
> > static gboolean get_lte_cphy_ca_info_flag;
> > static gboolean get_rf_band_info_flag;
> > static gboolean get_supported_messages_flag;
> > +static gboolean swi_get_status_flag;
> > static gboolean reset_flag;
> > static gboolean noop_flag;
> >
> > @@ -127,6 +128,10 @@ static GOptionEntry entries[] = {
> > "Get supported messages",
> > NULL
> > },
> > + { "nas-swi-get-status", 0, 0, G_OPTION_ARG_NONE,
> > &swi_get_status_flag,
> > + "Get status ((Sierra Wireless specific)",
> > + NULL
> > + },
> > { "nas-reset", 0, 0, G_OPTION_ARG_NONE, &reset_flag,
> > "Reset the service state",
> > NULL
> > @@ -178,6 +183,7 @@ qmicli_nas_options_enabled (void)
> > get_lte_cphy_ca_info_flag +
> > get_rf_band_info_flag +
> > get_supported_messages_flag +
> > + swi_get_status_flag +
> > reset_flag +
> > noop_flag);
> >
> > @@ -3377,6 +3383,98 @@ get_supported_messages_ready (QmiClientNas
> > *client,
> > operation_shutdown (TRUE);
> > }
> >
> > +static void
> > +swi_get_status_ready (QmiClientNas *client,
> > + GAsyncResult *res)
> > +{
> > + QmiMessageNasSwiGetStatusOutput *output;
> > + GError *error = NULL;
> > +
> > + guint8 temperature;
> > + QmiNasSwiModemMode modem_mode;
> > + QmiNasSwiSystemMode system_mode;
> > + QmiNasSwiImsRegState ims_reg_state;
> > + QmiNasSwiPsState ps_state;
> > +
> > + QmiNasActiveBand band;
> > + QmiNasDLBandwidth bandwidth;
> > + guint16 rx_channel;
> > + guint16 tx_channel;
> > + QmiNasSwiEmmState emm_state;
> > + guint8 emm_sub_state;
> > + QmiNasSwiEmmConnectionState emm_conn_state;
> > +
> > + output = qmi_client_nas_swi_get_status_finish (client, res,
> > &error);
> > + if (!output) {
> > + g_printerr ("error: operation failed: %s\n", error-
> > > message);
> > + g_error_free (error);
> > + operation_shutdown (FALSE);
> > + return;
> > + }
> > +
> > + if (!qmi_message_nas_swi_get_status_output_get_result (output,
> > &error)) {
> > + g_printerr ("error: couldn't get status: %s\n", error-
> > > message);
> > + g_error_free (error);
> > + qmi_message_nas_swi_get_status_output_unref (output);
> > + operation_shutdown (FALSE);
> > + return;
> > + }
> > +
> > + g_print ("[%s] Successfully got status:\n",
> > + qmi_device_get_path_display (ctx->device));
> > +
> > + if (qmi_message_nas_swi_get_status_output_get_common_info (
> > + output,
> > + &temperature,
> > + &modem_mode,
> > + &system_mode,
> > + &ims_reg_state,
> > + &ps_state,
> > + NULL)) {
> > + g_print ("Common Info:\n"
> > + "\tTemperature: '%u'\n"
> > + "\tModem mode: '%s'\n"
> > + "\tSystem mode: '%s'\n"
> > + "\tIMS registration state: '%s'\n"
> > + "\tPacket service state: '%s'\n",
> > + temperature,
> > + qmi_nas_swi_modem_mode_get_string (modem_mode),
> > + qmi_nas_swi_system_mode_get_string (system_mode),
> > + qmi_nas_swi_ims_reg_state_get_string
> > (ims_reg_state),
> > + qmi_nas_swi_ps_state_get_string (ps_state));
> > + }
> > +
> > + if (qmi_message_nas_swi_get_status_output_get_lte_info (
> > + output,
> > + &band,
> > + &bandwidth,
> > + &rx_channel,
> > + &tx_channel,
> > + &emm_state,
> > + &emm_sub_state,
> > + &emm_conn_state,
> > + NULL)) {
> > + g_print ("LTE info:\n"
> > + "\tBand: '%s'\n"
> > + "\tBandwidth: '%s'\n"
> > + "\tRX channel: '%" G_GUINT16_FORMAT"'\n"
> > + "\tTX channel: '%" G_GUINT16_FORMAT"'\n"
> > + "\tEMM state: '%s'\n"
> > + "\tEMM sub state: '%u'\n"
> > + "\tEMM connection state: '%s'\n",
> > + qmi_nas_active_band_get_string (band),
> > + qmi_nas_dl_bandwidth_get_string (bandwidth),
> > + rx_channel,
> > + tx_channel,
> > + qmi_nas_swi_emm_state_get_string (emm_state),
> > + emm_sub_state,
> > + qmi_nas_swi_emm_connection_state_get_string
> > (emm_conn_state));
> > + }
> > +
> > + qmi_message_nas_swi_get_status_output_unref (output);
> > + operation_shutdown (TRUE);
> > +}
> > +
> > static void
> > reset_ready (QmiClientNas *client,
> > GAsyncResult *res)
> > @@ -3642,6 +3740,18 @@ qmicli_nas_run (QmiDevice *device,
> > return;
> > }
> >
> > + /* Request to get status */
> > + if (swi_get_status_flag) {
> > + g_debug ("Asynchronously getting status (Sierra Wireless
> > specific)...");
> > + qmi_client_nas_swi_get_status (ctx->client,
> > + NULL,
> > + 10,
> > + ctx->cancellable,
> > + (GAsyncReadyCallback)swi_ge
> > t_
> > status_ready,
> > + NULL);
> > + return;
> > + }
> > +
> > /* Request to reset NAS service? */
> > if (reset_flag) {
> > g_debug ("Asynchronously resetting NAS service...");
>
> _______________________________________________
> libqmi-devel mailing list
> libqmi-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libqmi-devel
More information about the libqmi-devel
mailing list