Blink LED rapidly when asking ACK from user.

This commit is contained in:
NIIBE Yutaka
2018-09-27 12:58:06 +09:00
parent ba750d153d
commit 4c6511231c
6 changed files with 40 additions and 5 deletions

View File

@@ -1,3 +1,24 @@
2018-09-27 NIIBE Yutaka <gniibe@fsij.org>
* src/gnuk.h (LED_WAIT_FOR_BUTTON): New.
* src/main.c (main): Blink rapidly when asking ACK.
* src/usb-ccid.c (ccid_thread): Use LED_WAIT_FOR_BUTTON.
2018-09-27 NIIBE Yutaka <gniibe@fsij.org>
* src/config.h.in: Add @ACKBTN_DEFINE@.
* src/configure: Add ACKBTN_SUPPORT.
* src/gnuk.h (EV_EXEC_FINISHED_ACK): New.
(CCID_STATE_CONFIRM_ACK): New.
* src/openpgp.c (process_command_apdu): Change for cmd_pso, and
cmd_internal_authenticate.
* src/usb-ccid.c (ccid_send_data_block_time_extension): Report
time extension differently when waiting ack button.
(ccid_handle_data): Support case of CCID_STATE_CONFIRM_ACK.
(ccid_handle_timeout): Likewise.
(ack_intr) [ACKBTN_SUPPORT]: New.
(ccid_thread) [ACKBTN_SUPPORT]: Add ack button handling.
2018-09-26 NIIBE Yutaka <gniibe@fsij.org> 2018-09-26 NIIBE Yutaka <gniibe@fsij.org>
* chopstx: Update. * chopstx: Update.

Submodule chopstx updated: 49b0556a24...7dc67d2210

View File

@@ -445,6 +445,7 @@ extern const uint8_t gnuk_string_serial[];
#define LED_GNUK_EXEC 32 #define LED_GNUK_EXEC 32
#define LED_START_COMMAND 64 #define LED_START_COMMAND 64
#define LED_FINISH_COMMAND 128 #define LED_FINISH_COMMAND 128
#define LED_WAIT_FOR_BUTTON 256
#define LED_OFF LED_FINISH_COMMAND #define LED_OFF LED_FINISH_COMMAND
void led_blink (int spec); void led_blink (int spec);

View File

@@ -238,6 +238,7 @@ main (int argc, const char *argv[])
uintptr_t entry; uintptr_t entry;
#endif #endif
chopstx_t ccid_thd; chopstx_t ccid_thd;
int wait_for_ack = 0;
chopstx_conf_idle (1); chopstx_conf_idle (1);
@@ -354,7 +355,11 @@ main (int argc, const char *argv[])
{ {
eventmask_t m; eventmask_t m;
m = eventflag_wait (&led_event); if (wait_for_ack)
m = eventflag_wait_timeout (&led_event, LED_TIMEOUT_INTERVAL);
else
m = eventflag_wait (&led_event);
switch (m) switch (m)
{ {
case LED_ONESHOT: case LED_ONESHOT:
@@ -371,12 +376,16 @@ main (int argc, const char *argv[])
display_fatal_code (); display_fatal_code ();
break; break;
case LED_SYNC: case LED_SYNC:
wait_for_ack = 0;
set_led (led_inverted); set_led (led_inverted);
break; break;
case LED_GNUK_EXEC: case LED_GNUK_EXEC:
goto exec; goto exec;
case LED_WAIT_FOR_BUTTON:
wait_for_ack = 1;
/* fall through */
default: default:
emit_led (LED_TIMEOUT_ZERO, LED_TIMEOUT_STOP); emit_led (LED_TIMEOUT_ONE, LED_TIMEOUT_ZERO);
break; break;
} }
} }

View File

@@ -1644,8 +1644,7 @@ openpgp_card_thread (void *arg)
led_blink (LED_START_COMMAND); led_blink (LED_START_COMMAND);
r = process_command_apdu (); r = process_command_apdu ();
if (!r) led_blink (LED_FINISH_COMMAND);
led_blink (LED_FINISH_COMMAND);
done: done:
eventflag_signal (ccid_comm, r? EV_EXEC_FINISHED_ACK : EV_EXEC_FINISHED); eventflag_signal (ccid_comm, r? EV_EXEC_FINISHED_ACK : EV_EXEC_FINISHED);
} }

View File

@@ -29,6 +29,10 @@
#include "config.h" #include "config.h"
#ifdef ACKBTN_SUPPORT
#include <contrib/ackbtn.h>
#endif
#ifdef DEBUG #ifdef DEBUG
#include "usb-cdc.h" #include "usb-cdc.h"
#include "debug.h" #include "debug.h"
@@ -1844,6 +1848,7 @@ ccid_thread (void *arg)
if (c->ccid_state == CCID_STATE_EXECUTE) if (c->ccid_state == CCID_STATE_EXECUTE)
{ {
ackbtn_enable (); ackbtn_enable ();
led_blink (LED_WAIT_FOR_BUTTON);
c->ccid_state = CCID_STATE_CONFIRM_ACK; c->ccid_state = CCID_STATE_CONFIRM_ACK;
} }
else else