Commit 32b8cc13 authored by 梁百峰's avatar 梁百峰

🎉 init:上传esp32程序,ble检测

parent cdd3bf39
build/
sdkconfig.old
/.vscode
*.o
*.s
*.log
*.lst
*.d
# The following lines of boilerplate have to be in your project's CMakeLists
# in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS "./source/wifi")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(TianYing100)
zs_rt2 esp32程序
\ No newline at end of file
sddadadadad
as
\ No newline at end of file
# Embed the server root certificate into the final binary
idf_build_get_property(project_dir PROJECT_DIR)
idf_component_register(SRCS "gatts_table_creat_demo.c"
"Protocol_CRC16.c"
"Protocol_Lib.c"
"Protocol_User.c"
"MCU_Core_Protocol.c"
"app_Ble_User.c"
"main_user.c"
INCLUDE_DIRS ".")
#include "Protocol_Lib.h"
#include "MCU_Core_Protocol.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "Protocol_User.h"
#include "gatts_table_creat_demo.h"
#include "app_Ble_User.h"
#ifndef _MCU_CORE_PROTOCOL_H_
#define _MCU_CORE_PROTOCOL_H_
#include "Protocol_Lib.h"
#endif
/**
* @file Protocol_CRC16.c
* @brief CRC16计算
* @details CRC16计算
* @author myliu
* @date 2022.05.09
* @version V1.0
* @copyright myiu
*/
#include "Protocol_CRC16.h"
static const Protocol_uint8_t CRC16_TAB_H [ 256 ] = {0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x01u, 0xC0u, 0x80u, 0x41u, 0x00u, 0xC1u, 0x81u, 0x40u};
static const Protocol_uint8_t CRC16_TAB_L [ 256 ] = {0x00u, 0xC0u, 0xC1u, 0x01u, 0xC3u, 0x03u, 0x02u, 0xC2u, 0xC6u, 0x06u, 0x07u, 0xC7u, 0x05u, 0xC5u, 0xC4u, 0x04u, 0xCCu, 0x0Cu, 0x0Du, 0xCDu, 0x0Fu, 0xCFu, 0xCEu, 0x0Eu, 0x0Au, 0xCAu, 0xCBu, 0x0Bu, 0xC9u, 0x09u, 0x08u, 0xC8u, 0xD8u, 0x18u, 0x19u, 0xD9u, 0x1Bu, 0xDBu, 0xDAu, 0x1Au, 0x1Eu, 0xDEu, 0xDFu, 0x1Fu, 0xDDu, 0x1Du, 0x1Cu, 0xDCu, 0x14u, 0xD4u, 0xD5u, 0x15u, 0xD7u, 0x17u, 0x16u, 0xD6u, 0xD2u, 0x12u, 0x13u, 0xD3u, 0x11u, 0xD1u, 0xD0u, 0x10u, 0xF0u, 0x30u, 0x31u, 0xF1u, 0x33u, 0xF3u, 0xF2u, 0x32u, 0x36u, 0xF6u, 0xF7u, 0x37u, 0xF5u, 0x35u, 0x34u, 0xF4u, 0x3Cu, 0xFCu, 0xFDu, 0x3Du, 0xFFu, 0x3Fu, 0x3Eu, 0xFEu, 0xFAu, 0x3Au, 0x3Bu, 0xFBu, 0x39u, 0xF9u, 0xF8u, 0x38u, 0x28u, 0xE8u, 0xE9u, 0x29u, 0xEBu, 0x2Bu, 0x2Au, 0xEAu, 0xEEu, 0x2Eu, 0x2Fu, 0xEFu, 0x2Du, 0xEDu, 0xECu, 0x2Cu, 0xE4u, 0x24u, 0x25u, 0xE5u, 0x27u, 0xE7u, 0xE6u, 0x26u, 0x22u, 0xE2u, 0xE3u, 0x23u, 0xE1u, 0x21u, 0x20u, 0xE0u, 0xA0u, 0x60u, 0x61u, 0xA1u, 0x63u, 0xA3u, 0xA2u, 0x62u, 0x66u, 0xA6u, 0xA7u, 0x67u, 0xA5u, 0x65u, 0x64u, 0xA4u, 0x6Cu, 0xACu, 0xADu, 0x6Du, 0xAFu, 0x6Fu, 0x6Eu, 0xAEu, 0xAAu, 0x6Au, 0x6Bu, 0xABu, 0x69u, 0xA9u, 0xA8u, 0x68u, 0x78u, 0xB8u, 0xB9u, 0x79u, 0xBBu, 0x7Bu, 0x7Au, 0xBAu, 0xBEu, 0x7Eu, 0x7Fu, 0xBFu, 0x7Du, 0xBDu, 0xBCu, 0x7Cu, 0xB4u, 0x74u, 0x75u, 0xB5u, 0x77u, 0xB7u, 0xB6u, 0x76u, 0x72u, 0xB2u, 0xB3u, 0x73u, 0xB1u, 0x71u, 0x70u, 0xB0u, 0x50u, 0x90u, 0x91u, 0x51u, 0x93u, 0x53u, 0x52u, 0x92u, 0x96u, 0x56u, 0x57u, 0x97u, 0x55u, 0x95u, 0x94u, 0x54u, 0x9Cu, 0x5Cu, 0x5Du, 0x9Du, 0x5Fu, 0x9Fu, 0x9Eu, 0x5Eu, 0x5Au, 0x9Au, 0x9Bu, 0x5Bu, 0x99u, 0x59u, 0x58u, 0x98u, 0x88u, 0x48u, 0x49u, 0x89u, 0x4Bu, 0x8Bu, 0x8Au, 0x4Au, 0x4Eu, 0x8Eu, 0x8Fu, 0x4Fu, 0x8Du, 0x4Du, 0x4Cu, 0x8Cu, 0x44u, 0x84u, 0x85u, 0x45u, 0x87u, 0x47u, 0x46u, 0x86u, 0x82u, 0x42u, 0x43u, 0x83u, 0x41u, 0x81u, 0x80u, 0x40u};
/**
* 获取CRC16校验和
*/
/**
* @brief 计算传入数据的CRC16
* @param[in] pData 计算的数据内容
* @param[in] len 计算的数据长度
*
* @return 校验和
*
* @since 1.0.0
*/
Protocol_uint16_t getCheckSum(const Protocol_uint8_t *pData, int len)
{
Protocol_uint8_t u8_crc_h = 0xFFu;
Protocol_uint8_t u8_crc_l = 0xFFu;
Protocol_uint8_t u8_index = 0u;
Protocol_uint8_t i = 0u;
Protocol_uint16_t re_value;
while ( len-- )
{
u8_index = u8_crc_h ^ (pData [ i++ ]);
u8_crc_h = u8_crc_l ^ CRC16_TAB_H [ u8_index ];
u8_crc_l = CRC16_TAB_L [ u8_index ];
}
re_value = ( Protocol_uint16_t )u8_crc_h << 8u;
re_value |= u8_crc_l;
return re_value;
}
#ifndef PROTOCOL_CRC16_H
#define PROTOCOL_CRC16_H
#include "Protocol_Lib.h"
Protocol_uint16_t getCheckSum(const Protocol_uint8_t *pData, int len);
#endif
/**
* @file Protocol_Lib.c
* @brief 串口协议解析
* @details 串口协议解析
* @author myliu
* @date 2022.05.09
* @version V1.0
* @copyright myiu
*/
#include <stdio.h>
#include <string.h>
#include "Protocol_CRC16.h"
#include "gatts_table_creat_demo.h"
static UARTOpen UARTOpen_Cbk;
static UARTSend UARTSend_Cbk;
static UARTRead UARTRead_Cbk;
static ProcParse ProcParseCbk;
static UARTClose UARTClose_Cbk;
static ProtocolSetData ProtocolSetData_Cbk;
static Protocol_uint8_t *mDataBufPtr = Protocol_NULL;
static Protocol_uint16_t mDataBufLen = 0;
static Protocol_uint32_t DataBufMaxLen = 0;
//#define DEBUG_PRO_DATA 0
/**
* @brief 初始化函数
* @param[in] pMemSpace 分配给协议库的内存空间,用来缓存串口数据
* @param[in] MemLen 分配的内存空间大小
* @param[in] pFunc 回调函数,包括串口打开、发送、读取、关闭,也包括解析后数据回传
* @param[in] ProcParseCbk 此回调函数,返回数据从FrameNo开始到CRC16之前,和ProtocolSetData_Cbk二选一
* @param[in] ProtocolSetData_Cbk 此回调函数,返回数据区分命令字、电源状态等,和ProcParseCbk二选一,详见结构体Protocol_Data_t
*
* @warning 此函数KL30和Wakeup都要调用,否则未分配内存,功能不好使,也有可能造成野指针复位
*
* @since 1.0.0
*/
void Protocol_Init(Protocol_uint8_t *pMemSpace, Protocol_uint32_t MemLen, Protocol_Func_t *pFunc)
{
mDataBufPtr = pMemSpace;
DataBufMaxLen = MemLen;
UARTOpen_Cbk = pFunc->UARTOpen_Cbk;
UARTSend_Cbk = pFunc->UARTSend_Cbk;
UARTRead_Cbk = pFunc->UARTRead_Cbk;
ProcParseCbk = pFunc->ProcParseCbk;
UARTClose_Cbk = pFunc->UARTClose_Cbk;
ProtocolSetData_Cbk = pFunc->ProtocolSetData_Cbk;
if ( UARTOpen_Cbk != Protocol_NULL )
{
UARTOpen_Cbk( );
}
return;
}
/**
* @brief 串口协议服务函数,包括读取数据,解析数据,如在外部读取数据,可不调用此函数
*
* @warning 此函数可自定义周期调用,建议20ms周期调用,最大不可超过协议的最小发送周期
*
* @since 1.0.0
*/
void Protocol_Service(void)
{
int len = 0;
int num =0;
Protocol_uint32_t readNum = 0;
if ( UARTRead_Cbk != Protocol_NULL )
{
readNum = UARTRead_Cbk(mDataBufPtr + mDataBufLen, 256 - mDataBufLen);
if ( readNum > 0 )
{
mDataBufLen += readNum;
// 解析协议
len = Protocol_Parse(mDataBufPtr, mDataBufLen);
len = 7;
if ( (len > 0) && (len < mDataBufLen) )
{
// 将未解析的数据移到头部
// Move unparsed data to the head
memcpy(mDataBufPtr, mDataBufPtr + len, mDataBufLen - len);
}
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[0 ]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[1]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[2]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[3]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[4]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[5]);
printf("get num~~~~~~~~~~~~~~%x\n",mDataBufPtr[6]);
mDataBufLen -= len;
}
}
}
/**
* @brief 协议解析函数,如外部获取数据(例如中断),可直接调用此函数解析数据
* @param[in] pData 协议数据内容
* @param[in] len 需要处理的协议数据长度
*
* @return 剩余已处理的数据长度
*
* @since 1.0.0
*/
Protocol_uint32_t Protocol_Parse(const Protocol_uint8_t *pData, Protocol_uint32_t len)
{
Protocol_uint32_t remainLen = len; // 剩余数据长度 Remaining data length
Protocol_uint32_t dataLen; // 数据包长度 Packet length
Protocol_uint32_t frameLen; // 帧长度 Frame length
Protocol_uint32_t frameSum;
Protocol_Data_t ProcData;
// int i = 0;
// int dataBuf [ 256 ];
/**
* 以下部分需要根据协议格式进行相应的修改,解析出每一帧的数据
*/
while ( remainLen >= DATA_PACKAGE_MIN_LEN )
{
// 找到一帧数据的数据头
// Find the data header of a frame of data
while ( (remainLen >= 2) && ((pData [ 0 ] != CMD_HEAD1) || (pData [ 1 ] != CMD_HEAD2)) )
{
pData++;
remainLen--;
continue;
}
if ( remainLen < DATA_PACKAGE_MIN_LEN )
{
#ifdef DEBUG_PRO_DATA
d_printf("too short!!!!!!\n");
#endif
break;
}
dataLen = pData [ 2 ];
frameLen = dataLen + DATA_PACKAGE_FIXED_LEN;
if ( frameLen > remainLen )
{
// 数据内容不全
#ifdef DEBUG_PRO_DATA
d_printf("Incomplete data packet!!!!!!\n");
#endif
break;
}
// 打印一帧数据,需要时在CommDef.h文件中打开DEBUG_PRO_DATA宏
#ifdef DEBUG_PRO_DATA
for ( i = 0; i < frameLen; ++i )
{
d_printf("%x ", pData [ i ]);
}
d_printf("\n");
#endif
// 检测校验码 Checksum
frameSum = (pData [ frameLen - 2 ] << 8) | (pData [ frameLen - 1 ]);
if ( frameLen > 4 )
{
if ( getCheckSum(pData + 2, frameLen - 4) == frameSum )
{
// 解析一帧数据
if ( ProcParseCbk != Protocol_NULL )
{
ProcParseCbk(pData + 3, dataLen - 2);
}
if ( ProtocolSetData_Cbk != Protocol_NULL )
{
ProcData.FrameNo = pData [ 3 ];
ProcData.PowerSts = (pData [ 4 ] >> 6) & 0x03;
ProcData.CmdID = pData [ 4 ] & 0x3F;
if ( ProcData.CmdID == 0x10 )
{
#ifdef DEBUG_PRO_DATA
for ( i = 0; i < frameLen; ++i )
{
d_printf("%x ", pData [ i ]);
}
d_printf("\n");
#endif
}
if ( ProcData.CmdID == 0x12 )
{
#ifdef DEBUG_PRO_DATA
for ( i = 0; i < frameLen; ++i )
{
d_printf("%x ", pData [ i ]);
}
d_printf("\n");
#endif
}
ProcData.DataLen = dataLen - 4;
memcpy(ProcData.Data, pData + 5, ProcData.DataLen);
ProtocolSetData_Cbk(&ProcData);
}
}
else
{
// for ( i = 0; i < frameLen; ++i )
// {
// dataBuf [ i ] = pData [ i ];
// }
// i = 0;
#ifdef DEBUG_PRO_DATA
d_printf("CheckSum error: new = %x, old = %x!!!!!!\n", getCheckSum(pData + 2, frameLen - 4), frameSum);
#endif
}
}
pData += frameLen;
remainLen -= frameLen;
}
return len - remainLen;
}
/**
* 根据协议格式进行拼接
*/
/**
* @brief 串口协议数据拼接,如初始化发送函数,调用此函数后,数据已通过串口发送
* @param[in] cmdID 命令字
* @param[in] pData 协议数据内容(不包括协议头、长度、帧序号、命令字、校验和,从数据域算起)
* @param[in] len 数据域长度
*
* @return 已发送的数据长度
*
* @since 1.0.0
*/
Protocol_uint32_t Protocol_Send(const Protocol_uint16_t cmdID, const Protocol_uint8_t *pData, Protocol_uint8_t len)
{
int i = 0;
Protocol_uint16_t checksum = 0;
Protocol_uint8_t dataBuf [ 256 ];
Protocol_uint32_t frameLen;
if ( len + DATA_PACKAGE_MIN_LEN > 256 )
{
// printf("sendProtocol data is too len !!!\n");
return 0;
}
dataBuf [ 0 ] = CMD_HEAD1;
dataBuf [ 1 ] = CMD_HEAD2; // 同步帧头 Sync frame header
dataBuf [ 2 ] = len + 4;
dataBuf [ 3 ] = len; // 命令字节 Command byte
dataBuf [ 4 ] = ( Protocol_uint8_t )cmdID;
frameLen = 5;
// 数据 Data
for ( i = 0; i < len; ++i )
{
dataBuf [ frameLen ] = pData [ i ];
frameLen++;
}
// 校验码 Checksum
checksum = getCheckSum(dataBuf + 2, frameLen - 2);
dataBuf [ frameLen ] = (checksum >> 8) & 0x00FF;
frameLen++;
dataBuf [ frameLen ] = checksum & 0x00FF;
frameLen++;
if ( UARTSend_Cbk != Protocol_NULL )
{
return UARTSend_Cbk(dataBuf, frameLen);
}
else
{
return 0;
}
}
#ifndef PROTOCOL_LIB_H
#define PROTOCOL_LIB_H
/*
Platform_32Bit
Platform_16Bit
*/
#ifdef Platform_16Bit
#define Protocol_uint8_t unsigned char
#define Protocol_uint16_t unsigned int
#define Protocol_uint32_t unsigned long
#else
#define Protocol_uint8_t unsigned char
#define Protocol_uint16_t unsigned short
#define Protocol_uint32_t unsigned int
#define Protocol_uint64_t unsigned long long
#endif
#ifndef Protocol_NULL
#define Protocol_NULL ( void * )0u
#endif /* NULL */
/**<0xEB 0x90 长度 帧序号 命令字 DATA0-DATAN CRC16_1 CRC16_2*/
#define DATA_PACKAGE_MIN_LEN 7 /**< 0xEB 0x90 + 长度 + 数据包序号 + CMDID + CRC16_1 + CRC16_2 */
#define DATA_PACKAGE_FIXED_LEN 3 /**< 未计算在长度内的数据 0xEB 0x90 + 长度位 */
#define CMD_HEAD1 0xEB
#define CMD_HEAD2 0x90
/**@struct Protocol_Data_t
* @brief 解析后的协议数据
*/
typedef struct
{
Protocol_uint8_t FrameNo; /**< 帧序号 */
Protocol_uint8_t PowerSts; /**< 电源状态 */
Protocol_uint8_t CmdID; /**< 命令字 */
Protocol_uint8_t DataLen; /**< 有效数据长度 DATA0-DATAN*/
Protocol_uint8_t Data [ 256 ]; /**< 有效数据内容 DATA0-DATAN*/
} Protocol_Data_t;
typedef Protocol_uint8_t (*UARTOpen)(void);
typedef Protocol_uint32_t (*UARTSend)(const Protocol_uint8_t *pData, Protocol_uint32_t u32Len);
typedef Protocol_uint32_t (*UARTRead)(Protocol_uint8_t *pData, Protocol_uint32_t u32Len);
typedef void (*ProtocolSetData)(const Protocol_Data_t *pData);
typedef void (*ProcParse)(const Protocol_uint8_t *pData, Protocol_uint32_t u32Len);
typedef void (*UARTClose)(void);
/**@struct Protocol_Func_t
* @brief 协议解析回调函数
*/
typedef struct
{
UARTOpen UARTOpen_Cbk; /**< 串口打开回调 */
UARTSend UARTSend_Cbk; /**< 串口发送回调 */
UARTRead UARTRead_Cbk; /**< 串口读取回调 */
UARTClose UARTClose_Cbk; /**< 串口关闭回调 */
ProcParse ProcParseCbk; /**< 解析后的数据, 处理了数据包序号,命令字和电源状态,和ProcParse二选一 */
ProtocolSetData ProtocolSetData_Cbk; /**< 不包含 0xEB 0x90 + 长度 + CRC16_1 + CRC16_2,和ProtocolSetData二选一 */
} Protocol_Func_t;
void Protocol_Init(Protocol_uint8_t *pMemSpace, Protocol_uint32_t MemLen, Protocol_Func_t *pFunc);
void Protocol_Service(void);
Protocol_uint32_t Protocol_Parse(const Protocol_uint8_t *pData, Protocol_uint32_t len);
Protocol_uint32_t Protocol_Send(const Protocol_uint16_t cmdID, const Protocol_uint8_t *pData, Protocol_uint8_t len);
#endif
#include <stdint.h>
#include "Protocol_User.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_bt.h"
#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"
#include "esp_bt_main.h"
#include "gatts_table_creat_demo.h"
#include "esp_gatt_common_api.h"
#include "esp_mac.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"
#include "MCU_Core_Protocol.h"
#include "Protocol_Lib.h"
#include "app_Ble_User.h"
// #include "app_BT_User.h"
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <stdio.h>
#define TAG "Prot_User"
Protocol_User_Ctrl_Struct Prot_User;
#define UART_TX_MAX_DEPTH 1024UL //(2 * 1024UL) // 4K
#define UART_RX_MAX_DEPTH (2 * 1024UL) // 4K
#define UART_DATA_BUF_LEN (2 * 1024UL) // 4K
//extern void OTA_IC_To_Master( uint8_t len);
typedef struct
{
Protocol_uint32_t read_pos;
Protocol_uint32_t write_pos;
Protocol_uint8_t Rx_Buffer [ UART_RX_MAX_DEPTH ];
} UARTRxBuf_t;
typedef struct
{
Protocol_uint32_t read_pos;
Protocol_uint32_t write_pos;
Protocol_uint8_t Tx_Buffer [ UART_TX_MAX_DEPTH ];
} UARTTxBuf_t;
static UARTRxBuf_t UARTRxBuf;
static UARTTxBuf_t UARTTxBuf;
static Protocol_uint8_t UsartDataBuf [ 256 ];
static Protocol_uint8_t mDataBufPtr [ UART_DATA_BUF_LEN ];
static Protocol_uint8_t Protocol_OpenUart(void);
static Protocol_uint32_t Protocol_UartRead(Protocol_uint8_t *pData, Protocol_uint32_t u32Len);
static Protocol_uint32_t Protocol_UartSend(const Protocol_uint8_t *pData, Protocol_uint32_t u32Len);
static void Protocol_UartHandle(const Protocol_Data_t *pData);
void Protocol_KL30_Wakeup_Init(void)
{
Protocol_Func_t pFunc;
pFunc.UARTOpen_Cbk = Protocol_OpenUart;
pFunc.UARTSend_Cbk = Protocol_UartSend;
pFunc.UARTRead_Cbk = Protocol_UartRead;
pFunc.UARTClose_Cbk = Protocol_NULL;
pFunc.ProcParseCbk = Protocol_NULL;
pFunc.ProtocolSetData_Cbk = Protocol_UartHandle;
UARTTxBuf.read_pos = 0;
UARTTxBuf.write_pos = 0;
UARTRxBuf.read_pos = 0;
UARTRxBuf.write_pos = 0;
Protocol_Init(mDataBufPtr, UART_DATA_BUF_LEN, &pFunc);
}
void Protocol_Send_Service(void)
{
Protocol_uint32_t i = 0u;
Protocol_uint32_t DataLen = 0u;
Protocol_uint32_t SendLen = 0u;
if ( UARTTxBuf.write_pos == UARTTxBuf.read_pos )
{
return;
}
if ( UARTTxBuf.write_pos > UARTTxBuf.read_pos )
{
DataLen = UARTTxBuf.write_pos - UARTTxBuf.read_pos;
}
else
{
DataLen = UART_TX_MAX_DEPTH - (UARTTxBuf.read_pos - UARTTxBuf.write_pos);
}
if ( DataLen > 255 )
{
SendLen = 255;
}
else
{
SendLen = DataLen;
}
for ( i = 0u; i < SendLen; i++ )
{
UsartDataBuf [ i ] = UARTTxBuf.Tx_Buffer [ UARTTxBuf.read_pos ];
UARTTxBuf.read_pos = (UARTTxBuf.read_pos + 1) % UART_TX_MAX_DEPTH;
}
bsp_Uart_Send_Data(UsartDataBuf, SendLen);
}
static Protocol_uint8_t Protocol_OpenUart(void)
{
#if 0
UART_Channel_Config_st_t loc_config;
loc_config.u32UARTChEn = 1;
loc_config.u32UARTbps = 115200;
loc_config.pfnUARTConfirmCallBack = Protocol_NULL;
loc_config.pfnUARTReadMsgCallBack = UART_Put;
UART_Init(UART_RLIN31, &loc_config);
#endif
return 1;
}
static Protocol_uint32_t Protocol_UartRead(Protocol_uint8_t *pData, Protocol_uint32_t len)
{
Protocol_uint32_t i = 0;
Protocol_uint32_t DataLen = 0u;
Protocol_uint32_t ReadLen = 0u;
if ( UARTRxBuf.write_pos == UARTRxBuf.read_pos )
{
return 0; //队列空
}
if ( UARTRxBuf.write_pos > UARTRxBuf.read_pos )
{
DataLen = UARTRxBuf.write_pos - UARTRxBuf.read_pos;
}
else
{
DataLen = UART_RX_MAX_DEPTH - (UARTRxBuf.read_pos - UARTRxBuf.write_pos);
}
if ( len > DataLen )
{
ReadLen = DataLen;
}
else
{
ReadLen = len;
}
for ( i = 0u; i < ReadLen; i++ )
{
pData [ i ] = UARTRxBuf.Rx_Buffer [ UARTRxBuf.read_pos ];
UARTRxBuf.read_pos = (UARTRxBuf.read_pos + 1) % UART_RX_MAX_DEPTH;
}
return ReadLen;
}
static Protocol_uint32_t Protocol_UartSend(const Protocol_uint8_t *pData, Protocol_uint32_t u32Len)
{
Protocol_uint32_t i = 0;
Protocol_uint32_t RemainLen = 0u;
if ( UARTTxBuf.write_pos >= UARTTxBuf.read_pos )
{
RemainLen = UART_TX_MAX_DEPTH - (UARTTxBuf.write_pos - UARTTxBuf.read_pos);
}
else
{
RemainLen = UARTTxBuf.read_pos - UARTTxBuf.write_pos;
}
if ( u32Len > RemainLen )
{
return 1; //队列已满,无法插入队列
}
for ( i = 0; i < u32Len; i++ )
{
UARTTxBuf.Tx_Buffer [ UARTTxBuf.write_pos ] = pData [ i ];
UARTTxBuf.write_pos = (UARTTxBuf.write_pos + 1) % UART_TX_MAX_DEPTH;
}
return 0;
}
static void Protocol_UartHandle(const Protocol_Data_t *pData)
{
if ( pData->CmdID == 0x20 )
{
//printf(" CmdID == 0x20 \r\n");
if(Prot_User.State < Prot_Start)
{
Prot_User.State = Prot_Start;
//printf("Prot_Start \r\n");
}
}
else if(pData->CmdID == 0x03 )
{
//printf(" CmdID == 0x03 \r\n");
if(Prot_User.State < Prot_Normal)
{
Prot_User.State = Prot_Normal;
//printf("Prot_Normal \r\n");
}
if(Prot_User.State >= Prot_Start)
{
// if(pData->DataLen == 33)
{
// if(BT_User.HF_Ctrl != pData->Data[0])
// {
// BT_User.HF_Ctrl = pData->Data[0];
// }
// if(strncmp((const char *) ble_uerid, (const char *)&(pData->Data[0]), 32) != 0)
// {
// memcpy(( uint8_t * )ble_uerid, (uint8_t *)&(pData->Data[0]), 32);
// }
//printf("ble_uerid = %d\r\n",ble_uerid[0]);
//printf("ble_uerid = %d\r\n",ble_uerid[1]);
//printf("ble_uerid = %d\r\n",ble_uerid[2]);
//printf("ble_uerid = %d\r\n",ble_uerid[28]);
//printf("ble_uerid = %d\r\n",ble_uerid[29]);
//printf("ble_uerid = %d\r\n",ble_uerid[30]);
//printf("ble_uerid = %d\r\n",ble_uerid[31]);
// esp_log_buffer_hex(TAG, ble_uerid, 32);
// esp_log_buffer_hex(TAG, &(pData->Data[1]), 32);
if(Ble_User.UseridUpdate == 0)
{
bsp_Ble_Init();
//printf("get uuid and init ble!!! \r\n");
}
Ble_User.UseridUpdate = 0xAA;
}
}
}
else if((pData->CmdID & 0x3f) == 0x21 )
{
if(Prot_User.State >= Prot_Start)
{
if((pData->CmdID & 0xC0) == 0X40)
{
// if(Wifi_OTA_Request == 0)
// {
// Wifi_OTA_Request = 1;
// printf("get ota req! \r\n");
// }
}
}
}
else
{
}
}
void UART_Put(Protocol_uint16_t Data)
{
Protocol_uint32_t nextPos = 0u;
nextPos = (UARTRxBuf.write_pos + 1) % UART_RX_MAX_DEPTH;
if ( nextPos == UARTRxBuf.read_pos )
{
//队列已满,无法插入队列
}
else
{
UARTRxBuf.Rx_Buffer [ UARTRxBuf.write_pos ] = Data;
UARTRxBuf.write_pos = (UARTRxBuf.write_pos + 1) % UART_RX_MAX_DEPTH;
}
printf("into UARTRxBuf!!!!\r\n");
return;
}
/**
* @brief Protocol协议应用层数据赋值和发送
*/
void Protocol_User_Ctrl_Init(void )
{
Prot_User.State = Prot_Idle;
Prot_User.TimeDelay = 0;
}
void Uart_Send_Id10_Pro(void )
{
uint8_t wtemp[1] = {0};
wtemp[0] = 1;
Protocol_Send(0x10, wtemp, 1);
}
void Uart_Send_Id12_Pro(void )
{
uint8_t ID12[1] = {0};
// ID12[0] |= (uint8_t)(BT_User.BT_Sts << 4);
ID12[0] |= Ble_User.Ble_Sts;
Protocol_Send(0x12, ID12, 1);
//printf(" BlueTooth.Navigation_St = %d\r\n", ID12[1]);
}
void Uart_Send_Id01_Pro(void)
{
uint8_t ID01[6] = {0x00,0x00,0x00,0x00,0x00,0x00};
if(Ble_User.Navi_Updat)
{
ID01[0] = Ble_Navi_Data.Navi_Sts;
ID01[1] = Ble_Navi_Data.Navi_Turn;
ID01[2] = Ble_Navi_Data.Navi_Dte[0];
ID01[3] = Ble_Navi_Data.Navi_Dte[1];
ID01[4] = Ble_Navi_Data.Navi_Dte[2];
ID01[5] = Ble_Navi_Data.Navi_Dte[3];
}
Protocol_Send(0x01,ID01,6);
//printf("code = %d\r\n", Ble_Navi_Data.Navi_Turn);
//printf("code = %d\r\n", Ble_Navi_Data.Navi_Dte[0]);
//printf("code = %d\r\n", Ble_Navi_Data.Navi_Dte[1]);
//printf("code = %d\r\n", Ble_Navi_Data.Navi_Dte[2]);
//printf("code = %d\r\n", Ble_Navi_Data.Navi_Dte[3]);
}
void Uart_Send_Id02_Pro(void)
{
uint8_t ID02[1] = {0x00};
// ID02[0] = BT_User.Call_Sts;
Protocol_Send(0x02, ID02, 1);
}
void Prot_Send_Msg_Process(void )
{
if(Prot_User.State < Prot_Start)
{
Uart_Send_Id10_Pro();
// printf("send 0x10 \r\n");
}
if(Prot_User.State >= Prot_Start)
{
if(Prot_User.TimeDelay == 0)
{
Uart_Send_Id12_Pro();
Prot_User.TimeDelay++;
// printf("send 0x12 \r\n");
}
else
{
Uart_Send_Id01_Pro();
//Uart_Send_Id02_Pro();
Prot_User.TimeDelay = 0;
// printf("send 0x01 0x02 \r\n");
}
}
}
#ifndef PROTOCOL_USER_H
#define PROTOCOL_USER_H
#include "Protocol_Lib.h"
#define BLE_START_STA 0x10
#define MCU_REPLY 0x20
#define BLE_NAVIGATION 0x01
#define BLE_WEATHER 0x02
#define BLE_LOCATION 0x03
#define BLE_STA 0x12
#define MCU_TO_BLE_INFO 0x21
void Protocol_KL30_Wakeup_Init(void);
void Protocol_Send_Service(void); // 10ms任务调用
void UART_Put(Protocol_uint16_t Data);
typedef enum
{
Prot_Idle = 0,
Prot_Starting,
Prot_Start,
Prot_Normal,
}Prot_User_State_Enum;
typedef struct
{
uint8_t State;
uint16_t TimeDelay;
}Protocol_User_Ctrl_Struct;
extern Protocol_User_Ctrl_Struct Prot_User;
void Protocol_User_Ctrl_Init(void );
void Prot_Send_Msg_Process(void );
#endif
#include "app_Ble_User.h"
#include "gatts_table_creat_demo.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "freertos/semphr.h"
#include "MCU_Core_Protocol.h"
#include "Protocol_User.h"
#include "main_user.h"
#define TAG "APP_BLE_USER"
app_Ble_User_Data_Union BleRecData;
app_Ble_User_Data_Union BleTransData;
app_Ble_Rec_Data_Ctrl_Struct RecCtrl;
uint8_t ble_key[32] = "1BJ7J8S";
uint8_t ble_uerid[33] = "70000000000120250116000000000855";
uint8_t ble_pwd[32] = {0};
uint8_t flavor[4] = {0x33, 0, 0, 0};
SemaphoreHandle_t BleRecSuc_Semaphore;
Ble_User_Control_Struct Ble_User;
Ble_Navi_Info_Struct Ble_Navi_Data;
uint8_t tp_Ble_Crc(uint8_t *data, uint32_t len )
{
uint8_t val = 0;
for(uint32_t i = 0; i<len; i++)
{
val ^= data[i];
}
return val;
}
void Ble_Clear_Rx_Buffer(void )
{
for(int i = 0; i< sizeof(BleRecData.Data); i++)
{
BleRecData.Data[i] = 0;
}
}
void Ble_Clear_Tx_Buffer(void )
{
for(int i = 0; i< sizeof(BleTransData.Data); i++)
{
BleTransData.Data[i] = 0;
}
}
/**************************************************************************/
/**************************************************************************/
uint8_t Ble_Get_User_Info(void )
{
// uint8_t i = 0;
uint8_t ret = 0;
// for(i = 24; i<32;i++)
// {
// ble_uerid[i] = 0x30+i-24;
// ble_pwd[i] = 0x30+i-24;
// }
// ble_uerid[0] = 'v';
// ble_uerid[1] = 'i';
// ble_uerid[2] = 'v';
// ble_uerid[3] = 'a';
// ble_uerid[4] = 'v';
// ble_uerid[5] = 'i';
// ble_uerid[6] = 'v';
// ble_uerid[7] = 'a';
// ble_uerid[8] = 'v';
// ble_uerid[9] = 'i';
// ble_uerid[10] = 'v';
// ble_uerid[11] = 'a';
// ble_uerid[12] = 'v';
// ble_uerid[13] = 'i';
// ble_uerid[14] = 'v';
// ble_uerid[15] = 'a';
// ble_uerid[16] = 'v';
// ble_uerid[17] = 'i';
// ble_uerid[18] = 'v';
// ble_uerid[19] = 'a';
// ble_uerid[20] = 'v';
// ble_uerid[21] = 'i';
// ble_uerid[22] = 'v';
// ble_uerid[23] = 'a';
// ble_pwd[0] = 'C';
// ble_pwd[1] = 'C';
// ble_pwd[2] = 'N';
// ble_pwd[3] = 'C';
// ble_pwd[4] = 'v';
// ble_pwd[5] = 'i';
// ble_pwd[6] = 'v';
// ble_pwd[7] = 'a';
// ble_pwd[8] = 'v';
// ble_pwd[9] = 'i';
// ble_pwd[10] = 'v';
// ble_pwd[11] = 'a';
// ble_pwd[12] = 'v';
// ble_pwd[13] = 'i';
// ble_pwd[14] = 'v';
// ble_pwd[15] = 'a';
// ble_pwd[16] = 'v';
// ble_pwd[17] = 'i';
// ble_pwd[18] = 'v';
// ble_pwd[19] = 'a';
// ble_pwd[20] = 'v';
// ble_pwd[21] = 'i';
// ble_pwd[22] = 'v';
// ble_pwd[23] = 'a';
if(Ble_User.UseridUpdate)
{
ret = 1;
}
else
{
ret = 0;
}
//printf("ret = %d\r\n" , ret);
return ret;
}
void Get_Ble_Raw_Data(uint8_t *data, uint32_t len)
{
// uint8_t err = 0;
uint8_t crc = 0;
if(len > 1024)
{
return;
}
if(data[0] == 0x24)
{
if(RecCtrl.Sts == BleRec_Idle)
{
// printf("receive data:");
// printf("\r\n");
// printf("\r\n");
RecCtrl.RecLen = 0;
memcpy(( uint8_t * )&BleRecData.Data[RecCtrl.RecLen], data, len);
// for (int i = 0; i < len; i++)
// {
// printf("BleRecData[%x] \n",BleRecData.Data[i]);
// }
RecCtrl.TotalLen = BleRecData.Msg.Lenth +1 ;
RecCtrl.RecLen += len;
if(RecCtrl.RecLen >= RecCtrl.TotalLen)
{
crc = tp_Ble_Crc(BleRecData.Data, RecCtrl.TotalLen - 2);
// printf("receive data:");
// for(uint16_t i = 0; i< RecCtrl.TotalLen; i++)
// {
// printf(" %x ", BleRecData.Data[i]);
// }
// printf("\r\n");
// printf("rec crc = %d\r\n", crc);
if((BleRecData.Data[RecCtrl.TotalLen - 1] != 0x0A) || (crc != BleRecData.Data[RecCtrl.TotalLen - 2]))
{
Ble_Clear_Rx_Buffer();
RecCtrl.Sts = BleRec_Idle;
}
else
{
RecCtrl.Sts = BleRec_Suc;
xSemaphoreGive(BleRecSuc_Semaphore);
}
}
else
{
RecCtrl.Sts = BleRec_Start;
// printf("BleRec_Start \r\n");
}
}
}
else
{
if(RecCtrl.Sts == BleRec_Start)
{
if((RecCtrl.RecLen+len) <= RecCtrl.TotalLen)
{
memcpy(( uint8_t * )&BleRecData.Data[RecCtrl.RecLen], data, len);
RecCtrl.RecLen += len;
if(RecCtrl.RecLen >= RecCtrl.TotalLen)
{
crc = tp_Ble_Crc(BleRecData.Data, RecCtrl.TotalLen - 2);
// printf("receive data:");
//for(uint16_t i = 0; i< RecCtrl.TotalLen; i++)
//{
// printf(" %x ", BleRecData.Data[i]);
//}
// printf("\r\n");
// printf("rec crc = %d\r\n", crc);
if((BleRecData.Data[RecCtrl.TotalLen - 1] != 0x0A) || (crc != BleRecData.Data[RecCtrl.TotalLen - 2]))
{
Ble_Clear_Rx_Buffer();
RecCtrl.Sts = BleRec_Idle;
}
else
{
RecCtrl.Sts = BleRec_Suc;
xSemaphoreGive(BleRecSuc_Semaphore);
}
}
}
else
{
//len err
Ble_Clear_Rx_Buffer();
RecCtrl.Sts = BleRec_Idle;
}
}
}
}
/**************************************************************************/
/**************************************************************************/
void Ble_Msg_Authr_RLY(void )
{
uint8_t total_frame = 0;
uint8_t trans_len = 0;
// int err;
//Authr suc
BleTransData.Msg.FrameHeader = 0x24;
BleTransData.Msg.Cmd = 0x58;
BleTransData.Msg.Lenth = 104;
if((BleTransData.Msg.Lenth+1) % 20 == 0)
{
total_frame = (BleTransData.Msg.Lenth+1) / 20;
}
else
{
total_frame = (BleTransData.Msg.Lenth+1) / 20 + 1;
}
if(Ble_Get_User_Info())
{
memcpy(( uint8_t * )&BleTransData.Msg.Param[0], ble_key, 32);
memcpy(( uint8_t * )&BleTransData.Msg.Param[32], ble_uerid, 32);
memcpy(( uint8_t * )&BleTransData.Msg.Param[64], ble_pwd, 32);
memcpy(( uint8_t * )&BleTransData.Msg.Param[96], flavor, 4);
}
BleTransData.Data[BleTransData.Msg.Lenth - 1] = tp_Ble_Crc(BleTransData.Data, BleTransData.Msg.Lenth - 1);
BleTransData.Data[BleTransData.Msg.Lenth] = 0x0A;
for(uint8_t i = 0; i < total_frame; i++)
{
if(((BleTransData.Msg.Lenth+1) - 20*i) >= 20)
{
trans_len = 20;
}
else
{
trans_len = (BleTransData.Msg.Lenth+1) - 20*i;
}
// printf("trans_len = %d\r\n", trans_len);
// printf("trans data:");
// for(uint16_t j = 0; j< trans_len; j++)
// {
// printf(" %x ", BleTransData.Data[j + i*20]);
// }
// printf("\r\n");
// printf("\r\n");
/*err = */bsp_Ble_Gatts_Send_Indicate( trans_len, &BleTransData.Data[i*20]);
// vTaskDelay(1);
}
}
void Ble_MsgRec_Authr_Result_Analysis(void )
{
//Authr result
if(BleRecData.Msg.Param[0] == 0)
{
Ble_User.Ble_Sts = Ble_Authr;
Ble_User.Request_Navi = 1;
//printf("Authr suc\n");
}
}
void Ble_Msg_RequestNavi_RLY(void )
{
uint8_t total_frame = 0;
uint8_t trans_len = 0;
if(Ble_User.Request_Navi)
{
BleTransData.Msg.FrameHeader = 0x24;
BleTransData.Msg.Cmd = 0x14;
BleTransData.Msg.Lenth = 9;
if((BleTransData.Msg.Lenth+1) % 20 == 0)
{
total_frame = (BleTransData.Msg.Lenth+1) / 20;
}
else
{
total_frame = (BleTransData.Msg.Lenth+1) / 20 + 1;
}
BleTransData.Msg.Param[0] = 1;
BleTransData.Msg.Param[1] = 80;
BleTransData.Msg.Param[2] = 0;
BleTransData.Msg.Param[3] = 3;
BleTransData.Msg.Param[4] = 0;
BleTransData.Data[BleTransData.Msg.Lenth - 1] = tp_Ble_Crc(BleTransData.Data, BleTransData.Msg.Lenth - 1);
BleTransData.Data[BleTransData.Msg.Lenth] = 0x0A;
for(uint8_t i = 0; i < total_frame; i++)
{
if(((BleTransData.Msg.Lenth+1) - 20*i) >= 20)
{
trans_len = 20;
}
else
{
trans_len = (BleTransData.Msg.Lenth+1) - 20*i;
}
// printf("trans_len = %d\r\n", trans_len);
// printf("trans data:");
// for(uint16_t j = 0; j< trans_len; j++)
// {
// printf(" %x ", BleTransData.Data[j + i*20]);
// }
// printf("\r\n");
// printf("\r\n");
bsp_Ble_Gatts_Send_Indicate( trans_len, &BleTransData.Data[i*20]);
// vTaskDelay(1);
}
Ble_User.Request_Navi = 0;
}
}
void Ble_MsgRec_Navi_Analysis(void )
{
uint32_t aaa = 0;
//Navi data
Ble_Navi_Data.Navi_Sts = BleRecData.Msg.Param[0];
Ble_Navi_Data.Navi_Turn = BleRecData.Msg.Param[1];
Ble_Navi_Data.Navi_Dte[0] = BleRecData.Msg.Param[2];
Ble_Navi_Data.Navi_Dte[1] = BleRecData.Msg.Param[3];
Ble_Navi_Data.Navi_Dte[2] = BleRecData.Msg.Param[4];
Ble_Navi_Data.Navi_Dte[3] = BleRecData.Msg.Param[5];
aaa = Ble_Navi_Data.Navi_Dte[3];
aaa <<= 8;
aaa |= Ble_Navi_Data.Navi_Dte[2];
aaa <<= 8;
aaa |= Ble_Navi_Data.Navi_Dte[1];
aaa <<= 8;
aaa |= Ble_Navi_Data.Navi_Dte[0];
printf("navi sts = %x; navi turn = %d; navi dest = %ld\n", Ble_Navi_Data.Navi_Sts, Ble_Navi_Data.Navi_Turn, aaa);
printf("Navi sts %d Navi_Turn %x Navi_Dte0 %x Navi_Dte1 %x Navi_Dte2 %x Navi_Dte3 %x\r\n",
Ble_Navi_Data.Navi_Sts, Ble_Navi_Data.Navi_Turn, Ble_Navi_Data.Navi_Dte[0], Ble_Navi_Data.Navi_Dte[1], Ble_Navi_Data.Navi_Dte[2],Ble_Navi_Data.Navi_Dte[3]);
Ble_User.Navi_Updat = 1;
Ble_User.Navi_T = 0;
}
void Ble_MsgRec_Navi_Timeout(void )
{
if(Ble_User.Navi_Updat)
{
Ble_User.Navi_T++;
if(Ble_User.Navi_T >= 100)
{
Ble_User.Navi_Updat = 0;
Ble_User.Navi_T = 0;
}
}
else
{
Ble_User.Navi_T = 0;
}
}
void Ble_Rec_Msg_Analysis_Process(void )
{
}
void Ble_Connect_Event_Pro(void )
{
Ble_User.Ble_Sts = Ble_Conn;
Ble_User.Request_Navi = 0;
Ble_User.Navi_Updat = 0;
Ble_User.Navi_T = 0;
Ble_Clear_Tx_Buffer();
Ble_Clear_Rx_Buffer();
}
void Ble_DisConnect_Event_Pro(void )
{
Ble_User.Ble_Sts = Ble_Idle;
Ble_User.Request_Navi = 0;
Ble_User.Navi_Updat = 0;
Ble_User.Navi_T = 0;
RecCtrl.RecLen = 0;
RecCtrl.TotalLen = 0;
RecCtrl.Sts = BleRec_Idle;
Ble_Navi_Data.Navi_Sts = 0;
Ble_Navi_Data.Navi_Turn = 0;
for(uint8_t i=0; i<sizeof(Ble_Navi_Data.Navi_Dte); i++)
{
Ble_Navi_Data.Navi_Dte[i] = 0;
}
Ble_Clear_Tx_Buffer();
Ble_Clear_Rx_Buffer();
}
void Ble_User_Task(void *pvParameter)
{
while (1)
{
// Ble_Rec_Msg_Analysis_Process();
if (pdTRUE == xSemaphoreTake(BleRecSuc_Semaphore, portMAX_DELAY))
{
if(RecCtrl.Sts == BleRec_Suc)
{
if(BleRecData.Msg.Cmd == EC_BTP_P2C_CLIENT_INFO)
{
Ble_Msg_Authr_RLY();
}
else if(BleRecData.Msg.Cmd == EC_BTP_P2C_CHECK_AUTH_RESULT)
{
Ble_MsgRec_Authr_Result_Analysis();
Ble_Msg_RequestNavi_RLY();
}
else if(BleRecData.Msg.Cmd == EC_BTP_P2C_HUD)
{
Ble_MsgRec_Navi_Analysis();
}
//printf("BleRecData.Msg.Cmd = %x ", BleRecData.Msg.Cmd);
Ble_Clear_Tx_Buffer();
Ble_Clear_Rx_Buffer();
RecCtrl.Sts = BleRec_Idle;
}
}
//printf("navi sts = %x; navi turn = %d; Msg.Cmd = %d\n", Ble_Navi_Data.Navi_Sts, Ble_Navi_Data.Navi_Turn, BleRecData.Msg.Cmd);
}
vTaskDelete(NULL);
}
void Ble_User_Init(void )
{
// BleRecSuc_Semaphore = xSemaphoreCreateBinary();
// Ble_User.Ble_Sts = Ble_Idle;
// Ble_User.Request_Navi = 0;
// Ble_User.Navi_Updat = 0;
// Ble_User.Navi_T = 0;
// Ble_User.UseridUpdate = 0;
// RecCtrl.RecLen = 0;
// RecCtrl.TotalLen = 0;
// RecCtrl.Sts = BleRec_Idle;
// Ble_Navi_Data.Navi_Sts = 0;
// Ble_Navi_Data.Navi_Turn = 0;
// for(uint8_t i=0; i<sizeof(Ble_Navi_Data.Navi_Dte); i++)
// {
// Ble_Navi_Data.Navi_Dte[i] = 0;
// }
// Ble_Clear_Tx_Buffer();
// Ble_Clear_Rx_Buffer();
// xTaskCreatePinnedToCore(Ble_User_Task, "Ble_User", 4096, NULL, 10, NULL, 0);
}
#ifndef _APP_BLE_USER_H_
#define _APP_BLE_USER_H_
#include <stdlib.h>
extern uint8_t ble_uerid[33];
typedef enum
{
Ble_Idle = 0,
Ble_Conn,
Ble_Pair,
Ble_Authr,
}Ble_Sts_Enum;
typedef enum
{
BleRec_Idle = 0,
BleRec_Start,
BleRec_Suc,
}Ble_Rec_Sts;
typedef struct
{
uint8_t Ble_Sts;
uint8_t Request_Navi;
uint8_t Navi_Updat;
uint8_t Navi_T;
uint8_t UseridUpdate;
}Ble_User_Control_Struct;
typedef struct
{
uint8_t Navi_Sts;
uint8_t Navi_Turn;
uint8_t Navi_Dte[4];
}Ble_Navi_Info_Struct;
typedef union
{
struct
{
uint8_t FrameHeader;
uint8_t Cmd;
uint8_t Lenth;
uint8_t Param[252];
}Msg;
uint8_t Data[255];
}app_Ble_User_Data_Union;
typedef struct
{
uint32_t RecLen;
uint32_t TotalLen;
uint8_t Sts;
}app_Ble_Rec_Data_Ctrl_Struct;
extern app_Ble_Rec_Data_Ctrl_Struct RecCtrl;
extern Ble_User_Control_Struct Ble_User;
extern Ble_Navi_Info_Struct Ble_Navi_Data;
void Get_Ble_Raw_Data(uint8_t *data, uint32_t len);
#define EC_BTP_VERSION "1.0.5"
#define EC_BTP_OK 0
#define EC_BTP_ERR_FAIL -1
/** @brief 手机向车机汇报客户端信息
* @reqCmd EC_BTP_P2C_CLIENT_INFO
* @rlyCmd N/A
* @reqData
* {
* phoneType: 0 ///< 数据类型为int, 0是Android,1是IOS。
* phoneID:"zzz", ///< 数据类型为string, 手机ID,可以为IMME或者设备唯一编号,住授权过的手车机端会记机ID。
* }
* @rlyData N/A
*/
#define EC_BTP_P2C_CLIENT_INFO 0x30
/** @brief 车机应答clientinfo
* @reqCmd EC_BTP_C2P_CLIENT_INFO_RLY
* @rlyCmd N/A
* @reqData 字段 字节数 内容
* key 32BYTE 格式:字符串。由卡比特项目经理提供
* uuid 32BYTE 格式:字符串。代表每一块仪表的唯一标识,每个仪表都不同。
* pwd 32BYTE 格式:字符串。默认为空,如需要,在卡比特指导下填写。
* flavor 4BYTE 格式:uint32_t。由卡比特项目经理提供。
*/
#define EC_BTP_C2P_CLIENT_INFO_RLY 0x58
/** @brief 授权结果
* @reqCmd EC_BTP_P2C_CHECK_AUTH_RESULT
* @rlyCmd N/A
* @reqData 字段 字节数 内容
* license 1BYTE 校验结果。0:校验成功;其他值校验失败
* msg 64BYTE 如果license不合法,此字段附带错误类型
* @rlyData N/A
*/
#define EC_BTP_P2C_CHECK_AUTH_RESULT 0x60
/**
* @brief HUD导航图标类型
*
*/
#define NaviIconType_NONE 0 ///< 导航段转向图标类型 无定义,自定义转向图标数组,请忽略这个元素,从左转图标开始
#define NaviIconType_DEFAULT 1 ///< 导航段转向图标类型 自车图标,自定义转向图标数组,请忽略这个元素,从左转图标开始
#define NaviIconType_LEFT 2 ///< 导航段转向图标类型 左转图标
#define NaviIconType_RIGHT 3 ///< 导航段转向图标类型 右转图标
#define NaviIconType_LEFT_FRONT 4 ///< 导航段转向图标类型 左前方图标
#define NaviIconType_RIGHT_FRONT 5 ///< 导航段转向图标类型 右前方图标
#define NaviIconType_LEFT_BACK 6 ///< 导航段转向图标类型 左后方图
#define NaviIconType_RIGHT_BACK 7 ///< 导航段转向图标类型 右后方图标
#define NaviIconType_LEFT_TURN_AROUND 8 ///< 导航段转向图标类型 左转掉头图标
#define NaviIconType_STRAIGHT 9 ///< 导航段转向图标类型 直行图标
#define NaviIconType_ARRIVED_WAYPOINT 10 ///< 导航段转向图标类型 到达途经点图标
#define NaviIconType_ENTER_ROUNDABOUT 11 ///< 导航段转向图标类型 进入环岛图标
#define NaviIconType_OUT_ROUNDABOUT 12 ///< 导航段转向图标类型 驶出环岛图标
#define NaviIconType_ARRIVED_SERVICE_AREA 13 ///< 导航段转向图标类型 到达服务区图标
#define NaviIconType_ARRIVED_TOLLGATE 14 ///< 导航段转向图标类型 到达收费站图标
#define NaviIconType_ARRIVED_DESTINATION 15 ///< 导航段转向图标类型 到达目的地图标
#define NaviIconType_ARRIVED_TUNNEL 16 ///< 导航段转向图标类型 到达隧道图标
#define NaviIconType_CROSSWALK 17 ///< 导航段转向图标类型:通过人行横道图标
#define NaviIconType_OVERPASS 18 ///< 导航段转向图标类型:通过过街天桥图标
#define NaviIconType_UNDERPASS 19 ///< 导航段转向图标类型:通过地下通道图标
#define NaviIconType_SQUARE 20 ///< 导航段转向图标类型:通过广场图标
#define NaviIconType_PARK 21 ///< 导航段转向图标类型:通过公园图标
#define NaviIconType_STAIRCASE 22 ///< 导航段转向图标类型:通过扶梯图标
#define NaviIconType_LIFT 23 ///< 导航段转向图标类型:通过直梯图标
#define NaviIconType_CABLEWAY 24 ///< 导航段转向图标类型:通过索道图标
#define NaviIconType_SKY_CHANNEL 25 ///< 导航段转向图标类型:通过空中通道图标
#define NaviIconType_CHANNEL 26 ///< 导航段转向图标类型:通过通道、建筑物穿越通道图标
#define NaviIconType_WALK_ROAD 27 ///< 导航段转向图标类型:通过行人道路图标
#define NaviIconType_CRUISE_ROUTE 28 ///< 导航段转向图标类型:通过游船路线图标
#define NaviIconType_SIGHTSEEING_BUSLINE 29 ///< 导航段转向图标类型:通过观光车路线图标
#define NaviIconType_SLIDEWAY 30 ///< 导航段转向图标类型:通过滑道图标
#define NaviIconType_LADDER 31 ///< 导航段转向图标类型:通过阶梯图标
#define NaviIconType_MERGE_LEFT 51 ///< 导航段转向图标类型:靠左行驶
#define NaviIconType_MERGE_RIGHT 52 ///< 导航段转向图标类型:靠右行驶
#define NaviIconType_SLOW 53 ///< 导航段转向图标类型:减速慢行
#define NaviIconType_ENTRY_RING_LEFT 54 ///< 标准小环岛 绕环岛左转,右侧通行地区的逆时针环岛
#define NaviIconType_ENTRY_RING_RIGHT 55 ///< 标准小环岛 绕环岛右转,右侧通行地区的逆时针环岛
#define NaviIconType_ENTRY_RING_CONTINUE 56 ///< 标准小环岛 绕环岛直行,右侧通行地区的逆时针环岛
#define NaviIconType_ENTRY_RING_UTURN 57 ///< 标准小环岛 绕环岛调头,右侧通行地区的逆时针环岛
#define NaviIconType_ENTRY_LEFT_RING 58 ///< 进入环岛图标,左侧通行地区的顺时针环岛
#define NaviIconType_LEAVE_LEFT_RING 59 ///< 驶出环岛图标,左侧通行地区的顺时针环岛
#define NaviIconType_UTURN_RIGHT 60 ///< 右转掉头图标,左侧通行地区的掉头
#define NaviIconType_SPECIAL_CONTINUE 61 ///< 顺行图标(和直行有区别,顺行图标带有虚线)
#define NaviIconType_ENTRY_LEFT_RING_LEFT 62 ///< 标准小环岛 绕环岛左转,左侧通行地区的顺时针环岛
#define NaviIconType_ENTRY_LEFT_RING_RIGHT 63 ///< 标准小环岛 绕环岛右转,左侧通行地区的顺时针环岛
#define NaviIconType_ENTRY_LEFT_RING_CONTINUE 64 ///< 标准小环岛 绕环岛直行,左侧通行地区的顺时针环岛
#define NaviIconType_ENTRY_LEFT_RING_UTURN 65 ///< 标准小环岛 绕环岛调头,左侧通行地区的顺时针环岛
#define NaviIconType_SLOPE 66 ///< 通过斜坡图标
#define NaviIconType_BRIDGE 67 ///< 通过桥图标
#define NaviIconType_FERRYBOAT 68 ///< 通过渡轮图标
#define NaviIconType_SUBWAY 69 ///< 通过地铁图标
#define NaviIconType_ENTER_BUILDING 70 ///< 进入建筑物图标
#define NaviIconType_LEAVE_BUILDING 71 ///< 离开建筑物图标
#define NaviIconType_BY_ELEVATOR 72 ///< 电梯换层图标
#define NaviIconType_BY_STAIR 73 ///< 楼梯换层图标
#define NaviIconType_ESCALATOR 74 ///< 扶梯换层图标
#define NaviIconType_LOW_TRAFFIC_CROSS 75 ///< 非导航段通过红绿灯路口图标
#define NaviIconType_LOW_CROSS 76 ///< 非导航段通过普通路口图标
#define NaviIconType_ROTARY_SHARP_LEFT 77 ///< 环岛左后转,右侧通行地区的逆时针环岛
#define NaviIconType_ROTARY_SHARP_RIGHT 78 ///< 环岛后右转,右侧通行地区的逆时针环岛
#define NaviIconType_ROTARY_SLIGHT_LEFT 79 ///< 环岛左前转,右侧通行地区的逆时针环岛
#define NaviIconType_ROTARY_SLIGHT_RIGHT 80 ///< 环岛右前转,右侧通行地区的逆时针环岛
/**
* @brief HUD导航功能枚举
*/
#define EC_BTP_HUD_FUNCITON_SUPPORT_LOAD 0x01 ///< 路口放大图
#define EC_BTP_HUD_FUNCITON_SUPPORT_LINE 0x02 ///< 车道引导图
/** @brief
* @reqCmd EC_BTP_C2P_HUD
* @reqData 字段 字节数 内容
* enable 1BYTE 0:关闭HUD数据,1:开启HUD数据,一次生命周期内只需要发送一次命令。
* maxNaviIcon 2BYTE 车机端支持的导航图标最大值
* funciton 2BYTE 车机端支持的功能,参考 EC_BTP_HUD_FUNCITON_SUPPORT*
* @rlyData EC_BTP_P2C_HUD
*/
#define EC_BTP_C2P_HUD 0x14
#define EC_BTP_NAVI_STATUS_STOPED 0x35 ///< 未导航或导航结束
#define EC_BTP_NAVI_STATUS_RUNNING 0x33 ///< 正在导航
/** @brief
* @reqCmd EC_BTP_P2C_HUD
* @reqData 字段 字节数 内容
* 导航状态 1BYTE 参见:EC_BTP_NAVI_STATUS_*
* 导航转向编码 1BYTE 参见:NaviIconType_*
* 转向距离 4BYTE 距离转向的距离(单位:米)
* 转向⽬的地字节数 1BYTE 转向⽬的地UTF-8所占字节数
* 转向⽬的地 60BYTE 最多60个字节(UTF-8编码)
* 当前时速 4BYTE ⻋速(单位:1千米/⼩时)
* 导航剩余⾥程 4BYTE 剩余⾥程(单位:米)
* 预计到达时间 19BYTE 预计到达时间(格式为:dd.MM.yyyy HH:mm:ss)
* 剩余时间 2BYTE 离终点预估剩余时间(单位:分钟)
*/
#define EC_BTP_P2C_HUD 0x14
void Ble_Rec_Msg_Analysis_Process(void );
void Ble_Connect_Event_Pro(void );
void Ble_DisConnect_Event_Pro(void );
void Ble_User_Init(void );
void Ble_Msg_RequestNavi_RLY(void );
void Ble_MsgRec_Navi_Timeout(void );
#endif
\ No newline at end of file
/*
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
/****************************************************************************
*
* This demo showcases creating a GATT database using a predefined attribute table.
* It acts as a GATT server and can send adv data, be connected by client.
* Run the gatt_client demo, the client demo will automatically connect to the gatt_server_service_table demo.
* Client demo will enable GATT server's notify after connection. The two devices will then exchange
* data.
*
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_bt.h"
#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"
#include "esp_bt_main.h"
#include "gatts_table_creat_demo.h"
#include "esp_gatt_common_api.h"
#include "esp_mac.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"
#include "Protocol_CRC16.h"
#include "Protocol_Lib.h"
#include "Protocol_User.h"
#include "app_Ble_User.h"
#include "MCU_Core_Protocol.h"
typedef unsigned char uint8_t;
unsigned int flag_u;
static const int RX_BUF_SIZE = 1024;
#define TXD_PIN (GPIO_NUM_18)
#define RXD_PIN (GPIO_NUM_38)
typedef struct
{
uint16_t Rxlen;
uint8_t Rxbuff[255];
} _TY_UART_Ctrl;
_TY_UART_Ctrl TY_UARTRX;
void init_Uart(void) {
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT,
};
// We won't use a buffer for sending data.
uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 2, 200, 0, NULL, 0);
uart_param_config(UART_NUM_1, &uart_config);
uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
}
int bsp_Uart_Send_Data(uint8_t * data , unsigned int len)
{
uint32_t aaa = 0;
if(data[4] == 0x01 && data[5] == 0x33)
{
//printf("data[5] = %x ", data[5]);
//printf("data[6] = %x ", data[6]);
//printf("data[7] = %x ", data[7]);
//printf("data[8] = %x ", data[8]);
//printf("data[9] = %x ", data[9]);
//printf("data[10] = %x ", data[10]);
//printf("\n");
//
//printf("navi sts data[5] = %x ", data[5]);
//printf("navi turn data[6] = %d ", data[6]);
aaa = data[10];
aaa <<= 8;
aaa |= data[9];
aaa <<= 8;
aaa |= data[8];
aaa <<= 8;
aaa |= data[7];
//printf("navi dest = %ld \n", aaa);
//
//printf("\n");
//printf("\n");
}
int txBytes = uart_write_bytes(UART_NUM_1, data, len);
uart_wait_tx_idle_polling(UART_NUM_1);
return txBytes;
}
static void Uart_Rx_Task(void *arg)
{
uint8_t* data = (uint8_t*) malloc(RX_BUF_SIZE+1);
while (1)
{
const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 20);
if (rxBytes < 1000)
{
for (uint16_t i = 0; i < rxBytes; i++)
{
UART_Put(data[i]);
}
}
}
free(data);
}
void bsp_Uart_Init(void )
{
init_Uart();
Protocol_KL30_Wakeup_Init();
xTaskCreatePinnedToCore(Uart_Rx_Task, "bsp_Uart", 4096, NULL, 4, NULL, 1);
}
void simple_ota_service(void)
{
// if(Wifi_OTA_Request == 1)
// {
// Wifi_OTA_Request = 2;
// simple_ota_main();
// vTaskDelay(portMAX_DELAY);
// }
}
/*
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
/****************************************************************************
*
* This demo showcases BLE GATT client. It can scan BLE devices and connect to one device.
* Run the gatt_server demo, the client demo will automatically connect to the gatt_server demo.
* Client demo will enable gatt_server's notify after connection. The two devices will then exchange
* data.
*
****************************************************************************/
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <stdio.h>
#include "nvs.h"
#include "nvs_flash.h"
#include "esp_bt.h"
#include "esp_gap_ble_api.h"
#include "esp_gattc_api.h"
#include "esp_gatt_defs.h"
#include "esp_bt_main.h"
#include "esp_gatt_common_api.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#define GATTC_TAG "GATTC_DEMO"
static const uint8_t ServiceUUID[16] = { 0xF2, 0xC3, 0xF0, 0xAE, 0xA9,
0xFA, 0x15, 0x8C, 0x9D, 0x49, 0xAE,
0x73, 0xD2, 0x0B, 0x81, 0xE7 };
static const uint8_t CharWriteUUID[16] = { 0x9F, 0x9F, 0x00, 0xC1, 0x58,
0xBD, 0x32, 0xB6, 0x9E, 0x4C, 0x21,
0x9C, 0x21, 0xE8, 0xF8, 0xBE };
static const uint8_t CharNotifyUUID[16] = {0x9F, 0x9F, 0x00, 0xC1, 0x58,
0xBD, 0x32, 0xB6, 0x9E, 0x4C,
0x21, 0x9C, 0x20, 0xE8, 0xF8, 0xBE};
// #define REMOTE_SERVICE_UUID 0x00FF
// #define REMOTE_NOTIFY_CHAR_UUID 0xFF01
#define REMOTE_SERVICE_UUID 0x00FF
#define REMOTE_NOTIFY_CHAR_UUID 0xFF01
#define PROFILE_NUM 1
#define PROFILE_A_APP_ID 0
#define INVALID_HANDLE 0
unsigned char write_char_data[] = {
0x59, 0x44, 0x3D, 0x3E, 0x09, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xE8, 0x27, 0x10, 0x22,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0x02, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
0xFF, 0xFF, 0x01, 0x03, 0xE9, 0xBB, 0x91, 0xE9, 0xBE, 0x99, 0xE6, 0xB1, 0x9F, 0xE7, 0x9C, 0x81,
0xE5, 0xA4, 0xA9, 0xE6, 0x9C, 0x89, 0xE4, 0xB8, 0xBA, 0xE7, 0xA0, 0x94, 0xE7, 0xA9, 0xB6, 0xE9,
0x99, 0xA2, 0x9c, 0x4B, 0x4A
};
static char remote_device_name[] = {0x0A,0x8A,0x0A,0x0A,0x00,0x00};
// static char remote_device_name[] = "YD0A0A0000";
static bool connect = false;
static bool get_server = false;
static esp_gattc_char_elem_t *char_elem_result = NULL;
static esp_gattc_descr_elem_t *descr_elem_result = NULL;
/* Declare static functions */
static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param);
static void esp_gattc_cb(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param);
static void gattc_profile_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param);
static esp_bt_uuid_t remote_filter_service_uuid = {
.len = ESP_UUID_LEN_128,
// .uuid = {.uuid16 = REMOTE_SERVICE_UUID,},
};
static esp_bt_uuid_t remote_filter_char_uuid = {
.len = ESP_UUID_LEN_128,
// .uuid = {.uuid16 = REMOTE_NOTIFY_CHAR_UUID,},
};
static esp_bt_uuid_t notify_descr_uuid = {
.len = ESP_UUID_LEN_128,
// .uuid = {.uuid16 = ESP_GATT_UUID_CHAR_CLIENT_CONFIG,},
};
static esp_ble_scan_params_t ble_scan_params = {
.scan_type = BLE_SCAN_TYPE_ACTIVE,
.own_addr_type = BLE_ADDR_TYPE_PUBLIC,
.scan_filter_policy = BLE_SCAN_FILTER_ALLOW_ALL,
.scan_interval = 0x50,
.scan_window = 0x30,
.scan_duplicate = BLE_SCAN_DUPLICATE_DISABLE
};
struct gattc_profile_inst {
esp_gattc_cb_t gattc_cb;
uint16_t gattc_if;
uint16_t app_id;
uint16_t conn_id;
uint16_t service_start_handle;
uint16_t service_end_handle;
uint16_t char_handle;
esp_bd_addr_t remote_bda;
};
/* One gatt-based profile one app_id and one gattc_if, this array will store the gattc_if returned by ESP_GATTS_REG_EVT */
static struct gattc_profile_inst gl_profile_tab[PROFILE_NUM] = {
[PROFILE_A_APP_ID] = {
.gattc_cb = gattc_profile_event_handler,
.gattc_if = ESP_GATT_IF_NONE, /* Not get the gatt_if, so initial is ESP_GATT_IF_NONE */
},
};
esp_gatt_if_t blesend = 0;
static void gattc_profile_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param)
{
esp_ble_gattc_cb_param_t *p_data = (esp_ble_gattc_cb_param_t *)param;
memcpy(remote_filter_service_uuid.uuid.uuid128,ServiceUUID,16);
memcpy(remote_filter_char_uuid.uuid.uuid128,CharWriteUUID,16);
memcpy(notify_descr_uuid.uuid.uuid128,CharNotifyUUID,16);
switch (event) {
case ESP_GATTC_REG_EVT://扫描
ESP_LOGI(GATTC_TAG, "GATT client register, status %d, app_id %d, gattc_if %d", param->reg.status, param->reg.app_id, gattc_if);
esp_err_t scan_ret = esp_ble_gap_set_scan_params(&ble_scan_params);
if (scan_ret){
ESP_LOGE(GATTC_TAG, "set scan params error, error code = %x", scan_ret);
}
break;
case ESP_GATTC_CONNECT_EVT:{
printf("join connect ~~~~\n");
ESP_LOGI(GATTC_TAG, "Connected, conn_id %d, remote "ESP_BD_ADDR_STR"", p_data->connect.conn_id,
ESP_BD_ADDR_HEX(p_data->connect.remote_bda));
gl_profile_tab[PROFILE_A_APP_ID].conn_id = p_data->connect.conn_id;
memcpy(gl_profile_tab[PROFILE_A_APP_ID].remote_bda, p_data->connect.remote_bda, sizeof(esp_bd_addr_t));
esp_err_t mtu_ret = esp_ble_gattc_send_mtu_req (gattc_if, p_data->connect.conn_id);
if (mtu_ret){
ESP_LOGE(GATTC_TAG, "Config MTU error, error code = %x", mtu_ret);
}
break;
}
case ESP_GATTC_OPEN_EVT:
if (param->open.status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "Open failed, status %d", p_data->open.status);
break;
}
ESP_LOGI(GATTC_TAG, "Open successfully, MTU %u", p_data->open.mtu);
break;
case ESP_GATTC_DIS_SRVC_CMPL_EVT:
if (param->dis_srvc_cmpl.status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "Service discover failed, status %d", param->dis_srvc_cmpl.status);
break;
}
ESP_LOGI(GATTC_TAG, "Service discover complete, conn_id %d", param->dis_srvc_cmpl.conn_id);
// esp_ble_gattc_search_service(gattc_if, param->dis_srvc_cmpl.conn_id, &remote_filter_service_uuid);
esp_ble_gattc_search_service(gattc_if, param->dis_srvc_cmpl.conn_id, NULL);
break;
case ESP_GATTC_CFG_MTU_EVT:
ESP_LOGI(GATTC_TAG, "MTU exchange, status %d, MTU %d", param->cfg_mtu.status, param->cfg_mtu.mtu);
break;
case ESP_GATTC_SEARCH_RES_EVT: {
ESP_LOGI(GATTC_TAG, "Service search result, conn_id = %x, is primary service %d", p_data->search_res.conn_id, p_data->search_res.is_primary);
ESP_LOGI(GATTC_TAG, "start handle %d, end handle %d, current handle value %d", p_data->search_res.start_handle, p_data->search_res.end_handle, p_data->search_res.srvc_id.inst_id);
// if (p_data->search_res.srvc_id.uuid.len == ESP_UUID_LEN_16 && p_data->search_res.srvc_id.uuid.uuid.uuid16 == REMOTE_SERVICE_UUID) {
ESP_LOGI(GATTC_TAG, "UUID16len: %x", p_data->search_res.srvc_id.uuid.len);
// ESP_LOGI(GATTC_TAG, "UUID16len: %x", p_data->search_res.srvc_id.uuid.len);
ESP_LOGI(GATTC_TAG, "remote_filter_service_uuid.uuid.uuid128: %x", remote_filter_service_uuid.uuid.uuid128[0]);
if (p_data->search_res.srvc_id.uuid.len == ESP_UUID_LEN_128 && (memcmp(p_data->search_res.srvc_id.uuid.uuid.uuid128,remote_filter_service_uuid.uuid.uuid128,16) == 0)) {
// if(p_data->search_res.srvc_id.uuid.len == ESP_UUID_LEN_128) {
ESP_LOGI(GATTC_TAG, "Service found");
get_server = true;
gl_profile_tab[PROFILE_A_APP_ID].service_start_handle = p_data->search_res.start_handle;
gl_profile_tab[PROFILE_A_APP_ID].service_end_handle = p_data->search_res.end_handle;
ESP_LOGI(GATTC_TAG, "UUID16: %x", p_data->search_res.srvc_id.uuid.uuid.uuid16);
}
// ESP_LOGI(GATTC_TAG, "UUID16len: %x", p_data->search_res.srvc_id.uuid.len);
// ESP_LOGI(GATTC_TAG, "start_handl: %x", p_data->search_res.start_handle);
// ESP_LOGI(GATTC_TAG, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// ESP_LOG_BUFFER_HEX(GATTC_TAG, remote_filter_service_uuid.uuid.uuid128, sizeof(remote_filter_service_uuid.uuid.uuid128));
// ESP_LOGI(GATTC_TAG, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// ESP_LOG_BUFFER_HEX(GATTC_TAG, p_data->search_res.srvc_id.uuid.uuid.uuid128, p_data->search_res.srvc_id.uuid.len);
// ESP_LOGI(GATTC_TAG, "start_handl: %d", gl_profile_tab[PROFILE_A_APP_ID].service_start_handle);
// ESP_LOGI(GATTC_TAG, "end_handle: %x", gl_profile_tab[PROFILE_A_APP_ID].service_start_handle);
break;
}
case ESP_GATTC_SEARCH_CMPL_EVT:
if (p_data->search_cmpl.status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "Service search failed, status %x", p_data->search_cmpl.status);
break;
}
if(p_data->search_cmpl.searched_service_source == ESP_GATT_SERVICE_FROM_REMOTE_DEVICE) {
ESP_LOGI(GATTC_TAG, "Get service information from remote device");
} else if (p_data->search_cmpl.searched_service_source == ESP_GATT_SERVICE_FROM_NVS_FLASH) {
ESP_LOGI(GATTC_TAG, "Get service information from flash");
} else {
ESP_LOGI(GATTC_TAG, "Unknown service source");
}
ESP_LOGI(GATTC_TAG, "Service search complete");
if (get_server){
// if (1){
printf("get server\n");
uint16_t count = 0;
esp_gatt_status_t status = esp_ble_gattc_get_attr_count( gattc_if,
p_data->search_cmpl.conn_id,
ESP_GATT_DB_CHARACTERISTIC,
gl_profile_tab[PROFILE_A_APP_ID].service_start_handle,
gl_profile_tab[PROFILE_A_APP_ID].service_end_handle,
INVALID_HANDLE,
&count);
if (status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_attr_count error");
break;
}
if (count > 0){
char_elem_result = (esp_gattc_char_elem_t *)malloc(sizeof(esp_gattc_char_elem_t) * count);
if (!char_elem_result){
ESP_LOGE(GATTC_TAG, "gattc no mem");
break;
}else{
status = esp_ble_gattc_get_char_by_uuid( gattc_if,
p_data->search_cmpl.conn_id,
gl_profile_tab[PROFILE_A_APP_ID].service_start_handle,
gl_profile_tab[PROFILE_A_APP_ID].service_end_handle,
remote_filter_char_uuid,
char_elem_result,
&count);
ESP_LOGI(GATTC_TAG, "esp_ble_gattc_get_char_by_uuid~~~~~~~~~~~~~~~~~~~~~\n");
ESP_LOGI(GATTC_TAG, "gattc_if: %x\n", gattc_if);
ESP_LOGI(GATTC_TAG, "p_data->search_cmpl.conn_id: %x\n", p_data->search_cmpl.conn_id);
ESP_LOGI(GATTC_TAG, "start_handle: %x\n", gl_profile_tab[PROFILE_A_APP_ID].service_start_handle);
ESP_LOGI(GATTC_TAG, "end_handle: %x\n", gl_profile_tab[PROFILE_A_APP_ID].service_end_handle);
if (status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_char_by_uuid error");
free(char_elem_result);
char_elem_result = NULL;
break;
}
/* Every service have only one char in our 'ESP_GATTS_DEMO' demo, so we used first 'char_elem_result' */
printf("ESP_GATT_CHAR_PROP_BIT_WRITE:%x\n",ESP_GATT_CHAR_PROP_BIT_WRITE);
if (count > 0 && (char_elem_result[0].properties & ESP_GATT_CHAR_PROP_BIT_WRITE)){
printf("char_elem_result[0].char_handle:%x\n",char_elem_result[0].char_handle);
gl_profile_tab[PROFILE_A_APP_ID].char_handle = char_elem_result[0].char_handle;
esp_ble_gattc_register_for_notify (gattc_if, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, char_elem_result[0].char_handle);
}
}
/* free char_elem_result */
free(char_elem_result);
}else{
ESP_LOGE(GATTC_TAG, "no char found");
}
}
break;
case ESP_GATTC_REG_FOR_NOTIFY_EVT: {
if (p_data->reg_for_notify.status != ESP_GATT_OK){
printf("这里进了么?~~~!=\n");
ESP_LOGE(GATTC_TAG, "Notification register failed, status %d", p_data->reg_for_notify.status);
}else{
printf("这里进了么?ESP_GATTC_REG_FOR_NOTIFY_EVT~~~\n");
ESP_LOGI(GATTC_TAG, "Notification register successfully");
uint16_t count = 0;
uint16_t notify_en = 1;
printf("gl_profile_tab[PROFILE_A_APP_ID].char_handle:%x\n",gl_profile_tab[PROFILE_A_APP_ID].char_handle);
esp_gatt_status_t ret_status = esp_ble_gattc_get_attr_count( gattc_if,
gl_profile_tab[PROFILE_A_APP_ID].conn_id,
ESP_GATT_DB_ALL,
gl_profile_tab[PROFILE_A_APP_ID].service_start_handle,
gl_profile_tab[PROFILE_A_APP_ID].service_end_handle,
gl_profile_tab[PROFILE_A_APP_ID].char_handle,
&count);
if (ret_status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_attr_count error");
break;
}
ESP_LOGE(GATTC_TAG, "count %x", count);
// count = 1;
if (count > 0){
// xTaskCreatePinnedToCore(Sys_Run_Tasks, "Sys_Run_Tasks", 4096, NULL, 3, NULL, 1);
blesend = gattc_if;
// esp_ble_gattc_write_char( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// gl_profile_tab[PROFILE_A_APP_ID].char_handle,
// sizeof(write_char_data),
// write_char_data,
// ESP_GATT_WRITE_TYPE_RSP,
// ESP_GATT_AUTH_REQ_NONE);
// esp_ble_gattc_write_char( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// gl_profile_tab[PROFILE_A_APP_ID].char_handle,
// sizeof(write_char_data),
// write_char_data,
// ESP_GATT_WRITE_TYPE_RSP,
// ESP_GATT_AUTH_REQ_NONE);
// esp_ble_gattc_write_char( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// gl_profile_tab[PROFILE_A_APP_ID].char_handle,
// sizeof(write_char_data),
// write_char_data,
// ESP_GATT_WRITE_TYPE_RSP,
// ESP_GATT_AUTH_REQ_NONE);
// esp_ble_gattc_write_char( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// gl_profile_tab[PROFILE_A_APP_ID].char_handle,
// sizeof(write_char_data),
// write_char_data,
// ESP_GATT_WRITE_TYPE_RSP,
// ESP_GATT_AUTH_REQ_NONE);
// descr_elem_result = malloc(sizeof(esp_gattc_descr_elem_t) * count);
// if (!descr_elem_result){
// ESP_LOGE(GATTC_TAG, "malloc error, gattc no mem");
// break;
// }else{
// ret_status = esp_ble_gattc_get_descr_by_char_handle( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// p_data->reg_for_notify.handle,
// notify_descr_uuid,
// descr_elem_result,
// &count);
// ESP_LOGI(GATTC_TAG, "esp_ble_gattc_get_descr_by_char_handle~~~~~~~~~~~~~~~~~~~~~\n");
// ESP_LOGI(GATTC_TAG, "gattc_if: %x\n", gattc_if);
// ESP_LOGI(GATTC_TAG, "p_data->search_cmpl.conn_id: %x\n", gl_profile_tab[PROFILE_A_APP_ID].conn_id);
// ESP_LOGI(GATTC_TAG, "p_data->reg_for_notify.handle: %x\n", p_data->reg_for_notify.handle);
// ESP_LOG_BUFFER_HEX(GATTC_TAG, notify_descr_uuid.uuid.uuid128, sizeof(notify_descr_uuid.uuid.uuid128));
// ESP_LOGI(GATTC_TAG, "e~~~~~~~~~~~~~~~~~~~~~\n");
// ESP_LOG_BUFFER_HEX(GATTC_TAG, descr_elem_result, sizeof(descr_elem_result));
// if (ret_status != ESP_GATT_OK){
// ESP_LOGE(GATTC_TAG, "esp_ble_gattc_get_descr_by_char_handle error");
// free(descr_elem_result);
// descr_elem_result = NULL;
// break;
// }
// /* Every char has only one descriptor in our 'ESP_GATTS_DEMO' demo, so we used first 'descr_elem_result' */
// if (count > 0 && descr_elem_result[0].uuid.len == ESP_UUID_LEN_128 && descr_elem_result[0].uuid.uuid.uuid16 == ESP_GATT_UUID_CHAR_CLIENT_CONFIG){
// ret_status = esp_ble_gattc_write_char_descr( gattc_if,
// gl_profile_tab[PROFILE_A_APP_ID].conn_id,
// descr_elem_result[0].handle,
// sizeof(notify_en),
// (uint8_t *)&notify_en,
// ESP_GATT_WRITE_TYPE_RSP,
// ESP_GATT_AUTH_REQ_NONE);
// }
// if (ret_status != ESP_GATT_OK){
// ESP_LOGE(GATTC_TAG, "esp_ble_gattc_write_char_descr error");
// }
// /* free descr_elem_result */
// free(descr_elem_result);
// }
}
else{
ESP_LOGE(GATTC_TAG, "decsr not found");
}
}
break;
}
case ESP_GATTC_NOTIFY_EVT:
if (p_data->notify.is_notify){
ESP_LOGI(GATTC_TAG, "Notification received");
}else{
ESP_LOGI(GATTC_TAG, "Indication received");
}
ESP_LOG_BUFFER_HEX(GATTC_TAG, p_data->notify.value, p_data->notify.value_len);
break;
case ESP_GATTC_WRITE_DESCR_EVT:
if (p_data->write.status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "Descriptor write failed, status %x", p_data->write.status);
break;
}
ESP_LOGI(GATTC_TAG, "Descriptor write successfully");
// uint8_t write_char_data[] = "59443D3ECC05FFFFFFFFFF03E8271022FFFFFFFFFF170203FFFFFFFFFFFFFFFFFFFF0103E9BB91E9BE99E6B19FE79C81E5A4A9E69C89E4B8BAE7A094E7A9B6E999A2634B4A";
// uint8_t write_char_data[]
// for (int i = 0; i < sizeof(write_char_data); ++i)
// {
// write_char_data[i] = i % 256;
// }
printf("send~~~~\n");
esp_ble_gattc_write_char( gattc_if,
gl_profile_tab[PROFILE_A_APP_ID].conn_id,
gl_profile_tab[PROFILE_A_APP_ID].char_handle,
sizeof(write_char_data),
write_char_data,
ESP_GATT_WRITE_TYPE_RSP,
ESP_GATT_AUTH_REQ_NONE);
break;
case ESP_GATTC_SRVC_CHG_EVT: {
esp_bd_addr_t bda;
memcpy(bda, p_data->srvc_chg.remote_bda, sizeof(esp_bd_addr_t));
ESP_LOGI(GATTC_TAG, "Service change from "ESP_BD_ADDR_STR"", ESP_BD_ADDR_HEX(bda));
break;
}
case ESP_GATTC_WRITE_CHAR_EVT:
if (p_data->write.status != ESP_GATT_OK){
ESP_LOGE(GATTC_TAG, "Characteristic write failed, status %x)", p_data->write.status);
break;
}
ESP_LOGI(GATTC_TAG, "Characteristic write successfully");
break;
case ESP_GATTC_DISCONNECT_EVT:
connect = false;
get_server = false;
printf("disconnect\n");
ESP_LOGI(GATTC_TAG, "Disconnected, remote "ESP_BD_ADDR_STR", reason 0x%02x",
ESP_BD_ADDR_HEX(p_data->disconnect.remote_bda), p_data->disconnect.reason);
break;
default:
break;
}
}
static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param)
{
uint8_t *adv_name = NULL;
uint8_t adv_name_len = 0;
switch (event) {
//开始扫描
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT: {
//the unit of the duration is second
uint32_t duration = 30;
esp_ble_gap_start_scanning(duration);
break;
}
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT:
//scan start complete event to indicate scan start successfully or failed
if (param->scan_start_cmpl.status != ESP_BT_STATUS_SUCCESS) {
ESP_LOGE(GATTC_TAG, "Scanning start failed, status %x", param->scan_start_cmpl.status);
break;
}
ESP_LOGI(GATTC_TAG, "Scanning start successfully");
break;
//获取扫描结果
case ESP_GAP_BLE_SCAN_RESULT_EVT: {
esp_ble_gap_cb_param_t *scan_result = (esp_ble_gap_cb_param_t *)param;
switch (scan_result->scan_rst.search_evt) {
case ESP_GAP_SEARCH_INQ_RES_EVT:
adv_name = esp_ble_resolve_adv_data(scan_result->scan_rst.ble_adv,
ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len);
// ESP_LOGI(GATTC_TAG, "Scan result, device "ESP_BD_ADDR_STR", name len %u", ESP_BD_ADDR_HEX(scan_result->scan_rst.bda), adv_name_len);
ESP_LOG_BUFFER_CHAR(GATTC_TAG, adv_name, adv_name_len);
ESP_LOG_BUFFER_HEX(GATTC_TAG, scan_result->scan_rst.bda, 6);
#if CONFIG_EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP
if (scan_result->scan_rst.adv_data_len > 0) {
ESP_LOGI(GATTC_TAG, "adv data:");
ESP_LOG_BUFFER_HEX(GATTC_TAG, &scan_result->scan_rst.ble_adv[0], scan_result->scan_rst.adv_data_len);
}
if (scan_result->scan_rst.scan_rsp_len > 0) {
ESP_LOGI(GATTC_TAG, "scan resp:");
ESP_LOG_BUFFER_HEX(GATTC_TAG, &scan_result->scan_rst.ble_adv[scan_result->scan_rst.adv_data_len], scan_result->scan_rst.scan_rsp_len);
}
#endif
if (adv_name != NULL) {
if ( strncmp((char *)scan_result->scan_rst.bda, remote_device_name, 6) == 0) {
// Note: If there are multiple devices with the same device name, the device may connect to an unintended one.
// It is recommended to change the default device name to ensure it is unique.
ESP_LOGI(GATTC_TAG, "Device found %s", remote_device_name);
if (connect == false) {
connect = true;
printf("compare true~~!!\n");
ESP_LOGI(GATTC_TAG, "Connect to the remote device");
esp_ble_gap_stop_scanning();
int flag = 0;
flag = esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
printf("flag = %d\n",flag);
}
}
}
break;
case ESP_GAP_SEARCH_INQ_CMPL_EVT:
break;
default:
break;
}
break;
}
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT:
if (param->scan_stop_cmpl.status != ESP_BT_STATUS_SUCCESS){
ESP_LOGE(GATTC_TAG, "Scanning stop failed, status %x", param->scan_stop_cmpl.status);
break;
}
ESP_LOGI(GATTC_TAG, "Scanning stop successfully");
break;
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT:
if (param->adv_stop_cmpl.status != ESP_BT_STATUS_SUCCESS){
ESP_LOGE(GATTC_TAG, "Advertising stop failed, status %x", param->adv_stop_cmpl.status);
break;
}
ESP_LOGI(GATTC_TAG, "Advertising stop successfully");
break;
case ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT:
ESP_LOGI(GATTC_TAG, "Connection params update, status %d, conn_int %d, latency %d, timeout %d",
param->update_conn_params.status,
param->update_conn_params.conn_int,
param->update_conn_params.latency,
param->update_conn_params.timeout);
break;
case ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT:
ESP_LOGI(GATTC_TAG, "Packet length update, status %d, rx %d, tx %d",
param->pkt_data_length_cmpl.status,
param->pkt_data_length_cmpl.params.rx_len,
param->pkt_data_length_cmpl.params.tx_len);
break;
default:
break;
}
}
static void esp_gattc_cb(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param)
{
/* If event is register event, store the gattc_if for each profile */
if (event == ESP_GATTC_REG_EVT) {
if (param->reg.status == ESP_GATT_OK) {
gl_profile_tab[param->reg.app_id].gattc_if = gattc_if;
} else {
ESP_LOGI(GATTC_TAG, "reg app failed, app_id %04x, status %d",
param->reg.app_id,
param->reg.status);
return;
}
}
/* If the gattc_if equal to profile A, call profile A cb handler,
* so here call each profile's callback */
do {
int idx;
for (idx = 0; idx < PROFILE_NUM; idx++) {
if (gattc_if == ESP_GATT_IF_NONE || /* ESP_GATT_IF_NONE, not specify a certain gatt_if, need to call every profile cb function */
gattc_if == gl_profile_tab[idx].gattc_if) {
if (gl_profile_tab[idx].gattc_cb) {
gl_profile_tab[idx].gattc_cb(event, gattc_if, param);
}
}
}
} while (0);
}
// void Get_Mac_Init(void )
// {
// uint8_t ble_mac[10] = {0};
// char temp[10] = {0};
// char temp1[20] = {0};
// esp_read_mac(ble_mac, ESP_MAC_BT);
// //sprintf(temp, "%02X%02X", ble_mac[4], ble_mac[5]);
// raw_adv_data[sizeof(raw_adv_data) - 4] = temp[0];
// raw_adv_data[sizeof(raw_adv_data) - 3] = temp[1];
// raw_adv_data[sizeof(raw_adv_data) - 2] = temp[2];
// raw_adv_data[sizeof(raw_adv_data) - 1] = temp[3];
// // ESP_LOGW(GATTS_TABLE_TAG, "BLE_MAC IS %s : ",
// // &raw_adv_data[11]);
// // ESP_LOGW(GATTS_TABLE_TAG, "BLE_MAC IS %s : ",
// // temp);
// //printf("My MAC:\n");
// esp_log_buffer_hex(GATTS_TABLE_TAG, ble_mac, 6);
// BT_Device_Name[sizeof(BT_Device_Name) - 5] = temp[0];
// BT_Device_Name[sizeof(BT_Device_Name) - 4] = temp[1];
// BT_Device_Name[sizeof(BT_Device_Name) - 3] = temp[2];
// BT_Device_Name[sizeof(BT_Device_Name) - 2] = temp[3];
// raw_adv_data[11] = ble_mac[0];
// raw_adv_data[12] = ble_mac[1];
// raw_adv_data[13] = ble_mac[2];
// raw_adv_data[14] = ble_mac[3];
// raw_adv_data[15] = ble_mac[4];
// raw_adv_data[16] = ble_mac[5];
// //sprintf(temp1, "%02X%02X%02X%02X%02X%02X", ble_mac[0], ble_mac[1], ble_mac[2], ble_mac[3], ble_mac[4], ble_mac[5]);
// for(int i=0; i<12; i++)
// {
// char_value[i] = temp1[i];
// }
// }
void ble_send(void)
{
if(blesend != 0)
{
esp_ble_gattc_write_char( blesend,
gl_profile_tab[PROFILE_A_APP_ID].conn_id,
gl_profile_tab[PROFILE_A_APP_ID].char_handle,
sizeof(write_char_data),
write_char_data,
ESP_GATT_WRITE_TYPE_RSP,
ESP_GATT_AUTH_REQ_NONE);
}
}
void bsp_Ble_Init(void)
{
// Initialize NVS.
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK( ret );
#if CONFIG_EXAMPLE_CI_PIPELINE_ID
memcpy(remote_device_name, esp_bluedroid_get_example_name(), sizeof(remote_device_name));
#endif
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
ret = esp_bt_controller_init(&bt_cfg);
if (ret) {
ESP_LOGE(GATTC_TAG, "%s initialize controller failed: %s", __func__, esp_err_to_name(ret));
return;
}
ret = esp_bt_controller_enable(ESP_BT_MODE_BLE);
if (ret) {
ESP_LOGE(GATTC_TAG, "%s enable controller failed: %s", __func__, esp_err_to_name(ret));
return;
}
ret = esp_bluedroid_init();
if (ret) {
ESP_LOGE(GATTC_TAG, "%s init bluetooth failed: %s", __func__, esp_err_to_name(ret));
return;
}
ret = esp_bluedroid_enable();
if (ret) {
ESP_LOGE(GATTC_TAG, "%s enable bluetooth failed: %s", __func__, esp_err_to_name(ret));
return;
}
//register the callback function to the gap module
ret = esp_ble_gap_register_callback(esp_gap_cb);
if (ret){
ESP_LOGE(GATTC_TAG, "%s gap register failed, error code = %x", __func__, ret);
return;
}
//register the callback function to the gattc module
ret = esp_ble_gattc_register_callback(esp_gattc_cb);
if(ret){
ESP_LOGE(GATTC_TAG, "%s gattc register failed, error code = %x", __func__, ret);
return;
}
ret = esp_ble_gattc_app_register(PROFILE_A_APP_ID);
if (ret){
ESP_LOGE(GATTC_TAG, "%s gattc app register failed, error code = %x", __func__, ret);
}
esp_err_t local_mtu_ret = esp_ble_gatt_set_local_mtu(500);
if (local_mtu_ret){
ESP_LOGE(GATTC_TAG, "set local MTU failed, error code = %x", local_mtu_ret);
}
}
/*
* SPDX-FileCopyrightText: 2021 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#ifndef GATTS_TABLE_CREAT_DEMO_H
#define GATTS_TABLE_CREAT_DEMO_H
/* Attributes State Machine */
enum
{
IDX_SVC,
IDX_CHAR_2A29,
IDX_CHAR_VAL_2A29,
IDX_CHAR_CFG_2A29,
IDX_CHAR_2A24,
IDX_CHAR_VAL_2A24,
IDX_CHAR_CFG_2A24,
IDX_CHAR_2A25,
IDX_CHAR_VAL_2A25,
IDX_CHAR_CFG_2A25,
IDX_CHAR_2A27,
IDX_CHAR_VAL_2A27,
IDX_CHAR_CFG_2A27,
IDX_CHAR_2A26,
IDX_CHAR_VAL_2A26,
IDX_CHAR_CFG_2A26,
IDX_CHAR_2A28,
IDX_CHAR_VAL_2A28,
IDX_CHAR_CFG_2A28,
IDX_CHAR_2A23,
IDX_CHAR_VAL_2A23,
IDX_CHAR_CFG_2A23,
IDX_CHAR_2A2A,
IDX_CHAR_VAL_2A2A,
IDX_CHAR_CFG_2A2A,
IDX_CHAR_2A50,
IDX_CHAR_VAL_2A50,
IDX_CHAR_CFG_2A50,
HRS_IDX_NB,
};
enum
{
IDX_SVC2,
IDX_CHAR_A2,
IDX_CHAR_VAL_A2,
IDX_CHAR_CFG_A2,
HRS_IDX_NB2,
};
void bsp_Ble_Init(void);
void bsp_Uart_Init(void );
int bsp_Ble_Gatts_Send_Indicate(uint8_t len, uint8_t *data);
void simple_ota_service(void);
extern uint8_t BT_Device_Name[13];
void Get_Mac_Init(void );
extern int bsp_Uart_Send_Data(uint8_t * data , unsigned int len);
extern void ble_send(void);
#endif
#include "app_Ble_User.h"
#include "gatts_table_creat_demo.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "gatts_table_creat_demo.h"
#include "main_user.h"
#include "Protocol_CRC16.h"
#include "Protocol_User.h"
// #include "bt_app_main.h"
// #include "app_BT_User.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"
#include "MCU_Core_Protocol.h"
#include "Protocol_Lib.h"
#include "app_Ble_User.h"
// #include "app_BT_User.h"
// #include "bt_app_hf.h"
#include "wifi_service.h"
#define TAG "MAIN_USER"
// extern esp_bd_addr_t peer_addr;
uint32_t Sys_1ms_Cnt;
TaskHandle_t wifi_service_hdl;
#define SYS_RUN_TASK_1MS (1)
#define SYS_RUN_TASK_10MS (Sys_1ms_Cnt % 10 == 1)
#define SYS_RUN_TASK_20MS (Sys_1ms_Cnt % 20 == 2)
#define SYS_RUN_TASK_50MS (Sys_1ms_Cnt % 50 == 3)
#define SYS_RUN_TASK_100MS (Sys_1ms_Cnt % 100 == 4)
#define SYS_RUN_TASK_1000MS (Sys_1ms_Cnt % 1000 == 5)
uint32_t testcnt;
static void Sys_Run_Tasks(void *arg)
{
// uint8_t i = 0;
while(1)
{
if(Sys_1ms_Cnt < 499)
{
Sys_1ms_Cnt ++ ;
}
else
{
Sys_1ms_Cnt = 0;
}
if(SYS_RUN_TASK_10MS)
{
Protocol_Send_Service();
Protocol_Service();
// BT_User_Process();
}
if(SYS_RUN_TASK_20MS)
{
}
if(SYS_RUN_TASK_50MS)
{
Prot_Send_Msg_Process();
}
if(SYS_RUN_TASK_100MS)
{
Ble_MsgRec_Navi_Timeout();
}
if(SYS_RUN_TASK_1000MS)
{
ble_send();
simple_ota_service();
testcnt++;
if(testcnt >= 10)
{
testcnt = 0;
// printf("BT_User.BT_Sts = %d\r\n", BT_User.BT_Sts);
// printf("Ble_User.Ble_Sts = %d\r\n", Ble_User.Ble_Sts);
// esp_log_buffer_hex(TAG, peer_addr, 6);
// printf("Ble_User.Navi_Updat = %d\r\n", Ble_User.Navi_Updat);
// printf("RecCtrl.Sts = %d\r\n", RecCtrl.Sts);
// Ble_Msg_RequestNavi_RLY();
// if(Prot_User.State < Prot_Normal)
// {
// Prot_User.State = Prot_Normal;
// printf("Prot_Normal \r\n");
// }
}
}
vTaskDelay(1);
}
vTaskDelete(NULL);
}
static void wifi_service_task(void *arg)
{
while (1)
{
wifi_service_timer();
wifi_service();
vTaskDelay(pdMS_TO_TICKS(100));
}
}
void app_main(void)
{
Protocol_User_Ctrl_Init();
// BT_User_Init();
Ble_User_Init();
bsp_Ble_Init();
// Get_Mac_Init();
// bsp_BT_Init();
// bsp_Ble_Init();
bsp_Uart_Init();
//printf("KL30 INIT OVER~~~~~~\r\n");
xTaskCreatePinnedToCore(Sys_Run_Tasks, "Sys_Run_Tasks", 4096, NULL, 3, NULL, 1);
// xTaskCreatePinnedToCore(wifi_service_task, "wifi_service_task", 4096, NULL, 5, &wifi_service_hdl, 1);
}
#ifndef _MAIN_USER_H_
#define _MAIN_USER_H_
#endif
\ No newline at end of file
# Name, Type, SubType, Offset, Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs, data, nvs, , 0x4000,
otadata, data, ota, , 0x2000,
phy_init, data, phy, , 0x1000,
ota_0, app, ota_0, , 2M,
ota_1, app, ota_1, , 2M,
\ No newline at end of file
#
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.3.1 Project Configuration
#
CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined"
CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined"
CONFIG_SOC_DPORT_WORKAROUND="Not determined"
CONFIG_SOC_CAPS_ECO_VER_MAX=301
CONFIG_SOC_ADC_SUPPORTED=y
CONFIG_SOC_DAC_SUPPORTED=y
CONFIG_SOC_UART_SUPPORTED=y
CONFIG_SOC_MCPWM_SUPPORTED=y
CONFIG_SOC_GPTIMER_SUPPORTED=y
CONFIG_SOC_SDMMC_HOST_SUPPORTED=y
CONFIG_SOC_BT_SUPPORTED=y
CONFIG_SOC_PCNT_SUPPORTED=y
CONFIG_SOC_PHY_SUPPORTED=y
CONFIG_SOC_WIFI_SUPPORTED=y
CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y
CONFIG_SOC_TWAI_SUPPORTED=y
CONFIG_SOC_EFUSE_SUPPORTED=y
CONFIG_SOC_EMAC_SUPPORTED=y
CONFIG_SOC_ULP_SUPPORTED=y
CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y
CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y
CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y
CONFIG_SOC_RTC_MEM_SUPPORTED=y
CONFIG_SOC_I2S_SUPPORTED=y
CONFIG_SOC_RMT_SUPPORTED=y
CONFIG_SOC_SDM_SUPPORTED=y
CONFIG_SOC_GPSPI_SUPPORTED=y
CONFIG_SOC_LEDC_SUPPORTED=y
CONFIG_SOC_I2C_SUPPORTED=y
CONFIG_SOC_SUPPORT_COEXISTENCE=y
CONFIG_SOC_AES_SUPPORTED=y
CONFIG_SOC_MPI_SUPPORTED=y
CONFIG_SOC_SHA_SUPPORTED=y
CONFIG_SOC_FLASH_ENC_SUPPORTED=y
CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y
CONFIG_SOC_BOD_SUPPORTED=y
CONFIG_SOC_ULP_FSM_SUPPORTED=y
CONFIG_SOC_CLK_TREE_SUPPORTED=y
CONFIG_SOC_MPU_SUPPORTED=y
CONFIG_SOC_WDT_SUPPORTED=y
CONFIG_SOC_SPI_FLASH_SUPPORTED=y
CONFIG_SOC_RNG_SUPPORTED=y
CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
CONFIG_SOC_PM_SUPPORTED=y
CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5
CONFIG_SOC_XTAL_SUPPORT_26M=y
CONFIG_SOC_XTAL_SUPPORT_40M=y
CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y
CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y
CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
CONFIG_SOC_ADC_DMA_SUPPORTED=y
CONFIG_SOC_ADC_PERIPH_NUM=2
CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10
CONFIG_SOC_ADC_ATTEN_NUM=4
CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2
CONFIG_SOC_ADC_PATT_LEN_MAX=16
CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9
CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12
CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2
CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4
CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0
CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2
CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20
CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9
CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12
CONFIG_SOC_ADC_SHARED_POWER=y
CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y
CONFIG_SOC_IDCACHE_PER_CORE=y
CONFIG_SOC_CPU_CORES_NUM=2
CONFIG_SOC_CPU_INTR_NUM=32
CONFIG_SOC_CPU_HAS_FPU=y
CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y
CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64
CONFIG_SOC_DAC_CHAN_NUM=2
CONFIG_SOC_DAC_RESOLUTION=8
CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y
CONFIG_SOC_GPIO_PORT=1
CONFIG_SOC_GPIO_PIN_COUNT=40
CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF
CONFIG_SOC_GPIO_IN_RANGE_MAX=39
CONFIG_SOC_GPIO_OUT_RANGE_MAX=33
CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA
CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y
CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3
CONFIG_SOC_I2C_NUM=2
CONFIG_SOC_HP_I2C_NUM=2
CONFIG_SOC_I2C_FIFO_LEN=32
CONFIG_SOC_I2C_CMD_REG_NUM=16
CONFIG_SOC_I2C_SUPPORT_SLAVE=y
CONFIG_SOC_I2C_SUPPORT_APB=y
CONFIG_SOC_I2C_STOP_INDEPENDENT=y
CONFIG_SOC_I2S_NUM=2
CONFIG_SOC_I2S_HW_VERSION_1=y
CONFIG_SOC_I2S_SUPPORTS_APLL=y
CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y
CONFIG_SOC_I2S_SUPPORTS_PDM=y
CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y
CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1
CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y
CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1
CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y
CONFIG_SOC_I2S_SUPPORTS_ADC=y
CONFIG_SOC_I2S_SUPPORTS_DAC=y
CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y
CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y
CONFIG_SOC_I2S_LCD_I80_VARIANT=y
CONFIG_SOC_LCD_I80_SUPPORTED=y
CONFIG_SOC_LCD_I80_BUSES=2
CONFIG_SOC_LCD_I80_BUS_WIDTH=24
CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y
CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y
CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y
CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y
CONFIG_SOC_LEDC_CHANNEL_NUM=8
CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20
CONFIG_SOC_MCPWM_GROUPS=2
CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3
CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3
CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2
CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2
CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2
CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3
CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y
CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3
CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3
CONFIG_SOC_MMU_PERIPH_NUM=2
CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3
CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
CONFIG_SOC_PCNT_GROUPS=1
CONFIG_SOC_PCNT_UNITS_PER_GROUP=8
CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2
CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2
CONFIG_SOC_RMT_GROUPS=1
CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8
CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8
CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8
CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64
CONFIG_SOC_RMT_SUPPORT_REF_TICK=y
CONFIG_SOC_RMT_SUPPORT_APB=y
CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y
CONFIG_SOC_RTCIO_PIN_COUNT=18
CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y
CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y
CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y
CONFIG_SOC_SDM_GROUPS=1
CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8
CONFIG_SOC_SDM_CLK_SUPPORT_APB=y
CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y
CONFIG_SOC_SPI_AS_CS_SUPPORTED=y
CONFIG_SOC_SPI_PERIPH_NUM=3
CONFIG_SOC_SPI_DMA_CHAN_NUM=2
CONFIG_SOC_SPI_MAX_CS_NUM=3
CONFIG_SOC_SPI_SUPPORT_CLK_APB=y
CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64
CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192
CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y
CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y
CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y
CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y
CONFIG_SOC_TIMER_GROUPS=2
CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2
CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64
CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4
CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y
CONFIG_SOC_TOUCH_SENSOR_VERSION=1
CONFIG_SOC_TOUCH_SENSOR_NUM=10
CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1
CONFIG_SOC_TWAI_CONTROLLER_NUM=1
CONFIG_SOC_TWAI_BRP_MIN=2
CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y
CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y
CONFIG_SOC_UART_NUM=3
CONFIG_SOC_UART_HP_NUM=3
CONFIG_SOC_UART_SUPPORT_APB_CLK=y
CONFIG_SOC_UART_SUPPORT_REF_TICK=y
CONFIG_SOC_UART_FIFO_LEN=128
CONFIG_SOC_UART_BITRATE_MAX=5000000
CONFIG_SOC_SPIRAM_SUPPORTED=y
CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y
CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y
CONFIG_SOC_SHA_ENDIANNESS_BE=y
CONFIG_SOC_SHA_SUPPORT_SHA1=y
CONFIG_SOC_SHA_SUPPORT_SHA256=y
CONFIG_SOC_SHA_SUPPORT_SHA384=y
CONFIG_SOC_SHA_SUPPORT_SHA512=y
CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4
CONFIG_SOC_MPI_OPERATIONS_NUM=y
CONFIG_SOC_RSA_MAX_BIT_LEN=4096
CONFIG_SOC_AES_SUPPORT_AES_128=y
CONFIG_SOC_AES_SUPPORT_AES_192=y
CONFIG_SOC_AES_SUPPORT_AES_256=y
CONFIG_SOC_SECURE_BOOT_V1=y
CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y
CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32
CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y
CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y
CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y
CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y
CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y
CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y
CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y
CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y
CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y
CONFIG_SOC_PM_SUPPORT_MODEM_PD=y
CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y
CONFIG_SOC_CLK_APLL_SUPPORTED=y
CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y
CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y
CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y
CONFIG_SOC_SDMMC_USE_IOMUX=y
CONFIG_SOC_SDMMC_NUM_SLOTS=2
CONFIG_SOC_WIFI_WAPI_SUPPORT=y
CONFIG_SOC_WIFI_CSI_SUPPORT=y
CONFIG_SOC_WIFI_MESH_SUPPORT=y
CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
CONFIG_SOC_WIFI_NAN_SUPPORT=y
CONFIG_SOC_BLE_SUPPORTED=y
CONFIG_SOC_BLE_MESH_SUPPORTED=y
CONFIG_SOC_BT_CLASSIC_SUPPORTED=y
CONFIG_SOC_BLUFI_SUPPORTED=y
CONFIG_SOC_BT_H2C_ENC_KEY_CTRL_ENH_VSC_SUPPORTED=y
CONFIG_SOC_ULP_HAS_ADC=y
CONFIG_SOC_PHY_COMBO_MODULE=y
CONFIG_SOC_EMAC_RMII_CLK_OUT_INTERNAL_LOOPBACK=y
CONFIG_IDF_CMAKE=y
CONFIG_IDF_TOOLCHAIN="gcc"
CONFIG_IDF_TARGET_ARCH_XTENSA=y
CONFIG_IDF_TARGET_ARCH="xtensa"
CONFIG_IDF_TARGET="esp32"
CONFIG_IDF_INIT_VERSION="5.3.1"
CONFIG_IDF_TARGET_ESP32=y
CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000
#
# Build type
#
CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
# CONFIG_APP_BUILD_TYPE_RAM is not set
CONFIG_APP_BUILD_GENERATE_BINARIES=y
CONFIG_APP_BUILD_BOOTLOADER=y
CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
# CONFIG_APP_REPRODUCIBLE_BUILD is not set
# CONFIG_APP_NO_BLOBS is not set
# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set
# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set
# end of Build type
#
# Bootloader config
#
#
# Bootloader manager
#
CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
CONFIG_BOOTLOADER_PROJECT_VER=1
# end of Bootloader manager
CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y
# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
CONFIG_BOOTLOADER_LOG_LEVEL=3
#
# Serial Flash Configurations
#
# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
# end of Serial Flash Configurations
# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set
CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y
# CONFIG_BOOTLOADER_FACTORY_RESET is not set
# CONFIG_BOOTLOADER_APP_TEST is not set
CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
CONFIG_BOOTLOADER_WDT_ENABLE=y
# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
CONFIG_BOOTLOADER_WDT_TIME_MS=9000
# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0
# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set
# end of Bootloader config
#
# Security features
#
CONFIG_SECURE_BOOT_V1_SUPPORTED=y
# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
# CONFIG_SECURE_BOOT is not set
# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
# end of Security features
#
# Application manager
#
CONFIG_APP_COMPILE_TIME_DATE=y
# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16
# end of Application manager
CONFIG_ESP_ROM_HAS_CRC_LE=y
CONFIG_ESP_ROM_HAS_CRC_BE=y
CONFIG_ESP_ROM_HAS_MZ_CRC32=y
CONFIG_ESP_ROM_HAS_JPEG_DECODE=y
CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y
CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y
CONFIG_ESP_ROM_HAS_NEWLIB=y
CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y
CONFIG_ESP_ROM_HAS_SW_FLOAT=y
CONFIG_ESP_ROM_USB_OTG_NUM=-1
CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1
CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y
#
# Serial flasher config
#
# CONFIG_ESPTOOLPY_NO_STUB is not set
# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
CONFIG_ESPTOOLPY_FLASHMODE_DIO=y
# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y
CONFIG_ESPTOOLPY_FLASHMODE="dio"
# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set
CONFIG_ESPTOOLPY_FLASHFREQ_40M=y
# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set
# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
CONFIG_ESPTOOLPY_FLASHFREQ="40m"
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
CONFIG_ESPTOOLPY_FLASHSIZE="8MB"
# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set
CONFIG_ESPTOOLPY_BEFORE_RESET=y
# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
CONFIG_ESPTOOLPY_BEFORE="default_reset"
CONFIG_ESPTOOLPY_AFTER_RESET=y
# CONFIG_ESPTOOLPY_AFTER_NORESET is not set
CONFIG_ESPTOOLPY_AFTER="hard_reset"
CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
# end of Serial flasher config
#
# Partition Table
#
# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_OFFSET=0xA000
CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
#
# Compiler options
#
CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set
CONFIG_COMPILER_HIDE_PATHS_MACROS=y
# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
# CONFIG_COMPILER_CXX_RTTI is not set
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
# CONFIG_COMPILER_DUMP_RTL_FILES is not set
CONFIG_COMPILER_RT_LIB_GCCLIB=y
CONFIG_COMPILER_RT_LIB_NAME="gcc"
# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set
CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y
# end of Compiler options
#
# Component config
#
#
# Application Level Tracing
#
# CONFIG_APPTRACE_DEST_JTAG is not set
CONFIG_APPTRACE_DEST_NONE=y
# CONFIG_APPTRACE_DEST_UART1 is not set
# CONFIG_APPTRACE_DEST_UART2 is not set
CONFIG_APPTRACE_DEST_UART_NONE=y
CONFIG_APPTRACE_UART_TASK_PRIO=1
CONFIG_APPTRACE_LOCK_ENABLE=y
# end of Application Level Tracing
#
# Bluetooth
#
CONFIG_BT_ENABLED=y
CONFIG_BT_BLUEDROID_ENABLED=y
# CONFIG_BT_NIMBLE_ENABLED is not set
# CONFIG_BT_CONTROLLER_ONLY is not set
CONFIG_BT_CONTROLLER_ENABLED=y
# CONFIG_BT_CONTROLLER_DISABLED is not set
#
# Bluedroid Options
#
CONFIG_BT_BTC_TASK_STACK_SIZE=3072
CONFIG_BT_BLUEDROID_PINNED_TO_CORE_0=y
# CONFIG_BT_BLUEDROID_PINNED_TO_CORE_1 is not set
CONFIG_BT_BLUEDROID_PINNED_TO_CORE=0
CONFIG_BT_BTU_TASK_STACK_SIZE=4352
# CONFIG_BT_BLUEDROID_MEM_DEBUG is not set
CONFIG_BT_BLUEDROID_ESP_COEX_VSC=y
CONFIG_BT_CLASSIC_ENABLED=y
CONFIG_BT_ENC_KEY_SIZE_CTRL_VSC=y
# CONFIG_BT_ENC_KEY_SIZE_CTRL_NONE is not set
# CONFIG_BT_CLASSIC_BQB_ENABLED is not set
# CONFIG_BT_A2DP_ENABLE is not set
# CONFIG_BT_SPP_ENABLED is not set
# CONFIG_BT_L2CAP_ENABLED is not set
CONFIG_BT_HFP_ENABLE=y
CONFIG_BT_HFP_CLIENT_ENABLE=y
CONFIG_BT_HFP_AG_ENABLE=y
CONFIG_BT_HFP_AUDIO_DATA_PATH_PCM=y
# CONFIG_BT_HFP_AUDIO_DATA_PATH_HCI is not set
# CONFIG_BT_HID_ENABLED is not set
# CONFIG_BT_PBAC_ENABLED is not set
CONFIG_BT_BLE_ENABLED=y
CONFIG_BT_GATTS_ENABLE=y
# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set
# CONFIG_BT_BLE_BLUFI_ENABLE is not set
CONFIG_BT_GATT_MAX_SR_PROFILES=8
CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100
# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set
CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y
CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0
# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set
# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set
# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set
CONFIG_BT_GATTC_ENABLE=y
CONFIG_BT_GATTC_MAX_CACHE_CHAR=40
CONFIG_BT_GATTC_NOTIF_REG_MAX=5
# CONFIG_BT_GATTC_CACHE_NVS_FLASH is not set
CONFIG_BT_GATTC_CONNECT_RETRY_COUNT=3
CONFIG_BT_BLE_SMP_ENABLE=y
# CONFIG_BT_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set
# CONFIG_BT_BLE_SMP_ID_RESET_ENABLE is not set
# CONFIG_BT_STACK_NO_LOG is not set
#
# BT DEBUG LOG LEVEL
#
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_HCI_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_HCI_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_HCI_TRACE_LEVEL=2
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_BTM_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_BTM_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_BTM_TRACE_LEVEL=2
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_L2CAP_TRACE_LEVEL=2
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL=2
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_SDP_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_SDP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_SDP_TRACE_LEVEL=2
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_GAP_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_GAP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_GAP_TRACE_LEVEL=2
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_BNEP_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_BNEP_TRACE_LEVEL=2
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_PAN_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_PAN_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_PAN_TRACE_LEVEL=2
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_A2D_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_A2D_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_A2D_TRACE_LEVEL=2
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_AVDT_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_AVDT_TRACE_LEVEL=2
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_AVCT_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_AVCT_TRACE_LEVEL=2
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_AVRC_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_AVRC_TRACE_LEVEL=2
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_MCA_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_MCA_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_MCA_TRACE_LEVEL=2
# CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_HID_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_HID_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_HID_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_HID_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_HID_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_HID_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_HID_TRACE_LEVEL=2
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_APPL_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_APPL_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_APPL_TRACE_LEVEL=2
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_GATT_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_GATT_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_GATT_TRACE_LEVEL=2
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_SMP_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_SMP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_SMP_TRACE_LEVEL=2
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_BTIF_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_BTIF_TRACE_LEVEL=2
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_BTC_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_BTC_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_BTC_TRACE_LEVEL=2
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_OSI_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_OSI_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_OSI_TRACE_LEVEL=2
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE is not set
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_ERROR is not set
CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_WARNING=y
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_API is not set
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_EVENT is not set
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_DEBUG is not set
# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_VERBOSE is not set
CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2
# end of BT DEBUG LOG LEVEL
CONFIG_BT_ACL_CONNECTIONS=4
CONFIG_BT_MULTI_CONNECTION_ENBALE=y
# CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST is not set
# CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY is not set
# CONFIG_BT_BLE_HOST_QUEUE_CONG_CHECK is not set
CONFIG_BT_SMP_ENABLE=y
CONFIG_BT_SMP_MAX_BONDS=15
# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set
CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30
CONFIG_BT_MAX_DEVICE_NAME_LEN=32
# CONFIG_BT_BLE_RPA_SUPPORTED is not set
CONFIG_BT_BLE_RPA_TIMEOUT=900
# CONFIG_BT_BLE_42_FEATURES_SUPPORTED is not set
# CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set
# end of Bluedroid Options
#
# Controller Options
#
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set
# CONFIG_BTDM_CTRL_MODE_BTDM is not set
CONFIG_BTDM_CTRL_BLE_MAX_CONN=3
CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0
CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0
CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0
CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3
CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y
# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set
CONFIG_BTDM_CTRL_PINNED_TO_CORE=0
CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y
# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set
#
# MODEM SLEEP Options
#
CONFIG_BTDM_CTRL_MODEM_SLEEP=y
CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y
# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set
CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y
# end of MODEM SLEEP Options
CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y
CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
CONFIG_BTDM_BLE_SCAN_DUPL=y
CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y
# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set
# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set
CONFIG_BTDM_SCAN_DUPL_TYPE=0
CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=100
CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0
# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set
CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y
# CONFIG_BTDM_CTRL_SCAN_BACKOFF_UPPERLIMITMAX is not set
CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
CONFIG_BTDM_RESERVE_DRAM=0xdb5c
CONFIG_BTDM_CTRL_HLI=y
# end of Controller Options
#
# Common Options
#
CONFIG_BT_ALARM_MAX_NUM=50
# end of Common Options
# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
# end of Bluetooth
# CONFIG_BLE_MESH is not set
#
# Console Library
#
# CONFIG_CONSOLE_SORTED_HELP is not set
# end of Console Library
#
# Driver Configurations
#
#
# TWAI Configuration
#
# CONFIG_TWAI_ISR_IN_IRAM is not set
CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y
CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y
CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y
CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y
CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y
# end of TWAI Configuration
#
# Legacy ADC Driver Configuration
#
CONFIG_ADC_DISABLE_DAC=y
# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
#
# Legacy ADC Calibration Configuration
#
CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y
CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y
CONFIG_ADC_CAL_LUT_ENABLE=y
# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy ADC Calibration Configuration
# end of Legacy ADC Driver Configuration
#
# Legacy DAC Driver Configurations
#
# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy DAC Driver Configurations
#
# Legacy MCPWM Driver Configurations
#
# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy MCPWM Driver Configurations
#
# Legacy Timer Group Driver Configurations
#
# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy Timer Group Driver Configurations
#
# Legacy RMT Driver Configurations
#
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy RMT Driver Configurations
#
# Legacy I2S Driver Configurations
#
# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy I2S Driver Configurations
#
# Legacy PCNT Driver Configurations
#
# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy PCNT Driver Configurations
#
# Legacy SDM Driver Configurations
#
# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set
# end of Legacy SDM Driver Configurations
# end of Driver Configurations
#
# eFuse Bit Manager
#
# CONFIG_EFUSE_CUSTOM_TABLE is not set
# CONFIG_EFUSE_VIRTUAL is not set
# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set
CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y
# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set
CONFIG_EFUSE_MAX_BLK_LEN=192
# end of eFuse Bit Manager
#
# ESP-TLS
#
CONFIG_ESP_TLS_USING_MBEDTLS=y
# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set
# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
# CONFIG_ESP_TLS_INSECURE is not set
# end of ESP-TLS
#
# ADC and ADC Calibration
#
# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set
# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set
#
# ADC Calibration Configurations
#
CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y
CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y
CONFIG_ADC_CALI_LUT_ENABLE=y
# end of ADC Calibration Configurations
CONFIG_ADC_DISABLE_DAC_OUTPUT=y
# CONFIG_ADC_ENABLE_DEBUG_LOG is not set
# end of ADC and ADC Calibration
#
# Wireless Coexistence
#
CONFIG_ESP_COEX_ENABLED=y
CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
# end of Wireless Coexistence
#
# Common ESP-related
#
CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
# end of Common ESP-related
#
# ESP-Driver:DAC Configurations
#
# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set
# CONFIG_DAC_ISR_IRAM_SAFE is not set
# CONFIG_DAC_ENABLE_DEBUG_LOG is not set
CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y
# end of ESP-Driver:DAC Configurations
#
# ESP-Driver:GPIO Configurations
#
# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set
# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set
# end of ESP-Driver:GPIO Configurations
#
# ESP-Driver:GPTimer Configurations
#
CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:GPTimer Configurations
#
# ESP-Driver:I2C Configurations
#
# CONFIG_I2C_ISR_IRAM_SAFE is not set
# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:I2C Configurations
#
# ESP-Driver:I2S Configurations
#
# CONFIG_I2S_ISR_IRAM_SAFE is not set
# CONFIG_I2S_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:I2S Configurations
#
# ESP-Driver:LEDC Configurations
#
# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set
# end of ESP-Driver:LEDC Configurations
#
# ESP-Driver:MCPWM Configurations
#
# CONFIG_MCPWM_ISR_IRAM_SAFE is not set
# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set
# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:MCPWM Configurations
#
# ESP-Driver:PCNT Configurations
#
# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set
# CONFIG_PCNT_ISR_IRAM_SAFE is not set
# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:PCNT Configurations
#
# ESP-Driver:RMT Configurations
#
# CONFIG_RMT_ISR_IRAM_SAFE is not set
# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set
# CONFIG_RMT_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:RMT Configurations
#
# ESP-Driver:Sigma Delta Modulator Configurations
#
# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set
# CONFIG_SDM_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:Sigma Delta Modulator Configurations
#
# ESP-Driver:SPI Configurations
#
# CONFIG_SPI_MASTER_IN_IRAM is not set
CONFIG_SPI_MASTER_ISR_IN_IRAM=y
# CONFIG_SPI_SLAVE_IN_IRAM is not set
CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
# end of ESP-Driver:SPI Configurations
#
# ESP-Driver:Touch Sensor Configurations
#
# CONFIG_TOUCH_CTRL_FUNC_IN_IRAM is not set
# CONFIG_TOUCH_ISR_IRAM_SAFE is not set
# CONFIG_TOUCH_ENABLE_DEBUG_LOG is not set
# end of ESP-Driver:Touch Sensor Configurations
#
# ESP-Driver:UART Configurations
#
# CONFIG_UART_ISR_IN_IRAM is not set
# end of ESP-Driver:UART Configurations
#
# Ethernet
#
CONFIG_ETH_ENABLED=y
CONFIG_ETH_USE_ESP32_EMAC=y
CONFIG_ETH_PHY_INTERFACE_RMII=y
CONFIG_ETH_RMII_CLK_INPUT=y
# CONFIG_ETH_RMII_CLK_OUTPUT is not set
CONFIG_ETH_RMII_CLK_IN_GPIO=0
CONFIG_ETH_DMA_BUFFER_SIZE=512
CONFIG_ETH_DMA_RX_BUFFER_NUM=10
CONFIG_ETH_DMA_TX_BUFFER_NUM=10
# CONFIG_ETH_IRAM_OPTIMIZATION is not set
CONFIG_ETH_USE_SPI_ETHERNET=y
# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
# CONFIG_ETH_USE_OPENETH is not set
# CONFIG_ETH_TRANSMIT_MUTEX is not set
# end of Ethernet
#
# Event Loop Library
#
# CONFIG_ESP_EVENT_LOOP_PROFILING is not set
CONFIG_ESP_EVENT_POST_FROM_ISR=y
CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
# end of Event Loop Library
#
# GDB Stub
#
CONFIG_ESP_GDBSTUB_ENABLED=y
# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set
CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub
#
# ESP HTTP client
#
CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set
# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set
# end of ESP HTTP client
#
# HTTP Server
#
CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
CONFIG_HTTPD_MAX_URI_LEN=512
CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
CONFIG_HTTPD_PURGE_BUF_LEN=32
# CONFIG_HTTPD_LOG_PURGE_DATA is not set
# CONFIG_HTTPD_WS_SUPPORT is not set
# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set
# end of HTTP Server
#
# ESP HTTPS OTA
#
# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set
CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP=y
# end of ESP HTTPS OTA
#
# ESP HTTPS server
#
# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
# end of ESP HTTPS server
#
# Hardware Settings
#
#
# Chip revision
#
CONFIG_ESP32_REV_MIN_0=y
# CONFIG_ESP32_REV_MIN_1 is not set
# CONFIG_ESP32_REV_MIN_1_1 is not set
# CONFIG_ESP32_REV_MIN_2 is not set
# CONFIG_ESP32_REV_MIN_3 is not set
# CONFIG_ESP32_REV_MIN_3_1 is not set
CONFIG_ESP32_REV_MIN=0
CONFIG_ESP32_REV_MIN_FULL=0
CONFIG_ESP_REV_MIN_FULL=0
#
# Maximum Supported ESP32 Revision (Rev v3.99)
#
CONFIG_ESP32_REV_MAX_FULL=399
CONFIG_ESP_REV_MAX_FULL=399
# end of Chip revision
#
# MAC Config
#
CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4
# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set
CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y
CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4
# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set
# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
# end of MAC Config
#
# Sleep Config
#
# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set
CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set
CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y
# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set
CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000
# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
# CONFIG_ESP_SLEEP_DEBUG is not set
CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
# end of Sleep Config
#
# RTC Clock Config
#
CONFIG_RTC_CLK_SRC_INT_RC=y
# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set
# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set
CONFIG_RTC_CLK_CAL_CYCLES=1024
# end of RTC Clock Config
#
# Peripheral Control
#
CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y
# end of Peripheral Control
#
# Main XTAL Config
#
# CONFIG_XTAL_FREQ_26 is not set
CONFIG_XTAL_FREQ_40=y
# CONFIG_XTAL_FREQ_AUTO is not set
CONFIG_XTAL_FREQ=40
# end of Main XTAL Config
CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y
# end of Hardware Settings
#
# LCD and Touch Panel
#
#
# LCD Touch Drivers are maintained in the IDF Component Registry
#
#
# LCD Peripheral Configuration
#
CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32
# CONFIG_LCD_ENABLE_DEBUG_LOG is not set
# end of LCD Peripheral Configuration
# end of LCD and Touch Panel
#
# ESP NETIF Adapter
#
CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
CONFIG_ESP_NETIF_TCPIP_LWIP=y
# CONFIG_ESP_NETIF_LOOPBACK is not set
CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y
# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set
# CONFIG_ESP_NETIF_L2_TAP is not set
# CONFIG_ESP_NETIF_BRIDGE_EN is not set
# end of ESP NETIF Adapter
#
# Partition API Configuration
#
# end of Partition API Configuration
#
# PHY
#
CONFIG_ESP_PHY_ENABLED=y
CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
CONFIG_ESP_PHY_MAX_TX_POWER=20
# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
# end of PHY
#
# Power Management
#
# CONFIG_PM_ENABLE is not set
# end of Power Management
#
# ESP PSRAM
#
# CONFIG_SPIRAM is not set
# end of ESP PSRAM
#
# ESP Ringbuf
#
# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
# end of ESP Ringbuf
#
# ESP System Settings
#
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240
#
# Memory
#
# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set
#
# Non-backward compatible options
#
# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set
# end of Non-backward compatible options
# end of Memory
#
# Trace memory
#
# CONFIG_ESP32_TRAX is not set
CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0
# end of Trace memory
# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
#
# Memory protection
#
# end of Memory protection
CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584
CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set
# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
CONFIG_ESP_CONSOLE_UART_DEFAULT=y
# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set
# CONFIG_ESP_CONSOLE_NONE is not set
CONFIG_ESP_CONSOLE_UART=y
CONFIG_ESP_CONSOLE_UART_NUM=0
CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0
CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200
CONFIG_ESP_INT_WDT=y
CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
CONFIG_ESP_INT_WDT_CHECK_CPU1=y
CONFIG_ESP_TASK_WDT_EN=y
CONFIG_ESP_TASK_WDT_INIT=y
# CONFIG_ESP_TASK_WDT_PANIC is not set
CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
CONFIG_ESP_DEBUG_OCDAWARE=y
CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5=y
#
# Brownout Detector
#
CONFIG_ESP_BROWNOUT_DET=y
CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set
CONFIG_ESP_BROWNOUT_DET_LVL=0
# end of Brownout Detector
# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set
CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
# end of ESP System Settings
#
# IPC (Inter-Processor Call)
#
CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y
CONFIG_ESP_IPC_ISR_ENABLE=y
# end of IPC (Inter-Processor Call)
#
# ESP Timer (High Resolution Timer)
#
# CONFIG_ESP_TIMER_PROFILING is not set
CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584
CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1
# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set
CONFIG_ESP_TIMER_TASK_AFFINITY=0x0
CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y
CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y
# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set
CONFIG_ESP_TIMER_IMPL_TG0_LAC=y
# end of ESP Timer (High Resolution Timer)
#
# Wi-Fi
#
CONFIG_ESP_WIFI_ENABLED=y
CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=4
CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=8
# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y
CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5
# CONFIG_ESP_WIFI_CSI_ENABLED is not set
CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP_WIFI_TX_BA_WIN=6
CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP_WIFI_RX_BA_WIN=6
CONFIG_ESP_WIFI_NVS_ENABLED=y
CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y
# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set
CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752
CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32
# CONFIG_ESP_WIFI_IRAM_OPT is not set
# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set
# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set
CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y
CONFIG_ESP_WIFI_ENABLE_SAE_PK=y
CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y
CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y
# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50
CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10
CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15
CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y
# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set
CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y
# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7
# CONFIG_ESP_WIFI_NAN_ENABLE is not set
CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y
CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
# CONFIG_ESP_WIFI_WAPI_PSK is not set
# CONFIG_ESP_WIFI_11KV_SUPPORT is not set
# CONFIG_ESP_WIFI_MBO_SUPPORT is not set
# CONFIG_ESP_WIFI_DPP_SUPPORT is not set
# CONFIG_ESP_WIFI_11R_SUPPORT is not set
# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set
#
# WPS Configuration Options
#
# CONFIG_ESP_WIFI_WPS_STRICT is not set
# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set
# end of WPS Configuration Options
# CONFIG_ESP_WIFI_DEBUG_PRINT is not set
# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set
# end of Wi-Fi
#
# Core dump
#
# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set
# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set
CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y
# end of Core dump
#
# FAT Filesystem support
#
CONFIG_FATFS_VOLUME_COUNT=2
CONFIG_FATFS_LFN_NONE=y
# CONFIG_FATFS_LFN_HEAP is not set
# CONFIG_FATFS_LFN_STACK is not set
# CONFIG_FATFS_SECTOR_512 is not set
CONFIG_FATFS_SECTOR_4096=y
# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set
CONFIG_FATFS_CODEPAGE_437=y
# CONFIG_FATFS_CODEPAGE_720 is not set
# CONFIG_FATFS_CODEPAGE_737 is not set
# CONFIG_FATFS_CODEPAGE_771 is not set
# CONFIG_FATFS_CODEPAGE_775 is not set
# CONFIG_FATFS_CODEPAGE_850 is not set
# CONFIG_FATFS_CODEPAGE_852 is not set
# CONFIG_FATFS_CODEPAGE_855 is not set
# CONFIG_FATFS_CODEPAGE_857 is not set
# CONFIG_FATFS_CODEPAGE_860 is not set
# CONFIG_FATFS_CODEPAGE_861 is not set
# CONFIG_FATFS_CODEPAGE_862 is not set
# CONFIG_FATFS_CODEPAGE_863 is not set
# CONFIG_FATFS_CODEPAGE_864 is not set
# CONFIG_FATFS_CODEPAGE_865 is not set
# CONFIG_FATFS_CODEPAGE_866 is not set
# CONFIG_FATFS_CODEPAGE_869 is not set
# CONFIG_FATFS_CODEPAGE_932 is not set
# CONFIG_FATFS_CODEPAGE_936 is not set
# CONFIG_FATFS_CODEPAGE_949 is not set
# CONFIG_FATFS_CODEPAGE_950 is not set
CONFIG_FATFS_CODEPAGE=437
CONFIG_FATFS_FS_LOCK=0
CONFIG_FATFS_TIMEOUT_MS=10000
CONFIG_FATFS_PER_FILE_CACHE=y
# CONFIG_FATFS_USE_FASTSEEK is not set
CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0
# CONFIG_FATFS_IMMEDIATE_FSYNC is not set
# CONFIG_FATFS_USE_LABEL is not set
CONFIG_FATFS_LINK_LOCK=y
# end of FAT Filesystem support
#
# FreeRTOS
#
#
# Kernel
#
# CONFIG_FREERTOS_SMP is not set
# CONFIG_FREERTOS_UNICORE is not set
CONFIG_FREERTOS_HZ=1000
# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set
# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set
CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
# CONFIG_FREERTOS_USE_IDLE_HOOK is not set
# CONFIG_FREERTOS_USE_TICK_HOOK is not set
CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set
CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF
CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
# end of Kernel
#
# Port
#
CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
CONFIG_FREERTOS_ISR_STACKSIZE=1536
CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
# CONFIG_FREERTOS_FPU_IN_ISR is not set
CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y
CONFIG_FREERTOS_CORETIMER_0=y
# CONFIG_FREERTOS_CORETIMER_1 is not set
CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y
# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
# end of Port
CONFIG_FREERTOS_PORT=y
CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
CONFIG_FREERTOS_DEBUG_OCDAWARE=y
CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
CONFIG_FREERTOS_NUMBER_OF_CORES=2
# end of FreeRTOS
#
# Hardware Abstraction Layer (HAL) and Low Level (LL)
#
CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
# CONFIG_HAL_ASSERTION_DISABLE is not set
# CONFIG_HAL_ASSERTION_SILENT is not set
# CONFIG_HAL_ASSERTION_ENABLE is not set
CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y
CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y
# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
#
# Heap memory debugging
#
CONFIG_HEAP_POISONING_DISABLED=y
# CONFIG_HEAP_POISONING_LIGHT is not set
# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set
CONFIG_HEAP_TRACING_OFF=y
# CONFIG_HEAP_TRACING_STANDALONE is not set
# CONFIG_HEAP_TRACING_TOHOST is not set
# CONFIG_HEAP_USE_HOOKS is not set
# CONFIG_HEAP_TASK_TRACKING is not set
# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
# end of Heap memory debugging
#
# Log output
#
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
CONFIG_LOG_DEFAULT_LEVEL_INFO=y
# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
CONFIG_LOG_MAXIMUM_LEVEL=3
# CONFIG_LOG_MASTER_LEVEL is not set
CONFIG_LOG_COLORS=y
CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
# end of Log output
#
# LWIP
#
CONFIG_LWIP_ENABLE=y
CONFIG_LWIP_LOCAL_HOSTNAME="TY100"
# CONFIG_LWIP_NETIF_API is not set
CONFIG_LWIP_TCPIP_TASK_PRIO=18
# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
# CONFIG_LWIP_L2_TO_L3_COPY is not set
# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set
CONFIG_LWIP_TIMERS_ONDEMAND=y
CONFIG_LWIP_ND6=y
# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set
CONFIG_LWIP_MAX_SOCKETS=10
# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
# CONFIG_LWIP_SO_LINGER is not set
CONFIG_LWIP_SO_REUSE=y
CONFIG_LWIP_SO_REUSE_RXTOALL=y
# CONFIG_LWIP_SO_RCVBUF is not set
# CONFIG_LWIP_NETBUF_RECVINFO is not set
CONFIG_LWIP_IP_DEFAULT_TTL=64
CONFIG_LWIP_IP4_FRAG=y
CONFIG_LWIP_IP6_FRAG=y
# CONFIG_LWIP_IP4_REASSEMBLY is not set
# CONFIG_LWIP_IP6_REASSEMBLY is not set
CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
# CONFIG_LWIP_IP_FORWARD is not set
# CONFIG_LWIP_STATS is not set
CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
CONFIG_LWIP_GARP_TMR_INTERVAL=60
CONFIG_LWIP_ESP_MLDV6_REPORT=y
CONFIG_LWIP_MLDV6_TMR_INTERVAL=40
CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
CONFIG_LWIP_DHCP_OPTIONS_LEN=68
CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
#
# DHCP server
#
CONFIG_LWIP_DHCPS=y
CONFIG_LWIP_DHCPS_LEASE_UNIT=60
CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
# end of DHCP server
# CONFIG_LWIP_AUTOIP is not set
CONFIG_LWIP_IPV4=y
CONFIG_LWIP_IPV6=y
# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
# CONFIG_LWIP_IPV6_FORWARD is not set
# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
CONFIG_LWIP_NETIF_LOOPBACK=y
CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
#
# TCP
#
CONFIG_LWIP_MAX_ACTIVE_TCP=16
CONFIG_LWIP_MAX_LISTENING_TCP=16
CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
CONFIG_LWIP_TCP_MAXRTX=12
CONFIG_LWIP_TCP_SYNMAXRTX=12
CONFIG_LWIP_TCP_MSS=1440
CONFIG_LWIP_TCP_TMR_INTERVAL=250
CONFIG_LWIP_TCP_MSL=60000
CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
CONFIG_LWIP_TCP_WND_DEFAULT=5744
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4
# CONFIG_LWIP_TCP_SACK_OUT is not set
CONFIG_LWIP_TCP_OVERSIZE_MSS=y
# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
CONFIG_LWIP_TCP_RTO_TIME=1500
# end of TCP
#
# UDP
#
CONFIG_LWIP_MAX_UDP_PCBS=16
CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
# end of UDP
#
# Checksums
#
# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
# end of Checksums
CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set
CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
# CONFIG_LWIP_PPP_SUPPORT is not set
CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
# CONFIG_LWIP_SLIP_SUPPORT is not set
#
# ICMP
#
CONFIG_LWIP_ICMP=y
# CONFIG_LWIP_MULTICAST_PING is not set
# CONFIG_LWIP_BROADCAST_PING is not set
# end of ICMP
#
# LWIP RAW API
#
CONFIG_LWIP_MAX_RAW_PCBS=16
# end of LWIP RAW API
#
# SNTP
#
CONFIG_LWIP_SNTP_MAX_SERVERS=1
# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
CONFIG_LWIP_SNTP_STARTUP_DELAY=y
CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
# end of SNTP
#
# DNS
#
CONFIG_LWIP_DNS_MAX_SERVERS=3
# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
# end of DNS
CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
CONFIG_LWIP_ESP_LWIP_ASSERT=y
#
# Hooks
#
# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set
CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y
# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set
CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y
# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set
# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set
CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y
# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set
# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set
CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set
# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set
CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y
# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set
# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set
# end of Hooks
# CONFIG_LWIP_DEBUG is not set
# end of LWIP
#
# mbedTLS
#
CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
# CONFIG_MBEDTLS_DEBUG is not set
#
# mbedTLS v3.x related
#
# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set
# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
CONFIG_MBEDTLS_PKCS7_C=y
# end of mbedTLS v3.x related
#
# Certificate Bundle
#
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set
CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
# end of Certificate Bundle
# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
CONFIG_MBEDTLS_CMAC_C=y
CONFIG_MBEDTLS_HARDWARE_AES=y
# CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set
CONFIG_MBEDTLS_HARDWARE_MPI=y
# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set
CONFIG_MBEDTLS_HARDWARE_SHA=y
CONFIG_MBEDTLS_ROM_MD5=y
# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set
# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set
CONFIG_MBEDTLS_HAVE_TIME=y
# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
CONFIG_MBEDTLS_SHA512_C=y
CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set
# CONFIG_MBEDTLS_TLS_DISABLED is not set
CONFIG_MBEDTLS_TLS_SERVER=y
CONFIG_MBEDTLS_TLS_CLIENT=y
CONFIG_MBEDTLS_TLS_ENABLED=y
#
# TLS Key Exchange Methods
#
# CONFIG_MBEDTLS_PSK_MODES is not set
CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
# end of TLS Key Exchange Methods
CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
CONFIG_MBEDTLS_SSL_ALPN=y
CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
#
# Symmetric Ciphers
#
CONFIG_MBEDTLS_AES_C=y
# CONFIG_MBEDTLS_CAMELLIA_C is not set
# CONFIG_MBEDTLS_DES_C is not set
# CONFIG_MBEDTLS_BLOWFISH_C is not set
# CONFIG_MBEDTLS_XTEA_C is not set
CONFIG_MBEDTLS_CCM_C=y
CONFIG_MBEDTLS_GCM_C=y
# CONFIG_MBEDTLS_NIST_KW_C is not set
# end of Symmetric Ciphers
# CONFIG_MBEDTLS_RIPEMD160_C is not set
#
# Certificates
#
CONFIG_MBEDTLS_PEM_PARSE_C=y
CONFIG_MBEDTLS_PEM_WRITE_C=y
CONFIG_MBEDTLS_X509_CRL_PARSE_C=y
CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
# end of Certificates
CONFIG_MBEDTLS_ECP_C=y
# CONFIG_MBEDTLS_DHM_C is not set
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
# CONFIG_MBEDTLS_ECJPAKE_C is not set
CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y
CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_POLY1305_C is not set
# CONFIG_MBEDTLS_CHACHA20_C is not set
# CONFIG_MBEDTLS_HKDF_C is not set
# CONFIG_MBEDTLS_THREADING_C is not set
CONFIG_MBEDTLS_ERROR_STRINGS=y
# end of mbedTLS
#
# ESP-MQTT Configurations
#
CONFIG_MQTT_PROTOCOL_311=y
# CONFIG_MQTT_PROTOCOL_5 is not set
CONFIG_MQTT_TRANSPORT_SSL=y
CONFIG_MQTT_TRANSPORT_WEBSOCKET=y
CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set
# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
# CONFIG_MQTT_CUSTOM_OUTBOX is not set
# end of ESP-MQTT Configurations
#
# Newlib
#
CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
# CONFIG_NEWLIB_NANO_FORMAT is not set
CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
# end of Newlib
#
# NVS
#
# CONFIG_NVS_ASSERT_ERROR_CHECK is not set
# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set
# end of NVS
#
# OpenThread
#
# CONFIG_OPENTHREAD_ENABLED is not set
#
# Thread Operational Dataset
#
CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP"
CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64"
CONFIG_OPENTHREAD_NETWORK_CHANNEL=15
CONFIG_OPENTHREAD_NETWORK_PANID=0x1234
CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe"
CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff"
CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53"
# end of Thread Operational Dataset
CONFIG_OPENTHREAD_XTAL_ACCURACY=130
# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
# CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE is not set
#
# Thread Address Query Config
#
# end of Thread Address Query Config
# end of OpenThread
#
# Protocomm
#
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
# end of Protocomm
#
# PThreads
#
CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
CONFIG_PTHREAD_STACK_MIN=768
CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y
# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set
# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set
CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
# end of PThreads
#
# MMU Config
#
CONFIG_MMU_PAGE_SIZE_64KB=y
CONFIG_MMU_PAGE_MODE="64KB"
CONFIG_MMU_PAGE_SIZE=0x10000
# end of MMU Config
#
# Main Flash configuration
#
#
# SPI Flash behavior when brownout
#
CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
CONFIG_SPI_FLASH_BROWNOUT_RESET=y
# end of SPI Flash behavior when brownout
#
# Optional and Experimental Features (READ DOCS FIRST)
#
#
# Features here require specific hardware (READ DOCS FIRST!)
#
CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
# end of Optional and Experimental Features (READ DOCS FIRST)
# end of Main Flash configuration
#
# SPI Flash driver
#
# CONFIG_SPI_FLASH_VERIFY_WRITE is not set
# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y
# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set
# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set
# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set
# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set
CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
#
# Auto-detect flash chips
#
CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y
CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y
CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set
# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set
# end of Auto-detect flash chips
CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
# end of SPI Flash driver
#
# SPIFFS Configuration
#
CONFIG_SPIFFS_MAX_PARTITIONS=3
#
# SPIFFS Cache Configuration
#
CONFIG_SPIFFS_CACHE=y
CONFIG_SPIFFS_CACHE_WR=y
# CONFIG_SPIFFS_CACHE_STATS is not set
# end of SPIFFS Cache Configuration
CONFIG_SPIFFS_PAGE_CHECK=y
CONFIG_SPIFFS_GC_MAX_RUNS=10
# CONFIG_SPIFFS_GC_STATS is not set
CONFIG_SPIFFS_PAGE_SIZE=256
CONFIG_SPIFFS_OBJ_NAME_LEN=32
# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set
CONFIG_SPIFFS_USE_MAGIC=y
CONFIG_SPIFFS_USE_MAGIC_LENGTH=y
CONFIG_SPIFFS_META_LENGTH=4
CONFIG_SPIFFS_USE_MTIME=y
#
# Debug Configuration
#
# CONFIG_SPIFFS_DBG is not set
# CONFIG_SPIFFS_API_DBG is not set
# CONFIG_SPIFFS_GC_DBG is not set
# CONFIG_SPIFFS_CACHE_DBG is not set
# CONFIG_SPIFFS_CHECK_DBG is not set
# CONFIG_SPIFFS_TEST_VISUALISATION is not set
# end of Debug Configuration
# end of SPIFFS Configuration
#
# TCP Transport
#
#
# Websocket
#
CONFIG_WS_TRANSPORT=y
CONFIG_WS_BUFFER_SIZE=1024
# CONFIG_WS_DYNAMIC_BUFFER is not set
# end of Websocket
# end of TCP Transport
#
# Ultra Low Power (ULP) Co-processor
#
# CONFIG_ULP_COPROC_ENABLED is not set
#
# ULP Debugging Options
#
# end of ULP Debugging Options
# end of Ultra Low Power (ULP) Co-processor
#
# Unity unit testing library
#
CONFIG_UNITY_ENABLE_FLOAT=y
CONFIG_UNITY_ENABLE_DOUBLE=y
# CONFIG_UNITY_ENABLE_64BIT is not set
# CONFIG_UNITY_ENABLE_COLOR is not set
CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y
# CONFIG_UNITY_ENABLE_FIXTURE is not set
# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set
# end of Unity unit testing library
#
# Virtual file system
#
CONFIG_VFS_SUPPORT_IO=y
CONFIG_VFS_SUPPORT_DIR=y
CONFIG_VFS_SUPPORT_SELECT=y
CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
# CONFIG_VFS_SELECT_IN_RAM is not set
CONFIG_VFS_SUPPORT_TERMIOS=y
CONFIG_VFS_MAX_COUNT=8
#
# Host File System I/O (Semihosting)
#
CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
# end of Host File System I/O (Semihosting)
# end of Virtual file system
#
# Wear Levelling
#
# CONFIG_WL_SECTOR_SIZE_512 is not set
CONFIG_WL_SECTOR_SIZE_4096=y
CONFIG_WL_SECTOR_SIZE=4096
# end of Wear Levelling
#
# Wi-Fi Provisioning Manager
#
CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
# CONFIG_WIFI_PROV_BLE_BONDING is not set
# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set
# CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV is not set
CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set
# end of Wi-Fi Provisioning Manager
# end of Component config
# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
# Deprecated options for backward compatibility
# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
# CONFIG_NO_BLOBS is not set
# CONFIG_ESP32_NO_BLOBS is not set
# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set
# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y
# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
CONFIG_LOG_BOOTLOADER_LEVEL=3
# CONFIG_APP_ROLLBACK_ENABLE is not set
# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
# CONFIG_FLASHMODE_QIO is not set
# CONFIG_FLASHMODE_QOUT is not set
CONFIG_FLASHMODE_DIO=y
# CONFIG_FLASHMODE_DOUT is not set
CONFIG_MONITOR_BAUD=115200
CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2
# CONFIG_CXX_EXCEPTIONS is not set
CONFIG_STACK_CHECK_NONE=y
# CONFIG_STACK_CHECK_NORM is not set
# CONFIG_STACK_CHECK_STRONG is not set
# CONFIG_STACK_CHECK_ALL is not set
# CONFIG_WARN_WRITE_STRINGS is not set
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
CONFIG_ESP32_APPTRACE_DEST_NONE=y
CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
CONFIG_BLUEDROID_ENABLED=y
# CONFIG_NIMBLE_ENABLED is not set
CONFIG_BTC_TASK_STACK_SIZE=3072
CONFIG_BLUEDROID_PINNED_TO_CORE_0=y
# CONFIG_BLUEDROID_PINNED_TO_CORE_1 is not set
CONFIG_BLUEDROID_PINNED_TO_CORE=0
CONFIG_BTU_TASK_STACK_SIZE=4352
# CONFIG_BLUEDROID_MEM_DEBUG is not set
CONFIG_CLASSIC_BT_ENABLED=y
# CONFIG_A2DP_ENABLE is not set
CONFIG_HFP_ENABLE=y
CONFIG_HFP_CLIENT_ENABLE=y
CONFIG_HFP_AG_ENABLE=y
CONFIG_HFP_AUDIO_DATA_PATH_PCM=y
# CONFIG_HFP_AUDIO_DATA_PATH_HCI is not set
CONFIG_GATTS_ENABLE=y
# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set
CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y
CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0
CONFIG_GATTC_ENABLE=y
# CONFIG_GATTC_CACHE_NVS_FLASH is not set
CONFIG_BLE_SMP_ENABLE=y
# CONFIG_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set
# CONFIG_HCI_TRACE_LEVEL_NONE is not set
# CONFIG_HCI_TRACE_LEVEL_ERROR is not set
CONFIG_HCI_TRACE_LEVEL_WARNING=y
# CONFIG_HCI_TRACE_LEVEL_API is not set
# CONFIG_HCI_TRACE_LEVEL_EVENT is not set
# CONFIG_HCI_TRACE_LEVEL_DEBUG is not set
# CONFIG_HCI_TRACE_LEVEL_VERBOSE is not set
CONFIG_HCI_INITIAL_TRACE_LEVEL=2
# CONFIG_BTM_TRACE_LEVEL_NONE is not set
# CONFIG_BTM_TRACE_LEVEL_ERROR is not set
CONFIG_BTM_TRACE_LEVEL_WARNING=y
# CONFIG_BTM_TRACE_LEVEL_API is not set
# CONFIG_BTM_TRACE_LEVEL_EVENT is not set
# CONFIG_BTM_TRACE_LEVEL_DEBUG is not set
# CONFIG_BTM_TRACE_LEVEL_VERBOSE is not set
CONFIG_BTM_INITIAL_TRACE_LEVEL=2
# CONFIG_L2CAP_TRACE_LEVEL_NONE is not set
# CONFIG_L2CAP_TRACE_LEVEL_ERROR is not set
CONFIG_L2CAP_TRACE_LEVEL_WARNING=y
# CONFIG_L2CAP_TRACE_LEVEL_API is not set
# CONFIG_L2CAP_TRACE_LEVEL_EVENT is not set
# CONFIG_L2CAP_TRACE_LEVEL_DEBUG is not set
# CONFIG_L2CAP_TRACE_LEVEL_VERBOSE is not set
CONFIG_L2CAP_INITIAL_TRACE_LEVEL=2
# CONFIG_RFCOMM_TRACE_LEVEL_NONE is not set
# CONFIG_RFCOMM_TRACE_LEVEL_ERROR is not set
CONFIG_RFCOMM_TRACE_LEVEL_WARNING=y
# CONFIG_RFCOMM_TRACE_LEVEL_API is not set
# CONFIG_RFCOMM_TRACE_LEVEL_EVENT is not set
# CONFIG_RFCOMM_TRACE_LEVEL_DEBUG is not set
# CONFIG_RFCOMM_TRACE_LEVEL_VERBOSE is not set
CONFIG_RFCOMM_INITIAL_TRACE_LEVEL=2
# CONFIG_SDP_TRACE_LEVEL_NONE is not set
# CONFIG_SDP_TRACE_LEVEL_ERROR is not set
CONFIG_SDP_TRACE_LEVEL_WARNING=y
# CONFIG_SDP_TRACE_LEVEL_API is not set
# CONFIG_SDP_TRACE_LEVEL_EVENT is not set
# CONFIG_SDP_TRACE_LEVEL_DEBUG is not set
# CONFIG_SDP_TRACE_LEVEL_VERBOSE is not set
CONFIG_BTH_LOG_SDP_INITIAL_TRACE_LEVEL=2
# CONFIG_GAP_TRACE_LEVEL_NONE is not set
# CONFIG_GAP_TRACE_LEVEL_ERROR is not set
CONFIG_GAP_TRACE_LEVEL_WARNING=y
# CONFIG_GAP_TRACE_LEVEL_API is not set
# CONFIG_GAP_TRACE_LEVEL_EVENT is not set
# CONFIG_GAP_TRACE_LEVEL_DEBUG is not set
# CONFIG_GAP_TRACE_LEVEL_VERBOSE is not set
CONFIG_GAP_INITIAL_TRACE_LEVEL=2
CONFIG_BNEP_INITIAL_TRACE_LEVEL=2
# CONFIG_PAN_TRACE_LEVEL_NONE is not set
# CONFIG_PAN_TRACE_LEVEL_ERROR is not set
CONFIG_PAN_TRACE_LEVEL_WARNING=y
# CONFIG_PAN_TRACE_LEVEL_API is not set
# CONFIG_PAN_TRACE_LEVEL_EVENT is not set
# CONFIG_PAN_TRACE_LEVEL_DEBUG is not set
# CONFIG_PAN_TRACE_LEVEL_VERBOSE is not set
CONFIG_PAN_INITIAL_TRACE_LEVEL=2
# CONFIG_A2D_TRACE_LEVEL_NONE is not set
# CONFIG_A2D_TRACE_LEVEL_ERROR is not set
CONFIG_A2D_TRACE_LEVEL_WARNING=y
# CONFIG_A2D_TRACE_LEVEL_API is not set
# CONFIG_A2D_TRACE_LEVEL_EVENT is not set
# CONFIG_A2D_TRACE_LEVEL_DEBUG is not set
# CONFIG_A2D_TRACE_LEVEL_VERBOSE is not set
CONFIG_A2D_INITIAL_TRACE_LEVEL=2
# CONFIG_AVDT_TRACE_LEVEL_NONE is not set
# CONFIG_AVDT_TRACE_LEVEL_ERROR is not set
CONFIG_AVDT_TRACE_LEVEL_WARNING=y
# CONFIG_AVDT_TRACE_LEVEL_API is not set
# CONFIG_AVDT_TRACE_LEVEL_EVENT is not set
# CONFIG_AVDT_TRACE_LEVEL_DEBUG is not set
# CONFIG_AVDT_TRACE_LEVEL_VERBOSE is not set
CONFIG_AVDT_INITIAL_TRACE_LEVEL=2
# CONFIG_AVCT_TRACE_LEVEL_NONE is not set
# CONFIG_AVCT_TRACE_LEVEL_ERROR is not set
CONFIG_AVCT_TRACE_LEVEL_WARNING=y
# CONFIG_AVCT_TRACE_LEVEL_API is not set
# CONFIG_AVCT_TRACE_LEVEL_EVENT is not set
# CONFIG_AVCT_TRACE_LEVEL_DEBUG is not set
# CONFIG_AVCT_TRACE_LEVEL_VERBOSE is not set
CONFIG_AVCT_INITIAL_TRACE_LEVEL=2
# CONFIG_AVRC_TRACE_LEVEL_NONE is not set
# CONFIG_AVRC_TRACE_LEVEL_ERROR is not set
CONFIG_AVRC_TRACE_LEVEL_WARNING=y
# CONFIG_AVRC_TRACE_LEVEL_API is not set
# CONFIG_AVRC_TRACE_LEVEL_EVENT is not set
# CONFIG_AVRC_TRACE_LEVEL_DEBUG is not set
# CONFIG_AVRC_TRACE_LEVEL_VERBOSE is not set
CONFIG_AVRC_INITIAL_TRACE_LEVEL=2
# CONFIG_MCA_TRACE_LEVEL_NONE is not set
# CONFIG_MCA_TRACE_LEVEL_ERROR is not set
CONFIG_MCA_TRACE_LEVEL_WARNING=y
# CONFIG_MCA_TRACE_LEVEL_API is not set
# CONFIG_MCA_TRACE_LEVEL_EVENT is not set
# CONFIG_MCA_TRACE_LEVEL_DEBUG is not set
# CONFIG_MCA_TRACE_LEVEL_VERBOSE is not set
CONFIG_MCA_INITIAL_TRACE_LEVEL=2
# CONFIG_HID_TRACE_LEVEL_NONE is not set
# CONFIG_HID_TRACE_LEVEL_ERROR is not set
CONFIG_HID_TRACE_LEVEL_WARNING=y
# CONFIG_HID_TRACE_LEVEL_API is not set
# CONFIG_HID_TRACE_LEVEL_EVENT is not set
# CONFIG_HID_TRACE_LEVEL_DEBUG is not set
# CONFIG_HID_TRACE_LEVEL_VERBOSE is not set
CONFIG_HID_INITIAL_TRACE_LEVEL=2
# CONFIG_APPL_TRACE_LEVEL_NONE is not set
# CONFIG_APPL_TRACE_LEVEL_ERROR is not set
CONFIG_APPL_TRACE_LEVEL_WARNING=y
# CONFIG_APPL_TRACE_LEVEL_API is not set
# CONFIG_APPL_TRACE_LEVEL_EVENT is not set
# CONFIG_APPL_TRACE_LEVEL_DEBUG is not set
# CONFIG_APPL_TRACE_LEVEL_VERBOSE is not set
CONFIG_APPL_INITIAL_TRACE_LEVEL=2
# CONFIG_GATT_TRACE_LEVEL_NONE is not set
# CONFIG_GATT_TRACE_LEVEL_ERROR is not set
CONFIG_GATT_TRACE_LEVEL_WARNING=y
# CONFIG_GATT_TRACE_LEVEL_API is not set
# CONFIG_GATT_TRACE_LEVEL_EVENT is not set
# CONFIG_GATT_TRACE_LEVEL_DEBUG is not set
# CONFIG_GATT_TRACE_LEVEL_VERBOSE is not set
CONFIG_GATT_INITIAL_TRACE_LEVEL=2
# CONFIG_SMP_TRACE_LEVEL_NONE is not set
# CONFIG_SMP_TRACE_LEVEL_ERROR is not set
CONFIG_SMP_TRACE_LEVEL_WARNING=y
# CONFIG_SMP_TRACE_LEVEL_API is not set
# CONFIG_SMP_TRACE_LEVEL_EVENT is not set
# CONFIG_SMP_TRACE_LEVEL_DEBUG is not set
# CONFIG_SMP_TRACE_LEVEL_VERBOSE is not set
CONFIG_SMP_INITIAL_TRACE_LEVEL=2
# CONFIG_BTIF_TRACE_LEVEL_NONE is not set
# CONFIG_BTIF_TRACE_LEVEL_ERROR is not set
CONFIG_BTIF_TRACE_LEVEL_WARNING=y
# CONFIG_BTIF_TRACE_LEVEL_API is not set
# CONFIG_BTIF_TRACE_LEVEL_EVENT is not set
# CONFIG_BTIF_TRACE_LEVEL_DEBUG is not set
# CONFIG_BTIF_TRACE_LEVEL_VERBOSE is not set
CONFIG_BTIF_INITIAL_TRACE_LEVEL=2
# CONFIG_BTC_TRACE_LEVEL_NONE is not set
# CONFIG_BTC_TRACE_LEVEL_ERROR is not set
CONFIG_BTC_TRACE_LEVEL_WARNING=y
# CONFIG_BTC_TRACE_LEVEL_API is not set
# CONFIG_BTC_TRACE_LEVEL_EVENT is not set
# CONFIG_BTC_TRACE_LEVEL_DEBUG is not set
# CONFIG_BTC_TRACE_LEVEL_VERBOSE is not set
CONFIG_BTC_INITIAL_TRACE_LEVEL=2
# CONFIG_OSI_TRACE_LEVEL_NONE is not set
# CONFIG_OSI_TRACE_LEVEL_ERROR is not set
CONFIG_OSI_TRACE_LEVEL_WARNING=y
# CONFIG_OSI_TRACE_LEVEL_API is not set
# CONFIG_OSI_TRACE_LEVEL_EVENT is not set
# CONFIG_OSI_TRACE_LEVEL_DEBUG is not set
# CONFIG_OSI_TRACE_LEVEL_VERBOSE is not set
CONFIG_OSI_INITIAL_TRACE_LEVEL=2
# CONFIG_BLUFI_TRACE_LEVEL_NONE is not set
# CONFIG_BLUFI_TRACE_LEVEL_ERROR is not set
CONFIG_BLUFI_TRACE_LEVEL_WARNING=y
# CONFIG_BLUFI_TRACE_LEVEL_API is not set
# CONFIG_BLUFI_TRACE_LEVEL_EVENT is not set
# CONFIG_BLUFI_TRACE_LEVEL_DEBUG is not set
# CONFIG_BLUFI_TRACE_LEVEL_VERBOSE is not set
CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2
# CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set
CONFIG_SMP_ENABLE=y
# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set
CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30
CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y
# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set
# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3
CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0
CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0
CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y
# CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set
CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y
CONFIG_BLE_SCAN_DUPLICATE=y
CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y
# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set
# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set
CONFIG_SCAN_DUPLICATE_TYPE=0
CONFIG_DUPLICATE_SCAN_CACHE_SIZE=100
# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set
CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y
CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y
CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100
CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
CONFIG_ADC2_DISABLE_DAC=y
CONFIG_SW_COEXIST_ENABLE=y
CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y
CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y
# CONFIG_MCPWM_ISR_IN_IRAM is not set
# CONFIG_EVENT_LOOP_PROFILING is not set
CONFIG_POST_EVENTS_FROM_ISR=y
CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
CONFIG_GDBSTUB_SUPPORT_TASKS=y
CONFIG_GDBSTUB_MAX_TASKS=32
CONFIG_OTA_ALLOW_HTTP=y
# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set
CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y
CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4
# CONFIG_ESP_SYSTEM_PD_FLASH is not set
CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000
CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000
CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y
CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y
# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set
# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set
# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set
# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set
# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set
# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set
CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024
# CONFIG_ESP32_XTAL_FREQ_26 is not set
CONFIG_ESP32_XTAL_FREQ_40=y
# CONFIG_ESP32_XTAL_FREQ_AUTO is not set
CONFIG_ESP32_XTAL_FREQ=40
CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y
# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set
CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20
CONFIG_ESP32_PHY_MAX_TX_POWER=20
# CONFIG_REDUCE_PHY_TX_POWER is not set
# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set
# CONFIG_SPIRAM_SUPPORT is not set
# CONFIG_ESP32_SPIRAM_SUPPORT is not set
# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set
# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240
CONFIG_TRACEMEM_RESERVE_DRAM=0x0
# CONFIG_ESP32_PANIC_PRINT_HALT is not set
CONFIG_ESP32_PANIC_PRINT_REBOOT=y
# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set
# CONFIG_ESP32_PANIC_GDBSTUB is not set
CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
CONFIG_MAIN_TASK_STACK_SIZE=3584
CONFIG_CONSOLE_UART_DEFAULT=y
# CONFIG_CONSOLE_UART_CUSTOM is not set
# CONFIG_CONSOLE_UART_NONE is not set
# CONFIG_ESP_CONSOLE_UART_NONE is not set
CONFIG_CONSOLE_UART=y
CONFIG_CONSOLE_UART_NUM=0
CONFIG_CONSOLE_UART_BAUDRATE=115200
CONFIG_INT_WDT=y
CONFIG_INT_WDT_TIMEOUT_MS=300
CONFIG_INT_WDT_CHECK_CPU1=y
CONFIG_TASK_WDT=y
CONFIG_ESP_TASK_WDT=y
# CONFIG_TASK_WDT_PANIC is not set
CONFIG_TASK_WDT_TIMEOUT_S=5
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y
# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set
CONFIG_ESP32_DEBUG_OCDAWARE=y
CONFIG_BROWNOUT_DET=y
CONFIG_ESP32_BROWNOUT_DET=y
CONFIG_BROWNOUT_DET_LVL_SEL_0=y
CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y
# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set
# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set
# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set
CONFIG_BROWNOUT_DET_LVL=0
CONFIG_ESP32_BROWNOUT_DET_LVL=0
# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set
CONFIG_IPC_TASK_STACK_SIZE=1024
CONFIG_TIMER_TASK_STACK_SIZE=3584
CONFIG_ESP32_WIFI_ENABLED=y
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
CONFIG_ESP32_WIFI_TX_BA_WIN=6
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
CONFIG_ESP32_WIFI_RX_BA_WIN=6
CONFIG_ESP32_WIFI_RX_BA_WIN=6
CONFIG_ESP32_WIFI_NVS_ENABLED=y
CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y
# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set
CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
# CONFIG_ESP32_WIFI_IRAM_OPT is not set
# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y
CONFIG_WPA_MBEDTLS_CRYPTO=y
CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
# CONFIG_WPA_WAPI_PSK is not set
# CONFIG_WPA_11KV_SUPPORT is not set
# CONFIG_WPA_MBO_SUPPORT is not set
# CONFIG_WPA_DPP_SUPPORT is not set
# CONFIG_WPA_11R_SUPPORT is not set
# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set
# CONFIG_WPA_WPS_STRICT is not set
# CONFIG_WPA_DEBUG_PRINT is not set
# CONFIG_WPA_TESTING_OPTIONS is not set
# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set
# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set
CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y
CONFIG_TIMER_TASK_PRIORITY=1
CONFIG_TIMER_TASK_STACK_DEPTH=2048
CONFIG_TIMER_QUEUE_LENGTH=10
# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set
# CONFIG_HAL_ASSERTION_SILIENT is not set
# CONFIG_L2_TO_L3_COPY is not set
CONFIG_ESP_GRATUITOUS_ARP=y
CONFIG_GARP_TMR_INTERVAL=60
CONFIG_TCPIP_RECVMBOX_SIZE=32
CONFIG_TCP_MAXRTX=12
CONFIG_TCP_SYNMAXRTX=12
CONFIG_TCP_MSS=1440
CONFIG_TCP_MSL=60000
CONFIG_TCP_SND_BUF_DEFAULT=5744
CONFIG_TCP_WND_DEFAULT=5744
CONFIG_TCP_RECVMBOX_SIZE=6
CONFIG_TCP_QUEUE_OOSEQ=y
CONFIG_TCP_OVERSIZE_MSS=y
# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
# CONFIG_TCP_OVERSIZE_DISABLE is not set
CONFIG_UDP_RECVMBOX_SIZE=6
CONFIG_TCPIP_TASK_STACK_SIZE=3072
CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set
CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
# CONFIG_PPP_SUPPORT is not set
CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y
CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y
# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set
# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set
# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set
# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set
CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
CONFIG_ESP32_PTHREAD_STACK_MIN=768
CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y
# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set
# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set
CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
# CONFIG_ESP32_ULP_COPROC_ENABLED is not set
CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
CONFIG_SUPPORT_TERMIOS=y
CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
# End of deprecated options
idf_component_register(SRCS "wifi_service.c" "softap.c" "http_server.c"
INCLUDE_DIRS "."
PRIV_REQUIRES nvs_flash esp_netif esp_wifi esp_http_server app_update driver
EMBED_FILES "html/favicon.ico" "html/index.html" "html/ota.html")
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="utf-8">
<title>ESP32</title>
</head>
<body>
<h2>ESP32</h2>
<hr><br>
<button id="ota" type="button" onclick="ota()">ESP32 固件升级</button>
<script>
function ota() {
window.location.href = "http://192.168.4.1/ota";
}
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="utf-8">
<title>固件升级</title>
</head>
<body>
<h2>固件升级</h2>
<hr>
<a href="http://192.168.4.1" style="font-size: smaller;">[返回首页]</a><br><br>
<!-- 选择文本按钮 -->
<label for="newFile">加载文件:</label>
<input id="newFile" type="file" accept=".bin" onchange="checkFile()">
<br><br>
<!-- 上传操作 -->
<label for="otaStart">执行操作:</label>
<button id="otaStart" type="button" onclick="otaStart()">开始升级</button>
<button id="reload" type="button" onclick="reload()">刷新界面</button>
<br><br>
<!-- 进度显示 -->
<label for="otaPercent">进度显示:</label>
<input id="otaPercent" type="text" value="0.00%" style="width: 75px;border: none;font-size:large;">
<progress id="otaProgress" value="0" max="100"></progress>
<br><br><hr>
<p id="viewName"></p>
<p id="viewSize"></p>
<p id="viewFlashStart"></p>
<p id="viewFlashResult"></p>
<script>
function reload() {
location.reload();
}
function getFileSize(size) {
if (!size) return "";
var num = 1024.00;
if (size < num) {
return size + "B";
}
if (size < Math.pow(num, 2)) {
return (size / num).toFixed(2) + "KB";
}
if (size < Math.pow(num, 3)) {
return (size / Math.pow(num, 2)).toFixed(2) + "MB";
}
}
function checkFile() {
var newFile = document.getElementById("newFile").files[0];
var newFileName = newFile.name;
var newFileSize = newFile.size;
if (newFileSize > 2 * 1024 * 1024) {
alert('所选文件超出最大限制\n点击确定后将自动刷新页面');
location.reload();
}
else {
document.getElementById("viewName").innerHTML = "文件名称:" + newFileName;
document.getElementById("viewSize").innerHTML = "文件大小:" + getFileSize(newFileSize);
}
}
function otaStart() {
var res = document.getElementById("newFile").files[0];
if (typeof (res) == "undefined") {
alert('未选择文件!');
}
else {
var filepath = document.getElementById("newFile").files[0].name;
var upload_path = "/ota/" + filepath;
document.getElementById("viewFlashStart").innerHTML = "锁定页面,请务必保持WiFi在线,正在上传...";
document.getElementById("newFile").disabled = true;
document.getElementById("otaStart").disabled = true;
var file = document.getElementById("newFile").files[0];
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (xhttp.readyState == 4) {
if (xhttp.status == 200) {
document.getElementById("viewFlashResult").innerHTML = "上传成功!";
} else if (xhttp.status == 0) {
document.getElementById("viewFlashResult").innerHTML = "服务器断开!<br><br>请检查服务器是否在线,刷新页面后重新上传...";
} else {
alert(xhttp.status + " Error!\n" + xhttp.responseText);
}
}
};
let progressBar = document.getElementById("otaProgress");
xhttp.upload.onprogress = function (e) {
var percentage = (event.loaded * 100.00) / (event.total * 1.00);
percentage = percentage.toFixed(2);
progressBar.value = Math.round(percentage);
document.getElementById("otaPercent").value = percentage + "%";
}
xhttp.open("POST", upload_path, true);
xhttp.send(file);
}
}
</script>
</body>
</html>
\ No newline at end of file
#include <string.h>
#include <esp_log.h>
#include <nvs_flash.h>
#include <sys/param.h>
#include <sys/stat.h>
#include "esp_netif.h"
#include <esp_wifi.h>
#include <esp_system.h>
#include "nvs_flash.h"
#include "esp_ota_ops.h"
#include "http_server.h"
static const char *TAG = "http_server";
char buf[MAX_OTA_BUFF]; // 接收服务端传来的文件缓存, 必须使用全局变量, 否则会触发看门狗复位, 原理未知
httpd_handle_t http_server = NULL;
static esp_err_t http_resp_index_html(httpd_req_t *req)
{
extern const unsigned char index_html_start[] asm("_binary_index_html_start");
extern const unsigned char index_html_end[] asm("_binary_index_html_end");
const size_t index_html_size = (index_html_end - index_html_start);
ESP_LOGI(TAG, "---- DevKit首页");
httpd_resp_set_type(req, "text/HTML");
httpd_resp_send(req, (const char *)index_html_start, index_html_size);
return ESP_OK;
}
static esp_err_t http_resp_favicon_ico(httpd_req_t *req)
{
extern const unsigned char favicon_ico_start[] asm("_binary_favicon_ico_start");
extern const unsigned char favicon_ico_end[] asm("_binary_favicon_ico_end");
const size_t favicon_ico_size = (favicon_ico_end - favicon_ico_start);
ESP_LOGI(TAG, "---- 下载网站图标");
httpd_resp_set_type(req, "image/x-icon");
httpd_resp_send(req, (const char *)favicon_ico_start, favicon_ico_size);
return ESP_OK;
}
static esp_err_t http_resp_ota_html(httpd_req_t *req)
{
extern const unsigned char ota_html_start[] asm("_binary_ota_html_start");
extern const unsigned char ota_html_end[] asm("_binary_ota_html_end");
const size_t ota_html_size = (ota_html_end - ota_html_start);
ESP_LOGI(TAG, "---- 进入固件升级页面");
httpd_resp_set_type(req, "text/HTML");
httpd_resp_send(req, (const char *)ota_html_start, ota_html_size);
return ESP_OK;
}
static esp_err_t http_resp_handler(httpd_req_t *req)
{
const char *uri_get = req->uri;
ESP_LOGI(TAG, "---- request uri: 192.168.4.1%s", req->uri);
if (strcmp(uri_get, "/") == 0)
{
return http_resp_index_html(req);
}
else if (strcmp(uri_get, "/favicon.ico") == 0)
{
return http_resp_favicon_ico(req);
}
else if (strcmp(uri_get, "/ota") == 0)
{
return http_resp_ota_html(req);
}
else
{
ESP_LOGI(TAG, "---- 未知链接, 不处理, 直接回到起始页");
return http_resp_index_html(req);
}
return ESP_OK;
}
static esp_err_t http_ota_handler(httpd_req_t *req)
{
int ret = 0;
int recv_block = 0;
int remaining = req->content_len;
int total = remaining;
double percent = 0.0;
ESP_LOGI(TAG, "---- 应用程序更新, 需接收数据长度(bytes): %d", remaining);
esp_ota_handle_t app_update_handle = 0;
const esp_partition_t *app_update_partition = esp_ota_get_next_update_partition(NULL);
esp_err_t err = esp_ota_begin(app_update_partition, OTA_WITH_SEQUENTIAL_WRITES, &app_update_handle);
while (remaining > 0)
{
/* Read the data for the request */
if ((ret = httpd_req_recv(req, buf, MIN(remaining, sizeof(buf)))) <= 0)
{
if (ret == HTTPD_SOCK_ERR_TIMEOUT)
{
/* Retry receiving if timeout occurred */
continue;
}
return ESP_FAIL;
}
err = esp_ota_write(app_update_handle, buf, ret);
if (err != ESP_OK)
{
ESP_LOGI(TAG, "---- 写入数据失败, 错误信息:%s", esp_err_to_name(err));
}
else
{
remaining -= ret;
recv_block++;
if ((recv_block % 20) == 0)
{
percent = 100.0 - (double)(remaining * 100) / (double)total;
ESP_LOGI(TAG, "---- 写入OTA升级数据: %.2f%%", percent);
}
}
// 增加20ms延时, 解决CPU0看门狗超时的问题
vTaskDelay(pdMS_TO_TICKS(20));
}
err = esp_ota_end(app_update_handle);
if (err == ESP_OK)
{
esp_err_t err = esp_ota_set_boot_partition(app_update_partition);
if (err != ESP_OK)
{
ESP_LOGI(TAG, "---- 设备启动分区失败, 错误信息:%s", esp_err_to_name(err));
}
else
{
ESP_LOGI(TAG, "---- 应用程序更新完成, 3秒后自动重启.");
httpd_resp_send_chunk(req, NULL, 0);
// httpd_resp_sendstr(req, "<p>应用程序更新完成,3秒后自动重启.</p>");
vTaskDelay(pdMS_TO_TICKS(3000));
esp_restart();
}
}
// End response
ESP_LOGI(TAG, "---- 数据接收完成, OTA失败, 1秒后自动重启.");
// httpd_resp_sendstr(req, "<p>数据上传完成,但应用更新不成功,请重试.</p>");
httpd_resp_send_chunk(req, NULL, 0);
vTaskDelay(pdMS_TO_TICKS(1000));
esp_restart();
return ESP_OK;
}
httpd_handle_t start_webserver(void)
{
httpd_handle_t server = NULL;
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.lru_purge_enable = true;
config.uri_match_fn = httpd_uri_match_wildcard;
// Start the httpd server
ESP_LOGI(TAG, "---- 服务器端口号: '%d'", config.server_port);
if (httpd_start(&server, &config) == ESP_OK)
{
// Set URI handlers
ESP_LOGI(TAG, "---- 注册URI管理程序");
// 注册客户端请求行为
httpd_uri_t http_resp = {
.uri = "/*",
.method = HTTP_GET,
.handler = http_resp_handler,
.user_ctx = NULL};
httpd_register_uri_handler(server, &http_resp);
// 注册客户端OTA行为
httpd_uri_t http_ota = {
.uri = "/ota/*",
.method = HTTP_POST,
.handler = http_ota_handler,
.user_ctx = NULL};
httpd_register_uri_handler(server, &http_ota);
return server;
}
ESP_LOGI(TAG, "---- 服务器启动时发生错误.");
return NULL;
}
esp_err_t stop_webserver(httpd_handle_t server)
{
return httpd_stop(server);
}
void connect_handler(void *arg)
{
httpd_handle_t *server = (httpd_handle_t *)arg;
if (*server == NULL)
{
ESP_LOGI(TAG, "---- 开启HTTP服务器");
*server = start_webserver();
}
}
void disconnect_handler(void *arg)
{
httpd_handle_t *server = (httpd_handle_t *)arg;
if (*server)
{
ESP_LOGI(TAG, "---- 关闭HTTP服务器");
if (stop_webserver(*server) == ESP_OK)
{
*server = NULL;
}
else
{
ESP_LOGE(TAG, "Failed to stop http server");
}
}
}
httpd_handle_t http_service(void)
{
static httpd_handle_t server = NULL;
// 首次启动http_server
server = start_webserver();
if (server)
{
ESP_LOGI(TAG, "---- HTTP服务器开启成功.");
}
else
{
ESP_LOGI(TAG, "---- HTTP服务器开启失败.");
}
return server;
}
#ifndef _GTTP_SERVER_H_
#define _GTTP_SERVER_H_
#include "esp_event.h"
#include "esp_http_server.h"
#define HTTP_SERVER_STOP 0
#define HTTP_SERVER_INIT 1
#define HTTP_SERVER_START 2
#define HTTP_SERVER_DEINIT 3
#define MAX_OTA_BUFF 4096u
extern char buf[MAX_OTA_BUFF];
extern httpd_handle_t http_server;
/**
* 根据某种状态自动开关webserver的监听处理,
* 任意STA连接AP,自动开启webserver.
*/
void connect_handler(void *arg);
/**
* 根据某种状态自动开关webserver的监听处理,
* 没有任何STA连接AP,自动关闭webserver,
*/
void disconnect_handler(void *arg);
/**
* 开启HTTP服务器
* @return httpd_handle_t 结构体
*/
httpd_handle_t http_service(void);
#endif
#include <stdio.h>
#include <string.h>
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_mac.h"
#include "esp_netif.h"
#include "esp_log.h"
#include "softap.h"
#include "wifi_service.h"
static const char *TAG = "softAP";
esp_netif_t *softap_netif = NULL;
wifi_sta_list_t softap_sta_list;
unsigned char softap_sta_connect = STA_CONNECTED_NEVER;
static void softap_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
{
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STACONNECTED)
{
wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *)event_data;
ESP_LOGI(TAG, "---- 设备加入网络, MAC地址 :" MACSTR ", 编号(AID) = %d.", MAC2STR(event->mac), event->aid);
softap_sta_connect = STA_CONNECTED_ONCE;
connect_handler(event_handler_arg);
wifi_service_stop_timer_clear();
}
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_AP_STADISCONNECTED)
{
wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *)event_data;
ESP_LOGI(TAG, "---- 设备退出网络, MAC地址 :" MACSTR ", 编号(AID) = %d.", MAC2STR(event->mac), event->aid);
disconnect_handler(event_handler_arg);
wifi_service_stop_timer_clear();
}
}
void softap_service_start(void)
{
// NVS分区初始化
ESP_LOGI(TAG, "---- nvs分区初始化...");
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// 创建系统事件循环
ESP_LOGI(TAG, "---- 创建系统事件循环...");
ESP_ERROR_CHECK(esp_event_loop_create_default());
// 将WiFi的所有事件作为实例注册进系统事件循环中
ESP_LOGI(TAG, "---- 注册WiFi事件实例...");
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, softap_event_handler, &http_server));
// 初始化网卡相关的底层配置
ESP_LOGI(TAG, "---- 网卡初始化...");
ESP_ERROR_CHECK(esp_netif_init());
// 以默认的方式创建一个ap类型的网卡
ESP_LOGI(TAG, "---- 创建AP类型网卡...");
softap_netif = esp_netif_create_default_wifi_ap();
// 初始化WiFi底层配置
ESP_LOGI(TAG, "---- WiFi初始化...");
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
// 将WiFi设置成AP模式
ESP_LOGI(TAG, "---- 配置WiFi为AP模式...");
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
// 创建AP配置
ESP_LOGI(TAG, "---- 创建AP配置...");
wifi_config_t wifi_config = {
.ap = {
.ssid = ESP_WIFI_SSID,
.ssid_len = strlen(ESP_WIFI_SSID),
.password = ESP_WIFI_PASSWD,
.max_connection = 1,
.authmode = WIFI_AUTH_WPA_WPA2_PSK}};
// 获取当前AP的MAC地址
unsigned char softap_mac[6];
esp_wifi_get_mac(WIFI_IF_AP, softap_mac);
// 将MAC地址后两个字节转为字符串
char softap_temp[5];
sprintf(softap_temp, "%02X%02X", softap_mac[4], softap_mac[5]);
// 将MAC地址拼接到 ESP_WIFI_SSID 后面
char softap_ssid[32] = ESP_WIFI_SSID;
strcat(softap_ssid, softap_temp);
// 重新配置 ssid 和 ssid_len
memcpy(wifi_config.ap.ssid, softap_ssid, sizeof(softap_ssid));
wifi_config.ap.ssid_len = strlen(softap_ssid);
// 配置AP的属性
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));
// 开启WiFi
ESP_LOGI(TAG, "---- 开启WiFi, 名称 : %s 密码 : %s", wifi_config.ap.ssid, wifi_config.ap.password);
ESP_ERROR_CHECK(esp_wifi_start());
// 首次开启http_server
ESP_LOGI(TAG, "---- 首次开启HTTP服务器...");
http_server = http_service();
// 启动服务关闭计时器
ESP_LOGI(TAG, "---- 启动服务关闭计时器...");
wifi_service_stop_timer_clear();
}
void softap_service_stop(void)
{
// 关闭http_server
ESP_LOGI(TAG, "---- 关闭HTTP服务器...");
disconnect_handler(&http_server);
// 关闭WiFi
ESP_LOGI(TAG, "---- 关闭WiFi...");
ESP_ERROR_CHECK(esp_wifi_stop());
// WiFi反初始化
ESP_LOGI(TAG, "---- WiFi反初始化...");
ESP_ERROR_CHECK(esp_wifi_deinit());
// 销毁网卡实例
ESP_LOGI(TAG, "---- 销毁网卡实例...");
esp_netif_destroy_default_wifi(softap_netif);
// 网卡反初始化 - 官方未实现的功能
// ESP_LOGI(TAG, "---- 网卡反初始化...");
// ESP_ERROR_CHECK(esp_netif_deinit());
// 注销WiFi事件实例
ESP_LOGI(TAG, "---- 注销WiFi事件实例...");
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, softap_event_handler));
// 删除系统事件循环
ESP_LOGI(TAG, "---- 删除系统事件循环...");
ESP_ERROR_CHECK(esp_event_loop_delete_default());
// NVS分区反初始化
ESP_LOGI(TAG, "---- NVS分区反初始化...");
ESP_ERROR_CHECK(nvs_flash_deinit());
ESP_LOGI(TAG, "---- WiFi服务已关闭, 重置WiFi参数");
wifi_service_init();
}
#ifndef _SOFTAP_H_
#define _SOFTAP_H_
#include "esp_wifi.h"
#include "http_server.h"
#define SOFTAP_STOP 0
#define SOFTAP_INIT 1
#define SOFTAP_START 2
#define SOFTAP_DEINIT 3
#define STA_CONNECTED_NEVER 0
#define STA_CONNECTED_ONCE 1
#define ESP_WIFI_SSID "ESP32S3_AP_"
#define ESP_WIFI_PASSWD "12345677"
extern wifi_sta_list_t softap_sta_list;
extern unsigned char softap_sta_connect;
/**
* 开启 WiFi 服务
*/
void softap_service_start(void);
/**
* 关闭 WiFi 服务
*/
void softap_service_stop(void);
#endif
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "esp_wifi.h"
#include "wifi_service.h"
static const char *TAG = "wifi_service";
/*****************************************************
* 首次启动HTTP服务器后, 如果一直没有STA设备加入
* 就不能触发STA disconnect事件,也就不会自动关闭HTTP服务器
* 所以需要额外判断这种情况, 当30秒关闭的定时器触发2次后直接关闭
******************************************************/
static unsigned char http_server_stop_counter = 0;
static unsigned char softap_service_stop_flag = 0;
static unsigned short wifi_service_start_timer = 0;
static unsigned short wifi_service_stop_timer = 0;
wifi_service_t wifi_service_info;
void wifi_service_init(void)
{
wifi_service_stop_timer = 0;
softap_service_stop_flag = 0;
http_server_stop_counter = 0;
wifi_service_info.status = WIFI_SERVICE_STOP;
wifi_service_info.softap_status = SOFTAP_STOP;
wifi_service_info.http_server_status = HTTP_SERVER_STOP;
wifi_service_info.ota_partition = 0;
}
void wifi_service_timer(void)
{
if (wifi_service_info.status == WIFI_SERVICE_STOP)
{
if (wifi_service_start_timer < 60)
{
++wifi_service_start_timer;
}
// 上电5秒自动开启WiFi服务
if (wifi_service_start_timer == 50)
{
wifi_service_info.status = WIFI_SERVICE_INIT;
}
}
if (wifi_service_info.status == WIFI_SERVICE_START)
{
if (wifi_service_stop_timer < 300)
{
++wifi_service_stop_timer;
}
// 每30秒尝试关闭WiFi服务
if (wifi_service_stop_timer == 300)
{
wifi_service_info.status = WIFI_SERVICE_DEINIT;
}
}
}
void wifi_service_stop_timer_clear(void)
{
wifi_service_stop_timer = 0;
}
void wifi_service(void)
{
if (wifi_service_info.status == WIFI_SERVICE_INIT) // 收到指令: WiFi服务初始化
{
wifi_service_info.status = WIFI_SERVICE_START;
ESP_LOGI(TAG, "---- 关闭CAN总线, 卸载LIN driver, 开启WiFi服务...");
softap_service_start();
}
else
{
if (wifi_service_info.status == WIFI_SERVICE_DEINIT) // 收到指令: WiFi服务反初始化, 先读取当前连接的STA数量
{
esp_err_t ret = esp_wifi_ap_get_sta_list(&softap_sta_list);
if (ret == ESP_OK)
{
if (softap_sta_list.num == 0) // 当前没有STA连接
{
if (softap_sta_connect == STA_CONNECTED_NEVER) // 从未有STA接入过
{
if (http_server_stop_counter == 1)
{
softap_service_stop_flag = 1;
}
else
{
ESP_LOGI(TAG, "首次启动HTTP服务器, 1分钟内不会关闭WiFi");
++http_server_stop_counter; // 服务器开启状态且没有设备接入过, 延后30秒再关闭
}
}
else
{
softap_service_stop_flag = 1; // 关闭WiFi服务
}
}
else
{
ESP_LOGI(TAG, "---- 有STA设备在线, 拒绝关闭WiFi");
}
}
else
{
ESP_LOGI(TAG, "---- 读取当前连接的STA数量失败, 打印错误信息");
esp_err_to_name(ret);
}
if (softap_service_stop_flag == 1)
{
wifi_service_info.status = WIFI_SERVICE_STOP;
ESP_LOGI(TAG, "---- 关闭WiFi服务, 开启CAN总线, 重装LIN driver...");
softap_service_stop();
}
else
{
wifi_service_info.status = WIFI_SERVICE_START;
wifi_service_stop_timer = 0; // 重置HTTP服务器关闭的定时器
}
}
}
}
#ifndef _WIFI_SERVICE_H_
#define _WIFI_SERVICE_H_
#include "softap.h"
#define WIFI_SERVICE_STOP 0
#define WIFI_SERVICE_INIT 1
#define WIFI_SERVICE_START 2
#define WIFI_SERVICE_DEINIT 3
typedef struct
{
unsigned char status;
unsigned char softap_status; // 暂时用不上 2024.05.08
unsigned char http_server_status; // 暂时用不上 2024.05.08
unsigned char ota_partition; // 暂时用不上 2024.05.08
} wifi_service_t;
extern wifi_service_t wifi_service_info;
/**
* 初始化 WiFi 服务状态
*/
void wifi_service_init(void);
/**
* WiFi 服务计时器
*/
void wifi_service_timer(void);
/**
* WiFi 服务自动关闭计时器的重置函数
*/
void wifi_service_stop_timer_clear(void);
/**
* WiFi 服务启停控制
*/
void wifi_service(void);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment