Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
src
device_trezor
trezor
debug_link.hpp
Go to the documentation of this file.
1
// Copyright (c) 2017-2022, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
//
29
30
#ifndef MONERO_DEBUG_LINK_H
31
#define MONERO_DEBUG_LINK_H
32
33
#include "
transport.hpp
"
34
#include "messages/messages-debug.pb.h"
35
#include <type_traits>
36
37
38
namespace
hw
{
39
namespace
trezor
{
40
41
class
DebugLink
{
42
public
:
43
44
DebugLink
();
45
virtual
~DebugLink
();
46
47
void
init
(std::shared_ptr<Transport> &
transport
);
48
void
close
();
49
50
std::shared_ptr<messages::debug::DebugLinkState>
state
();
51
void
input_word
(
const
std::string & word);
52
void
input_button
(
bool
button);
53
void
input_swipe
(messages::debug::DebugLinkDecision_DebugSwipeDirection direction);
54
void
press_yes
() {
input_button
(
true
); }
55
void
press_no
() {
input_button
(
false
); }
56
void
stop
();
57
58
template
<
class
t_message=messages::debug::DebugLinkState>
59
std::shared_ptr<t_message>
call
(
60
const
google::protobuf::Message & req,
61
const
boost::optional<messages::MessageType> &resp_type = boost::none,
62
bool
no_wait =
false
)
63
{
64
static_assert
(std::is_base_of<google::protobuf::Message, t_message>::value);
65
66
m_transport
->write(req);
67
if
(no_wait){
68
return
nullptr
;
69
}
70
71
// Read the response
72
std::shared_ptr<google::protobuf::Message> msg_resp;
73
hw::trezor::messages::MessageType msg_resp_type;
74
m_transport
->read(msg_resp, &msg_resp_type);
75
76
messages::MessageType required_type = resp_type ? resp_type.get() :
MessageMapper::get_message_wire_number<t_message>
();
77
if
(msg_resp_type == required_type) {
78
return
message_ptr_retype<t_message>
(msg_resp);
79
}
else
if
(msg_resp_type == messages::MessageType_Failure){
80
throw_failure_exception
(
dynamic_cast<
messages::common::Failure*
>
(msg_resp.get()));
81
}
else
{
82
throw
exc::UnexpectedMessageException
(msg_resp_type, msg_resp);
83
}
84
};
85
86
private
:
87
std::shared_ptr<Transport>
m_transport
;
88
89
};
90
91
}
92
}
93
94
#endif
//MONERO_DEBUG_LINK_H
hw::trezor::DebugLink::input_word
void input_word(const std::string &word)
Definition
debug_link.cpp:62
hw::trezor::DebugLink::press_no
void press_no()
Definition
debug_link.hpp:55
hw::trezor::DebugLink::stop
void stop()
Definition
debug_link.cpp:80
hw::trezor::DebugLink::~DebugLink
virtual ~DebugLink()
Definition
debug_link.cpp:39
hw::trezor::DebugLink::DebugLink
DebugLink()
Definition
debug_link.cpp:35
hw::trezor::DebugLink::press_yes
void press_yes()
Definition
debug_link.hpp:54
hw::trezor::DebugLink::input_swipe
void input_swipe(messages::debug::DebugLinkDecision_DebugSwipeDirection direction)
Definition
debug_link.cpp:74
hw::trezor::DebugLink::call
std::shared_ptr< t_message > call(const google::protobuf::Message &req, const boost::optional< messages::MessageType > &resp_type=boost::none, bool no_wait=false)
Definition
debug_link.hpp:59
hw::trezor::DebugLink::close
void close()
Definition
debug_link.cpp:51
hw::trezor::DebugLink::input_button
void input_button(bool button)
Definition
debug_link.cpp:68
hw::trezor::DebugLink::m_transport
std::shared_ptr< Transport > m_transport
Definition
debug_link.hpp:87
hw::trezor::DebugLink::state
std::shared_ptr< messages::debug::DebugLinkState > state()
Definition
debug_link.cpp:56
hw::trezor::MessageMapper::get_message_wire_number
static messages::MessageType get_message_wire_number()
Definition
messages_map.hpp:74
hw::trezor::exc::UnexpectedMessageException
Definition
transport.hpp:339
init
static void init()
Definition
logging.cpp:42
hw::trezor
Definition
device_trezor.cpp:35
hw::trezor::throw_failure_exception
void throw_failure_exception(const messages::common::Failure *failure)
Definition
transport.cpp:1244
hw::trezor::message_ptr_retype
std::shared_ptr< t_message > message_ptr_retype(std::shared_ptr< google::protobuf::Message > &in)
Definition
messages_map.hpp:81
hw::trezor::transport
std::shared_ptr< Transport > transport(const std::string &path)
Definition
transport.cpp:1231
hw
Definition
device.cpp:38
transport.hpp
Generated on
for Monero by
1.17.0