Initial commit

Dependencies:   FastPWM

mbed-dev-master/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_driver_config.h

Committer:
lypinator
Date:
2020-09-16
Revision:
0:bb348c97df44

File content as of revision 0:bb348c97df44:

/**
 *---------------------------------------------------------------------------
 * Copyright (c) 2016, u-blox Malmö, All Rights Reserved
 * SPDX-License-Identifier: LicenseRef-PBL
 *
 * This file and the related binary are licensed under the
 * Permissive Binary License, Version 1.0 (the "License");
 * you may not use these files except in compliance with the License.
 *
 * You may obtain a copy of the License here:
 * LICENSE-permissive-binary-license-1.0.txt and at
 * https://www.mbed.com/licenses/PBL-1.0
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * Component   : Wireless LAN driver 
 * File        : cb_wlan_driver_config.h
 *
 * Description : OS related functions
 *-------------------------------------------------------------------------*/
/**
 * @file cb_wlan_driver_config.h Driver configuration.
 * @ingroup port
 */
#ifndef _CB_WLAN_DRIVER_CONFIG_H_
#define _CB_WLAN_DRIVER_CONFIG_H_

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "cb_target.h"
#include "cb_status.h"

#ifdef __cplusplus
extern "C" {
#endif

/*===========================================================================
 * DEFINES
 *=========================================================================*/
#define cbWLAN_ENABLE_802_11b
#define cbWLAN_ENABLE_802_11g
#define cbWLAN_ENABLE_802_11n

/*===========================================================================
 * TYPES
 *=========================================================================*/

#define cbTARGET_GSETTING_4_ADDRESS_MODE_STATION_DYNAMIC cb_BIT_0
#define cbTARGET_GSETTING_4_ADDRESS_MODE_STATION_ALWAYS cb_BIT_1
/**
 * General settings and tuning parameters .
 *
 * @ingroup types
 */
typedef enum wm_gsetting_e {
    cbTARGET_GSETTING_START = 0,
    cbTARGET_GSETTING_PREAMBLE = cbTARGET_GSETTING_START, /**< 0 = Long preamble, 1 = Short preamble */
    cbTARGET_GSETTING_MIN_SCAN_TIME, /**< Minimum scan time in TU per channel */
    cbTARGET_GSETTING_MAX_SCAN_TIME, /**< Maximum scan time in TU per channel */
    cbTARGET_GSETTING_SCAN_TYPE, /**< Use @ref cbWM_ScanType. */
    cbTARGET_GSETTING_BEACON_INTERVAL, /**< Beacon interval for Ad-hoc/IBSS networks. */
    cbTARGET_GSETTING_JOIN_FAILURE_TIMEOUT, /**< Time in beacons before the join procedure times out. */
    cbTARGET_GSETTING_BT_COEX, /**< Bluetooth co-existence 0 = off, 1 = on */
    cbTARGET_GSETTING_DATA_RATE, /**< Set the data rate to use. Use @ref cbWLAN_Rate */
    cbTARGET_GSETTING_LINK_ADAPTION, /**< Dynamically adapt the data rate. 0 = off, 1 = on */
    cbTARGET_GSETTING_POWER_SAVE, /**< 0 = off, 1 = Fast PSP, 2 = Max PSP */
    cbTARGET_GSETTING_DTIM_ENABLE, /**< Enable DTIM when powersaving */
    cbTARGET_GSETTING_QOS_ENABLE, /**< Enable QoS */
    cbTARGET_GSETTING_RTS_THRESHOLD, /**< Set the RTS (Request to send) threshold */
    cbTARGET_GSETTING_FRAGMENTATION_THRESHOLD, /**< Set the fragmentation threshold */
    cbTARGET_GSETTING_TX_POWER, /**< Desired output power in dBm. */
    cbTARGET_GSETTING_MAX_PASSIVE_SCAN_TIME, /**< Maximum scan time for passive scan */
    cbTARGET_GSETTING_MODULE_TYPE, /**< Type of module. TODO: remove. Legacy parameter that shouldn't be possible to change. */
    cbTARGET_GSETTING_SCAN_LISTEN_INTERVAL, /**< Listen interval between channel scans */
    cbTARGET_GSETTING_SLEEP_TIMEOUT, /**< Only allow power save modes after this period of inactivity. Timeout in ms. Only used when power save is enabled */
    cbTARGET_GSETTING_DOT11_SHORT_RETRY_LIMIT, /**< 802.11 short retry limit for station (dot11ShortRetryLimit). Bit 31-24 reserved, bit 23-16 EAPOL & Broadcast, bit 15-8 MGMT, bit 7-0 data. */
    cbTARGET_GSETTING_DOT11_LONG_RETRY_LIMIT, /**< 802.11 long retry limit for station (dot11LongRetryLimit). Bit 31-24 reserved, bit 23-16 EAPOL & Broadcast, bit 15-8 MGMT, bit 7-0 data. */
    cbTARGET_GSETTING_AP_DOT11_SHORT_RETRY_LIMIT, /**< 802.11 short retry limit for AP (dot11ShortRetryLimit). Bit 31-24 reserved, bit 23-16 EAPOL & Broadcast, bit 15-8 MGMT, bit 7-0 data. */
    cbTARGET_GSETTING_AP_DOT11_LONG_RETRY_LIMIT, /**< 802.11 long retry limit for AP (dot11LongRetryLimit). Bit 31-24 reserved, bit 23-16 EAPOL & Broadcast, bit 15-8 MGMT, bit 7-0 data. */
    cbTARGET_GSETTING_CHANNEL_TYPE, /**< 0-NO_HT, 1-HT20, 2-HT40MINUS, 3-HT40PLUS */
    cbTARGET_GSETTING_PMF_STA, /**< Protected Management frame Option for STA*/
    cbTARGET_GSETTING_REMAIN_ON_CHANNEL, /**< Set 0 disable, 1 enable */
    cbTARGET_GSETTING_STA_TX_RATE_MASK, /**< TX rates for station. May be overridden if not supported by AP. Set to 0 for AP default. @sa cbWLAN_RateMask_e */
    cbTARGET_GSETTING_RSSI_GOOD, /**< When to abort scanning and initiate connection */
    cbTARGET_GSETTING_RSSI_BAD, /**< When to use BAD_RSSI_SCAN_YIELD_TIMEOUT for scanning between each channel for roaming */
    cbTARGET_GSETTING_GOOD_RSSI_SCAN_YIELD_TIMEOUT, /**< Gap between each channel when doing background scan with a good connection */
    cbTARGET_GSETTING_BAD_RSSI_SCAN_YIELD_TIMEOUT, /**< Gap between each channel when doing background scan with a bad connection */
    cbTARGET_GSETTING_ROAM_BLACKLIST_LAST_BSSID_TIMEOUT, /**< How long a new connection to the last connected AP should be banned */
    cbTARGET_GSETTING_FORCE_WORLD_MODE, /**< Set 0 disable, 1 enable */
    cbTARGET_GSETTING_TX_PACKET_ACK_TIMEOUT_WD, /**< Max time for an Tx packet to not being acked by the radio before we send a soft-error event */
    cbTARGET_GSETTING_CTS_PROTECTION, /** send CTS to self before transmission. 0 disable, 1 enable. */
    cbTARGET_GSETTING_HIDDEN_SSID, /** Hidden ssid, 0 disable else enable. */
    cbTARGET_GSETTING_AP_STA_INACTIVITY_TIMEOUT, /**< Aging period for Station in seconds */
    cbTARGET_GSETTING_ROAMING_AREA_HYSTERESIS, /** Threshold between good and bad connection. */
    cbTARGET_GSETTING_FT_MODE, /** 802.11r (FT) mode, 0 - Disabled, 1 - FT over air, 2 - FT over DS */
    cbTARGET_GSETTING_4_ADDRESS_MODE, /** Bit0 - enable dynamic mode for station. Bit1 - always enable for station. */
    cbTARGET_GSETTING_MAX,
} cbWM_GSETTING;

typedef enum targetConfigParams {
    cbTARGET_CFG_FIRST,
    cbTARGET_CFG_SET_POWER_SAVE_MODE = cbTARGET_CFG_FIRST,       //!< Set power mode  @ref cbWLAN_IoctlPowerSaveMode
    cbTARGET_CFG_GET_POWER_SAVE_MODE,                            //!< Get power mode  @ref cbWLAN_IoctlPowerSaveMode
    cbTARGET_CFG_SET_LISTEN_INTERVAL,                            //!< Set listen interval, integer value 0 - 16 
    cbTARGET_CFG_GET_LISTEN_INTERVAL,                            //!< Get listen interval, integer value 0 - 16 
    cbTARGET_CFG_SET_DTIM_ENABLE,                                //!< Set DTIM enable 0, disable 1 enable
    cbTARGET_CFG_GET_DTIM_ENABLE,                                //!< Get DTIM enable 0, disable 1 enable
    cbTARGET_CFG_SET_SLEEP_TIMEOUT,                              //!< Set enter power save entry delay (in ms). Power save mode will be entered only if there no activity during this delay
    cbTARGET_CFG_GET_SLEEP_TIMEOUT,                              //!< Get enter power save entry delay (in ms). Power save mode will be entered only if there no activity during this delay
    cbTARGET_CFG_SET_RSSI_GOOD,                                  //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_GET_RSSI_GOOD,                                  //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_SET_RSSI_BAD,                                   //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_GET_RSSI_BAD,                                   //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_SET_GOOD_RSSI_YIELD_TMO,                        //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_GET_GOOD_RSSI_YIELD_TMO,                        //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_SET_BAD_RSSI_YIELD_TMO,                         //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_GET_BAD_RSSI_YIELD_TMO,                         //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_SET_BLACKLIST_LAST_BSSID_TIMEOUT,               //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_GET_BLACKLIST_LAST_BSSID_TIMEOUT,               //!< SEE CORRESPONDING GSETTING
    cbTARGET_CFG_LAST,                                           
    cbTARGET_CFG_SET_GSETTING = 1000,                            //!< Pipe to @ref cbWM_gSet.
    cbTARGET_CFG_SET_TSETTING = 2000,                            //!< Pipe to @ref cbWM_tSet.
    cbTARGET_CFG_GET_GSETTING = 3000,                            //!< Pipe to @ref cbWM_gGet.
    cbTARGET_CFG_GET_TSETTING = 4000,                            //!< Pipe to @ref cbWM_tGet.
} cbTARGET_ConfigParams;

#define cbTARGET_GSETTING_REG(X)	((cb_uint32)((X) - cbTARGET_GSETTING_START))

/**
 * Target specific settings and tuning parameters .
 *
 * @ingroup types
 */
typedef enum wm_tsetting_e {
    cbTARGET_TSETTING_START = 1000,
    cbTARGET_TSETTING_PS_LISTEN_INTERVAL = cbTARGET_TSETTING_START, /**< Powersave: Listen interval in beacons. */
    cbTARGET_TSETTING_PS_FAST_PSP_TIMEOUT, /**< Powersave: In mode Fast PSP timeout in ms before entering PS. */
    cbTARGET_TSETTING_ANTENNA_RECEIVE_DIVERSITY, /**< Enable receive antenna diversity. 0 = off, 1 = on. */
    cbTARGET_TSETTING_QOS_WMM_NOACK, /**< Enable WMM QoS no-ack acknowledgment policy. 0 = normal ack, 1 = no-ack. */
    cbTARGET_TSETTING_PS_BEACON_EARLY_TERMINATION, /**< Powersave: In Max PSP, use beacon early termination. */
    cbTARGET_TSETTING_MAX,
} cbWM_TSETTING;

#define cbTARGET_TSETTING_REG(X)	((cb_uint32)((X) - cbTARGET_TSETTING_START))

/**
 * Defines the type of scanning procedure.
 * Passive scan will only listen for beacons.
 * Active scan will send out a probe request
 * and listen for both probe responses and beacons.
 *
 * @ingroup types
 */
typedef enum cbWM_ScanType_e {
    cbWM_SCAN_INVALID,
    cbWM_SCAN_ACTIVE,
    cbWM_SCAN_PASSIVE,
} cbWM_ScanType;

/**
 * Power save levels.
 * @note Levels between 2 and cbWM_POWERSAVE_MAX are target specific.
 *
 * @ingroup types
 */
typedef enum cbWM_PowerSaveType_e {
    cbWM_POWERSAVE_OFF = 0,
    cbWM_POWERSAVE_FAST_PSP = 1,
    cbWM_POWERSAVE_MAX_PSP = 2,
    cbWM_POWERSAVE_MAX = cb_UINT8_MAX,
} cbWM_PowerSaveType;

/**
 * Power save modes set using  @ref cbWLAN_ioctl
 *
 * @ingroup wlan
 */
typedef enum {
    cbTARGET_POWER_SAVE_MODE_OFF,
    cbTARGET_POWER_SAVE_MODE_SLEEP,
    cbTARGET_POWER_SAVE_MODE_DEEP_SLEEP
} cbTARGET_PowerSaveMode;

typedef enum {
    cbWLAN_ONE_ANTENNA = 1,
    cbWLAN_TWO_ANTENNAS
} cbWLAN_NUMBER_OF_ANTENNAS;

typedef enum {
    cbWLAN_PRIMARY_ANTENNA_ONE = 1,
    cbWLAN_PRIMARY_ANTENNA_TWO
} cbWLAN_PRIMARY_ANTENNA;
/*===========================================================================
 * FUNCTIONS
 *=========================================================================*/

/**
 * Get general tuning parameter.
 *
 * @param hTarget Handle to the current driver instance.
 * @param setting setting to read.
 * @return parameter value
 */
cb_uint32 cbTARGET_gGet(cbTARGET_Handle* hTarget, cbWM_GSETTING setting);

/**
 * Set general tuning parameter.
 *
 * @param hTarget Handle to the current driver instance.
 * @param setting setting to modify.
 * @param value value to set.
 */
void cbTARGET_gSet(cbTARGET_Handle* hTarget, cbWM_GSETTING setting, cb_uint32 value);

/**
 * Get target specific tuning parameter.
 *
 * @param hTarget Handle to the current driver instance.
 * @param setting setting to read.
 * @return parameter value
 */
cb_uint32 cbTARGET_tGet(cbTARGET_Handle* hTarget, cbWM_TSETTING setting);

/**
 * Set target specific tuning parameter.
 *
 * @param hTarget Handle to the current driver instance.
 * @param setting setting to modify.
 * @param value value to set.
 */
void cbTARGET_tSet(cbTARGET_Handle* hTarget, cbWM_TSETTING setting, cb_uint32 value);

struct cb_wlan_configuration*  cbTARGET_configuration_create();

cbRTSL_Status cbTARGET_configure(cbTARGET_Handle* hTarget, cbTARGET_ConfigParams parameter, void* value);

/*--------------------------------------------------------------------------
 * Constants
 *-------------------------------------------------------------------------*/

#define W_CONST_PREAMBLE                            (1)
#define W_CONST_LISTEN_INTERVAL                     (16)
#define W_CONST_MIN_SCAN_TIME                       (25)
#define W_CONST_MAX_SCAN_TIME                       (50)
#define W_CONST_SCAN_TYPE                           (cbWM_SCAN_ACTIVE)
#define W_CONST_BEACON_INTERVAL					    (100)
#define W_CONST_JOIN_FAILURE_TIMEOUT                (600)
#define W_CONST_WLAN_BT_COEX                        (0)
#define W_CONST_DATA_RATE                           (cbWLAN_RATE_24)
#define W_CONST_LINK_ADAPTION                       (1)
#define W_CONST_POWER_SAVE                          (2)
#define W_CONST_DTIM_ENABLE                         (1)
#define W_CONST_QOS_ENABLE                          (1)
#define W_CONST_CHANNEL_TYPE                        (1) //HT20MHz
#define W_CONST_RTS_THRESHOLD                       (2347)
#define W_CONST_FRAGMENTATION_THRESHOLD             (2346)
#define W_CONST_TX_POWER                            (15)
#define W_CONST_MAX_PASSIVE_SCAN_TIME               (150)
#define W_CONST_SCAN_LISTEN_INTERVAL                (150)
#define W_CONST_SLEEP_TIMEOUT                       (100) // Timeout in ms, 100ms timeout gives almost same throughput as without power save but still low power consumption
#define W_CONST_DEFAULT_MODULE_TYPE                 (cbWM_MODULE_UNKNOWN)
#define W_CONST_PMF_OPTIONAL                        (cbWLAN_PMF_OPTIONAL)
#define W_CONST_REMAIN_ON_CHANNEL                   (1) // Enabled
#define W_CONST_DEFAULT_STA_TX_RATES                (0) // Use AP default
#define W_CONST_GOOD_RSSI                           (55)
#define W_CONST_BAD_RSSI                            (70)
#define W_CONST_GOOD_RSSI_SCAN_YIELD_TIMEOUT        (1500)
#define W_CONST_BAD_RSSI_SCAN_YIELD_TIMEOUT         (W_CONST_SCAN_LISTEN_INTERVAL)
#define W_CONST_BLACKLIST_LAST_BSSID_TIMEOUT        (20) // Seconds
#define W_CONST_ROAMING_AREA_HYSTERESIS             (3)
#define W_CONST_TX_PACKET_ACK_TIMEOUT               (10000)
#define W_CONST_FT_MODE                             (2)

#define W_CONST_DEFAULT_FORCE_WORLD_MODE            (0)

#define W_CONST_DEFAULT_AP_STA_INACTIVITY_TIMEOUT   (120)


#define W_CONST_DEFAULT_DOT11_SHORT_RETRY_LIMIT (0x0a0a0a0aul)
#define W_CONST_DEFAULT_DOT11_LONG_RETRY_LIMIT  (0x0a0a0a0aul)
#define W_CONST_DEFAULT_AP_DOT11_SHORT_RETRY_LIMIT  (0x0a0a0a0aul)
#define W_CONST_DEFAULT_AP_DOT11_LONG_RETRY_LIMIT   (0x0a0a0a0aul)

//Target specific values
#define W_CONST_PS_LISTEN_INTERVAL                  (0)
#define W_CONST_PS_FAST_PSP_TIMEOUT                 (50) 
#define W_CONST_ANTENNA_RECEIVE_DIVERSITY           (0)
#define W_CONST_PS_BEACON_EARLY_TERMINATION         (0)

#define W_CONST_2_4GHZ_MGMT_RATE                    (cbWLAN_RATE_01)
#define W_CONST_5GHZ_MGMT_RATE                      (cbWLAN_RATE_06)

#define W_CONST_DEFAULT_RSSI                        (-100)

#ifdef __cplusplus
}
#endif

#endif /* _CB_SYSTEM_H_ */