ESPixelStick Firmware
Firmware for the ESPixelStick
Loading...
Searching...
No Matches
FPPDiscovery.h
Go to the documentation of this file.
1#pragma once
2/*
3* c_FPPDiscovery.h
4*
5* Project: ESPixelStick - An ESP8266 / ESP32 and E1.31 based pixel driver
6* Copyright (c) 2018, 2025 Shelby Merrick
7* http://www.forkineye.com
8*
9* This program is provided free for you to use in any way that you wish,
10* subject to the laws and regulations where you are using it. Due diligence
11* is strongly suggested before using this code. Please give credit where due.
12*
13* The Author makes no warranty of any kind, express or implied, with regard
14* to this program or the documentation contained in this document. The
15* Author shall not be liable in any event for incidental or consequential
16* damages in connection with, or arising out of, the furnishing, performance
17* or use of these programs.
18*
19*/
20
21#include "ESPixelStick.h"
22#include "input/InputMgr.hpp"
24
25#ifdef ESP32
26# include <WiFi.h>
27# include <AsyncUDP.h>
28#elif defined (ESP8266)
29# include <ESPAsyncUDP.h>
30# include <ESP8266WiFi.h>
31# include <ESP8266WiFiMulti.h>
32#else
33# error Platform not supported
34#endif
35
36#include <ESPAsyncWebServer.h>
37
39{
40private:
41#ifdef ARDUINO_ARCH_ESP32
42 SemaphoreHandle_t xSemaphore = NULL;
43#else
44 volatile bool ProcessingWebRequest = false;
45#endif // def ARDUINO_ARCH_ESP32
46public:
47 void Take();
48 void Give();
49};
50
52{
53private:
54
55 AsyncUDP udp;
56 void ProcessReceivedUdpPacket (AsyncUDPPacket & _packet);
57 void ProcessSyncPacket (uint8_t action, String filename, float seconds_elapsed);
58 void ProcessBlankPacket ();
59 bool PlayingFile ();
60
61 bool inFileUpload = false;
62 bool writeFailed = false;
63 bool hasBeenInitialized = false;
64 bool IsEnabled = false;
65 bool BlankOnStop = false;
66 bool StopInProgress = false;
67 bool FppSyncOverride = false;
70 IPAddress FppRemoteIp = IPAddress (uint32_t(0));
72 const IPAddress MulticastAddress = IPAddress (239, 70, 80, 80);
74
75 void GetStatusJSON (JsonObject& jsonResponse, bool advanced);
76 void BuildFseqResponse (String fname, c_FileMgr::FileId fseq, String & resp);
77 void StopPlaying ();
78 void StartPlaying (String & FileName, float SecondsElapsed);
80 void GetDriverName (String & Name) { Name = "FPPD"; }
81
83 {
85 uint32_t pktCommand;
95 uint32_t pktBlank;
96 uint32_t pktPing;
97 uint32_t pktPlugin;
98 uint32_t pktFPPCommand;
99 uint32_t pktHdrError;
100 uint32_t pktUnknown;
101 };
103
104# define SYNC_FILE_SEQ 0
105# define SYNC_FILE_MEDIA 1
106
107# define CTRL_PKT_CMD 0 // deprecated in favor of FPP Commands
108# define CTRL_PKT_SYNC 1
109# define CTRL_PKT_EVENT 2 // deprecated in favor of FPP Commands
110# define CTRL_PKT_BLANK 3
111# define CTRL_PKT_PING 4
112# define CTRL_PKT_PLUGIN 5
113# define CTRL_PKT_FPPCOMMAND 6
114
115#define FPP_DEBUG_ENABLED
117{
118 uint32_t ProcessFPPJson = 0;
119 uint32_t ProcessFPPDJson = 0;
120 uint32_t CmdGetFPPstatus = 0;
121 uint32_t CmdGetSysInfoJSON = 0;
122 uint32_t CmdGetHostname = 0;
123 uint32_t CmdGetConfig = 0;
124 uint32_t CmdNotFound = 0;
125};
127 IPAddress ipBcast;
129# define TIME_TO_WAIT 30
130
131public:
133 virtual ~c_FPPDiscovery() {}
134
135 void begin ();
136 void Poll ();
137 void ProcessFPPJson (AsyncWebServerRequest* request);
138 void ProcessFPPDJson (AsyncWebServerRequest* request);
139 void ProcessGET (AsyncWebServerRequest* request);
140 void ProcessPOST (AsyncWebServerRequest* request);
141 void ProcessFile (AsyncWebServerRequest* request, String filename, uint32_t index, uint8_t* data, uint32_t len, bool final, uint32_t contentLength = 0);
142 void ProcessBody (AsyncWebServerRequest* request, uint8_t* data, uint32_t len, uint32_t index, uint32_t total);
143 void sendPingPacket (IPAddress destination);
144 void PlayFile (String & FileToPlay);
145 void Enable (void);
146 void Disable (void);
147 void GetStatus (JsonObject& jsonStatus);
148 void NetworkStateChanged (bool NewNetworkState);
149 void SetOperationalState (bool ActiveFlag);
150 bool SetConfig (JsonObject& jsonConfig);
151 void GetConfig (JsonObject& jsonConfig);
152
155 void GenerateFppSyncMsg (uint8_t Action, const String & FileName, uint32_t CurrentFrame, const float & ElpsedTime);
156 void GetSysInfoJSON (JsonObject& jsonResponse);
157 bool PlayingAfile () {return PlayingFile();}
158
159# define SYNC_PKT_START 0
160# define SYNC_PKT_STOP 1
161# define SYNC_PKT_SYNC 2
162# define SYNC_PKT_OPEN 3
163
164};
165
c_FPPDiscovery FPPDiscovery
Definition FPPDiscovery.cpp:1575
Definition FPPDiscovery.h:52
bool inFileUpload
Definition FPPDiscovery.h:61
void begin()
Definition FPPDiscovery.cpp:85
char ConfiguredFileToPlay[65]
Definition FPPDiscovery.h:68
IPAddress FppRemoteIp
Definition FPPDiscovery.h:70
void ProcessBody(AsyncWebServerRequest *request, uint8_t *data, uint32_t len, uint32_t index, uint32_t total)
Definition FPPDiscovery.cpp:1034
void GetConfig(JsonObject &jsonConfig)
Definition FPPDiscovery.cpp:227
void Poll()
Definition FPPDiscovery.cpp:1549
void sendPingPacket(IPAddress destination)
Definition FPPDiscovery.cpp:569
void ProcessPOST(AsyncWebServerRequest *request)
Definition FPPDiscovery.cpp:888
bool StopInProgress
Definition FPPDiscovery.h:66
void ProcessFile(AsyncWebServerRequest *request, String filename, uint32_t index, uint8_t *data, uint32_t len, bool final, uint32_t contentLength=0)
Definition FPPDiscovery.cpp:935
virtual ~c_FPPDiscovery()
Definition FPPDiscovery.h:133
void ProcessGET(AsyncWebServerRequest *request)
Definition FPPDiscovery.cpp:786
void ProcessSyncPacket(uint8_t action, String filename, float seconds_elapsed)
Definition FPPDiscovery.cpp:448
SystemDebugStats_t SystemDebugStats
Definition FPPDiscovery.h:126
AsyncUDP udp
Definition FPPDiscovery.h:55
void ProcessBlankPacket()
Definition FPPDiscovery.cpp:545
void StartPlaying(String &FileName, float SecondsElapsed)
Definition FPPDiscovery.cpp:1406
c_InputFPPRemote * InputFPPRemote
Definition FPPDiscovery.h:71
bool PlayingAfile()
Definition FPPDiscovery.h:157
void ProcessFPPDJson(AsyncWebServerRequest *request)
Definition FPPDiscovery.cpp:1312
void GetSysInfoJSON(JsonObject &jsonResponse)
Definition FPPDiscovery.cpp:1092
bool FppSyncOverride
Definition FPPDiscovery.h:67
const IPAddress MulticastAddress
Definition FPPDiscovery.h:72
void GetStatus(JsonObject &jsonStatus)
Definition FPPDiscovery.cpp:240
void GenerateFppSyncMsg(uint8_t Action, const String &FileName, uint32_t CurrentFrame, const float &ElpsedTime)
Definition FPPDiscovery.cpp:1466
void GetDriverName(String &Name)
Definition FPPDiscovery.h:80
MultiSyncStats_t MultiSyncStats
Definition FPPDiscovery.h:102
void ProcessReceivedUdpPacket(AsyncUDPPacket &_packet)
Definition FPPDiscovery.cpp:296
bool IsEnabled
Definition FPPDiscovery.h:64
void ProcessFPPJson(AsyncWebServerRequest *request)
Definition FPPDiscovery.cpp:1204
time_t LastFppMasterMessageRcvTime
Definition FPPDiscovery.h:128
void SetInputFPPRemotePlayFile(c_InputFPPRemote *value)
Definition FPPDiscovery.cpp:1509
bool SetConfig(JsonObject &jsonConfig)
Definition FPPDiscovery.cpp:1392
void NetworkStateChanged(bool NewNetworkState)
Definition FPPDiscovery.cpp:102
bool PlayingFile()
Definition FPPDiscovery.cpp:558
bool hasBeenInitialized
Definition FPPDiscovery.h:63
void Disable(void)
Definition FPPDiscovery.cpp:193
void ForgetInputFPPRemotePlayFile()
Definition FPPDiscovery.cpp:1520
void GetStatusJSON(JsonObject &jsonResponse, bool advanced)
Definition FPPDiscovery.cpp:1128
c_FPPSemaphore FPPSemaphore
Definition FPPDiscovery.h:73
void PlayFile(String &FileToPlay)
char UploadFileName[65]
Definition FPPDiscovery.h:69
bool BlankOnStop
Definition FPPDiscovery.h:65
void BuildFseqResponse(String fname, c_FileMgr::FileId fseq, String &resp)
Definition FPPDiscovery.cpp:649
bool writeFailed
Definition FPPDiscovery.h:62
c_FPPDiscovery()
Definition FPPDiscovery.cpp:74
void SetOperationalState(bool ActiveFlag)
Definition FPPDiscovery.cpp:216
IPAddress ipBcast
Definition FPPDiscovery.h:127
bool AllowedToPlayRemoteFile()
Definition FPPDiscovery.cpp:1531
void Enable(void)
Definition FPPDiscovery.cpp:205
void StopPlaying()
Definition FPPDiscovery.cpp:1449
Definition FPPDiscovery.h:39
void Give()
Definition FPPDiscovery.cpp:63
volatile bool ProcessingWebRequest
Definition FPPDiscovery.h:44
void Take()
Definition FPPDiscovery.cpp:42
uint32_t FileId
Definition FileMgr.hpp:50
Definition InputFPPRemote.h:26
char filename[250]
Definition fseq.h:7
float seconds_elapsed
Definition fseq.h:6
Definition FPPDiscovery.h:83
uint32_t pktSyncSeqStop
Definition FPPDiscovery.h:89
uint32_t pktFPPCommand
Definition FPPDiscovery.h:98
uint32_t pktSyncSeqSync
Definition FPPDiscovery.h:90
uint32_t pktSyncMedOpen
Definition FPPDiscovery.h:91
uint32_t pktSyncSeqOpen
Definition FPPDiscovery.h:87
uint32_t pktSyncMedStart
Definition FPPDiscovery.h:92
uint32_t pktLastCommand
Definition FPPDiscovery.h:86
uint32_t pktUnknown
Definition FPPDiscovery.h:100
time_t lastReceiveTime
Definition FPPDiscovery.h:84
uint32_t pktPlugin
Definition FPPDiscovery.h:97
uint32_t pktPing
Definition FPPDiscovery.h:96
uint32_t pktSyncMedStop
Definition FPPDiscovery.h:93
uint32_t pktSyncSeqStart
Definition FPPDiscovery.h:88
uint32_t pktHdrError
Definition FPPDiscovery.h:99
uint32_t pktCommand
Definition FPPDiscovery.h:85
uint32_t pktBlank
Definition FPPDiscovery.h:95
uint32_t pktSyncMedSync
Definition FPPDiscovery.h:94
Definition FPPDiscovery.h:117
uint32_t CmdGetHostname
Definition FPPDiscovery.h:122
uint32_t ProcessFPPDJson
Definition FPPDiscovery.h:119
uint32_t CmdNotFound
Definition FPPDiscovery.h:124
uint32_t CmdGetConfig
Definition FPPDiscovery.h:123
uint32_t CmdGetSysInfoJSON
Definition FPPDiscovery.h:121
uint32_t ProcessFPPJson
Definition FPPDiscovery.h:118
uint32_t CmdGetFPPstatus
Definition FPPDiscovery.h:120