Skip to content

Commit de28d48

Browse files
committed
Delay construction of QSerialPortInfo to allow serialization even if invalid.
1 parent 5972084 commit de28d48

File tree

7 files changed

+28
-31
lines changed

7 files changed

+28
-31
lines changed

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,34 @@
1919
#include "SerialPABotBase.h"
2020
#include "SerialPABotBase_Connection.h"
2121

22+
//#include <iostream>
23+
//using std::cout;
24+
//using std::endl;
25+
2226
namespace PokemonAutomation{
2327
namespace SerialPABotBase{
2428

2529

2630

2731

28-
2932
SerialPABotBase_Connection::SerialPABotBase_Connection(
3033
Logger& logger,
31-
const QSerialPortInfo* port,
34+
const std::string& name,
3235
bool set_to_null_controller
3336
)
3437
: m_logger(logger, GlobalSettings::instance().LOG_EVERYTHING)
3538
{
3639
set_status_line0("Not Connected", COLOR_RED);
3740

38-
// No port selected.
39-
if (port == nullptr || port->isNull()){
41+
QSerialPortInfo info(QString::fromStdString(name));
42+
43+
// Port is invalid.
44+
if (info.isNull()){
4045
return;
4146
}
4247

43-
// Prolific is banned.
44-
if (port->description().indexOf("Prolific") != -1){
48+
// Prolific is banned
49+
if (info.description().indexOf("Prolific") != -1){
4550
QMessageBox box;
4651
box.critical(
4752
nullptr,
@@ -56,11 +61,11 @@ SerialPABotBase_Connection::SerialPABotBase_Connection(
5661
return;
5762
}
5863

59-
m_device_name = port->portName().toStdString();
64+
m_device_name = info.portName().toStdString();
6065
std::string error;
6166
try{
6267
set_status_line0("Connecting...", COLOR_DARKGREEN);
63-
std::unique_ptr<SerialConnection> connection(new SerialConnection(port->systemLocation().toStdString(), PABB_BAUD_RATE));
68+
std::unique_ptr<SerialConnection> connection(new SerialConnection(info.systemLocation().toStdString(), PABB_BAUD_RATE));
6469
m_botbase.reset(new PABotBase(m_logger, std::move(connection), nullptr));
6570
}catch (const ConnectionException& e){
6671
error = e.message();

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
#include "Controllers/SerialPABotBase/Connection/MessageLogger.h"
1818
#include "Controllers/ControllerConnection.h"
1919

20-
class QSerialPortInfo;
21-
2220
namespace PokemonAutomation{
2321
class PABotBase;
2422
namespace SerialPABotBase{
@@ -28,7 +26,7 @@ class SerialPABotBase_Connection : public ControllerConnection{
2826
public:
2927
SerialPABotBase_Connection(
3028
Logger& logger,
31-
const QSerialPortInfo* port,
29+
const std::string& name,
3230
bool set_to_null_controller
3331
);
3432
~SerialPABotBase_Connection();

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Descriptor.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,30 @@ bool SerialPABotBase_Descriptor::operator==(const ControllerDescriptor& x) const
3232
if (typeid(*this) != typeid(x)){
3333
return false;
3434
}
35-
return m_port.portName() == static_cast<const SerialPABotBase_Descriptor&>(x).m_port.portName();
35+
return m_name == static_cast<const SerialPABotBase_Descriptor&>(x).m_name;
3636
}
3737

3838

3939
std::string SerialPABotBase_Descriptor::display_name() const{
40-
if (m_port.isNull()){
41-
return "";
42-
}
43-
// if (PreloadSettings::instance().DEVELOPER_MODE){
44-
return m_port.portName().toStdString();
45-
// }
46-
// return m_port.portName().toStdString() + " - " + m_port.description().toStdString();
40+
return m_name;
4741
}
4842
void SerialPABotBase_Descriptor::load_json(const JsonValue& json){
4943
const std::string* name = json.to_string();
5044
if (name == nullptr || name->empty()){
5145
return;
5246
}
53-
m_port = (QSerialPortInfo(QString::fromStdString(*name)));
47+
m_name = *name;
5448
}
5549
JsonValue SerialPABotBase_Descriptor::to_json() const{
56-
return m_port.isNull() ? "" : m_port.portName().toStdString();
50+
return m_name;
5751
}
5852

5953
std::unique_ptr<ControllerConnection> SerialPABotBase_Descriptor::open_connection(
6054
Logger& logger,
6155
bool set_to_null_controller
6256
) const{
6357
return std::unique_ptr<ControllerConnection>(
64-
new SerialPABotBase_Connection(logger, &m_port, set_to_null_controller)
58+
new SerialPABotBase_Connection(logger, m_name, set_to_null_controller)
6559
);
6660
}
6761
std::unique_ptr<AbstractController> SerialPABotBase_Descriptor::make_controller(

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Descriptor.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#ifndef PokemonAutomation_Controllers_SerialPABotBase_Descriptor_H
88
#define PokemonAutomation_Controllers_SerialPABotBase_Descriptor_H
99

10-
#include <QSerialPortInfo>
1110
#include "Controllers/ControllerDescriptor.h"
1211

1312
namespace PokemonAutomation{
@@ -24,13 +23,13 @@ class SerialPABotBase_Descriptor : public ControllerDescriptor{
2423
SerialPABotBase_Descriptor()
2524
: ControllerDescriptor(INTERFACE_NAME)
2625
{}
27-
SerialPABotBase_Descriptor(const QSerialPortInfo& info)
26+
SerialPABotBase_Descriptor(std::string name)
2827
: ControllerDescriptor(INTERFACE_NAME)
29-
, m_port(info)
28+
, m_name(std::move(name))
3029
{}
3130

32-
const QSerialPortInfo& port() const{
33-
return m_port;
31+
const std::string& name() const{
32+
return m_name;
3433
}
3534

3635
virtual bool operator==(const ControllerDescriptor& x) const override;
@@ -53,7 +52,7 @@ class SerialPABotBase_Descriptor : public ControllerDescriptor{
5352
virtual QWidget* make_selector_QtWidget(ControllerSelectorWidget& parent) const override;
5453

5554
private:
56-
QSerialPortInfo m_port;
55+
std::string m_name;
5756
};
5857

5958

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_SelectorWidget.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#ifndef PokemonAutomation_Controllers_SerialPABotBase_SelectorWidget_H
88
#define PokemonAutomation_Controllers_SerialPABotBase_SelectorWidget_H
99

10+
#include <QSerialPortInfo>
1011
#include "Common/Qt/NoWheelComboBox.h"
1112
#include "Controllers/ControllerDescriptor.h"
1213
#include "Controllers/ControllerSelectorWidget.h"
@@ -89,7 +90,7 @@ class SerialPABotBase_SelectorWidget : public NoWheelComboBox{
8990
continue;
9091
}
9192
#endif
92-
m_ports.emplace_back(new SerialPABotBase_Descriptor(port));
93+
m_ports.emplace_back(new SerialPABotBase_Descriptor(port.portName().toStdString()));
9394
}
9495

9596
size_t width = 6;

SerialPrograms/Source/Tests/NintendoSwitch_Tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ using namespace NintendoSwitch;
2929
int test_NintendoSwitch_UpdatePopupDetector(const ImageViewRGB32& image, bool target){
3030
auto& logger = global_logger_command_line();
3131
DummyBotBase botbase(logger);
32-
SerialPABotBase::SerialPABotBase_Connection connection(logger, nullptr, false);
32+
SerialPABotBase::SerialPABotBase_Connection connection(logger, "", false);
3333
SerialPABotBase_WiredController controller(
3434
logger, connection,
3535
ControllerType::NintendoSwitch_WiredController,

SerialPrograms/Source/Tests/PokemonLA_Tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ int test_pokemonLA_SaveScreenDetector(const ImageViewRGB32& image, const std::ve
491491
int test_pokemonLA_shinySoundDetector(const std::vector<AudioSpectrum>& spectrums, bool target){
492492
auto& logger = global_logger_command_line();
493493
DummyBotBase botbase(logger);
494-
SerialPABotBase::SerialPABotBase_Connection connection(logger, nullptr, false);
494+
SerialPABotBase::SerialPABotBase_Connection connection(logger, "", false);
495495
SerialPABotBase_WiredController controller(
496496
logger, connection,
497497
ControllerType::NintendoSwitch_WiredController,

0 commit comments

Comments
 (0)