jsdualsense
Version:
Control your PS5 (or EDGE) controller with JavaScript using WebHID.
64 lines (48 loc) • 1.4 kB
JavaScript
const decoder = new TextDecoder();
const alloc_req = (id, data = [], device) => {
let len = 0;
const fr = device.collections[0].featureReports;
fr.forEach(e => {
if (e.reportId === id) {
len = e.items[0].reportCount;
}
});
const cerosArray = new Array(len - data.length).fill(0);
const dataFilled = data.concat(cerosArray);
const out = new Uint8Array(dataFilled);
return out;
};
const buf2hex = (buffer, reverse = false) => {
const convertUint = [...new Uint8Array(buffer)];
const bufHex = convertUint.map(x => {
const toStringHex = x.toString(16);
const adFirstCero = toStringHex.padStart(2, '0');
if (reverse) {
return reverse_str(adFirstCero);
}
return adFirstCero;
});
const stringHex = bufHex.join('');
return stringHex;
};
const reverse_str = s => s.split('').reverse().join('');
const decoderData = async (data, length, decodeAscii = true) => {
const pcba_id = data;
// if (
// pcba_id.getUint8(1) !== base ||
// pcba_id.getUint8(2) !== num ||
// pcba_id.getUint8(3) !== 2
// ) {
// return;
// }
const bufferToDecode = pcba_id.buffer.slice(4, 4 + length);
if (decodeAscii) {
const decodeData = decoder.decode(bufferToDecode);
return decodeData;
} else {
const decodeHexData = buf2hex(bufferToDecode);
return decodeHexData;
//return buf2hex(bufferToDecode)
}
};
export { alloc_req, decoderData, reverse_str, buf2hex };