/** * Copyright (c) 2018 Linaro * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_WIFI_ESWIFI_ESWIFI_H_ #define ZEPHYR_DRIVERS_WIFI_ESWIFI_ESWIFI_H_ #include #include #include #include "eswifi_offload.h" #define MAX_DATA_SIZE 1600 #define AT_OK_STR "\r\nOK\r\n> " #define AT_OK_STR_LEN 8 #define AT_RSP_DELIMITER "\r\n" #define AT_RSP_DELIMITER_LEN 2 struct eswifi_gpio { struct device *dev; unsigned int pin; }; enum eswifi_security_type { ESWIFI_SEC_OPEN, ESWIFI_SEC_WEP, ESWIFI_SEC_WPA, ESWIFI_SEC_WPA2_AES, ESWIFI_SEC_WPA2_MIXED, ESWIFI_SEC_MAX }; enum eswifi_request { ESWIFI_REQ_SCAN, ESWIFI_REQ_CONNECT, ESWIFI_REQ_DISCONNECT, ESWIFI_REQ_NONE }; enum eswifi_role { ESWIFI_ROLE_CLIENT, ESWIFI_ROLE_AP, }; struct eswifi_sta { char ssid[WIFI_SSID_MAX_LEN + 1]; enum eswifi_security_type security; char pass[65]; bool connected; uint8_t channel; }; struct eswifi_bus_ops; struct eswifi_dev { struct net_if *iface; struct eswifi_bus_ops *bus; struct eswifi_gpio resetn; struct eswifi_gpio wakeup; scan_result_cb_t scan_cb; struct k_work_q work_q; struct k_work request_work; struct eswifi_sta sta; enum eswifi_request req; enum eswifi_role role; u8_t mac[6]; char buf[MAX_DATA_SIZE]; struct k_mutex mutex; void *bus_data; struct eswifi_off_socket socket[ESWIFI_OFFLOAD_MAX_SOCKETS]; }; struct eswifi_bus_ops { int (*init)(struct eswifi_dev *eswifi); int (*request)(struct eswifi_dev *eswifi, char *cmd, size_t clen, char *rsp, size_t rlen); }; static inline int eswifi_request(struct eswifi_dev *eswifi, char *cmd, size_t clen, char *rsp, size_t rlen) { return eswifi->bus->request(eswifi, cmd, clen, rsp, rlen); } static inline void eswifi_lock(struct eswifi_dev *eswifi) { k_mutex_lock(&eswifi->mutex, K_FOREVER); } static inline void eswifi_unlock(struct eswifi_dev *eswifi) { k_mutex_unlock(&eswifi->mutex); } extern struct eswifi_bus_ops eswifi_bus_ops_spi; int eswifi_offload_init(struct eswifi_dev *eswifi); struct eswifi_dev *eswifi_by_iface_idx(u8_t iface); int eswifi_at_cmd_rsp(struct eswifi_dev *eswifi, char *cmd, char **rsp); int eswifi_at_cmd(struct eswifi_dev *eswifi, char *cmd); #endif