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.close();
device = null; device = null;
disable_btn = false; disable_btn = false;
reset_circularity();
$("#offlinebar").show(); $("#offlinebar").show();
$("#onlinebar").hide(); $("#onlinebar").hide();
$("#mainmenu").hide(); $("#mainmenu").hide();
@ -845,6 +845,8 @@ function gboot() {
window.addEventListener('DOMContentLoaded', function() { window.addEventListener('DOMContentLoaded', function() {
lang_init(); lang_init();
welcome_modal(); welcome_modal();
$("#checkCircularity").on('change', on_circ_check_change);
on_circ_check_change();
}); });
if (!("hid" in navigator)) { if (!("hid" in navigator)) {
@ -873,6 +875,286 @@ function alloc_req(id, data=[]) {
return out; 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) { async function continue_connection(report) {
try { try {
device.oninputreport = null; device.oninputreport = null;
@ -894,18 +1176,21 @@ async function continue_connection(report) {
connected = true; connected = true;
mode = 1; mode = 1;
devname = l("Sony DualShock 4 V1"); devname = l("Sony DualShock 4 V1");
device.oninputreport = process_ds4_input;
} }
} else if(device.productId == 0x09cc) { } else if(device.productId == 0x09cc) {
if(await ds4_info()) { if(await ds4_info()) {
connected = true; connected = true;
mode = 1; mode = 1;
devname = l("Sony DualShock 4 V2"); devname = l("Sony DualShock 4 V2");
device.oninputreport = process_ds4_input;
} }
} else if(device.productId == 0x0ce6) { } else if(device.productId == 0x0ce6) {
if(await ds5_info()) { if(await ds5_info()) {
connected = true; connected = true;
mode = 2; mode = 2;
devname = l("Sony DualSense"); devname = l("Sony DualSense");
device.oninputreport = process_ds_input;
} }
} else if(device.productId == 0x0df2) { } else if(device.productId == 0x0df2) {
if(await ds5_info()) { if(await ds5_info()) {
@ -962,6 +1247,7 @@ async function continue_connection(report) {
async function connect() { async function connect() {
gj = crypto.randomUUID(); gj = crypto.randomUUID();
reset_circularity();
la("begin"); la("begin");
try { try {
$("#btnconnect").prop("disabled", true); $("#btnconnect").prop("disabled", true);
@ -1059,9 +1345,10 @@ async function multi_calib_sticks_begin(pc) {
async function multi_calib_sticks_end(pc) { async function multi_calib_sticks_end(pc) {
if(mode == 1) if(mode == 1)
return ds4_calibrate_sticks_end(pc); await ds4_calibrate_sticks_end(pc);
else else
return ds5_calibrate_sticks_end(pc); await ds5_calibrate_sticks_end(pc);
on_circ_check_change();
} }
async function multi_calib_sticks_sample() { async function multi_calib_sticks_sample() {
@ -1092,9 +1379,10 @@ async function multi_calibrate_range(perm_ch) {
async function multi_calibrate_range_on_close() { async function multi_calibrate_range_on_close() {
if(mode == 1) if(mode == 1)
ds4_calibrate_range_end(last_perm_ch); await ds4_calibrate_range_end(last_perm_ch);
else 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"]); $("#curLang").html(available_langs[target_lang]["name"]);
}); });
} }

View File

@ -112,16 +112,67 @@
<br> <br>
</div> </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"> <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> <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"> <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(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> </div>
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reset controller</button> <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>
</div> </div>
<div class="row"> <div class="row">
@ -457,7 +508,7 @@
<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><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"> <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

@ -155,14 +155,17 @@
"Translate this website in your language": "Преведете този уебсайт на ваш език", "Translate this website in your language": "Преведете този уебсайт на ваш език",
", to help more people like you!": ", за да помогнете на повече хора като вас!", ", to help more people like you!": ", за да помогнете на повече хора като вас!",
"This website uses analytics to improve the service.": "Този уебсайт използва анализи за подобряване на услугата.", "This website uses analytics to improve the service.": "Този уебсайт използва анализи за подобряване на услугата.",
"Board Model:": "Модел на платката:",
"Board Model:": "", "This feature is experimental.": "Тази функция е експериментална.",
"This feature is experimental.": "", "Please let me know if the board model of your controller is not detected correctly.": "Моля, уведомете ме, ако моделът на платката на вашия контролер не е разпознат правилно.",
"Please let me know if the board model of your controller is not detected correctly.": "", "Board model detection thanks to": "Разпознаване на модела на платката благодарение на",
"Board model detection thanks to": "", "Please connect the device using a USB cable.": "Моля, свържете устройството с USB кабел.",
"Please connect the device using a USB cable.": "", "This DualSense controller has outdated firmware.": "Този контролер DualSense има остарял фърмуер.",
"This DualSense controller has outdated firmware.": "", "Please update the firmware and try again.": "Моля, актуализирайте фърмуера и опитайте отново.",
"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", "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!", ", 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.", "This website uses analytics to improve the service.": "Diese Website verwendet Analytics, um den Service zu verbessern.",
"Board Model:": "Platinentyp:",
"Board Model:": "", "This feature is experimental.": "Diese Funktion ist experimentell.",
"This feature is experimental.": "", "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.",
"Please let me know if the board model of your controller is not detected correctly.": "", "Board model detection thanks to": "Platinentyp-Erkennung dank",
"Board model detection thanks to": "", "Please connect the device using a USB cable.": "Bitte verbinden Sie das Gerät mit einem USB-Kabel.",
"Please connect the device using a USB cable.": "", "This DualSense controller has outdated firmware.": "Dieser DualSense-Controller hat eine veraltete Firmware.",
"This DualSense controller has outdated firmware.": "", "Please update the firmware and try again.": "Bitte aktualisieren Sie die Firmware und versuchen Sie es erneut.",
"Please update the firmware and try again.": "", "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", "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!", ", 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.", "This website uses analytics to improve the service.": "Este sitio web utiliza análisis para mejorar el servicio.",
"Board Model:": "Modelo de la placa:",
"Board Model:": "", "This feature is experimental.": "Esta función es experimental.",
"This feature is 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.",
"Please let me know if the board model of your controller is not detected correctly.": "", "Board model detection thanks to": "Detección del modelo de la placa gracias a",
"Board model detection thanks to": "", "Please connect the device using a USB cable.": "Por favor, conecta el dispositivo usando un cable USB.",
"Please connect the device using a USB cable.": "", "This DualSense controller has outdated firmware.": "Este controlador DualSense tiene un firmware desactualizado.",
"This DualSense controller has outdated firmware.": "", "Please update the firmware and try again.": "Por favor, actualiza el firmware y vuelve a intentarlo.",
"Please update the firmware and try again.": "", "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.", "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", "Understood": "Compris",
"Version": "Version", "Version": "Version",
"Frequently Asked Questions": "Foire Aux Questions",
"Frequently Asked Questions": "", "Close": "Fermer",
"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!": "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 !",
"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?": "Comment ça fonctionne ?",
"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.": "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.",
"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": "Grâce à",
"Through": "", "this research": "cette recherche",
"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.": ", 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.",
", 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.": "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à.",
"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?": "La calibration reste-t-elle efficace pendant le jeu sur PS4/PS5 ?",
"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.": "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.",
"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?": "S'agit-il d'un service officiellement approuvé ?",
"Is this an officially endorsed service?": "", "No, this service is simply a creation by a DualShock enthusiast.": "Non, ce service est simplement une création d'un passionné de DualShock.",
"No, this service is simply a creation by a DualShock enthusiast.": "", "Does this website detects if a controller is a clone?": "Ce site détecte-t-il si une manette est un clone ?",
"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.": "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.",
"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.": "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.",
"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.": "Si vous souhaitez étendre cette fonctionnalité de détection à la DualSense, veuillez m'envoyer une fausse DualSense et vous la verrez dans quelques semaines.",
"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?": "Quels développements sont prévus?",
"What development is in plan?": "", "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 :",
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "", "Implement calibration of L2/R2 triggers.": "Mettre en œuvre la calibration des gâchettes L2/R2.",
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "", "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é.",
"Implement calibration of L2/R2 triggers.": "", "Enhance user interface (e.g. provide additional controller information)": "Améliorer l'interface utilisateur (par exemple, fournir des informations supplémentaires sur la manette)",
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "", "Add support for recalibrating IMUs.": "Ajouter le support pour recalibrer les IMU.",
"Enhance user interface (e.g. provide additional controller information)": "", "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).",
"Add support for recalibrating IMUs.": "", "The second list contains new controllers I aim to support:": "La deuxième liste contient les nouvelles manettes que je vise à supporter:",
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "", "DualSense Edge": "DualSense Edge",
"The second list contains new controllers I aim to support:": "", "DualShock 3": "DualShock 3",
"DualSense Edge": "", "XBox Controllers": "Manettes XBox",
"DualShock 3": "", "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.",
"XBox Controllers": "", "I love this service, it helped me! How can I contribute?": "J'adore ce service, il m'a aidé! Comment puis-je contribuer?",
"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'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:",
"I love this service, it helped me! How can I contribute?": "", "Consider making a": "Envisagez de faire un",
"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:": "", "donation": "don",
"Consider making a": "", "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.",
"donation": "", "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).",
"to support my late-night caffeine-fueled reverse-engineering efforts.": "", "Translate this website in your language": "Traduisez ce site dans votre langue",
"Ship me a controller you would love to add (send me an email for organization).": "", ", to help more people like you!": ", pour aider plus de gens comme vous !",
"Translate this website in your language": "",
", to help more people like you!": "",
"This website uses analytics to improve the service.": "Ce site utilise des analyses pour améliorer le service.", "This website uses analytics to improve the service.": "Ce site utilise des analyses pour améliorer le service.",
"Board Model:": "Modèle de carte:",
"Board Model:": "", "This feature is experimental.": "Cette fonctionnalité est expérimentale.",
"This feature is experimental.": "", "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.",
"Please let me know if the board model of your controller is not detected correctly.": "", "Board model detection thanks to": "Détection du modèle de la carte grâce à",
"Board model detection thanks to": "", "Please connect the device using a USB cable.": "Veuillez connecter l'appareil à l'aide d'un câble USB.",
"Please connect the device using a USB cable.": "", "This DualSense controller has outdated firmware.": "Cette manette DualSense a un firmware obsolète.",
"This DualSense controller has outdated firmware.": "", "Please update the firmware and try again.": "Veuillez mettre à jour le firmware et réessayer.",
"Please update the firmware and try again.": "", "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", "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!", ", 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.", "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ó", "Board Model:": "Alaplap verzió",
"This feature is experimental.": "Ez egy kisérleti funkció", "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!", "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:", "Board model detection thanks to": "Az alaplapfelismerési funkciőért köszönet neki:",
"Please connect the device using a USB cable.": "Kérjük, csatlakoztassa az eszközt USB-kábellel.",
"Please connect the device using a USB cable.": "", "This DualSense controller has outdated firmware.": "Ennek a DualSense vezérlőnek elavult a firmware-e.",
"This DualSense controller has outdated firmware.": "", "Please update the firmware and try again.": "Kérjük, frissítse a firmware-t, és próbálja újra.",
"Please update the firmware and try again.": "", "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", "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!", ", 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.", "This website uses analytics to improve the service.": "Questo sito web utilizza analytics per migliorare il servizio.",
"Board Model:": "Modello scheda:", "Board Model:": "Modello scheda:",
"This feature is experimental.": "Questa funzionalità è sperimentale.", "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.", "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.", "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.", "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.", "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!": "、あなたのような多くの人々を助けるために!", ", to help more people like you!": "、あなたのような多くの人々を助けるために!",
"This website uses analytics to improve the service.": "このウェブサイトはサービスを向上させるためにアナリティクスを使用しています。", "This website uses analytics to improve the service.": "このウェブサイトはサービスを向上させるためにアナリティクスを使用しています。",
"Board Model:": "", "Board Model:": "基板モデル:",
"This feature is experimental.": "", "This feature is experimental.": "この機能は実験的です。",
"Please let me know if the board model of your controller is not detected correctly.": "", "Please let me know if the board model of your controller is not detected correctly.": "コントローラーの基板モデルが正しく検出されない場合はお知らせください。",
"Board model detection thanks to": "", "Board model detection thanks to": "基板モデルの検出には感謝します",
"Please connect the device using a USB cable.": "", "Please connect the device using a USB cable.": "デバイスをUSBケーブルで接続してください。",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "このDualSenseコントローラーのファームウェアは古くなっています。",
"Please update the firmware and try again.": "", "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.", "Please connect the device using a USB cable.": "Proszę podłącz urządzenie przy pomocy kabla USB.",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "", "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ê!", ", 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.", "This website uses analytics to improve the service.": "Este site utiliza análises para melhorar o serviço.",
"Board Model:": "", "Board Model:": "Modelo da Placa:",
"This feature is experimental.": "", "This feature is experimental.": "Esta funcionalidade é experimental.",
"Please let me know if the board model of your controller is not detected correctly.": "", "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": "", "Board model detection thanks to": "Detecção do modelo da placa graças a",
"Please connect the device using a USB cable.": "", "Please connect the device using a USB cable.": "Por favor, conecte o dispositivo usando um cabo USB.",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "Este controle DualSense possui um firmware desatualizado.",
"Please update the firmware and try again.": "", "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!": ", чтобы помочь большему числу людей, подобных вам!", ", to help more people like you!": ", чтобы помочь большему числу людей, подобных вам!",
"This website uses analytics to improve the service.": "Этот сайт использует аналитику для улучшения сервиса.", "This website uses analytics to improve the service.": "Этот сайт использует аналитику для улучшения сервиса.",
"Board Model:": "", "Board Model:": "Модель платы:",
"This feature is experimental.": "", "This feature is experimental.": "Эта функция экспериментальная.",
"Please let me know if the board model of your controller is not detected correctly.": "", "Please let me know if the board model of your controller is not detected correctly.": "Пожалуйста, дайте знать, если модель платы вашего контроллера определена неправильно.",
"Board model detection thanks to": "", "Board model detection thanks to": "Определение модели платы благодаря",
"Please connect the device using a USB cable.": "", "Please connect the device using a USB cable.": "Пожалуйста, подключите устройство с помощью USB-кабеля.",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "Прошивка этого контроллера DualSense устарела.",
"Please update the firmware and try again.": "", "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!", ", 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.", "This website uses analytics to improve the service.": "Bu web sitesi hizmeti iyileştirmek için analiz kullanıyor.",
"Board Model:": "", "Board Model:": "Kart Modeli:",
"This feature is experimental.": "", "This feature is experimental.": "Bu özellik deneysel.",
"Please let me know if the board model of your controller is not detected correctly.": "", "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": "", "Board model detection thanks to": "Kart modeli tespiti sayesinde",
"Please connect the device using a USB cable.": "", "Please connect the device using a USB cable.": "Lütfen cihazı bir USB kablosu kullanarak bağlayın.",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "Bu DualSense denetleyicisinin yazılımı güncel değil.",
"Please update the firmware and try again.": "", "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.": "", "Please connect the device using a USB cable.": "",
"This DualSense controller has outdated firmware.": "", "This DualSense controller has outdated firmware.": "",
"Please update the firmware and try again.": "", "Please update the firmware and try again.": "",
"Joystick Info": "",
"Err R:": "",
"Err L:": "",
"Check circularity": "",
"": "" "": ""
} }