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",
20 $prefix eq 'ctl_' and $ctl = 1;
25 return decode_json($json);
31 $name =~ s/[^a-zA-Z0-9_]/_/g;
35 sub gen_has_types($) {
38 foreach my $field (@$data) {
39 my $type = $field->{"format"};
45 sub gen_tlv_set_func($$) {
49 $name = gen_cname($name);
50 if (gen_has_types($data)) {
51 return "int qmi_set_$name(struct qmi_msg *msg, struct qmi_$name *req)"
53 return "int qmi_set_$name(struct qmi_msg *msg)"
57 sub gen_tlv_parse_func($$) {
61 $name = gen_cname($name);
62 if (gen_has_types($data)) {
63 return "int qmi_parse_$name(struct qmi_msg *msg, struct qmi_$name *res)"
65 return "int qmi_parse_$name(struct qmi_msg *msg)"
69 sub gen_foreach_message_type($$$)
75 foreach my $entry (@$data) {
79 next if $entry->{type} ne 'Message';
80 next if not defined $entry->{input} and not defined $entry->{output};
82 &$req_sub($prefix.$entry->{name}." Request", $entry->{input}, $entry);
83 &$res_sub($prefix.$entry->{name}." Response", $entry->{output}, $entry);