/*
|
* Copyright Cypress Semiconductor Corporation, 2014-2015 All rights reserved.
|
*
|
* This software, associated documentation and materials ("Software") is
|
* owned by Cypress Semiconductor Corporation ("Cypress") and is
|
* protected by and subject to worldwide patent protection (UnitedStates and foreign), United States copyright laws and international
|
* treaty provisions. Therefore, unless otherwise specified in a separate license agreement between you and Cypress, this Software
|
* must be treated like any other copyrighted material. Reproduction,
|
* modification, translation, compilation, or representation of this
|
* Software in any other form (e.g., paper, magnetic, optical, silicon)
|
* is prohibited without Cypress's express written permission.
|
*
|
* Disclaimer: THIS SOFTWARE IS PROVIDED AS-IS, WITH NO WARRANTY OF ANY
|
* KIND, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
* NONINFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
* FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes
|
* to the Software without notice. Cypress does not assume any liability
|
* arising out of the application or use of Software or any product or
|
* circuit described in the Software. Cypress does not authorize its
|
* products for use as critical components in any products where a
|
* malfunction or failure may reasonably be expected to result in
|
* significant injury or death ("High Risk Product"). By including
|
* Cypress's product in a High Risk Product, the manufacturer of such
|
* system or application assumes all risk of such use and in doing so
|
* indemnifies Cypress against all liability.
|
*
|
* Use of this Software may be limited by and subject to the applicable
|
* Cypress software license agreement.
|
*
|
*
|
*/
|
#import "RGBModel.h"
|
#import "CBMoralManager.h"
|
|
/*!
|
* @class RGBModel
|
*
|
* @discussion Class to handle the RGB service related operations
|
*
|
*/
|
|
@interface RGBModel()<cbCharacteristicManagerDelegate>
|
{
|
void (^cbCharacteristicHandler)(BOOL success, NSError *error);
|
void (^cbWriteCharacteristicHandler)(BOOL success, NSError *error);
|
CBCharacteristic *RGBCharacteristics;
|
BOOL isWriteSuccess;
|
}
|
|
@end
|
|
@implementation RGBModel
|
|
@synthesize redColor;
|
@synthesize greenColor;
|
@synthesize blueColor;
|
@synthesize intensity;
|
|
|
- (instancetype)init
|
{
|
self = [super init];
|
if (self) {
|
|
[self startDiscoverChar];
|
|
}
|
return self;
|
}
|
|
|
/*!
|
* @method startDiscoverChar
|
*
|
* @discussion Discovers the specified characteristics of a service..
|
*/
|
|
-(void)startDiscoverChar
|
{
|
isWriteSuccess = YES ;
|
[[CBMoralManager sharedManager] setCbCharacteristicDelegate:self];
|
|
for(CBService *service in [[CBMoralManager sharedManager] myPeripheral].services)
|
{
|
if([service.UUID isEqual:RGB_SERVICE_UUID] || [service.UUID isEqual:CUSTOM_RGB_SERVICE_UUID] )
|
{
|
[[[CBMoralManager sharedManager] myPeripheral] discoverCharacteristics:nil forService:service];
|
}
|
}
|
|
}
|
|
/*!
|
* @method updateCharacteristicWithHandler:
|
*
|
* @discussion Sets notifications or indications for the value of a specified characteristic.
|
*/
|
|
-(void)updateCharacteristicWithHandler:(void (^) (BOOL success, NSError *error))handler
|
{
|
cbCharacteristicHandler = handler;
|
|
}
|
|
|
/*!
|
* @method stopUpdate
|
*
|
* @discussion Stop notifications or indications for the value of a specified characteristic.
|
*/
|
|
-(void)stopUpdate
|
{
|
cbCharacteristicHandler = nil;
|
if ([[[CBMoralManager sharedManager] myService].UUID isEqual:RGB_SERVICE_UUID] || [[[CBMoralManager sharedManager] myService].UUID isEqual:CUSTOM_RGB_SERVICE_UUID])
|
{
|
for (CBCharacteristic *aChar in [[CBMoralManager sharedManager] myService].characteristics)
|
{
|
if ([aChar.UUID isEqual:RGB_CHARACTERISTIC_UUID] || [aChar.UUID isEqual:CUSTOM_RGB_CHARACTERISTIC_UUID] )
|
{
|
|
[[[CBMoralManager sharedManager] myPeripheral] setNotifyValue:NO forCharacteristic:aChar];
|
}
|
}
|
}
|
|
|
}
|
|
/*!
|
* @method writeColor:BColor:GColor:Intensity:With
|
*
|
* @discussion Write RGB colors and current intensity to specified characteristic.
|
*/
|
|
-(void)writeColor:(NSInteger)rColor BColor:(NSInteger)bColor GColor:(NSInteger)gColor Intensity:(NSInteger)lIntensity With:(void (^) (BOOL success, NSError *error))handler
|
{
|
cbWriteCharacteristicHandler = handler ;
|
if(isWriteSuccess && RGBCharacteristics)
|
{
|
|
self.redColor = rColor ;
|
self.greenColor = gColor;
|
self.blueColor = bColor;
|
self.intensity = lIntensity;
|
|
uint8_t val[] = {rColor,gColor,bColor,lIntensity}; //enter the value which you want to write.
|
|
NSData *valData = [NSData dataWithBytes:(void*)&val length:sizeof(val)];
|
[[[CBMoralManager sharedManager] myPeripheral] writeValue:valData forCharacteristic:RGBCharacteristics type:CBCharacteristicWriteWithResponse];
|
[self logColourData:valData];
|
isWriteSuccess = NO;
|
}
|
}
|
|
|
#pragma mark - CBManagerDelagate
|
|
/*!
|
* @method peripheral: didDiscoverCharacteristicsForService: error:
|
*
|
* @discussion Method invoked when characteristics are discovered for a service
|
*
|
*/
|
|
-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
|
{
|
if ([service.UUID isEqual:RGB_SERVICE_UUID] || [service.UUID isEqual:CUSTOM_RGB_SERVICE_UUID])
|
{
|
for (CBCharacteristic *aChar in service.characteristics){
|
if ([aChar.UUID isEqual:RGB_CHARACTERISTIC_UUID] || [aChar.UUID isEqual:CUSTOM_RGB_CHARACTERISTIC_UUID])
|
{
|
|
RGBCharacteristics = aChar;
|
[[[CBMoralManager sharedManager] myPeripheral] readValueForCharacteristic:aChar];
|
}
|
|
}
|
}
|
|
}
|
|
/*!
|
* @method peripheral: didUpdateValueForCharacteristic: error:
|
*
|
* @discussion Method invoked when the characteristic value changes
|
*
|
*/
|
|
-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
|
{
|
[self updateValues:characteristic error:error];
|
}
|
|
|
/*!
|
* @method peripheral: didWriteVlueForCharacteristic: error:
|
*
|
* @discussion Write acknowledgement for RGB colors and intensity to specified characteristic.
|
*/
|
|
-(void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
|
{
|
|
if(error)
|
{
|
isWriteSuccess = NO ;
|
cbWriteCharacteristicHandler(NO,error);
|
}
|
else
|
{
|
isWriteSuccess = YES ;
|
cbWriteCharacteristicHandler(YES,error);
|
}
|
|
[self logWriteStatusWithError:error];
|
}
|
|
/*!
|
* @method updateValues:error
|
*
|
* @discussion Initially get value from specified characteristic.
|
*/
|
|
-(void)updateValues:(CBCharacteristic *)characteristic error:(NSError *)error
|
{
|
if(error == nil)
|
{
|
if (([characteristic.UUID isEqual:RGB_CHARACTERISTIC_UUID] || [characteristic.UUID isEqual:CUSTOM_RGB_CHARACTERISTIC_UUID]) && characteristic.value)
|
{
|
NSData *data = [characteristic value]; // 1
|
const uint8_t *reportData = [data bytes];
|
|
self.redColor = reportData[0];
|
self.greenColor = reportData[1];
|
self.blueColor = reportData[2];
|
self.intensity = reportData[3];
|
cbCharacteristicHandler(YES,nil);
|
|
//RGB Set
|
}
|
else
|
{
|
cbCharacteristicHandler(NO,error);
|
}
|
}
|
else
|
{
|
cbCharacteristicHandler(NO,error);
|
}
|
}
|
|
/*!
|
* @method logColourData:
|
*
|
* @discussion Method to log the colour written to the device
|
*
|
*/
|
-(void) logColourData:(NSData *)data
|
{
|
[Utilities logDataWithService:[ResourceHandler getServiceNameForUUID:RGB_SERVICE_UUID] characteristic:[ResourceHandler getCharacteristicNameForUUID:RGB_CHARACTERISTIC_UUID] descriptor:nil operation:[NSString stringWithFormat:@"%@%@ %@",WRITE_REQUEST,DATA_SEPERATOR,[Utilities convertDataToLoggerFormat:data]]];
|
|
}
|
|
-(void) logWriteStatusWithError:(NSError *)error
|
{
|
if (error == nil)
|
{
|
[Utilities logDataWithService:[ResourceHandler getServiceNameForUUID:RGB_SERVICE_UUID] characteristic:[ResourceHandler getCharacteristicNameForUUID:RGB_CHARACTERISTIC_UUID] descriptor:nil operation:[NSString stringWithFormat:@"%@- %@",WRITE_REQUEST_STATUS,WRITE_SUCCESS]];
|
}
|
else
|
{
|
[Utilities logDataWithService:[ResourceHandler getServiceNameForUUID:RGB_SERVICE_UUID] characteristic:[ResourceHandler getCharacteristicNameForUUID:RGB_CHARACTERISTIC_UUID] descriptor:nil operation:[NSString stringWithFormat:@"%@- %@%@",WRITE_REQUEST_STATUS,WRITE_ERROR,[error.userInfo objectForKey:NSLocalizedDescriptionKey]]];
|
}
|
}
|
|
|
@end
|