summaryrefslogtreecommitdiff
path: root/src/libmbim-glib
diff options
context:
space:
mode:
authorBen Chan <benchan@chromium.org>2014-02-26 22:26:48 -0800
committerAleksander Morgado <aleksander@aleksander.es>2014-02-27 09:42:37 +0100
commitd482a37156a70a7b778ed0c1aaeecdc9b5a7a8dd (patch)
tree78389d9d0a850343d3bd757a573100cb6d0fff45 /src/libmbim-glib
parent263b020d05f73e74be618c6e854a1461c5957c05 (diff)
ms-firmware-id: add support for the Microsoft Firmware ID service
Diffstat (limited to 'src/libmbim-glib')
-rw-r--r--src/libmbim-glib/generated/Makefile.am18
-rw-r--r--src/libmbim-glib/libmbim-glib.h1
-rw-r--r--src/libmbim-glib/mbim-cid.c22
-rw-r--r--src/libmbim-glib/mbim-cid.h12
-rw-r--r--src/libmbim-glib/mbim-message.c2
-rw-r--r--src/libmbim-glib/mbim-uuid.c15
-rw-r--r--src/libmbim-glib/mbim-uuid.h27
-rw-r--r--src/libmbim-glib/test/test-cid.c23
-rw-r--r--src/libmbim-glib/test/test-message-parser.c52
-rw-r--r--src/libmbim-glib/test/test-uuid.c21
10 files changed, 162 insertions, 31 deletions
diff --git a/src/libmbim-glib/generated/Makefile.am b/src/libmbim-glib/generated/Makefile.am
index 9db1c3e..c351043 100644
--- a/src/libmbim-glib/generated/Makefile.am
+++ b/src/libmbim-glib/generated/Makefile.am
@@ -9,7 +9,8 @@ GENERATED_H = \
mbim-auth.h \
mbim-phonebook.h \
mbim-stk.h \
- mbim-dss.h
+ mbim-dss.h \
+ mbim-ms-firmware-id.h
GENERATED_C = \
mbim-error-types.c \
@@ -21,7 +22,8 @@ GENERATED_C = \
mbim-auth.c \
mbim-phonebook.c \
mbim-stk.c \
- mbim-dss.c
+ mbim-dss.c \
+ mbim-ms-firmware-id.c
GENERATED_SECTIONS = \
mbim-basic-connect.sections \
@@ -30,7 +32,8 @@ GENERATED_SECTIONS = \
mbim-auth.sections \
mbim-phonebook.sections \
mbim-stk.sections \
- mbim-dss.sections
+ mbim-dss.sections \
+ mbim-ms-firmware-id.sections
# Error types
mbim-error-types.h: $(top_srcdir)/src/libmbim-glib/mbim-errors.h $(top_srcdir)/build-aux/templates/mbim-error-types-template.h
@@ -134,6 +137,15 @@ mbim-dss.h mbim-dss.c mbim-dss.sections: $(top_srcdir)/data/mbim-service-dss.jso
--input $(top_srcdir)/data/mbim-service-dss.json \
--output mbim-dss
+# Microsoft Firmware ID service
+mbim-ms-firmware-id.h mbim-ms-firmware-id.c mbim-ms-firmware-id.sections: $(top_srcdir)/data/mbim-service-ms-firmware-id.json $(top_srcdir)/build-aux/mbim-codegen/*.py $(top_srcdir)/build-aux/mbim-codegen/mbim-codegen
+ $(AM_V_GEN) \
+ rm -f mbim-ms-firmware-id.h && \
+ rm -f mbim-ms-firmware-id.c && \
+ $(top_srcdir)/build-aux/mbim-codegen/mbim-codegen \
+ --input $(top_srcdir)/data/mbim-service-ms-firmware-id.json \
+ --output mbim-ms-firmware-id
+
BUILT_SOURCES = $(GENERATED_H) $(GENERATED_C)
nodist_libmbim_glib_generated_la_SOURCES = \
diff --git a/src/libmbim-glib/libmbim-glib.h b/src/libmbim-glib/libmbim-glib.h
index 05cd71c..12089b2 100644
--- a/src/libmbim-glib/libmbim-glib.h
+++ b/src/libmbim-glib/libmbim-glib.h
@@ -45,5 +45,6 @@
#include "mbim-phonebook.h"
#include "mbim-stk.h"
#include "mbim-dss.h"
+#include "mbim-ms-firmware-id.h"
#endif /* _LIBMBIM_GLIB_H_ */
diff --git a/src/libmbim-glib/mbim-cid.c b/src/libmbim-glib/mbim-cid.c
index de86c93..fb79310 100644
--- a/src/libmbim-glib/mbim-cid.c
+++ b/src/libmbim-glib/mbim-cid.c
@@ -113,6 +113,12 @@ static const CidConfig cid_dss_config [MBIM_CID_DSS_LAST] = {
{ TRUE, FALSE, FALSE }, /* MBIM_CID_DSS_CONNECT */
};
+/* Note: index of the array is CID-1 */
+#define MBIM_CID_MS_FIRMWARE_ID_LAST MBIM_CID_MS_FIRMWARE_ID_GET
+static const CidConfig cid_ms_firmware_id_config [MBIM_CID_MS_FIRMWARE_ID_LAST] = {
+ { FALSE, TRUE, FALSE }, /* MBIM_CID_MS_FIRMWARE_ID_GET */
+};
+
/**
* mbim_cid_can_set:
* @service: a #MbimService.
@@ -130,7 +136,7 @@ mbim_cid_can_set (MbimService service,
g_return_val_if_fail (cid > 0, FALSE);
/* Known service required */
g_return_val_if_fail (service > MBIM_SERVICE_INVALID, FALSE);
- g_return_val_if_fail (service <= MBIM_SERVICE_DSS, FALSE);
+ g_return_val_if_fail (service <= MBIM_SERVICE_MS_FIRMWARE_ID, FALSE);
switch (service) {
case MBIM_SERVICE_BASIC_CONNECT:
@@ -147,6 +153,8 @@ mbim_cid_can_set (MbimService service,
return cid_auth_config[cid - 1].set;
case MBIM_SERVICE_DSS:
return cid_dss_config[cid - 1].set;
+ case MBIM_SERVICE_MS_FIRMWARE_ID:
+ return cid_ms_firmware_id_config[cid - 1].set;
default:
g_assert_not_reached ();
return FALSE;
@@ -170,7 +178,7 @@ mbim_cid_can_query (MbimService service,
g_return_val_if_fail (cid > 0, FALSE);
/* Known service required */
g_return_val_if_fail (service > MBIM_SERVICE_INVALID, FALSE);
- g_return_val_if_fail (service <= MBIM_SERVICE_DSS, FALSE);
+ g_return_val_if_fail (service <= MBIM_SERVICE_MS_FIRMWARE_ID, FALSE);
switch (service) {
case MBIM_SERVICE_BASIC_CONNECT:
@@ -187,6 +195,8 @@ mbim_cid_can_query (MbimService service,
return cid_auth_config[cid - 1].query;
case MBIM_SERVICE_DSS:
return cid_dss_config[cid - 1].query;
+ case MBIM_SERVICE_MS_FIRMWARE_ID:
+ return cid_ms_firmware_id_config[cid - 1].query;
default:
g_assert_not_reached ();
return FALSE;
@@ -210,7 +220,7 @@ mbim_cid_can_notify (MbimService service,
g_return_val_if_fail (cid > 0, FALSE);
/* Known service required */
g_return_val_if_fail (service > MBIM_SERVICE_INVALID, FALSE);
- g_return_val_if_fail (service <= MBIM_SERVICE_DSS, FALSE);
+ g_return_val_if_fail (service <= MBIM_SERVICE_MS_FIRMWARE_ID, FALSE);
switch (service) {
case MBIM_SERVICE_BASIC_CONNECT:
@@ -227,6 +237,8 @@ mbim_cid_can_notify (MbimService service,
return cid_auth_config[cid - 1].notify;
case MBIM_SERVICE_DSS:
return cid_dss_config[cid - 1].notify;
+ case MBIM_SERVICE_MS_FIRMWARE_ID:
+ return cid_ms_firmware_id_config[cid - 1].notify;
default:
g_assert_not_reached ();
return FALSE;
@@ -251,7 +263,7 @@ mbim_cid_get_printable (MbimService service,
g_return_val_if_fail (cid > 0, NULL);
/* Known service required */
g_return_val_if_fail (service > MBIM_SERVICE_INVALID, NULL);
- g_return_val_if_fail (service <= MBIM_SERVICE_DSS, NULL);
+ g_return_val_if_fail (service <= MBIM_SERVICE_MS_FIRMWARE_ID, NULL);
switch (service) {
case MBIM_SERVICE_BASIC_CONNECT:
@@ -268,6 +280,8 @@ mbim_cid_get_printable (MbimService service,
return mbim_cid_auth_get_string (cid);
case MBIM_SERVICE_DSS:
return mbim_cid_dss_get_string (cid);
+ case MBIM_SERVICE_MS_FIRMWARE_ID:
+ return mbim_cid_ms_firmware_id_get_string (cid);
default:
g_assert_not_reached ();
return FALSE;
diff --git a/src/libmbim-glib/mbim-cid.h b/src/libmbim-glib/mbim-cid.h
index 031baa0..d3d2ee9 100644
--- a/src/libmbim-glib/mbim-cid.h
+++ b/src/libmbim-glib/mbim-cid.h
@@ -183,6 +183,18 @@ typedef enum {
MBIM_CID_DSS_CONNECT = 1
} MbimCidDss;
+/**
+ * MbimCidMsFirmwareId:
+ * @MBIM_CID_MS_FIRMWARE_ID_UNKNOWN: Unknown command.
+ * @MBIM_CID_MS_FIRMWARE_ID_GET: Get Firmware ID.
+ *
+ * MBIM commands in the %MBIM_SERVICE_MS_FIRMWARE_ID service.
+ */
+typedef enum {
+ MBIM_CID_MS_FIRMWARE_ID_UNKNOWN = 0,
+ MBIM_CID_MS_FIRMWARE_ID_GET = 1
+} MbimCidMsFirmwareId;
+
/* Command helpers */
gboolean mbim_cid_can_set (MbimService service,
diff --git a/src/libmbim-glib/mbim-message.c b/src/libmbim-glib/mbim-message.c
index deb2c52..3089ed1 100644
--- a/src/libmbim-glib/mbim-message.c
+++ b/src/libmbim-glib/mbim-message.c
@@ -1738,7 +1738,7 @@ mbim_message_command_new (guint32 transaction_id,
/* Known service required */
g_return_val_if_fail (service > MBIM_SERVICE_INVALID, FALSE);
- g_return_val_if_fail (service <= MBIM_SERVICE_DSS, FALSE);
+ g_return_val_if_fail (service <= MBIM_SERVICE_MS_FIRMWARE_ID, FALSE);
service_id = mbim_uuid_from_service (service);
self = _mbim_message_allocate (MBIM_MESSAGE_TYPE_COMMAND,
diff --git a/src/libmbim-glib/mbim-uuid.c b/src/libmbim-glib/mbim-uuid.c
index f25cf2f..82ad609 100644
--- a/src/libmbim-glib/mbim-uuid.c
+++ b/src/libmbim-glib/mbim-uuid.c
@@ -143,6 +143,14 @@ static const MbimUuid uuid_dss = {
.e = { 0x6e, 0x0d, 0x58, 0x3c, 0x4d, 0x0e }
};
+static const MbimUuid uuid_ms_firmware_id = {
+ .a = { 0xe9, 0xf7, 0xde, 0xa2 },
+ .b = { 0xfe, 0xaf },
+ .c = { 0x40, 0x09 },
+ .d = { 0x93, 0xce },
+ .e = { 0x90, 0xa3, 0x69, 0x41, 0x03, 0xb6 }
+};
+
/**
* mbim_uuid_from_service:
* @service: a #MbimService.
@@ -154,7 +162,7 @@ static const MbimUuid uuid_dss = {
const MbimUuid *
mbim_uuid_from_service (MbimService service)
{
- g_return_val_if_fail (service >= MBIM_SERVICE_INVALID && service <= MBIM_SERVICE_DSS,
+ g_return_val_if_fail (service >= MBIM_SERVICE_INVALID && service <= MBIM_SERVICE_MS_FIRMWARE_ID,
&uuid_invalid);
switch (service) {
@@ -174,6 +182,8 @@ mbim_uuid_from_service (MbimService service)
return &uuid_auth;
case MBIM_SERVICE_DSS:
return &uuid_dss;
+ case MBIM_SERVICE_MS_FIRMWARE_ID:
+ return &uuid_ms_firmware_id;
default:
g_assert_not_reached ();
}
@@ -211,6 +221,9 @@ mbim_uuid_to_service (const MbimUuid *uuid)
if (mbim_uuid_cmp (uuid, &uuid_dss))
return MBIM_SERVICE_DSS;
+ if (mbim_uuid_cmp (uuid, &uuid_ms_firmware_id))
+ return MBIM_SERVICE_MS_FIRMWARE_ID;
+
return MBIM_SERVICE_INVALID;
}
diff --git a/src/libmbim-glib/mbim-uuid.h b/src/libmbim-glib/mbim-uuid.h
index 0676861..c05ce41 100644
--- a/src/libmbim-glib/mbim-uuid.h
+++ b/src/libmbim-glib/mbim-uuid.h
@@ -66,18 +66,20 @@ gchar *mbim_uuid_get_printable (const MbimUuid *uuid);
* @MBIM_SERVICE_STK: SIM toolkit service.
* @MBIM_SERVICE_AUTH: Authentication service.
* @MBIM_SERVICE_DSS: Device Service Stream service.
+ * @MBIM_SERVICE_MS_FIRMWARE_ID: Microsoft Firmware ID service.
*
* Enumeration of the generic MBIM services.
*/
typedef enum {
- MBIM_SERVICE_INVALID = 0,
- MBIM_SERVICE_BASIC_CONNECT = 1,
- MBIM_SERVICE_SMS = 2,
- MBIM_SERVICE_USSD = 3,
- MBIM_SERVICE_PHONEBOOK = 4,
- MBIM_SERVICE_STK = 5,
- MBIM_SERVICE_AUTH = 6,
- MBIM_SERVICE_DSS = 7,
+ MBIM_SERVICE_INVALID = 0,
+ MBIM_SERVICE_BASIC_CONNECT = 1,
+ MBIM_SERVICE_SMS = 2,
+ MBIM_SERVICE_USSD = 3,
+ MBIM_SERVICE_PHONEBOOK = 4,
+ MBIM_SERVICE_STK = 5,
+ MBIM_SERVICE_AUTH = 6,
+ MBIM_SERVICE_DSS = 7,
+ MBIM_SERVICE_MS_FIRMWARE_ID = 8,
} MbimService;
/**
@@ -152,6 +154,15 @@ typedef enum {
*/
#define MBIM_UUID_DSS mbim_uuid_from_service (MBIM_SERVICE_DSS)
+/**
+ * MBIM_UUID_MS_FIRMWARE_ID:
+ *
+ * Get the UUID of the %MBIM_SERVICE_MS_FIRMWARE_ID service.
+ *
+ * Returns: (transfer none): a #MbimUuid.
+ */
+#define MBIM_UUID_MS_FIRMWARE_ID mbim_uuid_from_service (MBIM_SERVICE_MS_FIRMWARE_ID)
+
/* To/From service */
const MbimUuid *mbim_uuid_from_service (MbimService service);
MbimService mbim_uuid_to_service (const MbimUuid *uuid);
diff --git a/src/libmbim-glib/test/test-cid.c b/src/libmbim-glib/test/test-cid.c
index ffb6837..f78a5be 100644
--- a/src/libmbim-glib/test/test-cid.c
+++ b/src/libmbim-glib/test/test-cid.c
@@ -105,17 +105,26 @@ test_cid_dss (void)
TRUE, FALSE, FALSE);
}
+static void
+test_cid_ms_firmware_id (void)
+{
+ test_common (MBIM_SERVICE_MS_FIRMWARE_ID,
+ MBIM_CID_MS_FIRMWARE_ID_GET,
+ FALSE, TRUE, FALSE);
+}
+
int main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
- g_test_add_func ("/libmbim-glib/cid/basic-connect", test_cid_basic_connect);
- g_test_add_func ("/libmbim-glib/cid/sms", test_cid_sms);
- g_test_add_func ("/libmbim-glib/cid/ussd", test_cid_ussd);
- g_test_add_func ("/libmbim-glib/cid/phonebook", test_cid_phonebook);
- g_test_add_func ("/libmbim-glib/cid/stk", test_cid_stk);
- g_test_add_func ("/libmbim-glib/cid/auth", test_cid_auth);
- g_test_add_func ("/libmbim-glib/cid/dss", test_cid_dss);
+ g_test_add_func ("/libmbim-glib/cid/basic-connect", test_cid_basic_connect);
+ g_test_add_func ("/libmbim-glib/cid/sms", test_cid_sms);
+ g_test_add_func ("/libmbim-glib/cid/ussd", test_cid_ussd);
+ g_test_add_func ("/libmbim-glib/cid/phonebook", test_cid_phonebook);
+ g_test_add_func ("/libmbim-glib/cid/stk", test_cid_stk);
+ g_test_add_func ("/libmbim-glib/cid/auth", test_cid_auth);
+ g_test_add_func ("/libmbim-glib/cid/dss", test_cid_dss);
+ g_test_add_func ("/libmbim-glib/cid/ms-firmware-id", test_cid_ms_firmware_id);
return g_test_run ();
}
diff --git a/src/libmbim-glib/test/test-message-parser.c b/src/libmbim-glib/test/test-message-parser.c
index 1f33805..8df8105 100644
--- a/src/libmbim-glib/test/test-message-parser.c
+++ b/src/libmbim-glib/test/test-message-parser.c
@@ -21,6 +21,7 @@
#include "mbim-ussd.h"
#include "mbim-auth.h"
#include "mbim-stk.h"
+#include "mbim-ms-firmware-id.h"
#include "mbim-message.h"
#include "mbim-cid.h"
#include "mbim-utils.h"
@@ -1561,6 +1562,56 @@ test_message_parser_basic_connect_ip_packet_filters_two (void)
mbim_message_unref (response);
}
+static void
+test_message_parser_ms_firmware_id_get (void)
+{
+ const MbimUuid *firmware_id;
+ MbimMessage *response;
+ GError *error = NULL;
+ const guint8 buffer [] = {
+ /* header */
+ 0x03, 0x00, 0x00, 0x80, /* type */
+ 0x40, 0x00, 0x00, 0x00, /* length */
+ 0x02, 0x00, 0x00, 0x00, /* transaction id */
+ /* fragment header */
+ 0x01, 0x00, 0x00, 0x00, /* total */
+ 0x00, 0x00, 0x00, 0x00, /* current */
+ /* command_done_message */
+ 0xE9, 0xF7, 0xDE, 0xA2, /* service id */
+ 0xFE, 0xAF, 0x40, 0x09,
+ 0x93, 0xCE, 0x90, 0xA3,
+ 0x69, 0x41, 0x03, 0xB6,
+ 0x01, 0x00, 0x00, 0x00, /* command id */
+ 0x00, 0x00, 0x00, 0x00, /* status code */
+ 0x10, 0x00, 0x00, 0x00, /* buffer length */
+ /* information buffer */
+ 0x00, 0x11, 0x22, 0x33, /* firmware id */
+ 0x44, 0x55, 0x66, 0x77,
+ 0x88, 0x99, 0xAA, 0xBB,
+ 0xCC, 0xDD, 0xEE, 0xFF };
+
+ const MbimUuid expected_firmware_id = {
+ .a = { 0x00, 0x11, 0x22, 0x33 },
+ .b = { 0x44, 0x55 },
+ .c = { 0x66, 0x77 },
+ .d = { 0x88, 0x99 },
+ .e = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }
+ };
+
+ response = mbim_message_new (buffer, sizeof (buffer));
+
+ g_assert (mbim_message_ms_firmware_id_get_response_parse (
+ response,
+ &firmware_id,
+ &error));
+
+ g_assert_no_error (error);
+
+ g_assert (mbim_uuid_cmp (firmware_id, &expected_firmware_id));
+
+ mbim_message_unref (response);
+}
+
int main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
@@ -1582,6 +1633,7 @@ int main (int argc, char **argv)
g_test_add_func ("/libmbim-glib/message/parser/basic-connect/ip-packet-filters/none", test_message_parser_basic_connect_ip_packet_filters_none);
g_test_add_func ("/libmbim-glib/message/parser/basic-connect/ip-packet-filters/one", test_message_parser_basic_connect_ip_packet_filters_one);
g_test_add_func ("/libmbim-glib/message/parser/basic-connect/ip-packet-filters/two", test_message_parser_basic_connect_ip_packet_filters_two);
+ g_test_add_func ("/libmbim-glib/message/parser/ms-firmware-id/get", test_message_parser_ms_firmware_id_get);
return g_test_run ();
}
diff --git a/src/libmbim-glib/test/test-uuid.c b/src/libmbim-glib/test/test-uuid.c
index 010b0e9..8b0667c 100644
--- a/src/libmbim-glib/test/test-uuid.c
+++ b/src/libmbim-glib/test/test-uuid.c
@@ -77,17 +77,24 @@ test_uuid_dss (void)
"c08a26dd-7718-4382-8482-6e0d583c4d0e");
}
+static void
+test_uuid_ms_firmware_id (void)
+{
+ compare_uuid_strings (MBIM_UUID_MS_FIRMWARE_ID,
+ "e9f7dea2-feaf-4009-93ce-90a3694103b6");
+}
int main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
- g_test_add_func ("/libmbim-glib/uuid/basic-connect", test_uuid_basic_connect);
- g_test_add_func ("/libmbim-glib/uuid/sms", test_uuid_sms);
- g_test_add_func ("/libmbim-glib/uuid/ussd", test_uuid_ussd);
- g_test_add_func ("/libmbim-glib/uuid/phonebook", test_uuid_phonebook);
- g_test_add_func ("/libmbim-glib/uuid/stk", test_uuid_stk);
- g_test_add_func ("/libmbim-glib/uuid/auth", test_uuid_auth);
- g_test_add_func ("/libmbim-glib/uuid/dss", test_uuid_dss);
+ g_test_add_func ("/libmbim-glib/uuid/basic-connect", test_uuid_basic_connect);
+ g_test_add_func ("/libmbim-glib/uuid/sms", test_uuid_sms);
+ g_test_add_func ("/libmbim-glib/uuid/ussd", test_uuid_ussd);
+ g_test_add_func ("/libmbim-glib/uuid/phonebook", test_uuid_phonebook);
+ g_test_add_func ("/libmbim-glib/uuid/stk", test_uuid_stk);
+ g_test_add_func ("/libmbim-glib/uuid/auth", test_uuid_auth);
+ g_test_add_func ("/libmbim-glib/uuid/dss", test_uuid_dss);
+ g_test_add_func ("/libmbim-glib/uuid/ms-firmware-id", test_uuid_ms_firmware_id);
return g_test_run ();
}