aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2019-04-11 13:02:47 +0200
committerRiccardo Spagni <ric@spagni.net>2019-04-11 13:02:47 +0200
commitfa789109f60d5fc19369d5f2529aaf87139e7603 (patch)
treec9efdd270f5dbfeac7e7acf5fa0cb4f845174acf
parentMerge pull request #5378 (diff)
parentAdd NanoX support (diff)
downloadmonero-fa789109f60d5fc19369d5f2529aaf87139e7603.tar.xz
Merge pull request #5379
83fc45a4 Add NanoX support (cslashm)
-rw-r--r--src/device/device_io_hid.cpp21
-rw-r--r--src/device/device_io_hid.hpp3
-rw-r--r--src/device/device_ledger.cpp7
3 files changed, 26 insertions, 5 deletions
diff --git a/src/device/device_io_hid.cpp b/src/device/device_io_hid.cpp
index f07e0eaae..721bed9ca 100644
--- a/src/device/device_io_hid.cpp
+++ b/src/device/device_io_hid.cpp
@@ -85,7 +85,18 @@ namespace hw {
void device_io_hid::connect(void *params) {
hid_conn_params *p = (struct hid_conn_params*)params;
- this->connect(p->vid, p->pid, p->interface_number, p->usage_page);
+ if (!this->connect(p->vid, p->pid, p->interface_number, p->usage_page)) {
+ ASSERT_X(false, "No device found");
+ }
+ }
+
+ void device_io_hid::connect(const std::vector<hid_conn_params> &hcpV) {
+ for (auto p: hcpV) {
+ if (this->connect(p.vid, p.pid, p.interface_number, p.usage_page)) {
+ return;
+ }
+ }
+ ASSERT_X(false, "No device found");
}
hid_device_info *device_io_hid::find_device(hid_device_info *devices_list, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) {
@@ -124,14 +135,17 @@ namespace hw {
return result;
}
- void device_io_hid::connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) {
+ hid_device *device_io_hid::connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page) {
hid_device_info *hwdev_info_list;
hid_device *hwdev;
this->disconnect();
hwdev_info_list = hid_enumerate(vid, pid);
- ASSERT_X(hwdev_info_list, "Unable to enumerate device "+std::to_string(vid)+":"+std::to_string(vid)+ ": "+ safe_hid_error(this->usb_device));
+ if (!hwdev_info_list) {
+ MDEBUG("Unable to enumerate device "+std::to_string(vid)+":"+std::to_string(vid)+ ": "+ safe_hid_error(this->usb_device));
+ return NULL;
+ }
hwdev = NULL;
if (hid_device_info *device = find_device(hwdev_info_list, interface_number, usage_page)) {
hwdev = hid_open_path(device->path);
@@ -141,6 +155,7 @@ namespace hw {
this->usb_vid = vid;
this->usb_pid = pid;
this->usb_device = hwdev;
+ return hwdev;
}
diff --git a/src/device/device_io_hid.hpp b/src/device/device_io_hid.hpp
index ed22058d6..96cb8d993 100644
--- a/src/device/device_io_hid.hpp
+++ b/src/device/device_io_hid.hpp
@@ -98,7 +98,8 @@ namespace hw {
void init();
void connect(void *params);
- void connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page);
+ void connect(const std::vector<hid_conn_params> &conn);
+ hid_device *connect(unsigned int vid, unsigned int pid, boost::optional<int> interface_number, boost::optional<unsigned short> usage_page);
bool connected() const;
int exchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len, bool user_input);
void disconnect();
diff --git a/src/device/device_ledger.cpp b/src/device/device_ledger.cpp
index d6033e189..200370564 100644
--- a/src/device/device_ledger.cpp
+++ b/src/device/device_ledger.cpp
@@ -389,10 +389,15 @@ namespace hw {
MDEBUG( "Device "<<this->id <<" HIDUSB inited");
return true;
}
+
+ static const std::vector<hw::io::hid_conn_params> known_devices {
+ {0x2c97, 0x0001, 0, 0xffa0},
+ {0x2c97, 0x0004, 0, 0xffa0},
+ };
bool device_ledger::connect(void) {
this->disconnect();
- hw_device.connect(0x2c97, 0x0001, 0, 0xffa0);
+ hw_device.connect(known_devices);
this->reset();
#ifdef DEBUG_HWDEVICE
cryptonote::account_public_address pubkey;