Subversion Repositories HomeAutomation

Rev

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

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