[uqmi] dms: add --get-operating-mode

Sergey Ryazanov ryazanov.s.a at gmail.com
Sat Dec 4 14:19:06 PST 2021


Hello Henrik,

On Sat, Dec 4, 2021 at 6:22 PM Henrik Ginstmark <henrik at ginstmark.se> wrote:
> This command make it possible to query if the modem is in flight mode or not.
>
> If you need to change your APN setting it should be done during flight mode on.

Just curious, is this true for any Qualcomm based mode or only for a
specific model?

> To make it possible to automate change of APN setting --get-operating-mode is
> needed.
>
> Signed-off-by: Henrik Ginstmark <henrik at ginstmark.se>

Your patch seems broken. Consider using git-format-patch and
git-send-email to prepare and submit the patch, please.

BTW, it is a good idea to keep the 'PATCH' word in the subject line,
so patchwork (https://patchwork.ozlabs.org/project/openwrt/list/) will
be able to catch your patch. Something like this:

[PATCH uqmi] dms: add --get-operating-mode

See also a couple of nit picks below.

> commands-dms.c
>
> @@ -375,6 +375,38 @@ cmd_dms_reset_prepare(struct qmi_dev *qmi, struct
> qmi_request *req, struct qmi_m
>     return QMI_CMD_REQUEST;
> }
>
> +static void
> +cmd_dms_get_operating_mode_cb(struct qmi_dev *qmi, struct qmi_request
> *req, struct qmi_msg *msg)
> +{
> +    struct qmi_dms_get_operating_mode_response res;
> +

This empty line is odd.

> +    const char *modes[] = {

You could reuse 'modes' from the cmd_dms_set_operating_mode_prepare()
to avoid duplication. Just move the array out from the function and
call it something like 'oper_modes'.

> +        [QMI_DMS_OPERATING_MODE_ONLINE] = "online",
> +        [QMI_DMS_OPERATING_MODE_LOW_POWER] = "low_power",
> +        [QMI_DMS_OPERATING_MODE_FACTORY_TEST] = "factory_test",
> +        [QMI_DMS_OPERATING_MODE_OFFLINE] = "offline",
> +        [QMI_DMS_OPERATING_MODE_RESET] = "reset",
> +        [QMI_DMS_OPERATING_MODE_SHUTTING_DOWN] = "shutting_down",
> +        [QMI_DMS_OPERATING_MODE_PERSISTENT_LOW_POWER] = "persistent_low_power",
> +        [QMI_DMS_OPERATING_MODE_MODE_ONLY_LOW_POWER] = "mode_only_low_power",
> +    };
> +    int s = 0;

This is a magic number usage. Also if a modem returns unknown value
then the code below will report that the modem is 'online'. What can
be misleading. See the 'get_pin_status()' function for an example of
an unknown value handling.

> +
> +    qmi_parse_dms_get_operating_mode_response(msg, &res);
> +    if (res.set.mode &&

This part of the check looks odd. If res.set.mode is zero you skip the
's' variable updation, but s is initialized with zero during the
definition.

> +        res.data.mode < ARRAY_SIZE(modes))
> +        s = res.data.mode;
> +
> +    blobmsg_add_string(&status, NULL, modes[s]);
> +}
> +
> +static enum qmi_cmd_result
> +cmd_dms_get_operating_mode_prepare(struct qmi_dev *qmi, struct
> qmi_request *req, struct qmi_msg *msg, char *arg)
> +{
> +    qmi_set_dms_get_operating_mode_request(msg);
> +    return QMI_CMD_REQUEST;
> +}
> +
> #define cmd_dms_set_operating_mode_cb no_cb
> static enum qmi_cmd_result
> cmd_dms_set_operating_mode_prepare(struct qmi_dev *qmi, struct
> qmi_request *req, struct qmi_msg *msg, char *arg)
>
>
> ---
>
> commands-dms.h
>
> @@ -37,6 +37,7 @@
>     __uqmi_command(dms_get_imsi, get-imsi, no, QMI_SERVICE_DMS), \
>     __uqmi_command(dms_get_imei, get-imei, no, QMI_SERVICE_DMS), \
>     __uqmi_command(dms_get_msisdn, get-msisdn, no, QMI_SERVICE_DMS), \
> +   __uqmi_command(dms_get_operating_mode, get-device-operating-mode,
> no, QMI_SERVICE_DMS), \
>     __uqmi_command(dms_set_operating_mode, set-device-operating-mode,
> required, QMI_SERVICE_DMS), \
>     __uqmi_command(dms_reset, reset-dms, no, QMI_SERVICE_DMS), \
>     __uqmi_command(dms_set_fcc_authentication, fcc-auth, no, QMI_SERVICE_DMS) \
> @@ -67,6 +68,7 @@
>         "  --get-imei:                       Get International Mobile
> Equipment ID\n" \
>         "  --get-msisdn:                     Get the MSISDN (telephone
> number)\n" \
>         "  --reset-dms:                      Reset the DMS service\n" \
> +       "  --get-device-operating-mode       Get the device operating mode\n" \
>         "  --set-device-operating-mode <m>   Set the device operating mode\n" \
>         "                                    (modes: online,
> low_power, factory_test, offline\n" \
>         "                                     reset, shutting_down,
> persistent_low_power,\n" \

-- 
Sergey



More information about the openwrt-devel mailing list