Skip to content
sebi2k1Public

About

NodeJS SocketCAN extension

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

249 stars

Watchers

17 watching

Forks

Latest commit

 

History

297 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status

node-can

This is a NodeJS SocketCAN extension. SocketCAN is a socket-based implementation of the CANbus protocol for Linux system.

This extensions makes it possible to send and receive CAN messages (extended, remote transission) using simple Javascript/Typescript functions.

Usage (JavaScript)

Basic CAN example:

var can = require("socketcan");

var channel = can.createRawChannel("vcan0", true);

// Log any message
channel.addListener("onMessage", function(msg) { console.log(msg); } );

// Reply any message
channel.addListener("onMessage", channel.send, channel);

channel.start();

Working with message and signals:

var can = require("socketcan");

// Parse database
var network = can.parseNetworkDescription("samples/can_definition_sample.kcd");
var channel = can.createRawChannel("vcan0");
var db_motor = new can.DatabaseService(channel, network.buses["Motor"]);
var db_instr = new can.DatabaseService(channel, network.buses["Instrumentation"]);

channel.start();

// Register a listener to get any value changes
db_motor.messages["CruiseControlStatus"].signals["SpeedKm"].onChange(function(s) {
   console.log("SpeedKm " + s.value);
});

// Register a listener to get any value updates
db_motor.messages["Emission"].signals["Enginespeed"].onUpdate(function(s) {
   console.log("Enginespeed " + s.value);
});

// Update tank temperature
db_instr.messages["TankController"].signals["TankTemperature"].update(80);

// Trigger sending this message
db_instr.send("TankController");

channel.stop()

Usage (TypeScript)

Basic CAN example:

import {Message} from "*can.node";
import * as can from "socketcan";

const channel = can.createRawChannel("vcan0", true);

// Log any message
channel.addListener("onMessage", function (msg: Message) { console.log(msg); });

// Reply any message
channel.addListener("onMessage", channel.send, channel);

channel.start();

Working with message and signals:

import * as can from "socketcan"

// Parse database
const network = can.parseNetworkDescription("samples/can_definition_sample.kcd");
const channel = can.createRawChannel("vcan0");
const db_motor = new can.DatabaseService(channel, network.buses["Motor"]);
const db_instr = new can.DatabaseService(channel, network.buses["Instrumentation"]);

channel.start();

// Register a listener to get any value changes
db_motor.messages["CruiseControlStatus"].signals["SpeedKm"].onChange(function (s: can.Signal) {
	console.log("SpeedKm " + s.value);
});

// Register a listener to get any value updates
db_motor.messages["Emission"].signals["Enginespeed"].onUpdate(function (s: can.Signal) {
	console.log("Enginespeed " + s.value);
});

// Update tank temperature
db_instr.messages["TankController"].signals["TankTemperature"].update(80);

// Trigger sending this message
db_instr.send("TankController");

channel.stop();

Documentation

API documentation hosted on GitHub pages.

Install

There are two options for installing node-can:

  1. Clone / download node-can from GitHub, then:
    $ pnpm install --frozen-lockfile
    $ pnpm run configure
    $ pnpm run build:all
  1. Install via npm:
    $ npm install socketcan

About

NodeJS SocketCAN extension

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

249 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages