annotate src/cs/services/vibr/vibr_process.c @ 294:e17bdedfbf2b

VIBR SWE initial implementation
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 27 Mar 2022 08:46:10 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
294
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * In this module we are going to implement the main process functions
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * for VIBR.
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include "vibr/vibr_env.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include "vibr/vibr_func_i.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include "rv/rv_general.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include "rvf/rvf_api.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include "rvm/rvm_use_id_list.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include "main/sys_types.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "buzzer/vibrator.h"
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 /* duration of "on" and "off" phases of each vibration cycle */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #define ON_PHASE_MS 500
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #define OFF_PHASE_MS 500
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 void vibr_process_start_req(struct vibr_start_msg *msg)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 vibr_env->vibr_level = msg->vibr_level;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 /* start the first pulse */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 HW_vibrator_on(vibr_env->vibr_level);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 vibr_env->on_state = TRUE;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 rvf_start_timer(VIBR_TIMER, RVF_MS_TO_TICKS(ON_PHASE_MS), FALSE);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 if (msg->num_pulses) {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 vibr_env->cont_mode = FALSE;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 vibr_env->remain_cycles = msg->num_pulses;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 } else
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 vibr_env->cont_mode = TRUE;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 }
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 void vibr_process_stop_req(struct vibr_stop_msg *msg)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 HW_vibrator_off();
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 rvf_stop_timer(VIBR_TIMER);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 }
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 static void on_phase_end(void)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 HW_vibrator_off();
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 /* got more pulses? */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 if (!vibr_env->cont_mode) {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 vibr_env->remain_cycles--;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 if (!vibr_env->remain_cycles)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 return; /* pulse train finished */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 }
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 /* time the "off" phase before next pulse */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 vibr_env->on_state = FALSE;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 rvf_start_timer(VIBR_TIMER, RVF_MS_TO_TICKS(OFF_PHASE_MS), FALSE);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 }
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 static void off_phase_end(void)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 /* start the next pulse */
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 HW_vibrator_on(vibr_env->vibr_level);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 vibr_env->on_state = TRUE;
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 rvf_start_timer(VIBR_TIMER, RVF_MS_TO_TICKS(ON_PHASE_MS), FALSE);
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 }
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 void vibr_handle_timer(void)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 {
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 if (vibr_env->on_state)
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 on_phase_end();
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 else
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 off_phase_end();
e17bdedfbf2b VIBR SWE initial implementation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 }