summaryrefslogtreecommitdiff
path: root/digital/ai
diff options
context:
space:
mode:
Diffstat (limited to 'digital/ai')
-rw-r--r--digital/ai/src/fsm/fsm.host.c6
-rw-r--r--digital/ai/src/twi_master/asserv.c13
-rw-r--r--digital/ai/src/twi_master/asserv.h4
-rw-r--r--digital/ai/src/twi_master/mimot.c16
-rw-r--r--digital/ai/src/twi_master/mimot.h8
-rw-r--r--digital/ai/src/utils/chrono.c11
-rw-r--r--digital/ai/src/utils/timer.avr.c10
-rw-r--r--digital/ai/src/utils/timer.h2
-rw-r--r--digital/ai/tools/test_simu_control_guybrush.py7
9 files changed, 51 insertions, 26 deletions
diff --git a/digital/ai/src/fsm/fsm.host.c b/digital/ai/src/fsm/fsm.host.c
index 391792e9..ad9d0b00 100644
--- a/digital/ai/src/fsm/fsm.host.c
+++ b/digital/ai/src/fsm/fsm.host.c
@@ -1143,7 +1143,10 @@ fsm_build_gen_avr_c (fsm_build_t *fsm, uint embedded_strings)
/* Introduction. */
fprintf (f, "/* This file has been generated, do not edit. */\n\n");
+ fprintf (f, "#include \"common.h\"\n\n");
+ fprintf (f, "#include \"io.h\"\n\n");
fprintf (f, "#include \"fsm_%s_gen.h\"\n\n", fsm->name);
+ fprintf (f, "#include \"logger.h\"\n\n");
fprintf (f, "#include \"modules/proto/proto.h\"\n\n");
/* Gen state strings. */
@@ -1357,6 +1360,9 @@ fsm_build_gen_avr_c (fsm_build_t *fsm, uint embedded_strings)
fsm->name,
fsm->name,
fsm->name);
+ fprintf (f, "\t\t\tlogger_log (old_state, e, "
+ "fsm_%s_active_states[i]);\n",
+ fsm->name);
fprintf (f, "\t\t\tproto_send3b ('F', old_state, e, "
"fsm_%s_active_states[i]);\n",
fsm->name);
diff --git a/digital/ai/src/twi_master/asserv.c b/digital/ai/src/twi_master/asserv.c
index ad36e00b..cff3587b 100644
--- a/digital/ai/src/twi_master/asserv.c
+++ b/digital/ai/src/twi_master/asserv.c
@@ -420,6 +420,19 @@ asserv_set_speed (uint16_t linear_high, uint16_t angular_high,
}
void
+asserv_set_acc (uint16_t linear, uint16_t angular)
+{
+ uint8_t *buffer = twi_master_get_buffer (TWI_MASTER_ID_ASSERV);
+ buffer[0] = 'p';
+ buffer[1] = 'a';
+ buffer[2] = v16_to_v8 (linear, 1);
+ buffer[3] = v16_to_v8 (linear, 0);
+ buffer[4] = v16_to_v8 (angular, 1);
+ buffer[5] = v16_to_v8 (angular, 0);
+ twi_master_send_buffer (6);
+}
+
+void
asserv_set_position (int32_t x, int32_t y, int16_t angle)
{
x = fixed_mul_f824 (x, asserv_scale_inv);
diff --git a/digital/ai/src/twi_master/asserv.h b/digital/ai/src/twi_master/asserv.h
index 1cbcb187..ac2ba146 100644
--- a/digital/ai/src/twi_master/asserv.h
+++ b/digital/ai/src/twi_master/asserv.h
@@ -271,6 +271,10 @@ void
asserv_set_speed (uint16_t linear_high, uint16_t angular_high,
uint16_t linear_low, uint16_t angular_low);
+/** Set acceleration. */
+void
+asserv_set_acc (uint16_t linear, uint16_t angular);
+
/**
* Set the complete position of the bot.
* This is an helpful function preventing you from calling multiples other
diff --git a/digital/ai/src/twi_master/mimot.c b/digital/ai/src/twi_master/mimot.c
index 6663f81f..ff73fdb7 100644
--- a/digital/ai/src/twi_master/mimot.c
+++ b/digital/ai/src/twi_master/mimot.c
@@ -240,21 +240,13 @@ mimot_motor1_clamp (int16_t speed, int16_t pwm)
}
void
-mimot_motor0_free (void)
+mimot_motor_free (uint8_t motor, uint8_t brake)
{
uint8_t *buffer = twi_master_get_buffer (TWI_MASTER_ID_MIMOT);
buffer[0] = 'w';
- buffer[1] = 0;
- twi_master_send_buffer (2);
-}
-
-void
-mimot_motor1_free (void)
-{
- uint8_t *buffer = twi_master_get_buffer (TWI_MASTER_ID_MIMOT);
- buffer[0] = 'w';
- buffer[1] = 1;
- twi_master_send_buffer (2);
+ buffer[1] = motor;
+ buffer[2] = brake;
+ twi_master_send_buffer (3);
}
void
diff --git a/digital/ai/src/twi_master/mimot.h b/digital/ai/src/twi_master/mimot.h
index 78806154..78f0a8c9 100644
--- a/digital/ai/src/twi_master/mimot.h
+++ b/digital/ai/src/twi_master/mimot.h
@@ -111,13 +111,9 @@ mimot_motor0_clamp (int16_t speed, int16_t pwm);
void
mimot_motor1_clamp (int16_t speed, int16_t pwm);
-/** Free motor0. */
+/** Free motor. */
void
-mimot_motor0_free (void);
-
-/** Free motor1. */
-void
-mimot_motor1_free (void);
+mimot_motor_free (uint8_t motor, uint8_t brake);
/** Set raw output for motor. */
void
diff --git a/digital/ai/src/utils/chrono.c b/digital/ai/src/utils/chrono.c
index 41e39b87..8560c3e0 100644
--- a/digital/ai/src/utils/chrono.c
+++ b/digital/ai/src/utils/chrono.c
@@ -44,7 +44,7 @@
static uint32_t chrono_tick_left_;
/** Last timer tick value. */
-static uint8_t chrono_last_tick_;
+static uint16_t chrono_last_tick_;
/** Is chrono started? */
static uint8_t chrono_started_;
@@ -62,8 +62,8 @@ chrono_update (void)
{
if (chrono_started_)
{
- uint8_t new_tick = timer_get_tick ();
- uint8_t diff = new_tick - chrono_last_tick_;
+ uint16_t new_tick = timer_get_tick ();
+ uint16_t diff = new_tick - chrono_last_tick_;
chrono_last_tick_ = new_tick;
if (diff > chrono_tick_left_)
chrono_tick_left_ = 0;
@@ -84,7 +84,10 @@ chrono_is_match_over (void)
uint32_t
chrono_remaining_time (void)
{
- return chrono_tick_left_ * TIMER_PERIOD_MS;
+ if (!chrono_started_)
+ return CHRONO_MATCH_DURATION_MS;
+ else
+ return chrono_tick_left_ * TIMER_PERIOD_MS;
}
void
diff --git a/digital/ai/src/utils/timer.avr.c b/digital/ai/src/utils/timer.avr.c
index d00278f8..9a6e3ede 100644
--- a/digital/ai/src/utils/timer.avr.c
+++ b/digital/ai/src/utils/timer.avr.c
@@ -33,7 +33,7 @@
static volatile uint8_t timer_overflow;
/** Incremented when timer overflowed. */
-static volatile uint8_t timer_tick;
+static volatile uint16_t timer_tick;
ISR (TIMER0_OVF_vect)
{
@@ -79,9 +79,13 @@ timer_wait (void)
return late;
}
-uint8_t
+uint16_t
timer_get_tick (void)
{
- return timer_tick;
+ uint16_t tick;
+ intr_flags_t flags = intr_lock ();
+ tick = timer_tick;
+ intr_restore (flags);
+ return tick;
}
diff --git a/digital/ai/src/utils/timer.h b/digital/ai/src/utils/timer.h
index dd71681f..0d597870 100644
--- a/digital/ai/src/utils/timer.h
+++ b/digital/ai/src/utils/timer.h
@@ -62,7 +62,7 @@ uint8_t
timer_wait (void);
/** Get a tick value, incremented at each tick, never reset. */
-uint8_t
+uint16_t
timer_get_tick (void);
#endif /* timer_h */
diff --git a/digital/ai/tools/test_simu_control_guybrush.py b/digital/ai/tools/test_simu_control_guybrush.py
index e895bf39..661e2140 100644
--- a/digital/ai/tools/test_simu_control_guybrush.py
+++ b/digital/ai/tools/test_simu_control_guybrush.py
@@ -97,6 +97,10 @@ class TestSimuControl (TestSimu):
text = 'Robot is back', padx = 0, pady = 0,
command = self.robot_is_back)
self.robot_is_back_button.pack()
+ self.unblock_button = Button (self.control_frame,
+ text = 'unblock bottom clamp', padx = 0, pady = 0,
+ command = self.unblock_bottom_clamp)
+ self.unblock_button.pack()
self.backward_var = IntVar ()
self.backward_button = Checkbutton (self.control_frame,
text = 'Backward', variable = self.backward_var)
@@ -146,5 +150,8 @@ class TestSimuControl (TestSimu):
def robot_is_back(self):
self.io.robot_is_back()
+ def unblock_bottom_clamp(self):
+ self.io.unblock_bottom_clamp()
+
if __name__ == '__main__':
run ('guybrush', TestSimuControl)