heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


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

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

Absender: Benjamin Benz
Datum: Mo, 28.08.2006 16:27:09
In-reply-to: <000001c69954$8a89ff40$fe78a8c0@mexpnew>
References: <000001c69954$8a89ff40$fe78a8c0@mexpnew>


Sehr geehrter Herr Menzel,

leider ist es mir aufgrund von viel Arbeit an ganz anderen Baustellen,
dem Wettbewerb und privaten Terminen erst jetzt möglich auf Ihre Mail zu
beantworten.

Ich finde Ihren Patch sehr interessant und würde ihn gerne aufnehmen.
Eine Kleinigkeit stört mich jedoch noch, da sie das bisherige
Verhalten/System modifiziert:

Sie führen eine Konstante  PRIO_VISIBLE_MAX ein. Der name und der Wert
(254) assoziiert, dass es sich dabei um eine Grenze für die Anzeige
handelt. Sie verwenden diese Konstante jedoch auch in einigen schleifen.
dort satnd vorher der Wert 200. Nicht etwa zufällig, sondern als Grenze
für die Notfallverhalten, die unter anderem immer anbleiben sollen. Ich
wäre dann eher für Konstanten, die die Bereiche abgrenzen. Das würde
auch die hässliche Einzelwiederanschaltung von 3 Verhalten erübrigen.

Wenn Sie das noch ändern könnten, spiele ich den Patch gerne ein.

MfG Benjamin Benz

Frank Menzel wrote:
> 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 */
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> ct-bot-entwickler Mailingliste
> ct-bot-entwickler@xxxxxxxxxxxxxxxxx
> http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler


-- 
Benjamin Benz
Heise Zeitschriften Verlag
Redaktion c't
eMail: bbe@xxxxxxxx
WWW  : http://www.heise.de





Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum