//
//  PPDeviceManager.h
//  PaoPao
//
//  Created by lvwang2002 on 14/12/11.
//  Copyright (c) 2014年 paopao. All rights reserved.
//

/** 
 *  version:0.1.9
 *  更新时间:2016-06-30 16:00
 *  更新内容:1.修改dataID方法
 * 
 *  version:0.1.8
 *  更新时间:2016-06-30 14:00
 *  更新内容:1.支持血压低电检测.
 *				  2.增加dataID
 *
 *  version:0.1.7
 *  更新时间:2016-06-03 15:07
 *  更新内容:1.支持血酮设备.
 *
 *  version:0.1.6
 *  更新时间:2016-05-25 16:35
 *  更新内容:1.攀高血压计发送指令放在单独现成.
 *
 *  version:0.1.5
 *  更新时间:2016-05-25 14:35
 *  更新内容:1.增加健壮性 2.脉搏波6秒没有数值的话 报错.
 *
 *	version:0.1.4
 *  更新时间:2016-05-24 15:51
 *  更新内容:增加血压计连接的健壮性.
 *
 *  version:0.1.3
 *  更新时间:2016-05-24 14:40
 *  更新内容:脉搏波血压计增加通讯健壮性.
 *
 *  version:0.1.2
 *  更新时间:2016-05-21 13:40
 *  更新内容:修改根据所有类型设备获取内容不正确的问题(追加).
 *
 *  version:0.1.1
 *  更新时间:2016-05-21 13:00
 *  更新内容:修改根据所有类型设备获取内容不正确的问题.
 *
 */
 

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
#import "NSArray+LinqExtensions.h"
#import "BLEDevice.h"
#import "ENDLog.h"

typedef NS_ENUM(NSUInteger, ENSearchedType) {
	ENSearchedAllType,		//所有设备
	ENSearchedGlucoType,  //血糖
	ENSearchedBPType,		  //血压
	ENSearchedCholesterolType,	//血脂
	ENSearchedKetoneType //血酮
};

typedef NS_ENUM(NSUInteger, ENBTStatus) {
	ENBTPowerOnStatus,		//蓝牙开关开
	ENBTPowerOffStatus,		//蓝牙开关关
	ENBTPreparedStatus 	  //蓝牙开关准备阶段
};



@protocol DeviceManagerProtocol;
@protocol DeviceDataProtocol;
@class BLEDevice;
@interface ENBLEDeviceManager : NSObject<CBCentralManagerDelegate,CBPeripheralDelegate>

@property(nonatomic,weak)id<DeviceManagerProtocol>deviceManagerDelegate;
@property(nonatomic,weak)id<DeviceDataProtocol>deviceDataDelegate;

@property(nonatomic,strong)CBCentralManager *centralManager;
@property ENBTStatus BTStatus;

/** 创建设备的相关单例 */
+(instancetype)shareDeviceManager;

/** 判断是否有设备正在已经连接 */
-(BOOL)hasDeviceConnectedWithType:(ENSearchedType)type;

/** 判断是否有设备正在连接 */
-(BOOL)hasDeviceConnectingWithType:(ENSearchedType)type;


/** 当前连接的设备 */
-(BLEDevice *)getCurrentConnectedDeviceWithType:(ENSearchedType)type;

/** 获得当前的所有扫描到的设备 */
-(NSArray *)getSearchedDevices;

/** 更新设备刷新列表 */
-(void)postUpdateDeviceList;

/** 开始扫描 */
-(void)startScan;

/** 停止扫描 */
-(void)stopScan;

/** 指定扫描设备的类型 */
-(void)setSearchedDeviceType:(ENSearchedType)searchedDeviceType;

/** 根据UUID找到指定的设备 */
-(BLEDevice *)getDeviceWithUUID:(NSUUID *)uuid;

/** 设置是否输出 */
-(void)setIsShowLog:(BOOL)isShow;

/** 处理错误 */
-(void)uhoh:(BLEDevice *)device;

/** 断开连接 */
-(void)disconnectAllDevices;

/** 删除设备 */
-(void)removeDevice:(BLEDevice *)device;

-(void)run;

/** 返回队列  */
-(dispatch_queue_t)getPostQueue;
@end

/** 低功耗蓝牙相关协议 */
@protocol DeviceManagerProtocol <NSObject>

/** 找到新的设备 */
@optional
-(void)didDiscoverDevice:(BLEDevice *)device IsNewly:(BOOL)isNewly;
/** 找到的设备列表更新 */

@optional
/** 定时获取所有的设备 */
-(void)didUpdateSearchedDevices:(NSArray *)searchedDevices;

@optional
/** 获取当前蓝牙的状态  */
-(void)didUpdateBTStatus:(ENBTStatus)status;

@optional
-(void)didConnectedDevice:(BLEDevice *)device;
@end

@protocol DeviceDataProtocol <NSObject>
@optional
-(void)getData:(NSData *)data Peripheral:(CBPeripheral *)peripheral;

@end

