Add joystick information

This commit is contained in:
dualshock-tools 2024-06-18 11:34:05 +02:00
parent d67e5003df
commit 7b13ccdd18
14 changed files with 493 additions and 119 deletions

299
core.js
View File

@ -780,7 +780,7 @@ async function disconnect() {
device.close();
device = null;
disable_btn = false;
reset_circularity();
$("#offlinebar").show();
$("#onlinebar").hide();
$("#mainmenu").hide();
@ -845,6 +845,8 @@ function gboot() {
window.addEventListener('DOMContentLoaded', function() {
lang_init();
welcome_modal();
$("#checkCircularity").on('change', on_circ_check_change);
on_circ_check_change();
});
if (!("hid" in navigator)) {
@ -873,6 +875,286 @@ function alloc_req(id, data=[]) {
return out;
}
var last_lx = 0, last_ly = 0, last_rx = 0, last_ry = 0;
var ll_updated = false;
var ll_data=new Array(48);
var rr_data=new Array(48);
var enable_circ_test = false;
function reset_circularity() {
for(i=0;i<ll_data.length;i++) ll_data[i] = 0;
for(i=0;i<rr_data.length;i++) rr_data[i] = 0;
enable_circ_test = false;
ll_updated = false;
$("#checkCircularity").prop('checked', false);
refresh_stick_pos();
}
function refresh_stick_pos() {
var c = document.getElementById("stickCanvas");
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();
// Right circle
ctx.beginPath();
ctx.arc(w - hb, yb, sz, 0, 2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.stroke();
function cc_to_color(cc) {
var dd = Math.sqrt(Math.pow((1.0 - cc), 2));
if(cc <= 1.0)
hh = 220 - 220 * Math.min(1.0, Math.max(0, (dd - 0.05)) / 0.1);
else
hh = (245 + (360-245) * Math.min(1.0, Math.max(0, (dd - 0.05)) / 0.15)) % 360;
return hh;
}
if(enable_circ_test) {
var MAX_N = ll_data.length;
for(i=0;i<MAX_N;i++) {
var kd = ll_data[i];
var kd1 = ll_data[(i+1) % ll_data.length];
if (kd === undefined || kd1 === undefined) continue;
var ka = i * Math.PI * 2 / MAX_N;
var ka1 = ((i+1)%MAX_N) * 2 * Math.PI / MAX_N;
var kx = Math.cos(ka) * kd;
var ky = Math.sin(ka) * kd;
var kx1 = Math.cos(ka1) * kd1;
var ky1 = Math.sin(ka1) * kd1;
ctx.beginPath();
ctx.moveTo(hb, yb);
ctx.lineTo(hb+kx*sz, yb+ky*sz);
ctx.lineTo(hb+kx1*sz, yb+ky1*sz);
ctx.lineTo(hb, yb);
ctx.closePath();
var cc = (kd + kd1) / 2;
var hh = cc_to_color(cc);
ctx.fillStyle = 'hsla(' + parseInt(hh) + ', 100%, 50%, 0.5)';
ctx.fill();
}
for(i=0;i<MAX_N;i++) {
var kd = rr_data[i];
var kd1 = rr_data[(i+1) % rr_data.length];
if (kd === undefined || kd1 === undefined) continue;
var ka = i * Math.PI * 2 / MAX_N;
var ka1 = ((i+1)%MAX_N) * 2 * Math.PI / MAX_N;
var kx = Math.cos(ka) * kd;
var ky = Math.sin(ka) * kd;
var kx1 = Math.cos(ka1) * kd1;
var ky1 = Math.sin(ka1) * kd1;
ctx.beginPath();
ctx.moveTo(w-hb, yb);
ctx.lineTo(w-hb+kx*sz, yb+ky*sz);
ctx.lineTo(w-hb+kx1*sz, yb+ky1*sz);
ctx.lineTo(w-hb, yb);
ctx.closePath();
var cc = (kd + kd1) / 2;
var hh = cc_to_color(cc);
ctx.fillStyle = 'hsla(' + parseInt(hh) + ', 100%, 50%, 0.5)';
ctx.fill();
}
}
ctx.strokeStyle = '#aaaaaa';
ctx.beginPath();
ctx.moveTo(hb-sz, yb);
ctx.lineTo(hb+sz, yb);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(w-hb-sz, yb);
ctx.lineTo(w-hb+sz, yb);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(hb, yb-sz);
ctx.lineTo(hb, yb+sz);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(w-hb, yb-sz);
ctx.lineTo(w-hb, yb+sz);
ctx.closePath();
ctx.stroke();
var plx = last_lx;
var ply = last_ly;
var prx = last_rx;
var pry = last_ry;
if(enable_circ_test) {
var pld = Math.sqrt(plx*plx + ply*ply);
var pla = (parseInt(Math.round(Math.atan2(ply, plx) * MAX_N / 2.0 / Math.PI)) + MAX_N) % MAX_N;
var old = ll_data[pla];
if(old === undefined) old = 0;
ll_data[pla] = Math.max(old, pld);
var prd = Math.sqrt(prx*prx + pry*pry);
var pra = (parseInt(Math.round(Math.atan2(pry, prx) * MAX_N / 2.0 / Math.PI)) + MAX_N) % MAX_N;
var old = rr_data[pra];
if(old === undefined) old = 0;
rr_data[pra] = Math.max(old, prd);
}
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();
ctx.beginPath();
ctx.arc(w-hb+prx*sz, yb+pry*sz,4, 0, 2*Math.PI);
ctx.fill();
ctx.beginPath();
ctx.moveTo(w-hb, yb);
ctx.lineTo(w-hb+prx*sz, yb+pry*sz);
ctx.stroke();
var lbl = "", lbx = "";
$("#lx-lbl").text(float_to_str(plx));
$("#ly-lbl").text(float_to_str(ply));
$("#rx-lbl").text(float_to_str(prx));
$("#ry-lbl").text(float_to_str(pry));
if(enable_circ_test) {
var ofl = 0, ofr = 0, lcounter = 0, rcounter = 0;
ofl = 0; ofr = 0;
for (i=0;i<ll_data.length;i++)
if(ll_data[i] > 0.2) {
lcounter += 1;
ofl += Math.pow(ll_data[i] - 1, 2);
}
for (i=0;i<rr_data.length;i++) {
if(ll_data[i] > 0.2) {
rcounter += 1;
ofr += Math.pow(rr_data[i] - 1, 2);
}
}
if(lcounter > 0)
ofl = Math.sqrt(ofl / lcounter) * 100;
if(rcounter > 0)
ofr = Math.sqrt(ofr / rcounter) * 100;
el = ofl.toFixed(2) + "%";
er = ofr.toFixed(2) + "%";
$("#el-lbl").text(el);
$("#er-lbl").text(er);
}
}
function circ_checked() { return $("#checkCircularity").is(':checked') }
function on_circ_check_change() {
enable_circ_test = circ_checked();
for(i=0;i<ll_data.length;i++) ll_data[i] = 0;
for(i=0;i<rr_data.length;i++) rr_data[i] = 0;
if(enable_circ_test) {
$("#circ-data").show();
} else {
$("#circ-data").hide();
}
refresh_stick_pos();
}
function float_to_str(f) {
if(f < 0.004 && f >= -0.004) return "+0.00";
return (f<0?"":"+") + f.toFixed(2);
}
var on_delay = false;
function timeout_ok() {
on_delay = false;
if(ll_updated)
refresh_stick_pos();
}
function refresh_sticks() {
if(on_delay)
return;
refresh_stick_pos();
on_delay = true;
setTimeout(timeout_ok, 20);
}
function process_ds4_input(data) {
var lx = data.data.getUint8(0);
var ly = data.data.getUint8(1);
var rx = data.data.getUint8(2);
var ry = data.data.getUint8(3);
var new_lx = Math.round((lx - 127.5) / 128 * 100) / 100;
var new_ly = Math.round((ly - 127.5) / 128 * 100) / 100;
var new_rx = Math.round((rx - 127.5) / 128 * 100) / 100;
var new_ry = Math.round((ry - 127.5) / 128 * 100) / 100;
if(last_lx != new_lx || last_ly != new_ly || last_rx != new_rx || last_ry != new_ry) {
last_lx = new_lx;
last_ly = new_ly;
last_rx = new_rx;
last_ry = new_ry;
ll_updated = true;
refresh_sticks();
}
}
function process_ds_input(data) {
var lx = data.data.getUint8(0);
var ly = data.data.getUint8(1);
var rx = data.data.getUint8(2);
var ry = data.data.getUint8(3);
var new_lx = Math.round((lx - 127.5) / 128 * 100) / 100;
var new_ly = Math.round((ly - 127.5) / 128 * 100) / 100;
var new_rx = Math.round((rx - 127.5) / 128 * 100) / 100;
var new_ry = Math.round((ry - 127.5) / 128 * 100) / 100;
if(last_lx != new_lx || last_ly != new_ly || last_rx != new_rx || last_ry != new_ry) {
last_lx = new_lx;
last_ly = new_ly;
last_rx = new_rx;
last_ry = new_ry;
ll_updated = true;
refresh_sticks();
}
}
async function continue_connection(report) {
try {
device.oninputreport = null;
@ -894,18 +1176,21 @@ async function continue_connection(report) {
connected = true;
mode = 1;
devname = l("Sony DualShock 4 V1");
device.oninputreport = process_ds4_input;
}
} else if(device.productId == 0x09cc) {
if(await ds4_info()) {
connected = true;
mode = 1;
devname = l("Sony DualShock 4 V2");
device.oninputreport = process_ds4_input;
}
} else if(device.productId == 0x0ce6) {
if(await ds5_info()) {
connected = true;
mode = 2;
devname = l("Sony DualSense");
device.oninputreport = process_ds_input;
}
} else if(device.productId == 0x0df2) {
if(await ds5_info()) {
@ -962,6 +1247,7 @@ async function continue_connection(report) {
async function connect() {
gj = crypto.randomUUID();
reset_circularity();
la("begin");
try {
$("#btnconnect").prop("disabled", true);
@ -1059,9 +1345,10 @@ async function multi_calib_sticks_begin(pc) {
async function multi_calib_sticks_end(pc) {
if(mode == 1)
return ds4_calibrate_sticks_end(pc);
await ds4_calibrate_sticks_end(pc);
else
return ds5_calibrate_sticks_end(pc);
await ds5_calibrate_sticks_end(pc);
on_circ_check_change();
}
async function multi_calib_sticks_sample() {
@ -1092,9 +1379,10 @@ async function multi_calibrate_range(perm_ch) {
async function multi_calibrate_range_on_close() {
if(mode == 1)
ds4_calibrate_range_end(last_perm_ch);
await ds4_calibrate_range_end(last_perm_ch);
else
ds5_calibrate_range_end(last_perm_ch);
await ds5_calibrate_range_end(last_perm_ch);
on_circ_check_change();
}
@ -1391,4 +1679,5 @@ function lang_translate(target_file, target_lang) {
}
$("#curLang").html(available_langs[target_lang]["name"]);
});
}

View File

@ -112,17 +112,68 @@
<br>
</div>
<div class="col-md-6 col-sm-12">
<div class="col-md-6 col-sm-12" style="min-width: 330px;">
<div class="vstack gap-2 p-2">
<button id="btnmcs2" type="button" class="btn btn-primary ds-btn ds-i18n" onclick="calib_open()">Calibrate stick center</button>
<div class="hstack gap-2">
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range(true)">Calibrate stick range (permanent)</button>
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range(false)">Calibrate stick range (temporary)</button>
<button type="button" class="ms-auto btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range(false)">Calibrate stick range (temporary)</button>
</div>
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reset controller</button>
<div class="card text-bg-light" >
<div class="card-header ds-i18n">Joystick Info</div>
<div class="vstack px-2">
<center>
<canvas id="stickCanvas" width="300" height="150"></canvas>
</center>
</div>
<div class="px-2">
<div class="hstack">
<div class="vstack" style="text-align: center;">
<span>LX:</span>
<pre id="lx-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span>LY:</span>
<pre id="ly-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span>RX:</span>
<pre id="rx-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span>RY:</span>
<pre id="ry-lbl" style="min-width: 80px;"></pre>
</div>
</div>
</div>
<div class="px-2">
<center>
<input class="form-check-input" type="checkbox" value="" id="checkCircularity">
<label class="form-check-label ds-i18n" for="checkCircularity">Check circularity</label>
<div class="hstack" id="circ-data">
<div class="vstack" style="text-align: center;">
<span class="ds-i18n">Err R:</span>
<pre id="el-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span class="ds-i18n">Err L:</span>
<pre id="er-lbl" style="min-width: 80px;"></pre>
</div>
</div>
</center>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<p class="ds-i18n">Sections below are not useful, just some debug infos or manual commands</p>
@ -457,7 +508,7 @@
<div class="container">
<footer>
<div class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top" id="footbody">
<p><span class="ds-i18n">Version</span> 1.1 (2024-06-02) - <a href="#" class="ds-i18n" onclick="show_donate_modal();">Support this project</a>&nbsp;<span id="authorMsg"></span></p>
<p><span class="ds-i18n">Version</span> 1.2 (2024-06-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">
<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

@ -155,14 +155,17 @@
"Translate this website in your language": "Преведете този уебсайт на ваш език",
", to help more people like you!": ", за да помогнете на повече хора като вас!",
"This website uses analytics to improve the service.": "Този уебсайт използва анализи за подобряване на услугата.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Модел на платката:",
"This feature is experimental.": "Тази функция е експериментална.",
"Please let me know if the board model of your controller is not detected correctly.": "Моля, уведомете ме, ако моделът на платката на вашия контролер не е разпознат правилно.",
"Board model detection thanks to": "Разпознаване на модела на платката благодарение на",
"Please connect the device using a USB cable.": "Моля, свържете устройството с USB кабел.",
"This DualSense controller has outdated firmware.": "Този контролер DualSense има остарял фърмуер.",
"Please update the firmware and try again.": "Моля, актуализирайте фърмуера и опитайте отново.",
"Joystick Info": "Информация за джойстика",
"Err R:": "Грешка Д:",
"Err L:": "Грешка Л:",
"Check circularity": "Проверка на кръговостта",
"": ""
}

View File

@ -155,14 +155,17 @@
"Translate this website in your language": "Übersetzen Sie diese Website in Ihre Sprache",
", to help more people like you!": ", um mehr Menschen wie Sie zu helfen!",
"This website uses analytics to improve the service.": "Diese Website verwendet Analytics, um den Service zu verbessern.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Platinentyp:",
"This feature is experimental.": "Diese Funktion ist experimentell.",
"Please let me know if the board model of your controller is not detected correctly.": "Bitte lassen Sie mich wissen, wenn das Platinentyp Ihres Controllers nicht korrekt erkannt wird.",
"Board model detection thanks to": "Platinentyp-Erkennung dank",
"Please connect the device using a USB cable.": "Bitte verbinden Sie das Gerät mit einem USB-Kabel.",
"This DualSense controller has outdated firmware.": "Dieser DualSense-Controller hat eine veraltete Firmware.",
"Please update the firmware and try again.": "Bitte aktualisieren Sie die Firmware und versuchen Sie es erneut.",
"Joystick Info": "Joystick-Informationen",
"Err R:": "Fehler R:",
"Err L:": "Fehler L:",
"Check circularity": "Kreisförmigkeit prüfen",
"": ""
}

View File

@ -155,14 +155,17 @@
"Translate this website in your language": "Traduz esta web en tu idioma",
", to help more people like you!": ", para que ayude mas personas como tu!",
"This website uses analytics to improve the service.": "Este sitio web utiliza análisis para mejorar el servicio.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Modelo de la placa:",
"This feature is experimental.": "Esta función es experimental.",
"Please let me know if the board model of your controller is not detected correctly.": "Por favor, avísame si el modelo de la placa de tu controlador no se detecta correctamente.",
"Board model detection thanks to": "Detección del modelo de la placa gracias a",
"Please connect the device using a USB cable.": "Por favor, conecta el dispositivo usando un cable USB.",
"This DualSense controller has outdated firmware.": "Este controlador DualSense tiene un firmware desactualizado.",
"Please update the firmware and try again.": "Por favor, actualiza el firmware y vuelve a intentarlo.",
"Joystick Info": "Información del joystick",
"Err R:": "Error D:",
"Err L:": "Error I:",
"Check circularity": "Comprobar circularidad",
"": ""
}

View File

@ -114,55 +114,55 @@
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Avant de procéder à un calibrage permanent, essayez de manière temporaire afin de vous assurer que tout fonctionne bien.",
"Understood": "Compris",
"Version": "Version",
"Frequently Asked Questions": "",
"Close": "",
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "",
"How does it work?": "",
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "",
"Through": "",
"this research": "",
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "",
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "",
"Does the calibration remain effective during gameplay on PS4/PS5?": "",
"Yes, if you tick the checkbox \"Write changes permanently in the controller\". In that case, the calibration is flashed directly in the controller firmware. This ensures that it remains in place regardless of the console it's connected to.": "",
"Is this an officially endorsed service?": "",
"No, this service is simply a creation by a DualShock enthusiast.": "",
"Does this website detects if a controller is a clone?": "",
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "",
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during a normal gameplay, not all the undocumented functionalities.": "",
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "",
"What development is in plan?": "",
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "",
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "",
"Implement calibration of L2/R2 triggers.": "",
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "",
"Enhance user interface (e.g. provide additional controller information)": "",
"Add support for recalibrating IMUs.": "",
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "",
"The second list contains new controllers I aim to support:": "",
"DualSense Edge": "",
"DualShock 3": "",
"XBox Controllers": "",
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "",
"I love this service, it helped me! How can I contribute?": "",
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "",
"Consider making a": "",
"donation": "",
"to support my late-night caffeine-fueled reverse-engineering efforts.": "",
"Ship me a controller you would love to add (send me an email for organization).": "",
"Translate this website in your language": "",
", to help more people like you!": "",
"Frequently Asked Questions": "Foire Aux Questions",
"Close": "Fermer",
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Bienvenue dans la section FAQ ! Vous trouverez ci-dessous les réponses aux questions les plus fréquemment posées sur ce site. Si vous avez d'autres questions ou besoin d'aide, n'hésitez pas à me contacter directement. Vos commentaires et questions sont toujours les bienvenus !",
"How does it work?": "Comment ça fonctionne ?",
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "En coulisses, ce site est le fruit d'une année d'efforts dédiés au rétro-engineering des manettes DualShock par un passionné anonyme sur Internet.",
"Through": "Grâce à",
"this research": "cette recherche",
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", il a été découvert qu'il existe des commandes non documentées sur les manettes DualShock qui peuvent être envoyées via USB et utilisées lors du processus d'assemblage en usine. Si ces commandes sont envoyées, la manette commence la recalibration des sticks analogiques.",
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Bien que le but principal de cette recherche n'était pas initialement axé sur la recalibration, il est devenu évident qu'un service offrant cette capacité pourrait grandement bénéficier à de nombreuses personnes. Et nous y voilà.",
"Does the calibration remain effective during gameplay on PS4/PS5?": "La calibration reste-t-elle efficace pendant le jeu sur PS4/PS5 ?",
"Yes, if you tick the checkbox \"Write changes permanently in the controller\". In that case, the calibration is flashed directly in the controller firmware. This ensures that it remains in place regardless of the console it's connected to.": "Oui, si vous cochez la case \"Écrire les modifications de manière permanente dans la manette\". Dans ce cas, la calibration est directement enregistrée dans le firmware de la manette. Cela garantit qu'elle reste en place, quelle que soit la console à laquelle elle est connectée.",
"Is this an officially endorsed service?": "S'agit-il d'un service officiellement approuvé ?",
"No, this service is simply a creation by a DualShock enthusiast.": "Non, ce service est simplement une création d'un passionné de DualShock.",
"Does this website detects if a controller is a clone?": "Ce site détecte-t-il si une manette est un clone ?",
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Oui, uniquement la DualShock4 pour le moment. Cela est arrivé parce que j'ai accidentellement acheté des clones, j'ai passé du temps à identifier les différences et j'ai ajouté cette fonctionnalité pour éviter les futures déceptions.",
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during a normal gameplay, not all the undocumented functionalities.": "Malheureusement, les clones ne peuvent pas être calibrés de toute façon, car ils ne copient que le comportement d'une DualShock4 pendant un jeu normal, pas toutes les fonctionnalités non documentées.",
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Si vous souhaitez étendre cette fonctionnalité de détection à la DualSense, veuillez m'envoyer une fausse DualSense et vous la verrez dans quelques semaines.",
"What development is in plan?": "Quels développements sont prévus?",
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Je maintiens deux listes de tâches séparées pour ce projet, bien que la priorité n'ait pas encore été établie.",
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "La première liste concerne l'amélioration du support pour les manettes DualShock4 et DualSense :",
"Implement calibration of L2/R2 triggers.": "Mettre en œuvre la calibration des gâchettes L2/R2.",
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Améliorer la détection des clones, particulièrement bénéfique pour ceux qui cherchent à acheter des manettes d'occasion avec une assurance d'authenticité.",
"Enhance user interface (e.g. provide additional controller information)": "Améliorer l'interface utilisateur (par exemple, fournir des informations supplémentaires sur la manette)",
"Add support for recalibrating IMUs.": "Ajouter le support pour recalibrer les IMU.",
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "De plus, explorer la possibilité de réanimer les manettes DualShock non fonctionnelles (discussion supplémentaire disponible sur Discord pour les parties intéressées).",
"The second list contains new controllers I aim to support:": "La deuxième liste contient les nouvelles manettes que je vise à supporter:",
"DualSense Edge": "DualSense Edge",
"DualShock 3": "DualShock 3",
"XBox Controllers": "Manettes XBox",
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Chacune de ces tâches présente un immense intérêt et un investissement de temps significatif. Pour donner un contexte, supporter une nouvelle manette nécessite généralement 6 à 12 mois de recherche à plein temps, avec un peu de chance.",
"I love this service, it helped me! How can I contribute?": "J'adore ce service, il m'a aidé! Comment puis-je contribuer?",
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Je suis ravi d'apprendre que vous avez trouvé cela utile ! Si vous êtes intéressé à contribuer, voici quelques façons dont vous pouvez m'aider:",
"Consider making a": "Envisagez de faire un",
"donation": "don",
"to support my late-night caffeine-fueled reverse-engineering efforts.": "pour soutenir mes efforts de rétro-engineering alimentés par la caféine tard dans la nuit.",
"Ship me a controller you would love to add (send me an email for organization).": "Envoyez-moi une manette que vous aimeriez ajouter (envoyez-moi un e-mail pour l'organisation).",
"Translate this website in your language": "Traduisez ce site dans votre langue",
", to help more people like you!": ", pour aider plus de gens comme vous !",
"This website uses analytics to improve the service.": "Ce site utilise des analyses pour améliorer le service.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Modèle de carte:",
"This feature is experimental.": "Cette fonctionnalité est expérimentale.",
"Please let me know if the board model of your controller is not detected correctly.": "Veuillez me faire savoir si le modèle de la carte de votre manette n'est pas détecté correctement.",
"Board model detection thanks to": "Détection du modèle de la carte grâce à",
"Please connect the device using a USB cable.": "Veuillez connecter l'appareil à l'aide d'un câble USB.",
"This DualSense controller has outdated firmware.": "Cette manette DualSense a un firmware obsolète.",
"Please update the firmware and try again.": "Veuillez mettre à jour le firmware et réessayer.",
"Joystick Info": "Infos Joystick",
"Err R:": "Err D:",
"Err L:": "Err G:",
"Check circularity": "Vérifier la circularité",
"": ""
}

View File

@ -155,14 +155,16 @@
"Translate this website in your language": "Fordítsd le ezt a webhelyet a saját nyelvedre",
", to help more people like you!": ", hogy több hozzád hasonló embernek segítsen!",
"This website uses analytics to improve the service.": "Ez a weboldal analitikát használ a szolgáltatás javításához.",
"Board Model:": "Alaplap verzió",
"This feature is experimental.": "Ez egy kisérleti funkció",
"Please let me know if the board model of your controller is not detected correctly.": "Kérlek értesítsd a fejlesztőt, ha az alaplap verziója nem egyezik meg a felimert verzióval!",
"Board model detection thanks to": "Az alaplapfelismerési funkciőért köszönet neki:",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Please connect the device using a USB cable.": "Kérjük, csatlakoztassa az eszközt USB-kábellel.",
"This DualSense controller has outdated firmware.": "Ennek a DualSense vezérlőnek elavult a firmware-e.",
"Please update the firmware and try again.": "Kérjük, frissítse a firmware-t, és próbálja újra.",
"Joystick Info": "Joystick Információ",
"Err R:": "Hiba J:",
"Err L:": "Hiba B:",
"Check circularity": "Ellenőrizze a körkörösséget",
"": ""
}

View File

@ -155,7 +155,6 @@
"Translate this website in your language": "Traduci questo sito web nella tua lingua",
", to help more people like you!": ", per aiutare più persone come te!",
"This website uses analytics to improve the service.": "Questo sito web utilizza analytics per migliorare il servizio.",
"Board Model:": "Modello scheda:",
"This feature is experimental.": "Questa funzionalità è sperimentale.",
"Please let me know if the board model of your controller is not detected correctly.": "Scrivimi se il modello della scheda del tuo controller non viene riconosciuto correttamente.",
@ -163,6 +162,10 @@
"Please connect the device using a USB cable.": "Connetti il controller usando un cavo USB.",
"This DualSense controller has outdated firmware.": "Questo controller DualSense ha un firmware non aggiornato.",
"Please update the firmware and try again.": "Aggiorna il firmware e riprova.",
"Joystick Info": "Informazioni sui Joystick",
"Err R:": "Err Dx:",
"Err L:": "Err Sx:",
"Check circularity": "Controlla circolarità",
"": ""
}

View File

@ -156,14 +156,17 @@
", to help more people like you!": "、あなたのような多くの人々を助けるために!",
"This website uses analytics to improve the service.": "このウェブサイトはサービスを向上させるためにアナリティクスを使用しています。",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "基板モデル:",
"This feature is experimental.": "この機能は実験的です。",
"Please let me know if the board model of your controller is not detected correctly.": "コントローラーの基板モデルが正しく検出されない場合はお知らせください。",
"Board model detection thanks to": "基板モデルの検出には感謝します",
"Please connect the device using a USB cable.": "デバイスをUSBケーブルで接続してください。",
"This DualSense controller has outdated firmware.": "このDualSenseコントローラーのファームウェアは古くなっています。",
"Please update the firmware and try again.": "ファームウェアを更新してから再試行してください。",
"Joystick Info": "ジョイスティック情報",
"Err R:": "エラー 右:",
"Err L:": "エラー 左:",
"Check circularity": "円形を確認",
"": ""
}

View File

@ -164,6 +164,10 @@
"Please connect the device using a USB cable.": "Proszę podłącz urządzenie przy pomocy kabla USB.",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Joystick Info": "",
"Err R:": "",
"Err L:": "",
"Check circularity": "",
"": ""
}

View File

@ -156,14 +156,17 @@
", to help more people like you!": ", para ajudar mais pessoas como você!",
"This website uses analytics to improve the service.": "Este site utiliza análises para melhorar o serviço.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Modelo da Placa:",
"This feature is experimental.": "Esta funcionalidade é experimental.",
"Please let me know if the board model of your controller is not detected correctly.": "Por favor, avise-me se o modelo da placa do seu controle não for detectado corretamente.",
"Board model detection thanks to": "Detecção do modelo da placa graças a",
"Please connect the device using a USB cable.": "Por favor, conecte o dispositivo usando um cabo USB.",
"This DualSense controller has outdated firmware.": "Este controle DualSense possui um firmware desatualizado.",
"Please update the firmware and try again.": "Por favor, atualize o firmware e tente novamente.",
"Joystick Info": "Informações do Joystick",
"Err R:": "Erro D:",
"Err L:": "Erro E:",
"Check circularity": "Verificar circularidade",
"": ""
}

View File

@ -156,14 +156,17 @@
", to help more people like you!": ", чтобы помочь большему числу людей, подобных вам!",
"This website uses analytics to improve the service.": "Этот сайт использует аналитику для улучшения сервиса.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Модель платы:",
"This feature is experimental.": "Эта функция экспериментальная.",
"Please let me know if the board model of your controller is not detected correctly.": "Пожалуйста, дайте знать, если модель платы вашего контроллера определена неправильно.",
"Board model detection thanks to": "Определение модели платы благодаря",
"Please connect the device using a USB cable.": "Пожалуйста, подключите устройство с помощью USB-кабеля.",
"This DualSense controller has outdated firmware.": "Прошивка этого контроллера DualSense устарела.",
"Please update the firmware and try again.": "Пожалуйста, обновите прошивку и попробуйте снова.",
"Joystick Info": "Информация о джойстике",
"Err R:": "Ошибка П:",
"Err L:": "Ошибка Л:",
"Check circularity": "Проверить округлость",
"": ""
}

View File

@ -156,14 +156,17 @@
", to help more people like you!": ", sizin gibi daha fazla insanın faydalanması için!",
"This website uses analytics to improve the service.": "Bu web sitesi hizmeti iyileştirmek için analiz kullanıyor.",
"Board Model:": "",
"This feature is experimental.": "",
"Please let me know if the board model of your controller is not detected correctly.": "",
"Board model detection thanks to": "",
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Board Model:": "Kart Modeli:",
"This feature is experimental.": "Bu özellik deneysel.",
"Please let me know if the board model of your controller is not detected correctly.": "Denetleyicinizin kart modeli doğru tespit edilmezse lütfen bana bildirin.",
"Board model detection thanks to": "Kart modeli tespiti sayesinde",
"Please connect the device using a USB cable.": "Lütfen cihazı bir USB kablosu kullanarak bağlayın.",
"This DualSense controller has outdated firmware.": "Bu DualSense denetleyicisinin yazılımı güncel değil.",
"Please update the firmware and try again.": "Lütfen yazılımı güncelleyin ve tekrar deneyin.",
"Joystick Info": "Joystick Bilgisi",
"Err R:": "Hata D:",
"Err L:": "Hata S:",
"Check circularity": "Daireselliği kontrol et",
"": ""
}

View File

@ -164,6 +164,10 @@
"Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "",
"Joystick Info": "",
"Err R:": "",
"Err L:": "",
"Check circularity": "",
"": ""
}