device: Check for device overheating and abort when needed

Check if a device is too hot. If it is too hot already, refuse
operation. If it becomes too hot while an operation is ongoing, then
cancel the action and force a FP_DEVICE_ERROR_TOO_HOT return value.
This commit is contained in:
Benjamin Berg
2021-04-21 21:24:30 +02:00
parent da28731adc
commit 5b7c5e7c09
2 changed files with 39 additions and 0 deletions

View File

@@ -1806,6 +1806,21 @@ fpi_device_update_temp (FpDevice *device, gboolean is_active)
if (priv->temp_current != old_temp)
g_object_notify (G_OBJECT (device), "temperature");
/* If the device is HOT, then do an internal cancellation of long running tasks. */
if (priv->temp_current == FP_TEMPERATURE_HOT)
{
if (priv->current_action == FPI_DEVICE_ACTION_ENROLL ||
priv->current_action == FPI_DEVICE_ACTION_VERIFY ||
priv->current_action == FPI_DEVICE_ACTION_IDENTIFY ||
priv->current_action == FPI_DEVICE_ACTION_CAPTURE)
{
if (!priv->current_cancellation_reason)
priv->current_cancellation_reason = fpi_device_error_new (FP_DEVICE_ERROR_TOO_HOT);
g_cancellable_cancel (priv->current_cancellable);
}
}
g_clear_pointer (&priv->temp_timeout, g_source_destroy);
if (next_threshold < 0)