Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
debug_link.hpp
Go to the documentation of this file.
1
// Copyright (c) 2017-Present, Electroneum
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 ELECTRONEUM_DEBUG_LINK_H
31
#define ELECTRONEUM_DEBUG_LINK_H
32
33
#include "
transport.hpp
"
34
#include "messages/messages-debug.pb.h"
35
36
37
namespace
hw
{
38
namespace
trezor
{
39
40
class
DebugLink
{
41
public
:
42
43
DebugLink
();
44
virtual
~DebugLink
();
45
46
void
init
(std::shared_ptr<Transport> &
transport
);
47
void
close
();
48
49
std::shared_ptr<messages::debug::DebugLinkState>
state
();
50
void
input_word
(
const
std::string & word);
51
void
input_button
(
bool
button);
52
void
input_swipe
(
bool
swipe);
53
void
press_yes
() {
input_button
(
true
); }
54
void
press_no
() {
input_button
(
false
); }
55
void
stop
();
56
57
template
<
class
t_message=messages::debug::DebugLinkState>
58
std::shared_ptr<t_message>
call
(
59
const
google::protobuf::Message & req,
60
const
boost::optional<messages::MessageType> &resp_type = boost::none,
61
bool
no_wait =
false
)
62
{
63
BOOST_STATIC_ASSERT(boost::is_base_of<google::protobuf::Message, t_message>::value);
64
65
m_transport->write(req);
66
if
(no_wait){
67
return
nullptr
;
68
}
69
70
// Read the response
71
std::shared_ptr<google::protobuf::Message> msg_resp;
72
hw::trezor::messages::MessageType msg_resp_type;
73
m_transport->read(msg_resp, &msg_resp_type);
74
75
messages::MessageType required_type = resp_type ? resp_type.get() :
MessageMapper::get_message_wire_number<t_message>
();
76
if
(msg_resp_type == required_type) {
77
return
message_ptr_retype<t_message>
(msg_resp);
78
}
else
if
(msg_resp_type == messages::MessageType_Failure){
79
throw_failure_exception
(
dynamic_cast<
messages::common::Failure*
>
(msg_resp.get()));
80
}
else
{
81
throw
exc::UnexpectedMessageException
(msg_resp_type, msg_resp);
82
}
83
};
84
85
private
:
86
std::shared_ptr<Transport> m_transport;
87
88
};
89
90
}
91
}
92
93
#endif
//ELECTRONEUM_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:54
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::init
void init(std::shared_ptr< Transport > &transport)
Definition
debug_link.cpp:45
hw::trezor::DebugLink::DebugLink
DebugLink()
Definition
debug_link.cpp:35
hw::trezor::DebugLink::press_yes
void press_yes()
Definition
debug_link.hpp:53
hw::trezor::DebugLink::input_swipe
void input_swipe(bool swipe)
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:58
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::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:66
hw::trezor::exc::UnexpectedMessageException
Definition
transport.hpp:330
hw::trezor
Definition
device_trezor.cpp:33
hw::trezor::throw_failure_exception
void throw_failure_exception(const messages::common::Failure *failure)
Definition
transport.cpp:1217
hw::trezor::message_ptr_retype
std::shared_ptr< t_message > message_ptr_retype(std::shared_ptr< google::protobuf::Message > &in)
Definition
messages_map.hpp:73
hw::trezor::transport
std::shared_ptr< Transport > transport(const std::string &path)
Definition
transport.cpp:1204
hw
Definition
device.cpp:38
transport.hpp
src
device_trezor
trezor
debug_link.hpp
Generated on
for Electroneum by
1.17.0