Add NanoX support

This commit is contained in:
cslashm 2019-03-28 17:14:24 +01:00
parent 0eb2c7b272
commit 83fc45a413
3 changed files with 26 additions and 5 deletions

View file

@ -85,7 +85,18 @@ namespace hw {
void device_io_hid::connect(void *params) { void device_io_hid::connect(void *params) {
hid_conn_params *p = (struct hid_conn_params*)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) { 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; 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_info *hwdev_info_list;
hid_device *hwdev; hid_device *hwdev;
this->disconnect(); this->disconnect();
hwdev_info_list = hid_enumerate(vid, pid); 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; hwdev = NULL;
if (hid_device_info *device = find_device(hwdev_info_list, interface_number, usage_page)) { if (hid_device_info *device = find_device(hwdev_info_list, interface_number, usage_page)) {
hwdev = hid_open_path(device->path); hwdev = hid_open_path(device->path);
@ -141,6 +155,7 @@ namespace hw {
this->usb_vid = vid; this->usb_vid = vid;
this->usb_pid = pid; this->usb_pid = pid;
this->usb_device = hwdev; this->usb_device = hwdev;
return hwdev;
} }

View file

@ -98,7 +98,8 @@ namespace hw {
void init(); void init();
void connect(void *params); 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; bool connected() const;
int exchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len, bool user_input); int exchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len, bool user_input);
void disconnect(); void disconnect();

View file

@ -390,9 +390,14 @@ namespace hw {
return true; 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) { bool device_ledger::connect(void) {
this->disconnect(); this->disconnect();
hw_device.connect(0x2c97, 0x0001, 0, 0xffa0); hw_device.connect(known_devices);
this->reset(); this->reset();
#ifdef DEBUG_HWDEVICE #ifdef DEBUG_HWDEVICE
cryptonote::account_public_address pubkey; cryptonote::account_public_address pubkey;