UNPKG

@csllc/j1939

Version:

J1939 transport layer for CANBUS communication

84 lines (67 loc) 2.12 kB
// Example that demonstrates J1939-81 network management and address claiming // Usage: node network_management.js --name "00 00 00 00 00 00 00 00" // CTRL-C stops the example const Can = require('@csllc/cs-canbus-universal'); const J1939 = require('..'); let name = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; let nameArgumentIndex = process.argv.findIndex((a) => a === '--name'); if (nameArgumentIndex > 0) { let nameString = process.argv[nameArgumentIndex + 1]; if (nameString) { nameString = nameString.split(" "); if (nameString.length != 8) { throw new Error("NAME must be 8 bytes long"); } name = nameString.map((i) => parseInt(i, 16)); } } console.log("Using NAME", name); let can = new Can({ canRate: 250000, // Only allow J1939 network management through filters: [ { ext: true, mask: 0x00F80000, code: 0x00EE0000 } ] }); // Event handlers can.on('open', () => console.info('Port Open')); can.on('error', (err) => console.error('Port Error:', err)); can.on('data', (msg) => console.log('Msg: ', msg.id.toString(16), msg.buf)); can.on('close', (err) => { if (err && err.disconnected) { console.log('Port Disconnected'); } else { console.log('Port Closed by application'); } }); // Look for compatible CAN adapters can.list() .then(function(ports) { if (ports.length > 0) { // Set up J1939 stack to use CAN interface let j1939 = new J1939(can, { address: 0x80, name: name, addressRange: [ 0x80, 0xEF ], priority: 6 }) j1939.on('data', (msg) => console.log("j1939 data", msg)); j1939.on('error', (e) => console.log("j1939 error", e.message)); j1939.on('address', (status, address) => console.log("j1939 address, status", address, status)); // Open CAN interface return can.autoOpen(ports); } else { console.error('No CAN devices found'); return Promise.reject(); } }) .catch(function(err) { // Something went wrong... console.error(err); can.close(); process.exit(-1); });