32 from std_msgs.msg
import String
42 from cStringIO
import StringIO
45 from novatel_span_driver
import translator
47 DEFAULT_IP =
'198.161.73.9' 49 DEFAULT_DEV_NO =
'/dev/ttyUSB0' 50 DEFAULT_BAUDRATE = 115200
52 SOCKET_TIMEOUT = 100.0
61 pcap_file_name = rospy.get_param(
'~pcap_file',
False)
63 if not pcap_file_name:
64 connect_type = rospy.get_param(
'~connect_type',
False)
66 rospy.logfatal(
"Failed to fetch parameter: connect_type, please configure it as 'TCP' or 'SERIAL'")
77 for name, port
in ports.items():
79 rospy.loginfo(
"Port %s thread started." % name)
82 rospy.on_shutdown(shutdown)
87 if "TCP" == connect_type:
88 ip = rospy.get_param(
'~ip', DEFAULT_IP)
89 port = rospy.get_param(
'~port', DEFAULT_PORT)
90 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
93 rospy.loginfo(
"Successfully connected to %%s port at %s:%d" % ip_port % name)
94 elif "SERIAL" == connect_type:
95 dev_no = rospy.get_param(
'~dev_no', DEFAULT_DEV_NO)
96 baud = rospy.get_param(
'~baudrate', DEFAULT_BAUDRATE)
97 sock = serial.Serial(port=dev_no, baudrate=baud, timeout=SOCKET_TIMEOUT, rtscts=
True, dsrdtr=
True)
98 rospy.loginfo(
"Successfully connected to %%s port at %s:%d" % (dev_no, baud) % name)
101 from types
import MethodType
102 sock.recv = MethodType(serial.Serial.read, sock, serial.Serial)
103 sock.send = MethodType(serial.Serial.write, sock, serial.Serial)
104 sock.settimeout = MethodType(
lambda *args, **kwargs:
None, sock, serial.Serial)
105 sock.shutdown = MethodType(
lambda *args, **kwargs:
None, sock, serial.Serial)
107 rospy.logfatal(
"Connect type: %s isn't supported yet, please configure it as 'TCP' or 'SERIAL'" 110 except (socket.error, serial.SerialException)
as e:
111 rospy.logfatal(
"Couldn't connect to port at %s:%s" % (name, str(e)))
113 sock.settimeout(SOCKET_TIMEOUT)
124 import pure_pcapy
as pcapy
126 from StringIO
import StringIO
127 from impacket
import ImpactDecoder
130 if pcap_filename.endswith(
"gz"):
134 tmph, tmpf = tempfile.mkstemp()
135 tmph = open(tmpf,
'wb')
136 gfile = gzip.open(pcap_filename)
137 tmph.write(gfile.read())
142 cap = pcapy.open_offline(pcap_filename)
143 decoder = ImpactDecoder.EthDecoder()
146 header, payload = cap.next()
150 tcp = decoder.decode(payload).child().child()
151 body_list.append(tcp.child().get_packet())
152 except AttributeError:
153 print(decoder.decode(payload))
156 data_io = StringIO(
''.join(body_list))
158 class MockSocket(object):
160 def recv(self, byte_count):
162 data = data_io.read(byte_count)
164 rospy.signal_shutdown(
"Test completed.")
167 def settimeout(self, timeout):
174 receiver_config = rospy.get_param(
'~configuration',
None)
176 if receiver_config
is not None:
177 imu_connect = receiver_config.get(
'imu_connect',
None)
178 if imu_connect
is not None:
179 rospy.loginfo(
"Sending IMU connection string to SPAN system.")
180 port.send(
'connectimu ' + imu_connect[
'port'] +
' ' + imu_connect[
'type'] +
'\r\n')
182 logger = receiver_config.get(
'log_request', [])
183 rospy.loginfo(
"Enabling %i log outputs from SPAN system." % len(logger))
185 port.send(
'log ' + log +
' ontime ' + str(logger[log]) +
'\r\n')
187 commands = receiver_config.get(
'command', [])
188 rospy.loginfo(
"Sending %i user-specified initialization commands to SPAN system." % len(commands))
190 port.send(cmd +
' ' + str(commands[cmd]) +
'\r\n')
196 rospy.loginfo(
"Thread monitor finished.")
197 for name, port
in ports.items():
200 rospy.loginfo(
"Port %s thread finished." % name)
202 sock.shutdown(socket.SHUT_RDWR)
204 rospy.loginfo(
"Sockets closed.")
def create_sock(name, connect_type)
def create_test_sock(pcap_filename)
def configure_receiver(port)