77#include " CommonFramework/Logging/Logger.h"
88#include " CommonFramework/ImageTypes/ImageRGB32.h"
99#include " CommonFramework/VideoPipeline/VideoFeed.h"
10+ #include " Controllers/ControllerSession.h"
1011#include " Controllers/SerialPABotBase/SerialPABotBase_Handle.h"
12+ #include " NintendoSwitch/Controllers/NintendoSwitch_Controller.h"
1113#include " NintendoSwitch/Commands/NintendoSwitch_Messages_Superscalar.h"
1214#include " ProgramTracker.h"
1315
@@ -17,6 +19,8 @@ using std::endl;
1719
1820namespace PokemonAutomation {
1921
22+ using namespace std ::chrono_literals;
23+
2024
2125ProgramTracker& ProgramTracker::instance (){
2226 static ProgramTracker obj;
@@ -109,6 +113,7 @@ std::string ProgramTracker::stop_program(uint64_t program_id){
109113 return " " ;
110114}
111115std::string ProgramTracker::nsw_press_button (uint64_t console_id, NintendoSwitch::Button button, uint16_t ticks){
116+ using namespace NintendoSwitch ;
112117 std::string header = " press_button(ID = " + std::to_string (console_id) + " )" ;
113118 std::lock_guard<std::mutex> lg (m_lock);
114119 auto iter = m_consoles.find (console_id);
@@ -117,19 +122,28 @@ std::string ProgramTracker::nsw_press_button(uint64_t console_id, NintendoSwitch
117122 global_logger_tagged ().log (" SwitchProgramTracker::" + error, COLOR_RED);
118123 return error;
119124 }
120- const char * err = iter->second .first ->sender ().try_send_request (
121- // NintendoSwitch::DeviceRequest_pbf_press_button(button, ticks, 0)
122- NintendoSwitch::DeviceRequest_ssf_press_button (button, ticks, ticks, 0 )
123- );
124- if (err){
125- global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
126- return err;
127- }else {
125+ Milliseconds duration = ticks * 8ms;
126+ std::string err;
127+ try {
128+ err = iter->second .first ->controller ().try_run <SwitchController>(
129+ [=](SwitchController& controller){
130+ controller.issue_buttons (nullptr , button, duration, duration, 0ms);
131+ }
132+ );
133+ }catch (Exception& e){
134+ e.log (global_logger_tagged ());
135+ err = e.to_str ();
136+ }
137+ if (err.empty ()){
128138 global_logger_tagged ().log (" SwitchProgramTracker::" + header, COLOR_BLUE);
129139 return " " ;
140+ }else {
141+ global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
142+ return err;
130143 }
131144}
132145std::string ProgramTracker::nsw_press_dpad (uint64_t console_id, NintendoSwitch::DpadPosition position, uint16_t ticks){
146+ using namespace NintendoSwitch ;
133147 std::string header = " press_dpad(ID = " + std::to_string (console_id) + " )" ;
134148 std::lock_guard<std::mutex> lg (m_lock);
135149 auto iter = m_consoles.find (console_id);
@@ -138,19 +152,28 @@ std::string ProgramTracker::nsw_press_dpad(uint64_t console_id, NintendoSwitch::
138152 global_logger_tagged ().log (" SwitchProgramTracker::" + error, COLOR_RED);
139153 return error;
140154 }
141- const char * err = iter->second .first ->sender ().try_send_request (
142- // NintendoSwitch::DeviceRequest_pbf_press_dpad(position, ticks, 0)
143- NintendoSwitch::DeviceRequest_ssf_press_dpad (position, ticks, ticks, 0 )
144- );
145- if (err){
146- global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
147- return err;
148- }else {
155+ Milliseconds duration = ticks * 8ms;
156+ std::string err;
157+ try {
158+ err = iter->second .first ->controller ().try_run <SwitchController>(
159+ [=](SwitchController& controller){
160+ controller.issue_dpad (nullptr , position, duration, duration, 0ms);
161+ }
162+ );
163+ }catch (Exception& e){
164+ e.log (global_logger_tagged ());
165+ err = e.to_str ();
166+ }
167+ if (err.empty ()){
149168 global_logger_tagged ().log (" SwitchProgramTracker::" + header, COLOR_BLUE);
150169 return " " ;
170+ }else {
171+ global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
172+ return err;
151173 }
152174}
153175std::string ProgramTracker::nsw_press_left_joystick (uint64_t console_id, uint8_t x, uint8_t y, uint16_t ticks){
176+ using namespace NintendoSwitch ;
154177 std::string header = " press_left_joystick(ID = " + std::to_string (console_id) + " )" ;
155178 std::lock_guard<std::mutex> lg (m_lock);
156179 auto iter = m_consoles.find (console_id);
@@ -159,19 +182,28 @@ std::string ProgramTracker::nsw_press_left_joystick(uint64_t console_id, uint8_t
159182 global_logger_tagged ().log (" SwitchProgramTracker::" + error, COLOR_RED);
160183 return error;
161184 }
162- const char * err = iter->second .first ->sender ().try_send_request (
163- // NintendoSwitch::DeviceRequest_pbf_move_left_joystick(x, y, ticks, 0)
164- NintendoSwitch::DeviceRequest_ssf_press_joystick (true , x, y, ticks, ticks, 0 )
165- );
166- if (err){
167- global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
168- return err;
169- }else {
185+ Milliseconds duration = ticks * 8ms;
186+ std::string err;
187+ try {
188+ err = iter->second .first ->controller ().try_run <SwitchController>(
189+ [=](SwitchController& controller){
190+ controller.issue_left_joystick (nullptr , x, y, duration, duration, 0ms);
191+ }
192+ );
193+ }catch (Exception& e){
194+ e.log (global_logger_tagged ());
195+ err = e.to_str ();
196+ }
197+ if (err.empty ()){
170198 global_logger_tagged ().log (" SwitchProgramTracker::" + header, COLOR_BLUE);
171199 return " " ;
200+ }else {
201+ global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
202+ return err;
172203 }
173204}
174205std::string ProgramTracker::nsw_press_right_joystick (uint64_t console_id, uint8_t x, uint8_t y, uint16_t ticks){
206+ using namespace NintendoSwitch ;
175207 std::string header = " press_right_joystick(ID = " + std::to_string (console_id) + " )" ;
176208 std::lock_guard<std::mutex> lg (m_lock);
177209 auto iter = m_consoles.find (console_id);
@@ -180,16 +212,24 @@ std::string ProgramTracker::nsw_press_right_joystick(uint64_t console_id, uint8_
180212 global_logger_tagged ().log (" SwitchProgramTracker::" + error, COLOR_RED);
181213 return error;
182214 }
183- const char * err = iter->second .first ->sender ().try_send_request (
184- // NintendoSwitch::DeviceRequest_pbf_move_right_joystick(x, y, ticks, 0)
185- NintendoSwitch::DeviceRequest_ssf_press_joystick (false , x, y, ticks, ticks, 0 )
186- );
187- if (err){
188- global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
189- return err;
190- }else {
215+ Milliseconds duration = ticks * 8ms;
216+ std::string err;
217+ try {
218+ err = iter->second .first ->controller ().try_run <SwitchController>(
219+ [=](SwitchController& controller){
220+ controller.issue_right_joystick (nullptr , x, y, duration, duration, 0ms);
221+ }
222+ );
223+ }catch (Exception& e){
224+ e.log (global_logger_tagged ());
225+ err = e.to_str ();
226+ }
227+ if (err.empty ()){
191228 global_logger_tagged ().log (" SwitchProgramTracker::" + header, COLOR_BLUE);
192229 return " " ;
230+ }else {
231+ global_logger_tagged ().log (" SwitchProgramTracker::" + header + " : " + err, COLOR_RED);
232+ return err;
193233 }
194234}
195235
0 commit comments