c't

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 */