mavtables  0.2.1
MAVLink router and firewall.
logger.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 from __future__ import (absolute_import, division,
4  print_function, unicode_literals)
5 from builtins import *
6 
7 import os
8 import sys
9 import signal
10 from time import sleep
11 from argparse import ArgumentParser
12 from threading import Thread
13 from pymavlink import mavutil
14 
15 
16 def signal_handler(signal, frame):
17  sys.exit(0)
18 
19 
20 def parse_args():
21  parser = ArgumentParser(description='Log incoming MAVLink packets.')
22  parser.add_argument('system', type=int, help='system ID')
23  parser.add_argument('component', type=int, help='component ID')
24  parser.add_argument(
25  '--verbose', '-v', action='store_true', help='enable verbosity')
26  parser.add_argument(
27  '--noheartbeat', action='store_true', help='disable heartbeat')
28  parser.add_argument(
29  '--udp', action='store', help='UDP address:port to connect to')
30  parser.add_argument(
31  '--serial', action='store', help='serial port device string')
32  args = vars(parser.parse_args())
33  if not args['udp'] and not args['serial']:
34  print('expected --udp or --serial option')
35  sys.exit()
36  if args['udp'] and args['serial']:
37  print('expected --udp or --serial option, but not both')
38  sys.exit()
39  return args
40 
41 
42 def heartbeat(mav):
43  while True:
44  mav.mav.heartbeat_send(0, 0, 0, 0, 0)
45  sleep(60)
46 
47 
49  hbthread = Thread(target=heartbeat, args=(mav,))
50  hbthread.daemon = True
51  hbthread.start()
52 
53 
54 def main():
55  signal.signal(signal.SIGINT, signal_handler)
56  os.environ['MAVLINK20'] = '1'
57  mavutil.set_dialect('common')
58  args = parse_args()
59  if args['udp']:
60  mav = mavutil.mavlink_connection('udpout:' + args['udp'],
61  source_system=args['system'], source_component=args['component'])
62  elif args['serial']:
63  mav = mavutil.mavlink_connection(args['serial'], baud=57600,
64  source_system=args['system'], source_component=args['component'])
65  else:
66  sys.exit(1)
67  if not args['noheartbeat']:
68  start_heartbeats(mav)
69  while True:
70  msg = mav.recv_match(blocking=True)
71  if (args['verbose']):
72  msg_string = "{:s} from {:d}.{:d}".format(
73  msg.get_type(), msg.get_srcSystem(), msg.get_srcComponent())
74  try:
75  dest_string = " to {:d}.{:d}".format(
76  msg.target_system, msg.target_component)
77  msg_string += dest_string
78  except:
79  pass
80  print(msg_string)
81  else:
82  print(msg.get_type())
83  sys.stdout.flush()
84 
85 
86 if __name__ == '__main__':
87  main()
def main()
Definition: logger.py:54
def signal_handler(signal, frame)
Definition: logger.py:16
def start_heartbeats(mav)
Definition: logger.py:48
def heartbeat(mav)
Definition: logger.py:42
def parse_args()
Definition: logger.py:20