## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### [ct-bot] Patch für Änderungen der Verhaltensanzeige/ Auswahl

Absender: Frank Menzel
Datum: Mo, 26.06.2006 21:13:01
In-reply-to: <812F86EC9E1A96489D5E83C2AB7D688638ABAF@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>

    Hallo,
    anbei ein Patch, welcher die Verhaltensanzeige folgendermaßen ändert:
    1.) sichtbaren Priobereich auf Defines (PRIO_VISIBLE_MIN und
    PRIO_VISIBLE_MAX) zentral in bot-local.h gelegt; nun kann jeder selbst
    seinen gewünschten Anzeigebereich der Verhalten festlegen
    2.) nach Deaktivierung aller Verhalten (nach Not-Aus) werden Grund-/
    Notverhalten wieder aktiviert, da andere Verhalten diese deaktiviert
    haben können (wie Linienfolger).
    3.) dynamische Verhaltensanzeige via Define
    DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE ermoeglicht Online-Sehen der
    Verhaltens-Zustandsaenderungen; Selektion eines Verh. geht sofort durch;
    Entfall der Zustands-Puffervariablen; Not-Aus bewirkt nun keinen Sprung
    mehr zum Verhaltensscreen

    gruss,
    Frank Menzel

    Index: Changelog.txt
    ===================================================================
    RCS file: /ctbot/ct-Bot/Changelog.txt,v
    retrieving revision 1.84
    diff -u -r1.84 Changelog.txt
    --- Changelog.txt	14 Jun 2006 09:57:21 -0000	1.84
    +++ Changelog.txt	26 Jun 2006 20:44:08 -0000
    @@ -1,5 +1,8 @@
     CHANGELOG fuer c't-Bot
     ======================
    +2006-06-26  Frank Menzel(menzelfr@xxxxxx) Aenderungen der Verhaltensanzeige: 1.) sichtbaren Priobereich auf Defines in bot-local.h gelegt 2.) nach Deaktivierung aller Verhalten Grundverhalten
    +                                          wieder aktiviert 3.) dynamische Verhaltensanzeige via Define ermoeglicht Online-Sehen der Zustandsaenderungen, Selektion eines Verh. geht sofort durch
    +
     2006-06-13	Torsten Evers (tevers@xxxxxxxxxxxxx) Anzeige des aktuell freien RAMs auf Screen 5 hinzugefuegt (nur MCU!)

     2006-06-12	Benjamin Benz (bbe@xxxxxxxx) Promo8-FB-Codes erweitert
    Index: bot-logik.c
    ===================================================================
    RCS file: /ctbot/ct-Bot/bot-logik.c,v
    retrieving revision 1.41
    diff -u -r1.41 bot-logik.c
    --- bot-logik.c	12 Jun 2006 13:06:12 -0000	1.41
    +++ bot-logik.c	26 Jun 2006 20:44:12 -0000
    @@ -219,26 +219,7 @@
     	data->caller=NULL;				// Job erledigt, Verweis loeschen
     }

    -/*!
    - * Deaktiviert alle Verhalten bis auf Grundverhalten. Bei Verhaltensauswahl werden die Aktivitaeten vorher
    - * in die Verhaltens-Auswahlvariable gesichert.
    - */
    -void deactivateAllBehaviours(void){
    -	Behaviour_t *job;						// Zeiger auf ein Verhalten
    -
    -	#ifdef DISPLAY_BEHAVIOUR_AVAILABLE
    -	  // bei Verhaltensanzeige in Aktivitaets-Auswahl-Variable sichern
    -	  set_behaviours_equal();
    -	#endif
    -
    -	// Einmal durch die Liste gehen und (fast) alle deaktivieren, Grundverhalten nicht
    -	for (job = behaviour; job; job = job->next) {
    -		if ((job->priority > 2) &&(job->priority <= 200)) {
    -            // Verhalten deaktivieren
    -			job->active = INACTIVE;
    -		}
    -	}
    -}
    +

     /*!
      * Ein ganz einfaches Verhalten, es hat maximale Prioritaet
    @@ -2104,6 +2085,34 @@
     	switch_to_behaviour(caller,bot_goto_behaviour,OVERRIDE);
     }

    +/*!
    + * Deaktiviert alle Verhalten bis auf Grundverhalten. Bei Verhaltensauswahl werden die Aktivitaeten vorher
    + * in die Verhaltens-Auswahlvariable gesichert.
    + */
    +void deactivateAllBehaviours(void){
    +	Behaviour_t *job;						// Zeiger auf ein Verhalten
    +
    +	#ifdef DISPLAY_BEHAVIOUR_AVAILABLE
    +	   #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +	     // bei Verhaltensanzeige in Aktivitaets-Auswahl-Variable sichern
    +	     // nicht bei dynamischer Anzeige und Selektion
    +	     set_behaviours_equal();
    +	   #endif
    +	#endif
    +
    +	// Einmal durch die Liste gehen und (fast) alle deaktivieren, Grundverhalten nicht
    +	for (job = behaviour; job; job = job->next) {
    +		if ((job->priority >= PRIO_VISIBLE_MIN) &&(job->priority <= PRIO_VISIBLE_MAX)) {
    +            // Verhalten deaktivieren
    +			job->active = INACTIVE;
    +		}
    +	}
    +	// Grundverhalten auf jeden Fall wieder selektieren, da andere Verhalten diese deselektieren koennen
    +	activateBehaviour(bot_base_behaviour);
    +	activateBehaviour(bot_avoid_border_behaviour);
    +	activateBehaviour(bot_avoid_col_behaviour);
    +}
    +
     #ifdef DISPLAY_BEHAVIOUR_AVAILABLE

     /*!
    @@ -2124,7 +2133,7 @@

     // zuerst alle Verhalten ermitteln ausser Grundverhalten
       while(ptr != NULL)	{
    -	if  ((ptr->priority > 2) &&(ptr->priority <= 200))
    +	if  ((ptr->priority >= PRIO_VISIBLE_MIN) &&(ptr->priority <= PRIO_VISIBLE_MAX))
         			max_behaviours++;

     	ptr = ptr->next;
    @@ -2153,10 +2162,15 @@

     	// durch die Liste gehen, bis wir den gewuenschten Index erreicht haben
     	for (job = behaviour; job; job = job->next) {
    -	    if ((job->priority > 2) &&(job->priority <= 200)) {
    +	    if ((job->priority >= PRIO_VISIBLE_MIN) &&(job->priority <= PRIO_VISIBLE_MAX)) {
     		  i++;
     		  if (i == pos) {
    -		  	  job->active_new = !job->active_new;
    +		  	  // bei dynamischer Wahl wird direkt die Zustandsvariable geaendert
    +		  	  #ifdef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +		  	    job->active = !job->active;
    +		  	  #else
    +		  	     job->active_new = !job->active_new;
    +		  	  #endif

     			  break;
     		  }
    @@ -2164,7 +2178,7 @@
     	}
     }

    -
    + #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
     /*!
      * Startschuss, die gewaehlten neuen Verhaltensaktivitaeten werden in die
      * Verhaltensliste geschrieben und die Verhalten damit scharf geschaltet
    @@ -2173,7 +2187,7 @@
      Behaviour_t *job;
        for (job = behaviour; job; job = job->next) 	{

    -	if  ((job->priority > 2) &&(job->priority <= 200))
    +	if  ((job->priority >= PRIO_VISIBLE_MIN) &&(job->priority <= PRIO_VISIBLE_MAX))
                 job->active = job->active_new;

        }
    @@ -2187,11 +2201,11 @@
      Behaviour_t *job;
        for (job = behaviour; job; job = job->next) 	{

    -	if  ((job->priority > 2) &&(job->priority <= 200))
    +	if  ((job->priority >= PRIO_VISIBLE_MIN) &&(job->priority <= PRIO_VISIBLE_MAX))
                 job->active_new = job->active;

        }
     }

    -
    -#endif
    +#endif  // dynamic
    +#endif  // Verhaltensanzeige
    Index: ct-Bot.c
    ===================================================================
    RCS file: /ctbot/ct-Bot/ct-Bot.c,v
    retrieving revision 1.31
    diff -u -r1.31 ct-Bot.c
    --- ct-Bot.c	14 Jun 2006 09:57:21 -0000	1.31
    +++ ct-Bot.c	26 Jun 2006 20:44:13 -0000
    @@ -71,6 +71,7 @@
     #include "ir-rc5.h"
     #include "rc5.h"
     #include "timer.h"
    +#include "bot-local.h"

     /* Nimmt den Status von MCUCSR bevor dieses Register auf 0x00 gesetzt wird */
     #ifdef DISPLAY_SCREEN_RESETINFO
    @@ -244,10 +245,14 @@
     					 */
     					while((ptr != NULL)&& (linecounter<5))	{

    -					  if  ((ptr->priority > 2) &&(ptr->priority <= 200)) {
    +					  if  ((ptr->priority >= PRIO_VISIBLE_MIN) &&(ptr->priority <= PRIO_VISIBLE_MAX)) {
                             if   (colcounter >= firstcol) {
     				          display_cursor(linecounter,((colcounter % 2)* 12)+1);
    -					      display_printf(" %3d,%2d",ptr->priority,ptr->active_new);
    +				          #ifdef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +					        display_printf(" %3d,%2d",ptr->priority,ptr->active);
    +					      #else
    +					        display_printf(" %3d,%2d",ptr->priority,ptr->active_new);
    +					      #endif
     					      colcounter++;

     					      /* bei colcounter 0 neue Zeile */
    Index: ct-Bot.h
    ===================================================================
    RCS file: /ctbot/ct-Bot/ct-Bot.h,v
    retrieving revision 1.26
    diff -u -r1.26 ct-Bot.h
    --- ct-Bot.h	8 Jun 2006 16:36:39 -0000	1.26
    +++ ct-Bot.h	26 Jun 2006 20:44:13 -0000
    @@ -50,7 +50,8 @@
     #define DISPLAY_SCREENS_AVAILABLE	/*!< Ermoeglicht vier verschiedene Screen */
     //#define DISPLAY_SCREEN_RESETINFO	/*!< Zeigt auf Screen 4 Informationen ueber Resets an */
     #define DISPLAY_ODOMETRIC_INFO 	/*!< Zeigt auf Screen 4 Positions- und Geschwindigkeitsdaten */
    -//#define DISPLAY_BEHAVIOUR_AVAILABLE  /*!< Anzeige der Verhalten im Display Screen 3, ersetzt Counteranzeige */
    +#define DISPLAY_BEHAVIOUR_AVAILABLE  /*!< Anzeige der Verhalten im Display Screen 3, ersetzt Counteranzeige */
    +#define DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE /*!< Zustandsaenderungen der Verhalten sind direkt unter Umgehung der Puffervar sichtbar */
     #define MEASURE_MOUSE_AVAILABLE			/*!< Geschwindigkeiten werden aus den Maussensordaten berechnet */
     //#define MEASURE_COUPLED_AVAILABLE		/*!< Geschwindigkeiten werden aus Maus- und Encoderwerten ermittelt und gekoppelt */

    Index: rc5.c
    ===================================================================
    RCS file: /ctbot/ct-Bot/rc5.c,v
    retrieving revision 1.24
    diff -u -r1.24 rc5.c
    --- rc5.c	8 Jun 2006 16:36:39 -0000	1.24
    +++ rc5.c	26 Jun 2006 20:44:14 -0000
    @@ -102,8 +102,11 @@
     	/*!
     	 * Diese Funktion setzt die Aktivitaeten der Verhalten nach der Auswahl.
     	 * Hierdurch erfolgt der Startschuss fuer Umschaltung der Verhalten
    +	 * nicht verwendet bei sofortiger Anzeige und Auswahl der Aktivitaet
     	 */
    -	static void rc5_set_all_behaviours(void) ;
    +	 #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +	   static void rc5_set_all_behaviours(void) ;
    +	 #endif

     	/*!
     	 * toggled ein Verhalten der Verhaltensliste an Position pos,
    @@ -189,7 +192,9 @@

     			       if (display_screen == 1) {
     			         behaviour_page = 1;
    -			          set_behaviours_equal();
    +			          #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +			            set_behaviours_equal();
    +			          #endif
     			       }

     		         }
    @@ -207,10 +212,12 @@

     			  /* Screen direkt waehlen und Verhaltens-Puffervariablen abgleichen*/
     			  display_screen = par->value1;
    -		       if ((display_screen == 2)&& (behaviour_page == 1)) {
    -
    -			       set_behaviours_equal();
    -			     }
    +			  // bei dyn. Anzeige und Auswahl keine Ubernahme in Puffervariable benoetigt
    +			   #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +		         if ((display_screen == 2)&& (behaviour_page == 1)) {
    +			         set_behaviours_equal();
    +			       }
    +			   #endif
     			  behaviour_page = 1;

     		   #else
    @@ -291,8 +298,11 @@
     		    // Alle Verhalten deaktivieren
     		    deactivateAllBehaviours();  // alle Verhalten deaktivieren mit vorheriger Sicherung
     		     #ifdef DISPLAY_BEHAVIOUR_AVAILABLE
    -		       display_clear();         // Screen zuerst loeschen
    -		       display_screen = 2;      // nach Notstop in den Verhaltensscreen mit Anzeige der alten Verhalten
    +		       // bei dynamischer Verhaltensanzeige kein Sprung in Anzeigescreen notwenig
    +		        #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +		          display_clear();         // Screen zuerst loeschen
    +		          display_screen = 2;      // nach Notstop in den Verhaltensscreen mit Anzeige der alten Verhalten
    +		        #endif
     		     #endif
     }

    @@ -360,11 +370,15 @@
     /*!
      * Diese Funktion setzt die Aktivitaeten der Verhalten nach der Auswahl.
      * Hierdurch erfolgt der Startschuss fuer Umschaltung der Verhalten
    - */	  static void rc5_set_all_behaviours(void) {
    + * nicht bei sofortiger Anzeige und Selektion
    + */
    +  #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +    static void rc5_set_all_behaviours(void) {

     		  set_behaviours_active_to_new();

    -  }
    +    }
    +  #endif
     #endif

     /*!
    @@ -386,7 +400,11 @@
     					case 6: rc5_toggle_behaviour_new(6); break;
     					case 7: break;
     					case 8: break;
    -					case 9: rc5_set_all_behaviours(); break;
    +					case 9:
    +					        #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE
    +					          rc5_set_all_behaviours();
    +					        #endif
    +					        break;
     				}
     				break;
     		#endif
    Index: include/bot-local.h
    ===================================================================
    RCS file: /ctbot/ct-Bot/include/bot-local.h,v
    retrieving revision 1.10
    diff -u -r1.10 bot-local.h
    --- include/bot-local.h	8 Jun 2006 16:36:38 -0000	1.10
    +++ include/bot-local.h	26 Jun 2006 20:44:15 -0000
    @@ -142,9 +142,9 @@

    -
    -
    -
    +/* Konstanten fuer Verhaltensanzeige, Verhalten mit prio von bis sichtbar */
    +#define PRIO_VISIBLE_MIN 3
    +#define PRIO_VISIBLE_MAX 254

     #endif /*BOTLOCAL_H_*/
    Index: include/bot-logik.h
    ===================================================================
    RCS file: /ctbot/ct-Bot/include/bot-logik.h,v
    retrieving revision 1.18
    diff -u -r1.18 bot-logik.h
    --- include/bot-logik.h	8 Jun 2006 16:36:39 -0000	1.18
    +++ include/bot-logik.h	26 Jun 2006 20:44:16 -0000
    @@ -39,7 +39,9 @@

        uint8 active:1;				/*!< Ist das Verhalten aktiv */
        #ifdef DISPLAY_BEHAVIOUR_AVAILABLE
    -   uint8 active_new:1;			/*!< Ist das via Display gewaehlte neue Sollverhalten */
    +     #ifndef DISPLAY_DYNAMIC_BEHAVIOUR_AVAILABLE /*!< bei dynamischer Anzeige und Wahl keine Puffervar notwendig */
    +       uint8 active_new:1;			/*!< Ist das via Display gewaehlte neue Sollverhalten */
    +     #endif
        #endif
        uint8 subResult:2;			/*!< War das aufgerufene unterverhalten erfolgreich (==1)?*/
        struct _Behaviour_t *next;					/*!< Naechster Eintrag in der Liste */

- Antworten:
  - Re: [ct-bot] Patch für Änderungen der Verhaltensanzeige/ Auswahl
    - From: Benjamin Benz

- Referenzen:
  - [ct-bot] Betrieb ohne USB-2-Bot-Adapter
    - From: Menzel, Frank IT-OO4

- Voriger (Datum): [ct-bot] Betrieb ohne USB-2-Bot-Adapter, Menzel, Frank IT-OO4
- Nächster (Datum): RE: [ct-bot] Betrieb ohne USB-2-Bot-Adapter, Menzel, Frank IT-OO4
- Voriger (Thread): [ct-bot] Betrieb ohne USB-2-Bot-Adapter, Menzel, Frank IT-OO4
- Nächster (Thread): Re: [ct-bot] Patch für Änderungen der Verhaltensanzeige/ Auswahl, Benjamin Benz
- Indizes:
  - Datum
  - Thread