// // WTSonarPenDriver.h // // Created by Water Lou on 8/7/14. // Copyright (c) 2014 First Water Tech Ltd. All rights reserved. // #import #import extern NSString *const _Nonnull WTSonarPenDriverStateChangedNotification; typedef NS_ENUM(NSInteger, WTAudioPenDriverState) { WTSonarPenDriverStateInit = 0, // wait for pen attach WTSonarPenDriverStateCalibrating = 1, // calc min value (when audio source just switched WTSonarPenDriverStateRunning = 2, // running WTSonarPenDriverStateCalibratingMax = 3, // calibrating max value WTSonarPenDriverStateNotSonarPen = 4, // headphone plugged but no a sonarpen, audio sound disabled WTSonarPenDriverStateWaitingForPermission = 5, // starting, wait for user permission for microphone WTSonarPenDriverStateNoMicrophonePermission = 6, // no started, no microphone permission }; @class WTSonarPenDriver; @protocol WTSonarPenDriverDelegate @optional - (void)sonarPenButtonPressed:(WTSonarPenDriver* _Nonnull)driver; @end @interface WTSonarPenDriver : NSObject - (instancetype _Nonnull)init NS_UNAVAILABLE; // please call initWithApplication instead - (instancetype _Nonnull) initWithApplication: (UIApplication * _Nullable)application NS_DESIGNATED_INITIALIZER; - (void) start; - (void) stop; - (BOOL) isPenDown; // is pen touched - (CGFloat) pressure; // current pressure - (BOOL) isPenAttached; - (WTAudioPenDriverState) state; // pen drive state /// If button on the pen is pressed - (BOOL) isButtonDown; // set to YES, the driver will use current pressure as idle state value // developer can set this to YES will no touch is detected, and NO with touch @property (nonatomic) BOOL calibratingIdleValue; @property (nonatomic) BOOL shouldCheckPenOnStart; // detect pen when plug @property (nonatomic, weak, nullable) id delegate; //- (void)startFullCalibration; @end BOOL isHeadphoneplugged(AVAudioSessionRouteDescription * _Nonnull route);