Skip to content

Commit 51883c1

Browse files
committed
Move post-connect controller actions into the controllers themselves.
1 parent a74010b commit 51883c1

29 files changed

+385
-535
lines changed

SerialPrograms/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -710,8 +710,6 @@ file(GLOB MAIN_SOURCES
710710
Source/Controllers/SerialPABotBase/SerialPABotBase_Connection.h
711711
Source/Controllers/SerialPABotBase/SerialPABotBase_Descriptor.cpp
712712
Source/Controllers/SerialPABotBase/SerialPABotBase_Descriptor.h
713-
Source/Controllers/SerialPABotBase/SerialPABotBase_PostConnectActions.cpp
714-
Source/Controllers/SerialPABotBase/SerialPABotBase_PostConnectActions.h
715713
Source/Controllers/SerialPABotBase/SerialPABotBase_Routines_NS1_WirelessControllers.cpp
716714
Source/Controllers/SerialPABotBase/SerialPABotBase_Routines_NS1_WirelessControllers.h
717715
Source/Controllers/SerialPABotBase/SerialPABotBase_Routines_NS2_WiredController.cpp

SerialPrograms/Source/Controllers/ControllerConnection.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace PokemonAutomation{
1818
void ControllerConnection::add_status_listener(StatusListener& listener){
1919
m_status_listeners.add(listener);
2020
if (m_ready.load(std::memory_order_acquire)){
21-
listener.post_connection_ready(*this, controller_mode_status());
21+
listener.post_connection_ready(*this);
2222
}
2323
}
2424
void ControllerConnection::remove_status_listener(StatusListener& listener){
@@ -36,7 +36,6 @@ std::string ControllerConnection::status_text() const{
3636
}
3737

3838

39-
4039
void ControllerConnection::set_status_line0(const std::string& text, Color color){
4140
{
4241
WriteSpinLock lg(m_status_text_lock);
@@ -51,17 +50,17 @@ void ControllerConnection::set_status_line1(const std::string& text, Color color
5150
}
5251
signal_status_text_changed(status_text());
5352
}
54-
void ControllerConnection::declare_ready(const ControllerModeStatus& mode_status){
53+
void ControllerConnection::declare_ready(){
5554
m_ready.store(true, std::memory_order_release);
56-
signal_post_ready(mode_status);
55+
signal_post_ready();
5756
}
5857

5958

6059
//void ControllerConnection::signal_pre_not_ready(){
6160
// m_status_listeners.run_method_unique(&StatusListener::pre_connection_not_ready, *this);
6261
//}
63-
void ControllerConnection::signal_post_ready(const ControllerModeStatus& mode_status){
64-
m_status_listeners.run_method_unique(&StatusListener::post_connection_ready, *this, mode_status);
62+
void ControllerConnection::signal_post_ready(){
63+
m_status_listeners.run_method_unique(&StatusListener::post_connection_ready, *this);
6564
}
6665
void ControllerConnection::signal_status_text_changed(const std::string& text){
6766
// cout << "m_status_listeners.size() = " << m_status_listeners.count_unique() << endl;

SerialPrograms/Source/Controllers/ControllerConnection.h

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,11 @@ namespace PokemonAutomation{
1515

1616

1717

18-
struct ControllerModeStatus{
19-
ControllerType current_controller = ControllerType::None;
20-
std::vector<ControllerType> supported_controllers;
21-
};
22-
23-
24-
2518
class ControllerConnection{
2619
public:
2720
struct StatusListener{
2821
// virtual void pre_connection_not_ready(ControllerConnection& connection){}
29-
virtual void post_connection_ready(
30-
ControllerConnection& connection,
31-
const ControllerModeStatus& mode_status
32-
){}
22+
virtual void post_connection_ready(ControllerConnection& connection){}
3323
virtual void status_text_changed(
3424
ControllerConnection& connection, const std::string& text
3525
){}
@@ -43,15 +33,23 @@ class ControllerConnection{
4333

4434

4535
public:
36+
ControllerConnection()
37+
: m_current_controller(ControllerType::None)
38+
, m_ready(false)
39+
{}
4640
virtual ~ControllerConnection() = default;
4741

42+
ControllerType current_controller() const{
43+
return m_current_controller.load(std::memory_order_acquire);
44+
}
4845
bool is_ready() const{ return m_ready.load(std::memory_order_acquire); }
4946
std::string status_text() const;
5047

51-
// Returns the current controller type and the list of supported controllers.
52-
// The current controller may be "None" if there is only one supported
53-
// controller since it is implied to be that.
54-
virtual ControllerModeStatus controller_mode_status() const = 0;
48+
// It it not safe to call this until "is_ready()" is true.
49+
const std::vector<ControllerType>& controller_list(){
50+
return m_controller_list;
51+
}
52+
5553

5654

5755
public:
@@ -60,19 +58,24 @@ class ControllerConnection{
6058

6159

6260
protected:
63-
void declare_ready(const ControllerModeStatus& mode_status);
61+
void declare_ready();
6462

6563

6664
private:
6765
// void signal_pre_not_ready();
68-
void signal_post_ready(const ControllerModeStatus& mode_status);
66+
void signal_post_ready();
6967
void signal_status_text_changed(const std::string& text);
7068
void signal_error(const std::string& text);
7169

7270

7371
protected:
72+
// This is written to once and never modified again.
73+
std::vector<ControllerType> m_controller_list;
74+
75+
std::atomic<ControllerType> m_current_controller;
7476
std::atomic<bool> m_ready;
7577

78+
7679
private:
7780
mutable SpinLock m_status_text_lock;
7881
std::string m_status_line0;

SerialPrograms/Source/Controllers/ControllerDescriptor.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ class ControllerConnection;
2727
class ControllerSelectorWidget;
2828

2929

30+
31+
enum class ControllerResetMode{
32+
DO_NOT_RESET,
33+
SIMPLE_RESET,
34+
RESET_AND_CLEAR_STATE,
35+
};
36+
37+
38+
3039
//
3140
// Represents an entire controller interface.
3241
//
@@ -105,13 +114,13 @@ class ControllerDescriptor{
105114
public:
106115
virtual std::unique_ptr<ControllerConnection> open_connection(
107116
Logger& logger,
108-
std::optional<ControllerType> change_controller,
109-
bool clear_settings
117+
bool set_to_null_controller
110118
) const = 0;
111119
virtual std::unique_ptr<AbstractController> make_controller(
112120
Logger& logger,
113121
ControllerConnection& connection,
114-
ControllerType controller_type
122+
ControllerType controller_type,
123+
ControllerResetMode reset_mode
115124
) const = 0;
116125

117126
virtual QWidget* make_selector_QtWidget(ControllerSelectorWidget& parent) const = 0;

0 commit comments

Comments
 (0)