uqmi: print radio interfaces in serving system command
[project/uqmi.git] / data / gen-common.pm
1 use lib "$Bin/lib";
2 use JSON;
3
4 @ARGV < 2 and die "Usage: $0 <prefix> <file>\n";
5 my $prefix = shift @ARGV;
6
7 our $ctl;
8 our %tlv_types = (
9 gint8 => "int8_t",
10 guint8 => "uint8_t",
11 gint16 => "int16_t",
12 guint16 => "uint16_t",
13 gint32 => "int32_t",
14 guint32 => "uint32_t",
15 gint64 => "int64_t",
16 guint64 => "uint64_t",
17 gfloat => "float",
18 gboolean => "bool",
19 );
20
21 $prefix eq 'ctl_' and $ctl = 1;
22
23 sub get_json() {
24 local $/;
25 my $json = <>;
26 $json =~ s/^\s*\/\/.*$//mg;
27 return decode_json($json);
28 }
29
30 sub gen_cname($) {
31 my $name = shift;
32
33 $name =~ s/[^a-zA-Z0-9_]/_/g;
34 return lc($name);
35 }
36
37 sub gen_has_types($) {
38 my $data = shift;
39
40 foreach my $field (@$data) {
41 my $type = $field->{"format"};
42 $type and return 1;
43 }
44 return undef
45 }
46
47 sub gen_tlv_set_func($$) {
48 my $name = shift;
49 my $data = shift;
50
51 $name = gen_cname($name);
52 if (gen_has_types($data)) {
53 return "int qmi_set_$name(struct qmi_msg *msg, struct qmi_$name *req)"
54 } else {
55 return "int qmi_set_$name(struct qmi_msg *msg)"
56 }
57 }
58
59 sub gen_tlv_parse_func($$) {
60 my $name = shift;
61 my $data = shift;
62
63 $name = gen_cname($name);
64 if (gen_has_types($data)) {
65 return "int qmi_parse_$name(struct qmi_msg *msg, struct qmi_$name *res)"
66 } else {
67 return "int qmi_parse_$name(struct qmi_msg *msg)"
68 }
69 }
70
71 sub gen_foreach_message_type($$$)
72 {
73 my $data = shift;
74 my $req_sub = shift;
75 my $res_sub = shift;
76
77 foreach my $entry (@$data) {
78 my $args = [];
79 my $fields = [];
80
81 next if $entry->{type} ne 'Message';
82 next if not defined $entry->{input} and not defined $entry->{output};
83
84 &$req_sub($prefix.$entry->{name}." Request", $entry->{input}, $entry);
85 &$res_sub($prefix.$entry->{name}." Response", $entry->{output}, $entry);
86 }
87 }
88
89 1;