// // BlufiFrameCtrlData.m // EspBlufi // // Created by AE on 2020/6/9. // Copyright © 2020 espressif. All rights reserved. // #import "BlufiFrameCtrlData.h" @interface BlufiFrameCtrlData() @property(assign, nonatomic,)Byte value; @end @implementation BlufiFrameCtrlData enum { PositionEncrypted = 0, PositionChecksum, PositionDataDirection, PositionRequireAck, PositionFrag, }; - (instancetype)initWithValue:(Byte)value { self = [super init]; if (self) { _value = value; } return self; } - (BOOL)check:(uint32_t)position { return (_value >> position & 1) == 1; } - (BOOL)isEncrypted { return [self check:PositionEncrypted]; } - (BOOL)isChecksum { return [self check:PositionChecksum]; } - (BOOL)isAckRequirement { return [self check:PositionRequireAck]; } - (BOOL)hasFrag { return [self check:PositionFrag]; } + (Byte)getFrameCtrlValueWithEncrypted:(BOOL)encrypted checksum:(BOOL)checksum direction:(DataDirection)direction requireAck:(BOOL)ack hasFrag:(BOOL)frag { Byte frame = 0; if (encrypted) { frame |= (1 << PositionEncrypted); } if (checksum) { frame |= (1 << PositionChecksum); } if (direction == DataInput) { frame |= (1 << PositionDataDirection); } if (ack) { frame |= (1 << PositionRequireAck); } if (frag) { frame |= (1 << PositionFrag); } return frame; } @end