summaryrefslogtreecommitdiffstats
path: root/include/hardware_legacy/tdls.h
blob: c1cd33e62fce38d1b79e67a3071bb4eb75db8eaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73

#include "wifi_hal.h"

#ifndef _TDLS_H_
#define _TDLS_H_

typedef enum {
    WIFI_TDLS_DISABLED,                 /* TDLS is not enabled, or is disabled now */
    WIFI_TDLS_ENABLED,                  /* TDLS is enabled, but not yet tried */
    WIFI_TDLS_TRYING,                   /* Direct link is being attempted (optional) */
    WIFI_TDLS_ESTABLISHED,              /* Direct link is established */
    WIFI_TDLS_ESTABLISHED_OFF_CHANNEL,  /* Direct link is established using MCC */
    WIFI_TDLS_DROPPED,                  /* Direct link was established, but is now dropped */
    WIFI_TDLS_FAILED                    /* Direct link failed */
} wifi_tdls_state;

typedef enum {
    WIFI_TDLS_SUCCESS,                              /* Success */
    WIFI_TDLS_UNSPECIFIED           = -1,           /* Unspecified reason */
    WIFI_TDLS_NOT_SUPPORTED         = -2,           /* Remote side doesn't support TDLS */
    WIFI_TDLS_UNSUPPORTED_BAND      = -3,           /* Remote side doesn't support this band */
    WIFI_TDLS_NOT_BENEFICIAL        = -4,           /* Going to AP is better than going direct */
    WIFI_TDLS_DROPPED_BY_REMOTE     = -5            /* Remote side doesn't want it anymore */
} wifi_tdls_reason;

typedef struct {
    int channel;                        /* channel hint, in channel number (NOT frequency ) */
    int global_operating_class;         /* operating class to use */
    int max_latency_ms;                 /* max latency that can be tolerated by apps */
    int min_bandwidth_kbps;             /* bandwidth required by apps, in kilo bits per second */
} wifi_tdls_params;

typedef struct {
    int channel;
    int global_operating_class;
    wifi_tdls_state state;
    wifi_tdls_reason reason;
} wifi_tdls_status;

typedef struct {
    /* on_tdls_state_changed - reports state to TDLS link
     * Report this event when the state of TDLS link changes */
    void (*on_tdls_state_changed)(mac_addr addr, wifi_tdls_status status);
} wifi_tdls_handler;


/* wifi_enable_tdls - enables TDLS-auto mode for a specific route
 *
 * params specifies hints, which provide more information about
 * why TDLS is being sought. The firmware should do its best to
 * honor the hints before downgrading regular AP link
 *
 * On successful completion, must fire on_tdls_state_changed event
 * to indicate the status of TDLS operation.
 */
wifi_error wifi_enable_tdls(wifi_interface_handle iface, mac_addr addr,
        wifi_tdls_params params, wifi_tdls_handler handler);

/* wifi_disable_tdls - disables TDLS-auto mode for a specific route
 *
 * This terminates any existing TDLS with addr device, and frees the
 * device resources to make TDLS connections on new routes.
 *
 * DON'T fire any more events on 'handler' specified in earlier call to
 * wifi_enable_tdls after this action.
 */
wifi_error wifi_disable_tdls(wifi_interface_handle iface, mac_addr addr);

/* wifi_get_tdls_status - allows getting the status of TDLS for a specific route */
wifi_error wifi_get_tdls_status(wifi_interface_handle iface, mac_addr addr,
        wifi_tdls_status *status);

#endif