#pragma once #include #include #include #include #include "Converter.h" #include "ConvNorm.h" struct PointG { double Latitude; double Longitude; }; float GPS_LocalDistance(PointG p1, PointG p2, float& dx, float& dy) // light formula { const float pi = 3.14159265359; const float er = 6371000; // Radius of the earth in m float lat = p1.Latitude - p2.Latitude; float lon = p1.Longitude - p2.Longitude; float y = er / 360 * (lat * pi * 2); // lat dy = y; float l = ((float)(p1.Latitude + p2.Latitude)) / 2; float r = cosf(l * pi / 180) * er; float x = r / 360 * (lon * pi * 2); // long dx = x; float d = sqrtf(x * x + y * y); return d; } //------------------------------------------------------------------------------ float PlotsData[7]; bool PlotsReady = false; HANDLE PortCOM; HANDLE FileLOG; HANDLE MainThread; void SaveLogFile(HANDLE file, unsigned char data[28], unsigned long size) { float table[7]; memcpy(table, data, size); memcpy(PlotsData, data, size); PlotsReady = true; if (!file) return; char buf[1024]; sprintf(buf, "%d|%f|%f|%f|%f|%f|%f\r\n", (int)table[0], table[1], table[2], table[3], table[4], table[5], table[6]); WriteFile(file, buf, strlen(buf), 0, 0); } unsigned long __stdcall RecvThread(void*) { long wait = 0; private enum class RecvModeEnum : char { Begin, Data }; bool mode = false; unsigned char data[29]; unsigned long size; unsigned long len; while (1) { if (!PortCOM) { CloseHandle(MainThread); CloseHandle(FileLOG); MainThread = 0; return 0; } if (wait < GetTickCount()) mode = false; if(!mode) { wait = GetTickCount() + 20; ReadFile(PortCOM, data, 1, &len, 0); if (!len) continue; if (data[0] == 'Z') mode = true; size = 0; } if(mode) { ReadFile(PortCOM, data + size, sizeof(data) - size, &len, 0); if (!len) continue; size += len; if (size < sizeof(data)) continue; if (data[28] == 'V') SaveLogFile(FileLOG, data, sizeof(data) - 1); mode = false; } } } namespace HexapodControl { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO; /// /// Summary for Form1 /// /// WARNING: If you change the name of this class, you will need to change the /// 'Resource File Name' property for the managed resource compiler tool /// associated with all .resx files this class depends on. Otherwise, /// the designers will not be able to interact properly with localized /// resources associated with this form. /// public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // } protected: /// /// Clean up any resources being used. String^ RecordsFolder = ""; private: System::Windows::Forms::OpenFileDialog^ openFileDialog_Open; private: System::Windows::Forms::Button^ button_File; private: System::Windows::Forms::GroupBox^ groupBox1; private: System::Windows::Forms::CheckedListBox^ checkedListBox_List; private: System::Windows::Forms::CheckBox^ checkBox_Auto; private: System::Windows::Forms::Label^ label2; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::NumericUpDown^ numericUpDown_Graph_MinY; private: System::Windows::Forms::NumericUpDown^ numericUpDown_Track; private: System::Windows::Forms::Label^ label3; private: System::Windows::Forms::Panel^ panel_Opt; private: System::Windows::Forms::NumericUpDown^ numericUpDown_Gain; private: System::Windows::Forms::Label^ label4; private: System::Windows::Forms::Button^ button_Gain_Clear; private: System::Windows::Forms::NumericUpDown^ numericUpDown_Shift; private: System::Windows::Forms::Label^ label5; private: System::Windows::Forms::NumericUpDown^ numericUpDown_Graph_MaxY; protected: protected: /// ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::DataVisualization::Charting::Chart^ chart_Graph; protected: private: System::Windows::Forms::Panel^ panel1; private: System::Windows::Forms::Timer^ timer_Tick; private: System::Windows::Forms::Button^ button_Start; private: System::Windows::Forms::GroupBox^ groupBox_P1; private: System::Windows::Forms::ComboBox^ comboBox_Port; private: System::Windows::Forms::Button^ button_Connect; private: System::ComponentModel::IContainer^ components; private: /// /// Required designer variable. /// #pragma region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); System::Windows::Forms::DataVisualization::Charting::ChartArea^ chartArea1 = (gcnew System::Windows::Forms::DataVisualization::Charting::ChartArea()); System::Windows::Forms::DataVisualization::Charting::Legend^ legend1 = (gcnew System::Windows::Forms::DataVisualization::Charting::Legend()); System::Windows::Forms::DataVisualization::Charting::Series^ series1 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); System::Windows::Forms::DataVisualization::Charting::Series^ series2 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); System::Windows::Forms::DataVisualization::Charting::Series^ series3 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); System::Windows::Forms::DataVisualization::Charting::Series^ series4 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); System::Windows::Forms::DataVisualization::Charting::Series^ series5 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); System::Windows::Forms::DataVisualization::Charting::Series^ series6 = (gcnew System::Windows::Forms::DataVisualization::Charting::Series()); this->chart_Graph = (gcnew System::Windows::Forms::DataVisualization::Charting::Chart()); this->panel1 = (gcnew System::Windows::Forms::Panel()); this->button_File = (gcnew System::Windows::Forms::Button()); this->comboBox_Port = (gcnew System::Windows::Forms::ComboBox()); this->button_Connect = (gcnew System::Windows::Forms::Button()); this->button_Start = (gcnew System::Windows::Forms::Button()); this->timer_Tick = (gcnew System::Windows::Forms::Timer(this->components)); this->groupBox_P1 = (gcnew System::Windows::Forms::GroupBox()); this->openFileDialog_Open = (gcnew System::Windows::Forms::OpenFileDialog()); this->groupBox1 = (gcnew System::Windows::Forms::GroupBox()); this->panel_Opt = (gcnew System::Windows::Forms::Panel()); this->numericUpDown_Shift = (gcnew System::Windows::Forms::NumericUpDown()); this->label5 = (gcnew System::Windows::Forms::Label()); this->button_Gain_Clear = (gcnew System::Windows::Forms::Button()); this->numericUpDown_Gain = (gcnew System::Windows::Forms::NumericUpDown()); this->label4 = (gcnew System::Windows::Forms::Label()); this->numericUpDown_Track = (gcnew System::Windows::Forms::NumericUpDown()); this->label3 = (gcnew System::Windows::Forms::Label()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->numericUpDown_Graph_MinY = (gcnew System::Windows::Forms::NumericUpDown()); this->numericUpDown_Graph_MaxY = (gcnew System::Windows::Forms::NumericUpDown()); this->checkBox_Auto = (gcnew System::Windows::Forms::CheckBox()); this->checkedListBox_List = (gcnew System::Windows::Forms::CheckedListBox()); (cli::safe_cast(this->chart_Graph))->BeginInit(); this->panel1->SuspendLayout(); this->groupBox_P1->SuspendLayout(); this->groupBox1->SuspendLayout(); this->panel_Opt->SuspendLayout(); (cli::safe_cast(this->numericUpDown_Shift))->BeginInit(); (cli::safe_cast(this->numericUpDown_Gain))->BeginInit(); (cli::safe_cast(this->numericUpDown_Track))->BeginInit(); (cli::safe_cast(this->numericUpDown_Graph_MinY))->BeginInit(); (cli::safe_cast(this->numericUpDown_Graph_MaxY))->BeginInit(); this->SuspendLayout(); // // chart_Graph // chartArea1->Name = L"ChartArea1"; this->chart_Graph->ChartAreas->Add(chartArea1); this->chart_Graph->Dock = System::Windows::Forms::DockStyle::Fill; legend1->Name = L"Legend1"; this->chart_Graph->Legends->Add(legend1); this->chart_Graph->Location = System::Drawing::Point(3, 16); this->chart_Graph->Name = L"chart_Graph"; series1->BorderWidth = 2; series1->ChartArea = L"ChartArea1"; series1->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series1->Color = System::Drawing::Color::Red; series1->Legend = L"Legend1"; series1->Name = L"gX"; series1->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series1->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series2->BorderWidth = 2; series2->ChartArea = L"ChartArea1"; series2->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series2->Color = System::Drawing::Color::Blue; series2->Legend = L"Legend1"; series2->Name = L"gY"; series2->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series2->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series3->BorderWidth = 2; series3->ChartArea = L"ChartArea1"; series3->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series3->Color = System::Drawing::Color::Green; series3->Legend = L"Legend1"; series3->Name = L"gZ"; series3->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series3->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series4->ChartArea = L"ChartArea1"; series4->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series4->Legend = L"Legend1"; series4->Name = L"iX"; series4->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series4->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series5->ChartArea = L"ChartArea1"; series5->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series5->Legend = L"Legend1"; series5->Name = L"iY"; series5->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series5->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series6->ChartArea = L"ChartArea1"; series6->ChartType = System::Windows::Forms::DataVisualization::Charting::SeriesChartType::FastLine; series6->Legend = L"Legend1"; series6->Name = L"iZ"; series6->XValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; series6->YValueType = System::Windows::Forms::DataVisualization::Charting::ChartValueType::Double; this->chart_Graph->Series->Add(series1); this->chart_Graph->Series->Add(series2); this->chart_Graph->Series->Add(series3); this->chart_Graph->Series->Add(series4); this->chart_Graph->Series->Add(series5); this->chart_Graph->Series->Add(series6); this->chart_Graph->Size = System::Drawing::Size(689, 669); this->chart_Graph->TabIndex = 1; this->chart_Graph->Text = L"chart1"; // // panel1 // this->panel1->Controls->Add(this->button_File); this->panel1->Controls->Add(this->comboBox_Port); this->panel1->Controls->Add(this->button_Connect); this->panel1->Controls->Add(this->button_Start); this->panel1->Dock = System::Windows::Forms::DockStyle::Left; this->panel1->Location = System::Drawing::Point(0, 0); this->panel1->Name = L"panel1"; this->panel1->Size = System::Drawing::Size(135, 688); this->panel1->TabIndex = 2; // // button_File // this->button_File->Location = System::Drawing::Point(29, 611); this->button_File->Name = L"button_File"; this->button_File->Size = System::Drawing::Size(75, 23); this->button_File->TabIndex = 4; this->button_File->Text = L"File"; this->button_File->UseVisualStyleBackColor = true; this->button_File->Click += gcnew System::EventHandler(this, &Form1::button_File_Click); // // comboBox_Port // this->comboBox_Port->FormattingEnabled = true; this->comboBox_Port->Location = System::Drawing::Point(8, 12); this->comboBox_Port->Name = L"comboBox_Port"; this->comboBox_Port->Size = System::Drawing::Size(121, 21); this->comboBox_Port->TabIndex = 3; this->comboBox_Port->DropDown += gcnew System::EventHandler(this, &Form1::comboBox_Port_DropDown); // // button_Connect // this->button_Connect->Location = System::Drawing::Point(8, 39); this->button_Connect->Name = L"button_Connect"; this->button_Connect->Size = System::Drawing::Size(121, 23); this->button_Connect->TabIndex = 2; this->button_Connect->Text = L"Connect"; this->button_Connect->UseVisualStyleBackColor = true; this->button_Connect->Click += gcnew System::EventHandler(this, &Form1::button_Connect_Click); // // button_Start // this->button_Start->Dock = System::Windows::Forms::DockStyle::Bottom; this->button_Start->Location = System::Drawing::Point(0, 653); this->button_Start->Name = L"button_Start"; this->button_Start->Size = System::Drawing::Size(135, 35); this->button_Start->TabIndex = 1; this->button_Start->Text = L"Start"; this->button_Start->UseVisualStyleBackColor = true; this->button_Start->Click += gcnew System::EventHandler(this, &Form1::button_Start_Click); // // timer_Tick // this->timer_Tick->Interval = 10; this->timer_Tick->Tick += gcnew System::EventHandler(this, &Form1::timer_Tick_Tick); // // groupBox_P1 // this->groupBox_P1->Controls->Add(this->chart_Graph); this->groupBox_P1->Dock = System::Windows::Forms::DockStyle::Fill; this->groupBox_P1->Location = System::Drawing::Point(135, 0); this->groupBox_P1->MinimumSize = System::Drawing::Size(676, 688); this->groupBox_P1->Name = L"groupBox_P1"; this->groupBox_P1->Size = System::Drawing::Size(695, 688); this->groupBox_P1->TabIndex = 3; this->groupBox_P1->TabStop = false; // // openFileDialog_Open // this->openFileDialog_Open->FileName = L"openFileDialog1"; this->openFileDialog_Open->Multiselect = true; // // groupBox1 // this->groupBox1->Controls->Add(this->panel_Opt); this->groupBox1->Controls->Add(this->numericUpDown_Track); this->groupBox1->Controls->Add(this->label3); this->groupBox1->Controls->Add(this->label2); this->groupBox1->Controls->Add(this->label1); this->groupBox1->Controls->Add(this->numericUpDown_Graph_MinY); this->groupBox1->Controls->Add(this->numericUpDown_Graph_MaxY); this->groupBox1->Controls->Add(this->checkBox_Auto); this->groupBox1->Controls->Add(this->checkedListBox_List); this->groupBox1->Dock = System::Windows::Forms::DockStyle::Right; this->groupBox1->Location = System::Drawing::Point(830, 0); this->groupBox1->Name = L"groupBox1"; this->groupBox1->Size = System::Drawing::Size(128, 688); this->groupBox1->TabIndex = 4; this->groupBox1->TabStop = false; this->groupBox1->Text = L" options "; // // panel_Opt // this->panel_Opt->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D; this->panel_Opt->Controls->Add(this->numericUpDown_Shift); this->panel_Opt->Controls->Add(this->label5); this->panel_Opt->Controls->Add(this->button_Gain_Clear); this->panel_Opt->Controls->Add(this->numericUpDown_Gain); this->panel_Opt->Controls->Add(this->label4); this->panel_Opt->Dock = System::Windows::Forms::DockStyle::Bottom; this->panel_Opt->Enabled = false; this->panel_Opt->Location = System::Drawing::Point(3, 245); this->panel_Opt->Name = L"panel_Opt"; this->panel_Opt->Size = System::Drawing::Size(122, 440); this->panel_Opt->TabIndex = 8; // // numericUpDown_Shift // this->numericUpDown_Shift->DecimalPlaces = 3; this->numericUpDown_Shift->Increment = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 65536 }); this->numericUpDown_Shift->Location = System::Drawing::Point(36, 8); this->numericUpDown_Shift->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, 0 }); this->numericUpDown_Shift->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, System::Int32::MinValue }); this->numericUpDown_Shift->Name = L"numericUpDown_Shift"; this->numericUpDown_Shift->Size = System::Drawing::Size(75, 20); this->numericUpDown_Shift->TabIndex = 6; this->numericUpDown_Shift->ValueChanged += gcnew System::EventHandler(this, &Form1::numericUpDown_Gain_ValueChanged); // // label5 // this->label5->AutoSize = true; this->label5->Location = System::Drawing::Point(6, 10); this->label5->Name = L"label5"; this->label5->Size = System::Drawing::Size(31, 13); this->label5->TabIndex = 5; this->label5->Text = L"Shift:"; // // button_Gain_Clear // this->button_Gain_Clear->Location = System::Drawing::Point(9, 60); this->button_Gain_Clear->Name = L"button_Gain_Clear"; this->button_Gain_Clear->Size = System::Drawing::Size(102, 23); this->button_Gain_Clear->TabIndex = 4; this->button_Gain_Clear->Text = L"clean"; this->button_Gain_Clear->UseVisualStyleBackColor = true; this->button_Gain_Clear->Click += gcnew System::EventHandler(this, &Form1::button_Gain_Clear_Click); // // numericUpDown_Gain // this->numericUpDown_Gain->DecimalPlaces = 3; this->numericUpDown_Gain->Increment = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 131072 }); this->numericUpDown_Gain->Location = System::Drawing::Point(36, 34); this->numericUpDown_Gain->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, 0 }); this->numericUpDown_Gain->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 196608 }); this->numericUpDown_Gain->Name = L"numericUpDown_Gain"; this->numericUpDown_Gain->Size = System::Drawing::Size(75, 20); this->numericUpDown_Gain->TabIndex = 3; this->numericUpDown_Gain->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 }); this->numericUpDown_Gain->ValueChanged += gcnew System::EventHandler(this, &Form1::numericUpDown_Gain_ValueChanged); // // label4 // this->label4->AutoSize = true; this->label4->Location = System::Drawing::Point(6, 36); this->label4->Name = L"label4"; this->label4->Size = System::Drawing::Size(32, 13); this->label4->TabIndex = 0; this->label4->Text = L"Gain:"; // // numericUpDown_Track // this->numericUpDown_Track->Location = System::Drawing::Point(41, 219); this->numericUpDown_Track->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1, 0, 0, 0 }); this->numericUpDown_Track->Name = L"numericUpDown_Track"; this->numericUpDown_Track->Size = System::Drawing::Size(57, 20); this->numericUpDown_Track->TabIndex = 7; this->numericUpDown_Track->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10, 0, 0, 0 }); // // label3 // this->label3->AutoSize = true; this->label3->Location = System::Drawing::Point(3, 221); this->label3->Name = L"label3"; this->label3->Size = System::Drawing::Size(38, 13); this->label3->TabIndex = 6; this->label3->Text = L"Track:"; // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(6, 187); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(37, 13); this->label2->TabIndex = 5; this->label2->Text = L"Min Y:"; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(3, 161); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(40, 13); this->label1->TabIndex = 4; this->label1->Text = L"Max Y:"; // // numericUpDown_Graph_MinY // this->numericUpDown_Graph_MinY->Location = System::Drawing::Point(50, 185); this->numericUpDown_Graph_MinY->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, 0 }); this->numericUpDown_Graph_MinY->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, System::Int32::MinValue }); this->numericUpDown_Graph_MinY->Name = L"numericUpDown_Graph_MinY"; this->numericUpDown_Graph_MinY->Size = System::Drawing::Size(75, 20); this->numericUpDown_Graph_MinY->TabIndex = 3; this->numericUpDown_Graph_MinY->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, System::Int32::MinValue }); this->numericUpDown_Graph_MinY->ValueChanged += gcnew System::EventHandler(this, &Form1::numericUpDown_Graph_MaxY_ValueChanged); // // numericUpDown_Graph_MaxY // this->numericUpDown_Graph_MaxY->Location = System::Drawing::Point(50, 159); this->numericUpDown_Graph_MaxY->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, 0 }); this->numericUpDown_Graph_MaxY->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 32000, 0, 0, System::Int32::MinValue }); this->numericUpDown_Graph_MaxY->Name = L"numericUpDown_Graph_MaxY"; this->numericUpDown_Graph_MaxY->Size = System::Drawing::Size(75, 20); this->numericUpDown_Graph_MaxY->TabIndex = 2; this->numericUpDown_Graph_MaxY->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, 0 }); this->numericUpDown_Graph_MaxY->ValueChanged += gcnew System::EventHandler(this, &Form1::numericUpDown_Graph_MaxY_ValueChanged); // // checkBox_Auto // this->checkBox_Auto->AutoSize = true; this->checkBox_Auto->Location = System::Drawing::Point(17, 134); this->checkBox_Auto->Name = L"checkBox_Auto"; this->checkBox_Auto->Size = System::Drawing::Size(47, 17); this->checkBox_Auto->TabIndex = 1; this->checkBox_Auto->Text = L"auto"; this->checkBox_Auto->UseVisualStyleBackColor = true; this->checkBox_Auto->CheckedChanged += gcnew System::EventHandler(this, &Form1::checkBox_Auto_CheckedChanged); // // checkedListBox_List // this->checkedListBox_List->Dock = System::Windows::Forms::DockStyle::Top; this->checkedListBox_List->FormattingEnabled = true; this->checkedListBox_List->Location = System::Drawing::Point(3, 16); this->checkedListBox_List->Name = L"checkedListBox_List"; this->checkedListBox_List->Size = System::Drawing::Size(122, 109); this->checkedListBox_List->TabIndex = 0; this->checkedListBox_List->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::checkedListBox_List_SelectedIndexChanged); this->checkedListBox_List->DoubleClick += gcnew System::EventHandler(this, &Form1::checkedListBox_List_SelectedIndexChanged); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(958, 688); this->Controls->Add(this->groupBox_P1); this->Controls->Add(this->groupBox1); this->Controls->Add(this->panel1); this->MinimumSize = System::Drawing::Size(974, 727); this->Name = L"Form1"; this->Text = L"Telemetry"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); (cli::safe_cast(this->chart_Graph))->EndInit(); this->panel1->ResumeLayout(false); this->groupBox_P1->ResumeLayout(false); this->groupBox1->ResumeLayout(false); this->groupBox1->PerformLayout(); this->panel_Opt->ResumeLayout(false); this->panel_Opt->PerformLayout(); (cli::safe_cast(this->numericUpDown_Shift))->EndInit(); (cli::safe_cast(this->numericUpDown_Gain))->EndInit(); (cli::safe_cast(this->numericUpDown_Track))->EndInit(); (cli::safe_cast(this->numericUpDown_Graph_MinY))->EndInit(); (cli::safe_cast(this->numericUpDown_Graph_MaxY))->EndInit(); this->ResumeLayout(false); } #pragma endregion private: void ToCharString(String^ str1, char* str2) { for (int a = 0; a < str1->Length; a++) *str2++ = str1[a]; *str2 = '\0'; } private: System::Void button_Connect_Click(System::Object^ sender, System::EventArgs^ e) { if (button_Connect->Text == "Connect") { char text[128] = "\\\\.\\"; ToCharString(comboBox_Port->Text, text + 4); PortCOM = CreateFileA(text, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); if (PortCOM == INVALID_HANDLE_VALUE) { PortCOM = 0; MessageBox::Show("Error to connect", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error); return; } //--- DCB serial = { sizeof(serial) }; GetCommState(PortCOM, &serial); serial.BaudRate = 460800; serial.ByteSize = 8; serial.StopBits = ONESTOPBIT; serial.Parity = NOPARITY; SetCommState(PortCOM, &serial); //--- COMMTIMEOUTS tim; GetCommTimeouts(PortCOM, &tim); tim.ReadIntervalTimeout = 1; tim.ReadTotalTimeoutConstant = 1; tim.ReadTotalTimeoutMultiplier = 1; SetCommTimeouts(PortCOM, &tim); //--- timer_Tick->Enabled = true; button_Connect->Text = "Disonnect"; //--- for (int a = 0; a < chart_Graph->Series->Count; a++) chart_Graph->Series[a]->Points->Clear(); //--- MainThread = CreateThread(0, 0, RecvThread, 0, 0, 0); } else { CloseHandle(PortCOM); PortCOM = 0; timer_Tick->Enabled = false; button_Connect->Text = "Connect"; } } private: System::Void comboBox_Port_DropDown(System::Object^ sender, System::EventArgs^ e) { comboBox_Port->Items->Clear(); for each (String ^ p in System::IO::Ports::SerialPort::GetPortNames()) { comboBox_Port->Items->Add(p); } } private: System::Void timer_Tick_Tick(System::Object^ sender, System::EventArgs^ e) { if (!PlotsReady) return; PlotsReady = false; for (int a = 0; a < chart_Graph->Series->Count; a++) { chart_Graph->Series[a]->Points->AddY((double)PlotsData[a + 1]); while (chart_Graph->Series[a]->Points->Count > numericUpDown_Track->Value * 100) chart_Graph->Series[a]->Points->RemoveAt(0); } } private: System::Void button_Start_Click(System::Object^ sender, System::EventArgs^ e) { if (button_Start->Text=="Stop") { if (FileLOG) CloseHandle(FileLOG); FileLOG = 0; button_Start->Text = "Start"; return; } DateTime dt = DateTime::Now; String^ file = Path::Combine(RecordsFolder, "record=" + dt.ToString("yyyy-MM-dd+HH_mm_ss") + ".tel"); try { char text[256]; ToCharString(file, text); FileLOG = CreateFileA(text, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); if (FileLOG == INVALID_HANDLE_VALUE) { FileLOG = 0; MessageBox::Show("Error to create file", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error); return; } button_Start->Text = "Stop"; } catch(...) { MessageBox::Show("Incorrect save file!", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error); } } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { try { String^ folder = Environment::GetFolderPath(Environment::SpecialFolder::ApplicationData); String^ specificFolder = Path::Combine(folder, "Telem"); //--- RecordsFolder = Path::Combine(specificFolder, "Records"); Directory::CreateDirectory(RecordsFolder); openFileDialog_Open->InitialDirectory = RecordsFolder; } catch(...) { } for each (auto s in chart_Graph->Series) { checkedListBox_List->Items->Add(s->Name, true); } MainDataRecord->Clear(); for (int a = 0; a < 6; a++) { MainDataGain[a] = 1; MainDataShift[a] = 0; } numericUpDown_Graph_MaxY_ValueChanged(sender, e); } private: System::Collections::Generic::List^>^ MainDataRecord = gcnew System::Collections::Generic::List^>(); private: array^ MainDataGain = gcnew array(6); private: array^ MainDataShift = gcnew array(6); private: System::Void button_File_Click(System::Object^ sender, System::EventArgs^ e) { if (openFileDialog_Open->ShowDialog() != System::Windows::Forms::DialogResult::OK) return; CloseHandle(PortCOM); PortCOM = 0; timer_Tick->Enabled = false; button_Connect->Text = "Connect"; for (int a = 0; a < chart_Graph->Series->Count; a++) { chart_Graph->Series[a]->Points->Clear(); } MainDataRecord->Clear(); for (int a = 0; a < 6; a++) { MainDataGain[a] = 1; MainDataShift[a] = 0; } panel_Opt->Enabled = true; System::Globalization::CultureInfo^ nonInvariantCulture = gcnew System::Globalization::CultureInfo("en-US"); nonInvariantCulture->NumberFormat->NumberDecimalSeparator = "."; System::Threading::Thread::CurrentThread->CurrentCulture = nonInvariantCulture; array^ text = File::ReadAllLines(openFileDialog_Open->FileName); static bool first = false; static PointG fff = { 47.31941467, 38.78046767 }; static int counter = 0; for each (String ^ line in text) { array^ elems =line->Split(','); if (elems->Length < 6) continue; if (elems[0][0] == 'G') { PointG g; for (int a = 3, b=0; a < 6; a++, b++) { double v = Convert::ToDouble(elems[a]); if (b == 1) g.Latitude = v; if (b == 2) g.Longitude = v; } if (!first) { first = true; fff = g; } static float ldx=0, ldy=0; float dx, dy; static float cdx = 0, cdy = 0; float dis = GPS_LocalDistance(fff, g, dx, dy); /*if (counter > 1) { cdx = (cdx*2 + (dx - ldx)) / 3; cdy = (cdy*2 + (dy - ldy)) / 3; chart_Graph->Series[0]->Points->AddY(cdx); chart_Graph->Series[1]->Points->AddY(cdy); ldx = dx; ldy = dy; counter = 0; } else counter++;*/ chart_Graph->Series[0]->Points->AddY(dx); chart_Graph->Series[1]->Points->AddY(dy); chart_Graph->Series[2]->Points->AddY(dis); } } } private: System::Void checkedListBox_List_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { for (int a = 0; a < checkedListBox_List->Items->Count; a++) { chart_Graph->Series[a]->Enabled = checkedListBox_List->GetItemChecked(a); } int index = checkedListBox_List->SelectedIndex; if (index == -1) return; numericUpDown_Gain->Value = (Decimal)MainDataGain[index]; numericUpDown_Shift->Value = (Decimal)MainDataShift[index]; } private: System::Void checkBox_Auto_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { if (checkBox_Auto->Checked) { chart_Graph->ChartAreas[0]->AxisY->Minimum = double::NaN; chart_Graph->ChartAreas[0]->AxisY->Maximum = double::NaN; numericUpDown_Graph_MinY->Enabled = false; numericUpDown_Graph_MaxY->Enabled = false; } else { numericUpDown_Graph_MaxY_ValueChanged(sender, e); numericUpDown_Graph_MinY->Enabled = true; numericUpDown_Graph_MaxY->Enabled = true; } } private: System::Void numericUpDown_Graph_MaxY_ValueChanged(System::Object^ sender, System::EventArgs^ e) { chart_Graph->ChartAreas[0]->AxisY->Minimum = (double)numericUpDown_Graph_MinY->Value; chart_Graph->ChartAreas[0]->AxisY->Maximum = (double)numericUpDown_Graph_MaxY->Value; } private: System::Void numericUpDown_Gain_ValueChanged(System::Object^ sender, System::EventArgs^ e) { int index = checkedListBox_List->SelectedIndex; if (index == -1) return; chart_Graph->Series[index]->Points->Clear(); for (int a = 0; a < MainDataRecord->Count; a++) { array^ values = MainDataRecord[a]; chart_Graph->Series[index]->Points->AddY((Convert::ToDouble(numericUpDown_Shift->Value) + values[index]) * Convert::ToDouble(numericUpDown_Gain->Value)); } MainDataGain[index] = Convert::ToDouble(numericUpDown_Gain->Value); MainDataShift[index] = Convert::ToDouble(numericUpDown_Shift->Value); } private: System::Void button_Gain_Clear_Click(System::Object^ sender, System::EventArgs^ e) { for (int a = 0; a < 6; a++) { MainDataGain[a] = 1; MainDataShift[a] = 0; chart_Graph->Series[a]->Points->Clear(); } for (int a = 0; a < 6; a++) { for (int b = 0; b < MainDataRecord->Count; b++) { array^ values = MainDataRecord[b]; chart_Graph->Series[a]->Points->AddY(values[a]); } } numericUpDown_Gain->Value = 1; numericUpDown_Shift->Value = 0; } }; }