From 543f28574e69b1752ef41842c47cbb91beb34170 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 17 Nov 2017 20:10:13 +0900 Subject: [PATCH] Use of eventflag poll change. --- ChangeLog | 8 ++++ src/main.c | 108 +++++++++++++++++++++++------------------------- src/stack-def.h | 2 +- src/usb-ccid.c | 13 +++--- 4 files changed, 67 insertions(+), 64 deletions(-) diff --git a/ChangeLog b/ChangeLog index a97111a..878cb17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2017-11-17 NIIBE Yutaka + + * src/stack-def.h (SIZE_0): Decrease. + + * src/main.c (emit_led, display_status_code, main): Use + chopstx_poll instead of eventflag_wait_timeout. + + 2017-11-17 NIIBE Yutaka * src/stack-def.h (SIZE_0): Increase. diff --git a/src/main.c b/src/main.c index f960fb2..01140bb 100644 --- a/src/main.c +++ b/src/main.c @@ -92,6 +92,10 @@ device_initialize_once (void) static volatile uint8_t fatal_code; static struct eventflag led_event; +static chopstx_poll_cond_t led_event_poll_desc; +static struct chx_poll_head *const led_event_poll[] = { + (struct chx_poll_head *)&led_event_poll_desc +}; static void display_fatal_code (void) { @@ -132,52 +136,46 @@ static void display_fatal_code (void) static uint8_t led_inverted; -static eventmask_t -emit_led (int on_time, int off_time) +static void +emit_led (uint32_t on_time, uint32_t off_time) { - eventmask_t m; - set_led (!led_inverted); - m = eventflag_wait_timeout (&led_event, on_time); + chopstx_poll (&on_time, 1, led_event_poll); set_led (led_inverted); - if (!m) - m = eventflag_wait_timeout (&led_event, off_time); - return m; + chopstx_poll (&off_time, 1, led_event_poll); } -static eventmask_t +static void display_status_code (void) { - eventmask_t m; enum ccid_state ccid_state = *ccid_state_p; + uint32_t usec; if (ccid_state == CCID_STATE_START) - m = emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP); + emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP); else /* OpenPGP card thread is running */ { - m = emit_led ((auth_status & AC_ADMIN_AUTHORIZED)? - LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); - if (m) return m; - m = emit_led ((auth_status & AC_OTHER_AUTHORIZED)? - LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); - if (m) return m; - m = emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)? - LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); - if (m) return m; + emit_led ((auth_status & AC_ADMIN_AUTHORIZED)? + LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); + emit_led ((auth_status & AC_OTHER_AUTHORIZED)? + LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); + emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)? + LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL); if (ccid_state == CCID_STATE_WAIT) - m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_STOP * 2); + { + usec = LED_TIMEOUT_STOP * 2; + chopstx_poll (&usec, 1, led_event_poll); + } else { - m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_INTERVAL); - if (m) return m; - m = emit_led (ccid_state == CCID_STATE_RECEIVE? - LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP); + usec = LED_TIMEOUT_INTERVAL; + chopstx_poll (&usec, 1, led_event_poll); + emit_led (ccid_state == CCID_STATE_RECEIVE? + LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP); } } - - return m; } void @@ -352,41 +350,37 @@ main (int argc, const char *argv[]) chopstx_usec_wait (250*1000); } + eventflag_prepare_poll (&led_event, &led_event_poll_desc); + while (1) { eventmask_t m; m = eventflag_wait (&led_event); - - do - switch (m) - { - case LED_ONESHOT: - m = emit_led (100*1000, LED_TIMEOUT_STOP); - break; - case LED_TWOSHOTS: - m = emit_led (50*1000, 50*1000); - if (m) - break; - m = emit_led (50*1000, LED_TIMEOUT_STOP); - break; - case LED_SHOW_STATUS: - m = display_status_code (); - break; - case LED_FATAL: - display_fatal_code (); - break; - case LED_SYNC: - set_led (led_inverted); - m = 0; - break; - case LED_GNUK_EXEC: - goto exec; - default: - m = emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP); - break; - } - while (m); + switch (m) + { + case LED_ONESHOT: + emit_led (100*1000, LED_TIMEOUT_STOP); + break; + case LED_TWOSHOTS: + emit_led (50*1000, 50*1000); + emit_led (50*1000, LED_TIMEOUT_STOP); + break; + case LED_SHOW_STATUS: + display_status_code (); + break; + case LED_FATAL: + display_fatal_code (); + break; + case LED_SYNC: + set_led (led_inverted); + break; + case LED_GNUK_EXEC: + goto exec; + default: + emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP); + break; + } } exec: diff --git a/src/stack-def.h b/src/stack-def.h index 86715f4..83ffcee 100644 --- a/src/stack-def.h +++ b/src/stack-def.h @@ -3,7 +3,7 @@ #define SIZE_2 4096 #define SIZE_3 (5 * 4096) #else -#define SIZE_0 0x0160 /* Main */ +#define SIZE_0 0x0150 /* Main */ #define SIZE_1 0x01a0 /* CCID */ #define SIZE_2 0x0180 /* RNG */ #if MEMORY_SIZE >= 32 diff --git a/src/usb-ccid.c b/src/usb-ccid.c index b3ff151..9875d0f 100644 --- a/src/usb-ccid.c +++ b/src/usb-ccid.c @@ -1675,12 +1675,12 @@ usb_event_handle (struct usb_dev *dev) static chopstx_intr_t interrupt; -static chopstx_poll_cond_t cond_poll_desc; -static struct chx_poll_head *const pd_array[] = { +static chopstx_poll_cond_t ccid_event_poll_desc; +static struct chx_poll_head *const ccid_poll[] = { (struct chx_poll_head *const)&interrupt, - (struct chx_poll_head *const)&cond_poll_desc + (struct chx_poll_head *const)&ccid_event_poll_desc }; -#define PD_SIZE (sizeof (pd_array)/sizeof (struct chx_poll_head *)) +#define CCID_POLL_NUM (sizeof (ccid_poll)/sizeof (struct chx_poll_head *)) void * ccid_thread (void *arg) @@ -1699,6 +1699,8 @@ ccid_thread (void *arg) chopstx_claim_irq (&interrupt, INTR_REQ_USB); usb_event_handle (&dev); /* For old SYS < 3.0 */ + eventflag_prepare_poll (&c->ccid_comm, &ccid_event_poll_desc); + reset: { struct ep_in *epi = &endpoint_in; @@ -1727,8 +1729,7 @@ ccid_thread (void *arg) else timeout_p = NULL; - eventflag_prepare_poll (&c->ccid_comm, &cond_poll_desc); - chopstx_poll (timeout_p, PD_SIZE, pd_array); + chopstx_poll (timeout_p, CCID_POLL_NUM, ccid_poll); if (interrupt.ready) {