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