#endif // _di_controller_signal_d_
/**
+ * A macro wrapping the appropriate signal check function based on threaded/non-threaded support.
+ */
+#ifndef _di_controller_signal_check_
+ #ifdef _di_thread_support_
+ #define macro_controller_signal_check(program, state) fll_program_signal_check_loop(program, state)
+ #else
+ #define macro_controller_signal_check(program, state) fll_program_signal_check_simple(program, state)
+ #endif // _di_thread_support_
+#endif // _di_controller_signal_check_
+
+/**
* Controller "with" codes.
*
* controller_with_*_d:
extern "C" {
#endif
-#if !defined(_di_controller_signal_check_) && defined(_di_thread_support_)
- f_status_t controller_signal_check(controller_t * const main) {
-
- if (!main) return F_false;
- if (main->program.signal_received) return F_true;
-
- if (!((++main->program.signal_check) % controller_signal_check_d)) {
- if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) {
- main->setting.state.status = F_status_set_error(F_interrupt);
-
- return F_true;
- }
-
- main->program.signal_check = 0;
- }
-
- return F_false;
- }
-#endif // !defined(_di_controller_signal_check_) && defined(_di_thread_support_)
-
-#if !defined(_di_controller_signal_check_) && !defined(_di_thread_support_)
- f_status_t controller_signal_check(controller_t * const main) {
-
- if (!main) return F_false;
-
- if (main->program.signal_received) {
- main->setting.state.status = F_status_set_error(F_interrupt);
-
- return F_true;
- }
-
- return F_false;
- }
-#endif // !defined(_di_controller_signal_check_) && !defined(_di_thread_support_)
-
#if !defined(_di_controller_signal_handler_) && !defined(_di_thread_support_)
void controller_signal_handler(controller_t * const main) {
#endif
/**
- * Check to see if a signal is received.
- *
- * If main.signal is non-zero, then this handles the following signals:
- * - F_signal_abort
- * - F_signal_broken_pipe
- * - F_signal_hangup
- * - F_signal_interrupt
- * - F_signal_quit
- * - F_signal_termination
- *
- * There is a threaded and a non-threaded version of this.
- * The non-threaded version checks periodically using controller_signal_check_d and updates main->signal_check as needed.
- * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received.
- *
- * @param main
- * The main program and settings data.
- *
- * This does not alter main.setting.state.status.
- *
- * @return
- * F_true on signal received.
- * F_false otherwise.
- *
- * @see controller_signal_handler()
- *
- * @see fll_program_standard_signal_received()
- */
-#ifndef _di_controller_signal_check_
- extern f_status_t controller_signal_check(controller_t * const main);
-#endif // _di_controller_signal_check_
-
-/**
* Signal handler for signals/interrupts.
*
* This blocks until an expected signal is recieved.