123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/usr/bin/env python
- """
- Generate a message using different MAVLink versions, put in a buffer and then read from it.
- """
- from __future__ import print_function
- from builtins import object
- from pymavlink.dialects.v10 import ardupilotmega as mavlink1
- from pymavlink.dialects.v20 import ardupilotmega as mavlink2
- class fifo(object):
- def __init__(self):
- self.buf = []
- def write(self, data):
- self.buf += data
- return len(data)
- def read(self):
- return self.buf.pop(0)
- def test_protocol(mavlink, signing=False):
- # we will use a fifo as an encode/decode buffer
- f = fifo()
- print("Creating MAVLink message...")
- # create a mavlink instance, which will do IO on file object 'f'
- mav = mavlink.MAVLink(f)
- if signing:
- mav.signing.secret_key = chr(42)*32
- mav.signing.link_id = 0
- mav.signing.timestamp = 0
- mav.signing.sign_outgoing = True
- # set the WP_RADIUS parameter on the MAV at the end of the link
- mav.param_set_send(7, 1, "WP_RADIUS", 101, mavlink.MAV_PARAM_TYPE_REAL32)
- # alternatively, produce a MAVLink_param_set object
- # this can be sent via your own transport if you like
- m = mav.param_set_encode(7, 1, "WP_RADIUS", 101, mavlink.MAV_PARAM_TYPE_REAL32)
- m.pack(mav)
- # get the encoded message as a buffer
- b = m.get_msgbuf()
- bi=[]
- for c in b:
- bi.append(int(c))
- print("Buffer containing the encoded message:")
- print(bi)
- print("Decoding message...")
- # decode an incoming message
- m2 = mav.decode(b)
- # show what fields it has
- print("Got a message with id %u and fields %s" % (m2.get_msgId(), m2.get_fieldnames()))
- # print out the fields
- print(m2)
- print("Testing mavlink1\n")
- test_protocol(mavlink1)
- print("\nTesting mavlink2\n")
- test_protocol(mavlink2)
- print("\nTesting mavlink2 with signing\n")
- test_protocol(mavlink2, True)
|