# SNIFF
##########################
- def sniff(self,freq,duration,description, verbose=True, comment=None, filename=None, standardid=None, debug=False, faster=False):
+ def sniff(self,freq,duration,description, verbose=True, comment=None, filename=None, standardid=None, debug=False, faster=False, parsed=True):
#reset eveything on the chip
self.client.serInit()
if (verbose == True):
print "Filtering for SID %d (0x%02xh) with filter #%d"%(ID, ID, filter);
- comment = comment + ("f%d" %(ID))
+ comment += ("f%d" %(ID))
self.client.MCPsetrate(freq);
row.append("%f"%time.time());
if( verbose==True):
- print self.client.packet2str(packet)
+ #if we want to print a parsed message
+ if( parsed == True):
+ packetParsed = self.client.packet2parsed(packet)
+ sId = packetParsed.get('sID')
+ msg = "sID: %04d" %sId
+ if( packetParsed.get('eID')):
+ msg += " eID: %d" %packetParsed.get('eID')
+ msg += " rtr: %d"%packetParsed['rtr']
+ length = packetParsed['length']
+ msg += " length: %d"%length
+ msg += " data:"
+ for i in range(0,length):
+ dbidx = 'db%d'%i
+ msg +=" %03d"% ord(packetParsed[dbidx])
+ print msg
+ # if we want to print just the message as it is read off the chip
+ else:
+ print self.client.packet2str(packet)
if(debug == True):
return packetcount
- def filterStdSweep(self, freq, time = 5):
+ def filterStdSweep(self, freq, low, high, time = 5):
msgIDs = []
- for i in range(0, 2047, 6):
+ self.client.serInit()
+ self.client.MCPsetup()
+ for i in range(low, high, 6):
print "sniffing id: %d, %d, %d, %d, %d, %d" % (i,i+1,i+2,i+3,i+4,i+5)
- comment = "sweepFilter_%d_%d_%d_%d_%d_%d" % (i,i+1,i+2,i+3,i+4,i+5)
+ comment= "sweepFilter: "
+ #comment = "sweepFilter_%d_%d_%d_%d_%d_%d" % (i,i+1,i+2,i+3,i+4,i+5)
description = "Running a sweep filer for all the possible standard IDs. This run filters for: %d, %d, %d, %d, %d, %d" % (i,i+1,i+2,i+3,i+4,i+5)
count = self.sniff(freq=freq, duration = time, description = description,comment = comment, standardid = [i, i+1, i+2, i+3, i+4, i+5])
if( count != 0):
for j in range(i,i+5):
- comment = "sweepFilter: %d" % (j)
+ comment = "sweepFilter: "
+ #comment = "sweepFilter: %d" % (j)
description = "Running a sweep filer for all the possible standard IDs. This run filters for: %d " % j
- count = self.sniff(freq=freq, duration = time, description = description,comment = comment, standardid = [j])
+ count = self.sniff(freq=freq, duration = time, description = description,comment = comment, standardid = [j, j, j, j])
if( count != 0):
msgIDs.append(j)
return msgIDs
- def sweepRandom(self, freq, number = 5, time = 5,):
+ def sweepRandom(self, freq, number = 5, time = 200):
msgIDs = []
ids = []
+ self.client.serInit()
+ self.client.MCPsetup()
for i in range(0,number,6):
idsTemp = []
- comment = "sweepFilter"
+ comment = "sweepFilter: "
for j in range(0,6,1):
id = randrange(2047)
- comment += "_%d" % id
+ #comment += "_%d" % id
idsTemp.append(id)
ids.append(id)
print comment
count = self.sniff(freq=freq, duration=time, description=description, comment = comment, standardid = idsTemp)
if( count != 0):
for element in idsTemp:
- comment = "sweepFilter: %d" % (element)
+ #comment = "sweepFilter: %d" % (element)
+ comment="sweepFilter: "
description = "Running a sweep filer for all the possible standard IDs. This run filters for: %d " % element
count = self.sniff(freq=freq, duration = time, description = description,comment = comment, standardid = [element, element, element])
if( count != 0):
def test(self):
- self.client.MCPreqstatListenOnly();
+ comm.reset();
+ print "Just reset..."
+ print "EFLG register: %02x" % self.client.peek8(0x2d);
+ print "Tx Errors: %3d" % self.client.peek8(0x1c);
+ print "Rx Errors: %3d" % self.client.peek8(0x1d);
+ print "CANINTF: %02x" %self.client.peek8(0x2C);
+ self.client.MCPreqstatConfiguration();
self.client.poke8(0x60,0x66);
self.client.MCPsetrate(500);
self.client.MCPreqstatNormal();
+ print "In normal mode now"
+ print "EFLG register: %02x" % self.client.peek8(0x2d);
+ print "Tx Errors: %3d" % self.client.peek8(0x1c);
+ print "Rx Errors: %3d" % self.client.peek8(0x1d);
+ print "CANINTF: %02x" %self.client.peek8(0x2C);
print "Waiting on packets.";
+ checkcount = 0;
packet=None;
while(1):
packet=self.client.rxpacket();
if packet!=None:
print "Message recieved: %s" % self.client.packet2str(packet);
+ else:
+ checkcount=checkcount+1;
+ if (checkcount%30==0):
+ print "EFLG register: %02x" % self.client.peek8(0x2d);
+ print "Tx Errors: %3d" % self.client.peek8(0x1c);
+ print "Rx Errors: %3d" % self.client.peek8(0x1d);
+ print "CANINTF: %02x" %self.client.peek8(0x2C);
+
-
-
-
- def spit(self,freq, standardid,debug):
+ def spitSetup(self,freq):
comm.reset();
self.client.MCPsetrate(freq);
self.client.MCPreqstatNormal();
+ def spit(self,freq, standardid,debug, packet = None):
+
+ #comm.reset();
+ #self.client.MCPsetrate(freq);
+ #self.client.MCPreqstatNormal();
+
print "initial state:"
print "Tx Errors: %3d" % self.client.peek8(0x1c);
print "Rx Errors: %3d" % self.client.peek8(0x1d);
SIDlow = (standardid[0] & 0x03) << 5; # get SID bits 2:0, rotate them to bits 7:5
SIDhigh = (standardid[0] >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0
- packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs
- 0x08, # bit 6 must be set to 0 for data frame (1 for RTR)
- # lower nibble is DLC
- 0x01,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xFF]
-
- self.client.txpacket(packet);
-
+ #packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs
+ # 0x08, # bit 6 must be set to 0 for data frame (1 for RTR)
+ # # lower nibble is DLC
+ # 0x01,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xFF]
+
+ if(packet == None):
+ packetE = [SIDhigh, SIDlow | 0x80, 0x00,0x00, # pad out EID regs
+ 0x08, # bit 6 must be set to 0 for data frame (1 for RTR)
+ # lower nibble is DLC
+ 0x01,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xFF]
+ else:
+ packetE = [SIDhigh, SIDlow | 0x80, 0x00,0x00, # pad out EID regs
+ 0x08, # bit 6 must be set to 0 for data frame (1 for RTR)
+ # lower nibble is DLC
+ packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7],packet[8]]
+
+ self.client.txpacket(packetE);
+
+ checkcount = 0;
TXB0CTRL = self.client.peek8(0x30);
- print "Tx Errors: %3d" % self.client.peek8(0x1c);
- print "Rx Errors: %3d" % self.client.peek8(0x1d);
- print "EFLG register: %02x\n" % self.client.peek8(0x2d);
- print "TXB0CTRL: %02x" %self.client.peek8(0x30);
- print "CANINTF: %02x" %self.client.peek8(0x2C);
+ while(TXB0CTRL | 0x00 != 0x00):
+ checkcount+=1;
+ TXB0CTRL = self.client.peek8(0x30);
+ if (checkcount %30 ==0):
+ print "Tx Errors: %3d" % self.client.peek8(0x1c);
+ print "Rx Errors: %3d" % self.client.peek8(0x1d);
+ print "EFLG register: %02x" % self.client.peek8(0x2d);
+ print "TXB0CTRL: %02x" %TXB0CTRL;
+ print "CANINTF: %02x\n" %self.client.peek8(0x2C);
+
+ def setRate(self,freq):
+ self.client.MCPsetrate(freq);