const can = require("socketcan"); var channel = can.createRawChannel("vcan0", true); const INVR_ID = 0x04; const ERPM_ID = (0x20 << 5) | INVR_ID; const APPS_ID = 0x50; const SELC_ID = 0x19; const MXCU_ID = (0x01 << 5) | INVR_ID; const MXBC_ID = (0x02 << 5) | INVR_ID; var APPS = 0; var ERPM = 0; // SELECT (function sendSELC() { channel.send({ id: SELC_ID, ext: false, data: Buffer.from([0x02]) // ENABLE CONTROL BY TELEMETRY }); })(); // APPS function sendAPPS() { APPS = Math.floor(Math.random() * 1000); console.log(`APPS: ${APPS / 10}%`); channel.send({ id: APPS_ID, ext: false, data: Buffer.from([APPS & 0xFF, APPS >> 8]) // SEND APPS PERCENTAGE }); setTimeout(sendAPPS, Math.floor(Math.random() * 5000)); } // ERPM (function sendERPM() { ERPM = Math.floor(Math.random() * 65000); console.log(`ERPM: ${ERPM}`); channel.send({ id: ERPM_ID, ext: false, data: Buffer.from([(ERPM >> 8 * 3) & 0xFF, (ERPM >> 8 * 2) & 0xFF, (ERPM >> 8) & 0xFF, ERPM & 0xFF, 0x00, 0x71, 0x01, 0x86]) // SEND ERPM }); setTimeout(sendERPM, Math.floor(Math.random() * 10000)); })(); sendAPPS(); channel.addListener("onMessage", async function (message) { switch (message.id) { case MXCU_ID: console.log(`CURRENT: ${message.data[0] << 8 | message.data[1]}`); break; case MXBC_ID: console.log(`BRAKE: ${message.data[0] << 8 | message.data[1]}`); break; default: break; } }); channel.start();