9275d4e3a84068894d123441e1e8be045895a80c
4 @ARGV < 2 and die "Usage: $0 <prefix> <file>\n";
5 my $prefix = shift @ARGV;
12 guint16
=> "uint16_t",
14 guint32
=> "uint32_t",
16 guint64
=> "uint64_t",
22 my @c_reserved_keywords = (
70 $prefix eq 'ctl_' and $ctl = 1;
75 $json =~ s/^\s*\/\/.*$//mg;
76 return decode_json
($json);
82 $name =~ s/[^a-zA-Z0-9_]/_/g;
83 $name = "_${name}" if $name =~ /^\d/;
85 $name = "_${name}" if (grep {$_ eq $name} @c_reserved_keywords);
89 sub gen_has_types
($) {
92 foreach my $field (@
$data) {
93 $field = gen_common_ref
($field);
94 my $type = $field->{"format"};
100 sub gen_tlv_set_func
($$) {
104 $name = gen_cname
($name);
105 if (gen_has_types
($data)) {
106 return "int qmi_set_$name(struct qmi_msg *msg, struct qmi_$name *req)"
108 return "int qmi_set_$name(struct qmi_msg *msg)"
112 sub gen_tlv_parse_func
($$) {
116 $name = gen_cname
($name);
117 if (gen_has_types
($data)) {
118 return "int qmi_parse_$name(struct qmi_msg *msg, struct qmi_$name *res)"
120 return "int qmi_parse_$name(struct qmi_msg *msg)"
124 sub gen_common_ref
($$) {
126 $field = $common_ref{$field->{'common-ref'}} if $field->{'common-ref'} ne '';
130 sub gen_foreach_message_type
($$$)
137 foreach my $entry (@
$data) {
141 $common_ref{$entry->{'common-ref'}} = $entry if $entry->{'common-ref'} ne '';
143 next if $entry->{type
} ne 'Message';
144 next if not defined $entry->{input
} and not defined $entry->{output
};
146 &$req_sub($prefix.$entry->{name
}." Request", $entry->{input
}, $entry);
147 &$res_sub($prefix.$entry->{name
}." Response", $entry->{output
}, $entry);
150 foreach my $entry (@
$data) {
154 $common_ref{$entry->{'common-ref'}} = $entry if $entry->{'common-ref'} ne '';
156 next if $entry->{type
} ne 'Indication';
157 next if not defined $entry->{input
} and not defined $entry->{output
};
159 &$ind_sub($prefix.$entry->{name
}." Indication", $entry->{output
}, $entry);