Change log from version 1.7

Device Information

The deviceInformation command fetches for example the product id and the FW version. What information that is available differs depending on the type of device. The following example shows a response from a platform device.

  deviceInformation {
  }
  deviceInformation {
    platformInformation {
      platformVersionMajor 7,
      platformVersionMinor 0,
      protocolVersionMajor 1,
      protocolVersionMinor 5,
      firmwareVersionMajor 1,
      firmwareVersionMinor 0,
      hardwareIdentifier "Demo board",
      hardwareVersion "R2",
      asicType nn1002,
      numberOfAsics 1,
      mcuUniqueIdentifier '340038000E51333439333633'H,
      projectReference "DEMO_1.0_REL",
      platformReference "734cebd",
      buildTime "16:01:14",
      buildDate "2016-07-01"    
	}
  }

The fields have the following meaning:

Device Count

The deviceCount command enumerates the available virtual devices.

  deviceCount {
  }
  deviceCount {
    totalNumberOfDevices 1,
    airDevices 1
  }

Device type instances are indexed from zero. The response shown here means that the only virtual device available is Air[0].

Frequency

The frequency command changes the update frequency of all sensor modules globally, that is for all devices on all platforms.

The following update frequencies can be set, if enabled in the product:

The unit is Hz.

  frequency {
    finger 30,
    idle 10
  }

The response contains the current frequency settings of the product:

  frequency {
    finger 30,
    idle 10
  }

In this example, the sensor module update frequency will be 30 Hz as long as finger-like objects were recently detected. When no objects are detected, the frequency will drop to 10 Hz.

Touch Sensor

There are a number of different sensor module products that can co-exist on the same physical device. There are some product-specific commands, but the ones listed here are general.

The Touch Sensor Module will be used as example, which means that the device address will be the first Air virtual device

'0200'H

Touch Mode

The sensor module can be configured to send an Up (touch event) after Down within a defined threshold to create an instant touch experience. With Click on Touch enabled, Down is sent immediately when a touch object has been identified by the sensor, but Up is sent earlier than normal depending on the sub-mode.

clickOnTouchTime is measured in milliseconds (ms), and clickOnTouchRadius is measured in 1/10 mm. 

TouchMode{
	currentTouchMode clickOnTouch,
	clickOnTouchTime 100,
	ckickOnTouchRadius 100
}


currentTouchMode is one of the following:

clickOnTouch be set as instant or defined by a threshold:

TouchModeUnitDescription
clickOnTouchTime 
ms

If clickOnTouchTime is larger than 0 - A threshold is applied. Click on Touch will then only be applied if the tracked object is located within clickOnTouchRadius in the duration of clickOnTouchTimer.

If clickOnTouchTime is 0 - instant Up is applied. Click on Touch is no longer restricted over distance (clickOnTouchRadius). The Down event will immediately be followed by an Up.

clickOnTouchRadius 
1/10 mmClick On Touch will only be applied if the tracked object is located within clickOnTouchRadius in the duration of clickOntouchTimer.

Operation Mode

The operationMode command sets what processing to perform on the sensor modules signals, and what diagnostics that are exposed.

The following example sets the operation mode to normal object detection:

  operationMode {
    detection TRUE,
    signals FALSE,
    ledLevels FALSE,
    detectionHid FALSE,
    gestures FALSE
  }
  operationMode {
    detection TRUE,
    signals FALSE,
    ledLevels FALSE,
    detectionHid FALSE
  }

As can be seen gestures are missing in the response. This is a valid response, since the device is built with a subset of the protocol, or an older forward-compatible version.


Touch Format

The touchFormat command retrieves the binary format of the detected objects. 

  touchFormat {
  }
  touchFormat {
    touchDescriptor { id, event, loc-x-byte1, loc-x-byte2, loc-y-byte1, loc-y-byte2, size-x-byte1, size-y-byte1 }
  }

The touchDescriptor is a bit string, where each bit signifies one byte of payload being included in the touchNotification octet strings. A touchNotification is the concatenation of those bytes. The following table lists all bits. Bits used in the example are marked green.

NameDescriptionComment
idTouch Identifier
eventUp/Down/Move0=Down; 1=Move; 2=Up; 3=Invalid; 4=Ghost
loc-x-byte1X coordinate
loc-x-byte2X expandedfor higher precision
loc-x-byte3X expandedfor higher precision
loc-y-byte1Y coordinate
loc-y-byte2Y expandedfor higher precision
loc-y-byte3Y expandedfor higher precision
loc-z-byte1Z coordinate
loc-z-byte2Z expandedfor higher precision
loc-z-byte3Z expandedfor higher precision
size-x-byte1X size
size-x-byte2X sizefor higher precision
size-x-byte3X sizefor higher precision
size-y-byte1Y size
size-y-byte2Y sizefor higher precision
size-y-byte3Y sizefor higher precision
size-z-byte1Z size
size-z-byte2Z sizefor higher precision
size-z-byte3Z sizefor higher precision
orientationOrientationHand orientation
confidenceConfidenceIgnore. This value is not reliable for the Touch Sensor Module.
pressurePressure

Location and size coordinates can be specified with up to 3 bytes. The byte order in decreasing significance - big-endian. For example:

Location is signed, and size is not.

The location coordinate scale is one of two systems, depending on which detector is used:

Touch Sensor Module uses Robair, thus the unit is 0.1 mm.

Size is in mm.

Confidence and pressure are fractions of the full values, in percent.

Enable Execution

The enable command activates the Touch Sensor Module, and notifications of detections start to stream.

  enable {
    enable 0
  }
  enable {
    enable
  }


To deactivate the Touch Sensor Module, send the disable command:

  enable {
    disable NULL
  }
  enable {
    disable NULL
  }

Touch Notifications

A detected object is reported with a touchNotification. The touchNotification payload is a touchDescriptor bit string. Every concurrently tracked object is represented by its own touchNotification payload.

notificationMessage touchNotifications: {
    '0001013600730A0A64'H
  },

The following table shows the value of the example payload interpreted with the touch descriptor.  

NameDescriptionCommentValue
idTouch Identifier
 0
eventUp/Down/Move0=Down; 1=Move; 2=Up; 3=Invalid; 4=Ghost 1
loc-x-byte1X coordinate
 1
loc-x-byte2X expandedfor higher precision54 
loc-y-byte1Y coordinate
loc-y-byte2Y expandedfor higher precision115 
size-x-byte1X size
10 
size-y-byte1Y size
10 

The touchNotification is from a Core device and translates to "Object 0 moved. Location is (31.0, 11.5) mm. Size is 10x10 mm."

Information

The command deviceInformation retrieves some information about the virtual device instance.

  deviceInformation {
  }
  deviceInformation {
    deviceInstanceInformation {
      productVersionMajor 1,
      productVersionMinor 38,
      physicalWidth 1584,
      physicalHeight 1341,
      numberOfSignalAxes 0
    }
  }

The response contains the deviceInstanceInformation structure, with the following parts:

Part

Description

productVersion

The specific type version of the virtual device.

physical

Size in unit 0.1 mm. See section Touch Format for the relationship to location coordinates.

numberOfSignalAxes

Only applicable for Core devices. The number of sensor arrays, each monitoring one dimension/axis of a touch sensor. Generally 2.

Configuration

Some configurations of the Touch Sensor Module can be changed at run-time. The deviceConfiguration request command and command response are identical, except some configuration items in the request may be omitted in order to leave them in their current state.

For instance, to set object size restrictions only, omit all other items:


  deviceConfiguration {
    sizeRestriction {
      maxSizeEnabled TRUE,
      maxSize 100,
      minSizeEnabled FALSE
    }
  }

The command response contains the state of all configuration items:

  deviceConfiguration {
    subTouchActiveArea {
      lowBoundX 0,
      lowBoundY 0,
      highBoundX 1584,
      highBoundY 1341,
      reverseX FALSE,
      reverseY FALSE,
      flipXY FALSE,
      offsetX 0,
      offsetY 0
    },
    sizeRestriction {
      maxSizeEnabled FALSE,
      maxSize 0,
      minSizeEnabled FALSE,
      minSize 0
    },
    detectionMode default,
    numberOfReportedTouches 2,
    hidDisplaySize {
      x 1584,
      y 1341
    }
  }

The items are:


Read More about the Communication Protocol

Read More