diff --git a/doc/libfprint-2-sections.txt b/doc/libfprint-2-sections.txt index 91258b62..0fb0cfab 100644 --- a/doc/libfprint-2-sections.txt +++ b/doc/libfprint-2-sections.txt @@ -260,6 +260,7 @@ fpi_ssm_get_device fpi_ssm_get_error fpi_ssm_dup_error fpi_ssm_get_cur_state +fpi_ssm_silence_debug fpi_ssm_spi_transfer_cb fpi_ssm_spi_transfer_with_weak_pointer_cb fpi_ssm_usb_transfer_cb diff --git a/libfprint/fpi-ssm.c b/libfprint/fpi-ssm.c index 8ceab674..c34498ab 100644 --- a/libfprint/fpi-ssm.c +++ b/libfprint/fpi-ssm.c @@ -81,6 +81,7 @@ struct _FpiSsm int start_cleanup; int cur_state; gboolean completed; + gboolean silence; GSource *timeout; GError *error; FpiSsmCompletedCallback callback; @@ -245,10 +246,11 @@ fpi_ssm_free (FpiSsm *machine) /* Invoke the state handler */ static void -__ssm_call_handler (FpiSsm *machine) +__ssm_call_handler (FpiSsm *machine, gboolean force_msg) { - fp_dbg ("[%s] %s entering state %d", fp_device_get_driver (machine->dev), - machine->name, machine->cur_state); + if (force_msg || !machine->silence) + fp_dbg ("[%s] %s entering state %d", fp_device_get_driver (machine->dev), + machine->name, machine->cur_state); machine->handler (machine, machine->dev); } @@ -275,7 +277,7 @@ fpi_ssm_start (FpiSsm *ssm, FpiSsmCompletedCallback callback) ssm->cur_state = 0; ssm->completed = FALSE; ssm->error = NULL; - __ssm_call_handler (ssm); + __ssm_call_handler (ssm, TRUE); } static void @@ -346,7 +348,7 @@ fpi_ssm_mark_completed (FpiSsm *machine) if (next_state < machine->nr_states) { machine->cur_state = next_state; - __ssm_call_handler (machine); + __ssm_call_handler (machine, TRUE); return; } @@ -460,7 +462,7 @@ fpi_ssm_next_state (FpiSsm *machine) if (machine->cur_state == machine->nr_states) fpi_ssm_mark_completed (machine); else - __ssm_call_handler (machine); + __ssm_call_handler (machine, FALSE); } void @@ -537,7 +539,7 @@ fpi_ssm_jump_to_state (FpiSsm *machine, int state) if (machine->cur_state == machine->nr_states) fpi_ssm_mark_completed (machine); else - __ssm_call_handler (machine); + __ssm_call_handler (machine, FALSE); } typedef struct @@ -642,6 +644,22 @@ fpi_ssm_dup_error (FpiSsm *machine) return NULL; } +/** + * fpi_ssm_silence_debug: + * @machine: an #FpiSsm state machine + * + * Turn off state change debug messages from this SSM. This does not disable + * all messages, as e.g. the initial state, SSM completion and cleanup states + * are still printed out. + * + * Use if the SSM loops and would flood the debug log otherwise. + */ +void +fpi_ssm_silence_debug (FpiSsm *machine) +{ + machine->silence = TRUE; +} + /** * fpi_ssm_usb_transfer_cb: * @transfer: a #FpiUsbTransfer diff --git a/libfprint/fpi-ssm.h b/libfprint/fpi-ssm.h index 235e84ad..d2601c88 100644 --- a/libfprint/fpi-ssm.h +++ b/libfprint/fpi-ssm.h @@ -96,6 +96,8 @@ GError * fpi_ssm_get_error (FpiSsm *machine); GError * fpi_ssm_dup_error (FpiSsm *machine); int fpi_ssm_get_cur_state (FpiSsm *machine); +void fpi_ssm_silence_debug (FpiSsm *machine); + /* Callbacks to be used by the driver instead of implementing their own * logic. */