Files
SyncTool/sysfs-functions.js
2026-09-01 22:22:56 -04:00

80 lines
1.5 KiB
JavaScript

// sysfs functions
const fs = require('node:fs');
const LED_PATH = fs.existsSync('/sys/class/leds/ACT')
? '/sys/class/leds/ACT'
: '/sys/class/leds/led0';
// detach kernel trigger once at startup
try {
fs.writeFileSync(`${LED_PATH}/trigger`, 'none');
} catch (err) {
console.error(`[LED] failed to claim sysfs led:`, err.message);
}
let blinkTimer = null;
function setBrightness(val) {
try {
fs.writeFileSync(`${LED_PATH}/brightness`, val.toString());
} catch (err) {
console.error(`[LED] error writing brightness:`, err.message);
}
}
function turnOff() {
stopBlink();
setBrightness(0);
}
function turnOn() {
stopBlink();
setBrightness(1);
}
function getState() {
try {
return parseInt(fs.readFileSync(`${LED_PATH}/brightness`, 'utf8').trim(), 10);
} catch {
return null;
}
}
function toggle() {
setBrightness(getState() === 1 ? 0 : 1);
}
function startBlink(interval = 500) {
stopBlink();
let state = 1;
setBrightness(state);
blinkTimer = setInterval(() => {
state = state === 1 ? 0 : 1;
setBrightness(state);
}, interval);
}
function stopBlink() {
if (blinkTimer) {
clearInterval(blinkTimer);
blinkTimer = null;
}
}
function restoreDefault() {
stopBlink();
try {
fs.writeFileSync(`${LED_PATH}/trigger`, 'mmc0');
} catch {}
}
module.exports = {
turnOff,
turnOn,
toggle,
getState,
startBlink,
stopBlink,
restoreDefault
};