// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.developer.bridge;
using fuchsia.device;
using fuchsia.net;

struct TargetIp {
    fuchsia.net.IpAddress ip;
    uint32 scope_id;
};

// TODO(awdavies): Add serial number.
union TargetAddrInfo {
    1: TargetIp ip;
};

// TODO(awdavies): Add more target states once they're more well defined.
enum TargetState {
    UNKNOWN = 1;
};

// TODO(awdavies): Add more target types. Hardware? Product state?
enum TargetType {
    UNKNOWN = 1;
};

/// Current known state of the remote control
enum RemoteControlState {
    UP = 1;
    DOWN = 2;
    UNKNOWN = 3;
};

table Target {
    1: string:fuchsia.device.DEVICE_NAME_MAX nodename;
    2: vector<TargetAddrInfo>:256 addresses;
    3: uint64 age_ms;
    4: RemoteControlState rcs_state;
    5: TargetType target_type;
    6: TargetState target_state;
};
