/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include "hci/command_interface.h"
#include "hci/hci_packets.h"

namespace bluetooth {
namespace hci {

constexpr hci::EventCode SecurityEvents[] = {
    hci::EventCode::ENCRYPTION_CHANGE,
    hci::EventCode::CHANGE_CONNECTION_LINK_KEY_COMPLETE,
    hci::EventCode::CENTRAL_LINK_KEY_COMPLETE,
    hci::EventCode::RETURN_LINK_KEYS,
    hci::EventCode::PIN_CODE_REQUEST,
    hci::EventCode::LINK_KEY_REQUEST,
    hci::EventCode::LINK_KEY_NOTIFICATION,
    hci::EventCode::ENCRYPTION_KEY_REFRESH_COMPLETE,
    hci::EventCode::IO_CAPABILITY_REQUEST,
    hci::EventCode::IO_CAPABILITY_RESPONSE,
    hci::EventCode::REMOTE_OOB_DATA_REQUEST,
    hci::EventCode::SIMPLE_PAIRING_COMPLETE,
    hci::EventCode::USER_PASSKEY_NOTIFICATION,
    hci::EventCode::KEYPRESS_NOTIFICATION,
    hci::EventCode::USER_CONFIRMATION_REQUEST,
    hci::EventCode::USER_PASSKEY_REQUEST,
    hci::EventCode::REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION,
};

typedef CommandInterface<SecurityCommandBuilder> SecurityInterface;

}  // namespace hci
}  // namespace bluetooth
