• Home
  • Raw
  • Download

Lines Matching +full:for +full:- +full:each

4  * Copyright (C) 2019 - 2020 Andy Green <andy@warmcat.com>
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 #include "private-lib-core.h"
40 * This is the opaque, allocated, non-const, dynamic footprint of the
56 /* incremented each time the mon timer cb happens */
91 lws_button_each_t *each = (lws_button_each_t *)arg; in lws_button_irq_cb_t() local
93 each->isr_pending = 1; in lws_button_irq_cb_t()
94 LWS_PLAT_TIMER_START(each->bcs->timer); in lws_button_irq_cb_t()
99 * This is the bottom-half scheduled via a timer set in the ISR. From here
108 const lws_button_controller_t *bc = bcs->controller; in LWS_PLAT_TIMER_CB()
109 lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; in LWS_PLAT_TIMER_CB() local
113 * The ISR and bottom-half is shared by all the buttons. Each gpio in LWS_PLAT_TIMER_CB()
116 * each->isr_pending and schedules this bottom half. in LWS_PLAT_TIMER_CB()
124 for (n = 0; n < bc->count_buttons; n++) { in LWS_PLAT_TIMER_CB()
126 if (!each[n].isr_pending) in LWS_PLAT_TIMER_CB()
134 bc->gpio_ops->irq_mode(bc->button_map[n].gpio, in LWS_PLAT_TIMER_CB()
137 each[n].isr_pending = 0; in LWS_PLAT_TIMER_CB()
144 bc->gpio_ops->set(bc->button_map[n].gpio, in LWS_PLAT_TIMER_CB()
145 !!(bc->active_state_bitmap & (1 << n))); in LWS_PLAT_TIMER_CB()
146 bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_WRITE); in LWS_PLAT_TIMER_CB()
148 if (each[n].state == LBCS_IDLE) { in LWS_PLAT_TIMER_CB()
155 each[n].state = LBCS_MIN_DOWN_QUALIFY; in LWS_PLAT_TIMER_CB()
156 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
158 if (!bcs->mon_refcount++) { in LWS_PLAT_TIMER_CB()
161 LWS_PLAT_TIMER_START(bcs->timer_mon); in LWS_PLAT_TIMER_CB()
167 * Just for a us or two inbetween here, we're driving it to the in LWS_PLAT_TIMER_CB()
170 * the switch to a deterministic-ish state. in LWS_PLAT_TIMER_CB()
173 * difference; if it was a pre-contact and the charge on the in LWS_PLAT_TIMER_CB()
179 bc->gpio_ops->mode(bc->button_map[n].gpio, LWSGGPIO_FL_READ); in LWS_PLAT_TIMER_CB()
192 bc->gpio_ops->irq_mode(bc->button_map[n].gpio, in LWS_PLAT_TIMER_CB()
193 bc->active_state_bitmap & (1 << n) ? in LWS_PLAT_TIMER_CB()
196 lws_button_irq_cb_t, &each[n]); in LWS_PLAT_TIMER_CB()
205 lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; in LWS_PLAT_TIMER_CB() local
206 const lws_button_controller_t *bc = bcs->controller; in LWS_PLAT_TIMER_CB()
213 bcs->mon_timer_count++; in LWS_PLAT_TIMER_CB()
215 for (n = 0; n < bc->count_buttons; n++) { in LWS_PLAT_TIMER_CB()
217 if (each[n].state == LBCS_IDLE) in LWS_PLAT_TIMER_CB()
220 if (bc->button_map[n].regime) in LWS_PLAT_TIMER_CB()
221 regime = bc->button_map[n].regime; in LWS_PLAT_TIMER_CB()
225 comp_age_ms = (bcs->mon_timer_count - each[n].mon_timer_comp) * in LWS_PLAT_TIMER_CB()
228 active = bc->gpio_ops->read(bc->button_map[n].gpio) ^ in LWS_PLAT_TIMER_CB()
229 (!(bc->active_state_bitmap & (1 << n))); in LWS_PLAT_TIMER_CB()
231 // lwsl_notice("%d\n", each[n].state); in LWS_PLAT_TIMER_CB()
233 switch (each[n].state) { in LWS_PLAT_TIMER_CB()
237 * is a glitch, or if it meets the criteria for being in LWS_PLAT_TIMER_CB()
240 * for the time mentioned in the applied regime (at in LWS_PLAT_TIMER_CB()
254 /* We ignore stuff for a bit after discard */ in LWS_PLAT_TIMER_CB()
255 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
256 each[n].state = LBCS_UP_SETTLE2; in LWS_PLAT_TIMER_CB()
260 if (comp_age_ms >= regime->ms_min_down) { in LWS_PLAT_TIMER_CB()
265 * we can call it as a long-click in LWS_PLAT_TIMER_CB()
268 each[n].state = LBCS_ASSESS_DOWN_HOLD; in LWS_PLAT_TIMER_CB()
276 * past the long-click threshold, we can call it as a in LWS_PLAT_TIMER_CB()
277 * long-click and do the up processing afterwards. in LWS_PLAT_TIMER_CB()
279 if (comp_age_ms >= regime->ms_min_down_longpress) { in LWS_PLAT_TIMER_CB()
282 each[n].state = LBCS_WAIT_UP; in LWS_PLAT_TIMER_CB()
288 * He didn't hold it past the long-click in LWS_PLAT_TIMER_CB()
290 * as either a click or a double-click then. in LWS_PLAT_TIMER_CB()
292 * If double-clicks are not allowed to be in LWS_PLAT_TIMER_CB()
294 * as a single-click. in LWS_PLAT_TIMER_CB()
296 if (!(regime->flags & LWSBTNRGMFLAG_CLASSIFY_DOUBLECLICK)) in LWS_PLAT_TIMER_CB()
300 * Just wait for the up settle time then start in LWS_PLAT_TIMER_CB()
301 * looking for a second down. in LWS_PLAT_TIMER_CB()
303 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
304 each[n].state = LBCS_UP_SETTLE1; in LWS_PLAT_TIMER_CB()
309 if (comp_age_ms > regime->ms_up_settle) in LWS_PLAT_TIMER_CB()
311 * Just block anything for the up settle time in LWS_PLAT_TIMER_CB()
313 each[n].state = LBCS_WAIT_DOUBLECLICK; in LWS_PLAT_TIMER_CB()
321 * the double-click path in LWS_PLAT_TIMER_CB()
323 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
324 each[n].state = LBCS_MIN_DOWN_QUALIFY2; in LWS_PLAT_TIMER_CB()
328 if (comp_age_ms >= regime->ms_doubleclick_grace) { in LWS_PLAT_TIMER_CB()
333 * single-click in LWS_PLAT_TIMER_CB()
345 * as a single-click. It could be bounce in in LWS_PLAT_TIMER_CB()
350 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
351 each[n].state = LBCS_UP_SETTLE2; in LWS_PLAT_TIMER_CB()
355 if (comp_age_ms >= regime->ms_min_down) { in LWS_PLAT_TIMER_CB()
357 * It's a double-click in LWS_PLAT_TIMER_CB()
360 each[n].state = LBCS_WAIT_UP; in LWS_PLAT_TIMER_CB()
367 each[n].mon_timer_comp = bcs->mon_timer_count; in LWS_PLAT_TIMER_CB()
368 each[n].state = LBCS_UP_SETTLE2; in LWS_PLAT_TIMER_CB()
373 if (comp_age_ms < regime->ms_up_settle) in LWS_PLAT_TIMER_CB()
376 each[n].state = LBCS_IDLE; in LWS_PLAT_TIMER_CB()
377 if (!(--bcs->mon_refcount)) { in LWS_PLAT_TIMER_CB()
379 LWS_PLAT_TIMER_STOP(bcs->timer_mon); in LWS_PLAT_TIMER_CB()
388 lws_smd_msg_printf(bcs->ctx, LWSSMDCL_INTERACTION, in LWS_PLAT_TIMER_CB()
390 bc->smd_bc_name, in LWS_PLAT_TIMER_CB()
391 bc->button_map[n].smd_interaction_name, in LWS_PLAT_TIMER_CB()
402 (controller->count_buttons * sizeof(lws_button_each_t)), in lws_button_controller_create()
404 lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; in lws_button_controller_create() local
410 bcs->controller = controller; in lws_button_controller_create()
411 bcs->ctx = ctx; in lws_button_controller_create()
413 for (n = 0; n < controller->count_buttons; n++) in lws_button_controller_create()
414 each[n].bcs = bcs; in lws_button_controller_create()
418 bcs->timer = LWS_PLAT_TIMER_CREATE("bcst", in lws_button_controller_create()
420 if (!bcs->timer) in lws_button_controller_create()
423 bcs->timer_mon = LWS_PLAT_TIMER_CREATE("bcmon", LWS_BUTTON_MON_TIMER_MS, 1, bcs, in lws_button_controller_create()
425 if (!bcs->timer_mon) in lws_button_controller_create()
439 LWS_PLAT_TIMER_DELETE(&bcs->timer); in lws_button_controller_destroy()
440 LWS_PLAT_TIMER_DELETE(&bcs->timer_mon); in lws_button_controller_destroy()
449 const lws_button_controller_t *bc = bcs->controller; in lws_button_get_bit()
452 for (n = 0; n < bc->count_buttons; n++) in lws_button_get_bit()
453 if (!strcmp(name, bc->button_map[n].smd_interaction_name)) in lws_button_get_bit()
463 lws_button_idx_t u = (bcs->enable_bitmap & (~_reset)) | _set; in lws_button_enable()
464 const lws_button_controller_t *bc = bcs->controller; in lws_button_enable()
466 lws_button_each_t *each = (lws_button_each_t *)&bcs[1]; in lws_button_enable() local
470 for (n = 0; n < bcs->controller->count_buttons; n++) { in lws_button_enable()
471 if (!(bcs->enable_bitmap & (1 << n)) && (u & (1 << n))) { in lws_button_enable()
473 bc->gpio_ops->mode(bc->button_map[n].gpio, in lws_button_enable()
475 ((bc->active_state_bitmap & (1 << n)) ? in lws_button_enable()
479 * This one is becoming enabled... the opaque for the in lws_button_enable()
483 bc->gpio_ops->irq_mode(bc->button_map[n].gpio, in lws_button_enable()
484 bc->active_state_bitmap & (1 << n) ? in lws_button_enable()
487 lws_button_irq_cb_t, &each[n]); in lws_button_enable()
490 if ((bcs->enable_bitmap & (1 << n)) && !(u & (1 << n))) in lws_button_enable()
492 bc->gpio_ops->irq_mode(bc->button_map[n].gpio, in lws_button_enable()
496 bcs->enable_bitmap = u; in lws_button_enable()