bleCentralManager 蓝牙透传

//

//  bleCentralManager.m

//  MonitoringCenter

//

//  Created by David ding on 13-1-10.

//

//


#import "bleCentralManager.h"

#

@implementation bleCentralManager


#pragma mark -

#pragma mark Init

/******************************************************/

//          类初始化                                   //

/******************************************************/

// 初始化蓝牙

-(id)init{

    self = [super init];

    if (self) {

        _activeCentralManager = [[CBCentralManager allocinitWithDelegate:(id<CBCentralManagerDelegate>)self queue:dispatch_get_main_queue()];

        [self initProperty];

    }

    return self;

}


-(void)initProperty{

        _blePeripheralArray = [[NSMutableArray alloc]init];

}


#pragma mark -

#pragma mark Scanning

/****************************************************************************/

/*   Scanning                                    */

/****************************************************************************/

// UUID进行扫描

-(void)startScanning{

NSArray *uuidArray = [NSArray arrayWithObjects:[CBUUIDUUIDWithString:kConnectedServiceUUID], nil];

    // CBCentralManagerScanOptionAllowDuplicatesKey | CBConnectPeripheralOptionNotifyOnConnectionKey | CBConnectPeripheralOptionNotifyOnDisconnectionKey | CBConnectPeripheralOptionNotifyOnNotificationKey

NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumbernumberWithBool:NOforKey:CBCentralManagerScanOptionAllowDuplicatesKey];

[_activeCentralManager scanForPeripheralsWithServices:uuidArrayoptions:options];

}


// 停止扫描

-(void)stopScanning{

[_activeCentralManager stopScan];

}


// 扫缪复位

-(void)resetScanning{

    [self stopScanning];

    [self startScanning];

}


#pragma mark -

#pragma mark Connection/Disconnection

/****************************************************************************/

/* Connection/Disconnection                            */

/****************************************************************************/

// 开始连接

-(void)connectPeripheral:(CBPeripheral*)peripheral

{

if (![peripheral isConnected]){

        // 连接设备 

        [_activeCentralManager connectPeripheral:peripheral options:nil];

}

    else{

        // 检测已连接Peripherals

        float version = [[[UIDevice currentDevicesystemVersion]floatValue];

        if (version >= 6.0){

            [_activeCentralManager retrieveConnectedPeripherals];

        }

    }

}


// 断开连接

-(void)disconnectPeripheral:(CBPeripheral*)peripheral

{

    // 主动断开

    [_activeCentralManager cancelPeripheralConnection:peripheral];

    [self resetScanning];

}


#pragma mark -

#pragma mark CBCentralManager    // delegate methods

/****************************************************************************/

/* CBCentralManager*/

/****************************************************************************/

// 中心设备状态更新

-(void)centralManagerDidUpdateState:(CBCentralManager *)central

{

    //activeCentralManager = central;

    if ([_activeCentralManager isEqual:central]) {

        switch ([central state]){

                // 掉电状态

            case CBCentralManagerStatePoweredOff:

            {

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerPoweredOff;

                nCentralStateChange

                [self resetScanning];

                NSLog(@"CBCentralManagerStatePoweredOff\n");

                break;

            }

                

                // 未经授权的状态

            case CBCentralManagerStateUnauthorized:

            {

                /* Tell user the app is not allowed. */

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerUnauthorized;

                nCentralStateChange

                [self resetScanning];

                NSLog(@"CBCentralManagerStateUnauthorized\n");

                break;

            }

                

                // 未知状态

            case CBCentralManagerStateUnknown:

            {

                /* Bad news, let's wait for another event. */

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerUnknown;

                nCentralStateChange

                [self resetScanning];

                NSLog(@"CBCentralManagerStateUnknown\n");

                break;

            }

                

            case CBCentralManagerStateUnsupported:

            {

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerUnsupported;

                nCentralStateChange

                [self resetScanning];

                NSLog(@"CBCentralManagerStateUnsupported\n");

                break;

            }

                

                // 上电状态

            case CBCentralManagerStatePoweredOn:

            {

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerPoweredOn;

                nCentralStateChange

                [self startScanning];

                NSLog(@"CBCentralManagerStatePoweredOn\n");

                break;

            }

                

                // 重置状态

            case CBCentralManagerStateResetting:

            {

                // 更新状态

                _currentCentralManagerState =bleCentralDelegateStateCentralManagerResetting;

                nCentralStateChange

                [self resetScanning];

                NSLog(@"CBCentralManagerStateResetting\n");

                break;

            }

        }

    }

}

// 中心设备连接检索到的外围设备

-(void)centralManager:(CBCentralManager *)central didRetrieveConnectedPeripherals:(NSArray *)peripherals{

    if ([_activeCentralManager isEqual:central]) {

        for (CBPeripheral *aPeripheral in peripherals){

            [central connectPeripheral:aPeripheral options:nil];

        }

        // 更新状态

        _currentCentralManagerState =bleCentralDelegateStateRetrieveConnectedPeripherals;

        nCentralStateChange

    }

}


// 中心设备扫描外围

-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary*)advertisementData RSSI:(NSNumber *)RSSI{

    if ([_activeCentralManager isEqual:central]) {

        BOOL checkout = [selfcheckPeripheralFromBlePeripheralArray:peripheral];

        if (checkout == NO) {

            // 添加到新的Peripheral

            blePeripheral *bp = [[blePeripheral alloc]init];

            bp.activePeripheral = peripheral;

            [_blePeripheralArray addObject:bp];

        }

        

        // 更新状态

        _currentCentralManagerState =bleCentralDelegateStateDiscoverPeripheral;

        nCentralStateChange

    }

}


// 中心设备连接外围设备

-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{

    if ([_activeCentralManager isEqual:central]) {

        blePeripheral *bp = [selfgetBlePeripheralFromBlePeripheralArray:peripheral];

        if (bp != nil) {

            bp.activePeripheral = peripheral;

            // 如果当前设备是已连接设备开始扫描服务

            CBUUID *RecSerUUID     = [CBUUIDUUIDWithString:kReceiveDataServiceUUID];

            CBUUID  *SenSerUUID     = [CBUUIDUUIDWithString:kSendDataServiceUUID];

            NSArray *serviceArray= [NSArray arrayWithObjects:RecSerUUID, SenSerUUID, nil];

            [bp startPeripheral:peripheral DiscoverServices:serviceArray];

        }

        

        // 更新状态

        _currentCentralManagerState =bleCentralDelegateStateConnectPeripheral;

        nCentralStateChange

    }

}


// 中心设备断开连接

-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{

    if ([_activeCentralManager isEqual:central]) {

    }

    // 更新状态

    NSLog(@"domain:%@\nuserInfo:%@",error.domain, error.userInfo);

    _currentCentralManagerState =bleCentralDelegateStateDisconnectPeripheral;

    nCentralStateChange

    

}


/****************************************************************************/

/* check/get peripheral                            */

/****************************************************************************/

#pragma mark 查询peripheral函数

-(BOOL)checkPeripheralFromBlePeripheralArray:(CBPeripheral *)peripheral{

    BOOL checkout = NO;

    if (_blePeripheralArray.count > 0) {

        for (NSUInteger idx=0; idx<_blePeripheralArray.count; idx++) {

            blePeripheral *bp = [_blePeripheralArray objectAtIndex:idx];

            if ([peripheral isEqual:bp.activePeripheral]) {

                checkout = YES;

                break;

            }

        }

    }

    return checkout;

}


#pragma mark 获取peripheral函数

-(blePeripheral *)getBlePeripheralFromBlePeripheralArray:(CBPeripheral*)peripheral{

    blePeripheral *abp = nil;

    if (_blePeripheralArray.count > 0) {

        for (NSUInteger idx=0; idx<_blePeripheralArray.count; idx++) {

            blePeripheral *bp = [_blePeripheralArray objectAtIndex:idx];

            if ([peripheral isEqual:bp.activePeripheral]) {

                abp = bp;

                break;

            }

        }

    }

    return abp;

}


/****************************************************************************/

/*                                  END                                     */

/****************************************************************************/

@end

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值