blob: f0c615200954939ce311add1e339945106d629e9 [file] [log] [blame]
// Copyright 2017 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 "modemfwd/daemon.h"
#include <sysexits.h>
#include <memory>
#include <string>
#include <utility>
#include <base/bind.h>
#include <base/files/file_util.h>
#include "modemfwd/firmware_directory.h"
#include "modemfwd/modem.h"
#include "modemfwd/modem_flasher.h"
#include "modemfwd/modem_helper_directory.h"
#include "modemfwd/modem_tracker.h"
namespace modemfwd {
Daemon::Daemon(const std::string& helper_directory,
const std::string& firmware_directory)
: helper_dir_path_(helper_directory),
firmware_dir_path_(firmware_directory),
weak_ptr_factory_(this) {}
int Daemon::OnInit() {
int exit_code = brillo::DBusDaemon::OnInit();
if (exit_code != EX_OK)
return exit_code;
if (!base::DirectoryExists(helper_dir_path_)) {
LOG(ERROR) << "Supplied modem-specific helper directory "
<< helper_dir_path_.value() << " does not exist";
return EX_UNAVAILABLE;
}
auto helper_directory = CreateModemHelperDirectory(helper_dir_path_);
if (!helper_directory) {
LOG(ERROR) << "No suitable helpers found in " << helper_dir_path_.value();
return EX_UNAVAILABLE;
}
if (!base::DirectoryExists(firmware_dir_path_)) {
LOG(ERROR) << "Supplied firmware directory " << firmware_dir_path_.value()
<< " does not exist";
return EX_UNAVAILABLE;
}
modem_flasher_ = std::make_unique<modemfwd::ModemFlasher>(
std::move(helper_directory),
CreateFirmwareDirectory(firmware_dir_path_));
modem_tracker_ = std::make_unique<modemfwd::ModemTracker>(
bus_,
base::Bind(&Daemon::OnModemAppeared,
weak_ptr_factory_.GetWeakPtr()));
return EX_OK;
}
void Daemon::OnModemAppeared(std::unique_ptr<Modem> modem) {
DLOG(INFO) << "Modem " << modem->GetEquipmentId() << " appeared";
modem_flasher_->TryFlash(modem.get());
}
} // namespace modemfwd