update rftestrx2pcap.py to use pyserial.
add a third output file argument
This commit is contained in:
parent
19c3a0efc9
commit
2ef20ef40d
|
@ -2,12 +2,12 @@
|
||||||
# (C) 2012, Mariano Alvira <mar@devl.org>
|
# (C) 2012, Mariano Alvira <mar@devl.org>
|
||||||
|
|
||||||
import sys,os,time
|
import sys,os,time
|
||||||
from termios import *
|
|
||||||
from struct import *
|
from struct import *
|
||||||
import re
|
import re
|
||||||
|
import serial
|
||||||
|
|
||||||
if len(sys.argv) < 3:
|
if len(sys.argv) < 3:
|
||||||
sys.stderr.write( "Usage: %s tty channel\n" %(sys.argv[0]))
|
sys.stderr.write( "Usage: %s tty channel [outfile]\n" %(sys.argv[0]))
|
||||||
sys.stderr.write( " channel = 11-26\n")
|
sys.stderr.write( " channel = 11-26\n")
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
@ -16,44 +16,29 @@ if len(sys.argv) < 3:
|
||||||
# send a character until we get to the right channel
|
# send a character until we get to the right channel
|
||||||
|
|
||||||
try:
|
try:
|
||||||
serport = os.open(sys.argv[1], os.O_RDWR|os.O_NOCTTY)
|
serport = serial.Serial(sys.argv[1], 115200, timeout=1)
|
||||||
except IOError:
|
except IOError:
|
||||||
print "error opening port"
|
print "error opening port"
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
try:
|
|
||||||
oldattrs = tcgetattr(serport)
|
|
||||||
attrs = [IGNPAR, oldattrs[1], 0, 0, B115200, B115200, oldattrs[6]]
|
|
||||||
attrs[2] = B115200 | CS8 | CLOCAL | CREAD
|
|
||||||
attrs[6][VTIME] = 0
|
|
||||||
attrs[6][VMIN] = 1
|
|
||||||
tcflush(serport, TCIFLUSH)
|
|
||||||
tcsetattr(serport, TCSANOW, attrs)
|
|
||||||
except IOError:
|
|
||||||
print "IOError in termios"
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
chan = ''
|
chan = ''
|
||||||
while chan != int(sys.argv[2]) - 11:
|
while chan != int(sys.argv[2]) - 11:
|
||||||
os.write(serport, ' ')
|
serport.write(' ')
|
||||||
chanstr = ''
|
chanstr = ''
|
||||||
while 1:
|
while 1:
|
||||||
chanstr += os.read(serport, 1)
|
chanstr += serport.read(1)
|
||||||
m = re.match(".*channel: (\w+)\s+", chanstr)
|
m = re.match(".*channel: (\w+)\s+", chanstr)
|
||||||
if m is not None:
|
if m is not None:
|
||||||
chan = int(m.group(1))
|
chan = int(m.group(1))
|
||||||
break
|
break
|
||||||
|
|
||||||
os.close(serport)
|
|
||||||
|
|
||||||
sys.stderr.write("RX: 0")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
serport = open(sys.argv[1], 'r+')
|
sys.stderr.write('writing to file %s \n' % (sys.argv[3]))
|
||||||
except IOError:
|
outfile = open(sys.argv[3], 'w+b')
|
||||||
print "error opening port"
|
except IndexError:
|
||||||
sys.exit(2)
|
outfile = sys.stdout
|
||||||
|
|
||||||
|
sys.stderr.write("RX: 0\r")
|
||||||
|
|
||||||
### PCAP setup
|
### PCAP setup
|
||||||
MAGIC = 0xa1b2c3d4;
|
MAGIC = 0xa1b2c3d4;
|
||||||
|
@ -65,7 +50,7 @@ SNAPLEN = 0xffff;
|
||||||
NETWORK = 230; # 802.15.4 no FCS
|
NETWORK = 230; # 802.15.4 no FCS
|
||||||
|
|
||||||
# output overall PCAP header
|
# output overall PCAP header
|
||||||
sys.stdout.write(pack('<LHHLLLL', MAGIC, MAJOR, MINOR, ZONE, SIG, SNAPLEN, NETWORK))
|
outfile.write(pack('<LHHLLLL', MAGIC, MAJOR, MINOR, ZONE, SIG, SNAPLEN, NETWORK))
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
fileempty = 1
|
fileempty = 1
|
||||||
|
@ -90,11 +75,10 @@ try:
|
||||||
# if this is a new packet, add a packet header
|
# if this is a new packet, add a packet header
|
||||||
if newpacket == 1:
|
if newpacket == 1:
|
||||||
newpacket = 0
|
newpacket = 0
|
||||||
sys.stdout.write(pack('<LLLL',sec,usec,length,length))
|
outfile.write(pack('<LLLL',sec,usec,length,length))
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
sys.stderr.write("\x1b[G") # Move the cursor up one
|
sys.stderr.write("RX: %d\r" % count)
|
||||||
sys.stderr.write("RX: %d" % count)
|
|
||||||
|
|
||||||
# clear file empty flag
|
# clear file empty flag
|
||||||
if fileempty:
|
if fileempty:
|
||||||
|
@ -105,7 +89,7 @@ try:
|
||||||
# do a match because their might be a \r floating around
|
# do a match because their might be a \r floating around
|
||||||
m = re.match('.*(\w\w).*', d)
|
m = re.match('.*(\w\w).*', d)
|
||||||
if m is not None:
|
if m is not None:
|
||||||
sys.stdout.write(pack('<B', int(m.group(1),16)))
|
outfile.write(pack('<B', int(m.group(1),16)))
|
||||||
|
|
||||||
|
|
||||||
# cn.recv_block()
|
# cn.recv_block()
|
||||||
|
|
Loading…
Reference in a new issue