diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-11 20:07:12 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-21 19:28:14 +0200 |
commit | f9e3f791c9e53e604cdd2e2fe35e735a0cc34259 (patch) | |
tree | bdf6c7a30ccf511ba6b02ad76894a12cdd0b6548 | |
parent | 0d2dbd0585075d1b339fbe411e4f188c03f8d5dd (diff) |
mbim-codegen: properly define the 4 types of messages that we may have
MBIM defines 4 types of messages:
* Query (host->function)
* Set (host->function)
* Response (function->host)
* Indication (function->host)
In particular, the Response message is used as reply for both Query and Set.
-rw-r--r-- | build-aux/mbim-codegen/Container.py | 38 | ||||
-rw-r--r-- | build-aux/mbim-codegen/Message.py | 91 | ||||
-rw-r--r-- | cli/mbimcli-basic-connect.c | 20 | ||||
-rw-r--r-- | data/mbim-service-basic-connect.json | 217 | ||||
-rw-r--r-- | libmbim-glib/test/test-message-command-builder.c | 10 | ||||
-rw-r--r-- | libmbim-glib/test/test-message-contents.c | 2 |
6 files changed, 176 insertions, 202 deletions
diff --git a/build-aux/mbim-codegen/Container.py b/build-aux/mbim-codegen/Container.py index 46a77f2..59e03bd 100644 --- a/build-aux/mbim-codegen/Container.py +++ b/build-aux/mbim-codegen/Container.py @@ -36,38 +36,18 @@ class Container: """ Constructor """ - def __init__(self, service, command, message_type, container_type, dictionary): - self.service = service - self.command = command - - # e.g. "Mbim Message Service Something" - self.prefix = "Mbim Message " + service + ' ' + command - + def __init__(self, message_type, dictionary): # We may have 'Query', 'Set' or 'Notify' message types - if message_type == 'Query' or message_type == 'Set' or message_type == 'Notify': - self.message_type = message_type - else: - raise ValueError('Cannot handle message type \'%s\'' % message_type) - - # We may have 'Input' or 'Output' containers - if container_type == 'Input': - self.name = 'Request' + if message_type == 'query': self.message_type_enum = 'MBIM_MESSAGE_TYPE_COMMAND' - elif container_type == 'Output': - if message_type == 'Notify': - self.name = 'Indication' - self.message_type_enum = 'MBIM_MESSAGE_TYPE_INDICATION' - else: - self.name = 'Response' - self.message_type_enum = 'MBIM_MESSAGE_TYPE_COMMAND_DONE' + elif message_type == 'set': + self.message_type_enum = 'MBIM_MESSAGE_TYPE_COMMAND' + elif message_type == 'response': + self.message_type_enum = 'MBIM_MESSAGE_TYPE_COMMAND_DONE' + elif message_type == 'notification': + self.message_type_enum = 'MBIM_MESSAGE_TYPE_INDICATION' else: - raise ValueError('Cannot handle container type \'%s\'' % container_type) - - # Create the composed full name (prefix + name), - # e.g. "Mbim Message Service Something Query Response" - self.fullname = self.prefix + ' ' + self.message_type + ' ' + self.name - - self.fields_dictionary = dictionary + raise ValueError('Cannot handle message type \'%s\'' % message_type) self.fields = [] for field in dictionary: diff --git a/build-aux/mbim-codegen/Message.py b/build-aux/mbim-codegen/Message.py index b9c1480..943f162 100644 --- a/build-aux/mbim-codegen/Message.py +++ b/build-aux/mbim-codegen/Message.py @@ -38,39 +38,33 @@ class Message: self.name = dictionary['name'] # Gather types of command - self.can_query = True if 'query' in dictionary else False - self.can_set = True if 'set' in dictionary else False - self.can_notify = True if 'notify' in dictionary else False + self.query = True if 'query' in dictionary else False + self.set = True if 'set' in dictionary else False + self.response = True if 'response' in dictionary else False + self.notification = True if 'notify' in dictionary else False # Build Fullname - self.fullname = 'MBIM Message ' + self.service + ' ' + self.name + self.fullname = 'MBIM Message ' + self.name # Build CID enum self.cid_enum_name = utils.build_underscore_name('MBIM CID' + self.service + ' ' + self.name).upper() - # Build Query containers - self.query_input = None - self.query_output = None - if self.can_query: - if 'input' in dictionary['query']: - self.query_input = Container(self.service, self.name, 'Query', 'Input', dictionary['query']['input']) - if 'output' in dictionary['query']: - self.query_output = Container(self.service, self.name, 'Query', 'Output', dictionary['query']['output']) - - # Build Set containers - self.set_input = None - self.set_output = None - if self.can_set: - if 'input' in dictionary['set']: - self.set_input = Container(self.service, self.name, 'Set', 'Input', dictionary['set']['input']) - if 'output' in dictionary['set']: - self.set_output = Container(self.service, self.name, 'Set', 'Output', dictionary['set']['output']) - - # Build Notify containers - self.notify_output = None - if self.can_notify: - if 'output' in dictionary['notify']: - self.notify_output = Container(self.service, self.name, 'Notify', 'Output', dictionary['notify']['output']) + # Build input containers + self.query_container = None + if self.query: + self.query_container = Container('query', dictionary['query']) + self.set_container = None + if self.set: + self.set_container = Container('set', dictionary['set']) + self.notify_container = None + + # Build output containers + self.response_container = None + if self.response: + self.response_container = Container('response', dictionary['response']) + self.notification_container = None + if self.notification: + self.notification_container = Container('notification', dictionary['notification']) """ @@ -86,7 +80,7 @@ class Message: 'name_underscore_upper' : utils.build_underscore_name (self.name).upper() } template = ( '\n' - 'MbimMessage *${underscore}_${message_type}_request_new (\n') + 'MbimMessage *${underscore}_${message_type}_new (\n') if container != None: for field in container.fields: @@ -103,7 +97,7 @@ class Message: template = ( '\n' '/**\n' - ' * ${underscore}_${message_type}_request_new:\n') + ' * ${underscore}_${message_type}_new:\n') if container != None: for field in container.fields: @@ -122,7 +116,7 @@ class Message: ' * Returns: a newly allocated #MbimMessage, which should be freed with mbim_message_unref().\n' ' */\n' 'MbimMessage *\n' - '${underscore}_${message_type}_request_new (\n') + '${underscore}_${message_type}_new (\n') if container != None: for field in container.fields: @@ -161,18 +155,17 @@ class Message: """ Emit message parser """ - def _emit_message_parser(self, hfile, cfile, request_or_response, message_type, container): + def _emit_message_parser(self, hfile, cfile, message_type, container): translations = { 'name' : self.name, 'service' : self.service, 'underscore' : utils.build_underscore_name (self.fullname), - 'request_or_response' : request_or_response, 'message_type' : message_type, 'message_type_upper' : message_type.upper(), 'service_underscore_upper' : utils.build_underscore_name (self.service).upper(), 'name_underscore_upper' : utils.build_underscore_name (self.name).upper() } template = ( '\n' - 'gboolean ${underscore}_${message_type}_${request_or_response}_parse (\n' + 'gboolean ${underscore}_${message_type}_parse (\n' ' const MbimMessage *message,\n') if container != None: @@ -190,7 +183,7 @@ class Message: template = ( '\n' '/**\n' - ' * ${underscore}_${message_type}_${request_or_response}_parse:\n' + ' * ${underscore}_${message_type}_parse:\n' ' * @message: the #MbimMessage.\n') if container != None: @@ -210,7 +203,7 @@ class Message: ' * Returns: %TRUE if the message was correctly parsed, %FALSE if @error is set.\n' ' */\n' 'gboolean\n' - '${underscore}_${message_type}_${request_or_response}_parse (\n' + '${underscore}_${message_type}_parse (\n' ' const MbimMessage *message,\n') if container != None: @@ -288,29 +281,25 @@ class Message: Emit the message handling implementation """ def emit(self, hfile, cfile): - if self.can_query: + if self.query: utils.add_separator(hfile, 'Message (Query)', self.fullname); utils.add_separator(cfile, 'Message (Query)', self.fullname); + self._emit_message_creator(hfile, cfile, 'query', self.query_container) - self._emit_message_creator(hfile, cfile, 'query', self.query_input) - if self.query_input: - self._emit_message_parser(hfile, cfile, 'request', 'query', self.query_input) - if self.query_output: - self._emit_message_parser(hfile, cfile, 'response', 'query', self.query_output) - - if self.can_set: + if self.set: utils.add_separator(hfile, 'Message (Set)', self.fullname); utils.add_separator(cfile, 'Message (Set)', self.fullname); + self._emit_message_creator(hfile, cfile, 'set', self.set_container) - self._emit_message_creator(hfile, cfile, 'set', self.set_input) - if self.set_input: - self._emit_message_parser(hfile, cfile, 'request', 'set', self.set_input) - if self.set_output: - self._emit_message_parser(hfile, cfile, 'response', 'set', self.set_output) + if self.response: + utils.add_separator(hfile, 'Message (Response)', self.fullname); + utils.add_separator(cfile, 'Message (Response)', self.fullname); + self._emit_message_parser(hfile, cfile, 'response', self.response_container) - if self.can_notify: - utils.add_separator(hfile, 'Message (Notify)', self.fullname); - utils.add_separator(cfile, 'Message (Notify)', self.fullname); + if self.notification: + utils.add_separator(hfile, 'Message (Notification)', self.fullname); + utils.add_separator(cfile, 'Message (Notification)', self.fullname); + self._emit_message_parser(hfile, cfile, 'notification', self.notification_container) """ diff --git a/cli/mbimcli-basic-connect.c b/cli/mbimcli-basic-connect.c index f72cf54..0f959d2 100644 --- a/cli/mbimcli-basic-connect.c +++ b/cli/mbimcli-basic-connect.c @@ -164,7 +164,7 @@ query_device_caps_ready (MbimDevice *device, return; } - if (!mbim_message_basic_connect_device_caps_query_response_parse ( + if (!mbim_message_device_caps_response_parse ( response, &device_type, &cellular_class, @@ -261,7 +261,7 @@ query_subscriber_ready_status_ready (MbimDevice *device, return; } - if (!mbim_message_basic_connect_subscriber_ready_status_query_response_parse ( + if (!mbim_message_subscriber_ready_status_response_parse ( response, &ready_state, &subscriber_id, @@ -325,7 +325,7 @@ query_radio_state_ready (MbimDevice *device, return; } - if (!mbim_message_basic_connect_radio_state_query_response_parse ( + if (!mbim_message_radio_state_response_parse ( response, &hardware_radio_state, &software_radio_state, @@ -371,7 +371,7 @@ query_device_services_ready (MbimDevice *device, return; } - if (!mbim_message_basic_connect_device_services_query_response_parse ( + if (!mbim_message_device_services_response_parse ( response, &device_services_count, &max_dss_sessions, @@ -461,7 +461,7 @@ pin_ready (MbimDevice *device, return; } - if (!mbim_message_basic_connect_pin_query_response_parse ( + if (!mbim_message_pin_response_parse ( response, &pin_type, &pin_state, @@ -506,7 +506,7 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimMessage *request; g_debug ("Asynchronously querying device capabilities..."); - request = (mbim_message_basic_connect_device_caps_query_request_new (NULL)); + request = (mbim_message_device_caps_query_new (NULL)); mbim_device_command (ctx->device, request, 10, @@ -522,7 +522,7 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimMessage *request; g_debug ("Asynchronously querying subscriber ready status..."); - request = (mbim_message_basic_connect_subscriber_ready_status_query_request_new (NULL)); + request = (mbim_message_subscriber_ready_status_query_new (NULL)); mbim_device_command (ctx->device, request, 10, @@ -538,7 +538,7 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimMessage *request; g_debug ("Asynchronously querying radio state..."); - request = (mbim_message_basic_connect_radio_state_query_request_new (NULL)); + request = (mbim_message_radio_state_query_new (NULL)); mbim_device_command (ctx->device, request, 10, @@ -554,7 +554,7 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimMessage *request; g_debug ("Asynchronously querying device services..."); - request = (mbim_message_basic_connect_device_services_query_request_new (NULL)); + request = (mbim_message_device_services_query_new (NULL)); mbim_device_command (ctx->device, request, 10, @@ -569,7 +569,7 @@ mbimcli_basic_connect_run (MbimDevice *device, MbimMessage *request; g_debug ("Asynchronously querying PIN state..."); - request = (mbim_message_basic_connect_pin_query_request_new (NULL)); + request = (mbim_message_pin_query_new (NULL)); mbim_device_command (ctx->device, request, 10, diff --git a/data/mbim-service-basic-connect.json b/data/mbim-service-basic-connect.json index 669f9c1..b969eba 100644 --- a/data/mbim-service-basic-connect.json +++ b/data/mbim-service-basic-connect.json @@ -1,106 +1,111 @@ [ // ********************************************************************************* - { "name" : "Device Caps", - "service" : "Basic Connect", - "type" : "Command", - "query" : { "output" : [ { "name" : "DeviceType", - "format" : "guint32", - "public-format" : "MbimDeviceType" }, - { "name" : "CellularClass", - "format" : "guint32", - "public-format" : "MbimCellularClass" }, - { "name" : "VoiceClass", - "format" : "guint32", - "public-format" : "MbimVoiceClass" }, - { "name" : "SimClass", - "format" : "guint32", - "public-format" : "MbimSimClass" }, - { "name" : "DataClass", - "format" : "guint32", - "public-format" : "MbimDataClass" }, - { "name" : "SmsCaps", - "format" : "guint32", - "public-format" : "MbimSmsCaps" }, - { "name" : "ControlCaps", - "format" : "guint32", - "public-format" : "MbimCtrlCaps" }, - { "name" : "MaxSessions", - "format" : "guint32" }, - { "name" : "CustomDataClass", - "format" : "string", - "max-size" : "22" }, - { "name" : "DeviceId", - "format" : "string", - "max-size" : "36" }, - { "name" : "FirmwareInfo", - "format" : "string", - "max-size" : "60" }, - { "name" : "HardwareInfo", - "format" : "string", - "max-size" : "60" } ] } }, + { "name" : "Device Caps", + "service" : "Basic Connect", + "type" : "Command", + "query" : [], + "response" : [ { "name" : "DeviceType", + "format" : "guint32", + "public-format" : "MbimDeviceType" }, + { "name" : "CellularClass", + "format" : "guint32", + "public-format" : "MbimCellularClass" }, + { "name" : "VoiceClass", + "format" : "guint32", + "public-format" : "MbimVoiceClass" }, + { "name" : "SimClass", + "format" : "guint32", + "public-format" : "MbimSimClass" }, + { "name" : "DataClass", + "format" : "guint32", + "public-format" : "MbimDataClass" }, + { "name" : "SmsCaps", + "format" : "guint32", + "public-format" : "MbimSmsCaps" }, + { "name" : "ControlCaps", + "format" : "guint32", + "public-format" : "MbimCtrlCaps" }, + { "name" : "MaxSessions", + "format" : "guint32" }, + { "name" : "CustomDataClass", + "format" : "string", + "max-size" : "22" }, + { "name" : "DeviceId", + "format" : "string", + "max-size" : "36" }, + { "name" : "FirmwareInfo", + "format" : "string", + "max-size" : "60" }, + { "name" : "HardwareInfo", + "format" : "string", + "max-size" : "60" } ] }, // ********************************************************************************* - { "name" : "Subscriber Ready Status", - "service" : "Basic Connect", - "type" : "Command", - "query" : { "output" : [ { "name" : "ReadyState", - "format" : "guint32", - "public-format" : "MbimSubscriberReadyState" }, - { "name" : "SubscriberID", - "format" : "string" }, - { "name" : "SimIccId", - "format" : "string" }, - { "name" : "ReadyInfo", - "format" : "guint32", - "public-format" : "MbimReadyInfoFlag" }, - { "name" : "TelephoneNumbersCount", - "format" : "guint32" }, - { "name" : "TelephoneNumbers", - "format" : "string-array", - "array-size-field" : "TelephoneNumbersCount" } ] } }, + { "name" : "Subscriber Ready Status", + "service" : "Basic Connect", + "type" : "Command", + "query" : [], + "response" : [ { "name" : "ReadyState", + "format" : "guint32", + "public-format" : "MbimSubscriberReadyState" }, + { "name" : "SubscriberID", + "format" : "string" }, + { "name" : "SimIccId", + "format" : "string" }, + { "name" : "ReadyInfo", + "format" : "guint32", + "public-format" : "MbimReadyInfoFlag" }, + { "name" : "TelephoneNumbersCount", + "format" : "guint32" }, + { "name" : "TelephoneNumbers", + "format" : "string-array", + "array-size-field" : "TelephoneNumbersCount" } ] }, // ********************************************************************************* - { "name" : "Radio State", - "service" : "Basic Connect", - "type" : "Command", - "query" : { "output" : [ { "name" : "HwRadioState", - "format" : "guint32", - "public-format" : "MbimRadioSwitchState" }, - { "name" : "SwRadioState", - "format" : "guint32", - "public-format" : "MbimRadioSwitchState" } ] } }, + { "name" : "Radio State", + "service" : "Basic Connect", + "type" : "Command", + "set" : [ { "name" : "RadioState", + "format" : "guint32", + "public-format" : "MbimRadioSwitchState" } ], + "query" : [], + "response" : [ { "name" : "HwRadioState", + "format" : "guint32", + "public-format" : "MbimRadioSwitchState" }, + { "name" : "SwRadioState", + "format" : "guint32", + "public-format" : "MbimRadioSwitchState" } ], + "notification" : [ { "name" : "HwRadioState", + "format" : "guint32", + "public-format" : "MbimRadioSwitchState" }, + { "name" : "SwRadioState", + "format" : "guint32", + "public-format" : "MbimRadioSwitchState" } ] }, // ********************************************************************************* - { "name" : "Pin", - "service" : "Basic Connect", - "type" : "Command", - "set" : { "input" : [ { "name" : "PinType", - "format" : "guint32", - "public-format" : "MbimPinType" }, - { "name" : "PinOperation", - "format" : "guint32", - "public-format" : "MbimPinOperation" }, - { "name" : "Pin", - "format" : "string" }, - { "name" : "NewPin", - "format" : "string" } ], - "output" : [ { "name" : "PinType", - "format" : "guint32", - "public-format" : "MbimPinType" }, - { "name" : "PinState", - "format" : "guint32", - "public-format" : "MbimPinState" }, - { "name" : "RemainingAttempts", - "format" : "guint32" } ] }, - "query" : { "output" : [ { "name" : "PinType", - "format" : "guint32", - "public-format" : "MbimPinType" }, - { "name" : "PinState", - "format" : "guint32", - "public-format" : "MbimPinState" }, - { "name" : "RemainingAttempts", - "format" : "guint32" } ] } }, + { "name" : "Pin", + "service" : "Basic Connect", + "type" : "Command", + "set" : [ { "name" : "PinType", + "format" : "guint32", + "public-format" : "MbimPinType" }, + { "name" : "PinOperation", + "format" : "guint32", + "public-format" : "MbimPinOperation" }, + { "name" : "Pin", + "format" : "string" }, + { "name" : "NewPin", + "format" : "string" } ], + "query" : [], + "response" : [ { "name" : "PinType", + "format" : "guint32", + "public-format" : "MbimPinType" }, + { "name" : "PinState", + "format" : "guint32", + "public-format" : "MbimPinState" }, + { "name" : "RemainingAttempts", + "format" : "guint32" } ] }, // ********************************************************************************* { "name" : "MbimDeviceServiceElement", @@ -117,16 +122,16 @@ "format" : "guint32-array", "array-size-field" : "CidsCount" } ] }, - // ********************************************************************************* - { "name" : "Device Services", - "service" : "Basic Connect", - "type" : "Command", - "query" : { "output" : [ { "name" : "DeviceServicesCount", - "format" : "guint32" }, - { "name" : "MaxDssSessions", - "format" : "guint32" }, - { "name" : "DeviceServices", - "format" : "struct-array", - "struct-type" : "MbimDeviceServiceElement", - "array-size-field" : "DeviceServicesCount" } ] } } + { "name" : "Device Services", + "service" : "Basic Connect", + "type" : "Command", + "query" : [], + "response" : [ { "name" : "DeviceServicesCount", + "format" : "guint32" }, + { "name" : "MaxDssSessions", + "format" : "guint32" }, + { "name" : "DeviceServices", + "format" : "struct-array", + "struct-type" : "MbimDeviceServiceElement", + "array-size-field" : "DeviceServicesCount" } ] } ] diff --git a/libmbim-glib/test/test-message-command-builder.c b/libmbim-glib/test/test-message-command-builder.c index 675c831..bd675e3 100644 --- a/libmbim-glib/test/test-message-command-builder.c +++ b/libmbim-glib/test/test-message-command-builder.c @@ -160,11 +160,11 @@ test_message_command_builder_set_pin (void) }; /* PIN set message */ - message = mbim_message_basic_connect_pin_set_request_new (MBIM_PIN_TYPE_PIN1, - MBIM_PIN_OPERATION_ENTER, - "1111", - "", - &error); + message = mbim_message_pin_set_new (MBIM_PIN_TYPE_PIN1, + MBIM_PIN_OPERATION_ENTER, + "1111", + "", + &error); g_assert_no_error (error); g_assert (message != NULL); mbim_message_set_transaction_id (message, 1); diff --git a/libmbim-glib/test/test-message-contents.c b/libmbim-glib/test/test-message-contents.c index bf34576..cb847db 100644 --- a/libmbim-glib/test/test-message-contents.c +++ b/libmbim-glib/test/test-message-contents.c @@ -92,7 +92,7 @@ test_message_contents_basic_connect_device_caps (void) response = mbim_message_new (buffer, sizeof (buffer)); - g_assert (mbim_message_basic_connect_device_caps_query_response_parse ( + g_assert (mbim_message_device_caps_response_parse ( response, &device_type, &cellular_class, |