Add calibration finetuning

This commit is contained in:
dualshock-tools 2025-01-18 16:46:15 +01:00
parent e68f136a13
commit 89931c2817
20 changed files with 594 additions and 8 deletions

190
core.js
View File

@ -16,6 +16,13 @@ var lang_cur_direction = "ltr";
var gj = 0; var gj = 0;
var gu = 0; var gu = 0;
// DS5 finetuning
var finetune_original_data = []
var last_written_finetune_data = []
var finetune_visible = false
var on_finetune_updating = false
// Alphabetical order // Alphabetical order
var available_langs = { var available_langs = {
"ar_ar": { "name": "العربية", "file": "ar_ar.json", "direction": "rtl"}, "ar_ar": { "name": "العربية", "file": "ar_ar.json", "direction": "rtl"},
@ -896,6 +903,169 @@ function alloc_req(id, data=[]) {
return out; return out;
} }
async function on_finetune_change(x) {
list = ["LL", "LT", "RL", "RT", "LR", "LB", "RR", "RB", "LX", "LY", "RX", "RY"]
out=[]
for(i=0;i<12;i++) {
v = $("#finetune" + list[i]).val()
out.push(parseInt(v))
}
await write_finetune_data(out)
}
async function ds5_finetune() {
// Lock NVS before
nvs = await ds5_nvstatus();
if(nvs == 0) {
await ds5_nvlock();
nvs = await ds5_nvstatus();
if(nvs != 1) {
show_popup("ERROR: Cannot lock NVS (" + nvs + ")");
return;
}
} else if(nvs != 1) {
show_popup("ERROR: Cannot read NVS status. Finetuning is not safe on this device.");
}
data = await read_finetune_data();
if (data == null)
return;
curModal = new bootstrap.Modal(document.getElementById('finetuneModal'), {})
curModal.show();
list = ["LL", "LT", "RL", "RT", "LR", "LB", "RR", "RB", "LX", "LY", "RX", "RY"]
for(i=0;i<12;i++) {
$("#finetune" + list[i]).attr("value", data[i])
$("#finetune" + list[i]).on('change', on_finetune_change)
}
finetune_original_data = data
finetune_visible = true
refresh_finetune()
}
async function read_finetune_data() {
await device.sendFeatureReport(0x80, alloc_req(0x80, [12,2]))
var data = await device.receiveFeatureReport(0x81)
var cmd = data.getUint8(0, true);
var p1 = data.getUint8(1, true);
var p2 = data.getUint8(2, true);
var p3 = data.getUint8(3, true);
if(cmd != 129 || p1 != 12 || p2 != 2 || p3 != 2)
{
finetune_close();
show_popup("ERROR: Cannot read calibration data");
return null;
}
var out = []
for(i=0;i<12;i++)
out.push(data.getUint16(4+i*2, true))
last_written_finetune_data = out
return out;
}
async function write_finetune_data(data) {
if (data.length != 12) {
return;
}
if (data == last_written_finetune_data) {
return;
}
last_written_finetune_data = data
pkg = [12,1]
for(i=0;i<data.length;i++) {
x = data[i]
pkg.push(x & 0xff)
pkg.push(x >> 8)
}
await device.sendFeatureReport(0x80, alloc_req(0x80, pkg))
}
function refresh_finetune() {
if (!finetune_visible)
return;
if (on_finetune_updating)
return;
on_finetune_updating = true
setTimeout(ds5_finetune_update_all, 10);
}
function ds5_finetune_update_all() {
ds5_finetune_update("finetuneStickCanvasL", last_lx, last_ly)
ds5_finetune_update("finetuneStickCanvasR", last_rx, last_ry)
}
function ds5_finetune_update(name, plx, ply) {
on_finetune_updating = false
var c = document.getElementById(name);
var ctx = c.getContext("2d");
var sz = 60;
var hb = 20 + sz;
var yb = 15 + sz;
var w = c.width;
ctx.clearRect(0, 0, c.width, c.height);
ctx.lineWidth = 1;
ctx.fillStyle = '#ffffff';
ctx.strokeStyle = '#000000';
// Left circle
ctx.beginPath();
ctx.arc(hb, yb, sz, 0, 2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.strokeStyle = '#aaaaaa';
ctx.beginPath();
ctx.moveTo(hb-sz, yb);
ctx.lineTo(hb+sz, yb);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(hb, yb-sz);
ctx.lineTo(hb, yb+sz);
ctx.closePath();
ctx.stroke();
ctx.fillStyle = '#000000';
ctx.strokeStyle = '#000000';
ctx.beginPath();
ctx.arc(hb+plx*sz,yb+ply*sz,4, 0, 2*Math.PI);
ctx.fill();
ctx.beginPath();
ctx.moveTo(hb, yb);
ctx.lineTo(hb+plx*sz, yb+ply*sz);
ctx.stroke();
}
function finetune_close() {
$("#finetuneModal").modal("hide");
finetune_visible = false
finetune_original_data = []
}
function finetune_save() {
finetune_close();
// Unlock button
update_nvs_changes_status(1);
}
async function finetune_cancel() {
if(finetune_original_data.length == 12)
await write_finetune_data(finetune_original_data)
finetune_close();
}
var last_lx = 0, last_ly = 0, last_rx = 0, last_ry = 0; var last_lx = 0, last_ly = 0, last_rx = 0, last_ry = 0;
var ll_updated = false; var ll_updated = false;
@ -1265,6 +1435,7 @@ function process_ds_input(data) {
last_ry = new_ry; last_ry = new_ry;
ll_updated = true; ll_updated = true;
refresh_sticks(); refresh_sticks();
refresh_finetune();
} }
var bat = data.data.getUint8(52); var bat = data.data.getUint8(52);
@ -1309,7 +1480,8 @@ async function continue_connection(report) {
} }
if(device.productId == 0x05c4) { if(device.productId == 0x05c4) {
$("#infoshowall").hide(); $("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds4_info()) { if(await ds4_info()) {
connected = true; connected = true;
mode = 1; mode = 1;
@ -1317,7 +1489,8 @@ async function continue_connection(report) {
device.oninputreport = process_ds4_input; device.oninputreport = process_ds4_input;
} }
} else if(device.productId == 0x09cc) { } else if(device.productId == 0x09cc) {
$("#infoshowall").hide(); $("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds4_info()) { if(await ds4_info()) {
connected = true; connected = true;
mode = 1; mode = 1;
@ -1325,7 +1498,8 @@ async function continue_connection(report) {
device.oninputreport = process_ds4_input; device.oninputreport = process_ds4_input;
} }
} else if(device.productId == 0x0ce6) { } else if(device.productId == 0x0ce6) {
$("#infoshowall").show(); $("#infoshowall").show()
$("#ds5finetune").show()
if(await ds5_info()) { if(await ds5_info()) {
connected = true; connected = true;
mode = 2; mode = 2;
@ -1333,7 +1507,8 @@ async function continue_connection(report) {
device.oninputreport = process_ds_input; device.oninputreport = process_ds_input;
} }
} else if(device.productId == 0x0df2) { } else if(device.productId == 0x0df2) {
$("#infoshowall").hide(); $("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds5_info()) { if(await ds5_info()) {
connected = true; connected = true;
mode = 0; mode = 0;
@ -1395,7 +1570,7 @@ function update_disable_btn() {
} else if(disable_btn & 2 && !(last_disable_btn & 2)) { } else if(disable_btn & 2 && !(last_disable_btn & 2)) {
show_popup(l("This DualSense controller has outdated firmware.") + "<br>" + l("Please update the firmware and try again."), true); show_popup(l("This DualSense controller has outdated firmware.") + "<br>" + l("Please update the firmware and try again."), true);
} else if(disable_btn & 8 && !(last_disable_btn & 8)) { } else if(disable_btn & 8 && !(last_disable_btn & 8)) {
show_popup(l("Calibration of the DualSense Edge is not currently supported.")); show_edge_modal();
} else if(disable_btn & 4 && !(last_disable_btn & 4)) { } else if(disable_btn & 4 && !(last_disable_btn & 4)) {
show_popup(l("Please charge controller battery over 30% to use this tool.")); show_popup(l("Please charge controller battery over 30% to use this tool."));
} }
@ -1617,6 +1792,11 @@ function show_donate_modal() {
new bootstrap.Modal(document.getElementById('donateModal'), {}).show() new bootstrap.Modal(document.getElementById('donateModal'), {}).show()
} }
function show_edge_modal() {
la("edge_modal");
new bootstrap.Modal(document.getElementById('edgeModal'), {}).show()
}
function show_info_modal() { function show_info_modal() {
la("info_modal"); la("info_modal");
new bootstrap.Modal(document.getElementById('infoModal'), {}).show() new bootstrap.Modal(document.getElementById('infoModal'), {}).show()

View File

@ -137,6 +137,8 @@ dl.row dd { font-family: monospace; }
<div class="vstack gap-2 p-2"> <div class="vstack gap-2 p-2">
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="calib_open()">Calibrate stick center</button> <button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="calib_open()">Calibrate stick center</button>
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range()">Calibrate stick range</button> <button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range()">Calibrate stick range</button>
<button type="button" class="btn btn-primary ds-btn" onclick="ds5_finetune()" id="ds5finetune"><span class="ds-i18n">Finetune stick calibration</span> <i id="ds-i18n">(beta)</i></button>
<hr>
<button id="savechanges" type="button" class="btn btn-success ds-btn ds-i18n" onclick="multi_flash()" id="resetBtn">Save changes permanently</button> <button id="savechanges" type="button" class="btn btn-success ds-btn ds-i18n" onclick="multi_flash()" id="resetBtn">Save changes permanently</button>
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reboot controller</button> <button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reboot controller</button>
@ -225,6 +227,130 @@ dl.row dd { font-family: monospace; }
</div> </div>
<!-- Finetune Modal -->
<div class="modal fade" id="finetuneModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="finetuneModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg modal-fullscreen-lg-down">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5 ds-i18n" id="finetuneModalLabel">Finetune stick calibration</h1>
<button type="button" class="btn-close" aria-label="Close" onclick="finetune_cancel()"></button>
</div>
<div class="modal-body">
<p class="ds-i18n">This screen allows to finetune raw calibration data on your controller</p>
<div style="width: 100%; display: flex; justify-content: center;">
<div class="container-fluid">
<div class="row">
<div class="col col-lg-6 col-12">
<div class="card text-bg-light" >
<div class="card-header"><span class="ds-i18n">Left stick</span></div>
<div class="card-body">
<div class="container-fluid">
<div class="row">
<table>
<tr><td></td><td style="text-align: center;">
<input id="finetuneLT" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
<tr>
<td height="160px" style="vertical-align: middle; align: right;">
<input id="finetuneLL" type="number" class="form-control" min="0" max="65535" value="0">
</td>
<td><canvas id="finetuneStickCanvasL" width="150" height="150"></canvas></td>
<td height="160px" style="vertical-align: middle; align: left;">
<input id="finetuneLR" type="number" class="form-control" min="0" max="65535" value="0">
</td>
</tr>
<tr><td></td><td style="text-align: center;">
<input id="finetuneLB" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
</table>
</div>
<div class="row">
<div class="col"></div>
<div class="col col-auto">
<label for="finetuneLX" class="col-form-label ds-i18n">Center X</label>
</div>
<div class="col col-auto">
<input id="finetuneLX" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
<div class="row">
<div class="col"></div>
<div class="col-auto">
<label for="finetuneLY" class="col-form-label ds-i18n">Center Y</label>
</div>
<div class="col-auto">
<input id="finetuneLY" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
</div>
</div>
</div>
</div> <!-- col -->
<div class="col col-lg-6 col-12">
<div class="card text-bg-light" >
<div class="card-header"><span class="ds-i18n">Right stick</span></div>
<div class="card-body">
<div class="container-fluid">
<div class="row">
<table>
<tr><td></td><td style="text-align: center;">
<input id="finetuneRT" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
<tr>
<td height="160px" style="vertical-align: middle; align: right;">
<input id="finetuneRL" type="number" class="form-control" min="0" max="65535" value="0">
</td>
<td><canvas id="finetuneStickCanvasR" width="150" height="150"></canvas></td>
<td height="160px" style="vertical-align: middle; align: left;">
<input id="finetuneRR" type="number" class="form-control" min="0" max="65535" value="0">
</td>
</tr>
<tr><td></td><td style="text-align: center;">
<input id="finetuneRB" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
</table>
</div>
<div class="row">
<div class="col"></div>
<div class="col col-auto">
<label for="finetuneRX" class="col-form-label ds-i18n">Center X</label>
</div>
<div class="col col-auto">
<input id="finetuneRX" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
<div class="row">
<div class="col"></div>
<div class="col-auto">
<label for="finetuneRY" class="col-form-label ds-i18n">Center Y</label>
</div>
<div class="col-auto">
<input id="finetuneRY" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
</div>
</div>
</div>
</div> <!-- col -->
</div> <!-- row -->
</div>
</div>
</div>
<div class="modal-footer">
<button direction="button" class="btn btn-secondary ds-i18n" onclick="finetune_cancel()">Cancel</button>
<button type="button" class="btn btn-primary ds-i18n" onclick="finetune_save()">Save</button>
</div>
</div>
</div>
</div>
<!-- Welcome Modal --> <!-- Welcome Modal -->
<div class="modal fade" id="welcomeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="welcomeModalLabel" aria-hidden="true"> <div class="modal fade" id="welcomeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="welcomeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg"> <div class="modal-dialog modal-dialog-centered modal-lg">
@ -388,6 +514,30 @@ dl.row dd { font-family: monospace; }
</div> </div>
</div> </div>
<div class="modal fade" id="edgeModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title ds-i18n">Dualsense Edge Compatibility</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4" id="donateBody">
<p class="ds-i18n">The DualShock Calibration GUI does not currently support the DualSense Edge.</p>
<p class="ds-i18n">I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.</p>
<p><span class="ds-i18n">If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a</span>
<a href="https://paypal.me/alaincarlucci" target="_blank" class="text-body-secondary ds-i18n">donation</a>.</p>
<p class="ds-i18n">Thank you for your generosity and support!</p>
</div>
<div class="modal-footer">
<button onclick="window.open('https://paypal.me/alaincarlucci')" type="button" class="btn btn-success" data-bs-dismiss="modal">
<svg class="bi" width="18" height="18"><use xlink:href="#paypal"/></svg>&nbsp;&nbsp;<span class="ds-i18n">Support this project</span>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="donateModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true"> <div class="modal fade" id="donateModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered"> <div class="modal-dialog modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
@ -607,7 +757,7 @@ dl.row dd { font-family: monospace; }
<div class="container"> <div class="container">
<footer> <footer>
<div class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top" id="footbody"> <div class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top" id="footbody">
<p><a target="_blank" href="https://github.com/dualshock-tools/dualshock-tools.github.io/commits/main/"><span class="ds-i18n">Version</span> 1.9</a> (2025-01-05) - <a href="#" class="ds-i18n" onclick="show_donate_modal();">Support this project</a>&nbsp;<span id="authorMsg"></span></p> <p><a target="_blank" href="https://github.com/dualshock-tools/dualshock-tools.github.io/commits/main/"><span class="ds-i18n">Version</span> 2.0</a> (2025-01-18) - <a href="#" class="ds-i18n" onclick="show_donate_modal();">Support this project</a>&nbsp;<span id="authorMsg"></span></p>
<ul class="list-unstyled d-flex"> <ul class="list-unstyled d-flex">
<li class="ms-3"><a class="link-body-emphasis" href="mailto:ds4@the.al" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#mail"/></svg></a></li> <li class="ms-3"><a class="link-body-emphasis" href="mailto:ds4@the.al" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#mail"/></svg></a></li>

View File

@ -188,5 +188,20 @@
"Touchpad ID": "Touchpad ID", "Touchpad ID": "Touchpad ID",
"Bluetooth Address": "عنوان البلوتوث", "Bluetooth Address": "عنوان البلوتوث",
"Show all": "عرض الكل", "Show all": "عرض الكل",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -198,5 +198,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -200,5 +200,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -199,5 +199,20 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "Alles anzeigen", "Show all": "Alles anzeigen",
"Finetune stick calibration": "Feinabstimmung der Stick-Kalibrierung",
"(beta)": "(beta)",
"This screen allows to finetune raw calibration data on your controller": "Dieser Bildschirm ermöglicht die Feinabstimmung der Rohkalibrierungsdaten Ihres Controllers.",
"Left stick": "Linker Stick",
"Right stick": "Rechter Stick",
"Center X": "Zentrum X",
"Center Y": "Zentrum Y",
"Save": "Speichern",
"Cancel": "Abbrechen",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "Das DualShock-Kalibrierungstool unterstützt derzeit nicht den DualSense Edge.",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Ich arbeite aktiv daran, die Kompatibilität hinzuzufügen. Die größte Herausforderung besteht darin, Daten in die Stick-Module zu speichern.",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "Wenn Ihnen dieses Tool geholfen hat oder Sie möchten, dass die DualSense-Edge-Unterstützung schneller verfügbar ist, ziehen Sie bitte in Betracht, das Projekt mit einem Beitrag zu unterstützen",
"Thank you for your generosity and support!": "Vielen Dank für Ihre Großzügigkeit und Unterstützung!",
"": "" "": ""
} }

View File

@ -198,5 +198,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -196,5 +196,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -198,5 +198,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -198,5 +198,20 @@
"Bluetooth Address": "Indirizzo Bluetooth", "Bluetooth Address": "Indirizzo Bluetooth",
"Show all": "Mostra tutto", "Show all": "Mostra tutto",
"Finetune stick calibration": "Affina calibrazione joystick",
"(beta)": "(beta)",
"This screen allows to finetune raw calibration data on your controller": "Questa schermata perfette di affinare i dati grezzi di calibrazione del controller.",
"Left stick": "Levetta sinistra",
"Right stick": "Levetta destra",
"Center X": "Centro X",
"Center Y": "Centro Y",
"Save": "Salva",
"Cancel": "Annulla",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "DualShock Calibration GUI non supporta ancora il DualSense Edge.",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Sto lavorando attivamente per renderlo compatibile, ma la sfida principale rimane salvare i dati nei moduli degli stick.",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "Se questo strumento ti è stato utile o desideri che il supporto per il DualSense Edge arrivi più rapidamente, considera di supportare il progetto con una",
"Thank you for your generosity and support!": "Grazie per la tua generosità e per il supporto!",
"": "" "": ""
} }

View File

@ -199,5 +199,20 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "スティックの微調整キャリブレーション",
"(beta)": "(ベータ版)",
"This screen allows to finetune raw calibration data on your controller": "この画面ではコントローラーの生データを微調整できます。",
"Left stick": "左スティック",
"Right stick": "右スティック",
"Center X": "中心 X",
"Center Y": "中心 Y",
"Save": "保存",
"Cancel": "キャンセル",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "DualShockキャリブレーションGUIは現在、DualSense Edgeをサポートしていません。",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "互換性を追加するために取り組んでいますが、主な課題はスティックモジュールへのデータ保存です。",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "このツールが役に立った場合、またはDualSense Edgeのサポートを早く実現したい場合は、プロジェクトへの支援をご検討ください。",
"Thank you for your generosity and support!": "ご支援とご厚意に感謝します!",
"": "" "": ""
} }

View File

@ -199,5 +199,19 @@
"Bluetooth Address": "Bluetooth Address", "Bluetooth Address": "Bluetooth Address",
"Show all": "모두 보기", "Show all": "모두 보기",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -198,5 +198,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -201,5 +201,19 @@
"Bluetooth Address": "Adres Bluetooth", "Bluetooth Address": "Adres Bluetooth",
"Show all": "Pokaż wszystko", "Show all": "Pokaż wszystko",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -199,5 +199,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -199,5 +199,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -199,5 +199,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -199,5 +199,19 @@
"Bluetooth Address": "Bluetooth адреса", "Bluetooth Address": "Bluetooth адреса",
"Show all": "Показати все", "Show all": "Показати все",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -200,5 +200,19 @@
"Bluetooth Address": "蓝牙地址", "Bluetooth Address": "蓝牙地址",
"Show all": "显示全部信息", "Show all": "显示全部信息",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }

View File

@ -196,5 +196,19 @@
"Bluetooth Address": "", "Bluetooth Address": "",
"Show all": "", "Show all": "",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": "" "": ""
} }