1d75efeb7Sdjm /*
2d75efeb7Sdjm * Copyright (c) 2018 Yubico AB. All rights reserved.
3d75efeb7Sdjm * Use of this source code is governed by a BSD-style
4d75efeb7Sdjm * license that can be found in the LICENSE file.
5d75efeb7Sdjm */
6d75efeb7Sdjm
7d75efeb7Sdjm #include "fido.h"
8d75efeb7Sdjm
9d75efeb7Sdjm static int
fido_dev_reset_tx(fido_dev_t * dev,int * ms)10*ab19a69eSdjm fido_dev_reset_tx(fido_dev_t *dev, int *ms)
11d75efeb7Sdjm {
12d75efeb7Sdjm const unsigned char cbor[] = { CTAP_CBOR_RESET };
13d75efeb7Sdjm
14*ab19a69eSdjm if (fido_tx(dev, CTAP_CMD_CBOR, cbor, sizeof(cbor), ms) < 0) {
1532a20e26Sdjm fido_log_debug("%s: fido_tx", __func__);
16d75efeb7Sdjm return (FIDO_ERR_TX);
17d75efeb7Sdjm }
18d75efeb7Sdjm
19d75efeb7Sdjm return (FIDO_OK);
20d75efeb7Sdjm }
21d75efeb7Sdjm
22d75efeb7Sdjm static int
fido_dev_reset_wait(fido_dev_t * dev,int * ms)23*ab19a69eSdjm fido_dev_reset_wait(fido_dev_t *dev, int *ms)
24d75efeb7Sdjm {
25d75efeb7Sdjm int r;
26d75efeb7Sdjm
27*ab19a69eSdjm if ((r = fido_dev_reset_tx(dev, ms)) != FIDO_OK ||
2832a20e26Sdjm (r = fido_rx_cbor_status(dev, ms)) != FIDO_OK)
29d75efeb7Sdjm return (r);
30d75efeb7Sdjm
31c4a807edSdjm if (dev->flags & FIDO_DEV_PIN_SET) {
32c4a807edSdjm dev->flags &= ~FIDO_DEV_PIN_SET;
33c4a807edSdjm dev->flags |= FIDO_DEV_PIN_UNSET;
34c4a807edSdjm }
35c4a807edSdjm
36d75efeb7Sdjm return (FIDO_OK);
37d75efeb7Sdjm }
38d75efeb7Sdjm
39d75efeb7Sdjm int
fido_dev_reset(fido_dev_t * dev)40d75efeb7Sdjm fido_dev_reset(fido_dev_t *dev)
41d75efeb7Sdjm {
42*ab19a69eSdjm int ms = dev->timeout_ms;
43*ab19a69eSdjm
44*ab19a69eSdjm return (fido_dev_reset_wait(dev, &ms));
45d75efeb7Sdjm }
46