diff options
author | Ben Chan <benchan@chromium.org> | 2014-02-26 22:26:48 -0800 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-02-27 09:42:37 +0100 |
commit | d482a37156a70a7b778ed0c1aaeecdc9b5a7a8dd (patch) | |
tree | 78389d9d0a850343d3bd757a573100cb6d0fff45 /src/libmbim-glib | |
parent | 263b020d05f73e74be618c6e854a1461c5957c05 (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.am | 18 | ||||
-rw-r--r-- | src/libmbim-glib/libmbim-glib.h | 1 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-cid.c | 22 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-cid.h | 12 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-message.c | 2 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-uuid.c | 15 | ||||
-rw-r--r-- | src/libmbim-glib/mbim-uuid.h | 27 | ||||
-rw-r--r-- | src/libmbim-glib/test/test-cid.c | 23 | ||||
-rw-r--r-- | src/libmbim-glib/test/test-message-parser.c | 52 | ||||
-rw-r--r-- | src/libmbim-glib/test/test-uuid.c | 21 |
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 (); } |