#[repr(C)]pub struct IOBluetoothL2CAPChannel { /* private fields */ }IOBluetoothL2CAPChannel and objc2 and IOBluetoothObject only.Expand description
An instance of IOBluetoothL2CAPChannel represents a single open L2CAP channel.
A client won’t create IOBluetoothL2CAPChannel objects directly. Instead, the IOBluetoothDevice’s L2CAP channel open API is responsible for opening a new L2CAP channel and returning an IOBluetoothL2CAPChannel instance representing that newly opened channel. Additionally, the IOBluetooth notification system will send notifications when new L2CAP channels are open (if requested).
After a new L2CAP channel is opened, the L2CAP configuration process will not be completed until an incoming data listener is registered with the IOBluetoothL2CAPChannel object. The reason for this is to due to the limited buffering done of incoming L2CAP data. This way, we avoid the situation where incoming data is received before the client is ready for it. Once a client is done with an IOBluetoothL2CAPChannel that it opened, it should call -closeChannel. Additionally, if the client does not intend to use the connection to the remote device any further, it should call -closeConnection on the IOBluetoothDevice object.
See also Apple’s documentation
Implementations§
Source§impl IOBluetoothL2CAPChannel
impl IOBluetoothL2CAPChannel
Sourcepub unsafe fn registerForChannelOpenNotifications_selector(
object: Option<&AnyObject>,
selector: Option<Sel>,
) -> Option<Retained<IOBluetoothUserNotification>>
Available on crate feature IOBluetoothUserNotification only.
pub unsafe fn registerForChannelOpenNotifications_selector( object: Option<&AnyObject>, selector: Option<Sel>, ) -> Option<Retained<IOBluetoothUserNotification>>
IOBluetoothUserNotification only.Allows a client to register for L2CAP channel open notifications for any L2CAP channel.
The given selector will be called on the target object whenever any L2CAP channel is opened. The selector should accept two arguments. The first is the user notification object. The second is the IOBluetoothL2CAPChannel that was opened.
Parameter object: Target object
Parameter selector: Selector to be called on the target object when a new L2CAP channel is opened.
Returns: Returns an IOBluetoothUserNotification representing the outstanding L2CAP channel notification. To unregister the notification, call -unregister on the resulting IOBluetoothUserNotification object. If an error is encountered creating the notification, nil is returned. The returned IOBluetoothUserNotification will be valid for as long as the notification is registered. It is not necessary to retain the result. Once -unregister is called on it, it will no longer be valid.
Sourcepub unsafe fn registerForChannelOpenNotifications_selector_withPSM_direction(
object: Option<&AnyObject>,
selector: Option<Sel>,
psm: BluetoothL2CAPPSM,
in_direction: IOBluetoothUserNotificationChannelDirection,
) -> Option<Retained<IOBluetoothUserNotification>>
Available on crate features Bluetooth and IOBluetoothUserLib and IOBluetoothUserNotification only.
pub unsafe fn registerForChannelOpenNotifications_selector_withPSM_direction( object: Option<&AnyObject>, selector: Option<Sel>, psm: BluetoothL2CAPPSM, in_direction: IOBluetoothUserNotificationChannelDirection, ) -> Option<Retained<IOBluetoothUserNotification>>
Bluetooth and IOBluetoothUserLib and IOBluetoothUserNotification only.Allows a client to register for L2CAP channel open notifications for certain types of L2CAP channels.
The given selector will be called on the target object whenever an L2CAP channel with the given attributes is opened. The selector should accept two arguments. The first is the user notification object. The second is the IOBluetoothL2CAPChannel that was opened.
Parameter object: Target object
Parameter selector: Selector to be called on the target object when a new L2CAP channel is opened.
Parameter psm: PSM to match a new L2CAP channel. If the PSM doesn’t matter, 0 may be passed in.
Parameter inDirection: The desired direction of the L2CAP channel - kIOBluetoothUserNotificationChannelDirectionAny
if the direction doesn’t matter.
Returns: Returns an IOBluetoothUserNotification representing the outstanding L2CAP channel notification. To unregister the notification, call -unregister on the resulting IOBluetoothUserNotification object. If an error is encountered creating the notification, nil is returned. The returned IOBluetoothUserNotification will be valid for as long as the notification is registered. It is not necessary to retain the result. Once -unregister is called on it, it will no longer be valid.
Sourcepub unsafe fn withObjectID(
object_id: IOBluetoothObjectID,
) -> Option<Retained<Self>>
Available on crate feature IOBluetoothUserLib only.
pub unsafe fn withObjectID( object_id: IOBluetoothObjectID, ) -> Option<Retained<Self>>
IOBluetoothUserLib only.Returns the IObluetoothL2CAPChannel with the given IOBluetoothObjectID.
The IOBluetoothObjectID can be used as a global reference for a given IOBluetoothL2CAPChannel. It allows two separate applications to refer to the same IOBluetoothL2CAPChannel object.
Parameter objectID: IOBluetoothObjectID of the desired IOBluetoothL2CAPChannel.
Returns: Returns the IOBluetoothL2CAPChannel that matches the given IOBluetoothObjectID if one exists. If no matching L2CAP channel exists, nil is returned.
Sourcepub unsafe fn closeChannel(&self) -> c_int
pub unsafe fn closeChannel(&self) -> c_int
Initiates the close process on an open L2CAP channel.
This method may only be called by the client that opened the channel in the first place. In the future asynchronous and synchronous versions will be provided that let the client know when the close process has been finished.
Returns: Returns kIOReturnSuccess on success.
Sourcepub unsafe fn outgoingMTU(&self) -> BluetoothL2CAPMTU
Available on crate feature Bluetooth only.
pub unsafe fn outgoingMTU(&self) -> BluetoothL2CAPMTU
Bluetooth only.Returns the current outgoing MTU for the L2CAP channel.
The outgoing MTU represents the maximum L2CAP packet size for packets being sent to the remote device.
Returns: Returns the current outgoing MTU for the L2CAP channel.
pub unsafe fn getOutgoingMTU(&self) -> BluetoothL2CAPMTU
Bluetooth only.Sourcepub unsafe fn incomingMTU(&self) -> BluetoothL2CAPMTU
Available on crate feature Bluetooth only.
pub unsafe fn incomingMTU(&self) -> BluetoothL2CAPMTU
Bluetooth only.Returns the current incoming MTU for the L2CAP channel.
The incoming MTU represents the maximum L2CAP packet size for packets being sent by the remote device.
Returns: Returns the current incoming MTU for the L2CAP channel.
pub unsafe fn getIncomingMTU(&self) -> BluetoothL2CAPMTU
Bluetooth only.Sourcepub unsafe fn requestRemoteMTU(&self, remote_mtu: BluetoothL2CAPMTU) -> c_int
Available on crate feature Bluetooth only.
pub unsafe fn requestRemoteMTU(&self, remote_mtu: BluetoothL2CAPMTU) -> c_int
Bluetooth only.Initiates the process to reconfigure the L2CAP channel with a new outgoing MTU.
Currently, this API does not give an indication that the re-config process has completed. In the future additional API will be available to provide that information both synchronously and asynchronously.
Parameter remoteMTU: The desired outgoing MTU.
Returns: Returns kIOReturnSuccess if the channel re-configure process was successfully initiated.
Sourcepub unsafe fn writeAsyncTrap_length_refcon(
&self,
data: *mut c_void,
length: u16,
refcon: *mut c_void,
) -> c_int
pub unsafe fn writeAsyncTrap_length_refcon( &self, data: *mut c_void, length: u16, refcon: *mut c_void, ) -> c_int
Writes the given data over the target L2CAP channel asynchronously to the remote device using IOConnectTrap4() call.
The length of the data may not exceed the L2CAP channel’s ougoing MTU. When the data has been successfully passed to the hardware to be transmitted, the delegate method -l2capChannelWriteComplete:refcon:status: will be called with the refcon passed into this method.
NOTE: This method is only available in Mac OS X 10.2.5 (Bluetooth v1.2) or later.
Parameter data: Pointer to the buffer containing the data to send.
Parameter length: The length of the given data buffer.
Parameter refcon: User supplied value that gets passed to the write callback.
Returns: Returns kIOReturnSuccess if the data was buffered successfully.
Sourcepub unsafe fn writeAsync_length_refcon(
&self,
data: *mut c_void,
length: u16,
refcon: *mut c_void,
) -> c_int
pub unsafe fn writeAsync_length_refcon( &self, data: *mut c_void, length: u16, refcon: *mut c_void, ) -> c_int
Writes the given data over the target L2CAP channel asynchronously to the remote device.
The length of the data may not exceed the L2CAP channel’s ougoing MTU. When the data has been successfully passed to the hardware to be transmitted, the delegate method -l2capChannelWriteComplete:refcon:status: will be called with the refcon passed into this method.
NOTE: This method is only available in Mac OS X 10.2.5 (Bluetooth v1.2) or later.
Parameter data: Pointer to the buffer containing the data to send.
Parameter length: The length of the given data buffer.
Parameter refcon: User supplied value that gets passed to the write callback.
Returns: Returns kIOReturnSuccess if the data was buffered successfully.
Sourcepub unsafe fn writeSync_length(&self, data: *mut c_void, length: u16) -> c_int
pub unsafe fn writeSync_length(&self, data: *mut c_void, length: u16) -> c_int
Writes the given data synchronously over the target L2CAP channel to the remote device.
The length of the data may not exceed the L2CAP channel’s ougoing MTU. This method will block until the data has been successfully sent to the hardware for transmission (or an error occurs).
NOTE: This method is only available in Mac OS X 10.2.5 (Bluetooth v1.2) or later.
Parameter data: Pointer to the buffer containing the data to send.
Parameter length: The length of the given data buffer.
Returns: Returns kIOReturnSuccess if the data was written successfully.
Sourcepub unsafe fn setDelegate(&self, channel_delegate: Option<&AnyObject>) -> c_int
pub unsafe fn setDelegate(&self, channel_delegate: Option<&AnyObject>) -> c_int
Allows an object to register itself as client of the L2CAP channel.
A channel delegate is the object the L2CAP channel uses as target for data and events. The developer will implement only the the methods he/she is interested in. A list of the possible methods is at the end of this file in the definition of the informal protocol IOBluetoothL2CAPChannelDelegate. A newly opened L2CAP channel will not complete its configuration process until the client that opened it registers a connectionHandler. This prevents that case where incoming data is received before the client is ready.
NOTE: This method is only available in Mac OS X 10.2.5 (Bluetooth v1.2) or later.
Parameter channelDelegate: the object that will play the role of channel delegate [NOTE the l2cap channel will retain the delegate].
Returns: Returns kIOReturnSuccess if the delegate is successfully registered.
Sourcepub unsafe fn setDelegate_withConfiguration(
&self,
channel_delegate: Option<&AnyObject>,
channel_configuration: Option<&NSDictionary>,
) -> c_int
Available on crate feature objc2-foundation only.
pub unsafe fn setDelegate_withConfiguration( &self, channel_delegate: Option<&AnyObject>, channel_configuration: Option<&NSDictionary>, ) -> c_int
objc2-foundation only.Allows an object to register itself as client of the L2CAP channel.
A channel delegate is the object the L2CAP channel uses as target for data and events. The developer will implement only the the methods he/she is interested in. A list of the possible methods is at the end of this file in the definition of the informal protocol IOBluetoothL2CAPChannelDelegate. A newly opened L2CAP channel will not complete its configuration process until the client that opened it registers a connectionHandler. This prevents that case where incoming data is received before the client is ready.
NOTE: This method is only available in Mac OS X 10.5 (Bluetooth v2.0) or later.
Parameter channelDelegate: the object that will play the role of channel delegate.
Parameter channelConfiguration: the dictionary that describes the initial configuration for
the channel.
Returns: Returns kIOReturnSuccess if the delegate is successfully registered.
Sourcepub unsafe fn delegate(&self) -> Option<Retained<AnyObject>>
pub unsafe fn delegate(&self) -> Option<Retained<AnyObject>>
Returns the currently assigned delegate
An incoming channel is one that was initiated by a remote device.
Returns: Returns the current delegate, or nil if one is not set.
Sourcepub unsafe fn device(&self) -> Option<Retained<IOBluetoothDevice>>
Available on crate feature IOBluetoothDevice only.
pub unsafe fn device(&self) -> Option<Retained<IOBluetoothDevice>>
IOBluetoothDevice only.Returns the IOBluetoothDevice to which the target L2CAP channel is open.
Returns: Returns the IOBluetoothDevice to which the target L2CAP channel is open.
pub unsafe fn getDevice(&self) -> Option<Retained<IOBluetoothDevice>>
IOBluetoothDevice only.Sourcepub unsafe fn objectID(&self) -> IOBluetoothObjectID
Available on crate feature IOBluetoothUserLib only.
pub unsafe fn objectID(&self) -> IOBluetoothObjectID
IOBluetoothUserLib only.Returns the IOBluetoothObjectID of the given IOBluetoothL2CAPChannel.
The IOBluetoothObjectID can be used as a global reference for a given IOBluetoothL2CAPChannel. It allows two separate applications to refer to the same IOBluetoothL2CAPChannel.
Returns: Returns the IOBluetoothObjectID of the given IOBluetoothL2CAPChannel.
pub unsafe fn getObjectID(&self) -> IOBluetoothObjectID
IOBluetoothUserLib only.Sourcepub unsafe fn PSM(&self) -> BluetoothL2CAPPSM
Available on crate feature Bluetooth only.
pub unsafe fn PSM(&self) -> BluetoothL2CAPPSM
Bluetooth only.Returns the PSM for the target L2CAP channel.
Returns: Returns the PSM for the target L2CAP channel.
pub unsafe fn getPSM(&self) -> BluetoothL2CAPPSM
Bluetooth only.Sourcepub unsafe fn localChannelID(&self) -> BluetoothL2CAPChannelID
Available on crate feature Bluetooth only.
pub unsafe fn localChannelID(&self) -> BluetoothL2CAPChannelID
Bluetooth only.Returns the local L2CAP channel ID for the target L2CAP channel.
Returns: Returns the local L2CAP channel ID for the target L2CAP channel.
pub unsafe fn getLocalChannelID(&self) -> BluetoothL2CAPChannelID
Bluetooth only.Sourcepub unsafe fn remoteChannelID(&self) -> BluetoothL2CAPChannelID
Available on crate feature Bluetooth only.
pub unsafe fn remoteChannelID(&self) -> BluetoothL2CAPChannelID
Bluetooth only.Returns the remote L2CAP channel ID for the target L2CAP channel.
Returns: Returns the remote L2CAP channel ID for the target L2CAP channel.
pub unsafe fn getRemoteChannelID(&self) -> BluetoothL2CAPChannelID
Bluetooth only.Sourcepub unsafe fn isIncoming(&self) -> bool
pub unsafe fn isIncoming(&self) -> bool
Returns TRUE if the channel is an incoming channel.
An incoming channel is one that was initiated by a remote device.
Returns: Returns TRUE if the channel is an incoming channel.
Sourcepub unsafe fn registerForChannelCloseNotification_selector(
&self,
observer: Option<&AnyObject>,
in_selector: Option<Sel>,
) -> Option<Retained<IOBluetoothUserNotification>>
Available on crate feature IOBluetoothUserNotification only.
pub unsafe fn registerForChannelCloseNotification_selector( &self, observer: Option<&AnyObject>, in_selector: Option<Sel>, ) -> Option<Retained<IOBluetoothUserNotification>>
IOBluetoothUserNotification only.Allows a client to register for a channel close notification.
The given selector will be called on the target observer when the L2CAP channel is closed. The selector should contain two arguments. The first is the user notification object. The second is the IOBluetoothL2CAPChannel that was closed.
Parameter observer: Target observer object
Parameter inSelector: Selector to be sent to the observer when the L2CAP channel is closed.
Returns: Returns an IOBluetoothUserNotification representing the outstanding L2CAP channel close notification. To unregister the notification, call -unregister of the returned IOBluetoothUserNotification object. If an error is encountered creating the notification, nil is returned.
Methods from Deref<Target = NSObject>§
Sourcepub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !
Handle messages the object doesn’t recognize.
See Apple’s documentation for details.
Methods from Deref<Target = AnyObject>§
Sourcepub fn class(&self) -> &'static AnyClass
pub fn class(&self) -> &'static AnyClass
Dynamically find the class of this object.
§Panics
May panic if the object is invalid (which may be the case for objects
returned from unavailable init/new methods).
§Example
Check that an instance of NSObject has the precise class NSObject.
use objc2::ClassType;
use objc2::runtime::NSObject;
let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());Sourcepub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
👎Deprecated: this is difficult to use correctly, use Ivar::load instead.
pub unsafe fn get_ivar<T>(&self, name: &str) -> &Twhere
T: Encode,
Ivar::load instead.Use Ivar::load instead.
§Safety
The object must have an instance variable with the given name, and it
must be of type T.
See Ivar::load_ptr for details surrounding this.
Sourcepub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
pub fn downcast_ref<T>(&self) -> Option<&T>where
T: DowncastTarget,
Attempt to downcast the object to a class of type T.
This is the reference-variant. Use Retained::downcast if you want
to convert a retained object to another type.
§Mutable classes
Some classes have immutable and mutable variants, such as NSString
and NSMutableString.
When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.
So using this method to convert a NSString to a NSMutableString,
while not unsound, is generally frowned upon unless you created the
string yourself, or the API explicitly documents the string to be
mutable.
See Apple’s documentation on mutability and on
isKindOfClass: for more details.
§Generic classes
Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.
You can, however, safely downcast to generic collections where all the
type-parameters are AnyObject.
§Panics
This works internally by calling isKindOfClass:. That means that the
object must have the instance method of that name, and an exception
will be thrown (if CoreFoundation is linked) or the process will abort
if that is not the case. In the vast majority of cases, you don’t need
to worry about this, since both root objects NSObject and
NSProxy implement this method.
§Examples
Cast an NSString back and forth from NSObject.
use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};
let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();Try (and fail) to cast an NSObject to an NSString.
use objc2_foundation::{NSObject, NSString};
let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());Try to cast to an array of strings.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.
Downcast when processing each element instead.
use objc2_foundation::{NSArray, NSObject, NSString};
let arr = NSArray::from_retained_slice(&[NSObject::new()]);
for elem in arr {
if let Some(data) = elem.downcast_ref::<NSString>() {
// handle `data`
}
}Trait Implementations§
Source§impl AsRef<AnyObject> for IOBluetoothL2CAPChannel
impl AsRef<AnyObject> for IOBluetoothL2CAPChannel
Source§impl AsRef<IOBluetoothObject> for IOBluetoothL2CAPChannel
impl AsRef<IOBluetoothObject> for IOBluetoothL2CAPChannel
Source§fn as_ref(&self) -> &IOBluetoothObject
fn as_ref(&self) -> &IOBluetoothObject
Source§impl AsRef<NSObject> for IOBluetoothL2CAPChannel
impl AsRef<NSObject> for IOBluetoothL2CAPChannel
Source§impl Borrow<AnyObject> for IOBluetoothL2CAPChannel
impl Borrow<AnyObject> for IOBluetoothL2CAPChannel
Source§impl Borrow<IOBluetoothObject> for IOBluetoothL2CAPChannel
impl Borrow<IOBluetoothObject> for IOBluetoothL2CAPChannel
Source§fn borrow(&self) -> &IOBluetoothObject
fn borrow(&self) -> &IOBluetoothObject
Source§impl Borrow<NSObject> for IOBluetoothL2CAPChannel
impl Borrow<NSObject> for IOBluetoothL2CAPChannel
Source§impl ClassType for IOBluetoothL2CAPChannel
impl ClassType for IOBluetoothL2CAPChannel
Source§const NAME: &'static str = "IOBluetoothL2CAPChannel"
const NAME: &'static str = "IOBluetoothL2CAPChannel"
Source§type Super = IOBluetoothObject
type Super = IOBluetoothObject
Source§type ThreadKind = <<IOBluetoothL2CAPChannel as ClassType>::Super as ClassType>::ThreadKind
type ThreadKind = <<IOBluetoothL2CAPChannel as ClassType>::Super as ClassType>::ThreadKind
Source§impl CopyingHelper for IOBluetoothL2CAPChannel
Available on crate feature objc2-foundation only.
impl CopyingHelper for IOBluetoothL2CAPChannel
objc2-foundation only.Source§type Result = IOBluetoothL2CAPChannel
type Result = IOBluetoothL2CAPChannel
Self if the type has no
immutable counterpart. Read moreSource§impl Debug for IOBluetoothL2CAPChannel
impl Debug for IOBluetoothL2CAPChannel
Source§impl Deref for IOBluetoothL2CAPChannel
impl Deref for IOBluetoothL2CAPChannel
Source§impl Hash for IOBluetoothL2CAPChannel
impl Hash for IOBluetoothL2CAPChannel
Source§impl Message for IOBluetoothL2CAPChannel
impl Message for IOBluetoothL2CAPChannel
Source§impl NSCopying for IOBluetoothL2CAPChannel
impl NSCopying for IOBluetoothL2CAPChannel
Source§impl NSObjectProtocol for IOBluetoothL2CAPChannel
impl NSObjectProtocol for IOBluetoothL2CAPChannel
Source§fn isEqual(&self, other: Option<&AnyObject>) -> bool
fn isEqual(&self, other: Option<&AnyObject>) -> bool
Source§fn hash(&self) -> usize
fn hash(&self) -> usize
Source§fn isKindOfClass(&self, cls: &AnyClass) -> bool
fn isKindOfClass(&self, cls: &AnyClass) -> bool
Source§fn is_kind_of<T>(&self) -> bool
fn is_kind_of<T>(&self) -> bool
isKindOfClass directly, or cast your objects with AnyObject::downcast_ref