aboutsummaryrefslogtreecommitdiffstats
path: root/build-aux
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-07-15 10:15:23 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-07-15 10:24:31 +0200
commitcf62f84382373190c6da29926f45529da9509a30 (patch)
treef0c4a596e208638dc79477e5533804144d06e533 /build-aux
parent62832041690852bb7e5eb595e550ad5c8d6ddfa5 (diff)
downloadexternal_libqmi-cf62f84382373190c6da29926f45529da9509a30.zip
external_libqmi-cf62f84382373190c6da29926f45529da9509a30.tar.gz
external_libqmi-cf62f84382373190c6da29926f45529da9509a30.tar.bz2
qmi-codegen: allow handling built-in sequence numbers in arrays
TLVs are really limited in size, so if you want to have truly long data passed between host and modem, you may end up needing multiple QMI messages where the long TLV is split in segments. Currently support this by handling a built-in sequence number expected to be found between the array size prefix and the array itself (see e.g. TLV 0x13 (PRL) in 'DMS Activate Manual'). This sequence number can be enabled with the new 'sequence-prefix-format' keyword in the array definition.
Diffstat (limited to 'build-aux')
-rw-r--r--build-aux/qmi-codegen/VariableArray.py147
1 files changed, 125 insertions, 22 deletions
diff --git a/build-aux/qmi-codegen/VariableArray.py b/build-aux/qmi-codegen/VariableArray.py
index c5aadf9..c402da1 100644
--- a/build-aux/qmi-codegen/VariableArray.py
+++ b/build-aux/qmi-codegen/VariableArray.py
@@ -72,6 +72,13 @@ class VariableArray(Variable):
default_array_size = { 'format' : 'guint8' }
self.array_size_element = VariableFactory.create_variable(default_array_size, '', self.container_type)
+ # Load variable type for the sequence prefix
+ if 'sequence-prefix-format' in dictionary:
+ sequence = { 'format' : dictionary['sequence-prefix-format'] }
+ self.array_sequence_element = VariableFactory.create_variable(sequence, '', self.container_type)
+ else:
+ self.array_sequence_element = ''
+
"""
Emit the type for the array element
@@ -150,15 +157,33 @@ class VariableArray(Variable):
f.write(string.Template(template).substitute(translations))
else:
translations['array_size_element_format'] = self.array_size_element.public_format
-
template = (
- '${lp} ${array_size_element_format} ${common_var_prefix}_n_items;\n'
+ '${lp} ${array_size_element_format} ${common_var_prefix}_n_items;\n')
+
+ if self.array_sequence_element != '':
+ translations['array_sequence_element_format'] = self.array_sequence_element.public_format
+ template += (
+ '${lp} ${array_sequence_element_format} ${common_var_prefix}_sequence;\n')
+
+ template += (
'\n'
'${lp} /* Read number of items in the array */\n')
f.write(string.Template(template).substitute(translations))
-
self.array_size_element.emit_buffer_read(f, line_prefix + ' ', common_var_prefix + '_n_items', buffer_name, buffer_len)
+ if self.array_sequence_element != '':
+ template = (
+ '\n'
+ '${lp} /* Read sequence in the array */\n')
+ f.write(string.Template(template).substitute(translations))
+ self.array_size_element.emit_buffer_read(f, line_prefix + ' ', common_var_prefix + '_sequence', buffer_name, buffer_len)
+
+ template = (
+ '\n'
+ '${lp} ${variable_name}_sequence = ${common_var_prefix}_sequence;\n')
+ f.write(string.Template(template).substitute(translations))
+
+
template = (
'\n'
'${lp} ${variable_name} = g_array_sized_new (\n'
@@ -202,15 +227,15 @@ class VariableArray(Variable):
template = (
'${lp}{\n'
- '${lp} guint ${common_var_prefix}_i;\n')
+ '${lp} guint ${common_var_prefix}_i;\n'
+ '\n')
f.write(string.Template(template).substitute(translations))
if self.fixed_size:
translations['fixed_size'] = self.fixed_size
template = (
- '${lp} guint16 ${common_var_prefix}_n_items = ${fixed_size};\n'
- '\n')
+ '${lp} guint16 ${common_var_prefix}_n_items = ${fixed_size};\n')
f.write(string.Template(template).substitute(translations))
else:
translations['array_size_element_format'] = self.array_size_element.public_format
@@ -228,13 +253,27 @@ class VariableArray(Variable):
'${lp} const guint8 *${common_var_prefix}_aux_buffer = &${buffer_name}[${variable_name}];\n'
'${lp} guint16 ${common_var_prefix}_aux_buffer_len = ${buffer_len} - ${variable_name};\n'
'\n'
- '${lp} ${variable_name} += ${array_size_element_size};\n'
- '\n')
+ '${lp} ${variable_name} += ${array_size_element_size};\n')
+
+ if self.array_sequence_element != '':
+ if self.array_sequence_element.public_format == 'guint8':
+ translations['array_sequence_element_size'] = '1'
+ elif self.array_sequence_element.public_format == 'guint16':
+ translations['array_sequence_element_size'] = '2'
+ elif self.array_sequence_element.public_format == 'guint32':
+ translations['array_sequence_element_size'] = '4'
+ else:
+ translations['array_sequence_element_size'] = '0'
+ template += (
+ '\n'
+ '${lp} ${variable_name} += ${array_sequence_element_size};\n')
+
f.write(string.Template(template).substitute(translations))
self.array_size_element.emit_buffer_read(f, line_prefix + ' ', common_var_prefix + '_n_items', common_var_prefix + '_aux_buffer', common_var_prefix + '_aux_buffer_len')
template = (
+ '\n'
'${lp} for (${common_var_prefix}_i = 0; ${common_var_prefix}_i < ${common_var_prefix}_n_items; ${common_var_prefix}_i++) {\n'
'\n')
f.write(string.Template(template).substitute(translations))
@@ -275,6 +314,10 @@ class VariableArray(Variable):
self.array_size_element.emit_buffer_write(f, line_prefix + ' ', common_var_prefix + '_n_items', buffer_name, buffer_len)
+ if self.array_sequence_element != '':
+ self.array_sequence_element.emit_buffer_write(f, line_prefix + ' ', variable_name + '_sequence', buffer_name, buffer_len)
+
+
template = (
'\n'
'${lp} for (${common_var_prefix}_i = 0; ${common_var_prefix}_i < ${variable_name}->len; ${common_var_prefix}_i++) {\n')
@@ -314,15 +357,31 @@ class VariableArray(Variable):
f.write(string.Template(template).substitute(translations))
else:
translations['array_size_element_format'] = self.array_size_element.public_format
-
template = (
- '${lp} ${array_size_element_format} ${common_var_prefix}_n_items;\n'
+ '${lp} ${array_size_element_format} ${common_var_prefix}_n_items;\n')
+
+ if self.array_sequence_element != '':
+ translations['array_sequence_element_format'] = self.array_sequence_element.public_format
+ template += (
+ '${lp} ${array_sequence_element_format} ${common_var_prefix}_sequence;\n')
+
+ template += (
'\n'
'${lp} /* Read number of items in the array */\n')
f.write(string.Template(template).substitute(translations))
-
self.array_size_element.emit_buffer_read(f, line_prefix + ' ', common_var_prefix + '_n_items', buffer_name, buffer_len)
+ if self.array_sequence_element != '':
+ template = (
+ '\n'
+ '${lp} /* Read sequence */\n')
+ f.write(string.Template(template).substitute(translations))
+ self.array_sequence_element.emit_buffer_read(f, line_prefix + ' ', common_var_prefix + '_sequence', buffer_name, buffer_len)
+ template = (
+ '\n'
+ '${lp} g_string_append_printf (${printable}, "[[Seq:%u]] ", ${common_var_prefix}_sequence);\n')
+ f.write(string.Template(template).substitute(translations))
+
template = (
'\n'
'${lp} g_string_append (${printable}, "{");\n'
@@ -349,7 +408,13 @@ class VariableArray(Variable):
translations = { 'lp' : line_prefix,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ translations['array_sequence_element_format'] = self.array_sequence_element.public_format
+ template += (
+ '${lp}${array_sequence_element_format} ${name}_sequence;\n')
+
+ template += (
'${lp}GArray *${name};\n')
return string.Template(template).substitute(translations)
@@ -361,7 +426,13 @@ class VariableArray(Variable):
translations = { 'lp' : line_prefix,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ translations['array_sequence_element_format'] = self.array_sequence_element.public_format
+ template += (
+ '${lp}${array_sequence_element_format} *${name}_sequence,\n')
+
+ template += (
'${lp}GArray **${name},\n')
return string.Template(template).substitute(translations)
@@ -374,7 +445,12 @@ class VariableArray(Variable):
'public_array_element_format' : self.array_element.public_format,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ template += (
+ '${lp}@${name}_sequence: a placeholder for the output sequence number, or %NULL if not required.\n')
+
+ template += (
'${lp}@${name}: a placeholder for the output #GArray of #${public_array_element_format} elements, or %NULL if not required. Do not free it, it is owned by @self.\n')
return string.Template(template).substitute(translations)
@@ -387,15 +463,21 @@ class VariableArray(Variable):
'from' : variable_name_from,
'to' : variable_name_to }
+ template = ''
+ if self.array_sequence_element != '':
+ template += (
+ '${lp}if (${to}_sequence)\n'
+ '${lp} *${to}_sequence = ${from}_sequence;\n')
+
if to_is_reference:
- template = (
+ template += (
'${lp}if (${to})\n'
'${lp} *${to} = ${from};\n')
- return string.Template(template).substitute(translations)
else:
- template = (
+ template += (
'${lp}${to} = ${from};\n')
- return string.Template(template).substitute(translations)
+
+ return string.Template(template).substitute(translations)
"""
@@ -405,7 +487,13 @@ class VariableArray(Variable):
translations = { 'lp' : line_prefix,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ translations['array_sequence_element_format'] = self.array_sequence_element.public_format
+ template += (
+ '${lp}${array_sequence_element_format} ${name}_sequence,\n')
+
+ template += (
'${lp}GArray *${name},\n')
return string.Template(template).substitute(translations)
@@ -418,7 +506,12 @@ class VariableArray(Variable):
'public_array_element_format' : self.array_element.public_format,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ template += (
+ '${lp}@${name}_sequence: the sequence number.\n')
+
+ template += (
'${lp}@${name}: a #GArray of #${public_array_element_format} elements. A new reference to @${name} will be taken.\n')
return string.Template(template).substitute(translations)
@@ -431,7 +524,12 @@ class VariableArray(Variable):
'from' : variable_name_from,
'to' : variable_name_to }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ template += (
+ '${lp}${to}_sequence = ${from}_sequence;\n')
+
+ template += (
'${lp}if (${to})\n'
'${lp} g_array_unref (${to});\n'
'${lp}${to} = g_array_ref (${from});\n')
@@ -446,7 +544,12 @@ class VariableArray(Variable):
'public_array_element_format' : self.array_element.public_format,
'name' : variable_name }
- template = (
+ template = ''
+ if self.array_sequence_element != '':
+ template += (
+ '${lp}@${name}_sequence: the sequence number.\n')
+
+ template += (
'${lp}@${name}: a #GArray of #${public_array_element_format} elements.\n')
return string.Template(template).substitute(translations)