npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@csllc/cs-mb-socketcand

v3.0.2

Published

This package implements a TCP/IP client that detects and connects to a `socketcand` server (see https://github.com/linux-can/socketcand), allowing access to a CAN Bus network over an Ethernet network.

Downloads

21

Readme

cs-mb-socketcand

This package implements a TCP/IP client that detects and connects to a socketcand server (see https://github.com/linux-can/socketcand), allowing access to a CAN Bus network over an Ethernet network.

The main features of this package are:

  • socketcand server detection by listening for UDP beacon broadcasts
  • Ability to connect to a socketcand server, and send and receive CAN messages
  • Support for CAN message filtering, as allowed by socketcand
  • Extension of the NodeJS EventEmitter class, allowing bus and message events to be emitted

The package exports a class definition that is compatible with cs-modbus and other CAN modules such as can-usb-com and cs-pcan-usb. This allows cs-modbus to communicate with motor controllers via a socketcand server.

This package can be imported as follows:

const Factory = require('@csllc/cs-mb-socketcand');
let scanner = new Factory();

:warning: This package's interface underwent a rewrite in version 3.0.0, and all J1939 code was removed. Any code using version 2.x of this package may not be compatible with version 3.0.0 or newer.

Module overview

Connection management methods

  • .connect()
  • .disconnect()

Message transmission methods

  • .send()
  • .write()
  • .add()
  • .update()
  • .delete()

Message reception methods

  • .subscribe()
  • .unsubscribe()
  • .filter()

Bus management methods

  • .rawMode()
  • .bcmMode()
  • .isotpMode()
  • .statistics()
  • .echo()

can-usb-com-compatible methods

  • .list()
  • .open()
  • .close()
  • .isOpen()
  • .status()

Emitted events

  • scanStart
  • scanStop
  • discover
  • connect
  • disconnect
  • error
  • write
  • data

Detecting socketcand servers

The .startScanning() method causes the module to start listening for socketcand instances on the network. When an announcement is received, a discover event is emitted. This event is emitted each time an announcement is received. The package will continue discovering the network(s) as long as scanning is enabled.

Calling .startScanning() has the side effect of closing any active TCP connections before the scan begins.

The .stopScanning() method ends the scan; no further discover events are emitted after this method is called.

Alternatively, the .list() method scans the network for a predefined amount of time (5 seconds by default) and returns a list of found server.

Connection management

The connect method is used to establish a TCP connection to the server. This method returns a promise that resolves when the connection is established. An open event is also emitted when the connection succeeds. This connection can be either passive (listening only) or active (send and receive messages).

The disconnect method is used to close an open TCP connection.

Message transmission

The following methods allow sending messages on the CANBUS:

  • .send(): Sends a single CANBUS message using a complete ID (e.g. 29 bits) and data payload of up to 8 bytes. This method returns synchronously after the message is initiated. There is no facility to confirm receipt of the message. Example: send( 0x123, [] )

  • .write(): Accepts a packet in the style used by the can-usb-com package. This method allows software to use cs-mb-socketcand in place of a USB CAN dongle. Example: See examples/test.js

  • .add(): Schedules a message to be sent periodically. Example, send the CAN frame 123#1122334455667788 every 10 microseconds: add( 1, 0, 0x123, [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88])

  • .update(): Updates a scheduled message transmission (that was added using add) to change its contents or rate. The transmission timers are not touched. Example: update( 0x123, [ 0x11, 0x22, 0x33] )

  • .delete(): Removes a scheduled message transmission. Example: delete( 0x123 )

Message reception

Message reception is via events emitted by the class instance. When messages arrive that match the configured filters, they are emitted as a data event.

  • .subscribe(): Add a subscription to a specific CAN ID. An interval in seconds or microseconds may be set to throttle the number of frames sent. Example: subscribe( 0, 0, 0x123 )

  • .unsubscribe(): Unsubscribe from a message that was subscribed or filtered. This deletes all subscriptions or filters for a specific CAN ID.

  • .filter(): Configure the broadcast manager for reception of frames with a given CAN ID. Frames are only sent when they match the pattern that is provided. Examples:

    • Receive CAN ID 0x123 and check for changes in the first byte: filter( 0, 0, 0x123, [0xFF])
    • Receive CAN ID 0x123 and check for changes in given mask: filter( 0, 0, 0x123, [0xFF, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00])
    • As above but throttle receive update rate down to 1.5 seconds: filter( 1, 500000, 0x123, [0xFF, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00])

Raw vs BCM mode filter behavior

The connection between the client and server is initially opened in RAW mode, in which no filter is applied and all CAN messages are send to the client.

If filters are specified in the constructor's filters option, or the filter() method is called, the connection will be switched to BCM mode to enable filtering.

Bus management

  • .rawMode(): Switch to raw mode

  • .statistics(): Enable transmission of bus statistics, at a specified interval. This is only supported when the bus is operating in raw mode. To disable statistics, call this method specifying an interval of 0. Example: statistics(500).

  • .bcmMode(): Switch to broadcast manager (BCM) mode

  • .isotpMode(): Switch to ISO TP mode

can-usb-com-compatible methods

These methods return Promises, which are resolved or rejected when a request is complete.

  • .list(): Scan for a predetermined amount of time, and resolve with an array of discovered socketcand servers. One of the array elements can then be passed to .open.

  • .open(): Alias of .connect()

  • .close(): Alias of .disconnect()

  • .isOpen(): Returns true if the TCP socket is connected, false otherwise

  • .status(): Resolves with the full status of the instance

Constructor options

Just like can-usb-com and other CS CAN modules, this module can accept options passed to its constructor when it is instantiated.

Refer to examples/test.js for a working example that uses this feature.

Development

Before updating or modifying this package, please

  • Lint any changes using eslint.
  • Verify that example code works

Do not run any tests on a bus with active traffic, since receiving unexpected CAN packets may confuse the tests.

Examples

Refer to the examples folder for complete, functioning examples. In order to run the examples, you will need a functioning socketcand server on your network.

Reference