Skip to content

Commit 064c89e

Browse files
committed
Add support for clearing reset.
1 parent fe62919 commit 064c89e

21 files changed

+146
-51
lines changed

SerialPrograms/Source/CommonFramework/Globals.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace PokemonAutomation{
2626
const bool IS_BETA_VERSION = true;
2727
const int PROGRAM_VERSION_MAJOR = 0;
2828
const int PROGRAM_VERSION_MINOR = 56;
29-
const int PROGRAM_VERSION_PATCH = 2;
29+
const int PROGRAM_VERSION_PATCH = 3;
3030

3131
const std::string PROGRAM_VERSION_BASE =
3232
"v" + std::to_string(PROGRAM_VERSION_MAJOR) +

SerialPrograms/Source/Controllers/ControllerDescriptor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ class ControllerDescriptor{
105105
public:
106106
virtual std::unique_ptr<ControllerConnection> open_connection(
107107
Logger& logger,
108-
std::optional<ControllerType> change_controller
108+
std::optional<ControllerType> change_controller,
109+
bool clear_settings
109110
) const = 0;
110111
virtual std::unique_ptr<AbstractController> make_controller(
111112
Logger& logger,

SerialPrograms/Source/Controllers/ControllerSelectorWidget.cpp

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
*
55
*/
66

7+
#include <QKeyEvent>
78
#include <QHBoxLayout>
89
#include "Common/Qt/NoWheelComboBox.h"
9-
#include "CommonFramework/GlobalSettingsPanel.h"
10+
//#include "CommonFramework/GlobalSettingsPanel.h"
1011
#include "Controllers/ControllerTypeStrings.h"
1112
#include "ControllerSelectorWidget.h"
1213

@@ -70,6 +71,10 @@ ControllerSelectorWidget::ControllerSelectorWidget(QWidget& parent, ControllerSe
7071
m_status_text->setText(QString::fromStdString(session.status_text()));
7172

7273
m_reset_button = new QPushButton("Reset Ctrl.", this);
74+
m_reset_button->setToolTip(
75+
"<b>Click:</b> Reset the controller.<br><br>"
76+
"<b>Shift+Click:</b> Reset and clear the controller of any state. This will unpair it with any hosts it may be connected to."
77+
);
7378
serial_row->addWidget(m_reset_button, 1);
7479

7580
bool options_locked = session.options_locked();
@@ -78,6 +83,8 @@ ControllerSelectorWidget::ControllerSelectorWidget(QWidget& parent, ControllerSe
7883
}
7984
m_reset_button->setEnabled(!options_locked);
8085

86+
setFocusPolicy(Qt::StrongFocus);
87+
8188
connect(
8289
interface_dropdown, static_cast<void(QComboBox::*)(int)>(&QComboBox::activated),
8390
this, [this](int index){
@@ -112,7 +119,9 @@ ControllerSelectorWidget::ControllerSelectorWidget(QWidget& parent, ControllerSe
112119
connect(
113120
m_reset_button, &QPushButton::clicked,
114121
this, [this](bool){
115-
m_session.reset();
122+
bool shift_held = QGuiApplication::keyboardModifiers() & Qt::ShiftModifier;
123+
// cout << "shift = " << shift_held << endl;
124+
m_session.reset(shift_held);
116125
}
117126
);
118127

@@ -210,6 +219,43 @@ void ControllerSelectorWidget::options_locked(bool locked){
210219
}
211220

212221

222+
#if 0
223+
void ControllerSelectorWidget::update_buttons(){
224+
if (m_shift_held){
225+
m_reset_button->setText("Clear Ctrl.");
226+
}else{
227+
m_reset_button->setText("Reset Ctrl.");
228+
}
229+
}
230+
231+
232+
void ControllerSelectorWidget::keyPressEvent(QKeyEvent* event){
233+
// cout << "ControllerSelectorWidget::keyPressEvent()" << endl;
234+
if (event->key() == Qt::Key_Shift){
235+
m_shift_held = true;
236+
}
237+
update_buttons();
238+
// QWidget::keyPressEvent(event);
239+
}
240+
void ControllerSelectorWidget::keyReleaseEvent(QKeyEvent* event){
241+
// cout << "ControllerSelectorWidget::keyReleaseEvent()" << endl;
242+
if (event->key() == Qt::Key_Shift){
243+
m_shift_held = false;
244+
}
245+
update_buttons();
246+
// QWidget::keyReleaseEvent(event);
247+
}
248+
void ControllerSelectorWidget::focusInEvent(QFocusEvent* event){
249+
// cout << "ControllerSelectorWidget::focusInEvent()" << endl;
250+
QWidget::focusInEvent(event);
251+
}
252+
void ControllerSelectorWidget::focusOutEvent(QFocusEvent* event){
253+
// cout << "ControllerSelectorWidget::focusOutEvent()" << endl;
254+
m_shift_held = false;
255+
update_buttons();
256+
QWidget::focusOutEvent(event);
257+
}
258+
#endif
213259

214260

215261

SerialPrograms/Source/Controllers/ControllerSelectorWidget.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ class ControllerSelectorWidget : public QWidget, private ControllerSession::List
4646
const std::vector<ControllerType>& available_controllers
4747
);
4848

49+
private:
50+
void update_buttons();
51+
52+
#if 0
53+
virtual void keyPressEvent(QKeyEvent* event) override;
54+
virtual void keyReleaseEvent(QKeyEvent* event) override;
55+
virtual void focusInEvent(QFocusEvent* event) override;
56+
virtual void focusOutEvent(QFocusEvent* event) override;
57+
#endif
58+
4959
private:
5060
ControllerSession& m_session;
5161

@@ -56,6 +66,8 @@ class ControllerSelectorWidget : public QWidget, private ControllerSession::List
5666
QLabel* m_status_text = nullptr;
5767
QPushButton* m_reset_button = nullptr;
5868

69+
// bool m_shift_held = false;
70+
5971
std::vector<std::shared_ptr<const ControllerDescriptor>> m_device_list;
6072
};
6173

SerialPrograms/Source/Controllers/ControllerSession.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ ControllerSession::ControllerSession(
5050
, m_controller_type(ControllerType::None)
5151
, m_options_locked(false)
5252
, m_descriptor(option.descriptor())
53-
, m_connection(m_descriptor->open_connection(logger, {}))
53+
, m_connection(m_descriptor->open_connection(logger, {}, false))
5454
{
5555
if (!m_connection){
5656
return;
@@ -159,13 +159,14 @@ void ControllerSession::set_options_locked(bool locked){
159159
}
160160

161161

162-
void ControllerSession::make_controller(std::optional<ControllerType> change_controller){
162+
void ControllerSession::make_controller(std::optional<ControllerType> change_controller, bool clear_settings){
163163
// Must be called under "m_reset_lock".
164164

165165
bool ready = false;
166166
{
167167
std::lock_guard<std::mutex> lg(m_state_lock);
168-
m_connection = m_descriptor->open_connection(m_logger, change_controller);
168+
// cout << "clear_settings = " << clear_settings << endl;
169+
m_connection = m_descriptor->open_connection(m_logger, change_controller, clear_settings);
169170
if (m_connection){
170171
m_connection->add_status_listener(*this);
171172
ready = m_connection->is_ready();
@@ -217,7 +218,7 @@ bool ControllerSession::set_device(const std::shared_ptr<const ControllerDescrip
217218
controller.reset();
218219
connection.reset();
219220

220-
make_controller({});
221+
make_controller({}, false);
221222
}
222223
signal_descriptor_changed(device);
223224
signal_status_text_changed(status_text());
@@ -254,7 +255,7 @@ bool ControllerSession::set_controller(ControllerType controller_type){
254255
controller.reset();
255256
connection.reset();
256257

257-
make_controller(controller_type);
258+
make_controller(controller_type, false);
258259
device = m_descriptor;
259260
}
260261
signal_descriptor_changed(device);
@@ -264,7 +265,7 @@ bool ControllerSession::set_controller(ControllerType controller_type){
264265

265266

266267

267-
std::string ControllerSession::reset(){
268+
std::string ControllerSession::reset(bool clear_settings){
268269
// cout << "ControllerSession::reset()" << endl;
269270

270271
{
@@ -294,7 +295,7 @@ std::string ControllerSession::reset(){
294295
controller.reset();
295296
connection.reset();
296297

297-
make_controller(m_controller_type);
298+
make_controller(m_controller_type, clear_settings);
298299
}
299300
signal_status_text_changed(status_text());
300301
return "";

SerialPrograms/Source/Controllers/ControllerSession.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class ControllerSession : private ControllerConnection::StatusListener{
8787

8888
public:
8989
// Returns empty string on success. Otherwise returns error message.
90-
std::string reset();
90+
std::string reset(bool clear_settings);
9191

9292
// Try to run the following lambda on the underlying controller type.
9393
// Returns empty string if successful. Otherwise returns error message.
@@ -118,7 +118,7 @@ class ControllerSession : private ControllerConnection::StatusListener{
118118

119119

120120
private:
121-
void make_controller(std::optional<ControllerType> change_controller);
121+
void make_controller(std::optional<ControllerType> change_controller, bool clear_settings);
122122

123123
// virtual void pre_connection_not_ready(ControllerConnection& connection) override;
124124
virtual void post_connection_ready(

SerialPrograms/Source/Controllers/NullController.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ JsonValue NullControllerDescriptor::to_json() const{
3030
}
3131
std::unique_ptr<ControllerConnection> NullControllerDescriptor::open_connection(
3232
Logger& logger,
33-
std::optional<ControllerType> change_controller
33+
std::optional<ControllerType> change_controller,
34+
bool clear_settings
3435
) const{
3536
return nullptr;
3637
}

SerialPrograms/Source/Controllers/NullController.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ class NullControllerDescriptor : public ControllerDescriptor{
2828

2929
virtual std::unique_ptr<ControllerConnection> open_connection(
3030
Logger& logger,
31-
std::optional<ControllerType> change_controller
31+
std::optional<ControllerType> change_controller,
32+
bool clear_settings
3233
) const override;
3334
virtual std::unique_ptr<AbstractController> make_controller(
3435
Logger& logger,

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ const std::map<
158158
ControllerFeature::NintendoSwitch_DateSkip,
159159
}},
160160
}},
161+
}},
162+
{2025081700, {
161163
{PABB_PID_PABOTBASE_ESP32S3, {
162164
{ControllerType::NintendoSwitch_WiredController, {
163165
ControllerFeature::TickPrecise,
@@ -170,8 +172,6 @@ const std::map<
170172
ControllerFeature::NintendoSwitch_DateSkip,
171173
}},
172174
}},
173-
}},
174-
{2025081600, {
175175
{PABB_PID_PABOTBASE_ESP32, {
176176
{ControllerType::NintendoSwitch_WirelessProController, {
177177
ControllerFeature::TickPrecise,

SerialPrograms/Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace SerialPABotBase{
3434
SerialPABotBase_Connection::SerialPABotBase_Connection(
3535
Logger& logger,
3636
const QSerialPortInfo* port,
37-
std::optional<ControllerType> change_controller
37+
std::optional<ControllerType> change_controller,
38+
bool clear_settings
3839
)
3940
: m_logger(logger, GlobalSettings::instance().LOG_EVERYTHING)
4041
{
@@ -82,7 +83,7 @@ SerialPABotBase_Connection::SerialPABotBase_Connection(
8283
m_status_thread = std::thread(
8384
run_with_catch,
8485
"SerialPABotBase_Connection::thread_body()",
85-
[=, this]{ thread_body(change_controller); }
86+
[=, this]{ thread_body(change_controller, clear_settings); }
8687
);
8788
}
8889
SerialPABotBase_Connection::~SerialPABotBase_Connection(){
@@ -190,8 +191,9 @@ ControllerType SerialPABotBase_Connection::get_controller_type(
190191

191192

192193

193-
ControllerModeStatus SerialPABotBase_Connection::read_device_specs(
194-
std::optional<ControllerType> change_controller
194+
ControllerModeStatus SerialPABotBase_Connection::process_device(
195+
std::optional<ControllerType> change_controller,
196+
bool clear_settings
195197
){
196198
// Protocol
197199
{
@@ -231,15 +233,17 @@ ControllerModeStatus SerialPABotBase_Connection::read_device_specs(
231233
ret,
232234
m_program_id, m_device_name,
233235
*m_botbase,
234-
change_controller
236+
change_controller,
237+
clear_settings
235238
);
236239
return ret;
237240
}
238241

239242

240243

241244
void SerialPABotBase_Connection::thread_body(
242-
std::optional<ControllerType> change_controller
245+
std::optional<ControllerType> change_controller,
246+
bool clear_settings
243247
){
244248
using namespace PokemonAutomation;
245249

@@ -271,7 +275,7 @@ void SerialPABotBase_Connection::thread_body(
271275
ControllerModeStatus mode_status;
272276
std::string error;
273277
try{
274-
mode_status = read_device_specs(change_controller);
278+
mode_status = process_device(change_controller, clear_settings);
275279
std::lock_guard<std::mutex> lg(m_lock);
276280
m_mode_status = mode_status;
277281

0 commit comments

Comments
 (0)