LED blink change
This commit is contained in:
@@ -424,8 +424,7 @@ extern const uint8_t gnuk_string_serial[];
|
|||||||
#define LED_START_COMMAND 8
|
#define LED_START_COMMAND 8
|
||||||
#define LED_FINISH_COMMAND 16
|
#define LED_FINISH_COMMAND 16
|
||||||
#define LED_FATAL 32
|
#define LED_FATAL 32
|
||||||
#define LED_USB_RESET 64
|
#define LED_GNUK_EXEC 64
|
||||||
#define LED_GNUK_EXEC 128
|
|
||||||
void led_blink (int spec);
|
void led_blink (int spec);
|
||||||
|
|
||||||
#if defined(PINPAD_SUPPORT)
|
#if defined(PINPAD_SUPPORT)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* ST32F103 memory setup.
|
* ST32F103 memory setup.
|
||||||
*/
|
*/
|
||||||
__main_stack_size__ = 0x0080; /* Exception handlers */
|
__main_stack_size__ = 0x0080; /* Exception handlers */
|
||||||
__process0_stack_size__ = 0x0180; /* main */
|
__process0_stack_size__ = 0x0120; /* main */
|
||||||
__process1_stack_size__ = 0x0160; /* ccid */
|
__process1_stack_size__ = 0x0160; /* ccid */
|
||||||
__process2_stack_size__ = 0x0160; /* rng */
|
__process2_stack_size__ = 0x0160; /* rng */
|
||||||
__process3_stack_size__ = 0x1640; /* gpg */
|
__process3_stack_size__ = 0x1640; /* gpg */
|
||||||
|
|||||||
89
src/main.c
89
src/main.c
@@ -41,8 +41,6 @@
|
|||||||
/*
|
/*
|
||||||
* main thread does 1-bit LED display output
|
* main thread does 1-bit LED display output
|
||||||
*/
|
*/
|
||||||
#define MAIN_TIMEOUT_INTERVAL (5000*1000)
|
|
||||||
|
|
||||||
#define LED_TIMEOUT_INTERVAL (75*1000)
|
#define LED_TIMEOUT_INTERVAL (75*1000)
|
||||||
#define LED_TIMEOUT_ZERO (25*1000)
|
#define LED_TIMEOUT_ZERO (25*1000)
|
||||||
#define LED_TIMEOUT_ONE (100*1000)
|
#define LED_TIMEOUT_ONE (100*1000)
|
||||||
@@ -122,59 +120,38 @@ static void display_fatal_code (void)
|
|||||||
|
|
||||||
static uint8_t led_inverted;
|
static uint8_t led_inverted;
|
||||||
|
|
||||||
static eventmask_t emit_led (int on_time, int off_time)
|
static void emit_led (int on_time, int off_time)
|
||||||
{
|
{
|
||||||
eventmask_t m;
|
|
||||||
|
|
||||||
set_led (!led_inverted);
|
set_led (!led_inverted);
|
||||||
m = eventflag_wait_timeout (&led_event, on_time);
|
chopstx_usec_wait (on_time);
|
||||||
set_led (led_inverted);
|
set_led (led_inverted);
|
||||||
if (m) return m;
|
chopstx_usec_wait (off_time);
|
||||||
if ((m = eventflag_wait_timeout (&led_event, off_time)))
|
|
||||||
return m;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static eventmask_t display_status_code (void)
|
static void display_status_code (void)
|
||||||
{
|
{
|
||||||
eventmask_t m;
|
|
||||||
enum icc_state icc_state = *icc_state_p;
|
enum icc_state icc_state = *icc_state_p;
|
||||||
|
|
||||||
if (icc_state == ICC_STATE_START)
|
if (icc_state == ICC_STATE_START)
|
||||||
return emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
|
emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_STOP);
|
||||||
else
|
else
|
||||||
/* OpenPGP card thread running */
|
/* OpenPGP card thread is running */
|
||||||
{
|
{
|
||||||
if ((m = emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
|
emit_led ((auth_status & AC_ADMIN_AUTHORIZED)?
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
LED_TIMEOUT_INTERVAL)))
|
emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
|
||||||
return m;
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
if ((m = emit_led ((auth_status & AC_OTHER_AUTHORIZED)?
|
emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_INTERVAL);
|
||||||
LED_TIMEOUT_INTERVAL)))
|
|
||||||
return m;
|
|
||||||
if ((m = emit_led ((auth_status & AC_PSO_CDS_AUTHORIZED)?
|
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
|
|
||||||
LED_TIMEOUT_INTERVAL)))
|
|
||||||
return m;
|
|
||||||
|
|
||||||
if (icc_state == ICC_STATE_WAIT)
|
if (icc_state == ICC_STATE_WAIT)
|
||||||
{
|
chopstx_usec_wait (LED_TIMEOUT_STOP * 2);
|
||||||
if ((m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_STOP * 2)))
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_INTERVAL)))
|
chopstx_usec_wait (LED_TIMEOUT_INTERVAL);
|
||||||
return m;
|
emit_led (icc_state == ICC_STATE_RECEIVE?
|
||||||
|
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
||||||
if ((m = emit_led (icc_state == ICC_STATE_RECEIVE?
|
|
||||||
LED_TIMEOUT_ONE : LED_TIMEOUT_ZERO,
|
|
||||||
LED_TIMEOUT_STOP)))
|
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +198,6 @@ extern uint32_t bDeviceState;
|
|||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
unsigned int count = 0;
|
|
||||||
uint32_t entry;
|
uint32_t entry;
|
||||||
chopstx_t ccid_thd;
|
chopstx_t ccid_thd;
|
||||||
|
|
||||||
@@ -267,56 +243,37 @@ main (int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
eventmask_t m;
|
eventmask_t m;
|
||||||
|
|
||||||
m = eventflag_wait_timeout (&led_event, MAIN_TIMEOUT_INTERVAL);
|
m = eventflag_wait (&led_event);
|
||||||
got_it:
|
|
||||||
count++;
|
|
||||||
switch (m)
|
switch (m)
|
||||||
{
|
{
|
||||||
case LED_ONESHOT:
|
case LED_ONESHOT:
|
||||||
if ((m = emit_led (100*1000, MAIN_TIMEOUT_INTERVAL))) goto got_it;
|
emit_led (100*1000, LED_TIMEOUT_STOP);
|
||||||
break;
|
break;
|
||||||
case LED_TWOSHOTS:
|
case LED_TWOSHOTS:
|
||||||
if ((m = emit_led (50*1000, 50*1000))) goto got_it;
|
emit_led (50*1000, 50*1000);
|
||||||
if ((m = emit_led (50*1000, MAIN_TIMEOUT_INTERVAL))) goto got_it;
|
emit_led (50*1000, LED_TIMEOUT_STOP);
|
||||||
break;
|
break;
|
||||||
case LED_SHOW_STATUS:
|
case LED_SHOW_STATUS:
|
||||||
if ((count & 0x07) != 0) continue; /* Display once for eight times */
|
display_status_code ();
|
||||||
if ((m = display_status_code ())) goto got_it;
|
|
||||||
break;
|
break;
|
||||||
case LED_START_COMMAND:
|
case LED_START_COMMAND:
|
||||||
set_led (1);
|
set_led (1);
|
||||||
led_inverted = 1;
|
led_inverted = 1;
|
||||||
break;
|
break;
|
||||||
case LED_FINISH_COMMAND:
|
case LED_FINISH_COMMAND:
|
||||||
m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_STOP);
|
chopstx_usec_wait (LED_TIMEOUT_STOP);
|
||||||
led_inverted = 0;
|
led_inverted = 0;
|
||||||
set_led (0);
|
set_led (0);
|
||||||
if (m)
|
|
||||||
goto got_it;
|
|
||||||
break;
|
break;
|
||||||
case LED_FATAL:
|
case LED_FATAL:
|
||||||
display_fatal_code ();
|
display_fatal_code ();
|
||||||
break;
|
break;
|
||||||
case LED_USB_RESET:
|
|
||||||
ccid_usb_reset ();
|
|
||||||
break;
|
|
||||||
case LED_GNUK_EXEC:
|
case LED_GNUK_EXEC:
|
||||||
goto exec;
|
goto exec;
|
||||||
default:
|
default:
|
||||||
if ((m = emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP)))
|
emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP);
|
||||||
goto got_it;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_MORE
|
|
||||||
if (stdout.connected && (count % 10) == 0)
|
|
||||||
{
|
|
||||||
DEBUG_SHORT (count / 10);
|
|
||||||
_write ("\r\nThis is Gnuk on STM32F103.\r\n"
|
|
||||||
"Testing USB driver.\n\n"
|
|
||||||
"Hello world\r\n\r\n", 30+21+15);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exec:
|
exec:
|
||||||
|
|||||||
@@ -849,7 +849,6 @@ icc_send_status (struct ccid *c)
|
|||||||
c->epi->tx_done = 1;
|
c->epi->tx_done = 1;
|
||||||
usb_lld_write (c->epi->ep_num, icc_reply, ICC_MSG_HEADER_SIZE);
|
usb_lld_write (c->epi->ep_num, icc_reply, ICC_MSG_HEADER_SIZE);
|
||||||
|
|
||||||
led_blink (LED_SHOW_STATUS);
|
|
||||||
#ifdef DEBUG_MORE
|
#ifdef DEBUG_MORE
|
||||||
DEBUG_INFO ("St\r\n");
|
DEBUG_INFO ("St\r\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -1331,12 +1330,12 @@ icc_handle_timeout (struct ccid *c)
|
|||||||
{
|
{
|
||||||
case ICC_STATE_EXECUTE:
|
case ICC_STATE_EXECUTE:
|
||||||
icc_send_data_block_time_extension (c);
|
icc_send_data_block_time_extension (c);
|
||||||
led_blink (LED_ONESHOT);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
led_blink (LED_SHOW_STATUS);
|
||||||
return next_state;
|
return next_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ usb_cb_device_reset (void)
|
|||||||
gnuk_setup_endpoints_for_interface (i, 1);
|
gnuk_setup_endpoints_for_interface (i, 1);
|
||||||
|
|
||||||
bDeviceState = ATTACHED;
|
bDeviceState = ATTACHED;
|
||||||
led_blink (LED_USB_RESET); /* Notify the main. */
|
ccid_usb_reset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USB_CCID_REQ_ABORT 0x01
|
#define USB_CCID_REQ_ABORT 0x01
|
||||||
|
|||||||
Reference in New Issue
Block a user