Implement partner CTR menu

This commit is contained in:
Lorenzooone
2026-01-13 13:28:21 +01:00
parent 67adb67299
commit 9843ecf116
15 changed files with 442 additions and 35 deletions

View File

@@ -25,6 +25,7 @@ uint64_t cypart_device_get_video_in_size(CaptureStatus* status, bool is_3d);
uint64_t cypart_device_get_video_in_size(CaptureData* capture_data, bool is_3d);
void cypart_device_acquisition_main_loop(CaptureData* capture_data);
void usb_cypart_device_acquisition_cleanup(CaptureData* capture_data);
bool is_device_partner_ctr(CaptureDevice* device);
void usb_cypart_device_init();
void usb_cypart_device_close();

View File

@@ -28,6 +28,7 @@ enum MainMenuOutAction{
MAIN_MENU_ISN_SETTINGS,
MAIN_MENU_IST_SETTINGS,
MAIN_MENU_OPTIMIZE_3DS_SETTINGS,
MAIN_MENU_PARTNER_CTR_SETTINGS,
MAIN_MENU_INPUT_SETTINGS,
};

View File

@@ -0,0 +1,41 @@
#ifndef __PARTCTRMENU_HPP
#define __PARTCTRMENU_HPP
#include "OptionSelectionMenu.hpp"
#include <chrono>
#include "TextRectangle.hpp"
#include "sfml_gfx_structs.hpp"
#include "display_structs.hpp"
#include "capture_structs.hpp"
enum PartnerCTRMenuOutAction{
PCTR_MENU_NO_ACTION,
PCTR_MENU_BACK,
PCTR_MENU_RESET,
PCTR_MENU_BATTERY_INC,
PCTR_MENU_BATTERY_DEC,
PCTR_MENU_AC_ADAPTER_CONNECTED_TOGGLE,
PCTR_MENU_AC_ADAPTER_CHARGING_TOGGLE,
};
class PartnerCTRMenu : public OptionSelectionMenu {
public:
PartnerCTRMenu(TextRectanglePool* text_pool);
~PartnerCTRMenu();
void prepare(float scaling_factor, int view_size_x, int view_size_y, CaptureStatus* capture_status);
void insert_data(CaptureDevice* device);
PartnerCTRMenuOutAction selected_index = PartnerCTRMenuOutAction::PCTR_MENU_NO_ACTION;
void reset_output_option();
protected:
bool is_option_selectable(int index, int action);
bool is_option_inc_dec(int index);
void set_output_option(int index, int action);
size_t get_num_options();
std::string get_string_option(int index, int action);
void class_setup();
private:
int *options_indexes;
size_t num_enabled_options;
};
#endif

View File

@@ -371,8 +371,11 @@ struct CaptureStatus {
bool key_updated = false;
CaptureScreensType capture_type;
CaptureSpeedsType capture_speed;
int battery_percentage;
bool ac_adapter_connected;
int is_battery_percentage;
bool is_ac_adapter_connected;
int partner_ctr_battery_percentage;
bool partner_ctr_ac_adapter_connected;
bool partner_ctr_ac_adapter_charging;
// Needed for possible compatibility issues
bool devices_allowed_scan[CC_POSSIBLE_DEVICES_END];
ConsumerMutex video_wait;

View File

@@ -26,7 +26,7 @@ enum ScreenType { TOP, BOTTOM, JOINT };
enum BottomRelativePosition { UNDER_TOP, LEFT_TOP, ABOVE_TOP, RIGHT_TOP, BOT_REL_POS_END };
enum SecondScreen3DRelativePosition { UNDER_FIRST, LEFT_FIRST, ABOVE_FIRST, RIGHT_FIRST, SECOND_SCREEN_3D_REL_POS_END };
enum NonIntegerScalingModes { SMALLER_PRIORITY, INVERSE_PROPORTIONAL_PRIORITY, EQUAL_PRIORITY, PROPORTIONAL_PRIORITY, BIGGER_PRIORITY, END_NONINT_SCALE_MODES };
enum CurrMenuType { DEFAULT_MENU_TYPE, CONNECT_MENU_TYPE, MAIN_MENU_TYPE, VIDEO_MENU_TYPE, AUDIO_MENU_TYPE, CROP_MENU_TYPE, TOP_PAR_MENU_TYPE, BOTTOM_PAR_MENU_TYPE, ROTATION_MENU_TYPE, OFFSET_MENU_TYPE, BFI_MENU_TYPE, LOAD_MENU_TYPE, SAVE_MENU_TYPE, RESOLUTION_MENU_TYPE, EXTRA_MENU_TYPE, STATUS_MENU_TYPE, LICENSES_MENU_TYPE, RELATIVE_POS_MENU_TYPE, SHORTCUTS_MENU_TYPE, ACTION_SELECTION_MENU_TYPE, SCALING_RATIO_MENU_TYPE, ISN_MENU_TYPE, VIDEO_EFFECTS_MENU_TYPE, INPUT_MENU_TYPE, AUDIO_DEVICE_MENU_TYPE, SEPARATOR_MENU_TYPE, COLOR_CORRECTION_MENU_TYPE, MAIN_3D_MENU_TYPE, SECOND_SCREEN_RELATIVE_POS_MENU_TYPE, USB_CONFLICT_RESOLUTION_MENU_TYPE, OPTIMIZE_3DS_MENU_TYPE, OPTIMIZE_SERIAL_KEY_ADD_MENU_TYPE, RECONNECT_MENU_TYPE };
enum CurrMenuType { DEFAULT_MENU_TYPE, CONNECT_MENU_TYPE, MAIN_MENU_TYPE, VIDEO_MENU_TYPE, AUDIO_MENU_TYPE, CROP_MENU_TYPE, TOP_PAR_MENU_TYPE, BOTTOM_PAR_MENU_TYPE, ROTATION_MENU_TYPE, OFFSET_MENU_TYPE, BFI_MENU_TYPE, LOAD_MENU_TYPE, SAVE_MENU_TYPE, RESOLUTION_MENU_TYPE, EXTRA_MENU_TYPE, STATUS_MENU_TYPE, LICENSES_MENU_TYPE, RELATIVE_POS_MENU_TYPE, SHORTCUTS_MENU_TYPE, ACTION_SELECTION_MENU_TYPE, SCALING_RATIO_MENU_TYPE, ISN_MENU_TYPE, VIDEO_EFFECTS_MENU_TYPE, INPUT_MENU_TYPE, AUDIO_DEVICE_MENU_TYPE, SEPARATOR_MENU_TYPE, COLOR_CORRECTION_MENU_TYPE, MAIN_3D_MENU_TYPE, SECOND_SCREEN_RELATIVE_POS_MENU_TYPE, USB_CONFLICT_RESOLUTION_MENU_TYPE, OPTIMIZE_3DS_MENU_TYPE, OPTIMIZE_SERIAL_KEY_ADD_MENU_TYPE, RECONNECT_MENU_TYPE, PARTNER_CTR_MENU_TYPE };
enum InputColorspaceMode { FULL_COLORSPACE, DS_COLORSPACE, GBA_COLORSPACE, INPUT_COLORSPACE_END };
enum FrameBlendingMode { NO_FRAME_BLENDING, FULL_FRAME_BLENDING, DS_3D_BOTH_SCREENS_FRAME_BLENDING, FRAME_BLENDING_END };

View File

@@ -32,6 +32,7 @@
#include "ActionSelectionMenu.hpp"
#include "ScalingRatioMenu.hpp"
#include "ISNitroMenu.hpp"
#include "PartnerCTRMenu.hpp"
#include "VideoEffectsMenu.hpp"
#include "InputMenu.hpp"
#include "AudioDeviceMenu.hpp"
@@ -191,6 +192,7 @@ private:
ShortcutMenu *shortcut_menu;
ActionSelectionMenu *action_selection_menu;
ISNitroMenu *is_nitro_menu;
PartnerCTRMenu *partner_ctr_menu;
ScalingRatioMenu *scaling_ratio_menu;
VideoEffectsMenu *video_effects_menu;
InputMenu *input_menu;
@@ -299,8 +301,12 @@ private:
void is_nitro_capture_type_change(bool positive);
void is_nitro_capture_speed_change(bool positive);
void is_nitro_capture_reset_hw();
void generic_battery_change(bool positive, int &battery_percentage, const int *allowed_battery_levels, size_t num_levels);
void is_nitro_battery_change(bool positive);
void is_nitro_ac_adapter_change();
void partner_ctr_battery_change(bool positive);
void partner_ctr_ac_adapter_connected_change();
void partner_ctr_ac_adapter_charging_change();
void crop_value_change(int new_crop_value, bool do_print_notification = true, bool do_cycle = true);
void par_value_change(int new_par_value, bool is_top);
void offset_change(float &value, float change);
@@ -408,6 +414,7 @@ private:
void setup_relative_pos_menu(bool reset_data = true);
void setup_scaling_ratio_menu(bool reset_data = true);
void setup_is_nitro_menu(bool reset_data = true);
void setup_partner_ctr_menu(bool reset_data = true);
void setup_video_effects_menu(bool reset_data = true);
void setup_input_menu(bool reset_data = true);
void setup_separator_menu(bool reset_data = true);