From a502776f1cefb95cd30f78bb39221ffc7764c98a Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Thu, 24 Mar 2016 21:40:08 +0000 Subject: [PATCH] Added spoome defines. FossilOrigin-Name: 4dffb6ad7468c1fc9ac28b27f6d7925173d20c570bd87b886588946bb4badd18 --- src/cw/dot11.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/src/cw/dot11.h b/src/cw/dot11.h index 326965c1..61a1fc5a 100644 --- a/src/cw/dot11.h +++ b/src/cw/dot11.h @@ -2,14 +2,69 @@ #define __DOT11_H #include +#include extern const uint8_t dot11_tab_br[256]; -#define dot11_br(b) (dot11_tab_br[b]) -#define dot11_get_version(frame) (dot11_br(frame[0])&0x03) -#define dot11_get_type(frame) ((dot11_br(frame[0])&0x0c) >> 2) -#define dot11_get_subtype(frame) ((dot11_br(frame[0])&0x7f) >> 4) +#define dot11_get_byte(ptr) (*(ptr)) +#define dot11_put_byte(ptr,b) (*(ptr) = b) + +static inline int dot11_put_word(uint8_t *ptr,uint16_t w) +{ + dot11_put_byte(ptr,w&0xff); + dot11_put_byte(ptr+1,w>>8); + return 2; +} + +static inline uint16_t dot11_get_word(uint8_t *ptr) +{ + uint16_t w; + w = dot11_get_byte(ptr+1); + w|= dot11_get_byte(ptr)<<8; + return w; +} + +#define dot11_get_version(frame) ((frame[1])&0x03) +#define dot11_get_type(frame) (((frame[1])&0x0c) >> 2) +#define dot11_get_subtype(frame) (((frame[1])&0xf0) >> 4) +/** + * Get Frame Control field + * @param frame + * @return Frame Control field + */ +#define dot11_get_fc(frame) dot11_get_word(frame) + +#define dot11_get_duration(frame) dot11_get_word(frame+2) + +static inline void dot11_get_address(uint8_t * dst, uint8_t *frame, int field) +{ + uint8_t *s = frame+4+field*6; + memcpy(dst,s,6); +} + +#define dot11_get_address1(dst,frame) dot11_get_address(dst,frame,0) +#define dot11_get_address2(dst,frame) dot11_get_address(dst,frame,1) +#define dot11_get_address3(dst,frame) dot11_get_address(dst,frame,2) + +#define dot11_get_sequence_control(frame) dot11_get_word(frame+22) + +#define DOT11_FC_FLAG_FROM_DS 0x100 +#define DOT11_FC_FLAG_TO_DS 0x200 +#define DOT11_FC_FLAG_MOREFRAGS 0x400 +#define DOT11_FC_FLAG_RETRY 0x800 +#define DOT11_FC_FLAG_POWERMGMT 0x1000 +#define DOT11_FC_FLAG_MOREDATA 0x2000 +#define DOT11_FC_FLAG_PROTECTED 0x4000 +#define DOT11_FC_FLAG_ORDER 0x8000 + +#define dot11_fc_get_version(fc) ((fc)&0x3) +#define dot11_fc_get_type(fc) (((fc)&0x0c)>>2) +#define dot11_fc_get_subtype(fc) (((fc)&0xf0)>>4) +#define dot11_fc_get_from_ds(fc) (fc&DOT11_FC_FLAG_FROM_DS?1:0) +#define dot11_fc_get_to_ds(fc) (fc&DOT11_FC_FLAG_TO_DS?1:0) +#define dot11_fc_get_more_fragments(fc) (fc&DOT11_FC_FLAG_MOREFRAGS?1:0) + #endif