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