+
+ if (client.peek8(0x2C) & 0x80):
+ client.MCPbitmodify(0x2C,0x80,0x00);
+ print"...malformed packet recieved";
+
+if(sys.argv[1]=="snifftest"):
+
+ freqrange=[10.4, 41.6, 83.3, 100, 125, 250, 500, 1000];
+
+ for rate in freqrange:
+
+ print "CAN Freq Test: %3d kHz" %rate;
+ client.MCPsetrate(rate);
+ #print "CNF1/2/3: %02x %02x %02x" %(client.peek8(0x2a), client.peek8(0x29),client.peek8(0x28));
+ client.MCPreqstatListenOnly();
+ print "Mode: %s" % client.MCPcanstatstr();
+ x = 0;
+ errors = 0;
+
+ for n in range(0,400):
+ packet=client.rxpacket();
+ if packet!=None:
+ print client.packet2str(packet);
+ x+=1;
+
+ if (client.peek8(0x2C) & 0x80):
+ errors+=1;
+ client.MCPbitmodify(0x2C,0x80,0x00);
+
+ if x==0:
+ print "No packets sniffed for %3d kHz" %rate;
+ else:
+ percenterror = float(errors/x);
+
+ print "Results for %3.1 kHz: recieved %3d packets, registered %3d RX errors, for a %3.3f percent error rate." %(rate, x, errors, percenterrors);
+
+ client.MCPreset();
+
+if(sys.argv[1]=="isniff"):
+ """ An intelligent sniffer, decodes message format """
+ """ More features to be added soon """
+ if len(sys.argv)>2:
+ rate=float(sys.argv[2]);
+ client.MCPsetrate(rate);
+ client.MCPreqstatListenOnly();
+ while 1:
+ packet=client.rxpacket();
+ if packet!=None:
+ plist=[];
+ for byte in packet:
+ plist.append(byte);
+ arbid=plist[0:2];
+ eid=plist[2:4];
+ dlc=plist[4:5];
+ data=plist[5:13];
+ print "\nArbID: " + client.packet2str(arbid);
+ print "EID: " + client.packet2str(eid);
+ print "DLC: " + client.packet2str(dlc);
+ print "Data: " + client.packet2str(data);
+