Extending the X_NUCLEO_IDW01M1 to allow configuration of the board as an access point
Dependents: X_NUCLEO_IDW01M1_AP_Test
Fork of X_NUCLEO_IDW01M1 by
Diff: Spwf/inc/wifi_interface.h
- Revision:
- 1:bd9db471d47d
- Parent:
- 0:dc55f40eb04f
- Child:
- 8:0f302a13e21b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Spwf/inc/wifi_interface.h Thu Apr 14 06:14:14 2016 +0000 @@ -0,0 +1,332 @@ +/** + ****************************************************************************** + * @file wifi_interface.h + * @author Central LAB + * @version V2.0.0 + * @date 10-February-2016 + * @brief Header file for X-CUBE-WIFI1 API + ****************************************************************************** + * @attention + * + * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __WIFI_INTERFACE_H +#define __WIFI_INTERFACE_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include<stdint.h> + + /** @addtogroup MIDDLEWARES +* @{ +*/ + + +/** @addtogroup NUCLEO_WIFI_API + * @brief Wi-Fi_interface API + * @{ + */ + + +/** @addtogroup NUCLEO_WIFI_API_Private_Macros + * @{ + */ + + + /** + * @} + */ + + +/** @addtogroup NUCLEO_WIFI_API_Private_Variables + * @{ + */ +/* Private variables ---------------------------------------------------------*/ + + +/* Exported macro ------------------------------------------------------------*/ +#define _ARG6(_0, _1, _2, _3, _4, _5, _6, ...) _6 +#define NARG6(...) _ARG6(__VA_ARGS__, 6, 5, 4, 3, 2, 1, 0) +#define _FIVE_OR_SIX_ARGS_5(NAME, a, b, c, d, e) a, b, c, d, e, 1453727657 +#define _FIVE_OR_SIX_ARGS_6(NAME, a, b, c, d, e, f) a, b, c, d, e, f +#define __FIVE_OR_SIX_ARGS(NAME, N, ...) _FIVE_OR_SIX_ARGS_ ## N (NAME, __VA_ARGS__) +#define _FIVE_OR_SIX_ARGS(NAME, N, ...) __FIVE_OR_SIX_ARGS(NAME, N, __VA_ARGS__) +#define FIVE_OR_SIX_ARGS(NAME, ...) NAME(_FIVE_OR_SIX_ARGS(NAME, NARG6(__VA_ARGS__), __VA_ARGS__)) + +#define wifi_socket_client_security(...) FIVE_OR_SIX_ARGS(wifi_socket_client_security, __VA_ARGS__) + +/* Exported constants --------------------------------------------------------*/ +#define GPIO_IN "in" +#define GPIO_OUT "out" + +#define GPIO_Off '0' +#define GPIO_Rising 'R' +#define GPIO_Falling 'F' +#define GPIO_Both 'B' + +typedef enum GpioWriteValue +{ + GPIO_OFF = 0, + GPIO_ON, +} GpioWriteValue; + +typedef enum GpioPin +{ + GPIO_PIN0 = 0, + GPIO_PIN1, + GPIO_PIN2, + GPIO_PIN3, + GPIO_PIN4, + GPIO_PIN5, + GPIO_PIN6, + GPIO_PIN7, + GPIO_PIN8, + GPIO_PIN9, + GPIO_PIN10, + GPIO_PIN11, + GPIO_PIN12, + GPIO_PIN13, + GPIO_PIN14, + GPIO_PIN15 +} GpioPin; + +typedef enum wifi_bool +{ + WIFI_FALSE = 0, + WIFI_TRUE = 1, + Undefine = 0xFF +} wifi_bool; + +typedef enum WiFi_Priv_Mode +{ + None = 0, + WEP = 1, + WPA_Personal = 2, +} WiFi_Priv_Mode; + +/********** Wi-Fi Error *************/ +typedef enum WiFi_Status_t +{ + WiFi_MODULE_SUCCESS = 0, + WiFi_TIME_OUT_ERROR = 1, + WiFi_MODULE_ERROR, + WiFi_HAL_OK, + WiFi_NOT_SUPPORTED, + WiFi_NOT_READY, + WiFi_SCAN_FAILED, + WiFi_AT_CMD_BUSY, + WiFi_SSID_ERROR, + WiFi_SecKey_ERROR, + WiFi_CONFIG_ERROR, + WiFi_STA_MODE_ERROR, + WiFi_AP_MODE_ERROR, + WiFi_AT_CMD_RESP_ERROR, + WiFi_AT_FILE_LENGTH_ERROR, + WiFi_HAL_UART_ERROR, + WiFi_IN_LOW_POWER_ERROR, + WiFi_HW_FAILURE_ERROR, + WiFi_HEAP_TOO_SMALL_WARNING, + WiFi_STACK_OVERFLOW_ERROR, + WiFi_HARD_FAULT_ERROR, + WiFi_MALLOC_FAILED_ERROR, + WiFi_INIT_ERROR, + WiFi_POWER_SAVE_WARNING, + WiFi_SIGNAL_LOW_WARNING, + WiFi_JOIN_FAILED, + WiFi_SCAN_BLEWUP, + WiFi_START_FAILED_ERROR, + WiFi_EXCEPTION_ERROR, + WiFi_DE_AUTH, + WiFi_DISASSOCIATION, + WiFi_UNHANDLED_IND_ERROR, + WiFi_RX_MGMT, + WiFi_RX_DATA, + WiFi_RX_UNK +} WiFi_Status_t; + +typedef enum power_mode +{ + wifi_active = 0, + wifi_reactive = 1, + wifi_sleep = 2, +} power_mode; + +typedef enum tx_power_level +{ + low = 0, + medium = 1, + high = 2, + max = 3, +} tx_power_level; + +typedef enum dhcp_mode +{ + off = 0, + on = 1, + custom = 2, +} dhcp_mode; + +typedef struct wifi_security +{ + wifi_bool wpa; + wifi_bool wpa2; + wifi_bool wps; +} wifi_security; + +typedef struct wifi_scan +{ + uint8_t channel_num; + int rssi; + char ssid[30]; + wifi_security sec_type; +} wifi_scan; + +typedef struct wifi_config +{ + wifi_bool ht_mode; + power_mode power; + tx_power_level power_level; + dhcp_mode dhcp; + char* ip_addr; + char* netmask_addr; + char* gateway_addr; + char* dns_addr; + char* host_name; + wifi_bool web_server; + char* ap_domain_name; + char* ap_config_page_name; + uint32_t http_timeout; + uint32_t dhcp_timeout; + uint8_t wifi_region; + uint32_t wifi_baud_rate; +} wifi_config; + +/* Exported functions ------------------------------------------------------- */ + +#ifdef WIFI_USE_VCOM +void wifi_vcom(void); +#endif + +WiFi_Status_t wifi_init(wifi_config* config); +WiFi_Status_t wifi_restore(void); +WiFi_Status_t wifi_enable(wifi_bool enable); +WiFi_Status_t wifi_disconnect(void); +WiFi_Status_t wifi_connect(char * ssid, char * sec_key, WiFi_Priv_Mode priv_mode); +WiFi_Status_t wifi_ap_start(uint8_t * ssid, uint8_t channel_num); +WiFi_Status_t wifi_adhoc_create(uint8_t * ssid, WiFi_Priv_Mode priv_mode); +WiFi_Status_t wifi_network_scan(wifi_scan *scan_result, uint16_t max_scan_number); +void wifi_reset(void); + +/******** Wi-Fi Socket Function **********/ +WiFi_Status_t wifi_socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id); +WiFi_Status_t wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData); +WiFi_Status_t wifi_socket_client_close(uint8_t sock_close_id); +WiFi_Status_t wifi_socket_client_security(uint8_t* tls_mode, uint8_t* root_ca_server, uint8_t* client_cert, uint8_t* client_key, uint8_t* client_domain, uint32_t tls_epoch_time); + +/********* Wi-Fi Socket Server ********/ +WiFi_Status_t wifi_socket_server_open(uint32_t port_number, uint8_t * protocol); +WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData); +WiFi_Status_t wifi_socket_server_close(void); + +/*** FileSystem Request ***********/ +WiFi_Status_t wifi_file_create(char *pFileName,uint16_t alength,char * databuff); +WiFi_Status_t wifi_file_delete(char * pFileName); +WiFi_Status_t wifi_file_list(void); +WiFi_Status_t wifi_file_show(uint8_t * pFileName); +WiFi_Status_t wifi_file_image_create(uint8_t * pHostName,uint8_t * pFileName, uint32_t port_number); +WiFi_Status_t wifi_file_erase_external_flash(void); + +/*** HTTP File Request ***********/ +WiFi_Status_t wifi_http_get(uint8_t * hostname, uint8_t * path, uint32_t port_number); +WiFi_Status_t wifi_http_post(uint8_t * url_path); + +WiFi_Status_t wifi_fw_update(uint8_t * hostname, uint8_t * filename_path, uint32_t port_number); + +/*** Power Configuration **********/ +WiFi_Status_t wifi_standby(uint8_t arg_standby_time); +WiFi_Status_t wifi_wakeup(wifi_bool enable); + +/*** GPIO Configuration **********/ +uint8_t wifi_gpio_init(GpioPin pin, char* dir, char irq); +uint8_t wifi_gpio_read(GpioPin pin, uint8_t *val, uint8_t *dir); +uint8_t wifi_gpio_write(GpioPin pin, GpioWriteValue value); + +WiFi_Status_t WiFi_Get_IP_Address(uint8_t *ip_addr); +WiFi_Status_t WiFi_Get_MAC_Address(uint8_t *mac_addr); + +void UART_Configuration(uint32_t baud_rate); +void GPIO_Configuration(void); +void Timer_Config(void); +void UART_Msg_Gpio_Init(void); +void USART_PRINT_MSG_Configuration(uint32_t baud_rate); + +/******** Wi-Fi Indication User Callback: For User to implement *********/ +void ind_wifi_warning(WiFi_Status_t warning_code); +void ind_wifi_error(WiFi_Status_t error_code); +void ind_wifi_connection_error(WiFi_Status_t status_code); +void ind_wifi_connected(void); +void ind_wifi_ap_ready(void); +void ind_wifi_ap_client_joined(uint8_t * client_mac_address); +void ind_wifi_ap_client_left(uint8_t * client_mac_address); +void ind_wifi_on(void); +void ind_wifi_packet_lost(WiFi_Status_t status_code); +void ind_wifi_gpio_changed(void); +void ind_wifi_socket_data_received(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size); +void ind_wifi_socket_client_remote_server_closed(uint8_t * socketID); +void ind_wifi_socket_server_data_lost(void); +void ind_socket_server_client_joined(void); +void ind_socket_server_client_left(void); +void ind_wifi_http_data_available(uint8_t * data_ptr,uint32_t message_size); +void ind_wifi_file_data_available(uint8_t * data_ptr); +void ind_wifi_resuming(void); + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus + } +#endif + +#endif /* __WIFI_INTERFACE_H */