blob: 0e8ed4d1bab5e6021e5d782386154a0ab4f106d7 [file] [log] [blame]
/** @file wifi_display.h
*
* @brief Header file for wifidirectutl application
*
* Copyright (C) 2008-2017, Marvell International Ltd.
*
* This software file (the "File") is distributed by Marvell International
* Ltd. under the terms of the GNU General Public License Version 2, June 1991
* (the "License"). You may use, redistribute and/or modify this File in
* accordance with the terms and conditions of the License, a copy of which
* is available along with the File in the gpl.txt file or by writing to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
* IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
* ARE EXPRESSLY DISCLAIMED. The License provides additional details about
* this warranty disclaimer.
*
*/
/************************************************************************
Change log:
09/22/11: Initial creation
************************************************************************/
#ifndef _WIFIDISPLAY_H
#define _WIFIDISPLAY_H
#include "wifidirectutl.h"
/* coupled sink capability*/
#define MAX_COUPLED_SINK_CAPABILITY 2
#define MAX_CLIENTS 5
#define VENDOR_SPECIFIC_IE_TAG 0xDD
/** TLV : WifiDisplay devie info sublement ID */
#define TLV_TYPE_WIFIDISPLAY_DEVICE_INFO 0x00
/** TLV : WifiDisplay Assoc BSSID sublement ID */
#define TLV_TYPE_WIFIDISPLAY_ASSOC_BSSID 0x01
/** TLV : WifiDisplay Coupled Sink sublement ID */
#define TLV_TYPE_WIFIDISPLAY_COUPLED_SINK 0x06
/** TLV : WifiDisplay Session Info sublement ID */
#define TLV_TYPE_SESSION_INFO_SUBELEM 0x09
/** TLV : WifiDisplay Alternate MAC sublement ID */
#define TLV_TYPE_WIFIDISPLAY_ALTERNATE_MAC 0x10
/** Host Command ID : wfd display mode config */
#define HostCmd_CMD_WFD_DISPLAY_MODE_CONFIG 0x0106
/** Maximum ie index creation allowed with custom ie commands */
#define MAX_MGMT_IE_INDEX 12
/** Define len of OUI for WFD */
#define WIFIDISPLAY_OUI_LEN 3
/** Define OUI type for WFD */
#define WIFIDISPLAY_OUI_TYPE 1
/** Level of wifidisplay parameters in the wifidisplay.conf file */
typedef enum {
DISPLAY_DEVICE_INFO = 1,
DISPLAY_ASSOCIATED_BSSID,
DISPLAY_COUPLED_SINK,
DISPLAY_SESSION_INFO,
DISPLAY_ALTERNATE_MAC_ADDR,
} display_param_level;
/** Valid Wifi display input parameters */
typedef enum {
WFD_DEVICE_INFO,
WFD_SESSION_MGMT_CONTROL_PORT,
WFD_DEVICE_THROUGHPUT,
WFD_COUPLED_SINK,
} display_valid_inputs;
/** AP CMD header */
#define WIFI_DISPLAY_CMD_HEADER /** Buf Size */ \
t_u32 buf_size; \
/** Command Code */ \
t_u16 cmd_code; \
/** Size */ \
t_u16 size; \
/** Sequence Number */ \
t_u16 seq_num; \
/** Result */ \
t_s16 result
/** TLV buffer : WifiDisplay device info parameters*/
typedef PACK_START struct tlvbuf_wfdisplay_device_info {
/** Tag */
t_u8 tag;
/** Length */
t_u16 length;
/** action */
/** Device Info Bitmap */
t_u8 display_device_info[2];
/** Control Port for WFD communication */
t_u8 session_mgmt_control_port[2];
/** WFD Maximum Device Throuput */
t_u8 wfd_device_throuput[2];
} PACK_END tlvbuf_wfdisplay_device_info;
/** TLV buffer : WifiDisplay Assoc BSSID paramenters*/
typedef PACK_START struct tlvbuf_wfdisplay_assoc_bssid {
/** Tag */
t_u8 tag;
/** Length */
t_u16 length;
/** associated BSSID */
t_u8 assoc_bssid[ETH_ALEN];
} PACK_END tlvbuf_wfdisplay_assoc_bssid;
/** TLV buffer : WifiDisplay Alaternate MAC paramenters*/
typedef PACK_START struct tlvbuf_wfdisplay_alternate_mac {
/** Tag */
t_u8 tag;
/** Length */
t_u16 length;
/** Alternate MAC */
t_u8 alternate_mac[ETH_ALEN];
} PACK_END tlvbuf_wfdisplay_alternate_mac;
/** TLV buffer : WifiDisplay coupled sink parameters*/
typedef PACK_START struct tlvbuf_wfdisplay_coupled_sink {
/** Tag */
t_u8 tag;
/** Length */
t_u16 length;
/** Coupled Sink Bitmap */
t_u8 coupled_sink;
/** Coupled Peer MAC */
t_u8 peer_mac[ETH_ALEN];
} PACK_END tlvbuf_wfdisplay_coupled_sink;
/** TLV buffer : WifiDirect Device Info parameters*/
struct WifiDisplayDeviceInfoDesc {
t_u8 length;
t_u8 dev_address[ETH_ALEN];
t_u8 AssociatedBSSID[ETH_ALEN];
t_u8 dev_info[2];
t_u8 max_throughput[2];
t_u8 coupled_sink[7];
};
/** TLV buffer : WifiDirect Session Info parameters*/
typedef PACK_START struct tlvbuf_wifi_display_session_info {
/** Tag */
t_u8 tag;
/** Length */
t_u16 length;
/** Device Info Descriptor pointer */
t_u8 *WFDDevInfoDesc;
} PACK_END tlvbuf_wifi_display_session_info;
/** TLV buffer : WifiDirect Wifi Display IE format*/
typedef PACK_START struct tlvbuf_wifidisplay_ie_format {
/** Tag */
t_u8 ElemId;
/** Length */
t_u8 length;
/** Vendor Specific OUI */
t_u8 Oui[3];
/** Vendor Specific OUI */
t_u8 OuiType;
/** Vendor Specific OUI */
t_u8 wfd_ie[1];
} PACK_END tlvbuf_wifidisplay_ie_format;
/** HostCmd_CMD_WIFI_DISPLAY_MODE_CONFIG */
typedef PACK_START struct _wifi_display_mode_config {
WIFI_DISPLAY_CMD_HEADER;
/** Action */
t_u16 action; /* 0 = ACT_GET; 1 = ACT_SET; */
/** wifi display mode data */
t_u16 mode;
} PACK_END wifi_display_mode_config;
/** HostCmd_CMD_WIFIDISPLAY_SERVICE_DISCOVERY request */
typedef PACK_START struct _wifidisplay_discovery_request {
/** Header */
WIFI_DISPLAY_CMD_HEADER;
/** Peer mac address */
t_u8 peer_mac_addr[ETH_ALEN];
/** Category */
t_u8 category;
/** Action */
t_u8 action;
/** Dialog taken */
t_u8 dialog_taken;
/** Advertize protocol IE */
t_u8 advertize_protocol_ie[4];
/** Query request Length */
t_u16 query_len;
/** Information identifier */
t_u8 info_id[2];
/** Request Length */
t_u16 request_len;
/** OUI */
t_u8 oui[3];
/** OUI sub type */
t_u8 oui_sub_type;
/** Service update indicator */
t_u16 service_update_indicator;
/** Vendor Length */
t_u16 vendor_len;
/** Service protocol */
t_u8 service_protocol;
/** Service transaction Id */
t_u8 service_transaction_id;
/** Query Data */
t_u8 disc_query[0];
} PACK_END wifidisplay_discovery_request;
/** HostCmd_CMD_WIFIDISPLAY_SERVICE_DISCOVERY response */
typedef PACK_START struct _wifidisplay_discovery_response {
/** Header */
WIFI_DISPLAY_CMD_HEADER;
/** Peer mac address */
t_u8 peer_mac_addr[ETH_ALEN];
/** Category */
t_u8 category;
/** Action */
t_u8 action;
/** Dialog taken */
t_u8 dialog_taken;
/** Status code */
t_u16 status_code;
/** GAS comback reply */
t_u16 gas_reply;
/** Advertize protocol IE */
t_u8 advertize_protocol_ie[4];
/** Query response Length */
t_u16 query_len;
/** Information identifier */
t_u8 info_id[2];
/** Response Length */
t_u16 response_len;
/** OUI */
t_u8 oui[3];
/** OUI sub type */
t_u8 oui_sub_type;
/** Service update indicator */
t_u16 service_update_indicator;
/** Vendor Length */
t_u16 vendor_len;
/** Service protocol */
t_u8 service_protocol;
/** Service transaction Id */
t_u8 service_transaction_id;
/** Discovery status code */
t_u8 disc_status_code;
/** Response Data */
t_u8 disc_resp[0];
} PACK_END wifidisplay_discovery_response;
int is_wifidisplay_input_valid(display_valid_inputs cmd, int argc,
char *argv[]);
void wifidisplaycmd_config(int argc, char *argv[]);
void wifidisplay_file_params_config(char *file_name, char *cmd_name,
t_u8 *pbuf, t_u16 *ie_len_wifidisplay);
void wifidisplay_cmd_status(int argc, char *argv[]);
void wifidisplaycmd_service_discovery(int argc, char *argv[]);
void wifidisplay_update_custom_ie(int argc, char *argv[]);
void wifidisplay_update_coupledsink_bitmap(int argc, char *argv[]);
#endif /* _WIFIDISPLAY_H */