7 Commits

Author SHA1 Message Date
gustice de9ff6f807 refactor repo 2025-11-10 15:34:07 +01:00
gustice f064794499 refactoring message 2025-11-10 10:43:13 +01:00
gustice 598f1262d7 proj: refinement 2025-11-09 19:04:54 +01:00
gustice 889523f0c8 temp 2025-10-30 17:38:36 +01:00
gustice 8f0dbd4cbd proj: switching to Linux 2025-07-06 11:00:34 +02:00
gustice 9ebbedb04a refactor: Heavy refactoring to modern code style 2025-04-08 23:50:09 +02:00
gustice 04a8904cbe refactor/bringup: Bringup full project
moving SPIT-App parts to main app
LiveShowDemoProject added
Debugging motor movements
2025-04-08 23:49:05 +02:00
54 changed files with 3184 additions and 2124 deletions
+1
View File
@@ -1 +1,2 @@
build*
.build*
+30
View File
@@ -0,0 +1,30 @@
[
{
"name": "GCC 14.3.0 x86_64-linux-gnu",
"compilers": {
"C": "/usr/bin/gcc-14",
"CXX": "/usr/bin/g++-14"
},
"isTrusted": true
},
{
"name": "Host GCC",
"description": "GCC 15.2.0 x86_64-linux-gnu",
"compilers": {
"C": "/usr/bin/gcc",
"CXX": "/usr/bin/g++"
},
"cmakeSettings": {
"TgtEnv": "Host"
},
"isTrusted": true
},
{
"name": "Esp32 Tests",
"environmentSetupScript": "/home/gustice/esp/v5.4.1/esp-idf/export.sh",
"cmakeSettings": {
"TgtEnv": "Target"
},
"isTrusted": true
}
]
+33
View File
@@ -10,6 +10,39 @@
"type": "espidf",
"name": "Launch",
"request": "launch"
},
{
"name": "C/C++: g++.exe debug selected file",
"type": "cppdbg",
"request": "launch",
// "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"program": "${workspaceFolder}/test/unitOnHost/build/watchFace/watchFaceTest.exe",
// "program": "${workspaceFolder}/core/test/unitOnHost/build/devHal/devHalTest.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"existing": false,
// "preLaunchTask": "C/C++: g++.exe build active file",
"detail": "preLaunchTask: C/C++: g++.exe build active file",
"taskDetail": "compiler: C:\\msys64\\ucrt64\\bin\\g++.exe",
"taskStatus": "Detected Task"
}
]
}
+20
View File
@@ -17,4 +17,24 @@
"C_Cpp.autoAddFileAssociations": false,
"project.deviceIp": "172.16.17.56",
"sonarlint.pathToCompileCommands": "${workspaceFolder}\\build\\compile_commands.json",
"idf.port": "/dev/ttyACM0",
"cmake.showSystemKits": false,
"cmake.defaultVariants": {
"buildType": {
"default": "debug",
"description": "The build type.",
"choices": {
"debug": {
"short": "Debug",
"long": "Disable optimizations - include debug information.",
"buildType": "Debug"
},
"release": {
"short": "Release",
"long": "Optimize for speed - exclude debug information.",
"buildType": "Release"
},
}
}
}
}
+13 -5
View File
@@ -1,9 +1,17 @@
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS
if(TgtEnv STREQUAL "Host")
message("Using Host-Branch")
add_subdirectory("test/unitOnHost")
elseif(TgtEnv STREQUAL "Target")
# add_subdirectory("test/unitOnTarget")
add_subdirectory("core/test/unitOnTarget")
else()
message("Using ESP-Branch")
set(EXTRA_COMPONENT_DIRS
"core/components"
"core/managed_components"
)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(X_WatchController_FW)
)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(X_WatchController_FW)
endif()
+6 -5
View File
@@ -15,10 +15,11 @@
#define SPITOBJECT_H
#include "SPITType.h"
#include "SPIT_Message.h"
#include "SpitRepo.hpp"
#include "spit_message.hpp"
#include "spit_repo.hpp"
using namespace std;
using namespace spit;
class SPITObjectListener;
@@ -138,9 +139,9 @@ class SPITObject {
bool setDelay(long long p_Delay);
bool setDuration(long long p_Duration);
bool setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject);
void fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObject);
void fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject);
bool setMessageOP(Message::ReportObject *p_ReportSPITObject);
void fillMessageOP(Message::ReportObject &p_ReportSPITObject);
void fillMessageOP(Message::RemoveObject &p_RemoveSPITObject);
};
#endif /* SPITOBJECT_H */
+6 -5
View File
@@ -15,10 +15,11 @@
#define SPITTYPE_H
#include "SPITSocket.h"
#include "SPIT_Message.h"
#include "SpitRepo.hpp"
#include "spit_message.hpp"
#include "spit_repo.hpp"
using namespace std;
using namespace spit;
class SPITTypeListener;
@@ -96,9 +97,9 @@ class SPITType {
*/
bool setActionAssigned(bool p_ActionAssigned);
bool setMessageOP(SPIT_Message::ReportSPITType &reportSpitType);
void fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) const;
void fillMessageOP(SPIT_Message::RemoveSPITType &smRemoveSpitType) const;
bool setMessageOP(Message::ReportType &reportSpitType);
void fillMessageOP(Message::ReportType &smReportSpitType) const;
void fillMessageOP(Message::RemoveType &smRemoveSpitType) const;
};
#endif /* SPITTYPE_H */
+25 -24
View File
@@ -19,12 +19,13 @@
#include "SPITPlayer.h"
#include "SPITSocket.h"
#include "SPITType.h"
#include "SPIT_Message.h"
#include "SpitRepo.hpp"
#include "spit_message.hpp"
#include "spit_repo.hpp"
#include <memory>
#include <vector>
using namespace std;
using namespace spit;
class SPIT_Client : I_SAD_Client {
@@ -112,7 +113,7 @@ class SPIT_Client : I_SAD_Client {
uint8_t m_MessageNumber_Send{1};
int m_MessageNumber_Received{-1}; // set to -1 because the first received message will set the number (1..255)
vector<unique_ptr<SPIT_Message>> m_OvertakingSPIT_Messages;
vector<unique_ptr<Message>> m_OvertakingSPIT_Messages;
// Server's info filled by parseConnectAnswer
string m_ServerID{};
@@ -173,7 +174,7 @@ class SPIT_Client : I_SAD_Client {
// Reconnect to the server when connection is lost see eventConnectionStatus and eventServerDetected
bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by m_ServerID
public:
int sendSPITMessage(SPIT_Message::OPPart & spitMessageOPPart);
int sendSPITMessage(Message::OPPart & spitMessageOPPart);
//--------------- ServerAutoDetection SAD ---------------
public:
@@ -209,13 +210,13 @@ class SPIT_Client : I_SAD_Client {
private:
void disconnectInternal(Connection p_Cause);
void resetMessageNumberReceived();
void parseSPIT_Message(unique_ptr<SPIT_Message> p_SPITMessage);
void checkParseSPIT_Message(unique_ptr<SPIT_Message> p_SPITMessage);
void addOvertakingSPIT_Message(unique_ptr<SPIT_Message> p_SPIT_Message);
void parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswer);
void parseDisconnect(SPIT_Message::Disconnect &p_Disconnect);
void parseWatchdog(SPIT_Message::Watchdog &p_Watchdog);
void parseWatchdogAnswer(SPIT_Message::WatchdogAnswer &p_WatchdogAnswer);
void parseSPIT_Message(unique_ptr<Message> p_SPITMessage);
void checkParseSPIT_Message(unique_ptr<Message> p_SPITMessage);
void addOvertakingSPIT_Message(unique_ptr<Message> p_SPIT_Message);
void parseConnectAnswer(Message::ConnectAnswer &p_ConnectAnswer);
void parseDisconnect(Message::Disconnect &p_Disconnect);
void parseWatchdog(Message::Watchdog &p_Watchdog);
void parseWatchdogAnswer(Message::WatchdogAnswer &p_WatchdogAnswer);
public:
/** Used internally*/
@@ -224,8 +225,8 @@ class SPIT_Client : I_SAD_Client {
void eventWatchdogLost();
//--------------- SPIT Project ---------------
private:
void parseReportSPITProject(SPIT_Message::ReportSPITProject &p_ReportSPITProject);
void parseCloseSPITProject(SPIT_Message::CloseSPITProject &p_CloseSPITProject);
void parseReportSPITProject(Message::ReportProject &p_ReportSPITProject);
void parseCloseSPITProject(Message::CloseProject &p_CloseSPITProject);
public:
/** Returns the SPITServer's project ID - may be the same as the project's name*/
@@ -236,9 +237,9 @@ class SPIT_Client : I_SAD_Client {
int getServerFramesPerSecond();
private:
void parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer &p_RequestProjectTransfer);
void parseStartProjectTransfer(SPIT_Message::StartProjectTransfer &p_StartProjectTransfer);
void parseEndProjectTransfer(SPIT_Message::EndProjectTransfer &p_EndProjectTransfer);
void parseRequestProjectTransfer(Message::RequestProjectTransfer &p_RequestProjectTransfer);
void parseStartProjectTransfer(Message::StartProjectTransfer &p_StartProjectTransfer);
void parseEndProjectTransfer(Message::EndProjectTransfer &p_EndProjectTransfer);
public:
static void sendProject(SPIT_Client *p_PtrSPIT_Client);
@@ -274,8 +275,8 @@ class SPIT_Client : I_SAD_Client {
private:
// receive SPITTypes
void parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPITType);
void parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPITType);
void parseReportSPITType(Message::ReportType &p_ReportSPITType);
void parseRemoveSPITType(Message::RemoveType &p_RemoveSPITType);
int sendSPITTypeInternal(SPITType &p_SPITType);
public:
@@ -297,8 +298,8 @@ class SPIT_Client : I_SAD_Client {
public:
//--------------- SPIT Objects ---------------
private:
void parseReportSPITObject(SPIT_Message::ReportSPITObject &p_ReportSPITObject);
void parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject);
void parseReportSPITObject(Message::ReportObject &p_ReportSPITObject);
void parseRemoveSPITObject(Message::RemoveObject &p_RemoveSPITObject);
int sendSPITObjectInternal(SPITObject *ptrSPITObject);
public:
@@ -320,10 +321,10 @@ class SPIT_Client : I_SAD_Client {
public:
//--------------- Play SPIT Objects ---------------
private:
void parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStart);
void parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITObject);
void parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd);
void parseReportPlayStatus(SPIT_Message::ReportPlayStatus &p_ReportPlayStatus);
void parsePlaySPITStart(Message::PlayStart &p_PlaySPITStart);
void parsePlaySPITObject(Message::PlayObject &p_PlaySPITObject);
void parsePlaySPITEnd(Message::PlayEnd &p_PlaySPITEnd);
void parseReportPlayStatus(Message::ReportPlayStatus &p_ReportPlayStatus);
public:
//--------- Remote ----------
@@ -5,14 +5,12 @@
*/
/*
* File: SPIT_Message.h
* File: Message.h
* Author: Hagi
*
* Created on 3. April 2019, 08:51
*/
#ifndef SPIT_MESSAGE_H
#define SPIT_MESSAGE_H
#pragma once
#include <cstdlib>
#include <memory>
@@ -23,7 +21,9 @@ using namespace std;
static const string SPITID = "#spit#";
class SPIT_Message {
namespace spit {
class Message {
//----------- Header -----------
public:
class Header {
@@ -33,85 +33,86 @@ class SPIT_Message {
Header();
private:
string m_SPITID;
int m_SPITVersion{SPITVERSION};
unsigned char m_MessageNumber{};
int m_BytesCount{BYTESLENGTH};
string m_ServerID{};
string m_ClientID{};
int m_OPFlag{-1};
int m_ParseOffset{};
string mID;
int mVersion{SPITVERSION};
unsigned char mMessageNumber{};
int mBytesCount{BYTESLENGTH};
string mServerID{};
string mClientID{};
int mOpFlag{-1};
int mParseOffset{};
public:
string getSPITID() const { return m_SPITID; }
int getSPITVersion() const { return m_SPITVersion; }
unsigned char getMessageNumber() const { return m_MessageNumber; }
int getBytesCount() const { return m_BytesCount; }
string getServerID() const { return m_ServerID; }
string getClientID() const { return m_ClientID; }
int getOPFlag() const { return m_OPFlag; }
string getSPITID() const { return mID; }
int getSPITVersion() const { return mVersion; }
unsigned char getMessageNumber() const { return mMessageNumber; }
int getBytesCount() const { return mBytesCount; }
string getServerID() const { return mServerID; }
string getClientID() const { return mClientID; }
int getType() const { return mOpFlag; }
// Receive
bool parse(const std::vector<char> &message);
// Send
Header(int p_SPITVersion, int p_OPFlag);
void setMessageNumber(unsigned char p_MessageNumber) { m_MessageNumber = p_MessageNumber; }
void setServerID(string p_ID) { m_ServerID = p_ID; }
void setClientID(string p_ID) { m_ClientID = p_ID; }
void setOPFlag(int p_OPFlag) { m_OPFlag = p_OPFlag; }
Header(int p_SPITVersion, int pOpFlag);
void setMessageNumber(unsigned char p_MessageNumber) { mMessageNumber = p_MessageNumber; }
void setServerID(string p_ID) { mServerID = p_ID; }
void setClientID(string p_ID) { mClientID = p_ID; }
void setOPFlag(int pOpFlag) { mOpFlag = pOpFlag; }
bool fillBytes(std::vector<char> &message);
};
//----------- OPPart -----------
public:
class OPPart {
// Members
protected:
unique_ptr<Header> m_Header{};
int m_ParseOffset{};
int m_BytesCount;
unique_ptr<Header> mHeader{};
int mParseOffset{};
int mBytesCount;
public:
virtual ~OPPart();
Header *getHeader() const { return m_Header.get(); }
int getBytesCount() const { return m_BytesCount; }
Header *getHeader() const { return mHeader.get(); }
int getBytesCount() const { return mBytesCount; }
void setServerInfoInHeader(string clientId, string serverId) {
if (!m_Header)
if (!mHeader) {
return;
m_Header->setClientID(clientId);
m_Header->setServerID(serverId);
}
mHeader->setClientID(clientId);
mHeader->setServerID(serverId);
}
void setMessageNumber(uint8_t no) {
if (!m_Header)
if (!mHeader) {
return;
m_Header->setMessageNumber(no);
}
mHeader->setMessageNumber(no);
}
const string getServerID() const {
if (!m_Header) {
if (!mHeader) {
return "";
}
return m_Header->getServerID();
return mHeader->getServerID();
}
const string getClientID() const {
if (!m_Header) {
if (!mHeader) {
return "";
}
return m_Header->getClientID();
return mHeader->getClientID();
}
int getOPFlag() const {
if (!m_Header) {
int getType() const {
if (!mHeader) {
return -1;
}
return m_Header->getOPFlag();
return mHeader->getType();
}
// Receive
OPPart(unique_ptr<Header> p_Header, int p_OPFlag, int size);
OPPart(unique_ptr<Header> p_Header, int pOpFlag, int size);
void setHeader(int opFlag);
virtual bool parse(const std::vector<char> &message) = 0;
@@ -120,7 +121,7 @@ class SPIT_Message {
virtual bool fillBytes(std::vector<char> &message) = 0;
};
//----------- SPIT_Message -----------
//----------- Message -----------
public:
static constexpr int SPITVERSION = 1;
@@ -140,7 +141,7 @@ class SPIT_Message {
static constexpr char VALUEFLAG_INCREASE = 0x01; // increase the value
static constexpr char VALUEFLAG_DECREASE = 0x02; // decrease the value
SPIT_Message() = default;
Message() = default;
// Members
private:
@@ -148,18 +149,18 @@ class SPIT_Message {
// Receive
public:
SPIT_Message(std::vector<char> message);
Message(std::vector<char> message);
const Header *getHeader() const { return m_OPPart->getHeader(); }
int getOPFlag() const {
int getType() const {
if (!m_OPPart || !m_OPPart->getHeader()) {
return -1;
}
return m_OPPart->getHeader()->getOPFlag();
return m_OPPart->getHeader()->getType();
}
const OPPart *getOPPart() const { return m_OPPart.get(); }
template<typename T>
T &getOPPartAs() const { return *reinterpret_cast<T *>(m_OPPart.get()); }
T &getAs() const { return *reinterpret_cast<T *>(m_OPPart.get()); }
private:
bool parse(std::vector<char> message);
@@ -294,9 +295,9 @@ class SPIT_Message {
//------------------------------ SPITProject ----------------------------------
//----------- ReportSPITProject -----------
//----------- ReportProject -----------
class ReportSPITProject : public OPPart {
class ReportProject : public OPPart {
public:
static constexpr int OPFLAG = 11;
static constexpr int BYTESLENGTH = 113;
@@ -308,22 +309,22 @@ class SPIT_Message {
// Receive
public:
ReportSPITProject(const ReportSPITProject &orig);
ReportSPITProject(unique_ptr<Header> p_Header);
ReportProject(const ReportProject &orig);
ReportProject(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getProjectID() const { return m_ProjectID; }
const string getProjectName() const { return m_ProjectName; }
int getFramesPerSecond() const { return m_FramesPerSecond; }
// Send
ReportSPITProject(string p_ProjectID, string p_ProjectName);
ReportProject(string p_ProjectID, string p_ProjectName);
void setFramesPerSecond(const int p_FramesPerSecond) { m_FramesPerSecond = p_FramesPerSecond; }
bool fillBytes(std::vector<char> &message);
};
//----------- CloseSPITProject -----------
//----------- CloseProject -----------
class CloseSPITProject : public OPPart {
class CloseProject : public OPPart {
public:
static constexpr int OPFLAG = 13;
static constexpr int BYTESLENGTH = 45;
@@ -332,15 +333,15 @@ class SPIT_Message {
string m_ProjectID{};
public:
CloseSPITProject(const CloseSPITProject &orig);
CloseProject(const CloseProject &orig);
// Receive
CloseSPITProject(unique_ptr<Header> p_Header);
CloseProject(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getProjectID() const {
return m_ProjectID;
}
// Send
CloseSPITProject(string projectID);
CloseProject(string projectID);
bool fillBytes(std::vector<char> &message);
};
@@ -392,8 +393,8 @@ class SPIT_Message {
//---------------------------- SPIT_Types ----------------------------------
//----------- ReportSPITType -----------
class ReportSPITType : public OPPart {
//----------- ReportType -----------
class ReportType : public OPPart {
public:
static constexpr int OPFLAG = 21;
static constexpr int BYTESLENGTH = 168;
@@ -406,13 +407,13 @@ class SPIT_Message {
bool m_ServerProjectIndepended{};
string m_SPITTypeGroupName{};
string m_SPITTypeName{};
long long m_Delay{};
long long m_Duration{};
uint64_t m_Delay{};
uint64_t m_Duration{};
public:
ReportSPITType(const ReportSPITType &orig);
ReportType(const ReportType &orig);
// Receive
ReportSPITType(unique_ptr<Header> p_Header);
ReportType(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
bool getConfirmed() const { return m_Confirmed; }
@@ -422,11 +423,11 @@ class SPIT_Message {
bool getServerProjectIndepended() const { return m_ServerProjectIndepended; }
const string getGroupName() const { return m_SPITTypeGroupName; }
const string getName() const { return m_SPITTypeName; }
long long getDelay() const { return m_Delay; }
long long getDuration() const { return m_Duration; }
uint64_t getDelay() const { return m_Delay; }
uint64_t getDuration() const { return m_Duration; }
// Send
ReportSPITType();
ReportType();
void setConfirmed(bool p_Confirmed) { m_Confirmed = p_Confirmed; }
void setID(string p_ID) { m_SPITTypeID = p_ID; }
void setFixed(bool p_Fixed) { m_Fixed = p_Fixed; }
@@ -434,15 +435,15 @@ class SPIT_Message {
void setServerProjectIndepended(bool p_ProjectIndpended) { m_ServerProjectIndepended = p_ProjectIndpended; }
void setGroupName(string p_GroupName) { m_SPITTypeGroupName = p_GroupName; }
void setName(string p_Name) { m_SPITTypeName = p_Name; }
void setDelay(long long p_Delay) { m_Delay = p_Delay; }
void setDuration(long long p_Duration) { m_Duration = p_Duration; }
void setDelay(uint64_t p_Delay) { m_Delay = p_Delay; }
void setDuration(uint64_t p_Duration) { m_Duration = p_Duration; }
bool fillBytes(std::vector<char> &message);
};
//----------- RemoveSPITType -----------
//----------- RemoveType -----------
class RemoveSPITType : public OPPart {
class RemoveType : public OPPart {
public:
static constexpr int OPFLAG = 23;
static constexpr int BYTESLENGTH = 45;
@@ -451,24 +452,24 @@ class SPIT_Message {
string m_SPITTypeID{};
public:
RemoveSPITType(const RemoveSPITType &orig);
RemoveType(const RemoveType &orig);
// Receive
RemoveSPITType(unique_ptr<Header> p_Header);
RemoveType(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getID() const { return m_SPITTypeID; }
// Send
RemoveSPITType();
RemoveType();
void setID(string p_ID) { m_SPITTypeID = p_ID; }
bool fillBytes(std::vector<char> &message);
};
//---------------------------- SPITObjects ----------------------------------
//----------- ReportSPITObject -----------
//----------- ReportObject -----------
class ReportSPITObject : public OPPart {
class ReportObject : public OPPart {
public:
static constexpr int OPFLAG = 31;
static constexpr int BYTESLENGTH = 339;
@@ -481,22 +482,22 @@ class SPIT_Message {
string m_SPITObjectName{};
string m_SPITTypeID{};
string m_ServerParams{};
long long m_FrameStart{};
long long m_FrameLength{};
long long m_FrameFadeInLength{};
long long m_FrameFadeOutLength{};
uint64_t m_FrameStart{};
uint64_t m_FrameLength{};
uint64_t m_FrameFadeInLength{};
uint64_t m_FrameFadeOutLength{};
int m_ValueFactor{};
char m_ValueUse{VALUEUSE_DISCARD};
int m_Track{};
string m_Remark{};
long long m_Delay{};
long long m_Duration{};
uint64_t m_Delay{};
uint64_t m_Duration{};
bool m_ActionAssigned{};
public:
ReportSPITObject(const ReportSPITObject &orig);
ReportObject(const ReportObject &orig);
// Receive
ReportSPITObject(unique_ptr<Header> p_Header);
ReportObject(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
bool getConfirmed() const { return m_Confirmed; }
@@ -506,20 +507,20 @@ class SPIT_Message {
const string getName() const { return m_SPITObjectName; }
const string getSPITTypeID() const { return m_SPITTypeID; }
const string getServerParams() const { return m_ServerParams; }
long long getFrameStart() const { return m_FrameStart; }
long long getFrameLength() const { return m_FrameLength; }
long long getFrameFadeInLength() const { return m_FrameFadeInLength; }
long long getFrameFadeOutLength() const { return m_FrameFadeOutLength; }
uint64_t getFrameStart() const { return m_FrameStart; }
uint64_t getFrameLength() const { return m_FrameLength; }
uint64_t getFrameFadeInLength() const { return m_FrameFadeInLength; }
uint64_t getFrameFadeOutLength() const { return m_FrameFadeOutLength; }
int getValueFactor() const { return m_ValueFactor; }
char getValueUse() const { return m_ValueUse; }
int getTrack() const { return m_Track; }
const string getRemark() const { return m_Remark; }
long long getDelay() const { return m_Delay; }
long long getDuration() const { return m_Duration; }
uint64_t getDelay() const { return m_Delay; }
uint64_t getDuration() const { return m_Duration; }
bool getActionAssigned() const { return m_ActionAssigned; }
// Send
public:
ReportSPITObject();
ReportObject();
void setConfirmed(bool p_Confirmed) { m_Confirmed = p_Confirmed; };
void setID(string p_ID) { m_SPITObjectID = p_ID; };
@@ -528,23 +529,23 @@ class SPIT_Message {
void setName(string p_Name) { m_SPITObjectName = p_Name; };
void setSPITTypeID(string p_ID) { m_SPITTypeID = p_ID; };
void setServerParams(string p_Parameters) { m_ServerParams = p_Parameters; };
void setFrameStart(long long p_StartTime) { m_FrameStart = p_StartTime; };
void setFrameLength(long long p_Length) { m_FrameLength = p_Length; };
void setFrameFadeInLength(long long p_FadeInTime) { m_FrameFadeInLength = p_FadeInTime; };
void setFrameFadeOutLength(long long p_FadeOutTime) { m_FrameFadeOutLength = p_FadeOutTime; };
void setFrameStart(uint64_t p_StartTime) { m_FrameStart = p_StartTime; };
void setFrameLength(uint64_t p_Length) { m_FrameLength = p_Length; };
void setFrameFadeInLength(uint64_t p_FadeInTime) { m_FrameFadeInLength = p_FadeInTime; };
void setFrameFadeOutLength(uint64_t p_FadeOutTime) { m_FrameFadeOutLength = p_FadeOutTime; };
void setValueFactor(int p_Volume) { m_ValueFactor = p_Volume; };
void setValueUse(char p_ValueUse) { m_ValueUse = p_ValueUse; };
void setTrack(int p_Track) { m_Track = p_Track; };
void setRemark(string p_Description) { m_Remark = p_Description; };
void setDelay(long long p_Delay);
void setDuration(long long p_Duration);
void setDelay(uint64_t p_Delay);
void setDuration(uint64_t p_Duration);
void setActionAssigned(bool p_ActionAssigned) { m_ActionAssigned = p_ActionAssigned; }
bool fillBytes(std::vector<char> &message);
};
//----------- RemoveSPITObject -----------
//----------- RemoveObject -----------
class RemoveSPITObject : public OPPart {
class RemoveObject : public OPPart {
public:
static constexpr int OPFLAG = 33;
static constexpr int BYTESLENGTH = 45;
@@ -553,24 +554,24 @@ class SPIT_Message {
string m_SPITObjectID{};
public:
RemoveSPITObject(const RemoveSPITObject &orig);
RemoveObject(const RemoveObject &orig);
// Receive
RemoveSPITObject(unique_ptr<Header> p_Header);
RemoveObject(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getID() const { return m_SPITObjectID; }
// Send
public:
RemoveSPITObject();
RemoveObject();
void setID(string p_ID) { m_SPITObjectID = p_ID; }
bool fillBytes(std::vector<char> &message);
};
//---------------------------- SPITPlayer ----------------------------------
//----------- PlaySPITStart -----------
//----------- PlayStart -----------
class PlaySPITStart : public OPPart {
class PlayStart : public OPPart {
public:
static constexpr int OPFLAG = 37;
static constexpr int BYTESLENGTH = 119;
@@ -580,30 +581,30 @@ class SPIT_Message {
string m_PlayerName{};
char m_PlayerType{};
bool m_PlayerIsRunning{};
long long m_Time; // Frames
uint64_t m_Time; // Frames
public:
PlaySPITStart(const PlaySPITStart &orig);
PlayStart(const PlayStart &orig);
// Receive
PlaySPITStart(unique_ptr<Header> p_Header);
PlayStart(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getPlayerID() const { return m_PlayerID; }
const string getPlayerName() const { return m_PlayerName; }
char getPlayerType() const { return m_PlayerType; }
bool getPlayerIsRunning() const { return m_PlayerIsRunning; }
long long getTime() const { return m_Time; }
uint64_t getTime() const { return m_Time; }
// Send
PlaySPITStart(string p_PlayerID, string p_PlayerName, char p_PlayerType);
PlayStart(string p_PlayerID, string p_PlayerName, char p_PlayerType);
void setPlayerIsRunning(bool p_IsPlaying) { m_PlayerIsRunning = p_IsPlaying; }
void setTime(long long p_Time) { m_Time = p_Time; }
void setTime(uint64_t p_Time) { m_Time = p_Time; }
bool fillBytes(std::vector<char> &message);
};
//----------- PlaySPITObject -----------
//----------- PlayObject -----------
class PlaySPITObject : public OPPart {
class PlayObject : public OPPart {
public:
static constexpr int OPFLAG = 38;
static constexpr int BYTESLENGTH = 100;
@@ -611,37 +612,37 @@ class SPIT_Message {
private:
string m_PlayerID{};
string m_SPITObjectID{};
long long m_FrameInsideObject{}; // Frames
uint64_t m_FrameInsideObject{}; // Frames
bool m_PlayPrePosition{};
int m_Value{};
char m_ValueFlag{VALUEFLAG_DIRECT};
public:
PlaySPITObject(const PlaySPITObject &orig);
PlayObject(const PlayObject &orig);
// Receive
PlaySPITObject(unique_ptr<Header> p_Header);
PlayObject(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getPlayerID() const { return m_PlayerID; }
const string getSPITObjectID() const { return m_SPITObjectID; }
long long getFrameInsideObject() const { return m_FrameInsideObject; }
uint64_t getFrameInsideObject() const { return m_FrameInsideObject; }
bool getPlayPrePosition() const { return m_PlayPrePosition; }
int getValue() const { return m_Value; }
char getValueFlag() const { return m_ValueFlag; }
// Send
PlaySPITObject();
PlayObject();
void setPlayerID(string p_PlayerID) { m_PlayerID = p_PlayerID; }
void setID(string p_ID) { m_SPITObjectID = p_ID; }
void setFrameInsideObject(long long p_TimeInside) { m_FrameInsideObject = p_TimeInside; }
void setFrameInsideObject(uint64_t p_TimeInside) { m_FrameInsideObject = p_TimeInside; }
void setPlayPrePosition(bool p_PlayOldPosition) { m_PlayPrePosition = p_PlayOldPosition; }
void setValue(int p_Value) { m_Value = p_Value; }
void setValueFlag(char p_ValueFlag) { m_ValueFlag = p_ValueFlag; }
bool fillBytes(std::vector<char> &message);
};
//----------- PlaySPITEnd -----------
class PlaySPITEnd : public OPPart {
//----------- PlayEnd -----------
class PlayEnd : public OPPart {
public:
static constexpr int OPFLAG = 39;
static constexpr int BYTESLENGTH = 45;
@@ -650,19 +651,18 @@ class SPIT_Message {
string m_PlayerID{};
public:
PlaySPITEnd(const PlaySPITEnd &orig);
PlayEnd(const PlayEnd &orig);
// Receive
PlaySPITEnd(unique_ptr<Header> p_Header);
PlayEnd(unique_ptr<Header> p_Header);
bool parse(const std::vector<char> &message);
const string getPlayerID() const { return m_PlayerID; }
// Send
PlaySPITEnd(string p_PlayerID);
PlayEnd(string p_PlayerID);
bool fillBytes(std::vector<char> &message);
};
//----------- ReportPlayStatus -----------
class ReportPlayStatus : public OPPart {
public:
static constexpr int OPFLAG = 40;
@@ -670,7 +670,7 @@ class SPIT_Message {
private:
string m_SPITObjectID{};
long long m_FrameInsideObject{}; // Frames
uint64_t m_FrameInsideObject{};
int m_Value{};
public:
@@ -680,13 +680,13 @@ class SPIT_Message {
bool parse(const std::vector<char> &message);
const string getID() const { return m_SPITObjectID; }
long long getFrameInsideObject() const { return m_FrameInsideObject; }
uint64_t getFrameInsideObject() const { return m_FrameInsideObject; }
int getValue() const { return m_Value; }
// Send
ReportPlayStatus();
void setID(string p_ID);
void setFrameInsideObject(long long p_TimeInside);
void setFrameInsideObject(uint64_t p_TimeInside);
void setValue(int p_Value);
bool fillBytes(std::vector<char> &message);
};
@@ -695,11 +695,11 @@ class SPIT_Message {
public:
static bool isSystemLittleEndian();
static optional<int> getInt(const std::vector<char> &message, int &offset);
static optional<long long> getLong(const std::vector<char> &message, int &offset);
static optional<uint64_t> getLong(const std::vector<char> &message, int &offset);
static optional<bool> getBoolean(const std::vector<char> &message, int &offset);
static optional<char> getByte(const std::vector<char> &message, int &offset);
static int setInt(int value, std::vector<char> &message, int offset);
static int setLong(long long value, std::vector<char> &message, int offset);
static int setLong(uint64_t value, std::vector<char> &message, int offset);
static int setBoolean(bool value, std::vector<char> &message, int offset);
static int setByte(int value, std::vector<char> &message, int offset);
@@ -725,4 +725,5 @@ class SPIT_Message {
*/
static int setString(string p_String, std::vector<char> &message, int p_Offset, int p_Length);
};
#endif /* SPIT_MESSAGE_H */
}
@@ -3,6 +3,10 @@
#include <string>
#include <unordered_map>
using namespace std;
namespace spit {
template <typename T>
class SpitRepo {
public:
@@ -17,26 +21,10 @@ class SpitRepo {
}
return i->second.get();
}
const T &getEntryRef(const string &id) {
return *mEntries.at(id);
}
T *getEntry(int index) {
if (index >= 0 && index < mEntries.size()) {
return next(mEntries.begin(), index)->second.get();
}
return nullptr;
}
const T &getEntryRef(int index) {
if (index >= 0 && index < mEntries.size()) {
auto i = next(mEntries.begin(), index);
return *i->second;
} else {
throw "SPITObject index out of range";
}
}
void addEntry(unique_ptr<T> entry) {
mEntries[entry->getID()] = move(entry);
}
@@ -51,7 +39,7 @@ class SpitRepo {
mEntries.erase(i);
return true;
}
int getEntryCount() {
int getSize() {
return mEntries.size();
}
@@ -66,3 +54,5 @@ class SpitRepo {
private:
unordered_map<string, unique_ptr<T>> mEntries;
};
}
+3 -3
View File
@@ -59,7 +59,7 @@ SPITObject::SPITObject(string p_ID) {
m_ID = p_ID;
}
bool SPITObject::setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject) {
bool SPITObject::setMessageOP(Message::ReportObject *p_ReportSPITObject) {
bool boolChangeAllowed;
bool boolChanged = false;
@@ -193,7 +193,7 @@ bool SPITObject::setMessageOP(SPIT_Message::ReportSPITObject *p_ReportSPITObject
return boolChanged;
}
void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObject) {
void SPITObject::fillMessageOP(Message::ReportObject &p_ReportSPITObject) {
p_ReportSPITObject.setActionAssigned(getActionAssigned()); // Action can be assigned to type or to this object
p_ReportSPITObject.setConfirmed(m_Confirmed);
p_ReportSPITObject.setDelay(m_Delay);
@@ -213,7 +213,7 @@ void SPITObject::fillMessageOP(SPIT_Message::ReportSPITObject &p_ReportSPITObjec
p_ReportSPITObject.setValueFactor(m_ValueFactor);
p_ReportSPITObject.setValueUse(m_ValueUse);
}
void SPITObject::fillMessageOP(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) {
void SPITObject::fillMessageOP(Message::RemoveObject &p_RemoveSPITObject) {
p_RemoveSPITObject.setID(m_ID);
}
+5 -3
View File
@@ -15,6 +15,8 @@
#include "SPITType.h"
#include "esp_log.h"
using namespace spit;
static const char *TAG = "SPIT";
void SPITType::eventProjectClosed(SpitRepo<SPITType> &repo, SpitRepo<SPITType> &remoteRepo) {
@@ -144,7 +146,7 @@ bool SPITType::setActionAssigned(bool p_ActionAssigned) {
* @return true = the SPITType is changed
* false = the SPITType is NOT changed, because it is not allowed to change.
*/
bool SPITType::setMessageOP(SPIT_Message::ReportSPITType &reportSpitType) {
bool SPITType::setMessageOP(Message::ReportType &reportSpitType) {
bool boolChangeAllowed;
bool boolChanged = false;
@@ -221,7 +223,7 @@ bool SPITType::setMessageOP(SPIT_Message::ReportSPITType &reportSpitType) {
return boolChanged;
}
void SPITType::fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) const {
void SPITType::fillMessageOP(Message::ReportType &smReportSpitType) const {
smReportSpitType.setConfirmed(m_Confirmed);
smReportSpitType.setDelay(m_DefaultDelay);
smReportSpitType.setDuration(m_DefaultDuration);
@@ -232,6 +234,6 @@ void SPITType::fillMessageOP(SPIT_Message::ReportSPITType &smReportSpitType) con
smReportSpitType.setServerProjectIndepended(m_ServerProjectIndepended);
smReportSpitType.setServerRemote(m_ServerRemote);
}
void SPITType::fillMessageOP(SPIT_Message::RemoveSPITType &smRemoveSpitType) const {
void SPITType::fillMessageOP(Message::RemoveType &smRemoveSpitType) const {
smRemoveSpitType.setID(m_ID);
}
+118 -129
View File
@@ -5,7 +5,7 @@
*/
/*
* SPIt_Client handles the SPIT_Message transfer and
* SPIt_Client handles the Message transfer and
* fires eventxxx functions to the SPIT_ClientInterface (implemented by the user app).
*
* File: SPIT_Client.cpp
@@ -39,9 +39,9 @@ SPIT_Client::~SPIT_Client() {
void SPIT_Client::clientProjectClose() {
if (m_ConnectionStatus == Connection::Ok) {
ESP_LOGI(TAG, " ... tidy up ressources");
SPIT_Message::CloseSPITProject closeSPITProject(m_ProjName);
Message::CloseProject closeSPITProject(m_ProjName);
if (sendSPITMessage(closeSPITProject) < 0) {
ESP_LOGD(TAG, "SPIT_Client could not send Client's ReportSPITProject");
ESP_LOGD(TAG, "SPIT_Client could not send Client's ReportProject");
}
}
}
@@ -52,15 +52,15 @@ void SPIT_Client::clientProjectLoaded() {
SPITObject::setConfirmedFalse(mSpitObjects);
if (m_ConnectionStatus == Connection::Ok) {
// send ReportSPITProject to the server
SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName);
// send ReportProject to the server
Message::ReportProject reportSPITProject(m_ProjName, m_ProjName);
reportSPITProject.setFramesPerSecond(0);
if (sendSPITMessage(reportSPITProject) < 0) {
ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportSPITProject");
ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send Client's ReportProject");
}
// send RequestProjectTransfer
SPIT_Message::RequestProjectTransfer sMRequestProjectTransfer;
Message::RequestProjectTransfer sMRequestProjectTransfer;
if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
ESP_LOGD(TAG, "SPIT_CLient::clientProjectLoaded could not send RequestProjectTransfer");
}
@@ -82,13 +82,10 @@ void SPIT_Client::setActionSPITType(string typeId, bool p_ActionAssigned) {
if (spitType->setActionAssigned(p_ActionAssigned)) {
sendSPITTypeInternal(*spitType);
for (int i = 0; i < mSpitObjects.getEntryCount(); i++) {
SPITObject *ptrSPITObject = mSpitObjects.getEntry(i);
if (ptrSPITObject == nullptr)
continue;
if (ptrSPITObject->getSPITTypeID() == spitType->getID()) {
if (ptrSPITObject->setActionAssignedType(p_ActionAssigned) == true) {
sendSPITObjectInternal(ptrSPITObject);
for (auto& [key, value] : mSpitObjects.getRepo()) {
if (value->getSPITTypeID() == spitType->getID()) {
if (value->setActionAssignedType(p_ActionAssigned) == true) {
sendSPITObjectInternal(value.get());
}
}
}
@@ -194,7 +191,7 @@ void SPIT_Client::eventServerChanged(SAD_DetectedServer &server) {
// m_ServerIP = detected.getIP();
// #if defined(DEBUGOUTPUT)
// printf("MySPITApp: connect to %s ", detected.getIP().data());
// ESP_LOGD(TAG, "MySPITApp: connect to %s ", detected.getIP().data());
// #endif
// // Use the m_BoardNumber as login name
// string stringLoginName = "";
@@ -214,7 +211,7 @@ void SPIT_Client::eventServerChanged(SAD_DetectedServer &server) {
// // } //Excample
// }
int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart &opPart) {
int SPIT_Client::sendSPITMessage(Message::OPPart &opPart) {
if (m_MessageNumber_Send == 255)
m_MessageNumber_Send = 1;
else
@@ -222,9 +219,9 @@ int SPIT_Client::sendSPITMessage(SPIT_Message::OPPart &opPart) {
opPart.setMessageNumber(m_MessageNumber_Send);
opPart.setServerInfoInHeader(m_ID, m_ServerID);
int opFlag = opPart.getHeader()->getOPFlag();
int opFlag = opPart.getHeader()->getType();
try {
auto spitMessage = SPIT_Message::createMessage(opPart);
auto spitMessage = Message::createMessage(opPart);
if (spitMessage.empty()) {
return -1;
}
@@ -264,7 +261,7 @@ void SPIT_Client::receiveSPITMessage(SPIT_Client &rM) {
continue;
}
auto vec = vector<char>(buffer, buffer + rdLen);
auto spitMsg = make_unique<SPIT_Message>(vec);
auto spitMsg = make_unique<Message>(vec);
rM.parseSPIT_Message(move(spitMsg));
// rM.checkParseSPIT_Message(move(spitMsg));
}
@@ -275,7 +272,7 @@ void SPIT_Client::resetMessageNumberReceived() {
m_OvertakingSPIT_Messages.clear();
}
void SPIT_Client::checkParseSPIT_Message(unique_ptr<SPIT_Message> p_SPITMessage) {
void SPIT_Client::checkParseSPIT_Message(unique_ptr<Message> p_SPITMessage) {
answerWatchdog();
if (!p_SPITMessage || !p_SPITMessage->getHeader() || p_SPITMessage->getOPPart()) {
ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message");
@@ -330,7 +327,7 @@ void SPIT_Client::checkParseSPIT_Message(unique_ptr<SPIT_Message> p_SPITMessage)
}
}
void SPIT_Client::addOvertakingSPIT_Message(unique_ptr<SPIT_Message> p_SPIT_Message) {
void SPIT_Client::addOvertakingSPIT_Message(unique_ptr<Message> p_SPIT_Message) {
if (!p_SPIT_Message) {
return;
}
@@ -350,69 +347,69 @@ void SPIT_Client::addOvertakingSPIT_Message(unique_ptr<SPIT_Message> p_SPIT_Mess
m_OvertakingSPIT_Messages.push_back(move(p_SPIT_Message));
}
void SPIT_Client::parseSPIT_Message(unique_ptr<SPIT_Message> p_SPITMessage) {
void SPIT_Client::parseSPIT_Message(unique_ptr<Message> p_SPITMessage) {
answerWatchdog();
if (!p_SPITMessage || !p_SPITMessage->getHeader() || !p_SPITMessage->getOPPart()) {
ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message incomplete message");
return;
}
switch (p_SPITMessage->getOPFlag()) {
switch (p_SPITMessage->getType()) {
//----- Connection -----
case SPIT_Message::ConnectAnswer::OPFLAG:
parseConnectAnswer(p_SPITMessage->getOPPartAs<SPIT_Message::ConnectAnswer>());
case Message::ConnectAnswer::OPFLAG:
parseConnectAnswer(p_SPITMessage->getAs<Message::ConnectAnswer>());
break;
case SPIT_Message::Disconnect::OPFLAG:
parseDisconnect(p_SPITMessage->getOPPartAs<SPIT_Message::Disconnect>());
case Message::Disconnect::OPFLAG:
parseDisconnect(p_SPITMessage->getAs<Message::Disconnect>());
break;
case SPIT_Message::ReportSPITProject::OPFLAG:
parseReportSPITProject(p_SPITMessage->getOPPartAs<SPIT_Message::ReportSPITProject>());
case Message::ReportProject::OPFLAG:
parseReportSPITProject(p_SPITMessage->getAs<Message::ReportProject>());
break;
case SPIT_Message::Watchdog::OPFLAG:
parseWatchdog(p_SPITMessage->getOPPartAs<SPIT_Message::Watchdog>());
case Message::Watchdog::OPFLAG:
parseWatchdog(p_SPITMessage->getAs<Message::Watchdog>());
break;
case SPIT_Message::WatchdogAnswer::OPFLAG:
parseWatchdogAnswer(p_SPITMessage->getOPPartAs<SPIT_Message::WatchdogAnswer>());
case Message::WatchdogAnswer::OPFLAG:
parseWatchdogAnswer(p_SPITMessage->getAs<Message::WatchdogAnswer>());
break;
//----- SPIT Project -----
case SPIT_Message::StartProjectTransfer::OPFLAG:
parseStartProjectTransfer(p_SPITMessage->getOPPartAs<SPIT_Message::StartProjectTransfer>());
case Message::StartProjectTransfer::OPFLAG:
parseStartProjectTransfer(p_SPITMessage->getAs<Message::StartProjectTransfer>());
break;
case SPIT_Message::CloseSPITProject::OPFLAG:
parseCloseSPITProject(p_SPITMessage->getOPPartAs<SPIT_Message::CloseSPITProject>());
case Message::CloseProject::OPFLAG:
parseCloseSPITProject(p_SPITMessage->getAs<Message::CloseProject>());
break;
case SPIT_Message::RequestProjectTransfer::OPFLAG:
parseRequestProjectTransfer(p_SPITMessage->getOPPartAs<SPIT_Message::RequestProjectTransfer>());
case Message::RequestProjectTransfer::OPFLAG:
parseRequestProjectTransfer(p_SPITMessage->getAs<Message::RequestProjectTransfer>());
break;
case SPIT_Message::EndProjectTransfer::OPFLAG:
parseEndProjectTransfer(p_SPITMessage->getOPPartAs<SPIT_Message::EndProjectTransfer>());
case Message::EndProjectTransfer::OPFLAG:
parseEndProjectTransfer(p_SPITMessage->getAs<Message::EndProjectTransfer>());
break;
//----- SPIT Types ------
case SPIT_Message::ReportSPITType::OPFLAG:
parseReportSPITType(p_SPITMessage->getOPPartAs<SPIT_Message::ReportSPITType>());
case Message::ReportType::OPFLAG:
parseReportSPITType(p_SPITMessage->getAs<Message::ReportType>());
break;
case SPIT_Message::RemoveSPITType::OPFLAG:
parseRemoveSPITType(p_SPITMessage->getOPPartAs<SPIT_Message::RemoveSPITType>());
case Message::RemoveType::OPFLAG:
parseRemoveSPITType(p_SPITMessage->getAs<Message::RemoveType>());
//----- SPIT Objects ------
break;
case SPIT_Message::ReportSPITObject::OPFLAG:
parseReportSPITObject(p_SPITMessage->getOPPartAs<SPIT_Message::ReportSPITObject>());
case Message::ReportObject::OPFLAG:
parseReportSPITObject(p_SPITMessage->getAs<Message::ReportObject>());
break;
case SPIT_Message::RemoveSPITObject::OPFLAG:
parseRemoveSPITObject(p_SPITMessage->getOPPartAs<SPIT_Message::RemoveSPITObject>());
case Message::RemoveObject::OPFLAG:
parseRemoveSPITObject(p_SPITMessage->getAs<Message::RemoveObject>());
break;
//----- Play SPIT Objects ------
case SPIT_Message::PlaySPITStart::OPFLAG:
parsePlaySPITStart(p_SPITMessage->getOPPartAs<SPIT_Message::PlaySPITStart>());
case Message::PlayStart::OPFLAG:
parsePlaySPITStart(p_SPITMessage->getAs<Message::PlayStart>());
break;
case SPIT_Message::PlaySPITObject::OPFLAG:
parsePlaySPITObject(p_SPITMessage->getOPPartAs<SPIT_Message::PlaySPITObject>());
case Message::PlayObject::OPFLAG:
parsePlaySPITObject(p_SPITMessage->getAs<Message::PlayObject>());
break;
case SPIT_Message::PlaySPITEnd::OPFLAG:
parsePlaySPITEnd(p_SPITMessage->getOPPartAs<SPIT_Message::PlaySPITEnd>());
case Message::PlayEnd::OPFLAG:
parsePlaySPITEnd(p_SPITMessage->getAs<Message::PlayEnd>());
break;
case SPIT_Message::ReportPlayStatus::OPFLAG:
parseReportPlayStatus(p_SPITMessage->getOPPartAs<SPIT_Message::ReportPlayStatus>());
case Message::ReportPlayStatus::OPFLAG:
parseReportPlayStatus(p_SPITMessage->getAs<Message::ReportPlayStatus>());
break;
default:
ESP_LOGD(TAG, "SPIT_Client::parseSPIT_Message: Unknown Message");
@@ -437,7 +434,7 @@ bool SPIT_Client::connect(string p_ServerIP, string p_ServerPort, string p_Clien
m_StopReceiveSPITMessages = true;
return false;
}
SPIT_Message::Connect sMConnect(m_ComputerName, m_Name);
Message::Connect sMConnect(m_ComputerName, m_Name);
sMConnect.setLoginName(p_LoginName);
sMConnect.setLoginPassword(p_LoginPassword);
sMConnect.setServerIP(p_ServerIP);
@@ -483,7 +480,7 @@ void SPIT_Client::disconnectInternal(Connection p_Cause) {
case Connection::Lost:
break;
case Connection::None: {
SPIT_Message::Disconnect sMDisconnect;
Message::Disconnect sMDisconnect;
sendSPITMessage(sMDisconnect);
} break;
case Connection::NoneServer:
@@ -525,7 +522,7 @@ void SPIT_Client::disconnectInternal(Connection p_Cause) {
}
}
void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswer) {
void SPIT_Client::parseConnectAnswer(Message::ConnectAnswer &p_ConnectAnswer) {
if (p_ConnectAnswer.getClientID() != m_ID)
return;
@@ -555,7 +552,7 @@ void SPIT_Client::parseConnectAnswer(SPIT_Message::ConnectAnswer &p_ConnectAnswe
* The SPIT server was closed
* @param p_Disconnect
*/
void SPIT_Client::parseDisconnect(SPIT_Message::Disconnect &p_Disconnect) {
void SPIT_Client::parseDisconnect(Message::Disconnect &p_Disconnect) {
Connection intCauseDisconnect = Connection::NoneServer;
/*
function<void()> o_Callable = bind(&SPIT_Client::disconnectInternal, this, intCauseDisconnect);
@@ -572,9 +569,9 @@ void SPIT_Client::parseDisconnect(SPIT_Message::Disconnect &p_Disconnect) {
* This is used to check if the other side is still present.
* @param p_Watchdog
*/
void SPIT_Client::parseWatchdog(SPIT_Message::Watchdog &p_Watchdog) {
// printf("parse Watchdog \n");
SPIT_Message::WatchdogAnswer o_WatchdogAnswer;
void SPIT_Client::parseWatchdog(Message::Watchdog &p_Watchdog) {
// ESP_LOGD(TAG, "parse Watchdog ");
Message::WatchdogAnswer o_WatchdogAnswer;
sendSPITMessage(o_WatchdogAnswer);
}
/**
@@ -583,12 +580,12 @@ void SPIT_Client::parseWatchdog(SPIT_Message::Watchdog &p_Watchdog) {
* This is used to check if the other side is still present.
* @param p_Watchdog
*/
void SPIT_Client::parseWatchdogAnswer(SPIT_Message::WatchdogAnswer &p_WatchdogAnswer) {
void SPIT_Client::parseWatchdogAnswer(Message::WatchdogAnswer &p_WatchdogAnswer) {
answerWatchdog(); // is also done by parseSPIT_Message
}
void SPIT_Client::sendWatchdog() {
int intResult;
SPIT_Message::Watchdog sMWatchdog;
Message::Watchdog sMWatchdog;
intResult = sendSPITMessage(sMWatchdog);
if (intResult < 0) {
ESP_LOGW("WDT", "Failed to send Watchdog msg");
@@ -603,8 +600,8 @@ void SPIT_Client::eventWatchdogLost() {
}
//----- SPIT Project ------
void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject &p_ReportSPITProject) {
// printf("parse ReportSPITProject \n");
void SPIT_Client::parseReportSPITProject(Message::ReportProject &p_ReportSPITProject) {
ESP_LOGD(TAG, "parse ReportProject");
m_ServerProjectID = p_ReportSPITProject.getProjectID();
m_ServerProjectName = p_ReportSPITProject.getProjectName();
m_ServerFramesPerSecond = p_ReportSPITProject.getFramesPerSecond();
@@ -615,21 +612,21 @@ void SPIT_Client::parseReportSPITProject(SPIT_Message::ReportSPITProject &p_Repo
SPITObject::setConfirmedFalse(mSpitObjects);
// Send RequestProjectTransfer
SPIT_Message::RequestProjectTransfer sMRequestProjectTransfer;
Message::RequestProjectTransfer sMRequestProjectTransfer;
if (sendSPITMessage(sMRequestProjectTransfer) < 0) {
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send RequestProjectTransfer\n");
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send RequestProjectTransfer");
}
// todo Don't send the ReportSPITProject here it should be sended after parseEndProjectTransfer
// Send client's ReportSPITProject
SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName);
// todo Don't send the ReportProject here it should be sended after parseEndProjectTransfer
// Send client's ReportProject
Message::ReportProject reportSPITProject(m_ProjName, m_ProjName);
reportSPITProject.setFramesPerSecond(0);
if (sendSPITMessage(reportSPITProject) < 0) {
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportSPITProject");
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportProject");
}
}
void SPIT_Client::parseCloseSPITProject(SPIT_Message::CloseSPITProject &p_CloseSPITProject) {
// printf("parse CloseSPITProject \n");
void SPIT_Client::parseCloseSPITProject(Message::CloseProject &p_CloseSPITProject) {
ESP_LOGD(TAG, "parse CloseProject");
string stringProjectID;
mCallbacks.onProjectUpdate(ProjUpdate::ServerClosed, p_CloseSPITProject.getProjectID());
SPITPlayer::clearPlayers();
@@ -639,47 +636,38 @@ string SPIT_Client::getServerProjectID() { return m_ServerProjectID; }
string SPIT_Client::getServerProjectName() { return m_ServerProjectName; }
int SPIT_Client::getServerFramesPerSecond() { return m_ServerFramesPerSecond; }
void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer &p_RequestProjectTransfer) {
// printf("parse RequestProjectTransfer \n");
void SPIT_Client::parseRequestProjectTransfer(Message::RequestProjectTransfer &p_RequestProjectTransfer) {
ESP_LOGD(TAG, "parse RequestProjectTransfer");
// StartProjectTransfer
SPIT_Message::StartProjectTransfer sMStartProjectTransfer;
Message::StartProjectTransfer sMStartProjectTransfer;
if (sendSPITMessage(sMStartProjectTransfer) < 0) {
return;
}
// send all listes SPITTypes
int cntT = mSpitTypes.getEntryCount();
for (int i = 0; i < cntT; i++) {
SPITType *ptrSPITType = mSpitTypes.getEntry(i);
if (!ptrSPITType)
break;
sendSPITTypeInternal(*ptrSPITType);
for (const auto& [key, value] : mSpitTypes.getRepo()) {
sendSPITTypeInternal(*value);
fos::Task::delayMs(10);
}
int cntO = mSpitObjects.getEntryCount();
for (int i = 0; i < cntO; i++) {
SPITObject *ptrSPITObject = mSpitObjects.getEntry(i);
if (ptrSPITObject == nullptr)
break;
sendSPITObjectInternal(ptrSPITObject);
for (auto& [key, value] : mSpitObjects.getRepo()) {
sendSPITObjectInternal(value.get());
fos::Task::delayMs(10);
}
// EndProjectTransfer
SPIT_Message::EndProjectTransfer sMEndProjectTransfer;
Message::EndProjectTransfer sMEndProjectTransfer;
sendSPITMessage(sMEndProjectTransfer);
}
/* NEW IMPLEMENTATION
void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransfer* p_RequestProjectTransfer) {
// printf("parse RequestProjectTransfer \n");
void SPIT_Client::parseRequestProjectTransfer(Message::RequestProjectTransfer* p_RequestProjectTransfer) {
// ESP_LOGD(TAG, "parse RequestProjectTransfer");
thread* o_ThreadSend;
o_ThreadSend = new thread(&this->sendProject, this);
// int intResult;
// SPIT_Message::StartProjectTransfer* ptrSMStartProjectTransfer;
// SPIT_Message::EndProjectTransfer* ptrSMEndProjectTransfer;
// Message::StartProjectTransfer* ptrSMStartProjectTransfer;
// Message::EndProjectTransfer* ptrSMEndProjectTransfer;
// int intCount;
// SPITType* ptrSPITType;
// SPITObject* ptrSPITObject;
@@ -689,7 +677,7 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf
// NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(m_SPITClientInterface);
// SPIT_Handler::addRunnable(o_RunnableStart);
// ptrSMStartProjectTransfer = new SPIT_Message::StartProjectTransfer();
// ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
// intResult = sendSPITMessage(ptrSMStartProjectTransfer);
// if (intResult < 0) {
// return;
@@ -723,7 +711,7 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf
// }
// //EndProjectTransfer
// ptrSMEndProjectTransfer = new SPIT_Message::EndProjectTransfer();
// ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
// intResult = sendSPITMessage(ptrSMEndProjectTransfer);
// if (intResult < 0) {
// return;
@@ -738,8 +726,8 @@ void SPIT_Client::parseRequestProjectTransfer(SPIT_Message::RequestProjectTransf
void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) {
// int intResult;
// SPIT_Message::StartProjectTransfer* ptrSMStartProjectTransfer;
// SPIT_Message::EndProjectTransfer* ptrSMEndProjectTransfer;
// Message::StartProjectTransfer* ptrSMStartProjectTransfer;
// Message::EndProjectTransfer* ptrSMEndProjectTransfer;
// int intCount;
// SPITType* ptrSPITType;
// SPITObject* ptrSPITObject;
@@ -748,7 +736,7 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) {
// NotifyStartProjectTransfer_Client* o_RunnableStart = new NotifyStartProjectTransfer_Client(p_PtrSPIT_Client->getSPITClientInterface());
// SPIT_Handler::addRunnable(o_RunnableStart);
// ptrSMStartProjectTransfer = new SPIT_Message::StartProjectTransfer();
// ptrSMStartProjectTransfer = new Message::StartProjectTransfer();
// intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMStartProjectTransfer);
// if (intResult < 0) {
// return;
@@ -785,7 +773,7 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) {
// // }
// //EndProjectTransfer
// ptrSMEndProjectTransfer = new SPIT_Message::EndProjectTransfer();
// ptrSMEndProjectTransfer = new Message::EndProjectTransfer();
// intResult = p_PtrSPIT_Client->sendSPITMessage(ptrSMEndProjectTransfer);
// if (intResult < 0) {
// return;
@@ -797,24 +785,24 @@ void SPIT_Client::sendProject(SPIT_Client *p_PtrSPIT_Client) {
// //Send act
}
void SPIT_Client::parseStartProjectTransfer(SPIT_Message::StartProjectTransfer &p_StartProjectTransfer) {
void SPIT_Client::parseStartProjectTransfer(Message::StartProjectTransfer &p_StartProjectTransfer) {
mCallbacks.onProjectUpdate(ProjUpdate::StartTransfer, m_ServerProjectID);
}
void SPIT_Client::parseEndProjectTransfer(SPIT_Message::EndProjectTransfer &p_EndProjectTransfer) {
void SPIT_Client::parseEndProjectTransfer(Message::EndProjectTransfer &p_EndProjectTransfer) {
SPITObject::clearUnconfirmedSPITObjects(mSpitObjects);
mCallbacks.onProjectUpdate(ProjUpdate::EndTransfer, m_ServerProjectID);
// Send SPIT_Message::ReportSPITProject after the m_SPITClientInterface is notfied of EndProjectTransfer
SPIT_Message::ReportSPITProject reportSPITProject(m_ProjName, m_ProjName);
// Send Message::ReportProject after the m_SPITClientInterface is notfied of EndProjectTransfer
Message::ReportProject reportSPITProject(m_ProjName, m_ProjName);
reportSPITProject.setFramesPerSecond(0);
if (sendSPITMessage(reportSPITProject) < 0) {
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportSPITProject");
ESP_LOGD(TAG, "SPIT_Client::parseReportSPITProject could not send Client's ReportProject");
}
}
//----- SPIT Types ------
void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPITType) {
// printf("parse ReportSPITType ID %s Name %s \n",p_ReportSPITType.getID(), p_ReportSPITType.getName());
void SPIT_Client::parseReportSPITType(Message::ReportType &p_ReportSPITType) {
ESP_LOGD(TAG, "parse ReportType ID %s Name %s",p_ReportSPITType.getID().c_str(), p_ReportSPITType.getName().c_str());
SPITType *ptrSPITType;
bool boolNew = false;
bool boolChanged = false;
@@ -863,8 +851,8 @@ void SPIT_Client::parseReportSPITType(SPIT_Message::ReportSPITType &p_ReportSPIT
}
}
}
void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPITType) {
// printf("parse RemoveSPITType %s\n", p_RemoveSPITType.getID());
void SPIT_Client::parseRemoveSPITType(Message::RemoveType &p_RemoveSPITType) {
ESP_LOGD(TAG, "parse RemoveType %s", p_RemoveSPITType.getID().c_str());
bool boolRemote = false;
string stringSPITTypeID = p_RemoveSPITType.getID();
@@ -903,7 +891,7 @@ void SPIT_Client::parseRemoveSPITType(SPIT_Message::RemoveSPITType &p_RemoveSPIT
* @return 0 = is sended, -1 = is not sended
*/
int SPIT_Client::sendSPITTypeInternal(SPITType &p_SPITType) {
SPIT_Message::ReportSPITType sMReportSPITType;
Message::ReportType sMReportSPITType;
p_SPITType.fillMessageOP(sMReportSPITType);
return sendSPITMessage(sMReportSPITType);
}
@@ -932,6 +920,7 @@ bool SPIT_Client::changeSPITType(SPITType *p_SPITType) {
return true;
}
/**
* If a client has removed a SPITType where id == p_SPITTypeID, it should send it to the server.
* The corresponding SPITType if listet in SPITType will be deleted.
@@ -949,7 +938,7 @@ int SPIT_Client::removeSPITType(string p_SPITTypeID) {
ptrSPITType = mSpitTypes.getEntry(p_SPITTypeID);
if (ptrSPITType == nullptr)
return -1;
SPIT_Message::RemoveSPITType sMRemoveSPITType;
Message::RemoveType sMRemoveSPITType;
ptrSPITType->fillMessageOP(sMRemoveSPITType);
mCallbacks.onSpitType(ObjectEvent::Deleted, false, *ptrSPITType);
mSpitTypes.removeEntry(*ptrSPITType);
@@ -988,15 +977,15 @@ SPITType *SPIT_Client::createSPITType(string p_ID, string p_GroupName, string p_
}
//----- SPIT Objects ------
void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject &p_ReportSPITObject) {
ESP_LOGD(TAG, "parse ReportSPITObject %s\n", p_ReportSPITObject.getID().c_str());
void SPIT_Client::parseReportSPITObject(Message::ReportObject &p_ReportSPITObject) {
ESP_LOGD(TAG, "parse ReportObject %s", p_ReportSPITObject.getID().c_str());
SPITObject *ptrSPITObject;
SPITType *ptrSPITType;
bool boolNew = false;
bool boolRemote = false;
bool boolChanged = false;
{
ESP_LOGD(TAG, "parseReportSPITObject %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str());
ESP_LOGD(TAG, "parse ReportObject %s / %s", p_ReportSPITObject.getID().c_str(), p_ReportSPITObject.getName().c_str());
if (p_ReportSPITObject.getServerRemote() == false) {
boolRemote = false;
ptrSPITObject = mSpitObjects.getEntry(p_ReportSPITObject.getID());
@@ -1068,8 +1057,8 @@ void SPIT_Client::parseReportSPITObject(SPIT_Message::ReportSPITObject &p_Report
}
}
}
void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_RemoveSPITObject) {
// printf("parse RemoveSPITObject %s\n", p_RemoveSPITObject.getID());
void SPIT_Client::parseRemoveSPITObject(Message::RemoveObject &p_RemoveSPITObject) {
ESP_LOGD(TAG, "parse RemoveObject %s", p_RemoveSPITObject.getID().c_str());
SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_RemoveSPITObject.getID());
if (ptrSPITObject != nullptr) {
SPITType *ptrSPITType = mRemoteSpitTypes.getEntry(ptrSPITObject->getSPITTypeID());
@@ -1086,7 +1075,7 @@ void SPIT_Client::parseRemoveSPITObject(SPIT_Message::RemoveSPITObject &p_Remove
int SPIT_Client::sendSPITObjectInternal(SPITObject *ptrSPITObject) {
if (ptrSPITObject == nullptr)
return -1;
SPIT_Message::ReportSPITObject sMReportSPITObject;
Message::ReportObject sMReportSPITObject;
ptrSPITObject->fillMessageOP(sMReportSPITObject);
return sendSPITMessage(sMReportSPITObject);
@@ -1150,7 +1139,7 @@ int SPIT_Client::removeSPITObject(string p_SPITObjectID) {
SPITType *ptrSPITType;
SPITObject *ptrSPITObject;
{
SPIT_Message::RemoveSPITObject sMRemoveSPITObject;
Message::RemoveObject sMRemoveSPITObject;
ptrSPITObject = mSpitObjects.getEntry(p_SPITObjectID);
if (ptrSPITObject == nullptr)
@@ -1168,8 +1157,8 @@ int SPIT_Client::removeSPITObject(string p_SPITObjectID) {
//----- Play SPIT Objects ------
void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStart) {
ESP_LOGD(TAG, "parse PlaySPITStart ID: %s Name: %s Running: %d", p_PlaySPITStart.getPlayerID().c_str(), p_PlaySPITStart.getPlayerName().c_str(), (int)p_PlaySPITStart.getPlayerIsRunning());
void SPIT_Client::parsePlaySPITStart(Message::PlayStart &p_PlaySPITStart) {
ESP_LOGD(TAG, "parse PlayStart ID: %s Name: %s Running: %d", p_PlaySPITStart.getPlayerID().c_str(), p_PlaySPITStart.getPlayerName().c_str(), (int)p_PlaySPITStart.getPlayerIsRunning());
SPITPlayer &spitPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITStart.getPlayerID());
spitPlayer.setIsRunning(p_PlaySPITStart.getPlayerIsRunning());
spitPlayer.setName(p_PlaySPITStart.getPlayerName());
@@ -1179,7 +1168,7 @@ void SPIT_Client::parsePlaySPITStart(SPIT_Message::PlaySPITStart &p_PlaySPITStar
mCallbacks.onPlay(spitPlayer.getID(), spitPlayer.getName(), spitPlayer.getType(), spitPlayer.getIsRunning(), spitPlayer.getTime());
}
void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITObject) {
void SPIT_Client::parsePlaySPITObject(Message::PlayObject &p_PlaySPITObject) {
SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITObject.getPlayerID());
SPITObject *ptrSPITObject = mSpitObjects.getEntry(p_PlaySPITObject.getSPITObjectID());
@@ -1195,7 +1184,7 @@ void SPIT_Client::parsePlaySPITObject(SPIT_Message::PlaySPITObject &p_PlaySPITOb
ptrPlaySPITType->addValue(((double)p_PlaySPITObject.getValue() / 1000000), ((double)ptrSPITObject->getValueFactor() / 1000000));
}
void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd) {
void SPIT_Client::parsePlaySPITEnd(Message::PlayEnd &p_PlaySPITEnd) {
SPITPlayer &ptrSPITPlayer = SPITPlayer::getSPITPlayer(p_PlaySPITEnd.getPlayerID());
auto &ptrPlaySPITTypes = ptrSPITPlayer.getPlaySPITTypes();
@@ -1214,7 +1203,7 @@ void SPIT_Client::parsePlaySPITEnd(SPIT_Message::PlaySPITEnd &p_PlaySPITEnd) {
ptrSPITPlayer.endPlaySequence();
}
void SPIT_Client::parseReportPlayStatus(SPIT_Message::ReportPlayStatus &p_ReportPlayStatus) {
void SPIT_Client::parseReportPlayStatus(Message::ReportPlayStatus &p_ReportPlayStatus) {
SPITType *ptrSPITType = NULL;
SPITObject *ptrSPITObject = mRemoteSpitObjects.getEntry(p_ReportPlayStatus.getID());
@@ -1257,12 +1246,12 @@ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p
if (ptrRemoteSPITObject == nullptr)
return;
SPIT_Message::PlaySPITStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE);
Message::PlayStart playSPITStart(m_ID, m_ProjName, PLAYERTYPE_DISCRETE);
playSPITStart.setPlayerIsRunning(false);
playSPITStart.setTime(0);
sendSPITMessage(playSPITStart);
SPIT_Message::PlaySPITObject playSPITObject;
Message::PlayObject playSPITObject;
playSPITObject.setID(ptrRemoteSPITObject->getID());
playSPITObject.setPlayPrePosition(false);
playSPITObject.setPlayerID(m_ID);
@@ -1270,7 +1259,7 @@ void SPIT_Client::sendRemoteObject(string p_SPITObjectID, int p_Valueppm, char p
playSPITObject.setValueFlag(p_ValueFlag);
sendSPITMessage(playSPITObject);
SPIT_Message::PlaySPITEnd playSPITEnd(m_ID);
Message::PlayEnd playSPITEnd(m_ID);
sendSPITMessage(playSPITEnd);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+362
View File
@@ -0,0 +1,362 @@
-- LiveShowSoftware SPIT-Protocol
spit_proto = Proto("spit", "LiveShowSoftware SPIT")
spit_sad_proto = Proto("spit_sad", "LiveShowSoftware SPIT SAD")
-- Define fields (add more as needed)
local f_hVer = ProtoField.uint32("spit.version", "Version")
local f_hNum = ProtoField.uint8("spit.msgCount", "MsgCount")
local f_hLen = ProtoField.uint32("spit.len", "Length")
local f_hSerId = ProtoField.string("spit.serverId", "ServerID")
local f_hCliId = ProtoField.string("spit.clientId", "ClientID")
local f_hType = ProtoField.uint8("spit.msgType", "MsgType")
local f_pLen = ProtoField.uint32("spit.paylen", "Length")
local f_pSession = ProtoField.string("spit.key", "Spit Session")
local f_pKey = ProtoField.string("spit.key", "Spit Key")
local f_pSadKey = ProtoField.string("spit.sadKey", "Spit SAD Key")
local f_pServerDevName = ProtoField.string("spit.serverDevName", "Server Device Name")
local f_pClientDevName = ProtoField.string("spit.clientDevName", "Client Device Name")
local f_pClientName = ProtoField.string("spit.clientName", "Client Name")
local f_pLoginName = ProtoField.string("spit.loginName", "Login Name")
local f_pLoginPassword = ProtoField.string("spit.loginPassword", "Login Password")
local f_pServerName = ProtoField.string("spit.serverName", "Server Name")
local f_pServerIp = ProtoField.string("spit.serverIp", "Server IP")
local f_pServerPort = ProtoField.uint16("spit.serverIp", "Server Port")
local f_pSrvParam = ProtoField.string("spit.serverParam", "Server Paramter")
local f_pStepTime = ProtoField.string("spit.stepTime", "Step Time")
local f_pConnected = ProtoField.string("spit.connected", "Connected")
local f_pProjectId = ProtoField.string("spit.projectId", "Project ID")
local f_pProjectName = ProtoField.string("spit.projectName", "Project Name")
local f_pObjectId = ProtoField.string("spit.ObjectId", "Object ID")
local f_pObjectName = ProtoField.string("spit.ObjectName", "Object Name")
local f_pTypeId = ProtoField.string("spit.TypeId", "Type ID")
local f_pTypeName = ProtoField.string("spit.TypeName", "Type Name")
local f_pTypeGroupName = ProtoField.string("spit.TypeGroupName", "Type Group Name")
local f_pObjectsFrames = ProtoField.uint64("spit.ObjectFrames", "Object Frames")
local f_pValue = ProtoField.uint64("spit.Value", "Value")
local f_pValueFlag = ProtoField.uint8("spit.ValueFlag", "ValueFlag")
local f_pConfirm = ProtoField.uint8("spit.confirmed", "Confirmation")
local f_pFixed = ProtoField.uint8("spit.fixed", "Fixed")
local f_pAssigned = ProtoField.uint8("spit.assigned", "Action assigned")
local f_pSrvRemote = ProtoField.uint8("spit.serverRemote", "Server Remote")
local f_pProjIndep = ProtoField.uint8("spit.projectIndipendent", "Project Indipendent")
local f_pValueUse = ProtoField.uint8("spit.valueUse", "Value Use")
local f_pFrameStart = ProtoField.uint64("spit.frameStart", "Frame Start")
local f_pFrameLength = ProtoField.uint64("spit.frameLength", "Frame Length")
local f_pFrameFadeIn = ProtoField.uint64("spit.fadeInLength", "Fade In Length")
local f_pFrameFadeOut = ProtoField.uint64("spit.fadeOutLength", "Fade Out Length")
local f_pValueFactor = ProtoField.uint32("spit.valueFactor", "Value Factor")
local f_pFramesPerSec = ProtoField.uint32("spit.framesPerSec", "Frames per second")
local f_pTrack = ProtoField.uint32("spit.track", "Track")
local f_pRemark = ProtoField.string("spit.remark", "Remack")
local f_pDelay = ProtoField.uint64("spit.delay", "Delay")
local f_pDuration = ProtoField.uint64("spit.duration", "Duration")
local f_pPlayerId = ProtoField.string("spit.PlayerId", "Player ID")
local f_pPlayerName = ProtoField.string("spit.PlayerName", "Player Name")
local f_pPlayerType = ProtoField.uint8("spit.PlayerType", "Player Type")
local f_pPlayerRunning = ProtoField.uint8("spit.PlayerRunning", "Player Running")
local f_pPlayerFrames = ProtoField.uint64("spit.PlayerFrame", "Player Frames")
local f_pPlayerPrePos = ProtoField.uint8("spit.PlayerPrePos", "Player Preposition")
local sessionInfos = {}
spit_proto.fields = {
f_pSession, f_pKey, f_pSadKey, f_pServerDevName,
f_hVer, f_hNum, f_hLen, f_hSerId, f_hCliId, f_hType, f_pLen,
f_pClientDevName, f_pClientName, f_pLoginName, f_pLoginPassword, f_pServerName, f_pServerIp, f_pServerPort, f_pSrvParam, f_pStepTime, f_pConnected, f_pProjectId, f_pProjectName,
f_pObjectId, f_pObjectName, f_pTypeId, f_pTypeName, f_pTypeGroupName, f_pObjectsFrames, f_pValue, f_pValueFlag,
f_pConfirm, f_pFixed, f_pAssigned, f_pSrvRemote, f_pProjIndep, f_pValueUse,
f_pFrameStart, f_pFrameLength, f_pFrameFadeIn, f_pFrameFadeOut, f_pValueFactor, f_pFramesPerSec, f_pTrack, f_pRemark, f_pDelay, f_pDuration,
f_pPlayerId, f_pPlayerName, f_pPlayerType, f_pPlayerRunning, f_pPlayerFrames, f_pPlayerPrePos
}
function extractSession(buffer, pinfo)
local serverHash = buffer(16,41):string()
local clientHash = buffer(57,41):string()
return string.format("%s - %s", sessionInfos[serverHash], sessionInfos[clientHash])
end
function extractVersionString(buffer)
local vBytes = buffer(7,4):bytes()
local vStr = ""
for i = 0, 3 do
local byte = vBytes:get_index(i)
local high_nibble = bit.rshift(byte, 4)
local low_nibble = bit.band(byte, 0x0F)
vStr = vStr .. tostring(high_nibble) .. tostring(low_nibble)
end
return vStr
end
-- Heuristic dissector function
function spit_proto.dissector(buffer, pinfo, tree)
if buffer:len() < 6 then return false end
if buffer(0,6):string() ~= "#spit#" then return false end
pinfo.cols.protocol = "SPIT"
local subtree = tree:add(spit_proto, buffer(), "SPIT Protocol Data")
local hTree = subtree:add("Header")
hTree:add(f_hVer, buffer(7,4)):set_text("Version: " .. extractVersionString(buffer))
hTree:add(f_hNum, buffer(11,1))
local hLen = buffer(12,4):le_uint()
subtree:add(f_hLen, buffer(12,4)):set_text("Length: " .. hLen)
hTree:add(f_hSerId, buffer(16,41))
hTree:add(f_hCliId, buffer(57,41))
local type = buffer(98,1):uint()
hTree:add(f_hType, buffer(98,1))
local pTree = subtree:add("Payload")
local pLen = buffer(99,4):le_uint()
pTree:add(f_pLen, buffer(99,4)):set_text("Pyload Length: " .. pLen)
local info_text = "Type: " .. type
if type == 1 then -- Connect
pTree:add(f_pClientDevName, buffer(103,64))
pTree:add(f_pClientName, buffer(167,64))
pTree:add(f_pLoginName, buffer(231,64))
pTree:add(f_pLoginPassword, buffer(295,64))
pTree:add(f_pServerIp, buffer(359,40))
pTree:add(f_pServerPort, buffer(399,2))
local clientName = buffer(167,64):string()
local clientHash = buffer(57,41):string()
sessionInfos[clientName] = clientHash -- e.g. 70866c9b-af1c-4765-a17e-8b45c93f3aca
sessionInfos[clientHash] = clientName --
sessionInfos[tostring(pinfo.src)] = clientName
info_text = string.format("Connect Req | Client: %s (%s) | ADDR: %s:%s",
clientName, clientHash, buffer(359,40):string(), buffer(399,2):uint())
elseif type == 2 then -- Connect Response
pTree:add(f_pServerDevName, buffer(103,64))
pTree:add(f_pServerName, buffer(167,64))
pTree:add(f_pStepTime, buffer(231,4))
pTree:add(f_pConnected, buffer(235,1))
local serverName = buffer(167,64):string()
local serverHash = buffer(16,41):string()
sessionInfos[serverName] = serverHash -- e.g. 405c7100-64e8-435d-8a7b-00c5629f9ccf
sessionInfos[serverHash] = serverName
sessionInfos[tostring(pinfo.src)] = serverName
info_text = string.format("Connect Res | Server: %s (%s) ",
serverName, serverHash)
elseif type == 3 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
info_text = string.format("Disconnect")
elseif type == 8 then
info_text = string.format("Watchdog")
elseif type == 9 then
info_text = string.format("Watchdog Ans")
elseif type == 11 then -- Report Porject
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pProjectId, buffer(103,41))
pTree:add(f_pProjectName, buffer(144,64))
pTree:add(f_pFramesPerSec, buffer(208,4))
info_text = string.format("%s -> %s | Report Project | Project: %s / %s",
sessionInfos[tostring(pinfo.src)], sessionInfos[tostring(pinfo.dst)], buffer(103,41):string(), buffer(144,64):string())
elseif type == 13 then -- Close Porject
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pProjectId, buffer(103,41))
info_text = string.format("Close Project | Project: %s",
buffer(103,64):string())
elseif type == 15 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
info_text = string.format("Request Project Transfer")
elseif type == 16 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
info_text = string.format("Start Project Transfer")
elseif type == 17 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
info_text = string.format("End Project Transfer")
elseif type == 21 then -- Report Type
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pConfirm, buffer(103,1))
pTree:add(f_pTypeId, buffer(104,41))
pTree:add(f_pFixed, buffer(145,1))
pTree:add(f_pSrvRemote, buffer(146,1))
pTree:add(f_pProjIndep, buffer(147,1))
pTree:add(f_pTypeGroupName, buffer(148,39))
pTree:add(f_pTypeName, buffer(187,64))
pTree:add(f_pDelay, buffer(251,8))
pTree:add(f_pDuration, buffer(259,8))
local group = buffer(148,39):string()
local name = buffer(187,64):string()
local id = buffer(104,41):string()
info_text = string.format("%s -> %s | Report SPIT Type: %s.%s (%s)", sessionInfos[tostring(pinfo.src)], sessionInfos[tostring(pinfo.dst)], group, name, id)
elseif type == 23 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pTypeId, buffer(103,41))
info_text = string.format("Remove SPIT Type")
elseif type == 31 then -- Report Object
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pConfirm, buffer(103,1))
pTree:add(f_pObjectId, buffer(104,41))
pTree:add(f_pFixed, buffer(145,1))
pTree:add(f_pSrvRemote, buffer(146,1))
pTree:add(f_pObjectName, buffer(147,64))
pTree:add(f_pTypeId, buffer(211,41))
pTree:add(f_pSrvParam, buffer(252,64))
pTree:add(f_pFrameStart, buffer(316,8))
pTree:add(f_pFrameLength, buffer(324,8))
pTree:add(f_pFrameFadeIn, buffer(332,8))
pTree:add(f_pFrameFadeOut, buffer(340,8))
local valueFactor = buffer(348,4):le_uint()
pTree:add(f_pValueFactor, buffer(348,4)):set_text("Value Factor" .. valueFactor)
pTree:add(f_pValueUse, buffer(349,1))
pTree:add(f_pTrack, buffer(350,4))
pTree:add(f_pRemark, buffer(354,64))
pTree:add(f_pDelay, buffer(418,8))
pTree:add(f_pDuration, buffer(426,8))
pTree:add(f_pAssigned, buffer(435,1))
local name = buffer(147,64):string()
local tId = buffer(211,41):string()
local oId = buffer(104,41):string()
info_text = string.format("%s -> %s | Report SPIT Object: %s (%s / %s)", sessionInfos[tostring(pinfo.src)], sessionInfos[tostring(pinfo.dst)], name, oId, tId)
elseif type == 33 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pObjectId, buffer(103,41))
info_text = string.format("Remove SPIT Object")
elseif type == 37 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pPlayerId, buffer(103,41))
pTree:add(f_pPlayerName, buffer(144,64))
pTree:add(f_pPlayerType, buffer(208,1))
pTree:add(f_pPlayerRunning, buffer(209,1))
pTree:add(f_pPlayerFrames, buffer(210,8))
info_text = string.format("Play SPIT Start")
elseif type == 38 then -- Play Spit object
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pPlayerId, buffer(103,41))
pTree:add(f_pObjectId, buffer(144,41))
pTree:add(f_pObjectsFrames, buffer(185,8))
pTree:add(f_pPlayerPrePos, buffer(193,1))
pTree:add(f_pValue, buffer(194,4))
pTree:add(f_pValueFlag, buffer(198,1))
local oId = buffer(144,41):string()
info_text = string.format("%s -> %s | Play SPIT Object: %s", sessionInfos[tostring(pinfo.src)], sessionInfos[tostring(pinfo.dst)], oId)
elseif type == 39 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pPlayerId, buffer(103,41))
info_text = string.format("Play SPIT End")
elseif type == 40 then
pTree:add(f_pSession, extractSession(buffer, pinfo))
pTree:add(f_pObjectId, buffer(103,41))
pTree:add(f_pObjectsFrames, buffer(144,8))
pTree:add(f_pValue, buffer(152,4))
info_text = string.format("Report Play Status")
else
info_text = string.format("ERROR Unknown")
end
pinfo.cols['info'] = info_text
return true -- We handled this packet
end
function split(str, delim)
local result = {}
local delim_len = delim
local s = 1
while true do
local e, next_e = string.find(str, delim, s)
if not e then
table.insert(result, string.sub(str, s))
break
end
table.insert(result, string.sub(str, s, e - 1))
s = next_e + 1
end
return result
end
-- Heuristic dissector function
function spit_sad_proto.dissector(buffer, pinfo, tree)
if buffer:len() < 14 then return false end
if buffer(0,14):string() ~= "#SAD##,##spit#" then return false end
pinfo.cols.protocol = "SPIT-SAD"
local info_text = "SAD"
if buffer:len() > 16 then
local payload = buffer(0,buffer:len()):string()
local parts = split(payload, "#,#")
local subtree = tree:add(spit_sad_proto, buffer(), "Discovery Data")
subtree:add(f_pSadKey, parts[1]) -- 1 #SAD#
subtree:add(f_pKey, parts[2]) -- 2 #spit#
subtree:add(f_pServerName, parts[3]) -- 3 liveShowSPIT
subtree:add(f_hSerId , parts[4]) -- 4 405c7100-64e8-435d-8a7b-00c5629f9ccf
subtree:add(f_pServerDevName, parts[5]) -- 5 P17gen1
subtree:add(f_pServerPort, parts[6]) -- 6 15120
subtree:add(f_pServerIp, parts[7]) -- 7 172.16.17.56
subtree:add(f_pProjectName, parts[9]) -- 9 CatasWatchProject
info_text = string.format("SPIT-SAD Discover Data | Client: %s Porject: %s ",
parts[4], parts[9])
else
info_text = string.format("SPIT-SAD Discover")
end
pinfo.cols['info'] = info_text
return true -- We handled this packet
end
-- Register as a heuristic UDP dissector
spit_proto:register_heuristic("udp", spit_proto.dissector)
spit_sad_proto:register_heuristic("udp", spit_sad_proto.dissector)
-- local f_pFramesPerSec = ProtoField.uint32("spit.framesPerSec", "Frames per second")
-- local f_pTrack = ProtoField.uint32("spit.track", "Track")
-- local f_pObjectsFrames = ProtoField.uint64("spit.ObjectFrames", "Object Frames")
-- local f_pValue = ProtoField.uint64("spit.Value", "Value")
-- local f_pFrameStart = ProtoField.uint64("spit.frameStart", "Frame Start")
-- local f_pFrameLength = ProtoField.uint64("spit.frameLength", "Frame Length")
-- local f_pFrameFadeIn = ProtoField.uint64("spit.fadeInLength", "Fade In Length")
-- local f_pFrameFadeOut = ProtoField.uint64("spit.fadeOutLength", "Fade Out Length")
-- local f_pDelay = ProtoField.uint64("spit.delay", "Delay")
-- local f_pDuration = ProtoField.uint64("spit.duration", "Duration")
-- local f_pPlayerFrames = ProtoField.uint64("spit.PlayerFrame", "Player Frames")
+5
View File
@@ -0,0 +1,5 @@
UnitTestsFrame()
target_link_libraries(${moduleName} PUBLIC
fmt
hwMock
)
+320
View File
@@ -0,0 +1,320 @@
/**
* @file TestableUTest.cpp
* @author Gustice
* @brief
*/
#include "doctest/doctest.h"
#include <fmt/core.h>
#include <iostream>
#include "spit_message.hpp"
using namespace spit;
class SpitMessageFix {
protected:
};
void checkData(std::vector<char> a, std::vector<char> b) {
CHECK(a.size() == b.size());
for (size_t i = 0; i < b.size(); ++i) {
CHECK_MESSAGE(a[i] == b[i],
fmt::format("Mismatch at index, {} : a = 0x{:02x} , b = 0x{:02x}",
i, (int)a[i], (int)b[i]));
}
}
TEST_CASE_FIXTURE(SpitMessageFix, "Connect Request") {
std::vector<uint8_t> msg = {
/*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x63, 0x00, 0x00, 0x00, // #spit#......c...
/*0010*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0020*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0030*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // .........db3cf24
/*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355
/*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06...
/*0060*/ 0x00, 0x00, 0x01, 0x30, 0x01, 0x00, 0x00, 0x64, 0x65, 0x76, 0x70, 0x69, 0x00, 0x00, 0x00, 0x00, // ...0...devpi....
/*0070*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x74, 0x74, 0x53, 0x70, 0x69, 0x74, 0x42, // .......MqttSpitB
/*00b0*/ 0x72, 0x69, 0x64, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ridge...........
/*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0110*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0120*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0130*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0140*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0150*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0160*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x37, 0x32, 0x2e, 0x31, 0x36, 0x2e, 0x31, 0x36, // .......172.16.16
/*0170*/ 0x2e, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .10.............
/*0180*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, // ................
/*0190*/ 0x3b, 0x00, 0x00 // ;..
};
std::vector<char> msgC(msg.begin(), msg.end());
{
Message sut = Message(msgC);
CHECK_EQ(sut.getType(), Message::Connect::OPFLAG);
auto &pM = sut.getAs<Message::Connect>();
CHECK_EQ(pM.getClientComputerName(), "devpi");
CHECK_EQ(pM.getClientName(), "MqttSpitBridge");
CHECK_EQ(pM.getLoginName(), "");
CHECK_EQ(pM.getLoginPassword(), "");
CHECK_EQ(pM.getServerIP(), "172.16.16.10");
CHECK_EQ(pM.getServerPort(), 15120);
}
{
Message::Connect sut("devpi", "MqttSpitBridge");
sut.setLoginName("");
sut.setLoginPassword("");
sut.setServerIP("172.16.16.10");
sut.setServerPort(15120);
sut.setMessageNumber(2);
sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "");
auto data = Message::createMessage(sut);
CHECK(data.size() == msg.size());
for (size_t i = 0; i < msg.size(); ++i) {
CHECK_MESSAGE(data[i] == msgC[i],
fmt::format("Mismatch at index, {} : a = 0x{:02x} , b = 0x{:02x}",
i, (int)data[i], (int)msg[i]));
}
}
}
TEST_CASE_FIXTURE(SpitMessageFix, "Connect Response") {
std::vector<uint8_t> msg = {
/*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x63, 0x00, 0x00, 0x00, // #spit#......c...
/*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43
/*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f
/*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24
/*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355
/*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06...
/*0060*/ 0x00, 0x00, 0x02, 0x89, 0x00, 0x00, 0x00, 0x50, 0x31, 0x37, 0x67, 0x65, 0x6e, 0x31, 0x00, 0x00, // .......P17gen1..
/*0070*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x69, 0x76, 0x65, 0x53, 0x48, 0x4f, 0x57, 0x00, // .......liveSHOW.
/*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01 // .......(....
};
std::vector<char> msgC(msg.begin(), msg.end());
{
Message sut = Message(msgC);
CHECK_EQ(sut.getType(), Message::ConnectAnswer::OPFLAG);
auto &pM = sut.getAs<Message::ConnectAnswer>();
CHECK_EQ(pM.getServerComputerName(), "P17gen1");
CHECK_EQ(pM.getServerName(), "liveSHOW");
CHECK_EQ(pM.getConnected(), true);
CHECK_EQ(pM.getStepTime(), 40);
}
{
Message::ConnectAnswer sut;
sut.setServerComputerName("P17gen1");
sut.setServerName("liveSHOW");
sut.setConnected(true);
sut.setStepTime(40);
sut.setMessageNumber(1);
sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf");
auto data = Message::createMessage(sut);
checkData(data, msgC);
}
}
TEST_CASE_FIXTURE(SpitMessageFix, "Report Spit Type") {
std::vector<uint8_t> msg = {
/*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x63, 0x00, 0x00, 0x00, // #spit#......c...
/*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43
/*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f
/*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24
/*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355
/*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06...
/*0060*/ 0x00, 0x00, 0x15, 0xa8, 0x00, 0x00, 0x00, 0x01, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, // ........ActionMo
/*0070*/ 0x76, 0x65, 0x54, 0x6f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // veTo1...........
/*0080*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0090*/ 0x00, 0x01, 0x00, 0x01, 0x43, 0x61, 0x74, 0x61, 0x73, 0x57, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x6f, // ....CatasWatchMo
/*00a0*/ 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // vement..........
/*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x63, 0x74, 0x69, 0x6f, // ...........Actio
/*00c0*/ 0x6e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // nMoveTo1........
/*00d0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ...........
};
std::vector<char> msgC(msg.begin(), msg.end());
{
Message sut = Message(msgC);
CHECK_EQ(sut.getType(), Message::ReportType::OPFLAG);
auto &pM = sut.getAs<Message::ReportType>();
CHECK_EQ(pM.getConfirmed(), true);
CHECK_EQ(pM.getID(), "ActionMoveTo1");
CHECK_EQ(pM.getFixed(), true);
CHECK_EQ(pM.getServerRemote(), false);
CHECK_EQ(pM.getServerProjectIndepended(), true);
CHECK_EQ(pM.getGroupName(), "CatasWatchMovement");
CHECK_EQ(pM.getName(), "ActionMoveTo1");
CHECK_EQ(pM.getDelay(), 0);
CHECK_EQ(pM.getDuration(), 0);
}
{
Message::ReportType sut;
sut.setConfirmed(true);
sut.setID("ActionMoveTo1");
sut.setFixed(true);
sut.setServerRemote(false);
sut.setServerProjectIndepended(true);
sut.setGroupName("CatasWatchMovement");
sut.setName("ActionMoveTo1");
sut.setDelay(0);
sut.setDuration(0);
sut.setMessageNumber(6);
sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf");
auto data = Message::createMessage(sut);
checkData(data, msgC);
}
}
TEST_CASE_FIXTURE(SpitMessageFix, "Report Spit Object") {
std::vector<uint8_t> msg = {
/*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x63, 0x00, 0x00, 0x00, // #spit#......c...
/*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43
/*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f
/*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24
/*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355
/*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06...
/*0060*/ 0x00, 0x00, 0x1f, 0x53, 0x01, 0x00, 0x00, 0x01, 0x30, 0x30, 0x30, 0x30, 0x30, 0x6d, 0x68, 0x63, // ...S....00000mhc
/*0070*/ 0x67, 0x65, 0x64, 0x30, 0x69, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // ged0i00000000000
/*0080*/ 0x30, 0x30, 0x30, 0x30, 0x30, 0x7a, 0x34, 0x30, 0x74, 0x63, 0x79, 0x6b, 0x63, 0x33, 0x00, 0x00, // 00000z40tcykc3..
/*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00c0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00d0*/ 0x00, 0x00, 0x00, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x31, // ...ActionMoveTo1
/*00e0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*00f0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x69, 0x70, 0x00, // ............vip.
/*0100*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0110*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0120*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0130*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0xfc, 0x12, 0x00, // ............m...
/*0140*/ 0x00, 0x00, 0x00, 0x00, 0x4b, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ....K...........
/*0150*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x42, 0x0f, 0x00, // ............@B..
/*0160*/ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0170*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0180*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*0190*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*01a0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................
/*01b0*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ......
};
std::vector<char> msgC(msg.begin(), msg.end());
{
Message sut = Message(msgC);
CHECK_EQ(sut.getType(), Message::ReportObject::OPFLAG);
auto &pM = sut.getAs<Message::ReportObject>();
CHECK_EQ(pM.getConfirmed(), true);
CHECK_EQ(pM.getID(), "00000mhcged0i0000000000000000z40tcykc3");
CHECK_EQ(pM.getFixed(), false);
CHECK_EQ(pM.getServerRemote(), false);
CHECK_EQ(pM.getName(), "");
CHECK_EQ(pM.getSPITTypeID(), "ActionMoveTo1");
CHECK_EQ(pM.getServerParams(), "vip");
CHECK_EQ(pM.getFrameStart(), 1244269);
CHECK_EQ(pM.getFrameLength(), 53323);
CHECK_EQ(pM.getFrameFadeInLength(), 0);
CHECK_EQ(pM.getFrameFadeOutLength(), 0);
CHECK_EQ(pM.getValueFactor(), 1000000);
CHECK_EQ(pM.getValueUse(), 0);
CHECK_EQ(pM.getTrack(), 1);
CHECK_EQ(pM.getRemark(), "");
CHECK_EQ(pM.getDelay(), 0);
CHECK_EQ(pM.getDuration(), 0);
CHECK_EQ(pM.getActionAssigned(), false);
}
{
Message::ReportObject sut;
sut.setConfirmed(true);
sut.setID("00000mhcged0i0000000000000000z40tcykc3");
sut.setFixed(false);
sut.setServerRemote(false);
sut.setName("");
sut.setSPITTypeID("ActionMoveTo1");
sut.setServerParams("vip");
sut.setFrameStart(1244269);
sut.setFrameLength(53323);
sut.setFrameFadeInLength(0);
sut.setFrameFadeOutLength(0);
sut.setValueFactor(1000000);
sut.setValueUse(0);
sut.setTrack(1);
sut.setRemark("");
sut.setDelay(0);
sut.setDuration(0);
sut.setActionAssigned(false);
sut.setMessageNumber(21);
sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf");
auto data = Message::createMessage(sut);
checkData(data, msgC);
}
}
TEST_CASE_FIXTURE(SpitMessageFix, "Report Play Object") {
std::vector<uint8_t> msg = {
/*0000*/ 0x23, 0x73, 0x70, 0x69, 0x74, 0x23, 0x00, 0x01, 0x00, 0x00, 0x00, 0x83, 0x63, 0x00, 0x00, 0x00, // #spit#......c...
/*0010*/ 0x34, 0x30, 0x35, 0x63, 0x37, 0x31, 0x30, 0x30, 0x2d, 0x36, 0x34, 0x65, 0x38, 0x2d, 0x34, 0x33, // 405c7100-64e8-43
/*0020*/ 0x35, 0x64, 0x2d, 0x38, 0x61, 0x37, 0x62, 0x2d, 0x30, 0x30, 0x63, 0x35, 0x36, 0x32, 0x39, 0x66, // 5d-8a7b-00c5629f
/*0030*/ 0x39, 0x63, 0x63, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x62, 0x33, 0x63, 0x66, 0x32, 0x34, // 9ccf.....db3cf24
/*0040*/ 0x34, 0x2d, 0x36, 0x30, 0x35, 0x39, 0x2d, 0x34, 0x30, 0x65, 0x36, 0x2d, 0x61, 0x33, 0x35, 0x35, // 4-6059-40e6-a355
/*0050*/ 0x2d, 0x32, 0x62, 0x66, 0x34, 0x34, 0x36, 0x37, 0x33, 0x32, 0x62, 0x30, 0x36, 0x00, 0x00, 0x00, // -2bf446732b06...
/*0060*/ 0x00, 0x00, 0x28, 0x39, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x6d, 0x38, 0x75, 0x65, // ..(9...00000m8ue
/*0070*/ 0x64, 0x79, 0x79, 0x74, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, // dyyt000000000000
/*0080*/ 0x30, 0x30, 0x30, 0x31, 0x66, 0x6a, 0x30, 0x76, 0x61, 0x38, 0x62, 0x6f, 0x6d, 0x00, 0x00, 0x00, // 0001fj0va8bom...
/*0090*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // ............
};
std::vector<char> msgC(msg.begin(), msg.end());
{
Message sut = Message(msgC);
CHECK_EQ(sut.getType(), Message::ReportPlayStatus::OPFLAG);
auto &pM = sut.getAs<Message::ReportPlayStatus>();
CHECK_EQ(pM.getID(), "00000m8uedyyt0000000000000001fj0va8bom");
CHECK_EQ(pM.getFrameInsideObject(), 0);
CHECK_EQ(pM.getValue(), 0);
}
{
Message::ReportPlayStatus sut;
sut.setID("00000m8uedyyt0000000000000001fj0va8bom");
sut.setFrameInsideObject(0);
sut.setValue(0);
sut.setMessageNumber(131);
sut.setServerInfoInHeader("db3cf244-6059-40e6-a355-2bf446732b06", "405c7100-64e8-435d-8a7b-00c5629f9ccf");
auto data = Message::createMessage(sut);
checkData(data, msgC);
}
}
+128
View File
@@ -0,0 +1,128 @@
/**
* @file spitRepoTest.cpp
* @author Gustice
* @brief
*/
#include "doctest/doctest.h"
#include <fmt/core.h>
#include <iostream>
#include "spit_repo.hpp"
using namespace spit;
using namespace std;
struct SomeType {
string id;
int val{};
int tst{};
string getID() { return id; }
};
class SpitRepoFix {
protected:
SpitRepo<SomeType> sut;
};
TEST_CASE_FIXTURE(SpitRepoFix, "Typical use case") {
CHECK_EQ(sut.getSize(), 0);
CHECK_EQ(sut.hasEntry("obj1"), false);
CHECK_EQ(sut.getEntry("obj1"), nullptr);
CHECK_THROWS(sut.getEntryRef("obj1"));
CHECK_EQ(sut.removeEntry("obj1"), false);
// CHECK_EQ(sut.removeEntry(1), false);
auto obj1 = make_unique<SomeType>("obj1", 1, 0);
sut.addEntry(move(obj1));
{
CHECK_EQ(sut.getSize(), 1);
CHECK_EQ(sut.hasEntry("obj1"), true);
CHECK_EQ(sut.getEntry("obj1")->val, 1);
CHECK_EQ(sut.getEntryRef("obj1").val, 1);
}
auto obj2 = make_unique<SomeType>("obj2", 2, 0);
sut.addEntry(move(obj2));
{
CHECK_EQ(sut.getSize(), 2);
CHECK_EQ(sut.hasEntry("obj2"), true);
CHECK_EQ(sut.getEntry("obj2")->val, 2);
CHECK_EQ(sut.getEntryRef("obj2").val, 2);
}
auto obj3 = make_unique<SomeType>("obj3", 3, 0);
sut.addEntry(move(obj3));
{
CHECK_EQ(sut.getSize(), 3);
CHECK_EQ(sut.hasEntry("obj3"), true);
CHECK_EQ(sut.getEntry("obj3")->val, 3);
CHECK_EQ(sut.getEntryRef("obj3").val, 3);
}
auto obj4 = make_unique<SomeType>("obj4", 4, 0);
sut.addEntry(move(obj4));
{
CHECK_EQ(sut.getSize(), 4);
CHECK_EQ(sut.hasEntry("obj4"), true);
CHECK_EQ(sut.getEntry("obj4")->val, 4);
CHECK_EQ(sut.getEntryRef("obj4").val, 4);
}
{
auto *p = const_cast<SomeType *>(sut.getEntry("obj3"));
auto &r = sut.getEntryRef("obj3");
CHECK_EQ(p->val, 3);
CHECK_EQ(r.val, 3);
CHECK_EQ(r.tst, 0);
p->tst = 20;
CHECK_EQ(r.tst, 20);
}
{
const auto & repo = sut.getRepo();
CHECK_EQ(repo.size(), 4);
CHECK_EQ(repo.at("obj1")->val, 1);
CHECK_EQ(repo.at("obj2")->val, 2);
CHECK_EQ(repo.at("obj3")->val, 3);
CHECK_EQ(repo.at("obj4")->val, 4);
}
{
CHECK_EQ(sut.removeEntry("obj1"), true);
CHECK_EQ(sut.removeEntry("obj3"), true);
const auto & repo = sut.getRepo();
CHECK_EQ(sut.getSize(), 2);
CHECK_EQ(repo.size(), 2);
CHECK_EQ(repo.at("obj2")->val, 2);
CHECK_EQ(repo.at("obj4")->val, 4);
}
auto obj5 = make_unique<SomeType>("obj5", 5, 0);
sut.addEntry(move(obj5));
{
const auto & repo = sut.getRepo();
CHECK_EQ(sut.getSize(), 3);
CHECK_EQ(repo.size(), 3);
CHECK_EQ(repo.at("obj2")->val, 2);
CHECK_EQ(repo.at("obj4")->val, 4);
CHECK_EQ(repo.at("obj5")->val, 5);
}
{
sut.clearEntries();
CHECK_EQ(sut.getSize(), 0);
}
auto obj6 = make_unique<SomeType>("obj6", 6, 0);
sut.addEntry(move(obj6));
{ // Still works after clear
CHECK_EQ(sut.getSize(), 1);
CHECK_EQ(sut.hasEntry("obj6"), true);
CHECK_EQ(sut.getEntry("obj6")->val, 6);
CHECK_EQ(sut.getEntryRef("obj6").val, 6);
}
}
+11
View File
@@ -0,0 +1,11 @@
/**
* @file uTestMain.cpp
* @author Gustice
* @brief
*/
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest/doctest.h"
TEST_CASE("TestTest") {
CHECK(true == true);
}
+1 -1
View File
@@ -1,4 +1,4 @@
idf_component_register(
INCLUDE_DIRS "."
INCLUDE_DIRS "include"
REQUIRES devHal
)
@@ -0,0 +1,62 @@
#pragma once
#include "stepperDrv.hpp"
#include "stepperMotor.hpp"
#include <cmath>
class WatchMotor {
static constexpr uint8_t Positions = 6;
public:
using AllmostFinishedCb = void (*)(uint8_t newIdx);
WatchMotor(IStepperMotor &stepper, AllmostFinishedCb onDone)
: _stepper(stepper),
_onFinCb(onDone) {
}
void moveTo(uint8_t position, uint8_t profile, int minJumps, float accel, float speed) {
auto sign = position % 6;
int minTurns = minJumps / 6;
float corr = 0.0F;
float currentPos = _stepper.getScaledPos() * 6;
if ((_currentIndex > 4) && (currentPos < 2)) {
corr = 6 - _currentIndex - currentPos;
} else if ((_currentIndex < 2) && (currentPos > 2)) {
corr = _currentIndex + 6 - currentPos;
} else {
corr = _currentIndex - currentPos;
}
int steps = 0;
if (_currentIndex < sign) {
steps = (sign - _currentIndex);
} else if (_currentIndex >= sign) {
steps = (sign + 6 - _currentIndex);
}
steps += minTurns * 6;
if (steps < minJumps) {
steps += 6;
}
float delta = 2.0F * std::numbers::pi / 6 * steps;
ESP_LOGD("MV", "Moving to %d by %.2f + %.2f", sign, delta, corr);
_stepper.moveBy(delta + corr, profile, accel, speed, [&]() {
if (_onFinCb) {
_onFinCb(position);
}
});
_currentIndex = sign;
}
float getScaled() { return _stepper.getScaledPos() * 6; }
uint8_t getIndex() { return _currentIndex; }
private:
IStepperMotor &_stepper;
uint8_t _currentIndex{};
AllmostFinishedCb _onFinCb{};
};
+1
View File
@@ -0,0 +1 @@
// Dummy file
@@ -0,0 +1,4 @@
UnitTestsFrame()
target_link_libraries(${moduleName} PUBLIC
devHal
)
@@ -0,0 +1,105 @@
/**
* @file TestableUTest.cpp
* @author Gustice
* @brief
*
* @copyright Copyright (c) 2024
*/
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "doctest/doctest.h"
#include <iostream>
#include <numbers>
#include "watchFace.hpp"
class StepperMotorMock : public IStepperMotor {
public:
void moveBy(float angle, uint8_t profile = 0) override {
lastAngle = angle;
lastProfile = profile;
}
void moveBy(float angle, uint8_t profile, float accel, float speed, std::function<void()> profileDone = nullptr) override {
lastAngle = angle;
lastProfile = profile;
}
float getScaledPos() const override {
return nextPos;
}
uint16_t getQuanted() const override {
return 0;
}
float lastAngle{};
uint8_t lastProfile{};
float lastAccel{};
float lastSpeed{};
float nextPos{};
};
void onFin(uint8_t idx) {
}
class WatchFaceFixture {
using PositionStore = StepperMotor::Position<50, 5>;
public:
protected:
static constexpr int MicroSteps = 32;
StepperMotorMock motor;
WatchMotor sut{motor, onFin};
private:
};
TEST_CASE_FIXTURE(WatchFaceFixture, "Moving simple steps") {
auto next = 0*std::numbers::pi/3;
motor.nextPos = next;
sut.moveTo(1, 0, 0, 1, 1);
auto delta = 1*std::numbers::pi/3;
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 1.0F/6;
sut.moveTo(2, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 2.0F/6;
sut.moveTo(3, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 3.0F/6;
sut.moveTo(4, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 4.0F/6;
sut.moveTo(5, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 5.0F/6;
sut.moveTo(6, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 6.0F/6;
sut.moveTo(1, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 1.0F/6;
sut.moveTo(2, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
}
TEST_CASE_FIXTURE(WatchFaceFixture, "Moving multiple turns") {
auto next = 0*std::numbers::pi/3;
motor.nextPos = next;
sut.moveTo(1, 0, 0, 1, 1);
auto delta = 1*std::numbers::pi/3;
CHECK(motor.lastAngle == doctest::Approx(delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 1.0F/6;
sut.moveTo(1, 0, 0, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(6*delta).epsilon(0.000625)); // MicroStep tolerance
motor.nextPos = 1.0F/6;
sut.moveTo(1, 0, 7, 1, 1);
CHECK(motor.lastAngle == doctest::Approx(12*delta).epsilon(0.000625)); // MicroStep tolerance
}
-50
View File
@@ -1,50 +0,0 @@
#pragma once
#include "StepperDrv8833.hpp"
#include "stepperMotor.hpp"
#include <cmath>
class WatchMotor {
static constexpr uint8_t Positions = 6;
public:
WatchMotor(StepperMotor &stepper, OutputPort &sleep)
: _stepper(stepper),
_motorSleep(sleep) {
_motorSleep.write(false);
}
void moveTo(uint8_t sign, uint8_t profile = 0) {
sign = sign % 6;
float delta = 2.0F * std::numbers::pi;
float corr = 0.0F;
float currentPos = _stepper.getScaledPos() * 6;
if ((_currentIndex > 4) && (currentPos < 2)) {
corr = 6 - _currentIndex - currentPos;
} else if ((_currentIndex < 2) && (currentPos > 2)) {
corr = _currentIndex + 6 - currentPos;
} else {
corr = _currentIndex - currentPos;
}
// stepper.getScaledPos() * 6
if (_currentIndex < sign) {
delta = delta / 6 * (sign - _currentIndex);
} else if (_currentIndex > sign) {
delta = delta / 6 * (sign + 6 - _currentIndex);
}
ESP_LOGD("MV", "Moving to %d by %.2f + %.2f", sign, delta, corr);
_stepper.moveBy(delta + corr, profile);
_currentIndex = sign;
}
float getScaled() { return _stepper.getScaledPos() * 6; }
uint8_t getIndex() { return _currentIndex; }
private:
StepperMotor &_stepper;
OutputPort &_motorSleep;
uint8_t _currentIndex{};
};
+1 -1
Submodule core updated: c85bfa2afc...02db420163
+8 -6
View File
@@ -1,15 +1,17 @@
dependencies:
ethernet_init:
component_hash: null
dependencies: []
source:
path: C:\Tools\ESP-IDF\v5.3\esp-idf\examples\ethernet\basic\components\ethernet_init
path: /home/gustice/esp/v5.4.1/esp-idf/examples/ethernet/basic/components/ethernet_init
type: local
version: '*'
idf:
component_hash: null
source:
type: idf
version: 5.3.0
manifest_hash: 736e193f01d8a1ca4afaed91b473283f46d56db468270aee2f055b9425257e7f
version: 5.4.1
direct_dependencies:
- ethernet_init
- idf
manifest_hash: dfcb516d4bd1043fe7dbc63ade7e95173fcf2993c59d7108e7b96cb5af8f7ebd
target: esp32c6
version: 1.0.0
version: 2.0.0
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-119
View File
@@ -1,119 +0,0 @@
/* Ethernet Basic Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_netif.h"
#include "esp_eth.h"
#include "esp_event.h"
#include "esp_log.h"
#include "ethernet_init.h"
#include "sdkconfig.h"
static const char *TAG = "eth_example";
/** Event handler for Ethernet events */
static void eth_event_handler(void *arg, esp_event_base_t event_base,
int32_t event_id, void *event_data)
{
uint8_t mac_addr[6] = {0};
/* we can get the ethernet driver handle from event data */
esp_eth_handle_t eth_handle = *(esp_eth_handle_t *)event_data;
switch (event_id) {
case ETHERNET_EVENT_CONNECTED:
esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr);
ESP_LOGI(TAG, "Ethernet Link Up");
ESP_LOGI(TAG, "Ethernet HW Addr %02x:%02x:%02x:%02x:%02x:%02x",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
break;
case ETHERNET_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "Ethernet Link Down");
break;
case ETHERNET_EVENT_START:
ESP_LOGI(TAG, "Ethernet Started");
break;
case ETHERNET_EVENT_STOP:
ESP_LOGI(TAG, "Ethernet Stopped");
break;
default:
break;
}
}
/** Event handler for IP_EVENT_ETH_GOT_IP */
static void got_ip_event_handler(void *arg, esp_event_base_t event_base,
int32_t event_id, void *event_data)
{
ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
const esp_netif_ip_info_t *ip_info = &event->ip_info;
ESP_LOGI(TAG, "Ethernet Got IP Address");
ESP_LOGI(TAG, "~~~~~~~~~~~");
ESP_LOGI(TAG, "ETHIP:" IPSTR, IP2STR(&ip_info->ip));
ESP_LOGI(TAG, "ETHMASK:" IPSTR, IP2STR(&ip_info->netmask));
ESP_LOGI(TAG, "ETHGW:" IPSTR, IP2STR(&ip_info->gw));
ESP_LOGI(TAG, "~~~~~~~~~~~");
}
void app_main(void)
{
// Initialize Ethernet driver
uint8_t eth_port_cnt = 0;
esp_eth_handle_t *eth_handles;
ESP_ERROR_CHECK(example_eth_init(&eth_handles, &eth_port_cnt));
// Initialize TCP/IP network interface aka the esp-netif (should be called only once in application)
ESP_ERROR_CHECK(esp_netif_init());
// Create default event loop that running in background
ESP_ERROR_CHECK(esp_event_loop_create_default());
// Create instance(s) of esp-netif for Ethernet(s)
if (eth_port_cnt == 1) {
// Use ESP_NETIF_DEFAULT_ETH when just one Ethernet interface is used and you don't need to modify
// default esp-netif configuration parameters.
esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH();
esp_netif_t *eth_netif = esp_netif_new(&cfg);
// Attach Ethernet driver to TCP/IP stack
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[0])));
} else {
// Use ESP_NETIF_INHERENT_DEFAULT_ETH when multiple Ethernet interfaces are used and so you need to modify
// esp-netif configuration parameters for each interface (name, priority, etc.).
esp_netif_inherent_config_t esp_netif_config = ESP_NETIF_INHERENT_DEFAULT_ETH();
esp_netif_config_t cfg_spi = {
.base = &esp_netif_config,
.stack = ESP_NETIF_NETSTACK_DEFAULT_ETH
};
char if_key_str[10];
char if_desc_str[10];
char num_str[3];
for (int i = 0; i < eth_port_cnt; i++) {
itoa(i, num_str, 10);
strcat(strcpy(if_key_str, "ETH_"), num_str);
strcat(strcpy(if_desc_str, "eth"), num_str);
esp_netif_config.if_key = if_key_str;
esp_netif_config.if_desc = if_desc_str;
esp_netif_config.route_prio -= i*5;
esp_netif_t *eth_netif = esp_netif_new(&cfg_spi);
// Attach Ethernet driver to TCP/IP stack
ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(eth_handles[i])));
}
}
// Register user defined event handers
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL));
// Start Ethernet driver state machine
for (int i = 0; i < eth_port_cnt; i++) {
ESP_ERROR_CHECK(esp_eth_start(eth_handles[i]));
}
}
+26 -29
View File
@@ -487,8 +487,8 @@ void LightingTask() {
ESP_LOGI(TAG, "Start Lighting");
static I2cMaster master(I2C_NUM_0,
/*sda=*/GPIO_NUM_10,
/*scl=*/GPIO_NUM_11);
{ /*sda=*/GPIO_NUM_10, /*scl=*/GPIO_NUM_11}
);
// static PmwExpanderPca9685 pca9685(master);
static PmwExpanderPca9685 ledDriver1(master, /*iverted=*/false);
static PmwExpanderPca9685 ledDriver2(master, /*iverted=*/false, 0x41);
@@ -563,8 +563,8 @@ void LightingTask() {
sp[3] = (uint16_t)(col.getRed()) << 7;
}
ledDriver1.sendImage(values[0]);
ledDriver2.sendImage(values[1]);
ledDriver1.send(values[0]);
ledDriver2.send(values[1]);
fos::Task::delayMs(40);
}
}
@@ -591,7 +591,10 @@ void MovementTask() {
StepperMotor stepper(stepperCfg, stepperDriver, initSens);
WatchMotor watch(stepper, motorSleep);
WatchMotor watch(stepper, [](uint8_t newPos) {
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(newPos));
responseQueue.enqueue(std::make_unique<WatchIndex>(ResponseType::StepAt, newPos));
});
ESP_LOGI("Stepper", "Find Home");
stepper.findRef();
@@ -627,23 +630,15 @@ void MovementTask() {
continue;
}
int jumps = newPos - watch.getIndex();
if (jumps <= 0) {
jumps += 6;
}
jumps = jumps + (activeState.minJumps % 6) * 6;
if (jumps < activeState.minJumps) {
jumps += 6;
}
Syslog::logv(Syslog::Severity::Notice,
"Running Stepper by %i steps with prof=%i a=%.2f w=%.2f",
jumps, activeState.profile, activeState.accel, activeState.speed);
"Running Stepper by min%i steps with prof=%i a=%.2f w=%.2f",
activeState.minJumps, activeState.profile, activeState.accel, activeState.speed);
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(0));
responseQueue.enqueue(std::make_unique<WatchIndex>(ResponseType::StartMoving, 0));
watch.moveTo(newPos, activeState.profile);
pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(newPos));
responseQueue.enqueue(std::make_unique<WatchIndex>(ResponseType::StepAt, newPos));
auto &as = activeState;
watch.moveTo(newPos, as.profile, as.minJumps, as.accel, as.speed);
// pictoIllumQue.enqueue(std::make_unique<PictoIllumCommand>(newPos));
// responseQueue.enqueue(std::make_unique<WatchIndex>(ResponseType::StepAt, newPos));
}
} else if (cmd->type == MoveType::Demo) {
ESP_LOGI(TAG, "Running Demo");
@@ -652,7 +647,7 @@ void MovementTask() {
fos::Task::delayMs(1000);
int steps[3]{4, 2, 0};
for (size_t j = 0; j < 3; j++) {
watch.moveTo(steps[j], i);
watch.moveTo(steps[j], i, 1, 1, 1);
fos::Task::delayMs(1000);
}
}
@@ -944,12 +939,12 @@ void SpitClientApp() {
}
void app_main(void) {
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_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); // moved to NvsApi::init();
initialize_ethernet();
NvsApi::init();
static fos::Task lightingTask(LightingTask, "Lights", 0x8000uL);
@@ -959,6 +954,8 @@ void app_main(void) {
fos::Task::delayMs(10000);
ESP_LOGI(TAG, "Start net services");
// esp_log_level_set("SPIT", esp_log_level_t::ESP_LOG_DEBUG);
static int ipVersion = AF_INET;
static fos::TaskT<int> telnetSocket(telnetSocketTask, ipVersion, "tcpServer", 4096);
static fos::TaskT<int> dmxNode(dmxSocketTask, ipVersion, "dmxNode", 4096);
@@ -988,8 +985,8 @@ void app_main(void) {
// ToDo send
Syslog::logv(Syslog::Severity::Notice, "Health state");
// ESP_LOGI(TAG, "Min heap size: %" PRIu32 " / FreeHeap %" PRIu32 "\n",
ESP_LOGI(TAG, "Min heap size: %u / FreeHeap %lu",
heap_caps_get_minimum_free_size(MALLOC_CAP_DEFAULT),
esp_get_free_heap_size());
// ESP_LOGI(TAG, "Min heap size: %u / FreeHeap %lu",
// heap_caps_get_minimum_free_size(MALLOC_CAP_DEFAULT),
// esp_get_free_heap_size());
}
}
+2 -2
View File
@@ -23,8 +23,8 @@
// Component header
#include "Task.hpp"
#include "PwmExpanderPca9685.hpp"
#include "StepperDrv8833.hpp"
#include "pwmExpanderPca9685.hpp"
#include "stepperDrv.hpp"
#include "stepperMotor.hpp"
#include "cliWrapper.hpp"
#include "udpSockets.hpp"
+173 -52
View File
@@ -1,6 +1,6 @@
#
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.3.0 Project Configuration
# Espressif IoT Development Framework (ESP-IDF) 5.4.1 Project Configuration
#
CONFIG_SOC_ADC_SUPPORTED=y
CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
@@ -104,6 +104,7 @@ CONFIG_SOC_CPU_WATCHPOINTS_NUM=4
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
CONFIG_SOC_CPU_HAS_PMA=y
CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
CONFIG_SOC_CPU_PMP_REGION_GRANULARITY=4
CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072
CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16
CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100
@@ -114,6 +115,7 @@ CONFIG_SOC_GDMA_SUPPORT_ETM=y
CONFIG_SOC_GDMA_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_ETM_GROUPS=1
CONFIG_SOC_ETM_CHANNELS_PER_GROUP=50
CONFIG_SOC_ETM_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_GPIO_PORT=1
CONFIG_SOC_GPIO_PIN_COUNT=31
CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
@@ -128,6 +130,7 @@ CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=8
CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x000000007FFFFF00
CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
CONFIG_SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP=y
CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
CONFIG_SOC_CLOCKOUT_HAS_SOURCE_GATE=y
@@ -136,7 +139,6 @@ CONFIG_SOC_RTCIO_PIN_COUNT=8
CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y
CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y
CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y
CONFIG_SOC_RTCIO_VALID_RTCIO_MASK=0xFF
CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
@@ -154,10 +156,12 @@ CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y
CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y
CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y
CONFIG_SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH=y
CONFIG_SOC_I2C_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_LP_I2C_NUM=1
CONFIG_SOC_LP_I2C_FIFO_LEN=16
CONFIG_SOC_I2S_NUM=1
CONFIG_SOC_I2S_HW_VERSION_2=y
CONFIG_SOC_I2S_SUPPORTS_ETM=y
CONFIG_SOC_I2S_SUPPORTS_XTAL=y
CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y
CONFIG_SOC_I2S_SUPPORTS_PCM=y
@@ -165,15 +169,19 @@ CONFIG_SOC_I2S_SUPPORTS_PDM=y
CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y
CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2
CONFIG_SOC_I2S_SUPPORTS_TDM=y
CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
CONFIG_SOC_LEDC_TIMER_NUM=4
CONFIG_SOC_LEDC_CHANNEL_NUM=6
CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20
CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_SUPPORTED=y
CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_RANGE_MAX=16
CONFIG_SOC_LEDC_FADE_PARAMS_BIT_WIDTH=10
CONFIG_SOC_LEDC_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
CONFIG_SOC_MMU_PAGE_SIZE_8KB_SUPPORTED=y
CONFIG_SOC_MMU_PERIPH_NUM=1
CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
CONFIG_SOC_MMU_DI_VADDR_SHARED=y
@@ -184,6 +192,7 @@ CONFIG_SOC_PCNT_UNITS_PER_GROUP=4
CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2
CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2
CONFIG_SOC_PCNT_SUPPORT_RUNTIME_THRES_UPDATE=y
CONFIG_SOC_PCNT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_RMT_GROUPS=1
CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2
CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2
@@ -198,6 +207,7 @@ CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y
CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y
CONFIG_SOC_RMT_SUPPORT_XTAL=y
CONFIG_SOC_RMT_SUPPORT_RC_FAST=y
CONFIG_SOC_RMT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MCPWM_GROUPS=1
CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3
CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3
@@ -211,12 +221,14 @@ CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3
CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y
CONFIG_SOC_MCPWM_SUPPORT_ETM=y
CONFIG_SOC_MCPWM_CAPTURE_CLK_FROM_GROUP=y
CONFIG_SOC_MCPWM_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_PARLIO_GROUPS=1
CONFIG_SOC_PARLIO_TX_UNITS_PER_GROUP=1
CONFIG_SOC_PARLIO_RX_UNITS_PER_GROUP=1
CONFIG_SOC_PARLIO_TX_UNIT_MAX_DATA_WIDTH=16
CONFIG_SOC_PARLIO_RX_UNIT_MAX_DATA_WIDTH=16
CONFIG_SOC_PARLIO_TX_RX_SHARE_INTERRUPT=y
CONFIG_SOC_PARLIO_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4
CONFIG_SOC_MPI_OPERATIONS_NUM=3
CONFIG_SOC_RSA_MAX_BIT_LEN=3072
@@ -239,6 +251,7 @@ CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
CONFIG_SOC_SPI_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F80M=y
CONFIG_SOC_SPI_SUPPORT_CLK_RC_FAST=y
@@ -278,11 +291,13 @@ CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2
CONFIG_SOC_TIMER_SUPPORT_ETM=y
CONFIG_SOC_TIMER_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MWDT_SUPPORT_XTAL=y
CONFIG_SOC_MWDT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_TWAI_CONTROLLER_NUM=2
CONFIG_SOC_TWAI_CLK_SUPPORT_XTAL=y
CONFIG_SOC_TWAI_BRP_MIN=2
CONFIG_SOC_TWAI_BRP_MAX=32768
CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y
CONFIG_SOC_TWAI_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
CONFIG_SOC_EFUSE_DIS_USB_JTAG=y
@@ -298,6 +313,8 @@ CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y
CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
CONFIG_SOC_APM_CTRL_FILTER_SUPPORTED=y
CONFIG_SOC_APM_LP_APM0_SUPPORTED=y
CONFIG_SOC_CRYPTO_DPA_PROTECTION_SUPPORTED=y
CONFIG_SOC_UART_NUM=3
CONFIG_SOC_UART_HP_NUM=2
@@ -310,6 +327,7 @@ CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
CONFIG_SOC_UART_HAS_LP_UART=y
CONFIG_SOC_UART_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
CONFIG_SOC_COEX_HW_PTI=y
CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
@@ -335,7 +353,12 @@ CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y
CONFIG_SOC_PM_CPU_RETENTION_BY_SW=y
CONFIG_SOC_PM_MODEM_RETENTION_BY_REGDMA=y
CONFIG_SOC_PM_RETENTION_HAS_CLOCK_BUG=y
CONFIG_SOC_EXT_MEM_CACHE_TAG_IN_CPU_DOMAIN=y
CONFIG_SOC_PM_PAU_LINK_NUM=4
CONFIG_SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR=y
CONFIG_SOC_PM_PAU_REGDMA_LINK_WIFIMAC=y
CONFIG_SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE=y
CONFIG_SOC_PM_RETENTION_MODULE_NUM=32
CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y
@@ -346,6 +369,8 @@ CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y
CONFIG_SOC_TEMPERATURE_SENSOR_INTR_SUPPORT=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_ETM=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN=y
CONFIG_SOC_RNG_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_WIFI_HW_TSF=y
CONFIG_SOC_WIFI_FTM_SUPPORT=y
@@ -354,6 +379,7 @@ CONFIG_SOC_WIFI_WAPI_SUPPORT=y
CONFIG_SOC_WIFI_CSI_SUPPORT=y
CONFIG_SOC_WIFI_MESH_SUPPORT=y
CONFIG_SOC_WIFI_HE_SUPPORT=y
CONFIG_SOC_WIFI_MAC_VERSION_NUM=2
CONFIG_SOC_BLE_SUPPORTED=y
CONFIG_SOC_BLE_MESH_SUPPORTED=y
CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
@@ -367,12 +393,15 @@ CONFIG_SOC_BLE_USE_WIFI_PWR_CLK_WORKAROUND=y
CONFIG_SOC_PHY_COMBO_MODULE=y
CONFIG_SOC_CAPS_NO_RESET_BY_ANA_BOD=y
CONFIG_SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR=y
CONFIG_SOC_LP_CORE_SUPPORT_ETM=y
CONFIG_SOC_DEBUG_HAVE_OCD_STUB_BINS=y
CONFIG_IDF_CMAKE=y
CONFIG_IDF_TOOLCHAIN="gcc"
CONFIG_IDF_TOOLCHAIN_GCC=y
CONFIG_IDF_TARGET_ARCH_RISCV=y
CONFIG_IDF_TARGET_ARCH="riscv"
CONFIG_IDF_TARGET="esp32c6"
CONFIG_IDF_INIT_VERSION="5.3.0"
CONFIG_IDF_INIT_VERSION="5.4.1"
CONFIG_IDF_TARGET_ESP32C6=y
CONFIG_IDF_FIRMWARE_CHIP_ID=0x000D
@@ -403,6 +432,10 @@ CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
#
# Log
#
# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
@@ -411,6 +444,14 @@ CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y
# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
CONFIG_BOOTLOADER_LOG_LEVEL=3
#
# Format
#
# CONFIG_BOOTLOADER_LOG_COLORS is not set
CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
# end of Format
# end of Log
#
# Serial Flash Configurations
#
@@ -480,6 +521,7 @@ CONFIG_ESP_ROM_HAS_SW_FLOAT=y
CONFIG_ESP_ROM_USB_OTG_NUM=-1
CONFIG_ESP_ROM_HAS_VERSION=y
CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y
CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
#
# Boot ROM Behavior
@@ -503,7 +545,6 @@ CONFIG_ESPTOOLPY_FLASHMODE="dio"
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set
# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
@@ -530,6 +571,7 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
CONFIG_PARTITION_TABLE_SINGLE_APP=y
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
# CONFIG_PARTITION_TABLE_CUSTOM is not set
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv"
@@ -553,6 +595,12 @@ CONFIG_ENV_GPIO_RANGE_MIN=0
CONFIG_ENV_GPIO_RANGE_MAX=30
CONFIG_ENV_GPIO_IN_RANGE_MAX=30
CONFIG_ENV_GPIO_OUT_RANGE_MAX=30
# CONFIG_USE_SPI_ETHERNET is not set
# end of Example Ethernet Configuration
#
# Example Ethernet Configuration
#
CONFIG_EXAMPLE_USE_SPI_ETHERNET=y
CONFIG_EXAMPLE_SPI_ETHERNETS_NUM=1
# CONFIG_EXAMPLE_USE_DM9051 is not set
@@ -580,6 +628,7 @@ CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
@@ -592,15 +641,19 @@ 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_NO_MERGE_CONSTANTS is not set
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
# CONFIG_COMPILER_DISABLE_GCC14_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
# CONFIG_COMPILER_STATIC_ANALYZER is not set
# end of Compiler options
#
@@ -646,6 +699,7 @@ CONFIG_BT_ALARM_MAX_NUM=50
# Legacy ADC Driver Configuration
#
# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
#
# Legacy ADC Calibration Configuration
@@ -658,42 +712,49 @@ CONFIG_BT_ALARM_MAX_NUM=50
# Legacy MCPWM Driver Configurations
#
# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy MCPWM Driver Configurations
#
# Legacy Timer Group Driver Configurations
#
# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Timer Group Driver Configurations
#
# Legacy RMT Driver Configurations
#
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy RMT Driver Configurations
#
# Legacy I2S Driver Configurations
#
# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2S Driver Configurations
#
# Legacy PCNT Driver Configurations
#
# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy PCNT Driver Configurations
#
# Legacy SDM Driver Configurations
#
# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy SDM Driver Configurations
#
# Legacy Temperature Sensor Driver Configurations
#
# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Temperature Sensor Driver Configurations
# end of Driver Configurations
@@ -733,6 +794,7 @@ CONFIG_ESP_COEX_ENABLED=y
CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set
# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
# CONFIG_ESP_COEX_GPIO_DEBUG is not set
# end of Wireless Coexistence
#
@@ -761,6 +823,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
#
# CONFIG_I2C_ISR_IRAM_SAFE is not set
# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
# end of ESP-Driver:I2C Configurations
#
@@ -871,6 +934,13 @@ CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub
#
# ESP HID
#
CONFIG_ESPHID_TASK_SIZE_BT=2048
CONFIG_ESPHID_TASK_SIZE_BLE=4096
# end of ESP HID
#
# ESP HTTP client
#
@@ -878,6 +948,7 @@ 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
CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000
# end of ESP HTTP client
#
@@ -890,6 +961,7 @@ 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
CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000
# end of HTTP Server
#
@@ -897,12 +969,14 @@ CONFIG_HTTPD_PURGE_BUF_LEN=32
#
# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set
# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set
CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000
# end of ESP HTTPS OTA
#
# ESP HTTPS server
#
# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000
# end of ESP HTTPS server
#
@@ -922,6 +996,12 @@ CONFIG_ESP_REV_MIN_FULL=0
#
CONFIG_ESP32C6_REV_MAX_FULL=99
CONFIG_ESP_REV_MAX_FULL=99
CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
#
# Maximum Supported ESP32-C6 eFuse Block Revision (eFuse Block Rev v0.99)
#
# end of Chip revision
#
@@ -959,7 +1039,7 @@ CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
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_RC32K is not set
# CONFIG_RTC_CLK_SRC_USE_DANGEROUS_RC32K_ALLOWED is not set
CONFIG_RTC_CLK_CAL_CYCLES=1024
# end of RTC Clock Config
@@ -990,44 +1070,33 @@ CONFIG_XTAL_FREQ_40=y
CONFIG_XTAL_FREQ=40
# end of Main XTAL Config
#
# Crypto DPA Protection
#
CONFIG_ESP_CRYPTO_DPA_PROTECTION_AT_STARTUP=y
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_MEDIUM is not set
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# end of Crypto DPA Protection
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
# ESP-Driver:LCD Controller Configurations
#
# CONFIG_LCD_ENABLE_DEBUG_LOG is not set
# end of LCD Peripheral Configuration
# end of LCD and Touch Panel
# end of ESP-Driver:LCD Controller Configurations
#
# ESP-MM: Memory Management Configurations
#
# end of ESP-MM: Memory Management Configurations
#
# ESP NETIF Adapter
#
CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
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_REPORT_DATA_TRAFFIC=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
# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
# end of ESP NETIF Adapter
#
@@ -1044,17 +1113,20 @@ CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
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_ENABLE_CERT_TEST 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
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
# end of PHY
#
# Power Management
#
# CONFIG_PM_ENABLE is not set
# CONFIG_PM_SLP_IRAM_OPT is not set
CONFIG_PM_SLP_DEFAULT_PARAMS_OPT=y
CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
# CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP is not set
@@ -1070,6 +1142,21 @@ CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
# end of ESP Ringbuf
#
# ESP Security Specific
#
#
# Crypto DPA Protection
#
CONFIG_ESP_CRYPTO_DPA_PROTECTION_AT_STARTUP=y
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_MEDIUM is not set
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# end of Crypto DPA Protection
# end of ESP Security Specific
#
# ESP System Settings
#
@@ -1091,6 +1178,7 @@ CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y
# Memory protection
#
CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
# CONFIG_ESP_SYSTEM_PMP_LP_CORE_RESERVE_MEM_EXECUTABLE is not set
# end of Memory protection
CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
@@ -1120,6 +1208,7 @@ CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
# CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS is not set
CONFIG_ESP_DEBUG_OCDAWARE=y
CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
@@ -1274,6 +1363,9 @@ 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_USE_STRFUNC_NONE=y
# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set
# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set
CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0
# CONFIG_FATFS_IMMEDIATE_FSYNC is not set
# CONFIG_FATFS_USE_LABEL is not set
@@ -1300,6 +1392,7 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
# 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_USE_TIMERS=y
CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
@@ -1334,6 +1427,11 @@ CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
# end of Port
#
# Extra
#
# end of Extra
CONFIG_FREERTOS_PORT=y
CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
@@ -1390,7 +1488,11 @@ CONFIG_IEEE802154_PENDING_TABLE_SIZE=20
# end of IEEE 802.15.4
#
# Log output
# Log
#
#
# Log Level
#
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
@@ -1399,15 +1501,33 @@ 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_EQUALS_DEFAULT is not set
CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y
# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
CONFIG_LOG_MAXIMUM_LEVEL=3
CONFIG_LOG_MAXIMUM_LEVEL=4
#
# Level Settings
#
# CONFIG_LOG_MASTER_LEVEL is not set
CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
# end of Level Settings
# end of Log Level
#
# Format
#
CONFIG_LOG_COLORS=y
CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
# end of Log output
# end of Format
# end of Log
#
# LWIP
@@ -1446,6 +1566,8 @@ 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_DOES_ACD_CHECK is not set
# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
# 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
@@ -1460,6 +1582,7 @@ CONFIG_LWIP_DHCPS=y
CONFIG_LWIP_DHCPS_LEASE_UNIT=60
CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
CONFIG_LWIP_DHCPS_ADD_DNS=y
# end of DHCP server
# CONFIG_LWIP_AUTOIP is not set
@@ -1517,9 +1640,12 @@ 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=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_IPV6_ND6_NUM_PREFIXES=5
CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3
CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10
# CONFIG_LWIP_PPP_SUPPORT is not set
# CONFIG_LWIP_SLIP_SUPPORT is not set
#
@@ -1549,8 +1675,10 @@ CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
#
# DNS
#
CONFIG_LWIP_DNS_MAX_HOST_IP=1
CONFIG_LWIP_DNS_MAX_SERVERS=3
# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
# end of DNS
CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
@@ -1574,6 +1702,8 @@ CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
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_DNS_EXT_RESOLVE_NONE=y
# CONFIG_LWIP_HOOK_DNS_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
@@ -1638,6 +1768,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y
# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
CONFIG_MBEDTLS_SHA512_C=y
# CONFIG_MBEDTLS_SHA3_C is not set
CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set
@@ -1691,6 +1822,8 @@ CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
# end of Certificates
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
# CONFIG_MBEDTLS_DHM_C is not set
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
@@ -1714,6 +1847,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_HKDF_C is not set
# CONFIG_MBEDTLS_THREADING_C is not set
CONFIG_MBEDTLS_ERROR_STRINGS=y
CONFIG_MBEDTLS_FS_IO=y
# end of mbedTLS
#
@@ -1762,25 +1896,10 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
# CONFIG_OPENTHREAD_ENABLED is not set
#
# Thread Operational Dataset
# OpenThread Spinel
#
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 Spinel
# end of OpenThread
#
@@ -1789,6 +1908,7 @@ CONFIG_OPENTHREAD_XTAL_ACCURACY=130
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y
# end of Protocomm
#
@@ -1827,7 +1947,9 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y
#
# Features here require specific hardware (READ DOCS FIRST!)
#
# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
# end of Optional and Experimental Features (READ DOCS FIRST)
# end of Main Flash configuration
@@ -1953,6 +2075,8 @@ CONFIG_VFS_MAX_COUNT=8
#
CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
# end of Host File System I/O (Semihosting)
CONFIG_VFS_INITIALIZE_DEV_NULL=y
# end of Virtual file system
#
@@ -1968,7 +2092,6 @@ CONFIG_WL_SECTOR_SIZE=4096
#
CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION 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
@@ -2127,8 +2250,6 @@ CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
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_SOFTAP_BEACON_MAX_LEN=752
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
code --profile Embed-Esp ${SCRIPT_DIR}
+23 -5
View File
@@ -11,11 +11,11 @@
#include "Processor.hpp"
#include "PwmExpanderPca9685.hpp"
#include "StepperDrv8833.hpp"
#include "Task.hpp"
#include "esp_event.h"
#include "esp_log.h"
#include "sdkconfig.h"
#include "stepperDrv.hpp"
#include "stepperMotor.hpp"
#include "watchFace.hpp"
#include <array>
@@ -181,6 +181,10 @@ constexpr bool DoFullTurns = false;
constexpr bool DoTurnSteps = false;
constexpr bool DoTurnProfiles = true;
void AllmostDone(uint8_t newIdx) {
ESP_LOGW(TAG, "Done callback");
}
void testMovementTask() {
esp_log_level_set(TAG, ESP_LOG_DEBUG);
esp_log_level_set("STP", ESP_LOG_DEBUG);
@@ -207,7 +211,7 @@ void testMovementTask() {
OutputPort motorSleep(GPIO_NUM_15, GpioPort::Logic::Inverted);
StepperMotor stepper(stepperCfg, stepperDriver, initSens);
WatchMotor watch(stepper, motorSleep);
WatchMotor watch(stepper, motorSleep, AllmostDone);
///
/// Full Turns with full steps
@@ -273,14 +277,14 @@ void testMovementTask() {
ESP_LOGI(TAG, "Move to each index multiple times");
illum.flashAll(BLUE);
for (size_t i = 1; i <= 2 * 3; i++) {
watch.moveTo(3 * i);
watch.moveTo(3 * i, 0, 0, 1, 1);
ESP_LOGD(TAG, "Position is %3d / %.2f", stepper.getQuanted(), stepper.getScaledPos() * 6);
}
ESP_LOGI(TAG, "Move to each index multiple times");
illum.flashAll(BLUE);
for (size_t i = 1; i <= 6 * 3; i++) {
watch.moveTo(i);
watch.moveTo(i, 0, 0, 1, 1);
ESP_LOGD(TAG, "Position is %3d / %.2f", stepper.getQuanted(), stepper.getScaledPos() * 6);
}
}
@@ -297,7 +301,21 @@ void testMovementTask() {
illum.flashAll(BLUE);
int steps[3]{4, 2, 0};
for (size_t j = 0; j < 3; j++) {
watch.moveTo(steps[j], i);
watch.moveTo(steps[j], i, 0, 1, 1);
ESP_LOGI(TAG, "Last position is %3d / %.2f", stepper.getQuanted(), stepper.getScaledPos() * 6);
fos::Task::delayMs(1000);
}
}
for (size_t i = ProfileGenerator::Smooth; i < ProfileGenerator::NumProfiles; i++) {
// for (size_t i = ProfileGenerator::JumpIn; i < ProfileGenerator::NumProfiles; i++) { // If only part is needed
ESP_LOGI(TAG, "Running Profile %d ", i);
ESP_LOGD(TAG, "Fist Position is %3d / %.2f / Micro %d", stepper.getQuanted(), stepper.getScaledPos() * 6, stepper.getSubPos());
fos::Task::delayMs(1000);
illum.flashAll(BLUE);
int steps[3]{4, 2, 0};
for (size_t j = 0; j < 3; j++) {
watch.moveTo(steps[j], i, 0, 3, 3);
ESP_LOGI(TAG, "Last position is %3d / %.2f", stepper.getQuanted(), stepper.getScaledPos() * 6);
fos::Task::delayMs(1000);
}
+4 -19
View File
@@ -1,26 +1,11 @@
cmake_minimum_required(VERSION 3.16)
include(../../core/test/unitOnHost/test_core.cmake)
set(DEF_UTESTDIR "uTest")
set(DEF_SRCDIR "src")
set(DEF_INCLUDEDIR "include")
# use just host compilers for this one
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_GENERATOR "Ninja")
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
include(test_core.cmake)
UnitTestSetup()
enable_testing()
project(UnitTests)
find_package(doctest REQUIRED PATHS "/mingw64/lib/cmake")
# target_link_libraries(${PROJECT_NAME} PRIVATE doctest::doctest)
addSubDirs_ofRoot("${CMAKE_CURRENT_LIST_DIR}/../../components")
addSubDirs_ofRoot("${CMAKE_CURRENT_LIST_DIR}/../../core/components")
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../../core/test/unitOnHost/hwMock" hwMock)
-28
View File
@@ -1,28 +0,0 @@
# Unit Testing - Software
In contrast to *test*-directory this module demonstrates how unit tests can also be run on host.
These unit tests aim to test freestanding software modules with more convenient methods and tools
## Setup
make sure you have following packages installed on your host syste
- gnu compiler
- cmake
- generator
- doctest-dev
## Build and test code
* Start some terminal in *uTest*-directory that has access to all needed tools (i.e. on windows a mingw environment or WSL)
Run following commands
```sh
# run cmake configuration
cmake -S . -B build
# run cmake build
cmake --build build
# run tests
./build/<testprog>
# run all tests with
cd build && ctest
```
-43
View File
@@ -1,43 +0,0 @@
function(addSubDirs_ofRoot anchorPath)
message("scanning: ${anchorPath}")
file(GLOB targetModules RELATIVE "${anchorPath}" "${anchorPath}/*")
foreach(module ${targetModules})
message("checking: ${module}")
get_filename_component(moduleName ${module} NAME)
set(modulePath "${anchorPath}/${moduleName}")
if (NOT IS_DIRECTORY "${modulePath}")
# skip files
continue()
endif()
if (${moduleName} MATCHES "^_.*")
# skip ignored component
continue()
endif()
if(EXISTS "${modulePath}/${DEF_UTESTDIR}")
message("Found unit-test: ${moduleName}")
add_subdirectory("${modulePath}/${DEF_UTESTDIR}" ${moduleName})
endif()
endforeach()
endfunction()
macro(unitTestsFrame)
if (CMAKE_TESTING_ENABLED)
# get_filename_component(moduleName "${CMAKE_CURRENT_LIST_DIR}/.." NAME)
file(GLOB_RECURSE targetSources "../${DEF_SRCDIR}/*.cpp" "../${DEF_SRCDIR}/*.c")
add_library(${moduleName} ${targetSources})
target_include_directories(${moduleName} PUBLIC "../${DEF_INCLUDEDIR}")
set(moduleTestName "${moduleName}Test")
file(GLOB_RECURSE testSource "*.cpp")
add_executable(${moduleTestName} ${testSource})
target_link_libraries(${moduleTestName} PRIVATE ${moduleName} doctest::doctest)
target_include_directories(${moduleTestName} PRIVATE "../${DEF_SRCDIR}")
add_test (TEST-${moduleName} ${moduleTestName})
# gtest_discover_tests(${moduleTestName}
# PROPERTIES TIMEOUT 30 LABELS ${moduleName} LABELS "all"
# )
endif()
endmacro()
+2 -1
View File
@@ -5,7 +5,8 @@ cmake_minimum_required(VERSION 3.16)
#
set(EXTRA_COMPONENT_DIRS
"../../components"
# "../../managed_components"
"../../core/components"
"../../core/managed_components"
)
# Set the components to include the tests for.
+1 -33
View File
@@ -1,35 +1,3 @@
# Unit Testing
Unit Test based on unity-library [Unity](https://github.com/ThrowTheSwitch/Unity).
* _Assertions_ (`TEST_ASSERT` and similar) are used when writing the test cases. See [the reference](https://github.com/ThrowTheSwitch/Unity/blob/master/docs/UnityAssertionsReference.md) for more information about assertions.
* `UNITY_BEGIN()` and `UNITY_END()` macros allow Unity to count the number of tests which have passed or failed, and display the summary.
In addition to features of Unity, _test registration_ feature of ESP-IDF is used. This feature works when unit test functions are declared using `TEST_CASE` macro. Such functions from all the object files in the program are automatically collected into a list, and run-time facilities are provided to run functions from this list.
Note testable components have a *test* subdirectory which is included in the *test project*
When the main application project is compiled, tests are not included.
Test project includes the tests by setting `TEST_COMPONENTS` variable in the project makefile.
## Build and flash production code
* Start an ESP-IDF-Terminal
* Run `idf.py -p PORT flash monitor` in the current directory (`unit_test`).
* Observe the output: a list of random numbers and their mean value.
To exit the serial monitor, type ``Ctrl-]``.
## Build and flash test code
* Start an ESP-IDF-Terminal
* Enter `test` directory (`unit_test/test`), and run `idf.py -p PORT flash monitor`.
To exit the serial monitor, type ``Ctrl-]``.
* Observe the output: results of test case execution.
This is the test menu, which is launched by `unity_run_menu` function in the test project. It allows running the tests in a few ways:
* Run specific test by its index: type the number and press ENTER.
* Run a group of tests with a certain tag: type the tag, including square brackets, and press ENTER.
* nRu all tests except the ones with a certain tag: press `!`, then type the tag, including the square brackets, then press ENTER.
* Run test with a specific name: type the name of the test, including quotes, and press ENTER.
* Run all the tests: press `*` and then ENTER.
see Redme in `Project/core/test/unitOnTarget/ReadMe.md`
+5 -4
View File
@@ -1,9 +1,10 @@
dependencies:
idf:
component_hash: null
source:
type: idf
version: 5.3.0
manifest_hash: c4f4ec05313d427eb56c633f78ce213e553379725bf2af3c511665f930571beb
version: 5.4.1
direct_dependencies:
- idf
manifest_hash: 00d8efc8e59d9f2cc6a576ada310175e19e6f7506dd0b59211849f065dadccae
target: esp32c6
version: 1.0.0
version: 2.0.0
+7
View File
@@ -0,0 +1,7 @@
# Run Exportport Script first
build:
idf.py build
run:
idf.py -p /dev/ttyUSB0 flash monitor
+173 -48
View File
@@ -1,6 +1,6 @@
#
# Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.3.0 Project Configuration
# Espressif IoT Development Framework (ESP-IDF) 5.4.1 Project Configuration
#
CONFIG_SOC_ADC_SUPPORTED=y
CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
@@ -104,6 +104,7 @@ CONFIG_SOC_CPU_WATCHPOINTS_NUM=4
CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
CONFIG_SOC_CPU_HAS_PMA=y
CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
CONFIG_SOC_CPU_PMP_REGION_GRANULARITY=4
CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072
CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16
CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100
@@ -114,6 +115,7 @@ CONFIG_SOC_GDMA_SUPPORT_ETM=y
CONFIG_SOC_GDMA_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_ETM_GROUPS=1
CONFIG_SOC_ETM_CHANNELS_PER_GROUP=50
CONFIG_SOC_ETM_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_GPIO_PORT=1
CONFIG_SOC_GPIO_PIN_COUNT=31
CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
@@ -128,6 +130,7 @@ CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=8
CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x000000007FFFFF00
CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
CONFIG_SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP=y
CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
CONFIG_SOC_CLOCKOUT_HAS_SOURCE_GATE=y
@@ -136,7 +139,6 @@ CONFIG_SOC_RTCIO_PIN_COUNT=8
CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y
CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y
CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y
CONFIG_SOC_RTCIO_VALID_RTCIO_MASK=0xFF
CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
@@ -154,10 +156,12 @@ CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y
CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y
CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y
CONFIG_SOC_I2C_SLAVE_SUPPORT_SLAVE_UNMATCH=y
CONFIG_SOC_I2C_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_LP_I2C_NUM=1
CONFIG_SOC_LP_I2C_FIFO_LEN=16
CONFIG_SOC_I2S_NUM=1
CONFIG_SOC_I2S_HW_VERSION_2=y
CONFIG_SOC_I2S_SUPPORTS_ETM=y
CONFIG_SOC_I2S_SUPPORTS_XTAL=y
CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y
CONFIG_SOC_I2S_SUPPORTS_PCM=y
@@ -165,15 +169,19 @@ CONFIG_SOC_I2S_SUPPORTS_PDM=y
CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y
CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2
CONFIG_SOC_I2S_SUPPORTS_TDM=y
CONFIG_SOC_I2S_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
CONFIG_SOC_LEDC_TIMER_NUM=4
CONFIG_SOC_LEDC_CHANNEL_NUM=6
CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20
CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_SUPPORTED=y
CONFIG_SOC_LEDC_GAMMA_CURVE_FADE_RANGE_MAX=16
CONFIG_SOC_LEDC_FADE_PARAMS_BIT_WIDTH=10
CONFIG_SOC_LEDC_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
CONFIG_SOC_MMU_PAGE_SIZE_8KB_SUPPORTED=y
CONFIG_SOC_MMU_PERIPH_NUM=1
CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
CONFIG_SOC_MMU_DI_VADDR_SHARED=y
@@ -184,6 +192,7 @@ CONFIG_SOC_PCNT_UNITS_PER_GROUP=4
CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2
CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2
CONFIG_SOC_PCNT_SUPPORT_RUNTIME_THRES_UPDATE=y
CONFIG_SOC_PCNT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_RMT_GROUPS=1
CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2
CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2
@@ -198,6 +207,7 @@ CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y
CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y
CONFIG_SOC_RMT_SUPPORT_XTAL=y
CONFIG_SOC_RMT_SUPPORT_RC_FAST=y
CONFIG_SOC_RMT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MCPWM_GROUPS=1
CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3
CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3
@@ -211,12 +221,14 @@ CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3
CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y
CONFIG_SOC_MCPWM_SUPPORT_ETM=y
CONFIG_SOC_MCPWM_CAPTURE_CLK_FROM_GROUP=y
CONFIG_SOC_MCPWM_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_PARLIO_GROUPS=1
CONFIG_SOC_PARLIO_TX_UNITS_PER_GROUP=1
CONFIG_SOC_PARLIO_RX_UNITS_PER_GROUP=1
CONFIG_SOC_PARLIO_TX_UNIT_MAX_DATA_WIDTH=16
CONFIG_SOC_PARLIO_RX_UNIT_MAX_DATA_WIDTH=16
CONFIG_SOC_PARLIO_TX_RX_SHARE_INTERRUPT=y
CONFIG_SOC_PARLIO_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4
CONFIG_SOC_MPI_OPERATIONS_NUM=3
CONFIG_SOC_RSA_MAX_BIT_LEN=3072
@@ -239,6 +251,7 @@ CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
CONFIG_SOC_SPI_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F80M=y
CONFIG_SOC_SPI_SUPPORT_CLK_RC_FAST=y
@@ -278,11 +291,13 @@ CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2
CONFIG_SOC_TIMER_SUPPORT_ETM=y
CONFIG_SOC_TIMER_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_MWDT_SUPPORT_XTAL=y
CONFIG_SOC_MWDT_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_TWAI_CONTROLLER_NUM=2
CONFIG_SOC_TWAI_CLK_SUPPORT_XTAL=y
CONFIG_SOC_TWAI_BRP_MIN=2
CONFIG_SOC_TWAI_BRP_MAX=32768
CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y
CONFIG_SOC_TWAI_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
CONFIG_SOC_EFUSE_DIS_USB_JTAG=y
@@ -298,6 +313,8 @@ CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y
CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
CONFIG_SOC_APM_CTRL_FILTER_SUPPORTED=y
CONFIG_SOC_APM_LP_APM0_SUPPORTED=y
CONFIG_SOC_CRYPTO_DPA_PROTECTION_SUPPORTED=y
CONFIG_SOC_UART_NUM=3
CONFIG_SOC_UART_HP_NUM=2
@@ -310,6 +327,7 @@ CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
CONFIG_SOC_UART_HAS_LP_UART=y
CONFIG_SOC_UART_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
CONFIG_SOC_COEX_HW_PTI=y
CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
@@ -335,7 +353,12 @@ CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y
CONFIG_SOC_PM_CPU_RETENTION_BY_SW=y
CONFIG_SOC_PM_MODEM_RETENTION_BY_REGDMA=y
CONFIG_SOC_PM_RETENTION_HAS_CLOCK_BUG=y
CONFIG_SOC_EXT_MEM_CACHE_TAG_IN_CPU_DOMAIN=y
CONFIG_SOC_PM_PAU_LINK_NUM=4
CONFIG_SOC_PM_PAU_REGDMA_LINK_MULTI_ADDR=y
CONFIG_SOC_PM_PAU_REGDMA_LINK_WIFIMAC=y
CONFIG_SOC_PM_PAU_REGDMA_UPDATE_CACHE_BEFORE_WAIT_COMPARE=y
CONFIG_SOC_PM_RETENTION_MODULE_NUM=32
CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
CONFIG_SOC_MODEM_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y
@@ -346,6 +369,8 @@ CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y
CONFIG_SOC_TEMPERATURE_SENSOR_INTR_SUPPORT=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_ETM=y
CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_SLEEP_RETENTION=y
CONFIG_SOC_TEMPERATURE_SENSOR_UNDER_PD_TOP_DOMAIN=y
CONFIG_SOC_RNG_CLOCK_IS_INDEPENDENT=y
CONFIG_SOC_WIFI_HW_TSF=y
CONFIG_SOC_WIFI_FTM_SUPPORT=y
@@ -354,6 +379,7 @@ CONFIG_SOC_WIFI_WAPI_SUPPORT=y
CONFIG_SOC_WIFI_CSI_SUPPORT=y
CONFIG_SOC_WIFI_MESH_SUPPORT=y
CONFIG_SOC_WIFI_HE_SUPPORT=y
CONFIG_SOC_WIFI_MAC_VERSION_NUM=2
CONFIG_SOC_BLE_SUPPORTED=y
CONFIG_SOC_BLE_MESH_SUPPORTED=y
CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
@@ -367,8 +393,11 @@ CONFIG_SOC_BLE_USE_WIFI_PWR_CLK_WORKAROUND=y
CONFIG_SOC_PHY_COMBO_MODULE=y
CONFIG_SOC_CAPS_NO_RESET_BY_ANA_BOD=y
CONFIG_SOC_LP_CORE_SINGLE_INTERRUPT_VECTOR=y
CONFIG_SOC_LP_CORE_SUPPORT_ETM=y
CONFIG_SOC_DEBUG_HAVE_OCD_STUB_BINS=y
CONFIG_IDF_CMAKE=y
CONFIG_IDF_TOOLCHAIN="gcc"
CONFIG_IDF_TOOLCHAIN_GCC=y
CONFIG_IDF_TARGET_ARCH_RISCV=y
CONFIG_IDF_TARGET_ARCH="riscv"
CONFIG_IDF_TARGET="esp32c6"
@@ -403,6 +432,10 @@ CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
#
# Log
#
# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
@@ -411,6 +444,14 @@ CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y
# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
CONFIG_BOOTLOADER_LOG_LEVEL=3
#
# Format
#
# CONFIG_BOOTLOADER_LOG_COLORS is not set
CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
# end of Format
# end of Log
#
# Serial Flash Configurations
#
@@ -480,6 +521,7 @@ CONFIG_ESP_ROM_HAS_SW_FLOAT=y
CONFIG_ESP_ROM_USB_OTG_NUM=-1
CONFIG_ESP_ROM_HAS_VERSION=y
CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y
CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
#
# Boot ROM Behavior
@@ -503,7 +545,6 @@ CONFIG_ESPTOOLPY_FLASHMODE="dio"
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set
# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
@@ -530,6 +571,7 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
CONFIG_PARTITION_TABLE_SINGLE_APP=y
# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
# CONFIG_PARTITION_TABLE_TWO_OTA is not set
# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
# CONFIG_PARTITION_TABLE_CUSTOM is not set
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv"
@@ -537,6 +579,16 @@ CONFIG_PARTITION_TABLE_OFFSET=0x8000
CONFIG_PARTITION_TABLE_MD5=y
# end of Partition Table
#
# Example Ethernet Configuration
#
CONFIG_ENV_GPIO_RANGE_MIN=0
CONFIG_ENV_GPIO_RANGE_MAX=30
CONFIG_ENV_GPIO_IN_RANGE_MAX=30
CONFIG_ENV_GPIO_OUT_RANGE_MAX=30
# CONFIG_USE_SPI_ETHERNET is not set
# end of Example Ethernet Configuration
#
# Compiler options
#
@@ -547,6 +599,7 @@ CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
@@ -559,15 +612,19 @@ 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_NO_MERGE_CONSTANTS is not set
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
# CONFIG_COMPILER_DISABLE_GCC14_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
# CONFIG_COMPILER_STATIC_ANALYZER is not set
# end of Compiler options
#
@@ -613,6 +670,7 @@ CONFIG_BT_ALARM_MAX_NUM=50
# Legacy ADC Driver Configuration
#
# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
#
# Legacy ADC Calibration Configuration
@@ -625,42 +683,49 @@ CONFIG_BT_ALARM_MAX_NUM=50
# Legacy MCPWM Driver Configurations
#
# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_MCPWM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy MCPWM Driver Configurations
#
# Legacy Timer Group Driver Configurations
#
# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Timer Group Driver Configurations
#
# Legacy RMT Driver Configurations
#
# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_RMT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy RMT Driver Configurations
#
# Legacy I2S Driver Configurations
#
# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_I2S_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy I2S Driver Configurations
#
# Legacy PCNT Driver Configurations
#
# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_PCNT_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy PCNT Driver Configurations
#
# Legacy SDM Driver Configurations
#
# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_SDM_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy SDM Driver Configurations
#
# Legacy Temperature Sensor Driver Configurations
#
# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
# end of Legacy Temperature Sensor Driver Configurations
# end of Driver Configurations
@@ -700,6 +765,7 @@ CONFIG_ESP_COEX_ENABLED=y
CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set
# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
# CONFIG_ESP_COEX_GPIO_DEBUG is not set
# end of Wireless Coexistence
#
@@ -728,6 +794,7 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
#
# CONFIG_I2C_ISR_IRAM_SAFE is not set
# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
# end of ESP-Driver:I2C Configurations
#
@@ -838,6 +905,13 @@ CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub
#
# ESP HID
#
CONFIG_ESPHID_TASK_SIZE_BT=2048
CONFIG_ESPHID_TASK_SIZE_BLE=4096
# end of ESP HID
#
# ESP HTTP client
#
@@ -845,6 +919,7 @@ 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
CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000
# end of ESP HTTP client
#
@@ -857,6 +932,7 @@ 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
CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000
# end of HTTP Server
#
@@ -864,12 +940,14 @@ CONFIG_HTTPD_PURGE_BUF_LEN=32
#
# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set
# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set
CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000
# end of ESP HTTPS OTA
#
# ESP HTTPS server
#
# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set
CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000
# end of ESP HTTPS server
#
@@ -889,6 +967,12 @@ CONFIG_ESP_REV_MIN_FULL=0
#
CONFIG_ESP32C6_REV_MAX_FULL=99
CONFIG_ESP_REV_MAX_FULL=99
CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
#
# Maximum Supported ESP32-C6 eFuse Block Revision (eFuse Block Rev v0.99)
#
# end of Chip revision
#
@@ -926,7 +1010,7 @@ CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
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_RC32K is not set
# CONFIG_RTC_CLK_SRC_USE_DANGEROUS_RC32K_ALLOWED is not set
CONFIG_RTC_CLK_CAL_CYCLES=1024
# end of RTC Clock Config
@@ -957,44 +1041,33 @@ CONFIG_XTAL_FREQ_40=y
CONFIG_XTAL_FREQ=40
# end of Main XTAL Config
#
# Crypto DPA Protection
#
CONFIG_ESP_CRYPTO_DPA_PROTECTION_AT_STARTUP=y
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_MEDIUM is not set
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# end of Crypto DPA Protection
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
# ESP-Driver:LCD Controller Configurations
#
# CONFIG_LCD_ENABLE_DEBUG_LOG is not set
# end of LCD Peripheral Configuration
# end of LCD and Touch Panel
# end of ESP-Driver:LCD Controller Configurations
#
# ESP-MM: Memory Management Configurations
#
# end of ESP-MM: Memory Management Configurations
#
# ESP NETIF Adapter
#
CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
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_REPORT_DATA_TRAFFIC=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
# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
# end of ESP NETIF Adapter
#
@@ -1011,17 +1084,20 @@ CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
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_ENABLE_CERT_TEST 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
# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
# end of PHY
#
# Power Management
#
# CONFIG_PM_ENABLE is not set
# CONFIG_PM_SLP_IRAM_OPT is not set
CONFIG_PM_SLP_DEFAULT_PARAMS_OPT=y
CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
# CONFIG_PM_POWER_DOWN_PERIPHERAL_IN_LIGHT_SLEEP is not set
@@ -1037,6 +1113,21 @@ CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y
# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
# end of ESP Ringbuf
#
# ESP Security Specific
#
#
# Crypto DPA Protection
#
CONFIG_ESP_CRYPTO_DPA_PROTECTION_AT_STARTUP=y
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_LOW=y
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_MEDIUM is not set
# CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL_HIGH is not set
CONFIG_ESP_CRYPTO_DPA_PROTECTION_LEVEL=1
# end of Crypto DPA Protection
# end of ESP Security Specific
#
# ESP System Settings
#
@@ -1058,6 +1149,7 @@ CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y
# Memory protection
#
CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
# CONFIG_ESP_SYSTEM_PMP_LP_CORE_RESERVE_MEM_EXECUTABLE is not set
# end of Memory protection
CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
@@ -1083,6 +1175,7 @@ CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
# CONFIG_ESP_TASK_WDT_EN is not set
# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
# CONFIG_ESP_DEBUG_INCLUDE_OCD_STUB_BINS is not set
CONFIG_ESP_DEBUG_OCDAWARE=y
CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
@@ -1237,6 +1330,9 @@ 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_USE_STRFUNC_NONE=y
# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set
# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set
CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0
# CONFIG_FATFS_IMMEDIATE_FSYNC is not set
# CONFIG_FATFS_USE_LABEL is not set
@@ -1263,6 +1359,7 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
# 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_USE_TIMERS=y
CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
@@ -1297,6 +1394,11 @@ CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
# end of Port
#
# Extra
#
# end of Extra
CONFIG_FREERTOS_PORT=y
CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
@@ -1353,7 +1455,11 @@ CONFIG_IEEE802154_PENDING_TABLE_SIZE=20
# end of IEEE 802.15.4
#
# Log output
# Log
#
#
# Log Level
#
# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
@@ -1366,11 +1472,29 @@ 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
#
# Level Settings
#
# CONFIG_LOG_MASTER_LEVEL is not set
CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
# end of Level Settings
# end of Log Level
#
# Format
#
CONFIG_LOG_COLORS=y
CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
# end of Log output
# end of Format
# end of Log
#
# LWIP
@@ -1409,6 +1533,8 @@ 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_DOES_ACD_CHECK is not set
# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
# 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
@@ -1423,6 +1549,7 @@ CONFIG_LWIP_DHCPS=y
CONFIG_LWIP_DHCPS_LEASE_UNIT=60
CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
CONFIG_LWIP_DHCPS_ADD_DNS=y
# end of DHCP server
# CONFIG_LWIP_AUTOIP is not set
@@ -1480,9 +1607,12 @@ 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=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_IPV6_ND6_NUM_PREFIXES=5
CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3
CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10
# CONFIG_LWIP_PPP_SUPPORT is not set
# CONFIG_LWIP_SLIP_SUPPORT is not set
#
@@ -1512,8 +1642,10 @@ CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
#
# DNS
#
CONFIG_LWIP_DNS_MAX_HOST_IP=1
CONFIG_LWIP_DNS_MAX_SERVERS=3
# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
# end of DNS
CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
@@ -1537,6 +1669,8 @@ CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
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_DNS_EXT_RESOLVE_NONE=y
# CONFIG_LWIP_HOOK_DNS_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
@@ -1601,6 +1735,7 @@ CONFIG_MBEDTLS_HAVE_TIME=y
# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
CONFIG_MBEDTLS_SHA512_C=y
# CONFIG_MBEDTLS_SHA3_C is not set
CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set
@@ -1654,6 +1789,8 @@ CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
# end of Certificates
CONFIG_MBEDTLS_ECP_C=y
CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
# CONFIG_MBEDTLS_DHM_C is not set
CONFIG_MBEDTLS_ECDH_C=y
CONFIG_MBEDTLS_ECDSA_C=y
@@ -1677,6 +1814,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_HKDF_C is not set
# CONFIG_MBEDTLS_THREADING_C is not set
CONFIG_MBEDTLS_ERROR_STRINGS=y
CONFIG_MBEDTLS_FS_IO=y
# end of mbedTLS
#
@@ -1725,25 +1863,10 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
# CONFIG_OPENTHREAD_ENABLED is not set
#
# Thread Operational Dataset
# OpenThread Spinel
#
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 Spinel
# end of OpenThread
#
@@ -1752,6 +1875,7 @@ CONFIG_OPENTHREAD_XTAL_ACCURACY=130
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y
# end of Protocomm
#
@@ -1790,7 +1914,9 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y
#
# Features here require specific hardware (READ DOCS FIRST!)
#
# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
# end of Optional and Experimental Features (READ DOCS FIRST)
# end of Main Flash configuration
@@ -1916,6 +2042,8 @@ CONFIG_VFS_MAX_COUNT=8
#
CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
# end of Host File System I/O (Semihosting)
CONFIG_VFS_INITIALIZE_DEV_NULL=y
# end of Virtual file system
#
@@ -1931,7 +2059,6 @@ CONFIG_WL_SECTOR_SIZE=4096
#
CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION 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
@@ -2085,8 +2212,6 @@ CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
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_SOFTAP_BEACON_MAX_LEN=752