diff options
author | David Herrmann <dh.herrmann@gmail.com> | 2013-10-30 17:09:58 +0100 |
---|---|---|
committer | David Herrmann <dh.herrmann@gmail.com> | 2013-10-30 17:09:58 +0100 |
commit | 0e135f0824380815ae3a4944827f394aaaeff3da (patch) | |
tree | 1ce476b91eaff11fae5ff224ee4217eef8a14ddf | |
parent | e78a4345d4d034ff53088c3e4226c445c9cc4143 (diff) |
wfd: extend spec-header
Add missing IE subelement bits and definitions to the wfd-defs header.
Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
-rw-r--r-- | src/openwfd/wfd_defs.h | 347 |
1 files changed, 347 insertions, 0 deletions
diff --git a/src/openwfd/wfd_defs.h b/src/openwfd/wfd_defs.h index 03ac832..e0890d1 100644 --- a/src/openwfd/wfd_defs.h +++ b/src/openwfd/wfd_defs.h @@ -49,6 +49,12 @@ extern "C" { #define OPENWFD__WFD_PACKED __attribute__((__packed__)) /* + * TODO: WFD 5.2.7 defines service-discovery frames. wpa-supplicant currently + * does not support custom OUI fields. Fix this and then add support for + * WFD service discovery. + */ + +/* * IE elements */ @@ -164,6 +170,347 @@ struct openwfd_wfd_ie_sub_dev_info { uint16_t max_throughput; } OPENWFD__WFD_PACKED; +/* + * IE subelement associated BSSID + */ + +struct openwfd_wfd_ie_sub_assoc_bssid { + uint8_t bssid[6]; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement audio formats + */ + +/* lpcm modes; 2C_16_48000 is mandatory */ +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_LPCM_2C_16_44100 0x00000001 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_LPCM_2C_16_48000 0x00000002 + +/* aac modes */ +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AAC_2C_16_48000 0x00000001 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AAC_4C_16_48000 0x00000002 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AAC_6C_16_48000 0x00000004 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AAC_8C_16_48000 0x00000008 + +/* ac3 modes */ +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AC3_2C_16_48000 0x00000001 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AC3_4C_16_48000 0x00000002 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_AC3_6C_16_48000 0x00000004 + +/* audio latency; encoded in multiples of 5ms */ +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_UNKNOWN_LATENCY 0x00 +#define OPENWFD_WFD_IE_SUB_AUDIO_FORMATS_LATENCY_FROM_MS(_ms) \ + (((_ms) + 4ULL) / 5ULL) + +struct openwfd_wfd_ie_sub_audio_formats { + uint32_t lpcm_modes; + uint8_t lpcm_latency; + uint32_t aac_modes; + uint8_t aac_latency; + uint32_t ac3_modes; + uint8_t ac3_latency; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement video formats + * Multiple video-subelements are allowed, one for each supported 264 profile. + */ + +/* cea modes; required cea modes; 640x480@p60 is always required; if you + * support higher resolutions at p60 or p50, you also must support 720x480@p60 + * or 720x576@p50 respectively */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_640_480_P60 0x00000001 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_720_480_P60 0x00000002 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_720_480_I60 0x00000004 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_720_576_P50 0x00000008 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_720_576_I50 0x00000010 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1280_720_P30 0x00000020 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1280_720_P60 0x00000040 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_P30 0x00000080 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_P60 0x00000100 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_I60 0x00000200 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1280_720_P25 0x00000400 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1280_720_P50 0x00000800 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_P25 0x00001000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_P50 0x00002000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_I50 0x00004000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1280_720_P24 0x00008000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CEA_1920_1080_P24 0x00010000 + +/* vesa modes; if you support higher refresh-rates, you must also support + * *all* lower rates of the same mode */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_800_600_P30 0x00000001 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_800_600_P60 0x00000002 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1024_768_P30 0x00000004 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1024_768_P60 0x00000008 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1152_864_P30 0x00000010 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1152_864_P60 0x00000020 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_768_P30 0x00000040 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_768_P60 0x00000080 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_800_P30 0x00000100 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_800_P60 0x00000200 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1360_768_P30 0x00000400 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1360_768_P60 0x00000800 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1366_768_P30 0x00001000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1366_768_P60 0x00002000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_1024_P30 0x00004000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1280_1024_P60 0x00008000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1400_1050_P30 0x00010000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1400_1050_P60 0x00020000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1440_900_P30 0x00040000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1440_900_P60 0x00080000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1600_900_P30 0x00100000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1600_900_P60 0x00200000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1600_1200_P30 0x00400000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1600_1200_P60 0x00800000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1680_1024_P30 0x01000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1680_1024_P60 0x02000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1680_1050_P30 0x04000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1680_1050_P60 0x08000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1920_1200_P30 0x10000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_VESA_1920_1200_P60 0x20000000 + +/* hh modes (handheld devices) */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_800_480_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_800_480_P60 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_854_480_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_854_480_P60 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_864_480_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_864_480_P60 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_640_360_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_640_360_P60 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_960_540_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_960_540_P60 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_848_480_P30 0x00000000 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_HH_848_480_P60 0x00000000 + +/* native mode; table */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_TABLE_MASK 0x03 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_CEA_TABLE 0x00 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_VESA_TABLE 0x01 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_HH_TABLE 0x02 + +/* native mode; index */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_IDX_MASK 0xfc +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NATIVE_MODE_IDX_SHIFT 3 + +/* h264 profiles; base-profile / high-profile; mostly only one bit allowed */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_PROFILE_CBP 0x01 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_PROFILE_CHP 0x02 + +/* max h264 level; mostly only one bit allowed */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_H264_LEVEL_3_1 0x01 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_H264_LEVEL_3_2 0x02 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_H264_LEVEL_4_0 0x04 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_H264_LEVEL_4_1 0x08 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_H264_LEVEL_4_2 0x10 + +/* display latency; encoded in multiples of 5ms */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_UNKNOWN_LATENCY 0x00 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_LATENCY_FROM_MS(_ms) \ + (((_ms) + 4ULL) / 5ULL) + +/* smallest slice size expressed in number of macro-blocks or 0x0 */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NO_SLICES 0x0000 + +/* if no slices allowed, this can be set on slice_env */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NO_SLICE_ENC 0x0000 + +/* max number of slices per picture MINUS 1 (0 not allowed) */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_SLICE_ENC_MAX_MASK 0x03ff +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_SLICE_ENC_MAX_SHIFT 0 + +/* ratio of max-slice-size to be used and slice_min field (0 not allowed) */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_SLICE_ENC_RATIO_MASK 0x0c00 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_SLICE_ENC_RATIO_SHIFT 10 + +/* frame skipping */ +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_NO_FRAME_SKIP 0x00 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_CAN_FRAME_SKIP 0x01 + +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_FRAME_SKIP_MAX_I_MASK 0x0e +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_FRAME_SKIP_MAX_I_SHIFT 1 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_FRAME_SKIP_MAX_I_ANY 0x00 + +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_FRAME_SKIP_NO_DYN 0x00 +#define OPENWFD_WFD_IE_SUB_VIDEO_FORMATS_FRAME_SKIP_CAN_DYN 0x10 + +struct openwfd_wfd_ie_sub_video_formats { + uint32_t cea_modes; + uint32_t vesa_modes; + uint32_t hh_modes; + uint8_t native_mode; + uint8_t h264_profile; + uint8_t h264_max_level; + uint8_t latency; + uint16_t slice_min; + uint16_t slice_enc; + uint8_t frame_skip; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement 3d formats + * Multiple 3d-subelements are allowed, one for each supported h264 profile. + */ + +/* 3d cpabilities; required modes; 1920x540/540@p24 is always required; if you + * support higher resolutions at p60 or p50, you also must support + * 1280x360/360@p60 or 1280x360/360@p50 respectively */ +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_540_540_P24 0x0000000000000001 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_360_360_P60 0x0000000000000002 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_360_360_P50 0x0000000000000004 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_1080_P24_P24 0x0000000000000008 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_P60_P60 0x0000000000000010 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_P30_P30 0x0000000000000020 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_P50_P50 0x0000000000000040 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_P25_P25 0x0000000000000080 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_1080_45_1080_P24 0x0000000000000100 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_30_720_P60 0x0000000000000200 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_30_720_P30 0x0000000000000400 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_30_720_P50 0x0000000000000800 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_720_30_720_P25 0x0000000000001000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_960_960_X_1080_I60 0x0000000000002000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_960_960_X_1080_I50 0x0000000000004000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_X_240_240_P60 0x0000000000008000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_320_320_X_480_P60 0x0000000000010000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_720_X_240_240_P60 0x0000000000020000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_360_360_X_480_P60 0x0000000000040000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_720_X_288_288_P50 0x0000000000080000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_360_360_X_576_P50 0x0000000000100000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_360_360_P24 0x0000000000200000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_640_X_720_P24 0x0000000000400000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_360_360_P25 0x0000000000800000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_640_X_720_P25 0x0000000001000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1280_X_360_360_P30 0x0000000002000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_640_X_720_P30 0x0000000004000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_540_540_P30 0x0000000008000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_540_540_P50 0x0000000010000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_540_540_P60 0x0000000020000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_640_X_720_P50 0x0000000040000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_640_640_X_720_P60 0x0000000080000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_960_960_X_1080_P24 0x0000000100000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_960_960_X_1080_P50 0x0000000200000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_960_960_X_1080_P60 0x0000000400000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_1080_45_1080_P30 0x0000000800000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_1080_45_1080_I50 0x0000001000000000 +#define OPENWFD_WFD_IE_SUB_3D_FORMATS_CAP_1920_X_1080_45_1080_I60 0x0000002000000000 + +struct openwfd_wfd_ie_sub_3d_formats { + uint64_t capabilities; + uint8_t native_mode; /* same as video_formats.native_mode */ + uint8_t h264_profile; /* same as video_formats.h264_profile */ + uint8_t h264_max_level; /* same as video_formats.h264_max_level */ + uint8_t latency; /* same as video_formats.latency */ + uint16_t slice_min; /* same as video_formats.slice_min */ + uint16_t slice_enc; /* same as video_formats.slice_enc */ + uint8_t frame_skip; /* same as video_formats.frame_skip */ +} OPENWFD__WFD_PACKED; + +/* + * IE subelement content protection + */ + +/* HDCP 2.0 */ +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_HDCP_2_0_MASK 0x01 +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_NO_HDCP_2_0 0x00 +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_CAN_HDCP_2_0 0x01 + +/* HDCP 2.1; if set, you must also set HDCP 2.0 */ +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_HDCP_2_1_MASK 0x02 +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_NO_HDCP_2_1 0x00 +#define OPENWFD_WFD_IE_SUB_CONTENT_PROTECT_CAN_HDCP_2_1 0x02 + +struct openwfd_wfd_ie_sub_content_protect { + uint8_t flags; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement coupled sink information + */ + +/* status */ +#define OPENWFD_WFD_IE_SUB_COUPLED_SINK_STATUS_MASK 0x03 +#define OPENWFD_WFD_IE_SUB_COUPLED_SINK_NOT_COUPLED 0x00 +#define OPENWFD_WFD_IE_SUB_COUPLED_SINK_COUPLED 0x01 +#define OPENWFD_WFD_IE_SUB_COUPLED_SINK_COUPLE_TEARDOWN 0x02 + +struct openwfd_wfd_ie_sub_coupled_sink { + uint8_t status; + uint8_t mac[6]; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement extended capabilities + */ + +/* UIBC */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_UIBC_MASK 0x01 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_UIBC 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_UIBC 0x01 + +/* I2C */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_I2C_MASK 0x02 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_I2C 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_I2C 0x02 + +/* Preferred Mode */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_PREFER_MODE_MASK 0x04 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_PREFER_MODE 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_PREFER_MODE 0x04 + +/* Standby */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_STANDBY_MASK 0x08 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_STANDBY 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_STANDBY 0x08 + +/* Persistend TDLS */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_PERSIST_TDLS_MASK 0x10 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_PERSIST_TDLS 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_PERSIST_TDLS 0x10 + +/* Persistend TDLS BSSID */ +#define OPENWFD_WFD_IE_SUB_EXT_CAP_PERSIST_TDLS_BSSID_MASK 0x20 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_NO_PERSIST_TDLS_BSSID 0x00 +#define OPENWFD_WFD_IE_SUB_EXT_CAP_CAN_PERSIST_TDLS_BSSID 0x20 + +struct openwfd_wfd_ie_sub_ext_cap { + uint16_t flags; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement local ip + */ + +#define OPENWFD_WFD_IE_SUB_LOCAL_IP_IPV4 0x01 + +struct openwfd_wfd_ie_sub_local_ip { + uint8_t version; + uint8_t ip[4]; +} OPENWFD__WFD_PACKED; + +/* + * IE subelement session information + */ + +/* real payload is actually an array of this object for each device */ +struct openwfd_wfd_ie_sub_session_info { + uint8_t length; /* fixed: 23 == (sizeof(this) - 1) */ + uint8_t mac[6]; + uint8_t bssid[6]; + uint16_t dev_info; /* same as dev_info.dev_info */ + uint16_t max_throughput; /* same as dev_info.max_throughput */ + uint8_t coupled_status; /* same as coupled_sink.status */ + uint8_t coupled_mac[6]; /* same as coupled_sink.mac */ +} OPENWFD__WFD_PACKED; + +/* + * IE subelement alternative mac + */ + +struct openwfd_wfd_ie_sub_alt_mac { + uint8_t mac[6]; +} OPENWFD__WFD_PACKED; + /** @} */ #ifdef __cplusplus |