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

usb-cdc-acm

v0.1.1

Published

Userspace javascript implementation of a USB CDC ACM driver, on top of libusb

Downloads

467

Readme

usb-cdc-acm

Userspace javascript implementation of a USB CDC ACM driver, on top of libusb.

Build Status

This is part of Nordic Semiconductor's javascript tools to interface with nRF SoCs and development kits. Although USB CDC ACM is part of the USB specifications and a de facto standard when it comes to emulating a serial port connection on an embedded device, Nordic Semiconductor cannot offer support for other hardware platforms. This software is provided "as is".

Motivation

Sometimes you want to fetch info from the USB descriptors via the NodeJS usb module, and at the same time use the CDC ACM interface to send and receive data. But this is not possible with some host configurations (notably, win32/win64 platforms and their need to manually switch the driver via Zadig or the like).

API

usb-cdc-acm provides a duplex Stream interface. Please refer to NodeJS's documentation about Streams for a full API spec.

Other than that, usb-cdc-acm provides two entry points. Either of those need you to use usb to fetch a reference to the Device or to a CDC Interface.

Use the factory method when your USB device only has one CDC ACM interface:

var usb = require('usb');
const UsbCdcAcm = require('usb-cdc-acm');

var device = usb.findByIds( 0x1915, 0x520f ); // VID/PID for Nordic Semi / USB CDC demo

// The device MUST be open before instantiating the UsbCdcAcm stream!
device.open();

// An options object with the baud rate is optional.
let stream = UsbCdcAcm.fromUsbDevice(device, { baudRate: 1000000});

// Then, use it as any other Stream
stream.on('data', function(data) { console.log('recv: ', data); });
stream.write('Hello world!');

// Remember to destroy the stream and close the device when finished!
// Failure to do so might leave the USB device in an ususable state for other applications.
setTimeout(function(){ 
    stream.destroy();
    device.close();
}, 5000);

If the device has several CDC ACM interfaces and finer control is needed,

// An options object with the baud rate is optional.
let stream = new UsbCdcAcm(device.interfaces[0], { baudRate: 1000000});

For a more complete example, check the test/test.js file.

Legal

Distributed under a BSD-3 license. See the LICENSE file for details.