1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/*
* Copyright © 2012 Keith Packard <keithp@keithp.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
#ifndef _AO_LCO_H_
#define _AO_LCO_H_
#include <ao_lco_func.h>
#ifndef AO_LCO_DRAG
#define AO_LCO_DRAG 1
#endif
#define DEBUG 1
#if DEBUG
extern uint8_t ao_lco_debug;
#define PRINTD(...) do { if (!ao_lco_debug) break; printf ("\r%5u %s: ", ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } while(0)
#else
#define PRINTD(...)
#endif
#if AO_LCO_DRAG
extern uint8_t ao_lco_drag_race; /* true when drag race mode enabled */
#endif
extern uint8_t ao_lco_pad; /* Currently selected pad */
extern int16_t ao_lco_box; /* Currently selected box */
extern uint8_t ao_lco_armed; /* armed mode active */
extern uint8_t ao_lco_firing; /* fire button pressed */
extern struct ao_pad_query ao_pad_query; /* Last received QUERY from pad */
#define AO_LCO_PAD_VOLTAGE 0 /* Pad number to show box voltage */
extern uint8_t ao_lco_min_box, ao_lco_max_box;
#define AO_LCO_MASK_SIZE(n) (((n) + 7) >> 3)
#define AO_LCO_MASK_ID(n) ((n) >> 3)
#define AO_LCO_MASK_SHIFT(n) ((n) & 7)
extern uint8_t ao_lco_box_mask[AO_LCO_MASK_SIZE(AO_PAD_MAX_BOXES)];
/*
* Shared functions
*/
void
ao_lco_igniter_status(void);
void
ao_lco_update(void);
uint8_t
ao_lco_pad_present(uint8_t box, uint8_t pad);
uint8_t
ao_lco_pad_first(uint8_t box);
void
ao_lco_set_pad(uint8_t new_pad);
void
ao_lco_step_pad(int8_t dir);
void
ao_lco_set_box(uint16_t new_box);
void
ao_lco_set_armed(uint8_t armed);
void
ao_lco_set_firing(uint8_t firing);
void
ao_lco_toggle_drag(void);
void
ao_lco_search(void);
void
ao_lco_monitor(void);
extern uint8_t ao_lco_drag_beep_count;
/* enable drag race mode */
void
ao_lco_drag_enable(void);
/* disable drag race mode */
void
ao_lco_drag_disable(void);
/* Handle drag beeps, return new delay */
uint16_t
ao_lco_drag_beep_check(uint16_t now, uint16_t delay);
/* Check if it's time to beep during drag race. Return new delay */
uint16_t
ao_lco_drag_warn_check(uint16_t now, uint16_t delay);
/* Request 'beeps' additional drag race beeps */
void
ao_lco_drag_add_beeps(uint8_t beeps);
/* task function for beeping while arm is active */
void
ao_lco_arm_warn(void);
/*
* Provided by the hw-specific driver code
*/
void
ao_lco_show_pad(uint8_t pad);
void
ao_lco_show_box(uint16_t box);
void
ao_lco_show(void);
void
ao_lco_init(void);
uint8_t
ao_lco_box_present(uint16_t box);
#endif /* _AO_LCO_H_ */
|