From 67adb67299f0a314d59106e413f2266cc4193490 Mon Sep 17 00:00:00 2001 From: Lorenzooone Date: Tue, 13 Jan 2026 02:58:57 +0100 Subject: [PATCH] Add base commands for Partner CTR Capture --- .../cypress_partner_ctr_communications.hpp | 3 ++ .../cypress_partner_ctr_communications.cpp | 45 ++++++++++++++++--- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/include/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.hpp b/include/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.hpp index d292274..244ca9d 100644 --- a/include/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.hpp +++ b/include/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.hpp @@ -22,6 +22,9 @@ int GetNumCyPartnerCTRDeviceDesc(void); const cypart_device_usb_device* GetCyPartnerCTRDeviceDesc(int index); const cy_device_usb_device* get_cy_usb_info(const cypart_device_usb_device* usb_device_desc); std::string read_serial_ctr_capture(cy_device_device_handlers* handlers, const cypart_device_usb_device* device); +int set_battery_level(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, int battery_level); +int set_charge_kind(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, bool plugged_in, bool charging); +int hardware_reset(cy_device_device_handlers* handlers, const cypart_device_usb_device* device); int capture_start(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, std::string &serial); int StartCaptureDma(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, bool is_3d); int capture_end(cy_device_device_handlers* handlers, const cypart_device_usb_device* device); diff --git a/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp b/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp index 88692c3..a9cb654 100644 --- a/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp +++ b/source/CaptureDeviceSpecific/Partner_CTR/cypress_partner_ctr_communications.cpp @@ -67,6 +67,7 @@ static const cypart_device_usb_device* all_usb_cypart_device_devices_desc[] = { &cypress_partner_ctr2_device, }; +static int write_to_address_partner_ctr(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, uint32_t address, const uint8_t* data, size_t data_size, uint8_t data_size_byte); static int read_from_address_partner_ctr(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, uint32_t address, uint8_t* data, size_t data_size, uint8_t data_size_byte); const cy_device_usb_device* get_cy_usb_info(const cypart_device_usb_device* usb_device_desc) { @@ -343,6 +344,44 @@ static int capture_start_first_unknown_write_and_read_0x1000_0x1002(cy_device_de return ret; } +int set_battery_level(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, int battery_level) { + uint16_t unk16 = 0; + + int ret = capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x005D, 0x0018, 0x0004, unk16); + if(ret < 0) + return ret; + + return capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x005D, 0x001A, battery_level, unk16); +} + +int set_charge_kind(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, bool plugged_in, bool charging) { + uint16_t unk16 = 0; + + // Is this 015D due to uninitialized data, or...? + int ret = capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x015D, 0x0118, 0x000F, unk16); + if(ret < 0) + return ret; + + int charge_kind = 0; + if(plugged_in) + charge_kind |= 1; + if(charging) + charge_kind |= 2; + return capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x005D, 0x001A, charge_kind, unk16); +} + +int hardware_reset(cy_device_device_handlers* handlers, const cypart_device_usb_device* device) { + uint16_t unk16 = 0; + + // Is this 015D due to uninitialized data, or...? + int ret = capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x003D, 0x0018, 0x0001, unk16); + if(ret < 0) + return ret; + + // Is this FF3D due to uninitialized data, or...? + return capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0xFF3D, 0xFF18, 0x0000, unk16); +} + // Various unknown reads and writes from registers... int capture_start(cy_device_device_handlers* handlers, const cypart_device_usb_device* device, std::string &serial) { int ret = 0; @@ -434,11 +473,7 @@ int capture_start(cy_device_device_handlers* handlers, const cypart_device_usb_d if(ret < 0) return ret; - ret = capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x005D, 0x0018, 0x0004, unk16); - if(ret < 0) - return ret; - - ret = capture_start_unknown_write_and_read_0x1000_0x1002(handlers, device, 0x005D, 0x001A, 0x0064, unk16); + ret = set_battery_level(handlers, device, 100); if(ret < 0) return ret;