Skip to content

Commit 0b8fde3

Browse files
Loic Poulainjukkar
authored andcommitted
driver: wifi: Add inventek es-WiFi driver
es-WiFi compatible modules use IWIN AT command set. This driver is split into several layers: - bus layer: interface to transmit AT commands (SPI, USB, UART...) - core layer: es-WiFi module management (state, scan...) - offload layer: TCP/IP offload operations (connect, listen...) This driver has been tested with stm32l4 disco iot board (disco_l475_iot1) and the wifi sample: $ select wifi $ scan $ connect "CISCO" 5 password $ select net $ tcp connect 192.168.1.21 4242 $ tcp send HelloWorld! Signed-off-by: Loic Poulain <[email protected]>
1 parent a94f97b commit 0b8fde3

File tree

9 files changed

+1451
-0
lines changed

9 files changed

+1451
-0
lines changed

drivers/wifi/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
add_subdirectory_ifdef(CONFIG_WIFI_WINC1500 winc1500)
22
add_subdirectory_ifdef(CONFIG_WIFI_SIMPLELINK simplelink)
3+
add_subdirectory_ifdef(CONFIG_WIFI_ESWIFI eswifi)

drivers/wifi/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ config WIFI_OFFLOAD
3535

3636
source "drivers/wifi/winc1500/Kconfig.winc1500"
3737
source "drivers/wifi/simplelink/Kconfig.simplelink"
38+
source "drivers/wifi/eswifi/Kconfig.eswifi"
3839

3940
endif # WIFI

drivers/wifi/eswifi/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
if(CONFIG_WIFI_ESWIFI)
2+
zephyr_include_directories(./)
3+
4+
zephyr_library_include_directories(
5+
# IP headers
6+
${ZEPHYR_BASE}/subsys/net/ip
7+
)
8+
9+
zephyr_sources(
10+
eswifi_core.c
11+
eswifi_bus_spi.c
12+
eswifi_offload.c
13+
)
14+
endif()

drivers/wifi/eswifi/Kconfig.eswifi

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Kconfig - es-WiFi driver options
2+
3+
#
4+
# Copyright (c) 2018 Linaro
5+
#
6+
# SPDX-License-Identifier: Apache-2.0
7+
#
8+
9+
menuconfig WIFI_ESWIFI
10+
bool "Inventek eS-WiFi support"
11+
depends on WIFI
12+
select NET_L2_WIFI_MGMT
13+
select WIFI_OFFLOAD
14+
15+
if WIFI_ESWIFI
16+
17+
config WIFI_ESWIFI_NAME
18+
string "Driver name"
19+
default "ESWIFI"
20+
21+
config WIFI_ESWIFI_THREAD_PRIO
22+
int "esWiFi threads priority"
23+
default 2
24+
help
25+
This option sets the priority of the esWiFi threads.
26+
Do not touch it unless you know what you are doing.
27+
28+
endif

drivers/wifi/eswifi/eswifi.h

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/**
2+
* Copyright (c) 2018 Linaro
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef ZEPHYR_DRIVERS_WIFI_ESWIFI_ESWIFI_H_
8+
#define ZEPHYR_DRIVERS_WIFI_ESWIFI_ESWIFI_H_
9+
10+
#include <zephyr.h>
11+
#include <kernel.h>
12+
13+
#include <net/wifi_mgmt.h>
14+
15+
#include "eswifi_offload.h"
16+
17+
#define MAX_DATA_SIZE 1600
18+
19+
#define AT_OK_STR "\r\nOK\r\n> "
20+
#define AT_OK_STR_LEN 8
21+
#define AT_RSP_DELIMITER "\r\n"
22+
#define AT_RSP_DELIMITER_LEN 2
23+
24+
struct device *uarthost;
25+
26+
struct eswifi_gpio {
27+
struct device *dev;
28+
unsigned int pin;
29+
};
30+
31+
enum eswifi_security_type {
32+
ESWIFI_SEC_OPEN,
33+
ESWIFI_SEC_WEP,
34+
ESWIFI_SEC_WPA,
35+
ESWIFI_SEC_WPA2_AES,
36+
ESWIFI_SEC_WPA2_MIXED,
37+
ESWIFI_SEC_MAX
38+
};
39+
40+
enum eswifi_request {
41+
ESWIFI_REQ_SCAN,
42+
ESWIFI_REQ_CONNECT,
43+
ESWIFI_REQ_DISCONNECT,
44+
ESWIFI_REQ_NONE
45+
};
46+
47+
enum eswifi_role {
48+
ESWIFI_ROLE_CLIENT,
49+
ESWIFI_ROLE_AP,
50+
};
51+
52+
struct eswifi_sta {
53+
char ssid[WIFI_SSID_MAX_LEN + 1];
54+
enum eswifi_security_type security;
55+
char pass[65];
56+
bool connected;
57+
};
58+
59+
struct eswifi_bus_ops;
60+
61+
struct eswifi_dev {
62+
struct net_if *iface;
63+
struct eswifi_bus_ops *bus;
64+
struct eswifi_gpio resetn;
65+
struct eswifi_gpio wakeup;
66+
scan_result_cb_t scan_cb;
67+
struct k_work_q work_q;
68+
struct k_work request_work;
69+
struct eswifi_sta sta;
70+
enum eswifi_request req;
71+
enum eswifi_role role;
72+
char buf[MAX_DATA_SIZE];
73+
struct k_mutex mutex;
74+
void *bus_data;
75+
struct eswifi_off_socket socket[ESWIFI_OFFLOAD_MAX_SOCKETS];
76+
};
77+
78+
struct eswifi_bus_ops {
79+
int (*init)(struct eswifi_dev *eswifi);
80+
int (*request)(struct eswifi_dev *eswifi, char *cmd, size_t clen,
81+
char *rsp, size_t rlen);
82+
};
83+
84+
static inline int eswifi_request(struct eswifi_dev *eswifi, char *cmd,
85+
size_t clen, char *rsp, size_t rlen)
86+
{
87+
return eswifi->bus->request(eswifi, cmd, clen, rsp, rlen);
88+
}
89+
90+
static inline void eswifi_lock(struct eswifi_dev *eswifi)
91+
{
92+
k_mutex_lock(&eswifi->mutex, K_FOREVER);
93+
}
94+
95+
static inline void eswifi_unlock(struct eswifi_dev *eswifi)
96+
{
97+
k_mutex_unlock(&eswifi->mutex);
98+
}
99+
100+
struct eswifi_bus_ops eswifi_bus_ops_spi;
101+
int eswifi_offload_init(struct eswifi_dev *eswifi);
102+
struct eswifi_dev *eswifi_by_iface_idx(u8_t iface);
103+
bool eswifi_is_buf_at_ok(char *str);
104+
105+
#endif

0 commit comments

Comments
 (0)