Use of eventflag poll change.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2017-11-17 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* 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 <gniibe@fsij.org>
|
2017-11-17 NIIBE Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* src/stack-def.h (SIZE_0): Increase.
|
* src/stack-def.h (SIZE_0): Increase.
|
||||||
|
|||||||
108
src/main.c
108
src/main.c
@@ -92,6 +92,10 @@ device_initialize_once (void)
|
|||||||
|
|
||||||
static volatile uint8_t fatal_code;
|
static volatile uint8_t fatal_code;
|
||||||
static struct eventflag led_event;
|
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)
|
static void display_fatal_code (void)
|
||||||
{
|
{
|
||||||
@@ -132,52 +136,46 @@ static void display_fatal_code (void)
|
|||||||
|
|
||||||
static uint8_t led_inverted;
|
static uint8_t led_inverted;
|
||||||
|
|
||||||
static eventmask_t
|
static void
|
||||||
emit_led (int on_time, int off_time)
|
emit_led (uint32_t on_time, uint32_t off_time)
|
||||||
{
|
{
|
||||||
eventmask_t m;
|
|
||||||
|
|
||||||
set_led (!led_inverted);
|
set_led (!led_inverted);
|
||||||
m = eventflag_wait_timeout (&led_event, on_time);
|
chopstx_poll (&on_time, 1, led_event_poll);
|
||||||
set_led (led_inverted);
|
set_led (led_inverted);
|
||||||
if (!m)
|
chopstx_poll (&off_time, 1, led_event_poll);
|
||||||
m = eventflag_wait_timeout (&led_event, off_time);
|
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static eventmask_t
|
static void
|
||||||
display_status_code (void)
|
display_status_code (void)
|
||||||
{
|
{
|
||||||
eventmask_t m;
|
|
||||||
enum ccid_state ccid_state = *ccid_state_p;
|
enum ccid_state ccid_state = *ccid_state_p;
|
||||||
|
uint32_t usec;
|
||||||
|
|
||||||
if (ccid_state == CCID_STATE_START)
|
if (ccid_state == CCID_STATE_START)
|
||||||
m = emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
|
emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
|
||||||
else
|
else
|
||||||
/* OpenPGP card thread is running */
|
/* OpenPGP card thread is running */
|
||||||
{
|
{
|
||||||
m = emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
|
emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
if (m) return m;
|
emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
|
||||||
m = emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
|
||||||
if (m) return m;
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
m = emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
|
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
|
||||||
if (m) return m;
|
|
||||||
|
|
||||||
if (ccid_state == CCID_STATE_WAIT)
|
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
|
else
|
||||||
{
|
{
|
||||||
m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_INTERVAL);
|
usec = LED_TIMEOUT_INTERVAL;
|
||||||
if (m) return m;
|
chopstx_poll (&usec, 1, led_event_poll);
|
||||||
m = emit_led (ccid_state == CCID_STATE_RECEIVE?
|
emit_led (ccid_state == CCID_STATE_RECEIVE?
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -352,41 +350,37 @@ main (int argc, const char *argv[])
|
|||||||
chopstx_usec_wait (250*1000);
|
chopstx_usec_wait (250*1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eventflag_prepare_poll (&led_event, &led_event_poll_desc);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
eventmask_t m;
|
eventmask_t m;
|
||||||
|
|
||||||
m = eventflag_wait (&led_event);
|
m = eventflag_wait (&led_event);
|
||||||
|
switch (m)
|
||||||
do
|
{
|
||||||
switch (m)
|
case LED_ONESHOT:
|
||||||
{
|
emit_led (100*1000, LED_TIMEOUT_STOP);
|
||||||
case LED_ONESHOT:
|
break;
|
||||||
m = emit_led (100*1000, LED_TIMEOUT_STOP);
|
case LED_TWOSHOTS:
|
||||||
break;
|
emit_led (50*1000, 50*1000);
|
||||||
case LED_TWOSHOTS:
|
emit_led (50*1000, LED_TIMEOUT_STOP);
|
||||||
m = emit_led (50*1000, 50*1000);
|
break;
|
||||||
if (m)
|
case LED_SHOW_STATUS:
|
||||||
break;
|
display_status_code ();
|
||||||
m = emit_led (50*1000, LED_TIMEOUT_STOP);
|
break;
|
||||||
break;
|
case LED_FATAL:
|
||||||
case LED_SHOW_STATUS:
|
display_fatal_code ();
|
||||||
m = display_status_code ();
|
break;
|
||||||
break;
|
case LED_SYNC:
|
||||||
case LED_FATAL:
|
set_led (led_inverted);
|
||||||
display_fatal_code ();
|
break;
|
||||||
break;
|
case LED_GNUK_EXEC:
|
||||||
case LED_SYNC:
|
goto exec;
|
||||||
set_led (led_inverted);
|
default:
|
||||||
m = 0;
|
emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
||||||
break;
|
break;
|
||||||
case LED_GNUK_EXEC:
|
}
|
||||||
goto exec;
|
|
||||||
default:
|
|
||||||
m = emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exec:
|
exec:
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#define SIZE_2 4096
|
#define SIZE_2 4096
|
||||||
#define SIZE_3 (5 * 4096)
|
#define SIZE_3 (5 * 4096)
|
||||||
#else
|
#else
|
||||||
#define SIZE_0 0x0160 /* Main */
|
#define SIZE_0 0x0150 /* Main */
|
||||||
#define SIZE_1 0x01a0 /* CCID */
|
#define SIZE_1 0x01a0 /* CCID */
|
||||||
#define SIZE_2 0x0180 /* RNG */
|
#define SIZE_2 0x0180 /* RNG */
|
||||||
#if MEMORY_SIZE >= 32
|
#if MEMORY_SIZE >= 32
|
||||||
|
|||||||
@@ -1675,12 +1675,12 @@ usb_event_handle (struct usb_dev *dev)
|
|||||||
|
|
||||||
|
|
||||||
static chopstx_intr_t interrupt;
|
static chopstx_intr_t interrupt;
|
||||||
static chopstx_poll_cond_t cond_poll_desc;
|
static chopstx_poll_cond_t ccid_event_poll_desc;
|
||||||
static struct chx_poll_head *const pd_array[] = {
|
static struct chx_poll_head *const ccid_poll[] = {
|
||||||
(struct chx_poll_head *const)&interrupt,
|
(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 *
|
void *
|
||||||
ccid_thread (void *arg)
|
ccid_thread (void *arg)
|
||||||
@@ -1699,6 +1699,8 @@ ccid_thread (void *arg)
|
|||||||
chopstx_claim_irq (&interrupt, INTR_REQ_USB);
|
chopstx_claim_irq (&interrupt, INTR_REQ_USB);
|
||||||
usb_event_handle (&dev); /* For old SYS < 3.0 */
|
usb_event_handle (&dev); /* For old SYS < 3.0 */
|
||||||
|
|
||||||
|
eventflag_prepare_poll (&c->ccid_comm, &ccid_event_poll_desc);
|
||||||
|
|
||||||
reset:
|
reset:
|
||||||
{
|
{
|
||||||
struct ep_in *epi = &endpoint_in;
|
struct ep_in *epi = &endpoint_in;
|
||||||
@@ -1727,8 +1729,7 @@ ccid_thread (void *arg)
|
|||||||
else
|
else
|
||||||
timeout_p = NULL;
|
timeout_p = NULL;
|
||||||
|
|
||||||
eventflag_prepare_poll (&c->ccid_comm, &cond_poll_desc);
|
chopstx_poll (timeout_p, CCID_POLL_NUM, ccid_poll);
|
||||||
chopstx_poll (timeout_p, PD_SIZE, pd_array);
|
|
||||||
|
|
||||||
if (interrupt.ready)
|
if (interrupt.ready)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user