-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSerialPortWidget.cpp
123 lines (103 loc) · 5.08 KB
/
SerialPortWidget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Fill out your copyright notice in the Description page of Project Settings.
#include "SerialPortWidget.h"
#include "Components/TextBlock.h"
void USerialPortWidget::NativeConstruct()
{
FPortObserver::Attach(this);
RefreshButton->OnClicked.AddUniqueDynamic(this, &USerialPortWidget::RefreshCom);
ConnectButtonMain->OnClicked.AddUniqueDynamic(this, &USerialPortWidget::ToggleMainPort);
ConnectButtonPayload->OnClicked.AddUniqueDynamic(this, &USerialPortWidget::TogglePayloadPort);
ConnectButtonRefereeStation->OnClicked.AddUniqueDynamic(this, &USerialPortWidget::ToggleRefereeStationPort);
RefreshCom();
}
void USerialPortWidget::NativeDestruct()
{
FPortObserver::Detach(this);
}
void USerialPortWidget::Update(const RocketData NowData, EListenerType AvionicType, const float DTime)
{
if (AvionicType == MainAvionic)
{
altitude->SetText(FText::FromString(FString("Irtifa: ").Append(FString::SanitizeFloat(NowData.MainData.altitude))));
roll->SetText(FText::FromString(FString("Roll: ").Append(FString::SanitizeFloat(NowData.MainData.x))));
yaw->SetText(FText::FromString(FString("Yaw: ").Append(FString::SanitizeFloat(NowData.MainData.z))));
pitch->SetText(FText::FromString(FString("Pitch: ").Append(FString::SanitizeFloat(NowData.MainData.y))));
latitude->SetText(FText::FromString(FString("Latitude: ").Append(FString::SanitizeFloat(NowData.MainData.latitude))));
longitude->SetText(FText::FromString(FString("Longitude: ").Append(FString::SanitizeFloat(NowData.MainData.longitude))));
gX ->SetText(FText::FromString(FString("Ivme X: ").Append(FString::SanitizeFloat(NowData.MainData.accX))));
gY->SetText(FText::FromString(FString("Ivme Y: ").Append(FString::SanitizeFloat(NowData.MainData.accY))));
gZ->SetText(FText::FromString(FString("Ivme Z: ").Append(FString::SanitizeFloat(NowData.MainData.accZ))));
}else if(AvionicType == PayloadAvionic)
{
temperature->SetText(FText::FromString(FString("Sicaklik: ").Append(FString::SanitizeFloat(NowData.PayloadData.temperature))));
altitude2->SetText(FText::FromString(FString("Irtifa: ").Append(FString::SanitizeFloat(NowData.PayloadData.altitude))));
humidity->SetText(FText::FromString(FString("Nem: ").Append(FString::SanitizeFloat(NowData.PayloadData.humidity))));
latitude2->SetText(FText::FromString(FString("Enlem: ").Append(FString::SanitizeFloat(NowData.PayloadData.latitude))));
longitude2->SetText(FText::FromString(FString("Boylam: ").Append(FString::SanitizeFloat(NowData.PayloadData.longitude))));
}
}
void USerialPortWidget::RefreshCom()
{
MainAvionicCombo->ClearOptions();
PayloadAvionicCombo->ClearOptions();
RefereeStation->ClearOptions();
wchar_t lpTargetPath[5000]; // buffer to store the path of the COM PORTS
for (int i = 0; i < 255; i++) // checking ports from COM0 to COM255
{
wstring str = L"COM" + to_wstring(i); // converting to COM0, COM1, COM2
DWORD res = QueryDosDevice(str.c_str(), lpTargetPath, 5000);
if (res != 0)
{
MainAvionicCombo->AddOption(FString(str.c_str()));
PayloadAvionicCombo->AddOption(FString(str.c_str()));
RefereeStation->AddOption(FString(str.c_str()));
}
if (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
}
}
}
void USerialPortWidget::ToggleMainPort()
{
if (MainAvionicCombo->GetSelectedOption().Equals("")) AvionicText->SetText(FText::FromString(FString("COM Secin")));
else if (!MainSerial)
{
MainSerial = new SerialPort(MainAvionic, TCHAR_TO_ANSI(*MainAvionicCombo->GetSelectedOption()), CBR_57600);
if (MainSerial->GetConnected()) AvionicText->SetText(FText::FromString(FString("Sonlandir")));
}else
{
MainSerial->~SerialPort();
AvionicText->SetText(FText::FromString(FString("Baglan")));
MainSerial = nullptr;
}
}
void USerialPortWidget::TogglePayloadPort()
{
if (PayloadAvionicCombo->GetSelectedOption().Equals("")) PayloadText->SetText(FText::FromString(FString("COM Secin")));
else if (!PayloadSerial)
{
PayloadSerial = new SerialPort(PayloadAvionic, TCHAR_TO_ANSI(*PayloadAvionicCombo->GetSelectedOption()), CBR_57600);
if (PayloadSerial->GetConnected()) PayloadText->SetText(FText::FromString(FString("Sonlandir")));
}
else
{
PayloadSerial->~SerialPort();
PayloadText->SetText(FText::FromString(FString("Baglan")));
PayloadSerial = nullptr;
}
}
void USerialPortWidget::ToggleRefereeStationPort()
{
if (RefereeStation->GetSelectedOption().Equals("")) RefereeStationText->SetText(FText::FromString(FString("COM Secin")));
else if (!RefereeStationSerial)
{
RefereeStationSerial = new SerialPort(EListenerType::RefereeStation, "\\\\.\\COM17", CBR_19200);
if (RefereeStationSerial->GetConnected()) RefereeStationText->SetText(FText::FromString(FString("Sonlandir")));
}
else
{
RefereeStationSerial->~SerialPort();
RefereeStationText->SetText(FText::FromString(FString("Baglan")));
RefereeStationSerial = nullptr;
}
}