ardupilot/Tools/ArdupilotMegaPlanner/mavlinklist-xml-dontuse.pl
Michael Oborne acdd6b8a83 APM Planner 1.0.69
prep for ac2 2.0.43 - simple mode
modify some scaling in Config
add hud speed warning. add link quality and time to HUD
fix ac2 logs, relative alt.
prep for mavlink 1.0
add time to tlog > plain text conversion
2011-09-17 21:22:07 +08:00

132 lines
2.6 KiB
Perl

$dir = "C:/Users/hog/Documents/Arduino/libraries/GCS_MAVLink/message_definitions/";
#$dir = "C:/Users/hog/Desktop/DIYDrones&avr/pixhawk-mavlink-c91adfb/include/common/";
opendir(DIR,$dir) || die print $!;
@files = readdir(DIR);
closedir(DIR);
open(OUT,">MAVLinkTypes.cs");
print OUT <<EOF;
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ArdupilotMega
{
partial class MAVLink
{
EOF
foreach $file (@files) {
if (!($file eq "common.xml" || $file eq "ardupilotmega.xml"))
{
next;
}
print "$file\n";
open(F,$dir.$file);
$start = 0;
while ($line = <F>) {
if ($line =~ /enum name="(MAV_.*)"/) {
$start = 1;
print OUT "\t\tpublic enum $1\n\t\t{ \n";
}
if ($line =~ /<message id="([0-9]+)" name="([^"]+)">/) {
$name = lc($2);
print OUT "\t\tpublic const byte MAVLINK_MSG_ID_".uc($name) . " = " . $1 . ";\n";
print OUT "\t\t[StructLayout(LayoutKind.Sequential,Pack=1)]\n";
print OUT "\t\tpublic struct __mavlink_".$name."_t\n\t\t{\n";
$no = $1;
$start = 1;
#__mavlink_gps_raw_t
$structs[$no] = "__mavlink_".$name."_t";
} # __mavlink_heartbeat_t
$line =~ s/MAV_CMD_NAV_//;
$line =~ s/MAV_CMD_//;
if ($line =~ /<entry value="([0-9]+)" name="([^"]+)">/)
{
print OUT "\t\t\t$2 = $1,\n";
}
#<field type="uint8_t" name="type">
if ($line =~ /<field type="([^"]+)" name="([^"]+)">(.*)<\/field>/)
{
$type = $1;
$name = $2;
$desc = $3;
print "$type = $name\n";
$type =~ s/byte_mavlink_version/public byte/;
$type =~ s/array/public byte/;
$type =~ s/uint8_t/public byte/;
$type =~ s/int8_t/public byte/;
$type =~ s/float/public float/;
$type =~ s/uint16_t/public ushort/;
$type =~ s/uint32_t/public uint/;
$type =~ s/uint64_t/public ulong/;
$type =~ s/int16_t/public short/;
$type =~ s/int32_t/public int/;
$type =~ s/int64_t/public long/;
if ($type =~ /\[(.*)\]/) { # array
print OUT "\t\t\t[MarshalAs(UnmanagedType.ByValArray, SizeConst=". $1 .")] \n";
$type =~ s/\[.*\]//;
$type =~ s/public\s+([^\s]+)/public $1\[\]/o;
}
print OUT "\t\t\t$type $name; ///< $desc\n";
}
if ($start && ($line =~ /<\/message>/ || $line =~ /<\/enum>/)) {
print OUT "\t\t};\n\n";
$start = 0;
}
}
close(F);
}
print OUT "Type[] mavstructs = new Type[] {";
for ($a = 0; $a <= 256;$a++)
{
if (defined($structs[$a])) {
print OUT "typeof(".$structs[$a] .") ,";
} else {
print OUT "null ,";
}
}
print OUT "};\n\n";
print OUT <<EOF;
}
}
EOF
close OUT;
1;