root/headers/os/bluetooth/RemoteDevice.h
/*
 * Copyright 2007 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef _REMOTE_DEVICE_H
#define _REMOTE_DEVICE_H

#include <bluetooth/bluetooth.h>
#include <bluetooth/bluetooth_error.h>
#include <bluetooth/BluetoothDevice.h>

#include <bluetoothserver_p.h>
#include <support/String.h>
#include <ObjectList.h>

#define B_BT_WAIT 0x00
#define B_BT_SUCCEEDED 0x01


namespace Bluetooth {

class Connection;
class LocalDevice;

class RemoteDevice : public BluetoothDevice {

public:
        static const int WAIT = B_BT_WAIT;
        static const int SUCCEEDED = B_BT_SUCCEEDED;

        enum ConnectionState {
                CONNECTED,
                CONNECTING,
                DISCONNECTED
        };

        static BObjectList<RemoteDevice> GetRemoteDevices(LocalDevice* localDevice);
        static RemoteDevice* ParseRemoteDevice(LocalDevice* localDevice, BMessage* message);

        virtual                 ~RemoteDevice();

        bool                    IsTrustedDevice();
        BString                 GetFriendlyName(bool alwaysAsk); /* Throwing */
        BString                 GetFriendlyName(void); /* Throwing */
        BString                 GetCachedFriendlyName();
        bdaddr_t                GetBluetoothAddress();
        uint8                   GetPageRepetitionMode();
        uint16                  GetClockOffset();
        DeviceClass     GetDeviceClass();

        bool                    Equals(RemoteDevice* obj);

        status_t                Connect();
        status_t                CancelConnection();
        status_t                Disconnect(bool removeDevice);

        /*static RemoteDevice* GetRemoteDevice(Connection conn);   Throwing */
        /* bool Authorize(Connection conn);  Throwing */
        /*bool Encrypt(Connection conn, bool on);  Throwing */
        /*bool IsAuthorized(Connection conn);  Throwing */
        RemoteDevice::ConnectionState   GetConnectionState();
        bool                    IsEncrypted(); /* Throwing */

        BString                 GetProperty(const char* property); /* Throwing */
        status_t                GetProperty(const char* property, uint32* value); /* Throwing */

        LocalDevice*    GetLocalDeviceOwner();

                                        RemoteDevice(const BString& address);
                                        RemoteDevice(const bdaddr_t address, uint8 record[3]);


protected:
        /* called by Discovery[Listener|Agent] */
        void                    SetLocalDeviceOwner(LocalDevice* ld);
        friend class DiscoveryListener;

private:

        LocalDevice*    fDiscovererLocalDevice;
        BMessenger*             fMessenger;

        uint8                   fPageRepetitionMode;
        uint8                   fScanPeriodMode;
        uint8                   fScanMode;
        uint16                  fClockOffset;
        int8            fRSSI;
        BString         fFriendlyName;
        bool            fFriendlyNameIsComplete;
};

}

#ifndef _BT_USE_EXPLICIT_NAMESPACE
using Bluetooth::RemoteDevice;
#endif

#endif // _REMOTE_DEVICE_H