// Copyright 2019 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.

#ifndef DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_EC_SERVICE_TEST_UTILS_H_
#define DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_EC_SERVICE_TEST_UTILS_H_

#include <cstdint>
#include <string>

#include "diagnostics/wilco_dtc_supportd/telemetry/ec_service.h"

namespace diagnostics {

// Valid EcEvents
extern const EcService::EcEvent kEcEventNonWilcoCharger;
extern const EcService::EcEvent kEcEventLowPowerCharger;
extern const EcService::EcEvent kEcEventBatteryAuth;
extern const EcService::EcEvent kEcEventDockDisplay;
extern const EcService::EcEvent kEcEventDockThunderbolt;
extern const EcService::EcEvent kEcEventIncompatibleDock;
extern const EcService::EcEvent kEcEventDockError;

// Invalid EcEvents
extern const EcService::EcEvent kEcEventNonSysNotification;
extern const EcService::EcEvent kEcEventAcAdapterNoFlags;
extern const EcService::EcEvent kEcEventChargerNoFlags;
extern const EcService::EcEvent kEcEventUsbCNoFlags;
extern const EcService::EcEvent kEcEventNonWilcoChargerBadSubType;
extern const EcService::EcEvent kEcEventInvalidPayloadSize;

// Converts a |uint16_t| array to a |uint8_t| array using little-endian format.
// For example, data [0x0102, 0x1314, 0x2526] will be represented as
// [0x02, 0x01, 0x14, 0x13, 0x26, 0x25].
std::string ConvertDataInWordsToString(const uint16_t* data, uint16_t size);

// Returns a pre-initialized EcEvent whose reason matches the provided reason
EcService::EcEvent GetEcEventWithReason(EcService::EcEvent::Reason reason);

}  // namespace diagnostics

#endif  // DIAGNOSTICS_WILCO_DTC_SUPPORTD_TELEMETRY_EC_SERVICE_TEST_UTILS_H_
