Initial commit: get everything rolling
This commit is contained in:
80
sysfs-functions.js
Normal file
80
sysfs-functions.js
Normal file
@@ -0,0 +1,80 @@
|
||||
// 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
|
||||
};
|
||||
Reference in New Issue
Block a user