diff --git a/tests/scripts/gen_mbed_code.py b/tests/scripts/gen_mbed_code.py
index c63555d..17f70d3 100644
--- a/tests/scripts/gen_mbed_code.py
+++ b/tests/scripts/gen_mbed_code.py
@@ -107,9 +107,12 @@
 void {name}_wrapper( void ** params )
 {{
     {unused_params}
+{locals}
     {name}( {args} );
 }}
-'''.format(name=name, unused_params='(void)params;' if len(args_dispatch) == 0 else '', args=', '.join(args_dispatch))
+'''.format(name=name, unused_params='(void)params;' if len(args_dispatch[1]) == 0 else '',
+           args=', '.join(args_dispatch[1]),
+           locals=args_dispatch[0])
     return wrapper
 
 
@@ -204,6 +207,7 @@
     :return: 
     """
     args = []
+    locals = ''
     args_dispatch = []
     m = re.search('\s*void\s+(\w+)\s*\(', line, re.I)
     if not m:
@@ -211,7 +215,6 @@
     name = m.group(1)
     line = line[len(m.group(0)):]
     arg_idx = 0
-    last_was_hex = False
     for arg in line[:line.find(')')].split(','):
         arg = arg.strip()
         if arg == '':
@@ -222,18 +225,19 @@
         elif re.search('char\s*\*\s*.*', arg.strip()):
             args.append('char*')
             args_dispatch.append('(char *) params[%d]' % arg_idx)
-        elif re.search('uint8_t\s*\*\s*.*', arg.strip()):
+        elif re.search('HexParam_t\s*\*\s*.*', arg.strip()):
             args.append('hex')
-            args_dispatch.append('(uint8_t *) params[%d]' % arg_idx)
-            last_was_hex = True
-        elif re.search('uint32_t\s+.*', arg.strip()) and last_was_hex:
-            last_was_hex = False
-            args_dispatch.append('*( (uint32_t *) params[%d] )' % arg_idx)
+            # create a structure
+            locals += """    HexParam_t hex%d = {%s, %s};
+""" % (arg_idx, '(uint8_t *) params[%d]' % arg_idx, '*( (uint32_t *) params[%d] )' % (arg_idx + 1))
+
+            args_dispatch.append('&hex%d' % arg_idx)
+            arg_idx += 1
         else:
             raise ValueError("Test function arguments can only be 'int' or 'char *'\n%s" % line)
         arg_idx += 1
 
-    return name, args, args_dispatch
+    return name, args, (locals, args_dispatch)
 
 
 def parse_function_code(line_no, funcs_f, deps, suite_deps):
