[OpenWrt-Devel] [PATCH 1/1] uqmi: uim: add support for Get Card Status request
John Crispin
john at phrozen.org
Sun Feb 18 04:44:01 EST 2018
On 14/08/17 12:02, Daniele Palmas wrote:
> This patch adds support for UIM Get Card Status request
>
> Signed-off-by: Daniele Palmas <dnlplm at gmail.com>
> ---
Hi Daniele,
sorry for the late reply, nitpicks inline, if you could fix those and
resend the patch please ..
John
> commands-uim.c | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> commands-uim.h | 4 +-
> 2 files changed, 146 insertions(+), 1 deletion(-)
>
> diff --git a/commands-uim.c b/commands-uim.c
> index 859da68..4263cf3 100644
> --- a/commands-uim.c
> +++ b/commands-uim.c
> @@ -54,3 +54,146 @@ cmd_uim_verify_pin2_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct
> qmi_set_uim_verify_pin_request(msg, &data);
> return QMI_CMD_REQUEST;
> }
> +
> +static void
> +cmd_uim_get_card_status_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg)
> +{
> +
[...]
> + qmi_parse_uim_get_card_status_response(msg, &res);
> +
> + c = blobmsg_open_table(&status, NULL);
> +
> + if (res.set.card_status) {
there is a lot of indenting here, could you instead change the code to
if (!res.set.card_status)
return
...
if (res.data.card_status.cards_n <= 0)
return;
...
...
that will make the code easier to read
John
> + blobmsg_add_u32(&status, "num_slots", res.data.card_status.cards_n);
> +
> + if (res.data.card_status.index_gw_primary != 0xFFFF)
> + blobmsg_add_u32(&status, "index_gw_pri", res.data.card_status.index_gw_primary);
> + if (res.data.card_status.index_1x_primary != 0xFFFF)
> + blobmsg_add_u32(&status, "index_1x_pri", res.data.card_status.index_1x_primary);
> + if (res.data.card_status.index_gw_secondary_ != 0xFFFF)
> + blobmsg_add_u32(&status, "index_gw_sec", res.data.card_status.index_gw_secondary_);
> + if (res.data.card_status.index_1x_secondary != 0xFFFF)
> + blobmsg_add_u32(&status, "index_1x_sec", res.data.card_status.index_1x_secondary);
> +
> + if (res.data.card_status.cards_n > 0) {
> + a = blobmsg_open_array(&status, "card_info");
> +
> + for (i = 0; i < res.data.card_status.cards_n; i++) {
> + card_info = blobmsg_open_table(&status, NULL);
> +
> + blobmsg_add_u32(&status, "app_n", res.data.card_status.cards[i].applications_n);
> +
> + if (res.data.card_status.cards[i].card_state > QMI_UIM_CARD_STATE_ERROR)
> + res.data.card_status.cards[i].card_state = QMI_UIM_CARD_STATE_ERROR;
> + else if (res.data.card_status.cards[i].card_state == QMI_UIM_CARD_STATE_ERROR) {
> + if (res.data.card_status.cards[i].error_code > QMI_UIM_CARD_ERROR_TECHNICAL)
> + res.data.card_status.cards[i].error_code = QMI_UIM_CARD_ERROR_UNKNOWN;
> + blobmsg_add_string(&status, "card_error", card_error[res.data.card_status.cards[i].error_code]);
> + }
> +
> + blobmsg_add_string(&status, "card_state", card_state[res.data.card_status.cards[i].card_state]);
> +
> + if (res.data.card_status.cards[i].upin_state > QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED)
> + res.data.card_status.cards[i].upin_state = QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED;
> + blobmsg_add_string(&status, "upin_state", pin_state[res.data.card_status.cards[i].upin_state]);
> +
> + if (res.data.card_status.cards[i].upin_state != QMI_UIM_PIN_STATE_NOT_INITIALIZED) {
> + blobmsg_add_u32(&status, "upin_retries", res.data.card_status.cards[i].upin_retries);
> + blobmsg_add_u32(&status, "upuk_retries", res.data.card_status.cards[i].upuk_retries);
> + }
> +
> + if (res.data.card_status.cards[i].applications_n > 0) {
> + a_app = blobmsg_open_array(&status, "app_info");
> +
> + for (j = 0; j < res.data.card_status.cards[i].applications_n; j++) {
> + app_info = blobmsg_open_table(&status, NULL);
> +
> + if (res.data.card_status.cards[i].applications[j].type > QMI_UIM_CARD_APPLICATION_TYPE_ISIM)
> + res.data.card_status.cards[i].applications[j].type = QMI_UIM_CARD_APPLICATION_TYPE_UNKNOWN;
> + blobmsg_add_string(&status, "app_type", app_type[res.data.card_status.cards[i].applications[j].type]);
> +
> + if (res.data.card_status.cards[i].applications[j].state > QMI_UIM_CARD_APPLICATION_STATE_READY)
> + res.data.card_status.cards[i].applications[j].state = QMI_UIM_CARD_APPLICATION_STATE_UNKNOWN;
> + blobmsg_add_string(&status, "app_state", app_state[res.data.card_status.cards[i].applications[j].state]);
> + blobmsg_add_u8(&status, "upin", res.data.card_status.cards[i].applications[j].upin_replaces_pin1);
> +
> + if (res.data.card_status.cards[i].applications[j].upin_replaces_pin1 == 0) {
> + if (res.data.card_status.cards[i].applications[j].pin1_state > QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED)
> + res.data.card_status.cards[i].applications[j].pin1_state = QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED;
> + blobmsg_add_string(&status, "pin1_state", pin_state[res.data.card_status.cards[i].applications[j].pin1_state]);
> + blobmsg_add_u32(&status, "pin1_retries", res.data.card_status.cards[i].applications[j].pin1_retries);
> + blobmsg_add_u32(&status, "puk1_retries", res.data.card_status.cards[i].applications[j].puk1_retries);
> + if (res.data.card_status.cards[i].applications[j].pin2_state > QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED)
> + res.data.card_status.cards[i].applications[j].pin2_state = QMI_UIM_PIN_STATE_PERMANENTLY_BLOCKED;
> + blobmsg_add_string(&status, "pin2_state", pin_state[res.data.card_status.cards[i].applications[j].pin2_state]);
> + blobmsg_add_u32(&status, "pin2_retries", res.data.card_status.cards[i].applications[j].pin2_retries);
> + blobmsg_add_u32(&status, "puk2_retries", res.data.card_status.cards[i].applications[j].puk2_retries);
> + }
> +
> + blobmsg_close_table(&status, app_info);
> + }
> +
> + blobmsg_close_array(&status, a_app);
> + }
> + blobmsg_close_table(&status, card_info);
> + }
> +
> + blobmsg_close_array(&status, a);
> + }
> +
> + }
> +
> + blobmsg_close_table(&status, c);
> +}
> +
> +static enum qmi_cmd_result
> +cmd_uim_get_card_status_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg)
> +{
> + qmi_set_uim_get_card_status_request(msg);
> + return QMI_CMD_REQUEST;
> +}
> \ No newline at end of file
> diff --git a/commands-uim.h b/commands-uim.h
> index 86ebae4..b668263 100644
> --- a/commands-uim.h
> +++ b/commands-uim.h
> @@ -21,10 +21,12 @@
>
> #define __uqmi_uim_commands \
> __uqmi_command(uim_verify_pin1, uim-verify-pin1, required, QMI_SERVICE_UIM), \
> - __uqmi_command(uim_verify_pin2, uim-verify-pin2, required, QMI_SERVICE_UIM) \
> + __uqmi_command(uim_verify_pin2, uim-verify-pin2, required, QMI_SERVICE_UIM), \
> + __uqmi_command(uim_get_card_status, uim-get-card-status, no, QMI_SERVICE_UIM) \
>
>
> #define uim_helptext \
> " --uim-verify-pin1 <pin>: Verify PIN1 (new devices)\n" \
> " --uim-verify-pin2 <pin>: Verify PIN2 (new devices)\n" \
> + " --uim-get-card-status: Get Card Status\n" \
>
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list