blob: ab315b379e78717073e873c2eac64b4611be8bb0 [file] [log] [blame]
#!/bin/sh
# 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.
#
# If the hammer is attached during boot and needs update, we block the UI at
# splash screen until the hammer is updated. This script is called by `pre-ui`
# upstart job.
. /usr/share/cros/init/hammerd-base-detector.sh || exit 1
LOGGER_TAG="hammerd-at-boot"
monitor_dbus_signal() {
# Monitor the hammerd updating DBus signal.
# If we catch the "update start" signals, then show the boot message, and
# restore the frecon after the update ends.
local interface='org.chromium.hammerd'
local started_signal='BaseFirmwareUpdateStarted'
local line
dbus-monitor --system --profile "interface='${interface}'" | \
while read -r line; do
if [ -z "${line##*${started_signal}*}" ]; then
logger -t "${LOGGER_TAG}" "Hammerd starts updating, display message."
chromeos-boot-alert update_detachable_base_firmware
fi
done
}
main() {
logger -t "${LOGGER_TAG}" "Start checking base status."
if ! base_connected "${LOGGER_TAG}"; then
logger -t "${LOGGER_TAG}" "Base not connected, skipping hammerd at boot."
metrics_client -e Platform.DetachableBase.AttachedOnBoot 0 2
return
fi
logger -t "${LOGGER_TAG}" "Base attached. Force trigger hammerd at boot."
metrics_client -e Platform.DetachableBase.AttachedOnBoot 1 2
# Background process that catches the DBus signal.
monitor_dbus_signal &
local bg_pid=$!
# Trigger hammerd job, which blocks until the job completes.
initctl start hammerd AT_BOOT="true" UPDATE_IF="mismatch"
# Kill the dbus-monitor in the background process.
pkill -9 -P "${bg_pid}" -f dbus-monitor
}
main "$@"