/*++

Copyright (c) 2021  Microsoft Corporation

Module Name:

    ActivityCoordinatorTypes.h

Abstract:

    This header defines the types used by the ActivityCoordinator API.

--*/

#pragma once

typedef enum _ACTIVITY_COORDINATOR_RESOURCE {
    ACTIVITY_COORDINATOR_RESOURCE_USER_IDLE,
    ACTIVITY_COORDINATOR_RESOURCE_POWER,
    ACTIVITY_COORDINATOR_RESOURCE_NETWORK,
    ACTIVITY_COORDINATOR_RESOURCE_CPU,
    ACTIVITY_COORDINATOR_RESOURCE_MEMORY,
    ACTIVITY_COORDINATOR_RESOURCE_SYSTEM_DISK,
    ACTIVITY_COORDINATOR_RESOURCE_GPU,
    ACTIVITY_COORDINATOR_RESOURCE_NPU
} ACTIVITY_COORDINATOR_RESOURCE;

typedef enum _ACTIVITY_COORDINATOR_CONDITION {
    ACTIVITY_COORDINATOR_CONDITION_GOOD,
    ACTIVITY_COORDINATOR_CONDITION_MEDIUM,
    ACTIVITY_COORDINATOR_CONDITION_NOT_SET
} ACTIVITY_COORDINATOR_CONDITION;

typedef enum _ACTIVITY_COORDINATOR_POLICY_TEMPLATE {
    ACTIVITY_COORDINATOR_POLICY_TEMPLATE_GOOD,
    ACTIVITY_COORDINATOR_POLICY_TEMPLATE_MEDIUM,
    ACTIVITY_COORDINATOR_POLICY_TEMPLATE_BASE,
    ACTIVITY_COORDINATOR_POLICY_TEMPLATE_EMPTY
} ACTIVITY_COORDINATOR_POLICY_TEMPLATE;

typedef enum _ACTIVITY_COORDINATOR_NOTIFICATION {
    ACTIVITY_COORDINATOR_NOTIFICATION_RUN,
    ACTIVITY_COORDINATOR_NOTIFICATION_STOP
} ACTIVITY_COORDINATOR_NOTIFICATION;

#ifndef __midl

//
// Activity Coordinator API Subscription Handle.
//

DECLARE_HANDLE(ACTIVITY_COORDINATOR_SUBSCRIPTION);

//
// Activity Coordinator API Policy Handle.
//

DECLARE_HANDLE(ACTIVITY_COORDINATOR_POLICY);

typedef
void
(CALLBACK *ACTIVITY_COORDINATOR_CALLBACK)(
    _In_ ACTIVITY_COORDINATOR_NOTIFICATION notification,
    _In_ void* callbackContext
    );

#endif // __midl
