uqmi: update code generator
[project/uqmi.git] / data / gen-code.pl
index 63871a01eb7da50625da50c2c5c0e3f3c598a6f9..4d53471447ec8275d01d32d795af032a320c773a 100755 (executable)
@@ -19,6 +19,7 @@ my %tlv_get = (
        guint32 => "le32_to_cpu(*(uint32_t *) get_next(4))",
        gint64 => "le64_to_cpu(*(uint64_t *) get_next(8))",
        guint64 => "le64_to_cpu(*(uint64_t *) get_next(8))",
+       gfloat => "({ uint32_t data = le32_to_cpu(*(uint32_t *) get_next(4)); float _val; memcpy(&_val, &data, sizeof(_val)); _val; })"
 );
 
 my %tlv_get_be = (
@@ -74,10 +75,15 @@ sub gen_tlv_parse_field($$$$) {
                        $size = $tlv_get{$prefix};
                        die "Unknown size element type '$prefix'" if not defined $size;
 
+                       my $curvar = "$var\_n";
+                       if (rindex($var,"]") == length($var)-1) {
+                               $curvar = substr($var, 0, index($var, "["))."\_i";
+                               $data .= $indent."$curvar = 0;\n";
+                       }
                        ($var_data, $var_iterator) =
-                               gen_tlv_parse_field($var."[$var\_n]", $elem->{"array-element"}, $n_indent + 1, "i$iterator");
+                               gen_tlv_parse_field($var."[$curvar]", $elem->{"array-element"}, $n_indent + 1, "i$iterator");
 
-                       $var_data .= $indent."\t$var\_n++;\n";
+                       $var_data .= $indent."\t$curvar++;\n";
                        $data .= $indent."$iterator = $size;\n";
                        $data .= $indent."$var = __qmi_alloc_static($iterator * sizeof($var\[0]));\n";
                        $data .= $indent."while($iterator\-- > 0) {\n";
@@ -214,6 +220,7 @@ EOF
                switch(tlv->type) {
 EOF
                foreach my $field (@$data) {
+                       $field = gen_common_ref($field);
                        my $cname = gen_cname($field->{name});
                        gen_tlv_type($cname, $field, $i++);
                }
@@ -413,6 +420,7 @@ sub gen_set_func($$)
 
 EOF
        foreach my $field (@$fields) {
+               $field = gen_common_ref($field);
                my $cname = gen_cname($field->{name});
                gen_tlv_attr_set($cname, $field);
        }