c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
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 */