2 * \brief DOpE relaxation module
4 * \author Norman Feske <nf2@inf.tu-dresden.de>
8 * Copyright (C) 2002-2004 Norman Feske <nf2@os.inf.tu-dresden.de>
9 * Technische Universitaet Dresden, Operating Systems Research Group
11 * This file is part of the DOpE package, which is distributed under
12 * the terms of the GNU General Public Licence 2. Please see the
13 * COPYING file for details.
19 int init_relax(struct dope_services *d);
22 /*************************
23 *** SERVICE FUNCTIONS ***
24 *************************/
26 /*** DEFINE DURATION OF RELAXATION PROCESS ***/
27 static void set_duration(RELAX *r, float time) {
28 float delta = (r->curr > r->dst) ? r->curr - r->dst : r->dst - r->curr;
29 if (time == 0) time = 0.00001;
30 r->accel = 4*delta/(time*time);
32 /* assure an acceleration of at least 1.0 */
33 if (r->accel < 1.0) r->accel = 1.0;
37 /*** DO A RELAXATION ITERATION ***/
38 static int relax_do_relax(RELAX *r) {
41 /* destination value reached? */
42 if (r->curr == r->dst) {
47 /* change value with current speed */
48 if (r->curr > r->dst) {
50 if (r->curr < r->dst) r->curr = r->dst;
53 if (r->curr > r->dst) r->curr = r->dst;
57 delta = r->curr - r->dst;
58 if (delta < 0) delta = -delta;
60 if (r->speed * r->speed < delta * r->accel)
65 if (r->speed < 1) r->speed = 1;
67 return 1; /* relaxation in progress */
71 /****************************************
72 *** SERVICE STRUCTURE OF THIS MODULE ***
73 ****************************************/
75 static struct relax_services services = {
81 /**************************
82 *** MODULE ENTRY POINT ***
83 **************************/
85 int init_relax(struct dope_services *d) {
86 d->register_module("Relax 1.0", &services);