diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-06-23 18:37:16 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-06-23 19:57:13 +0200 |
commit | 648fdd9d4fce3cd1a031faf3eae71ad2281425e0 (patch) | |
tree | 106582f9b2567986e4de7108adf391c31a3e8eb0 /build-aux | |
parent | 01a2852a712a4046f6d9a0214c062bebd14c54f6 (diff) | |
download | libmbim-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.py | 51 | ||||
-rw-r--r-- | build-aux/mbim-codegen/Struct.py | 20 |
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': |