加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
esp32Drv.h 6.49 KB
一键复制 编辑 原始数据 按行查看 历史
xieyang 提交于 2020-05-01 14:17 . 1、添加事件
/*
*TODO:
*使用esp32drv中的收发函数,而不是直接使用xyserial
*
*
*
*
*
*
*
*
*
*
*/
#ifndef __ESP32_DRV_H__
#define __ESP32_DRV_H__
#include "stdint.h"
#include "esp32Serial.h"
#include "./esp32Evt.h"
#include "./xSoftTimer/softTimer.h"
#define PASSWORD_MAX_LEN 64
#define SSID_MAX_LEN 32
#define RX_MSG_MAX 32
#define ESP_RX_IPD 0
#define ESP_RX_OTHER -1
#define ESP_RX_BYTE -2
#define ESP_RX_NONE -3
//wifi mode definitions
#define ESP_WIFI_MODE_NONE 0 //关闭WiFi
#define ESP_WIFI_MODE_STA 1 //stations模式
#define ESP_WIFI_MODE_AP 2 //softAP模式
#define ESP_WIFI_MODE_STAAP 3 //softAP+station模式
#define ESPERR_OK 0
#define ESPERR_OVERTIME (-1)
#define ESPERR_CMD_FAIL (-2)
#define ESPERR_PARAM_ERR (-3)
//static function
typedef struct espDrvType esp32Drv;
struct esp32LinkType
{
uint8_t en;
uint8_t portID;
uint8_t linkID;
uint8_t localIp[16];
uint16_t localPort;
uint8_t remoteIp[16];
uint16_t remotePort;
};
enum wifiEncryptType
{
wifiEncryptOpen=0,
wifiEncrypt_WPA_PSK = 2,
wifiEncrypt_WPA2_PSK = 3,
wifiEncrypt_WPA_WPA2_PSK =4,
};
struct espApConfType
{
char ssid[32]; //ssid
char pwd[64]; //密码
uint8_t chl; //通道
enum wifiEncryptType ecn; //加密方式
uint8_t maxConn; //最大连接数
uint8_t hidden; //隐藏ssid
};
struct espCAConfType
{
uint8_t type; //认证方式
// 0:不进行认证
// 1:加载 cert 和 private key,以供 server 认证
// 2:加载 CA,认证 server 的 cert 和 private key
// 3:双向认证,SSL client 和 server 互相认证对方的证书
uint8_t keyID; //证书ID,从0开始计数
uint8_t caID; //CA id,从0开始计数
};
/* 设备结构体 */
typedef struct
{
char ssid[33]; /* SSID是一个无线局域网络(WLAN)的名称。SSID是区分大小写的文本字符串,最大长度32个字符 */
uint8_t ecn; /* 加密方式
0 OPEN
1 WEP
2 WPA_PSK
3 WPA2_PSK
4 WPA_WPA2_PSK
*/
int32_t rssi; /* 信号强度 */
uint8_t mac[20]; /* MAC地址字符串*/
uint8_t ch; /* 信道 */
} WIFI_AP_T;
struct espDrvType
{
xySerial* serial; //通信使用的串口
uint8_t* recvBuffer ; //接收数据区缓存,用来保存接收的数据包
uint32_t recvBufferLength; //接收数据缓存长度
uint32_t recvRxLength; //已经接收的数据长度
uint32_t recvRdPrt;
uint32_t recvLinkId;
uint8_t rxMsgBuf[RX_MSG_MAX]; //接收等待消息
uint8_t rxMsgLen; //已接收数据长度
uint8_t rxLinkId; //收到数据的linkID
uint8_t espWifiMode; //0关闭,1sta,2softap,3sta+softAP
uint8_t wifiConnected; //wifi已连接
uint8_t mutileLink;
struct esp32LinkType espLink[5]; //最多可以有5个连接
char localIp[16]; //"255.255.255.255\0"
char ssid[33]; /* SSID是一个无线局域网络(WLAN)的名称。SSID是区分大小写的文本字符串,最大长度32个字符 */
/*
*初始化驱动程序
*/
int32_t (*initDrv)(esp32Drv* esp);
/* 基础串口读写*/
/*
*读取一个字节
*/
int32_t (*getChar)(esp32Drv* esp,uint8_t *data);
/*
*读取一行
*/
int32_t (*readLine)(esp32Drv* esp,char* pLine,uint32_t len,uint32_t timeout);
/*
*读取一行,阻塞形式,自动去除/r/n
*/
int32_t (*readLineBlock)(esp32Drv* esp,char* pLine,uint32_t len,uint32_t ticks);
/*
*发送数据
*/
int32_t (*send)(esp32Drv* esp,uint8_t *pBuf,uint32_t dataLength);
/*
*等待响应
*/
int32_t (*WaitResponse)(esp32Drv* esp,uint8_t *pStr,uint32_t ticks);
/*esp32 配置功能*/
/*
*初始化
*/
int32_t (*init)(esp32Drv* esp);
/*
*设定rst
*/
int32_t (*setRST)(esp32Drv* esp);
/*
*设定rte模式
*/
int32_t (*setRTE)(esp32Drv* esp,char rte);
/*
*设置模式
*/
int32_t (*setMode)(esp32Drv* esp,uint8_t mode);
/*
*加入AP
*/
int32_t (*joinAp)(esp32Drv* esp,uint8_t *Ap,uint8_t *sn,uint32_t timeout);
/*
*smart config
*/
int32_t (*smartConfigStart)(esp32Drv* esp,uint32_t timeout);
int32_t (*smartConfigStop)(esp32Drv* esp);
/*
*退出AP
*/
int32_t (*exitAp)(esp32Drv* esp);
/*
*扫描AP
*/
int32_t (*scanAp)(esp32Drv* esp,WIFI_AP_T *pStr,uint8_t apNumber);
/*
*配置AP名称和密码
*/
int32_t (*setApConfig)(esp32Drv* esp,struct espApConfType espConf);
/*
*设置AP的IP
*/
int32_t (*setApIp)(esp32Drv* esp,uint8_t*ip);
/*
*获取esp32状态
*/
int32_t (*getStatus)(esp32Drv* esp,uint8_t status); //待补充
/*
*获取本地IP
*/
int32_t (*getLocalIp)(esp32Drv* esp,uint8_t *ip);
/*
*获取本地mac
*/
int32_t (*getLocalMac)(esp32Drv* esp,uint8_t *mac);
/*
*设置本地ip
*/
int32_t (*setLocalIp)(esp32Drv* esp,uint8_t *ip);
/*
*设置本地mac
*/
int32_t (*setLocalMac)(esp32Drv* esp,uint8_t *mac);
/*
* 配置主机名称
* 最长32个字符
*/
int32_t (*setStaName)(esp32Drv* esp,char* name);
/*
* 查询本机IP
*/
int32_t (*getStaIp)(esp32Drv* esp,char* Ip);
/*
* 配置mdns
*/
int32_t (*setMdns)(esp32Drv* esp,uint8_t en,char* hostname,char* serverName,uint16_t port);
/*
* tcp/udp IP 传输
*/
/*
*设定多链接模式
* 0:关闭多链接 1:使能多链接
*/
int32_t (*setMutilCon)(esp32Drv* esp,uint8_t mode);
/*
*配置ssl证书
*/
int32_t (*SSLConfig)(esp32Drv* esp,uint8_t linkID,struct espCAConfType caConf);
/*
*连接远程服务器TCP
*/
int32_t (*connectTcp)(esp32Drv* esp,uint8_t *ip,uint16_t remotePort,uint16_t keepAlive,uint8_t linkId);
/*
*连接远程服务器UDP
*keep:为0时,远端目标不会改变,1:收到数据后改变一次远端目标,2:每次收到数据后都改变远端目标
*/
int32_t (*connectUdp)(esp32Drv* esp,uint8_t *ip,uint16_t remotePort,uint16_t localPort,uint8_t keep,uint8_t linkId);
/*
*连接远程服务器SSL,ssl模式下务必配置keepAlive时间
*/
int32_t (*connectSsl)(esp32Drv* esp,uint8_t *ip,uint16_t remotePort,uint16_t keepAlive,uint8_t linkId);
/*
*创建tcp服务器
*/
int32_t (*createTcpServer)(esp32Drv* esp,uint8_t serverEn,uint16_t port,uint8_t enCA);
/*
*创建udp服务器
*/
int32_t (*createUdpServer)(esp32Drv* esp,uint8_t serverEn,uint16_t port,uint8_t enCA);
/*
*关闭服务器
*/
int32_t (*closeServer)(esp32Drv* esp,uint8_t linkID);
/*
*通过连接id发送数据
*/
int32_t (*sendLink)(esp32Drv* esp,uint8_t *pBuf,uint32_t dataLength,uint8_t linkId);
/*
*发送udp数据
*/
int32_t (*sendUdp)(esp32Drv* esp,uint8_t *ip,uint16_t port,uint8_t *pBuf,uint32_t dataLength,uint8_t linkID);
/*
*接收数据
*/
int32_t (*receiveData)(esp32Drv* esp,uint8_t *pBuf,uint32_t *pBufLen,uint32_t buf_size,uint8_t* linkId);
};
extern struct espDrvType espDrv1;
/*
* ESP32回调
*/
int32_t espCallback(esp32Drv* esp,int32_t evt);
/*
*检查密码
*/
int32_t espCheckSn(char *sn);
/*
*检查ssid
*/
int32_t espCheckSSID(char *ssid);
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化