You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
2.6 KiB
132 lines
2.6 KiB
$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; |