diff --git a/features/mbedtls/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/mbedtls_device.h b/features/mbedtls/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/mbedtls_device.h index f38740cb8f..43a595ccb4 100644 --- a/features/mbedtls/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/mbedtls_device.h +++ b/features/mbedtls/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/mbedtls_device.h @@ -20,4 +20,8 @@ #ifndef MBEDTLS_DEVICE_H #define MBEDTLS_DEVICE_H +#ifdef TARGET_UBLOX_EVK_ODIN_W2 +#define MBEDTLS_MPI_WINDOW_SIZE 3 /**< Maximum windows size used. */ +#endif + #endif /* MBEDTLS_DEVICE_H */ diff --git a/features/netsocket/nsapi_types.h b/features/netsocket/nsapi_types.h index 9f112b82ac..39cf1f969f 100644 --- a/features/netsocket/nsapi_types.h +++ b/features/netsocket/nsapi_types.h @@ -125,6 +125,8 @@ typedef enum nsapi_security { NSAPI_SECURITY_WPA_WPA2 = 0x4, /*!< phrase conforms to WPA/WPA2 */ NSAPI_SECURITY_PAP = 0x5, /*!< phrase conforms to PPP authentication context */ NSAPI_SECURITY_CHAP = 0x6, /*!< phrase conforms to PPP authentication context */ + NSAPI_SECURITY_EAP_TLS = 0x7, /*!< phrase conforms to EAP-TLS */ + NSAPI_SECURITY_PEAP = 0x8, /*!< phrase conforms to PEAP */ NSAPI_SECURITY_UNKNOWN = 0xFF, /*!< unknown/unsupported security in scan results */ } nsapi_security_t; diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_ARM/libublox-odin-w2-driver.ar b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_ARM/libublox-odin-w2-driver.ar index f2548ba36b..ed032b0925 100644 Binary files a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_ARM/libublox-odin-w2-driver.ar and b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_ARM/libublox-odin-w2-driver.ar differ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a index 59d4abbfb1..e0554567d7 100644 Binary files a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a and b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a differ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_IAR/libublox-odin-w2-driver.a b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_IAR/libublox-odin-w2-driver.a index c6b0633c76..efcfe3b65b 100644 Binary files a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_IAR/libublox-odin-w2-driver.a and b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/TOOLCHAIN_IAR/libublox-odin-w2-driver.a differ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp index f7430c8657..43ba87f768 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp @@ -18,9 +18,16 @@ #include "cb_main.h" #include "cb_wlan.h" #include "cb_wlan_types.h" +#include "cb_wlan_driver_config.h" #include "wifi_emac.h" #include "netsocket/WiFiAccessPoint.h" +#include "enterprise_handle.h" + +#define VALIDATE_CERT(X) \ + if(strlen(X) > cbSECMNG_MAX_CERTIFICATE_SIZE){ \ + return NSAPI_ERROR_PARAMETER; \ + } \ #define ODIN_WIFI_BSSID_CACHE (5) #define ODIN_WIFI_STA_DEFAULT_CONN_TMO (20000) @@ -51,8 +58,11 @@ struct user_connect_s { const char *ssid; const char *passwd; uint8_t channel; + auth_cert_s *cert_handle; nsapi_security_t security; unsigned int timeout; + const char *user_name; + const char *user_passwd; }; struct user_scan_s { @@ -112,6 +122,8 @@ static void set_wpa_rsn_cipher( cbWLAN_CipherSuite &rsn_ciphers); static bool is_valid_AP_channel(cbWLAN_Channel channel); +static cbTARGET_ConfigParams map_odin_config(target_config_params_e parameter); +static cbTARGET_PowerSaveMode convertPowerSaveAtToIoctl(target_power_save_mode_e powerSaveMode); // Friend declared C-functions that calls corresponding wi-fi object member function struct wlan_callb_s { @@ -230,6 +242,31 @@ nsapi_error_t OdinWiFiInterface::set_credentials(const char *ssid, const char *p return NSAPI_ERROR_OK; } +nsapi_error_t OdinWiFiInterface::set_certificates(const char *client_cert, const char *client_pvt_key , const char *ca_cert ) +{ + int size; + + /* Check if client certificate is valid */ + if((client_cert != NULL) && (*client_cert != '\0')) { + VALIDATE_CERT(client_cert); + _certs.client_cert = client_cert; + /* Check if private key is valid in case passed separately from client_cert */ + if (client_pvt_key!= NULL){ + VALIDATE_CERT(client_pvt_key); + } + /* If private key is passed as part of client cert it could be NULL */ + _certs.client_prvt_key = client_pvt_key; + } + + /* Check if ca certificate is valid */ + if((ca_cert != NULL) || (*ca_cert != '\0' )) { + VALIDATE_CERT(ca_cert); + _certs.ca_cert = ca_cert; + } + + return NSAPI_ERROR_OK; +} + nsapi_error_t OdinWiFiInterface::set_channel(uint8_t channel) { if (channel > 165 || (channel > 11 && channel < 36)){ @@ -327,6 +364,82 @@ nsapi_error_t OdinWiFiInterface::connect( return error_code; } +nsapi_error_t OdinWiFiInterface::connect( + const char *ssid, + const char *pass, + nsapi_security_t security, + auth_cert_s *cert_handle, + const char *username, + const char *user_pswd, + uint8_t channel) +{ + nsapi_error_t error_code = NSAPI_ERROR_OK; + osStatus ok; + + if(ssid == NULL || *ssid == NULL || cert_handle == NULL) { + return NSAPI_ERROR_PARAMETER; + } + + if((security == NSAPI_SECURITY_PEAP) && (username == NULL || user_pswd == NULL)) { + return NSAPI_ERROR_PARAMETER; + } + + if((security == NSAPI_SECURITY_EAP_TLS) && (cert_handle->client_cert == NULL)) { + return NSAPI_ERROR_PARAMETER; + } + + if((pass == NULL || *pass == NULL) && (security == NSAPI_SECURITY_WEP || security == NSAPI_SECURITY_WPA + || security == NSAPI_SECURITY_WPA2 || security == NSAPI_SECURITY_WPA_WPA2)) { + return NSAPI_ERROR_PARAMETER; + } + + // Allocate and initialize user_connect message + struct odin_wifi_msg_s* msg = _msg_pool->alloc(); + MBED_ASSERT(msg != NULL); + + msg->type = ODIN_WIFI_MSG_USER_CONNECT; + msg->data.user_connect.ssid = ssid; // Must be valid until task is completed + msg->data.user_connect.passwd = pass; // Must be valid until task is completed + msg->data.user_connect.security = security; + msg->data.user_connect.channel = channel; + msg->data.user_connect.cert_handle = cert_handle; + msg->data.user_connect.user_name = username; + msg->data.user_connect.user_passwd = user_pswd; + + // Put user_connect message in input queue or cache queue + switch(_state) { + case S_STARTED: + ok = _in_queue.put(msg, 0); + MBED_ASSERT(ok == osOK); + break; + + case S_WAIT_START: + ok = _cache_queue.put(msg, 0); // handle once we are started + MBED_ASSERT(ok == osOK); + break; + + default: + MBED_ASSERT(false); + break; + } + + // To synchronize, wait until response message is available + osEvent evt = _out_queue.get(); + MBED_ASSERT(evt.status == osEventMessage); + + msg = (odin_wifi_msg_s*)evt.value.p; + MBED_ASSERT(msg != 0); + MBED_ASSERT(msg->type == ODIN_WIFI_MSG_USER_CONNECT); + + // Return the result of the connect call + error_code = msg->data.user_response.error; + + ok = _msg_pool->free(msg); + MBED_ASSERT(ok == osOK); + + return error_code; +} + nsapi_error_t OdinWiFiInterface::disconnect() { nsapi_error_t error_code = NSAPI_ERROR_OK; @@ -411,7 +524,35 @@ int OdinWiFiInterface::scan(WiFiAccessPoint *res_list, unsigned count) return found_aps; } -#if DEVICE_WIFI_AP +void OdinWiFiInterface::set_config(void *setting, cb_uint32 value) { + cbTARGET_ConfigParams param; + target_config_params_e configuration = *(target_config_params_e*)setting; + param = map_odin_config(configuration); + wlan_set_gParams(param, value); +} + +void OdinWiFiInterface::wlan_set_gParams(cbTARGET_ConfigParams setting, cb_uint32 value) { + cbMAIN_driverLock(); + cbTARGET_configure(cbTARGET_targetResolve(_target_id), setting, (void*)value); + cbMAIN_driverUnlock(); +} + +unsigned int OdinWiFiInterface::get_config(void *setting) { + cbTARGET_ConfigParams param; + target_config_params_e configuration = *(target_config_params_e*)setting; + param = map_odin_config(configuration); + return wlan_get_gParams(param); +} + +unsigned int OdinWiFiInterface::wlan_get_gParams(cbTARGET_ConfigParams setting) { + cb_uint32 value = 0xFF; + cbMAIN_driverLock(); + cbTARGET_configure(cbTARGET_targetResolve(_target_id), setting, (void*)&value); + cbMAIN_driverUnlock(); + return value; +} + +#ifdef DEVICE_WIFI_AP nsapi_error_t OdinWiFiInterface::set_ap_network(const char *ip_address, const char *netmask, const char *gateway) { @@ -869,7 +1010,10 @@ void OdinWiFiInterface::handle_user_connect(user_connect_s *user_connect) error_code = wlan_set_channel(user_connect->channel); if (error_code == NSAPI_ERROR_OK) { - error_code = wlan_connect(user_connect->ssid, user_connect->passwd, user_connect->security); + if((user_connect->security == NSAPI_SECURITY_PEAP) || (user_connect->security == NSAPI_SECURITY_EAP_TLS)) + error_code = wlan_connect(user_connect->ssid, user_connect->passwd, user_connect->security, user_connect->cert_handle, user_connect->user_name, user_connect->user_passwd, user_connect->channel); + else + error_code = wlan_connect(user_connect->ssid, user_connect->passwd, user_connect->security); } } else { @@ -1152,6 +1296,7 @@ void OdinWiFiInterface::handle_wlan_status_connected(wlan_status_connected_s *wl MBED_ASSERT(wlan_connect != 0); switch(_state_sta) { + case S_STA_CONNECTED: case S_STA_WAIT_CONNECT: _timer.stop(); @@ -1255,14 +1400,11 @@ void OdinWiFiInterface::handle_wlan_status_disconnected(void) _state_sta = S_STA_IDLE; switch(_wlan_status_disconnected_info) { - case cbWLAN_STATUS_DISCONNECTED_NO_BSSID_FOUND: - error_code = NSAPI_ERROR_NO_SSID; - break; - case cbWLAN_STATUS_DISCONNECTED_AUTH_TIMEOUT: case cbWLAN_STATUS_DISCONNECTED_MIC_FAILURE: error_code = NSAPI_ERROR_AUTH_FAILURE; break; + case cbWLAN_STATUS_DISCONNECTED_NO_BSSID_FOUND: case cbWLAN_STATUS_DISCONNECTED_UNKNOWN: error_code = NSAPI_ERROR_NO_CONNECTION; break; @@ -1493,12 +1635,18 @@ nsapi_error_t OdinWiFiInterface::wlan_set_channel(uint8_t channel) nsapi_error_t OdinWiFiInterface::wlan_connect( const char *ssid, const char *passwd, - nsapi_security_t security) + nsapi_security_t security, + auth_cert_s *cert_handle, + const char *username, + const char *user_pswd, + uint8_t channel) { - nsapi_error_t error_code = NSAPI_ERROR_OK; - cbRTSL_Status status = cbSTATUS_OK; - cbWLAN_CommonConnectParameters connect_params; + nsapi_error_t error_code = NSAPI_ERROR_OK; + cbRTSL_Status status = cbSTATUS_OK; + cbWLAN_CommonConnectParameters connect_params; + cbWLAN_EnterpriseConnectParameters enterpriseParams; + memset(&enterpriseParams, 0, sizeof(cbWLAN_EnterpriseConnectParameters)); memset(&connect_params, 0, sizeof(cbWLAN_CommonConnectParameters)); strncpy((char*)connect_params.ssid.ssid, ssid, cbWLAN_SSID_MAX_LENGTH); @@ -1506,34 +1654,59 @@ nsapi_error_t OdinWiFiInterface::wlan_connect( switch (security) { - case NSAPI_SECURITY_NONE: - cbMAIN_driverLock(); - status = cbWLAN_connectOpen(&connect_params); - cbMAIN_driverUnlock(); - break; - case NSAPI_SECURITY_WPA: - case NSAPI_SECURITY_WPA2: - case NSAPI_SECURITY_WPA_WPA2: - char temp_passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH]; - cbWLAN_WPAPSKConnectParameters wpa_connect_params; + case NSAPI_SECURITY_NONE: + cbMAIN_driverLock(); + status = cbWLAN_connectOpen(&connect_params); + cbMAIN_driverUnlock(); + break; + case NSAPI_SECURITY_WPA: + case NSAPI_SECURITY_WPA2: + case NSAPI_SECURITY_WPA_WPA2: + char temp_passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH]; + cbWLAN_WPAPSKConnectParameters wpa_connect_params; - memset(temp_passphrase, 0, cbWLAN_MAX_PASSPHRASE_LENGTH); - strncpy(temp_passphrase, passwd, cbWLAN_MAX_PASSPHRASE_LENGTH); + memset(temp_passphrase, 0, cbWLAN_MAX_PASSPHRASE_LENGTH); + strncpy(temp_passphrase, passwd, cbWLAN_MAX_PASSPHRASE_LENGTH); - cbMAIN_driverLock(); - status = cbWLAN_Util_PSKFromPWD(temp_passphrase, connect_params.ssid, wpa_connect_params.psk.key); + cbMAIN_driverLock(); + status = cbWLAN_Util_PSKFromPWD(temp_passphrase, connect_params.ssid, wpa_connect_params.psk.key); - if (status == cbSTATUS_OK) { - status = cbWLAN_connectWPAPSK(&connect_params, &wpa_connect_params); - } - cbMAIN_driverUnlock(); - if(_debug) {printf("cbWLAN_connect: %d\r\n", status);} - break; + if (status == cbSTATUS_OK) { + status = cbWLAN_connectWPAPSK(&connect_params, &wpa_connect_params); + } + cbMAIN_driverUnlock(); + if(_debug) {printf("cbWLAN_connect: %d\r\n", status);} + break; - case NSAPI_SECURITY_WEP: - default: - status = cbSTATUS_ERROR; - break; + case NSAPI_SECURITY_EAP_TLS: + cbMAIN_driverLock(); + enterpriseParams.authMode = cbWLAN_ENTERPRISE_MODE_EAPTLS; + if((cert_handle->client_cert == NULL) && _debug) + { + printf("No client certificate found in root \r\n"); + } + status = cb_eap_conn_handler(cert_handle->client_cert, cert_handle->client_prvt_key, &connect_params, &enterpriseParams); + cbMAIN_driverUnlock(); + if(_debug) {printf("cbWLAN_connect: %d\r\n", status);} + break; + + case NSAPI_SECURITY_PEAP: + cbMAIN_driverLock(); + enterpriseParams.authMode = cbWLAN_ENTERPRISE_MODE_PEAP; + strncpy((char*)enterpriseParams.username, username, cbWLAN_MAX_USERNAME_LENGTH); + strncpy((char*)enterpriseParams.passphrase, user_pswd, cbWLAN_MAX_USERNAME_LENGTH); + + /* cert_handle->ca_cert could be NULL if client don;t need to verify server */ + status = cb_eap_conn_handler(cert_handle->ca_cert, NULL, &connect_params, &enterpriseParams); + cbMAIN_driverUnlock(); + if(_debug) {printf("cbWLAN_connect: %d\r\n", status);} + break; + + case NSAPI_SECURITY_WEP: + + default: + status = cbSTATUS_ERROR; + break; } if(status != cbSTATUS_OK) { @@ -1839,3 +2012,83 @@ static bool is_valid_AP_channel(cbWLAN_Channel channel) return ok; } + +static cbTARGET_ConfigParams map_odin_config(target_config_params_e parameter) +{ + switch (parameter) { + case ODIN_CFG_SET_POWER_SAVE_MODE: return cbTARGET_CFG_SET_POWER_SAVE_MODE; + case ODIN_CFG_GET_POWER_SAVE_MODE: return cbTARGET_CFG_GET_POWER_SAVE_MODE; + case ODIN_CFG_SET_LISTEN_INTERVAL: return cbTARGET_CFG_SET_LISTEN_INTERVAL; + case ODIN_CFG_GET_LISTEN_INTERVAL: return cbTARGET_CFG_GET_LISTEN_INTERVAL; + case ODIN_CFG_SET_MIN_SCAN_TIME: return cbTARGET_CFG_SET_MIN_SCAN_TIME; + case ODIN_CFG_GET_MIN_SCAN_TIME: return cbTARGET_CFG_GET_MIN_SCAN_TIME; + case ODIN_CFG_SET_MAX_SCAN_TIME: return cbTARGET_CFG_SET_MAX_SCAN_TIME; + case ODIN_CFG_GET_MAX_SCAN_TIME: return cbTARGET_CFG_GET_MAX_SCAN_TIME; + case ODIN_CFG_SET_SCAN_TYPE: return cbTARGET_CFG_SET_SCAN_TYPE; + case ODIN_CFG_GET_SCAN_TYPE: return cbTARGET_CFG_GET_SCAN_TYPE; + case ODIN_CFG_SET_DTIM_ENABLE: return cbTARGET_CFG_SET_DTIM_ENABLE; + case ODIN_CFG_GET_DTIM_ENABLE: return cbTARGET_CFG_GET_DTIM_ENABLE; + case ODIN_CFG_SET_QOS_ENABLE: return cbTARGET_CFG_SET_QOS_ENABLE; + case ODIN_CFG_GET_QOS_ENABLE: return cbTARGET_CFG_GET_QOS_ENABLE; + case ODIN_CFG_SET_RTS_THRESHOLD: return cbTARGET_CFG_SET_RTS_THRESHOLD; + case ODIN_CFG_GET_RTS_THRESHOLD: return cbTARGET_CFG_GET_RTS_THRESHOLD; + case ODIN_CFG_SET_TX_POWER: return cbTARGET_CFG_SET_TX_POWER; + case ODIN_CFG_GET_TX_POWER: return cbTARGET_CFG_GET_TX_POWER; + case ODIN_CFG_SET_MAX_PASSIVE_SCAN_TIME: return cbTARGET_CFG_SET_MAX_PASSIVE_SCAN_TIME; + case ODIN_CFG_GET_MAX_PASSIVE_SCAN_TIME: return cbTARGET_CFG_GET_MAX_PASSIVE_SCAN_TIME; + case ODIN_CFG_SET_SCAN_LISTEN_INTERVAL: return cbTARGET_CFG_SET_SCAN_LISTEN_INTERVAL; + case ODIN_CFG_GET_SCAN_LISTEN_INTERVAL: return cbTARGET_CFG_GET_SCAN_LISTEN_INTERVAL; + case ODIN_CFG_SET_DOT11_SHORT_RETRY_LIMIT: return cbTARGET_CFG_SET_DOT11_SHORT_RETRY_LIMIT; + case ODIN_CFG_GET_DOT11_SHORT_RETRY_LIMIT: return cbTARGET_CFG_GET_DOT11_SHORT_RETRY_LIMIT; + case ODIN_CFG_SET_DOT11_LONG_RETRY_LIMIT: return cbTARGET_CFG_SET_DOT11_LONG_RETRY_LIMIT; + case ODIN_CFG_GET_DOT11_LONG_RETRY_LIMIT: return cbTARGET_CFG_GET_DOT11_LONG_RETRY_LIMIT; + case ODIN_CFG_SET_AP_DOT11_SHORT_RETRY_LIMIT: return cbTARGET_CFG_SET_AP_DOT11_SHORT_RETRY_LIMIT; + case ODIN_CFG_GET_AP_DOT11_SHORT_RETRY_LIMIT: return cbTARGET_CFG_GET_AP_DOT11_SHORT_RETRY_LIMIT; + case ODIN_CFG_SET_AP_DOT11_LONG_RETRY_LIMIT: return cbTARGET_CFG_SET_AP_DOT11_LONG_RETRY_LIMIT; + case ODIN_CFG_GET_AP_DOT11_LONG_RETRY_LIMIT: return cbTARGET_CFG_GET_AP_DOT11_LONG_RETRY_LIMIT; + case ODIN_CFG_SET_REMAIN_ON_CHANNEL: return cbTARGET_CFG_SET_REMAIN_ON_CHANNEL; + case ODIN_CFG_GET_REMAIN_ON_CHANNEL: return cbTARGET_CFG_GET_REMAIN_ON_CHANNEL; + case ODIN_CFG_SET_STA_TX_RATE_MASK: return cbTARGET_CFG_SET_STA_TX_RATE_MASK; + case ODIN_CFG_GET_STA_TX_RATE_MASK: return cbTARGET_CFG_GET_STA_TX_RATE_MASK; + case ODIN_CFG_SET_RSSI_GOOD: return cbTARGET_CFG_SET_RSSI_GOOD; + case ODIN_CFG_GET_RSSI_GOOD: return cbTARGET_CFG_GET_RSSI_GOOD; + case ODIN_CFG_SET_RSSI_BAD: return cbTARGET_CFG_SET_RSSI_BAD; + case ODIN_CFG_GET_RSSI_BAD: return cbTARGET_CFG_GET_RSSI_BAD; + case ODIN_CFG_SET_SLEEP_TIMEOUT: return cbTARGET_CFG_SET_SLEEP_TIMEOUT; + case ODIN_CFG_GET_SLEEP_TIMEOUT: return cbTARGET_CFG_GET_SLEEP_TIMEOUT; + case ODIN_CFG_SET_GOOD_RSSI_YIELD_TMO: return cbTARGET_CFG_SET_GOOD_RSSI_YIELD_TMO; + case ODIN_CFG_GET_GOOD_RSSI_YIELD_TMO: return cbTARGET_CFG_GET_GOOD_RSSI_YIELD_TMO; + case ODIN_CFG_SET_BAD_RSSI_YIELD_TMO: return cbTARGET_CFG_SET_BAD_RSSI_YIELD_TMO; + case ODIN_CFG_GET_BAD_RSSI_YIELD_TMO: return cbTARGET_CFG_GET_BAD_RSSI_YIELD_TMO; + case ODIN_CFG_SET_FORCE_WORLD_MODE: return cbTARGET_CFG_SET_FORCE_WORLD_MODE; + case ODIN_CFG_GET_FORCE_WORLD_MODE: return cbTARGET_CFG_GET_FORCE_WORLD_MODE; + case ODIN_CFG_GET_TX_PACKET_ACK_TIMEOUT_WD: return cbTARGET_CFG_SET_TX_PACKET_ACK_TIMEOUT_WD; + case ODIN_CFG_SET_TX_PACKET_ACK_TIMEOUT_WD: return cbTARGET_CFG_GET_TX_PACKET_ACK_TIMEOUT_WD; + case ODIN_CFG_SET_CTS_PROTECTION: return cbTARGET_CFG_SET_CTS_PROTECTION; + case ODIN_CFG_GET_CTS_PROTECTION: return cbTARGET_CFG_GET_CTS_PROTECTION; + case ODIN_CFG_SET_HIDDEN_SSID: return cbTARGET_CFG_SET_HIDDEN_SSID; + case ODIN_CFG_GET_HIDDEN_SSID: return cbTARGET_CFG_GET_HIDDEN_SSID; + case ODIN_CFG_SET_AP_STA_INACTIVITY_TIMEOUT: return cbTARGET_CFG_SET_AP_STA_INACTIVITY_TIMEOUT; + case ODIN_CFG_GET_AP_STA_INACTIVITY_TIMEOUT: return cbTARGET_CFG_GET_AP_STA_INACTIVITY_TIMEOUT; + case ODIN_CFG_SET_ROAMING_AREA_HYSTERESIS: return cbTARGET_CFG_SET_ROAMING_AREA_HYSTERESIS; + case ODIN_CFG_GET_ROAMING_AREA_HYSTERESIS: return cbTARGET_CFG_GET_ROAMING_AREA_HYSTERESIS; + case ODIN_CFG_SET_PMF_STA: return cbTARGET_CFG_SET_PMF_STA; + case ODIN_CFG_GET_PMF_STA: return cbTARGET_CFG_GET_PMF_STA; + case ODIN_CFG_SET_FT_MODE: return cbTARGET_CFG_SET_FT_MODE; + case ODIN_CFG_GET_FT_MODE: return cbTARGET_CFG_GET_FT_MODE; + default: + MBED_ASSERT(false); + } +} + +static cbTARGET_PowerSaveMode convertPowerSaveAtToIoctl(target_power_save_mode_e powerSaveMode) +{ + switch (powerSaveMode) { + case ODIN_POWER_SAVE_MODE_OFF: return cbTARGET_POWER_SAVE_MODE_OFF; + case ODIN_POWER_SAVE_MODE_SLEEP: return cbTARGET_POWER_SAVE_MODE_SLEEP; + case ODIN_POWER_SAVE_MODE_DEEP_SLEEP: return cbTARGET_POWER_SAVE_MODE_DEEP_SLEEP; + default: + MBED_ASSERT(false); + } +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h index 0d292cd3a7..9cd509dae8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h @@ -22,6 +22,7 @@ #include "UbloxWiFiSoftAPInterface.h" #endif +#include "UbloxWiFiConfigInterface.h" #include "mbed.h" #include "netsocket/WiFiAccessPoint.h" #include "netsocket/EMACInterface.h" @@ -29,6 +30,7 @@ #include "lwip/netif.h" #include "rtos.h" #include "cb_wlan.h" +#include "odin_drv_conf.h" #include "wifi_emac.h" #define ODIN_WIFI_MAX_MAC_ADDR_STR (18) @@ -43,6 +45,12 @@ struct wlan_status_connected_s; struct wlan_status_connection_failure_s; struct wlan_scan_indication_s; +typedef struct { + const char *client_cert; + const char *client_prvt_key; + const char *ca_cert; +}auth_cert_s; + /** OdinWiFiInterface class * Implementation of the WiFiInterface for the ODIN-W2 module */ @@ -70,7 +78,16 @@ public: * @return 0 on success, or error code on failure */ virtual nsapi_error_t set_credentials(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE); - + + /** Set the WiFi network credentials + * + * @param client_cert Pointer to client certificate + * @param client_pvt_key Pointer to client private key + * @param ca_cert Pointer to ca certificate + * @return 0 on success, or error code on failure + */ + nsapi_error_t set_certificates(const char *client_cert, const char *client_pvt_key , const char *ca_cert ); + /** Set the WiFi network channel * * @param channel Channel on which the connection is to be made, or 0 for any (Default: 0) @@ -89,10 +106,32 @@ public: * @return 0 on success, or error code on failure */ virtual nsapi_error_t connect( - const char *ssid, - const char *pass, - nsapi_security_t security = NSAPI_SECURITY_NONE, - uint8_t channel = 0); + const char *ssid, + const char *pass, + nsapi_security_t security = NSAPI_SECURITY_NONE, + uint8_t channel = 0); + + /** Start the interface [local interface] + * + * Attempt to connect to a Wi-Fi network using EAP (EAP_TLS and PEAP). + * + * @param ssid Name of the network to connect to. + * @param pass Security passphrase to connect to the network. + * @param security Type of encryption for connection (Default: NSAPI_SECURITY_NONE). + * @param channel Channel to make the connection, or 0 for any (Default: 0). + * @param auth_cert_s struct contains pointer to client_certificate, client_private_key and ca_certificate (Default: NULL). + * @param username name of client registered with authentication server (Default: NULL). + * @param password password against user registered with authentication server (Default: NULL). + * @return NSAPI_ERROR_OK on success, or error code on failure. + */ + nsapi_error_t connect( + const char *ssid, + const char *pass, + nsapi_security_t security, + auth_cert_s *cert_handle, + const char *username = NULL, + const char *user_pswd = NULL, + uint8_t channel = 0); /** Start the interface * @@ -141,7 +180,22 @@ public: */ virtual nsapi_error_t set_timeout(int ms); -#if DEVICE_WIFI_AP + /** Get general settings and tuning parameters + * + * + * @param setting setting to read. + * @return parameter value + */ + virtual unsigned int get_config(void *setting); + + /** + * Set general tuning parameter. + * + * @param setting setting to modify. + * @param value value to set. + */ + virtual void set_config(void *setting, cb_uint32 value); +#ifdef DEVICE_WIFI_AP /** Set IP config for access point * @@ -326,12 +380,19 @@ private: void handle_wlan_status_ap_up(); void handle_wlan_status_ap_down(); + unsigned int wlan_get_gParams(cbTARGET_ConfigParams setting); + void wlan_set_gParams(cbTARGET_ConfigParams setting, cb_uint32 value); + void init(bool debug); nsapi_error_t wlan_set_channel(uint8_t channel); nsapi_error_t wlan_connect( const char *ssid, const char *passwd, - nsapi_security_t security); + nsapi_security_t security, + auth_cert_s *cert_handle = NULL, + const char *username = NULL, + const char *user_pswd = NULL, + uint8_t channel = 0); nsapi_error_t wlan_ap_start( const char *ssid, const char *pass, @@ -354,6 +415,7 @@ private: struct sta_s _sta; struct ap_s _ap; + auth_cert_s _certs; char _mac_addr_str[ODIN_WIFI_MAX_MAC_ADDR_STR]; cbWLAN_StatusConnectedInfo _wlan_status_connected_info; diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/UbloxWiFiConfigInterface.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/UbloxWiFiConfigInterface.h new file mode 100644 index 0000000000..1136c8ba2b --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/UbloxWiFiConfigInterface.h @@ -0,0 +1,53 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2019, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UBLOX_WIFI_CONFIGAPINTERFACE_H +#define UBLOX_WIFI_CONFIGAPINTERFACE_H + +#include +#include "cb_wlan_driver_config.h" + +/** UbloxWiFiConfigInterface class + * + * Common interface that is shared between WiFi devices supporting SoftAP mode + */ +class UbloxWiFiConfigInterface +{ +public: + /** UbloxWiFiConfigInterface lifetime + */ + virtual ~UbloxWiFiConfigInterface() {}; + + /** Get general settings and tuning parameters + * + * + * @param setting setting to read. + * @return parameter value + */ + virtual unsigned int get_config(void *setting) = 0; + + /** + * Set general tuning parameter. + * + * @param setting setting to modify. + * @param value value to set. + */ + virtual void set_config(void *setting, cb_uint32 value) = 0; +}; + +#endif + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_driver_config.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_driver_config.h index 59a4550f53..2aad3e7d67 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_driver_config.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_driver_config.h @@ -118,6 +118,50 @@ typedef enum targetConfigParams { 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_SET_PMF_STA, //!< Set PMF option + cbTARGET_CFG_GET_PMF_STA, //!< Get PMF option + cbTARGET_CFG_SET_FT_MODE, //!< Set fast transition option + cbTARGET_CFG_GET_FT_MODE, //!< Get fast transition option + cbTARGET_CFG_SET_MIN_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_MIN_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_MAX_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_MAX_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_SCAN_TYPE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_SCAN_TYPE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_QOS_ENABLE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_QOS_ENABLE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_RTS_THRESHOLD, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_RTS_THRESHOLD, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_TX_POWER, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_TX_POWER, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_MAX_PASSIVE_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_MAX_PASSIVE_SCAN_TIME, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_SCAN_LISTEN_INTERVAL, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_SCAN_LISTEN_INTERVAL, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_DOT11_SHORT_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_DOT11_SHORT_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_DOT11_LONG_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_DOT11_LONG_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_AP_DOT11_SHORT_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_AP_DOT11_SHORT_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_AP_DOT11_LONG_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_AP_DOT11_LONG_RETRY_LIMIT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_REMAIN_ON_CHANNEL, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_REMAIN_ON_CHANNEL, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_STA_TX_RATE_MASK, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_STA_TX_RATE_MASK, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_FORCE_WORLD_MODE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_FORCE_WORLD_MODE, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_TX_PACKET_ACK_TIMEOUT_WD, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_TX_PACKET_ACK_TIMEOUT_WD, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_CTS_PROTECTION, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_CTS_PROTECTION, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_HIDDEN_SSID, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_HIDDEN_SSID, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_AP_STA_INACTIVITY_TIMEOUT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_AP_STA_INACTIVITY_TIMEOUT, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_SET_ROAMING_AREA_HYSTERESIS, //!< SEE CORRESPONDING GSETTING + cbTARGET_CFG_GET_ROAMING_AREA_HYSTERESIS, //!< 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. diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/enterprise_handle.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/enterprise_handle.h new file mode 100644 index 0000000000..1883926bfa --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/enterprise_handle.h @@ -0,0 +1,69 @@ +/*--------------------------------------------------------------------------- + * 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 : WIFI + * File : enterprize_handle.h + * + * Description : + *-------------------------------------------------------------------------*/ +#include +#include "cb_comdefs.h" +#include +#include +#include "cb_cert_utils.h" +#include "cb_wlan.h" +#include "cb_hw.h" + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbSECMNG_MAX_CERTIFICATE_SIZE 4096 +#define cbSECMNG_MAX_DER_FILE_SIZE (4096 + 3) // we need to make room for the 3 size bytes +#define cbSECMNG_MD5_LEN 16 +#define cbSECMNG_MD5_STRING_LEN ((cbSECMNG_MD5_LEN * 2) + 1) +#define cbSECMNG_MAX_CERTIFICATE_NAME_LEN 32 +#define cbSECMNG_MAX_CERTIFICATE_PASSWORD_LEN 64 + +/*=========================================================================== + * TYPES + *=========================================================================*/ +typedef enum { + cbSECMNG_TYPE_ALL = -1, + cbSECMNG_TRUSTED_ROOT, + cbSECMNG_CLIENT_CERT, + cbSECMNG_CLIENT_PRIVATE_KEY, +} cbSECMNG_Type; + +/*=========================================================================== + * DECLARATIONS + *=========================================================================*/ +#ifdef __cplusplus +extern "C" { +#endif + +/** Call eap connection handler + * + * @param cert Reference to certificate e.g client or CA server certificate + * @param pvt_key Reference to private key in case if private key is inside cert reference it can be passed as NULL. + In case of EAP_TLS we need private key along with client certificate and not require in case of PEAP so NULL can be passed. + * @param commonParams Connection parameters. + * @param enterpriseParams Enterprise parameters. + * @return 0 on success, or error code on failure + */ +cbRTSL_Status cb_eap_conn_handler(cb_char const* cert, cb_char const* pvt_key, cbWLAN_CommonConnectParameters *commonParams, cbWLAN_EnterpriseConnectParameters *enterpriseParams); + +#ifdef __cplusplus +} +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/odin_drv_conf.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/odin_drv_conf.h new file mode 100644 index 0000000000..358953aa00 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/odin_drv_conf.h @@ -0,0 +1,118 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2019, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ODIN_DRV_CONFIG_H +#define ODIN_DRV_CONFIG_H + +/** Enum of WiFi Configuration types + * + * The configuration type specifies a particular parameter of + * a WiFi interface. And will be used particular configuration to + * use when initializing a WiFi network e.g. 802.11r, 802.11w + * SEE CORRESPONDING GSETTING + * + */ +typedef enum target_config_params_e { + ODIN_CFG_FIRST, + ODIN_CFG_SET_POWER_SAVE_MODE = ODIN_CFG_FIRST, + ODIN_CFG_GET_POWER_SAVE_MODE, + ODIN_CFG_SET_MIN_SCAN_TIME, + ODIN_CFG_GET_MIN_SCAN_TIME, + ODIN_CFG_SET_MAX_SCAN_TIME, + ODIN_CFG_GET_MAX_SCAN_TIME, + ODIN_CFG_SET_SCAN_TYPE, + ODIN_CFG_GET_SCAN_TYPE, + ODIN_CFG_SET_LISTEN_INTERVAL, + ODIN_CFG_GET_LISTEN_INTERVAL, + ODIN_CFG_SET_DTIM_ENABLE, + ODIN_CFG_GET_DTIM_ENABLE, + ODIN_CFG_SET_QOS_ENABLE, + ODIN_CFG_GET_QOS_ENABLE, + ODIN_CFG_SET_RTS_THRESHOLD, + ODIN_CFG_GET_RTS_THRESHOLD, + ODIN_CFG_SET_TX_POWER, + ODIN_CFG_GET_TX_POWER, + ODIN_CFG_SET_MAX_PASSIVE_SCAN_TIME, + ODIN_CFG_GET_MAX_PASSIVE_SCAN_TIME, + ODIN_CFG_SET_SCAN_LISTEN_INTERVAL, + ODIN_CFG_GET_SCAN_LISTEN_INTERVAL, + ODIN_CFG_SET_DOT11_SHORT_RETRY_LIMIT, + ODIN_CFG_GET_DOT11_SHORT_RETRY_LIMIT, + ODIN_CFG_SET_DOT11_LONG_RETRY_LIMIT, + ODIN_CFG_GET_DOT11_LONG_RETRY_LIMIT, + ODIN_CFG_SET_AP_DOT11_SHORT_RETRY_LIMIT, + ODIN_CFG_GET_AP_DOT11_SHORT_RETRY_LIMIT, + ODIN_CFG_SET_AP_DOT11_LONG_RETRY_LIMIT, + ODIN_CFG_GET_AP_DOT11_LONG_RETRY_LIMIT, + ODIN_CFG_SET_REMAIN_ON_CHANNEL, + ODIN_CFG_GET_REMAIN_ON_CHANNEL, + ODIN_CFG_SET_STA_TX_RATE_MASK, + ODIN_CFG_GET_STA_TX_RATE_MASK, + ODIN_CFG_SET_RSSI_GOOD, + ODIN_CFG_GET_RSSI_GOOD, + ODIN_CFG_SET_RSSI_BAD, + ODIN_CFG_GET_RSSI_BAD, + ODIN_CFG_SET_SLEEP_TIMEOUT, + ODIN_CFG_GET_SLEEP_TIMEOUT, + ODIN_CFG_SET_GOOD_RSSI_YIELD_TMO, + ODIN_CFG_GET_GOOD_RSSI_YIELD_TMO, + ODIN_CFG_SET_BAD_RSSI_YIELD_TMO, + ODIN_CFG_GET_BAD_RSSI_YIELD_TMO, + ODIN_CFG_SET_FORCE_WORLD_MODE, + ODIN_CFG_GET_FORCE_WORLD_MODE, + ODIN_CFG_SET_TX_PACKET_ACK_TIMEOUT_WD, + ODIN_CFG_GET_TX_PACKET_ACK_TIMEOUT_WD, + ODIN_CFG_SET_CTS_PROTECTION, + ODIN_CFG_GET_CTS_PROTECTION, + ODIN_CFG_SET_HIDDEN_SSID, + ODIN_CFG_GET_HIDDEN_SSID, + ODIN_CFG_SET_AP_STA_INACTIVITY_TIMEOUT, + ODIN_CFG_GET_AP_STA_INACTIVITY_TIMEOUT, + ODIN_CFG_SET_ROAMING_AREA_HYSTERESIS, + ODIN_CFG_GET_ROAMING_AREA_HYSTERESIS, + ODIN_CFG_SET_RSSI_MIN, + ODIN_CFG_GET_RSSI_MIN, + ODIN_CFG_SET_ROAM_BAD_CHANNEL_RSSI_HYSTERESIS, + ODIN_CFG_GET_ROAM_BAD_CHANNEL_RSSI_HYSTERESIS, + ODIN_CFG_SET_ROAM_NO_ROAM_TMO, + ODIN_CFG_GET_ROAM_NO_ROAM_TMO, + ODIN_CFG_SET_ROAM_WAIT_TIMEOUT, + ODIN_CFG_GET_ROAM_WAIT_TIMEOUT, + ODIN_CFG_SET_SHORT_GI, + ODIN_CFG_GET_SHORT_GI, + ODIN_CFG_SET_WIRELESS_ISOLATION, + ODIN_CFG_GET_WIRELESS_ISOLATION, + ODIN_CFG_SET_PMF_STA, + ODIN_CFG_GET_PMF_STA, + ODIN_CFG_SET_FT_MODE, + ODIN_CFG_GET_FT_MODE, + ODIN_CFG_LAST, +} target_config_params_e; + +/** +* Power save modes set using @ref cbWLAN_ioctl +* +* @ingroup wlan +*/ +typedef enum { + ODIN_POWER_SAVE_MODE_OFF, + ODIN_POWER_SAVE_MODE_SLEEP, + ODIN_POWER_SAVE_MODE_DEEP_SLEEP +} target_power_save_mode_e; + +#endif +