4d3c0d76cd0edbd7fda6c286f420bd951375010c
[nas-tools.git] / input-eventd / gen / gen.py
1 # -*- coding: utf-8 -*-
2 # This file is part of the lacie-nas project
3 #
4 # Copyright 2011 Benoît Canet
5 #
6 # Authors:
7 # - Benoît Canet <benoit.canet@gmail.com>
8 #
9 # This program is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; version 3.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program.  If not, see <http://www.gnu.org/licenses/>
20
21 from parser import *
22
23 def license():
24         return """/*
25  * This file is part of the lacie-nas project
26  *
27  * Copyright 2011 Benoît Canet
28  *
29  * Authors:
30  * - Benoît Canet <benoit.canet@gmail.com>
31  *
32  * This program is free software; you can redistribute it and/or modify
33  * it under the terms of the GNU General Public License as published by
34  * the Free Software Foundation; version 3.
35  *
36  * This program is distributed in the hope that it will be useful,
37  * but WITHOUT ANY WARRANTY; without even the implied warranty of
38  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
39  * GNU General Public License for more details.
40  *
41  * You should have received a copy of the GNU General Public License
42  * along with this program.  If not, see <http://www.gnu.org/licenses/>
43  */
44 """
45
46 def generate_header():
47         result = """
48 #ifndef INPUT_TABLES_H
49 #define INPUT_TABLES_H
50
51 #include <stdint.h>
52 """
53         return result
54
55 def generate_footer():
56         return "#endif\n"
57
58 def generate_struct():
59         return """
60 struct input_entry {
61         uint16_t key;
62         char     value[128];
63 };      
64
65 """
66
67 def generate_declaration(name):
68         return "struct input_entry %s[] = {\n" % name
69
70 def generate_table(name, array):
71         result = ""
72         result += generate_declaration(name)
73
74         for key in array:
75                 result += '\t{'
76                 result += '.key = %s, ' % key
77                 result += '.value = "%s"' % array[key]
78                 result += '},\n'
79         
80         result += "\t{}"
81         result += "\n};\n\n"
82         return result
83
84 def generate_index_struct():
85         return """
86 struct index_entry {
87         uint16_t key;
88         struct input_entry *value;
89 };
90
91 """
92
93 def generate_index(types, not_empty):
94         result = "struct index_entry table_index[] = {\n"
95
96         for key in types:
97                 value = types[key][3:]
98                 if value in not_empty:
99                         value = "values_"+ value.lower()
100                         result += "\t{.key = %s, .value = %s},\n" % (key, value)
101
102         result += "\t{}"
103         result += "\n};\n\n"
104         return result
105
106 def generate(filename):
107         result = license()
108         result += generate_header()
109         result += generate_struct()
110         result += generate_index_struct()
111
112         types = parse_file_by_prefix(filename, "EV_")
113         result += generate_table("event_types", types)
114
115         not_empty_types = []
116         for t in get_event_type_list(types):
117                 codes = parse_file_by_prefix(filename, t+"_")
118                 if len(codes):
119                         result += generate_table("values_"+t.lower(), codes)
120                         not_empty_types.append(t)
121
122         result += generate_index(types, not_empty_types)
123         result += generate_footer()
124
125         return result
126