2024-10-08 18:33:13 +11:00

188 lines
6.8 KiB
Objective-C

/*
* @file CBCharacteristic.h
* @framework CoreBluetooth
*
* @copyright 2011 Apple, Inc. All rights reserved.
*/
#ifndef _CORE_BLUETOOTH_H_
#warning Please do not import this header file directly. Use <CoreBluetooth/CoreBluetooth.h> instead.
#endif
#import <CoreBluetooth/CBAttribute.h>
NS_ASSUME_NONNULL_BEGIN
/*!
* @enum CBCharacteristicProperties
*
* @discussion Characteristic properties determine how the characteristic value can be used, or how the descriptor(s) can be accessed. Can be combined. Unless
* otherwise specified, properties are valid for local characteristics published via @link CBPeripheralManager @/link.
*
* @constant CBCharacteristicPropertyBroadcast Permits broadcasts of the characteristic value using a characteristic configuration descriptor. Not allowed for local characteristics.
* @constant CBCharacteristicPropertyRead Permits reads of the characteristic value.
* @constant CBCharacteristicPropertyWriteWithoutResponse Permits writes of the characteristic value, without a response.
* @constant CBCharacteristicPropertyWrite Permits writes of the characteristic value.
* @constant CBCharacteristicPropertyNotify Permits notifications of the characteristic value, without a response.
* @constant CBCharacteristicPropertyIndicate Permits indications of the characteristic value.
* @constant CBCharacteristicPropertyAuthenticatedSignedWrites Permits signed writes of the characteristic value
* @constant CBCharacteristicPropertyExtendedProperties If set, additional characteristic properties are defined in the characteristic extended properties descriptor. Not allowed for local characteristics.
* @constant CBCharacteristicPropertyNotifyEncryptionRequired If set, only trusted devices can enable notifications of the characteristic value.
* @constant CBCharacteristicPropertyIndicateEncryptionRequired If set, only trusted devices can enable indications of the characteristic value.
*
*/
typedef NS_OPTIONS(NSUInteger, CBCharacteristicProperties) {
CBCharacteristicPropertyBroadcast = 0x01,
CBCharacteristicPropertyRead = 0x02,
CBCharacteristicPropertyWriteWithoutResponse = 0x04,
CBCharacteristicPropertyWrite = 0x08,
CBCharacteristicPropertyNotify = 0x10,
CBCharacteristicPropertyIndicate = 0x20,
CBCharacteristicPropertyAuthenticatedSignedWrites = 0x40,
CBCharacteristicPropertyExtendedProperties = 0x80,
CBCharacteristicPropertyNotifyEncryptionRequired NS_ENUM_AVAILABLE(10_9, 6_0) = 0x100,
CBCharacteristicPropertyIndicateEncryptionRequired NS_ENUM_AVAILABLE(10_9, 6_0) = 0x200
};
/*!
* @class CBCharacteristic
*
* @discussion
* Represents a service's characteristic.
*
*/
NS_CLASS_AVAILABLE(10_7, 5_0)
CB_EXTERN_CLASS @interface CBCharacteristic : CBAttribute
/*!
* @property service
*
* @discussion
* A back-pointer to the service this characteristic belongs to.
*
*/
@property(weak, readonly, nonatomic) CBService *service;
/*!
* @property properties
*
* @discussion
* The properties of the characteristic.
*
*/
@property(readonly, nonatomic) CBCharacteristicProperties properties;
/*!
* @property value
*
* @discussion
* The value of the characteristic.
*
*/
@property(retain, readonly, nullable) NSData *value;
/*!
* @property descriptors
*
* @discussion
* A list of the CBDescriptors that have so far been discovered in this characteristic.
*
*/
@property(retain, readonly, nullable) NSArray<CBDescriptor *> *descriptors;
/*!
* @property isBroadcasted
*
* @discussion
* Whether the characteristic is currently broadcasted or not.
*
*/
@property(readonly) BOOL isBroadcasted NS_DEPRECATED(10_9, 10_13, 5_0, 8_0);
/*!
* @property isNotifying
*
* @discussion
* Whether the characteristic is currently notifying or not.
*
*/
@property(readonly) BOOL isNotifying;
@end
/*!
* @enum CBAttributePermissions
*
* @discussion Read, write, and encryption permissions for an ATT attribute. Can be combined.
*
* @constant CBAttributePermissionsReadable Read-only.
* @constant CBAttributePermissionsWriteable Write-only.
* @constant CBAttributePermissionsReadEncryptionRequired Readable by trusted devices.
* @constant CBAttributePermissionsWriteEncryptionRequired Writeable by trusted devices.
*
*/
typedef NS_OPTIONS(NSUInteger, CBAttributePermissions) {
CBAttributePermissionsReadable = 0x01,
CBAttributePermissionsWriteable = 0x02,
CBAttributePermissionsReadEncryptionRequired = 0x04,
CBAttributePermissionsWriteEncryptionRequired = 0x08
} NS_ENUM_AVAILABLE(10_9, 6_0);
/*!
* @class CBMutableCharacteristic
*
* @discussion Used to create a local characteristic, which can be added to the local database via <code>CBPeripheralManager</code>. Once a characteristic
* is published, it is cached and can no longer be changed.
* If a characteristic value is specified, it will be cached and marked <code>CBCharacteristicPropertyRead</code> and
* <code>CBAttributePermissionsReadable</code>. If a characteristic value needs to be writeable, or may change during the lifetime of the
* published <code>CBService</code>, it is considered a dynamic value and will be requested on-demand. Dynamic values are identified by a
* <i>value</i> of <i>nil</i>.
*
*/
NS_CLASS_AVAILABLE(10_9, 6_0)
CB_EXTERN_CLASS @interface CBMutableCharacteristic : CBCharacteristic
/*!
* @property permissions
*
* @discussion The permissions of the characteristic value.
*
* @see CBAttributePermissions
*/
@property(assign, readwrite, nonatomic) CBAttributePermissions permissions;
/*!
* @property subscribedCentrals
*
* @discussion For notifying characteristics, the set of currently subscribed centrals.
*/
@property(retain, readonly, nullable) NSArray<CBCentral *> *subscribedCentrals NS_AVAILABLE(10_9, 7_0);
@property(assign, readwrite, nonatomic) CBCharacteristicProperties properties;
@property(retain, readwrite, nullable) NSData *value;
@property(retain, readwrite, nullable) NSArray<CBDescriptor *> *descriptors;
/*!
* @method initWithType:properties:value:permissions
*
* @param UUID The Bluetooth UUID of the characteristic.
* @param properties The properties of the characteristic.
* @param value The characteristic value to be cached. If <i>nil</i>, the value will be dynamic and requested on-demand.
* @param permissions The permissions of the characteristic value.
*
* @discussion Returns an initialized characteristic.
*
*/
- (instancetype)initWithType:(CBUUID *)UUID properties:(CBCharacteristicProperties)properties value:(nullable NSData *)value permissions:(CBAttributePermissions)permissions API_AVAILABLE(ios(6.0), macos(10.9)) API_UNAVAILABLE(watchos, tvos) NS_DESIGNATED_INITIALIZER
#if TARGET_OS_VISION
API_UNAVAILABLE(visionos)
#endif
;
@end
NS_ASSUME_NONNULL_END