Compare commits

...

18 Commits

Author SHA1 Message Date
dualshock-tools
dbcf62dc76 DS Edge: add experimental support 2025-04-06 01:47:50 +02:00
dualshock-tools
41208d2727 Update pl_pl lang 2025-02-26 11:11:15 +01:00
dualshock-tools
3a1407eb19 Sort languages 2025-02-26 10:54:02 +01:00
Lazar
da13d7fb1e Add Serbian translation 2025-02-26 10:53:46 +01:00
ganguo0392
898d1d14d5 Update zh_cn.json 2025-02-17 13:47:32 +01:00
dualshock-tools
1a6b9026e3 Update favicon 2025-02-17 11:42:43 +01:00
dualshock-tools
600384297d Add favicon 2025-02-17 11:35:35 +01:00
dualshock-tools
e955f4ae66 Fix right threshold for circularity test 2025-01-31 09:41:17 +01:00
dualshock-tools
3c583151a3 Add stick center info to calibration finetune 2025-01-25 14:07:04 +01:00
dualshock-tools
e514242393 Update hu_hu language 2025-01-21 11:11:22 +01:00
dualshock-tools
8e73f36473 Change Cancel button appearance 2025-01-18 18:49:45 +01:00
Hs_Yeah
526fabf442 Fix the swapped display positions of "Err L" and "Err R" when "Check circularity" is checked 2025-01-18 18:39:48 +01:00
ganguo0392
2d80df041b update zh_cn.json (#55)
* Update zh_cn.json

* Update zh_cn.json

* Update zh_cn.json

* Update zh_cn.json
2025-01-18 18:37:01 +01:00
dualshock-tools
89931c2817 Add calibration finetuning 2025-01-18 16:46:15 +01:00
dualshock-tools
e68f136a13 Fix bug on reconnect 2025-01-05 11:17:55 +01:00
dualshock-tools
af18739ed1 Reorder languages in alphabetical order 2024-12-07 00:31:44 +01:00
sladkOy
b34a879939 Update core.js 2024-12-07 00:29:24 +01:00
sladkOy
5d1236c115 Add Ukrainian 2024-12-07 00:29:24 +01:00
31 changed files with 1319 additions and 97 deletions

BIN
apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

398
core.js
View File

@@ -16,6 +16,13 @@ var lang_cur_direction = "ltr";
var gj = 0;
var gu = 0;
// DS5 finetuning
var finetune_original_data = []
var last_written_finetune_data = []
var finetune_visible = false
var on_finetune_updating = false
// Alphabetical order
var available_langs = {
"ar_ar": { "name": "العربية", "file": "ar_ar.json", "direction": "rtl"},
@@ -31,8 +38,10 @@ var available_langs = {
"nl_nl": { "name": "Nederlands", "file": "nl_nl.json", "direction": "ltr"},
"pl_pl": { "name": "Polski", "file": "pl_pl.json", "direction": "ltr"},
"pt_br": { "name": "Português do Brasil", "file": "pt_br.json", "direction": "ltr"},
"rs_rs": { "name": "Srpski", "file": "rs_rs.json", "direction": "ltr"},
"ru_ru": { "name": "Русский", "file": "ru_ru.json", "direction": "ltr"},
"tr_tr": { "name": "Türkçe", "file": "tr_tr.json", "direction": "ltr"},
"ua_ua": { "name": "Українська", "file": "ua_ua.json", "direction": "ltr"},
"zh_cn": { "name": "中文", "file": "zh_cn.json", "direction": "ltr"},
"zh_tw": { "name": "中文(繁)", "file": "zh_tw.json", "direction": "ltr"}
};
@@ -149,8 +158,10 @@ async function ds4_info() {
append_info(l("Board Model"), ds4_hw_to_bm(hw_ver_minor) + b_info);
// All ok, safe to lock NVS, query it and get BD Addr
await ds4_nvlock();
await ds4_nvstatus();
nvstatus = await ds4_nvstatus();
if(nvstatus == 0)
await ds4_nvlock();
bd_addr = await ds4_getbdaddr();
append_info(l("Bluetooth Address"), bd_addr);
@@ -186,7 +197,19 @@ async function ds5_flash() {
show_popup(l("Changes saved successfully"));
} catch(error) {
show_popup(l("Error while saving changes: ") + str(error));
show_popup(l("Error while saving changes: ") + toString(error));
}
}
async function ds5_edge_flash() {
la("ds5_edge_flash");
try {
await ds5_edge_flash_modules();
await ds5_reset();
show_popup("<b>" + l("Changes saved successfully") + "</b>.<br><br>" + l("If the calibration is not stored permanently, please double-check the wirings of the hardware mod.") + "<br>" + l("Please disconnect and reconnect the controller."), true);
await disconnect();
} catch(error) {
show_popup(l("Error while saving changes: ") + toString(error));
}
}
@@ -201,7 +224,7 @@ async function ds4_reset() {
async function ds5_reset() {
la("ds5_reset");
try {
await device.sendFeatureReport(0x80, alloc_req(0x80, [1,1,0]))
await device.sendFeatureReport(0x80, alloc_req(0x80, [1,1]))
} catch(error) {
}
}
@@ -401,18 +424,28 @@ async function ds4_calibrate_sticks() {
}
async function ds4_nvstatus() {
await device.sendFeatureReport(0x08, alloc_req(0x08, [0xff,0, 12]))
data = lf("ds4_nvstatus", await device.receiveFeatureReport(0x11))
// 1: temporary, 0: permanent
ret = data.getUint8(1, false);
if(ret == 1) {
$("#d-nvstatus").html("<font color='green'>" + l("locked") + "</font>");
} else if(ret == 0) {
$("#d-nvstatus").html("<font color='red'>" + l("unlocked") + "</font>");
} else {
$("#d-nvstatus").html("<font color='purple'>unk " + ret + "</font>");
try {
await device.sendFeatureReport(0x08, alloc_req(0x08, [0xff,0, 12]))
data = lf("ds4_nvstatus", await device.receiveFeatureReport(0x11))
// 1: temporary, 0: permanent
ret = data.getUint8(1, false);
if(ret == 1) {
$("#d-nvstatus").html("<font color='green'>" + l("locked") + "</font>");
return 1;
} else if(ret == 0) {
$("#d-nvstatus").html("<font color='red'>" + l("unlocked") + "</font>");
return 0;
} else {
$("#d-nvstatus").html("<font color='purple'>unk " + ret + "</font>");
if(ret == 0 || ret == 1)
return 2;
return ret;
}
return ret;
} catch(e) {
$("#d-nvstatus").html("<font color='red'>" + l("error") + "</font>");
return 2; // error
}
return ret;
}
async function ds5_nvstatus() {
@@ -420,6 +453,9 @@ async function ds5_nvstatus() {
await device.sendFeatureReport(0x80, alloc_req(0x80, [3,3]))
data = lf("ds5_nvstatus", await device.receiveFeatureReport(0x81))
ret = data.getUint32(1, false);
if(ret == 0x15010100) {
return 4;
}
if(ret == 0x03030201) {
$("#d-nvstatus").html("<font color='green'>" + l("locked") + "</font>");
return 1; // temporary
@@ -428,6 +464,8 @@ async function ds5_nvstatus() {
return 0; // permanent
} else {
$("#d-nvstatus").html("<font color='purple'>unk " + dec2hex32(ret) + "</font>");
if(ret == 0 || ret == 1)
return 2;
return ret; // unknown
}
} catch(e) {
@@ -478,7 +516,6 @@ async function ds4_nvunlock() {
async function ds5_system_info(base, num, length, decode = true) {
await device.sendFeatureReport(128, alloc_req(128, [base,num]))
var pcba_id = lf("ds5_pcba_id", await device.receiveFeatureReport(129));
console.log(pcba_id);
if(pcba_id.getUint8(1) != base || pcba_id.getUint8(2) != num || pcba_id.getUint8(3) != 2) {
return l("error");
} else {
@@ -548,8 +585,9 @@ async function ds5_info() {
return true;
}
await ds5_nvlock();
await ds5_nvstatus();
nvstatus = await ds5_nvstatus();
if(nvstatus == 0)
await ds5_nvlock();
bd_addr = await ds5_getbdaddr();
append_info(l("Bluetooth Address"), bd_addr, "hw");
} catch(e) {
@@ -616,11 +654,30 @@ async function ds5_calibrate_sticks_end() {
await device.sendFeatureReport(0x82, alloc_req(0x82, [2,1,1]))
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010102) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_end_failed", {"d1": d1});
show_popup(err + l("Error 3") + " (" + d1 + ").");
return false;
if(mode == 2) {
if(data.getUint32(0, false) != 0x83010102) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 3") + " (" + d1 + ").");
}
} else if(mode == 3) {
if(data.getUint32(0, false) != 0x83010101) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 4") + " (" + d1 + ").");
}
await device.sendFeatureReport(0x82, alloc_req(0x82, [2,1,1]))
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010103 && data.getUint32(0, false) != 0x83010312) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 5") + " (" + d1 + ").");
}
}
update_nvs_changes_status(1);
@@ -679,11 +736,31 @@ async function ds5_calibrate_sticks() {
await device.sendFeatureReport(0x82, alloc_req(0x82, [2,1,1]))
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010102) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 3") + " (" + d1 + ").");
if(mode == 2) {
if(data.getUint32(0, false) != 0x83010102) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 3") + " (" + d1 + ").");
}
} else if(mode == 3) {
if(data.getUint32(0, false) != 0x83010101) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 4") + " (" + d1 + ").");
}
await device.sendFeatureReport(0x82, alloc_req(0x82, [2,1,1]))
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010103) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 5") + " (" + d1 + ").");
}
}
set_progress(100);
@@ -733,11 +810,30 @@ async function ds5_calibrate_range_end() {
// Assert
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010202) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_range_end_failed", {"d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 1") + " (" + d1 + ").");
if(mode == 2) {
if(data.getUint32(0, false) != 0x83010202) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_range_end_failed", {"d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 3") + " (" + d1 + ").");
}
} else {
if(data.getUint32(0, false) != 0x83010201) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_range_end_failed", {"d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 4") + " (" + d1 + ").");
}
await device.sendFeatureReport(0x82, alloc_req(0x82, [2,1,2]))
data = await device.receiveFeatureReport(0x83)
if(data.getUint32(0, false) != 0x83010203) {
d1 = dec2hex32(data.getUint32(0, false));
la("ds5_calibrate_range_end_failed", {"d1": d1});
close_calibrate_window();
return show_popup(err + l("Error 5") + " (" + d1 + ").");
}
}
update_nvs_changes_status(1);
@@ -755,7 +851,7 @@ async function ds5_nvlock() {
la("ds5_nvlock");
try {
await device.sendFeatureReport(0x80, alloc_req(0x80, [3,1]))
data = await device.receiveFeatureReport(0x83)
data = await device.receiveFeatureReport(0x81)
} catch(e) {
await new Promise(r => setTimeout(r, 500));
close_calibrate_window();
@@ -763,11 +859,36 @@ async function ds5_nvlock() {
}
}
async function ds5_edge_flash_modules() {
la("ds5_edge_flash_modules");
var modal = null;
try {
modal = new bootstrap.Modal(document.getElementById('edgeProgressModal'), {})
modal.show();
if(device != null) {
await device.sendFeatureReport(0x80, alloc_req(0x80, [21, 1, 1]))
}
await new Promise(r => setTimeout(r, 500));
if(device != null) {
data = await device.receiveFeatureReport(0x81)
}
await new Promise(r => setTimeout(r, 1000));
modal.hide();
await ds5_reset();
} catch(e) {
modal.hide();
await new Promise(r => setTimeout(r, 500));
return show_popup(l("NVS Unlock failed: ") + e);
}
}
async function ds5_nvunlock() {
la("ds5_nvunlock");
try {
await device.sendFeatureReport(0x80, alloc_req(0x80, [3,2, 101, 50, 64, 12]))
data = await device.receiveFeatureReport(0x83)
data = await device.receiveFeatureReport(0x81)
} catch(e) {
await new Promise(r => setTimeout(r, 500));
close_calibrate_window();
@@ -881,6 +1002,172 @@ function alloc_req(id, data=[]) {
return out;
}
async function on_finetune_change(x) {
list = ["LL", "LT", "RL", "RT", "LR", "LB", "RR", "RB", "LX", "LY", "RX", "RY"]
out=[]
for(i=0;i<12;i++) {
v = $("#finetune" + list[i]).val()
out.push(parseInt(v))
}
await write_finetune_data(out)
}
async function ds5_finetune() {
// Lock NVS before
nvs = await ds5_nvstatus();
if(nvs == 0) {
await ds5_nvlock();
nvs = await ds5_nvstatus();
if(nvs != 1) {
show_popup("ERROR: Cannot lock NVS (" + nvs + ")");
return;
}
} else if(nvs != 1) {
show_popup("ERROR: Cannot read NVS status. Finetuning is not safe on this device.");
}
data = await read_finetune_data();
if (data == null)
return;
curModal = new bootstrap.Modal(document.getElementById('finetuneModal'), {})
curModal.show();
list = ["LL", "LT", "RL", "RT", "LR", "LB", "RR", "RB", "LX", "LY", "RX", "RY"]
for(i=0;i<12;i++) {
$("#finetune" + list[i]).attr("value", data[i])
$("#finetune" + list[i]).on('change', on_finetune_change)
}
finetune_original_data = data
finetune_visible = true
refresh_finetune()
}
async function read_finetune_data() {
await device.sendFeatureReport(0x80, alloc_req(0x80, [12,2]))
var data = await device.receiveFeatureReport(0x81)
var cmd = data.getUint8(0, true);
var p1 = data.getUint8(1, true);
var p2 = data.getUint8(2, true);
var p3 = data.getUint8(3, true);
if(cmd != 129 || p1 != 12 || p2 != 2 || p3 != 2)
{
finetune_close();
show_popup("ERROR: Cannot read calibration data");
return null;
}
var out = []
for(i=0;i<12;i++)
out.push(data.getUint16(4+i*2, true))
last_written_finetune_data = out
return out;
}
async function write_finetune_data(data) {
if (data.length != 12) {
return;
}
if (data == last_written_finetune_data) {
return;
}
last_written_finetune_data = data
pkg = [12,1]
for(i=0;i<data.length;i++) {
x = data[i]
pkg.push(x & 0xff)
pkg.push(x >> 8)
}
await device.sendFeatureReport(0x80, alloc_req(0x80, pkg))
}
function refresh_finetune() {
if (!finetune_visible)
return;
if (on_finetune_updating)
return;
on_finetune_updating = true
setTimeout(ds5_finetune_update_all, 10);
}
function ds5_finetune_update_all() {
ds5_finetune_update("finetuneStickCanvasL", last_lx, last_ly)
ds5_finetune_update("finetuneStickCanvasR", last_rx, last_ry)
}
function ds5_finetune_update(name, plx, ply) {
on_finetune_updating = false
var c = document.getElementById(name);
var ctx = c.getContext("2d");
var sz = 60;
var hb = 20 + sz;
var yb = 15 + sz;
var w = c.width;
ctx.clearRect(0, 0, c.width, c.height);
ctx.lineWidth = 1;
ctx.fillStyle = '#ffffff';
ctx.strokeStyle = '#000000';
// Left circle
ctx.beginPath();
ctx.arc(hb, yb, sz, 0, 2 * Math.PI);
ctx.closePath();
ctx.fill();
ctx.stroke();
ctx.strokeStyle = '#aaaaaa';
ctx.beginPath();
ctx.moveTo(hb-sz, yb);
ctx.lineTo(hb+sz, yb);
ctx.closePath();
ctx.stroke();
ctx.beginPath();
ctx.moveTo(hb, yb-sz);
ctx.lineTo(hb, yb+sz);
ctx.closePath();
ctx.stroke();
ctx.fillStyle = '#000000';
ctx.strokeStyle = '#000000';
ctx.beginPath();
ctx.arc(hb+plx*sz,yb+ply*sz,4, 0, 2*Math.PI);
ctx.fill();
ctx.beginPath();
ctx.moveTo(hb, yb);
ctx.lineTo(hb+plx*sz, yb+ply*sz);
ctx.stroke();
$("#"+ name + "x-lbl").text(float_to_str(plx));
$("#"+ name + "y-lbl").text(float_to_str(ply));
}
function finetune_close() {
$("#finetuneModal").modal("hide");
finetune_visible = false
finetune_original_data = []
}
function finetune_save() {
finetune_close();
// Unlock button
update_nvs_changes_status(1);
}
async function finetune_cancel() {
if(finetune_original_data.length == 12)
await write_finetune_data(finetune_original_data)
finetune_close();
}
var last_lx = 0, last_ly = 0, last_rx = 0, last_ry = 0;
var ll_updated = false;
@@ -1065,7 +1352,7 @@ function refresh_stick_pos() {
ofl += Math.pow(ll_data[i] - 1, 2);
}
for (i=0;i<rr_data.length;i++) {
if(ll_data[i] > 0.2) {
if(rr_data[i] > 0.2) {
rcounter += 1;
ofr += Math.pow(rr_data[i] - 1, 2);
}
@@ -1250,6 +1537,7 @@ function process_ds_input(data) {
last_ry = new_ry;
ll_updated = true;
refresh_sticks();
refresh_finetune();
}
var bat = data.data.getUint8(52);
@@ -1294,7 +1582,8 @@ async function continue_connection(report) {
}
if(device.productId == 0x05c4) {
$("#infoshowall").hide();
$("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds4_info()) {
connected = true;
mode = 1;
@@ -1302,7 +1591,8 @@ async function continue_connection(report) {
device.oninputreport = process_ds4_input;
}
} else if(device.productId == 0x09cc) {
$("#infoshowall").hide();
$("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds4_info()) {
connected = true;
mode = 1;
@@ -1310,7 +1600,8 @@ async function continue_connection(report) {
device.oninputreport = process_ds4_input;
}
} else if(device.productId == 0x0ce6) {
$("#infoshowall").show();
$("#infoshowall").show()
$("#ds5finetune").show()
if(await ds5_info()) {
connected = true;
mode = 2;
@@ -1318,12 +1609,21 @@ async function continue_connection(report) {
device.oninputreport = process_ds_input;
}
} else if(device.productId == 0x0df2) {
$("#infoshowall").hide();
$("#infoshowall").hide()
$("#ds5finetune").hide()
if(await ds5_info()) {
connected = true;
mode = 0;
mode = 3;
devname = l("Sony DualSense Edge");
disable_btn |= 8;
}
n = await ds5_nvstatus();
if(n == 4) {
// dualsense edge with pending reboot
$("#btnconnect").prop("disabled", false);
$("#connectspinner").hide();
disconnect();
show_popup(l("A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller."));
return;
}
} else {
$("#btnconnect").prop("disabled", false);
@@ -1349,6 +1649,9 @@ async function continue_connection(report) {
return;
}
if(mode == 3)
show_edge_modal();
if(disable_btn != 0)
update_disable_btn();
@@ -1379,8 +1682,6 @@ function update_disable_btn() {
show_popup(l("The device appears to be a DS4 clone. All functionalities are disabled."));
} else if(disable_btn & 2 && !(last_disable_btn & 2)) {
show_popup(l("This DualSense controller has outdated firmware.") + "<br>" + l("Please update the firmware and try again."), true);
} else if(disable_btn & 8 && !(last_disable_btn & 8)) {
show_popup(l("Calibration of the DualSense Edge is not currently supported."));
} else if(disable_btn & 4 && !(last_disable_btn & 4)) {
show_popup(l("Please charge controller battery over 30% to use this tool."));
}
@@ -1446,8 +1747,10 @@ var curModal = null
async function multi_flash() {
if(mode == 1)
ds4_flash();
else
else if(mode == 2)
ds5_flash();
else if(mode == 3)
ds5_edge_flash();
update_nvs_changes_status(0);
}
@@ -1602,6 +1905,11 @@ function show_donate_modal() {
new bootstrap.Modal(document.getElementById('donateModal'), {}).show()
}
function show_edge_modal() {
la("edge_modal");
new bootstrap.Modal(document.getElementById('edgeModal'), {}).show()
}
function show_info_modal() {
la("info_modal");
new bootstrap.Modal(document.getElementById('infoModal'), {}).show()

BIN
favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

BIN
favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

3
favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 154 KiB

View File

@@ -0,0 +1 @@
google-site-verification: googlec4c2e36a49e62fa3.html

View File

@@ -28,6 +28,16 @@
<meta http-equiv="Permissions-Policy" content="interest-cohort=()">
<script src="core.js"></script>
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<meta name="apple-mobile-web-app-title" content="DS Tools" />
<style>
dl.row dt { font-weight: normal; }
dl.row dd { font-family: monospace; }
@@ -100,7 +110,7 @@ dl.row dd { font-family: monospace; }
</div>
<div id="offlinebar" class="vstack p-2" style="display: none;">
<p class="ds-i18n">Connect a DualShock 4 or a DualSense controller to your computer and press Connect.</p>
<p class="ds-i18n">Connect a DualShock 4, a DualSense or DualSense Edge controller to your computer and press Connect.</p>
<button id="btnconnect" type="button" class="btn btn-outline-primary" onclick="connect()">
<span class="spinner-border spinner-border-sm" style="display: none;" id="connectspinner" aria-hidden="true"></span>
<span class="ds-i18n">Connect</span>
@@ -137,6 +147,8 @@ dl.row dd { font-family: monospace; }
<div class="vstack gap-2 p-2">
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="calib_open()">Calibrate stick center</button>
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range()">Calibrate stick range</button>
<button type="button" class="btn btn-primary ds-btn" onclick="ds5_finetune()" id="ds5finetune"><span class="ds-i18n">Finetune stick calibration</span> <i id="ds-i18n">(beta)</i></button>
<hr>
<button id="savechanges" type="button" class="btn btn-success ds-btn ds-i18n" onclick="multi_flash()" id="resetBtn">Save changes permanently</button>
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reboot controller</button>
@@ -176,12 +188,12 @@ dl.row dd { font-family: monospace; }
<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>
<span class="ds-i18n">Err L:</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>
<span class="ds-i18n">Err R:</span>
<pre id="er-lbl" style="min-width: 80px;"></pre>
</div>
</div>
@@ -225,6 +237,160 @@ dl.row dd { font-family: monospace; }
</div>
<!-- Finetune Modal -->
<div class="modal fade" id="finetuneModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="finetuneModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg modal-fullscreen-lg-down">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5 ds-i18n" id="finetuneModalLabel">Finetune stick calibration</h1>
<button type="button" class="btn-close" aria-label="Close" onclick="finetune_cancel()"></button>
</div>
<div class="modal-body">
<p class="ds-i18n">This screen allows to finetune raw calibration data on your controller</p>
<div style="width: 100%; display: flex; justify-content: center;">
<div class="container-fluid">
<div class="row">
<div class="col col-lg-6 col-12">
<div class="card text-bg-light" >
<div class="card-header"><span class="ds-i18n">Left stick</span></div>
<div class="card-body">
<div class="container-fluid">
<div class="row">
<table>
<tr><td></td><td style="text-align: center;">
<input id="finetuneLT" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
<tr>
<td height="160px" style="vertical-align: middle; align: right;">
<input id="finetuneLL" type="number" class="form-control" min="0" max="65535" value="0">
</td>
<td><canvas id="finetuneStickCanvasL" width="150" height="150"></canvas></td>
<td height="160px" style="vertical-align: middle; align: left;">
<input id="finetuneLR" type="number" class="form-control" min="0" max="65535" value="0">
</td>
</tr>
<tr><td></td><td style="text-align: center;">
<input id="finetuneLB" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
</table>
</div>
<div class="row">
<div class="col"></div>
<div class="col col-auto">
<label for="finetuneLX" class="col-form-label ds-i18n">Center X</label>
</div>
<div class="col col-auto">
<input id="finetuneLX" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
<div class="row">
<div class="col"></div>
<div class="col-auto">
<label for="finetuneLY" class="col-form-label ds-i18n">Center Y</label>
</div>
<div class="col-auto">
<input id="finetuneLY" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
</div>
<div class="px-2">
<div class="hstack">
<div class="vstack" style="text-align: center;">
<span>LX:</span>
<pre id="finetuneStickCanvasLx-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span>LY:</span>
<pre id="finetuneStickCanvasLy-lbl" style="min-width: 80px;"></pre>
</div>
</div>
</div>
</div>
</div>
</div> <!-- col -->
<div class="col col-lg-6 col-12">
<div class="card text-bg-light" >
<div class="card-header"><span class="ds-i18n">Right stick</span></div>
<div class="card-body">
<div class="container-fluid">
<div class="row">
<table>
<tr><td></td><td style="text-align: center;">
<input id="finetuneRT" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
<tr>
<td height="160px" style="vertical-align: middle; align: right;">
<input id="finetuneRL" type="number" class="form-control" min="0" max="65535" value="0">
</td>
<td><canvas id="finetuneStickCanvasR" width="150" height="150"></canvas></td>
<td height="160px" style="vertical-align: middle; align: left;">
<input id="finetuneRR" type="number" class="form-control" min="0" max="65535" value="0">
</td>
</tr>
<tr><td></td><td style="text-align: center;">
<input id="finetuneRB" type="number" class="form-control" min="0" max="65535" value="0">
</td><td></td></tr>
</table>
</div>
<div class="row">
<div class="col"></div>
<div class="col col-auto">
<label for="finetuneRX" class="col-form-label ds-i18n">Center X</label>
</div>
<div class="col col-auto">
<input id="finetuneRX" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
<div class="row">
<div class="col"></div>
<div class="col-auto">
<label for="finetuneRY" class="col-form-label ds-i18n">Center Y</label>
</div>
<div class="col-auto">
<input id="finetuneRY" type="number" class="form-control" min="0" max="65535" value="0">
</div>
<div class="col"></div>
</div>
</div>
<div class="px-2">
<div class="hstack">
<div class="vstack" style="text-align: center;">
<span>RX:</span>
<pre id="finetuneStickCanvasRx-lbl" style="min-width: 80px;"></pre>
</div>
<div class="vstack" style="text-align: center;">
<span>RY:</span>
<pre id="finetuneStickCanvasRy-lbl" style="min-width: 80px;"></pre>
</div>
</div>
</div>
</div>
</div>
</div> <!-- col -->
</div> <!-- row -->
</div>
</div>
</div>
<div class="modal-footer">
<button direction="button" class="btn btn-outline-secondary ds-i18n" onclick="finetune_cancel()">Cancel</button>
<button type="button" class="btn btn-primary ds-i18n" onclick="finetune_save()">Save</button>
</div>
</div>
</div>
</div>
<!-- Welcome Modal -->
<div class="modal fade" id="welcomeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="welcomeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-lg">
@@ -388,6 +554,56 @@ dl.row dd { font-family: monospace; }
</div>
</div>
<!-- Edge in progress Modal -->
<div class="modal fade" id="edgeProgressModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="edgeProgressLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5 ds-i18n" id="edgeProgressLabel">Storing calibration</h1>
</div>
<div class="modal-body">
<p class="ds-i18n">Calibration is being stored in the stick modules...</p>
<p class="ds-i18n">Please wait.</p>
</div>
</div>
</div>
</div>
<div class="modal fade" id="edgeModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title ds-i18n">DualSense Edge Calibration (Experimental)</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4" id="donateBody">
<p>Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.</p>
<p>Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.</p>
<p>To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required. This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.</p>
<p></p>
<p>You can do this in two ways:
<ul><li><b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP, as shown here</li>
<li><b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller</li>
</ul>
</p>
<p><b>This is only for advanced users. If you're not sure what you're doing, please dont attempt it.</b></p>
<p>More details and images <a href="https://github.com/lewy20041/Dualsense_Edge_Modules_Callibration">here</a>.</p>
<p>We are not responsible for any damage caused by attempting this modification.</p>
<p>For more info or help, feel free to reach out on Discord.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary ds-i18n" onclick="welcome_accepted();">Understood</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="donateModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
@@ -607,7 +823,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> 1.8</a> (2024-11-17) - <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.2<i>beta</i></a> (2025-04-06) - <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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
"Connected to:": "Csatlakoztatva:",
"Disconnect": "Lecsatlakozás",
"Calibrate stick center": "Hüvelykujjkar középállásának újrakalibrálása",
"Calibrate stick range": "Hüvelykujjkar tartományának újrakalibrálása",
"Calibrate stick range": "Hüvelykujjkar tartományának újrakalibrálása",
"Sections below are not useful, just some debug infos or manual commands": "Az alábbi funkciók nem kalibrálásra használatosak, csak néhány hibakeresési információt vagy kézi parancsot alkalmaznak",
"NVS Status": "NVS státusz",
"Unknown": "Ismeretlen",
@@ -141,7 +141,7 @@
"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 illeti:",
"Please connect the device using a USB cable.": "Kérlek csatlakoztasd az eszközt USB kábel használatával.",
"Please connect the device using a USB cable.": "Kérlek csatlakoztasd az eszközt USB kábel használatával.",
"This DualSense controller has outdated firmware.": "Ennek a DualSense vezérlőnek elavult a firmware-e.",
"Please update the firmware and try again.": "Kérlek frissítsd a firmware-t, és próbáld újra.",
"Joystick Info": "Analógkar Információ",
@@ -149,54 +149,68 @@
"Err L:": "Hibaarány B:",
"Check circularity": "Körkörösség ellenőrzése",
"Can I reset a permanent calibration to previous calibration?": "",
"No.": "",
"Can you overwrite a permanent calibration?": "",
"Yes. Simply do another permanent calibration.": "",
"Does this software resolve stickdrift?": "",
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "",
"This software will not fix stick drift on its own if you already experience that. What it will help with, is ensuring the new joystick(s) will function properly after replacing the old one(s) to work well with.": "",
"I have noticed some controllers out of the box have worse factory calibration than if I would recalibrate them. Especially true for circularity of SCUF controllers with a unique shell.": "",
"(Dualsense) Will updating the firmware reset calibration?": "",
"After range calibration, joysticks always go in corners.": "",
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "",
"Please read the instructions.": "",
"You have to rotate the joysticks before you press \"Done\".": "",
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "",
"Only after you have done that, you click on \"Done\".": "",
"Can I reset a permanent calibration to previous calibration?": "Visszaállíthatok egy végleges kalibrációt az előző kalibrációra?",
"No.": "Nem",
"Can you overwrite a permanent calibration?": "Felülírható egy végleges kalibráció?",
"Yes. Simply do another permanent calibration.": "Igen. Egyszerűen végezz el egy újabb végleges kalibrációt.",
"Does this software resolve stickdrift?": "Megoldja ez a szoftver a stick drift problémát?",
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "A stick driftet fizikai hiba okozza; például szennyeződés, elhasználódott (kopott) potenciométer vagy bizonyos esetekben egy elhasználódott rugó.",
"This software will not fix stick drift on its own if you already experience that. What it will help with, is ensuring the new joystick(s) will function properly after replacing the old one(s) to work well with.": "Ez a szoftver önmagában nem fogja megoldani a stick drift problémát, ha már tapasztalható. Amiben segít, az az, hogy biztosítsa az új hüvelykujjkarok megfelelő működését az elhasználódott hüvelykujjkarok cseréje után.",
"I have noticed some controllers out of the box have worse factory calibration than if I would recalibrate them. Especially true for circularity of SCUF controllers with a unique shell.": "Észrevettem, hogy néhány kontroller gyárilag rosszabb kalibrációval érkezik, mint amit újrakalibrálva elérhetnék. Ez különösen igaz a SCUF kontrollerekre, amelyek egyedi burkolattal rendelkeznek.",
"(Dualsense) Will updating the firmware reset calibration?": "(DualSense) A firmware frissítése visszaállítja a kalibrációt?",
"After range calibration, joysticks always go in corners.": "Kalibráció után a hüvelykujjkarok mindig a sarkokba mennek.",
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ez a probléma azért fordul elő, mert a tartománykalibrálás indítása után azonnal rákattintottál a \"Kész\" gombra.",
"Please read the instructions.": "Kérlek, olvasd el az utasításokat!",
"You have to rotate the joysticks before you press \"Done\".": "Forgasd el a hüvelykujjkarokat, mielőtt megnyomnád a \"Kész\" gombot.",
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Ügyelj arra, hogy a hüvelykujjakrok érjenek el a keret széléig és annak mentén forgasd lassan, lehetőleg mindkét irányban - óramutató járásával megegyezően és ellentétesen is.",
"Only after you have done that, you click on \"Done\".": "Csak miután ezt megtetted, azután kattints a \"Kész\" gombra.",
"Changes saved successfully": "",
"Error while saving changes:": "",
"Save changes permanently": "",
"Reboot controller": "",
"Changes saved successfully": "A változások sikeresen mentésre kerültek",
"Error while saving changes:": "A változások mentése közben hiba lépett fel",
"Save changes permanently": "A változtatások végleges mentése a kontrollerbe",
"Reboot controller": "Kontroller újraindítása",
"Controller Info": "",
"Debug Info": "",
"Debug buttons": "",
"Software": "",
"Hardware": "",
"Controller Info": "Információk a kontrollerről",
"Debug Info": "Hibakeresési infomrációk",
"Debug buttons": "Hibakeresési gombok",
"Software": "Szoftver",
"Hardware": "Hardver",
"FW Build Date": "",
"FW Type": "",
"FW Series": "",
"FW Version": "",
"FW Update": "",
"FW Update Info": "",
"SBL FW Version": "",
"Venom FW Version": "",
"Spider FW Version": "",
"Touchpad FW Version": "",
"FW Build Date": "FW kiadásának dátuma",
"FW Type": "FW típusa",
"FW Series": "FW széria",
"FW Version": "FW verzió",
"FW Update": "FW frissítés",
"FW Update Info": "FW frissítési információ",
"SBL FW Version": "SBL FW verzió",
"Venom FW Version": "Venom FW verzió",
"Spider FW Version": "Spider FW verzió",
"Touchpad FW Version": "Tapipad FW verzió",
"Serial Number": "",
"MCU Unique ID": "",
"PCBA ID": "",
"Battery Barcode": "",
"VCM Left Barcode": "",
"VCM Right Barcode": "",
"HW Model": "",
"Touchpad ID": "",
"Bluetooth Address": "",
"Show all": "",
"Serial Number": "Szériaszám",
"MCU Unique ID": "MCU egyedi azonosító",
"PCBA ID": "PCBA azonosító",
"Battery Barcode": "Akkumulátor vonalkód",
"VCM Left Barcode": "Bal VCM vonalkód",
"VCM Right Barcode": "Jobb VCM vonalód",
"HW Model": "HW modell",
"Touchpad ID": "Tapipad azonosító",
"Bluetooth Address": "Bluetooth címzés",
"Show all": "Mindet megjelenít",
"Finetune stick calibration": "Karok finomkalibrálása",
"(beta)": "(béta)",
"This screen allows to finetune raw calibration data on your controller": "Ez a felület lehetővé teszi a kontroller nyers kalibrációs adatainak finomhangolását.",
"Left stick": "Bal kar",
"Right stick": "Jobb kar",
"Center X": "X középállás",
"Center Y": "Y középállás",
"Save": "Mentés",
"Cancel": "Mégse",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "A DualShock kontroller kalibráló felület jelenleg nem támogatja a DualSense Edge-et.",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Aktívan dolgozom a kompatibilitás hozzáadásán, a legnagyobb kihívást az adatok hüvelykujjkar modulokba történő tárolása jelenti.",
"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": "Ha ez az eszköz hasznos volt számodra, vagy szeretnéd, hogy a DualSense Edge támogatása gyorsabban megérkezzen, kérlek, fontold meg a projekt támogatását",
"Thank you for your generosity and support!": "Köszönöm nagylelkűségedet és támogatásodat!",
"": ""
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -201,5 +201,19 @@
"Bluetooth Address": "Adres Bluetooth",
"Show all": "Pokaż wszystko",
"Finetune stick calibration": "Dokładna kalibracja drążków",
"(beta)": "(beta)",
"This screen allows to finetune raw calibration data on your controller": "Te okienko pozwala na dokładniejszą zmianę w danych o kalibracji w twoim kontrolerze",
"Left stick": "Lewy drążęk",
"Right stick": "Prawy drążęk",
"Center X": "Punkt X",
"Center Y": "Punkt Y",
"Save": "Zapisz",
"Cancel": "Anuluj",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "Strona DualShock Calibration GUI nie wspiera jeszcze kontrolera Dualsesne Edge",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "Aktywnie pracuję nad dodaniem kompatybilności, ale głównym wyzwaniem jest przechowywanie danych w modułach drążków.",
"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": "Jeśli uważasz że to narzędzie było dla ciebie pomocne, lub chcesz aby wsparcie DualSense Edge pojawiło się szybciej, rozważ wsparcie projektu poprzez",
"Thank you for your generosity and support!": "Dziękujemy za hojność i wsparcie!",
"": ""
}

View File

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

214
lang/rs_rs.json Normal file
View File

@@ -0,0 +1,214 @@
{
".authorMsg": "- Srpski prevod: <a href='https://www.linkedin.com/in/lazar-dimitrijevic/'>Lazar Dimitrijevic</a> - <a href='https://github.com/lazardimi'>GitHub</a>.",
"DualShock Calibration GUI": "Interfejs za kalibraciju DualShock",
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nepodržani pretraživač. Molimo koristite veb pretraživač sa WebHID podrškom (npr. Chrome).",
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "Povežite DualShock 4 ili DualSense kontroler na vaš računar i pritisnite 'Poveži'.",
"Connect": "Poveži",
"Connected to:": "Povezano sa:",
"Disconnect": "Prekini vezu",
"Calibrate stick center": "Kalibrišite centar džojstika",
"Calibrate stick range": "Kalibrišite opseg džojstika",
"Sections below are not useful, just some debug infos or manual commands": "Sekcije ispod nisu korisne, samo neke informacije za debagovanje ili ručne komande",
"NVS Status": "Status NVS",
"Unknown": "Nepoznato",
"Debug buttons": "Dugmići za debagovanje",
"Query NVS status": "Upitaj status NVS",
"NVS unlock": "Otključaj NVS",
"NVS lock": "Zaključaj NVS",
"Fast calibrate stick center (OLD)": "Brza kalibracija centra džojstika (stara metoda)",
"Stick center calibration": "Kalibracija centra džojstika",
"Welcome": "Dobrodošli",
"Step 1": "Korak 1",
"Step 2": "Korak 2",
"Step 3": "Korak 3",
"Step 4": "Korak 4",
"Completed": "Završeno",
"Welcome to the stick center-calibration wizard!": "Dobrodošli u asistent za kalibraciju centra džojstika!",
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "Ovaj alat će vas voditi kroz ponovno centriranje analognih džojstika na vašem kontroleru. Sastoji se od četiri koraka: biće vam zatraženo da pomerate oba džojstika u određenom pravcu i zatim ih otpustite.",
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "Molimo vas da imate na umu da <i>jednom kada kalibracija počne, ne može se otkazati</i>. Ne zatvarajte ovu stranicu i ne prekidajte vezu sa kontrolerom dok se proces ne završi.",
"Press <b>Start</b> to begin calibration.": "Pritisnite <b>Počni</b> da biste započeli kalibraciju.",
"Please move both sticks to the <b>top-left corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>gornji levi ugao</b> i zatim ih otpustite.",
"When the sticks are back in the center, press <b>Continue</b>.": "Kada se džojstici vrate u centar, pritisnite <b>Nastavi</b>.",
"Please move both sticks to the <b>top-right corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>gornji desni ugao</b> i zatim ih otpustite.",
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>donji levi ugao</b> i zatim ih otpustite.",
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>donji desni ugao</b> i zatim ih otpustite.",
"Calibration completed successfully!": "Kalibracija je uspešno završena!",
"Next": "Sledeće",
"Recentering the controller sticks. ": "Ponovno centriranje džojstika kontrolera. ",
"Please do not close this window and do not disconnect your controller. ": "Molimo vas da ne zatvarate ovaj prozor i da ne prekidate vezu sa kontrolerom. ",
"Range calibration": "Kalibracija opsega džojstika",
"<b>The controller is now sampling data!</b>": "<b>Kontroler sada prikuplja podatke!</b>",
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "Polako rotirajte džojstike kako biste pokrili ceo opseg. Pritisnite \"Završeno\" kada završite.",
"Done": "Završeno",
"Hi, thank you for using this software.": "Zdravo, hvala vam što koristite ovaj softver.",
"If you're finding it helpful and you want to support my efforts, feel free to": "Ako vam je koristan i želite da podržite moj rad, slobodno",
"buy me a coffee": "kupite mi kafu",
"! :)": "! :)",
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Imate li neki predlog ili problem? Pošaljite mi poruku putem e-pošte ili Discord-a.",
"Cheers!": "Želimo vam sve najbolje!",
"Support this project": "Podržite ovaj projekat",
"unknown": "nepoznato",
"original": "originalno",
"clone": "klon",
"locked": "zaključano",
"unlocked": "otključano",
"error": "greška",
"Build Date": "Datum izrade",
"HW Version": "Verzija hardvera",
"SW Version": "Verzija softvera",
"Device Type": "Tip uređaja",
"Range calibration completed": "Kalibracija opsega završena",
"Range calibration failed: ": "Kalibracija opsega nije uspela: ",
"Cannot unlock NVS": "Nije moguće otključati NVS",
"Cannot relock NVS": "Nije moguće zaključati NVS",
"Error 1": "Greška 1",
"Error 2": "Greška 2",
"Error 3": "Greška 3",
"Stick calibration failed: ": "Kalibracija džojstika nije uspela: ",
"Stick calibration completed": "Kalibracija džojstika završena",
"NVS Lock failed: ": "Zaključavanje NVS nije uspelo: ",
"NVS Unlock failed: ": "Otključavanje NVS nije uspelo: ",
"Please connect only one controller at time.": "Molimo vas da povežete samo jedan kontroler istovremeno.",
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
"Sony DualSense": "Sony DualSense",
"Sony DualSense Edge": "Sony DualSense Edge",
"Connected invalid device: ": "Povezan je nevažeći uređaj: ",
"Calibration of the DualSense Edge is not currently supported.": "Kalibracija DualSense Edge trenutno nije podržana.",
"The device appears to be a DS4 clone. All functionalities are disabled.": "Uređaj izgleda da je klon DS4. Sve funkcionalnosti su onemogućene.",
"Error: ": "Greška: ",
"My handle on discord is: the_al": "Moj Discord ID je: the_al",
"Initializing...": "Inicijalizacija...",
"Storing calibration...": "Čuvanje kalibracije...",
"Sampling...": "Uzorak...",
"Calibration in progress": "Kalibracija u toku",
"Start": "Počni",
"Continue": "Nastavi",
"You can check the calibration with the": "Možete proveriti kalibraciju sa:",
"Have a nice day :)": "Želimo vam prijatan dan :)",
"Welcome to the Calibration GUI": "Dobrodošli u interfejs za kalibraciju",
"Just few things to know before you can start:": "Samo nekoliko stvari koje treba da znate pre nego što počnete:",
"This website is not affiliated with Sony, PlayStation &amp; co.": "Ovaj sajt nije povezan sa Sony, PlayStation &amp; ko.",
"This service is provided without warranty. Use at your own risk.": "Ovaj servis se pruža bez garancije. Koristite na sopstveni rizik.",
"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.": "Držite internu bateriju kontrolera povezanu i obezbedite da je dobro napunjena. Ako se baterija isprazni tokom operacije, kontroler će biti oštećen i postaće neupotrebljiv.",
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Pre nego što izvršite trajnu kalibraciju, probajte privremenu kako biste obezbedili da sve radi kako treba.",
"Understood": "Razumem",
"Version": "Verzija",
"Frequently Asked Questions": "Često postavljana pitanja",
"Close": "Zatvori",
"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!": "Dobrodošli u sekciju ČPP! Ispod ćete naći odgovore na neka od najčešće postavljanih pitanja o ovom sajtu. Ako imate još pitanja ili vam je potrebna dodatna pomoć, slobodno me kontaktirajte direktno. Vaši komentari i pitanja su uvek dobrodošli!",
"How does it work?": "Kako to radi?",
"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.": "Iza kulisa, ovaj sajt je rezultat godinu dana posvećenog rada na reverznom inženjeringu DualShock kontrolera iz zadovoljstva/hobija od strane slučajnog čoveka na internetu.",
"Through": "Kroz",
"this research": "ovo istraživanje",
", 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.": ", otkriveno je da postoje neke nedokumentovane komande na DualShock kontrolerima koje se mogu poslati preko USB-a i koriste se tokom procesa fabričkog sklapanja. Ako se ove komande pošalju, kontroler započinje ponovnu kalibraciju analognih džojstika.",
"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.": "Iako primarni fokus ovog istraživanja nije bio na kalibraciji, postalo je očigledno da servis koji nudi ovu mogućnost može biti od velike koristi mnogim pojedincima. I evo nas.",
"Does the calibration remain effective during gameplay on PS4/PS5?": "Da li kalibracija ostaje efektivna tokom igre na 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.": "Da, ako označite polje \"Zapiši promene trajno u kontroler\". U tom slučaju, kalibracija se upisuje direktno u firmware kontrolera. To obezbeđuje da ostane na mestu bez obzira na konzolu na koju je povezana.",
"Is this an officially endorsed service?": "Da li je ovo zvanično odobren servis?",
"No, this service is simply a creation by a DualShock enthusiast.": "Ne, ovaj servis je jednostavno kreacija entuzijaste za DualShock.",
"Does this website detects if a controller is a clone?": "Da li ovaj sajt detektuje da li je kontroler klon?",
"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.": "Da, trenutno samo DualShock4. Ovo se dogodilo jer sam slučajno kupio nekoliko klonova, proveo vreme identifikujući razlike i dodao ovu funkcionalnost da bih sprečio buduće obmane.",
"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.": "Nažalost, klonovi se ne mogu kalibrisati, jer oni samo kopiraju ponašanje DualShock4 tokom normalne igre, a ne sve nedokumentovane funkcionalnosti.",
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Ako želite da proširite ovu funkcionalnost detekcije na DualSense, molimo vas da mi pošaljete lažnu DualSense i videćete je za nekoliko nedelja.",
"What development is in plan?": "Koji razvoj je u planu?",
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Držim dve odvojene liste zadataka za ovaj projekat, iako prioritet još nije utvrđen.",
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Prva lista se odnosi na poboljšanje podrške za DualShock4 i DualSense kontrolere:",
"Implement calibration of L2/R2 triggers.": "Implementiraj kalibraciju L2/R2 okidača.",
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Poboljšaj detekciju klonova, što je posebno korisno za one koji žele da kupe polovne kontrolere sa obezbeđenjem autentičnosti.",
"Enhance user interface (e.g. provide additional controller information)": "Poboljšaj korisnički interfejs (npr. obezbedi dodatne informacije o kontroleru)",
"Add support for recalibrating IMUs.": "Dodaj podršku za ponovnu kalibraciju IMU.",
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Dodatno, istraži mogućnost oživljavanja nefunkcionalnih DualShock kontrolera (dodatna rasprava dostupna na Discord-u za zainteresovane).",
"The second list contains new controllers I aim to support:": "Druga lista sadrži nove kontrolere koje ciljam da podržim:",
"DualSense Edge": "DualSense Edge",
"DualShock 3": "DualShock 3",
"XBox Controllers": "XBox kontroleri",
"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.": "Svaka od ovih zadataka predstavlja ogroman interes i značajnu investiciju vremena. Da bih dao kontekst, podrška za novi kontroler obično zahteva 6-12 meseci punog radnog vremena istraživanja, uz malo sreće.",
"I love this service, it helped me! How can I contribute?": "Volim ovaj servis, pomogao mi je! Kako mogu da doprinesem?",
"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:": "Drago mi je da ste našli ovo korisnim! Ako ste zainteresovani da doprinesete, evo nekoliko načina na koje možete da mi pomognete:",
"Consider making a": "Razmislite o tome da napravite",
"donation": "donaciju",
"to support my late-night caffeine-fueled reverse-engineering efforts.": "da podržite moje napore reverznog inženjeringa kasno u noć podstaknute kofeinom.",
"Ship me a controller you would love to add (send me an email for organization).": "Pošaljite mi kontroler koji biste voleli da dodate (pošaljite mi e-mail za organizaciju).",
"Translate this website in your language": "Prevedite ovaj sajt na svoj jezik",
", to help more people like you!": ", da biste pomogli više ljudi poput vas!",
"This website uses analytics to improve the service.": "Ovaj sajt koristi analitiku za poboljšanje servisa.",
"Board Model": "Model ploče",
"This feature is experimental.": "Ova funkcionalnost je eksperimentalna.",
"Please let me know if the board model of your controller is not detected correctly.": "Molimo vas da mi javite ako model ploče vašeg kontrolera nije tačno detektovan.",
"Board model detection thanks to": "Detekcija modela ploče zahvaljujući",
"Please connect the device using a USB cable.": "Molimo vas da povežete uređaj koristeći USB kabl.",
"This DualSense controller has outdated firmware.": "Ovaj DualSense kontroler ima zastareli firmware.",
"Please update the firmware and try again.": "Molimo vas da ažurirate firmware i pokušate ponovo.",
"Joystick Info": "Informacije o džojstiku",
"Err R:": "Greška D:",
"Err L:": "Greška L:",
"Check circularity": "Proveri kružnost",
"Can I reset a permanent calibration to previous calibration?": "Mogu li da resetujem trajnu kalibraciju na prethodnu kalibraciju?",
"No.": "Ne.",
"Can you overwrite a permanent calibration?": "Možete li da prepišete trajnu kalibraciju?",
"Yes. Simply do another permanent calibration.": "Da. Jednostavno izvršite još jednu trajnu kalibraciju.",
"Does this software resolve stickdrift?": "Da li ovaj softver rešava stickdrift?",
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Stickdrift je uzrokovan fizičkim defektom; naime, prljavštinom, istrošenim potenciometrom ili u nekim slučajevima istrošenom oprugom.",
"This software will not fix stick drift on its own if you already experience that. What it will help with, is ensuring the new joystick(s) will function properly after replacing the old one(s) to work well with.": "Ovaj softver neće sam popraviti stickdrift ako ga već osećate. Ono što će pomoći jeste obezbeđivanje da novi džojstik(i) pravilno funkcionišu nakon zamene starih.",
"I have noticed some controllers out of the box have worse factory calibration than if I would recalibrate them. Especially true for circularity of SCUF controllers with a unique shell.": "Primetio sam da neki kontroleri iz kutije imaju lošiju fabričku kalibraciju nego da sam ih ponovo kalibrisao. Posebno važi za kružnost SCUF kontrolera sa jedinstvenim omotačem.",
"(Dualsense) Will updating the firmware reset calibration?": "(Dualsense) Da li ažuriranje firmvera resetuje kalibraciju?",
"After range calibration, joysticks always go in corners.": "Nakon kalibracije opsega, džojstici uvek idu u uglove.",
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ovaj problem se dešava jer ste pritisnuli \"Završeno\" odmah nakon pokretanja kalibracije opsega.",
"Please read the instructions.": "Molimo vas da pročitate uputstva.",
"You have to rotate the joysticks before you press \"Done\".": "Morate rotirati džojstike pre nego što pritisnete \"Završeno\".",
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Obavezno dodirnite ivice okvira džojstika i rotirajte polako, po mogućstvu u oba pravca - u smeru kazaljke na satu i suprotno.",
"Only after you have done that, you click on \"Done\".": "Tek nakon što to uradite, kliknite na \"Završeno\".",
"Changes saved successfully": "Promene uspešno sačuvane",
"Error while saving changes:": "Greška prilikom čuvanja promena:",
"Save changes permanently": "Sačuvaj promene trajno",
"Reboot controller": "Ponovo pokreni kontroler",
"Controller Info": "Informacije o kontroleru",
"Debug Info": "Informacije za debagovanje",
"Debug buttons": "Dugmići za debagovanje",
"Software": "Softver",
"Hardware": "Hardver",
"FW Build Date": "Datum izrade firmvera",
"FW Type": "Tip firmvera",
"FW Series": "Serija firmvera",
"FW Version": "Verzija firmvera",
"FW Update": "Ažuriranje firmvera",
"FW Update Info": "Informacije o ažuriranju firmvera",
"SBL FW Version": "SBL verzija firmvera",
"Venom FW Version": "Venom verzija firmvera",
"Spider FW Version": "Spider verzija firmvera",
"Touchpad FW Version": "Verzija firmvera za touchpad",
"Serial Number": "Serijski broj",
"MCU Unique ID": "Jedinstveni ID MCU",
"PCBA ID": "PCBA ID",
"Battery Barcode": "Barkod baterije",
"VCM Left Barcode": "VCM levi barkod",
"VCM Right Barcode": "VCM desni barkod",
"HW Model": "Model hardvera",
"Touchpad ID": "ID touchpada",
"Bluetooth Address": "Bluetooth adresa",
"Show all": "Prikaži sve",
"Finetune stick calibration": "Fino podešavanje kalibracije džojstika",
"(beta)": "(beta)",
"This screen allows to finetune raw calibration data on your controller": "Ovaj ekran omogućava fino podešavanje sirovih podataka kalibracije na vašem kontroleru",
"Left stick": "Levi džojstik",
"Right stick": "Desni džojstik",
"Center X": "Centar X",
"Center Y": "Centar Y",
"Save": "Sačuvaj",
"Cancel": "Otkaži",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "DualShock Calibration GUI trenutno ne podržava DualSense Edge.",
"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!",
"": ""
}

View File

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

View File

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

217
lang/ua_ua.json Normal file
View File

@@ -0,0 +1,217 @@
{
".authorMsg": "- Переклав солов'їною: sladk0y",
"DualShock Calibration GUI": "ГІК калібрування DualShock",
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Цей браузер не підтримується. Будь ласка, використовуйте веб-браузер із підтримкою WebHID (наприклад, Chrome).",
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "Підключіть контролер DualShock 4 або DualSense до комп’ютера та натисніть «Підключити».",
"Connect": "Підключити",
"Connected to:": "Підключено до:",
"Disconnect": "Від'їднати",
"Calibrate stick center": "Калібрувати центральне положення стіка",
"Calibrate stick range": "Калібрувати діапазон стіка",
"Sections below are not useful, just some debug infos or manual commands": "Розділи нижче не є корисними — це лише відладочна інформація або ручні команди",
"NVS Status": "Статус NVS",
"Unknown": "Невідомо",
"Debug buttons": "Кнопки відладки",
"Query NVS status": "Запит статусу NVS",
"NVS unlock": "Розблокувати NVS",
"NVS lock": "Заблокувати NVS",
"Fast calibrate stick center (OLD)": "Швидка калібровка центрального положення стіка (СТАРЕ)",
"Stick center calibration": "Калібрування центрального положення стіка.",
"Welcome": "Ласкаво просимо!",
"Step 1": "Крок 1",
"Step 2": "Крок 2",
"Step 3": "Крок 3",
"Step 4": "Крок 4",
"Completed": "Завершено",
"Welcome to the stick center-calibration wizard!": "Ласкаво просимо до майстра калібрування центрального положення стіка!",
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "Цей інструмент допоможе вам відкалібрувати центральне положення аналогових стіків вашого контролера. Процес складається з чотирьох кроків: вам буде запропоновано перемістити обидва стіки в певному напрямку і відпустити їх.",
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "Зверніть увагу, що <i>після початку калібрування, її неможливо буде скасувати</i>. Не закривайте цю сторінку та не відключайте контролер до завершення процесу.",
"Press <b>Start</b> to begin calibration.": "Натисніть <b>Старт</b>, щоб почати калібрування.",
"Please move both sticks to the <b>top-left corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>верхній лівий кут</b> і відпустіть їх.",
"When the sticks are back in the center, press <b>Continue</b>.": "Коли стіки повернуться в центральне положення, натисніть <b>Продовжити</b>.",
"Please move both sticks to the <b>top-right corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>верхній правий кут</b> і відпустіть їх.",
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>нижній лівий кут</b> і відпустіть їх.",
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>нижній правий кут</b> і відпустіть їх.",
"Calibration completed successfully!": "Калібрування успішно завершено!",
"Next": "Далі",
"Recentering the controller sticks. ": "Центрування стіків контролера. ",
"Please do not close this window and do not disconnect your controller. ": "Будь ласка, не закривайте це вікно і не відключайте ваш контролер. ",
"Range calibration": "Калібрування діапазону.",
"<b>The controller is now sampling data!</b>": "<b>Контролер зараз збирає дані!</b>",
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "Повільно обертайте стіки, щоб охопити весь діапазон. Натисніть \"Готово\", коли завершите.",
"Done": "Готово",
"Hi, thank you for using this software.": "Привіт, дякуємо за використання цього програмного забезпечення.",
"If you're finding it helpful and you want to support my efforts, feel free to": "Якщо вважаєте, що це корисно й хочете підтримати мої зусилля - не соромтесь і",
"buy me a coffee": "пригостіть мене кавою!",
"! :)": "! :)",
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Маєте пропозиції чи виникли проблеми? Напишіть мені на електронну пошту або в Discord.",
"Cheers!": "Дякую!",
"Support this project": "Підтримайте проєкт!",
"unknown": "невідомо",
"original": "оригінальний",
"clone": "клон",
"locked": "заблоковано",
"unlocked": "розблоковано",
"error": "помилка",
"Build Date": "Дата збірки",
"HW Version": "Версія апаратного забезпечення",
"SW Version": "Версія програмного забезпечення",
"Device Type": "Тип пристрою",
"Range calibration completed": "Калібрування діапазону завершено",
"Range calibration failed: ": "Калібрування діапазону не вдалося: ",
"Cannot unlock NVS": "Не вдається розблокувати NVS",
"Cannot relock NVS": "Не вдається заблокувати NVS повторно",
"Error 1": "Помилка 1",
"Error 2": "Помилка 2",
"Error 3": "Помилка 3",
"Stick calibration failed: ": "Калібрування джойстика не вдалося: ",
"Stick calibration completed": "Калібрування джойстика завершено",
"NVS Lock failed: ": "Блокування NVS не вдалося: ",
"NVS Unlock failed: ": "Розблокування NVS не вдалося: ",
"Please connect only one controller at time.": "Будь ласка, підключайте лише один контролер одночасно.",
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
"Sony DualSense": "Sony DualSense",
"Sony DualSense Edge": "Sony DualSense Edge",
"Connected invalid device: ": "Підключено неприпустиме пристрій: ",
"Calibration of the DualSense Edge is not currently supported.": "Калібрування DualSense Edge наразі не підтримується.",
"The device appears to be a DS4 clone. All functionalities are disabled.": "Пристрій, ймовірно, є клоном DS4. Усі функції вимкнено.",
"Error: ": "Помилка: ",
"My handle on discord is: the_al": "Мій нік у Discord: the_al",
"Initializing...": "Ініціалізація...",
"Storing calibration...": "Збереження калібрування...",
"Sampling...": "Збір даних...",
"Calibration in progress": "Калібрування триває",
"Start": "Старт",
"Continue": "Продовжити",
"You can check the calibration with the": "Ви можете перевірити калібрування за допомогою",
"Have a nice day :)": "Гарного дня! :)",
"Welcome to the Calibration GUI": "Ласкаво просимо до інтерфейсу калібрування",
"Just few things to know before you can start:": "Кілька речей, які потрібно знати перед початком:",
"This website is not affiliated with Sony, PlayStation &amp; co.": "Цей сайт не має відношення до Sony, PlayStation та інших компаній.",
"This service is provided without warranty. Use at your own risk.": "Цей сервіс надається без гарантії. Використовувати на власний ризик.",
"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.": "Тримайте внутрішню батарею контролера підключеною та переконайтеся, що вона добре заряджена. Якщо батарея розрядиться під час операцій, контролер буде пошкоджено і стане непридатним для використання.",
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Перед постійним калібруванням спробуйте тимчасове, щоб переконатися, що все працює добре.",
"Understood": "Зрозуміло",
"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.": "За лаштунками цей вебсайт є результатом одного року наполегливої роботи з зворотного інжинірингу контролерів DualShock для розваги/хобі від випадкової людини в Інтернеті.",
"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.": ", було виявлено, що існують деякі не задокументовані команди на контролерах DualShock, які можна відправляти через USB і які використовуються під час процесу зборки на фабриці. Якщо ці команди надсилаються, контролер починає перекалібровку аналогових стиків.",
"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?": "Чи зберігається ефективність калібрування під час гри на 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.": "Ні, цей сервіс є просто твором ентузіаста DualShock.",
"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.": "Так, наразі тільки для DualShock4. Це сталося тому, що я випадково придбав кілька клонів, витратив час на визначення відмінностей і додав цю функціональність, щоб запобігти майбутнім обманам.",
"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.": "На жаль, клони все одно не можуть бути відкалібровані, тому що вони лише клонують поведінку DualShock4 під час звичайної гри, а не всі не задокументовані функції.",
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Якщо ви хочете розширити цю функціональність виявлення на DualSense, будь ласка, надішліть мені підроблений DualSense, і ви побачите результат за кілька тижнів.",
"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:": "Перший список стосується покращення підтримки контролерів DualShock4 та DualSense:",
"Implement calibration of L2/R2 triggers.": "Впровадити калібрування тригерів L2/R2.",
"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.": "Додати підтримку повторної калібровки IMU.",
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Крім того, дослідити можливість відновлення несправних контролерів DualShock (додаткове обговорення доступне на Discord для зацікавлених осіб).",
"The second list contains new controllers I aim to support:": "Другий список містить нові контролери, які я планую підтримати:",
"DualSense Edge": "DualSense Edge",
"DualShock 3": "DualShock 3",
"XBox Controllers": "Контролери 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.": "Кожне з цих завдань є надзвичайно цікавим і вимагає значних часових витрат. Для контексту, підтримка нового контролера зазвичай вимагає 6-12 місяців повноцінного дослідження, а також удачі.",
"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!": ", щоб допомогти більшій кількості людей, подібних до вас!",
"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.": "Будь ласка, підключіть пристрій за допомогою USB-кабелю.",
"This DualSense controller has outdated firmware.": "Прошивка цього контролера DualSense застаріла.",
"Please update the firmware and try again.": "Будь ласка, оновіть прошивку та спробуйте знову.",
"Joystick Info": "Інформація про джойстик",
"Err R:": "Помилка П:",
"Err L:": "Помилка Л:",
"Check circularity": "Перевірити округлість",
"Can I reset a permanent calibration to previous calibration?": "Чи можу я скинути постійну калибровку до попередньої?",
"No.": "Ні.",
"Can you overwrite a permanent calibration?": "Чи можна перезаписати постійну калибровку?",
"Yes. Simply do another permanent calibration.": "Так. Просто виконайте іншу постійну калибровку.",
"Does this software resolve stickdrift?": "Чи вирішує це програмне забезпечення проблему дріфту стиків?",
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Дріфт стиків викликається фізичним дефектом; а саме брудом, зношеним потенціометром або, в деяких випадках, зношеною пружиною.",
"This software will not fix stick drift on its own if you already experience that. What it will help with, is ensuring the new joystick(s) will function properly after replacing the old one(s) to work well with.": "Це програмне забезпечення не виправить дріфт стиків, якщо ви вже стикаєтеся з цією проблемою. Однак воно допоможе переконатися, що новий джойстик(и) будуть правильно працювати після заміни старого(их).",
"I have noticed some controllers out of the box have worse factory calibration than if I would recalibrate them. Especially true for circularity of SCUF controllers with a unique shell.": "Я помітив, що деякі контролери з коробки мають гіршу заводську калібровку, ніж якби я їх перекалібрував. Це особливо стосується кругової точності контролерів SCUF з унікальною оболонкою.",
"(Dualsense) Will updating the firmware reset calibration?": "Чи скине оновлення прошивки (Dualsense) калібровку?",
"After range calibration, joysticks always go in corners.": "Після калібровки діапазону джойстики завжди йдуть у кути.",
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ця проблема виникає через те, що ви натиснули \"Готово\" одразу після початку калібровки діапазону.",
"Please read the instructions.": "Будь ласка, прочитайте інструкції.",
"You have to rotate the joysticks before you press \"Done\".": "Ви повинні обертати джойстики перед тим, як натискати \"Готово\".",
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Переконайтеся, що ви торкаєтесь країв рами джойстика та обертаєте його повільно, бажано в обох напрямках — за годинниковою стрілкою та проти годинникової.",
"Only after you have done that, you click on \"Done\".": "Тільки після того, як ви це зробите, натискайте \"Готово\".",
"Changes saved successfully": "Зміни успішно збережено",
"Error while saving changes:": "Помилка при збереженні змін:",
"Save changes permanently": "Зберегти зміни назавжди",
"Reboot controller": "Перезавантажити контролер",
"Controller Info": "Інформація про контролер",
"Debug Info": "Інформація для налагодження",
"Debug buttons": "Кнопки для налагодження",
"Software": "ПЗ",
"Hardware": "Апаратура",
"FW Build Date": "Дата складання прошивки",
"FW Type": "Тип прошивки",
"FW Series": "Серія прошивки",
"FW Version": "Версія прошивки",
"FW Update": "Оновлення прошивки",
"FW Update Info": "Інформація про оновлення прошивки",
"SBL FW Version": "Версія прошивки SBL",
"Venom FW Version": "Версія прошивки Venom",
"Spider FW Version": "Версія прошивки Spider",
"Touchpad FW Version": "Версія прошивки сенсорної панелі",
"Serial Number": "Серійний номер",
"MCU Unique ID": "Унікальний ID MCU",
"PCBA ID": "ID PCBA",
"Battery Barcode": "Штрих-код батареї",
"VCM Left Barcode": "Штрих-код VCM лівий",
"VCM Right Barcode": "Штрих-код VCM правий",
"HW Model": "Модель апаратного забезпечення",
"Touchpad ID": "ID сенсорної панелі",
"Bluetooth Address": "Bluetooth адреса",
"Show all": "Показати все",
"Finetune stick calibration": "",
"(beta)": "",
"This screen allows to finetune raw calibration data on your controller": "",
"Left stick": "",
"Right stick": "",
"Center X": "",
"Center Y": "",
"Save": "",
"Cancel": "",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "",
"Thank you for your generosity and support!": "",
"": ""
}

View File

@@ -200,5 +200,19 @@
"Bluetooth Address": "蓝牙地址",
"Show all": "显示全部信息",
"Finetune stick calibration": "微调摇杆校准",
"(beta)": "测试版本",
"This screen allows to finetune raw calibration data on your controller": "此界面允许微调手柄上的原始校准数据",
"Left stick": "左摇杆电压(mV)",
"Right stick": "右摇杆电压(mV)",
"Center X": "X轴中心",
"Center Y": "Y轴中心",
"Save": "保存",
"Cancel": "取消",
"The DualShock Calibration GUI does not currently support the DualSense Edge.": "DualShock校准GUI目前不支持DualSense Edge。",
"I'm actively working on adding compatibility, the primary challenge lies in storing data into the stick modules.": "我正在积极致力于兼容,主要研究将数据存储到摇杆模块中。",
"If this tool has been helpful to you or you want to see DualSense Edge support arrive faster, please consider supporting the project with a": "如果这个工具对你有所帮助或者你希望看到对于DualSense Edge的支持更快到来请考虑支持这个项目。",
"Thank you for your generosity and support!": "感谢您的慷慨和支持!",
"": ""
}

View File

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

21
site.webmanifest Normal file
View File

@@ -0,0 +1,21 @@
{
"name": "Dualshock Calibration GUI",
"short_name": "DS Tools",
"icons": [
{
"src": "/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB