mirror of
https://github.com/Lorenzooone/cc3dsfs.git
synced 2026-03-21 17:55:00 -05:00
Improve initial connection for FTD3 N3DSXL
Some checks failed
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux32 flags:32 name:Linux GCC 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux64 flags:64 name:Linux GCC x64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm32 flags:arm32 name:Linux GCC ARM 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm64 flags:arm64 name:Linux GCC ARM 64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:macos name:macOS Apple Silicon os:macos-14]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win32 flags:-A Win32 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 Win32 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win64 flags:-A x64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 x64 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:winarm64 flags:-A ARM64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 ARM os:windows-2022]) (push) Has been cancelled
CD / Create Pi Mono Setup (push) Has been cancelled
CD / Publishing (push) Has been cancelled
Some checks failed
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux32 flags:32 name:Linux GCC 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux64 flags:64 name:Linux GCC x64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm32 flags:arm32 name:Linux GCC ARM 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm64 flags:arm64 name:Linux GCC ARM 64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:macos name:macOS Apple Silicon os:macos-14]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win32 flags:-A Win32 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 Win32 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win64 flags:-A x64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 x64 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:winarm64 flags:-A ARM64 -DCMAKE_PARALLEL_MSVC=TRUE name:Windows VS2022 ARM os:windows-2022]) (push) Has been cancelled
CD / Create Pi Mono Setup (push) Has been cancelled
CD / Publishing (push) Has been cancelled
This commit is contained in:
parent
7cd299488e
commit
b1a3f10728
|
|
@ -41,9 +41,12 @@ const size_t ftd3_num_vids = sizeof(ftd3_valid_vids) / sizeof(ftd3_valid_vids[0]
|
|||
const uint16_t ftd3_valid_pids[] = {0x601e, 0x601f, 0x602a, 0x602b, 0x602c, 0x602d, 0x602f};
|
||||
const size_t ftd3_num_pids = sizeof(ftd3_valid_pids) / sizeof(ftd3_valid_pids[0]);
|
||||
|
||||
// Should be different between two commands... Doesn't need to start from 0.
|
||||
static int curr_cmd_id = 0;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct ftd3_command_preamble_data {
|
||||
uint32_t unk;
|
||||
uint32_t cmd_id;
|
||||
uint8_t pipe;
|
||||
uint8_t command;
|
||||
uint16_t unk2;
|
||||
|
|
@ -130,6 +133,7 @@ static int ftd3_libusb_send_command(libusb_device_handle* handle, uint8_t* data,
|
|||
static int ftd3_libusb_send_ptr_data_command(libusb_device_handle* handle, uint8_t pipe, uint8_t command) {
|
||||
ftd3_command_with_ptr_data command_with_ptr_data;
|
||||
memset((uint8_t*)&command_with_ptr_data, 0, sizeof(ftd3_command_with_ptr_data));
|
||||
command_with_ptr_data.preamble_data.cmd_id = curr_cmd_id++;
|
||||
command_with_ptr_data.preamble_data.pipe = pipe;
|
||||
command_with_ptr_data.preamble_data.command = command;
|
||||
return ftd3_libusb_send_command(handle, (uint8_t*)&command_with_ptr_data, sizeof(ftd3_command_with_ptr_data));
|
||||
|
|
@ -138,12 +142,17 @@ static int ftd3_libusb_send_ptr_data_command(libusb_device_handle* handle, uint8
|
|||
static int ftd3_libusb_send_len_data_command(libusb_device_handle* handle, uint8_t pipe, uint8_t command, uint32_t length) {
|
||||
ftd3_command_with_len_data command_with_len_data;
|
||||
memset((uint8_t*)&command_with_len_data, 0, sizeof(ftd3_command_with_len_data));
|
||||
command_with_len_data.preamble_data.cmd_id = curr_cmd_id++;
|
||||
command_with_len_data.preamble_data.pipe = pipe;
|
||||
command_with_len_data.preamble_data.command = command;
|
||||
command_with_len_data.len = to_le(length);
|
||||
return ftd3_libusb_send_command(handle, (uint8_t*)&command_with_len_data, sizeof(ftd3_command_with_len_data));
|
||||
}
|
||||
|
||||
static int ftd3_libusb_send_create_abort_command(libusb_device_handle* handle) {
|
||||
return ftd3_libusb_send_ptr_data_command(handle, FTD3_COMMAND_CREATE_PIPE_ID, FTD3_COMMAND_ABORT_ID);
|
||||
}
|
||||
|
||||
static int ftd3_libusb_send_create_command(libusb_device_handle* handle) {
|
||||
return ftd3_libusb_send_ptr_data_command(handle, FTD3_COMMAND_CREATE_PIPE_ID, FTD3_COMMAND_CREATE_ID);
|
||||
}
|
||||
|
|
@ -176,6 +185,24 @@ int ftd3_libusb_set_stream_pipe(ftd3_device_device_handlers* handlers, int pipe,
|
|||
return ftd3_libusb_send_len_data_command((libusb_device_handle*)handlers->usb_handle, pipe, FTD3_COMMAND_SET_STREAM_PIPE_ID, (uint32_t)length);
|
||||
}
|
||||
|
||||
static bool ftd3_libusb_setup_connection_initial_control_in(libusb_device_handle* handle) {
|
||||
uint8_t tmp_buf[4];
|
||||
int transferred = 0;
|
||||
ftd3_device_device_handlers handlers;
|
||||
handlers.usb_handle = handle;
|
||||
int result = ftd3_libusb_ctrl_in(&handlers, FTD3_COMMAND_TIMEOUT, tmp_buf, sizeof(tmp_buf), 3, 1, 0x8000, &transferred);
|
||||
if(result < 0)
|
||||
return false;
|
||||
if(transferred != sizeof(tmp_buf))
|
||||
return false;
|
||||
result = ftd3_libusb_ctrl_in(&handlers, FTD3_COMMAND_TIMEOUT, tmp_buf, sizeof(tmp_buf), 3, 1, 0x8400, &transferred);
|
||||
if(result < 0)
|
||||
return false;
|
||||
if(transferred != sizeof(tmp_buf))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool ftd3_libusb_setup_connection(libusb_device_handle* handle, bool* claimed_cmd, bool* claimed_bulk) {
|
||||
*claimed_cmd = false;
|
||||
*claimed_bulk = false;
|
||||
|
|
@ -190,10 +217,15 @@ static bool ftd3_libusb_setup_connection(libusb_device_handle* handle, bool* cla
|
|||
if(result != LIBUSB_SUCCESS)
|
||||
return false;
|
||||
*claimed_cmd = true;
|
||||
if(!ftd3_libusb_setup_connection_initial_control_in(handle))
|
||||
return false;
|
||||
result = libusb_claim_interface(handle, FTD3_BULK_INTERFACE);
|
||||
if(result != LIBUSB_SUCCESS)
|
||||
return false;
|
||||
*claimed_bulk = true;
|
||||
result = ftd3_libusb_send_create_abort_command(handle);
|
||||
if(result < 0)
|
||||
return false;
|
||||
result = ftd3_libusb_send_create_command(handle);
|
||||
if(result < 0)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ static bool read_3ds_config_3d(bool print_failed, CaptureData* capture_data, Cap
|
|||
buf[0] = 0x98;
|
||||
buf[1] = 0x05;
|
||||
buf[2] = 0x9F;
|
||||
buf[3] = 0;
|
||||
|
||||
if(ftd3_is_error_compat(handlers, ftd3_write_pipe_compat(handlers, BULK_OUT, buf, 4, &transferred))) {
|
||||
capture_error_print(print_failed, capture_data, "Write failed");
|
||||
|
|
@ -158,6 +159,8 @@ static bool read_3ds_config_3d(bool print_failed, CaptureData* capture_data, Cap
|
|||
|
||||
buf[0] = 0x40;
|
||||
buf[1] = 0;
|
||||
buf[2] = 0;
|
||||
buf[3] = 0;
|
||||
|
||||
if(ftd3_is_error_compat(handlers, ftd3_write_pipe_compat(handlers, BULK_OUT, buf, 4, &transferred))) {
|
||||
capture_error_print(print_failed, capture_data, "Write failed");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user