// Path: src/main/java/org/sputnikdev/bluetooth/manager/BluetoothAddressType.java
// public enum BluetoothAddressType {
// 
//     /**
//      * Address type is unknown.
//      */
//     UNKNOWN,
//     /**
//      * This is the standard, IEEE-assigned 48-bit universal LAN MAC address which must be obtained from the
//      * IEEE Registration Authority.
//      */
//     PUBLIC,
//     /**
//      * Random type address. BLE standard adds the ability to periodically change the address to insure device privacy.
//      * <p>Two random types are provided:
//      * <ul>
//      *     <li>Static Address. A 48-bit randomly generated address. A new value is generated after each power cycle.
//      *     </li>
//      *     <li>Private Address. When a device wants to remain private, it uses private addresses. These are addresses
//      *     that can be periodically changed so that the device can not be tracked. These may be resolvable or not.</li>
//      * </ul>
//      */
//     RANDOM
// 
// }


import java.util.List;
import java.util.Map;
import org.sputnikdev.bluetooth.manager.BluetoothAddressType;
package org.sputnikdev.bluetooth.manager.transport;

/*-
 * #%L
 * org.sputnikdev:bluetooth-manager
 * %%
 * Copyright (C) 2017 Sputnik Dev
 * %%
 * 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.
 * #L%
 */



/**
 *
 * @author Vlad Kolotov
 */
public interface Device extends BluetoothObject {

    int getBluetoothClass();

    boolean disconnect();

    boolean connect();

    String getName();

    String getAlias();

    void setAlias(String alias);

    boolean isBlocked();

    boolean isBleEnabled();

    void enableBlockedNotifications(Notification<Boolean> notification);

    void disableBlockedNotifications();

    void setBlocked(boolean blocked);

    short getRSSI();

    short getTxPower();

    void enableRSSINotifications(Notification<Short> notification);

    void disableRSSINotifications();

    boolean isConnected();

    void enableConnectedNotifications(Notification<Boolean> notification);

    void disableConnectedNotifications();

    boolean isServicesResolved();

    void enableServicesResolvedNotifications(Notification<Boolean> notification);

    void disableServicesResolvedNotifications();

    List<Service> getServices();

    Map<String, byte[]> getServiceData();

    Map<Short, byte[]> getManufacturerData();

// Path: src/main/java/org/sputnikdev/bluetooth/manager/BluetoothAddressType.java
// public enum BluetoothAddressType {
// 
//     /**
//      * Address type is unknown.
//      */
//     UNKNOWN,
//     /**
//      * This is the standard, IEEE-assigned 48-bit universal LAN MAC address which must be obtained from the
//      * IEEE Registration Authority.
//      */
//     PUBLIC,
//     /**
//      * Random type address. BLE standard adds the ability to periodically change the address to insure device privacy.
//      * <p>Two random types are provided:
//      * <ul>
//      *     <li>Static Address. A 48-bit randomly generated address. A new value is generated after each power cycle.
//      *     </li>
//      *     <li>Private Address. When a device wants to remain private, it uses private addresses. These are addresses
//      *     that can be periodically changed so that the device can not be tracked. These may be resolvable or not.</li>
//      * </ul>
//      */
//     RANDOM
// 
// }


// Path: src/main/java/org/sputnikdev/bluetooth/manager/transport/Device.java
import java.util.List;
import java.util.Map;
import org.sputnikdev.bluetooth.manager.BluetoothAddressType;

package org.sputnikdev.bluetooth.manager.transport;

/*-
 * #%L
 * org.sputnikdev:bluetooth-manager
 * %%
 * Copyright (C) 2017 Sputnik Dev
 * %%
 * 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.
 * #L%
 */



/**
 *
 * @author Vlad Kolotov
 */
public interface Device extends BluetoothObject {

    int getBluetoothClass();

    boolean disconnect();

    boolean connect();

    String getName();

    String getAlias();

    void setAlias(String alias);

    boolean isBlocked();

    boolean isBleEnabled();

    void enableBlockedNotifications(Notification<Boolean> notification);

    void disableBlockedNotifications();

    void setBlocked(boolean blocked);

    short getRSSI();

    short getTxPower();

    void enableRSSINotifications(Notification<Short> notification);

    void disableRSSINotifications();

    boolean isConnected();

    void enableConnectedNotifications(Notification<Boolean> notification);

    void disableConnectedNotifications();

    boolean isServicesResolved();

    void enableServicesResolvedNotifications(Notification<Boolean> notification);

    void disableServicesResolvedNotifications();

    List<Service> getServices();

    Map<String, byte[]> getServiceData();

    Map<Short, byte[]> getManufacturerData();

    BluetoothAddressType getAddressType();