X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=client%2FGoodFETGlitch.py;h=56f30754290675c0b5390b420235d451837a4e8f;hp=61dc65b95d24879e127d899cbc1497ef7c3a23f8;hb=a2de4ca441a02031e56fc8d14f8a476c644049e0;hpb=58aa5342f8dc846471ee94a6675e842d6abbc17c diff --git a/client/GoodFETGlitch.py b/client/GoodFETGlitch.py index 61dc65b..56f3075 100644 --- a/client/GoodFETGlitch.py +++ b/client/GoodFETGlitch.py @@ -38,7 +38,7 @@ title "Success", \ class GoodFETGlitch(GoodFET): def __init__(self, *args, **kargs): - print "Initializing GoodFET Glitcher." + print "# Initializing GoodFET Glitcher." #Database connection w/ 30 second timeout. self.db=sqlite3.connect("glitch.db",30000); @@ -82,17 +82,38 @@ class GoodFETGlitch(GoodFET): sys.stdout.flush(); self.db.execute("drop table if exists glitchrange;"); self.db.execute("create table glitchrange(time integer primary key asc,max,min);"); - self.db.execute("insert into glitchrange(time,max,min) select distinct time, 0, 0 from glitches;"); self.db.commit(); - print "Maximums..."; + print "Calculating ranges..."; sys.stdout.flush(); - self.db.execute("update glitchrange set max=(select max(vcc) from glitches where glitches.time=glitchrange.time and count=0);"); - self.db.commit(); - print "Minimums..."; - sys.stdout.flush(); - self.db.execute("update glitchrange set min=(select min(vcc) from glitches where glitches.time=glitchrange.time and count>0);"); + + maxes={}; + mins={}; + + c=self.db.cursor(); + c.execute("select time,vcc,count from glitches;"); #Limit 10000 for testing. + progress=0; + for r in c: + progress=progress+1; + if progress % 1000000==0: print "%09i rows crunched." % progress; + t=r[0]; + v=r[1]; + count=r[2]; + if count==0: + try: oldmax=maxes[t]; + except: oldmax=-1; + if v>oldmax: maxes[t]=v; + elif count==1: + try: oldmin=mins[t]; + except: oldmin=0x10000; + if v0;"); + print "time vcc gnd glitchcount count"; + for r in c: + print "%i %i %i %i %i" % r; + def npoints(self): + c=self.db.cursor(); + c.execute("select time,vcc,gnd,glitchcount,count from glitches where lock=0 and count=0;"); + print "time vcc gnd glitchcount count"; + for r in c: + print "%i %i %i %i %i" % r; + #GnuPlot sucks for large sets. Switch to viewpoints soon. + # sqlite3 glitch.db "select time,vcc,count from glitches where count=0" | vp -l -d "|" -I + def explore(self,tstart=0,tstop=-1, trials=1): """Exploration phase. Uses thresholds to find exploitable points.""" gnd=0;