SilverNeedle Specification - 1.0.0


Device Manager


The Device Manager manages all devices. This includes connected and disconnected devices. Potential devices include:

  • Disconnected Devices:
  • Devices discovered on the local network
  • Saved devices (with connection data)
  • Connected devices
    • Devices that have been connected to and enumerated.


  • Add new device
  • Modify saved devices
  • Connect to device
  • Disconnect from device



The Device object represents a single hardware device. A single device can contain multiple instruments.

Device objects are created by the device manager and configured by interrogating the hardware.

Each device provides at least one transport. Devices need to manage the current transport as well as potential transports. For example if a device supports HTTP and WS device enumeration will take place over HTTP after which WS could be hot swapped in. At any point the device could hot swap the transport back to HTTP. The device will be responsible for manage and swapping transports as necessary.

If sessions are implemented the device object will be responsible for managing sessions (ie access to the hardware).



Instrument objects are contained within the device and represent a single instrument on the device. Instruments are passed a reference to the device's transport upon creation.

Instruments expose high level, instrument specific functions that abstract the actual communication with the hardware.

  • Oscilloscope
  • Logic Analyzer
  • Arbitrary Waveform Generator
  • Power Supply
  • DMM



The object provides protocol abstraction for open scope communication.

  • Transport (HTTP / WS) is an object that is created and stored by the device object.
  • The transport can be changed on the fly using getters/setters provided by the device.
  • The device object passes a reference to the transport to each instrument.
  • Instruments call the transport to communicate with the hardware.
  • Instruments should not need any knowledge of the transport's underlying communication protocol.


  • Read
  • Write
  • Read/Write
  • StreamTo
  • StreamFrom

The device provides transport setter function(s) that update the the transport object in the device and call instrument transport setters to update all instrument transports.


Communication between the GUI and hardware is abstracted with several layers.

GUI ⇒ Device Manager ⇒ Device ⇒ Instrument ⇒ Transport ~ ~ ~ Hardware


Each instrument provides a single HTTP endpoint. Configuration and control packets are sent to that endpoint. Some indication of status is returned for every message.

Data is passed as JSON.


Each instrument provides a single websocket endpoint. The same HTTP JSON data is passed when using a websocket transport.

Configuration Utility

A configuration utility will be used to configure the network settings on the OS Hardware via USB UART. This utility should work on Win/Mac/Linux and connect to the hardware via USB UART.

The configuration utility will also serve as an HTTP endpoint for waveforms to connect to and the utility will pass data from WWF to the hardware.

Future version of the utility could be extended with plugins to support devices like AD2, myDAQ, etc in WWF.


The angular2-highcharts library is used for the chart. Currently, angular2-highcarts v0.1.0 is used.


Each series has an independent y-axis to allow for independent offset and division settings. The active series will display its y-axis scale on the left of the chart. Clicking on a specific point in a series will set that series as the active series and update the y-axis.

Clicking and holding on the chart will allow for panning of the chart.

Clicking and holding on the chart while holding shift will allow for vertical panning of the active series.

Buffer Settings

Buffers are numbered 1 through the max number of buffers. This is to avoid numbering confusion such as: Buffer 0 of 0 in the case of a single buffer being available.

Cursor Settings

The chart component contains an internal property that determines if cursors will be displayed. To enable cursors, call the enableCursors() method on the chart component after it is instantiated.

Timeline Chart

Similar to cursors, the chart component contains an internal property to determine if the timeline chart will be displayed. To enable the timeline chart, call the enableTimelineView() method on the chart component after it is instantiated.