// // BlufiClient.h // EspBlufi // // Created by AE on 2020/6/9. // Copyright © 2020 espressif. All rights reserved. // #import #import #import "BlufiConstants.h" #import "BlufiStatusResponse.h" #import "BlufiScanResponse.h" #import "BlufiVersionResponse.h" #import "BlufiConfigureParams.h" NS_ASSUME_NONNULL_BEGIN #define BLUFI_VERSION @"2.1.0" @protocol BlufiDelegate; @interface BlufiClient : NSObject /*! * @property delegate * * @discussion The delegate object that will receive Blufi events. */ @property(weak, nonatomic, nullable)id blufiDelegate; /*! * @property delegate * * @discussion The delegate object that will receive central events. */ @property(weak, nonatomic, nullable)id centralManagerDelete; /*! * @property peripheralDelegate * * @discussion The delegate object that will receive peripheral events. */ @property(weak, nonatomic, nullable)id peripheralDelegate; /*! * @property peripheralDelegate * * @discussion The maximum length of each Blufi packet, the excess part will be subcontracted. */ @property(assign, nonatomic)NSInteger postPackageLengthLimit; /*! * @method connect: * * @param identifier CBPeripheral's identifier * * @discussion Establish a BLE connection with CBPeripheral */ - (void)connect:(NSString *)identifier; /*! * @method close * * @discussion Close the client */ - (void)close; /*! * @method negotiateSecurity * * @discussion Negotiate security with device. * The result will be notified in blufi:didNegotiateSecurity: */ - (void)negotiateSecurity; /*! * @method requestCloseConnection * * @discussion Request device to disconnect the BLE connection */ - (void)requestCloseConnection; /*! * @method requestDeviceVersion * * @discussion Request to get device version. * The result will notified in blufi:didReceiveDeviceVersionResponse:status: */ - (void)requestDeviceVersion; /*! * @method requestDeviceStatus * * @discussion Request to get device current status. * The result will be notified in blufi:didReceiveDeviceStatusResponse:status: */ - (void)requestDeviceStatus; /*! * @method requestDeviceScan * * @discussion Request to get wifi list that the device scanned. * The wifi list will be notified in blufi:didReceiveDeviceScanResponse:status: */ - (void)requestDeviceScan; /*! * @method configure: * * @discussion Configure the device to a station or soft AP. * The posted result will be notified in blufi:didPostConfigureParams: */ - (void)configure:(BlufiConfigureParams *)params; /*! * @method postCustomData: * * @discussion Request to post custom data to device. * The posted result will be notified in blufi:didPostCustomData:status: */ - (void)postCustomData:(NSData *)data; @end typedef enum { StatusSuccess = 0, StatusFailed = 100, StatusInvalidRequest, StatusWriteFailed, StatusInvalidData, StatusBLEStateDisable, StatusException, } BlufiStatusCode; // Blufi Callback @protocol BlufiDelegate @optional /*! * @method blufi:gettPrepared:service:writeChar:notifyChar: * * @param client BlufiClient * @param status see BlufiStatusCode * @param service nil if discover Blufi service failed * @param writeChar nil if discover Blufi write characteristic failed * @param notifyChar nil if discover Blufi notify characteristic failed * * @discussion Invoked after client set notifyChar notification enable. User can post BluFi packet now. */ - (void)blufi:(BlufiClient *)client gattPrepared:(BlufiStatusCode)status service:(nullable CBService *)service writeChar:(nullable CBCharacteristic *)writeChar notifyChar:(nullable CBCharacteristic *)notifyChar; /*! * @method blufi:gattNotification:packageType:subType: * * @param client BlufiClient * @param data Blufi data * @param pkgType Blufi package type * @param subType Blufi subtype * * @return true if the delegate consumed the notification, false otherwise. * * @discussion Invoked when receive Gatt notification */ - (BOOL)blufi:(BlufiClient *)client gattNotification:(NSData *)data packageType:(PackageType)pkgType subType:(SubType)subType; /*! * @method blufi:didReceiveError: * * @param client BlufiClient * @param errCode error code * * @discussion Invoked when received error code from device */ - (void)blufi:(BlufiClient *)client didReceiveError:(NSInteger)errCode; /*! * @method blufi:didNegotiateSecurity: * * @param client BlufiClient * @param status see BlufiStatusCode, StatusSuccess means negotiate security success. * * @discussion Invoked when negotiate security over with device */ - (void)blufi:(BlufiClient *)client didNegotiateSecurity:(BlufiStatusCode)status; /*! * @method blufi:didPostConfigureParams: * * @param client BlufiClient * @param status see BlufiStatusCode, StatusSuccess means post data success. * * @discussion Invoked when post config data over */ - (void)blufi:(BlufiClient *)client didPostConfigureParams:(BlufiStatusCode)status; /*! * @method blufi:didReceiveDeviceVersionResponse:status: * * @param client BlufiClient * @param response BlufiVersionResponse * @param status see BlufiStatusCode, StatusSuccess means response is valid. * * @discussion invoked when received device version */ - (void)blufi:(BlufiClient *)client didReceiveDeviceVersionResponse:(nullable BlufiVersionResponse *)response status:(BlufiStatusCode)status; /*! * @method blufi:didReceiveDeviceStatusResponse:status: * * @param client BlufiClient * @param response BlufiStatusResponse * @param status see BlufiStatusCode, StatusSuccess means response is valid. * * @discussion Invoked when received device status. */ - (void)blufi:(BlufiClient *)client didReceiveDeviceStatusResponse:(nullable BlufiStatusResponse *)response status:(BlufiStatusCode)status; /*! * @method blufi:didReceiveDeviceScanResponse:status: * * @param client BlufiClient * @param scanResults scan result array * @param status see BlufiStatusCode, StatusSuccess means response is valid. * * @discussion Invoked when received device scan results */ - (void)blufi:(BlufiClient *)client didReceiveDeviceScanResponse:(nullable NSArray *)scanResults status:(BlufiStatusCode)status; /*! * @method blufi:didPostCustomData:status: * * @param client BlufiClient * @param data posted * @param status see BlufiStatusCode, StatusSuccess means post data success * * @discussion Invokded when post custom data success */ - (void)blufi:(BlufiClient *)client didPostCustomData:(NSData *)data status:(BlufiStatusCode)status; /*! * @method blufi:didReceiveCustomData:status: * *@param client BlufiClient *@param data received *@param status see BlufiStatusCode, StatusSuccess means receive data success * */ - (void)blufi:(BlufiClient *)client didReceiveCustomData:(NSData *)data status:(BlufiStatusCode)status; @end NS_ASSUME_NONNULL_END