Advanced IT info

Advanced IT information

This section provides information to IT teams who are supporting Blank-it within their organization.

File system

Blank-it stores files in three main directories.

  • The baseline configuration directory. This directory should be read-only. It stores some baseline configuration file that should never be able to be edited by unprivileged users.
  • The shared data directory. Users should have read and write access. It stores several transient data files and configuration files.
  • The logs directory. Users should have read and write access. It stores the application log files.

By default, these directories are as follows:

DirectoryDirectory pathPermissions
Baseline configurationC:\ProgramData\Blank-itRead-only
Shared dataC:\Users\Public\Documents\Blank-it\DataRead + Write
LogsC:\Users\Public\Documents\Blank-it\LogsRead + Write

Firewall configuration

The Blank-it software will occasionally make web requests to the Blank-it servers. It is recommended that an organization allows the following traffic through its firewall:

HostnamePortComments
gateway.blank-it.com443Required for licensing/analytics/configuration on modern versions of Blank-it.
licensing.blank-it.com443Required for online license activation.
analytics.blank-it.com443Required to collect analytics data (sensor data, GPS data, screen events, etc.)
portal.blank-it.com443Required to allow administrators to use the built-in configuration manager.

Distributing a configuration to a fleet of PCs

In order to accommodate the widest variety of organizational software deployment tools, Blank-it uses the simplest possible configuration deployment strategy. To roll out a new Blank-it configuration, all an organization has to do is overwrite the existing Blank-it configuration file with a new Blank-it configuration file. This can be done while the Blank-it software is running; Blank-it will continue to run as it was, the new configuration will be applied next time the Blank-it software starts.

Advanced installation options

Blank-it has a number of advanced installation options that can be used by passing custom arguments to msiexec during the installation process.

ArgumentDescription
BASE_DIRThe path to use as the baseline configuration directory (described above).
SHARED_DIRThe path to use as the shared configuration directory (described above).
LOGS_DIRThe path to use as the logs directory (described above).
CONFIG_PATHThe path of a config file to be automatically deployed to the relevant locations.
KEEP_LOGS(Uninstall only) If set to true, retain the log files when uninstalling.

In addition, Blank-it can be installed in 'quiet' mode by passing the /qn flag to msiexec.

Here is an example installation command that will install Blank-it in quiet mode, with a custom directory structure, and automatic deployment of a configuration file:

msiexec.exe /i blankit.msi /qn BASE_DIR="C:\BL_BASE" SHARED_DIR="C:\BL_SHARED" LOGS_DIR="C:\BL_LOGS" CONFIG_PATH="config.dat"

Here is an example uninstallation command that will uninstall Blank-it in quiet mode, but retain the log files.

msiexec.exe /x blankit.msi /qn KEEP_LOGS=TRUE

Microsoft WebBrowser

The Blank-it Browser hosts Microsoft's SHDOCVW.DLL WebBrowser control (used in Internet Explorer). If your organization does not wish to use the Microsoft browser technology, we advise against using the Blank-it Browser.

Custom algorithms

Blank-it supports custom algorithms, allowing IT administrators to customize how Blank-it will blank the screen in response to input from the BL-146, BL-149, and BL-205 devices. These algorithms are built in to the configuration file, and executed by the Blank-it software. Custom algorithms can contain arbitrary code.

Programming language

Custom algorithms are written in the C# programming language (opens in a new tab)

Algorithm structure

The basic structure of a custom algorithm is as follows:

class CustomAlgorithm : Algorithm
{
    public override string Id { get { return "[GUID]"; } }
 
    public override void HandlePayloadV1(PayloadV1 payload)
    {
        // Logic for handling the V1 payload goes here.
    }
 
    public override void HandlePayloadV2(PayloadV2 payload)
    {
        // Logic for handling the V2 payload goes here.
    }
}

To update the motion state of the vehicle, the algorithm just has to update its MotionState property to one of the following values:

  • MotionState.Unknown (flags the vehicle as being in an unknown state)
  • MotionState.Moving (flags the vehicle as moving)
  • MotionState.Stationary (flags the vehicle as stationary)

Whenever a new V1 payload is received, it is passed into the HandlePayloadV1 method. The method can choose to update the MotionState property if it so desires.

Whenever a new V2 payload is received, it is passed into the HandlePayloadV2 method. The method can choose to update the MotionState property if it so desires.

The Id property must always return the string [GUID]. This is transformed upon compilation, and if it is changed the custom algorithm will not be correctly loaded by Blank-it.

Device payloads

The algorithm can handle V1 payloads (for BL-146, BL-149, and BL-205) and V2 payloads (for BL-205 only).

PayloadV1 has the following properties:

  • InstantaneousValue (the instantaneous value of the RMS average of the 3-axis acceleration data)
  • AverageValue (the n-second moving average of the RMS average of the 3-axist acceleration data, with the value of n set in the sensor's firmware)

PayloadV2 has the following properties:

  • Motion4 (the 4-second RMS 3-axis motion value (cm/sec))
  • Motion10 (the 10-second RMS 3-axis motion value (cm/sec))
  • Vibration4 (the 4-second RMS 3-axis vibration value (mg))
  • Vibration10 (the 10-second RMS 3-axis vibration value (mg))
  • Shock10 (the 10-second 3-axis peak shock value (mg))
  • Rotation20 (the 20-second RMS 3-axis rotation value (degrees x 10))
  • Angle (the vertical angle (degrees x 10), with the origin set when the sensor powers on)
  • AccelerationX (the x-axis acceleration (mg))
  • AccelerationY (the y-axis acceleration (mg))
  • AccelerationZ (the z-axis acceleration (mg))
  • RotationX (the x-axis rotation (degrees/sec x 10))
  • RotationY (the y-axis rotation (degrees/sec x 10))
  • RotationZ (the z-axis rotation (degrees/sec x 10))

A simple example

Here is an example of a simple custom algorithm that will flag the device as being in motion as soon as the V1 motion reading exceeds 50.

using System;
 
class SimpleAlgorithm : Algorithm
{
    public override string Id { get { return "[GUID]"; } }
 
    public override void HandlePayloadV1(PayloadV1 payload)
    {
        if (payload.AverageValue > 50)
        {
            MotionState = MotionState.Moving;
        }
        else
        {
            MotionState = MotionState.Stationary;
        }
    }
 
    public override void HandlePayloadV2(PayloadV2 payload)
    {
        // Ignore the V2 payload.
    }
}

Additional information

Standard C# using statements (opens in a new tab) are required, except for the Blank-it namespaces which are automatically added.

The following assemblies are referenced by default:

  • BlankIt.exe
  • System.dll
  • System.Core.dll
  • System.Data.dll
  • System.Data.DataSetExtensions.dll
  • System.Xml.dll
  • System.Xml.Linq.dll

Custom references can be added using Roslyn-style #r declarations (opens in a new tab). For example: #r CustomAssembly.dll