Difference between revisions of "DevGuide/Communications"
Line 24: | Line 24: | ||
from the airborne code you can send the message by using this code, for example | from the airborne code you can send the message by using this code, for example | ||
DOWNLINK_SEND_MARK(&ant_v2x_data.xraw, &ant_v2x_data.yraw, \ | DOWNLINK_SEND_MARK(&ant_v2x_data.xraw, &ant_v2x_data.yraw, \ | ||
&ant_v2x_data.xcal, &ant_v2x_data.ycal, \ | &ant_v2x_data.xcal, &ant_v2x_data.ycal, \ | ||
Line 62: | Line 63: | ||
== The "transport" layer | == The "transport" layer == | ||
Paparazzi can use the builtin transport layer of different hardware ( currently only wavecards and xbee/xtends ) and also provides his own layer for hardware lacking it ( showing as remote serial ports ) | Paparazzi can use the builtin transport layer of different hardware ( currently only wavecards and xbee/xtends ) and also provides his own layer for hardware lacking it ( showing as remote serial ports ) |
Revision as of 17:03, 8 February 2007
This page describes the way the communications with the aircrafts are implemented in paparazzi
We'll start with high level stuff such as sending your own telemtry message or uplink message. We'll then look at the lower layers
sending telemetry message
describe your message in the telemetry section in conf/messages.xml
this should looks like this
<message name="MARK" id="32"> <field name="ac_id" type="uint8"/> <field name="lat" type="float" unit="deg"/> <field name="long" type="float" unit="deg"/> </message>
the id has to be unique the fields can have type int8, int16, int32, uint8, uint16, uint32, float and arrays of those
they must be aligned in order to work on arm7 ( write more on that )
this enable all the ground system to deal with your message and generate some code for the airborne system the generated code is in var/include/messages.h
from the airborne code you can send the message by using this code, for example
DOWNLINK_SEND_MARK(&ant_v2x_data.xraw, &ant_v2x_data.yraw, \
&ant_v2x_data.xcal, &ant_v2x_data.ycal, \ &ant_v2x_data.heading, &ant_v2x_data.magnitude, \ &ant_v2x_data.temp, &ant_v2x_data.distor, \ &ant_v2x_data.cal_status);
you can alos have the autopilot send it periodically in your telemetry file ( for example conf/telemetry/default.xml you can make your own it is referenced in the airframe file) you can add a line like
<message name="CALIB_START" period="1"/>
meaning that CALIB_START will be sent every second
you can have different modes
when sent by the aircraft the message will be available on the ground ivy bus
you can watch it using the messages program or with ivyprobe
the file sw/ground_segment/cockpit/ant_track.c shows how to receive a message in a C program for ocaml, we have a higher level library to receive messages
adding datalink ( uplink ) messages
this is similar to the above
add you message in the datalink section of messages.xml
this will generate parsing code for the airborne program
you can add your handler in the sw/airborne/datalink.c code ( must find a way to include external code in that )
or you can just rewrite your own dl_parse_msg() function, for exzample in a test program where you want to receive only your own messages
The "transport" layer
Paparazzi can use the builtin transport layer of different hardware ( currently only wavecards and xbee/xtends ) and also provides his own layer for hardware lacking it ( showing as remote serial ports )