385 lines
10 KiB
C
385 lines
10 KiB
C
/*
|
|
* Copyright 2020-2021, NXP
|
|
* All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef _SERIAL_MWM_H_
|
|
#define _SERIAL_MWM_H_
|
|
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
/*!
|
|
* @defgroup serial_mwm SerialMWM
|
|
* @{
|
|
*/
|
|
|
|
/*******************************************************************************
|
|
* Definitions
|
|
******************************************************************************/
|
|
/* Socket type */
|
|
#define MWM_TCP 0
|
|
#define MWM_UDP 1
|
|
|
|
/* State codes */
|
|
#define MWM_INITIALIZED 350
|
|
#define MWM_PROVISIONING 351
|
|
#define MWM_PROVISIONING_DONE 352
|
|
#define MWM_CONNECTING 353
|
|
#define MWM_CONNECTED 354
|
|
#define MWM_CONNECT_FAILED 355
|
|
#define MWM_DISCONNECTED 356
|
|
|
|
/* Authentication failed */
|
|
#define MWM_AUTH_FAILED 381
|
|
/* Network not found */
|
|
#define MWM_NETWORK_NOT_FOUND 382
|
|
|
|
#define MWM_SOCKET_ERROR -700
|
|
#define EAGAIN 11
|
|
|
|
/* Device Configuration */
|
|
/* Provisioning Configuration */
|
|
#define MWM_MOD_PROV "prov"
|
|
#define MWM_PROV_SSID "ssid"
|
|
#define MWM_PROV_SECURITY "security"
|
|
#define MWM_PROV_PASSPHRASE "passphrase"
|
|
#define MWM_PROV_MDNS_ENABLED "mdns_enabled"
|
|
#define MWM_PROV_DEVICE_KEY "device_key"
|
|
/* WLAN Configuration */
|
|
#define MWM_MOD_WLAN "wlan"
|
|
#define MWM_WLAN_SSID "ssid"
|
|
#define MWM_WLAN_BSSID "bssid"
|
|
#define MWM_WLAN_SECURITY "security"
|
|
#define MWM_WLAN_PASSPHRASE "passphrase"
|
|
#define MWM_WLAN_CHANNEL "channel"
|
|
#define MWM_WLAN_CONFIGURED "configured"
|
|
#define MWM_WLAN_RECONNECT_DELAY "reconnect_delay"
|
|
#define MWM_WLAN_RECONNECT_ATTEMPTS "reconnect_attempts"
|
|
#define MWM_WLAN_IPADDR_TYPE "ipaddr_type"
|
|
#define MWM_WLAN_IPADDR "ipaddr"
|
|
#define MWM_WLAN_IPADDR_GATEWAY "gateway"
|
|
#define MWM_WLAN_IPADDR_NETMASK "netmask"
|
|
#define MWM_WLAN_IPADDR_DNS1 "dns1"
|
|
#define MWM_WLAN_IPADDR_DNS2 "dns2"
|
|
#define MWM_WLAN_CHECK_SERVER_CERT "chk_server_cert"
|
|
#define MWM_WLAN_VALID_CERT_PARTITION "valid_cert_partition"
|
|
#define MWM_WLAN_MAC "mac"
|
|
#define MWM_WLAN_REGION_CODE "region_code"
|
|
/* System Configuration */
|
|
#define MWM_MOD_SYSTEM "system"
|
|
#define MWM_SYS_IEEE_LISTEN_INTERVAL "ieee_listen_interval"
|
|
#define MWM_SYS_PROTO_UART_BAUDRATE "proto_uart_baudrate"
|
|
#define MWM_SYS_PROTO_UART_STOPBITS "proto_uart_stopbits"
|
|
#define MWM_SYS_PROTO_UART_PARITY "proto_uart_parity"
|
|
#define MWM_SYS_PROTO_UART_FLOW_CONTROL "proto_uart_flow_control"
|
|
#define MWM_SYS_PM_EXT_GPIO "pm_ext_gpio"
|
|
#define MWM_SYS_PM_EXT_GPIO_LEVEL "pm_ext_gpio_level"
|
|
#define MWM_SYS_HOST_WK_GPIONO "host_wk_gpio"
|
|
#define MWM_SYS_HOST_WK_GPIO_LEVEL "host_wk_gpio_level"
|
|
#define MWM_SYS_HOST_WK_DELAY "host_wk_delay"
|
|
#define MWM_SYS_HOSTNAME "hostname"
|
|
#define MWM_SYS_PROTO_UART_ID "proto_uart_id"
|
|
#define MWM_SYS_DEBUG_UART_ID "debug_uart_id"
|
|
|
|
/* Firmware Upgrade */
|
|
#define MWM_UPGRADE_MCU_FW "fw"
|
|
#define MWM_UPGRADE_WLAN_FW "wf"
|
|
#define MWM_UPGRADE_STATUS "?"
|
|
|
|
#define MWM_UPGRADE_NOT_STARTED 213
|
|
#define MWM_UPGRADE_STARTED 214
|
|
#define MWM_UPGRADE_IN_PROGRESS 215
|
|
#define MWM_UPGRADE_SUCCESSFUL 216
|
|
|
|
/*! @brief SerialMWM socket address structure. */
|
|
typedef struct
|
|
{
|
|
char host[64]; /*!< Hostname or IP Address */
|
|
uint16_t port;
|
|
} mwm_sockaddr_t;
|
|
|
|
/*! @brief SerialMWM WLAN structure. */
|
|
typedef struct
|
|
{
|
|
char bssid[18];
|
|
char ssid[33];
|
|
uint8_t channel;
|
|
int8_t rssi;
|
|
uint8_t security;
|
|
} mwm_wlan_t;
|
|
|
|
/*******************************************************************************
|
|
* API
|
|
******************************************************************************/
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
* @name Initialization
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Initializes SerialMWM library.
|
|
*
|
|
* This function resets connected Wi-Fi module by reset pin (if supported) and initializes
|
|
* the UART interface for communication with Wi-Fi module.
|
|
*
|
|
* @retval -1 Error
|
|
* @retval 0 Success
|
|
*/
|
|
int mwm_init(void);
|
|
|
|
/*! @} */
|
|
|
|
/*!
|
|
* @name WLAN API
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Gets SerialMWM firmware version.
|
|
*
|
|
* This function gets SerialMWM firmware version of the Wi-Fi module.
|
|
*
|
|
* @param value Pointer to buffer where the version string will be stored
|
|
* @param val_len Length of value buffer
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_version(char *value, uint32_t val_len);
|
|
|
|
/*!
|
|
* @brief Upgrades firmware of Wi-Fi module.
|
|
*
|
|
* This function upgrades SerialMWM firmware, WLAN firmware or it can be used to check the upgrade status.
|
|
*
|
|
* @param type MWM_UPGRADE_MCU_FW for SerialMWM FW upgrade, MWM_UPGRADE_WLAN_FW for WLAN FW upgrade or
|
|
* MWM_UPGRADE_STATUS to check upgrade status
|
|
* @param url URL of firmware image file for upgrade or NULL in case of upgrade status check
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_upgrade(char *type, char *url);
|
|
|
|
/*!
|
|
* @brief Reboots Wi-Fi module.
|
|
*
|
|
* This function reboots Wi-Fi module and re-initializes UART interface.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_reboot(void);
|
|
/*! @} */
|
|
|
|
/*!
|
|
* @name WLAN API
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Gets WLAN firmware version.
|
|
*
|
|
* This function gets WLAN firmware version of the Wi-Fi module.
|
|
*
|
|
* @param value Pointer to buffer where the version string will be stored
|
|
* @param val_len Length of value buffer
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_fw_version(char *value, uint32_t val_len);
|
|
|
|
/*!
|
|
* @brief Start WLAN subsystem.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_start(void);
|
|
|
|
/*!
|
|
* @brief Gets WLAN status.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_status(void);
|
|
|
|
/*!
|
|
* @brief Resets WLAN module to provisioning mode.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_prov(void);
|
|
|
|
/*!
|
|
* @brief Gets WLAN information.
|
|
*
|
|
* This function gets WLAN information (SSID and IP Address) from the Wi-Fi module.
|
|
*
|
|
* @param ssid Pointer to buffer where the SSID string will be stored
|
|
* @param ip_addr Pointer to buffer where the IP Address string will be stored
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_info(char *ssid, char *ip_addr);
|
|
|
|
/*!
|
|
* @brief Scans WLAN.
|
|
*
|
|
* This function gets cached scan results and schedules a new scan.
|
|
*
|
|
* @param wlans Pointer to array of mwm_wlan_t where the WLAN struct will be stored
|
|
* @param wlan_count Length of wlans array
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_scan(mwm_wlan_t *wlans, uint32_t wlan_count);
|
|
|
|
/*!
|
|
* @brief Connects to WLAN.
|
|
*
|
|
* This function attempts to make an explicit connection with the configured WLAN.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_connect(void);
|
|
|
|
/*!
|
|
* @brief Disconnects from WLAN.
|
|
*
|
|
* This function disconnects Wi-Fi module from WLAN it is connected to.
|
|
*
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_wlan_disconnect(void);
|
|
|
|
/*! @} */
|
|
|
|
/*!
|
|
* @name Device Configuration API
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Gets parameter from Wi-Fi module.
|
|
*
|
|
* This function gets parameter from Wi-Fi module.
|
|
*
|
|
* @param module Module of requested parameter, it can be MWM_MOD_PROV, MWM_MOD_WLAN or MWM_MOD_SYSTEM
|
|
* @param param Name of requested parameter, it can be MWM_PROV_*, MWM_WLAN_* or MWM_SYS_* based on selected module
|
|
* @param value Pointer to buffer where the value of requested parameter will be stored
|
|
* @param val_len Length of value buffer
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_get_param(char *module, char *param, char *value, uint32_t val_len);
|
|
|
|
/*!
|
|
* @brief Sets parameter from Wi-Fi module.
|
|
*
|
|
* This function sets parameter of Wi-Fi module.
|
|
*
|
|
* @param module Module whose parameter will be set, it can be MWM_MOD_PROV, MWM_MOD_WLAN or MWM_MOD_SYSTEM
|
|
* @param param Name of configured parameter, it can be MWM_PROV_*, MWM_WLAN_* or MWM_SYS_* based on selected module
|
|
* @param value Pointer to string value of configured parameter
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_set_param(char *module, char *param, char *value);
|
|
/*! @} */
|
|
|
|
/*!
|
|
* @name Socket API
|
|
* @{
|
|
*/
|
|
|
|
/*!
|
|
* @brief Opens socket.
|
|
*
|
|
* This function opens socket.
|
|
*
|
|
* @param type Type of socket, it can be MWM_TCP or MWM_UDP
|
|
* @return handle of socket, negative number - error
|
|
*/
|
|
int mwm_socket(int type);
|
|
|
|
/*!
|
|
* @brief Opens socket.
|
|
*
|
|
* This function connects the socket to remote host.
|
|
*
|
|
* @param socket Handle of socket
|
|
* @param addr Valid address of remote host
|
|
* @param addrlen Size of addr
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_connect(int socket, mwm_sockaddr_t *addr, uint32_t addrlen);
|
|
|
|
/*!
|
|
* @brief Sends data.
|
|
*
|
|
* This function sends data over a connected socket.
|
|
*
|
|
* @param socket Handle of socket
|
|
* @param buf Pointer to data buffer
|
|
* @param len Size of buf
|
|
* @return Number of bytes sent, negative number - error
|
|
*/
|
|
int mwm_send(int socket, void *buf, size_t len);
|
|
|
|
/*!
|
|
* @brief Sends data.
|
|
*
|
|
* This function sends data to a specified destination host and port (mwm_sockaddr_t).
|
|
*
|
|
* @param socket Handle of socket
|
|
* @param buf Pointer to data buffer
|
|
* @param len Size of buf
|
|
* @param to Address of remote host
|
|
* @param tolen Size of to
|
|
* @return Number of bytes sent, negative number - error
|
|
*/
|
|
int mwm_sendto(int socket, char *buf, int len, mwm_sockaddr_t *to, int tolen);
|
|
|
|
/*!
|
|
* @brief Receives data.
|
|
*
|
|
* This function receives data on a connected socket.
|
|
*
|
|
* @param socket Handle of socket
|
|
* @param buf Pointer to data buffer
|
|
* @param len Size of buf
|
|
* @param timeout_ms Timeout in ms - maximum amount of time that the request may block while waiting for data, 0
|
|
* indicates it blocks forever
|
|
* @return Number of bytes received, negative number - error
|
|
*/
|
|
int mwm_recv_timeout(int socket, void *buf, size_t len, int timeout_ms);
|
|
|
|
/*!
|
|
* @brief Receives data.
|
|
*
|
|
* This function receives data on the opened socket.
|
|
*
|
|
* @param socket Handle of socket
|
|
* @param buf Pointer to data buffer
|
|
* @param len Size of buf
|
|
* @param timeout_ms Timeout in ms - maximum amount of time that the request may block while waiting for data, 0
|
|
* indicates it blocks forever
|
|
* @return Number of bytes received, negative number - error
|
|
*/
|
|
int mwm_recvfrom_timeout(int socket, void *buf, size_t len, int timeout_ms);
|
|
|
|
/*!
|
|
* @brief Closes socket.
|
|
*
|
|
* This function closes a socket.
|
|
*
|
|
* @param socket Handle of socket
|
|
* @return 0 - success, negative number - error
|
|
*/
|
|
int mwm_close(int socket);
|
|
/*! @} */
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
/*! @} */
|
|
#endif /* _SERIAL_MWM_H_ */
|