if len( args ) == 1:
platformdir = args[0]
- # This gives the whole string when there's no / in platformdir
- platform = platformdir[platformdir.rfind( "/" ) + 1:]
+ platform = os.path.basename(platformdir)
+ # In case platformdir was specified with a trailing path separator
+ if not platform:
+ platformdir = os.path.dirname(platformdir)
+ platform = os.path.basename(platformdir)
+ familydir = os.path.dirname(platformdir)
+ if familydir and not os.path.isfile(os.path.join(familydir, '.family')):
+ familydir = ""
elif len( args ) == 0:
platformdir = ""
platform = ""
+ familydir = ""
else:
stderr.write( "Usage: tos-storage-stm25p [-t] <platform directory>\n" )
sub = platform
elif c == 'P':
sub = platformdir
+ elif c == 'F':
+ if not familydir:
+ nfail( "invalid include-path substitution character " + c + "; " + \
+ platform + " not in a family" )
+ sub = familydir
elif c == 'T':
sub = Popen( ["ncc", "-print-tosdir"], stdout=PIPE ).communicate( )[0]
sub = sub[:-1] # remove newline
NUM_SECTORS = 0
SECTOR_SIZE = 0
-def parseHeader( dotplatform ):
- """ Return an ordered list of paths from the dotplatform file """
+def parseHeader( dotfile ):
+ """ Return an ordered list of paths from the dotfile """
paths = []
inArray = False
p = re.compile('push\s*\(\s*@includes,\s*qw\s*\(');
q = re.compile('\)\s*\)\s*;');
try:
- with open(dotplatform, 'r') as file:
+ with open(dotfile, 'r') as file:
for line in file:
path = line.strip()
if path:
paths.append(path)
return paths
except:
- return None
+ return []
def findFile( paths, filename ):
""" Find the first occurrence of 'filename' in the list of paths given. """
if vars.has_key(m.group(1)):
vars[m.group(1)] = m.group(2)
-paths = parseHeader(platformdir + '/.platform')
+paths = parseHeader(os.path.join(familydir, '.family')) + \
+ parseHeader(os.path.join(platformdir, '.platform'))
if paths:
path = findFile(paths, HEADER_FILE)
if path:
NUM_SECTORS = int(enums["STM25P_NUM_SECTORS"])
SECTOR_SIZE = 2**int(enums["STM25P_SECTOR_SIZE_LOG2"])
if NUM_SECTORS == 0 or SECTOR_SIZE == 0:
- stderr.write( 'No valid Stm25p.h in PFLAGS path; check .platform file\n' )
stderr.write( "tos-storage-stm25p: no valid Stm25p.h found.\n\t"
- "Check the platform's .platform file\n" )
+ "Check @includes in the platform's .platform file\n" )
exit(2)
volumes = {}
outFile.write(" interface BlockWrite[uint8_t volume_id]; \n")
outFile.write(" interface LogRead[uint8_t volumeId]; \n")
outFile.write(" interface LogWrite[uint8_t volumeId]; \n")
-# outFile.write(" interface Mount[uint8_t volumeId]; \n")
-# outFile.write(" interface ConfigStorage[uint8_t volumeId]; \n")
+ outFile.write(" interface Mount[uint8_t volumeId]; \n")
+ outFile.write(" interface ConfigStorage[uint8_t volumeId]; \n")
outFile.write(" } \n")
outFile.write("} \n")
outFile.write("\n")
outFile.write(" BlockWrite = VolumeMapP; \n")
outFile.write(" LogRead = VolumeMapP; \n")
outFile.write(" LogWrite = VolumeMapP; \n")
+ outFile.write(" Mount = VolumeMapP; \n")
+ outFile.write(" ConfigStorage = VolumeMapP; \n")
for i in range(len(volumeNames)):
if volumeTypes[volumeNames[i]] == "block":
outFile.write(" VolumeMapP.SubLogWrite[" + volumeNames[i] + "] -> LogStorageC_" + volumeNames[i] + "; \n")
outFile.write("\n")
-# elif volumeTypes[volumeNames[i]] == "config":
-# outFile.write(" components new ConfigStorageC(" + volumeNames[i] + ") as ConfigStorageC_" + volumeNames[i] + "; \n")
-# outFile.write(" Mount[" + volumeNames[i] + "] = ConfigStorageC_" + volumeNames[i] + "; \n")
-# outFile.write(" ConfigStorage[" + volumeNames[i] + "] = ConfigStorageC_" + volumeNames[i] + "; \n")
+ elif volumeTypes[volumeNames[i]] == "config":
+ outFile.write(" components new ConfigStorageC(" + volumeNames[i] + ") as ConfigStorageC_" + volumeNames[i] + "; \n")
+ outFile.write(" Mount[" + volumeNames[i] + "] = ConfigStorageC_" + volumeNames[i] + "; \n")
+ outFile.write(" ConfigStorage[" + volumeNames[i] + "] = ConfigStorageC_" + volumeNames[i] + "; \n")
outFile.write("} \n")