2192 lines
59 KiB
HTML
2192 lines
59 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>DualShock Calibration GUI</title>
|
|
|
|
<!-- Bootstrap CSS -->
|
|
<link
|
|
id="bootstrap-css"
|
|
href="css/bootstrap.min.css"
|
|
rel="stylesheet"
|
|
/>
|
|
|
|
<!-- Font Awesome CSS -->
|
|
<link rel="stylesheet" href="css/fontawesome.min.css" />
|
|
<link rel="stylesheet" href="css/all.min.css" />
|
|
|
|
<!-- jQuery -->
|
|
<script src="js/jquery-3.7.1.min.js"></script>
|
|
<meta http-equiv="Permissions-Policy" content="interest-cohort=()" />
|
|
|
|
<!-- Core -->
|
|
<script src="js/core.js"></script>
|
|
|
|
<link
|
|
rel="apple-touch-icon"
|
|
sizes="180x180"
|
|
href="img/apple-touch-icon.png"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="32x32"
|
|
href="img/favicon-32x32.png"
|
|
/>
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
sizes="16x16"
|
|
href="img/favicon-16x16.png"
|
|
/>
|
|
<link rel="manifest" href="/site.webmanifest" />
|
|
|
|
<link
|
|
rel="icon"
|
|
type="image/png"
|
|
href="img/favicon-96x96.png"
|
|
sizes="96x96"
|
|
/>
|
|
<link rel="icon" type="image/svg+xml" href="img/favicon.svg" />
|
|
<link rel="shortcut icon" href="img/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;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
|
<symbol id="info" viewBox="0 -860 960 960">
|
|
<path
|
|
d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"
|
|
/>
|
|
</symbol>
|
|
<symbol id="github" viewBox="0 0 496 512">
|
|
<path
|
|
d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"
|
|
/>
|
|
</symbol>
|
|
<symbol id="lang" viewBox="0 0 640 512">
|
|
<path
|
|
d="M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z"
|
|
/>
|
|
</symbol>
|
|
</svg>
|
|
|
|
<script src="js/bootstrap.bundle.min.js"></script>
|
|
|
|
<nav class="navbar bg-body-tertiary navbar-expand-md bg-body-tertiary">
|
|
<div class="container-fluid">
|
|
<a
|
|
class="navbar-brand ds-i18n"
|
|
href="https://dualshock-tools.github.io"
|
|
>DualShock Calibration GUI</a
|
|
>
|
|
<button
|
|
class="navbar-toggler"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#navbarNavDropdown"
|
|
aria-controls="navbarNavDropdown"
|
|
aria-expanded="false"
|
|
aria-label="Toggle navigation"
|
|
>
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
|
|
<div
|
|
class="collapse navbar-collapse container-fluid justify-content-end"
|
|
id="navbarNavDropdown"
|
|
>
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a
|
|
class="nav-link ds-i18n"
|
|
href="#"
|
|
onclick="show_faq_modal();"
|
|
>Frequently Asked Questions</a
|
|
>
|
|
</li>
|
|
<li class="nav-item dropdown" id="navbarNavAltMarkup">
|
|
<a
|
|
class="nav-link dropdown-toggle"
|
|
id="langMenuButton"
|
|
role="button"
|
|
href="#"
|
|
data-bs-toggle="dropdown"
|
|
aria-expanded="false"
|
|
aria-haspopup="true"
|
|
>
|
|
<svg
|
|
class="bi text-secondary"
|
|
width="1.5em"
|
|
height="1.5em"
|
|
>
|
|
<use xlink:href="#lang" /></svg
|
|
> <span id="curLang">English</span>
|
|
</a>
|
|
<ul
|
|
class="dropdown-menu dropdown-menu-end"
|
|
aria-labelledby="langMenuButton"
|
|
id="availLangs"
|
|
></ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container p-2">
|
|
<div id="missinghid" style="display: none">
|
|
<p class="ds-i18n">
|
|
Unsupported browser. Please use a web browser with WebHID
|
|
support (e.g. Chrome).
|
|
</p>
|
|
</div>
|
|
|
|
<div id="offlinebar" class="vstack p-2" style="display: none">
|
|
<p class="ds-i18n">
|
|
Please 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>
|
|
</button>
|
|
<br />
|
|
</div>
|
|
|
|
<div id="onlinebar" class="vstack p-2" style="display: none">
|
|
<div class="row">
|
|
<div class="col-sm-9 hstack">
|
|
<p><b class="ds-i18n">Connected to:</b></p>
|
|
|
|
<p id="devname"></p>
|
|
</div>
|
|
<div class="col-sm-3">
|
|
<p id="d-bat" style="text-align: right"></p>
|
|
</div>
|
|
</div>
|
|
<button
|
|
type="button"
|
|
class="btn btn-outline-secondary ds-i18n"
|
|
onclick="disconnect()"
|
|
>
|
|
Disconnect</button
|
|
><br />
|
|
</div>
|
|
|
|
<div id="mainmenu" class="container" style="display: none">
|
|
<div class="row">
|
|
<div class="col-md-6 col-sm-12">
|
|
<div class="card text-bg-light">
|
|
<div class="card-header">
|
|
<i class="fas fa-gamepad"></i> <span
|
|
class="ds-i18n"
|
|
>Controller Info</span
|
|
>
|
|
</div>
|
|
<dl class="row px-3 py-2" id="fwinfo"></dl>
|
|
<span id="infoshowall" class="pb-4 px-4 row">
|
|
<button
|
|
class="btn btn-outline-secondary"
|
|
onclick="show_info_modal()"
|
|
>
|
|
<i class="fas fa-plus me-1"></i>
|
|
<span class="ds-i18n">Show all</span>
|
|
</button>
|
|
</span>
|
|
</div>
|
|
<br />
|
|
</div>
|
|
|
|
<div class="col-md-6 col-sm-12" style="min-width: 330px">
|
|
<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>
|
|
|
|
<div class="card text-bg-light">
|
|
<div class="card-header">
|
|
<i class="fas fa-crosshairs"></i
|
|
> <span class="ds-i18n"
|
|
>Joystick Info</span
|
|
>
|
|
</div>
|
|
<div class="vstack px-2">
|
|
<center>
|
|
<canvas
|
|
id="stickCanvas"
|
|
width="300"
|
|
height="150"
|
|
></canvas>
|
|
</center>
|
|
</div>
|
|
<div class="px-2">
|
|
<div class="hstack">
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span>LX:</span>
|
|
<pre
|
|
id="lx-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span>LY:</span>
|
|
<pre
|
|
id="ly-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span>RX:</span>
|
|
<pre
|
|
id="rx-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span>RY:</span>
|
|
<pre
|
|
id="ry-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="px-2">
|
|
<center>
|
|
<input
|
|
class="form-check-input"
|
|
type="checkbox"
|
|
value=""
|
|
id="checkCircularity"
|
|
/>
|
|
<label
|
|
class="form-check-label ds-i18n"
|
|
for="checkCircularity"
|
|
>Check circularity</label
|
|
>
|
|
<div class="hstack" id="circ-data">
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span class="ds-i18n"
|
|
>Err L:</span
|
|
>
|
|
<pre
|
|
id="el-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
|
|
<div
|
|
class="vstack"
|
|
style="text-align: center"
|
|
>
|
|
<span class="ds-i18n"
|
|
>Err R:</span
|
|
>
|
|
<pre
|
|
id="er-lbl"
|
|
style="min-width: 80px"
|
|
></pre>
|
|
</div>
|
|
</div>
|
|
</center>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<p class="ds-i18n">
|
|
Sections below are not useful, just some debug infos or
|
|
manual commands
|
|
</p>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-6 col-sm-12">
|
|
<div class="card text-bg-light">
|
|
<div class="card-header">
|
|
<i class="fas fa-bug"></i> <span
|
|
class="ds-i18n"
|
|
>Debug Info</span
|
|
>
|
|
</div>
|
|
<div class="vstack p-2">
|
|
<div class="hstack">
|
|
<p class="ds-i18n">NVS Status</p>
|
|
<p class="ms-auto ds-i18n" id="d-nvstatus">
|
|
Unknown
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br />
|
|
</div>
|
|
|
|
<div class="col-md-6 col-sm-12">
|
|
<div class="card text-bg-light">
|
|
<div class="card-header">
|
|
<i class="fas fa-skull-crossbones"></i
|
|
> <span class="ds-i18n"
|
|
>Debug buttons</span
|
|
>
|
|
</div>
|
|
<div class="vstack gap-2 p-2">
|
|
<div class="hstack gap-2">
|
|
<button
|
|
type="button"
|
|
class="btn btn-success ds-btn ds-i18n"
|
|
onclick="multi_nvstatus()"
|
|
>
|
|
Query NVS status
|
|
</button>
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary ds-btn ds-i18n"
|
|
onclick="multi_nvsunlock()"
|
|
>
|
|
NVS unlock
|
|
</button>
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary ds-btn ds-i18n"
|
|
onclick="multi_nvslock()"
|
|
>
|
|
NVS lock
|
|
</button>
|
|
</div>
|
|
<button
|
|
id="btnmcs"
|
|
type="button"
|
|
class="btn btn-primary ds-btn ds-i18n"
|
|
onclick="multi_calibrate_sticks()"
|
|
>
|
|
Fast calibrate stick center (OLD)
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Finetune Modal -->
|
|
<div
|
|
class="modal fade"
|
|
id="finetuneModal"
|
|
data-bs-backdrop="static"
|
|
data-bs-keyboard="false"
|
|
tabindex="-1"
|
|
aria-labelledby="finetuneModalLabel"
|
|
aria-hidden="true"
|
|
>
|
|
<div
|
|
class="modal-dialog modal-dialog-centered modal-lg modal-fullscreen-lg-down"
|
|
>
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1
|
|
class="modal-title fs-5 ds-i18n"
|
|
id="finetuneModalLabel"
|
|
>
|
|
Finetune stick calibration
|
|
</h1>
|
|
<button
|
|
type="button"
|
|
class="btn-close"
|
|
aria-label="Close"
|
|
onclick="finetune_cancel()"
|
|
></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p class="ds-i18n">
|
|
This screen allows to finetune raw calibration
|
|
data on your controller
|
|
</p>
|
|
<div
|
|
style="
|
|
width: 100%;
|
|
display: flex;
|
|
justify-content: center;
|
|
"
|
|
>
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col col-lg-6 col-12">
|
|
<div class="card text-bg-light">
|
|
<div class="card-header">
|
|
<span class="ds-i18n"
|
|
>Left stick</span
|
|
>
|
|
</div>
|
|
<div class="card-body">
|
|
<div
|
|
class="container-fluid"
|
|
>
|
|
<div class="row">
|
|
<table>
|
|
<tr>
|
|
<td></td>
|
|
<td
|
|
style="
|
|
text-align: center;
|
|
"
|
|
>
|
|
<input
|
|
id="finetuneLT"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td
|
|
height="160px"
|
|
style="
|
|
vertical-align: middle;
|
|
align: right;
|
|
"
|
|
>
|
|
<input
|
|
id="finetuneLL"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td>
|
|
<canvas
|
|
id="finetuneStickCanvasL"
|
|
width="150"
|
|
height="150"
|
|
></canvas>
|
|
</td>
|
|
<td
|
|
height="160px"
|
|
style="
|
|
vertical-align: middle;
|
|
align: left;
|
|
"
|
|
>
|
|
<input
|
|
id="finetuneLR"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td
|
|
style="
|
|
text-align: center;
|
|
"
|
|
>
|
|
<input
|
|
id="finetuneLB"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="row">
|
|
<div
|
|
class="col"
|
|
></div>
|
|
<div
|
|
class="col col-auto"
|
|
>
|
|
<label
|
|
for="finetuneLX"
|
|
class="col-form-label ds-i18n"
|
|
>Center
|
|
X</label
|
|
>
|
|
</div>
|
|
<div
|
|
class="col col-auto"
|
|
>
|
|
<input
|
|
id="finetuneLX"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</div>
|
|
<div
|
|
class="col"
|
|
></div>
|
|
</div>
|
|
<div class="row">
|
|
<div
|
|
class="col"
|
|
></div>
|
|
<div
|
|
class="col-auto"
|
|
>
|
|
<label
|
|
for="finetuneLY"
|
|
class="col-form-label ds-i18n"
|
|
>Center
|
|
Y</label
|
|
>
|
|
</div>
|
|
<div
|
|
class="col-auto"
|
|
>
|
|
<input
|
|
id="finetuneLY"
|
|
type="number"
|
|
class="form-control"
|
|
min="0"
|
|
max="65535"
|
|
value="0"
|
|
/>
|
|
</div>
|
|
<div
|
|
class="col"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div 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">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1
|
|
class="modal-title fs-5 ds-i18n"
|
|
id="welcomeModalLabel"
|
|
>
|
|
Welcome to the Calibration GUI
|
|
</h1>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p class="ds-i18n">
|
|
Just few things to know before you can start:
|
|
</p>
|
|
<ul>
|
|
<li class="ds-i18n">
|
|
This website is not affiliated with Sony,
|
|
PlayStation & co.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
This service is provided without warranty.
|
|
Use at your own risk.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
This website uses analytics to improve the
|
|
service.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
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.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Before doing the permanent calibration, try
|
|
the temporary one to ensure that everything
|
|
is working well.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary ds-i18n"
|
|
onclick="welcome_accepted();"
|
|
>
|
|
Understood
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- New calibrate modal -->
|
|
<div
|
|
class="modal fade"
|
|
id="calibCenterModal"
|
|
data-bs-backdrop="static"
|
|
data-bs-keyboard="false"
|
|
tabindex="-1"
|
|
aria-labelledby="calibTitle"
|
|
aria-hidden="true"
|
|
>
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1
|
|
class="modal-title fs-5 ds-i18n"
|
|
id="calibTitle"
|
|
>
|
|
Stick center calibration
|
|
</h1>
|
|
<button
|
|
type="button"
|
|
id="calibCross"
|
|
class="btn-close"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="row">
|
|
<div class="col-4">
|
|
<div class="list-group" id="list-tab">
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action active"
|
|
id="list-1-calib"
|
|
>Welcome</a
|
|
>
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action"
|
|
id="list-2-calib"
|
|
>Step 1</a
|
|
>
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action"
|
|
id="list-3-calib"
|
|
>Step 2</a
|
|
>
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action"
|
|
id="list-4-calib"
|
|
>Step 3</a
|
|
>
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action"
|
|
id="list-5-calib"
|
|
>Step 4</a
|
|
>
|
|
<a
|
|
class="ds-i18n list-group-item list-group-item-action"
|
|
id="list-6-calib"
|
|
>Completed</a
|
|
>
|
|
</div>
|
|
</div>
|
|
<div class="col-8">
|
|
<div class="container" id="list-1">
|
|
<h4 class="ds-i18n">
|
|
Welcome to the stick
|
|
center-calibration wizard!
|
|
</h4>
|
|
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
Press <b>Start</b> to begin
|
|
calibration.
|
|
</p>
|
|
</div>
|
|
<div
|
|
class="container"
|
|
style="display: none"
|
|
id="list-2"
|
|
>
|
|
<p class="ds-i18n">
|
|
Please move both sticks to the
|
|
<b>top-left corner</b> and release
|
|
them.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
When the sticks are back in the
|
|
center, press
|
|
<b>Continue</b>.
|
|
</p>
|
|
</div>
|
|
<div
|
|
class="container"
|
|
style="display: none"
|
|
id="list-3"
|
|
>
|
|
<p class="ds-i18n">
|
|
Please move both sticks to the
|
|
<b>top-right corner</b> and release
|
|
them.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
When the sticks are back in the
|
|
center, press
|
|
<b>Continue</b>.
|
|
</p>
|
|
</div>
|
|
<div
|
|
class="container"
|
|
style="display: none"
|
|
id="list-4"
|
|
>
|
|
<p class="ds-i18n">
|
|
Please move both sticks to the
|
|
<b>bottom-left corner</b> and
|
|
release them.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
When the sticks are back in the
|
|
center, press
|
|
<b>Continue</b>.
|
|
</p>
|
|
</div>
|
|
<div
|
|
class="container"
|
|
style="display: none"
|
|
id="list-5"
|
|
>
|
|
<p class="ds-i18n">
|
|
Please move both sticks to the
|
|
<b>bottom-right corner</b> and
|
|
release them.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
When the sticks are back in the
|
|
center, press
|
|
<b>Continue</b>.
|
|
</p>
|
|
</div>
|
|
<div
|
|
class="container"
|
|
style="display: none"
|
|
id="list-6"
|
|
>
|
|
<p class="ds-i18n">
|
|
Calibration completed successfully!
|
|
</p>
|
|
<p>
|
|
<span class="ds-i18n"
|
|
>You can check the calibration
|
|
with the</span
|
|
>
|
|
<a
|
|
href="https://hardwaretester.com/gamepad"
|
|
target="_blank"
|
|
>gamepad tester</a
|
|
>.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Have a nice day :)
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary"
|
|
id="calibNext"
|
|
onclick="calib_next()"
|
|
>
|
|
<span
|
|
class="spinner-border spinner-border-sm"
|
|
role="status"
|
|
aria-hidden="true"
|
|
id="btnSpinner"
|
|
style="display: none"
|
|
></span>
|
|
<span id="calibNextText" class="ds-i18n"
|
|
>Next</span
|
|
>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal -->
|
|
<div
|
|
class="modal fade"
|
|
id="infoModal"
|
|
tabindex="-1"
|
|
aria-labelledby="infoModalLabel"
|
|
aria-hidden="true"
|
|
>
|
|
<div class="modal-dialog modal-xl modal-fullscreen-md-down">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1 class="modal-title fs-5" id="infoModalLabel">
|
|
<i class="fas fa-gamepad"></i> <span
|
|
class="ds-i18n"
|
|
>Controller Info</span
|
|
>
|
|
</h1>
|
|
<button
|
|
type="button"
|
|
class="btn-close"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-lg-12 col-xl-6 py-3">
|
|
<div class="card">
|
|
<h5 class="card-header">
|
|
<i class="fas fa-code"></i
|
|
> Software
|
|
</h5>
|
|
<div class="card-body">
|
|
<dl
|
|
class="row"
|
|
id="fwinfoextra-fw"
|
|
></dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-12 col-xl-6 py-3">
|
|
<div class="card">
|
|
<h5 class="card-header">
|
|
<i class="fas fa-microchip"></i
|
|
> Hardware
|
|
</h5>
|
|
<div class="card-body">
|
|
<dl
|
|
class="row"
|
|
id="fwinfoextra-hw"
|
|
></dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal -->
|
|
<div
|
|
class="modal fade"
|
|
id="calibrateModal"
|
|
data-bs-backdrop="static"
|
|
data-bs-keyboard="false"
|
|
tabindex="-1"
|
|
aria-labelledby="staticBackdropLabel"
|
|
aria-hidden="true"
|
|
>
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1
|
|
class="modal-title fs-5"
|
|
id="staticBackdropLabel"
|
|
>
|
|
Calibrating center
|
|
</h1>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p class="ds-i18n">
|
|
Recentering the controller sticks.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Please do not close this window and do not
|
|
disconnect your controller.
|
|
</p>
|
|
<div
|
|
class="progress"
|
|
role="progressbar"
|
|
aria-label="Centering"
|
|
aria-valuenow="0"
|
|
aria-valuemin="0"
|
|
aria-valuemax="100"
|
|
>
|
|
<div
|
|
class="progress-bar"
|
|
style="width: 0%"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal -->
|
|
<div
|
|
class="modal fade"
|
|
id="rangeModal"
|
|
data-bs-backdrop="static"
|
|
data-bs-keyboard="false"
|
|
tabindex="-1"
|
|
aria-labelledby="staticBackdropLabel"
|
|
aria-hidden="true"
|
|
>
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h1
|
|
class="modal-title fs-5 ds-i18n"
|
|
id="staticBackdropLabel"
|
|
>
|
|
Range calibration
|
|
</h1>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p class="ds-i18n">
|
|
<b>The controller is now sampling data!</b>
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Rotate the sticks slowly to cover the whole
|
|
range. Press "Done" when completed.
|
|
</p>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary ds-i18n"
|
|
onclick="multi_calibrate_range_on_close()"
|
|
>
|
|
Done
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</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 do not close this window and do not
|
|
disconnect your controller.
|
|
</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-xl modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title ds-i18n">
|
|
DualSense Edge Calibration
|
|
</h5>
|
|
<button
|
|
type="button"
|
|
class="btn-close"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
></button>
|
|
</div>
|
|
|
|
<div class="modal-body p-4" id="donateBody">
|
|
<p class="ds-i18n">
|
|
Support for calibrating DualSense Edge stick
|
|
modules is now available as an
|
|
<b>experimental feature</b>.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Please note: the stick modules on the DS Edge
|
|
<b>cannot be calibrated via software alone</b>.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
To store a custom calibration on the stick's
|
|
internal memory, a
|
|
<b>hardware modification</b> is required.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
This involves temporarily disabling write
|
|
protection by applying
|
|
<b>+1.8V</b> to a specific test point on each
|
|
module.
|
|
</p>
|
|
<p></p>
|
|
|
|
<p>
|
|
<span class="ds-i18n"
|
|
>You can do this in two ways:</span
|
|
>
|
|
</p>
|
|
|
|
<ul>
|
|
<li class="ds-i18n">
|
|
<b>Internally</b>: by soldering a wire from
|
|
a +1.8V source to the write-protect TP.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
<b>Externally</b>: by applying +1.8V
|
|
directly to the visible test point without
|
|
opening the controller.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>
|
|
<b
|
|
><span class="ds-i18n"
|
|
>This is only for advanced users. If
|
|
you're not sure what you're doing,
|
|
please do not attempt it.</span
|
|
></b
|
|
>
|
|
</p>
|
|
<p>
|
|
<span class="ds-i18n"
|
|
>More details and images</span
|
|
> <a
|
|
href="https://github.com/lewy20041/Dualsense_Edge_Modules_Callibration"
|
|
>here</a
|
|
>.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
We are not responsible for any damage caused by
|
|
attempting this modification.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
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"
|
|
data-bs-dismiss="modal"
|
|
>
|
|
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">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title"></h5>
|
|
<button
|
|
type="button"
|
|
class="btn-close"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
></button>
|
|
</div>
|
|
|
|
<div class="modal-body p-4" id="donateBody">
|
|
<p class="ds-i18n">
|
|
Hi, thank you for using this software.
|
|
</p>
|
|
<p>
|
|
<span class="ds-i18n"
|
|
>If you're finding it helpful and you want
|
|
to support my efforts, feel free to</span
|
|
>
|
|
<a
|
|
href="https://paypal.me/alaincarlucci"
|
|
target="_blank"
|
|
class="text-body-secondary ds-i18n"
|
|
>buy me a coffee</a
|
|
><span class="ds-i18n">! :)</span>
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Do you have any suggestion or issue? Drop me a
|
|
message via email or discord.
|
|
</p>
|
|
<p class="ds-i18n">Cheers!</p>
|
|
|
|
<div class="collapse" id="ethereumCollapse">
|
|
<div class="card card-body">
|
|
<h5 class="card-title">Ethereum Address</h5>
|
|
<center>
|
|
<img src="donate.png" width="128px" />
|
|
</center>
|
|
<input
|
|
type="text"
|
|
class="form-control"
|
|
value="0x27dDA2f15A6A477fcdFB3709Ed0760aEF0246D5D"
|
|
readonly
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#ethereumCollapse"
|
|
aria-expanded="false"
|
|
aria-controls="ethereumCollapse"
|
|
type="button"
|
|
class="btn btn-success"
|
|
>
|
|
<svg class="bi" width="18" height="18">
|
|
<use xlink:href="#ethereum" /></svg
|
|
> Ethereum
|
|
</button>
|
|
|
|
<button
|
|
onclick="window.open('https://paypal.me/alaincarlucci')"
|
|
type="button"
|
|
class="btn btn-primary"
|
|
data-bs-dismiss="modal"
|
|
>
|
|
<svg class="bi" width="18" height="18">
|
|
<use xlink:href="#paypal" /></svg
|
|
> PayPal
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Popup -->
|
|
<div
|
|
class="modal fade"
|
|
id="popupModal"
|
|
tabindex="-1"
|
|
aria-labelledby="popupTitle"
|
|
aria-hidden="true"
|
|
>
|
|
<div class="modal-dialog modal-dialog-centered">
|
|
<div class="modal-content">
|
|
<div class="modal-body" id="popupBody"></div>
|
|
<div class="modal-footer">
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary"
|
|
data-bs-dismiss="modal"
|
|
>
|
|
OK
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- FAQ -->
|
|
<div
|
|
class="modal fade"
|
|
id="faqModal"
|
|
tabindex="-1"
|
|
role="dialog"
|
|
aria-labelledby="faqModalTitle"
|
|
aria-hidden="true"
|
|
>
|
|
<div
|
|
class="modal-dialog modal-lg modal-fullscreen-md-down"
|
|
role="document"
|
|
>
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title ds-i18n" id="faqModalTitle">
|
|
Frequently Asked Questions
|
|
</h5>
|
|
<button
|
|
type="button"
|
|
class="btn-close"
|
|
data-bs-dismiss="modal"
|
|
aria-label="Close"
|
|
></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="p-3 ds-i18n">
|
|
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!
|
|
</div>
|
|
<div
|
|
class="accordion accordion-flush"
|
|
id="accordionFlushExample"
|
|
>
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse3"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse3"
|
|
>
|
|
How does it work?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse3"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
|
|
<p>
|
|
<span class="ds-i18n"
|
|
>Through</span
|
|
>
|
|
<a
|
|
class="ds-i18n"
|
|
href="https://blog.the.al"
|
|
target="_blank"
|
|
>this research</a
|
|
><span class="ds-i18n"
|
|
>, 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.</span
|
|
>
|
|
</p>
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapseOne"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapseOne"
|
|
>
|
|
Does the calibration remain
|
|
effective during gameplay on
|
|
PS4/PS5?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapseOne"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="ds-i18n accordion-body">
|
|
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.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapseTwo"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapseTwo"
|
|
>
|
|
Is this an officially endorsed
|
|
service?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapseTwo"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="ds-i18n accordion-body">
|
|
No, this service is simply a
|
|
creation by a DualShock enthusiast.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse4"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse4"
|
|
>
|
|
Does this website detects if a
|
|
controller is a clone?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse4"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
If you want to extend this
|
|
detection functionality to
|
|
DualSense, please ship me a fake
|
|
DualSense and you'll see it in
|
|
few weeks.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse5"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse5"
|
|
>
|
|
What development is in plan?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse5"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
I maintain two separate to-do
|
|
lists for this project, although
|
|
the priority has yet to be
|
|
established.
|
|
</p>
|
|
|
|
<p class="ds-i18n">
|
|
The first list is about
|
|
enhancing support for DualShock4
|
|
and DualSense controllers:
|
|
</p>
|
|
<ul>
|
|
<li class="ds-i18n">
|
|
Implement calibration of
|
|
L2/R2 triggers.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Improve detection of clones,
|
|
particularly beneficial for
|
|
those seeking to purchase
|
|
used controllers with
|
|
assurance of authenticity.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Enhance user interface (e.g.
|
|
provide additional
|
|
controller information)
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Add support for
|
|
recalibrating IMUs.
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Additionally, explore the
|
|
possibility of reviving
|
|
non-functioning DualShock
|
|
controllers (further
|
|
discussion available on
|
|
Discord for interested
|
|
parties).
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="ds-i18n">
|
|
The second list contains new
|
|
controllers I aim to support:
|
|
</p>
|
|
<ul>
|
|
<li class="ds-i18n">
|
|
DualSense Edge
|
|
</li>
|
|
<li class="ds-i18n">
|
|
DualShock 3
|
|
</li>
|
|
<li class="ds-i18n">
|
|
XBox Controllers
|
|
</li>
|
|
</ul>
|
|
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse7"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse7"
|
|
>
|
|
Can I reset a permanent calibration
|
|
to previous calibration?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse7"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">No.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse8"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse8"
|
|
>
|
|
Can you overwrite a permanent
|
|
calibration?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse8"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
Yes. Simply do another permanent
|
|
calibration.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse9"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse9"
|
|
>
|
|
Does this software resolve
|
|
stickdrift?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse9"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
Stickdrift is caused by a
|
|
physical defect; namely dirt,
|
|
worn potentiometer or in some
|
|
cases a worn spring.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
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.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse10"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse10"
|
|
>
|
|
(Dualsense) Will updating the
|
|
firmware reset calibration?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse10"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">No.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse11"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse11"
|
|
>
|
|
After range calibration, joysticks
|
|
always go in corners.
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse11"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
This issue happens because you
|
|
have clicked "Done" immediately
|
|
after starting a range
|
|
calibration.
|
|
</p>
|
|
<b
|
|
><p class="ds-i18n">
|
|
Please read the
|
|
instructions.
|
|
</p></b
|
|
>
|
|
<p class="ds-i18n">
|
|
You have to rotate the joysticks
|
|
before you press "Done".
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Make sure to touch the edges of
|
|
the joystick frame and rotate
|
|
slowly, preferably in each
|
|
direction - clockwise and
|
|
anti-clockwise.
|
|
</p>
|
|
<p class="ds-i18n">
|
|
Only after you have done that,
|
|
you click on "Done".
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="accordion-item">
|
|
<h2 class="accordion-header">
|
|
<button
|
|
class="ds-i18n accordion-button collapsed"
|
|
type="button"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target="#flush-collapse6"
|
|
aria-expanded="false"
|
|
aria-controls="flush-collapse6"
|
|
>
|
|
I love this service, it helped me!
|
|
How can I contribute?
|
|
</button>
|
|
</h2>
|
|
<div
|
|
id="flush-collapse6"
|
|
class="accordion-collapse collapse"
|
|
data-bs-parent="#accordionFlushExample"
|
|
>
|
|
<div class="accordion-body">
|
|
<p class="ds-i18n">
|
|
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:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<span class="ds-i18n"
|
|
>Consider making a</span
|
|
>
|
|
<a
|
|
href="https://paypal.me/alaincarlucci"
|
|
target="_blank"
|
|
class="ds-i18n"
|
|
>donation</a
|
|
>
|
|
<span class="ds-i18n"
|
|
>to support my
|
|
late-night
|
|
caffeine-fueled
|
|
reverse-engineering
|
|
efforts.</span
|
|
>
|
|
</li>
|
|
<li class="ds-i18n">
|
|
Ship me a controller you
|
|
would love to add (send me
|
|
an email for organization).
|
|
</li>
|
|
<li>
|
|
<a
|
|
href="https://github.com/dualshock-tools/dualshock-tools.github.io/blob/main/TRANSLATIONS.md"
|
|
class="ds-i18n"
|
|
target="_blank"
|
|
>Translate this website
|
|
in your language</a
|
|
><span class="ds-i18n"
|
|
>, to help more people
|
|
like you!</span
|
|
>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button
|
|
type="button"
|
|
class="btn btn-primary ds-i18n"
|
|
data-bs-dismiss="modal"
|
|
>
|
|
Close
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<footer>
|
|
<div
|
|
class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top"
|
|
id="footbody"
|
|
>
|
|
<p>
|
|
<a
|
|
target="_blank"
|
|
href="https://github.com/dualshock-tools/dualshock-tools.github.io/commits/main/"
|
|
><span class="ds-i18n">Version</span> 2.3</a
|
|
>
|
|
(2025-04-10) -
|
|
<a
|
|
href="#"
|
|
class="ds-i18n"
|
|
onclick="show_donate_modal();"
|
|
>Support this project</a
|
|
> <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>
|
|
<li class="ms-3">
|
|
<a
|
|
class="link-body-emphasis"
|
|
href="https://discord.gg/w2P7Rrs2Yp"
|
|
target="_blank"
|
|
><svg class="bi" width="24" height="24">
|
|
<use xlink:href="#discord" /></svg
|
|
></a>
|
|
</li>
|
|
<li class="ms-3">
|
|
<a
|
|
class="link-body-emphasis"
|
|
href="https://github.com/dualshock-tools/"
|
|
target="_blank"
|
|
><svg class="bi" width="24" height="24">
|
|
<use xlink:href="#github" /></svg
|
|
></a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
|
|
<!-- Google tag (gtag.js) -->
|
|
|
|
<script>
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag() {
|
|
dataLayer.push(arguments);
|
|
}
|
|
gtag("js", new Date());
|
|
gtag("config", "G-FSXPMDXLLS");
|
|
gboot();
|
|
</script>
|
|
</div>
|
|
</body>
|
|
</html>
|