Compare commits

..

5 Commits
v2.10 ... v2.11

Author SHA1 Message Date
dualshock-tools
d1b6cd5c96 Bump to v2.11 2025-08-02 19:41:59 +02:00
dualshock-tools
390f2d97b6 Add translation for the latest patch 2025-08-02 19:41:13 +02:00
Mathias Malmqvist
4fe737aed1 Rename the new button 2025-08-02 19:38:43 +02:00
Mathias Malmqvist
53456b9663 Refactor to a single function that draw all stick diagrams, and add a zoom center mode 2025-08-02 19:38:43 +02:00
czrps
994501a614 Update tr_tr.json 2025-08-02 18:19:11 +02:00
23 changed files with 322 additions and 275 deletions

369
core.js
View File

@@ -1172,8 +1172,8 @@ function gboot() {
lang_init();
init_svg_colors();
welcome_modal();
$("#checkCircularity").on('change', on_circ_check_change);
on_circ_check_change();
$("input[name='displayMode']").on('change', on_stick_mode_change);
on_stick_mode_change();
});
if (!("hid" in navigator)) {
@@ -1328,43 +1328,12 @@ function ds5_finetune_update(name, plx, ply) {
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();
// Draw stick position with circle
draw_stick_position(ctx, hb, yb, sz, plx, ply, { enable_zoom_center: true });
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();
$("#"+ name + "x-lbl").text(float_to_str(plx));
$("#"+ name + "y-lbl").text(float_to_str(ply));
$("#"+ name + "x-lbl").text(float_to_str(plx, 3));
$("#"+ name + "y-lbl").text(float_to_str(ply, 3));
}
function finetune_close() {
@@ -1396,42 +1365,31 @@ 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;
ll_data.fill(0);
rr_data.fill(0);
enable_circ_test = false;
ll_updated = false;
$("#checkCircularity").prop('checked', false);
$("#normalMode").prop('checked', true);
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);
function draw_stick_position(ctx, center_x, center_y, sz, stick_x, stick_y, opts = {}) {
const { circularity_data = null, enable_zoom_center = false } = opts;
// Draw base circle
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.arc(center_x, center_y, sz, 0, 2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.stroke();
// Helper function for circularity visualization color
function cc_to_color(cc) {
var dd = Math.sqrt(Math.pow((1.0 - cc), 2));
const dd = Math.sqrt(Math.pow((1.0 - cc), 2));
let hh;
if(cc <= 1.0)
hh = 220 - 220 * Math.min(1.0, Math.max(0, (dd - 0.05)) / 0.1);
else
@@ -1439,148 +1397,161 @@ function refresh_stick_pos() {
return hh;
}
if(enable_circ_test) {
var MAX_N = ll_data.length;
// Draw circularity visualization if data provided
if (circularity_data?.length > 0) {
const MAX_N = circularity_data.length;
for(i=0;i<MAX_N;i++) {
var kd = ll_data[i];
var kd1 = ll_data[(i+1) % ll_data.length];
for(let i = 0; i < MAX_N; i++) {
const kd = circularity_data[i];
const kd1 = circularity_data[(i+1) % circularity_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;
const ka = i * Math.PI * 2 / MAX_N;
const 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;
const kx = Math.cos(ka) * kd;
const ky = Math.sin(ka) * kd;
const kx1 = Math.cos(ka1) * kd1;
const 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.moveTo(center_x, center_y);
ctx.lineTo(center_x+kx*sz, center_y+ky*sz);
ctx.lineTo(center_x+kx1*sz, center_y+ky1*sz);
ctx.lineTo(center_x, center_y);
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);
const cc = (kd + kd1) / 2;
const hh = cc_to_color(cc);
ctx.fillStyle = 'hsla(' + parseInt(hh) + ', 100%, 50%, 0.5)';
ctx.fill();
}
}
// Draw crosshairs
ctx.strokeStyle = '#aaaaaa';
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(hb-sz, yb);
ctx.lineTo(hb+sz, yb);
ctx.moveTo(center_x-sz, center_y);
ctx.lineTo(center_x+sz, center_y);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(w-hb-sz, yb);
ctx.lineTo(w-hb+sz, yb);
ctx.moveTo(center_x, center_y-sz);
ctx.lineTo(center_x, center_y+sz);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(hb, yb-sz);
ctx.lineTo(hb, yb+sz);
ctx.closePath();
ctx.stroke();
// Apply center zoom transformation if enabled
let display_x = stick_x;
let display_y = stick_y;
if (enable_zoom_center) {
const transformed = apply_center_zoom(stick_x, stick_y);
display_x = transformed.x;
display_y = transformed.y;
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);
// Draw light gray circle at 50% radius to show border of zoomed center
ctx.strokeStyle = '#d3d3d3'; // light gray
ctx.lineWidth = 1;
ctx.beginPath();
ctx.arc(center_x, center_y, sz * 0.5, 0, 2 * Math.PI);
ctx.stroke();
}
ctx.fillStyle = '#000000';
ctx.strokeStyle = '#000000';
// Draw stick line with variable thickness
// Calculate distance from center
const stick_distance = Math.sqrt(display_x*display_x + display_y*display_y);
const boundary_radius = 0.5; // 50% radius
// Determine if we need to draw a two-segment line
const use_two_segments = enable_zoom_center && stick_distance > boundary_radius;
if (use_two_segments) {
// Calculate boundary point
const boundary_x = (display_x / stick_distance) * boundary_radius;
const boundary_y = (display_y / stick_distance) * boundary_radius;
// First segment: thicker line from center to boundary
ctx.lineWidth = 3;
ctx.beginPath();
ctx.moveTo(center_x, center_y);
ctx.lineTo(center_x + boundary_x*sz, center_y + boundary_y*sz);
ctx.stroke();
// Second segment: thinner line from boundary to stick position
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(center_x + boundary_x*sz, center_y + boundary_y*sz);
ctx.lineTo(center_x + display_x*sz, center_y + display_y*sz);
ctx.stroke();
} else {
// Single line from center to stick position
ctx.lineWidth = enable_zoom_center ? 3 : 1;
ctx.beginPath();
ctx.moveTo(center_x, center_y);
ctx.lineTo(center_x + display_x*sz, center_y + display_y*sz);
ctx.stroke();
}
// Draw filled circle at stick position
ctx.beginPath();
ctx.arc(hb+plx*sz,yb+ply*sz,4, 0, 2*Math.PI);
ctx.arc(center_x+display_x*sz, center_y+display_y*sz, 3, 0, 2*Math.PI);
ctx.fill();
}
ctx.beginPath();
ctx.moveTo(hb, yb);
ctx.lineTo(hb+plx*sz, yb+ply*sz);
ctx.stroke();
function refresh_stick_pos() {
const c = document.getElementById("stickCanvas");
const ctx = c.getContext("2d");
const sz = 60;
const hb = 20 + sz;
const yb = 15 + sz;
const w = c.width;
ctx.clearRect(0, 0, c.width, c.height);
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));
let plx = last_lx;
let ply = last_ly;
let prx = last_rx;
let pry = last_ry;
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(rr_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;
[[plx, ply, ll_data], [prx, pry, rr_data]].forEach(([px, py, circularity_data]) => {
const MAX_N = circularity_data.length;
const pa = (parseInt(Math.round(Math.atan2(py, px) * MAX_N / 2.0 / Math.PI)) + MAX_N) % MAX_N;
const pd = Math.sqrt(px*px + py*py);
const old = circularity_data[pa] ?? 0;
circularity_data[pa] = Math.max(old, pd);
});
}
const enable_zoom_center = center_zoom_checked();
// Draw left stick
draw_stick_position(ctx, hb, yb, sz, plx, ply, {
circularity_data: enable_circ_test ? ll_data : null,
enable_zoom_center,
});
// Draw right stick
draw_stick_position(ctx, w-hb, yb, sz, prx, pry, {
circularity_data: enable_circ_test ? rr_data : null,
enable_zoom_center,
});
const precision = enable_zoom_center ? 3 : 2;
$("#lx-lbl").text(float_to_str(last_lx, precision));
$("#ly-lbl").text(float_to_str(last_ly, precision));
$("#rx-lbl").text(float_to_str(last_rx, precision));
$("#ry-lbl").text(float_to_str(last_ry, precision));
if(enable_circ_test) {
const olf = ll_data.reduce((acc, val) => val > 0.2 ? acc + Math.pow(val - 1, 2) : acc, 0);
const lcounter = ll_data.filter(val => val > 0.2).length;
const ofl = lcounter > 0 ? Math.sqrt(olf / lcounter) * 100 : 0;
const orf = rr_data.reduce((acc, val) => val > 0.2 ? acc + Math.pow(val - 1, 2) : acc, 0);
const rcounter = rr_data.filter(val => val > 0.2).length;
const ofr = rcounter > 0 ? Math.sqrt(orf / rcounter) * 100 : 0;
el = ofl.toFixed(2) + "%";
er = ofr.toFixed(2) + "%";
@@ -1611,12 +1582,38 @@ function refresh_stick_pos() {
}
}
function circ_checked() { return $("#checkCircularity").is(':checked') }
function circ_checked() { return $("#checkCircularityMode").is(':checked') }
function center_zoom_checked() { return $("#centerZoomMode").is(':checked') }
function on_circ_check_change() {
function apply_center_zoom(x, y) {
// Calculate distance from center
const distance = Math.sqrt(x * x + y * y);
// If distance is 0, return original values
if (distance === 0) {
return { x, y};
}
// Calculate angle
const angle = Math.atan2(y, x);
// Apply center zoom transformation
const new_distance =
distance <= 0.05
? (distance / 0.05) * 0.5 // 0 to 0.05 maps to 0 to 0.5 (half the radius)
: 0.5 + ((distance - 0.05) / 0.95) * 0.5 // 0.05 to 1.0 maps to 0.5 to 1.0 (other half)
// Convert back to x, y coordinates
return {
x: Math.cos(angle) * new_distance,
y: Math.sin(angle) * new_distance
};
}
function on_stick_mode_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;
ll_data.fill(0);
rr_data.fill(0);
if(enable_circ_test) {
$("#circ-data").show();
@@ -1626,9 +1623,9 @@ function on_circ_check_change() {
refresh_stick_pos();
}
function float_to_str(f) {
if(f < 0.004 && f >= -0.004) return "+0.00";
return (f<0?"":"+") + f.toFixed(2);
function float_to_str(f, precision = 2) {
if(precision <=2 && f < 0.004 && f >= -0.004) return "+0.00";
return (f<0?"":"+") + f.toFixed(precision);
}
var on_delay = false;
@@ -1880,10 +1877,10 @@ function process_ds4_input(data) {
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;
var new_lx = (lx - 127.5) / 128;
var new_ly = (ly - 127.5) / 128;
var new_rx = (rx - 127.5) / 128;
var new_ry = (ry - 127.5) / 128;
if(last_lx != new_lx || last_ly != new_ly || last_rx != new_rx || last_ry != new_ry) {
last_lx = new_lx;
@@ -1944,10 +1941,10 @@ function process_ds_input(data) {
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;
var new_lx = (lx - 127.5) / 128;
var new_ly = (ly - 127.5) / 128;
var new_rx = (rx - 127.5) / 128;
var new_ry = (ry - 127.5) / 128;
if(last_lx != new_lx || last_ly != new_ly || last_rx != new_rx || last_ry != new_ry) {
last_lx = new_lx;
@@ -2245,7 +2242,7 @@ async function multi_calib_sticks_end() {
await ds4_calibrate_sticks_end();
else
await ds5_calibrate_sticks_end();
on_circ_check_change();
on_stick_mode_change();
}
async function multi_calib_sticks_sample() {
@@ -2276,7 +2273,7 @@ async function multi_calibrate_range_on_close() {
await ds4_calibrate_range_end();
else
await ds5_calibrate_range_end();
on_circ_check_change();
on_stick_mode_change();
}

View File

@@ -297,8 +297,16 @@ dl.row dd { font-family: monospace; }
</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="btn-group mb-3" role="group" aria-label="Display mode options">
<input type="radio" class="btn-check" name="displayMode" id="normalMode" value="normal" checked>
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="normalMode">Normal</label>
<input type="radio" class="btn-check" name="displayMode" id="centerZoomMode" value="centerZoom">
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="centerZoomMode">10x zoom</label>
<input type="radio" class="btn-check" name="displayMode" id="checkCircularityMode" value="checkCircularity">
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="checkCircularityMode">Check circularity</label>
</div>
<div class="hstack" id="circ-data">
<div class="vstack" style="text-align: center;">
<span class="ds-i18n">Err L:</span>
@@ -943,7 +951,7 @@ dl.row dd { font-family: monospace; }
<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><a target="_blank" href="https://github.com/dualshock-tools/dualshock-tools.github.io/commits/main/"><span class="ds-i18n">Version</span> 2.10</a> (2025-08-02) - <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.11</a> (2025-08-02) - <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

@@ -187,6 +187,7 @@
"Bluetooth Address": "عنوان البلوتوث",
"Show all": "عرض الكل",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -219,6 +220,7 @@
"Left stick": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",

View File

@@ -161,6 +161,7 @@
"Save changes permanently": "Запазете промените постоянно",
"Reboot controller": "Рестартирайте контролера",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -207,6 +208,7 @@
"MCU Unique ID": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"PCBA ID": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",

View File

@@ -143,6 +143,7 @@
"Check circularity": "Zkontrolujte rozsah",
"(Dualsense) Will updating the firmware reset calibration?": "",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -198,6 +199,7 @@
"Midnight Black": "",
"More details and images": "",
"No.": "",
"Normal": "",
"Nova Pink": "",
"Only after you have done that, you click on \"Done\".": "",
"PCBA ID": "",

View File

@@ -221,7 +221,6 @@
"Nova Pink": "Nova Pink",
"PCBA ID": "PCBA ID",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "Forbind venligst en DualShock 4-, DualSense- eller DualSense Edge-controller til din computer, og tryk på Tilslut.",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
"Right Module Barcode": "Højre Modul Stregkode",
"SBL FW Version": "SBL FW Version",
"Spider FW Version": "Spider FW Version",
@@ -242,5 +241,8 @@
"here": "her",
"left module": "venstre modul",
"right module": "højre modul",
"10x zoom": "",
"Normal": "",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
"": ""
}

View File

@@ -187,6 +187,7 @@
"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!",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -218,6 +219,7 @@
"MCU Unique ID": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"PCBA ID": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",

View File

@@ -143,6 +143,7 @@
"Check circularity": "Comprobar circularidad",
"(Dualsense) Will updating the firmware reset calibration?": "",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -198,6 +199,7 @@
"Midnight Black": "",
"More details and images": "",
"No.": "",
"Normal": "",
"Nova Pink": "",
"Only after you have done that, you click on \"Done\".": "",
"PCBA ID": "",

View File

@@ -143,6 +143,7 @@
"Check circularity": "Vérifier la circularité",
"(Dualsense) Will updating the firmware reset calibration?": "",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -198,6 +199,7 @@
"Midnight Black": "",
"More details and images": "",
"No.": "",
"Normal": "",
"Nova Pink": "",
"Only after you have done that, you click on \"Done\".": "",
"PCBA ID": "",

View File

@@ -235,10 +235,12 @@
"Sterling Silver": "Sterling Silver",
"Volcanic Red": "Volcanic Red",
"White": "Fehér",
"10x zoom": "",
"Chroma Indigo": "",
"Chroma Pearl": "",
"Chroma Teal": "",
"Fortnite": "",
"Normal": "",
"Spider-Man 2": "",
"The Last of Us": "",
"": ""

View File

@@ -242,5 +242,7 @@
"Fortnite": "Fortnite",
"Spider-Man 2": "Spider-Man 2",
"The Last of Us": "The Last of Us",
"10x zoom": "Zoom 10x",
"Normal": "Normale",
"": ""
}

View File

@@ -155,6 +155,7 @@
"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!": "ご支援とご厚意に感謝します!",
"(Dualsense) Will updating the firmware reset calibration?": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -203,6 +204,7 @@
"Midnight Black": "",
"More details and images": "",
"No.": "",
"Normal": "",
"Nova Pink": "",
"Only after you have done that, you click on \"Done\".": "",
"PCBA ID": "",

View File

@@ -186,6 +186,7 @@
"Bluetooth Address": "Bluetooth Address",
"Show all": "모두 보기",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -218,6 +219,7 @@
"Left stick": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",

View File

@@ -143,6 +143,7 @@
"Check circularity": "Controleer de circulariteit",
"(Dualsense) Will updating the firmware reset calibration?": "",
"(beta)": "",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -198,6 +199,7 @@
"Midnight Black": "",
"More details and images": "",
"No.": "",
"Normal": "",
"Nova Pink": "",
"Only after you have done that, you click on \"Done\".": "",
"PCBA ID": "",

View File

@@ -242,5 +242,7 @@
"Fortnite": "Fortnite",
"Spider-Man 2": "Spider-Man 2",
"The Last of Us": "The Last of US",
"10x zoom": "",
"Normal": "",
"": ""
}

View File

@@ -161,6 +161,7 @@
"Save changes permanently": "Salvar alterações permanentemente.",
"Reboot controller": "Reiniciar controle",
"(beta)": "(beta)",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -207,6 +208,7 @@
"MCU Unique ID": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"PCBA ID": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",

View File

@@ -223,6 +223,7 @@
"Right Module Barcode": "Código de barras do módulo direito",
"left module": "módulo esquerdo",
"right module": "módulo direito",
"10x zoom": "",
"30th Anniversary": "",
"Astro Bot": "",
"Chroma Indigo": "",
@@ -235,6 +236,7 @@
"God of War Ragnarok": "",
"Grey Camouflage": "",
"Midnight Black": "",
"Normal": "",
"Nova Pink": "",
"Spider-Man 2": "",
"Starlight Blue": "",

View File

@@ -198,6 +198,7 @@
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Aktivno radim na dodavanju kompatibilnosti, glavni izazov je u čuvanju podataka u modulima džojstika.",
"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": "Ako vam je ovaj alat bio koristan ili želite da podrška za DualSense Edge stigne brže, razmislite o podršci projekta sa",
"Thank you for your generosity and support!": "Hvala vam na velikodušnosti i podršci!",
"10x zoom": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
@@ -223,6 +224,7 @@
"Left Module Barcode": "",
"Midnight Black": "",
"More details and images": "",
"Normal": "",
"Nova Pink": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",

View File

@@ -222,6 +222,7 @@
"here": "здесь",
"left module": "Левый модуль",
"right module": "Правый модуль",
"10x zoom": "",
"30th Anniversary": "",
"Astro Bot": "",
"Chroma Indigo": "",
@@ -234,6 +235,7 @@
"God of War Ragnarok": "",
"Grey Camouflage": "",
"Midnight Black": "",
"Normal": "",
"Nova Pink": "",
"Spider-Man 2": "",
"Starlight Blue": "",

View File

@@ -1,5 +1,5 @@
{
".authorMsg": "- Çeviri: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a> tarafından yapılmıştır.",
".authorMsg": "- Çeviri: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a> ve <a href='https://share.google/hCBJV5fFMbd5gJxxZ'>CzR PlayStation Teknik Servis</a> tarafından yapılmıştır.",
"DualShock Calibration GUI": "DualShock Kalibrasyon Arayüzü",
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Desteklenmeyen tarayıcı. Lütfen WebHID desteği olan bir web tarayıcısı kullanın (örneğin, Chrome).",
"Connect": "Bağlan",
@@ -85,7 +85,7 @@
"Have a nice day :)": "İyi günler! :)",
"Welcome to the Calibration GUI": "Kalibrasyon Arayüzü'ne hoş geldiniz",
"Just few things to know before you can start:": "Başlamadan önce bilmeniz gereken birkaç şey:",
"This website is not affiliated with Sony, PlayStation &amp; co.": "Bu web sitesi, Sony, PlayStation ve diğerleri ile ilişkili değildir.",
"This website is not affiliated with Sony, PlayStation & co.": "Bu web sitesi, Sony, PlayStation ve diğerleri ile ilişkili değildir.",
"This service is provided without warranty. Use at your own risk.": "Bu hizmet garanti olmaksızın sunulmaktadır. Kullanım kendi sorumluluğunuzdadır.",
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Denetleyicinin dahili bataryasını bağlı tutun ve iyi şarj edildiğinden emin olun. İşlemler sırasında pil biterse, denetleyici zarar görecektir ve kullanılamaz hale gelecektir.",
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Kalıcı kalibrasyonu yapmadan önce, her şeyin iyi çalıştığından emin olmak için geçici bir kalibrasyon yapın.",
@@ -143,7 +143,7 @@
"Check circularity": "Daireselliği kontrol et",
"Can I reset a permanent calibration to previous calibration?": "Kalıcı bir kalibrasyonu önceki kalibrasyona sıfırlayabilir miyim?",
"No.": "Hayır.",
"Can you overwrite a permanent calibration?": "Kalıcı bir kalibrasyonun üzerine yeniden yazabilirmiyiz",
"Can you overwrite a permanent calibration?": "Kalıcı bir kalibrasyonun üzerine yeniden yazabilir miyiz?",
"Yes. Simply do another permanent calibration.": "Evet. Sadece yeni bir kalıcı kalibrasyon yapın.",
"Does this software resolve stickdrift?": "Bu yazılım analog kaydırma sorununu çözer mi?",
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Analog kaydırması fiziksel bir arızadan kaynaklanır; kir, aşınmış potansiyometre veya bazı durumlarda aşınmış bir yaydan.",
@@ -160,86 +160,88 @@
"Error while saving changes:": "Değişiklikleri kaydederken hata:",
"Save changes permanently": "Değişiklikleri kalıcı olarak kaydet",
"Reboot controller": "Denetleyiciyi yeniden başlat",
"(beta)": "",
"30th Anniversary": "",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
"Astro Bot": "",
"Battery Barcode": "",
"Bluetooth Address": "",
"Calibration is being stored in the stick modules.": "",
"Cancel": "",
"Cannot lock": "",
"Cannot store data into": "",
"Cannot unlock": "",
"Center X": "",
"Center Y": "",
"Chroma Indigo": "",
"Chroma Pearl": "",
"Chroma Teal": "",
"Cobalt Blue": "",
"Color": "",
"Color detection thanks to": "",
"Controller Info": "",
"Cosmic Red": "",
"Debug Info": "",
"Debug buttons": "",
"DualSense Edge Calibration": "",
"FW Build Date": "",
"FW Series": "",
"FW Type": "",
"FW Update": "",
"FW Update Info": "",
"FW Version": "",
"Finetune stick calibration": "",
"For more info or help, feel free to reach out on Discord.": "",
"Fortnite": "",
"Galactic Purple": "",
"God of War Ragnarok": "",
"Grey Camouflage": "",
"HW Model": "",
"Hardware": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "",
"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": "",
"Left Module Barcode": "",
"Left stick": "",
"MCU Unique ID": "",
"Midnight Black": "",
"More details and images": "",
"Nova Pink": "",
"PCBA ID": "",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
"Right Module Barcode": "",
"Right stick": "",
"SBL FW Version": "",
"Save": "",
"Serial Number": "",
"Show all": "",
"Software": "",
"Spider FW Version": "",
"Spider-Man 2": "",
"Starlight Blue": "",
"Sterling Silver": "",
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "",
"Thank you for your generosity and support!": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"The Last of Us": "",
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "",
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Touchpad FW Version": "",
"Touchpad ID": "",
"VCM Left Barcode": "",
"VCM Right Barcode": "",
"Venom FW Version": "",
"Volcanic Red": "",
"We are not responsible for any damage caused by attempting this modification.": "",
"White": "",
"You can do this in two ways:": "",
"here": "",
"left module": "",
"right module": "",
"(beta)": "(beta)",
"30th Anniversary": "30. Yıl Dönümü",
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller": "<b>Harici olarak</b>: Denetleyiciyi açmadan görünür test noktasına doğrudan +1.8V uygulayarak",
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Dahili olarak</b>: +1.8V bir kaynaktan yazma koruma TP'sine bir kablo lehimleyerek.",
"Astro Bot": "Astro Bot",
"Battery Barcode": "Batarya Barkodu",
"Bluetooth Address": "Bluetooth Adresi",
"Calibration is being stored in the stick modules.": "Kalibrasyon, analog modüllerine kaydediliyor.",
"Cancel": "İptal",
"Cannot lock": "Kilitlenemiyor",
"Cannot store data into": "Veri kaydedilemiyor",
"Cannot unlock": "Kilit açılamıyor",
"Center X": "Merkez X",
"Center Y": "Merkez Y",
"Chroma Indigo": "Kroma İndigo",
"Chroma Pearl": "Kroma İnci",
"Chroma Teal": "Kroma Turkuaz",
"Cobalt Blue": "Kobalt Mavisi",
"Color": "Renk",
"Color detection thanks to": "Renk tespiti sayesinde",
"Controller Info": "Denetleyici Bilgisi",
"Cosmic Red": "Kozmik Kırmızı",
"Debug Info": "Hata Ayıklama Bilgisi",
"Debug buttons": "Hata ayıklama düğmeleri",
"DualSense Edge Calibration": "DualSense Edge Kalibrasyonu",
"FW Build Date": "FW Derleme Tarihi",
"FW Series": "FW Serisi",
"FW Type": "FW Türü",
"FW Update": "FW Güncellemesi",
"FW Update Info": "FW Güncelleme Bilgisi",
"FW Version": "FW Sürümü",
"Finetune stick calibration": "Analog kalibrasyonunu ince ayarla",
"For more info or help, feel free to reach out on Discord.": "Daha fazla bilgi veya yardım için Discord üzerinden ulaşabilirsiniz.",
"Fortnite": "Fortnite",
"Galactic Purple": "Galaktik Mor",
"God of War Ragnarok": "God of War Ragnarok",
"Grey Camouflage": "Gri Kamuflaj",
"HW Model": "HW Modeli",
"Hardware": "Donanım",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Uyumluluk ekleme üzerinde aktif olarak çalışıyorum, asıl zorluk verilerin analog modüllere kaydedilmesinde yatıyor.",
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Kalibrasyon kalıcı olarak kaydedilmezse, lütfen donanım modunun kablolamasını iki kez kontrol edin.",
"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": "Eğer bu araç size yardımcı olduysa veya DualSense Edge desteğinin daha hızlı gelmesini istiyorsanız, lütfen projeyi bir",
"Left Module Barcode": "Sol Modül Barkodu",
"Left stick": "Sol analog",
"MCU Unique ID": "MCU Benzersiz Kimliği",
"Midnight Black": "Gece Yarısı Siyahı",
"More details and images": "Daha fazla detay ve görsel",
"Nova Pink": "Nova Pembe",
"PCBA ID": "PCBA Kimliği",
"Please connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.": "Lütfen bilgisayarınıza bir DualShock 4, bir DualSense veya DualSense Edge denetleyici bağlayın ve Bağlan'a basın.",
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Lütfen dikkat: DS Edge üzerindeki analog modülleri <b>yalnızca yazılım aracılığıyla kalibre edilemez</b>. Özelleştirilmiş bir kalibrasyonu analogun dahili belleğine kaydetmek için bir <b>donanım değişikliği</b> gereklidir.",
"Right Module Barcode": "Sağ Modül Barkodu",
"Right stick": "Sağ analog",
"SBL FW Version": "SBL FW Sürümü",
"Save": "Kaydet",
"Serial Number": "Seri Numarası",
"Show all": "Tümünü göster",
"Software": "Yazılım",
"Spider FW Version": "Örümcek FW Sürümü",
"Spider-Man 2": "Örümcek-Adam 2",
"Starlight Blue": "Yıldız Işığı Mavisi",
"Sterling Silver": "Gümüş",
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "DualSense Edge analog modüllerinin kalibrasyonuna destek, artık <b>deneysel bir özellik</b> olarak mevcuttur.",
"Thank you for your generosity and support!": "Cömertliğiniz ve desteğiniz için teşekkür ederiz!",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "DualShock Kalibrasyon Arayüzü şu anda DualSense Edge'i desteklemiyor.",
"The Last of Us": "The Last of Us",
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Bu, her modül üzerindeki belirli bir test noktasına <b>+1.8V</b> uygulayarak yazma korumasını geçici olarak devre dışı bırakmayı içerir.",
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Bu sadece ileri düzey kullanıcılar içindir. Ne yaptığınızdan emin değilseniz, lütfen denemeyin.",
"This screen allows to finetune raw calibration data on your controller": "Bu ekran, denetleyicinizdeki ham kalibrasyon verilerini ince ayarlamaya olanak tanır",
"Touchpad FW Version": "Dokunmatik Yüzey FW Sürümü",
"Touchpad ID": "Dokunmatik Yüzey Kimliği",
"VCM Left Barcode": "VCM Sol Barkodu",
"VCM Right Barcode": "VCM Sağ Barkodu",
"Venom FW Version": "Venom FW Sürümü",
"Volcanic Red": "Volkanik Kırmızı",
"We are not responsible for any damage caused by attempting this modification.": "Bu modifikasyonu denemenin neden olduğu herhangi bir hasardan sorumlu değiliz.",
"White": "Beyaz",
"You can do this in two ways:": "Bunu iki şekilde yapabilirsiniz:",
"here": "burada",
"left module": "sol modül",
"right module": "sağ modül",
"10x zoom": "",
"Normal": "",
"": ""
}

View File

@@ -241,5 +241,7 @@
"Fortnite": "Обмежена серія Fortnite",
"Spider-Man 2": "Обмежена серія Spider-Man 2",
"The Last of Us": "Обмежена серія The Last of Us",
"10x zoom": "",
"Normal": "",
"": ""
}
}

View File

@@ -242,5 +242,7 @@
"Fortnite": "堡垒之夜",
"Spider-Man 2": "漫威蜘蛛侠2",
"The Last of Us": "最后生还者",
"10x zoom": "",
"Normal": "",
"": ""
}

View File

@@ -242,5 +242,7 @@
"Fortnite": "要塞英雄",
"Spider-Man 2": "蜘蛛人2",
"The Last of Us": "最後生還者",
"10x zoom": "",
"Normal": "",
"": ""
}