mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-28 05:58:29 +00:00
switch2: Read user calibration data
This commit is contained in:
@@ -355,25 +355,24 @@ static bool HIDAPI_DriverSwitch2_InitUSB(SDL_HIDAPI_Device *device)
|
||||
flash_read_command[12] = 0x80;
|
||||
res = SendBulkData(ctx, flash_read_command, sizeof(flash_read_command));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request factory calibration data: %d", res);
|
||||
} else {
|
||||
res = RecvBulkData(ctx, calibration_data, sizeof(calibration_data));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read factory calibration data: %d", res);
|
||||
} else {
|
||||
ParseStickCalibration(&ctx->left_stick, &calibration_data[0x38]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flash_read_command[12] = 0xC0;
|
||||
res = SendBulkData(ctx, flash_read_command, sizeof(flash_read_command));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request factory calibration data: %d", res);
|
||||
} else {
|
||||
res = RecvBulkData(ctx, calibration_data, sizeof(calibration_data));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read factory calibration data: %d", res);
|
||||
} else {
|
||||
ParseStickCalibration(&ctx->right_stick, &calibration_data[0x38]);
|
||||
}
|
||||
@@ -384,11 +383,11 @@ static bool HIDAPI_DriverSwitch2_InitUSB(SDL_HIDAPI_Device *device)
|
||||
flash_read_command[13] = 0x31;
|
||||
res = SendBulkData(ctx, flash_read_command, sizeof(flash_read_command));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request factory calibration data: %d", res);
|
||||
} else {
|
||||
res = RecvBulkData(ctx, calibration_data, sizeof(calibration_data));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read calibration data: %d", res);
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read factory calibration data: %d", res);
|
||||
} else {
|
||||
ctx->left_trigger_max = calibration_data[0x10];
|
||||
ctx->right_trigger_max = calibration_data[0x11];
|
||||
@@ -396,6 +395,34 @@ static bool HIDAPI_DriverSwitch2_InitUSB(SDL_HIDAPI_Device *device)
|
||||
}
|
||||
}
|
||||
|
||||
flash_read_command[12] = 0x40;
|
||||
flash_read_command[13] = 0xC0;
|
||||
flash_read_command[14] = 0x1F;
|
||||
res = SendBulkData(ctx, flash_read_command, sizeof(flash_read_command));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request user calibration data: %d", res);
|
||||
} else {
|
||||
res = RecvBulkData(ctx, calibration_data, sizeof(calibration_data));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request user calibration data: %d", res);
|
||||
} else if (calibration_data[0x10] == 0xb2 && calibration_data[0x11] == 0xa1) {
|
||||
ParseStickCalibration(&ctx->left_stick, &calibration_data[0x12]);
|
||||
}
|
||||
}
|
||||
|
||||
flash_read_command[12] = 0x80;
|
||||
res = SendBulkData(ctx, flash_read_command, sizeof(flash_read_command));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't request user calibration data: %d", res);
|
||||
} else {
|
||||
res = RecvBulkData(ctx, calibration_data, sizeof(calibration_data));
|
||||
if (res < 0) {
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Couldn't read user calibration data: %d", res);
|
||||
} else if (calibration_data[0x10] == 0xb2 && calibration_data[0x11] == 0xa1) {
|
||||
ParseStickCalibration(&ctx->right_stick, &calibration_data[0x12]);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user