From: mcc45tr Date: Sat, 5 Sep 2026 21:00:00 +0300 Subject: [PATCH] ssccli: expose LSM6DSO temperature stream Nabu's SSC firmware publishes the LSM6DSO die-temperature sensor under the standard `sensor_temperature` data type, not the registry shorthand `temp`. Its reports use the same one-float sns_std_sensor_event payload already decoded by the named scalar/light implementation. Add an explicit diagnostic CLI mode with temperature units. This keeps the public command semantic and avoids users having to impersonate a light sensor or guess the firmware data-type name. Signed-off-by: mcc45tr --- src/libssc-cli.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/libssc-cli.c b/src/libssc-cli.c index e2dac52..52eb7d3 100644 --- a/src/libssc-cli.c +++ b/src/libssc-cli.c @@ -144,6 +144,12 @@ static void light_measurement (SSCSensorLight *sensor, gfloat intensity, gpointe fflush(stdout); } +static void temperature_measurement (SSCSensorLight *sensor, gfloat temperature, gpointer user_data) +{ + g_printf ("LSM6DSO temperature measurement: %f °C\n", temperature); + fflush(stdout); +} + /*****************************************************************************/ static gboolean @@ -205,7 +211,7 @@ int main(int argc, char *argv[]) const GOptionEntry options[] = { { "version", 0, 0, G_OPTION_ARG_NONE, &print_version, "Print version information and exit.", NULL }, { "debug", 'v', 0, G_OPTION_ARG_NONE, &debug, "Enable debug logs.", NULL }, - { "sensor", 0, 0, G_OPTION_ARG_STRING, &sensor_str, "Enable a sensor. Supported sensors: 'proximity', 'light', 'light-back', 'accelerometer', 'magnetometer', 'compass', 'gyroscope'", NULL }, + { "sensor", 0, 0, G_OPTION_ARG_STRING, &sensor_str, "Enable a sensor. Supported sensors: 'proximity', 'light', 'light-back', 'temperature', 'accelerometer', 'magnetometer', 'compass', 'gyroscope'", NULL }, { "probe-data-type", 0, 0, G_OPTION_ARG_STRING, &probe_data_type, "Discover an arbitrary SSC data type without enabling it", "DATA_TYPE" }, { "timeout", 0, 0, G_OPTION_ARG_INT64, &timeout, "Number of seconds before this will timeout [default 10]", NULL }, { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL } @@ -276,6 +282,21 @@ int main(int argc, char *argv[]) return OPEN_FAIL_EXIT_CODE; } g_timeout_add_seconds (timeout, (GSourceFunc)light_close_cb, light); + } else if (g_strcmp0 (sensor_str, "temperature") == 0) { + SSCSensorLight *temperature = ssc_sensor_light_new_for_data_type_sync ("sensor_temperature", NULL, &err); + if (!temperature) { + g_printf ("Unable to initialize temperature sensor: %s\n", err ? err->message : "UNKNOWN"); + return INIT_FAIL_EXIT_CODE; + } + g_signal_connect (temperature, + "measurement", + G_CALLBACK (temperature_measurement), + NULL); + if (!ssc_sensor_light_open_sync (temperature, NULL, &err)) { + g_printf ("Unable to open temperature sensor: %s\n", err ? err->message : "UNKNOWN"); + return OPEN_FAIL_EXIT_CODE; + } + g_timeout_add_seconds (timeout, (GSourceFunc)light_close_cb, temperature); } else if (g_strcmp0 (sensor_str, "accelerometer") == 0) { SSCSensorAccelerometer *accelerometer = ssc_sensor_accelerometer_new_sync (NULL, &err); if (!accelerometer) { @@ -341,7 +362,7 @@ int main(int argc, char *argv[]) } g_timeout_add_seconds (timeout, (GSourceFunc)gyroscope_close_cb, gyroscope); } else { - g_printf ("Specify a supported sensor: 'proximity', 'light', 'accelerometer', 'magnetometer', 'compass', 'gyroscope'\n"); + g_printf ("Specify a supported sensor: 'proximity', 'light', 'light-back', 'temperature', 'accelerometer', 'magnetometer', 'compass', 'gyroscope'\n"); return GENERAL_FAIL_EXIT_CODE; } -- 2.52.0