//
//  BPMacroFile.h
//  BP_SDKDemo
//
//  Created by zhiwei jing on 14-2-25.
//  Copyright (c) 2014年 zhiwei jing. All rights reserved.
//



#ifndef BP_SDKDemo_BPMacroFile_h
#define BP_SDKDemo_BPMacroFile_h

#import "HealthUser.h"
#import "BPController.h"

/**
 BP error code
 */
typedef NS_ENUM(NSUInteger, BPDeviceError) {
    /// Unable to take measurements due to arm/wrist movements.
    BPError0 = 0,
    /// Failed to detect systolic pressure
    BPError1,
    /// Failed to detect diastolic pressure
    BPError2,
    /// Pneumatic system blocked or cuff is too tight during inflation
    BPError3,
    /// Pneumatic system leakage or cuff is too loose during inflation
    BPError4,
    /// Cuff pressure reached over 300mmHg
    BPError5,
    /// Cuff pressure reached over 15 mmHg for more than 160 seconds
    BPError6,
    /// Data retrieving error
    BPError7,
    /// Data retrieving error
    BPError8,
    /// Data retrieving error
    BPError9,
    /// Data retrieving error
    BPError10,
    /// Communication Error
    BPError11,
    /// Communication Error
    BPError12,
    /// Low battery
    BPError13,
    /// Device bluetooth set failed
    BPError14,
    /// Systolic exceeds 260mmHg or diastolic exceeds 199mmHg
    BPError15,
    /// Systolic below 60mmHg or diastolic below 40mmHg
    BPError16,
    /// Arm/wrist movement beyond range
    BPError17,
    /// Heart rate in measure result exceeds max limit
    BPError18,
    /// Heart rate in measure result exceeds min limit
    BPError19,
    /// PP(Average BP) exceeds limit
    BPError20,
    /// User stop measure(for ABPM history measurement only)
    BPErrorUserStopMeasure,
    /// device error, error message displayed automatically
    BPNormalError = 30,
    /// Abnormal communication
    BPOverTimeError,
    /// Abnormal communication
    BPNoRespondError,
    /// device is out of communication range.
    BPBeyondRangeError,
    /// device is disconnected.
    BPDidDisconnect,
    /// measurement has been stopped.
    BPAskToStopMeasure,
    /// 36 device is busy doing other things
    BPDeviceBusy,
    /// Parameter input error.
    BPInputParameterError = 400,
    /// Parameter input error.
    BPInvalidOperation = 402,
    //Unsupported
    BPDeviceErrorUnsupported,
    //time out
    BPDeviceError_CommunicationTimeout,
};

/**
 BP unit
 */
typedef NS_ENUM(NSUInteger, BPUnit) {
    /// Unknown
    BPUnit_Unknown = 0,
    /// mmHg
    BPUnit_mmHg = 1,
    /// kPa
    BPUnit_kPa = 2,
};


typedef void(^BlockEnergyDetailValue)(NSNumber *energyValue,NSNumber *mVolt, NSNumber* measureTimesLeft);
typedef void(^BlockEnergyValue)(NSNumber *energyValue);
typedef void(^BlockEnergyState)(NSNumber *energyState);
typedef void(^BlockError)(BPDeviceError error);
typedef void(^BlockDeviceFunction)(NSDictionary *functionDict);
typedef void(^BlockBlueSet)(BOOL isOpen);
typedef void(^BlockAngle)(NSDictionary *angleDict);
typedef void(^BlockPressure)(NSArray *pressureArr);
typedef void(^BlockWavelet)(NSArray *waveletArr);
typedef void(^BlockZero)(BOOL isComplete);
typedef void(^BlockMeasureResult)(NSDictionary *resultDict);

typedef void(^BlockBachCount)(NSNumber *count);
typedef void(^BlockBachProgress)(NSNumber *progressValue);
typedef void(^BlockBachArray)(NSArray *bachArray);
typedef void(^BlockBachFinished)(BOOL finishFlag);

typedef void(^BlockAskMeasureTime)(NSDictionary *measureTimeDict);//Deprecated
typedef void(^BlockSetMeasureTime)(NSDictionary *setResult);//Deprecated

typedef void(^BlockSuccess)(void);

typedef void(^BlockUserAuthentication)(UserAuthenResult result);//the result of userID verification
typedef void(^BlockSetUserID)(BOOL finishFlag);

typedef void(^BlockResult)(BOOL result);

typedef void(^BlockDeviceDate)(NSString * date);

typedef void(^BlockRedWaveDic)(NSDictionary *redWaveDict);

typedef void(^BlockMeasureStatus)(NSDictionary *statusDict);

typedef void(^BlockDisplayStatus)(NSDictionary *statusDict);

typedef void(^BlockDeviceIDPS)(NSDictionary *idpsDict);


#define BP3ConnectNoti      @"BP3ConnectNoti"
#define BP3DisConnectNoti   @"BP3DisConnectNoti"
#define BP5ConnectNoti      @"BP5ConnectNoti"
#define BP5DisConnectNoti   @"BP5DisConnectNoti"
#define BP7ConnectNoti      @"BP7ConnectNoti"
#define BP7DisConnectNoti   @"BP7DisConnectNoti"

#define BP3LDiscover        @"BP3LDiscover"
#define BP3LConnectFailed   @"BP3LConnectFailed"
#define BP3LConnectNoti     @"BP3LConnectNoti"
#define BP3LDisConnectNoti  @"BP3LDisConnectNoti"

#define BP5SDiscover        @"BP5SDiscover"
#define BP5SConnectFailed   @"BP5SConnectFailed"
#define BP5SConnectNoti     @"BP5SConnectNoti"
#define BP5SDisConnectNoti  @"BP5SDisConnectNoti"

#define BP5SRWDiscover        @"BP5SRWDiscover"
#define BP5SRWConnectFailed   @"BP5SRWConnectFailed"
#define BP5SRWConnectNoti     @"BP5SRWConnectNoti"
#define BP5SRWDisConnectNoti  @"BP5SRWDisConnectNoti"

#define BP7SDiscover        @"BP7SDiscover"
#define BP7SConnectFailed   @"BP7SConnectFailed"
#define BP7SConnectNoti     @"BP7SConnectNoti"
#define BP7SDisConnectNoti  @"BP7SDisConnectNoti"

#define KN550BTDiscover     @"KN550BTDiscover"
#define KN550BTConnectFailed   @"KN550BTConnectFailed"
#define KN550BTConnectNoti  @"KN550BTConnectNoti"
#define KN550BTDisConnectNoti  @"KN550BTDisConnectNoti"


#define KN550LTDiscover     @"KN550LTDiscover"
#define KN550LTConnectFailed   @"KN550LTConnectFailed"
#define KN550LTConnectNoti  @"KN550LTConnectNoti"
#define KN550LTDisConnectNoti  @"KN550LTDisConnectNoti"

#define KD926Discover       @"KD926Discover"
#define KD926ConnectFailed  @"KD926ConnectFailed"
#define KD926ConnectNoti    @"KD926ConnectNoti"
#define KD926DisConnectNoti @"KD926DisConnectNoti"

#define KD723Discover       @"KD723Discover"
#define KD723ConnectFailed  @"KD723ConnectFailed"
#define KD723ConnectNoti    @"KD723ConnectNoti"
#define KD723DisConnectNoti @"KD723DisConnectNoti"

#define KD723_V2Discover       @"KD723_V2Discover"
#define KD723_V2ConnectFailed  @"KD723_V2ConnectFailed"
#define KD723_V2ConnectNoti    @"KD723_V2ConnectNoti"
#define KD723_V2DisConnectNoti @"KD723_V2DisConnectNoti"


#define KD5811BTDiscover        @"KD5811BTDiscover"
#define KD5811BTConnectFailed   @"KD5811BTConnectFailed"
#define KD5811BTConnectNoti     @"KD5811BTConnectNoti"
#define KD5811BTDisConnectNoti  @"KD5811BTDisConnectNoti"

#define ABPMDiscover        @"ABPMDiscover"
#define ABPMConnectFailed   @"ABPMConnectFailed"
#define ABPMConnectNoti     @"ABPMConnectNoti"
#define ABPMDisConnectNoti  @"ABPMDisConnectNoti"

#define BP5CDiscover        @"BP5CDiscover"
#define BP5CConnectFailed   @"BP5CConnectFailed"
#define BP5CConnectNoti     @"BP5CConnectNoti"
#define BP5CDisConnectNoti  @"BP5CDisConnectNoti"

#define ContinuaBPDiscover        @"ContinuaBPDiscover"
#define ContinuaBPConnectFailed   @"ContinuaBPConnectFailed"
#define ContinuaBPConnectNoti     @"ContinuaBPConnectNoti"
#define ContinuaBPDisConnectNoti  @"ContinuaBPDisConnectNoti"

#define ABIConnectNoti      @"ABIConnectNoti"
#define ABIDisConnectNoti   @"ABIDisConnectNoti"
#define ArmKey    @"ABI-ARM"
#define LegKey    @"ABI-Leg"
#define ArmConnectNoti      @"ArmConnectNoti"
#define ArmDisConnectNoti   @"ArmDisConnectNoti"

//#define BPDeviceID      @"ID"
//#define BPSDKRightApi   @"OpenApiBP"

//result
#define kResultBPSYS @"sys"
#define kResultBPDIA @"dia"
#define kResultBPPulse @"heartRate"
#define kResultBPIHB @"irregular"
#define kResultBPHSD @"hsdValue"
#define kResultBPChooseHand @"chooseHand"
#define kResultBPBodyMove @"bodyMovement"
#define kResultBPStartAngle @"startAngle"
#define kResultBPAngleChange @"measureAngleChange"
#define kResultBPDataID @"dataID"
#define kResultBPMeasureDate @"time"
#define kResultBPMeasureDateTimeZoneInMin @"timeZoneInMin"
#define kResultBPSchemeID @"schemeID"
#define kResultBPHistoryIndex @"historyIndex"
#define kResultBPUnit @"unit"

#define kResultBPIsRightTime @"isRightTime"

#define kResultBPIsAutoMeasure @"isAutoMeasure"
#define kResultBPRemeasureMode @"remeasureMode"
#define kResultBPHasRawPressure @"hasRawPressure"
#define kResultBPStartMeasureAngle @"startMeasureAngle"
#define kResultBPMeasureAngleDelta @"measureAngleDelta"
#define kResultBPIsMeasureResultFailed @"isMeasureResultFailed"
#define kResultBPMeasureResultErrorCode @"measureResultErrorCode"
#define kResultBPMeasureResultRawPressure @"measureResultRawPressure"
#define kResultBPActivityStrengthList @"activityStrengthList"
#define kResultBPActivityStrengthLevel @"level"
#define kResultBPActivityStrengthAngle @"angle"
#define kResultBPActivityStrengthIsSleeping @"isSleeping"

//function
#define kFunctionBPUpAirMeasure @"upAirMeasureFlg"
#define kFunctionBPArmMeasure @"armMeasureFlg"
#define kFunctionBPHaveAngleSensor @"haveAngleSensor"
#define kFunctionBPSupportPowerOff @"havePowerOff"
#define kFunctionBPSupportOffline @"haveOffline"
#define kFunctionBPSupportClearMemory @"haveClearMemory"
#define kFunctionBPSupportBTConnectBack @"haveBlue"
#define kFunctionBPBTConnectBackOpen @"blueOpen"
#define kFunctionBPOfflineOpen @"offlineOpen"
#define kFunctionBPHaveHSD @"haveHSD"
#define kFunctionBPHaveAngleSet @"haveAngleSet"
#define kFunctionBPAutoLoopMeasureModel @"autoLoopMeasureModel"
#define kFunctionBPAutoConnect @"autoConnect"
#define kFunctionBPReConnectSwitch @"reConnectSwitch"
#define kFunctionBPhasOfflineSetingFlg @"offlineSetingFlg"
#define kFunctionBPofflineMeasureFlg @"offlineMeasureFlg"
#define kFunctionBPbtfunctionFlg @"btfunctionFlg"

#define kFunctionBPSupportUnitSetting @"hasUnitSetting"
#define kFunctionBPCurrentUnitIsKPa @"unitKPa"
#define kFunctionBPMutableUpload @"mutableUpload"
#define kFunctionBPDFU @"selfUpdate"
#define kFunctionBPSupportMoveDetect @"hasMoveDetect"
#define kFunctionBPSupportAlertSetting @"hasAlertSetting"
#define kFunctionBPSupportRawPressure @"hasRawPressure"
#define kFunctionBPRawPressureFormat @"rowPressureFormat"
#define kFunctionBPBackLightControl @"haveBackLightSetting"
#define kFunctionBPClockDisplayControl @"haveClockShowSetting"
#define kFunctionBPMaxHistoryCount @"maxHistoryCount"
#define kFunctionBPAMPM   @"is24Hour"
#define kFunctionBPDeviceTime   @"deviceTime"

#define kFunctionBPDeviceSYSTime   @"deviceSysTime"

#define kFunctionBPLastOperatingState @"lastOperatingState"
#define kFunctionBPHaveRepeatedlyMeasure @"haveRepeatedlyMeasure"

#define kFunctionBPMemoryGroup @"memoryGroup"

#define kFunctionBPMaxMemoryCapacity @"maxMemoryCapacity"
#define kFunctionBPHaveShowUnitSetting @"haveShowUnitSetting"
#define kFunctionBPShowUnit @"showUnit"

#define kFunctionBPCuffLooseFlg @"haveCuffLooseFlg"

#define kFunctionBPBodyMovementFlg @"haveBodyMovementFlg"

#define kFunctionBPCurrentUser @"currentUser"

#endif
