Hi all,

Because tos-storage-stm25p is hard-coded for use with the M25P80 flash chip, 
it functions incorrectly when using other parts in the M25P family.  A more 
generic solution is to have this utility find and parse the Stm25p.h header 
file, which describes the flash part for the driver.  With no python 
experience or time, the code is both naive and inelegant.  Yet it works here 
and is perhaps useful for someone else.  I'm interested to learn of other, 
better solutions to this problem.  Patch below.

All the best,
Steve

---
http://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff;h=ae4db03da92232d8cd4725dd87149d1103e70d7d
commit ae4db03da92232d8cd4725dd87149d1103e70d7d
Author: R. Steve McKown <rsmck...@gmail.com>
Date:   Thu Apr 8 13:50:41 2010 -0600

Teach tos-storage-stm25p to derive NUM_SECTORS and SECTOR_SIZE. The stm25p 
driver is suitable for different sizes of flash parts, such as the commonly 
used 8Mb M25P80 and the less commonly used 1Mb M25P10A.  The driver defines 
the flash configuration in Stm25p.h.  By having tos-storage-stm25p walk the 
@includes for the platform, as found in the .platform file, each platform can 
ensure that a Stm25p.h with correct content for its flash part is found for 
use by the driver and this script.

diff --git a/tools/tinyos/misc/tos-storage-stm25p.in 
b/tools/tinyos/misc/tos-storage-stm25p.in
index 47cdb6d..ed9eb63 100644
--- a/tools/tinyos/misc/tos-storage-stm25p.in
+++ b/tools/tinyos/misc/tos-storage-stm25p.in
@@ -40,11 +40,16 @@
 # @author Jonathan Hui <j...@archedrock.com>
 # @author David Gay
 # @author Kevin Klues <klue...@cs.stanford.edu>
+# @author R. Steve McKown <rsmck...@gmail.com>
 #
 # $Revision$
 # $Date$
 #

+from __future__ import with_statement # Does this require too new a python?
+
+import os
+import re
 from re import match
 from sys import *
 from xml.dom import *
@@ -112,8 +117,76 @@ def expand_path( path ):
   return path


-NUM_SECTORS = 16
-SECTOR_SIZE = 65536
+HEADER_FILE = 'Stm25p.h'
+NUM_SECTORS = 0
+SECTOR_SIZE = 0
+
+def parseHeader( dotplatform ):
+  """ Return an ordered list of paths from the dotplatform file """
+  paths = []
+  inArray = False
+  p = re.compile('push\s*\(\...@includes,\s*qw\s*\(');
+  q = re.compile('\)\s*\)\s*;');
+  try:
+    with open(dotplatform, 'r') as file:
+      for line in file:
+       path = line.strip()
+       if path:
+         if p.match(path):
+           inArray = True
+         elif q.match(path):
+           inArray = False
+         elif inArray == True:
+           paths.append(path)
+    return paths
+  except:
+    return None
+
+def findFile( paths, filename ):
+  """ Find the first occurrence of 'filename' in the list of paths given. """
+  for path in paths:
+    rpath = expand_path(path)
+    try:
+      for file in os.listdir(rpath):
+       if file == filename:
+         return rpath + '/' + filename
+    except OSError:
+      None
+  return None
+
+def findVars( path, vars ):
+  """ Finds values for the variables already present in vars from path """
+  inEnum = False
+  p = re.compile('enum\s.*{');
+  q = re.compile('}s*;');
+  r = re.compile('^\s*([A-Z0-9_]*)\s*=\s*([^,]*)');
+  with open(path, 'r') as file:
+    for line in file:
+      line = line.strip()
+      if line:
+       if p.match(line):
+         inEnum = True
+       elif q.match(line):
+         inEnum = False
+       elif inEnum == True:
+         m = r.search(line)
+         if vars.has_key(m.group(1)):
+           vars[m.group(1)] = m.group(2)
+
+paths = parseHeader(platformdir + '/.platform')
+if paths:
+  path = findFile(paths, HEADER_FILE)
+  if path:
+    enums = {}
+    enums["STM25P_NUM_SECTORS"] = 0
+    enums["STM25P_SECTOR_SIZE_LOG2"] = 0
+    findVars(path, enums)
+    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( "tos-storage-stm25p: no valid Stm25p.h found.\n\t"
+      "Check @includes in the platform's .platform file\n" )
+  exit(2)

 volumes = {}


_______________________________________________
Tinyos-help mailing list
Tinyos-help@millennium.berkeley.edu
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to