1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef DEVICE_BLUETOOTH_BLUETOOTH_L2CAP_CHANNEL_MAC_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define DEVICE_BLUETOOTH_BLUETOOTH_L2CAP_CHANNEL_MAC_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#import <IOBluetooth/IOBluetooth.h> 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#import <IOKit/IOReturn.h> 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/mac/scoped_nsobject.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/macros.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "device/bluetooth/bluetooth_channel_mac.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)@class BluetoothL2capChannelDelegate; 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace device { 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class BluetoothL2capChannelMac : public BluetoothChannelMac { 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Creates a new L2CAP channel wrapper with the given |socket| and native 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |channel|. 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // NOTE: The |channel| is expected to already be retained. 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BluetoothL2capChannelMac(BluetoothSocketMac* socket, 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IOBluetoothL2CAPChannel* channel); 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~BluetoothL2capChannelMac(); 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Opens a new L2CAP channel with Channel ID |channel_id| to the target 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // |device|. Returns the opened channel and sets |status| to kIOReturnSuccess 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // if the open process was successfully started (or if an existing L2CAP 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // channel was found). Otherwise, sets |status| to an error status. 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static scoped_ptr<BluetoothL2capChannelMac> OpenAsync( 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BluetoothSocketMac* socket, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IOBluetoothDevice* device, 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BluetoothL2CAPPSM psm, 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IOReturn* status); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // BluetoothChannelMac: 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetSocket(BluetoothSocketMac* socket) OVERRIDE; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual IOBluetoothDevice* GetDevice() OVERRIDE; 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual uint16_t GetOutgoingMTU() OVERRIDE; 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual IOReturn WriteAsync(void* data, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint16_t length, 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void* refcon) OVERRIDE; 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnChannelOpenComplete(IOBluetoothL2CAPChannel* channel, 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IOReturn status); 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnChannelClosed(IOBluetoothL2CAPChannel* channel); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnChannelDataReceived(IOBluetoothL2CAPChannel* channel, 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void* data, 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) size_t length); 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnChannelWriteComplete(IOBluetoothL2CAPChannel* channel, 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void* refcon, 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IOReturn status); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The wrapped native L2CAP channel. 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::scoped_nsobject<IOBluetoothL2CAPChannel> channel_; 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The delegate for the native channel. 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::scoped_nsobject<BluetoothL2capChannelDelegate> delegate_; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BluetoothL2capChannelMac); 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace device 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // DEVICE_BLUETOOTH_BLUETOOTH_L2CAP_CHANNEL_MAC_H_ 70