diff --git a/DroneSimulator/Drone.cs b/DroneSimulator/Drone.cs index 5418f2a..3c0a136 100644 --- a/DroneSimulator/Drone.cs +++ b/DroneSimulator/Drone.cs @@ -1,5 +1,6 @@ using System.Numerics; using System.Runtime.InteropServices; +using static System.Net.Mime.MediaTypeNames; namespace DroneSimulator { @@ -436,6 +437,32 @@ namespace DroneSimulator return getBytes(of); } + private byte[] SendDataGPS() + { + DroneData.DataGPS gps = new DroneData.DataGPS(); + + gps.Head.Size = Marshal.SizeOf(typeof(DroneData.DataGPS)); + gps.Head.Mode = DroneData.DataMode.Response; + gps.Head.Type = DroneData.DataType.DataGPS; + gps.Head.Time = (uint)Environment.TickCount; + + gps.Speed = MathF.Sqrt(SpdXYZ.X * SpdXYZ.X + SpdXYZ.Y * SpdXYZ.Y + SpdXYZ.Z * SpdXYZ.Z); + gps.Alt = GPS.Home.Alt + PosXYZ.Z; + + DateTime tim = DateTime.Now; + gps.UTC = tim.Second + tim.Minute * 100 + tim.Hour * 10000; + + gps.Fix = GPS.State.Fix; + gps.SatVisible = GPS.State.SatVisible; + gps.SatUsed = GPS.State.SatUsed; + gps.Noise = GPS.State.Noise; + gps.Hdop = GPS.State.Hdop; + gps.Vdop = GPS.State.Vdop; + gps.Pdop = GPS.State.Pdop; + + return getBytes(gps); + } + private byte[] SendDataQuaternion() { DroneData.DataQuat quat = new DroneData.DataQuat(); @@ -484,6 +511,8 @@ namespace DroneSimulator case DroneData.DataType.DataOF: if (head.Mode == DroneData.DataMode.Request) return SendDataOF(); else return zero; + case DroneData.DataType.DataGPS: if (head.Mode == DroneData.DataMode.Request) return SendDataGPS(); else return zero; + case DroneData.DataType.DataQuat: if (head.Mode == DroneData.DataMode.Request) return SendDataQuaternion(); else return zero; case DroneData.DataType.DataMotor4: if (head.Mode == DroneData.DataMode.Response) RecvDataMotor4(body); return zero; diff --git a/DroneSimulator/DroneData.cs b/DroneSimulator/DroneData.cs index 8b10216..902ea12 100644 --- a/DroneSimulator/DroneData.cs +++ b/DroneSimulator/DroneData.cs @@ -1,4 +1,5 @@ -using System.Runtime.InteropServices; +using System.Net; +using System.Runtime.InteropServices; namespace DroneData { @@ -12,7 +13,7 @@ namespace DroneData None = 0, Head = 1, // Output - DataAcc = 1001, DataGyr = 1002, DataMag = 1003, DataRange = 1004, DataLocal = 1005, DataBar = 1006, DataOF = 1007, + DataAcc = 1001, DataGyr = 1002, DataMag = 1003, DataRange = 1004, DataLocal = 1005, DataBar = 1006, DataOF = 1007, DataGPS = 1008, // Input DataMotor4 = 2001, DataMotor6 = 2002, @@ -105,6 +106,26 @@ namespace DroneData static public int StrLen = Marshal.SizeOf(typeof(DroneData.DataOF)); } + public struct DataGPS + { + public DataHead Head; + + public double Lat, Lon; // Координаты (градусы) + public float Alt; // Высота (метры) + public float Speed; // Скорость (м/с) + public int UTC; // Время UTC hhmmss + + public byte Fix; // Тип решения 0-8 (NMEA Fix type) + public byte SatVisible; // Количество видимых спутников + public byte SatUsed; // Количество используемых спутников + public float Hdop, Vdop, Pdop; // Геометрический фактор + public float Noise; // Шум (db) + + public uint Time; // Последнее время изменения данных + + static public int StrLen = Marshal.SizeOf(typeof(DroneData.DataOF)); + } + public struct DataMotor4 { public DataHead Head; diff --git a/DroneSimulator/FormMain.Designer.cs b/DroneSimulator/FormMain.Designer.cs index b1ac988..a2f1347 100644 --- a/DroneSimulator/FormMain.Designer.cs +++ b/DroneSimulator/FormMain.Designer.cs @@ -179,6 +179,30 @@ checkBox_Area_Freeze_Y = new CheckBox(); label41 = new Label(); checkBox_Area_Freeze_X = new CheckBox(); + tabPage_GPS = new TabPage(); + groupBox5 = new GroupBox(); + numericUpDown_GPS_VDOP = new NumericUpDown(); + numericUpDown_GPS_PDOP = new NumericUpDown(); + numericUpDown_GPS_HDOP = new NumericUpDown(); + label82 = new Label(); + label81 = new Label(); + label80 = new Label(); + numericUpDown_GPS_Noise = new NumericUpDown(); + numericUpDown_GPS_Use = new NumericUpDown(); + numericUpDown_GPS_Vis = new NumericUpDown(); + numericUpDown_GPS_Fix = new NumericUpDown(); + label73 = new Label(); + label72 = new Label(); + label71 = new Label(); + label70 = new Label(); + groupBox2 = new GroupBox(); + label69 = new Label(); + numericUpDown_GPS_Alt = new NumericUpDown(); + label68 = new Label(); + numericUpDown_GPS_Lon = new NumericUpDown(); + numericUpDown_GPS_Lat = new NumericUpDown(); + label67 = new Label(); + label66 = new Label(); groupBox_Navi = new GroupBox(); panel1 = new Panel(); listBox_Drones = new ListBox(); @@ -245,6 +269,19 @@ ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Direction).BeginInit(); ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Speed_From).BeginInit(); groupBox3.SuspendLayout(); + tabPage_GPS.SuspendLayout(); + groupBox5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_VDOP).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_PDOP).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_HDOP).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Noise).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Use).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Vis).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Fix).BeginInit(); + groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Alt).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Lon).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Lat).BeginInit(); groupBox_Navi.SuspendLayout(); panel1.SuspendLayout(); SuspendLayout(); @@ -300,6 +337,7 @@ tabControl_Menu.Controls.Add(tabPage_Main); tabControl_Menu.Controls.Add(tabPage_Model); tabControl_Menu.Controls.Add(tabPage_Area); + tabControl_Menu.Controls.Add(tabPage_GPS); tabControl_Menu.Dock = DockStyle.Left; tabControl_Menu.Location = new Point(0, 24); tabControl_Menu.Name = "tabControl_Menu"; @@ -1909,6 +1947,264 @@ checkBox_Area_Freeze_X.UseVisualStyleBackColor = true; checkBox_Area_Freeze_X.CheckedChanged += checkBox_Area_Freeze_CheckedChanged; // + // tabPage_GPS + // + tabPage_GPS.Controls.Add(groupBox5); + tabPage_GPS.Controls.Add(groupBox2); + tabPage_GPS.Location = new Point(4, 24); + tabPage_GPS.Name = "tabPage_GPS"; + tabPage_GPS.Padding = new Padding(3); + tabPage_GPS.Size = new Size(210, 889); + tabPage_GPS.TabIndex = 3; + tabPage_GPS.Text = "GPS"; + tabPage_GPS.UseVisualStyleBackColor = true; + // + // groupBox5 + // + groupBox5.Controls.Add(numericUpDown_GPS_VDOP); + groupBox5.Controls.Add(numericUpDown_GPS_PDOP); + groupBox5.Controls.Add(numericUpDown_GPS_HDOP); + groupBox5.Controls.Add(label82); + groupBox5.Controls.Add(label81); + groupBox5.Controls.Add(label80); + groupBox5.Controls.Add(numericUpDown_GPS_Noise); + groupBox5.Controls.Add(numericUpDown_GPS_Use); + groupBox5.Controls.Add(numericUpDown_GPS_Vis); + groupBox5.Controls.Add(numericUpDown_GPS_Fix); + groupBox5.Controls.Add(label73); + groupBox5.Controls.Add(label72); + groupBox5.Controls.Add(label71); + groupBox5.Controls.Add(label70); + groupBox5.Dock = DockStyle.Top; + groupBox5.Location = new Point(3, 122); + groupBox5.Name = "groupBox5"; + groupBox5.Size = new Size(204, 225); + groupBox5.TabIndex = 2; + groupBox5.TabStop = false; + groupBox5.Text = "State"; + // + // numericUpDown_GPS_VDOP + // + numericUpDown_GPS_VDOP.DecimalPlaces = 2; + numericUpDown_GPS_VDOP.Location = new Point(58, 165); + numericUpDown_GPS_VDOP.Name = "numericUpDown_GPS_VDOP"; + numericUpDown_GPS_VDOP.Size = new Size(62, 23); + numericUpDown_GPS_VDOP.TabIndex = 19; + numericUpDown_GPS_VDOP.Value = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDown_GPS_VDOP.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_PDOP + // + numericUpDown_GPS_PDOP.DecimalPlaces = 2; + numericUpDown_GPS_PDOP.Location = new Point(58, 194); + numericUpDown_GPS_PDOP.Name = "numericUpDown_GPS_PDOP"; + numericUpDown_GPS_PDOP.Size = new Size(62, 23); + numericUpDown_GPS_PDOP.TabIndex = 18; + numericUpDown_GPS_PDOP.Value = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDown_GPS_PDOP.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_HDOP + // + numericUpDown_GPS_HDOP.DecimalPlaces = 2; + numericUpDown_GPS_HDOP.Location = new Point(58, 136); + numericUpDown_GPS_HDOP.Name = "numericUpDown_GPS_HDOP"; + numericUpDown_GPS_HDOP.Size = new Size(62, 23); + numericUpDown_GPS_HDOP.TabIndex = 17; + numericUpDown_GPS_HDOP.Value = new decimal(new int[] { 1, 0, 0, 65536 }); + numericUpDown_GPS_HDOP.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // label82 + // + label82.AutoSize = true; + label82.Location = new Point(15, 167); + label82.Name = "label82"; + label82.Size = new Size(37, 15); + label82.TabIndex = 16; + label82.Text = "Vdop:"; + // + // label81 + // + label81.AutoSize = true; + label81.Location = new Point(14, 196); + label81.Name = "label81"; + label81.Size = new Size(38, 15); + label81.TabIndex = 15; + label81.Text = "Pdop:"; + // + // label80 + // + label80.AutoSize = true; + label80.Location = new Point(12, 138); + label80.Name = "label80"; + label80.Size = new Size(40, 15); + label80.TabIndex = 14; + label80.Text = "Hdop:"; + // + // numericUpDown_GPS_Noise + // + numericUpDown_GPS_Noise.DecimalPlaces = 2; + numericUpDown_GPS_Noise.Location = new Point(58, 107); + numericUpDown_GPS_Noise.Name = "numericUpDown_GPS_Noise"; + numericUpDown_GPS_Noise.Size = new Size(62, 23); + numericUpDown_GPS_Noise.TabIndex = 9; + numericUpDown_GPS_Noise.Value = new decimal(new int[] { 10, 0, 0, 0 }); + numericUpDown_GPS_Noise.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_Use + // + numericUpDown_GPS_Use.Location = new Point(58, 78); + numericUpDown_GPS_Use.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); + numericUpDown_GPS_Use.Name = "numericUpDown_GPS_Use"; + numericUpDown_GPS_Use.Size = new Size(40, 23); + numericUpDown_GPS_Use.TabIndex = 8; + numericUpDown_GPS_Use.Value = new decimal(new int[] { 10, 0, 0, 0 }); + numericUpDown_GPS_Use.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_Vis + // + numericUpDown_GPS_Vis.Location = new Point(58, 49); + numericUpDown_GPS_Vis.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); + numericUpDown_GPS_Vis.Name = "numericUpDown_GPS_Vis"; + numericUpDown_GPS_Vis.Size = new Size(40, 23); + numericUpDown_GPS_Vis.TabIndex = 7; + numericUpDown_GPS_Vis.Value = new decimal(new int[] { 15, 0, 0, 0 }); + numericUpDown_GPS_Vis.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_Fix + // + numericUpDown_GPS_Fix.Location = new Point(58, 20); + numericUpDown_GPS_Fix.Maximum = new decimal(new int[] { 8, 0, 0, 0 }); + numericUpDown_GPS_Fix.Name = "numericUpDown_GPS_Fix"; + numericUpDown_GPS_Fix.Size = new Size(40, 23); + numericUpDown_GPS_Fix.TabIndex = 6; + numericUpDown_GPS_Fix.Value = new decimal(new int[] { 3, 0, 0, 0 }); + numericUpDown_GPS_Fix.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // label73 + // + label73.AutoSize = true; + label73.Location = new Point(12, 109); + label73.Name = "label73"; + label73.Size = new Size(40, 15); + label73.TabIndex = 3; + label73.Text = "Noise:"; + // + // label72 + // + label72.AutoSize = true; + label72.Location = new Point(4, 80); + label72.Name = "label72"; + label72.Size = new Size(48, 15); + label72.TabIndex = 2; + label72.Text = "Sat Use:"; + // + // label71 + // + label71.AutoSize = true; + label71.Location = new Point(8, 51); + label71.Name = "label71"; + label71.Size = new Size(44, 15); + label71.TabIndex = 1; + label71.Text = "Sat Vis:"; + // + // label70 + // + label70.AutoSize = true; + label70.Location = new Point(27, 22); + label70.Name = "label70"; + label70.Size = new Size(25, 15); + label70.TabIndex = 0; + label70.Text = "Fix:"; + // + // groupBox2 + // + groupBox2.Controls.Add(label69); + groupBox2.Controls.Add(numericUpDown_GPS_Alt); + groupBox2.Controls.Add(label68); + groupBox2.Controls.Add(numericUpDown_GPS_Lon); + groupBox2.Controls.Add(numericUpDown_GPS_Lat); + groupBox2.Controls.Add(label67); + groupBox2.Controls.Add(label66); + groupBox2.Dock = DockStyle.Top; + groupBox2.Location = new Point(3, 3); + groupBox2.Name = "groupBox2"; + groupBox2.Size = new Size(204, 119); + groupBox2.TabIndex = 1; + groupBox2.TabStop = false; + groupBox2.Text = "Home"; + // + // label69 + // + label69.AutoSize = true; + label69.Location = new Point(153, 83); + label69.Name = "label69"; + label69.Size = new Size(18, 15); + label69.TabIndex = 6; + label69.Text = "m"; + // + // numericUpDown_GPS_Alt + // + numericUpDown_GPS_Alt.DecimalPlaces = 3; + numericUpDown_GPS_Alt.Location = new Point(58, 81); + numericUpDown_GPS_Alt.Maximum = new decimal(new int[] { 10000, 0, 0, 0 }); + numericUpDown_GPS_Alt.Minimum = new decimal(new int[] { 1000, 0, 0, int.MinValue }); + numericUpDown_GPS_Alt.Name = "numericUpDown_GPS_Alt"; + numericUpDown_GPS_Alt.Size = new Size(89, 23); + numericUpDown_GPS_Alt.TabIndex = 5; + numericUpDown_GPS_Alt.Value = new decimal(new int[] { 503, 0, 0, 65536 }); + numericUpDown_GPS_Alt.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // label68 + // + label68.AutoSize = true; + label68.Location = new Point(16, 83); + label68.Name = "label68"; + label68.Size = new Size(25, 15); + label68.TabIndex = 4; + label68.Text = "Alt:"; + // + // numericUpDown_GPS_Lon + // + numericUpDown_GPS_Lon.DecimalPlaces = 8; + numericUpDown_GPS_Lon.Location = new Point(58, 52); + numericUpDown_GPS_Lon.Maximum = new decimal(new int[] { 90, 0, 0, 0 }); + numericUpDown_GPS_Lon.Minimum = new decimal(new int[] { 90, 0, 0, int.MinValue }); + numericUpDown_GPS_Lon.Name = "numericUpDown_GPS_Lon"; + numericUpDown_GPS_Lon.Size = new Size(101, 23); + numericUpDown_GPS_Lon.TabIndex = 3; + numericUpDown_GPS_Lon.Value = new decimal(new int[] { 472064791, 0, 0, 458752 }); + numericUpDown_GPS_Lon.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // numericUpDown_GPS_Lat + // + numericUpDown_GPS_Lat.DecimalPlaces = 8; + numericUpDown_GPS_Lat.Location = new Point(58, 23); + numericUpDown_GPS_Lat.Maximum = new decimal(new int[] { 90, 0, 0, 0 }); + numericUpDown_GPS_Lat.Minimum = new decimal(new int[] { 90, 0, 0, int.MinValue }); + numericUpDown_GPS_Lat.Name = "numericUpDown_GPS_Lat"; + numericUpDown_GPS_Lat.Size = new Size(101, 23); + numericUpDown_GPS_Lat.TabIndex = 2; + numericUpDown_GPS_Lat.Value = new decimal(new int[] { 389290690, 0, 0, 458752 }); + numericUpDown_GPS_Lat.ValueChanged += numericUpDown_GPS_ValueChanged; + // + // label67 + // + label67.AutoSize = true; + label67.Location = new Point(15, 54); + label67.Name = "label67"; + label67.Size = new Size(30, 15); + label67.TabIndex = 1; + label67.Text = "Lon:"; + // + // label66 + // + label66.AutoSize = true; + label66.Location = new Point(19, 25); + label66.Name = "label66"; + label66.Size = new Size(26, 15); + label66.TabIndex = 0; + label66.Text = "Lat:"; + // // groupBox_Navi // groupBox_Navi.Controls.Add(panel1); @@ -2061,6 +2357,21 @@ ((System.ComponentModel.ISupportInitialize)numericUpDown_Area_Wind_Speed_From).EndInit(); groupBox3.ResumeLayout(false); groupBox3.PerformLayout(); + tabPage_GPS.ResumeLayout(false); + groupBox5.ResumeLayout(false); + groupBox5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_VDOP).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_PDOP).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_HDOP).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Noise).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Use).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Vis).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Fix).EndInit(); + groupBox2.ResumeLayout(false); + groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Alt).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Lon).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDown_GPS_Lat).EndInit(); groupBox_Navi.ResumeLayout(false); panel1.ResumeLayout(false); ResumeLayout(false); @@ -2225,5 +2536,29 @@ private CheckBox checkBox_Model_OF_Real; private CheckBox checkBox_Model_Bar_Real; private CheckBox checkBox_Model_Pos_Real; + private TabPage tabPage_GPS; + private GroupBox groupBox2; + private Label label67; + private Label label66; + private NumericUpDown numericUpDown_GPS_Lat; + private NumericUpDown numericUpDown_GPS_Lon; + private Label label69; + private NumericUpDown numericUpDown_GPS_Alt; + private Label label68; + private GroupBox groupBox5; + private NumericUpDown numericUpDown_GPS_Vis; + private NumericUpDown numericUpDown_GPS_Fix; + private Label label73; + private Label label72; + private Label label71; + private Label label70; + private NumericUpDown numericUpDown_GPS_Noise; + private NumericUpDown numericUpDown_GPS_Use; + private NumericUpDown numericUpDown_GPS_VDOP; + private NumericUpDown numericUpDown_GPS_PDOP; + private NumericUpDown numericUpDown_GPS_HDOP; + private Label label82; + private Label label81; + private Label label80; } } diff --git a/DroneSimulator/FormMain.cs b/DroneSimulator/FormMain.cs index 9fb1d9d..ef84c4f 100644 --- a/DroneSimulator/FormMain.cs +++ b/DroneSimulator/FormMain.cs @@ -139,6 +139,11 @@ namespace DroneSimulator private void timer_Test_Tick(object sender, EventArgs e) { + DateTime test = DateTime.Now; + + int tim = test.Second + test.Minute * 100 + test.Hour * 10000; + + if (screen2D == null) return; listBox_Drones.Items.Clear(); @@ -242,7 +247,7 @@ namespace DroneSimulator private void numericUpDown_Acc_Update(object sender, EventArgs e) { - RealMode.Accelerometer.RealSimulation=checkBox_Model_Acc_Real.Checked; + RealMode.Accelerometer.RealSimulation = checkBox_Model_Acc_Real.Checked; RealMode.Accelerometer.Freq = (uint)numericUpDown_Acc_Freq.Value; RealMode.Accelerometer.Noise = (float)numericUpDown_Acc_Noise.Value; @@ -317,8 +322,23 @@ namespace DroneSimulator Area.Wind.Speed.To = (float)numericUpDown_Area_Wind_Speed_To.Value; Area.Wind.Direction = (float)numericUpDown_Area_Wind_Direction.Value; Area.Wind.Density = (float)numericUpDown_Area_Wind_Density.Value; - Area.Wind.PosResist = ((float)numericUpDown_Area_Wind_PosResist.Value)/1000.0f; - Area.Wind.RotResist = ((float)numericUpDown_Area_Wind_RotResist.Value)/1000.0f; + Area.Wind.PosResist = ((float)numericUpDown_Area_Wind_PosResist.Value) / 1000.0f; + Area.Wind.RotResist = ((float)numericUpDown_Area_Wind_RotResist.Value) / 1000.0f; + } + + private void numericUpDown_GPS_ValueChanged(object sender, EventArgs e) + { + GPS.Home.Lat = (double)numericUpDown_GPS_Lat.Value; + GPS.Home.Lon = (double)numericUpDown_GPS_Lon.Value; + GPS.Home.Alt = (double)numericUpDown_GPS_Alt.Value; + + GPS.State.Fix = (byte)numericUpDown_GPS_Fix.Value; + GPS.State.SatVisible = (byte)numericUpDown_GPS_Vis.Value; + GPS.State.SatUsed = (byte)numericUpDown_GPS_Use.Value; + GPS.State.Noise = (float)numericUpDown_GPS_Noise.Value; + GPS.State.Hdop = (float)numericUpDown_GPS_HDOP.Value; + GPS.State.Vdop = (float)numericUpDown_GPS_VDOP.Value; + GPS.State.Pdop = (float)numericUpDown_GPS_PDOP.Value; } } } diff --git a/DroneSimulator/GPS.cs b/DroneSimulator/GPS.cs new file mode 100644 index 0000000..c878c5e --- /dev/null +++ b/DroneSimulator/GPS.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace DroneSimulator +{ + internal class GPS + { + public struct Home + { + public static double Lat, Lon; + public static float Alt; + } + + public struct State + { + public static byte Fix; // Тип решения 0-8 (NMEA Fix type) + public static byte SatVisible; // Количество видимых спутников + public static byte SatUsed; // Количество используемых спутников + public static float Hdop, Vdop, Pdop; // Геометрический фактор + public static float Noise; // Шум (db) + } + } +}