# Test and troubleshoot

## Tools

The following tools are supported for functional testing and build
environment setup.

### Sensor functional test tools

The sensor info test, driver acceptance test, and sensor workhorse tool facilitates comprehensive testing of the sensor functionalities.

- The sensor info test provides detailed information about the sensor.
- The driver acceptance test ensures that the sensor drivers are
functioning correctly and are compatible with the QSH.
- The sensor workhorse is a tool to stress-test the sensors under
various conditions.

The test tools ensure the accuracy, reliability, and optimal performance
of both the hardware-based and software-based sensors in your
applications. The following sections provide information on the test
tools.

#### Sensor info test (ssc\_sensor\_info) to list QSH supported sensors and their attributes

**Sensor info test definition**

The sensor info test `ssc_sensor_info` is an application within the
QSH test suite. It lists the QSH supported sensors and their attributes.
You can query the attributes of a specified data type.

ssc_sensor_info [-sensor=<sensor_type>] [-delay=<time_in_seconds>][-duration=<time_in_seconds>][-default_only=<1|0>][-log=<1|0>][-help]
    Copy to clipboard

Table : Parameters of ssc_sensor_info

| **Flags** | **Type** | **Value** | **Units** | Notes |
| --- | --- | --- | --- | --- |
| Sensor | `string` | Any valid sensor type, such as *accel* and *gyro*. | – | Queries the attribute information for a specified sensor type. |
| Log | `int` | 0 | 1 | – | Enables or disables diagnostic (API) logs. |
| help(h) | `int` | – | – | Displays command usage help. |
| Duration | `int` | Positive values | seconds | Specifies the wait time for the sensor attribute updates. |
| Delay | `int` | Positive values | seconds | Specifies the time delay before sending the sensor requests. |
| default\_only | `int` | 0 | 1 | – | If the `default_only` flag is set to False, UIDs of all the available sensors that support the specified data type are sent. If the `default_only` flag is set to True, only the UID of the default sensor availability is sent. |

**Sensor info test examples**

- Query the sensor attributes and generate diagnostic logs.

ssc_sensor_info
        Copy to clipboard

root@qcm6490:~# ssc_sensor_info
        ssc_sensor_info v1.86
        
        SUID           = 0xebd5604d09d379bca54dcf30ec041e0f
        NAME           = ak0991x
        VENDOR         = akm
        TYPE           = mag
        AVAILABLE      = true
        VERSION        = 2.62.47
        API            = sns_mag.proto
        RATES          = [1.000000, 10.000000, 20.000000, 50.000000, 100.000000]
        RESOLUTIONS    = 0.150000
        RANGES         = [-4912.000000,4912.000000]
        DRI            = false
        FIFO_SIZE      = 0
        STREAM_TYPE    = streaming
        STREAM_SYNC    = false
        DYNAMIC        = false
        EVENT_SIZE     = 16
        OP_MODES       = [LOW_POWER, LOW_NOISE]
        ACTIVE_CURRENT = 900
        SLEEP_CURRENT  = 3
        HW_ID          = 0
        RIGID_BODY     = display
        PHYSICAL_SENSOR       = true
        PHYSICAL_SENSOR_TESTS = [3, 1]
        SELECTED_RESOLUTION   = 0.150000
        SELECTED_RANGE        = [-4912.000000,4912.000000]
        
        SUID           = 0xaddeaddeaddeaddeaddeaddeaddeadde
        NAME           = da_test
        VENDOR         = QTI
        TYPE           = da_test
        AVAILABLE      = true
        VERSION        = 0.51.0
        API            = sns_da_test.proto
        STREAM_TYPE    = on_change
        
        SUID           = 0x69def905fea2fbac6a43ca273221a2eb
        NAME           = aont
        VENDOR         = QTI
        TYPE           = aont
        AVAILABLE      = true
        VERSION        = 0.0.1
        API            = sns_aont.proto
        STREAM_TYPE    = on_change
        
        SUID           = 0xabababababababababababababababab
        NAME           = suid
        VENDOR         = QTI
        TYPE           = suid
        AVAILABLE      = true
        VERSION        = 0.0.1
        API            = sns_suid.proto
        STREAM_TYPE    = single_output
        
        SUID           = 0xe12754a7007f27595e2541b4701e2275
        NAME           = registry
        VENDOR         = QTI
        TYPE           = registry
        AVAILABLE      = true
        VERSION        = 0.0.1
        API            = sns_registry.proto
        STREAM_TYPE    = single_output
        
        SUID           = 0xadfeadfeadfeadfeadfeadfeadfeadfe
        NAME           = da_test_big_image
        VENDOR         = QTI
        TYPE           = da_test
        AVAILABLE      = true
        VERSION        = 0.49.0
        API            = sns_da_test.proto
        STREAM_TYPE    = on_change
        
        SUID           = 0x61ab5376b4a5c9aa58442ede47acd316
        NAME           = icm4x6xx
        VENDOR         = TDK-Invensense
        TYPE           = accel
        AVAILABLE      = true
        VERSION        = 1.65.2
        API            = sns_accel.proto
        RATES          = [12.500000, 25.000000, 50.000000, 100.000000, 200.000000, 500.000000]
        RESOLUTIONS    = [0.000019, 0.000037, 0.000075, 0.000150, 0.000299]
        RANGES         = [[-9.806650,9.806650], [-19.613300,19.613300], [-39.226601,39.226601], [-78.453201,78.453201], [-156.906403,156.906403]]
        DRI            = true
        FIFO_SIZE      = 200
        STREAM_TYPE    = streaming
        STREAM_SYNC    = false
        DYNAMIC        = false
        EVENT_SIZE     = 16
        OP_MODES       = [LPM, NORMAL, HIGH_PERF]
        ACTIVE_CURRENT = [50, 240, 240]
        SLEEP_CURRENT  = 6
        HW_ID          = 0
        RIGID_BODY     = display
        PHYSICAL_SENSOR       = true
        PHYSICAL_SENSOR_TESTS = [3, 2, 1]
        SELECTED_RESOLUTION   = 0.000299
        SELECTED_RANGE        = [-156.906403,156.906403]
        LOW_LATENCY_RATES     = 1000.000000
        PASSIVE_REQUEST       = true
        Copy to clipboard
- Query all *accel* sensor attributes.

ssc_sensor_info -sensor=accel
        Copy to clipboard

root@qcm6490:~# ssc_sensor_info -sensor=accel
        ssc_sensor_info v1.86
        
        SUID           = 0x61ab5376b4a5c9aa58442ede47acd316
        NAME           = icm4x6xx
        VENDOR         = TDK-Invensense
        TYPE           = accel
        AVAILABLE      = true
        VERSION        = 1.65.2
        API            = sns_accel.proto
        RATES          = [12.500000, 25.000000, 50.000000, 100.000000, 200.000000, 500.000000]
        RESOLUTIONS    = [0.000019, 0.000037, 0.000075, 0.000150, 0.000299]
        RANGES         = [[-9.806650,9.806650], [-19.613300,19.613300], [-39.226601,39.226601], [-78.453201,78.453201], [-156.906403,156.906403]]
        DRI            = true
        FIFO_SIZE      = 80
        STREAM_TYPE    = streaming
        STREAM_SYNC    = false
        DYNAMIC        = false
        EVENT_SIZE     = 16
        OP_MODES       = [LPM, NORMAL, HIGH_PERF]
        ACTIVE_CURRENT = [50, 240, 240]
        SLEEP_CURRENT  = 6
        HW_ID          = 0
        RIGID_BODY     = display
        PHYSICAL_SENSOR       = true
        PHYSICAL_SENSOR_TESTS = [3, 2, 1]
        SELECTED_RESOLUTION   = 0.000299
        SELECTED_RANGE        = [-156.906403,156.906403]
        LOW_LATENCY_RATES     = [1000.000000, 2000.000000]
        PASSIVE_REQUEST       = true
        Copy to clipboard

**Output**

The test application generates the following output:

- Standard output on console
- Result file

#### Driver acceptance test (ssc\_drva\_test) to validate sensor drivers

**Driver acceptance test definition**

The `ssc_drva_test` driver acceptance test tool does the following:

- Perform sensor driver validation and operate at the QSH sensor API layer.
- Execute a range of sensor use cases.
- Accept the parameters directly from the command line and eliminate the need for compile-time options.

This approach makes it a convenient and efficient tool to
perform basic driver-level tests or validations.

ssc_drva_test [-sensor=<sensor_type>] [-duration=<time_in_seconds>] [-sample_rate=<value_in_Hz>] [-batch_period=<value_in_seconds>] [-iterations=<value>] [-num_samples=<value>] [-factory_test=<value>]
    Copy to clipboard

Table : Parameters of ssc_drva_test

| **Flag** | **Type** | **Value** | **Unit** | **Notes** |
| --- | --- | --- | --- | --- |
| `sensor` | `string` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">accel</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">gyro</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">sensor_temperature</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">pressure</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">mag</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">humidity</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ambient_temperature</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ultra_violet</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">proximity</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ambient_light</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">rgb</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">hall</span></code></p></li><br><li><p>Any custom sensor added</p></li><br></ul> | – | Mandatory argument: limited to the available sensor types. |
| `duration` | `float` | Positive values only | Sec | Mandatory argument: sensor test duration in seconds. |
| `sample_rate` | `float` | Positive floating point number values:<br><br><br><br>> <br>> <br>> <ul class="simple"><br>> <li><p>-1: Maximum sampling rate</p></li><br>> <li><p>-2: Minimum sampling rate</p></li><br>> </ul> | Hz | Mandatory for streaming sensors, optional for on-change sensors. |
| `batch_period` | `float` | Positive floating point numbers | Sec | This period is the same as the report period and indicates how long to buffer the samples and report outside of the low-power processor. |
| `iterations` | `int` | Positive values only | NA | Provides the number of times the test must be repeated. |
| `num_samples` | `int` | Positive values only | NA | Indicates the minimum number of samples intended to be collected. If a `num_samples` parameter is specified and the test does not collect enough samples during the test, the test sensor generates FAIL.<br><br><br>The `num_samples` parameter forces the test to run for a maximum duration between a specified duration or duration calculated by the following:<br><ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">num_samples*</span></code> expected sample rate, where the expected sample rate is the rate at which the sensor is expected to serve.</p></li><br></ul> |
| `factory_test` | `int` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">0</span> <span class="pre">(SNS_PHYSICAL_SENSOR_TEST_TYPE_SW)</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">1</span> <span class="pre">(SNS_PHYSICAL_SENSOR_TEST_TYPE_HW)</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">2</span> <span class="pre">(SNS_PHYSICAL_SENSOR_TEST_TYPE_FACTORY)</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">3</span> <span class="pre">(SNS_PHYSICAL_SENSOR_TEST_TYPE_COM)</span></code></p></li><br></ul> | NA | Selects the type of factory test (from the value column) that you want to run. |

**Driver acceptance test examples**

- Stream a single sensor at a selected sampling frequency for a known
duration:

ssc_drva_test -sensor=accel -duration=5 -sample_rate=500
        Copy to clipboard

root@qcm6490:~# ssc_drva_test -sensor=accel -duration=5 -sample_rate=500
        6 ssc_drva_test version 1.27k
        6 ssc_drva_test -sensor=accel -duration=5 -sample_rate=500
        diag: Diag_LSM_Init: invoked for pid: 1141 with init_count: 0
        diag:successfully connected to socket 3
        diag: Diag_LSM_Init: done for pid: 1141 with init_count: 1
        6 event_cb attribute event for da_test
        6 event_cb attribute event for da_test
        6 using da_test name=da_test, suid = [high addeaddeaddeadde, low addeaddeaddeadde
        6 enter send_memory_log_req cookie: 6
        6 exit send_memory_log_req
        6 enter da_test runner. -rumifact=1
        6 -time_to_first_event=233206
        6 -time_to_last_event=-20008
        6 -sample_ts=50267544823
        6 -total_samples=2528
        6 -avg_delta=37875
        6 -recvd_phy_config_sample_rate=500
        6 -random_seed_used=2926886043
        6 -num_request_sent=2
        6 -first_sample_timestamp=50171775915
        6 received event: PASS
        6 enter send_memory_log_req cookie: 6
        6 exit send_memory_log_req
        6 PASS
        Copy to clipboard
- Batch a single sensor at a selected sampling frequency and report
period for a known duration:

ssc_drva_test -sensor=accel -duration=30.0 -sample_rate=100 -batch_period=2.0
        Copy to clipboard

root@qcm6490:~# ssc_drva_test -sensor=accel -duration=30.0 -sample_rate=100 -batch_period=2.0
        3 ssc_drva_test version 1.27k
        3 ssc_drva_test -sensor=accel -duration=30.0 -sample_rate=100 -batch_period=2.0
        diag: Diag_LSM_Init: invoked for pid: 1413 with init_count: 0
        diag:successfully connected to socket 3
        diag: Diag_LSM_Init: done for pid: 1413 with init_count: 1
        3 event_cb attribute event for da_test
        3 event_cb attribute event for da_test
        3 using da_test name=da_test, suid = [high addeaddeaddeadde, low addeaddeaddeadde
        3 enter send_memory_log_req cookie: 3
        3 exit send_memory_log_req
        3 enter da_test runner. -rumifact=1
        3 -time_to_first_event=15321140
        3 -time_to_last_event=-13606286
        3 -sample_ts=8591389823
        3 -total_samples=2960
        3 -avg_delta=184826
        3 -recvd_phy_config_sample_rate=100.000000
        3 -random_seed_used=3720387971
        3 -num_request_sent=2
        3 -first_sample_timestamp=8030694123
        3 received event: PASS
        3 enter send_memory_log_req cookie: 3
        3 exit send_memory_log_req
        3 PASS
        Copy to clipboard
- Self-test for accelerometer (hardware self-test):

ssc_drva_test -sensor=accel -factory_test=1 -duration=10
        Copy to clipboard

root@qcm6490:~# ssc_drva_test -sensor=accel -factory_test=1 -duration=10
        4 ssc_drva_test version 1.27k
        4 ssc_drva_test -sensor=accel -factory_test=1 -duration=10
        diag: Diag_LSM_Init: invoked for pid: 1439 with init_count: 0
        diag:successfully connected to socket 3
        diag: Diag_LSM_Init: done for pid: 1439 with init_count: 1
        4 event_cb attribute event for da_test
        4 event_cb attribute event for da_test
        4 using da_test name=da_test, suid = [high addeaddeaddeadde, low addeaddeaddeadde
        4 enter send_memory_log_req cookie: 4
        4 exit send_memory_log_req
        4 enter da_test runner. -rumifact=1
        4 -time_to_first_event=0
        4 -time_to_last_event=-2032137957
        4 -sample_ts=10622073335
        4 -total_samples=0
        4 -avg_delta=0
        4 -recvd_phy_config_sample_rate=0.000000
        4 -random_seed_used=1840104635
        4 -num_request_sent=2
        4 -first_sample_timestamp=0
        4 received event: PASS
        4 enter send_memory_log_req cookie: 4
        4 exit send_memory_log_req
        4 PASS
        Copy to clipboard

**Output**

On the console command line, this test only outputs as pass or fail,
which indicates only the test execution status (whether the test is
complete).

#### Sensor workhorse (see\_workhorse) to perform stress test of sensors

**Sensor workhorse definition**

The `see_workhorse` sensor workhorse tool does the following:
- Operates specific sensors based on the command-line arguments.
- Streamlines sensor testing and data collection in various configurations.

see_workhorse [-sensor=<sensor_type>][-sample_rate=<min | max | number>] [-batch_period=<seconds>] [-calibrated=<0 | 1>] [-wakeup=<0 | 1>]
    Copy to clipboard

Table : Parameters of see_workhorse

| Flags | Type | Value range | Units | Notes |
| --- | --- | --- | --- | --- |
| `sensor` | `string` | <ul class="simple"><br><li><p><code class="docutils literal notranslate"><span class="pre">accel</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">gyro</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">sensor_temperature</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">pressure</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">mag</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">humidity</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ambient_temperature</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ultra_violet</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">proximity</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">ambient_light</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">rgb</span></code></p></li><br><li><p><code class="docutils literal notranslate"><span class="pre">hall</span></code></p></li><br><li><p>Any custom sensor added</p></li><br></ul> | NA | Mandatory argument: Limited to the available sensor types. |
| `on_change` | `int` | 0 | 1 | NA | <ul class="simple"><br><li><p>0 selects using <code class="docutils literal notranslate"><span class="pre">SNS_STD_SENSOR_STREAM_TYPE_STREAMING</span></code>.</p></li><br><li><p>1 selects using <code class="docutils literal notranslate"><span class="pre">SNS_STD_SENSOR_STREAM_TYPE_ON_CHANGE</span></code>.</p></li><br></ul> |
| `sample_rate` | `float` | Positive floating point number values:<br><ul class="simple"><br><li><p>-1: Maximum sampling rate</p></li><br><li><p>-2: Minimum sampling rate</p></li><br></ul> | Hz | Mandatory for streaming sensors, optional for on-change sensors. |
| `batch_period` | `float` | Positive floating point numbers | Seconds | Same as the batch period or report period. |
| `calibrated` | `int` | 0 | 1 | NA | <ul class="simple"><br><li><p>0: nop (default).</p></li><br><li><p>1: if the <code class="docutils literal notranslate"><span class="pre">sensor_type</span></code> is gyro or mag, then also activate <code class="docutils literal notranslate"><span class="pre">gyro_cal</span></code> or <code class="docutils literal notranslate"><span class="pre">/mag_cal</span></code>, respectively.</p></li><br></ul> |
| `wakeup` | `int` | 0 | 1 | NA | <ul class="simple"><br><li><p>0: sets <code class="docutils literal notranslate"><span class="pre">suspend_config</span></code> wake-up to <code class="docutils literal notranslate"><span class="pre">SEE_CLIENT_DELIVERY_NO_WAKEUP</span></code>.</p></li><br><li><p>1: sets <code class="docutils literal notranslate"><span class="pre">suspend_config</span></code> wake-up to <code class="docutils literal notranslate"><span class="pre">SEE_CLIENT_DELIVERY_WAKEUP</span></code> (default).</p></li><br></ul> |
| `display_events` | `int` | 0 | 1 | NA | Display sensor events in JSON format, using the event callbacks. |

**Sensor workhorse examples**

For instance, use the following command to stream the accelerometer data
at the maximum rate for 30 sec:

see_workhorse -sensor=accel -sample_rate=max -duration=30 -display_events=1
    Copy to clipboard

root@qcm6490:~# see_workhorse -sensor=accel -sample_rate=max -duration=30 -display_events=1
    see_workhorse version 2.04
    20:22:15.406 see_workhorse -sensor=accel -sample_rate=max -duration=30 -display_events=1
    begin usta_get_sensor_list
    Copy to clipboard

This command instructs `see_workhorse` to run the accelerometer
`accel` at a maximum sample rate for a duration of 30 sec.

20:22:15.731 stream_sensor( accel)
    20:22:15.731 + sample_rate: 500.000000 hz
    20:22:15.838 config_stream_sensor() complete rc 0
    20:22:15.838 sleep(30) seconds
    
    "sns_client_event_msg" : {
     "suid" : {
      "suid_low" : "0x58442ede47acd316",
      "suid_high" : "0x61ab5376b4a5c9aa"
     },
     "events" : [
      {
       "msg_id" : 768,
       "timestamp" : 78497742089,
       "payload" : {
        "sample_rate" : 500.000000,
        "water_mark" : 1,
    Copy to clipboard

### Miscellaneous tools

Use the following tools for the build environment and functional diagnosis:

- **Qualcomm® Hexagon™ DSP toolchain**

    Hexagon 8.4.07 toolchain
- **QXDM Professional tool**

    The Qualcomm® eXtensible diagnostic monitor (QXDM) Professional™ tool
is a diagnostic client.

    - The QSH framework can call the macros and APIs directly to send
the debug information to print strings and log packets.
    - The QXDM logs are primarily used for the aDSP side debugging. For
more information, see
[Troubleshoot sensors](https://docs.qualcomm.com/bundle/resource/topics/80-70018-7A/debugging.html)
in [Qualcomm Linux Sensors Guide -
Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70018-7A/overview.html).

Note

[Qualcomm Linux Sensors Guide -  Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70018-7A/overview.html) is accessible only to the licensed users.
    - The QXDM Professional Tool requires a USB connection. The
application processors have direct connectivity to a USB port,
whereas the aDSP doesn’t have such connectivity.

## Verify

You can determine whether the configured QSH functionalities are operating properly or require attention for any discrepancies using the tools available for verifying these functionalities. You can use the test tool or the QXDM Professional to examine the configured settings and take the necessary action.

The `ssc_sensor_info` test tool verifies the QSH
functionality and lists the supported sensors with their
capabilities.

ssc_sensor_info
    Copy to clipboard

The following shell output lists all the supported sensors and their
attributes:

root@qcm6490:~# ssc_sensor_info
    ssc_sensor_info v1.86
    
    SUID           = 0xebd5604d09d379bca54dcf30ec041e0f
    NAME           = ak0991x
    VENDOR         = akm
    TYPE           = mag
    AVAILABLE      = true
    VERSION        = 2.62.47
    API            = sns_mag.proto
    RATES          = [1.000000, 10.000000, 20.000000, 50.000000, 100.000000]
    RESOLUTIONS    = 0.150000
    RANGES         = [-4912.000000,4912.000000]
    DRI            = false
    FIFO_SIZE      = 0
    STREAM_TYPE    = streaming
    STREAM_SYNC    = false
    DYNAMIC        = false
    EVENT_SIZE     = 16
    OP_MODES       = [LOW_POWER, LOW_NOISE]
    ACTIVE_CURRENT = 900
    SLEEP_CURRENT  = 3
    HW_ID          = 0
    RIGID_BODY     = display
    PHYSICAL_SENSOR       = true
    PHYSICAL_SENSOR_TESTS = [3, 1]
    SELECTED_RESOLUTION   = 0.150000
    SELECTED_RANGE        = [-4912.000000,4912.000000]
    
    SUID           = 0xaddeaddeaddeaddeaddeaddeaddeadde
    NAME           = da_test
    VENDOR         = QTI
    TYPE           = da_test
    AVAILABLE      = true
    VERSION        = 0.51.0
    API            = sns_da_test.proto
    STREAM_TYPE    = on_change
    
    SUID           = 0x69def905fea2fbac6a43ca273221a2eb
    NAME           = aont
    VENDOR         = QTI
    TYPE           = aont
    AVAILABLE      = true
    VERSION        = 0.0.1
    API            = sns_aont.proto
    STREAM_TYPE    = on_change
    
    SUID           = 0xabababababababababababababababab
    NAME           = suid
    VENDOR         = QTI
    TYPE           = suid
    AVAILABLE      = true
    VERSION        = 0.0.1
    API            = sns_suid.proto
    STREAM_TYPE    = single_output
    
    SUID           = 0xe12754a7007f27595e2541b4701e2275
    NAME           = registry
    VENDOR         = QTI
    TYPE           = registry
    AVAILABLE      = true
    VERSION        = 0.0.1
    API            = sns_registry.proto
    STREAM_TYPE    = single_output
    
    SUID           = 0xadfeadfeadfeadfeadfeadfeadfeadfe
    NAME           = da_test_big_image
    VENDOR         = QTI
    TYPE           = da_test
    AVAILABLE      = true
    VERSION        = 0.49.0
    API            = sns_da_test.proto
    STREAM_TYPE    = on_change
    
    SUID           = 0x61ab5376b4a5c9aa58442ede47acd316
    NAME           = icm4x6xx
    VENDOR         = TDK-Invensense
    TYPE           = accel
    AVAILABLE      = true
    VERSION        = 1.65.2
    API            = sns_accel.proto
    RATES          = [12.500000, 25.000000, 50.000000, 100.000000, 200.000000, 500.000000]
    RESOLUTIONS    = [0.000019, 0.000037, 0.000075, 0.000150, 0.000299]
    RANGES         = [[-9.806650,9.806650], [-19.613300,19.613300], [-39.226601,39.226601], [-78.453201,78.453201], [-156.906403,156.906403]]
    DRI            = true
    FIFO_SIZE      = 200
    STREAM_TYPE    = streaming
    STREAM_SYNC    = false
    DYNAMIC        = false
    EVENT_SIZE     = 16
    OP_MODES       = [LPM, NORMAL, HIGH_PERF]
    ACTIVE_CURRENT = [50, 240, 240]
    SLEEP_CURRENT  = 6
    HW_ID          = 0
    RIGID_BODY     = display
    PHYSICAL_SENSOR       = true
    PHYSICAL_SENSOR_TESTS = [3, 2, 1]
    SELECTED_RESOLUTION   = 0.000299
    Copy to clipboard

For troubleshooting common issues, see [Troubleshoot sensors](https://docs.qualcomm.com/doc/80-70018-7/topic/test_troubleshoot.html#debug).

The following QXDM output shows the verification/confirmation logs for all the supported sensors and their attributes in a low-power processor:

Note

This feature is currently available only for Authorized users. To upgrade your access, go to: [www.qualcomm.com/support/working-with-qualcomm](https://www.qualcomm.com/support/working-with-qualcomm).

[ 123/   2]   MSG    18:47:22.898750     SNS PLATFORM/High          [sns_registry_parser.c   2099] REG INIT DONE... ts=63248955
    [ 122/   1]   MSG    18:47:22.925000     SNS FRAMEWORK/Medium       [  sns_diag_service.c   1072] Sensor registry Vendor:QTI SSID:53 registered with diag
    [ 122/   1]   MSG    18:47:22.925000     SNS FRAMEWORK/Medium       [        sns_sensor.c    769] Populating sensor b2926130 in island: 2, with SUID e12754a7 007f2759 5e2541b4 701e2275
    [ 122/   2]   MSG    18:47:22.925000     SNS FRAMEWORK/High         [sns_attribute_service.c    584] Sensor : registry, suid_populated : 1, available : 1
    [ 122/   2]   MSG    18:47:22.925000     SNS FRAMEWORK/High         [sns_attribute_service.c    594] Avail:    B2926130  registry
    [ 123/   2]   MSG    18:47:22.925000     SNS PLATFORM/High          [sns_registry_sensor.c    284] Successfully initialized registry
    [ 122/   1]   MSG    18:47:22.925000     SNS FRAMEWORK/Medium       [sns_stream_service.c    150] Created data stream to Sensor 'registry' (b2926130) from Sensor 'suid' (b2922018): b296fd28
    [ 122/   1]   MSG    18:47:22.925000     SNS FRAMEWORK/Medium       [sns_stream_service.c    686] Add request b296fdc0 on stream b296fd28 (length 20; ID 512)
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [sns_stream_service.c    548] Process request for Sensor b2926130 on b296fd28
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [   sns_suid_sensor.c   1050] send_suid_event dt=registry, default=1
    [ 123/   2]   MSG    18:47:22.926250     SNS PLATFORM/High          [         sns_q6_pm.c    365] Deregister_client: B2927B30
    [ 123/   2]   MSG    18:47:22.926250     SNS PLATFORM/High          [sns_registry_sensor.c    366] Processed : SSCRPCD UP Signal
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [   sns_suid_sensor.c   1050] send_suid_event dt=registry, default=1
    [ 122/   1]   MSG    18:47:22.926250     SNS FRAMEWORK/Medium       [   sns_data_stream.c    551] sns_data_stream_deinit b29231d0 removing=0
    [ 122/   1]   MSG    18:47:22.926250     SNS FRAMEWORK/Medium       [sns_stream_service.c    686] Add request b2927b30 on stream b29231d0 (length 0; ID 120)
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [   sns_suid_sensor.c   1050] send_suid_event dt=registry, default=1
    [ 123/   2]   MSG    18:47:22.926250     SNS PLATFORM/High          [   sns_gdsc_island.c    109] gdsc_client_cnt(2), sns_gdsc_mode(1)
    [ 122/   1]   MSG    18:47:22.926250     SNS FRAMEWORK/Medium       [sns_stream_service.c    150] Created data stream to Sensor 'timer' (b2118e08) from Sensor 'power_sensor' (b2922c78): b2931c48
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [   sns_suid_sensor.c   1050] send_suid_event dt=registry, default=1
    [ 122/   1]   MSG    18:47:22.926250     SNS FRAMEWORK/Medium       [sns_stream_service.c    686] Add request b2123580 on stream b2931c48 (length 16; ID 512)
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [sns_stream_service.c    548] Process request for Sensor b2118e08 on b2931c48
    [ 122/   0]   MSG    18:47:22.926250     SNS FRAMEWORK/Low          [   sns_suid_sensor.c   1050] send_suid_event dt=registry, default=1
    Copy to clipboard

For more information about an individual sensor level verification, see
[Tools](https://docs.qualcomm.com/doc/80-70018-7/topic/test_troubleshoot.html#test-tools).

## Test sensors on platform

To use a sensor test application, see [Test sensors on platform](https://docs.qualcomm.com/doc/80-70018-7/topic/platform.html#test-sensors).

## Troubleshoot sensors

The following resources describe a few common issues and the techniques available to analyze and troubleshoot these issues.

Note

The `<registry_path>` should be considered as one of the existing paths on the device: `/etc/sensors/registry/registry/` or `/var/cache/sensors/registry/registry/`.

### The `ssc_sensor_info` tool is unable to list sensors

This error indicates a failure in parsing the sensor registry, rendering the sensor
unavailable for listing using the `ssc_sensor_info` tool. Do the following to resolve this error:

> 
> 
> Note
> 
> 
> Verify that the read and write permissions for the files are enabled for User mode, and read only permission is enabled for Group and Others modes. Ensure that the User and Group mode names are `system system`.
> 
> 1. Ensure that `/etc/sensors/sns_reg_config` and `/etc/sensors/config/json.lst` files are present with the required permissions
> as shown in the following example:
> 
> 
> 
> 
> > 
> > 
> > root@qcm6490:~# ls -l /etc/sensors/sns_reg_config
> >     -rw-r--r--. 1 system system 226 Mar  9  2018 /etc/sensors/sns_reg_config
> >     Copy to clipboard
> > 
> > 
> > root@qcm6490:~# ls -l /etc/sensors/config/json.lst
> >     -rw-r--r--. 1 system system 1452 Mar 9  2018 /etc/sensors/config/json.lst
> >     Copy to clipboard
> 
> 
> 2. Ensure that `/etc/sensors/config/` directory has the sensor JSON file with the required permissions.
> 
> 
> 
> 
> > 
> > 
> > root@qcm6490:/etc/sensors/config# ls -l
> >     total 548
> >     -rw-r--r--. 1 system system 1452 Mar 9  2018 json.lst
> >     -rw-r--r--. 1 system system 5638 Mar 9  2018 kodiak_ak991x_0.json
> >     -rw-r--r--. 1 system system 2837 Mar 9  2018 kodiak_bu52053nvx_0.json
> >     -rw-r--r--. 1 system system 5480 Mar 9  2018 kodiak_default_sensors.json
> >     -rw-r--r--. 1 system system  293 Mar 9  2018 kodiak_dynamic_sensors.json
> >     -rw-r--r--. 1 system system  392 Mar 9  2018 kodiak_idp_ak991x_0.json
> >     -rw-r--r--. 1 system system  384 Mar 9  2018 kodiak_idp_lsm6dst_0.json
> >     -rw-r--r--. 1 system system  384 Mar 9  2018 kodiak_idp_lsm6dst_1.json
> >     ..
> >     -rw-r--r--. 1 system system  302 Mar 9  2018 qcm6490_power_0.json
> >     -rw-r--r--. 1 system system 7952 Mar 9  2018 qcm6490_rbx_icm4x6xx_0.json
> >     -rw-r--r--. 1 system system 5922 Mar 9  2018 qcm6490_rbx_navmez_ak991x_0.json
> >     -rw-r--r--. 1 system system 7957 Mar 9  2018 qcm6490_rbx_navmez_icm4x6xx_0.json
> >     -rw-r--r--. 1 system system 7957 Mar 9  2018 qcm6490_rbx_navmez_rev2_icm4x6xx_0.json
> >     -rw-r--r--. 1 system system 3688 Mar 9  2018 qcm6490_rbx_navmezz_icp101xx_0.json
> >     Copy to clipboard
> 
> 
> 3. Ensure that `<registry_path>` directory is accessible and has the corresponding parsed file.
> 
> 
> 
> 
> > 
> > 
> > root@qcm6490:/var/cache/sensors/registry/registry# ls -l
> >     total 524
> >     -rw-r--r--. 1 system system    3 Jan  1 00:00 DIR
> >     -rw-r--r--. 1 system system  902 Apr 28  2022 qcm6490_default_sensors.json.default_sensors
> >     -rw-r--r--. 1 system system   86 Apr 28  2022 qcm6490_default_sensors.json.default_sensors.accel
> >     -rw-r--r--. 1 system system  133 Apr 28  2022 qcm6490_default_sensors.json.default_sensors.accel.attr_0
> >     -rw-r--r--. 1 system system   90 Apr 28  2022 qcm6490_default_sensors.json.default_sensors.accel_cal
> >     ..
> >     -rw-r--r--. 1 system system   84 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.temp
> >     -rw-r--r--. 1 system system  232 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.temp.config
> >     -rw-r--r--. 1 system system  346 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform
> >     -rw-r--r--. 1 system system   95 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel
> >     -rw-r--r--. 1 system system  146 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal
> >     -rw-r--r--. 1 system system  183 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.bias
> >     -rw-r--r--. 1 system system  445 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.corr_mat
> >     -rw-r--r--. 1 system system  863 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.config
> >     Copy to clipboard

### SUID lookup failures

This error indicates a custom code failure in retrieving SUID for a specified sensor. Do the following to resolve this error:

> 
> 
> 1. Run the `ssc_sensor_info` tool to check if the specified sensor is available.
> 
> 
> 
> 
> > 
> > 
> > - If the sensor list is empty, see the first debugging method described in [The ssc\_sensor\_info tool is unable to list sensors](https://docs.qualcomm.com/doc/80-70018-7/topic/test_troubleshoot.html#troubleshooting-ssc-sensor-info).
> > - If only the specified sensor is unavailable, proceed with the following checks:
> > 
> > 
> > 
> > 
> > > 
> > > 
> > > 1. Ensure that the sensor is listed in `/etc/sensors/config/json.lst` file, as shown in the following example:
> > > 
> > > 
> > > 
> > > 
> > > > 
> > > > 
> > > > root@qcm6490:~# cat /etc/sensors/config/json.lst
> > > >     kodiak_ak991x_0.json
> > > >     qcm6490_default_sensors.json
> > > >     qcm6490_power_0.json
> > > >     qcm6490_rbx_icm4x6xx_0.json
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json
> > > >     qcm6490_rbx_navmezz_icp101xx_0.json
> > > >     qcm6490_rbx_navmez_ak991x_0.json
> > > >     Copy to clipboard
> > > 
> > > 
> > > 2. Verify that the configuration file for the specified sensor is parsed and present in the `parsed_file_list.csv` file, as shown in the following example:
> > > 
> > > 
> > > 
> > > 
> > > > 
> > > > 
> > > > root@qcm6490:/var/cache/sensors/registry# cat parsed_file_list.csv
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.config
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.orient
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal.corr_mat
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal.bias
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.corr_mat
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.bias
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal
> > > >     qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel
> > > >     Copy to clipboard
> > > 
> > > 
> > > 3. Verify that the configuration file for the specified sensor is parsed and present in the `<registry_path>` directory as shown in the following example:
> > > 
> > > 
> > > 
> > > 
> > > > 
> > > > 
> > > > root@qcm6490:/var/cache/sensors/registry/registry# ls -l
> > > >     total 524
> > > >     -rw-r--r--. 1 system system  248 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0
> > > >     -rw-r--r--. 1 system system   85 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.accel
> > > >     -rw-r--r--. 1 system system  233 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.accel.config
> > > >     -rw-r--r--. 1 system system   88 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.freefall
> > > >     -rw-r--r--. 1 system system  236 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.freefall.config
> > > >     -rw-r--r--. 1 system system   84 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.gyro
> > > >     -rw-r--r--. 1 system system  232 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.gyro.config
> > > >     -rw-r--r--. 1 system system   82 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.md
> > > >     -rw-r--r--. 1 system system  230 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.md.config
> > > >     -rw-r--r--. 1 system system   84 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.temp
> > > >     -rw-r--r--. 1 system system  232 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0.temp.config
> > > >     -rw-r--r--. 1 system system  346 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform
> > > >     -rw-r--r--. 1 system system   95 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel
> > > >     -rw-r--r--. 1 system system  146 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal
> > > >     -rw-r--r--. 1 system system  183 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.bias
> > > >     -rw-r--r--. 1 system system  445 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.accel.fac_cal.corr_mat
> > > >     -rw-r--r--. 1 system system  863 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.config
> > > >     -rw-r--r--. 1 system system   94 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro
> > > >     -rw-r--r--. 1 system system  145 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal
> > > >     -rw-r--r--. 1 system system  182 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal.bias
> > > >     -rw-r--r--. 1 system system  444 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.gyro.fac_cal.corr_mat
> > > >     -rw-r--r--. 1 system system   91 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.md
> > > >     -rw-r--r--. 1 system system  192 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.md.config
> > > >     -rw-r--r--. 1 system system  174 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.orient
> > > >     -rw-r--r--. 1 system system  536 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.placement
> > > >     -rw-r--r--. 1 system system   94 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.temp
> > > >     -rw-r--r--. 1 system system  142 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.temp.fac_cal
> > > >     -rw-r--r--. 1 system system  102 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.temp.fac_cal.bias
> > > >     -rw-r--r--. 1 system system  103 Apr 28  2022 qcm6490_rbx_navmez_icm4x6xx_0.json.icm4x6xx_0_platform.temp.fac_cal.scale
> > > >     Copy to clipboard
> 
> 
> 2. If the preceding validations didn’t result in any anomalies, then there could be an issue with your own Apps side custom code implementation that uses the QSH client APIs.

### Sensor is listed but unable to receive sensor data

This error indicates failure of the sample or custom code, use the following sensor tool to receive events for a specified sensor.

> 
> 
> - Run the following command to stream the specified sensor:
>     - `see_workhorse [-sensor=][-sample_rate=] [-batch_period=] [-calibrated=<0 | 1>] [-wakeup=<0 | 1>]`
> For example,
> `see_workhorse -sensor=accel -sample_rate=max -duration=30 -display_events=1`

If the above tool is able to receive the sensor event then there could be an issue with your Apps side custom code implementation that uses the QSH client APIs.

For more information, see [Tools](https://docs.qualcomm.com/doc/80-70018-7/topic/test_troubleshoot.html#test-tools).

Last Published: Apr 08, 2025

[Previous Topic
Develop sensors](https://docs.qualcomm.com/bundle/publicresource/80-70018-7/topics/develop_sensors.md) [Next Topic
References](https://docs.qualcomm.com/bundle/publicresource/80-70018-7/topics/references.md)