LibDriver BUTTON
Loading...
Searching...
No Matches
driver_button_trigger_test.c
Go to the documentation of this file.
1
36
38
39static button_handle_t gs_handle;
40static volatile uint16_t gs_flag;
41
47static void a_receive_callback(button_t *data)
48{
49 switch (data->status)
50 {
52 {
53 gs_flag |= (1 << 0);
54
55 break;
56 }
58 {
59 gs_flag |= (1 << 1);
60
61 break;
62 }
64 {
65 gs_flag |= (1 << 2);
66 button_interface_debug_print("button: irq single click.\n");
67
68 break;
69 }
71 {
72 gs_flag |= (1 << 3);
73 button_interface_debug_print("button: irq double click.\n");
74
75 break;
76 }
78 {
79 gs_flag |= (1 << 4);
80 button_interface_debug_print("button: irq triple click.\n");
81
82 break;
83 }
85 {
86 gs_flag |= (1 << 5);
87 button_interface_debug_print("button: irq repeat click with %d times.\n", data->times);
88
89 break;
90 }
92 {
93 gs_flag |= (1 << 6);
94 button_interface_debug_print("button: irq short press start.\n");
95
96 break;
97 }
99 {
100 gs_flag |= (1 << 7);
101 button_interface_debug_print("button: irq short press end.\n");
102
103 break;
104 }
106 {
107 gs_flag |= (1 << 8);
108 button_interface_debug_print("button: irq long press start.\n");
109
110 break;
111 }
113 {
114 gs_flag |= (1 << 9);
115 button_interface_debug_print("button: irq long press hold.\n");
116
117 break;
118 }
120 {
121 gs_flag |= (1 << 10);
122 button_interface_debug_print("button: irq long press end.\n");
123
124 break;
125 }
126 default :
127 {
128 button_interface_debug_print("button: irq unknown status.\n");
129
130 break;
131 }
132 }
133}
134
144uint8_t button_trigger_test_irq_handler(uint8_t press_release)
145{
146 if (button_irq_handler(&gs_handle, press_release) != 0)
147 {
148 return 1;
149 }
150
151 return 0;
152}
153
162{
163 if (button_period_handler(&gs_handle) != 0)
164 {
165 return 1;
166 }
167
168 return 0;
169}
170
179{
180 uint8_t res;
181 uint32_t timeout;
182 button_info_t info;
183
184 /* link interface function */
189 DRIVER_BUTTON_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
190
191 /* get information */
192 res = button_info(&info);
193 if (res != 0)
194 {
195 button_interface_debug_print("button: get info failed.\n");
196
197 return 1;
198 }
199 else
200 {
201 /* print chip info */
202 button_interface_debug_print("button: chip is %s.\n", info.chip_name);
203 button_interface_debug_print("button: manufacturer is %s.\n", info.manufacturer_name);
204 button_interface_debug_print("button: interface is %s.\n", info.interface);
205 button_interface_debug_print("button: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
206 button_interface_debug_print("button: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
207 button_interface_debug_print("button: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
208 button_interface_debug_print("button: max current is %0.2fmA.\n", info.max_current_ma);
209 button_interface_debug_print("button: max temperature is %0.1fC.\n", info.temperature_max);
210 button_interface_debug_print("button: min temperature is %0.1fC.\n", info.temperature_min);
211 }
212
213 /* init */
214 res = button_init(&gs_handle);
215 if (res != 0)
216 {
217 button_interface_debug_print("button: init failed.\n");
218
219 return 1;
220 }
221
222 /* start trigger test */
223 button_interface_debug_print("button: start trigger test.\n");
224
225 /* 100s timeout */
226 timeout = 10000;
227
228 /* init 0 */
229 gs_flag = 0;
230
231 /* check timeout */
232 while (timeout != 0)
233 {
234 /* check the flag */
235 if ((gs_flag & 0x07FF) == 0x07FF)
236 {
237 break;
238 }
239
240 /* timeout -- */
241 timeout--;
242
243 /* delay 10ms */
245 }
246
247 /* check the timeout */
248 if (timeout == 0)
249 {
250 /* receive timeout */
251 button_interface_debug_print("button: trigger timeout.\n");
252 (void)button_deinit(&gs_handle);
253
254 return 1;
255 }
256
257 /* finish trigger test */
258 button_interface_debug_print("button: finish trigger test.\n");
259 (void)button_deinit(&gs_handle);
260
261 return 0;
262}
driver button trigger test header file
uint8_t button_info(button_info_t *info)
get chip's information
struct button_info_s button_info_t
button information structure definition
uint8_t button_deinit(button_handle_t *handle)
close the chip
uint8_t button_irq_handler(button_handle_t *handle, uint8_t press_release)
irq handler
struct button_handle_s button_handle_t
button handle structure definition
uint8_t button_init(button_handle_t *handle)
initialize the chip
uint8_t button_period_handler(button_handle_t *handle)
period handler
struct button_s button_t
button structure definition
@ BUTTON_STATUS_DOUBLE_CLICK
@ BUTTON_STATUS_SHORT_PRESS_START
@ BUTTON_STATUS_PRESS
@ BUTTON_STATUS_LONG_PRESS_START
@ BUTTON_STATUS_TRIPLE_CLICK
@ BUTTON_STATUS_SHORT_PRESS_END
@ BUTTON_STATUS_REPEAT_CLICK
@ BUTTON_STATUS_LONG_PRESS_HOLD
@ BUTTON_STATUS_SINGLE_CLICK
@ BUTTON_STATUS_RELEASE
@ BUTTON_STATUS_LONG_PRESS_END
void button_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t button_interface_timestamp_read(button_time_t *t)
interface timestamp read
void button_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t button_trigger_test_irq_handler(uint8_t press_release)
trigger test irq
uint8_t button_trigger_test_period_handler(void)
trigger test period
uint8_t button_trigger_test(void)
trigger test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]
uint16_t status
uint16_t times