diff --git a/build-aux/qmi-codegen/Message.py b/build-aux/qmi-codegen/Message.py index 3f74c70..199b57d 100644 --- a/build-aux/qmi-codegen/Message.py +++ b/build-aux/qmi-codegen/Message.py @@ -42,6 +42,8 @@ class Message: self.id = dictionary['id'] # The type, which must always be 'Message' self.type = dictionary['type'] + # The version info, optional + self.version_info = dictionary['version'].split('.') if 'version' in dictionary else [] # Create the composed full name (prefix + service + name), # e.g. "Qmi Message Ctl Something Output Result" diff --git a/build-aux/qmi-codegen/MessageList.py b/build-aux/qmi-codegen/MessageList.py index b00df7b..a610a31 100644 --- a/build-aux/qmi-codegen/MessageList.py +++ b/build-aux/qmi-codegen/MessageList.py @@ -118,6 +118,52 @@ class MessageList: cfile.write(string.Template(template).substitute(translations)) + """ + Emit the method responsible for getting in which version the messages were + introduced. + """ + def __emit_get_version_introduced(self, hfile, cfile): + translations = { 'service' : string.lower(self.service) } + + template = ( + '\n' + 'gboolean qmi_message_${service}_get_version_introduced (\n' + ' QmiMessage *self,\n' + ' guint *major,\n' + ' guint *minor);\n') + hfile.write(string.Template(template).substitute(translations)) + + template = ( + '\n' + 'gboolean\n' + 'qmi_message_${service}_get_version_introduced (\n' + ' QmiMessage *self,\n' + ' guint *major,\n' + ' guint *minor)\n' + '{\n' + ' switch (qmi_message_get_message_id (self)) {\n') + + for message in self.list: + # Only add if we know the version info + if message.version_info != []: + translations['enum_name'] = message.id_enum_name + translations['message_major'] = message.version_info[0] + translations['message_minor'] = message.version_info[1] + inner_template = ( + ' case ${enum_name}:\n' + ' *major = ${message_major};\n' + ' *minor = ${message_minor};\n' + ' return TRUE;\n') + template += string.Template(inner_template).substitute(translations) + + template += ( + ' default:\n' + ' return FALSE;\n' + ' }\n' + '}\n') + cfile.write(string.Template(template).substitute(translations)) + + """ Emit the message list handling implementation """ @@ -133,3 +179,4 @@ class MessageList: utils.add_separator(hfile, 'Service-specific printable', self.service); utils.add_separator(cfile, 'Service-specific printable', self.service); self.__emit_get_printable(hfile, cfile) + self.__emit_get_version_introduced(hfile, cfile) diff --git a/libqmi-glib/qmi-message.c b/libqmi-glib/qmi-message.c index e582c32..ec8215a 100644 --- a/libqmi-glib/qmi-message.c +++ b/libqmi-glib/qmi-message.c @@ -707,10 +707,25 @@ qmi_message_get_printable (QmiMessage *self, } gboolean -qmi_message_get_version_introduced (QmiMessage *message, +qmi_message_get_version_introduced (QmiMessage *self, guint *major, guint *minor) { - /* TODO */ - return FALSE; + switch (qmi_message_get_service (self)) { + case QMI_SERVICE_CTL: + /* For CTL service, we'll assume the minimum one */ + *major = 0; + *minor = 0; + return TRUE; + + case QMI_SERVICE_DMS: + return qmi_message_dms_get_version_introduced (self, major, minor); + + case QMI_SERVICE_WDS: + return qmi_message_wds_get_version_introduced (self, major, minor); + + default: + /* For the still unsupported services, cannot do anything */ + return FALSE; + } } diff --git a/libqmi-glib/qmi-message.h b/libqmi-glib/qmi-message.h index def0cd6..6bcac8c 100644 --- a/libqmi-glib/qmi-message.h +++ b/libqmi-glib/qmi-message.h @@ -99,7 +99,7 @@ guint16 qmi_message_get_transaction_id (QmiMessage *self); guint8 qmi_message_get_qmux_flags (QmiMessage *self); guint8 qmi_message_get_qmi_flags (QmiMessage *self); -gboolean qmi_message_get_version_introduced (QmiMessage *message, +gboolean qmi_message_get_version_introduced (QmiMessage *self, guint *major, guint *minor);