blob: ef6b810971247b058ffe2dd71559af7d38fb6b10 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lorgnette/sane_client.h"
#include <chromeos/dbus/service_constants.h>
#include "lorgnette/dbus_adaptors/org.chromium.lorgnette.Manager.h"
#include "lorgnette/ippusb_device.h"
namespace lorgnette {
std::unique_ptr<SaneDevice> SaneClient::ConnectToDevice(
brillo::ErrorPtr* error,
SANE_Status* sane_status,
const std::string& device_name) {
std::string real_device = device_name;
if (device_name.substr(0, 7) == "ippusb:") {
LOG(INFO) << "Finding real backend for device: " << device_name;
base::Optional<std::string> backend = BackendForDevice(device_name);
if (!backend.has_value()) {
brillo::Error::AddToPrintf(
error, FROM_HERE, brillo::errors::dbus::kDomain, kManagerServiceError,
"Didn't get a corrected backend string for ippusb device %s. Cannot "
"contact scanner.",
device_name.c_str());
return nullptr;
}
real_device = backend.value();
LOG(INFO) << "Updated backend for device: " << real_device;
}
return ConnectToDeviceInternal(error, sane_status, real_device);
}
} // namespace lorgnette