blob: 9df53e0087412e9f470d9cfe8ae1013ecbbf06be [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001#!/usr/bin/env python
2#-*- coding: UTF-8 -*-
3
4import os.path
5import sys
6import argparse
7import re
8
9
10
11inputfile = 'V:\gpio\MT6297_EVB_MTK1353_Golden_Setting.csv'
12outpath = 'V:\gpio\\'
13final_setting = []
14label = {'number':0, 'name':1, 'usage':2, 'mode':3, 'drv':4, 'pullen':5, 'pullsel':6, 'dir':7, 'out':8, 'smt':9, 'ies':10, 'user':11, 'app':12}
15
16def setting_entry_process(setting):
17
18 entry = re.split(',', setting.upper())
19 #gpio number
20 temp_list = ['GPIO', entry[label['number']]]
21 entry[label['number']] = ''.join(temp_list)
22
23 #Use as EINT: 1 Use as GPIO: 0
24 if entry[label['usage']] == 'N':
25 entry[label['usage']] = 'USE_AS_GPIO'
26 else:
27 entry[label['usage']] = 'USE_AS_EINT'
28
29 #mode
30 #if isinstance(entry[label['mode']], int) is False:
31 temp_list = ['GPIO_MODE_0', entry[label['mode']]]
32 entry[label['mode']] = ''.join(temp_list)
33
34 #drive strength, default as 0
35 if entry[label['drv']] == 'DEFAULT':
36 entry[label['drv']] = 'DRV_DEFAULT_SETTING'
37 else:
38 temp_list = ['GPIO_DRV', entry[label['drv']]]
39 entry[label['drv']] = ''.join(temp_list)
40
41 #pull enable
42 if entry[label['pullen']] == 'Y':
43 entry[label['pullen']] = 'GPIO_PULL_ENABLE'
44 else:
45 entry[label['pullen']] = 'GPIO_PULL_DISABLE'
46 #pull high:1 pull low:0
47 if entry[label['pullsel']] == 'Y':
48 entry[label['pullsel']] = 'GPIO_PULL_UP'
49 else:
50 entry[label['pullsel']] = 'GPIO_PULL_DOWN'
51
52 #IO dir out:1 in:0
53 if entry[label['dir']] == 'OUT':
54 entry[label['dir']] = 'GPIO_DIR_OUT'
55 elif entry[label['dir']] == 'IN':
56 entry[label['dir']] = 'GPIO_DIR_IN'
57
58 #output high:1 low:0
59 if entry[label['out']] == 'NC':
60 entry[label['out']] = 'OUT_DEFAULT_SETTING'
61 elif entry[label['out']] == 'HIGH':
62 entry[label['out']] = 'GPIO_OUT_ONE'
63 elif entry[label['out']] == 'LOW':
64 entry[label['out']] = 'GPIO_OUT_ZERO'
65
66 #smt
67 if entry[label['smt']] == 'Y':
68 entry[label['smt']] = 'SMT_DEFAULT_SETTING'
69 else:
70 entry[label['smt']] = 'GPIO_SMT_DISABLE'
71
72 #ies
73 if entry[label['ies']] == 'Y':
74 entry[label['ies']] = 'IES_DEFAULT_SETTING'
75 else:
76 entry[label['ies']] = 'GPIO_IES_DISABLE'
77
78 #print entry
79 #print ''
80 #discard GPIO name, user, Application info
81 entry = entry[0:len(label)-2]
82 entry.pop(label['name'])
83 final_setting.append(entry)
84
85def gen_gpio_code(setting, outfile):
86 with open(os.path.abspath(outfile), 'w') as fw:
87
88 fw.write("#ifndef __GPIO_SETTING_H_\n")
89 fw.write("#define __GPIO_SETTING_H_\n\n")
90
91 fw.write("#define USE_AS_GPIO\t\t\t\t(1)\n")
92 fw.write("#define USE_AS_EINT\t\t\t\t(0)\n\n")
93
94 fw.write("#define DEFAULT_SETTING\t\t\t\t\t(-1)\n")
95 fw.write("#define DRV_DEFAULT_SETTING\t\t\t\t(DEFAULT_SETTING)\n")
96 fw.write("#define PULL_EN_DEFAULT_SETTING\t\t\t(DEFAULT_SETTING)\n")
97 fw.write("#define PULL_SEL_DEFAULT_SETTING\t\t(DEFAULT_SETTING)\n")
98 fw.write("#define OUT_DEFAULT_SETTING\t\t\t\t(DEFAULT_SETTING)\n")
99 fw.write("#define SMT_DEFAULT_SETTING\t\t\t\t(DEFAULT_SETTING)\n")
100 fw.write("#define IES_DEFAULT_SETTING\t\t\t\t(DEFAULT_SETTING)\n\n")
101
102 fw.write("struct gpio_setting {\n")
103 fw.write("\tuint32_t number;\n")
104 fw.write("\tuint32_t usage;\n")
105 fw.write("\tuint32_t mode;\n")
106 fw.write("\tuint32_t drv;\n")
107 fw.write("\tuint32_t pull_en;\n")
108 fw.write("\tuint32_t pull_sel;\n")
109 fw.write("\tuint32_t dir;\n")
110 fw.write("\tuint32_t out;\n")
111 fw.write("\tuint32_t smt;\n")
112 fw.write("\tuint32_t ies;\n")
113 fw.write("};\n\n")
114
115 fw.write("struct gpio_setting gpio_golden_table[] = {\n")
116 for entry in setting:
117 fw.write("\t{")
118 for val in entry:
119 fw.write("{0}, ".format(val))
120
121 fw.write("},\n")
122 fw.write("};\n")
123
124 fw.write("#endif")
125
126def main():
127 print("Apollo GPIO code generator:v0.1")
128 parser = argparse.ArgumentParser(description='Apollo GPIO generator')
129
130 parser.add_argument('--input', '-i', required=True,
131 help='Provide the input file')
132 parser.add_argument('--output', '-o', required=False,
133 help='Provide the output path')
134
135 args = parser.parse_args()
136
137 if not os.path.isfile(args.input):
138 #args.input = 'V:\gpio\MT6297_EVB_MTK1353_Golden_Setting.csv'
139 print ("Input file not exist.")
140 sys.exit(0)
141
142 if args.output is None or not os.path.isdir(args.output):
143 outpath = os.path.dirname(os.path.abspath(__file__))
144# print "Output path set as:" ,outpath
145 else:
146 outpath = os.path.abspath(args.output)
147# print "args.output:",args.output
148# print "outpath:", outpath
149
150 with open(os.path.abspath(args.input), 'r') as fr:
151 print ("input file:",args.input)
152 for line in fr:
153 MatchObj = re.match('(.*):[ ]*(\w+)', line)
154 if MatchObj is not None:
155 filename = MatchObj.group(2)
156 print ("Golden setting table:", filename)
157 filename = 'gpio_golden'
158 temp = [os.path.join(outpath, filename), '.h']
159 outfile = ''.join(temp)
160 print ("output file:", outfile)
161 MatchObject = re.search('(?<=\d,)\w+', line)
162 if MatchObject is not None:
163 line = line.strip()
164 setting_entry_process(line)
165 else:
166 continue
167
168 gen_gpio_code(final_setting, outfile)
169
170if __name__ == '__main__':
171 main()