summaryrefslogtreecommitdiff
path: root/build-aux
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-06-23 18:37:16 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-06-23 19:57:13 +0200
commit648fdd9d4fce3cd1a031faf3eae71ad2281425e0 (patch)
tree106582f9b2567986e4de7108adf391c31a3e8eb0 /build-aux
parent01a2852a712a4046f6d9a0214c062bebd14c54f6 (diff)
downloadlibmbim-648fdd9d4fce3cd1a031faf3eae71ad2281425e0.tar.gz
mbim-codegen: add support for fixed-sized byte arrays
Diffstat (limited to 'build-aux')
-rw-r--r--build-aux/mbim-codegen/Message.py51
-rw-r--r--build-aux/mbim-codegen/Struct.py20
2 files changed, 62 insertions, 9 deletions
diff --git a/build-aux/mbim-codegen/Message.py b/build-aux/mbim-codegen/Message.py
index afa07a7..85af1f5 100644
--- a/build-aux/mbim-codegen/Message.py
+++ b/build-aux/mbim-codegen/Message.py
@@ -46,7 +46,9 @@ def validate_fields(fields):
flag_always_read_field(fields, condition['field'])
# Look for array size fields, which need to be always read
- if field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ pass
+ elif field['format'] == 'ref-byte-array':
pass
elif field['format'] == 'unsized-byte-array':
pass
@@ -203,7 +205,9 @@ class Message:
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' const guint8 *${field},\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' const guint32 ${field}_size,\n'
' const guint8 *${field},\n')
elif field['format'] == 'uuid':
@@ -255,8 +259,11 @@ class Message:
translations['field'] = utils.build_underscore_name_from_camelcase (field['name'])
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' * @${field}: the \'${name}\' field, given as an array of ${array_size} #guint8 values.\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' * @${field}_size: size of the ${field} array.\n'
' * @${field}: the \'${name}\' field, given as an array of #guint8 values.\n')
elif field['format'] == 'uuid':
@@ -308,8 +315,11 @@ class Message:
translations['field'] = utils.build_underscore_name_from_camelcase (field['name'])
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' const guint8 *${field},\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' const guint32 ${field}_size,\n'
' const guint8 *${field},\n')
elif field['format'] == 'uuid':
@@ -362,6 +372,7 @@ class Message:
translations['array_size_field'] = utils.build_underscore_name_from_camelcase(field['array-size-field']) if 'array-size-field' in field else ''
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
translations['struct_underscore'] = utils.build_underscore_name_from_camelcase (translations['struct'])
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
inner_template = ''
if 'available-if' in field:
@@ -374,7 +385,9 @@ class Message:
else:
inner_template += (' {\n')
- if field['format'] == 'unsized-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template += (' _mbim_message_command_builder_append_byte_array (builder, FALSE, ${field}, ${array_size});\n')
+ elif field['format'] == 'unsized-byte-array':
inner_template += (' _mbim_message_command_builder_append_byte_array (builder, FALSE, ${field}, ${field}_size);\n')
elif field['format'] == 'ref-byte-array':
inner_template += (' _mbim_message_command_builder_append_byte_array (builder, TRUE, ${field}, ${field}_size);\n')
@@ -442,7 +455,9 @@ class Message:
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' const guint8 **${field},\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' guint32 *${field}_size,\n'
' const guint8 **${field},\n')
elif field['format'] == 'uuid':
@@ -496,8 +511,11 @@ class Message:
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
translations['struct_underscore'] = utils.build_underscore_name_from_camelcase (translations['struct'])
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' * @${field}: return location for an array of ${array_size} #guint8 values. Do not free the returned value, it is owned by @message.\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' * @${field}_size: return location for the size of the ${field} array.\n'
' * @${field}: return location for an array of #guint8 values. Do not free the returned value, it is owned by @message.\n')
elif field['format'] == 'uuid':
@@ -551,7 +569,9 @@ class Message:
translations['public'] = field['public-format'] if 'public-format' in field else field['format']
translations['struct'] = field['struct-type'] if 'struct-type' in field else ''
- if field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
+ if field['format'] == 'byte-array':
+ inner_template = (' const guint8 **${field},\n')
+ elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' guint32 *${field}_size,\n'
' const guint8 **${field},\n')
elif field['format'] == 'uuid':
@@ -610,6 +630,7 @@ class Message:
translations['array_size_field'] = utils.build_underscore_name_from_camelcase(field['array-size-field']) if 'array-size-field' in field else ''
translations['struct_name'] = utils.build_underscore_name_from_camelcase(field['struct-type']) if 'struct-type' in field else ''
translations['struct_type'] = field['struct-type'] if 'struct-type' in field else ''
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
inner_template = (
'\n'
@@ -621,7 +642,11 @@ class Message:
translations['condition_value'] = condition['value']
inner_template += (
' if (!(_${condition_field} ${condition_operation} ${condition_value})) {\n')
- if field['format'] == 'unsized-byte-array' or \
+ if field['format'] == 'byte-array':
+ inner_template += (
+ ' if (${field})\n'
+ ' *${field} = NULL;\n')
+ elif field['format'] == 'unsized-byte-array' or \
field['format'] == 'ref-byte-array':
inner_template += (
' if (${field}_size)\n'
@@ -658,6 +683,14 @@ class Message:
' if (${field} != NULL)\n'
' *${field} = _${field};\n'
' offset += 4;\n')
+ elif field['format'] == 'byte-array':
+ inner_template += (
+ ' const guint8 *tmp;\n'
+ '\n'
+ ' tmp = _mbim_message_read_byte_array (message, 0, offset, FALSE, NULL);\n'
+ ' if (${field} != NULL)\n'
+ ' *${field} = tmp;\n'
+ ' offset += ${array_size};\n')
elif field['format'] == 'unsized-byte-array':
inner_template += (
' const guint8 *tmp;\n'
diff --git a/build-aux/mbim-codegen/Struct.py b/build-aux/mbim-codegen/Struct.py
index 8907085..c673d3e 100644
--- a/build-aux/mbim-codegen/Struct.py
+++ b/build-aux/mbim-codegen/Struct.py
@@ -71,6 +71,8 @@ class Struct:
if field['format'] == 'uuid':
inner_template = (
' * @${field_name_underscore}: a #MbimUuid.\n')
+ elif field['format'] =='byte-array':
+ inner_template = (' * @${field_name_underscore}: an array of #guint8 values.\n')
elif field['format'] =='unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (' * @${field_name_underscore}_size: size of the ${field_name_underscore} array.\n'
' * @${field_name_underscore}: an array of #guint8 values.\n')
@@ -119,6 +121,10 @@ class Struct:
if field['format'] == 'uuid':
inner_template = (
' MbimUuid ${field_name_underscore};\n')
+ elif field['format'] == 'byte-array':
+ translations['array_size'] = field['array-size']
+ inner_template = (
+ ' guint8 ${field_name_underscore}[${array_size}];\n')
elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array':
inner_template = (
' guint32 ${field_name_underscore}_size;\n'
@@ -331,6 +337,17 @@ class Struct:
' memcpy (out->${field_name_underscore}, tmp, out->${field_name_underscore}_size);\n'
' /* no offset update expected, this should be the last field */\n'
' }\n')
+ elif field['format'] == 'byte-array':
+ translations['array_size'] = field['array-size']
+ inner_template += (
+ '\n'
+ ' {\n'
+ ' const guint8 *tmp;\n'
+ '\n'
+ ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, FALSE, NULL));\n'
+ ' memcpy (out->${field_name_underscore}, tmp, ${array_size});\n'
+ ' offset += ${array_size};\n'
+ ' }\n')
elif field['format'] == 'guint32':
inner_template += (
'\n'
@@ -457,10 +474,13 @@ class Struct:
for field in self.contents:
translations['field'] = utils.build_underscore_name_from_camelcase(field['name'])
+ translations['array_size'] = field['array-size'] if 'array-size' in field else ''
translations['array_size_field'] = utils.build_underscore_name_from_camelcase(field['array-size-field']) if 'array-size-field' in field else ''
if field['format'] == 'uuid':
inner_template = (' _mbim_struct_builder_append_uuid (builder, &(value->${field}));\n')
+ elif field['format'] == 'byte-array':
+ inner_template = (' _mbim_struct_builder_append_byte_array (builder, FALSE, value->${field}, ${array_size});\n')
elif field['format'] == 'unsized-byte-array':
inner_template = (' _mbim_struct_builder_append_byte_array (builder, FALSE, value->${field}, value->${field}_size);\n')
elif field['format'] == 'ref-byte-array':