Subversion Repositories HomeAutomation

Rev

Rev 1983 | Rev 1993 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1983 Rev 1991
1
#!/usr/bin/python
1
#!/usr/bin/python
2
 
2
 
3
# Written by Mattias Runge 2008-05-13
3
# Written by Mattias Runge 2008-05-13
4
 
4
 
5
import os
5
import os
6
import sys
6
import sys
7
import getopt
7
import getopt
8
 
8
 
9
moddir = sys.path[0] + "/../../EmbeddedSoftware/AVR/module"
9
moddir = sys.path[0] + "/../../EmbeddedSoftware/AVR/module"
10
localmoddir = os.getcwd() + "/modules"
10
localmoddir = os.getcwd() + "/modules"
11
 
11
 
12
def getModules():
12
def getModules():
13
	modules = []
13
	modules = []
14
	for fileName in os.listdir(moddir):
14
	for fileName in os.listdir(moddir):
15
		if fileName[0] != '.' and fileName != "template":
15
		if fileName[0] != '.' and fileName != "template":
16
			modules.append(fileName)
16
			modules.append(fileName)
17
 
17
 
18
	return modules
18
	return modules
19
 
19
 
20
 
20
 
21
def getLocalModules():
21
def getLocalModules():
22
	modules = []
22
	modules = []
23
	for fileName in os.listdir(localmoddir):
23
	for fileName in os.listdir(localmoddir):
24
		if fileName[0] != '.':
24
		if fileName[0] != '.':
25
			modules.append(fileName)
25
			modules.append(fileName)
26
 
26
 
27
	return modules
27
	return modules
28
 
28
 
29
 
29
 
30
def parseModuleIdFromFile(moduleName, fileName):
30
def parseModuleIdFromFile(moduleName, fileName):
31
	config_inc = open(fileName, 'r') 
31
	config_inc = open(fileName, 'r') 
32
	config_inc_lines = config_inc.readlines()
32
	config_inc_lines = config_inc.readlines()
33
	config_inc.close()
33
	config_inc.close()
34
	takenIds = []
34
	takenIds = []
35
	for line in config_inc_lines:
35
	for line in config_inc_lines:
36
		line = line.strip("\n").strip(" ")
36
		line = line.strip("\n").strip(" ")
37
		
37
		
38
		if line.find(moduleName + "_ID") != -1:
38
		if line.find(moduleName + "_ID") != -1:
39
			parts = line.split("=")
39
			parts = line.split("=")
40
			if parts[1].strip(" ") != -1 and parts[1].strip(" ") != "<ID>":
40
			if parts[1].strip(" ") != -1 and parts[1].strip(" ") != "<ID>":
41
				takenIds.append(int(parts[1].strip(" "), 16))
41
				takenIds.append(int(parts[1].strip(" "), 16))
42
				print "hittade: "+parts[1].strip(" ")+" in file: "+fileName
42
				print "hittade: "+parts[1].strip(" ")+" in file: "+fileName
43
	return takenIds
43
	return takenIds
44
 
44
 
45
 
45
 
46
def getModuleIdsFromFile(moduleName):
46
def getModuleIdsFromFile(moduleName):
47
	takenIds = []
47
	takenIds = []
48
	for applicationName in os.listdir("../"):	
48
	for applicationName in os.listdir("../"):	
49
		if applicationName[0] != '.' and os.path.exists("../" + applicationName + "/config.inc"):
49
		if applicationName[0] != '.' and os.path.exists("../" + applicationName + "/config.inc"):
50
			takenIds = parseModuleIdFromFile(moduleName, "../" + applicationName + "/config.inc")
50
			takenIds = parseModuleIdFromFile(moduleName, "../" + applicationName + "/config.inc")
51
 
51
 
52
	return takenIds
52
	return takenIds
53
	
53
	
54
 
54
 
55
def getFreeModuleId(takenIds):
55
def getFreeModuleId(takenIds):
56
	if len(takenIds) == 0:
56
	if len(takenIds) == 0:
57
		return 1
57
		return 1
58
	takenIds.sort()
58
	takenIds.sort()
59
 
59
 
60
	lastId = 0
60
	lastId = 0
61
 
61
 
62
	for takenId in takenIds:
62
	for takenId in takenIds:
63
		if takenId != lastId+1:
63
		if takenId != lastId+1:
64
			return lastId+1
64
			return lastId+1
65
		lastId = takenId
65
		lastId = takenId
66
 
66
 
67
	return lastId+1
67
	return lastId+1
68
 
68
 
69
 
69
 
70
 
70
 
71
def compileMainFile():
71
def compileMainFile():
72
	print "Compiling new main.c..."
72
	print "Compiling new main.c..."
73
	main_c_template = open('src/main.c.template', 'r') 
73
	main_c_template = open('src/main.c.template', 'r') 
74
	main_c_template_lines = main_c_template.readlines()
74
	main_c_template_lines = main_c_template.readlines()
75
	main_c_template.close()
75
	main_c_template.close()
76
	
76
	
77
	modules = getLocalModules()
77
	modules = getLocalModules()
78
	
78
	
79
	main_c = open('src/main.c', 'w') 
79
	main_c = open('src/main.c', 'w') 
80
	
80
	
81
	for main_c_template_line in main_c_template_lines:
81
	for main_c_template_line in main_c_template_lines:
82
		pos_include = main_c_template_line.find('%INCLUDE')
82
		pos_include = main_c_template_line.find('%INCLUDE')
83
		pos_init = main_c_template_line.find('%INIT')
83
		pos_init = main_c_template_line.find('%INIT')
84
		pos_process = main_c_template_line.find('%PROCESS')
84
		pos_process = main_c_template_line.find('%PROCESS')
85
		pos_list = main_c_template_line.find('%LIST')
85
		pos_list = main_c_template_line.find('%LIST')
86
		pos_handlemsg = main_c_template_line.find('%HANDLEMSG')
86
		pos_handlemsg = main_c_template_line.find('%HANDLEMSG')
87
		
87
		
88
		if pos_include != -1:
88
		if pos_include != -1:
89
			for moduleName in modules:
89
			for moduleName in modules:
90
				main_c.write(main_c_template_line[:pos_include] + "#include \"../modules/" + moduleName + "/" + moduleName + ".h\"\n")
90
				main_c.write(main_c_template_line[:pos_include] + "#include \"../modules/" + moduleName + "/" + moduleName + ".h\"\n")
91
		elif pos_init != -1:
91
		elif pos_init != -1:
92
			for moduleName in modules:
92
			for moduleName in modules:
93
				main_c.write(main_c_template_line[:pos_init] + moduleName + "_Init();\n")
93
				main_c.write(main_c_template_line[:pos_init] + moduleName + "_Init();\n")
94
		elif pos_process != -1:
94
		elif pos_process != -1:
95
			for moduleName in modules:
95
			for moduleName in modules:
96
				main_c.write(main_c_template_line[:pos_process] + moduleName + "_Process();\n")
96
				main_c.write(main_c_template_line[:pos_process] + moduleName + "_Process();\n")
97
		elif pos_list != -1:
97
		elif pos_list != -1:
98
			count = 1
98
			count = 1
99
			for moduleName in modules:
99
			for moduleName in modules:
100
				main_c.write(main_c_template_line[:pos_list] + moduleName + "_List(" + str(count) + ");\n")
100
				main_c.write(main_c_template_line[:pos_list] + moduleName + "_List(" + str(count) + ");\n")
101
				count += 1
101
				count += 1
102
		elif pos_handlemsg != -1:
102
		elif pos_handlemsg != -1:
103
			for moduleName in modules:
103
			for moduleName in modules:
104
				main_c.write(main_c_template_line[:pos_handlemsg] + moduleName + "_HandleMessage(&rxMsg);\n")
104
				main_c.write(main_c_template_line[:pos_handlemsg] + moduleName + "_HandleMessage(&rxMsg);\n")
105
		else:
105
		else:
106
			main_c.write(main_c_template_line)
106
			main_c.write(main_c_template_line)
107
 
107
 
108
	main_c.close()
108
	main_c.close()
109
	
109
	
110
	print "Creation of main.c complete"
110
	print "Creation of main.c complete"
111
 
111
 
112
def readConfigSection(fileName, sectionName):
112
def readConfigSection(fileName, sectionName):
113
	fileInstance = open(fileName, 'r')
113
	fileInstance = open(fileName, 'r')
114
	lines = fileInstance.readlines()
114
	lines = fileInstance.readlines()
115
	fileInstance.close()
115
	fileInstance.close()
116
	
116
	
117
	sectionLines = []
117
	sectionLines = []
118
	
118
	
119
	inSection = False
119
	inSection = False
120
	
120
	
121
	for line in lines:
121
	for line in lines:
122
		if not inSection:
122
		if not inSection:
123
			if line.find("## Section " + sectionName + " --") != -1:
123
			if line.find("## Section " + sectionName + " --") != -1:
124
				inSection = True
124
				inSection = True
125
				sectionLines.append(line.strip("\n"))
125
				sectionLines.append(line.strip("\n"))
126
		else:
126
		else:
127
			if line.find("## End section " + sectionName + " --") != -1:
127
			if line.find("## End section " + sectionName + " --") != -1:
128
				inSection = False
128
				inSection = False
129
				
129
				
130
			sectionLines.append(line.strip("\n"))
130
			sectionLines.append(line.strip("\n"))
131
			
131
			
132
	return sectionLines
132
	return sectionLines
133
	
133
	
134
 
134
 
135
def updateConfigFile():
135
def updateConfigFile():
136
	print "Updating config.inc..."
136
	print "Updating config.inc..."
137
	modules = getLocalModules()
137
	modules = getLocalModules()
138
	moduleSections = {}
138
	moduleSections = {}
139
	applicationSection = []
139
	applicationSection = []
140
	moduleName="none"
140
	moduleName="none"
141
	if not os.path.exists("config.inc"):
141
	if not os.path.exists("config.inc"):
142
		applicationSection = readConfigSection("src/config.inc.template", "application")
142
		applicationSection = readConfigSection("src/config.inc.template", "application")
143
		
143
		
144
		for moduleName in modules:
144
		for moduleName in modules:
145
			moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
145
			moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
146
	else:
146
	else:
147
		applicationSection = readConfigSection("config.inc", "application")
147
		applicationSection = readConfigSection("config.inc", "application")
148
		
148
		
149
		for moduleName in modules:
149
		for moduleName in modules:
150
			moduleSections[moduleName] = readConfigSection("config.inc", moduleName)
150
			moduleSections[moduleName] = readConfigSection("config.inc", moduleName)
151
			
151
			
152
			if len(moduleSections[moduleName]) <= 1:
152
			if len(moduleSections[moduleName]) <= 1:
153
				moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
153
				moduleSections[moduleName] = readConfigSection(localmoddir + "/" + moduleName + "/config.inc.template", moduleName)
154
	
154
	
155
	timers = 0
155
	timers = 0
156
	pcints = 0
156
	pcints = 0
157
	
157
	
158
	moduleIds = getModuleIdsFromFile(moduleName)
158
	moduleIds = getModuleIdsFromFile(moduleName)
159
	
159
	
160
	for moduleName, moduleSection in moduleSections.iteritems():
160
	for moduleName, moduleSection in moduleSections.iteritems():
161
		c = 0
161
		c = 0
162
		for line in moduleSection:
162
		for line in moduleSection:
163
			if len(line) > 0:
163
			if len(line) > 0:
164
				if line[0] != '#':
164
				if line[0] != '#':
165
					if line.find("<ID>") != -1:
165
					if line.find("<ID>") != -1:
166
						new_ID = getFreeModuleId(moduleIds)
166
						new_ID = getFreeModuleId(moduleIds)
167
						print "id = "+hex(new_ID)
167
						print "id = "+hex(new_ID)
168
						moduleIds.append(new_ID)
168
						moduleIds.append(new_ID)
169
						line = line.replace("<ID>", hex(new_ID))
169
						line = line.replace("<ID>", hex(new_ID))
170
					elif line.find("<TIMER>") != -1:
170
					elif line.find("<TIMER>") != -1:
171
						line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
171
						line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
172
						timers += 1
172
						timers += 1
173
					elif line.find("<PCINT>") != -1:
173
					elif line.find("<PCINT>") != -1:
174
						line = line[:line.find("=")+1] + hex(pcints) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
174
						line = line[:line.find("=")+1] + hex(pcints) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
175
						pcints += 1
175
						pcints += 1
176
	
176
	
177
			moduleSection[c] = line;
177
			moduleSection[c] = line;
178
			c += 1
178
			c += 1
179
	
179
	
180
	c = 0
180
	c = 0
181
	for line in applicationSection:
181
	for line in applicationSection:
182
		if len(line) > 0:
182
		if len(line) > 0:
183
			if line[0] != '#':
183
			if line[0] != '#':
184
				if line.find("<TIMER>") != -1:
184
				if line.find("<TIMER>") != -1:
185
					line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
185
					line = line[:line.find("=")+1] + hex(timers) + " /* <TIMER> -- DO NOT REMOVE THIS COMMENT -- */"
186
					timers += 1
186
					timers += 1
187
				elif line.find("TIMER_NUM_TIMERS=") != -1:
187
				elif line.find("TIMER_NUM_TIMERS=") != -1:
188
					line = "TIMER_NUM_TIMERS=" + hex(timers)
188
					line = "TIMER_NUM_TIMERS=" + hex(timers)
189
				elif line.find("NUMBER_OF_MODULES=") != -1:
189
				elif line.find("NUMBER_OF_MODULES=") != -1:
190
					line = "NUMBER_OF_MODULES=" + hex(len(modules))
190
					line = "NUMBER_OF_MODULES=" + hex(len(modules))
191
				elif line.find("<PCINT>") != -1:
191
				elif line.find("<PCINT>") != -1:
192
					line = line[:line.find("=")+1] + hex(pcints) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
192
					line = line[:line.find("=")+1] + hex(pcints) + " /* <PCINT> -- DO NOT REMOVE THIS COMMENT -- */"
193
					pcints += 1
193
					pcints += 1
194
				elif line.find("PCINT_NUM_PCINTS=") != -1:
194
				elif line.find("PCINT_NUM_PCINTS=") != -1:
195
					line = "PCINT_NUM_PCINTS=" + hex(pcints)
195
					line = "PCINT_NUM_PCINTS=" + hex(pcints)
196
		applicationSection[c] = line;
196
		applicationSection[c] = line;
197
		c += 1
197
		c += 1
198
		
198
		
199
	config_inc = open('config.inc', 'w')
199
	config_inc = open('config.inc', 'w')
200
	
200
	
201
	for line in applicationSection:
201
	for line in applicationSection:
202
		config_inc.write(line + "\n")
202
		config_inc.write(line + "\n")
203
		
203
		
204
	for moduleName, moduleSection in moduleSections.iteritems():
204
	for moduleName, moduleSection in moduleSections.iteritems():
205
		for line in moduleSection:
205
		for line in moduleSection:
206
			config_inc.write(line + "\n")
206
			config_inc.write(line + "\n")
207
		
207
		
208
	config_inc.close()
208
	config_inc.close()
209
	
209
	
210
	print "Update of config.inc complete"
210
	print "Update of config.inc complete"
211
 
211
 
212
 
212
 
213
def compileSourcesFile():
213
def compileSourcesFile():
214
	print "Compiling sources.inc..."
214
	print "Compiling sources.inc..."
215
	
215
	
216
	uniqueSet = []
216
	uniqueSet = []
217
	uniqueSet2 = []
217
	uniqueSet2 = []
218
	
-
 
-
 
218
	if os.path.isfile("src/libraries.list.template"):
219
	libraries_list_template = open('src/libraries.list.template', 'r')
219
		libraries_list_template = open('src/libraries.list.template', 'r')
220
	libraries_list_template_lines = libraries_list_template.readlines()
220
		libraries_list_template_lines = libraries_list_template.readlines()
221
	libraries_list_template.close()
221
		libraries_list_template.close()
222
	
222
	
223
	sources_list_template = open('src/sources.list.template', 'r')
223
	sources_list_template = open('src/sources.list.template', 'r')
224
	sources_list_template_lines = sources_list_template.readlines()
224
	sources_list_template_lines = sources_list_template.readlines()
225
	sources_list_template.close()
225
	sources_list_template.close()
226
	
-
 
-
 
226
	if os.path.isfile("src/libraries.list.template"):
227
	for libraries_list_template_line in libraries_list_template_lines:
227
		for libraries_list_template_line in libraries_list_template_lines:
228
		line =libraries_list_template_line.strip("\n").strip(" ")
228
			line =libraries_list_template_line.strip("\n").strip(" ")
229
		if len(line) > 0:
229
			if len(line) > 0:
230
			if line[0] != '#':
230
				if line[0] != '#':
231
				uniqueSet2.append(line)
231
					uniqueSet2.append(line)
232
	
232
	
233
	for sources_list_template_line in sources_list_template_lines:
233
	for sources_list_template_line in sources_list_template_lines:
234
		line = sources_list_template_line.strip("\n").strip(" ")
234
		line = sources_list_template_line.strip("\n").strip(" ")
235
		if len(line) > 0:
235
		if len(line) > 0:
236
			if line[0] != '#':
236
			if line[0] != '#':
237
				uniqueSet.append(line)
237
				uniqueSet.append(line)
238
		
238
		
239
	modules = getLocalModules()
239
	modules = getLocalModules()
240
	
240
	
241
	for moduleName in modules:
241
	for moduleName in modules:
242
		sources_list = open(localmoddir + "/" + moduleName + "/sources.list", 'r')
242
		sources_list = open(localmoddir + "/" + moduleName + "/sources.list", 'r')
243
		sources_list_lines = sources_list.readlines()
243
		sources_list_lines = sources_list.readlines()
244
		sources_list.close()
244
		sources_list.close()
245
	
245
	
-
 
246
		if os.path.isfile("src/libraries.list.template"):
246
		if os.path.isfile(localmoddir + "/" + moduleName + "/libraries.list"):
247
			if os.path.isfile(localmoddir + "/" + moduleName + "/libraries.list"):
247
			libraries_list = open(localmoddir + "/" + moduleName + "/libraries.list", 'r')
248
				libraries_list = open(localmoddir + "/" + moduleName + "/libraries.list", 'r')
248
			libraries_list_lines = libraries_list.readlines()
249
				libraries_list_lines = libraries_list.readlines()
249
			libraries_list.close()
250
				libraries_list.close()
250
		
251
			
251
			for libraries_list_line in libraries_list_lines:
252
				for libraries_list_line in libraries_list_lines:
252
				line = libraries_list_line.strip("\n").strip(" ")
253
					line = libraries_list_line.strip("\n").strip(" ")
253
				if len(line) > 0:
254
					if len(line) > 0:
254
					if line[0] != '#':
255
						if line[0] != '#':
255
						uniqueSet2.append("../../../module/" + moduleName + line)
256
							uniqueSet2.append("../../../module/" + moduleName + line)
256
		for sources_list_line in sources_list_lines:
257
		for sources_list_line in sources_list_lines:
257
			line = sources_list_line.strip("\n").strip(" ")
258
			line = sources_list_line.strip("\n").strip(" ")
258
			if len(line) > 0:
259
			if len(line) > 0:
259
				if line[0] != '#':
260
				if line[0] != '#':
260
					uniqueSet.append(line)
261
					uniqueSet.append(line)
261
			
262
			
262
	
263
	
263
	sourcesString = "SOURCES = "
264
	sourcesString = "SOURCES = "
264
	
265
	
265
	#FIXME: Make uniqueSet actually unique
266
	#FIXME: Make uniqueSet actually unique
266
	
267
	
267
	for line in uniqueSet:
268
	for line in uniqueSet:
268
		sourcesString += line + " "
269
		sourcesString += line + " "
269
	sourcesString += "\n"
270
	sourcesString += "\n"
270
	sourcesString += "LDLIBS = "
271
	sourcesString += "LDLIBS = "
-
 
272
	if os.path.isfile("src/libraries.list.template"):
271
	for line in uniqueSet2:
273
		for line in uniqueSet2:
272
		sourcesString += line + " "
274
			sourcesString += line + " "
273
	sources_inc = open('sources.inc', 'w')
275
	sources_inc = open('sources.inc', 'w')
274
	sources_inc.write(sourcesString.strip(" ") + "\n")
276
	sources_inc.write(sourcesString.strip(" ") + "\n")
275
	sources_inc.close()
277
	sources_inc.close()
276
	
278
	
277
	print "Creation of sources.inc complete"
279
	print "Creation of sources.inc complete"
278
 
280
 
279
def regenerateModules():
281
def regenerateModules():
280
	print "Regenerating modules..."
282
	print "Regenerating modules..."
281
	print ""
283
	print ""
282
	compileSourcesFile()
284
	compileSourcesFile()
283
	print ""
285
	print ""
284
	compileMainFile()
286
	compileMainFile()
285
	print ""
287
	print ""
286
	updateConfigFile()
288
	updateConfigFile()
287
	print ""
289
	print ""
288
	print "Regenerating modules complete"
290
	print "Regenerating modules complete"
289
	print ""
291
	print ""
290
 
292
 
291
 
293
 
292
def addModule(moduleName):
294
def addModule(moduleName):
293
	print "Trying to add module " + moduleName
295
	print "Trying to add module " + moduleName
294
	
296
	
295
	try:
297
	try:
296
		# the following creates symlinks to <path to modulemanager>/../../EmbeddedSoftware/AVR/module
298
		# the following creates symlinks to <path to modulemanager>/../../EmbeddedSoftware/AVR/module
297
		# and <path to modulemanager> is an absolute path which makes the symlink similar to this:
299
		# and <path to modulemanager> is an absolute path which makes the symlink similar to this:
298
		# act_dimmer230 -> /home/arune/Documents/HomeAutomation/PcSoftware/scripts/../../EmbeddedSoftware/AVR/module/act_dimmer230
300
		# act_dimmer230 -> /home/arune/Documents/HomeAutomation/PcSoftware/scripts/../../EmbeddedSoftware/AVR/module/act_dimmer230
299
		#os.symlink(moddir + "/" + moduleName, localmoddir + "/" + moduleName)
301
		#os.symlink(moddir + "/" + moduleName, localmoddir + "/" + moduleName)
300
		# instead symlink to relative path instead
302
		# instead symlink to relative path instead
301
		os.symlink("../../../module/" + moduleName, localmoddir + "/" + moduleName)
303
		os.symlink("../../../module/" + moduleName, localmoddir + "/" + moduleName)
302
		print "Added module successfully"
304
		print "Added module successfully"
303
	except OSError, (errno, strerror):
305
	except OSError, (errno, strerror):
304
		if errno == 17:
306
		if errno == 17:
305
			print "A link, file or directory named " + moduleName + " is already present in the modules directory, not linking"
307
			print "A link, file or directory named " + moduleName + " is already present in the modules directory, not linking"
306
		else:
308
		else:
307
			raise
309
			raise
308
	
310
	
309
	print ""
311
	print ""
310
	
312
	
311
	regenerateModules()
313
	regenerateModules()
312
 
314
 
313
 
315
 
314
def delModule(moduleName):
316
def delModule(moduleName):
315
	print "Trying to remove module " + moduleName
317
	print "Trying to remove module " + moduleName
316
	
318
	
317
	try:
319
	try:
318
		os.unlink(localmoddir + "/" + moduleName)
320
		os.unlink(localmoddir + "/" + moduleName)
319
		print "Removed module successfully"
321
		print "Removed module successfully"
320
	except OSError, (errno, strerror):
322
	except OSError, (errno, strerror):
321
		if errno == 2:
323
		if errno == 2:
322
			print "No such " + moduleName + " present in the modules directory, not unlinking"
324
			print "No such " + moduleName + " present in the modules directory, not unlinking"
323
		else:
325
		else:
324
			raise
326
			raise
325
	
327
	
326
	print ""
328
	print ""
327
	
329
	
328
	regenerateModules()
330
	regenerateModules()
329
 
331
 
330
def createFile(moduleName, templateFileName, moduleFileName):
332
def createFile(moduleName, templateFileName, moduleFileName):
331
	print "Creating " + moduleName + "/" + templateFileName + "..."
333
	print "Creating " + moduleName + "/" + templateFileName + "..."
332
	template_file = open(moddir + "/template/" + templateFileName, 'r')
334
	template_file = open(moddir + "/template/" + templateFileName, 'r')
333
	lines = template_file.readlines()
335
	lines = template_file.readlines()
334
	template_file.close()
336
	template_file.close()
335
 
337
 
336
	module_file = open(moddir + "/" + moduleName + "/" + moduleFileName, 'w')
338
	module_file = open(moddir + "/" + moduleName + "/" + moduleFileName, 'w')
337
	
339
	
338
	for line in lines:
340
	for line in lines:
339
		line = line.replace("<template>", moduleName)
341
		line = line.replace("<template>", moduleName)
340
		line = line.replace("<TEMPLATE>", moduleName.upper())
342
		line = line.replace("<TEMPLATE>", moduleName.upper())
341
 
343
 
342
		module_file.write(line)
344
		module_file.write(line)
343
 
345
 
344
	module_file.close()
346
	module_file.close()
345
	
347
	
346
def newModule(moduleName):
348
def newModule(moduleName):
347
	print "Creating " + moddir + "/" + moduleName + " directory..."
349
	print "Creating " + moddir + "/" + moduleName + " directory..."
348
	os.mkdir(moddir + "/" + moduleName + "/")
350
	os.mkdir(moddir + "/" + moduleName + "/")
349
 
351
 
350
	createFile(moduleName, "config.inc.template", "config.inc.template")
352
	createFile(moduleName, "config.inc.template", "config.inc.template")
351
	createFile(moduleName, "sources.list", "sources.list")
353
	createFile(moduleName, "sources.list", "sources.list")
352
	createFile(moduleName, "template.h", moduleName + ".h")
354
	createFile(moduleName, "template.h", moduleName + ".h")
353
	createFile(moduleName, "template.c", moduleName + ".c")
355
	createFile(moduleName, "template.c", moduleName + ".c")
354
	createFile(moduleName, "template_eeprom.h", moduleName + "_eeprom.h")
356
	createFile(moduleName, "template_eeprom.h", moduleName + "_eeprom.h")
355
 
357
 
356
def usage():
358
def usage():
357
	print "Syntax: ./ModuleManager [options]"
359
	print "Syntax: ./ModuleManager [options]"
358
	print "Options:"
360
	print "Options:"
359
	print "  --help               Print this help"
361
	print "  --help               Print this help"
360
	print "  --regenerate         Regenarate modules and files"
362
	print "  --regenerate         Regenarate modules and files"
361
	print "  --list               List avalible and installed modules"
363
	print "  --list               List avalible and installed modules"
362
	print "  --add=<module name>  Adds a module to the application"
364
	print "  --add=<module name>  Adds a module to the application"
363
	print "  --del=<module name>  Removes a module from the application"
365
	print "  --del=<module name>  Removes a module from the application"
364
	print "  --new=<module name>  Creates a new module from the module template"
366
	print "  --new=<module name>  Creates a new module from the module template"
365
	print ""
367
	print ""
366
 
368
 
367
 
369
 
368
def main():
370
def main():
369
	try:
371
	try:
370
		opts, args = getopt.getopt(sys.argv[1:], "hlrc", ["help", "list", "regenerate", "add=", "del=", "new="])
372
		opts, args = getopt.getopt(sys.argv[1:], "hlrc", ["help", "list", "regenerate", "add=", "del=", "new="])
371
	except getopt.GetoptError, err:
373
	except getopt.GetoptError, err:
372
		# print help information and exit:
374
		# print help information and exit:
373
		print str(err) # will print something like "option -a not recognized"
375
		print str(err) # will print something like "option -a not recognized"
374
		usage()
376
		usage()
375
		sys.exit(2)
377
		sys.exit(2)
376
	
378
	
377
	if len(sys.argv) == 1:
379
	if len(sys.argv) == 1:
378
		usage()
380
		usage()
379
		sys.exit()
381
		sys.exit()
380
	
382
	
381
	for o, a in opts:
383
	for o, a in opts:
382
		if o in ("-c"):
384
		if o in ("-c"):
383
			modules = getModules()
385
			modules = getModules()
384
			
386
			
385
			for module in modules:
387
			for module in modules:
386
				print module
388
				print module
387
 
389
 
388
		elif o in ("-l", "--list"):
390
		elif o in ("-l", "--list"):
389
			modules = getModules()
391
			modules = getModules()
390
			
392
			
391
			print "Available modules"
393
			print "Available modules"
392
			print "================="
394
			print "================="
393
			for module in modules:
395
			for module in modules:
394
				print module
396
				print module
395
			
397
			
396
 
398
 
397
			if os.path.exists(localmoddir):
399
			if os.path.exists(localmoddir):
398
				print ""
400
				print ""
399
			
401
			
400
				modules = getLocalModules()
402
				modules = getLocalModules()
401
			
403
			
402
				print "Modules used in this application"
404
				print "Modules used in this application"
403
				print "================================"
405
				print "================================"
404
				for module in modules:
406
				for module in modules:
405
					print module
407
					print module
406
			
408
			
407
		elif o in ("-h", "--help"):
409
		elif o in ("-h", "--help"):
408
			usage()
410
			usage()
409
			sys.exit()
411
			sys.exit()
410
			
412
			
411
		elif o in ("-r", "--regenerate"):
413
		elif o in ("-r", "--regenerate"):
412
			regenerateModules()
414
			regenerateModules()
413
			
415
			
414
		elif o in ("--add"):
416
		elif o in ("--add"):
415
			if len(a) == 0:
417
			if len(a) == 0:
416
				print "No modulename specified"
418
				print "No modulename specified"
417
				usage()
419
				usage()
418
				sys.exit()
420
				sys.exit()
419
			
421
			
420
			if a not in getModules():
422
			if a not in getModules():
421
				print a + " is not a recognized module name"
423
				print a + " is not a recognized module name"
422
				sys.exit()
424
				sys.exit()
423
				
425
				
424
			addModule(a)
426
			addModule(a)
425
			
427
			
426
		elif o in ("--del"):
428
		elif o in ("--del"):
427
			if len(a) == 0:
429
			if len(a) == 0:
428
				print "No modulename specified"
430
				print "No modulename specified"
429
				usage()
431
				usage()
430
				sys.exit()
432
				sys.exit()
431
			
433
			
432
			if a not in getModules():
434
			if a not in getModules():
433
				print a + " is not a recognized module name"
435
				print a + " is not a recognized module name"
434
				sys.exit()
436
				sys.exit()
435
				
437
				
436
			delModule(a)
438
			delModule(a)
437
			
439
			
438
		elif o in ("--new"):
440
		elif o in ("--new"):
439
			if len(a) == 0:
441
			if len(a) == 0:
440
				print "No modulename specified"
442
				print "No modulename specified"
441
				usage()
443
				usage()
442
				sys.exit()
444
				sys.exit()
443
			
445
			
444
			if a in getModules():
446
			if a in getModules():
445
				print a + " already exists"
447
				print a + " already exists"
446
				sys.exit()
448
				sys.exit()
447
				
449
				
448
			newModule(a)
450
			newModule(a)
449
			
451
			
450
		else:
452
		else:
451
			assert False, "unhandled option"
453
			assert False, "unhandled option"
452
 
454
 
453
 
455
 
454
if __name__ == "__main__":
456
if __name__ == "__main__":
455
	main()
457
	main()
456
 
458