Index: media/midi/midi_manager_alsa.cc |
diff --git a/media/midi/midi_manager_alsa.cc b/media/midi/midi_manager_alsa.cc |
index 76fc8c40c17f52e7cf33243ba828f344924850f7..a6e35e99be96f98cfdac7d47ba1bcf178d1480a6 100644 |
--- a/media/midi/midi_manager_alsa.cc |
+++ b/media/midi/midi_manager_alsa.cc |
@@ -124,6 +124,17 @@ int GetCardNumber(udev_device* dev) { |
return number; |
} |
+std::string GetVendor(udev_device* dev) { |
+ // Try to get the vendor string. Sometimes it is encoded. |
+ std::string vendor = device::UdevDecodeString( |
+ device::UdevDeviceGetPropertyValue(dev, kUdevIdVendorEnc)); |
+ // Sometimes it is not encoded. |
+ if (vendor.empty()) |
+ vendor = |
+ UdevDeviceGetPropertyOrSysattr(dev, kUdevIdVendor, kSysattrVendorName); |
+ return vendor; |
+} |
+ |
void SetStringIfNonEmpty(base::DictionaryValue* value, |
const std::string& path, |
const std::string& in_value) { |
@@ -298,8 +309,38 @@ void MidiManagerAlsa::DispatchSendMidiData(MidiManagerClient* client, |
base::Unretained(client), data.size())); |
} |
+MidiManagerAlsa::MidiPort::Id::Id() = default; |
+ |
+MidiManagerAlsa::MidiPort::Id::Id(const std::string& bus, |
+ const std::string& vendor_id, |
+ const std::string& model_id, |
+ const std::string& usb_interface_num, |
+ const std::string& serial) |
+ : bus_(bus), |
+ vendor_id_(vendor_id), |
+ model_id_(model_id), |
+ usb_interface_num_(usb_interface_num), |
+ serial_(serial) { |
+} |
+ |
+MidiManagerAlsa::MidiPort::Id::Id(const Id&) = default; |
+ |
+MidiManagerAlsa::MidiPort::Id::~Id() = default; |
+ |
+bool MidiManagerAlsa::MidiPort::Id::operator==(const Id& rhs) const { |
+ return (bus_ == rhs.bus_) && (vendor_id_ == rhs.vendor_id_) && |
+ (model_id_ == rhs.model_id_) && |
+ (usb_interface_num_ == rhs.usb_interface_num_) && |
+ (serial_ == rhs.serial_); |
+} |
+ |
+bool MidiManagerAlsa::MidiPort::Id::empty() const { |
+ return bus_.empty() && vendor_id_.empty() && model_id_.empty() && |
+ usb_interface_num_.empty() && serial_.empty(); |
+} |
+ |
MidiManagerAlsa::MidiPort::MidiPort(const std::string& path, |
- const std::string& id, |
+ const Id& id, |
int client_id, |
int port_id, |
int midi_device, |
@@ -339,13 +380,19 @@ scoped_ptr<base::Value> MidiManagerAlsa::MidiPort::Value() const { |
} |
value->SetString("type", type); |
SetStringIfNonEmpty(value.get(), "path", path_); |
- SetStringIfNonEmpty(value.get(), "id", id_); |
SetStringIfNonEmpty(value.get(), "clientName", client_name_); |
SetStringIfNonEmpty(value.get(), "portName", port_name_); |
value->SetInteger("clientId", client_id_); |
value->SetInteger("portId", port_id_); |
value->SetInteger("midiDevice", midi_device_); |
+ // Flatten id fields. |
+ SetStringIfNonEmpty(value.get(), "bus", id_.bus()); |
+ SetStringIfNonEmpty(value.get(), "vendorId", id_.vendor_id()); |
+ SetStringIfNonEmpty(value.get(), "modelId", id_.model_id()); |
+ SetStringIfNonEmpty(value.get(), "usbInterfaceNum", id_.usb_interface_num()); |
+ SetStringIfNonEmpty(value.get(), "serial", id_.serial()); |
+ |
return value.Pass(); |
} |
@@ -621,8 +668,7 @@ MidiManagerAlsa::AlsaSeqState::ToMidiPortState(const AlsaCardMap& alsa_cards) { |
std::string manufacturer; |
std::string driver; |
std::string path; |
- std::string id; |
- std::string serial; |
+ MidiPort::Id id; |
std::string card_name; |
std::string card_longname; |
int midi_device = -1; |
@@ -633,6 +679,11 @@ MidiManagerAlsa::AlsaSeqState::ToMidiPortState(const AlsaCardMap& alsa_cards) { |
card_midi_device = 0; |
manufacturer = card->manufacturer(); |
+ path = card->path(); |
+ id = MidiPort::Id(card->bus(), card->vendor_id(), card->model_id(), |
+ card->usb_interface_num(), card->serial()); |
+ card_name = card->name(); |
+ card_longname = card->longname(); |
midi_device = card_midi_device; |
++card_midi_device; |
@@ -715,45 +766,31 @@ MidiManagerAlsa::AlsaSeqState::Client::end() const { |
} |
MidiManagerAlsa::AlsaCard::AlsaCard(udev_device* dev, |
- const std::string& alsa_name, |
- const std::string& alsa_longname, |
- const std::string& alsa_driver, |
+ const std::string& name, |
+ const std::string& longname, |
+ const std::string& driver, |
int midi_device_count) |
- : alsa_name_(alsa_name), |
- alsa_longname_(alsa_longname), |
- alsa_driver_(alsa_driver), |
- midi_device_count_(midi_device_count) { |
- // Try to get the vendor string. Sometimes it is encoded. |
- std::string vendor = device::UdevDecodeString( |
- device::UdevDeviceGetPropertyValue(dev, kUdevIdVendorEnc)); |
- // Sometimes it is not encoded. |
- if (vendor.empty()) |
- vendor = |
- UdevDeviceGetPropertyOrSysattr(dev, kUdevIdVendor, kSysattrVendorName); |
- // Also get the vendor string from the hardware database. |
- std::string vendor_from_database = |
- device::UdevDeviceGetPropertyValue(dev, kUdevIdVendorFromDatabase); |
- |
- // Get the device path. |
- path_ = device::UdevDeviceGetPropertyValue(dev, kUdevIdPath); |
- // Get the bus. |
- bus_ = device::UdevDeviceGetPropertyValue(dev, kUdevIdBus); |
- |
- // Get the "serial" number. (Often untrustable or missing.) |
- serial_ = |
- UdevDeviceGetPropertyOrSysattr(dev, kUdevIdSerialShort, kSysattrGuid); |
- |
- // Get the vendor id, by either property or sysattr. |
- vendor_id_ = |
- UdevDeviceGetPropertyOrSysattr(dev, kUdevIdVendorId, kSysattrVendor); |
- // Get the model id, by either property or sysattr. |
- model_id_ = |
- UdevDeviceGetPropertyOrSysattr(dev, kUdevIdModelId, kSysattrModel); |
- // Get the usb interface number. |
- usb_interface_num_ = |
- device::UdevDeviceGetPropertyValue(dev, kUdevIdUsbInterfaceNum); |
- manufacturer_ = ExtractManufacturerString( |
- vendor, vendor_id_, vendor_from_database, alsa_name, alsa_longname); |
+ : name_(name), |
+ longname_(longname), |
+ driver_(driver), |
+ path_(device::UdevDeviceGetPropertyValue(dev, kUdevIdPath)), |
+ bus_(device::UdevDeviceGetPropertyValue(dev, kUdevIdBus)), |
+ vendor_id_( |
+ UdevDeviceGetPropertyOrSysattr(dev, kUdevIdVendorId, kSysattrVendor)), |
+ model_id_( |
+ UdevDeviceGetPropertyOrSysattr(dev, kUdevIdModelId, kSysattrModel)), |
+ usb_interface_num_( |
+ device::UdevDeviceGetPropertyValue(dev, kUdevIdUsbInterfaceNum)), |
+ serial_(UdevDeviceGetPropertyOrSysattr(dev, |
+ kUdevIdSerialShort, |
+ kSysattrGuid)), |
+ midi_device_count_(midi_device_count), |
+ manufacturer_(ExtractManufacturerString( |
+ GetVendor(dev), |
+ vendor_id_, |
+ device::UdevDeviceGetPropertyValue(dev, kUdevIdVendorFromDatabase), |
+ name, |
+ longname)) { |
} |
MidiManagerAlsa::AlsaCard::~AlsaCard() = default; |