6#include <QtNetwork/QHostAddress>
14 , _baud(getParameterFact(componentID(), QStringLiteral(
"UART_BAUDRATE")))
15 , _ver(getParameterFact(componentID(), QStringLiteral(
"SW_VER")))
16 , _ssid1(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSID1")))
17 , _ssid2(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSID2")))
18 , _ssid3(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSID3")))
19 , _ssid4(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSID4")))
20 , _pwd1(getParameterFact(componentID(), QStringLiteral(
"WIFI_PASSWORD1")))
21 , _pwd2(getParameterFact(componentID(), QStringLiteral(
"WIFI_PASSWORD2")))
22 , _pwd3(getParameterFact(componentID(), QStringLiteral(
"WIFI_PASSWORD3")))
23 , _pwd4(getParameterFact(componentID(), QStringLiteral(
"WIFI_PASSWORD4")))
24 , _ssidsta1(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSIDSTA1"), false))
25 , _ssidsta2(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSIDSTA2"), false))
26 , _ssidsta3(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSIDSTA3"), false))
27 , _ssidsta4(getParameterFact(componentID(), QStringLiteral(
"WIFI_SSIDSTA4"), false))
28 , _pwdsta1(getParameterFact(componentID(), QStringLiteral(
"WIFI_PWDSTA1"), false))
29 , _pwdsta2(getParameterFact(componentID(), QStringLiteral(
"WIFI_PWDSTA2"), false))
30 , _pwdsta3(getParameterFact(componentID(), QStringLiteral(
"WIFI_PWDSTA3"), false))
31 , _pwdsta4(getParameterFact(componentID(), QStringLiteral(
"WIFI_PWDSTA4"), false))
35 for (
int i = 1; i < 12; i++) {
36 _channels.append(QString::number(i));
40 (void) connect(_ssid4, &
Fact::valueChanged,
this, &ESP8266ComponentController::_ssidChanged);
41 (void) connect(_pwd4, &
Fact::valueChanged,
this, &ESP8266ComponentController::_passwordChanged);
42 (void) connect(_baud, &
Fact::valueChanged,
this, &ESP8266ComponentController::_baudChanged);
43 (void) connect(_ver, &
Fact::valueChanged,
this, &ESP8266ComponentController::_versionChanged);
54 const QString versionString = QStringLiteral(
"%1.%2.%3").arg(uv >> 24).arg((uv >> 16) & 0xFF).arg(uv & 0xFFFF);
60 if (_ipAddress.isEmpty()) {
63 _ipAddress = address.toString();
65 _ipAddress = QStringLiteral(
"192.168.4.1");
74 const uint32_t s1 = _ssid1->
rawValue().toUInt();
75 const uint32_t s2 = _ssid2->
rawValue().toUInt();
76 const uint32_t s3 = _ssid3->
rawValue().toUInt();
77 const uint32_t s4 = _ssid4->
rawValue().toUInt();
80 (void) memcpy(&tmp[0], &s1,
sizeof(uint32_t));
81 (void) memcpy(&tmp[4], &s2,
sizeof(uint32_t));
82 (void) memcpy(&tmp[8], &s3,
sizeof(uint32_t));
83 (void) memcpy(&tmp[12], &s4,
sizeof(uint32_t));
91 (void) memset(tmp, 0,
sizeof(tmp));
92 const std::string sid = ssid.toStdString();
93 (void) strncpy(tmp, sid.c_str(),
sizeof(tmp) - 1);
96 (void) memcpy(&u, &tmp[0],
sizeof(uint32_t));
98 (void) memcpy(&u, &tmp[4],
sizeof(uint32_t));
100 (void) memcpy(&u, &tmp[8],
sizeof(uint32_t));
102 (void) memcpy(&u, &tmp[12],
sizeof(uint32_t));
108 const uint32_t s1 = _pwd1->
rawValue().toUInt();
109 const uint32_t s2 = _pwd2->
rawValue().toUInt();
110 const uint32_t s3 = _pwd3->
rawValue().toUInt();
111 const uint32_t s4 = _pwd4->
rawValue().toUInt();
114 (void) memcpy(&tmp[0], &s1,
sizeof(uint32_t));
115 (void) memcpy(&tmp[4], &s2,
sizeof(uint32_t));
116 (void) memcpy(&tmp[8], &s3,
sizeof(uint32_t));
117 (void) memcpy(&tmp[12], &s4,
sizeof(uint32_t));
125 (void) memset(tmp, 0,
sizeof(tmp));
126 const std::string pwd = password.toStdString();
127 (void) strncpy(tmp, pwd.c_str(),
sizeof(tmp) - 1);
130 (void) memcpy(&u, &tmp[0],
sizeof(uint32_t));
132 (void) memcpy(&u, &tmp[4],
sizeof(uint32_t));
134 (void) memcpy(&u, &tmp[8],
sizeof(uint32_t));
136 (void) memcpy(&u, &tmp[12],
sizeof(uint32_t));
146 const uint32_t s1 = _ssidsta1->
rawValue().toUInt();
147 const uint32_t s2 = _ssidsta2->
rawValue().toUInt();
148 const uint32_t s3 = _ssidsta3->
rawValue().toUInt();
149 const uint32_t s4 = _ssidsta4->
rawValue().toUInt();
152 (void) memcpy(&tmp[0], &s1,
sizeof(uint32_t));
153 (void) memcpy(&tmp[4], &s2,
sizeof(uint32_t));
154 (void) memcpy(&tmp[8], &s3,
sizeof(uint32_t));
155 (void) memcpy(&tmp[12], &s4,
sizeof(uint32_t));
167 (void) memset(tmp, 0,
sizeof(tmp));
168 const std::string sid = ssid.toStdString();
169 (void) strncpy(tmp, sid.c_str(),
sizeof(tmp) - 1);
172 (void) memcpy(&u, &tmp[0],
sizeof(uint32_t));
174 (void) memcpy(&u, &tmp[4],
sizeof(uint32_t));
176 (void) memcpy(&u, &tmp[8],
sizeof(uint32_t));
178 (void) memcpy(&u, &tmp[12],
sizeof(uint32_t));
188 const uint32_t s1 = _pwdsta1->
rawValue().toUInt();
189 const uint32_t s2 = _pwdsta2->
rawValue().toUInt();
190 const uint32_t s3 = _pwdsta3->
rawValue().toUInt();
191 const uint32_t s4 = _pwdsta4->
rawValue().toUInt();
194 (void) memcpy(&tmp[0], &s1,
sizeof(uint32_t));
195 (void) memcpy(&tmp[4], &s2,
sizeof(uint32_t));
196 (void) memcpy(&tmp[8], &s3,
sizeof(uint32_t));
197 (void) memcpy(&tmp[12], &s4,
sizeof(uint32_t));
209 (void) memset(tmp, 0,
sizeof(tmp));
210 const std::string pwd = password.toStdString();
211 (void) strncpy(tmp, pwd.c_str(),
sizeof(tmp) - 1);
214 (void) memcpy(&u, &tmp[0],
sizeof(uint32_t));
216 (void) memcpy(&u, &tmp[4],
sizeof(uint32_t));
218 (void) memcpy(&u, &tmp[8],
sizeof(uint32_t));
220 (void) memcpy(&u, &tmp[12],
sizeof(uint32_t));
244 if ((idx >= 0) && (idx !=
baudIndex())) {
268 _waitType = WAIT_FOR_REBOOT;
276 _waitType = WAIT_FOR_RESTORE;
282void ESP8266ComponentController::_reboot()
const
285 qCDebug(ESP8266ComponentControllerLog) <<
"_reboot()";
288void ESP8266ComponentController::_restoreDefaults()
const
291 qCDebug(ESP8266ComponentControllerLog) <<
"_restoreDefaults()";
294void ESP8266ComponentController::_mavCommandResult(
int vehicleId,
int component,
int command,
int result,
int failureCode)
296 Q_UNUSED(vehicleId); Q_UNUSED(failureCode);
302 if (result != MAV_RESULT_ACCEPTED) {
303 qCWarning(ESP8266ComponentControllerLog) <<
"ESP8266ComponentController command" <<
command <<
"rejected.";
307 if (((_waitType == WAIT_FOR_REBOOT) && (command == MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN)) || ((_waitType == WAIT_FOR_RESTORE) && (command == MAV_CMD_PREFLIGHT_STORAGE))) {
308 _waitType = WAIT_FOR_NOTHING;
310 qCDebug(ESP8266ComponentControllerLog) <<
"_commandAck for" <<
command;
311 if (command == MAV_CMD_PREFLIGHT_STORAGE) {
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void setBaudIndex(int idx) const
~ESP8266ComponentController()
void setWifiPasswordSta(const QString &pwd) const
Q_INVOKABLE void restoreDefaults()
void setWifiSSIDSta(const QString &id) const
void setWifiPassword(const QString &pwd) const
QString wifiPassword() const
ESP8266ComponentController(QObject *parent=nullptr)
Q_INVOKABLE void reboot()
QString wifiSSIDSta() const
QString wifiPasswordSta() const
void setWifiSSID(const QString &id) const
Used for handling missing Facts from C++ code.
Q_INVOKABLE Fact * getParameterFact(int componentId, const QString &name, bool reportMissing=true) const
Q_INVOKABLE bool parameterExists(int componentId, const QString &name) const
void setRawValue(const QVariant &value)
QVariant rawValue() const
void valueChanged(const QVariant &value)
This signal is only meant for use by the QT property system. It should not be connected to by client ...
void refreshAllParameters(uint8_t componentID)
Re-request the full set of parameters from the autopilot.
void sendMavCommand(int compId, MAV_CMD command, bool showError, float param1=0.0f, float param2=0.0f, float param3=0.0f, float param4=0.0f, float param5=0.0f, float param6=0.0f, float param7=0.0f)
ParameterManager * parameterManager()
void mavCommandResult(int vehicleId, int targetComponent, int command, int ackResult, int failureCode)
GPSCommandSequence::Command command(QByteArrayView body, GPSTextMatcher reply, std::chrono::milliseconds timeout)
body labelled by its text, framed as a sentence, and completed by reply within timeout.