Removed support for now obsolete iOS 9 CoreBluetooth delegate methods:
- [CBPeripheralDelegate peripheralDidInvalidateServices:]
- [CBCentralManagerDelegate centralManager:didRetrievePeripherals:]
- [CBCentralManagerDelegate centralManager:didRetrieveConnectedPeripherals:]
Administrative changes:
- Updated copyright to 2015
- Use semantic versioning; version is now set to 1.1.0 (4)
Added methods to support BLE addressing:
- initWithName:parent:baseHi:baseLo:serviceBLEOffset:
- addCharacteristic:withBLEOffset:
- #97 - Add [YMSCBPeripheral readRSSI] method
- #98 - Make objectForKeyedSubscript: a public method for YMSCBPeripheral and YMSCBService
- #96 - Add [YMSCBPeripheral name] convenience accessor to cbPeripheral.name
- #92 - Reimplement [YMSCBCentralManager count] to use KVO collection method.
- #94 - Implement [YMSCBCentralManager removeAllPeripherals] method.
- Partial pull request accept from @tuscland #89.
-
Group SensorTag service properties so that KVO changes for the properties within each service can be temporally coherent.
-
[YMSCBCentralManager ymsPeripherals]
is now KVO compliant using mutable accessor methods described in: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/AccessorConventions.html- Note that interface to
ymsPeripherals
is now read-only.
- Note that interface to
-
API Change:
[DEAAccelerometerService readPeriod] is now [DEAAccelerometerService requestReadPeriod]
-
- #87 - Calculate 128-bit address offset to comply to BLE spec.
API changes related to this issue:
YMSCBUtils:
+ (NSString *)genCBUUID:(yms_u128_t *)base withIntBLEOffset:(int)addrOffset;
+ (CBUUID *)createCBUUID:(yms_u128_t *)base withIntBLEOffset:(int)addrOffset;
YMS128.c:
yms_u128_t yms_u128_genBLEOffset(int value);
Removed files: DEASensorTagUtils.h, DEASensorTagUtils.m, TISensorTag.c
- #73 - Fixed assignment of connectCallback property to not use extraneous copy.
- Fix reset of watchdog timer for conditions when a peripheral connection has either succeeded or failed.
- Fix centralManager:didRetrieveConnectedPeripherals won't be called when you call retrieveConnectedPeripheralsWithServices
- Fixed handling of callback properties so that they are set to nil after execution in a thread-safe manner.
- Added #define kYMSCBVersionNumber
- Updated codebase to support all iOS7 changes to the CoreBluetooth API.
- DeannaMac will not compile on OS X < 10.9. For OS X 10.8 users, please use the ios6 branch.
- #25 - Support for accelerometer period
- #73 - Fix declaration of block properties to copy
- Bugfix #61 - Change all delegate implementations so that the callback is performed on the main thread.
- Bugfix #69 - Reload peripheralsTableView when dismissing SensorTag view controller
- Bugfix #68 - Handle CoreBluetooth XPC reset
- Issue #32 - Added interim icon design by Wayne Dahlberg
- Initial work on beautifying Deanna app (Issue #62) based on graphic design work by Wayne Dahlberg.
- Fixes to updates of RSSI values via scanning or by connection.
- Reimplemented background thread UI updates to use GCD
dispatch_async()
instead ofperformSelectorOnMainThread:
(Issue #61). - Updated documentation.
- Support for background thread operation of BLE transactions (Issues #57, #58, #59)
Prior releases ran all BLE transactions off the main UI thread. For a small number of BLE devices (< 5), performance degradation was neglible. However, in an environment with many devices (> 30), support for background operation that does not block the main UI is necessary. Changes so that messages sent to the delegate for YMSCBCentralManager
and YMSCBPeripheral
are executed in the main thread.
Similarly, any change to a property of a subclass of YMSCBService
should be executed in the main thread so that it can be properly key-value observed (KVO) by any UI components.
- API Change: Removed RSSI auto-update functionality from YmsCoreBluetooth.
This directly attributed with background thread operation of BLE transactions. Prior code, if run using a background thread, would not correctly schedule a read of the RSSI value of a peripheral. It is now the responsibility of an application using YmsCoreBluetooth to invoke readRSSI
and handle the response to update the UI properly.
- Update of Deanna and DeannaMac to support background thread BLE transactions.
-
[YMSCBPeripheral initWithPeripheral:central:baseHi:baseLo:updateRSSI:]
is obsolete.
Replacing this call is[YMSCBPeripheral initWithPeripheral:central:baseHi:baseLo:]
-
[YMSCBPeripheral updateRSSI]
is obsolete. -
[YMSCBCentralManager initWithKnownPeripheralNames:queue:]
is obsolete.
Replacing this call is[YMSCBCentralManager initWithKnownPeripheralNames:queue:delegate:]
-
[YMSCBCentralManager initWithKnownPeripheralNames:queue:useStoredPeripherals:]
is obsolete.
Replacing this call is[YMSCBCentralManager initWithKnownPeripheralNames:queue:userStoredPeripherals:delegate:]
- Issue #9 - OS X Support
YmsCoreBluetooth now supports OS X! Includes app target DeannaMac which replicates functionality found in Deanna for iOS.
Tested Mac Environment:
- OS X 10.8.3
- Cirago Bluetooth 4.0 USB Adapter
- iMac 27 Mid-2010
-
Issue #47 - rename YMSCBAppService to YMSCBCentralManager. Associated changes include:
- renaming DEAAppService to DEACentralManager
- rename variable cbAppService to centralManager
-
API change to fully embrace ObjectiveC block-based callbacks.
-
API change to map BLE operations to data object hierarchy.
API 0.93 is a BIG CHANGE. It is largely a rethink of YmsCoreBluetooth to support the pattern for hierarchical block-based operations. This will very much break code written for prior releases of YmsCoreBluetooth. That said, the changes should be fairly comprehensible and address the following points going forward:
- Improved understanding of API behavior: prior releases had too much implicit behavior ("magic") which made involuntary decisions for the developer using the API. Using blocks gives the developer a clearer and more structured view of the BLE transactions to be made.
- With the pattern for hierarchical block-based operations in place, a more structured way to add new API features. Like Winter, characteristic descriptors are coming.
- Block-based callbacks for central manager scanning, peripheral connection, and peripheral retrieval are now supported.
- Watchdog timeout for unanswered peripheral connection requests are now supported.
- Significant API changes to YMSCBCentralManager and YMSCBPeripheral detailed below.
YMSCBCentralManager (previously named YSMCBAppService) | ||
obsolete | - (void)persistPeripherals | Replaced by YMSCBStoredPeripherals |
obsolete | - (void)loadPeripherals | Replaced by YMSCBStoredPeripherals |
new | - (id)initWithKnownPeripheralNames:(NSArray *)nameList | Add support to optionally store peripherals. |
obsolete | - (void)connectPeripheral:(NSUInteger)index; | Use more accurate name |
replaced by | - (void)connectPeripheralAtIndex:(NSUInteger)index | |
obsolete | - (void)disconnectPeripheral:(NSUInteger)index; | Use more accurate name. |
replaced by | - (void)disconnectPeripheralAtIndex:(NSUInteger)index; | |
new | - (void)connectPeripheral:(YMSCBPeripheral *)peripheral | Mirror CBCentralManager method |
new | - (void)cancelPeripheralConnection:(YMSCBPeripheral *)peripheral; | Mirror CBCentralManager method |
new | - (void)connectPeripheral:(YMSCBPeripheral *)peripheral | Support block based connection |
new | - (void)retrieveConnectedPeripherals | Mirror CBCentralManager method |
new | - (void)retrieveConnectedPeripheralsWithBlock: | Support block based connection |
new | - (void)retrievePeripherals:(NSArray *)peripheralUUIDs | Mirror CBCentralManager method |
new | - (void)retrievePeripherals:(NSArray *)peripheralUUIDs | Support block based connection |
new | - (void)scanForPeripheralsWithServices:(NSArray *)serviceUUIDs | Support block based connection |
YMSCBPeripheral | ||
obsolete |
- (id)initWithPeripheral:(CBPeripheral *)peripheral
| Support parent property so that methods on parent can be called directly from an instance of YMSCBPeripheral. |
replaced by |
- (id)initWithPeripheral:(CBPeripheral *)peripheral
| |
new | - (void)discoverServices | Convenience method to call behavior from YMSCBCentralManager |
new | - (void)connect | Convenience method to call behavior from YMSCBCentralManager |
new | - (void)disconnect | Convenience method to call behavior from YMSCBCentralManager |
- Issue #37 - UI for SensorTag Device Information Service implemented.
- Bugfixes: #41, #42
- Issue #19 - First draft of Tutorial written
- Added initial support for launching a local notification when Deanna app in the background. The view controller for the SensorTag must be presented before going into the background for local notifications to work.
- Issue #34 - Updated YmsCoreBluetooth Documentation
- Improved API for reads and writes using either blocks or notifications.
- Issue #12 - Callback blocks for service requests implemented.
- Issue #22 - Support for reading SensorTag device info implemented.
- Issue #24 - API version implemented.
- Bugfix #31 - Remove all UI dependencies in YmsCoreBluetooth. Handling CBCentralManager state is an application UX issue.
- Bugfix #21 - YMSCBService now supports constructor with 128-bit base address.
- Issue #23 - Moved SensorTag specific methods (
requestConfig
,responseConfig
,turnOn
,turnOff
) from YMSCBService.
- Bugfix #5 to support multiple SensorTags is now in. With many thanks to Texas Instruments, a second SensorTag was donated to YmsCoreBluetooth to test for multiple peripherals.
- Support for deleting discovered peripherals is in.
- Support for discovering unknown peripherals is in.
- Bugfix #15 where connect button is blocked when scanning.
- Bugfixes on handling peripheral disconnects.
- Refactored
DEACBAppService
to support:- Separation of peripheral discovery by scanning from peripheral retrieval via stored UUID.
- Removed
NSNotification
messages to useCBCentralManagerDelegate
methods instead.
- Reorganized physical file directory structure to match that of Xcode project group structure.
- Added RSSI display to both peripheral screen and SensorTag screen.
- Added connect button per peripherals discovered.
- Initial support for multiple SensorTags. (This has not yet been tested, due to the fact that I have only 1 SensorTag to test.)
- First stable release.
- Support for communication with all sensors/services on a SensorTag.
- Initial documentation for YmsCoreBluetooth API and Deanna source code.