commit
fa789109f6
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -389,10 +389,15 @@ namespace hw {
|
||||||
MDEBUG( "Device "<<this->id <<" HIDUSB inited");
|
MDEBUG( "Device "<<this->id <<" HIDUSB inited");
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue