From patchwork Thu Jan 8 18:08:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?S=C5=82awomir_Demeszko?= X-Patchwork-Id: 426785 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id E4599140119 for ; Fri, 9 Jan 2015 05:09:09 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 8387B281451; Thu, 8 Jan 2015 19:06:52 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id CC67D2802F8 for ; Thu, 8 Jan 2015 19:06:47 +0100 (CET) X-policyd-weight: using cached result; rate: -3.6 Received: from hosting.nazwa24.pl (ns1.hosting.nazwa24.pl [46.242.129.143]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Thu, 8 Jan 2015 19:06:47 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=wireless-instruments.com; s=default; h=In-Reply-To:References:Content-Transfer-Encoding:Content-Type:MIME-Version:Message-Id:Date:Subject:Cc:To:From; bh=PRH9aP9BEAQxhff6LO+7oHJRbXZnk3dRHOdzQZvgTBk=; b=BY03BvNsCSHmhtbN2OrSLmqx8agWbCiyw9zEN9tgb9xhzmsIV6S0yXHJxduYuEAJ7OZ83NJYJ8AyO0bQWFerYCtXqKGqw3ETIpKwiQP3c/ZgkTK8V/IKpoSKwYt5mg7HFDB5dq+McXTTtvQdq0zz1a5QH/tg6CJtHx+u73J/esM=; Received: from afo149.internetdsl.tpnet.pl ([83.16.144.149]:44109 helo=localhost.localdomain) by hosting.nazwa24.pl with esmtpsa (UNKNOWN:AES128-SHA256:128) (Exim 4.82) (envelope-from ) id 1Y9HVt-0005Sa-R7; Thu, 08 Jan 2015 19:08:54 +0100 From: =?UTF-8?q?S=C5=82awomir=20Demeszko?= To: openwrt-devel@lists.openwrt.org Date: Thu, 8 Jan 2015 19:08:30 +0100 Message-Id: <1420740510-22287-1-git-send-email-s.demeszko@wireless-instruments.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 References: <1420725309-23172-1-git-send-email-s.demeszko@wireless-instruments.com> <54AE964D.8060506@openwrt.org> In-Reply-To: <54AE964D.8060506@openwrt.org> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - hosting.nazwa24.pl X-AntiAbuse: Original Domain - lists.openwrt.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - wireless-instruments.com X-Get-Message-Sender-Via: hosting.nazwa24.pl: authenticated_id: s.demeszko@wireless-instruments.com Cc: =?UTF-8?q?S=C5=82awomir=20Demeszko?= Subject: [OpenWrt-Devel] [PATCH v2 uqmi] Add command for listing device capabilities X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Signed-off-by: SÅ‚awomir Demeszko --- Sorry, it seems my compiler doesn't suport -Wtautological-compare option, and I was not warned about this. This condition could be removed, but as I read it is unspecified if enums are signed or unsigned, it depends on compiler, so I cast it to signed for comparison. I can't test it, but should get rid of the warning. commands-dms.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ commands-dms.h | 2 ++ 2 files changed, 55 insertions(+) diff --git a/commands-dms.c b/commands-dms.c index a677052..563b6d9 100644 --- a/commands-dms.c +++ b/commands-dms.c @@ -7,6 +7,59 @@ static struct { char* puk; } dms_req_data; +static void cmd_dms_get_capabilities_cb(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg) +{ + void *t, *networks; + int i; + struct qmi_dms_get_capabilities_response res; + const char *radio_cap[] = { + [QMI_DMS_RADIO_INTERFACE_CDMA20001X] = "cdma1x", + [QMI_DMS_RADIO_INTERFACE_EVDO] = "cdma1xevdo", + [QMI_DMS_RADIO_INTERFACE_GSM] = "gsm", + [QMI_DMS_RADIO_INTERFACE_UMTS] = "umts", + [QMI_DMS_RADIO_INTERFACE_LTE] = "lte", + }; + const char *service_cap[] = { + [QMI_DMS_DATA_SERVICE_CAPABILITY_NONE] = "none", + [QMI_DMS_DATA_SERVICE_CAPABILITY_CS] = "cs", + [QMI_DMS_DATA_SERVICE_CAPABILITY_PS] = "ps", + [QMI_DMS_DATA_SERVICE_CAPABILITY_SIMULTANEOUS_CS_PS] = "simultaneous_cs_ps", + [QMI_DMS_DATA_SERVICE_CAPABILITY_NON_SIMULTANEOUS_CS_PS] = "non_simultaneous_cs_ps", + }; + + qmi_parse_dms_get_capabilities_response(msg, &res); + + t = blobmsg_open_table(&status, NULL); + + blobmsg_add_u32(&status, "max_tx_channel_rate", (int32_t) res.data.info.max_tx_channel_rate); + blobmsg_add_u32(&status, "max_rx_channel_rate", (int32_t) res.data.info.max_rx_channel_rate); + if ((int)res.data.info.data_service_capability >= 0 && res.data.info.data_service_capability < ARRAY_SIZE(service_cap)) + blobmsg_add_string(&status, "data_service", service_cap[res.data.info.data_service_capability]); + + if(res.data.info.sim_capability == QMI_DMS_SIM_CAPABILITY_NOT_SUPPORTED) + blobmsg_add_string(&status, "sim", "not supported"); + else if(res.data.info.sim_capability == QMI_DMS_SIM_CAPABILITY_SUPPORTED) + blobmsg_add_string(&status, "sim", "supported"); + + networks = blobmsg_open_array(&status, "networks"); + for (i = 0; i < res.data.info.radio_interface_list_n; i++) { + if ((int)res.data.info.radio_interface_list[i] >= 0 && res.data.info.radio_interface_list[i] < ARRAY_SIZE(radio_cap)) + blobmsg_add_string(&status, NULL, radio_cap[res.data.info.radio_interface_list[i]]); + else + blobmsg_add_string(&status, NULL, "unknown"); + } + blobmsg_close_array(&status, networks); + + blobmsg_close_table(&status, t); +} + +static enum qmi_cmd_result +cmd_dms_get_capabilities_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + qmi_set_dms_get_capabilities_request(msg); + return QMI_CMD_REQUEST; +} + static const char *get_pin_status(int status) { static const char *pin_status[] = { diff --git a/commands-dms.h b/commands-dms.h index 925aea3..a370425 100644 --- a/commands-dms.h +++ b/commands-dms.h @@ -1,4 +1,5 @@ #define __uqmi_dms_commands \ + __uqmi_command(dms_get_capabilities, get-capabilities, no, QMI_SERVICE_DMS), \ __uqmi_command(dms_get_pin_status, get-pin-status, no, QMI_SERVICE_DMS), \ __uqmi_command(dms_verify_pin1, verify-pin1, required, QMI_SERVICE_DMS), \ __uqmi_command(dms_verify_pin2, verify-pin2, required, QMI_SERVICE_DMS), \ @@ -18,6 +19,7 @@ __uqmi_command(dms_reset, reset-dms, no, QMI_SERVICE_DMS) \ #define dms_helptext \ + " --get-capabilities: List device capabilities\n" \ " --get-pin-status: Get PIN verification status\n" \ " --verify-pin1 : Verify PIN1\n" \ " --verify-pin2 : Verify PIN2\n" \