void auth_signal_error(void) { buzzer_start(1, CONV_MS_TO_TICKS(1000), CONV_MS_TO_TICKS(50), BUZZER_OPTION_TOGGLE_LED); timer2_delay(1050); mode_update(); }
void auth_signal_success(void) { buzzer_start(2, CONV_MS_TO_TICKS(50), CONV_MS_TO_TICKS(50), BUZZER_OPTION_TOGGLE_LED); timer2_delay(200); mode_update(); }
void auth_signal_failure(void) { buzzer_start(3, CONV_MS_TO_TICKS(50), CONV_MS_TO_TICKS(50), BUZZER_OPTION_TOGGLE_LED); timer2_delay(300); mode_update(); }
SANE_Status sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action, void *val, SANE_Int * info) { Abaton_Scanner *s = handle; SANE_Status status; SANE_Word cap; if (option < 0 || option >= NUM_OPTIONS) return SANE_STATUS_INVAL; if (info != NULL) *info = 0; if (s->scanning) return SANE_STATUS_DEVICE_BUSY; cap = s->opt[option].cap; if (!SANE_OPTION_IS_ACTIVE (cap)) return SANE_STATUS_INVAL; if (action == SANE_ACTION_GET_VALUE) { switch (option) { /* word options: */ case OPT_NUM_OPTS: case OPT_X_RESOLUTION: case OPT_Y_RESOLUTION: case OPT_RESOLUTION_BIND: case OPT_PREVIEW: case OPT_TL_X: case OPT_TL_Y: case OPT_BR_X: case OPT_BR_Y: case OPT_BRIGHTNESS: case OPT_CONTRAST: case OPT_THRESHOLD: case OPT_NEGATIVE: case OPT_MIRROR: *(SANE_Word *) val = s->val[option].w; return SANE_STATUS_GOOD; /* string options */ case OPT_MODE: case OPT_HALFTONE_PATTERN: status = sanei_constrain_value (s->opt + option, s->val[option].s, info); strcpy (val, s->val[option].s); return SANE_STATUS_GOOD; } } else if (action == SANE_ACTION_SET_VALUE) { if (!SANE_OPTION_IS_SETTABLE (cap)) return SANE_STATUS_INVAL; status = sanei_constrain_value (s->opt + option, val, info); if (status != SANE_STATUS_GOOD) return status; switch (option) { /* resolution should be uniform for previews, or when the user says so. */ case OPT_PREVIEW: s->val[option].w = *(SANE_Word *) val; if (*(SANE_Word *) val) { s->val[OPT_Y_RESOLUTION].w = s->val[OPT_X_RESOLUTION].w; if (info) *info |= SANE_INFO_RELOAD_OPTIONS; } /* always recalculate! */ calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS; return SANE_STATUS_GOOD; case OPT_RESOLUTION_BIND: s->val[option].w = *(SANE_Word *) val; if (*(SANE_Word *) val) { s->val[OPT_Y_RESOLUTION].w = s->val[OPT_X_RESOLUTION].w; calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; } return SANE_STATUS_GOOD; case OPT_X_RESOLUTION: if (s->val[OPT_PREVIEW].w || s->val[OPT_RESOLUTION_BIND].w) { s->val[OPT_Y_RESOLUTION].w = *(SANE_Word *)val; if (info) *info |= SANE_INFO_RELOAD_OPTIONS; } s->val[option].w = *(SANE_Word *) val; calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS; return SANE_STATUS_GOOD; case OPT_Y_RESOLUTION: if (s->val[OPT_PREVIEW].w || s->val[OPT_RESOLUTION_BIND].w) { s->val[OPT_X_RESOLUTION].w = *(SANE_Word *)val; if (info) *info |= SANE_INFO_RELOAD_OPTIONS; } s->val[option].w = *(SANE_Word *) val; calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS; return SANE_STATUS_GOOD; /* these ones don't have crazy side effects */ case OPT_TL_X: case OPT_TL_Y: case OPT_BR_Y: s->val[option].w = *(SANE_Word *) val; calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS; return SANE_STATUS_GOOD; /* this one is somewhat imprecise */ case OPT_BR_X: s->val[option].w = *(SANE_Word *) val; calc_parameters (s); if (info) *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_INEXACT; return SANE_STATUS_GOOD; /* no side-effects whatsoever */ case OPT_BRIGHTNESS: case OPT_CONTRAST: case OPT_THRESHOLD: case OPT_NEGATIVE: case OPT_MIRROR: s->val[option].w = *(SANE_Word *) val; return SANE_STATUS_GOOD; /* string options */ case OPT_HALFTONE_PATTERN: if (info) *info |= SANE_INFO_RELOAD_OPTIONS; if (s->val[option].s) free (s->val[option].s); s->val[option].s = strdup (val); return SANE_STATUS_GOOD; case OPT_MODE: status = mode_update (s, val); if (status != SANE_STATUS_GOOD) return status; if (s->val[option].s) free (s->val[option].s); s->val[option].s = strdup (val); if (info) *info |= SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; return SANE_STATUS_GOOD; } /* End of switch */ } /* End of SET_VALUE */ return SANE_STATUS_INVAL; }