diff options
-rw-r--r-- | avr/1wire.c | 18 | ||||
-rw-r--r-- | avr/main.c | 5 | ||||
-rw-r--r-- | pc/__pycache__/analyze.cpython-34.pyc | bin | 0 -> 4154 bytes | |||
-rw-r--r-- | pc/analyze.py | 80 |
4 files changed, 95 insertions, 8 deletions
diff --git a/avr/1wire.c b/avr/1wire.c index 5dbca82..affd80d 100644 --- a/avr/1wire.c +++ b/avr/1wire.c @@ -79,15 +79,20 @@ uint8_t w1_bit_io( uint8_t b ) _delay_us( 1 ); if( b ) { - //hard_vcc; - //asm volatile("nop" ::: ); + hard_vcc; + _delay_us(7 ); soft_vcc; + _delay_us( 15 - 1 - 7 ); + } + else + { + _delay_us( 15 - 1 ); } - _delay_us( 15 - 1 ); if( (W1_IN & (1<<W1_PIN)) == 0 ) b = 0; _delay_us( 60 - 15 ); - soft_vcc; + //soft_vcc; + hard_vcc; sei(); return b; } @@ -104,6 +109,7 @@ uint8_t w1_byte_wr( uint8_t b ) b |= 0x80; } while( --i ); + soft_vcc; return b; } @@ -113,7 +119,7 @@ uint8_t w1_byte_rd( void ) return w1_byte_wr( 0xFF ); } - +/* uint8_t w1_rom_search( uint8_t diff, uint8_t *id ) { uint8_t i, j, next_diff; @@ -158,7 +164,7 @@ uint8_t w1_rom_search( uint8_t diff, uint8_t *id ) } while( i ); return next_diff; // to continue search -} +}*/ void ds1992_read(uint16_t addr, uint8_t* buf, uint8_t len) { @@ -72,7 +72,8 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) case FUNC_WRITE: PORTC ^= LED_RED; //strcpy(replyBuffer, "Hello world"); - len = strlen(replyBuffer)+1; + //len = strlen(replyBuffer)+1; + len = 130; break; } @@ -159,7 +160,7 @@ int main(void) if (result == 0) { PORTC &= ~LED_GREEN; - ds1992_read(0x00, replyBuffer, 128); + ds1992_read(42, replyBuffer, 128); } else if (result == 1) PORTC &= ~LED_RED; diff --git a/pc/__pycache__/analyze.cpython-34.pyc b/pc/__pycache__/analyze.cpython-34.pyc Binary files differnew file mode 100644 index 0000000..6980785 --- /dev/null +++ b/pc/__pycache__/analyze.cpython-34.pyc diff --git a/pc/analyze.py b/pc/analyze.py new file mode 100644 index 0000000..f3bb31b --- /dev/null +++ b/pc/analyze.py @@ -0,0 +1,80 @@ +import re +from collections import defaultdict + +class Dumps: + def __init__(self): + self.dumps = [] + + def load(self, f): + dump = [] + tag = None + no = 0 + for line in open(f,"r").readlines(): + if re.match("[0-9A-Z]{2}( [0-9A-Z]{2}){25} *$", line): + # this is a line of a hexdump + dump += [int(s,16) for s in line.split()] + else: + if len(dump): + self.dumps += [(no,tag,dump)] + dump = [] + tag = None + no+=1 + + if line.strip() != "": + if tag != None: + print("overriding tag %s with %s"%(tag,line)) + + tag = line.replace("\n","") + # else ignore + + def show(self,xcols,xrows): + if xcols == None: xcols = [] + if xrows == None: xrows = [] + + for n, tag, dump in self.filter(xcols,xrows): + for byte in dump: + print("%02X "%byte, end="") # TODO + print(tag) + + + def filter(self,xcols,xrows): + return [ (dump[0], dump[1], [byte for byte,pos in zip(dump[2],range(len(dump[2]))) if pos not in xcols ]) for dump in self.dumps if dump[0] not in xrows] + +def mirror(dumps): + n = len(dumps) + m = len(dumps[0][2]) + result = [[None]*n for i in range(m)] + for i in range(n): + for j in range(m): + result[j][i] = dumps[i][2][j] + return result + +def stats(cols): + ncols = len(cols) + + result = [defaultdict(lambda : 0) for i in range(ncols)] + for col,stat in zip(cols,result): + for a,b in zip(col,col[1:]): + stat[(b-a)%256]+=1./(len(col)-1) + return result + +def getconstcols(stats): + return [col for stat,col in zip(stats,range(len(stats))) if stat[0]>0.9999] + +def showstats(stats): + for stat,pos in zip(stats,range(len(stats))): + print("%i:\t%s"%(pos,str(dict(stat)))) + +def prettydict(d): + for k,v in sorted(d.items(), key=lambda a:-a[1]): + print("%02X: %2.0f | "%(k,100*v),end="") + print("") + +d = Dumps() +d.load("mydump.txt") + +cc = getconstcols(stats(mirror(d.filter([],[])))) +d.show(cc,[]) + +for i in stats(mirror(d.filter(cc,[]))): + prettydict(i) |