blob: bcdcf6d731145a5ce90d11e0a287d5b3aefb950d [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Definitions for the event API exposed by the cros_healthd daemon. This API is
// normally consumed by the browser.
// NOTE: This mojom should be kept in sync with the copy in Chromium OS's repo
// in src/platform2/diagnostics/mojo/wilco_ec.mojom.
module chromeos.cros_healthd.mojom;
// A packet of data sent by the EC when it notices certain events have
// occurred, such as the battery, AC adapter, or USB-C state changing.
// The format of this packet is a variable length sequence of 16-bit words.
// Word 0 is the |size| word, representing the number of following
// words in the struct. Word 1 is the |type| word. The following |size|-1
// words are the |payload|. Depending on the value of |type|, the |payload|
// is interpreted in different ways. There are other possible values of |type|
// and other interpretations of |payload| than those listed here. There will
// be, at most, 6 words in the |payload|. See section 2.3 "ACPI EC Event
// notification" of the Wilco EC specification at go/wilco-ec-spec for more
// information.
struct EcEvent {
// Derived value representing the reason/cause of the EC event.
//
// NOTE: This is a computed value and not sent by the EC.
enum Reason {
// |kSystemNotify| EC event types:
//
// An AC adapter event indicating a non-Wilco charger.
kNonWilcoCharger,
// An AC adapter event indicating a low power charger.
kLowPowerCharger,
// A battery event indicating an incompatible battery.
kBatteryAuth,
// A USB-C event indicating an HDMI conflict.
kDockDisplay,
// A USB-C event indicating a lack of thunderbolt support.
kDockThunderbolt,
// A USB-C event indicating an incompatible dock.
kIncompatibleDock,
// A USB-C event indicating the attached dock has overheated.
kDockError,
// |kSystemNotify| EC event type with no appropriate subtype.
kSysNotification,
// Non |kSystemNotify| EC event type.
kNonSysNotification,
};
// The |type| member will be one of these.
enum Type {
// Interpret |payload| as a system notify payload.
kSystemNotify = 0x0012,
};
Type type;
array<uint16> payload;
Reason reason;
};
struct GetEcTelemetryResponse {
enum Status {
// The EC telemetry command was successfully completed.
kStatusOk,
// The EC telemetry command was rejected due to the empty request payload.
kStatusErrorInputPayloadEmpty,
// The EC telemetry command was rejected due to the request payload being
// too large.
kStatusErrorInputPayloadMaxSizeExceeded,
// The EC telemetry command was failed due to EC driver error.
kStatusErrorAccessingDriver,
};
Status status;
string payload;
};
// Implemented by clients who desire EC notifications.
interface WilcoEcObserver {
// Fired when an EC event occurs.
OnEcEvent(EcEvent ec_event);
};