void rules_clock_leff (void) { task_create_peer (rules_clock_leff2); fh_clock_set (0, TIME_0_MIN); for (;;) { task_sleep (TIME_66MS); fh_clock_advance_step (); } }
void burnin_thread (void) { for (;;) { task_create_peer (burnin_lamp_thread); task_create_peer (burnin_sound_thread); #ifdef CONFIG_GI task_create_peer (burnin_gi_thread); #endif task_create_peer (burnin_flasher_thread); task_create_peer (burnin_time_audit_thread); #if (MACHINE_FLIPTRONIC == 1) task_create_peer (burnin_flipper_thread); #endif task_sleep_sec (60); task_kill_peers (); } }
/** * This task runs during a switch stress test. During a game, * it randomly invokes switch handlers as if the switches had actually * been activated by the pinball. */ void switch_stress_task (void) { U8 sw; const switch_info_t *swinfo; task_pid_t tp; /* Delay a few seconds before starting the simulation. This allows time for the Start Button to be used to add players, instead of simulating endball. */ task_sleep_sec (3); task_create_peer (switch_stress_flipper_task); for (;;) { task_sleep (TIME_100MS); if (in_test) continue; /* Choose a switch at random. Skip certain well-known switches that are * never to be activated. */ sw = random_scaled (NUM_SWITCHES); #ifdef SW_ALWAYS_CLOSED if (sw == SW_ALWAYS_CLOSED) continue; #endif #ifdef MACHINE_OUTHOLE_SWITCH if (sw == MACHINE_OUTHOLE_SWITCH) continue; #endif /* Lookup the switch properties. Skip switches which aren't normally * activated on the playfield. For switches in a ball container, * simulate device entry there, otherwise simulate a switch event. */ swinfo = switch_lookup (sw); if (SW_HAS_DEVICE (swinfo)) { device_t *dev = device_entry (SW_GET_DEVICE (swinfo)); if (trough_dev_p (dev)) { /* Don't always trigger the trough device. The probability of a ball drain is treated as proportional to the number of balls in play. So in big multiballs, we allow this to happen more frequently. We need to do this occasionally so that multiball modes will eventually end, else nothing else gets tested. */ if (random () < CONFIG_STRESS_DRAIN_PROB * live_balls) switch_stress_drain (); } else if (dev->max_count < dev->size) { /* Don't throw an enter event if the device thinks it is full: it has "locked" as many balls as it can hold. The device code will throw a fatal if it sees this, which should never happen with real balls. */ dbprintf ("Sim. enter dev %d\n", dev->devno); device_call_op (dev, enter); task_sleep (TIME_1S); } } else if (swinfo->flags & SW_PLAYFIELD) { /* Simulate the switch */ tp = task_create_gid (GID_SW_HANDLER, switch_sched_task); task_set_arg (tp, sw); } } }